diff --git a/.api-extractor.json b/.api-extractor.json index 83263724..eba8acef 100644 --- a/.api-extractor.json +++ b/.api-extractor.json @@ -1,9 +1,8 @@ { "$schema": "https://developer.microsoft.com/json-schemas/api-extractor/v7/api-extractor.schema.json", "mainEntryPointFilePath": "types/lib/src/human.d.ts", - "bundledPackages": ["@tensorflow/tfjs-core", "@tensorflow/tfjs-data", "@tensorflow/tfjs-layers", "@tensorflow/tfjs-converter"], "compiler": { - "skipLibCheck": false + "skipLibCheck": true }, "newlineKind": "lf", "dtsRollup": { diff --git a/.eslintrc.json b/.eslintrc.json index 24297b09..f442c62e 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,5 +1,9 @@ { - "globals": {}, + "globals": { + }, + "rules": { + "@typescript-eslint/no-require-imports":"off" + }, "overrides": [ { "files": ["**/*.ts"], @@ -34,6 +38,8 @@ "@typescript-eslint/no-unsafe-call":"off", "@typescript-eslint/no-unsafe-member-access":"off", "@typescript-eslint/no-unsafe-return":"off", + "@typescript-eslint/no-require-imports":"off", + "@typescript-eslint/no-empty-object-type":"off", "@typescript-eslint/non-nullable-type-assertion-style":"off", "@typescript-eslint/prefer-for-of":"off", "@typescript-eslint/prefer-nullish-coalescing":"off", @@ -155,9 +161,7 @@ "node": false, "es2021": false }, - "extends": [ - "plugin:json/recommended" - ] + "extends": [] }, { "files": ["**/*.html"], @@ -173,6 +177,7 @@ "extends": ["plugin:@html-eslint/recommended"], "rules": { "@html-eslint/element-newline":"off", + "@html-eslint/attrs-newline":"off", "@html-eslint/indent": ["error", 2] } }, diff --git a/.npmrc b/.npmrc index 08021228..0dff8d29 100644 --- a/.npmrc +++ b/.npmrc @@ -2,3 +2,4 @@ force=true omit=dev legacy-peer-deps=true strict-peer-dependencies=false +node-options='--no-deprecation' diff --git a/CHANGELOG.md b/CHANGELOG.md index 4bc11b8b..6c8bd329 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # @vladmandic/human - Version: **3.2.2** + Version: **3.3.0** Description: **Human: AI-powered 3D Face Detection & Rotation Tracking, Face Description & Recognition, Body Pose Tracking, 3D Hand & Finger Tracking, Iris Analysis, Age & Gender & Emotion Prediction, Gesture Recognition** Author: **Vladimir Mandic ** @@ -11,6 +11,7 @@ ### **HEAD -> main** 2024/04/17 mandic00@live.com +- release rebuild - fix flazeface tensor scale and update build platform ### **3.2.2** 2024/04/17 mandic00@live.com diff --git a/demo/faceid/index.js b/demo/faceid/index.js index a05fb4f5..b26a3333 100644 --- a/demo/faceid/index.js +++ b/demo/faceid/index.js @@ -4,6 +4,369 @@ author: ' */ -import*as S from"../../dist/human.esm.js";var l,L="human",f="person",v=(...a)=>console.log("indexdb",...a);async function h(){return l?!0:new Promise(a=>{let n=indexedDB.open(L,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,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,...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 F(){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.draw(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",F),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 = { + // user configuration for human, used to fine-tune behavior + cacheSensitivity: 0, + modelBasePath: "../../models", + filter: { enabled: true, equalization: true }, + // lets run with histogram equilizer + debug: true, + face: { + enabled: true, + detector: { rotation: true, return: true, mask: false }, + // return tensor is used to get detected face image + description: { enabled: true }, + // default model for face descriptor extraction is faceres + // mobilefacenet: { enabled: true, modelPath: 'https://vladmandic.github.io/human-models/models/mobilefacenet.json' }, // alternative model + // insightface: { enabled: true, modelPath: 'https://vladmandic.github.io/insightface/models/insightface-mobilenet-swish.json' }, // alternative model + iris: { enabled: true }, + // needed to determine gaze direction + emotion: { enabled: false }, + // not needed + antispoof: { enabled: true }, + // enable optional antispoof module + liveness: { enabled: true } + // enable optional liveness module + }, + body: { enabled: false }, + hand: { enabled: false }, + object: { enabled: false }, + gesture: { enabled: true } + // parses face and iris gestures +}; +var matchOptions = { order: 2, multiplier: 25, min: 0.2, max: 0.8 }; +var options = { + minConfidence: 0.6, + // overal face confidence for box, face, gender, real, live + minSize: 224, + // min input to face descriptor model before degradation + maxTime: 3e4, + // max time before giving up + blinkMin: 10, + // minimum duration of a valid blink + blinkMax: 800, + // maximum duration of a valid blink + threshold: 0.5, + // minimum similarity + distanceMin: 0.4, + // closest that face is allowed to be to the cammera in cm + distanceMax: 1, + // farthest that face is allowed to be to the cammera in cm + mask: humanConfig.face.detector.mask, + rotation: humanConfig.face.detector.rotation, + ...matchOptions +}; +var ok = { + // must meet all rules + 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 }, + // total time while waiting for valid face + detectFPS: { status: void 0, val: 0 }, + // mark detection fps performance + drawFPS: { status: void 0, val: 0 } + // mark redraw fps performance +}; +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 = { + // internal timers for blink start/end/duration + 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 = { + // grab instances of dom objects so we dont have to look them up later + 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.draw(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 cb1d7b8c..08da857b 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, 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 ...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.draw(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": "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", + "names": ["log", "db"] } diff --git a/demo/nodejs/node.js b/demo/nodejs/node.js index 9b50261c..495c1e2d 100644 --- a/demo/nodejs/node.js +++ b/demo/nodejs/node.js @@ -92,7 +92,7 @@ async function detect(input) { try { result = await human.detect(tensor, myConfig); } catch (err) { - log.error('caught'); + log.error('caught', err); } // dispose image tensor as we no longer need it diff --git a/demo/segmentation/index.html b/demo/segmentation/index.html index 0567d9e5..021035fb 100644 --- a/demo/segmentation/index.html +++ b/demo/segmentation/index.html @@ -20,7 +20,7 @@ body { font-size: 1rem; font-family: "CenturyGothic", "Segoe UI", sans-serif; font-variant: small-caps; width: -webkit-fill-available; height: 100%; background: black; color: white; overflow: hidden; margin: 0; } select { font-size: 1rem; font-family: "CenturyGothic", "Segoe UI", sans-serif; font-variant: small-caps; background: gray; color: white; border: none; } - + diff --git a/demo/tracker/index.js b/demo/tracker/index.js index 00f362dc..fc85d705 100644 --- a/demo/tracker/index.js +++ b/demo/tracker/index.js @@ -4,7 +4,1353 @@ author: ' */ -import*as U from"../../dist/human.esm.js";var J=Object.defineProperty,z=Object.getOwnPropertyNames,w=(l,y)=>J(l,"name",{value:y,configurable:!0}),S=(l,y)=>function(){return y||(0,l[z(l)[0]])((y={exports:{}}).exports,y),y.exports},q=S({"node_modules/.pnpm/uuid@3.2.1/node_modules/uuid/lib/rng-browser.js"(l,y){var f=typeof crypto!="undefined"&&crypto.getRandomValues.bind(crypto)||typeof msCrypto!="undefined"&&msCrypto.getRandomValues.bind(msCrypto);f?(c=new Uint8Array(16),y.exports=w(function(){return f(c),c},"whatwgRNG")):(s=new Array(16),y.exports=w(function(){for(var g=0,h;g<16;g++)g&3||(h=Math.random()*4294967296),s[g]=h>>>((g&3)<<3)&255;return s},"mathRNG"));var c,s}}),X=S({"node_modules/.pnpm/uuid@3.2.1/node_modules/uuid/lib/bytesToUuid.js"(l,y){var f=[];for(s=0;s<256;++s)f[s]=(s+256).toString(16).substr(1);function c(i,g){var h=g||0,e=f;return e[i[h++]]+e[i[h++]]+e[i[h++]]+e[i[h++]]+"-"+e[i[h++]]+e[i[h++]]+"-"+e[i[h++]]+e[i[h++]]+"-"+e[i[h++]]+e[i[h++]]+"-"+e[i[h++]]+e[i[h++]]+e[i[h++]]+e[i[h++]]+e[i[h++]]+e[i[h++]]}w(c,"bytesToUuid"),y.exports=c;var s}}),j=S({"node_modules/.pnpm/uuid@3.2.1/node_modules/uuid/v4.js"(l,y){var f=q(),c=X();function s(i,g,h){var e=g&&h||0;typeof i=="string"&&(g=i==="binary"?new Array(16):null,i=null),i=i||{};var n=i.random||(i.rng||f)();if(n[6]=n[6]&15|64,n[8]=n[8]&63|128,g)for(var t=0;t<16;++t)g[e+t]=n[t];return g||c(n)}w(s,"v4"),y.exports=s}}),C=S({"utils.js"(l){l.isDetectionTooLarge=(c,s)=>c.w>=s;var y=w((c,s)=>{let i=c.x-c.w/2,g=c.x+c.w/2,h=c.y-c.h/2,e=c.y+c.h/2;return s.x>=i&&s.x<=g&&s.y>=h&&s.y<=e},"isInsideArea");l.isInsideArea=y,l.isInsideSomeAreas=(c,s)=>c.some(g=>y(g,s)),l.ignoreObjectsNotToDetect=(c,s)=>c.filter(i=>s.indexOf(i.name)>-1);var f=w(c=>({x0:c.x-c.w/2,y0:c.y-c.h/2,x1:c.x+c.w/2,y1:c.y+c.h/2}),"getRectangleEdges");l.getRectangleEdges=f,l.iouAreas=(c,s)=>{var i=f(c),g=f(s),h=Math.max(i.x0,g.x0),e=Math.max(i.y0,g.y0),n=Math.min(i.x1,g.x1),t=Math.min(i.y1,g.y1);if(n-h<=0||t-e<=0)return 0;{let r=c.w*c.h,a=s.w*s.h,o=(n-h)*(t-e),m=r+a-o;return o/m}},l.computeVelocityVector=(c,s,i)=>({dx:(s.x-c.x)/i,dy:(s.y-c.y)/i}),l.computeBearingIn360=function(c,s){var i=Math.atan(c/s)/(Math.PI/180);return i>0?s>0?i:180+i:c>0?180+i:360+i}}}),Y=S({"ItemTracked.js"(l){var y=j(),f=C().computeBearingIn360,c=C().computeVelocityVector;l.ITEM_HISTORY_MAX_LENGTH=15;var s=0;l.ItemTracked=function(i,g,h,e){var n=h,t={};return t.available=!0,t.delete=!1,t.fastDelete=e,t.frameUnmatchedLeftBeforeDying=h,t.isZombie=!1,t.appearFrame=g,t.disappearFrame=null,t.disappearArea={},t.nameCount={},t.nameCount[i.name]=1,t.x=i.x,t.y=i.y,t.w=i.w,t.h=i.h,t.name=i.name,t.confidence=i.confidence,t.itemHistory=[],t.itemHistory.push({x:i.x,y:i.y,w:i.w,h:i.h,confidence:i.confidence}),t.itemHistory.length>=l.ITEM_HISTORY_MAX_LENGTH&&t.itemHistory.shift(),t.velocity={dx:0,dy:0},t.nbTimeMatched=1,t.id=y(),t.idDisplay=s,s++,t.update=function(r,a){this.disappearFrame&&(this.disappearFrame=null,this.disappearArea={}),this.isZombie=!1,this.nbTimeMatched+=1,this.x=r.x,this.y=r.y,this.w=r.w,this.h=r.h,this.confidence=r.confidence,this.itemHistory.push({x:this.x,y:this.y,w:this.w,h:this.h,confidence:this.confidence}),t.itemHistory.length>=l.ITEM_HISTORY_MAX_LENGTH&&t.itemHistory.shift(),this.name=r.name,this.nameCount[r.name]?this.nameCount[r.name]++:this.nameCount[r.name]=1,this.frameUnmatchedLeftBeforeDying=n,this.velocity=this.updateVelocityVector()},t.makeAvailable=function(){return this.available=!0,this},t.makeUnavailable=function(){return this.available=!1,this},t.countDown=function(r){this.disappearFrame===null&&(this.disappearFrame=r,this.disappearArea={x:this.x,y:this.y,w:this.w,h:this.h}),this.frameUnmatchedLeftBeforeDying--,this.isZombie=!0,this.fastDelete&&this.nbTimeMatched<=1&&(this.frameUnmatchedLeftBeforeDying=-1)},t.updateTheoricalPositionAndSize=function(){this.itemHistory.push({x:this.x,y:this.y,w:this.w,h:this.h,confidence:this.confidence}),t.itemHistory.length>=l.ITEM_HISTORY_MAX_LENGTH&&t.itemHistory.shift(),this.x=this.x+this.velocity.dx,this.y=this.y+this.velocity.dy},t.predictNextPosition=function(){return{x:this.x+this.velocity.dx,y:this.y+this.velocity.dy,w:this.w,h:this.h}},t.isDead=function(){return this.frameUnmatchedLeftBeforeDying<0},t.updateVelocityVector=function(){if(l.ITEM_HISTORY_MAX_LENGTH<=2)return{dx:void 0,dy:void 0};if(this.itemHistory.length<=l.ITEM_HISTORY_MAX_LENGTH){let r=this.itemHistory[0],a=this.itemHistory[this.itemHistory.length-1];return c(r,a,this.itemHistory.length)}else{let r=this.itemHistory[this.itemHistory.length-l.ITEM_HISTORY_MAX_LENGTH],a=this.itemHistory[this.itemHistory.length-1];return c(r,a,l.ITEM_HISTORY_MAX_LENGTH)}},t.getMostlyMatchedName=function(){var r=0,a="";return Object.keys(this.nameCount).map(o=>{this.nameCount[o]>r&&(a=o,r=this.nameCount[o])}),a},t.toJSONDebug=function(r=!0){return{id:this.id,idDisplay:this.idDisplay,x:r?parseInt(this.x,10):this.x,y:r?parseInt(this.y,10):this.y,w:r?parseInt(this.w,10):this.w,h:r?parseInt(this.h,10):this.h,confidence:Math.round(this.confidence*100)/100,bearing:parseInt(f(this.velocity.dx,-this.velocity.dy)),name:this.getMostlyMatchedName(),isZombie:this.isZombie,appearFrame:this.appearFrame,disappearFrame:this.disappearFrame}},t.toJSON=function(r=!0){return{id:this.idDisplay,x:r?parseInt(this.x,10):this.x,y:r?parseInt(this.y,10):this.y,w:r?parseInt(this.w,10):this.w,h:r?parseInt(this.h,10):this.h,confidence:Math.round(this.confidence*100)/100,bearing:parseInt(f(this.velocity.dx,-this.velocity.dy),10),name:this.getMostlyMatchedName(),isZombie:this.isZombie}},t.toMOT=function(r){return`${r},${this.idDisplay},${this.x-this.w/2},${this.y-this.h/2},${this.w},${this.h},${this.confidence/100},-1,-1,-1`},t.toJSONGenericInfo=function(){return{id:this.id,idDisplay:this.idDisplay,appearFrame:this.appearFrame,disappearFrame:this.disappearFrame,disappearArea:this.disappearArea,nbActiveFrame:this.disappearFrame-this.appearFrame,name:this.getMostlyMatchedName()}},t},l.reset=function(){s=0}}}),W=S({"lib/kdTree-min.js"(l){(function(y,f){typeof define=="function"&&define.amd?define(["exports"],f):f(typeof l=="object"?l:y)})(l,function(y){function f(i,g,h){this.obj=i,this.left=null,this.right=null,this.parent=h,this.dimension=g}w(f,"Node");function c(i,g,h){var e=this;function n(r,a,o){var m=a%h.length,u,d;return r.length===0?null:r.length===1?new f(r[0],m,o):(r.sort(function(I,p){return I[h[m]]-p[h[m]]}),u=Math.floor(r.length/2),d=new f(r[u],m,o),d.left=n(r.slice(0,u),a+1,d),d.right=n(r.slice(u+1),a+1,d),d)}w(n,"buildTree");function t(r){e.root=r;function a(o){o.left&&(o.left.parent=o,a(o.left)),o.right&&(o.right.parent=o,a(o.right))}w(a,"restoreParent"),a(e.root)}w(t,"loadTree"),Array.isArray(i)?this.root=n(i,0,null):t(i,g,h),this.toJSON=function(r){r||(r=this.root);var a=new f(r.obj,r.dimension,null);return r.left&&(a.left=e.toJSON(r.left)),r.right&&(a.right=e.toJSON(r.right)),a},this.insert=function(r){function a(d,I){if(d===null)return I;var p=h[d.dimension];return r[p]a&&d.pop()}for(w(L,"saveNode"),E=0;E0&&(this.content[0]=g,this.sinkDown(0)),i},peek:function(){return this.content[0]},remove:function(i){for(var g=this.content.length,h=0;h0;){var h=Math.floor((i+1)/2)-1,e=this.content[h];if(this.scoreFunction(g)t&&(t=e[a].length);r=t>r?t:r;var o=[];for(a=0;au.length;)u.push(n);o.push(u)}return o},s.prototype.compute=function(e,n){n=n||{},n.padValue=n.padValue||c,this.C=this.pad_matrix(e,n.padValue),this.n=this.C.length,this.original_length=e.length,this.original_width=e[0].length;for(var t=[];t.length=this.n?7:4},s.prototype.__step4=function(){for(var e=!1,n=-1,t=-1,r=-1;!e;){var a=this.__find_a_zero();if(n=a[0],t=a[1],n<0)return 6;if(this.marked[n][t]=2,r=this.__find_star_in_row(n),r>=0)t=r,this.row_covered[n]=!0,this.col_covered[t]=!1;else return this.Z0_r=n,this.Z0_c=t,5}},s.prototype.__step5=function(){var e=0;this.path[e][0]=this.Z0_r,this.path[e][1]=this.Z0_c;for(var n=!1;!n;){var t=this.__find_star_in_col(this.path[e][1]);if(t>=0?(e++,this.path[e][0]=t,this.path[e][1]=this.path[e-1][1]):n=!0,!n){var r=this.__find_prime_in_row(this.path[e][0]);e++,this.path[e][0]=this.path[e-1][0],this.path[e][1]=r}}return this.__convert_path(this.path,e),this.__clear_covers(),this.__erase_primes(),3},s.prototype.__step6=function(){for(var e=this.__find_smallest(),n=0;nthis.C[n][t]&&(e=this.C[n][t]);return e},s.prototype.__find_a_zero=function(){for(var e=0;ea&&(a=e[t][r]);n=w(function(u){return a-u},"inversion_function")}var o=[];for(t=0;t=n[r])&&(n[r]=a)}var o="";for(t=0;t1-e.iouLimit&&(u=e.distanceLimit+1),u},"iouDistance"),e={unMatchedFramesTolerance:5,iouLimit:.05,fastDelete:!0,distanceFunc:h,distanceLimit:1e4,matchingAlgorithm:"kdTree"},n=new Map,t=new Map,r=!1;l.computeDistance=h,l.updateTrackedItemsWithNewFrame=function(a,o){var m=new c(Array.from(n.values()),e.distanceFunc,["x","y","w","h"]),u=new c(a,e.distanceFunc,["x","y","w","h"]);if(n.size===0)a.forEach(function(v){var b=new f(v,o,e.unMatchedFramesTolerance,e.fastDelete);n.set(b.id,b),m.insert(b)});else{var d=new Array(a.length);if(d.fill(!1),a.length>0)if(e.matchingAlgorithm==="munkres"){var I=Array.from(n.keys()),p=Array.from(n.values()).map(v=>{var b=v.predictNextPosition();return a.map(k=>e.distanceFunc(b,k))});n.forEach(function(v){v.makeAvailable()}),i(p).filter(v=>p[v[0]][v[1]]<=e.distanceLimit).forEach(v=>{var b=n.get(I[v[0]]),k=a[v[1]];d[v[1]]={idDisplay:b.idDisplay},b.makeUnavailable().update(k,o)}),d.forEach(function(v,b){if(!v&&Math.min(...p.map(T=>T[b]))>e.distanceLimit){var k=f(a[b],o,e.unMatchedFramesTolerance,e.fastDelete);n.set(k.id,k),k.makeUnavailable(),p.push(a.map(T=>e.distanceFunc(k,T)))}})}else if(e.matchingAlgorithm==="kdTree")n.forEach(function(v){var b=v.predictNextPosition();v.makeAvailable();var k=u.nearest(b,1,e.distanceLimit)[0],T=u.nearest(v,1,e.distanceLimit)[0],O=u.nearest(b,2,e.distanceLimit);if(k){var x=a.indexOf(k[0]);if(!d[x]){d[x]={idDisplay:v.idDisplay};var E=a[x];n.get(v.id).makeUnavailable().update(E,o)}}});else throw`Unknown matching algorithm "${e.matchingAlgorithm}"`;else g&&console.log("[Tracker] Nothing detected for frame n\xBA"+o),n.forEach(function(v){v.makeAvailable()});e.matchingAlgorithm==="kdTree"&&n.size>0&&(m=new c(Array.from(n.values()),e.distanceFunc,["x","y","w","h"]),d.forEach(function(v,b){if(!v){var k=m.nearest(a[b],1,e.distanceLimit)[0];if(!k){var T=f(a[b],o,e.unMatchedFramesTolerance,e.fastDelete);n.set(T.id,T),m.insert(T),T.makeUnavailable()}}})),n.forEach(function(v){v.available&&(v.countDown(o),v.updateTheoricalPositionAndSize(),v.isDead()&&(n.delete(v.id),m.remove(v),r&&t.set(v.id,v)))})}},l.reset=function(){n=new Map,t=new Map,y.reset()},l.setParams=function(a){Object.keys(a).forEach(o=>{e[o]=a[o]})},l.enableKeepInMemory=function(){r=!0},l.disableKeepInMemory=function(){r=!1},l.getJSONOfTrackedItems=function(a=!0){return Array.from(n.values()).map(function(o){return o.toJSON(a)})},l.getJSONDebugOfTrackedItems=function(a=!0){return Array.from(n.values()).map(function(o){return o.toJSONDebug(a)})},l.getTrackedItemsInMOTFormat=function(a){return Array.from(n.values()).map(function(o){return o.toMOT(a)})},l.getAllTrackedItems=function(){return t},l.getJSONOfAllTrackedItems=function(){return Array.from(t.values()).map(function(a){return a.toJSONGenericInfo()})}}}),D=Q();var R={debug:!0,backend:"webgl",modelBasePath:"https://vladmandic.github.io/human-models/models",filter:{enabled:!0,equalization:!1,flip:!1},face:{enabled:!0,detector:{rotation:!1,maxDetected:10,minConfidence:.3},mesh:{enabled:!0},attention:{enabled:!1},iris:{enabled:!1},description:{enabled:!1},emotion:{enabled:!1},antispoof:{enabled:!1},liveness:{enabled:!1}},body:{enabled:!1,maxDetected:6,modelPath:"movenet-multipose.json"},hand:{enabled:!1},object:{enabled:!1,maxDetected:10},segmentation:{enabled:!1},gesture:{enabled:!1}},F={unMatchedFramesTolerance:100,iouLimit:.05,fastDelete:!1,distanceLimit:1e4,matchingAlgorithm:"kdTree"},M=new U.Human(R),_={video:document.getElementById("video"),canvas:document.getElementById("canvas"),log:document.getElementById("log"),fps:document.getElementById("status"),tracker:document.getElementById("tracker"),interpolation:document.getElementById("interpolation"),config:document.getElementById("config"),ctx:document.getElementById("canvas").getContext("2d")},A={detect:0,draw:0,tensors:0,start:0},N={detectFPS:0,drawFPS:0,frames:0,averageMs:0},H=(...l)=>{_.log.innerText+=l.join(" ")+` -`,console.log(...l)},B=l=>_.fps.innerText=l;async function V(){if(!_.video.paused&&_.video.readyState>=2){A.start===0&&(A.start=M.now()),await M.detect(_.video,R);let l=M.tf.memory().numTensors;l-A.tensors!==0&&H("allocated tensors:",l-A.tensors),A.tensors=l,N.detectFPS=Math.round(1e3*1e3/(M.now()-A.detect))/1e3,N.frames++,N.averageMs=Math.round(1e3*(M.now()-A.start)/N.frames)/1e3}A.detect=M.now(),requestAnimationFrame(V)}function Z(){if(!_.video.paused&&_.video.readyState>=2){let y=_.interpolation.checked?M.next(M.result):M.result,f=[];M.config.face.enabled?f=y.face:M.config.body.enabled?f=y.body:M.config.object.enabled?f=y.object:H("unknown object type");let c=[];if(_.tracker.checked){let s=f.map(i=>({x:i.box[0]+i.box[2]/2,y:i.box[1]+i.box[3]/2,w:i.box[2],h:i.box[3],name:i.label||(M.config.face.enabled?"face":"body"),confidence:i.score}));D.updateTrackedItemsWithNewFrame(s,N.frames),c=D.getJSONOfTrackedItems(!0)}M.draw.canvas(_.video,_.canvas);for(let s=0;sl.preventDefault()),document.body.addEventListener("dragleave",l=>l.preventDefault()),document.body.addEventListener("dragover",l=>l.preventDefault()),document.body.addEventListener("drop",async l=>{var f,c;l.preventDefault(),l.dataTransfer&&(l.dataTransfer.dropEffect="copy");let y=(c=(f=l.dataTransfer)==null?void 0:f.files)==null?void 0:c[0];y&&await P(y),H(_.video.readyState)}),document.getElementById("inputvideo").onchange=async l=>{var f,c;l.preventDefault();let y=(c=(f=l.target)==null?void 0:f.files)==null?void 0:c[0];y&&await P(y)},_.config.onchange=()=>{F.distanceLimit=document.getElementById("distanceLimit").valueAsNumber,F.iouLimit=document.getElementById("iouLimit").valueAsNumber,F.unMatchedFramesTolerance=document.getElementById("unMatchedFramesTolerance").valueAsNumber,F.unMatchedFramesTolerance=document.getElementById("unMatchedFramesTolerance").valueAsNumber,F.matchingAlgorithm=document.getElementById("matchingAlgorithm-kdTree").checked?"kdTree":"munkres",D.setParams(F),document.getElementById("keepInMemory").checked?D.enableKeepInMemory():D.disableKeepInMemory(),D.reset(),H("tracker config change",JSON.stringify(F)),R.face.enabled=document.getElementById("box-face").checked,R.body.enabled=document.getElementById("box-body").checked,R.object.enabled=document.getElementById("box-object").checked},_.tracker.onchange=l=>{H("tracker",l.target.checked?"enabled":"disabled"),D.setParams(F),D.reset()}}async function te(){H("human version:",M.version,"| tfjs version:",M.tf.version["tfjs-core"]),H("platform:",M.env.platform,"| agent:",M.env.agent),B("loading..."),await M.load(),H("backend:",M.tf.getBackend(),"| available:",M.env.backends),H("models loaded:",M.models.loaded()),B("initializing..."),await M.warmup(),ee(),await V(),Z()}window.onload=te; + +// demo/tracker/index.ts +import * as H from "../../dist/human.esm.js"; + +// demo/tracker/tracker.js +var __defProp = Object.defineProperty; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __name = (target, value) => __defProp(target, "name", { value, configurable: true }); +var __commonJS = (cb, mod) => function __require() { + return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; +}; +var require_rng_browser = __commonJS({ + "node_modules/.pnpm/uuid@3.2.1/node_modules/uuid/lib/rng-browser.js"(exports, module) { + var getRandomValues = typeof crypto != "undefined" && crypto.getRandomValues.bind(crypto) || typeof msCrypto != "undefined" && msCrypto.getRandomValues.bind(msCrypto); + if (getRandomValues) { + rnds8 = new Uint8Array(16); + module.exports = __name(function whatwgRNG() { + getRandomValues(rnds8); + return rnds8; + }, "whatwgRNG"); + } else { + rnds = new Array(16); + module.exports = __name(function mathRNG() { + for (var i = 0, r; i < 16; i++) { + if ((i & 3) === 0) + r = Math.random() * 4294967296; + rnds[i] = r >>> ((i & 3) << 3) & 255; + } + return rnds; + }, "mathRNG"); + } + var rnds8; + var rnds; + } +}); +var require_bytesToUuid = __commonJS({ + "node_modules/.pnpm/uuid@3.2.1/node_modules/uuid/lib/bytesToUuid.js"(exports, module) { + var byteToHex = []; + for (i = 0; i < 256; ++i) { + byteToHex[i] = (i + 256).toString(16).substr(1); + } + function bytesToUuid(buf, offset) { + var i2 = offset || 0; + var bth = byteToHex; + return bth[buf[i2++]] + bth[buf[i2++]] + bth[buf[i2++]] + bth[buf[i2++]] + "-" + bth[buf[i2++]] + bth[buf[i2++]] + "-" + bth[buf[i2++]] + bth[buf[i2++]] + "-" + bth[buf[i2++]] + bth[buf[i2++]] + "-" + bth[buf[i2++]] + bth[buf[i2++]] + bth[buf[i2++]] + bth[buf[i2++]] + bth[buf[i2++]] + bth[buf[i2++]]; + } + __name(bytesToUuid, "bytesToUuid"); + module.exports = bytesToUuid; + var i; + } +}); +var require_v4 = __commonJS({ + "node_modules/.pnpm/uuid@3.2.1/node_modules/uuid/v4.js"(exports, module) { + var rng = require_rng_browser(); + var bytesToUuid = require_bytesToUuid(); + function v4(options, buf, offset) { + var i = buf && offset || 0; + if (typeof options == "string") { + buf = options === "binary" ? new Array(16) : null; + options = null; + } + options = options || {}; + var rnds = options.random || (options.rng || rng)(); + rnds[6] = rnds[6] & 15 | 64; + rnds[8] = rnds[8] & 63 | 128; + if (buf) { + for (var ii = 0; ii < 16; ++ii) { + buf[i + ii] = rnds[ii]; + } + } + return buf || bytesToUuid(rnds); + } + __name(v4, "v4"); + module.exports = v4; + } +}); +var require_utils = __commonJS({ + "utils.js"(exports) { + exports.isDetectionTooLarge = (detections, largestAllowed) => { + if (detections.w >= largestAllowed) { + return true; + } else { + return false; + } + }; + var isInsideArea = __name((area, point) => { + const xMin = area.x - area.w / 2; + const xMax = area.x + area.w / 2; + const yMin = area.y - area.h / 2; + const yMax = area.y + area.h / 2; + if (point.x >= xMin && point.x <= xMax && point.y >= yMin && point.y <= yMax) { + return true; + } else { + return false; + } + }, "isInsideArea"); + exports.isInsideArea = isInsideArea; + exports.isInsideSomeAreas = (areas, point) => { + const isInside = areas.some((area) => isInsideArea(area, point)); + return isInside; + }; + exports.ignoreObjectsNotToDetect = (detections, objectsToDetect) => { + return detections.filter((detection) => objectsToDetect.indexOf(detection.name) > -1); + }; + var getRectangleEdges = __name((item) => { + return { + x0: item.x - item.w / 2, + y0: item.y - item.h / 2, + x1: item.x + item.w / 2, + y1: item.y + item.h / 2 + }; + }, "getRectangleEdges"); + exports.getRectangleEdges = getRectangleEdges; + exports.iouAreas = (item1, item2) => { + var rect1 = getRectangleEdges(item1); + var rect2 = getRectangleEdges(item2); + var overlap_x0 = Math.max(rect1.x0, rect2.x0); + var overlap_y0 = Math.max(rect1.y0, rect2.y0); + var overlap_x1 = Math.min(rect1.x1, rect2.x1); + var overlap_y1 = Math.min(rect1.y1, rect2.y1); + if (overlap_x1 - overlap_x0 <= 0 || overlap_y1 - overlap_y0 <= 0) { + return 0; + } else { + const area_rect1 = item1.w * item1.h; + const area_rect2 = item2.w * item2.h; + const area_intersection = (overlap_x1 - overlap_x0) * (overlap_y1 - overlap_y0); + const area_union = area_rect1 + area_rect2 - area_intersection; + return area_intersection / area_union; + } + }; + exports.computeVelocityVector = (item1, item2, nbFrame) => { + return { + dx: (item2.x - item1.x) / nbFrame, + dy: (item2.y - item1.y) / nbFrame + }; + }; + exports.computeBearingIn360 = function(dx, dy) { + var angle = Math.atan(dx / dy) / (Math.PI / 180); + if (angle > 0) { + if (dy > 0) + return angle; + else + return 180 + angle; + } else { + if (dx > 0) + return 180 + angle; + else + return 360 + angle; + } + }; + } +}); +var require_ItemTracked = __commonJS({ + "ItemTracked.js"(exports) { + var uuidv4 = require_v4(); + var computeBearingIn360 = require_utils().computeBearingIn360; + var computeVelocityVector = require_utils().computeVelocityVector; + exports.ITEM_HISTORY_MAX_LENGTH = 15; + var idDisplay = 0; + exports.ItemTracked = function(properties, frameNb, unMatchedFramesTolerance, fastDelete) { + var DEFAULT_UNMATCHEDFRAMES_TOLERANCE = unMatchedFramesTolerance; + var itemTracked = {}; + itemTracked.available = true; + itemTracked.delete = false; + itemTracked.fastDelete = fastDelete; + itemTracked.frameUnmatchedLeftBeforeDying = unMatchedFramesTolerance; + itemTracked.isZombie = false; + itemTracked.appearFrame = frameNb; + itemTracked.disappearFrame = null; + itemTracked.disappearArea = {}; + itemTracked.nameCount = {}; + itemTracked.nameCount[properties.name] = 1; + itemTracked.x = properties.x; + itemTracked.y = properties.y; + itemTracked.w = properties.w; + itemTracked.h = properties.h; + itemTracked.name = properties.name; + itemTracked.confidence = properties.confidence; + itemTracked.itemHistory = []; + itemTracked.itemHistory.push({ + x: properties.x, + y: properties.y, + w: properties.w, + h: properties.h, + confidence: properties.confidence + }); + if (itemTracked.itemHistory.length >= exports.ITEM_HISTORY_MAX_LENGTH) { + itemTracked.itemHistory.shift(); + } + itemTracked.velocity = { + dx: 0, + dy: 0 + }; + itemTracked.nbTimeMatched = 1; + itemTracked.id = uuidv4(); + itemTracked.idDisplay = idDisplay; + idDisplay++; + itemTracked.update = function(properties2, frameNb2) { + if (this.disappearFrame) { + this.disappearFrame = null; + this.disappearArea = {}; + } + this.isZombie = false; + this.nbTimeMatched += 1; + this.x = properties2.x; + this.y = properties2.y; + this.w = properties2.w; + this.h = properties2.h; + this.confidence = properties2.confidence; + this.itemHistory.push({ + x: this.x, + y: this.y, + w: this.w, + h: this.h, + confidence: this.confidence + }); + if (itemTracked.itemHistory.length >= exports.ITEM_HISTORY_MAX_LENGTH) { + itemTracked.itemHistory.shift(); + } + this.name = properties2.name; + if (this.nameCount[properties2.name]) { + this.nameCount[properties2.name]++; + } else { + this.nameCount[properties2.name] = 1; + } + this.frameUnmatchedLeftBeforeDying = DEFAULT_UNMATCHEDFRAMES_TOLERANCE; + this.velocity = this.updateVelocityVector(); + }; + itemTracked.makeAvailable = function() { + this.available = true; + return this; + }; + itemTracked.makeUnavailable = function() { + this.available = false; + return this; + }; + itemTracked.countDown = function(frameNb2) { + if (this.disappearFrame === null) { + this.disappearFrame = frameNb2; + this.disappearArea = { + x: this.x, + y: this.y, + w: this.w, + h: this.h + }; + } + this.frameUnmatchedLeftBeforeDying--; + this.isZombie = true; + if (this.fastDelete && this.nbTimeMatched <= 1) { + this.frameUnmatchedLeftBeforeDying = -1; + } + }; + itemTracked.updateTheoricalPositionAndSize = function() { + this.itemHistory.push({ + x: this.x, + y: this.y, + w: this.w, + h: this.h, + confidence: this.confidence + }); + if (itemTracked.itemHistory.length >= exports.ITEM_HISTORY_MAX_LENGTH) { + itemTracked.itemHistory.shift(); + } + this.x = this.x + this.velocity.dx; + this.y = this.y + this.velocity.dy; + }; + itemTracked.predictNextPosition = function() { + return { + x: this.x + this.velocity.dx, + y: this.y + this.velocity.dy, + w: this.w, + h: this.h + }; + }; + itemTracked.isDead = function() { + return this.frameUnmatchedLeftBeforeDying < 0; + }; + itemTracked.updateVelocityVector = function() { + if (exports.ITEM_HISTORY_MAX_LENGTH <= 2) { + return { dx: void 0, dy: void 0 }; + } + if (this.itemHistory.length <= exports.ITEM_HISTORY_MAX_LENGTH) { + const start = this.itemHistory[0]; + const end = this.itemHistory[this.itemHistory.length - 1]; + return computeVelocityVector(start, end, this.itemHistory.length); + } else { + const start = this.itemHistory[this.itemHistory.length - exports.ITEM_HISTORY_MAX_LENGTH]; + const end = this.itemHistory[this.itemHistory.length - 1]; + return computeVelocityVector(start, end, exports.ITEM_HISTORY_MAX_LENGTH); + } + }; + itemTracked.getMostlyMatchedName = function() { + var nameMostlyMatchedOccurences = 0; + var nameMostlyMatched = ""; + Object.keys(this.nameCount).map((name) => { + if (this.nameCount[name] > nameMostlyMatchedOccurences) { + nameMostlyMatched = name; + nameMostlyMatchedOccurences = this.nameCount[name]; + } + }); + return nameMostlyMatched; + }; + itemTracked.toJSONDebug = function(roundInt = true) { + return { + id: this.id, + idDisplay: this.idDisplay, + x: roundInt ? parseInt(this.x, 10) : this.x, + y: roundInt ? parseInt(this.y, 10) : this.y, + w: roundInt ? parseInt(this.w, 10) : this.w, + h: roundInt ? parseInt(this.h, 10) : this.h, + confidence: Math.round(this.confidence * 100) / 100, + // Here we negate dy to be in "normal" carthesian coordinates + bearing: parseInt(computeBearingIn360(this.velocity.dx, -this.velocity.dy)), + name: this.getMostlyMatchedName(), + isZombie: this.isZombie, + appearFrame: this.appearFrame, + disappearFrame: this.disappearFrame + }; + }; + itemTracked.toJSON = function(roundInt = true) { + return { + id: this.idDisplay, + x: roundInt ? parseInt(this.x, 10) : this.x, + y: roundInt ? parseInt(this.y, 10) : this.y, + w: roundInt ? parseInt(this.w, 10) : this.w, + h: roundInt ? parseInt(this.h, 10) : this.h, + confidence: Math.round(this.confidence * 100) / 100, + // Here we negate dy to be in "normal" carthesian coordinates + bearing: parseInt(computeBearingIn360(this.velocity.dx, -this.velocity.dy), 10), + name: this.getMostlyMatchedName(), + isZombie: this.isZombie + }; + }; + itemTracked.toMOT = function(frameIndex) { + return `${frameIndex},${this.idDisplay},${this.x - this.w / 2},${this.y - this.h / 2},${this.w},${this.h},${this.confidence / 100},-1,-1,-1`; + }; + itemTracked.toJSONGenericInfo = function() { + return { + id: this.id, + idDisplay: this.idDisplay, + appearFrame: this.appearFrame, + disappearFrame: this.disappearFrame, + disappearArea: this.disappearArea, + nbActiveFrame: this.disappearFrame - this.appearFrame, + name: this.getMostlyMatchedName() + }; + }; + return itemTracked; + }; + exports.reset = function() { + idDisplay = 0; + }; + } +}); +var require_kdTree_min = __commonJS({ + "lib/kdTree-min.js"(exports) { + (function(root, factory) { + if (typeof define === "function" && define.amd) { + define(["exports"], factory); + } else if (typeof exports === "object") { + factory(exports); + } else { + factory(root); + } + })(exports, function(exports2) { + function Node(obj, dimension, parent) { + this.obj = obj; + this.left = null; + this.right = null; + this.parent = parent; + this.dimension = dimension; + } + __name(Node, "Node"); + function kdTree(points, metric, dimensions) { + var self = this; + function buildTree(points2, depth, parent) { + var dim = depth % dimensions.length, median, node; + if (points2.length === 0) { + return null; + } + if (points2.length === 1) { + return new Node(points2[0], dim, parent); + } + points2.sort(function(a, b) { + return a[dimensions[dim]] - b[dimensions[dim]]; + }); + median = Math.floor(points2.length / 2); + node = new Node(points2[median], dim, parent); + node.left = buildTree(points2.slice(0, median), depth + 1, node); + node.right = buildTree(points2.slice(median + 1), depth + 1, node); + return node; + } + __name(buildTree, "buildTree"); + function loadTree(data) { + self.root = data; + function restoreParent(root) { + if (root.left) { + root.left.parent = root; + restoreParent(root.left); + } + if (root.right) { + root.right.parent = root; + restoreParent(root.right); + } + } + __name(restoreParent, "restoreParent"); + restoreParent(self.root); + } + __name(loadTree, "loadTree"); + if (!Array.isArray(points)) + loadTree(points, metric, dimensions); + else + this.root = buildTree(points, 0, null); + this.toJSON = function(src) { + if (!src) + src = this.root; + var dest = new Node(src.obj, src.dimension, null); + if (src.left) + dest.left = self.toJSON(src.left); + if (src.right) + dest.right = self.toJSON(src.right); + return dest; + }; + this.insert = function(point) { + function innerSearch(node, parent) { + if (node === null) { + return parent; + } + var dimension2 = dimensions[node.dimension]; + if (point[dimension2] < node.obj[dimension2]) { + return innerSearch(node.left, node); + } else { + return innerSearch(node.right, node); + } + } + __name(innerSearch, "innerSearch"); + var insertPosition = innerSearch(this.root, null), newNode, dimension; + if (insertPosition === null) { + this.root = new Node(point, 0, null); + return; + } + newNode = new Node(point, (insertPosition.dimension + 1) % dimensions.length, insertPosition); + dimension = dimensions[insertPosition.dimension]; + if (point[dimension] < insertPosition.obj[dimension]) { + insertPosition.left = newNode; + } else { + insertPosition.right = newNode; + } + }; + this.remove = function(point) { + var node; + function nodeSearch(node2) { + if (node2 === null) { + return null; + } + if (node2.obj === point) { + return node2; + } + var dimension = dimensions[node2.dimension]; + if (point[dimension] < node2.obj[dimension]) { + return nodeSearch(node2.left, node2); + } else { + return nodeSearch(node2.right, node2); + } + } + __name(nodeSearch, "nodeSearch"); + function removeNode(node2) { + var nextNode, nextObj, pDimension; + function findMin(node3, dim) { + var dimension, own, left, right, min; + if (node3 === null) { + return null; + } + dimension = dimensions[dim]; + if (node3.dimension === dim) { + if (node3.left !== null) { + return findMin(node3.left, dim); + } + return node3; + } + own = node3.obj[dimension]; + left = findMin(node3.left, dim); + right = findMin(node3.right, dim); + min = node3; + if (left !== null && left.obj[dimension] < own) { + min = left; + } + if (right !== null && right.obj[dimension] < min.obj[dimension]) { + min = right; + } + return min; + } + __name(findMin, "findMin"); + if (node2.left === null && node2.right === null) { + if (node2.parent === null) { + self.root = null; + return; + } + pDimension = dimensions[node2.parent.dimension]; + if (node2.obj[pDimension] < node2.parent.obj[pDimension]) { + node2.parent.left = null; + } else { + node2.parent.right = null; + } + return; + } + if (node2.right !== null) { + nextNode = findMin(node2.right, node2.dimension); + nextObj = nextNode.obj; + removeNode(nextNode); + node2.obj = nextObj; + } else { + nextNode = findMin(node2.left, node2.dimension); + nextObj = nextNode.obj; + removeNode(nextNode); + node2.right = node2.left; + node2.left = null; + node2.obj = nextObj; + } + } + __name(removeNode, "removeNode"); + node = nodeSearch(self.root); + if (node === null) { + return; + } + removeNode(node); + }; + this.nearest = function(point, maxNodes, maxDistance) { + var i, result, bestNodes; + bestNodes = new BinaryHeap( + function(e) { + return -e[1]; + } + ); + function nearestSearch(node) { + var bestChild, dimension = dimensions[node.dimension], ownDistance = metric(point, node.obj), linearPoint = {}, linearDistance, otherChild, i2; + function saveNode(node2, distance) { + bestNodes.push([node2, distance]); + if (bestNodes.size() > maxNodes) { + bestNodes.pop(); + } + } + __name(saveNode, "saveNode"); + for (i2 = 0; i2 < dimensions.length; i2 += 1) { + if (i2 === node.dimension) { + linearPoint[dimensions[i2]] = point[dimensions[i2]]; + } else { + linearPoint[dimensions[i2]] = node.obj[dimensions[i2]]; + } + } + linearDistance = metric(linearPoint, node.obj); + if (node.right === null && node.left === null) { + if (bestNodes.size() < maxNodes || ownDistance < bestNodes.peek()[1]) { + saveNode(node, ownDistance); + } + return; + } + if (node.right === null) { + bestChild = node.left; + } else if (node.left === null) { + bestChild = node.right; + } else { + if (point[dimension] < node.obj[dimension]) { + bestChild = node.left; + } else { + bestChild = node.right; + } + } + nearestSearch(bestChild); + if (bestNodes.size() < maxNodes || ownDistance < bestNodes.peek()[1]) { + saveNode(node, ownDistance); + } + if (bestNodes.size() < maxNodes || Math.abs(linearDistance) < bestNodes.peek()[1]) { + if (bestChild === node.left) { + otherChild = node.right; + } else { + otherChild = node.left; + } + if (otherChild !== null) { + nearestSearch(otherChild); + } + } + } + __name(nearestSearch, "nearestSearch"); + if (maxDistance) { + for (i = 0; i < maxNodes; i += 1) { + bestNodes.push([null, maxDistance]); + } + } + if (self.root) + nearestSearch(self.root); + result = []; + for (i = 0; i < Math.min(maxNodes, bestNodes.content.length); i += 1) { + if (bestNodes.content[i][0]) { + result.push([bestNodes.content[i][0].obj, bestNodes.content[i][1]]); + } + } + return result; + }; + this.balanceFactor = function() { + function height(node) { + if (node === null) { + return 0; + } + return Math.max(height(node.left), height(node.right)) + 1; + } + __name(height, "height"); + function count(node) { + if (node === null) { + return 0; + } + return count(node.left) + count(node.right) + 1; + } + __name(count, "count"); + return height(self.root) / (Math.log(count(self.root)) / Math.log(2)); + }; + } + __name(kdTree, "kdTree"); + function BinaryHeap(scoreFunction) { + this.content = []; + this.scoreFunction = scoreFunction; + } + __name(BinaryHeap, "BinaryHeap"); + BinaryHeap.prototype = { + push: function(element) { + this.content.push(element); + this.bubbleUp(this.content.length - 1); + }, + pop: function() { + var result = this.content[0]; + var end = this.content.pop(); + if (this.content.length > 0) { + this.content[0] = end; + this.sinkDown(0); + } + return result; + }, + peek: function() { + return this.content[0]; + }, + remove: function(node) { + var len = this.content.length; + for (var i = 0; i < len; i++) { + if (this.content[i] == node) { + var end = this.content.pop(); + if (i != len - 1) { + this.content[i] = end; + if (this.scoreFunction(end) < this.scoreFunction(node)) + this.bubbleUp(i); + else + this.sinkDown(i); + } + return; + } + } + throw new Error("Node not found."); + }, + size: function() { + return this.content.length; + }, + bubbleUp: function(n) { + var element = this.content[n]; + while (n > 0) { + var parentN = Math.floor((n + 1) / 2) - 1, parent = this.content[parentN]; + if (this.scoreFunction(element) < this.scoreFunction(parent)) { + this.content[parentN] = element; + this.content[n] = parent; + n = parentN; + } else { + break; + } + } + }, + sinkDown: function(n) { + var length = this.content.length, element = this.content[n], elemScore = this.scoreFunction(element); + while (true) { + var child2N = (n + 1) * 2, child1N = child2N - 1; + var swap = null; + if (child1N < length) { + var child1 = this.content[child1N], child1Score = this.scoreFunction(child1); + if (child1Score < elemScore) + swap = child1N; + } + if (child2N < length) { + var child2 = this.content[child2N], child2Score = this.scoreFunction(child2); + if (child2Score < (swap == null ? elemScore : child1Score)) { + swap = child2N; + } + } + if (swap != null) { + this.content[n] = this.content[swap]; + this.content[swap] = element; + n = swap; + } else { + break; + } + } + } + }; + exports2.kdTree = kdTree; + exports2.BinaryHeap = BinaryHeap; + }); + } +}); +var require_munkres = __commonJS({ + "node_modules/.pnpm/munkres-js@1.2.2/node_modules/munkres-js/munkres.js"(exports, module) { + var MAX_SIZE = parseInt(Number.MAX_SAFE_INTEGER / 2) || (1 << 26) * (1 << 26); + var DEFAULT_PAD_VALUE = 0; + function Munkres() { + this.C = null; + this.row_covered = []; + this.col_covered = []; + this.n = 0; + this.Z0_r = 0; + this.Z0_c = 0; + this.marked = null; + this.path = null; + } + __name(Munkres, "Munkres"); + Munkres.prototype.pad_matrix = function(matrix, pad_value) { + pad_value = pad_value || DEFAULT_PAD_VALUE; + var max_columns = 0; + var total_rows = matrix.length; + var i; + for (i = 0; i < total_rows; ++i) + if (matrix[i].length > max_columns) + max_columns = matrix[i].length; + total_rows = max_columns > total_rows ? max_columns : total_rows; + var new_matrix = []; + for (i = 0; i < total_rows; ++i) { + var row = matrix[i] || []; + var new_row = row.slice(); + while (total_rows > new_row.length) + new_row.push(pad_value); + new_matrix.push(new_row); + } + return new_matrix; + }; + Munkres.prototype.compute = function(cost_matrix, options) { + options = options || {}; + options.padValue = options.padValue || DEFAULT_PAD_VALUE; + this.C = this.pad_matrix(cost_matrix, options.padValue); + this.n = this.C.length; + this.original_length = cost_matrix.length; + this.original_width = cost_matrix[0].length; + var nfalseArray = []; + while (nfalseArray.length < this.n) + nfalseArray.push(false); + this.row_covered = nfalseArray.slice(); + this.col_covered = nfalseArray.slice(); + this.Z0_r = 0; + this.Z0_c = 0; + this.path = this.__make_matrix(this.n * 2, 0); + this.marked = this.__make_matrix(this.n, 0); + var step = 1; + var steps = { + 1: this.__step1, + 2: this.__step2, + 3: this.__step3, + 4: this.__step4, + 5: this.__step5, + 6: this.__step6 + }; + while (true) { + var func = steps[step]; + if (!func) + break; + step = func.apply(this); + } + var results = []; + for (var i = 0; i < this.original_length; ++i) + for (var j = 0; j < this.original_width; ++j) + if (this.marked[i][j] == 1) + results.push([i, j]); + return results; + }; + Munkres.prototype.__make_matrix = function(n, val) { + var matrix = []; + for (var i = 0; i < n; ++i) { + matrix[i] = []; + for (var j = 0; j < n; ++j) + matrix[i][j] = val; + } + return matrix; + }; + Munkres.prototype.__step1 = function() { + for (var i = 0; i < this.n; ++i) { + var minval = Math.min.apply(Math, this.C[i]); + for (var j = 0; j < this.n; ++j) + this.C[i][j] -= minval; + } + return 2; + }; + Munkres.prototype.__step2 = function() { + for (var i = 0; i < this.n; ++i) { + for (var j = 0; j < this.n; ++j) { + if (this.C[i][j] === 0 && !this.col_covered[j] && !this.row_covered[i]) { + this.marked[i][j] = 1; + this.col_covered[j] = true; + this.row_covered[i] = true; + break; + } + } + } + this.__clear_covers(); + return 3; + }; + Munkres.prototype.__step3 = function() { + var count = 0; + for (var i = 0; i < this.n; ++i) { + for (var j = 0; j < this.n; ++j) { + if (this.marked[i][j] == 1 && this.col_covered[j] == false) { + this.col_covered[j] = true; + ++count; + } + } + } + return count >= this.n ? 7 : 4; + }; + Munkres.prototype.__step4 = function() { + var done = false; + var row = -1, col = -1, star_col = -1; + while (!done) { + var z = this.__find_a_zero(); + row = z[0]; + col = z[1]; + if (row < 0) + return 6; + this.marked[row][col] = 2; + star_col = this.__find_star_in_row(row); + if (star_col >= 0) { + col = star_col; + this.row_covered[row] = true; + this.col_covered[col] = false; + } else { + this.Z0_r = row; + this.Z0_c = col; + return 5; + } + } + }; + Munkres.prototype.__step5 = function() { + var count = 0; + this.path[count][0] = this.Z0_r; + this.path[count][1] = this.Z0_c; + var done = false; + while (!done) { + var row = this.__find_star_in_col(this.path[count][1]); + if (row >= 0) { + count++; + this.path[count][0] = row; + this.path[count][1] = this.path[count - 1][1]; + } else { + done = true; + } + if (!done) { + var col = this.__find_prime_in_row(this.path[count][0]); + count++; + this.path[count][0] = this.path[count - 1][0]; + this.path[count][1] = col; + } + } + this.__convert_path(this.path, count); + this.__clear_covers(); + this.__erase_primes(); + return 3; + }; + Munkres.prototype.__step6 = function() { + var minval = this.__find_smallest(); + for (var i = 0; i < this.n; ++i) { + for (var j = 0; j < this.n; ++j) { + if (this.row_covered[i]) + this.C[i][j] += minval; + if (!this.col_covered[j]) + this.C[i][j] -= minval; + } + } + return 4; + }; + Munkres.prototype.__find_smallest = function() { + var minval = MAX_SIZE; + for (var i = 0; i < this.n; ++i) + for (var j = 0; j < this.n; ++j) + if (!this.row_covered[i] && !this.col_covered[j]) { + if (minval > this.C[i][j]) + minval = this.C[i][j]; + } + return minval; + }; + Munkres.prototype.__find_a_zero = function() { + for (var i = 0; i < this.n; ++i) + for (var j = 0; j < this.n; ++j) + if (this.C[i][j] === 0 && !this.row_covered[i] && !this.col_covered[j]) + return [i, j]; + return [-1, -1]; + }; + Munkres.prototype.__find_star_in_row = function(row) { + for (var j = 0; j < this.n; ++j) + if (this.marked[row][j] == 1) + return j; + return -1; + }; + Munkres.prototype.__find_star_in_col = function(col) { + for (var i = 0; i < this.n; ++i) + if (this.marked[i][col] == 1) + return i; + return -1; + }; + Munkres.prototype.__find_prime_in_row = function(row) { + for (var j = 0; j < this.n; ++j) + if (this.marked[row][j] == 2) + return j; + return -1; + }; + Munkres.prototype.__convert_path = function(path, count) { + for (var i = 0; i <= count; ++i) + this.marked[path[i][0]][path[i][1]] = this.marked[path[i][0]][path[i][1]] == 1 ? 0 : 1; + }; + Munkres.prototype.__clear_covers = function() { + for (var i = 0; i < this.n; ++i) { + this.row_covered[i] = false; + this.col_covered[i] = false; + } + }; + Munkres.prototype.__erase_primes = function() { + for (var i = 0; i < this.n; ++i) + for (var j = 0; j < this.n; ++j) + if (this.marked[i][j] == 2) + this.marked[i][j] = 0; + }; + function make_cost_matrix(profit_matrix, inversion_function) { + var i, j; + if (!inversion_function) { + var maximum = -1 / 0; + for (i = 0; i < profit_matrix.length; ++i) + for (j = 0; j < profit_matrix[i].length; ++j) + if (profit_matrix[i][j] > maximum) + maximum = profit_matrix[i][j]; + inversion_function = __name(function(x) { + return maximum - x; + }, "inversion_function"); + } + var cost_matrix = []; + for (i = 0; i < profit_matrix.length; ++i) { + var row = profit_matrix[i]; + cost_matrix[i] = []; + for (j = 0; j < row.length; ++j) + cost_matrix[i][j] = inversion_function(profit_matrix[i][j]); + } + return cost_matrix; + } + __name(make_cost_matrix, "make_cost_matrix"); + function format_matrix(matrix) { + var columnWidths = []; + var i, j; + for (i = 0; i < matrix.length; ++i) { + for (j = 0; j < matrix[i].length; ++j) { + var entryWidth = String(matrix[i][j]).length; + if (!columnWidths[j] || entryWidth >= columnWidths[j]) + columnWidths[j] = entryWidth; + } + } + var formatted = ""; + for (i = 0; i < matrix.length; ++i) { + for (j = 0; j < matrix[i].length; ++j) { + var s = String(matrix[i][j]); + while (s.length < columnWidths[j]) + s = " " + s; + formatted += s; + if (j != matrix[i].length - 1) + formatted += " "; + } + if (i != matrix[i].length - 1) + formatted += "\n"; + } + return formatted; + } + __name(format_matrix, "format_matrix"); + function computeMunkres(cost_matrix, options) { + var m = new Munkres(); + return m.compute(cost_matrix, options); + } + __name(computeMunkres, "computeMunkres"); + computeMunkres.version = "1.2.2"; + computeMunkres.format_matrix = format_matrix; + computeMunkres.make_cost_matrix = make_cost_matrix; + computeMunkres.Munkres = Munkres; + if (typeof module !== "undefined" && module.exports) { + module.exports = computeMunkres; + } + } +}); +var require_tracker = __commonJS({ + "tracker.js"(exports) { + var itemTrackedModule = require_ItemTracked(); + var ItemTracked = itemTrackedModule.ItemTracked; + var kdTree = require_kdTree_min().kdTree; + var iouAreas = require_utils().iouAreas; + var munkres = require_munkres(); + var DEBUG_MODE = false; + var iouDistance = __name(function(item1, item2) { + var iou = iouAreas(item1, item2); + var distance = 1 - iou; + if (distance > 1 - params.iouLimit) { + distance = params.distanceLimit + 1; + } + return distance; + }, "iouDistance"); + var params = { + // DEFAULT_UNMATCHEDFRAMES_TOLERANCE + // This the number of frame we wait when an object isn't matched before considering it gone + unMatchedFramesTolerance: 5, + // DEFAULT_IOU_LIMIT, exclude things from beeing matched if their IOU is lower than this + // 1 means total overlap whereas 0 means no overlap + iouLimit: 0.05, + // Remove new objects fast if they could not be matched in the next frames. + // Setting this to false ensures the object will stick around at least + // unMatchedFramesTolerance frames, even if they could neven be matched in + // subsequent frames. + fastDelete: true, + // The function to use to determine the distance between to detected objects + distanceFunc: iouDistance, + // The distance limit for matching. If values need to be excluded from + // matching set their distance to something greater than the distance limit + distanceLimit: 1e4, + // The algorithm used to match tracks with new detections. Can be either + // 'kdTree' or 'munkres'. + matchingAlgorithm: "kdTree" + }; + var mapOfItemsTracked = /* @__PURE__ */ new Map(); + var mapOfAllItemsTracked = /* @__PURE__ */ new Map(); + var keepAllHistoryInMemory = false; + exports.computeDistance = iouDistance; + exports.updateTrackedItemsWithNewFrame = function(detectionsOfThisFrame, frameNb) { + var treeItemsTracked = new kdTree(Array.from(mapOfItemsTracked.values()), params.distanceFunc, ["x", "y", "w", "h"]); + var treeDetectionsOfThisFrame = new kdTree(detectionsOfThisFrame, params.distanceFunc, ["x", "y", "w", "h"]); + if (mapOfItemsTracked.size === 0) { + detectionsOfThisFrame.forEach(function(itemDetected) { + var newItemTracked = new ItemTracked(itemDetected, frameNb, params.unMatchedFramesTolerance, params.fastDelete); + mapOfItemsTracked.set(newItemTracked.id, newItemTracked); + treeItemsTracked.insert(newItemTracked); + }); + } else { + var matchedList = new Array(detectionsOfThisFrame.length); + matchedList.fill(false); + if (detectionsOfThisFrame.length > 0) { + if (params.matchingAlgorithm === "munkres") { + var trackedItemIds = Array.from(mapOfItemsTracked.keys()); + var costMatrix = Array.from(mapOfItemsTracked.values()).map((itemTracked) => { + var predictedPosition = itemTracked.predictNextPosition(); + return detectionsOfThisFrame.map( + (detection) => params.distanceFunc(predictedPosition, detection) + ); + }); + mapOfItemsTracked.forEach(function(itemTracked) { + itemTracked.makeAvailable(); + }); + munkres(costMatrix).filter((m) => costMatrix[m[0]][m[1]] <= params.distanceLimit).forEach((m) => { + var itemTracked = mapOfItemsTracked.get(trackedItemIds[m[0]]); + var updatedTrackedItemProperties = detectionsOfThisFrame[m[1]]; + matchedList[m[1]] = { idDisplay: itemTracked.idDisplay }; + itemTracked.makeUnavailable().update(updatedTrackedItemProperties, frameNb); + }); + matchedList.forEach(function(matched, index) { + if (!matched) { + if (Math.min(...costMatrix.map((m) => m[index])) > params.distanceLimit) { + var newItemTracked = ItemTracked(detectionsOfThisFrame[index], frameNb, params.unMatchedFramesTolerance, params.fastDelete); + mapOfItemsTracked.set(newItemTracked.id, newItemTracked); + newItemTracked.makeUnavailable(); + costMatrix.push(detectionsOfThisFrame.map( + (detection) => params.distanceFunc(newItemTracked, detection) + )); + } + } + }); + } else if (params.matchingAlgorithm === "kdTree") { + mapOfItemsTracked.forEach(function(itemTracked) { + var predictedPosition = itemTracked.predictNextPosition(); + itemTracked.makeAvailable(); + var treeSearchResult = treeDetectionsOfThisFrame.nearest(predictedPosition, 1, params.distanceLimit)[0]; + var treeSearchResultWithoutPrediction = treeDetectionsOfThisFrame.nearest(itemTracked, 1, params.distanceLimit)[0]; + var treeSearchMultipleResults = treeDetectionsOfThisFrame.nearest(predictedPosition, 2, params.distanceLimit); + if (treeSearchResult) { + var indexClosestNewDetectedItem = detectionsOfThisFrame.indexOf(treeSearchResult[0]); + if (!matchedList[indexClosestNewDetectedItem]) { + matchedList[indexClosestNewDetectedItem] = { + idDisplay: itemTracked.idDisplay + }; + var updatedTrackedItemProperties = detectionsOfThisFrame[indexClosestNewDetectedItem]; + mapOfItemsTracked.get(itemTracked.id).makeUnavailable().update(updatedTrackedItemProperties, frameNb); + } else { + } + } + }); + } else { + throw `Unknown matching algorithm "${params.matchingAlgorithm}"`; + } + } else { + if (DEBUG_MODE) { + console.log("[Tracker] Nothing detected for frame n\xBA" + frameNb); + } + mapOfItemsTracked.forEach(function(itemTracked) { + itemTracked.makeAvailable(); + }); + } + if (params.matchingAlgorithm === "kdTree") { + if (mapOfItemsTracked.size > 0) { + treeItemsTracked = new kdTree(Array.from(mapOfItemsTracked.values()), params.distanceFunc, ["x", "y", "w", "h"]); + matchedList.forEach(function(matched, index) { + if (!matched) { + var treeSearchResult = treeItemsTracked.nearest(detectionsOfThisFrame[index], 1, params.distanceLimit)[0]; + if (!treeSearchResult) { + var newItemTracked = ItemTracked(detectionsOfThisFrame[index], frameNb, params.unMatchedFramesTolerance, params.fastDelete); + mapOfItemsTracked.set(newItemTracked.id, newItemTracked); + treeItemsTracked.insert(newItemTracked); + newItemTracked.makeUnavailable(); + } else { + } + } + }); + } + } + mapOfItemsTracked.forEach(function(itemTracked) { + if (itemTracked.available) { + itemTracked.countDown(frameNb); + itemTracked.updateTheoricalPositionAndSize(); + if (itemTracked.isDead()) { + mapOfItemsTracked.delete(itemTracked.id); + treeItemsTracked.remove(itemTracked); + if (keepAllHistoryInMemory) { + mapOfAllItemsTracked.set(itemTracked.id, itemTracked); + } + } + } + }); + } + }; + exports.reset = function() { + mapOfItemsTracked = /* @__PURE__ */ new Map(); + mapOfAllItemsTracked = /* @__PURE__ */ new Map(); + itemTrackedModule.reset(); + }; + exports.setParams = function(newParams) { + Object.keys(newParams).forEach((key) => { + params[key] = newParams[key]; + }); + }; + exports.enableKeepInMemory = function() { + keepAllHistoryInMemory = true; + }; + exports.disableKeepInMemory = function() { + keepAllHistoryInMemory = false; + }; + exports.getJSONOfTrackedItems = function(roundInt = true) { + return Array.from(mapOfItemsTracked.values()).map(function(itemTracked) { + return itemTracked.toJSON(roundInt); + }); + }; + exports.getJSONDebugOfTrackedItems = function(roundInt = true) { + return Array.from(mapOfItemsTracked.values()).map(function(itemTracked) { + return itemTracked.toJSONDebug(roundInt); + }); + }; + exports.getTrackedItemsInMOTFormat = function(frameNb) { + return Array.from(mapOfItemsTracked.values()).map(function(itemTracked) { + return itemTracked.toMOT(frameNb); + }); + }; + exports.getAllTrackedItems = function() { + return mapOfAllItemsTracked; + }; + exports.getJSONOfAllTrackedItems = function() { + return Array.from(mapOfAllItemsTracked.values()).map(function(itemTracked) { + return itemTracked.toJSONGenericInfo(); + }); + }; + } +}); +var tracker_default = require_tracker(); + +// demo/tracker/index.ts +var humanConfig = { + // user configuration for human, used to fine-tune behavior + debug: true, + backend: "webgl", + // cacheSensitivity: 0, + // cacheModels: false, + // warmup: 'none', + modelBasePath: "https://vladmandic.github.io/human-models/models", + filter: { enabled: true, equalization: false, flip: false }, + face: { + enabled: true, + detector: { rotation: false, maxDetected: 10, minConfidence: 0.3 }, + mesh: { enabled: true }, + attention: { enabled: false }, + iris: { enabled: false }, + description: { enabled: false }, + emotion: { enabled: false }, + antispoof: { enabled: false }, + liveness: { enabled: false } + }, + body: { enabled: false, maxDetected: 6, modelPath: "movenet-multipose.json" }, + hand: { enabled: false }, + object: { enabled: false, maxDetected: 10 }, + segmentation: { enabled: false }, + gesture: { enabled: false } +}; +var trackerConfig = { + unMatchedFramesTolerance: 100, + iouLimit: 0.05, + fastDelete: false, + distanceLimit: 1e4, + matchingAlgorithm: "kdTree" +}; +var human = new H.Human(humanConfig); +var dom = { + // grab instances of dom objects so we dont have to look them up later + video: document.getElementById("video"), + canvas: document.getElementById("canvas"), + log: document.getElementById("log"), + fps: document.getElementById("status"), + tracker: document.getElementById("tracker"), + interpolation: document.getElementById("interpolation"), + config: document.getElementById("config"), + ctx: document.getElementById("canvas").getContext("2d") +}; +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; +async function detectionLoop() { + if (!dom.video.paused && dom.video.readyState >= 2) { + if (timestamp.start === 0) timestamp.start = human.now(); + await human.detect(dom.video, humanConfig); + 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; + } + timestamp.detect = human.now(); + requestAnimationFrame(detectionLoop); +} +function drawLoop() { + if (!dom.video.paused && dom.video.readyState >= 2) { + const res = dom.interpolation.checked ? human.next(human.result) : human.result; + let tracking = []; + if (human.config.face.enabled) tracking = res.face; + else if (human.config.body.enabled) tracking = res.body; + else if (human.config.object.enabled) tracking = res.object; + else log("unknown object type"); + let data = []; + if (dom.tracker.checked) { + const items = tracking.map((obj) => ({ + x: obj.box[0] + obj.box[2] / 2, + y: obj.box[1] + obj.box[3] / 2, + w: obj.box[2], + h: obj.box[3], + name: obj.label || (human.config.face.enabled ? "face" : "body"), + confidence: obj.score + })); + tracker_default.updateTrackedItemsWithNewFrame(items, fps.frames); + data = tracker_default.getJSONOfTrackedItems(true); + } + human.draw.canvas(dom.video, dom.canvas); + for (let i = 0; i < tracking.length; i++) { + const name = tracking[i].label || (human.config.face.enabled ? "face" : "body"); + dom.ctx.strokeRect(tracking[i].box[0], tracking[i].box[1], tracking[i].box[1], tracking[i].box[2]); + dom.ctx.fillText(`id: ${tracking[i].id} ${Math.round(100 * tracking[i].score)}% ${name}`, tracking[i].box[0] + 4, tracking[i].box[1] + 16); + if (data[i]) { + dom.ctx.fillText(`t: ${data[i].id} ${Math.round(100 * data[i].confidence)}% ${data[i].name} ${data[i].isZombie ? "zombie" : ""}`, tracking[i].box[0] + 4, tracking[i].box[1] + 34); + } + } + } + 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 handleVideo(file) { + const url = URL.createObjectURL(file); + dom.video.src = url; + await dom.video.play(); + log("loaded video:", file.name, "resolution:", [dom.video.videoWidth, dom.video.videoHeight], "duration:", dom.video.duration); + dom.canvas.width = dom.video.videoWidth; + dom.canvas.height = dom.video.videoHeight; + dom.ctx.strokeStyle = "white"; + dom.ctx.fillStyle = "white"; + dom.ctx.font = "16px Segoe UI"; + dom.video.playbackRate = 0.25; +} +function initInput() { + document.body.addEventListener("dragenter", (evt) => evt.preventDefault()); + document.body.addEventListener("dragleave", (evt) => evt.preventDefault()); + document.body.addEventListener("dragover", (evt) => evt.preventDefault()); + document.body.addEventListener("drop", async (evt) => { + var _a, _b; + evt.preventDefault(); + if (evt.dataTransfer) evt.dataTransfer.dropEffect = "copy"; + const file = (_b = (_a = evt.dataTransfer) == null ? void 0 : _a.files) == null ? void 0 : _b[0]; + if (file) await handleVideo(file); + log(dom.video.readyState); + }); + document.getElementById("inputvideo").onchange = async (evt) => { + var _a, _b; + evt.preventDefault(); + const file = (_b = (_a = evt.target) == null ? void 0 : _a["files"]) == null ? void 0 : _b[0]; + if (file) await handleVideo(file); + }; + dom.config.onchange = () => { + trackerConfig.distanceLimit = document.getElementById("distanceLimit").valueAsNumber; + trackerConfig.iouLimit = document.getElementById("iouLimit").valueAsNumber; + trackerConfig.unMatchedFramesTolerance = document.getElementById("unMatchedFramesTolerance").valueAsNumber; + trackerConfig.unMatchedFramesTolerance = document.getElementById("unMatchedFramesTolerance").valueAsNumber; + trackerConfig.matchingAlgorithm = document.getElementById("matchingAlgorithm-kdTree").checked ? "kdTree" : "munkres"; + tracker_default.setParams(trackerConfig); + if (document.getElementById("keepInMemory").checked) tracker_default.enableKeepInMemory(); + else tracker_default.disableKeepInMemory(); + tracker_default.reset(); + log("tracker config change", JSON.stringify(trackerConfig)); + humanConfig.face.enabled = document.getElementById("box-face").checked; + humanConfig.body.enabled = document.getElementById("box-body").checked; + humanConfig.object.enabled = document.getElementById("box-object").checked; + }; + dom.tracker.onchange = (evt) => { + log("tracker", evt.target.checked ? "enabled" : "disabled"); + tracker_default.setParams(trackerConfig); + tracker_default.reset(); + }; +} +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 loaded:", human.models.loaded()); + status("initializing..."); + await human.warmup(); + initInput(); + await detectionLoop(); + drawLoop(); +} +window.onload = main; //# sourceMappingURL=index.js.map diff --git a/demo/tracker/index.js.map b/demo/tracker/index.js.map index d23e1158..101e394d 100644 --- a/demo/tracker/index.js.map +++ b/demo/tracker/index.js.map @@ -2,6 +2,6 @@ "version": 3, "sources": ["index.ts", "tracker.js"], "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 tracker from './tracker.js';\n\nconst humanConfig: Partial = { // user configuration for human, used to fine-tune behavior\n debug: true,\n backend: 'webgl',\n // cacheSensitivity: 0,\n // cacheModels: false,\n // warmup: 'none',\n modelBasePath: 'https://vladmandic.github.io/human-models/models',\n filter: { enabled: true, equalization: false, flip: false },\n face: {\n enabled: true,\n detector: { rotation: false, maxDetected: 10, minConfidence: 0.3 },\n mesh: { enabled: true },\n attention: { enabled: false },\n iris: { enabled: false },\n description: { enabled: false },\n emotion: { enabled: false },\n antispoof: { enabled: false },\n liveness: { enabled: false },\n },\n body: { enabled: false, maxDetected: 6, modelPath: 'movenet-multipose.json' },\n hand: { enabled: false },\n object: { enabled: false, maxDetected: 10 },\n segmentation: { enabled: false },\n gesture: { enabled: false },\n};\n\ninterface TrackerConfig {\n unMatchedFramesTolerance: number, // number of frame when an object is not matched before considering it gone; ignored if fastDelete is set\n iouLimit: number, // exclude things from beeing matched if their IOU less than; 1 means total overlap; 0 means no overlap\n fastDelete: boolean, // remove new objects immediately if they could not be matched in the next frames; if set, ignores unMatchedFramesTolerance\n distanceLimit: number, // distance limit for matching; if values need to be excluded from matching set their distance to something greater than the distance limit\n matchingAlgorithm: 'kdTree' | 'munkres', // algorithm used to match tracks with new detections\n}\n\ninterface TrackerResult {\n id: number,\n confidence: number,\n bearing: number,\n isZombie: boolean,\n name: string,\n x: number,\n y: number,\n w: number,\n h: number,\n}\n\nconst trackerConfig: TrackerConfig = {\n unMatchedFramesTolerance: 100,\n iouLimit: 0.05,\n fastDelete: false,\n distanceLimit: 1e4,\n matchingAlgorithm: 'kdTree',\n};\n\nconst human = new H.Human(humanConfig); // create instance of human with overrides from user configuration\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 tracker: document.getElementById('tracker') as HTMLInputElement,\n interpolation: document.getElementById('interpolation') as HTMLInputElement,\n config: document.getElementById('config') as HTMLFormElement,\n ctx: (document.getElementById('canvas') as HTMLCanvasElement).getContext('2d') as CanvasRenderingContext2D,\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\n\nasync function detectionLoop() { // main detection loop\n if (!dom.video.paused && dom.video.readyState >= 2) {\n if (timestamp.start === 0) timestamp.start = human.now();\n // log('profiling data:', await human.profile(dom.video));\n await human.detect(dom.video, humanConfig); // 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 }\n timestamp.detect = human.now();\n requestAnimationFrame(detectionLoop); // start new frame immediately\n}\n\nfunction drawLoop() { // main screen refresh loop\n if (!dom.video.paused && dom.video.readyState >= 2) {\n const res: H.Result = dom.interpolation.checked ? human.next(human.result) : human.result; // interpolate results if enabled\n let tracking: H.FaceResult[] | H.BodyResult[] | H.ObjectResult[] = [];\n if (human.config.face.enabled) tracking = res.face;\n else if (human.config.body.enabled) tracking = res.body;\n else if (human.config.object.enabled) tracking = res.object;\n else log('unknown object type');\n let data: TrackerResult[] = [];\n if (dom.tracker.checked) {\n const items = tracking.map((obj) => ({\n x: obj.box[0] + obj.box[2] / 2,\n y: obj.box[1] + obj.box[3] / 2,\n w: obj.box[2],\n h: obj.box[3],\n name: obj.label || (human.config.face.enabled ? 'face' : 'body'),\n confidence: obj.score,\n }));\n tracker.updateTrackedItemsWithNewFrame(items, fps.frames);\n data = tracker.getJSONOfTrackedItems(true) as TrackerResult[];\n }\n human.draw.canvas(dom.video, dom.canvas); // copy input video frame to output canvas\n for (let i = 0; i < tracking.length; i++) {\n // @ts-ignore\n const name = tracking[i].label || (human.config.face.enabled ? 'face' : 'body');\n dom.ctx.strokeRect(tracking[i].box[0], tracking[i].box[1], tracking[i].box[1], tracking[i].box[2]);\n dom.ctx.fillText(`id: ${tracking[i].id} ${Math.round(100 * tracking[i].score)}% ${name}`, tracking[i].box[0] + 4, tracking[i].box[1] + 16);\n if (data[i]) {\n dom.ctx.fillText(`t: ${data[i].id} ${Math.round(100 * data[i].confidence)}% ${data[i].name} ${data[i].isZombie ? 'zombie' : ''}`, tracking[i].box[0] + 4, tracking[i].box[1] + 34);\n }\n }\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 handleVideo(file: File) {\n const url = URL.createObjectURL(file);\n dom.video.src = url;\n await dom.video.play();\n log('loaded video:', file.name, 'resolution:', [dom.video.videoWidth, dom.video.videoHeight], 'duration:', dom.video.duration);\n dom.canvas.width = dom.video.videoWidth;\n dom.canvas.height = dom.video.videoHeight;\n dom.ctx.strokeStyle = 'white';\n dom.ctx.fillStyle = 'white';\n dom.ctx.font = '16px Segoe UI';\n dom.video.playbackRate = 0.25;\n}\n\nfunction initInput() {\n document.body.addEventListener('dragenter', (evt) => evt.preventDefault());\n document.body.addEventListener('dragleave', (evt) => evt.preventDefault());\n document.body.addEventListener('dragover', (evt) => evt.preventDefault());\n document.body.addEventListener('drop', async (evt) => {\n evt.preventDefault();\n if (evt.dataTransfer) evt.dataTransfer.dropEffect = 'copy';\n const file = evt.dataTransfer?.files?.[0];\n if (file) await handleVideo(file);\n log(dom.video.readyState);\n });\n (document.getElementById('inputvideo') as HTMLInputElement).onchange = async (evt) => {\n evt.preventDefault();\n const file = evt.target?.['files']?.[0];\n if (file) await handleVideo(file);\n };\n dom.config.onchange = () => {\n trackerConfig.distanceLimit = (document.getElementById('distanceLimit') as HTMLInputElement).valueAsNumber;\n trackerConfig.iouLimit = (document.getElementById('iouLimit') as HTMLInputElement).valueAsNumber;\n trackerConfig.unMatchedFramesTolerance = (document.getElementById('unMatchedFramesTolerance') as HTMLInputElement).valueAsNumber;\n trackerConfig.unMatchedFramesTolerance = (document.getElementById('unMatchedFramesTolerance') as HTMLInputElement).valueAsNumber;\n trackerConfig.matchingAlgorithm = (document.getElementById('matchingAlgorithm-kdTree') as HTMLInputElement).checked ? 'kdTree' : 'munkres';\n tracker.setParams(trackerConfig);\n if ((document.getElementById('keepInMemory') as HTMLInputElement).checked) tracker.enableKeepInMemory();\n else tracker.disableKeepInMemory();\n tracker.reset();\n log('tracker config change', JSON.stringify(trackerConfig));\n humanConfig.face!.enabled = (document.getElementById('box-face') as HTMLInputElement).checked; // eslint-disable-line @typescript-eslint/no-non-null-assertion\n humanConfig.body!.enabled = (document.getElementById('box-body') as HTMLInputElement).checked; // eslint-disable-line @typescript-eslint/no-non-null-assertion\n humanConfig.object!.enabled = (document.getElementById('box-object') as HTMLInputElement).checked; // eslint-disable-line @typescript-eslint/no-non-null-assertion\n };\n dom.tracker.onchange = (evt) => {\n log('tracker', (evt.target as HTMLInputElement).checked ? 'enabled' : 'disabled');\n tracker.setParams(trackerConfig);\n tracker.reset();\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 loaded:', human.models.loaded());\n status('initializing...');\n await human.warmup(); // warmup function to initialize backend for future faster detection\n initInput(); // initialize input\n await detectionLoop(); // start detection loop\n drawLoop(); // start draw loop\n}\n\nwindow.onload = main;\n", "/* eslint-disable */\nvar __defProp = Object.defineProperty;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\nvar __commonJS = (cb, mod) => function __require() {\n return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;\n};\n\n// node_modules/.pnpm/uuid@3.2.1/node_modules/uuid/lib/rng-browser.js\nvar require_rng_browser = __commonJS({\n \"node_modules/.pnpm/uuid@3.2.1/node_modules/uuid/lib/rng-browser.js\"(exports, module) {\n var getRandomValues = typeof crypto != \"undefined\" && crypto.getRandomValues.bind(crypto) || typeof msCrypto != \"undefined\" && msCrypto.getRandomValues.bind(msCrypto);\n if (getRandomValues) {\n rnds8 = new Uint8Array(16);\n module.exports = /* @__PURE__ */ __name(function whatwgRNG() {\n getRandomValues(rnds8);\n return rnds8;\n }, \"whatwgRNG\");\n } else {\n rnds = new Array(16);\n module.exports = /* @__PURE__ */ __name(function mathRNG() {\n for (var i = 0, r; i < 16; i++) {\n if ((i & 3) === 0)\n r = Math.random() * 4294967296;\n rnds[i] = r >>> ((i & 3) << 3) & 255;\n }\n return rnds;\n }, \"mathRNG\");\n }\n var rnds8;\n var rnds;\n }\n});\n\n// node_modules/.pnpm/uuid@3.2.1/node_modules/uuid/lib/bytesToUuid.js\nvar require_bytesToUuid = __commonJS({\n \"node_modules/.pnpm/uuid@3.2.1/node_modules/uuid/lib/bytesToUuid.js\"(exports, module) {\n var byteToHex = [];\n for (i = 0; i < 256; ++i) {\n byteToHex[i] = (i + 256).toString(16).substr(1);\n }\n function bytesToUuid(buf, offset) {\n var i2 = offset || 0;\n var bth = byteToHex;\n return bth[buf[i2++]] + bth[buf[i2++]] + bth[buf[i2++]] + bth[buf[i2++]] + \"-\" + bth[buf[i2++]] + bth[buf[i2++]] + \"-\" + bth[buf[i2++]] + bth[buf[i2++]] + \"-\" + bth[buf[i2++]] + bth[buf[i2++]] + \"-\" + bth[buf[i2++]] + bth[buf[i2++]] + bth[buf[i2++]] + bth[buf[i2++]] + bth[buf[i2++]] + bth[buf[i2++]];\n }\n __name(bytesToUuid, \"bytesToUuid\");\n module.exports = bytesToUuid;\n var i;\n }\n});\n\n// node_modules/.pnpm/uuid@3.2.1/node_modules/uuid/v4.js\nvar require_v4 = __commonJS({\n \"node_modules/.pnpm/uuid@3.2.1/node_modules/uuid/v4.js\"(exports, module) {\n var rng = require_rng_browser();\n var bytesToUuid = require_bytesToUuid();\n function v4(options, buf, offset) {\n var i = buf && offset || 0;\n if (typeof options == \"string\") {\n buf = options === \"binary\" ? new Array(16) : null;\n options = null;\n }\n options = options || {};\n var rnds = options.random || (options.rng || rng)();\n rnds[6] = rnds[6] & 15 | 64;\n rnds[8] = rnds[8] & 63 | 128;\n if (buf) {\n for (var ii = 0; ii < 16; ++ii) {\n buf[i + ii] = rnds[ii];\n }\n }\n return buf || bytesToUuid(rnds);\n }\n __name(v4, \"v4\");\n module.exports = v4;\n }\n});\n\n// utils.js\nvar require_utils = __commonJS({\n \"utils.js\"(exports) {\n exports.isDetectionTooLarge = (detections, largestAllowed) => {\n if (detections.w >= largestAllowed) {\n return true;\n } else {\n return false;\n }\n };\n var isInsideArea = /* @__PURE__ */ __name((area, point) => {\n const xMin = area.x - area.w / 2;\n const xMax = area.x + area.w / 2;\n const yMin = area.y - area.h / 2;\n const yMax = area.y + area.h / 2;\n if (point.x >= xMin && point.x <= xMax && point.y >= yMin && point.y <= yMax) {\n return true;\n } else {\n return false;\n }\n }, \"isInsideArea\");\n exports.isInsideArea = isInsideArea;\n exports.isInsideSomeAreas = (areas, point) => {\n const isInside = areas.some((area) => isInsideArea(area, point));\n return isInside;\n };\n exports.ignoreObjectsNotToDetect = (detections, objectsToDetect) => {\n return detections.filter((detection) => objectsToDetect.indexOf(detection.name) > -1);\n };\n var getRectangleEdges = /* @__PURE__ */ __name((item) => {\n return {\n x0: item.x - item.w / 2,\n y0: item.y - item.h / 2,\n x1: item.x + item.w / 2,\n y1: item.y + item.h / 2\n };\n }, \"getRectangleEdges\");\n exports.getRectangleEdges = getRectangleEdges;\n exports.iouAreas = (item1, item2) => {\n var rect1 = getRectangleEdges(item1);\n var rect2 = getRectangleEdges(item2);\n var overlap_x0 = Math.max(rect1.x0, rect2.x0);\n var overlap_y0 = Math.max(rect1.y0, rect2.y0);\n var overlap_x1 = Math.min(rect1.x1, rect2.x1);\n var overlap_y1 = Math.min(rect1.y1, rect2.y1);\n if (overlap_x1 - overlap_x0 <= 0 || overlap_y1 - overlap_y0 <= 0) {\n return 0;\n } else {\n const area_rect1 = item1.w * item1.h;\n const area_rect2 = item2.w * item2.h;\n const area_intersection = (overlap_x1 - overlap_x0) * (overlap_y1 - overlap_y0);\n const area_union = area_rect1 + area_rect2 - area_intersection;\n return area_intersection / area_union;\n }\n };\n exports.computeVelocityVector = (item1, item2, nbFrame) => {\n return {\n dx: (item2.x - item1.x) / nbFrame,\n dy: (item2.y - item1.y) / nbFrame\n };\n };\n exports.computeBearingIn360 = function(dx, dy) {\n var angle = Math.atan(dx / dy) / (Math.PI / 180);\n if (angle > 0) {\n if (dy > 0)\n return angle;\n else\n return 180 + angle;\n } else {\n if (dx > 0)\n return 180 + angle;\n else\n return 360 + angle;\n }\n };\n }\n});\n\n// ItemTracked.js\nvar require_ItemTracked = __commonJS({\n \"ItemTracked.js\"(exports) {\n var uuidv4 = require_v4();\n var computeBearingIn360 = require_utils().computeBearingIn360;\n var computeVelocityVector = require_utils().computeVelocityVector;\n exports.ITEM_HISTORY_MAX_LENGTH = 15;\n var idDisplay = 0;\n exports.ItemTracked = function(properties, frameNb, unMatchedFramesTolerance, fastDelete) {\n var DEFAULT_UNMATCHEDFRAMES_TOLERANCE = unMatchedFramesTolerance;\n var itemTracked = {};\n itemTracked.available = true;\n itemTracked.delete = false;\n itemTracked.fastDelete = fastDelete;\n itemTracked.frameUnmatchedLeftBeforeDying = unMatchedFramesTolerance;\n itemTracked.isZombie = false;\n itemTracked.appearFrame = frameNb;\n itemTracked.disappearFrame = null;\n itemTracked.disappearArea = {};\n itemTracked.nameCount = {};\n itemTracked.nameCount[properties.name] = 1;\n itemTracked.x = properties.x;\n itemTracked.y = properties.y;\n itemTracked.w = properties.w;\n itemTracked.h = properties.h;\n itemTracked.name = properties.name;\n itemTracked.confidence = properties.confidence;\n itemTracked.itemHistory = [];\n itemTracked.itemHistory.push({\n x: properties.x,\n y: properties.y,\n w: properties.w,\n h: properties.h,\n confidence: properties.confidence\n });\n if (itemTracked.itemHistory.length >= exports.ITEM_HISTORY_MAX_LENGTH) {\n itemTracked.itemHistory.shift();\n }\n itemTracked.velocity = {\n dx: 0,\n dy: 0\n };\n itemTracked.nbTimeMatched = 1;\n itemTracked.id = uuidv4();\n itemTracked.idDisplay = idDisplay;\n idDisplay++;\n itemTracked.update = function(properties2, frameNb2) {\n if (this.disappearFrame) {\n this.disappearFrame = null;\n this.disappearArea = {};\n }\n this.isZombie = false;\n this.nbTimeMatched += 1;\n this.x = properties2.x;\n this.y = properties2.y;\n this.w = properties2.w;\n this.h = properties2.h;\n this.confidence = properties2.confidence;\n this.itemHistory.push({\n x: this.x,\n y: this.y,\n w: this.w,\n h: this.h,\n confidence: this.confidence\n });\n if (itemTracked.itemHistory.length >= exports.ITEM_HISTORY_MAX_LENGTH) {\n itemTracked.itemHistory.shift();\n }\n this.name = properties2.name;\n if (this.nameCount[properties2.name]) {\n this.nameCount[properties2.name]++;\n } else {\n this.nameCount[properties2.name] = 1;\n }\n this.frameUnmatchedLeftBeforeDying = DEFAULT_UNMATCHEDFRAMES_TOLERANCE;\n this.velocity = this.updateVelocityVector();\n };\n itemTracked.makeAvailable = function() {\n this.available = true;\n return this;\n };\n itemTracked.makeUnavailable = function() {\n this.available = false;\n return this;\n };\n itemTracked.countDown = function(frameNb2) {\n if (this.disappearFrame === null) {\n this.disappearFrame = frameNb2;\n this.disappearArea = {\n x: this.x,\n y: this.y,\n w: this.w,\n h: this.h\n };\n }\n this.frameUnmatchedLeftBeforeDying--;\n this.isZombie = true;\n if (this.fastDelete && this.nbTimeMatched <= 1) {\n this.frameUnmatchedLeftBeforeDying = -1;\n }\n };\n itemTracked.updateTheoricalPositionAndSize = function() {\n this.itemHistory.push({\n x: this.x,\n y: this.y,\n w: this.w,\n h: this.h,\n confidence: this.confidence\n });\n if (itemTracked.itemHistory.length >= exports.ITEM_HISTORY_MAX_LENGTH) {\n itemTracked.itemHistory.shift();\n }\n this.x = this.x + this.velocity.dx;\n this.y = this.y + this.velocity.dy;\n };\n itemTracked.predictNextPosition = function() {\n return {\n x: this.x + this.velocity.dx,\n y: this.y + this.velocity.dy,\n w: this.w,\n h: this.h\n };\n };\n itemTracked.isDead = function() {\n return this.frameUnmatchedLeftBeforeDying < 0;\n };\n itemTracked.updateVelocityVector = function() {\n if (exports.ITEM_HISTORY_MAX_LENGTH <= 2) {\n return { dx: void 0, dy: void 0 };\n }\n if (this.itemHistory.length <= exports.ITEM_HISTORY_MAX_LENGTH) {\n const start = this.itemHistory[0];\n const end = this.itemHistory[this.itemHistory.length - 1];\n return computeVelocityVector(start, end, this.itemHistory.length);\n } else {\n const start = this.itemHistory[this.itemHistory.length - exports.ITEM_HISTORY_MAX_LENGTH];\n const end = this.itemHistory[this.itemHistory.length - 1];\n return computeVelocityVector(start, end, exports.ITEM_HISTORY_MAX_LENGTH);\n }\n };\n itemTracked.getMostlyMatchedName = function() {\n var nameMostlyMatchedOccurences = 0;\n var nameMostlyMatched = \"\";\n Object.keys(this.nameCount).map((name) => {\n if (this.nameCount[name] > nameMostlyMatchedOccurences) {\n nameMostlyMatched = name;\n nameMostlyMatchedOccurences = this.nameCount[name];\n }\n });\n return nameMostlyMatched;\n };\n itemTracked.toJSONDebug = function(roundInt = true) {\n return {\n id: this.id,\n idDisplay: this.idDisplay,\n x: roundInt ? parseInt(this.x, 10) : this.x,\n y: roundInt ? parseInt(this.y, 10) : this.y,\n w: roundInt ? parseInt(this.w, 10) : this.w,\n h: roundInt ? parseInt(this.h, 10) : this.h,\n confidence: Math.round(this.confidence * 100) / 100,\n // Here we negate dy to be in \"normal\" carthesian coordinates\n bearing: parseInt(computeBearingIn360(this.velocity.dx, -this.velocity.dy)),\n name: this.getMostlyMatchedName(),\n isZombie: this.isZombie,\n appearFrame: this.appearFrame,\n disappearFrame: this.disappearFrame\n };\n };\n itemTracked.toJSON = function(roundInt = true) {\n return {\n id: this.idDisplay,\n x: roundInt ? parseInt(this.x, 10) : this.x,\n y: roundInt ? parseInt(this.y, 10) : this.y,\n w: roundInt ? parseInt(this.w, 10) : this.w,\n h: roundInt ? parseInt(this.h, 10) : this.h,\n confidence: Math.round(this.confidence * 100) / 100,\n // Here we negate dy to be in \"normal\" carthesian coordinates\n bearing: parseInt(computeBearingIn360(this.velocity.dx, -this.velocity.dy), 10),\n name: this.getMostlyMatchedName(),\n isZombie: this.isZombie\n };\n };\n itemTracked.toMOT = function(frameIndex) {\n return `${frameIndex},${this.idDisplay},${this.x - this.w / 2},${this.y - this.h / 2},${this.w},${this.h},${this.confidence / 100},-1,-1,-1`;\n };\n itemTracked.toJSONGenericInfo = function() {\n return {\n id: this.id,\n idDisplay: this.idDisplay,\n appearFrame: this.appearFrame,\n disappearFrame: this.disappearFrame,\n disappearArea: this.disappearArea,\n nbActiveFrame: this.disappearFrame - this.appearFrame,\n name: this.getMostlyMatchedName()\n };\n };\n return itemTracked;\n };\n exports.reset = function() {\n idDisplay = 0;\n };\n }\n});\n\n// lib/kdTree-min.js\nvar require_kdTree_min = __commonJS({\n \"lib/kdTree-min.js\"(exports) {\n (function(root, factory) {\n if (typeof define === \"function\" && define.amd) {\n define([\"exports\"], factory);\n } else if (typeof exports === \"object\") {\n factory(exports);\n } else {\n factory(root);\n }\n })(exports, function(exports2) {\n function Node(obj, dimension, parent) {\n this.obj = obj;\n this.left = null;\n this.right = null;\n this.parent = parent;\n this.dimension = dimension;\n }\n __name(Node, \"Node\");\n function kdTree(points, metric, dimensions) {\n var self = this;\n function buildTree(points2, depth, parent) {\n var dim = depth % dimensions.length, median, node;\n if (points2.length === 0) {\n return null;\n }\n if (points2.length === 1) {\n return new Node(points2[0], dim, parent);\n }\n points2.sort(function(a, b) {\n return a[dimensions[dim]] - b[dimensions[dim]];\n });\n median = Math.floor(points2.length / 2);\n node = new Node(points2[median], dim, parent);\n node.left = buildTree(points2.slice(0, median), depth + 1, node);\n node.right = buildTree(points2.slice(median + 1), depth + 1, node);\n return node;\n }\n __name(buildTree, \"buildTree\");\n function loadTree(data) {\n self.root = data;\n function restoreParent(root) {\n if (root.left) {\n root.left.parent = root;\n restoreParent(root.left);\n }\n if (root.right) {\n root.right.parent = root;\n restoreParent(root.right);\n }\n }\n __name(restoreParent, \"restoreParent\");\n restoreParent(self.root);\n }\n __name(loadTree, \"loadTree\");\n if (!Array.isArray(points))\n loadTree(points, metric, dimensions);\n else\n this.root = buildTree(points, 0, null);\n this.toJSON = function(src) {\n if (!src)\n src = this.root;\n var dest = new Node(src.obj, src.dimension, null);\n if (src.left)\n dest.left = self.toJSON(src.left);\n if (src.right)\n dest.right = self.toJSON(src.right);\n return dest;\n };\n this.insert = function(point) {\n function innerSearch(node, parent) {\n if (node === null) {\n return parent;\n }\n var dimension2 = dimensions[node.dimension];\n if (point[dimension2] < node.obj[dimension2]) {\n return innerSearch(node.left, node);\n } else {\n return innerSearch(node.right, node);\n }\n }\n __name(innerSearch, \"innerSearch\");\n var insertPosition = innerSearch(this.root, null), newNode, dimension;\n if (insertPosition === null) {\n this.root = new Node(point, 0, null);\n return;\n }\n newNode = new Node(point, (insertPosition.dimension + 1) % dimensions.length, insertPosition);\n dimension = dimensions[insertPosition.dimension];\n if (point[dimension] < insertPosition.obj[dimension]) {\n insertPosition.left = newNode;\n } else {\n insertPosition.right = newNode;\n }\n };\n this.remove = function(point) {\n var node;\n function nodeSearch(node2) {\n if (node2 === null) {\n return null;\n }\n if (node2.obj === point) {\n return node2;\n }\n var dimension = dimensions[node2.dimension];\n if (point[dimension] < node2.obj[dimension]) {\n return nodeSearch(node2.left, node2);\n } else {\n return nodeSearch(node2.right, node2);\n }\n }\n __name(nodeSearch, \"nodeSearch\");\n function removeNode(node2) {\n var nextNode, nextObj, pDimension;\n function findMin(node3, dim) {\n var dimension, own, left, right, min;\n if (node3 === null) {\n return null;\n }\n dimension = dimensions[dim];\n if (node3.dimension === dim) {\n if (node3.left !== null) {\n return findMin(node3.left, dim);\n }\n return node3;\n }\n own = node3.obj[dimension];\n left = findMin(node3.left, dim);\n right = findMin(node3.right, dim);\n min = node3;\n if (left !== null && left.obj[dimension] < own) {\n min = left;\n }\n if (right !== null && right.obj[dimension] < min.obj[dimension]) {\n min = right;\n }\n return min;\n }\n __name(findMin, \"findMin\");\n if (node2.left === null && node2.right === null) {\n if (node2.parent === null) {\n self.root = null;\n return;\n }\n pDimension = dimensions[node2.parent.dimension];\n if (node2.obj[pDimension] < node2.parent.obj[pDimension]) {\n node2.parent.left = null;\n } else {\n node2.parent.right = null;\n }\n return;\n }\n if (node2.right !== null) {\n nextNode = findMin(node2.right, node2.dimension);\n nextObj = nextNode.obj;\n removeNode(nextNode);\n node2.obj = nextObj;\n } else {\n nextNode = findMin(node2.left, node2.dimension);\n nextObj = nextNode.obj;\n removeNode(nextNode);\n node2.right = node2.left;\n node2.left = null;\n node2.obj = nextObj;\n }\n }\n __name(removeNode, \"removeNode\");\n node = nodeSearch(self.root);\n if (node === null) {\n return;\n }\n removeNode(node);\n };\n this.nearest = function(point, maxNodes, maxDistance) {\n var i, result, bestNodes;\n bestNodes = new BinaryHeap(\n function(e) {\n return -e[1];\n }\n );\n function nearestSearch(node) {\n var bestChild, dimension = dimensions[node.dimension], ownDistance = metric(point, node.obj), linearPoint = {}, linearDistance, otherChild, i2;\n function saveNode(node2, distance) {\n bestNodes.push([node2, distance]);\n if (bestNodes.size() > maxNodes) {\n bestNodes.pop();\n }\n }\n __name(saveNode, \"saveNode\");\n for (i2 = 0; i2 < dimensions.length; i2 += 1) {\n if (i2 === node.dimension) {\n linearPoint[dimensions[i2]] = point[dimensions[i2]];\n } else {\n linearPoint[dimensions[i2]] = node.obj[dimensions[i2]];\n }\n }\n linearDistance = metric(linearPoint, node.obj);\n if (node.right === null && node.left === null) {\n if (bestNodes.size() < maxNodes || ownDistance < bestNodes.peek()[1]) {\n saveNode(node, ownDistance);\n }\n return;\n }\n if (node.right === null) {\n bestChild = node.left;\n } else if (node.left === null) {\n bestChild = node.right;\n } else {\n if (point[dimension] < node.obj[dimension]) {\n bestChild = node.left;\n } else {\n bestChild = node.right;\n }\n }\n nearestSearch(bestChild);\n if (bestNodes.size() < maxNodes || ownDistance < bestNodes.peek()[1]) {\n saveNode(node, ownDistance);\n }\n if (bestNodes.size() < maxNodes || Math.abs(linearDistance) < bestNodes.peek()[1]) {\n if (bestChild === node.left) {\n otherChild = node.right;\n } else {\n otherChild = node.left;\n }\n if (otherChild !== null) {\n nearestSearch(otherChild);\n }\n }\n }\n __name(nearestSearch, \"nearestSearch\");\n if (maxDistance) {\n for (i = 0; i < maxNodes; i += 1) {\n bestNodes.push([null, maxDistance]);\n }\n }\n if (self.root)\n nearestSearch(self.root);\n result = [];\n for (i = 0; i < Math.min(maxNodes, bestNodes.content.length); i += 1) {\n if (bestNodes.content[i][0]) {\n result.push([bestNodes.content[i][0].obj, bestNodes.content[i][1]]);\n }\n }\n return result;\n };\n this.balanceFactor = function() {\n function height(node) {\n if (node === null) {\n return 0;\n }\n return Math.max(height(node.left), height(node.right)) + 1;\n }\n __name(height, \"height\");\n function count(node) {\n if (node === null) {\n return 0;\n }\n return count(node.left) + count(node.right) + 1;\n }\n __name(count, \"count\");\n return height(self.root) / (Math.log(count(self.root)) / Math.log(2));\n };\n }\n __name(kdTree, \"kdTree\");\n function BinaryHeap(scoreFunction) {\n this.content = [];\n this.scoreFunction = scoreFunction;\n }\n __name(BinaryHeap, \"BinaryHeap\");\n BinaryHeap.prototype = {\n push: function(element) {\n this.content.push(element);\n this.bubbleUp(this.content.length - 1);\n },\n pop: function() {\n var result = this.content[0];\n var end = this.content.pop();\n if (this.content.length > 0) {\n this.content[0] = end;\n this.sinkDown(0);\n }\n return result;\n },\n peek: function() {\n return this.content[0];\n },\n remove: function(node) {\n var len = this.content.length;\n for (var i = 0; i < len; i++) {\n if (this.content[i] == node) {\n var end = this.content.pop();\n if (i != len - 1) {\n this.content[i] = end;\n if (this.scoreFunction(end) < this.scoreFunction(node))\n this.bubbleUp(i);\n else\n this.sinkDown(i);\n }\n return;\n }\n }\n throw new Error(\"Node not found.\");\n },\n size: function() {\n return this.content.length;\n },\n bubbleUp: function(n) {\n var element = this.content[n];\n while (n > 0) {\n var parentN = Math.floor((n + 1) / 2) - 1, parent = this.content[parentN];\n if (this.scoreFunction(element) < this.scoreFunction(parent)) {\n this.content[parentN] = element;\n this.content[n] = parent;\n n = parentN;\n } else {\n break;\n }\n }\n },\n sinkDown: function(n) {\n var length = this.content.length, element = this.content[n], elemScore = this.scoreFunction(element);\n while (true) {\n var child2N = (n + 1) * 2, child1N = child2N - 1;\n var swap = null;\n if (child1N < length) {\n var child1 = this.content[child1N], child1Score = this.scoreFunction(child1);\n if (child1Score < elemScore)\n swap = child1N;\n }\n if (child2N < length) {\n var child2 = this.content[child2N], child2Score = this.scoreFunction(child2);\n if (child2Score < (swap == null ? elemScore : child1Score)) {\n swap = child2N;\n }\n }\n if (swap != null) {\n this.content[n] = this.content[swap];\n this.content[swap] = element;\n n = swap;\n } else {\n break;\n }\n }\n }\n };\n exports2.kdTree = kdTree;\n exports2.BinaryHeap = BinaryHeap;\n });\n }\n});\n\n// node_modules/.pnpm/munkres-js@1.2.2/node_modules/munkres-js/munkres.js\nvar require_munkres = __commonJS({\n \"node_modules/.pnpm/munkres-js@1.2.2/node_modules/munkres-js/munkres.js\"(exports, module) {\n var MAX_SIZE = parseInt(Number.MAX_SAFE_INTEGER / 2) || (1 << 26) * (1 << 26);\n var DEFAULT_PAD_VALUE = 0;\n function Munkres() {\n this.C = null;\n this.row_covered = [];\n this.col_covered = [];\n this.n = 0;\n this.Z0_r = 0;\n this.Z0_c = 0;\n this.marked = null;\n this.path = null;\n }\n __name(Munkres, \"Munkres\");\n Munkres.prototype.pad_matrix = function(matrix, pad_value) {\n pad_value = pad_value || DEFAULT_PAD_VALUE;\n var max_columns = 0;\n var total_rows = matrix.length;\n var i;\n for (i = 0; i < total_rows; ++i)\n if (matrix[i].length > max_columns)\n max_columns = matrix[i].length;\n total_rows = max_columns > total_rows ? max_columns : total_rows;\n var new_matrix = [];\n for (i = 0; i < total_rows; ++i) {\n var row = matrix[i] || [];\n var new_row = row.slice();\n while (total_rows > new_row.length)\n new_row.push(pad_value);\n new_matrix.push(new_row);\n }\n return new_matrix;\n };\n Munkres.prototype.compute = function(cost_matrix, options) {\n options = options || {};\n options.padValue = options.padValue || DEFAULT_PAD_VALUE;\n this.C = this.pad_matrix(cost_matrix, options.padValue);\n this.n = this.C.length;\n this.original_length = cost_matrix.length;\n this.original_width = cost_matrix[0].length;\n var nfalseArray = [];\n while (nfalseArray.length < this.n)\n nfalseArray.push(false);\n this.row_covered = nfalseArray.slice();\n this.col_covered = nfalseArray.slice();\n this.Z0_r = 0;\n this.Z0_c = 0;\n this.path = this.__make_matrix(this.n * 2, 0);\n this.marked = this.__make_matrix(this.n, 0);\n var step = 1;\n var steps = {\n 1: this.__step1,\n 2: this.__step2,\n 3: this.__step3,\n 4: this.__step4,\n 5: this.__step5,\n 6: this.__step6\n };\n while (true) {\n var func = steps[step];\n if (!func)\n break;\n step = func.apply(this);\n }\n var results = [];\n for (var i = 0; i < this.original_length; ++i)\n for (var j = 0; j < this.original_width; ++j)\n if (this.marked[i][j] == 1)\n results.push([i, j]);\n return results;\n };\n Munkres.prototype.__make_matrix = function(n, val) {\n var matrix = [];\n for (var i = 0; i < n; ++i) {\n matrix[i] = [];\n for (var j = 0; j < n; ++j)\n matrix[i][j] = val;\n }\n return matrix;\n };\n Munkres.prototype.__step1 = function() {\n for (var i = 0; i < this.n; ++i) {\n var minval = Math.min.apply(Math, this.C[i]);\n for (var j = 0; j < this.n; ++j)\n this.C[i][j] -= minval;\n }\n return 2;\n };\n Munkres.prototype.__step2 = function() {\n for (var i = 0; i < this.n; ++i) {\n for (var j = 0; j < this.n; ++j) {\n if (this.C[i][j] === 0 && !this.col_covered[j] && !this.row_covered[i]) {\n this.marked[i][j] = 1;\n this.col_covered[j] = true;\n this.row_covered[i] = true;\n break;\n }\n }\n }\n this.__clear_covers();\n return 3;\n };\n Munkres.prototype.__step3 = function() {\n var count = 0;\n for (var i = 0; i < this.n; ++i) {\n for (var j = 0; j < this.n; ++j) {\n if (this.marked[i][j] == 1 && this.col_covered[j] == false) {\n this.col_covered[j] = true;\n ++count;\n }\n }\n }\n return count >= this.n ? 7 : 4;\n };\n Munkres.prototype.__step4 = function() {\n var done = false;\n var row = -1, col = -1, star_col = -1;\n while (!done) {\n var z = this.__find_a_zero();\n row = z[0];\n col = z[1];\n if (row < 0)\n return 6;\n this.marked[row][col] = 2;\n star_col = this.__find_star_in_row(row);\n if (star_col >= 0) {\n col = star_col;\n this.row_covered[row] = true;\n this.col_covered[col] = false;\n } else {\n this.Z0_r = row;\n this.Z0_c = col;\n return 5;\n }\n }\n };\n Munkres.prototype.__step5 = function() {\n var count = 0;\n this.path[count][0] = this.Z0_r;\n this.path[count][1] = this.Z0_c;\n var done = false;\n while (!done) {\n var row = this.__find_star_in_col(this.path[count][1]);\n if (row >= 0) {\n count++;\n this.path[count][0] = row;\n this.path[count][1] = this.path[count - 1][1];\n } else {\n done = true;\n }\n if (!done) {\n var col = this.__find_prime_in_row(this.path[count][0]);\n count++;\n this.path[count][0] = this.path[count - 1][0];\n this.path[count][1] = col;\n }\n }\n this.__convert_path(this.path, count);\n this.__clear_covers();\n this.__erase_primes();\n return 3;\n };\n Munkres.prototype.__step6 = function() {\n var minval = this.__find_smallest();\n for (var i = 0; i < this.n; ++i) {\n for (var j = 0; j < this.n; ++j) {\n if (this.row_covered[i])\n this.C[i][j] += minval;\n if (!this.col_covered[j])\n this.C[i][j] -= minval;\n }\n }\n return 4;\n };\n Munkres.prototype.__find_smallest = function() {\n var minval = MAX_SIZE;\n for (var i = 0; i < this.n; ++i)\n for (var j = 0; j < this.n; ++j)\n if (!this.row_covered[i] && !this.col_covered[j]) {\n if (minval > this.C[i][j])\n minval = this.C[i][j];\n }\n return minval;\n };\n Munkres.prototype.__find_a_zero = function() {\n for (var i = 0; i < this.n; ++i)\n for (var j = 0; j < this.n; ++j)\n if (this.C[i][j] === 0 && !this.row_covered[i] && !this.col_covered[j])\n return [i, j];\n return [-1, -1];\n };\n Munkres.prototype.__find_star_in_row = function(row) {\n for (var j = 0; j < this.n; ++j)\n if (this.marked[row][j] == 1)\n return j;\n return -1;\n };\n Munkres.prototype.__find_star_in_col = function(col) {\n for (var i = 0; i < this.n; ++i)\n if (this.marked[i][col] == 1)\n return i;\n return -1;\n };\n Munkres.prototype.__find_prime_in_row = function(row) {\n for (var j = 0; j < this.n; ++j)\n if (this.marked[row][j] == 2)\n return j;\n return -1;\n };\n Munkres.prototype.__convert_path = function(path, count) {\n for (var i = 0; i <= count; ++i)\n this.marked[path[i][0]][path[i][1]] = this.marked[path[i][0]][path[i][1]] == 1 ? 0 : 1;\n };\n Munkres.prototype.__clear_covers = function() {\n for (var i = 0; i < this.n; ++i) {\n this.row_covered[i] = false;\n this.col_covered[i] = false;\n }\n };\n Munkres.prototype.__erase_primes = function() {\n for (var i = 0; i < this.n; ++i)\n for (var j = 0; j < this.n; ++j)\n if (this.marked[i][j] == 2)\n this.marked[i][j] = 0;\n };\n function make_cost_matrix(profit_matrix, inversion_function) {\n var i, j;\n if (!inversion_function) {\n var maximum = -1 / 0;\n for (i = 0; i < profit_matrix.length; ++i)\n for (j = 0; j < profit_matrix[i].length; ++j)\n if (profit_matrix[i][j] > maximum)\n maximum = profit_matrix[i][j];\n inversion_function = /* @__PURE__ */ __name(function(x) {\n return maximum - x;\n }, \"inversion_function\");\n }\n var cost_matrix = [];\n for (i = 0; i < profit_matrix.length; ++i) {\n var row = profit_matrix[i];\n cost_matrix[i] = [];\n for (j = 0; j < row.length; ++j)\n cost_matrix[i][j] = inversion_function(profit_matrix[i][j]);\n }\n return cost_matrix;\n }\n __name(make_cost_matrix, \"make_cost_matrix\");\n function format_matrix(matrix) {\n var columnWidths = [];\n var i, j;\n for (i = 0; i < matrix.length; ++i) {\n for (j = 0; j < matrix[i].length; ++j) {\n var entryWidth = String(matrix[i][j]).length;\n if (!columnWidths[j] || entryWidth >= columnWidths[j])\n columnWidths[j] = entryWidth;\n }\n }\n var formatted = \"\";\n for (i = 0; i < matrix.length; ++i) {\n for (j = 0; j < matrix[i].length; ++j) {\n var s = String(matrix[i][j]);\n while (s.length < columnWidths[j])\n s = \" \" + s;\n formatted += s;\n if (j != matrix[i].length - 1)\n formatted += \" \";\n }\n if (i != matrix[i].length - 1)\n formatted += \"\\n\";\n }\n return formatted;\n }\n __name(format_matrix, \"format_matrix\");\n function computeMunkres(cost_matrix, options) {\n var m = new Munkres();\n return m.compute(cost_matrix, options);\n }\n __name(computeMunkres, \"computeMunkres\");\n computeMunkres.version = \"1.2.2\";\n computeMunkres.format_matrix = format_matrix;\n computeMunkres.make_cost_matrix = make_cost_matrix;\n computeMunkres.Munkres = Munkres;\n if (typeof module !== \"undefined\" && module.exports) {\n module.exports = computeMunkres;\n }\n }\n});\n\n// tracker.js\nvar require_tracker = __commonJS({\n \"tracker.js\"(exports) {\n var itemTrackedModule = require_ItemTracked();\n var ItemTracked = itemTrackedModule.ItemTracked;\n var kdTree = require_kdTree_min().kdTree;\n var iouAreas = require_utils().iouAreas;\n var munkres = require_munkres();\n var DEBUG_MODE = false;\n var iouDistance = /* @__PURE__ */ __name(function(item1, item2) {\n var iou = iouAreas(item1, item2);\n var distance = 1 - iou;\n if (distance > 1 - params.iouLimit) {\n distance = params.distanceLimit + 1;\n }\n return distance;\n }, \"iouDistance\");\n var params = {\n // DEFAULT_UNMATCHEDFRAMES_TOLERANCE\n // This the number of frame we wait when an object isn't matched before considering it gone\n unMatchedFramesTolerance: 5,\n // DEFAULT_IOU_LIMIT, exclude things from beeing matched if their IOU is lower than this\n // 1 means total overlap whereas 0 means no overlap\n iouLimit: 0.05,\n // Remove new objects fast if they could not be matched in the next frames.\n // Setting this to false ensures the object will stick around at least\n // unMatchedFramesTolerance frames, even if they could neven be matched in\n // subsequent frames.\n fastDelete: true,\n // The function to use to determine the distance between to detected objects\n distanceFunc: iouDistance,\n // The distance limit for matching. If values need to be excluded from\n // matching set their distance to something greater than the distance limit\n distanceLimit: 1e4,\n // The algorithm used to match tracks with new detections. Can be either\n // 'kdTree' or 'munkres'.\n matchingAlgorithm: \"kdTree\"\n };\n var mapOfItemsTracked = /* @__PURE__ */ new Map();\n var mapOfAllItemsTracked = /* @__PURE__ */ new Map();\n var keepAllHistoryInMemory = false;\n exports.computeDistance = iouDistance;\n exports.updateTrackedItemsWithNewFrame = function(detectionsOfThisFrame, frameNb) {\n var treeItemsTracked = new kdTree(Array.from(mapOfItemsTracked.values()), params.distanceFunc, [\"x\", \"y\", \"w\", \"h\"]);\n var treeDetectionsOfThisFrame = new kdTree(detectionsOfThisFrame, params.distanceFunc, [\"x\", \"y\", \"w\", \"h\"]);\n if (mapOfItemsTracked.size === 0) {\n detectionsOfThisFrame.forEach(function(itemDetected) {\n var newItemTracked = new ItemTracked(itemDetected, frameNb, params.unMatchedFramesTolerance, params.fastDelete);\n mapOfItemsTracked.set(newItemTracked.id, newItemTracked);\n treeItemsTracked.insert(newItemTracked);\n });\n } else {\n var matchedList = new Array(detectionsOfThisFrame.length);\n matchedList.fill(false);\n if (detectionsOfThisFrame.length > 0) {\n if (params.matchingAlgorithm === \"munkres\") {\n var trackedItemIds = Array.from(mapOfItemsTracked.keys());\n var costMatrix = Array.from(mapOfItemsTracked.values()).map((itemTracked) => {\n var predictedPosition = itemTracked.predictNextPosition();\n return detectionsOfThisFrame.map(\n (detection) => params.distanceFunc(predictedPosition, detection)\n );\n });\n mapOfItemsTracked.forEach(function(itemTracked) {\n itemTracked.makeAvailable();\n });\n munkres(costMatrix).filter((m) => costMatrix[m[0]][m[1]] <= params.distanceLimit).forEach((m) => {\n var itemTracked = mapOfItemsTracked.get(trackedItemIds[m[0]]);\n var updatedTrackedItemProperties = detectionsOfThisFrame[m[1]];\n matchedList[m[1]] = { idDisplay: itemTracked.idDisplay };\n itemTracked.makeUnavailable().update(updatedTrackedItemProperties, frameNb);\n });\n matchedList.forEach(function(matched, index) {\n if (!matched) {\n if (Math.min(...costMatrix.map((m) => m[index])) > params.distanceLimit) {\n var newItemTracked = ItemTracked(detectionsOfThisFrame[index], frameNb, params.unMatchedFramesTolerance, params.fastDelete);\n mapOfItemsTracked.set(newItemTracked.id, newItemTracked);\n newItemTracked.makeUnavailable();\n costMatrix.push(detectionsOfThisFrame.map(\n (detection) => params.distanceFunc(newItemTracked, detection)\n ));\n }\n }\n });\n } else if (params.matchingAlgorithm === \"kdTree\") {\n mapOfItemsTracked.forEach(function(itemTracked) {\n var predictedPosition = itemTracked.predictNextPosition();\n itemTracked.makeAvailable();\n var treeSearchResult = treeDetectionsOfThisFrame.nearest(predictedPosition, 1, params.distanceLimit)[0];\n var treeSearchResultWithoutPrediction = treeDetectionsOfThisFrame.nearest(itemTracked, 1, params.distanceLimit)[0];\n var treeSearchMultipleResults = treeDetectionsOfThisFrame.nearest(predictedPosition, 2, params.distanceLimit);\n if (treeSearchResult) {\n var indexClosestNewDetectedItem = detectionsOfThisFrame.indexOf(treeSearchResult[0]);\n if (!matchedList[indexClosestNewDetectedItem]) {\n matchedList[indexClosestNewDetectedItem] = {\n idDisplay: itemTracked.idDisplay\n };\n var updatedTrackedItemProperties = detectionsOfThisFrame[indexClosestNewDetectedItem];\n mapOfItemsTracked.get(itemTracked.id).makeUnavailable().update(updatedTrackedItemProperties, frameNb);\n } else {\n }\n }\n });\n } else {\n throw `Unknown matching algorithm \"${params.matchingAlgorithm}\"`;\n }\n } else {\n if (DEBUG_MODE) {\n console.log(\"[Tracker] Nothing detected for frame n\\xBA\" + frameNb);\n }\n mapOfItemsTracked.forEach(function(itemTracked) {\n itemTracked.makeAvailable();\n });\n }\n if (params.matchingAlgorithm === \"kdTree\") {\n if (mapOfItemsTracked.size > 0) {\n treeItemsTracked = new kdTree(Array.from(mapOfItemsTracked.values()), params.distanceFunc, [\"x\", \"y\", \"w\", \"h\"]);\n matchedList.forEach(function(matched, index) {\n if (!matched) {\n var treeSearchResult = treeItemsTracked.nearest(detectionsOfThisFrame[index], 1, params.distanceLimit)[0];\n if (!treeSearchResult) {\n var newItemTracked = ItemTracked(detectionsOfThisFrame[index], frameNb, params.unMatchedFramesTolerance, params.fastDelete);\n mapOfItemsTracked.set(newItemTracked.id, newItemTracked);\n treeItemsTracked.insert(newItemTracked);\n newItemTracked.makeUnavailable();\n } else {\n }\n }\n });\n }\n }\n mapOfItemsTracked.forEach(function(itemTracked) {\n if (itemTracked.available) {\n itemTracked.countDown(frameNb);\n itemTracked.updateTheoricalPositionAndSize();\n if (itemTracked.isDead()) {\n mapOfItemsTracked.delete(itemTracked.id);\n treeItemsTracked.remove(itemTracked);\n if (keepAllHistoryInMemory) {\n mapOfAllItemsTracked.set(itemTracked.id, itemTracked);\n }\n }\n }\n });\n }\n };\n exports.reset = function() {\n mapOfItemsTracked = /* @__PURE__ */ new Map();\n mapOfAllItemsTracked = /* @__PURE__ */ new Map();\n itemTrackedModule.reset();\n };\n exports.setParams = function(newParams) {\n Object.keys(newParams).forEach((key) => {\n params[key] = newParams[key];\n });\n };\n exports.enableKeepInMemory = function() {\n keepAllHistoryInMemory = true;\n };\n exports.disableKeepInMemory = function() {\n keepAllHistoryInMemory = false;\n };\n exports.getJSONOfTrackedItems = function(roundInt = true) {\n return Array.from(mapOfItemsTracked.values()).map(function(itemTracked) {\n return itemTracked.toJSON(roundInt);\n });\n };\n exports.getJSONDebugOfTrackedItems = function(roundInt = true) {\n return Array.from(mapOfItemsTracked.values()).map(function(itemTracked) {\n return itemTracked.toJSONDebug(roundInt);\n });\n };\n exports.getTrackedItemsInMOTFormat = function(frameNb) {\n return Array.from(mapOfItemsTracked.values()).map(function(itemTracked) {\n return itemTracked.toMOT(frameNb);\n });\n };\n exports.getAllTrackedItems = function() {\n return mapOfAllItemsTracked;\n };\n exports.getJSONOfAllTrackedItems = function() {\n return Array.from(mapOfAllItemsTracked.values()).map(function(itemTracked) {\n return itemTracked.toJSONGenericInfo();\n });\n };\n }\n});\nexport default require_tracker();\n/**\n * k-d Tree JavaScript - V 1.01\n *\n * https://github.com/ubilabs/kd-tree-javascript\n *\n * @author Mircea Pricop , 2012\n * @author Martin Kleppe , 2012\n * @author Ubilabs http://ubilabs.net, 2012\n * @license MIT License \n */\n"], - "mappings": "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", - "names": ["H", "__defProp", "__getOwnPropNames", "__name", "target", "value", "__commonJS", "cb", "mod", "require_rng_browser", "exports", "module", "getRandomValues", "rnds8", "rnds", "i", "r", "require_bytesToUuid", "byteToHex", "bytesToUuid", "buf", "offset", "i2", "bth", "require_v4", "rng", "v4", "options", "ii", "require_utils", "detections", "largestAllowed", "isInsideArea", "area", "point", "xMin", "xMax", "yMin", "yMax", "areas", "objectsToDetect", "detection", "getRectangleEdges", "item", "item1", "item2", "rect1", "rect2", "overlap_x0", "overlap_y0", "overlap_x1", "overlap_y1", "area_rect1", "area_rect2", "area_intersection", "area_union", "nbFrame", "dx", "dy", "angle", "require_ItemTracked", "uuidv4", "computeBearingIn360", "computeVelocityVector", "idDisplay", "properties", "frameNb", "unMatchedFramesTolerance", "fastDelete", "DEFAULT_UNMATCHEDFRAMES_TOLERANCE", "itemTracked", "properties2", "frameNb2", "start", "end", "nameMostlyMatchedOccurences", "nameMostlyMatched", "name", "roundInt", "frameIndex", "require_kdTree_min", "root", "factory", "exports2", "Node", "obj", "dimension", "parent", "kdTree", "points", "metric", "dimensions", "self", "buildTree", "points2", "depth", "dim", "median", "node", "a", "b", "loadTree", "data", "restoreParent", "src", "dest", "innerSearch", "dimension2", "insertPosition", "newNode", "nodeSearch", "node2", "removeNode", "nextNode", "nextObj", "pDimension", "findMin", "node3", "own", "left", "right", "min", "maxNodes", "maxDistance", "result", "bestNodes", "BinaryHeap", "e", "nearestSearch", "bestChild", "ownDistance", "linearPoint", "linearDistance", "otherChild", "saveNode", "distance", "height", "count", "scoreFunction", "element", "len", "n", "parentN", "length", "elemScore", "child2N", "child1N", "swap", "child1", "child1Score", "child2", "child2Score", "require_munkres", "MAX_SIZE", "DEFAULT_PAD_VALUE", "Munkres", "matrix", "pad_value", "max_columns", "total_rows", "new_matrix", "row", "new_row", "cost_matrix", "nfalseArray", "step", "steps", "func", "results", "j", "val", "minval", "done", "col", "star_col", "z", "path", "make_cost_matrix", "profit_matrix", "inversion_function", "maximum", "x", "format_matrix", "columnWidths", "entryWidth", "formatted", "s", "computeMunkres", "m", "require_tracker", "itemTrackedModule", "ItemTracked", "iouAreas", "munkres", "DEBUG_MODE", "iouDistance", "iou", "params", "mapOfItemsTracked", "mapOfAllItemsTracked", "keepAllHistoryInMemory", "detectionsOfThisFrame", "treeItemsTracked", "treeDetectionsOfThisFrame", "itemDetected", "newItemTracked", "matchedList", "trackedItemIds", "costMatrix", "predictedPosition", "updatedTrackedItemProperties", "matched", "index", "treeSearchResult", "treeSearchResultWithoutPrediction", "treeSearchMultipleResults", "indexClosestNewDetectedItem", "newParams", "key", "tracker_default", "humanConfig", "trackerConfig", "human", "dom", "timestamp", "fps", "log", "msg", "status", "detectionLoop", "tensors", "drawLoop", "res", "tracking", "data", "items", "obj", "tracker_default", "i", "name", "now", "handleVideo", "file", "url", "initInput", "evt", "_a", "_b", "main"] + "mappings": "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", + "names": [] } diff --git a/demo/typescript/index.js b/demo/typescript/index.js index 0aded5ab..94d4c63f 100644 --- a/demo/typescript/index.js +++ b/demo/typescript/index.js @@ -4,6 +4,105 @@ author: ' */ -import*as m from"../../dist/human.esm.js";var v=1920,b={debug:!0,backend:"webgl",modelBasePath:"https://vladmandic.github.io/human-models/models/",filter:{enabled:!0,equalization:!1,flip:!1},face:{enabled:!0,detector:{rotation:!1},mesh:{enabled:!0},attention:{enabled:!1},iris:{enabled:!0},description:{enabled:!0},emotion:{enabled:!0},antispoof:{enabled:!0},liveness:{enabled:!0}},body:{enabled:!1},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;e.draw.options.drawPoints=!0;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)},i=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 f(){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(f)}async function u(){var d,r,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 p={bodyLabels:`person confidence [score] and ${(c=(r=(d=e.result)==null?void 0:d.body)==null?void 0:r[0])==null?void 0:c.keypoints.length} keypoints`};await e.draw.all(a.canvas,l,p),g(l.performance)}let t=e.now();s.drawFPS=Math.round(1e3*1e3/(t-n.draw))/1e3,n.draw=t,i(a.video.paused?"paused":`fps: ${s.detectFPS.toFixed(1).padStart(5," ")} detect | ${s.drawFPS.toFixed(1).padStart(5," ")} draw`),setTimeout(u,30)}async function h(){let d=(await e.webcam.enumerate())[0].deviceId,r=await e.webcam.start({element:a.video,crop:!1,width:v,id:d});o(r),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),i("loading..."),await e.load(),o("backend:",e.tf.getBackend(),"| available:",e.env.backends),o("models stats:",e.models.stats()),o("models loaded:",e.models.loaded()),o("environment",e.env),i("initializing..."),await e.warmup(),await h(),await f(),await u()}window.onload=y; + +// demo/typescript/index.ts +import * as H from "../../dist/human.esm.js"; +var width = 1920; +var humanConfig = { + // user configuration for human, used to fine-tune behavior + debug: true, + backend: "webgl", + // cacheSensitivity: 0, + // cacheModels: false, + // warmup: 'none', + // modelBasePath: '../../models', + modelBasePath: "https://vladmandic.github.io/human-models/models/", + filter: { enabled: true, equalization: false, flip: false }, + face: { enabled: true, detector: { rotation: false }, mesh: { enabled: true }, attention: { enabled: false }, iris: { enabled: true }, description: { enabled: true }, emotion: { enabled: true }, antispoof: { enabled: true }, liveness: { enabled: true } }, + body: { enabled: false }, + 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; +human.draw.options.drawPoints = true; +var dom = { + // grab instances of dom objects so we dont have to look them up later + 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; + const webcamStatus = await human.webcam.start({ element: dom.video, crop: false, width, id }); + log(webcamStatus); + 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 0d0679e0..ad82ba87 100644 --- a/demo/typescript/index.js.map +++ b/demo/typescript/index.js.map @@ -2,6 +2,6 @@ "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 debug: true,\n backend: 'webgl',\n // cacheSensitivity: 0,\n // cacheModels: false,\n // warmup: 'none',\n // modelBasePath: '../../models',\n modelBasePath: 'https://vladmandic.github.io/human-models/models/',\n filter: { enabled: true, equalization: false, flip: false },\n face: { enabled: true, detector: { rotation: false }, mesh: { enabled: true }, attention: { enabled: false }, iris: { enabled: true }, description: { enabled: true }, emotion: { enabled: true }, antispoof: { enabled: true }, liveness: { enabled: true } },\n body: { enabled: false },\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;\nhuman.draw.options.drawPoints = true; // draw points on face mesh\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 const webcamStatus = await human.webcam.start({ element: dom.video, crop: false, width, id }); // use human webcam helper methods and associate webcam stream with a dom element\n log(webcamStatus);\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": ["H", "width", "humanConfig", "human", "dom", "timestamp", "fps", "log", "msg", "status", "perf", "detectionLoop", "tensors", "drawLoop", "_a", "_b", "_c", "interpolated", "processed", "opt", "now", "webCam", "id", "webcamStatus", "main"] + "mappings": "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", + "names": [] } diff --git a/dist/human.esm-nobundle.js b/dist/human.esm-nobundle.js index 018571e4..de58ac20 100644 --- a/dist/human.esm-nobundle.js +++ b/dist/human.esm-nobundle.js @@ -4,7 +4,255 @@ author: ' */ -var at=Object.defineProperty;var Qn=Object.getOwnPropertyDescriptor;var _n=Object.getOwnPropertyNames;var $n=Object.prototype.hasOwnProperty;var eo=(e,t,n)=>t in e?at(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var oe=(e,t)=>{for(var n in t)at(e,n,{get:t[n],enumerable:!0})},X5=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of _n(t))!$n.call(e,s)&&s!==n&&at(e,s,{get:()=>t[s],enumerable:!(o=Qn(t,s))||o.enumerable});return e},w=(e,t,n)=>(X5(e,t,"default"),n&&X5(n,t,"default"));var z=(e,t,n)=>(eo(e,typeof t!="symbol"?t+"":t,n),n),q5=(e,t,n)=>{if(!t.has(e))throw TypeError("Cannot "+n)};var E0=(e,t,n)=>(q5(e,t,"read from private field"),n?n.call(e):t.get(e)),q0=(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)},Q0=(e,t,n,o)=>(q5(e,t,"write to private field"),o?o.call(e,n):t.set(e,n),n);var r={};oe(r,{node:()=>it,version:()=>Je});w(r,vA);w(r,RA);w(r,MA);w(r,PA);w(r,kA);w(r,wA);import*as vA from"@tensorflow/tfjs-core/dist/index.js";import*as RA from"@tensorflow/tfjs-converter/dist/index.js";import*as MA from"@tensorflow/tfjs-backend-cpu/dist/index.js";import*as PA from"@tensorflow/tfjs-backend-webgl/dist/index.js";import*as kA from"@tensorflow/tfjs-backend-wasm/dist/index.js";import*as wA from"@tensorflow/tfjs-backend-webgpu/dist/index.js";var U5="4.17.0",to="4.17.0",no="4.17.0",oo="4.17.0",ro="4.17.0",so="4.17.0",Je={tfjs:U5,"tfjs-core":U5,"tfjs-converter":to,"tfjs-backend-cpu":no,"tfjs-backend-webgl":oo,"tfjs-backend-wasm":ro,"tfjs-backend-webgpu":so},it=void 0;function b(...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 Y5(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 R=()=>typeof performance!="undefined"?performance.now():parseInt((Number(process.hrtime.bigint())/1e3/1e3).toString());function lt(e,t,n="config",o=[]){for(let s of Object.keys(t))if(typeof t[s]=="object")lt(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&&b("invalid configuration",o),o}function Q(...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]=Q(A,a):n[s]=a}),n),{})}var Ce={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:!1,maxDetected:1,skipFrames:99,skipTime:2500,minConfidence:.2,minSize:0,iouThreshold:.1,scale:1.4,mask:!1,return:!1},mesh:{enabled:!0,modelPath:"facemesh.json",keepInvalid:!1},attention:{enabled:!1,modelPath:"facemesh-attention.json"},iris:{enabled:!0,scale:2.3,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-lite.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 K5=` +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __typeError = (msg) => { + throw TypeError(msg); +}; +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); +var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg); +var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj)); +var __privateAdd = (obj, member, value) => member.has(obj) ? __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), value); + +// dist/tfjs.esm.js +var tfjs_esm_exports = {}; +__export(tfjs_esm_exports, { + node: () => node, + 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.21.0"; +var version2 = "4.21.0"; +var version3 = "4.21.0"; +var version4 = "4.21.0"; +var version5 = "4.21.0"; +var version6 = "4.21.0"; +var version7 = { + tfjs: version, + "tfjs-core": version, + // 'tfjs-data': tfjsDataVersion, + // 'tfjs-layers': tfjsLayersVersion, + "tfjs-converter": version2, + "tfjs-backend-cpu": version3, + "tfjs-backend-webgl": version4, + "tfjs-backend-wasm": version5, + "tfjs-backend-webgpu": version6 +}; +var node = void 0; + +// src/util/util.ts +function log(...msg) { + const dt = /* @__PURE__ */ 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: false, + maxDetected: 1, + skipFrames: 99, + skipTime: 2500, + minConfidence: 0.2, + minSize: 0, + iouThreshold: 0.1, + scale: 1.4, + mask: false, + return: false + }, + mesh: { + enabled: true, + modelPath: "facemesh.json", + keepInvalid: false + }, + attention: { + enabled: false, + modelPath: "facemesh-attention.json" + }, + iris: { + enabled: true, + scale: 2.3, + 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-lite.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 +262,8 @@ var at=Object.defineProperty;var Qn=Object.getOwnPropertyDescriptor;var _n=Objec vUv = uv; gl_Position = vec4(pos.x, pos.y*flipY, 0.0, 1.); } -`;var J5=` +`; +var colorMatrixWithAlpha = ` precision highp float; varying vec2 vUv; uniform sampler2D texture; @@ -26,7 +275,8 @@ var at=Object.defineProperty;var Qn=Object.getOwnPropertyDescriptor;var _n=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]; } -`,Q5=` +`; +var colorMatrixWithoutAlpha = ` precision highp float; varying vec2 vUv; uniform sampler2D texture; @@ -38,7 +288,8 @@ var at=Object.defineProperty;var Qn=Object.getOwnPropertyDescriptor;var _n=Objec gl_FragColor.b = m[10] * c.r + m[11] * c.g + m[12] * c.b + m[14]; gl_FragColor.a = c.a; } -`,_5=` +`; +var pixelate = ` precision highp float; varying vec2 vUv; uniform vec2 size; @@ -51,7 +302,8 @@ var at=Object.defineProperty;var Qn=Object.getOwnPropertyDescriptor;var _n=Objec vec2 coord = pixelate(vUv, size); gl_FragColor += texture2D(texture, coord); } -`,$5=` +`; +var blur = ` precision highp float; varying vec2 vUv; uniform sampler2D texture; @@ -74,7 +326,8 @@ var at=Object.defineProperty;var Qn=Object.getOwnPropertyDescriptor;var _n=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; } -`,e1=` +`; +var convolution = ` precision highp float; varying vec2 vUv; uniform sampler2D texture; @@ -96,20 +349,6021 @@ var at=Object.defineProperty;var Qn=Object.getOwnPropertyDescriptor;var _n=Objec c31 * m[6] + c32 * m[7] + c33 * m[8]; gl_FragColor.a = c22.a; } -`;var ct=(e,t,n)=>{let o=new RegExp("\\b"+t+" \\w+ (\\w+)","ig");e.replace(o,(s,A)=>(n[A]=0,s))},dt=class{constructor(t,n,o){z(this,"uniform",{});z(this,"attribute",{});z(this,"gl");z(this,"id");z(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:(b(`filter: gl compile failed: ${this.gl.getShaderInfoLog(o)||"unknown"}`),null)):(b("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){b("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)){b(`filter: gl link failed: ${this.gl.getProgramInfoLog(this.id)||"unknown"}`);return}this.gl.useProgram(this.id),ct(n,"attribute",this.attribute);for(let a in this.attribute)this.attribute[a]=this.gl.getAttribLocation(this.id,a);ct(n,"uniform",this.uniform),ct(o,"uniform",this.uniform);for(let a in this.uniform)this.uniform[a]=this.gl.getUniformLocation(this.id,a)}}};function t1(){let e=0,t=null,n=!1,o=-1,s=[null,null],A=[],a=null,i=null,c=D0(100,100),d={},y={INTERMEDIATE:1},l=c.getContext("webgl");if(!l){b("filter: cannot get webgl context");return}this.gl=l;function f(v,u){if(!(v===c.width&&u===c.height)){if(c.width=v,c.height=u,!a){let g=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,g,l.STATIC_DRAW),l.pixelStorei(l.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0)}l.viewport(0,0,c.width,c.height),s=[null,null]}}function x(v,u){let g=l.createFramebuffer();l.bindFramebuffer(l.FRAMEBUFFER,g);let E=l.createRenderbuffer();l.bindRenderbuffer(l.RENDERBUFFER,E);let k=l.createTexture();return l.bindTexture(l.TEXTURE_2D,k),l.texImage2D(l.TEXTURE_2D,0,l.RGBA,v,u,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:g,texture:k}}function p(v){return s[v]=s[v]||x(c.width,c.height),s[v]}function m(v=0){if(!i)return;let u=null,g=null,E=!1;e===0?u=t:u=p(o).texture||null,e++,n&&!(v&y.INTERMEDIATE)?(g=null,E=e%2===0):(o=(o+1)%2,g=p(o).fbo||null),l.bindTexture(l.TEXTURE_2D,u),l.bindFramebuffer(l.FRAMEBUFFER,g),l.uniform1f(i.uniform.flipY,E?-1:1),l.drawArrays(l.TRIANGLES,0,6)}function h(v){if(d[v])return i=d[v],l.useProgram((i?i.id:null)||null),i;if(i=new dt(l,K5,v),!i)return b("filter: could not get webgl program"),null;let u=Float32Array.BYTES_PER_ELEMENT,g=4*u;return l.enableVertexAttribArray(i.attribute.pos),l.vertexAttribPointer(i.attribute.pos,2,l.FLOAT,!1,g,0*u),l.enableVertexAttribArray(i.attribute.uv),l.vertexAttribPointer(i.attribute.uv,2,l.FLOAT,!1,g,2*u),d[v]=i,i}let T={colorMatrix:v=>{let u=new Float32Array(v);u[4]/=255,u[9]/=255,u[14]/=255,u[19]/=255;let g=u[18]===1&&u[3]===0&&u[8]===0&&u[13]===0&&u[15]===0&&u[16]===0&&u[17]===0&&u[19]===0?Q5:J5,E=h(g);E&&(l.uniform1fv(E.uniform.m,u),m())},brightness:v=>{let u=(v||0)+1;T.colorMatrix([u,0,0,0,0,0,u,0,0,0,0,0,u,0,0,0,0,0,1,0])},saturation:v=>{let u=(v||0)*2/3+1,g=(u-1)*-.5;T.colorMatrix([u,g,g,0,0,g,u,g,0,0,g,g,u,0,0,0,0,0,1,0])},desaturate:()=>{T.saturation(-1)},contrast:v=>{let u=(v||0)+1,g=-128*(u-1);T.colorMatrix([u,0,0,0,g,0,u,0,0,g,0,0,u,0,g,0,0,0,1,0])},negative:()=>{T.contrast(-2)},hue:v=>{v=(v||0)/180*Math.PI;let u=Math.cos(v),g=Math.sin(v),E=.213,k=.715,N=.072;T.colorMatrix([E+u*(1-E)+g*-E,k+u*-k+g*-k,N+u*-N+g*(1-N),0,0,E+u*-E+g*.143,k+u*(1-k)+g*.14,N+u*-N+g*-.283,0,0,E+u*-E+g*-(1-E),k+u*-k+g*k,N+u*(1-N)+g*N,0,0,0,0,0,1,0])},desaturateLuminance:()=>{T.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:()=>{T.colorMatrix([.393,.7689999,.18899999,0,0,.349,.6859999,.16799999,0,0,.272,.5339999,.13099999,0,0,0,0,0,1,0])},brownie:()=>{T.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:()=>{T.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:()=>{T.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:()=>{T.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:()=>{T.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:()=>{T.colorMatrix([0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0])},convolution:v=>{let u=new Float32Array(v),g=1/c.width,E=1/c.height,k=h(e1);k&&(l.uniform1fv(k.uniform.m,u),l.uniform2f(k.uniform.px,g,E),m())},detectEdges:()=>{T.convolution.call(this,[0,1,0,1,-4,1,0,1,0])},sobelX:()=>{T.convolution.call(this,[-1,0,1,-2,0,2,-1,0,1])},sobelY:()=>{T.convolution.call(this,[-1,-2,-1,0,0,0,1,2,1])},sharpen:v=>{let u=v||1;T.convolution.call(this,[0,-1*u,0,-1*u,1+4*u,-1*u,0,-1*u,0])},emboss:v=>{let u=v||1;T.convolution.call(this,[-2*u,-1*u,0,-1*u,1,1*u,0,1*u,2*u])},blur:v=>{let u=v/7/c.width,g=v/7/c.height,E=h($5);E&&(l.uniform2f(E.uniform.px,0,g),m(y.INTERMEDIATE),l.uniform2f(E.uniform.px,u,0),m())},pixelate:v=>{let u=v/c.width,g=v/c.height,E=h(_5);E&&(l.uniform2f(E.uniform.size,u,g),m())}};this.add=function(v){let u=Array.prototype.slice.call(arguments,1),g=T[v];A.push({func:g,args:u})},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 u=0;uy.data())),a=Math.max(A[0][0],A[1][0],A[2][0]),c=(a>1?255:1)/a,d;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)],x=r.stack([f[0],f[1],f[2]],2);d=r.reshape(x,[1,t.shape[0]||0,t.shape[1]||0,3]),r.dispose([...y,...l,...f,x])}else d=r.expandDims(t,0);return r.dispose([...n,...o,...s,n,t,e]),d}var x2=3840,l0=null,c0=null,We=null,X,L0={inputSum:0,cacheDiff:1,sumMethod:0,inputTensor:void 0};function xt(){L0.inputSum=0,L0.cacheDiff=1,L0.sumMethod=0,L0.inputTensor=void 0}function D0(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")n=document.createElement("canvas"),n.width=e,n.height=t;else if(typeof navigator!="undefined"&&navigator.product==="ReactNative")if(typeof M.Canvas!="undefined")n=new M.Canvas(e,t);else if(typeof globalThis.Canvas!="undefined")n=new globalThis.Canvas(e,t);else throw new Error("canvas error: attempted to use canvas in react-native without canvas support installed");else throw new Error("canvas error: attempted to run in browser but DOM is not defined");else typeof M.Canvas!="undefined"?n=new M.Canvas(e,t):typeof globalThis.Canvas!="undefined"&&(n=new globalThis.Canvas(e,t));return n}function y2(e,t){let n=t||D0(e.width,e.height);return n.getContext("2d").drawImage(e,0,0),n}async function f2(e,t,n=!0){var f,x,p;if(!e)return t.debug&&b("input error: input is missing"),{tensor:null,canvas:null};if(!(e instanceof r.Tensor)&&!(typeof Image!="undefined"&&e instanceof Image)&&!(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 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 h=r.slice3d(e,[0,0,0],[-1,-1,3]);m=r.expandDims(h,0),r.dispose(h)}}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 h=r.cast(m,"float32");r.dispose(m),m=h}return{tensor:m,canvas:t.filter.return?c0:null}}if(typeof e.readyState!="undefined"&&e.readyState<=2)return t.debug&&b("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&&b("cannot determine input dimensions"),{tensor:null,canvas:l0};let A=o,a=s;if(A>x2&&(A=x2,a=Math.trunc(A*s/o)),a>x2&&(a=x2,A=Math.trunc(a*o/s)),(((f=t.filter)==null?void 0:f.width)||0)>0?A=t.filter.width:(((x=t.filter)==null?void 0:x.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=D0(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=D0(l0.width,l0.height)),t.filter.enabled&&M.webgl.supported?(X||(X=M.browser?new t1: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),((p=X.get())==null?void 0:p.length)>1?c0=X.apply(l0):c0=X.draw(l0)):(t.debug&&b("input process error: cannot initialize filters"),M.webgl.supported=!1,t.filter.enabled=!1,y2(l0,c0))):(y2(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,d=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{d=e.data.length/e.height/e.width;let m=new Uint8Array(e.data.buffer);c=r.tensor(m,[e.height,e.width,d],"int32")}else if((!We||c0.width!==We.width||c0.height!==We.height)&&(We=D0(c0.width,c0.height)),r.browser&&M.browser)t.backend==="webgl"||t.backend==="humangl"||t.backend==="webgpu"?c=r.browser.fromPixels(c0):(We=y2(c0),c=r.browser.fromPixels(We));else{let T=y2(c0).getContext("2d").getImageData(0,0,A,a);d=T.data.length/A/a;let v=new Uint8Array(T.data.buffer);c=r.tensor(v,[A,a,d])}if(d===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 d2(y):r.expandDims(y,0);if(r.dispose([c,y]),t.filter.autoBrightness){let m=r.max(l),h=await m.data();t.filter.brightness=h[0]>1?1-h[0]/255:1-h[0],r.dispose(m)}return{tensor:l,canvas:t.filter.return?c0:null}}async function n1(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(!L0.inputTensor)L0.inputTensor=r.clone(t);else if(L0.inputTensor.shape[1]!==t.shape[1]||L0.inputTensor.shape[2]!==t.shape[2])r.dispose(L0.inputTensor),L0.inputTensor=r.clone(t);else{let o={};o.diff=r.sub(t,L0.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([L0.inputTensor,o.diff,o.squared,o.sum]),L0.inputTensor=r.clone(t),n=A<=(e.cacheSensitivity||0)}return n}async function o1(e,t,n){let o={};if(!t||!n||t.shape.length!==4||t.shape.length!==n.shape.length)return e.debug||b("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||b("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 Qe,_e,$e,p2=class{constructor(){z(this,"browser");z(this,"node");z(this,"worker");z(this,"platform","");z(this,"agent","");z(this,"backends",[]);z(this,"initial");z(this,"filter");z(this,"tfjs");z(this,"offscreen");z(this,"perfadd",!1);z(this,"tensorflow",{version:void 0,gpu:void 0});z(this,"wasm",{supported:void 0,backend:void 0,simd:void 0,multithread:void 0});z(this,"webgl",{supported:void 0,backend:void 0,version:void 0,renderer:void 0,shader:void 0,vendor:void 0});z(this,"webgpu",{supported:void 0,backend:void 0,adapter:void 0});z(this,"cpu",{model:void 0,flags:[]});z(this,"kernels",[]);q0(this,Qe,void 0);q0(this,_e,void 0);q0(this,$e,void 0);if(this.browser=typeof navigator!="undefined"&&typeof navigator.appVersion!="undefined",this.node=typeof process!="undefined"&&typeof process.versions!="undefined"&&typeof process.versions.node!="undefined",this.tfjs={version:Je["tfjs-core"]},this.offscreen=typeof OffscreenCanvas!="undefined",this.initial=!0,this.worker=this.browser&&this.offscreen?typeof WorkerGlobalScope!="undefined":void 0,typeof navigator!="undefined"&&typeof navigator.userAgent!="undefined"){let t=navigator.userAgent||"",n=t.match(/\(([^()]+)\)/g);if(n!=null&&n[0]){let o=n[0].match(/\(([^()]+)\)/g);this.platform=o!=null&&o[0]?o[0].replace(/\(|\)/g,""):"",this.agent=t.replace(n[0],""),this.platform[1]&&(this.agent=this.agent.replace(n[1],"")),this.agent=this.agent.replace(/ /g," ")}}else typeof process!="undefined"&&(this.platform=`${process.platform} ${process.arch}`,this.agent=`NodeJS ${process.version}`)}get Canvas(){return E0(this,Qe)}set Canvas(t){Q0(this,Qe,t),globalThis.Canvas=t}get Image(){return E0(this,_e)}set Image(t){Q0(this,_e,t),globalThis.Image=t}get ImageData(){return E0(this,$e)}set ImageData(t){Q0(this,$e,t),globalThis.ImageData=t}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=D0(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!="undefined"&&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})}};Qe=new WeakMap,_e=new WeakMap,$e=new WeakMap;var M=new p2;var u2=class{constructor(){z(this,"config");z(this,"element");z(this,"stream");z(this,"devices",[]);z(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});z(this,"start",async t=>{var s,A;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 a=document.getElementById(t.element);if(a&&a instanceof HTMLVideoElement)this.element=a;else return this.config.debug&&b("webcam","cannot get dom element",t.element),`webcam error: cannot get dom element: ${t.element}`}else if(t.element instanceof HTMLVideoElement)this.element=t.element;else return this.config.debug&&b("webcam","unknown dom element",t.element),`webcam error: unknown dom element: ${t.element}`;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"}};if(((s=this.config)==null?void 0:s.width)>0&&(n.video.width={ideal:this.config.width}),((A=this.config)==null?void 0:A.height)>0&&(n.video.height={ideal:this.config.height}),this.config.id&&(n.video.deviceId=this.config.id),this.element.addEventListener("play",()=>{this.config.debug&&b("webcam","play")}),this.element.addEventListener("pause",()=>{this.config.debug&&b("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))return this.config.debug&&b("webcam error","no devices"),"webcam error: no devices";try{this.stream=await navigator.mediaDevices.getUserMedia(n)}catch(a){return b("webcam",a),`webcam error: ${a}`}return this.stream?(this.element.srcObject=this.stream,await new Promise(a=>{this.element?this.element.onloadeddata=()=>a(!0):a(!1)}),await this.element.play(),this.config.debug&&b("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}),`webcam: ${this.label}`):(this.config.debug&&b("webcam error","no stream"),"webcam error no stream")});z(this,"pause",()=>{this.element&&this.element.pause()});z(this,"play",async()=>{this.element&&await this.element.play()});z(this,"stop",()=>{this.config.debug&&b("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 yt={};oe(yt,{"affectnet-mobilenet":()=>vo,age:()=>Ro,"anti-spoofing":()=>tr,antispoof:()=>lo,blazeface:()=>co,"blazeface-back":()=>Mo,"blazeface-front":()=>Po,"blazepose-detector":()=>ko,"blazepose-full":()=>wo,"blazepose-heavy":()=>Eo,"blazepose-lite":()=>zo,centernet:()=>xo,default:()=>fr,efficientpose:()=>So,"efficientpose-i-lite":()=>nr,"efficientpose-ii-lite":()=>or,"efficientpose-iv":()=>rr,emotion:()=>yo,faceboxes:()=>jo,facemesh:()=>fo,"facemesh-attention":()=>No,"facemesh-attention-pinto":()=>Io,"facemesh-detection-full":()=>Lo,"facemesh-detection-short":()=>Oo,faceres:()=>mo,"faceres-deep":()=>Co,gear:()=>Fo,"gear-e1":()=>Wo,"gear-e2":()=>Do,gender:()=>Ho,"gender-ssrnet-imdb":()=>Bo,handdetect:()=>Go,"handlandmark-full":()=>Vo,"handlandmark-lite":()=>po,"handlandmark-sparse":()=>Zo,handskeleton:()=>Xo,handtrack:()=>uo,"insightface-efficientnet-b0":()=>sr,"insightface-ghostnet-strides1":()=>Ar,"insightface-ghostnet-strides2":()=>ar,"insightface-mobilenet-emore":()=>ir,"insightface-mobilenet-swish":()=>lr,iris:()=>ho,liveness:()=>bo,meet:()=>qo,mobileface:()=>Uo,mobilefacenet:()=>Yo,models:()=>go,"movenet-lightning":()=>To,"movenet-multipose":()=>Ko,"movenet-thunder":()=>Jo,nanodet:()=>Qo,"nanodet-e":()=>cr,"nanodet-g":()=>dr,"nanodet-m":()=>xr,"nanodet-t":()=>yr,posenet:()=>_o,rvm:()=>$o,selfie:()=>er});var lo=853098,co=538928,xo=4030290,yo=820516,fo=1477958,mo=6978814,po=2023432,uo=2964837,ho=2599092,bo=592976,go=0,To=4650216,vo=6920630,Ro=161240,Mo=538928,Po=402048,ko=5928856,wo=6339202,Eo=27502466,zo=2726402,So=5651240,jo=2013002,Io=2387598,No=2382414,Lo=1026192,Oo=201268,Co=13957620,Wo=112438,Do=112438,Fo=1498916,Bo=161236,Ho=201808,Go=3515612,Vo=5431368,Zo=5286322,Xo=5502280,qo=372228,Uo=2183192,Yo=5171976,Ko=9448838,Jo=12477112,Qo=7574558,_o=5032780,$o=3739355,er=212886,tr=853098,nr=2269064,or=5651240,rr=25643252,sr=13013224,Ar=8093408,ar=8049584,ir=6938536,lr=12168584,cr=12319156,dr=7574558,xr=1887474,yr=5294216,fr={antispoof:lo,blazeface:co,centernet:xo,emotion:yo,facemesh:fo,faceres:mo,"handlandmark-lite":po,handtrack:uo,iris:ho,liveness:bo,models:go,"movenet-lightning":To,"affectnet-mobilenet":vo,age:Ro,"blazeface-back":Mo,"blazeface-front":Po,"blazepose-detector":ko,"blazepose-full":wo,"blazepose-heavy":Eo,"blazepose-lite":zo,efficientpose:So,faceboxes:jo,"facemesh-attention-pinto":Io,"facemesh-attention":No,"facemesh-detection-full":Lo,"facemesh-detection-short":Oo,"faceres-deep":Co,"gear-e1":Wo,"gear-e2":Do,gear:Fo,"gender-ssrnet-imdb":Bo,gender:Ho,handdetect:Go,"handlandmark-full":Vo,"handlandmark-sparse":Zo,handskeleton:Xo,meet:qo,mobileface:Uo,mobilefacenet:Yo,"movenet-multipose":Ko,"movenet-thunder":Jo,nanodet:Qo,posenet:_o,rvm:$o,selfie:er,"anti-spoofing":tr,"efficientpose-i-lite":nr,"efficientpose-ii-lite":or,"efficientpose-iv":rr,"insightface-efficientnet-b0":sr,"insightface-ghostnet-strides1":Ar,"insightface-ghostnet-strides2":ar,"insightface-mobilenet-emore":ir,"insightface-mobilenet-swish":lr,"nanodet-e":cr,"nanodet-g":dr,"nanodet-m":xr,"nanodet-t":yr};var T0={cacheModels:!0,cacheSupported:!0,verbose:!0,debug:!1,modelBasePath:""},p0={};async function mr(e,t){return T0.debug&&b("load model fetch:",e,t),fetch(e,t)}function r1(e){T0.cacheModels=e.cacheModels,T0.verbose=e.debug,T0.modelBasePath=e.modelBasePath}async function L(e){var d,y,l,f;let t=Y5(T0.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;p0[o]={name:o,sizeFromManifest:0,sizeLoadedWeights:0,sizeDesired:yt[o],inCache:!1,url:""},T0.cacheSupported=typeof indexedDB!="undefined";let A={};try{A=T0.cacheSupported&&T0.cacheModels?await r.io.listModels():{}}catch(x){T0.cacheSupported=!1}p0[o].inCache=T0.cacheSupported&&T0.cacheModels&&Object.keys(A).includes(s),p0[o].url=p0[o].inCache?s:t;let a=typeof fetch=="undefined"?{}:{fetchFunc:(x,p)=>mr(x,p)},i=new r.GraphModel(p0[o].url,a),c=!1;try{i.findIOHandler(),T0.debug&&b("model load handler:",i.handler)}catch(x){b("error finding model i/o handler:",t,x)}try{let x=await((d=i.handler)==null?void 0:d.load())||null;p0[o].sizeFromManifest=((y=x==null?void 0:x.weightData)==null?void 0:y.byteLength)||0,x?i.loadSync(x):i=await r.loadGraphModel(p0[o].inCache?s:t,a),p0[o].sizeLoadedWeights=((f=(l=i.artifacts)==null?void 0:l.weightData)==null?void 0:f.byteLength)||0,T0.verbose&&b("load:",{model:o,url:i.modelUrl,bytes:p0[o].sizeLoadedWeights}),c=!0}catch(x){b("error loading model:",t,x)}if(c&&T0.cacheModels&&T0.cacheSupported&&!p0[o].inCache)try{let x=await i.save(s);T0.debug&&b("model saved:",s,x)}catch(x){b("error saving model:",t,x)}return i}var ft="3.2.2";var Y={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 hr(){let e=Y.gl;e&&(Y.extensions=e.getSupportedExtensions())}function s1(e){var t;if(e.config.backend==="humangl"&&(Y.name in r.engine().registry&&!((t=Y==null?void 0:Y.gl)!=null&&t.getParameter(Y.gl.VERSION))&&(b("humangl error: backend invalid context"),e.models.reset()),!r.findBackend(Y.name))){try{Y.canvas=D0(100,100)}catch(s){b("humangl error: cannot create canvas:",s);return}try{if(Y.gl=Y.canvas.getContext("webgl2",Y.webGLattr),!Y.gl){b("humangl error: cannot get webgl context");return}if(!Y.gl.getParameter(Y.gl.VERSION).includes("2.0")){b("backend override: using fallback webgl backend as webgl 2.0 is not detected"),e.config.backend="webgl";return}Y.canvas&&(Y.canvas.addEventListener("webglcontextlost",A=>{throw b("humangl error:",A.type),b("possible browser memory leak using webgl or conflict with multiple backend registrations"),e.emit("error"),new Error("backend error: webgl context lost")}),Y.canvas.addEventListener("webglcontextrestored",A=>{b("humangl error: context restored:",A)}),Y.canvas.addEventListener("webglcontextcreationerror",A=>{b("humangl error: context create:",A)}))}catch(s){b("humangl error: cannot get webgl context:",s);return}try{r.setWebGLContext(2,Y.gl)}catch(s){b("humangl error: cannot set webgl context:",s);return}try{let s=new r.GPGPUContext(Y.gl);r.registerBackend(Y.name,()=>new r.MathBackendWebGL(s),Y.priority)}catch(s){b("humangl error: cannot register webgl backend:",s);return}try{r.getKernelsForBackend("webgl").forEach(A=>{let a={...A,backendName:Y.name};r.registerKernel(a)})}catch(s){b("humangl error: cannot update webgl backend registration:",s);return}try{r.env().flagRegistry.WEBGL_VERSION&&r.env().set("WEBGL_VERSION",2)}catch(s){b("humangl error: cannot set WebGL backend flags:",s);return}hr();let n=r.backend(),o=typeof n.gpgpu!="undefined"?n.getGPGPUContext().gl:null;o?e.config.debug&&b("humangl backend registered:",{webgl:o.getParameter(o.VERSION),renderer:o.getParameter(o.RENDERER)}):b("humangl error: no current gl context:",o,Y.gl)}}var O={tf255:255,tf1:1,tf2:2,tf05:.5,tf127:127.5,rgb:[.2989,.587,.114]};function A1(){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 Tr(){var e;return await M.updateBackend(),(e=M.tensorflow)!=null&&e.version?"tensorflow":M.webgpu.supported&&M.webgpu.backend?"webgpu":M.webgl.supported&&M.webgl.backend?"webgl":M.wasm.supported&&M.wasm.backend?"wasm":"cpu"}function vr(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&&b("registered kernels:",t)}var a1={};async function e2(e,t=!1){var n,o;if(e.state="backend",((n=e.config.backend)==null?void 0:n.length)===0&&(e.config.backend=await Tr()),t||M.initial||e.config.backend&&e.config.backend.length>0&&r.getBackend()!==e.config.backend){let s=R();if(e.config.backend&&e.config.backend.length>0){typeof window=="undefined"&&typeof WorkerGlobalScope!="undefined"&&e.config.debug&&e.config.debug&&b("running inside web worker"),typeof navigator!="undefined"&&((o=navigator==null?void 0:navigator.userAgent)!=null&&o.toLowerCase().includes("electron"))&&e.config.debug&&b("running inside electron");let A=Object.keys(r.engine().registryFactory);if(e.config.backend==="humangl"&&!A.includes("humangl")&&(s1(e),A=Object.keys(r.engine().registryFactory)),e.config.debug&&b("available backends:",A),M.browser&&!M.node&&e.config.backend==="tensorflow"&&A.includes("webgl")&&(e.config.debug&&b("override: backend set to tensorflow while running in browser"),e.config.backend="webgl"),M.node&&!M.browser&&(e.config.backend==="webgl"||e.config.backend==="humangl")&&A.includes("tensorflow")&&(e.config.debug&&b(`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")b("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&&b("enumerated webgpu adapter:",a),!a)b("override: backend set to webgpu but browser reports no available gpu"),e.config.backend="webgl";else{let i="requestAdapterInfo"in a?await a.requestAdapterInfo():void 0;b("webgpu adapter info:",i)}}if(A.includes(e.config.backend)||(b(`error: backend ${e.config.backend} not found in registry`),e.config.backend=M.node?"tensorflow":"webgl",e.config.debug&&b(`override: setting backend ${e.config.backend}`)),e.config.debug&&b("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&&b("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,i=!1;try{a=await r.env().getAsync("WASM_HAS_MULTITHREAD_SUPPORT"),i=await r.env().getAsync("WASM_HAS_SIMD_SUPPORT"),e.config.debug&&b(`wasm execution: ${i?"simd":"no simd"} ${a?"multithreaded":"singlethreaded"}`),e.config.debug&&!i&&b("warning: wasm simd support is not enabled")}catch(c){b("wasm detection failed")}}try{await r.setBackend(e.config.backend),await r.ready()}catch(a){return b("error: cannot set backend:",e.config.backend,a),!1}e.config.debug&&(a1=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&&(b("changing webgl: WEBGL_DELETE_TEXTURE_THRESHOLD:",!0),r.env().set("WEBGL_DELETE_TEXTURE_THRESHOLD",0))),r.getBackend(),e.config.debug){let A=r.env().flags,a={};for(let i of Object.keys(A))a1[i]!==A[i]&&(a[i]=A[i]);e.config.debug&&Object.keys(a).length>0&&b("backend:",r.getBackend(),"flags:",a)}if(e.config.flags&&Object.keys(e.config.flags).length>0){e.config.debug&&b("flags:",e.config.flags);for(let[A,a]of Object.entries(e.config.flags))r.env().set(A,a)}r.enableProdMode(),A1(),e.performance.initBackend=Math.trunc(R()-s),e.config.backend=r.getBackend(),await M.updateBackend(),vr(e.config)}return!0}function h2(e,t){for(let n of e){let o={kernelName:n,backendName:t.backend,kernelFunc:s=>{var A;return t.debug&&b("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 vt={};oe(vt,{all:()=>$r,body:()=>g2,canvas:()=>_r,face:()=>b2,gesture:()=>R2,hand:()=>T2,init:()=>Tt,object:()=>v2,options:()=>n0,person:()=>Qr});var O0=e=>{if(!e)b("draw error: invalid canvas");else if(!e.getContext)b("draw error: canvas context not defined");else{let t=e.getContext("2d",{willReadFrequently:!0});if(!t)b("draw error: cannot get canvas context");else return t}return null},ge=e=>Math.round(e*180/Math.PI),H=(e,t,n)=>e.replace(t,typeof n=="number"?n.toFixed(1):n),Te=(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 C0(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=Te(o,s),e.beginPath(),e.arc(t,n,s.pointSize,0,2*Math.PI),e.fill()}function Y0(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 mt(e,t,n){if(!(t.length<2)){e.beginPath(),e.moveTo(t[0][0],t[0][1]);for(let o of t)e.strokeStyle=Te(o[2]||0,n),e.lineTo(Math.trunc(o[0]),Math.trunc(o[1]));e.stroke(),n.fillPolygons&&(e.closePath(),e.fill())}}function l1(e,t,n){if(!(t.length<2)){if(e.lineWidth=n.lineWidth,!n.useCurves||t.length<=2){mt(e,t,n);return}e.moveTo(t[0][0],t[0][1]);for(let o=0;ot2[e]),KA=Mr.map(e=>t2[e]),JA=Pr.map(e=>t2[e]);function re(e){let t=e.map(n=>n[0]);return t.push(e[e.length-1][1]),t}var kr=[[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]],wr=[[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]],Er=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],zr=[[474,475],[475,476],[476,477],[477,474]],Sr=[[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]],jr=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],Ir=[[469,470],[470,471],[471,472],[472,469]],Nr=[[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]],QA={lips:re(kr),leftEye:re(wr),leftEyebrow:re(Er),leftIris:re(zr),rightEye:re(Sr),rightEyebrow:re(jr),rightIris:re(Ir),faceOval:re(Nr)};var Lr=[[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]],Or=[[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]],Cr=[[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]],Dr=[[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]],Fr=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],Br=[[469,470],[470,471],[471,472],[472,469]],Hr=[[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 Gr={lips:se(Lr),leftEye:se(Or),leftEyebrow:se(Cr),leftIris:se(Wr),rightEye:se(Dr),rightEyebrow:se(Fr),rightIris:se(Br),faceOval:se(Hr)},Vr=Object.entries(Gr).map(([e,t])=>t.map(n=>[n,e])).flat(),_A=new Map(Vr),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],Me=[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],Pe=[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 B;function Zr(e,t){var o,s,A,a,i,c,d,y,l;if(!B.drawLabels||((o=B.faceLabels)==null?void 0:o.length)===0)return;let n=B.faceLabels.slice();if(n=H(n,"[id]",e.id.toFixed(0)),e.score&&(n=H(n,"[score]",100*e.score)),e.gender&&(n=H(n,"[gender]",e.gender)),e.genderScore&&(n=H(n,"[genderScore]",100*e.genderScore)),e.age&&(n=H(n,"[age]",e.age)),e.distance&&(n=H(n,"[distance]",100*e.distance)),e.real&&(n=H(n,"[real]",100*e.real)),e.live&&(n=H(n,"[live]",100*e.live)),e.emotion&&e.emotion.length>0){let f=e.emotion.map(x=>`${Math.trunc(100*x.score)}% ${x.emotion}`);f.length>3&&(f.length=3),n=H(n,"[emotions]",f.join(" "))}(A=(s=e.rotation)==null?void 0:s.angle)!=null&&A.roll&&(n=H(n,"[roll]",ge(e.rotation.angle.roll))),(i=(a=e.rotation)==null?void 0:a.angle)!=null&&i.yaw&&(n=H(n,"[yaw]",ge(e.rotation.angle.yaw))),(d=(c=e.rotation)==null?void 0:c.angle)!=null&&d.pitch&&(n=H(n,"[pitch]",ge(e.rotation.angle.pitch))),(l=(y=e.rotation)==null?void 0:y.gaze)!=null&&l.bearing&&(n=H(n,"[gaze]",ge(e.rotation.gaze.bearing))),C0(t,n,e.box[0],e.box[1],B)}function Xr(e,t){var n,o,s,A;if((n=e.annotations)!=null&&n.leftEyeIris&&((o=e.annotations)!=null&&o.leftEyeIris[0])){t.strokeStyle=B.useDepth?"rgba(255, 200, 255, 0.3)":B.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(),B.fillPolygons&&(t.fillStyle=B.useDepth?"rgba(255, 255, 200, 0.3)":B.color,t.fill())}if((s=e.annotations)!=null&&s.rightEyeIris&&((A=e.annotations)!=null&&A.rightEyeIris[0])){t.strokeStyle=B.useDepth?"rgba(255, 200, 255, 0.3)":B.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(),B.fillPolygons&&(t.fillStyle=B.useDepth?"rgba(255, 255, 200, 0.3)":B.color,t.fill())}}function qr(e,t){var n;if(B.drawGaze&&((n=e.rotation)!=null&&n.angle)&&typeof Path2D!="undefined"){t.strokeStyle="pink";let o=e.box[0]+e.box[2]/2-e.box[3]*ge(e.rotation.angle.yaw)/90,s=e.box[1]+e.box[3]/2+e.box[2]*ge(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 rgb3 = tfjs_esm_exports.split(squeeze14, 3, 2); + const min2 = [tfjs_esm_exports.min(rgb3[0]), tfjs_esm_exports.min(rgb3[1]), tfjs_esm_exports.min(rgb3[2])]; + const max5 = [tfjs_esm_exports.max(rgb3[0]), tfjs_esm_exports.max(rgb3[1]), tfjs_esm_exports.max(rgb3[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(rgb3[0], min2[0]), tfjs_esm_exports.sub(rgb3[1], min2[1]), tfjs_esm_exports.sub(rgb3[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, stack5]); + } else { + final = tfjs_esm_exports.expandDims(squeeze14, 0); + } + tfjs_esm_exports.dispose([...rgb3, ...min2, ...max5, rgb3, 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") { + c = document.createElement("canvas"); + c.width = width; + c.height = height; + } else if (typeof navigator !== "undefined" && navigator.product === "ReactNative") { + if (typeof env.Canvas !== "undefined") c = new env.Canvas(width, height); + else if (typeof globalThis.Canvas !== "undefined") c = new globalThis.Canvas(width, height); + else throw new Error("canvas error: attempted to use canvas in react-native without canvas support installed"); + } else { + throw new Error("canvas error: attempted to run in browser but DOM is not defined"); + } + } + } 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 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 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 rgb3 = tfjs_esm_exports.slice3d(input, [0, 0, 0], [-1, -1, 3]); + tensor7 = tfjs_esm_exports.expandDims(rgb3, 0); + tfjs_esm_exports.dispose(rgb3); + } + } 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 rgb3 = tfjs_esm_exports.slice3d(pixels, [0, 0, 0], [-1, -1, 3]); + tfjs_esm_exports.dispose(pixels); + pixels = rgb3; + } + 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 _canvas, _image, _imageData; +var Env = class { + constructor() { + /** Running in Browser */ + __publicField(this, "browser"); + /** Running in NodeJS */ + __publicField(this, "node"); + /** Running in WebWorker thread */ + __publicField(this, "worker"); + /** Detected platform */ + __publicField(this, "platform", ""); + /** Detected agent */ + __publicField(this, "agent", ""); + /** List of supported backends */ + __publicField(this, "backends", []); + /** Has any work been performed so far */ + __publicField(this, "initial"); + /** Are image filters supported? */ + __publicField(this, "filter"); + /** TFJS instance details */ + __publicField(this, "tfjs"); + /** Is offscreenCanvas supported? */ + __publicField(this, "offscreen"); + /** Are performance counter instant values or additive */ + __publicField(this, "perfadd", false); + /** If using tfjs-node get version of underlying tensorflow shared library and if gpu acceleration is enabled */ + __publicField(this, "tensorflow", { + version: void 0, + gpu: void 0 + }); + /** WASM detected capabilities */ + __publicField(this, "wasm", { + supported: void 0, + backend: void 0, + simd: void 0, + multithread: void 0 + }); + /** WebGL detected capabilities */ + __publicField(this, "webgl", { + supported: void 0, + backend: void 0, + version: void 0, + renderer: void 0, + shader: void 0, + vendor: void 0 + }); + /** WebGPU detected capabilities */ + __publicField(this, "webgpu", { + supported: void 0, + backend: void 0, + adapter: void 0 + }); + /** CPU info */ + __publicField(this, "cpu", { + model: void 0, + flags: [] + }); + /** List of supported kernels for current backend */ + __publicField(this, "kernels", []); + /** MonkeyPatch for Canvas/Image/ImageData */ + __privateAdd(this, _canvas); + __privateAdd(this, _image); + __privateAdd(this, _imageData); + this.browser = typeof navigator !== "undefined" && typeof navigator.appVersion !== "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" && typeof navigator.userAgent !== "undefined") { + const agent = navigator.userAgent || ""; + const raw = agent.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 = agent.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}`; + } + } + get Canvas() { + return __privateGet(this, _canvas); + } + set Canvas(val) { + __privateSet(this, _canvas, val); + globalThis.Canvas = val; + } + get Image() { + return __privateGet(this, _image); + } + // @ts-ignore monkey-patch; + set Image(val) { + __privateSet(this, _image, val); + globalThis.Image = val; + } + get ImageData() { + return __privateGet(this, _imageData); + } + // @ts-ignore monkey-patch; + set ImageData(val) { + __privateSet(this, _imageData, val); + globalThis.ImageData = val; + } + /** update backend information */ + 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 !== "undefined" && 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) { + } + } + /** update cpu information */ + 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; + } +}; +_canvas = new WeakMap(); +_image = new WeakMap(); +_imageData = new WeakMap(); +var env = new Env(); + +// src/util/webcam.ts +var WebCam = class { + constructor() { + // eslint-disable-line @typescript-eslint/no-extraneous-class + /** current webcam configuration */ + __publicField(this, "config"); + /** instance of dom element associated with webcam stream */ + __publicField(this, "element"); + /** active webcam stream */ + __publicField(this, "stream"); + /** enumerated video devices */ + __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; + }); + /** start method initializizes webcam stream and associates it with a dom video element */ + __publicField(this, "start", async (webcamConfig) => { + var _a, _b; + 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 `webcam error: cannot get dom element: ${webcamConfig.element}`; + } + } else if (webcamConfig.element instanceof HTMLVideoElement) { + this.element = webcamConfig.element; + } else { + if (this.config.debug) log("webcam", "unknown dom element", webcamConfig.element); + return `webcam error: unknown dom element: ${webcamConfig.element}`; + } + } else { + this.element = document.createElement("video"); + } + const requestedConstraints = { + audio: false, + video: { + facingMode: this.config.mode === "front" ? "user" : "environment", + // @ts-ignore // resizeMode is still not defined in tslib + resizeMode: this.config.crop ? "crop-and-scale" : "none" + } + }; + if (((_a = this.config) == null ? void 0 : _a.width) > 0) requestedConstraints.video.width = { ideal: this.config.width }; + if (((_b = this.config) == null ? void 0 : _b.height) > 0) requestedConstraints.video.height = { ideal: this.config.height }; + 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 error", "no devices"); + return "webcam error: no devices"; + } + try { + this.stream = await navigator.mediaDevices.getUserMedia(requestedConstraints); + } catch (err) { + log("webcam", err); + return `webcam error: ${err}`; + } + if (!this.stream) { + if (this.config.debug) log("webcam error", "no stream"); + return "webcam error no stream"; + } + 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 + }); + } + return `webcam: ${this.label}`; + }); + /** pause webcam video method */ + __publicField(this, "pause", () => { + if (this.element) this.element.pause(); + }); + /** play webcam video method */ + __publicField(this, "play", async () => { + if (this.element) await this.element.play(); + }); + /** stop method stops active webcam stream track and disconnects webcam */ + __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 active webcam stream track */ + get track() { + if (!this.stream) return void 0; + return this.stream.getVideoTracks()[0]; + } + /** get webcam capabilities */ + get capabilities() { + if (!this.track) return void 0; + return this.track.getCapabilities ? this.track.getCapabilities() : void 0; + } + /** get webcam constraints */ + get constraints() { + if (!this.track) return void 0; + return this.track.getConstraints ? this.track.getConstraints() : void 0; + } + /** get webcam settings */ + get settings() { + if (!this.stream) return void 0; + const track = this.stream.getVideoTracks()[0]; + return track.getSettings ? track.getSettings() : void 0; + } + /** get webcam label */ + get label() { + if (!this.track) return ""; + return this.track.label; + } + /** is webcam paused */ + get paused() { + var _a; + return ((_a = this.element) == null ? void 0 : _a.paused) || false; + } + /** webcam current width */ + get width() { + var _a; + return ((_a = this.element) == null ? void 0 : _a.videoWidth) || 0; + } + /** webcam current height */ + get height() { + var _a; + return ((_a = this.element) == null ? void 0 : _a.videoHeight) || 0; + } +}; + +// models/models.json +var models_exports = {}; +__export(models_exports, { + "affectnet-mobilenet": () => affectnet_mobilenet, + age: () => age, + "anti-spoofing": () => anti_spoofing, + antispoof: () => antispoof, + blazeface: () => blazeface, + "blazeface-back": () => blazeface_back, + "blazeface-front": () => blazeface_front, + "blazepose-detector": () => blazepose_detector, + "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-pinto": () => facemesh_attention_pinto, + "facemesh-detection-full": () => facemesh_detection_full, + "facemesh-detection-short": () => facemesh_detection_short, + faceres: () => faceres, + "faceres-deep": () => faceres_deep, + gear: () => gear, + "gear-e1": () => gear_e1, + "gear-e2": () => gear_e2, + 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_lite = 2023432; +var handtrack = 2964837; +var iris = 2599092; +var liveness = 592976; +var models = 0; +var movenet_lightning = 4650216; +var affectnet_mobilenet = 6920630; +var age = 161240; +var blazeface_back = 538928; +var blazeface_front = 402048; +var blazepose_detector = 5928856; +var blazepose_full = 6339202; +var blazepose_heavy = 27502466; +var blazepose_lite = 2726402; +var efficientpose = 5651240; +var faceboxes = 2013002; +var facemesh_attention_pinto = 2387598; +var facemesh_attention = 2382414; +var facemesh_detection_full = 1026192; +var facemesh_detection_short = 201268; +var faceres_deep = 13957620; +var gear_e1 = 112438; +var gear_e2 = 112438; +var gear = 1498916; +var gender_ssrnet_imdb = 161236; +var gender = 201808; +var handdetect = 3515612; +var handlandmark_full = 5431368; +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 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-lite": handlandmark_lite, + handtrack, + iris, + liveness, + models, + "movenet-lightning": movenet_lightning, + "affectnet-mobilenet": affectnet_mobilenet, + age, + "blazeface-back": blazeface_back, + "blazeface-front": blazeface_front, + "blazepose-detector": blazepose_detector, + "blazepose-full": blazepose_full, + "blazepose-heavy": blazepose_heavy, + "blazepose-lite": blazepose_lite, + efficientpose, + faceboxes, + "facemesh-attention-pinto": facemesh_attention_pinto, + "facemesh-attention": facemesh_attention, + "facemesh-detection-full": facemesh_detection_full, + "facemesh-detection-short": facemesh_detection_short, + "faceres-deep": faceres_deep, + "gear-e1": gear_e1, + "gear-e2": gear_e2, + gear, + "gender-ssrnet-imdb": gender_ssrnet_imdb, + gender, + handdetect, + "handlandmark-full": handlandmark_full, + "handlandmark-sparse": handlandmark_sparse, + handskeleton, + meet, + mobileface, + mobilefacenet, + "movenet-multipose": movenet_multipose, + "movenet-thunder": movenet_thunder, + nanodet, + posenet, + rvm, + selfie, + "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.3.0"; + +// src/tfjs/humangl.ts +var config2 = { + name: "humangl", + priority: 999, + canvas: null, + gl: null, + extensions: [], + webGLattr: { + // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.2 + alpha: false, + antialias: false, + premultipliedAlpha: false, + preserveDrawingBuffer: false, + depth: false, + stencil: false, + failIfMajorPerformanceCaveat: false, + // default=true + desynchronized: true + // default=undefined + } +}; +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() { + var _a; + await env.updateBackend(); + if ((_a = env.tensorflow) == null ? void 0 : _a.version) 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, _b; + 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 (typeof navigator !== "undefined" && ((_b = navigator == null ? void 0 : navigator.userAgent) == null ? void 0 : _b.toLowerCase().includes("electron"))) { + if (instance.config.debug) log("running inside electron"); + } + 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 (env.browser && !env.node && instance.config.backend === "tensorflow" && available.includes("webgl")) { + if (instance.config.debug) log("override: backend set to tensorflow while running in browser"); + instance.config.backend = "webgl"; + } + if (env.node && !env.browser && (instance.config.backend === "webgl" || instance.config.backend === "humangl") && available.includes("tensorflow")) { + 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); + } + } + } + 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); + } + 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; + } + // setupFunc: () => { if (config.debug) log('kernelFunc', kernelName, config.backend); }, + // disposeFunc: () => { if (config.debug) log('kernelFunc', kernelName, config.backend); }, + }; + 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", { willReadFrequently: true }); + 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 rgb3 = Uint8ClampedArray.from([127 + 2 * z, 127 - 2 * z, 255]); + return `rgba(${rgb3[0]}, ${rgb3[1]}, ${rgb3[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)", + // 'lightblue' with light alpha channel + labelColor: "rgba(173, 216, 230, 1)", + // 'lightblue' with dark alpha channel + 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: [61, 185, 40, 39, 37, 0, 267, 269, 270, 409, 291], // 11 + // lipsLowerOuter: [146, 91, 181, 84, 17, 314, 405, 321, 375, 291], // 10 + // lipsUpperInner: [78, 191, 80, 81, 82, 13, 312, 311, 310, 415, 308], // 11 + // lipsLowerInner: [78, 95, 88, 178, 87, 14, 317, 402, 318, 324, 308], // 11 + 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], + // 7 + rightEyeLower0: [33, 7, 163, 144, 145, 153, 154, 155, 133], + // 9 + rightEyeUpper1: [247, 30, 29, 27, 28, 56, 190], + // 7 + rightEyeLower1: [130, 25, 110, 24, 23, 22, 26, 112, 243], + // 9 + rightEyeUpper2: [113, 225, 224, 223, 222, 221, 189], + // 7 + rightEyeLower2: [226, 31, 228, 229, 230, 231, 232, 233, 244], + // 9 + rightEyeLower3: [143, 111, 117, 118, 119, 120, 121, 128, 245], + // 9 + rightEyebrowUpper: [156, 70, 63, 105, 66, 107, 55, 193], + // 8 + rightEyebrowLower: [35, 124, 46, 53, 52, 65], + // 6 + rightEyeIris: [473, 474, 475, 476, 477], + // 5 + 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 = [ + // A mapping from facemesh model keypoints to iris model keypoints. + { key: "EyeUpper0", indices: [9, 10, 11, 12, 13, 14, 15] }, + // 7 x 3d + { key: "EyeUpper1", indices: [25, 26, 27, 28, 29, 30, 31] }, + // 7 x 3d + { key: "EyeUpper2", indices: [41, 42, 43, 44, 45, 46, 47] }, + // 7 x 3d + { key: "EyeLower0", indices: [0, 1, 2, 3, 4, 5, 6, 7, 8] }, + // 7 x 3d + { key: "EyeLower1", indices: [16, 17, 18, 19, 20, 21, 22, 23, 24] }, + // 9 x 3d + { key: "EyeLower2", indices: [32, 33, 34, 35, 36, 37, 38, 39, 40] }, + // 9 x 3d + { key: "EyeLower3", indices: [54, 55, 56, 57, 58, 59, 60, 61, 62] }, + // 9 x 3d + { key: "EyebrowUpper", indices: [63, 64, 65, 66, 67, 68, 69, 70] }, + // 8 x 3d + { key: "EyebrowLower", indices: [48, 49, 50, 51, 52, 53] } + // 6 x 3d +]; +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 = [ + /* cont */ + 127, + 234, + 132, + 58, + 172, + 150, + 149, + 148, + 152, + 377, + 378, + 379, + 397, + 288, + 361, + 454, + 356, + /* brows */ + 70, + 63, + 105, + 66, + 107, + 336, + 296, + 334, + 293, + 300, + /* nose */ + 168, + 6, + 195, + 4, + 98, + 97, + 2, + 326, + 327, + /* eyes */ + 33, + 160, + 158, + 133, + 153, + 144, + 362, + 385, + 387, + 263, + 373, + 380, + /* lip */ + 57, + 40, + 37, + 0, + 267, + 270, + 287, + 321, + 314, + 17, + 84, + 91, + /* mouth */ + 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, + // Lower outer. + 185, + 40, + 39, + 37, + 0, + 267, + 269, + 270, + 409, + // Upper outer(excluding corners). + 78, + 95, + 88, + 178, + 87, + 14, + 317, + 402, + 318, + 324, + 308, + // Lower inner. + 191, + 80, + 81, + 82, + 13, + 312, + 311, + 310, + 415, + // Upper inner(excluding corners). + 76, + 77, + 90, + 180, + 85, + 16, + 315, + 404, + 320, + 307, + 306, + // Lower semi - outer. + 184, + 74, + 73, + 72, + 11, + 302, + 303, + 304, + 408, + // Upper semi - outer(excluding corners). + 62, + 96, + 89, + 179, + 86, + 15, + 316, + 403, + 319, + 325, + 292, + // Lower semi - inner. + 183, + 42, + 41, + 38, + 12, + 268, + 271, + 272, + 407 + // Upper semi - inner(excluding corners). +]; +var LANDMARKS_REFINEMENT_LEFT_EYE_CONFIG = [ + 33, + 7, + 163, + 144, + 145, + 153, + 154, + 155, + 133, + // Lower contour. + 246, + 161, + 160, + 159, + 158, + 157, + 173, + // upper contour (excluding corners). + 130, + 25, + 110, + 24, + 23, + 22, + 26, + 112, + 243, + // Halo x2 lower contour. + 247, + 30, + 29, + 27, + 28, + 56, + 190, + // Halo x2 upper contour (excluding corners). + 226, + 31, + 228, + 229, + 230, + 231, + 232, + 233, + 244, + // Halo x3 lower contour. + 113, + 225, + 224, + 223, + 222, + 221, + 189, + // Halo x3 upper contour (excluding corners). + 35, + 124, + 46, + 53, + 52, + 65, + // Halo x4 upper contour (no lower because of mesh structure) or eyebrow inner contour. + 143, + 111, + 117, + 118, + 119, + 120, + 121, + 128, + 245, + // Halo x5 lower contour. + 156, + 70, + 63, + 105, + 66, + 107, + 55, + 193 + // Halo x5 upper contour (excluding corners) or eyebrow outer contour. +]; +var LANDMARKS_REFINEMENT_RIGHT_EYE_CONFIG = [ + 263, + 249, + 390, + 373, + 374, + 380, + 381, + 382, + 362, + // Lower contour. + 466, + 388, + 387, + 386, + 385, + 384, + 398, + // Upper contour (excluding corners). + 359, + 255, + 339, + 254, + 253, + 252, + 256, + 341, + 463, + // Halo x2 lower contour. + 467, + 260, + 259, + 257, + 258, + 286, + 414, + // Halo x2 upper contour (excluding corners). + 446, + 261, + 448, + 449, + 450, + 451, + 452, + 453, + 464, + // Halo x3 lower contour. + 342, + 445, + 444, + 443, + 442, + 441, + 413, + // Halo x3 upper contour (excluding corners). + 265, + 353, + 276, + 283, + 282, + 295, + // Halo x4 upper contour (no lower because of mesh structure) or/ eyebrow inner contour. + 372, + 340, + 346, + 347, + 348, + 349, + 350, + 357, + 465, + // Halo x5 lower contour. + 383, + 300, + 293, + 334, + 296, + 336, + 285, + 417 + // Halo x5 upper contour (excluding corners) or eyebrow outer contour. +]; + +// 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(); + l = replace(l, "[id]", f.id.toFixed(0)); + 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 Ur(e,t){var n;if(B.drawGaze&&((n=e.rotation)!=null&&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]];pt(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]];pt(t,[e.annotations.rightEyeIris[0][0],e.annotations.rightEyeIris[0][1]],[s[0],s[1]],4)}}function Yr(e,t){if(B.drawPolygons&&e.mesh.length>=468){t.lineWidth=1;for(let n=0;ne.mesh[s]);mt(t,o,B)}Xr(e,t)}}function Kr(e,t){if(B.drawPoints)if((e==null?void 0:e.mesh.length)>=468)for(let n=0;n0&&(Kr(s,o),Yr(s,o),qr(s,o),Ur(s,o))}}function g2(e,t,n){var A,a;let o=Q(n0,n);if(!t||!e)return;let s=O0(e);if(s){s.lineJoin="round";for(let i=0;i0)){let c=o.bodyLabels.slice();c=H(c,"[id]",t[i].id.toFixed(0)),c=H(c,"[score]",100*t[i].score),C0(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 d=o.bodyPartLabels.slice();d=H(d,"[label]",c.part),d=H(d,"[score]",100*c.score),C0(s,d,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 d of c)l1(s,d,o)}}}function T2(e,t,n){var A,a;let o=Q(n0,n);if(!t||!e)return;let s=O0(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,Y0(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=H(c,"[id]",i.id.toFixed(0)),c=H(c,"[label]",i.label),c=H(c,"[score]",100*i.score),C0(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=Te(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,d]of Object.entries(i.annotations)){let y=o.fingerLabels.slice();y=H(y,"[label]",c),C0(s,y,d[d.length-1][0],d[d.length-1][1],o)}if(o.drawPolygons&&i.annotations){let c=d=>{if(!(!d||d.length===0||!d[0]))for(let y=0;y0?y-1:0][0],d[y>0?y-1:0][1]),s.lineTo(d[y][0],d[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 v2(e,t,n){var A;let o=Q(n0,n);if(!t||!e)return;let s=O0(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,Y0(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=H(i,"[id]",a.id.toFixed(0)),i=H(i,"[label]",a.label),i=H(i,"[score]",100*a.score),C0(s,i,a.box[0],a.box[1],o)}s.stroke()}}}function R2(e,t,n){var s;let o=Q(n0,n);if(!(!t||!e)&&o.drawGestures&&((s=o.gestureLabels)==null?void 0:s.length)>0){let A=O0(e);if(!A)return;A.font=o.font,A.fillStyle=o.color;let a=1;for(let i=0;i1&&d[1].length>0){let y=c[1]>0?`#${c[1]}`:"",l=o.gestureLabels.slice();l=H(l,"[where]",c[0]),l=H(l,"[who]",y),l=H(l,"[what]",d[1]),C0(A,l,8,2+a*o.lineHeight,o),a+=1}}}}var Ae={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) { + if ((f == null ? void 0 : 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); + } + } + } else { + for (const [k, v] of Object.entries((f == null ? void 0 : f.annotations) || {})) { + if (!(v == null ? void 0 : v[0])) continue; + const pt = v[0]; + point(ctx, pt[0], pt[1], 0, localOptions); + if (localOptions.drawLabels) labels(ctx, k, pt[0], pt[1], 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, "[id]", result[i].id.toFixed(0)); + 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, "[id]", h.id.toFixed(0)); + 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, "[id]", h.id.toFixed(0)); + 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 +6372,7380 @@ var at=Object.defineProperty;var Qn=Object.getOwnPropertyDescriptor;var _n=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 gt=0;function Qr(e,t,n){let o=Q(n0,n);if(!t||!e)return;let s=O0(e);if(s){s.lineJoin="round",s.font=o.font;for(let A=0;AMt,kpt:()=>Rt});var Rt=["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"],Mt={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 W0,ke=224,x1,es=5,P2=[8,16,32,32,32];function ts(){let e=[],t=0;for(;tn.x)),y:r.tensor1d(e.map(n=>n.y))}}async function y1(e){if(M.initial&&(W0=null),!W0&&e.body.detector&&e.body.detector.modelPath){W0=await L(e.body.detector.modelPath);let t=W0!=null&&W0.executor?Object.values(W0.modelSignature.inputs):void 0;ke=Array.isArray(t)?parseInt(t[0].tensorShape.dim[1].size):0}else e.debug&&W0&&b("cached model:",W0.modelUrl);return ts(),W0}var d1=[5,5];function ns(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,ke),t.x),s=r.add(r.div(s,ke),t.y),A=r.mul(r.div(A,ke),d1[0]),a=r.mul(r.div(a,ke),d1[1]);let i=r.sub(o,r.div(A,2)),c=r.sub(s,r.div(a,2)),d=r.add(i,A),y=r.add(c,a);return r.stack([i,c,d,y],1)})}async function os(e,t,n,o){var d,y;let s=[],A={};A.boxes=ns(e,x1),A.scores=r.sigmoid(t),A.nms=await r.image.nonMaxSuppressionAsync(A.boxes,A.scores,1,((d=n.body.detector)==null?void 0:d.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],x=c[l],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])],m={score:f,boxRaw:x,box:p};s.push(m)}return Object.keys(A).forEach(l=>r.dispose(A[l])),s}async function f1(e,t,n){let o={};o.res=W0==null?void 0:W0.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 os(o.boxes,o.logits,t,n);return Object.keys(o).forEach(A=>r.dispose(o[A])),s}function ae(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 m1(e,t=[1,1]){let n=[e.map(d=>d[0]),e.map(d=>d[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 k2(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 P0,kt=256,Pt=Number.MAX_SAFE_INTEGER,rs={landmarks:["ld_3d","activation_segmentation","activation_heatmap","world_3d","output_poseflag"],detector:[]},E2=[],ie=[[0,0],[0,0],[0,0],[0,0]],p1=0,u1=e=>1-1/(1+Math.exp(e)),b1=e=>y1(e);async function g1(e){if(M.initial&&(P0=null),P0)e.debug&&b("cached model:",P0.modelUrl);else{P0=await L(e.body.modelPath);let t=P0!=null&&P0.executor?Object.values(P0.modelSignature.inputs):void 0;kt=Array.isArray(t)?parseInt(t[0].tensorShape.dim[1].size):0}return P0}function h1(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];ie=[[0,0],i,c,[0,0]],o.pad=r.pad(o.cropped||e,ie),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 ss(e,t,n){for(let o of e)o.position=[Math.trunc(o.position[0]*(t[0]+ie[2][0]+ie[2][1])/t[0]-ie[2][0]),Math.trunc(o.position[1]*(t[1]+ie[1][0]+ie[1][1])/t[1]-ie[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 As(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 as(e,t,n){if(!(P0!=null&&P0.executor))return null;let o={};[o.ld,o.segmentation,o.heatmap,o.world,o.poseflag]=P0==null?void 0:P0.execute(e,rs.landmarks);let s=(await o.poseflag.data())[0],A=await o.ld.data(),a=await o.world.data();Object.keys(o).forEach(p=>r.dispose(o[p]));let i=[],c=5;for(let p=0;pp.position),l=ae(y,[n[0],n[1]]),f={};for(let[p,m]of Object.entries(Mt)){let h=[];for(let T=0;Tg.part===m[T]),u=d.find(g=>g.part===m[T+1]);v&&u&&h.push([v.position,u.position])}f[p]=h}return{id:0,score:Math.trunc(100*s)/100,box:l.box,boxRaw:l.boxRaw,keypoints:d,annotations:f}}async function wt(e,t){var A,a,i;let n=[e.shape[2]||0,e.shape[1]||0],o=(t.body.skipTime||0)>R()-p1,s=Pt<(t.body.skipFrames||0);if(t.skipAllowed&&o&&s&&E2!==null)Pt++;else{let c=[];if((a=(A=t.body)==null?void 0:A.detector)!=null&&a.enabled){let d=h1(e,224);c=await f1(d,t,n),r.dispose(d)}else c=[{box:[0,0,0,0],boxRaw:[0,0,1,1],score:0}];for(let d=0;dr.dispose(o[d])),s}async function St(e,t){if(!(k0!=null&&k0.executor))return[];let n=(t.object.skipTime||0)>R()-v1,o=zt<(t.object.skipFrames||0);return t.skipAllowed&&n&&o&&Et.length>0?(zt++,Et):(zt=0,new Promise(async s=>{let A=[e.shape[2]||0,e.shape[1]||0],a=r.image.resizeBilinear(e,[we,we]),i=t.object.enabled?k0==null?void 0:k0.execute(a,["tower_0/detections"]):null;v1=R(),r.dispose(a);let c=await is(i,A,t);Et=c,s(c)}))}var z2={};oe(z2,{connected:()=>It,kpt:()=>jt});var jt=["head","neck","rightShoulder","rightElbow","rightWrist","chest","leftShoulder","leftElbow","leftWrist","bodyCenter","rightHip","rightKnee","rightAnkle","leftHip","leftKnee","leftAnkle"],It={leftLeg:["leftHip","leftKnee","leftAnkle"],rightLeg:["rightHip","rightKnee","rightAnkle"],torso:["leftShoulder","rightShoulder","rightHip","leftHip","leftShoulder"],leftArm:["leftShoulder","leftElbow","leftWrist"],rightArm:["rightShoulder","rightElbow","rightWrist"],head:[]};var _,P1=0,v0={id:0,keypoints:[],box:[0,0,0,0],boxRaw:[0,0,0,0],score:0,annotations:{}},Nt=Number.MAX_SAFE_INTEGER;async function k1(e){return M.initial&&(_=null),_?e.debug&&b("cached model:",_.modelUrl):_=await L(e.body.modelPath),_}async function ls(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),d=(await c.data())[0],y=r.div(i,n),l=(await y.data())[0];return r.dispose([s,A,i,c,y]),[d,l,a]}return r.dispose([s,A]),[0,0,a]}async function Lt(e,t){if(!(_!=null&&_.executor)||!(_!=null&&_.inputs[0].shape))return[];let n=(t.body.skipTime||0)>R()-P1,o=Nt<(t.body.skipFrames||0);return t.skipAllowed&&n&&o&&Object.keys(v0.keypoints).length>0?(Nt++,[v0]):(Nt=0,new Promise(async s=>{let A=r.tidy(()=>{var p,m;let l=r.image.resizeBilinear(e,[((p=_==null?void 0:_.inputs[0].shape)==null?void 0:p[2])||0,((m=_==null?void 0:_.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=_==null?void 0:_.execute(A)),P1=R(),r.dispose(A),a){v0.keypoints.length=0;let l=r.squeeze(a);r.dispose(a);let f=r.unstack(l,2);r.dispose(l);for(let x=0;x(t.body.minConfidence||0)&&v0.keypoints.push({score:Math.round(100*h)/100,part:jt[x],positionRaw:[p/_.inputs[0].shape[2],m/_.inputs[0].shape[1]],position:[Math.round(e.shape[2]*p/_.inputs[0].shape[2]),Math.round(e.shape[1]*m/_.inputs[0].shape[1])]})}f.forEach(x=>r.dispose(x))}v0.score=v0.keypoints.reduce((l,f)=>f.score>l?f.score:l,0);let i=v0.keypoints.map(l=>l.position[0]),c=v0.keypoints.map(l=>l.position[1]);v0.box=[Math.min(...i),Math.min(...c),Math.max(...i)-Math.min(...i),Math.max(...c)-Math.min(...c)];let d=v0.keypoints.map(l=>l.positionRaw[0]),y=v0.keypoints.map(l=>l.positionRaw[1]);v0.boxRaw=[Math.min(...d),Math.min(...y),Math.max(...d)-Math.min(...d),Math.max(...y)-Math.min(...y)];for(let[l,f]of Object.entries(It)){let x=[];for(let p=0;pT.part===f[p]),h=v0.keypoints.find(T=>T.part===f[p+1]);m&&h&&m.score>(t.body.minConfidence||0)&&h.score>(t.body.minConfidence||0)&&x.push([m.position,h.position])}v0.annotations[l]=x}s([v0])}))}var Fe=e=>[Math.abs(e.endPoint[0]-e.startPoint[0]),Math.abs(e.endPoint[1]-e.startPoint[1])],S2=e=>[e.startPoint[0]+(e.endPoint[0]-e.startPoint[0])/2,e.startPoint[1]+(e.endPoint[1]-e.startPoint[1])/2,1],j2=(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],I2=(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],S1=(e,t,n)=>{let o=[e.startPoint[0]*t[0],e.startPoint[1]*t[1]],s=[e.endPoint[0]*t[0],e.endPoint[1]*t[1]],A=e.landmarks.map(a=>[(a[0]+n[0])*t[0],(a[1]+n[1])*t[1]]);return{startPoint:o,endPoint:s,landmarks:A,confidence:e.confidence}},Ot=(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},N2=(e,t)=>{let n=S2(e),o=Fe(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,size:o}},L2=e=>{let t=S2(e),n=Fe(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,size:[Math.round(n[0]),Math.round(n[1])]}},j1=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}},Ct=[[1,0,0],[0,1,0],[0,0,1]],cs=e=>e-2*Math.PI*Math.floor((e+Math.PI)/(2*Math.PI)),ds=(e,t)=>cs(Math.PI/2-Math.atan2(-(t[1]-e[1]),t[0]-e[0]));var E1=(e,t)=>[[1,0,e],[0,1,t],[0,0,1]],Ee=(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=E1(t[0],t[1]),a=z1(A,s),i=E1(-t[0],-t[1]);return z1(a,i)},ys=e=>{let t=[[e[0][0],e[1][0]],[e[0][1],e[1][1]]],n=[e[0][2],e[1][2]],o=[-Ee(t[0],n),-Ee(t[1],n)];return[t[0].concat(o[0]),t[1].concat(o[1]),[0,0,1]]},fs=(e,t)=>[Ee(e,t[0]),Ee(e,t[1])];function N1(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*(x[0]-s/2),A[1]/s*(x[1]-s/2),x[2]||0]),i=n&&n!==0&&Math.abs(n)>.2,c=i?I1(n,[0,0]):Ct,d=i?a.map(x=>[...fs(x,c),x[2]]):a,y=i?ys(o):Ct,l=S2(t),f=[Ee(l,y[0]),Ee(l,y[1])];return d.map(x=>[Math.trunc(x[0]+f[0]),Math.trunc(x[1]+f[1]),Math.trunc(x[2]||0)])}function O1(e,t,n,o){let s=t.landmarks.length>=ut.count?ut.symmetryLine:ve.symmetryLine,A=0,a=Ct,i;if(e&&M.kernels.includes("rotatewithoffset"))if(A=ds(t.landmarks[s[0]],t.landmarks[s[1]]),A&&A!==0&&Math.abs(A)>.2){let d=S2(t),y=[d[0]/n.shape[2],d[1]/n.shape[1]],l=r.image.rotateWithOffset(n,A,0,[y[0],y[1]]);a=I1(-A,d),i=Ot(t,l,[o,o]),r.dispose(l)}else i=Ot(t,n,[o,o]);else i=Ot(t,n,[o,o]);return[A,a,i]}var ms=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]},C1=(e,t)=>{let n=ms(e),o=Fe(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 W1=6,G0,O2=null,le=0,Be=null,D1=()=>le;async function F1(e){var t;return M.initial&&(G0=null),G0?e.debug&&b("cached model:",G0.modelUrl):G0=await L((t=e.face.detector)==null?void 0:t.modelPath),le=G0.executor&&G0.inputs[0].shape?G0.inputs[0].shape[2]:256,Be=r.scalar(le,"int32"),O2=r.tensor2d(N1(le)),G0}function ps(e){if(!O2||!Be)return r.zeros([0,0]);let t={};t.boxStarts=r.slice(e,[0,1],[-1,2]),t.centers=r.add(t.boxStarts,O2),t.boxSizes=r.slice(e,[0,3],[-1,2]),t.boxSizesNormalized=r.div(t.boxSizes,Be),t.centersNormalized=r.div(t.centers,Be),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,Be),t.endNormalized=r.mul(t.ends,Be);let n=r.concat2d([t.startNormalized,t.endNormalized],1);return Object.keys(t).forEach(o=>r.dispose(t[o])),n}async function B1(e,t){var i,c,d,y,l,f,x;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,[le,le]),n.div=r.div(n.resized,O.tf127),n.normalized=r.sub(n.div,O.tf1);let o=G0==null?void 0:G0.execute(n.normalized);if(Array.isArray(o)&&o.length>2){let p=o.sort((m,h)=>m.size-h.size);n.concat384=r.concat([p[0],p[2]],2),n.concat512=r.concat([p[1],p[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=ps(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,((d=t.face.detector)==null?void 0:d.minConfidence)||0);let s=await n.nms.array(),A=[],a=await n.scores.data();for(let p=0;p(((y=t.face.detector)==null?void 0:y.minConfidence)||0)){let h={};h.bbox=r.slice(n.boxes,[s[p],0],[1,-1]),h.slice=r.slice(n.batch,[s[p],W1-1],[1,-1]),h.squeeze=r.squeeze(h.slice),h.landmarks=r.reshape(h.squeeze,[W1,-1]);let T=await h.bbox.data(),v={startPoint:[T[0],T[1]],endPoint:[T[2],T[3]],landmarks:await h.landmarks.array(),confidence:m};h.anchor=r.slice(O2,[s[p],0],[1,2]);let u=await h.anchor.data(),g=S1(v,[(e.shape[2]||0)/le,(e.shape[1]||0)/le],u),E=N2(g,((l=t.face.detector)==null?void 0:l.scale)||1.4),k=L2(E);k.size[0]>(((f=t.face.detector)==null?void 0:f.minSize)||0)&&k.size[1]>(((x=t.face.detector)==null?void 0:x.minSize)||0)&&A.push(k),Object.keys(h).forEach(N=>r.dispose(h[N]))}}return Object.keys(n).forEach(p=>r.dispose(n[p])),A}var z0,ce=0,Dt=F0.leftEyeLower0,Ft=F0.rightEyeLower0,He={leftBounds:[Dt[0],Dt[Dt.length-1]],rightBounds:[Ft[0],Ft[Ft.length-1]]},Ge={upperCenter:3,lowerCenter:4,index:71,numCoordinates:76};async function X1(e){var t,n;return M.initial&&(z0=null),z0?e.debug&&b("cached model:",z0.modelUrl):z0=await L((t=e.face.iris)==null?void 0:t.modelPath),ce=z0!=null&&z0.executor&&((n=z0.inputs)!=null&&n[0].shape)?z0.inputs[0].shape[2]:0,ce===-1&&(ce=64),z0}function C2(e,t,n,o){for(let s=0;s{let t=e[He.leftBounds[0]][2],n=e[He.rightBounds[0]][2];return t-n},G1=(e,t,n,o,s,A=!1,a=2.3)=>{let i=L2(N2(j1([e[n],e[o]]),a)),c=Fe(i),d=r.image.cropAndResize(t,[[i.startPoint[1]/s,i.startPoint[0]/s,i.endPoint[1]/s,i.endPoint[0]/s]],[0],[ce,ce]);if(A&&M.kernels.includes("flipleftright")){let y=r.image.flipLeftRight(d);r.dispose(d),d=y}return{box:i,boxSize:c,crop:d}},V1=(e,t,n,o=!1)=>{let s=[];for(let A=0;A{let o=e[F0[`${n}EyeUpper0`][Ge.upperCenter]][2],s=e[F0[`${n}EyeLower0`][Ge.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 q1(e,t,n,o){var N,C;if(!(z0!=null&&z0.executor))return e;let{box:s,boxSize:A,crop:a}=G1(e,t,He.leftBounds[0],He.leftBounds[1],n,!0,((N=o.face.iris)==null?void 0:N.scale)||2.3),{box:i,boxSize:c,crop:d}=G1(e,t,He.rightBounds[0],He.rightBounds[1],n,!0,((C=o.face.iris)==null?void 0:C.scale)||2.3),y=r.concat([a,d]);r.dispose(a),r.dispose(d);let l=z0.execute(y);r.dispose(y);let f=await l.data();r.dispose(l);let x=f.slice(0,Ge.numCoordinates*3),{rawCoords:p,iris:m}=V1(x,s,A,!0),h=f.slice(Ge.numCoordinates*3),{rawCoords:T,iris:v}=V1(h,i,c,!1),u=us(e);Math.abs(u)<30?(C2(e,p,"left",null),C2(e,T,"right",null)):u<1?C2(e,p,"left",["EyeUpper0","EyeLower0"]):C2(e,T,"right",["EyeUpper0","EyeLower0"]);let g=Z1(e,m,"left"),E=Z1(e,v,"right");return e.concat(g).concat(E)}async function Y1(e,t){var A,a,i,c,d,y,l,f,x,p;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=(d=t.filter(m=>m.size===142))==null?void 0:d[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((p=(x=t.filter(m=>m.size===142))==null?void 0:x[1])==null?void 0:p.data())};for(let m of Object.values(n))if(!m)return e;let o=Me.reduce((m,h)=>m+=e[h][2],0)/Me.length;for(let m=0;mm+=e[h][2],0)/Pe.length;for(let m=0;mR()-K0.timestamp,o=K0.skipped<(((d=t.face.detector)==null?void 0:d.skipFrames)||0);!t.skipAllowed||!n||!o||K0.boxes.length===0?(K0.boxes=await B1(e,t),K0.timestamp=R(),K0.skipped=0):K0.skipped++;let s=[],A=[],a=0,i=o2;for(let v=0;v[N[0]/(e.shape[2]||0),N[1]/(e.shape[1]||0),(N[2]||0)/i]);for(let N of Object.keys(ve))k.annotations[N]=[k.mesh[ve[N]]]}else if(!K)t.debug&&b("face mesh detection requested, but model is not loaded");else{if((x=t.face.attention)!=null&&x.enabled&&!M.kernels.includes("atan2"))return t.face.attention.enabled=!1,r.dispose(k.tensor),s;let N=K.execute(k.tensor),V=await N.find(D=>D.shape[D.shape.length-1]===1).data();if(k.faceScore=Math.round(100*V[0])/100,k.faceScore<(((p=t.face.detector)==null?void 0:p.minConfidence)||1)){if(u.confidence=k.faceScore,t.face.mesh.keepInvalid){k.box=j2(u,e),k.boxRaw=I2(u,e),k.size=u.size,k.score=k.boxScore,k.mesh=u.landmarks,k.meshRaw=k.mesh.map(D=>[D[0]/(e.shape[2]||1),D[1]/(e.shape[1]||1),(D[2]||0)/i]);for(let D of Object.keys(ve))k.annotations[D]=[k.mesh[ve[D]]]}}else{let D=N.find(U=>U.shape[U.shape.length-1]===1404),Z=r.reshape(D,[-1,3]),J=await Z.array();r.dispose(Z),(m=t.face.attention)!=null&&m.enabled?J=await Y1(J,N):(h=t.face.iris)!=null&&h.enabled&&(J=await q1(J,k.tensor,o2,t)),k.mesh=L1(J,u,g,E,o2),k.meshRaw=k.mesh.map(U=>[U[0]/(e.shape[2]||0),U[1]/(e.shape[1]||0),(U[2]||0)/i]);for(let U of Object.keys(F0))k.annotations[U]=F0[U].map(m0=>k.mesh[m0]);k.score=k.faceScore;let q={...C1(k.mesh,u),confidence:u.confidence,landmarks:u.landmarks,size:u.size};k.box=j2(q,e),k.boxRaw=I2(q,e),k.size=q.size,A.push(q)}r.dispose(N)}k.score>(((T=t.face.detector)==null?void 0:T.minConfidence)||1)?s.push(k):r.dispose(k.tensor)}return K0.boxes=A,s}async function J1(e){var t,n,o,s,A,a;return M.initial&&(K=null),(t=e.face.attention)!=null&&t.enabled&&(K!=null&&K.signature)&&Object.keys(((n=K==null?void 0:K.signature)==null?void 0:n.outputs)||{}).length<6&&(K=null),K?e.debug&&b("cached model:",K.modelUrl):(o=e.face.attention)!=null&&o.enabled?K=await L(e.face.attention.modelPath):K=await L((s=e.face.mesh)==null?void 0:s.modelPath),o2=K.executor&&((A=K==null?void 0:K.inputs)!=null&&A[0].shape)?(a=K==null?void 0:K.inputs)==null?void 0:a[0].shape[2]:256,K}var Q1=Re,_1=t2;var Gt=[],d0,W2=[],$1=0,e3=0,Ht=Number.MAX_SAFE_INTEGER,Vt=!1;async function t3(e){var t,n,o;return M.initial&&(d0=null),d0?e.debug&&b("cached model:",d0.modelUrl):(d0=await L((t=e.face.emotion)==null?void 0:t.modelPath),Vt=((o=(n=d0==null?void 0:d0.inputs)==null?void 0:n[0].shape)==null?void 0:o[3])===3,Vt?Gt=["angry","disgust","fear","happy","neutral","sad","surprise"]:Gt=["angry","disgust","fear","happy","sad","surprise","neutral"]),d0}async function Zt(e,t,n,o){var a,i;if(!d0)return[];let s=Ht<(((a=t.face.emotion)==null?void 0:a.skipFrames)||0),A=(((i=t.face.emotion)==null?void 0:i.skipTime)||0)>R()-e3;return t.skipAllowed&&A&&s&&$1===o&&W2[n]&&W2[n].length>0?(Ht++,W2[n]):(Ht=0,new Promise(async c=>{var y,l,f;let d=[];if((y=t.face.emotion)!=null&&y.enabled){let x={},p=d0!=null&&d0.inputs[0].shape?d0.inputs[0].shape[2]:0;if(((l=t.face.emotion)==null?void 0:l.crop)>0){let h=(f=t.face.emotion)==null?void 0:f.crop,T=[[h,h,1-h,1-h]];x.resize=r.image.cropAndResize(e,T,[0],[p,p])}else x.resize=r.image.resizeBilinear(e,[p,p],!1);Vt?(x.mul=r.mul(x.resize,255),x.normalize=r.sub(x.mul,[103.939,116.779,123.68]),x.emotion=d0==null?void 0:d0.execute(x.normalize)):(x.channels=r.mul(x.resize,O.rgb),x.grayscale=r.sum(x.channels,3,!0),x.grayscaleSub=r.sub(x.grayscale,O.tf05),x.grayscaleMul=r.mul(x.grayscaleSub,O.tf2),x.emotion=d0==null?void 0:d0.execute(x.grayscaleMul)),e3=R();let m=await x.emotion.data();for(let h=0;h(t.face.emotion.minConfidence||0)&&d.push({score:Math.min(.99,Math.trunc(100*m[h])/100),emotion:Gt[h]});d.sort((h,T)=>T.score-h.score),Object.keys(x).forEach(h=>r.dispose(x[h]))}W2[n]=d,$1=o,c(d)}))}var x0,de=[],o3=0,r3=0,Xt=Number.MAX_SAFE_INTEGER;async function s3(e){var t;return M.initial&&(x0=null),x0?e.debug&&b("cached model:",x0.modelUrl):x0=await L((t=e.face.description)==null?void 0:t.modelPath),x0}function bs(e,t){var A,a;let n=e.image||e.tensor||e;if(!(x0!=null&&x0.inputs[0].shape))return n;let o;if(((A=t.face.description)==null?void 0:A.crop)>0){let i=(a=t.face.description)==null?void 0:a.crop,c=[[i,i,1-i,1-i]];o=r.image.cropAndResize(n,c,[0],[x0.inputs[0].shape[2],x0.inputs[0].shape[1]])}else o=r.image.resizeBilinear(n,[x0.inputs[0].shape[2],x0.inputs[0].shape[1]],!1);let s=r.mul(o,O.tf255);return r.dispose(o),s}async function qt(e,t,n,o){var i,c,d,y;let s={age:0,gender:"unknown",genderScore:0,descriptor:[]};if(!(x0!=null&&x0.executor))return s;let A=Xt<(((i=t.face.description)==null?void 0:i.skipFrames)||0),a=(((c=t.face.description)==null?void 0:c.skipTime)||0)>R()-o3;return t.skipAllowed&&A&&a&&r3===o&&((d=de==null?void 0:de[n])==null?void 0:d.age)>0&&((y=de==null?void 0:de[n])==null?void 0:y.genderScore)>0?(Xt++,de[n]):(Xt=0,new Promise(async l=>{var f;if((f=t.face.description)!=null&&f.enabled){let x=bs(e,t),p=x0==null?void 0:x0.execute(x);o3=R(),r.dispose(x);let h=await p.find(C=>C.shape[1]===1).data(),T=Math.trunc(200*Math.abs(h[0]-.5))/100;T>(t.face.description.minConfidence||0)&&(s.gender=h[0]<=.5?"female":"male",s.genderScore=Math.min(.99,T));let v=r.argMax(p.find(C=>C.shape[1]===100),1),u=(await v.data())[0];r.dispose(v);let E=await p.find(C=>C.shape[1]===100).data();s.age=Math.round(E[u-1]>E[u+1]?10*u-100*E[u-1]:10*u+100*E[u+1])/10,(Number.isNaN(h[0])||Number.isNaN(E[0]))&&b("faceres error:",{model:x0,result:p});let k=p.find(C=>C.shape[1]===1024),N=k?await k.data():[];s.descriptor=Array.from(N),p.forEach(C=>r.dispose(C))}de[n]=s,r3=o,l(s)}))}var Ve=.1,Ut=.5;function gs(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 a3(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 F0.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]});Ve&&Ve>0&&(s=s.map(a=>({x:a.x>.5?a.x+Ve:a.x-Ve,y:a.y>.5?a.y+Ve:a.y-Ve})));for(let a=0;aR()-l3,A=Yt<(((i=t.face.antispoof)==null?void 0:i.skipFrames)||0);return t.skipAllowed&&s&&A&&i3===o&&D2[n]?(Yt++,D2[n]):(Yt=0,new Promise(async c=>{let d=r.image.resizeBilinear(e,[y0!=null&&y0.inputs[0].shape?y0.inputs[0].shape[2]:0,y0!=null&&y0.inputs[0].shape?y0.inputs[0].shape[1]:0],!1),y=y0==null?void 0:y0.execute(d),l=(await y.data())[0];D2[n]=Math.round(100*l)/100,i3=o,l3=R(),r.dispose([d,y]),c(D2[n])}))}var f0,F2=[],Jt=Number.MAX_SAFE_INTEGER,x3=0,y3=0;async function f3(e){var t;return M.initial&&(f0=null),f0?e.debug&&b("cached model:",f0.modelUrl):f0=await L((t=e.face.liveness)==null?void 0:t.modelPath),f0}async function Qt(e,t,n,o){var a,i;if(!(f0!=null&&f0.executor))return 0;let s=(((a=t.face.liveness)==null?void 0:a.skipTime)||0)>R()-y3,A=Jt<(((i=t.face.liveness)==null?void 0:i.skipFrames)||0);return t.skipAllowed&&s&&A&&x3===o&&F2[n]?(Jt++,F2[n]):(Jt=0,new Promise(async c=>{let d=r.image.resizeBilinear(e,[f0!=null&&f0.inputs[0].shape?f0.inputs[0].shape[2]:0,f0!=null&&f0.inputs[0].shape?f0.inputs[0].shape[1]:0],!1),y=f0==null?void 0:f0.execute(d),l=(await y.data())[0];F2[n]=Math.round(100*l)/100,x3=o,y3=R(),r.dispose([d,y]),c(F2[n])}))}var B0,_t=[],vs=["white","black","asian","indian","other"],Rs=[15,23,28,35.5,45.5,55.5,65],p3=0,u3=0,$t=Number.MAX_SAFE_INTEGER;async function h3(e){var t;return M.initial&&(B0=null),B0?e.debug&&b("cached model:",B0.modelUrl):B0=await L((t=e.face.gear)==null?void 0:t.modelPath),B0}async function e5(e,t,n,o){var a,i;if(!B0)return{age:0,gender:"unknown",genderScore:0,race:[]};let s=$t<(((a=t.face.gear)==null?void 0:a.skipFrames)||0),A=(((i=t.face.gear)==null?void 0:i.skipTime)||0)>R()-u3;return t.skipAllowed&&A&&s&&p3===o&&_t[n]?($t++,_t[n]):($t=0,new Promise(async c=>{var T,v,u,g;if(!(B0!=null&&B0.inputs[0].shape))return;let d={},y=[[0,.1,.9,.9]];if(((T=t.face.gear)==null?void 0:T.crop)>0){let E=(v=t.face.gear)==null?void 0:v.crop;y=[[E,E,1-E,1-E]]}d.resize=r.image.cropAndResize(e,y,[0],[B0.inputs[0].shape[2],B0.inputs[0].shape[1]]);let l={age:0,gender:"unknown",genderScore:0,race:[]};(u=t.face.gear)!=null&&u.enabled&&([d.age,d.gender,d.race]=B0.execute(d.resize,["age_output","gender_output","race_output"]));let f=await d.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 x=await d.race.data();for(let E=0;E(((g=t.face.gear)==null?void 0:g.minConfidence)||.2)&&l.race.push({score:Math.round(100*x[E])/100,race:vs[E]});l.race.sort((E,k)=>k.score-E.score);let m=Array.from(await d.age.data()).map((E,k)=>[Rs[k],E]).sort((E,k)=>k[1]-E[1]),h=m[0][0];for(let E=1;Er.dispose(d[E])),_t[n]=l,p3=o,u3=R(),c(l)}))}var R0,B2=[],g3=0,T3=0,t5=Number.MAX_SAFE_INTEGER;async function v3(e){return M.initial&&(R0=null),R0?e.debug&&b("cached model:",R0.modelUrl):R0=await L(e.face.ssrnet.modelPathAge),R0}async function n5(e,t,n,o){var a,i,c,d;if(!R0)return{age:0};let s=t5<(((a=t.face.ssrnet)==null?void 0:a.skipFrames)||0),A=(((i=t.face.ssrnet)==null?void 0:i.skipTime)||0)>R()-T3;return t.skipAllowed&&s&&A&&g3===o&&((c=B2[n])!=null&&c.age)&&((d=B2[n])==null?void 0:d.age)>0?(t5++,B2[n]):(t5=0,new Promise(async y=>{var x,p,m;if(!(R0!=null&&R0.inputs)||!R0.inputs[0]||!R0.inputs[0].shape)return;let l={};if(((x=t.face.ssrnet)==null?void 0:x.crop)>0){let h=(p=t.face.ssrnet)==null?void 0:p.crop,T=[[h,h,1-h,1-h]];l.resize=r.image.cropAndResize(e,T,[0],[R0.inputs[0].shape[2],R0.inputs[0].shape[1]])}else 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((m=t.face.ssrnet)!=null&&m.enabled&&(l.age=R0.execute(l.enhance)),l.age){let h=await l.age.data();f.age=Math.trunc(10*h[0])/10}Object.keys(l).forEach(h=>r.dispose(l[h])),B2[n]=f,g3=o,T3=R(),y(f)}))}var u0,H2=[],M3=0,P3=0,o5=Number.MAX_SAFE_INTEGER,r5=[.2989,.587,.114];async function k3(e){var t;return M.initial&&(u0=null),u0?e.debug&&b("cached model:",u0.modelUrl):u0=await L((t=e.face.ssrnet)==null?void 0:t.modelPathGender),u0}async function s5(e,t,n,o){var a,i,c,d;if(!u0)return{gender:"unknown",genderScore:0};let s=o5<(((a=t.face.ssrnet)==null?void 0:a.skipFrames)||0),A=(((i=t.face.ssrnet)==null?void 0:i.skipTime)||0)>R()-P3;return t.skipAllowed&&s&&A&&M3===o&&((c=H2[n])!=null&&c.gender)&&((d=H2[n])==null?void 0:d.genderScore)>0?(o5++,H2[n]):(o5=0,new Promise(async y=>{var p,m,h;if(!(u0!=null&&u0.inputs[0].shape))return;let l={};if(((p=t.face.ssrnet)==null?void 0:p.crop)>0){let T=(m=t.face.ssrnet)==null?void 0:m.crop,v=[[T,T,1-T,1-T]];l.resize=r.image.cropAndResize(e,v,[0],[u0.inputs[0].shape[2],u0.inputs[0].shape[1]])}else l.resize=r.image.resizeBilinear(e,[u0.inputs[0].shape[2],u0.inputs[0].shape[1]],!1);l.enhance=r.tidy(()=>{var v,u;let T;if(((u=(v=u0==null?void 0:u0.inputs)==null?void 0:v[0].shape)==null?void 0:u[3])===1){let[g,E,k]=r.split(l.resize,3,3),N=r.mul(g,r5[0]),C=r.mul(E,r5[1]),V=r.mul(k,r5[2]),D=r.addN([N,C,V]);T=r.mul(r.sub(D,O.tf05),2)}else T=r.mul(r.sub(l.resize,O.tf05),2);return T});let f={gender:"unknown",genderScore:0};(h=t.face.ssrnet)!=null&&h.enabled&&(l.gender=u0.execute(l.enhance));let x=await l.gender.data();f.gender=x[0]>x[1]?"female":"male",f.genderScore=x[0]>x[1]?Math.trunc(100*x[0])/100:Math.trunc(100*x[1])/100,Object.keys(l).forEach(T=>r.dispose(l[T])),H2[n]=f,M3=o,P3=R(),y(f)}))}var S0,A5=[],E3=0,z3=0,S3=Number.MAX_SAFE_INTEGER;async function j3(e){var t;return M.initial&&(S0=null),S0?e.debug&&b("cached model:",S0.modelUrl):S0=await L((t=e.face.mobilefacenet)==null?void 0:t.modelPath),S0}async function a5(e,t,n,o){var a,i;if(!(S0!=null&&S0.executor))return[];let s=S3<(((a=t.face.mobilefacenet)==null?void 0:a.skipFrames)||0),A=(((i=t.face.mobilefacenet)==null?void 0:i.skipTime)||0)>R()-z3;return t.skipAllowed&&A&&s&&E3===o&&A5[n]?(S3++,A5[n]):new Promise(async c=>{var y;let d=[];if((y=t.face.mobilefacenet)!=null&&y.enabled&&(S0!=null&&S0.inputs[0].shape)){let l={};l.crop=r.image.resizeBilinear(e,[S0.inputs[0].shape[2],S0.inputs[0].shape[1]],!1),l.data=S0.execute(l.crop);let f=await l.data.data();d=Array.from(f),Object.keys(l).forEach(x=>r.dispose(l[x]))}A5[n]=d,E3=o,z3=R(),c(d)})}var j0,i5=[],N3=0,L3=0,O3=Number.MAX_SAFE_INTEGER;async function C3(e){return M.initial&&(j0=null),j0?e.debug&&b("cached model:",j0.modelUrl):j0=await L(e.face.insightface.modelPath),j0}async function l5(e,t,n,o){var a,i;if(!(j0!=null&&j0.executor))return[];let s=O3<(((a=t.face.insightface)==null?void 0:a.skipFrames)||0),A=(((i=t.face.insightface)==null?void 0:i.skipTime)||0)>R()-L3;return t.skipAllowed&&A&&s&&N3===o&&i5[n]?(O3++,i5[n]):new Promise(async c=>{var y;let d=[];if((y=t.face.insightface)!=null&&y.enabled&&(j0!=null&&j0.inputs[0].shape)){let l={};l.crop=r.image.resizeBilinear(e,[j0.inputs[0].shape[2],j0.inputs[0].shape[1]],!1),l.data=j0.execute(l.crop);let f=await l.data.data();d=Array.from(f),Object.keys(l).forEach(x=>r.dispose(l[x]))}i5[n]=d,N3=o,L3=R(),c(d)})}var Ms=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]],d=Math.sqrt(c[0]*c[0]+c[1]*c[1]);return d=Math.min(d,e.boxRaw[2]/2,e.boxRaw[3]/2),{bearing:(t([0,0],c)+Math.PI/2)%Math.PI,strength:d}},D3=(e,t)=>{let n=m=>{let h=Math.sqrt(m[0]*m[0]+m[1]*m[1]+m[2]*m[2]);return m[0]/=h,m[1]/=h,m[2]/=h,m},o=(m,h)=>{let T=m[0]-h[0],v=m[1]-h[1],u=m[2]-h[2];return[T,v,u]},s=(m,h)=>{let T=m[1]*h[2]-m[2]*h[1],v=m[2]*h[0]-m[0]*h[2],u=m[0]*h[1]-m[1]*h[0];return[T,v,u]},A=m=>{let[h,T,v,u,g,E,k,N,C]=m,V,D,Z;return u<1?u>-1?(Z=Math.asin(u),D=Math.atan2(-k,h),V=Math.atan2(-E,g)):(Z=-Math.PI/2,D=-Math.atan2(N,C),V=0):(Z=Math.PI/2,D=Math.atan2(N,C),V=0),Number.isNaN(V)&&(V=0),Number.isNaN(D)&&(D=0),Number.isNaN(Z)&&(Z=0),{pitch:2*-V,yaw:2*-D,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]]),d=n(o(c[1],c[0])),y=n(o(c[3],c[2])),l=n(s(y,d));y=s(d,l);let f=[y[0],y[1],y[2],d[0],d[1],d[2],l[0],l[1],l[2]],x=A(f),p=a.length===478?Ms(e):{bearing:0,strength:0};return{angle:x,matrix:f,gaze:p}};function F3(e,t){let n=e==null?void 0:e.annotations;if(!(n!=null&&n.leftEyeIris)||!(n!=null&&n.rightEyeIris))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 c5=async(e,t)=>{var p,m,h,T,v,u,g,E,k,N,C,V,D,Z,J,q,U,m0,P,i0,g0,e0,G;let n=R(),o,s,A,a,i,c,d,y,l,f=[];e.state="run:face";let x=await K1(t,e.config);if(e.performance.face=M.perfadd?(e.performance.face||0)+Math.trunc(R()-n):Math.trunc(R()-n),!t.shape||t.shape.length!==4)return[];if(!x)return[];for(let S=0;S200?D3(x[S],[t.shape[2],t.shape[1]]):null;e.analyze("Start Emotion:"),e.config.async?a=(m=e.config.face.emotion)!=null&&m.enabled?Zt(x[S].tensor||r.tensor([]),e.config,S,x.length):[]:(e.state="run:emotion",n=R(),a=(h=e.config.face.emotion)!=null&&h.enabled?await Zt(x[S].tensor||r.tensor([]),e.config,S,x.length):[],e.performance.emotion=M.perfadd?(e.performance.emotion||0)+Math.trunc(R()-n):Math.trunc(R()-n)),e.analyze("End Emotion:"),e.analyze("Start AntiSpoof:"),e.config.async?d=(T=e.config.face.antispoof)!=null&&T.enabled?Kt(x[S].tensor||r.tensor([]),e.config,S,x.length):0:(e.state="run:antispoof",n=R(),d=(v=e.config.face.antispoof)!=null&&v.enabled?await Kt(x[S].tensor||r.tensor([]),e.config,S,x.length):0,e.performance.antispoof=M.perfadd?(e.performance.antispoof||0)+Math.trunc(R()-n):Math.trunc(R()-n)),e.analyze("End AntiSpoof:"),e.analyze("Start Liveness:"),e.config.async?y=(u=e.config.face.liveness)!=null&&u.enabled?Qt(x[S].tensor||r.tensor([]),e.config,S,x.length):0:(e.state="run:liveness",n=R(),y=(g=e.config.face.liveness)!=null&&g.enabled?await Qt(x[S].tensor||r.tensor([]),e.config,S,x.length):0,e.performance.liveness=M.perfadd?(e.performance.antispoof||0)+Math.trunc(R()-n):Math.trunc(R()-n)),e.analyze("End Liveness:"),e.analyze("Start GEAR:"),e.config.async?s=(E=e.config.face.gear)!=null&&E.enabled?e5(x[S].tensor||r.tensor([]),e.config,S,x.length):null:(e.state="run:gear",n=R(),s=(k=e.config.face.gear)!=null&&k.enabled?await e5(x[S].tensor||r.tensor([]),e.config,S,x.length):null,e.performance.gear=Math.trunc(R()-n)),e.analyze("End GEAR:"),e.analyze("Start SSRNet:"),e.config.async?(o=(N=e.config.face.ssrnet)!=null&&N.enabled?n5(x[S].tensor||r.tensor([]),e.config,S,x.length):null,A=(C=e.config.face.ssrnet)!=null&&C.enabled?s5(x[S].tensor||r.tensor([]),e.config,S,x.length):null):(e.state="run:ssrnet",n=R(),o=(V=e.config.face.ssrnet)!=null&&V.enabled?await n5(x[S].tensor||r.tensor([]),e.config,S,x.length):null,A=(D=e.config.face.ssrnet)!=null&&D.enabled?await s5(x[S].tensor||r.tensor([]),e.config,S,x.length):null,e.performance.ssrnet=Math.trunc(R()-n)),e.analyze("End SSRNet:"),e.analyze("Start MobileFaceNet:"),e.config.async?i=(Z=e.config.face.mobilefacenet)!=null&&Z.enabled?a5(x[S].tensor||r.tensor([]),e.config,S,x.length):null:(e.state="run:mobilefacenet",n=R(),i=(J=e.config.face.mobilefacenet)!=null&&J.enabled?await a5(x[S].tensor||r.tensor([]),e.config,S,x.length):null,e.performance.mobilefacenet=Math.trunc(R()-n)),e.analyze("End MobileFaceNet:"),e.analyze("Start InsightFace:"),e.config.async?c=(q=e.config.face.insightface)!=null&&q.enabled?l5(x[S].tensor||r.tensor([]),e.config,S,x.length):null:(e.state="run:mobilefacenet",n=R(),c=(U=e.config.face.insightface)!=null&&U.enabled?await l5(x[S].tensor||r.tensor([]),e.config,S,x.length):null,e.performance.mobilefacenet=Math.trunc(R()-n)),e.analyze("End InsightFace:"),e.analyze("Start Description:"),e.config.async?l=qt(x[S].tensor||r.tensor([]),e.config,S,x.length):(e.state="run:description",n=R(),l=await qt(x[S].tensor||r.tensor([]),e.config,S,x.length),e.performance.description=M.perfadd?(e.performance.description||0)+Math.trunc(R()-n):Math.trunc(R()-n)),e.analyze("End Description:"),e.config.async&&([o,A,a,i,c,l,s,d,y]=await Promise.all([o,A,a,i,c,l,s,d,y])),e.analyze("Finish Face:"),(m0=e.config.face.ssrnet)!=null&&m0.enabled&&o&&A&&(l={...l,age:o.age,gender:A.gender,genderScore:A.genderScore}),(P=e.config.face.gear)!=null&&P.enabled&&s&&(l={...l,age:s.age,gender:s.gender,genderScore:s.genderScore,race:s.race}),(i0=e.config.face.mobilefacenet)!=null&&i0.enabled&&i&&(l.descriptor=i),(g0=e.config.face.insightface)!=null&&g0.enabled&&c&&(l.descriptor=c);let F=(e0=e.config.face.iris)!=null&&e0.enabled?F3(x[S],t.shape[2]):0,w0=(G=e.config.face.detector)!=null&&G.return?r.squeeze(x[S].tensor):null;r.dispose(x[S].tensor),x[S].tensor&&delete x[S].tensor;let t0={...x[S],id:S};l.age&&(t0.age=l.age),l.gender&&(t0.gender=l.gender),l.genderScore&&(t0.genderScore=l.genderScore),l.descriptor&&(t0.embedding=l.descriptor),l.race&&(t0.race=l.race),a&&(t0.emotion=a),d&&(t0.real=d),y&&(t0.live=y),F>0&&(t0.distance=F),W&&(t0.rotation=W),w0&&(t0.tensor=w0),f.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),f};var M0={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=>M0.nameMapping[e],getPoints:e=>M0.pointsMapping[e]},ye={none:0,half:1,full:2,nameMapping:{0:"none",1:"half",2:"full"},getName:e=>ye.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]},xe=class{constructor(t){z(this,"name");z(this,"curls");z(this,"directions");z(this,"weights");z(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:V0,index:_0,middle:$0,ring:ze,pinky:Se}=M0,{none:Z0,half:ks,full:X0}=ye,{verticalUp:Ze,verticalDown:ni,horizontalLeft:d5,horizontalRight:ws,diagonalUpRight:Es,diagonalUpLeft:Xe,diagonalDownRight:oi,diagonalDownLeft:ri}=$,fe=new xe("thumbs up");fe.curl(V0,Z0,1);fe.direction(V0,Ze,1);fe.direction(V0,Xe,.25);fe.direction(V0,Es,.25);for(let e of[M0.index,M0.middle,M0.ring,M0.pinky])fe.curl(e,X0,1),fe.direction(e,d5,1),fe.direction(e,ws,1);var s0=new xe("victory");s0.curl(V0,ks,.5);s0.curl(V0,Z0,.5);s0.direction(V0,Ze,1);s0.direction(V0,Xe,1);s0.curl(_0,Z0,1);s0.direction(_0,Ze,.75);s0.direction(_0,Xe,1);s0.curl($0,Z0,1);s0.direction($0,Ze,1);s0.direction($0,Xe,.75);s0.curl(ze,X0,1);s0.direction(ze,Ze,.2);s0.direction(ze,Xe,1);s0.direction(ze,d5,.2);s0.curl(Se,X0,1);s0.direction(Se,Ze,.2);s0.direction(Se,Xe,1);s0.direction(Se,d5,.2);s0.weight(_0,2);s0.weight($0,2);var me=new xe("point");me.curl(V0,X0,1);me.curl(_0,Z0,.5);me.curl($0,X0,.5);me.curl(ze,X0,.5);me.curl(Se,X0,.5);me.weight(_0,2);me.weight($0,2);var pe=new xe("middle finger");pe.curl(V0,Z0,1);pe.curl(_0,X0,.5);pe.curl($0,X0,.5);pe.curl(ze,X0,.5);pe.curl(Se,X0,.5);pe.weight(_0,2);pe.weight($0,2);var qe=new xe("open palm");qe.curl(V0,Z0,.75);qe.curl(_0,Z0,.75);qe.curl($0,Z0,.75);qe.curl(ze,Z0,.75);qe.curl(Se,Z0,.75);var B3=[fe,s0,me,pe,qe];var zs=.7,je={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 H3(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 V3(e,t){if(!e||!t)return[0,0];let n=H3(e[0],e[1],t[0],t[1]);if(e.length===2)return n;let o=H3(e[1],e[2],t[1],t[2]);return[n,o]}function G3(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 Ss(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],d=e[2]-t[2],y=e[2]-n[2],l=t[2]-n[2],f=Math.sqrt(o*o+a*a+d*d),x=Math.sqrt(s*s+i*i+y*y),p=Math.sqrt(A*A+c*c+l*l),m=(p*p+f*f-x*x)/(2*p*f);m>1?m=1:m<-1&&(m=-1);let h=Math.acos(m);h=57.2958*h%180;let T;return h>je.NO_CURL_START_LIMIT?T=ye.none:h>je.HALF_CURL_START_LIMIT?T=ye.half:T=ye.full,T}function Z3(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 X3(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 js(e,t,n,o,s,A,a,i){let c,d=X3(e,t,n,o),y=Z3(s,A,a,i);return d===$.verticalUp?y===$.horizontalLeft?c=$.diagonalUpLeft:c=$.diagonalUpRight:y===$.horizontalLeft?c=$.diagonalDownLeft:c=$.diagonalDownRight,c}function Is(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],d=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(d)),f=0,x=0,p=0,m=l/(y+1e-5);m>1.5?f+=je.DISTANCE_VOTE_POWER:m>.66?x+=je.DISTANCE_VOTE_POWER:p+=je.DISTANCE_VOTE_POWER;let h=Math.sqrt(s*s+i*i),T=Math.sqrt(A*A+c*c),v=Math.sqrt(a*a+d*d),u=Math.max(h,T,v),g=e[0],E=e[1],k=n[0],N=n[1];u===h?(k=n[0],N=n[1]):u===v&&(g=t[0],E=t[1]);let D=V3([g,E],[k,N]),Z=G3(D,je.TOTAL_ANGLE_VOTE_POWER);f+=Z[0],x+=Z[1],p+=Z[2];for(let q of o){let U=G3(q,je.SINGLE_ANGLE_VOTE_POWER);f+=U[0],x+=U[1],p+=U[2]}let J;return f===Math.max(f,x,p)?J=X3(c,i,d,l):p===Math.max(x,p)?J=Z3(A,s,a,y):J=js(c,i,d,l,A,s,a,y),J}function q3(e){let t=[],n=[],o=[],s=[];if(!e)return{curls:o,directions:s};for(let A of M0.all){let a=M0.getPoints(A),i=[],c=[];for(let d of a){let y=e[d[0]],l=e[d[1]],f=V3(y,l),x=f[0],p=f[1];i.push(x),c.push(p)}t.push(i),n.push(c)}for(let A of M0.all){let a=A===M0.thumb?1:0,i=M0.getPoints(A),c=e[i[a][0]],d=e[i[a+1][1]],y=e[i[3][1]],l=Ss(c,d,y),f=Is(c,d,y,t[A].slice(a));o[A]=l,s[A]=f}return{curls:o,directions:s}}function G2(e){if(!e||e.length===0)return null;let t=q3(e),n={};for(let o of M0.all)n[M0.getName(o)]={curl:ye.getName(t.curls[o]),direction:$.getName(t.directions[o])};return n}function U3(e){let t=[];if(!e||e.length===0)return t;let n=q3(e);for(let o of B3){let s=o.matchAgainst(n.curls,n.directions);s>=zs&&t.push({name:o.name,confidence:s})}return t}var Y3=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},K3=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},J3=e=>{var n,o,s,A;if(!e)return[];let t=[];for(let a=0;a.06||h>.06)&&(x=!1),m>h?h>.04&&t.push({iris:a,gesture:"looking right"}):m>.04&&t.push({iris:a,gesture:"looking left"});let T=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||T<.01||v>.022||T>.022)&&(x=!1),(v<.01||T<.01)&&t.push({iris:a,gesture:"looking down"}),(v>.022||T>.022)&&t.push({iris:a,gesture:"looking up"}),x&&t.push({iris:a,gesture:"looking center"})}return t},Q3=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 Z2(e,t=1.5){let n=r2(e),o=V2(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 X2(e){let t=r2(e),n=V2(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 Ls(e){return e-2*Math.PI*Math.floor((e+Math.PI)/(2*Math.PI))}function nn(e,t){let n=Math.PI/2-Math.atan2(-(t[1]-e[1]),t[0]-e[0]);return Ls(n)}var _3=(e,t)=>[[1,0,e],[0,1,t],[0,0,1]];function ue(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 d={};d.box=r.slice(o.norm,[c,0],[1,-1]),d.slice=r.slice(o.predictions,[c,5],[1,14]),d.norm=this.normalizeLandmarks(d.slice,c),d.palmLandmarks=r.reshape(d.norm,[-1,2]);let y=await d.box.data(),l=y.slice(0,2),f=y.slice(2,4),x=await d.palmLandmarks.array(),p={startPoint:l,endPoint:f,palmLandmarks:x,confidence:s[c]},m=tn(p,[(t.shape[2]||1)/this.inputSize,(t.shape[1]||0)/this.inputSize]);a.push(m),Object.keys(d).forEach(h=>r.dispose(d[h]))}return Object.keys(o).forEach(c=>r.dispose(o[c])),a}};var Ds=5,An=1.65,an=[0,5,9,13,17,1,2],Fs=0,Bs=2,ln=0,U2=class{constructor(t,n){z(this,"handDetector");z(this,"handPoseModel");z(this,"inputSize");z(this,"storedBoxes");z(this,"skipped");z(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=>f5([...A,1],n)),s=this.calculateLandmarksBoundingBox(o);return Z2(X2(s),Ds)}getBoxForHandLandmarks(t){let n=this.calculateLandmarksBoundingBox(t),o=Z2(X2(n),An);o.palmLandmarks=[];for(let s=0;s[a[0]*(x[0]-this.inputSize/2),a[1]*(x[1]-this.inputSize/2),a[2]*x[2]]),c=y5(o,[0,0]),d=i.map(x=>[...f5(x,c),x[2]]),y=on(s),l=[...r2(n),1],f=[ue(l,y[0]),ue(l,y[1])];return d.map(x=>[Math.trunc(x[0]+f[0]),Math.trunc(x[1]+f[1]),Math.trunc(x[2])])}async estimateHands(t,n){let o=!1,s,A=(n.hand.skipTime||0)>R()-ln,a=this.skipped<(n.hand.skipFrames||0);n.skipAllowed&&A&&a?this.skipped++:(s=await this.handDetector.predict(t,n),this.skipped=0),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 E=r.reshape(u,[-1,3]),k=await E.array();r.dispose(u),r.dispose(E);let N=this.transformRawCoords(k,m,y,p),C=this.getBoxForHandLandmarks(N);this.storedBoxes[c]={...C,confidence:g};let V={landmarks:N,confidence:g,boxConfidence:d.confidence,fingerConfidence:g,box:{topLeft:C.startPoint,bottomRight:C.endPoint}};i.push(V)}else this.storedBoxes[c]=null;r.dispose(u)}else{let y=Z2(X2(d),An),l={confidence:d.confidence,boxConfidence:d.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 cn={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]},Ie,Ne,m5;function Gs(){let e=Ie?new q2(Ie):void 0;e&&Ne&&(m5=new U2(e,Ne))}async function p5(e,t){m5||Gs();let n=await m5.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 d=G2(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:d})}return o}async function dn(e){var t;return M.initial&&(Ie=null),Ie?e.debug&&b("cached model:",Ie.modelUrl):Ie=await L((t=e.hand.detector)==null?void 0:t.modelPath),Ie}async function xn(e){var t;return M.initial&&(Ne=null),Ne?e.debug&&b("cached model:",Ne.modelUrl):Ne=await L((t=e.hand.skeleton)==null?void 0:t.modelPath),Ne}var r0=[null,null],Vs=["StatefulPartitionedCall/Postprocessor/Slice","StatefulPartitionedCall/Postprocessor/ExpandDims_1"],he=[[0,0],[0,0]],Zs=["hand","fist","pinch","point","face","tip","pinchtip"],fn=4,mn=1.6,Xs=512,qs=1.4,Y2=Number.MAX_SAFE_INTEGER,u5=0,ee=[0,0],o0={boxes:[],hands:[]},pn={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 un(e){var t;if(M.initial&&(r0[0]=null),r0[0])e.debug&&b("cached model:",r0[0].modelUrl);else{h2(["tensorlistreserve","enter","tensorlistfromtensor","merge","loopcond","switch","exit","tensorliststack","nextiteration","tensorlistsetitem","tensorlistgetitem","reciprocal","shape","split","where"],e),r0[0]=await L((t=e.hand.detector)==null?void 0:t.modelPath);let n=r0[0].executor?Object.values(r0[0].modelSignature.inputs):void 0;he[0][0]=Array.isArray(n)?parseInt(n[0].tensorShape.dim[1].size):0,he[0][1]=Array.isArray(n)?parseInt(n[0].tensorShape.dim[2].size):0}return r0[0]}async function hn(e){var t;if(M.initial&&(r0[1]=null),r0[1])e.debug&&b("cached model:",r0[1].modelUrl);else{r0[1]=await L((t=e.hand.skeleton)==null?void 0:t.modelPath);let n=r0[1].executor?Object.values(r0[1].modelSignature.inputs):void 0;he[1][0]=Array.isArray(n)?parseInt(n[0].tensorShape.dim[1].size):0,he[1][1]=Array.isArray(n)?parseInt(n[0].tensorShape.dim[2].size):0}return r0[1]}async function Us(e,t){let n=[];if(!e||!r0[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,Xs),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 r0[0].executeAsync(o.cast,Vs),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[fn]),i.splice(fn,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 d=await o.nms.data(),y=await o.max.data(),l=await o.argmax.data();for(let f of Array.from(d)){let x=r.slice(o.boxes,f,1),p=await x.data();r.dispose(x);let m=[p[1],p[0],p[3]-p[1],p[2]-p[0]],h=k2(m,qs),T=[Math.trunc(m[0]*ee[0]),Math.trunc(m[1]*ee[1]),Math.trunc(m[2]*ee[0]),Math.trunc(m[3]*ee[1])],v=y[f],u=Zs[l[f]],g={id:c++,score:v,box:T,boxRaw:h,label:u};n.push(g)}return Object.keys(o).forEach(f=>r.dispose(o[f])),n.sort((f,x)=>x.score-f.score),n.length>(t.hand.maxDetected||1)&&(n.length=t.hand.maxDetected||1),n}async function h5(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&&r0[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],[he[1][0],he[1][1]],"bilinear"),s.div=r.div(s.crop,O.tf255),[s.score,s.keypoints]=r0[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]/he[1][1],l[1]/he[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=>[ee[0]*(l[0]+t.boxRaw[0]),ee[1]*(l[1]+t.boxRaw[1]),l[2]||0]),o.landmarks=G2(o.keypoints);for(let l of Object.keys(pn))o.annotations[l]=pn[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 b5(e,t){var s,A;if(!((s=r0[0])!=null&&s.executor)||!((A=r0[1])!=null&&A.executor)||!r0[0].inputs[0].shape||!r0[1].inputs[0].shape)return[];ee=[e.shape[2]||0,e.shape[1]||0],Y2++;let n=(t.hand.skipTime||0)>R()-u5,o=Y2<(t.hand.skipFrames||0);return t.skipAllowed&&n&&o?o0.hands:new Promise(async a=>{let i=3*(t.hand.skipTime||0)>R()-u5,c=Y2<3*(t.hand.skipFrames||0);t.skipAllowed&&o0.hands.length===t.hand.maxDetected?o0.hands=await Promise.all(o0.boxes.map(y=>h5(e,y,t))):t.skipAllowed&&i&&c&&o0.hands.length>0?o0.hands=await Promise.all(o0.boxes.map(y=>h5(e,y,t))):(o0.boxes=await Us(e,t),u5=R(),o0.hands=await Promise.all(o0.boxes.map(y=>h5(e,y,t))),Y2=0);let d=[...o0.boxes];if(o0.boxes.length=0,t.cacheSensitivity>0)for(let y=0;y.05&&l.box[3]/(e.shape[1]||1)>.05&&o0.hands[y].fingerScore&&o0.hands[y].fingerScore>(t.hand.minConfidence||0)){let f=k2(l.box,mn),x=k2(l.boxRaw,mn);o0.boxes.push({...d[y],box:f,boxRaw:x})}}for(let y=0;y({face:[],body:[],hand:[],gesture:[],object:[],persons:[],performance:{},timestamp:0,width:0,height:0,error:e});var s2={};oe(s2,{connected:()=>J2,horizontal:()=>g5,kpt:()=>K2,relative:()=>v5,vertical:()=>T5});var K2=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],g5=[["leftEye","rightEye"],["leftEar","rightEar"],["leftShoulder","rightShoulder"],["leftElbow","rightElbow"],["leftWrist","rightWrist"],["leftHip","rightHip"],["leftKnee","rightKnee"],["leftAnkle","rightAnkle"]],T5=[["leftKnee","leftShoulder"],["rightKnee","rightShoulder"],["leftAnkle","leftKnee"],["rightAnkle","rightKnee"]],v5=[[["leftHip","rightHip"],["leftShoulder","rightShoulder"]],[["leftElbow","rightElbow"],["leftShoulder","rightShoulder"]]],J2={leftLeg:["leftHip","leftKnee","leftAnkle"],rightLeg:["rightHip","rightKnee","rightAnkle"],torso:["leftShoulder","rightShoulder","rightHip","leftHip","leftShoulder"],leftArm:["leftShoulder","leftElbow","leftWrist"],rightArm:["rightShoulder","rightElbow","rightWrist"],head:[]};var j=te(),R5=0;function gn(e,t){var a,i,c,d,y,l,f,x,p,m,h,T,v,u,g,E,k,N,C,V,D,Z,J,q,U,m0;let n=R();if(!e)return te();let o=Date.now()-e.timestamp,s=o<1e3?8-Math.log(o+1):1;if(e.canvas&&(j.canvas=e.canvas),e.error&&(j.error=e.error),!j.body||e.body.length!==j.body.length)j.body=JSON.parse(JSON.stringify(e.body));else for(let P=0;P((s-1)*j.body[P].box[F]+W)/s),g0=e.body[P].boxRaw.map((W,F)=>((s-1)*j.body[P].boxRaw[F]+W)/s),e0=e.body[P].keypoints.map((W,F)=>{var w0,t0,ne,Ke,Oe,H5,G5,V5,Z5;return{score:W.score,part:W.part,position:[j.body[P].keypoints[F]?((s-1)*(j.body[P].keypoints[F].position[0]||0)+(W.position[0]||0))/s:W.position[0],j.body[P].keypoints[F]?((s-1)*(j.body[P].keypoints[F].position[1]||0)+(W.position[1]||0))/s:W.position[1],j.body[P].keypoints[F]?((s-1)*(j.body[P].keypoints[F].position[2]||0)+(W.position[2]||0))/s:W.position[2]],positionRaw:[j.body[P].keypoints[F]?((s-1)*(j.body[P].keypoints[F].positionRaw[0]||0)+(W.positionRaw[0]||0))/s:W.positionRaw[0],j.body[P].keypoints[F]?((s-1)*(j.body[P].keypoints[F].positionRaw[1]||0)+(W.positionRaw[1]||0))/s:W.positionRaw[1],j.body[P].keypoints[F]?((s-1)*(j.body[P].keypoints[F].positionRaw[2]||0)+(W.positionRaw[2]||0))/s:W.positionRaw[2]],distance:[j.body[P].keypoints[F]?((s-1)*(((w0=j.body[P].keypoints[F].distance)==null?void 0:w0[0])||0)+(((t0=W.distance)==null?void 0:t0[0])||0))/s:(ne=W.distance)==null?void 0:ne[0],j.body[P].keypoints[F]?((s-1)*(((Ke=j.body[P].keypoints[F].distance)==null?void 0:Ke[1])||0)+(((Oe=W.distance)==null?void 0:Oe[1])||0))/s:(H5=W.distance)==null?void 0:H5[1],j.body[P].keypoints[F]?((s-1)*(((G5=j.body[P].keypoints[F].distance)==null?void 0:G5[2])||0)+(((V5=W.distance)==null?void 0:V5[2])||0))/s:(Z5=W.distance)==null?void 0:Z5[2]]}}),G={},S={connected:{}};(a=t.body.modelPath)!=null&&a.includes("efficientpose")?S=z2:(i=t.body.modelPath)!=null&&i.includes("blazepose")?S=M2:(c=t.body.modelPath)!=null&&c.includes("movenet")&&(S=s2);for(let[W,F]of Object.entries(S.connected)){let w0=[];for(let t0=0;t0Oe.part===F[t0]),Ke=e0.find(Oe=>Oe.part===F[t0+1]);ne&&Ke&&w0.push([ne.position,Ke.position])}G[W]=w0}j.body[P]={...e.body[P],box:i0,boxRaw:g0,keypoints:e0,annotations:G}}if(!j.hand||e.hand.length!==j.hand.length)j.hand=JSON.parse(JSON.stringify(e.hand));else for(let P=0;P((s-1)*j.hand[P].box[W]+S)/s),g0=e.hand[P].boxRaw.map((S,W)=>((s-1)*j.hand[P].boxRaw[W]+S)/s);j.hand[P].keypoints.length!==e.hand[P].keypoints.length&&(j.hand[P].keypoints=e.hand[P].keypoints);let e0=e.hand[P].keypoints&&e.hand[P].keypoints.length>0?e.hand[P].keypoints.map((S,W)=>S.map((F,w0)=>((s-1)*(j.hand[P].keypoints[W][w0]||1)+(F||0))/s)):[],G={};if(Object.keys(j.hand[P].annotations).length!==Object.keys(e.hand[P].annotations).length)j.hand[P].annotations=e.hand[P].annotations,G=j.hand[P].annotations;else if(e.hand[P].annotations)for(let S of Object.keys(e.hand[P].annotations))G[S]=(l=(y=(d=e.hand[P])==null?void 0:d.annotations)==null?void 0:y[S])!=null&&l[0]?e.hand[P].annotations[S].map((W,F)=>W.map((w0,t0)=>((s-1)*j.hand[P].annotations[S][F][t0]+w0)/s)):null;j.hand[P]={...e.hand[P],box:i0,boxRaw:g0,keypoints:e0,annotations:G}}if(!j.face||e.face.length!==j.face.length)j.face=JSON.parse(JSON.stringify(e.face));else for(let P=0;P((s-1)*j.face[P].box[S]+G)/s),g0=e.face[P].boxRaw.map((G,S)=>((s-1)*j.face[P].boxRaw[S]+G)/s),e0=e.face[P].annotations;if(Object.keys(j.face[P].annotations).length!==Object.keys(e.face[P].annotations).length)j.face[P].annotations=e.face[P].annotations,e0=j.face[P].annotations;else if(e.face[P].annotations)for(let G of Object.keys(e.face[P].annotations))e0[G]=(p=(x=(f=e.face[P])==null?void 0:f.annotations)==null?void 0:x[G])!=null&&p[0]?e.face[P].annotations[G].map((S,W)=>S.map((F,w0)=>((s-1)*j.face[P].annotations[G][W][w0]+F)/s)):null;if(e.face[P].rotation){let G={matrix:[0,0,0,0,0,0,0,0,0],angle:{roll:0,yaw:0,pitch:0},gaze:{bearing:0,strength:0}};G.matrix=(m=e.face[P].rotation)==null?void 0:m.matrix,G.angle={roll:((s-1)*(((T=(h=j.face[P].rotation)==null?void 0:h.angle)==null?void 0:T.roll)||0)+(((u=(v=e.face[P].rotation)==null?void 0:v.angle)==null?void 0:u.roll)||0))/s,yaw:((s-1)*(((E=(g=j.face[P].rotation)==null?void 0:g.angle)==null?void 0:E.yaw)||0)+(((N=(k=e.face[P].rotation)==null?void 0:k.angle)==null?void 0:N.yaw)||0))/s,pitch:((s-1)*(((V=(C=j.face[P].rotation)==null?void 0:C.angle)==null?void 0:V.pitch)||0)+(((Z=(D=e.face[P].rotation)==null?void 0:D.angle)==null?void 0:Z.pitch)||0))/s},G.gaze={bearing:((s-1)*(((J=j.face[P].rotation)==null?void 0:J.gaze.bearing)||0)+(((q=e.face[P].rotation)==null?void 0:q.gaze.bearing)||0))/s,strength:((s-1)*(((U=j.face[P].rotation)==null?void 0:U.gaze.strength)||0)+(((m0=e.face[P].rotation)==null?void 0:m0.gaze.strength)||0))/s},j.face[P]={...e.face[P],rotation:G,box:i0,boxRaw:g0,annotations:e0}}else j.face[P]={...e.face[P],box:i0,boxRaw:g0,annotations:e0}}if(!j.object||e.object.length!==j.object.length)j.object=JSON.parse(JSON.stringify(e.object));else for(let P=0;P((s-1)*j.object[P].box[G]+e0)/s),g0=e.object[P].boxRaw.map((e0,G)=>((s-1)*j.object[P].boxRaw[G]+e0)/s);j.object[P]={...e.object[P],box:i0,boxRaw:g0}}if(e.persons){let P=e.persons;if(!j.persons||P.length!==j.persons.length)j.persons=JSON.parse(JSON.stringify(P));else for(let i0=0;i0((s-1)*j.persons[i0].box[e0]+g0)/s)}e.gesture&&(j.gesture=e.gesture),j.width=e.width,j.height=e.height;let A=R();return R5=M.perfadd?R5+Math.round(A-n):Math.round(A-n),e.performance&&(j.performance={...e.performance,interpolate:R5}),j}var h0;async function M5(e){return!h0||M.initial?h0=await L(e.segmentation.modelPath):e.debug&&b("cached model:",h0.modelUrl),h0}async function Tn(e,t){var s;if(h0||(h0=await M5(t)),!(h0!=null&&h0.executor)||!((s=h0==null?void 0:h0.inputs)!=null&&s[0].shape))return null;let n={};n.resize=r.image.resizeBilinear(e,[h0.inputs[0].shape?h0.inputs[0].shape[1]:0,h0.inputs[0].shape?h0.inputs[0].shape[2]:0],!1),n.norm=r.div(n.resize,O.tf255),n.res=h0.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 k5={};oe(k5,{distance:()=>P5,find:()=>Js,similarity:()=>Ks});function P5(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 Ks(e,t,n={order:2,multiplier:25,min:.2,max:.8}){let o=P5(e,t,n);return Rn(o,n.order||2,n.min||0,n.max||1)}function Js(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;ai2,validateModel:()=>ot});var Mn=.005,I0={keypoints:[],padding:[[0,0],[0,0],[0,0],[0,0]]};function w5(e){for(let t of g5){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]d&&d.part===t[0]),s=e.keypoints.findIndex(d=>d&&d.part===t[1]),A=e.keypoints.findIndex(d=>d&&d.part===n[0]),a=e.keypoints.findIndex(d=>d&&d.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 d=e.keypoints[o];e.keypoints[o]=e.keypoints[s],e.keypoints[s]=d}}}function Pn(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,I0.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 wn(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]+I0.padding[2][0]+I0.padding[2][1])/t[0]-I0.padding[2][0],o.position[1]*(t[1]+I0.padding[1][0]+I0.padding[1][1])/t[1]-I0.padding[1][0]],o.positionRaw=[o.position[0]/t[0],o.position[1]/t[1]];let n=ae(e.keypoints.map(o=>o.position),t);return e.box=n.box,e.boxRaw=n.boxRaw,e}var A0,Q2=0,E5=Number.MAX_SAFE_INTEGER,Le={boxes:[],bodies:[],last:0};async function En(e){var t;return M.initial&&(A0=null),A0?e.debug&&b("cached model:",A0.modelUrl):(h2(["size"],e),A0=await L(e.body.modelPath)),Q2=A0!=null&&A0.executor&&((t=A0==null?void 0:A0.inputs)!=null&&t[0].shape)?A0.inputs[0].shape[2]:0,Q2<64&&(Q2=256),r.env().flagRegistry.WEBGL_USE_SHAPES_UNIFORMS&&r.env().set("WEBGL_USE_SHAPES_UNIFORMS",!1),A0}function _s(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:K2[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=ae(s.map(y=>y.position),[n.shape[2],n.shape[1]]),c={};for(let[y,l]of Object.entries(J2)){let f=[];for(let x=0;xh.part===l[x]),m=s.find(h=>h.part===l[x+1]);p&&m&&p.score>(t.body.minConfidence||0)&&m.score>(t.body.minConfidence||0)&&f.push([p.position,m.position])}c[y]=f}let d={id:0,score:A,box:i.box,boxRaw:i.boxRaw,keypoints:s,annotations:c};return w5(d),a.push(d),a}function $s(e,t,n){let o=[];for(let s=0;st.body.minConfidence){let i=[];for(let f=0;f<17;f++){let x=A[3*f+2];if(x>t.body.minConfidence){let p=[A[3*f+1],A[3*f+0]];i.push({part:K2[f],score:Math.round(100*x)/100,positionRaw:p,position:[Math.round((n.shape[2]||0)*p[0]),Math.round((n.shape[1]||0)*p[1])]})}}let c=[A[52],A[51],A[54]-A[52],A[53]-A[51]],d=[Math.trunc(c[0]*(n.shape[2]||0)),Math.trunc(c[1]*(n.shape[1]||0)),Math.trunc(c[2]*(n.shape[2]||0)),Math.trunc(c[3]*(n.shape[1]||0))],y={};for(let[f,x]of Object.entries(J2)){let p=[];for(let m=0;mv.part===x[m]),T=i.find(v=>v.part===x[m+1]);h&&T&&h.score>(t.body.minConfidence||0)&&T.score>(t.body.minConfidence||0)&&p.push([h.position,T.position])}y[f]=p}let l={id:s,score:a,box:d,boxRaw:c,keypoints:[...i],annotations:y};w5(l),o.push(l)}}return o.sort((s,A)=>A.score-s.score),o.length>t.body.maxDetected&&(o.length=t.body.maxDetected),o}async function z5(e,t){var s;if(!(A0!=null&&A0.executor)||!((s=A0==null?void 0:A0.inputs)!=null&&s[0].shape))return[];t.skipAllowed||(Le.boxes.length=0),E5++;let n=(t.body.skipTime||0)>R()-Le.last,o=E5<(t.body.skipFrames||0);return t.skipAllowed&&n&&o?Le.bodies:new Promise(async A=>{let a={};E5=0,a.input=kn(e,Q2),a.res=A0==null?void 0:A0.execute(a.input),Le.last=R();let i=await a.res.array();Le.bodies=a.res.shape[2]===17?_s(i,t,e):$s(i,t,e);for(let c of Le.bodies)wn(c,[e.shape[2]||1,e.shape[1]||1]),Pn(c.keypoints);Object.keys(a).forEach(c=>r.dispose(a[c])),A(Le.bodies)})}var H0,_2=[],Sn=0,S5=Number.MAX_SAFE_INTEGER,et=0,$2=2.5;async function jn(e){if(!H0||M.initial){H0=await L(e.object.modelPath);let t=H0!=null&&H0.executor?Object.values(H0.modelSignature.inputs):void 0;et=Array.isArray(t)?parseInt(t[0].tensorShape.dim[2].size):416}else e.debug&&b("cached model:",H0.modelUrl);return H0}async function eA(e,t,n){var d,y;let o=0,s=[],A=et;for(let l of[1,2,4]){let f=l*13,x=r.squeeze(e.find(u=>u.shape[1]===f**2&&(u.shape[2]||0)===De.length)),p=await x.array(),m=r.squeeze(e.find(u=>u.shape[1]===f**2&&(u.shape[2]||0)(n.object.minConfidence||0)&&g!==61){let k=(.5+Math.trunc(u%f))/f,N=(.5+Math.trunc(u/f))/f,C=v[u].map(P=>P*(f/l/A)),[V,D]=[k-$2/l*C[0],N-$2/l*C[1]],[Z,J]=[k+$2/l*C[2]-V,N+$2/l*C[3]-D],q=[V,D,Z,J];q=q.map(P=>Math.max(0,Math.min(P,1)));let U=[q[0]*t[0],q[1]*t[1],q[2]*t[0],q[3]*t[1]],m0={id:o++,score:Math.round(100*E)/100,class:g+1,label:De[g].label,box:U.map(P=>Math.trunc(P)),boxRaw:q};s.push(m0)}}r.dispose([x,m,h,T])}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 j5(e,t){if(!(H0!=null&&H0.executor))return[];let n=(t.object.skipTime||0)>R()-Sn,o=S5<(t.object.skipFrames||0);return t.skipAllowed&&n&&o&&_2.length>0?(S5++,_2):(S5=0,!M.kernels.includes("mod")||!M.kernels.includes("sparsetodense")?_2:new Promise(async s=>{let A=[e.shape[2]||0,e.shape[1]||0],a=r.image.resizeBilinear(e,[et,et],!1),i=r.div(a,O.tf255),c=r.transpose(i,[0,3,1,2]),d;t.object.enabled&&(d=H0.execute(c)),Sn=R();let y=await eA(d,A,t);_2=y,r.dispose([a,i,c,...d]),s(y)}))}var a2=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],tA=a2.length,A2=a2.reduce((e,t,n)=>(e[t]=n,e),{}),nA=[["leftHip","leftShoulder"],["leftElbow","leftShoulder"],["leftElbow","leftWrist"],["leftHip","leftKnee"],["leftKnee","leftAnkle"],["rightHip","rightShoulder"],["rightElbow","rightShoulder"],["rightElbow","rightWrist"],["rightHip","rightKnee"],["rightKnee","rightAnkle"],["leftShoulder","rightShoulder"],["leftHip","rightHip"]],Ji=nA.map(([e,t])=>[A2[e],A2[t]]),Nn=[["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 Ln(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 On(e,[t,n],[o,s]){let A=t/o,a=n/s,i=(d,y)=>({id:y,score:d.score,boxRaw:[d.box[0]/s,d.box[1]/o,d.box[2]/s,d.box[3]/o],box:[Math.trunc(d.box[0]*a),Math.trunc(d.box[1]*A),Math.trunc(d.box[2]*a),Math.trunc(d.box[3]*A)],keypoints:d.keypoints.map(({score:l,part:f,position:x})=>({score:l,part:f,position:[Math.trunc(x.x*a),Math.trunc(x.y*A)],positionRaw:[x.x/o,x.y/o]})),annotations:{}});return e.map((d,y)=>i(d,y))}var tt=class{constructor(t,n){z(this,"priorityQueue");z(this,"numberOfElements");z(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 Cn(e,t,n,o){let s=n-e,A=o-t;return s*s+A*A}function O5(e,t){return{x:e.x+t.x,y:e.y+t.y}}var N0,rA=["MobilenetV1/offset_2/BiasAdd","MobilenetV1/heatmap_2/BiasAdd","MobilenetV1/displacement_fwd_2/BiasAdd","MobilenetV1/displacement_bwd_2/BiasAdd"],nt=1,Ue=16,sA=50**2;function Wn(e,t,n,o,s,A,a=2){let i=T=>({y:A.get(T.y,T.x,e),x:A.get(T.y,T.x,A.shape[2]/2+e)}),c=(T,v,u)=>({y:L5(Math.round(T.y/Ue),0,v-1),x:L5(Math.round(T.x/Ue),0,u-1)}),[d,y]=o.shape,l=c(t.position,d,y),f=i(l),p=O5(t.position,f);for(let T=0;T[A2[f],A2[x]]),a=A.map(([,f])=>f),i=A.map(([f])=>f),c=t.shape[2],d=a.length,y=new Array(c),l=N5(e.part,Ue,n);y[e.part.id]={score:e.score,part:a2[e.part.id],position:l};for(let f=d-1;f>=0;--f){let x=a[f],p=i[f];y[x]&&!y[p]&&(y[p]=Wn(f,y[x],p,t,n,s))}for(let f=0;ft){i=!1;break}if(!i)break}return i}function iA(e,t){let[n,o,s]=t.shape,A=new tt(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?Cn(n,t,A.y,A.x)<=sA:!1})}function lA(e,t){return t.reduce((o,{position:s,score:A},a)=>(Dn(e,s,a)||(o+=A),o),0)/t.length}function cA(e,t,n,o,s,A){let a=[],i=iA(A,t);for(;a.lengthx.score>A);let l=lA(a,y),f=Ln(y);l>A&&a.push({keypoints:y,box:f,score:Math.round(100*l)/100})}return a}async function C5(e,t){if(!(N0!=null&&N0.executor))return[];let n=r.tidy(()=>{if(!N0.inputs[0].shape)return[];let a=r.image.resizeBilinear(e,[N0.inputs[0].shape[2],N0.inputs[0].shape[1]]),i=r.sub(r.div(r.cast(a,"float32"),127.5),1),d=N0.execute(i,rA).map(y=>r.squeeze(y,[0]));return d[1]=r.sigmoid(d[1]),d}),o=await Promise.all(n.map(a=>a.buffer()));for(let a of n)r.dispose(a);let s=cA(o[0],o[1],o[2],o[3],t.body.maxDetected,t.body.minConfidence);return N0.inputs[0].shape?On(s,[e.shape[1],e.shape[2]],[N0.inputs[0].shape[2],N0.inputs[0].shape[1]]):[]}async function Fn(e){return!N0||M.initial?N0=await L(e.body.modelPath):e.debug&&b("cached model:",N0.modelUrl),N0}var J0,dA=["fgr","pha","r1o","r2o","r3o","r4o"],a0={},D5=0;function Gn(e){r.dispose([a0.r1i,a0.r2i,a0.r3i,a0.r4i,a0.downsample_ratio]),a0.r1i=r.tensor(0),a0.r2i=r.tensor(0),a0.r3i=r.tensor(0),a0.r4i=r.tensor(0),D5=e.segmentation.ratio||.5,a0.downsample_ratio=r.tensor(D5)}async function F5(e){return!J0||M.initial?J0=await L(e.segmentation.modelPath):e.debug&&b("cached model:",J0.modelUrl),Gn(e),J0}var Hn=e=>r.tidy(()=>{let t=r.squeeze(e,[0]),n=r.mul(t,O.tf255);return r.cast(n,"int32")});function W5(e,t){let n=e?Hn(e):r.fill([t.shape[1]||0,t.shape[2]||0,3],255,"int32"),o=t?Hn(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 xA(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 Vn(e,t){if(J0||(J0=await F5(t)),!(J0!=null&&J0.executor))return null;a0.src=r.div(e,255),D5!==t.segmentation.ratio&&Gn(t);let[n,o,s,A,a,i]=await J0.executeAsync(a0,dA),c;switch(t.segmentation.mode||"default"){case"default":c=W5(n,o);break;case"alpha":c=W5(null,o);break;case"foreground":c=W5(n,null);break;case"state":c=xA(s);break;default:c=r.tensor(0)}return r.dispose([a0.src,n,o,a0.r1i,a0.r2i,a0.r3i,a0.r4i]),[a0.r1i,a0.r2i,a0.r3i,a0.r4i]=[s,A,a,i],c}var b0;async function B5(e){return!b0||M.initial?b0=await L(e.segmentation.modelPath):e.debug&&b("cached model:",b0.modelUrl),b0}async function Xn(e,t){var s;if(b0||(b0=await B5(t)),!(b0!=null&&b0.executor)||!((s=b0==null?void 0:b0.inputs)!=null&&s[0].shape))return null;let n={};n.resize=r.image.resizeBilinear(e,[b0.inputs[0].shape?b0.inputs[0].shape[1]:0,b0.inputs[0].shape?b0.inputs[0].shape[2]:0],!1),n.norm=r.div(n.resize,O.tf255),n.res=b0.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 ot(e,t,n){var d,y;if(!t||!((d=e==null?void 0:e.config)!=null&&d.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&&b("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&&b("model validation failed:",n,a),a.length>0?{name:n,missing:a,ops:A,url:i}:null}var i2=class{constructor(t){z(this,"instance");z(this,"models",{});this.models={},this.instance=t}stats(){let t=0,n=0,o=0;for(let A of Object.values(p0))t+=A.sizeFromManifest,n+=A.sizeLoadedWeights,o+=A.sizeDesired;let s=o>0?n/o:0;return{numLoadedModels:Object.values(p0).length,numDefinedModels:Object.keys(this.models).length,percentageLoaded:s,totalSizeFromManifest:t,totalSizeWeights:n,totalSizeLoading:o,modelStats:Object.values(p0)}}reset(){for(let t of Object.keys(this.models))this.models[t]=null}async load(t){var o,s,A,a,i,c,d,y,l,f,x,p,m,h,T,v,u,g,E,k,N,C,V,D,Z,J,q;M.initial&&this.reset(),t&&(this.instance=t);let n={};n.blazeface=this.instance.config.face.enabled&&!this.models.blazeface?F1(this.instance.config):null,n.antispoof=this.instance.config.face.enabled&&((o=this.instance.config.face.antispoof)!=null&&o.enabled)&&!this.models.antispoof?c3(this.instance.config):null,n.liveness=this.instance.config.face.enabled&&((s=this.instance.config.face.liveness)!=null&&s.enabled)&&!this.models.liveness?f3(this.instance.config):null,n.faceres=this.instance.config.face.enabled&&((A=this.instance.config.face.description)!=null&&A.enabled)&&!this.models.faceres?s3(this.instance.config):null,n.emotion=this.instance.config.face.enabled&&((a=this.instance.config.face.emotion)!=null&&a.enabled)&&!this.models.emotion?t3(this.instance.config):null,n.iris=this.instance.config.face.enabled&&((i=this.instance.config.face.iris)!=null&&i.enabled)&&!((c=this.instance.config.face.attention)!=null&&c.enabled)&&!this.models.iris?X1(this.instance.config):null,n.facemesh=this.instance.config.face.enabled&&((d=this.instance.config.face.mesh)!=null&&d.enabled)&&!this.models.facemesh?J1(this.instance.config):null,n.gear=this.instance.config.face.enabled&&((y=this.instance.config.face.gear)!=null&&y.enabled)&&!this.models.gear?h3(this.instance.config):null,n.ssrnetage=this.instance.config.face.enabled&&((l=this.instance.config.face.ssrnet)!=null&&l.enabled)&&!this.models.ssrnetage?v3(this.instance.config):null,n.ssrnetgender=this.instance.config.face.enabled&&((f=this.instance.config.face.ssrnet)!=null&&f.enabled)&&!this.models.ssrnetgender?k3(this.instance.config):null,n.mobilefacenet=this.instance.config.face.enabled&&((x=this.instance.config.face.mobilefacenet)!=null&&x.enabled)&&!this.models.mobilefacenet?j3(this.instance.config):null,n.insightface=this.instance.config.face.enabled&&((p=this.instance.config.face.insightface)!=null&&p.enabled)&&!this.models.insightface?C3(this.instance.config):null,n.blazepose=this.instance.config.body.enabled&&!this.models.blazepose&&((m=this.instance.config.body.modelPath)!=null&&m.includes("blazepose"))?g1(this.instance.config):null,n.blazeposedetect=this.instance.config.body.enabled&&!this.models.blazeposedetect&&this.instance.config.body.detector&&this.instance.config.body.detector.modelPath?b1(this.instance.config):null,n.efficientpose=this.instance.config.body.enabled&&!this.models.efficientpose&&((h=this.instance.config.body.modelPath)!=null&&h.includes("efficientpose"))?k1(this.instance.config):null,n.movenet=this.instance.config.body.enabled&&!this.models.movenet&&((T=this.instance.config.body.modelPath)!=null&&T.includes("movenet"))?En(this.instance.config):null,n.posenet=this.instance.config.body.enabled&&!this.models.posenet&&((v=this.instance.config.body.modelPath)!=null&&v.includes("posenet"))?Fn(this.instance.config):null,n.handtrack=this.instance.config.hand.enabled&&!this.models.handtrack&&((g=(u=this.instance.config.hand.detector)==null?void 0:u.modelPath)!=null&&g.includes("handtrack"))?un(this.instance.config):null,n.handskeleton=this.instance.config.hand.enabled&&this.instance.config.hand.landmarks&&!this.models.handskeleton&&((k=(E=this.instance.config.hand.detector)==null?void 0:E.modelPath)!=null&&k.includes("handtrack"))?hn(this.instance.config):null,this.instance.config.hand.enabled&&!this.models.handdetect&&((C=(N=this.instance.config.hand.detector)==null?void 0:N.modelPath)!=null&&C.includes("handdetect"))&&(n.handdetect=dn(this.instance.config),n.handskeleton=xn(this.instance.config)),n.centernet=this.instance.config.object.enabled&&!this.models.centernet&&((V=this.instance.config.object.modelPath)!=null&&V.includes("centernet"))?R1(this.instance.config):null,n.nanodet=this.instance.config.object.enabled&&!this.models.nanodet&&((D=this.instance.config.object.modelPath)!=null&&D.includes("nanodet"))?jn(this.instance.config):null,n.selfie=this.instance.config.segmentation.enabled&&!this.models.selfie&&((Z=this.instance.config.segmentation.modelPath)!=null&&Z.includes("selfie"))?B5(this.instance.config):null,n.meet=this.instance.config.segmentation.enabled&&!this.models.meet&&((J=this.instance.config.segmentation.modelPath)!=null&&J.includes("meet"))?M5(this.instance.config):null,n.rvm=this.instance.config.segmentation.enabled&&!this.models.rvm&&((q=this.instance.config.segmentation.modelPath)!=null&&q.includes("rvm"))?F5(this.instance.config):null;for(let[U,m0]of Object.entries(n))m0!=null&&m0.then&&m0.then(P=>this.models[U]=P);await Promise.all(Object.values(n))}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(p0).find(s=>s.startsWith(n.name));o&&(n.size=p0[o].sizeLoadedWeights,n.url=p0[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=ot(this.instance,o,n);s&&t.push(s)}return t}};function Yn(e,t,n,o,s){var i,c,d,y,l,f;let A=0,a=[];for(let x of e){let p={id:A++,face:x,body:null,hands:{left:null,right:null},gestures:[],box:[0,0,0,0]};for(let g of t)x.box[0]>g.box[0]&&x.box[0]g.box[1]&&x.box[1]+x.box[3]p.body.box[0]&&g.box[0]+g.box[2]p.body.box[1]&&g.box[1]+g.box[3]p.body.box[0]&&g.box[1]+g.box[3]>p.body.box[1]&&g.box[1]+g.box[3]{g&&g.length===4&&(m.push(g[0],g[0]+g[2]),h.push(g[1],g[1]+g[3]))};T(p.face.box),T((y=p.body)==null?void 0:y.box),T((l=p.hands.left)==null?void 0:l.box),T((f=p.hands.right)==null?void 0:f.box);let v=Math.min(...m),u=Math.min(...h);p.box=[v,u,Math.max(...m)-v,Math.max(...h)-u],s!=null&&s[1]&&(s!=null&&s[2])&&(p.boxRaw=[p.box[0]/s[2],p.box[1]/s[1],p.box[2]/s[2],p.box[3]/s[1]]),a.push(p)}return a}var rt=` + 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) + // gestures do not have buffering + // person(inCanvas, result.persons, localOptions); // already included above + ]); + 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", + // 0 + "leftEyeInside", + // 1 + "leftEye", + // 2 + "leftEyeOutside", + // 3 + "rightEyeInside", + // 4 + "rightEye", + // 5 + "rightEyeOutside", + // 6 + "leftEar", + // 7 + "rightEar", + // 8 + "leftMouth", + // 9 + "rightMouth", + // 10 + "leftShoulder", + // 11 + "rightShoulder", + // 12 + "leftElbow", + // 13 + "rightElbow", + // 14 + "leftWrist", + // 15 + "rightWrist", + // 16 + "leftPinky", + // 17 + "rightPinky", + // 18 + "leftIndex", + // 19 + "rightIndex", + // 20 + "leftThumb", + // 21 + "rightThumb", + // 22 + "leftHip", + // 23 + "rightHip", + // 24 + "leftKnee", + // 25 + "rightKnee", + // 26 + "leftAnkle", + // 27 + "rightAnkle", + // 28 + "leftHeel", + // 29 + "rightHeel", + // 30 + "leftFoot", + // 31 + "rightFoot", + // 32 + "bodyCenter", + // 33 + "bodyTop", + // 34 + "leftPalm", + // 35 // z-coord not ok + "leftHand", + // 36 // similar to wrist but z-coord not ok + "rightPalm", + // 37 // z-coord not ok + "rightHand" + // 38 // similar to wrist but z-coord not ok +]; +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], + // dont touch batch + height, + // height before&after + width, + // width before&after + [0, 0] + // dont touch rbg + ]; + 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], + // correct offset due to crop + kpt4.positionRaw[1] / width + cropBox[0], + // correct offset due to crop + 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 + /* 1,1 */ + ] = 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: [ + // normalized to 0..1 + // @ts-ignore model is not undefined here + x2 / model4.inputs[0].shape[2], + y2 / model4.inputs[0].shape[1] + ], + position: [ + // normalized to input image size + // @ts-ignore model is not undefined here + 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, anchor) => { + 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 landmarks = box.landmarks.map((pt) => [(pt[0] + anchor[0]) * factor[0], (pt[1] + anchor[1]) * factor[1]]); + return { startPoint, endPoint, 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, + size: size2 + }; +}; +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, + size: [Math.round(size2[0]), Math.round(size2[1])] + }; +}; +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) => [ + // scaled around zero-point + 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 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, _e, _f, _g; + 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.tf1); + 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 + }; + b.anchor = tfjs_esm_exports.slice(anchors, [nms[i], 0], [1, 2]); + const anchor = await b.anchor.data(); + const scaledBox = scaleBoxCoordinates(rawBox, [(inputImage.shape[2] || 0) / inputSize4, (inputImage.shape[1] || 0) / inputSize4], anchor); + const enlargedBox = enlargeBox(scaledBox, ((_e = config3.face.detector) == null ? void 0 : _e.scale) || 1.4); + const squaredBox = squarifyBox(enlargedBox); + if (squaredBox.size[0] > (((_f = config3.face.detector) == null ? void 0 : _f["minSize"]) || 0) && squaredBox.size[1] > (((_g = config3.face.detector) == null ? void 0 : _g["minSize"]) || 0)) 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 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, scale2 = 2.3) => { + const box = squarifyBox(enlargeBox(calculateLandmarksBoundingBox([rawCoords[eyeInnerCornerIndex], rawCoords[eyeOuterCornerIndex]]), scale2)); + 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, config3) { + var _a, _b; + 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, ((_a = config3.face.iris) == null ? void 0 : _a.scale) || 2.3); + const { box: rightEyeBox, boxSize: rightEyeBoxSize, crop: rightEyeCrop } = getEyeBox(rawCoords, face4, eyeLandmarks.rightBounds[0], eyeLandmarks.rightBounds[1], meshSize, true, ((_b = config3.face.iris) == null ? void 0 : _b.scale) || 2.3); + 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 = { + // all attention models produce 2d results so it needs to be later augmented with correct z-coords + // mesh: results[0], // already have it in rawCoords // output_mesh_identity + // flag: results[1], // already processed in parent // conv_faceflag + lips: await ((_b = (_a = results.filter((r) => r.size === 160)) == null ? void 0 : _a[0]) == null ? void 0 : _b.data()), + // 80 x 2d = 160 // output_lips + irisL: await ((_d = (_c = results.filter((r) => r.size === 10)) == null ? void 0 : _c[0]) == null ? void 0 : _d.data()), + // 5 x 2d = 10 // output_right_iris + eyeL: await ((_f = (_e = results.filter((r) => r.size === 142)) == null ? void 0 : _e[0]) == null ? void 0 : _f.data()), + // 71 x 2d = 142 // output_right_eye + irisR: await ((_h = (_g = results.filter((r) => r.size === 10)) == null ? void 0 : _g[1]) == null ? void 0 : _h.data()), + // 5 x 2d = 10 // output_left_iris + eyeR: await ((_j = (_i = results.filter((r) => r.size === 142)) == null ? void 0 : _i[1]) == null ? void 0 : _j.data()) + // 71 x 2d = 142// output_left_eye + }; + 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; + 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 = { + // init face result + id: id++, + mesh: [], + meshRaw: [], + box: [0, 0, 0, 0], + boxRaw: [0, 0, 0, 0], + score: 0, + boxScore: 0, + faceScore: 0, + size: [0, 0], + // contoursRaw: [], + // contours: [], + 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) || !(model7 == null ? void 0 : model7["executor"])) { + face4.box = clampBox(box, input); + face4.boxRaw = getRawBox(box, input); + face4.score = face4.boxScore; + face4.size = box.size; + face4.mesh = box.landmarks; + 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.size = box.size; + face4.score = face4.boxScore; + face4.mesh = box.landmarks; + 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, config3); + } + 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, + size: box.size + }; + face4.box = clampBox(calculatedBox, input); + face4.boxRaw = getRawBox(calculatedBox, input); + face4.size = calculatedBox.size; + 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 = []; +var model8; +var last3 = []; +var lastCount = 0; +var lastTime4 = 0; +var skipped4 = Number.MAX_SAFE_INTEGER; +var rgb = false; +async function load6(config3) { + var _a, _b, _c; + if (env.initial) model8 = null; + if (!model8) { + model8 = await loadModel((_a = config3.face.emotion) == null ? void 0 : _a.modelPath); + rgb = ((_c = (_b = model8 == null ? void 0 : model8.inputs) == null ? void 0 : _b[0].shape) == null ? void 0 : _c[3]) === 3; + if (!rgb) annotations = ["angry", "disgust", "fear", "happy", "sad", "surprise", "neutral"]; + else annotations = ["angry", "disgust", "fear", "happy", "neutral", "sad", "surprise"]; + } 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, _b2, _c; + 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; + if (((_b2 = config3.face.emotion) == null ? void 0 : _b2["crop"]) > 0) { + const crop = (_c = config3.face.emotion) == null ? void 0 : _c["crop"]; + const box = [[crop, crop, 1 - crop, 1 - crop]]; + t2.resize = tfjs_esm_exports.image.cropAndResize(image28, box, [0], [inputSize10, inputSize10]); + } else { + t2.resize = tfjs_esm_exports.image.resizeBilinear(image28, [inputSize10, inputSize10], false); + } + if (rgb) { + t2.mul = tfjs_esm_exports.mul(t2.resize, 255); + t2.normalize = tfjs_esm_exports.sub(t2.mul, [103.939, 116.779, 123.68]); + t2.emotion = model8 == null ? void 0 : model8.execute(t2.normalize); + } else { + 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, config3) { + var _a, _b; + const tensor6 = input.image || input.tensor || input; + if (!(model9 == null ? void 0 : model9.inputs[0].shape)) return tensor6; + let crop; + if (((_a = config3.face.description) == null ? void 0 : _a["crop"]) > 0) { + const cropval = (_b = config3.face.description) == null ? void 0 : _b["crop"]; + const box = [[cropval, cropval, 1 - cropval, 1 - cropval]]; + crop = tfjs_esm_exports.image.cropAndResize(tensor6, box, [0], [model9.inputs[0].shape[2], model9.inputs[0].shape[1]]); + } else { + 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, config3); + 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, _c, _d; + if (!(model12 == null ? void 0 : model12.inputs[0].shape)) return; + const t2 = {}; + let box = [[0, 0.1, 0.9, 0.9]]; + if (((_a2 = config3.face.gear) == null ? void 0 : _a2["crop"]) > 0) { + const crop = (_b2 = config3.face.gear) == null ? void 0 : _b2["crop"]; + box = [[crop, crop, 1 - crop, 1 - crop]]; + } + 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 ((_c = config3.face.gear) == null ? void 0 : _c.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] > (((_d = config3.face.gear) == null ? void 0 : _d.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, _b2, _c2; + if (!(model13 == null ? void 0 : model13.inputs) || !model13.inputs[0] || !model13.inputs[0].shape) return; + const t2 = {}; + if (((_a2 = config3.face["ssrnet"]) == null ? void 0 : _a2["crop"]) > 0) { + const crop = (_b2 = config3.face["ssrnet"]) == null ? void 0 : _b2["crop"]; + const box = [[crop, crop, 1 - crop, 1 - crop]]; + t2.resize = tfjs_esm_exports.image.cropAndResize(image28, box, [0], [model13.inputs[0].shape[2], model13.inputs[0].shape[1]]); + } else { + 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 ((_c2 = config3.face["ssrnet"]) == null ? void 0 : _c2.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 rgb2 = [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, _b2, _c2; + if (!(model14 == null ? void 0 : model14.inputs[0].shape)) return; + const t2 = {}; + if (((_a2 = config3.face["ssrnet"]) == null ? void 0 : _a2["crop"]) > 0) { + const crop = (_b2 = config3.face["ssrnet"]) == null ? void 0 : _b2["crop"]; + const box = [[crop, crop, 1 - crop, 1 - crop]]; + t2.resize = tfjs_esm_exports.image.cropAndResize(image28, box, [0], [model14.inputs[0].shape[2], model14.inputs[0].shape[1]]); + } else { + 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(() => { + var _a3, _b3; + let normalize2; + if (((_b3 = (_a3 = model14 == null ? void 0 : model14.inputs) == null ? void 0 : _a3[0].shape) == null ? void 0 : _b3[3]) === 1) { + const [red, green, blue] = tfjs_esm_exports.split(t2.resize, 3, 3); + const redNorm = tfjs_esm_exports.mul(red, rgb2[0]); + const greenNorm = tfjs_esm_exports.mul(green, rgb2[1]); + const blueNorm = tfjs_esm_exports.mul(blue, rgb2[2]); + const grayscale = tfjs_esm_exports.addN([redNorm, greenNorm, blueNorm]); + normalize2 = tfjs_esm_exports.mul(tfjs_esm_exports.sub(grayscale, constants.tf05), 2); + } else { + normalize2 = tfjs_esm_exports.mul(tfjs_esm_exports.sub(t2.resize, constants.tf05), 2); + } + return normalize2; + }); + const obj = { gender: "unknown", genderScore: 0 }; + if ((_c2 = config3.face["ssrnet"]) == null ? void 0 : _c2.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 = [ + // x distance between extreme point and center point normalized with eye size + (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 == null ? void 0 : f.leftEyeIris) || !(f == null ? void 0 : f.rightEyeIris)) 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], + // just for convenience + nameMapping: { 0: "thumb", 1: "index", 2: "middle", 3: "ring", 4: "pinky" }, + // Describes mapping of joints based on the 21 points returned by handpose. + // [0] Palm + // [1-4] Thumb + // [5-8] Index + // [9-12] Middle + // [13-16] Ring + // [17-20] 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 = { + // curl estimation + HALF_CURL_START_LIMIT: 60, + NO_CURL_START_LIMIT: 130, + // direction estimation + 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 (rightIrisCenterX > 0.04) gestures.push({ iris: i, gesture: "looking right" }); + } else { + if (leftIrisCenterX > 0.04) 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) { + this.skipped++; + } else { + boxes = await this.handDetector.predict(image28, config3); + this.skipped = 0; + } + 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; +function initPipeline() { + const handDetector = handDetectorModel ? new HandDetector(handDetectorModel) : void 0; + if (handDetector && handPoseModel) handPipeline = new HandPipeline(handDetector, handPoseModel); +} +async function predict14(input, config3) { + if (!handPipeline) initPipeline(); + 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 loadDetect2(config3) { + var _a; + if (env.initial) handDetectorModel = null; + if (!handDetectorModel) handDetectorModel = await loadModel((_a = config3.hand.detector) == null ? void 0 : _a.modelPath); + else if (config3.debug) log("cached model:", handDetectorModel["modelUrl"]); + return handDetectorModel; +} +async function loadSkeleton(config3) { + var _a; + if (env.initial) handPoseModel = null; + if (!handPoseModel) handPoseModel = await loadModel((_a = config3.hand.skeleton) == null ? void 0 : _a.modelPath); + else if (config3.debug) log("cached model:", handPoseModel["modelUrl"]); + return 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: [0, 1, 2, 3, 4], + index: [0, 5, 6, 7, 8], + middle: [0, 9, 10, 11, 12], + ring: [0, 13, 14, 15, 16], + pinky: [0, 17, 18, 19, 20], + palm: [0], + */ + 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 loadDetect3(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 loadSkeleton2(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 = { + // initial values inherited from hand detect + 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 = [ + // used to create part labels + "nose", + "leftEye", + "rightEye", + "leftEar", + "rightEar", + "leftShoulder", + "rightShoulder", + "leftElbow", + "rightElbow", + "leftWrist", + "rightWrist", + "leftHip", + "rightHip", + "leftKnee", + "rightKnee", + "leftAnkle", + "rightAnkle" +]; +var horizontal = [ + // used to fix left vs right + ["leftEye", "rightEye"], + ["leftEar", "rightEar"], + ["leftShoulder", "rightShoulder"], + ["leftElbow", "rightElbow"], + ["leftWrist", "rightWrist"], + ["leftHip", "rightHip"], + ["leftKnee", "rightKnee"], + ["leftAnkle", "rightAnkle"] +]; +var vertical = [ + // used to remove unlikely keypoint positions + ["leftKnee", "leftShoulder"], + ["rightKnee", "rightShoulder"], + ["leftAnkle", "leftKnee"], + ["rightAnkle", "rightKnee"] +]; +var relative = [ + // used to match relative body parts + [["leftHip", "rightHip"], ["leftShoulder", "rightShoulder"]], + [["leftElbow", "rightElbow"], ["leftShoulder", "rightShoulder"]] +]; +var connected3 = { + // used to create body outline in annotations + 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, _x, _y, _z; + 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); + let annotations2 = newResult.face[i].annotations; + if (Object.keys(bufferedResult.face[i].annotations).length !== Object.keys(newResult.face[i].annotations).length) { + bufferedResult.face[i].annotations = newResult.face[i].annotations; + annotations2 = bufferedResult.face[i].annotations; + } else if (newResult.face[i].annotations) { + for (const key of Object.keys(newResult.face[i].annotations)) { + annotations2[key] = ((_i = (_h = (_g = newResult.face[i]) == null ? void 0 : _g.annotations) == null ? void 0 : _h[key]) == null ? void 0 : _i[0]) ? newResult.face[i].annotations[key].map((val, j) => val.map((coord, k) => ((bufferedFactor - 1) * bufferedResult.face[i].annotations[key][j][k] + coord) / bufferedFactor)) : null; + } + } + 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 = (_j = newResult.face[i].rotation) == null ? void 0 : _j.matrix; + rotation.angle = { + roll: ((bufferedFactor - 1) * (((_l = (_k = bufferedResult.face[i].rotation) == null ? void 0 : _k.angle) == null ? void 0 : _l.roll) || 0) + (((_n = (_m = newResult.face[i].rotation) == null ? void 0 : _m.angle) == null ? void 0 : _n.roll) || 0)) / bufferedFactor, + yaw: ((bufferedFactor - 1) * (((_p = (_o = bufferedResult.face[i].rotation) == null ? void 0 : _o.angle) == null ? void 0 : _p.yaw) || 0) + (((_r = (_q = newResult.face[i].rotation) == null ? void 0 : _q.angle) == null ? void 0 : _r.yaw) || 0)) / bufferedFactor, + pitch: ((bufferedFactor - 1) * (((_t = (_s = bufferedResult.face[i].rotation) == null ? void 0 : _s.angle) == null ? void 0 : _t.pitch) || 0) + (((_v = (_u = newResult.face[i].rotation) == null ? void 0 : _u.angle) == null ? void 0 : _v.pitch) || 0)) / bufferedFactor + }; + rotation.gaze = { + // not fully correct due projection on circle, also causes wrap-around draw on jump from negative to positive + bearing: ((bufferedFactor - 1) * (((_w = bufferedResult.face[i].rotation) == null ? void 0 : _w.gaze.bearing) || 0) + (((_x = newResult.face[i].rotation) == null ? void 0 : _x.gaze.bearing) || 0)) / bufferedFactor, + strength: ((bufferedFactor - 1) * (((_y = bufferedResult.face[i].rotation) == null ? void 0 : _y.gaze.strength) || 0) + (((_z = newResult.face[i].rotation) == null ? void 0 : _z.gaze.strength) || 0)) / bufferedFactor + }; + bufferedResult.face[i] = { ...newResult.face[i], rotation, box, boxRaw, annotations: annotations2 }; + } else { + bufferedResult.face[i] = { ...newResult.face[i], box, boxRaw, annotations: annotations2 }; + } + } + } + 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 load15(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 load15(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], + // dont touch batch + [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 + [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 + [0, 0] + // dont touch rbg + ]; + 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 load16(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; + if (tfjs_esm_exports.env().flagRegistry.WEBGL_USE_SHAPES_UNIFORMS) tfjs_esm_exports.env().set("WEBGL_USE_SHAPES_UNIFORMS", false); + 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: [ + // normalized to input image size + 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 boxScore = Math.round(100 * kpt4[51 + 4]) / 100; + if (boxScore > 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 boxRaw = [kpt4[51 + 1], kpt4[51 + 0], kpt4[51 + 3] - kpt4[51 + 1], kpt4[51 + 2] - kpt4[51 + 0]]; + const boxNorm = [Math.trunc(boxRaw[0] * (image28.shape[2] || 0)), Math.trunc(boxRaw[1] * (image28.shape[1] || 0)), Math.trunc(boxRaw[2] * (image28.shape[2] || 0)), Math.trunc(boxRaw[3] * (image28.shape[1] || 0))]; + 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: boxScore, box: boxNorm, 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 load17(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 = [ + // results normalized to input image pixels + boxRaw[0] * outputShape[0], + boxRaw[1] * outputShape[1], + boxRaw[2] * outputShape[0], + boxRaw[3] * outputShape[1] + ]; + const result = { + id: id++, + // strideSize, + score: Math.round(100 * score) / 100, + class: j + 1, + label: labels2[j].label, + // center: [Math.trunc(outputShape[0] * cx), Math.trunc(outputShape[1] * cy)], + // centerRaw: [cx, cy], + 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 { + // function call + constructor(maxSize2, getElementValue) { + __publicField(this, "priorityQueue"); + // don't touch + __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" + /* displacementBwd */ +]; +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 load18(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 load19(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 rgb3 = 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([rgb3, a], -1); + tfjs_esm_exports.dispose([rgb3, 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 load19(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 load20(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 load20(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")) ? load16(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")) ? load18(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")) ? loadDetect3(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")) ? loadSkeleton2(this.instance.config) : null; + if (this.instance.config.hand.enabled && !this.models.handdetect && ((_v = (_u = this.instance.config.hand.detector) == null ? void 0 : _u.modelPath) == null ? void 0 : _v.includes("handdetect"))) { + m.handdetect = loadDetect2(this.instance.config); + m.handskeleton = loadSkeleton(this.instance.config); + } + 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")) ? load17(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")) ? load20(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")) ? load15(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")) ? load19(this.instance.config) : null; + for (const [model23, promise] of Object.entries(m)) { + if (promise == null ? void 0 : promise["then"]) promise["then"]((val) => this.models[model23] = val); + } + await Promise.all(Object.values(m)); + } + 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 +13896,8 @@ PQ4GJ+ashuK0MhWaoWcA0AaOmASMK7jRNPWYBmHyiuepO2x10qfcv6vYxCzYqoGK4HVYVTJrmb5l c6oaM5TUJ8EgGsG4kLNUHT0M64OaqMMikSRsuKbnFMRLG3zVehOaGNE445NNlnVFpDMu6uie9Vo1 8z5mOAOST2pDK91cNN+5tsrH3PrW54a06KxT7fdrlh/q1Pc+tJ6IUdZGvHPLezMcnBOWbsPap5r3 ylFtbdT1xUWNWzU0/Zbwlgfmx8zGsHWtRHmMqE59aAMyNifvHPc1f0gtPdqkY5JosJHeNci2tktY -euPnNY+oXWZEVJNrZ9aun8SIq/CzodHuriIokhDIR1ronbKZr0o6o8ipoz//2Q==`,st=` +euPnNY+oXWZEVJNrZ9aun8SIq/CzodHuriIokhDIR1ronbKZr0o6o8ipoz//2Q==`; +var body3 = ` /9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAsICAoIBwsKCQoNDAsNERwSEQ8PESIZGhQcKSQrKigk JyctMkA3LTA9MCcnOEw5PUNFSElIKzZPVU5GVEBHSEX/2wBDAQwNDREPESESEiFFLicuRUVFRUVF RUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUX/wAARCASwBLADASIA @@ -837,4 +14465,606 @@ AAAAAAJAAAAAAAAAAAAAABAJEAAAAAAAAAAAAAAAIEoBKAAAAAAAAAAAAAAABAlAAAAAAAIAAAAA BAkBAkBAkBAlACEgMZjdjbFW8bWrEx8YWANb6Fp+bfwab+vLDKMFK9qxH5L0bAr8OPRPKz2AY7J2 SbAjYZAI2E7AIEgIEgIEgMdkSy2NgY7MdlmyNoBXsxmFuyNgVTVjNV3KjlBRNTlXTVHKCrlIqt5T lBhEMohlFerLlBjEMohMVTEARDKCITsAk2AEgAAAkAAAAAAAAAAAAAAAAAAAAAAAASAAAAAAAAD/ -2Q==`;async function mA(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(rt);break;case"body":case"full":n=await t(st);break;default:n=null}if(n){let s=await createImageBitmap(n);o=await e.detect(s,e.config),s.close()}return o}async function pA(e){return new Promise(t=>{let n;switch(e.config.warmup){case"face":n="data:image/jpeg;base64,"+rt;break;case"full":case"body":n="data:image/jpeg;base64,"+st;break;default:n=""}let o;if(typeof Image!="undefined")o=new Image;else if(M.Image)o=new M.Image;else{t(void 0);return}o.onload=async()=>{let s=D0(o.naturalWidth,o.naturalHeight);if(!s)b("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 uA(e){let t=s=>Buffer.from(s,"base64"),n;e.config.warmup==="face"?n=t(rt):n=t(st);let o;if("node"in r&&r.getBackend()==="tensorflow"){let s=it.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&&b("Warmup tfjs-node not loaded");return o}async function hA(e){let t;return typeof createImageBitmap=="function"?t=await mA(e):typeof Image!="undefined"||M.Canvas!==void 0?t=await pA(e):t=await uA(e),t}async function bA(e){var i,c,d,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.models)){if(!f)continue;let x=f!=null&&f.modelSignature&&((c=(i=f==null?void 0:f.inputs)==null?void 0:i[0])!=null&&c.shape)?[...f.inputs[0].shape]:[1,64,64,3],p=f!=null&&f.modelSignature&&((y=(d=f==null?void 0:f.inputs)==null?void 0:d[0])!=null&&y.dtype)?f.inputs[0].dtype:"float32";for(let h=0;hr.dispose(T)):r.dispose(h)}catch(h){e.config.debug&&b("compile fail model:",l)}r.dispose(m)}let A=await n.checkCompileCompletionAsync();n.getUniformLocations(),e.config.debug&&b("compile pass:",{models:s,kernels:A.length}),r.env().set("ENGINE_COMPILE_ONLY",!1);let a=r.engine().state.numTensors;a-o>0&&b("tensor leak:",a-o)}async function Kn(e,t){await e2(e,!1);let n=R();return e.state="warmup",t&&(e.config=Q(e.config,t)),!e.config.warmup||e.config.warmup.length===0||e.config.warmup==="none"?te():new Promise(async o=>{await e.models.load(),await bA(e);let s=await hA(e),A=R();e.config.debug&&b("warmup",e.config.warmup,Math.round(A-n),"ms"),e.emit("warmup"),o(s)})}var Ye,l2,c2,At,be,Jn=class{constructor(t){z(this,"version");z(this,"config");z(this,"result");z(this,"state");z(this,"process");z(this,"tf");z(this,"env",M);z(this,"draw",vt);z(this,"match",k5);z(this,"models");z(this,"events");z(this,"faceTriangulation");z(this,"faceUVMap");z(this,"performance");q0(this,Ye,void 0);q0(this,l2,void 0);q0(this,c2,void 0);z(this,"analyze",(...t)=>{if(!E0(this,l2))return;let n=this.tf.engine().state.numTensors,o=E0(this,Ye);Q0(this,Ye,n);let s=n-o;s!==0&&b(...t,s)});q0(this,At,t=>{if(!E0(this,c2))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});z(this,"webcam",new u2);z(this,"emit",t=>{var n;(n=this.events)!=null&&n.dispatchEvent&&this.events.dispatchEvent(new Event(t))});q0(this,be,{});let n=(Je.tfjs||r.version_core).replace(/-(.*)/,"");Ce.wasmPath=`https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@${n}/dist/`,Ce.modelBasePath=M.browser?"../models/":"file://models/",this.version=ft,Object.defineProperty(this,"version",{value:ft}),this.config=JSON.parse(JSON.stringify(Ce)),Object.seal(this.config),this.config.cacheModels=typeof indexedDB!="undefined",t&&(this.config=Q(this.config,t)),r1(this.config),this.tf=r,this.state="idle",Q0(this,Ye,0),Q0(this,l2,!1),Q0(this,c2,!1),this.performance={},this.events=typeof EventTarget!="undefined"?new EventTarget:void 0,this.models=new i2(this),Tt(),this.result=te(),this.process={tensor:null,canvas:null},this.faceTriangulation=Q1,this.faceUVMap=_1,ot(this,null,""),this.emit("create"),(this.config.debug||this.env.browser)&&b(`version: ${this.version}`),this.config.debug&&b(`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&&b("environment:",o)}reset(){let t=this.config.backend;this.config=JSON.parse(JSON.stringify(Ce)),this.config.backend=t,xt(),M.initial=!0}validate(t){let n=lt(Ce,t||this.config);return n.length===0&&(this.config=Q(this.config,t)),n}now(){return R()}image(t,n=!1){return f2(t,this.config,n)}async segmentation(t,n){var A,a,i;if(n&&(this.config=Q(this.config,n)),!this.config.segmentation.enabled)return null;let o=await f2(t,this.config);if(!o.tensor)return null;let s=null;return(A=this.config.segmentation.modelPath)!=null&&A.includes("rvm")&&(s=await Vn(o.tensor,this.config)),(a=this.config.segmentation.modelPath)!=null&&a.includes("meet")&&(s=await Tn(o.tensor,this.config)),(i=this.config.segmentation.modelPath)!=null&&i.includes("selfie")&&(s=await Xn(o.tensor,this.config)),r.dispose(o.tensor),s}compare(t,n){return o1(this.config,t,n)}async init(){await e2(this,!0),await this.tf.ready(),xt()}async load(t){this.state="load";let n=R(),o=Object.values(this.models.models).filter(a=>a).length;t&&(this.config=Q(this.config,t)),this.env.initial&&(await e2(this,!1)||b("error: backend check failed"),await r.ready(),this.env.browser&&(this.config.debug&&b("configuration:",this.config),this.config.debug&&b("tf flags:",this.tf.ENV.flags))),await this.models.load(this),this.env.initial&&this.config.debug&&b("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(a=>a).length!==o&&(this.models.validate(),this.emit("load"));let A=Math.trunc(R()-n);A>(this.performance.loadModels||0)&&(this.performance.loadModels=this.env.perfadd?(this.performance.loadModels||0)+A:A)}next(t=this.result){return gn(t,this.config)}async warmup(t){let n=R(),o=await Kn(this,t),s=R();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 h,T,v,u,g,E,k,N,C,V,D,Z,J,q,U,m0,P,i0,g0,e0,G;this.state="config";let s;this.config=Q(this.config,n),this.state="check";let A=E0(this,At).call(this,t);A&&(b(A,t),this.emit("error"),o(te(A)));let a=R();await this.load(),s=R(),this.state="image";let i=await f2(t,this.config);if(this.process=i,this.performance.inputProcess=this.env.perfadd?(this.performance.inputProcess||0)+Math.trunc(R()-s):Math.trunc(R()-s),this.analyze("Get Image:"),!i.tensor){this.config.debug&&b("could not convert input to tensor"),this.emit("error"),o(te("could not convert input to tensor"));return}this.emit("image"),s=R(),this.config.skipAllowed=await n1(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(R()-s):Math.trunc(R()-s),this.analyze("Check Changed:");let c=[],d=[],y=[],l=[];this.state="detect:face",this.config.async?(c=this.config.face.enabled?c5(this,i.tensor):[],this.performance.face&&delete this.performance.face):(s=R(),c=this.config.face.enabled?await c5(this,i.tensor):[],this.performance.face=this.env.perfadd?(this.performance.face||0)+Math.trunc(R()-s):Math.trunc(R()-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?Q(this.config,{body:{maxDetected:this.config.face.enabled?1*c.length:1}}):this.config;this.config.async?((h=this.config.body.modelPath)!=null&&h.includes("posenet")?d=this.config.body.enabled?C5(i.tensor,f):[]:(T=this.config.body.modelPath)!=null&&T.includes("blazepose")?d=this.config.body.enabled?wt(i.tensor,f):[]:(v=this.config.body.modelPath)!=null&&v.includes("efficientpose")?d=this.config.body.enabled?Lt(i.tensor,f):[]:(u=this.config.body.modelPath)!=null&&u.includes("movenet")&&(d=this.config.body.enabled?z5(i.tensor,f):[]),this.performance.body&&delete this.performance.body):(s=R(),(g=this.config.body.modelPath)!=null&&g.includes("posenet")?d=this.config.body.enabled?await C5(i.tensor,f):[]:(E=this.config.body.modelPath)!=null&&E.includes("blazepose")?d=this.config.body.enabled?await wt(i.tensor,f):[]:(k=this.config.body.modelPath)!=null&&k.includes("efficientpose")?d=this.config.body.enabled?await Lt(i.tensor,f):[]:(N=this.config.body.modelPath)!=null&&N.includes("movenet")&&(d=this.config.body.enabled?await z5(i.tensor,f):[]),this.performance.body=this.env.perfadd?(this.performance.body||0)+Math.trunc(R()-s):Math.trunc(R()-s)),this.analyze("End Body:"),this.analyze("Start Hand:"),this.state="detect:hand";let x=this.config.hand.maxDetected===-1?Q(this.config,{hand:{maxDetected:this.config.face.enabled?2*c.length:1}}):this.config;this.config.async?((V=(C=this.config.hand.detector)==null?void 0:C.modelPath)!=null&&V.includes("handdetect")?y=this.config.hand.enabled?p5(i.tensor,x):[]:(Z=(D=this.config.hand.detector)==null?void 0:D.modelPath)!=null&&Z.includes("handtrack")&&(y=this.config.hand.enabled?b5(i.tensor,x):[]),this.performance.hand&&delete this.performance.hand):(s=R(),(q=(J=this.config.hand.detector)==null?void 0:J.modelPath)!=null&&q.includes("handdetect")?y=this.config.hand.enabled?await p5(i.tensor,x):[]:(m0=(U=this.config.hand.detector)==null?void 0:U.modelPath)!=null&&m0.includes("handtrack")&&(y=this.config.hand.enabled?await b5(i.tensor,x):[]),this.performance.hand=this.env.perfadd?(this.performance.hand||0)+Math.trunc(R()-s):Math.trunc(R()-s)),this.analyze("End Hand:"),this.analyze("Start Object:"),this.state="detect:object",this.config.async?((P=this.config.object.modelPath)!=null&&P.includes("nanodet")?l=this.config.object.enabled?j5(i.tensor,this.config):[]:(i0=this.config.object.modelPath)!=null&&i0.includes("centernet")&&(l=this.config.object.enabled?St(i.tensor,this.config):[]),this.performance.object&&delete this.performance.object):(s=R(),(g0=this.config.object.modelPath)!=null&&g0.includes("nanodet")?l=this.config.object.enabled?await j5(i.tensor,this.config):[]:(e0=this.config.object.modelPath)!=null&&e0.includes("centernet")&&(l=this.config.object.enabled?await St(i.tensor,this.config):[]),this.performance.object=this.env.perfadd?(this.performance.object||0)+Math.trunc(R()-s):Math.trunc(R()-s)),this.analyze("End Object:"),this.state="detect:await",this.config.async&&([c,d,y,l]=await Promise.all([c,d,y,l])),this.state="detect:gesture";let p=[];this.config.gesture.enabled&&(s=R(),p=[...K3(c),...Y3(d),...Q3(y),...J3(c)],this.config.async?this.performance.gesture&&delete this.performance.gesture:this.performance.gesture=this.env.perfadd?(this.performance.gesture||0)+Math.trunc(R()-s):Math.trunc(R()-s)),this.performance.total=this.env.perfadd?(this.performance.total||0)+Math.trunc(R()-a):Math.trunc(R()-a);let m=((G=this.process.tensor)==null?void 0:G.shape)||[0,0,0,0];this.result={face:c,body:d,hand:y,gesture:p,object:l,performance:this.performance,canvas:this.process.canvas,timestamp:Date.now(),error:null,width:m[2],height:m[1],get persons(){return Yn(c,d,y,p,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?(E0(this,be)[t.id]||(this.config.debug&&b("video start",t.id),E0(this,be)[t.id]=!0),!t.paused&&E0(this,be)[t.id]&&t.readyState>=2&&await this.detect(t),o>0&&await this.sleep(o),E0(this,be)[t.id]&&requestAnimationFrame(()=>this.video(t,n,o))):(this.config.debug&&b("video stop",t.id),E0(this,be)[t.id]=!1)}};Ye=new WeakMap,l2=new WeakMap,c2=new WeakMap,At=new WeakMap,be=new WeakMap;export{p2 as Env,Jn as Human,Jn as default,Ce as defaults,vt as draw,te as empty,M as env,k5 as match,Un 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 { + resolve(void 0); + 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 = 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.models)) { + if (!model23) continue; + 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 { + // definition end + /** Constructor for **Human** library that is futher used for all operations + * @param userConfig - user configuration object {@link Config} + */ + constructor(userConfig) { + /** Current version of Human library in *semver* format */ + __publicField(this, "version"); + /** Current configuration + * - Defaults: [config](https://github.com/vladmandic/human/blob/main/src/config.ts#L262) + */ + __publicField(this, "config"); + /** Last known result of detect run + * - Can be accessed anytime after initial detection + */ + __publicField(this, "result"); + /** Current state of Human library + * - Can be polled to determine operations that are currently executed + * - Progresses through: 'config', 'check', 'backend', 'load', 'run:', 'idle' + */ + __publicField(this, "state"); + /** currenty processed image tensor and canvas */ + __publicField(this, "process"); + /** Instance of TensorFlow/JS used by Human + * - Can be embedded or externally provided + * [TFJS API](https://js.tensorflow.org/api/latest/) + */ + __publicField(this, "tf"); + /** Object containing environment information used for diagnostics */ + __publicField(this, "env", env); + /** Draw helper classes that can draw detected objects on canvas using specified draw + * - canvas: draws input to canvas + * - options: are global settings for all draw operations, can be overriden for each draw method {@link DrawOptions} + * - face, body, hand, gesture, object, person: draws detected results as overlays on canvas + */ + // 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 }; + __publicField(this, "draw", draw_exports); + /** Face Matching + * - similarity: compare two face descriptors and return similarity index + * - distance: compare two face descriptors and return raw calculated differences + * - find: compare face descriptor to array of face descriptors and return best match + */ + __publicField(this, "match", match_exports); + /** Currently loaded models + * @internal + * {@link models#Models} + */ + __publicField(this, "models"); + /** Container for events dispatched by Human + * Possible events: + * - `create`: triggered when Human object is instantiated + * - `load`: triggered when models are loaded (explicitly or on-demand) + * - `image`: triggered when input image is processed + * - `result`: triggered when detection is complete + * - `warmup`: triggered when warmup is complete + * - `error`: triggered on some errors + */ + __publicField(this, "events"); + /** Reference face triangualtion array of 468 points, used for triangle references between points */ + __publicField(this, "faceTriangulation"); + /** Refernce UV map of 468 values, used for 3D mapping of the face mesh */ + __publicField(this, "faceUVMap"); + /** Performance object that contains values for all recently performed operations */ + __publicField(this, "performance"); + // perf members are dynamically defined as needed + __privateAdd(this, _numTensors); + __privateAdd(this, _analyzeMemoryLeaks); + __privateAdd(this, _checkSanity); + /** internal function to measure tensor leaks */ + __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); + }); + /** internal function for quick sanity check on inputs @hidden */ + __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; + }); + /** WebCam helper methods + * + */ + __publicField(this, "webcam", new WebCam()); + /** emit event */ + __publicField(this, "emit", (event) => { + var _a; + if ((_a = this.events) == null ? void 0 : _a.dispatchEvent) this.events.dispatchEvent(new Event(event)); + }); + /** internal structure that keeps track of processed videos @hidden */ + __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 configuration to default values */ + reset() { + const currentBackend = this.config.backend; + this.config = JSON.parse(JSON.stringify(config)); + this.config.backend = currentBackend; + reset(); + env.initial = true; + } + /** Validate current configuration schema */ + validate(userConfig) { + const msgs = validate(config, userConfig || this.config); + if (msgs.length === 0) this.config = mergeDeep(this.config, userConfig); + return msgs; + } + /** Utility wrapper for performance.now() */ + now() { + return now(); + } + /** Process input as return canvas and tensor + * + * @param input - any input {@link Input} + * @param getTensor - should image processing also return tensor or just canvas + * Returns object with `tensor` and `canvas` + */ + image(input, getTensor = false) { + return process2(input, this.config, getTensor); + } + /** Segmentation method takes any input and returns RGBA tensor + * Note: Segmentation is not triggered as part of detect process + * + * @param input - {@link Input} + * Returns tensor which contains image data in RGBA format + */ + 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 two input tensors for pixel similarity + * - use `human.image` to process any valid input and get a tensor that can be used for compare + * - when passing manually generated tensors: + * - both input tensors must be in format [1, height, width, 3] + * - if resolution of tensors does not match, second tensor will be resized to match resolution of the first tensor + * - return value is pixel similarity score normalized by input resolution and rgb channels + */ + compare(firstImageTensor, secondImageTensor) { + return compare(this.config, firstImageTensor, secondImageTensor); + } + /** Explicit backend initialization + * - Normally done implicitly during initial load phase + * - Call to explictly register and initialize TFJS backend without any other operations + * - Use when changing backend during runtime + */ + async init() { + await check(this, true); + await this.tf.ready(); + reset(); + } + /** Load method preloads all configured models on-demand + * - Not explicitly required as any required model is load implicitly on it's first run + * + * @param userConfig - {@link Config} + */ + 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; + } + /** Runs interpolation using last known result and returns smoothened result + * Interpolation is based on time since last known result so can be called independently + * + * @param result - {@link Result} optional use specific result set to run interpolation on + * @returns result - {@link Result} + */ + next(result = this.result) { + return calc2(result, this.config); + } + /** Warmup method pre-initializes all configured models for faster inference + * - can take significant time on startup + * - only used for `webgl` and `humangl` backends + * @param userConfig - {@link Config} + * @returns result - {@link Result} + */ + async warmup(userConfig) { + const t0 = now(); + const res = await warmup(this, userConfig); + const t1 = now(); + this.performance.warmup = Math.trunc(t1 - t0); + return res; + } + /** Run detect with tensorflow profiling + * - result object will contain total exeuction time information for top-20 kernels + * - actual detection object can be accessed via `human.result` + */ + 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; + } + /** Main detection method + * - Analyze configuration: {@link Config} + * - Pre-process input: {@link Input} + * - Run inference for all configured models + * - Process and return result: {@link Result} + * + * @param input - {@link Input} + * @param userConfig - {@link Config} + * @returns result - {@link Result} + */ + 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); + }); + } + /** Helper function + * @param ms - sleep time in miliseconds + */ + async sleep(ms) { + return new Promise((resolve) => { + setTimeout(resolve, ms); + }); + } + /** Continously detect video frames + * @param element - HTMLVideoElement input + * @param run - boolean run continously or stop if already running, default true + * @param delay - number delay detection between frames for number of miliseconds, default 0 + */ + 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 168202ca..3b70795d 100644 --- a/dist/human.esm.js +++ b/dist/human.esm.js @@ -5,33 +5,19 @@ */ var __defProp = Object.defineProperty; +var __typeError = (msg) => { + throw TypeError(msg); +}; 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 __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; -}; +var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value); +var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg); +var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj)); +var __privateAdd = (obj, member, value) => member.has(obj) ? __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), value); // dist/tfjs.esm.js var tfjs_esm_exports = {}; @@ -397,7 +383,7 @@ __export(tfjs_esm_exports, { multinomial: () => U2, neg: () => pr, nextFrame: () => cS, - node: () => E7t, + node: () => EQt, norm: () => Vu, notEqual: () => Fd, oneHot: () => El, @@ -542,17 +528,15 @@ var RG = Object.getPrototypeOf; var DG = Object.prototype.hasOwnProperty; var Kt = (r15, e) => () => (e || r15((e = { exports: {} }).exports, e), e.exports); var qe = (r15, e) => { - for (var t10 in e) - QC(r15, t10, { get: e[t10], enumerable: true }); + for (var t10 in e) QC(r15, t10, { get: e[t10], enumerable: true }); }; var AG = (r15, e, t10, o) => { - if (e && typeof e == "object" || typeof e == "function") - for (let n of $G(e)) - !DG.call(r15, n) && n !== t10 && QC(r15, n, { get: () => e[n], enumerable: !(o = EG(e, n)) || o.enumerable }); + if (e && typeof e == "object" || typeof e == "function") for (let n of $G(e)) !DG.call(r15, n) && n !== t10 && QC(r15, n, { get: () => e[n], enumerable: !(o = EG(e, n)) || o.enumerable }); return r15; }; var zp = (r15, e, t10) => (t10 = r15 != null ? _G(RG(r15)) : {}, AG(e || !r15 || !r15.__esModule ? QC(t10, "default", { value: r15, enumerable: true }) : t10, r15)); var U0 = Kt((ple, W0) => { + "use strict"; W0.exports = kt; var ko = null; try { @@ -575,18 +559,13 @@ var U0 = Kt((ple, W0) => { } kt.fromInt = Fu; function No(r15, e) { - if (isNaN(r15)) - return e ? Au : To; + if (isNaN(r15)) return e ? Au : To; if (e) { - if (r15 < 0) - return Au; - if (r15 >= L0) - return V0; + if (r15 < 0) return Au; + if (r15 >= L0) return V0; } else { - if (r15 <= -O0) - return Vr; - if (r15 + 1 >= O0) - return z0; + if (r15 <= -O0) return Vr; + if (r15 + 1 >= O0) return z0; } return r15 < 0 ? No(-r15, e).neg() : Nt(r15 % Qp | 0, r15 / Qp | 0, e); } @@ -597,24 +576,18 @@ var U0 = Kt((ple, W0) => { kt.fromBits = Nt; var Zm = Math.pow; function cw(r15, e, t10) { - if (r15.length === 0) - throw Error("empty string"); - if (r15 === "NaN" || r15 === "Infinity" || r15 === "+Infinity" || r15 === "-Infinity") - return To; - if (typeof e == "number" ? (t10 = e, e = false) : e = !!e, t10 = t10 || 10, t10 < 2 || 36 < t10) - throw RangeError("radix"); + if (r15.length === 0) throw Error("empty string"); + if (r15 === "NaN" || r15 === "Infinity" || r15 === "+Infinity" || r15 === "-Infinity") return To; + if (typeof e == "number" ? (t10 = e, e = false) : e = !!e, t10 = t10 || 10, t10 < 2 || 36 < t10) throw RangeError("radix"); var o; - if ((o = r15.indexOf("-")) > 0) - throw Error("interior hyphen"); - if (o === 0) - return cw(r15.substring(1), e, t10).neg(); + if ((o = r15.indexOf("-")) > 0) throw Error("interior hyphen"); + if (o === 0) return cw(r15.substring(1), e, t10).neg(); for (var n = No(Zm(t10, 8)), s = To, a = 0; a < r15.length; a += 8) { var i = Math.min(8, r15.length - a), p = parseInt(r15.substring(a, a + i), t10); if (i < 8) { var u = No(Zm(t10, i)); s = s.mul(u).add(No(p)); - } else - s = s.mul(n), s = s.add(No(p)); + } else s = s.mul(n), s = s.add(No(p)); } return s.unsigned = e, s; } @@ -647,22 +620,16 @@ var U0 = Kt((ple, W0) => { return this.unsigned ? (this.high >>> 0) * Qp + (this.low >>> 0) : this.high * Qp + (this.low >>> 0); }; de.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(Vr)) { - var t10 = No(e), o = this.div(t10), n = o.mul(t10).sub(this); - return o.toString(e) + n.toInt().toString(e); - } else - return "-" + this.neg().toString(e); + if (e = e || 10, e < 2 || 36 < e) throw RangeError("radix"); + if (this.isZero()) return "0"; + if (this.isNegative()) if (this.eq(Vr)) { + var t10 = No(e), o = this.div(t10), n = o.mul(t10).sub(this); + return o.toString(e) + n.toInt().toString(e); + } else return "-" + this.neg().toString(e); for (var s = No(Zm(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; - for (; c.length < 6; ) - c = "0" + c; + if (a = p, a.isZero()) return c + i; + for (; c.length < 6; ) c = "0" + c; i = "" + c + i; } }; @@ -679,10 +646,8 @@ var U0 = Kt((ple, W0) => { return this.low >>> 0; }; de.getNumBitsAbs = function() { - if (this.isNegative()) - return this.eq(Vr) ? 64 : this.neg().getNumBitsAbs(); - for (var e = this.high != 0 ? this.high : this.low, t10 = 31; t10 > 0 && !(e & 1 << t10); t10--) - ; + if (this.isNegative()) return this.eq(Vr) ? 64 : this.neg().getNumBitsAbs(); + for (var e = this.high != 0 ? this.high : this.low, t10 = 31; t10 > 0 && !(e & 1 << t10); t10--) ; return this.high != 0 ? t10 + 33 : t10 + 1; }; de.isZero = function() { @@ -729,8 +694,7 @@ var U0 = Kt((ple, W0) => { de.gte = de.greaterThanOrEqual; de.ge = de.greaterThanOrEqual; de.compare = function(e) { - if (Wr(e) || (e = As(e)), this.eq(e)) - return 0; + if (Wr(e) || (e = As(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; }; @@ -749,66 +713,48 @@ var U0 = Kt((ple, W0) => { }; de.sub = de.subtract; de.multiply = function(e) { - if (this.isZero()) - return To; + if (this.isZero()) return To; if (Wr(e) || (e = As(e)), ko) { var t10 = ko.mul(this.low, this.high, e.low, e.high); return Nt(t10, ko.get_high(), this.unsigned); } - if (e.isZero()) - return To; - if (this.eq(Vr)) - return e.isOdd() ? Vr : To; - if (e.eq(Vr)) - return this.isOdd() ? Vr : To; - 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(M0) && e.lt(M0)) - return No(this.toNumber() * e.toNumber(), this.unsigned); + if (e.isZero()) return To; + if (this.eq(Vr)) return e.isOdd() ? Vr : To; + if (e.eq(Vr)) return this.isOdd() ? Vr : To; + 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(M0) && e.lt(M0)) return No(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, Nt(d << 16 | f, l << 16 | m, this.unsigned); }; de.mul = de.multiply; de.divide = function(e) { - if (Wr(e) || (e = As(e)), e.isZero()) - throw Error("division by zero"); + if (Wr(e) || (e = As(e)), e.isZero()) throw Error("division by zero"); if (ko) { - if (!this.unsigned && this.high === -2147483648 && e.low === -1 && e.high === -1) - return this; + if (!this.unsigned && this.high === -2147483648 && e.low === -1 && e.high === -1) return this; var t10 = (this.unsigned ? ko.div_u : ko.div_s)(this.low, this.high, e.low, e.high); return Nt(t10, ko.get_high(), this.unsigned); } - if (this.isZero()) - return this.unsigned ? Au : To; + if (this.isZero()) return this.unsigned ? Au : To; var o, n, s; if (this.unsigned) { - if (e.unsigned || (e = e.toUnsigned()), e.gt(this)) - return Au; - if (e.gt(this.shru(1))) - return B0; + if (e.unsigned || (e = e.toUnsigned()), e.gt(this)) return Au; + if (e.gt(this.shru(1))) return B0; s = Au; } else { if (this.eq(Vr)) { - if (e.eq(Yp) || e.eq(pw)) - return Vr; - if (e.eq(Vr)) - return Yp; + if (e.eq(Yp) || e.eq(pw)) return Vr; + if (e.eq(Vr)) return Yp; var a = this.shr(1); return o = a.div(e).shl(1), o.eq(To) ? e.isNegative() ? Yp : pw : (n = this.sub(e.mul(o)), s = o.add(n.div(e)), s); - } else if (e.eq(Vr)) - return this.unsigned ? Au : To; - 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(); + } else if (e.eq(Vr)) return this.unsigned ? Au : To; + 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 = To; } 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 : Zm(2, i - 48), u = No(o), c = u.mul(e); c.isNegative() || c.gt(n); ) - o -= p, u = No(o, this.unsigned), c = u.mul(e); + for (var i = Math.ceil(Math.log(o) / Math.LN2), p = i <= 48 ? 1 : Zm(2, i - 48), u = No(o), c = u.mul(e); c.isNegative() || c.gt(n); ) o -= p, u = No(o, this.unsigned), c = u.mul(e); u.isZero() && (u = Yp), s = s.add(u), n = n.sub(c); } return s; @@ -844,14 +790,12 @@ var U0 = Kt((ple, W0) => { }; de.shr = de.shiftRight; de.shiftRightUnsigned = function(e) { - if (Wr(e) && (e = e.toInt()), e &= 63, e === 0) - return this; + if (Wr(e) && (e = e.toInt()), e &= 63, e === 0) return this; var t10 = this.high; if (e < 32) { var o = this.low; return Nt(o >>> e | t10 << 32 - e, t10 >>> e, this.unsigned); - } else - return e === 32 ? Nt(t10, 0, this.unsigned) : Nt(t10 >>> e - 32, 0, this.unsigned); + } else return e === 32 ? Nt(t10, 0, this.unsigned) : Nt(t10 >>> e - 32, 0, this.unsigned); }; de.shru = de.shiftRightUnsigned; de.shr_u = de.shiftRightUnsigned; @@ -883,10 +827,13 @@ var U0 = Kt((ple, W0) => { }; }); var Ek = Kt(() => { + "use strict"; }); var $k = Kt(() => { + "use strict"; }); var o1 = Kt((r1, Ww) => { + "use strict"; (function(r15, e, t10) { function o(i) { var p = this, u = a(); @@ -926,6 +873,7 @@ var o1 = Kt((r1, Ww) => { })(r1, typeof Ww == "object" && Ww, typeof define == "function" && define); }); var s1 = Kt((n1, Uw) => { + "use strict"; (function(r15, e, t10) { function o(a) { var i = this, p = ""; @@ -933,8 +881,7 @@ var s1 = Kt((n1, Uw) => { 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 < p.length + 64; u++) - i.x ^= p.charCodeAt(u) | 0, i.next(); + for (var u = 0; u < p.length + 64; u++) i.x ^= p.charCodeAt(u) | 0, i.next(); } function n(a, i) { return i.x = a.x, i.y = a.y, i.z = a.z, i.w = a.w, i; @@ -958,6 +905,7 @@ var s1 = Kt((n1, Uw) => { })(n1, typeof Uw == "object" && Uw, typeof define == "function" && define); }); var i1 = Kt((a1, Gw) => { + "use strict"; (function(r15, e, t10) { function o(a) { var i = this, p = ""; @@ -965,8 +913,7 @@ var i1 = Kt((a1, Gw) => { 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 < p.length + 64; u++) - i.x ^= p.charCodeAt(u) | 0, u == p.length && (i.d = i.x << 10 ^ i.x >>> 4), i.next(); + for (var u = 0; u < p.length + 64; u++) i.x ^= p.charCodeAt(u) | 0, u == p.length && (i.d = i.x << 10 ^ i.x >>> 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; @@ -990,6 +937,7 @@ var i1 = Kt((a1, Gw) => { })(a1, typeof Gw == "object" && Gw, typeof define == "function" && define); }); var p1 = Kt((u1, Hw) => { + "use strict"; (function(r15, e, t10) { function o(a) { var i = this; @@ -999,17 +947,11 @@ var p1 = Kt((u1, Hw) => { }; function p(u, c) { var l, m, d = []; - if (c === (c | 0)) - m = d[0] = c; - else - for (c = "" + c, l = 0; l < c.length; ++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 = d[7] = -1 : m = d[l], u.x = d, u.i = 0, l = 256; l > 0; --l) - u.next(); + if (c === (c | 0)) m = d[0] = c; + else for (c = "" + c, l = 0; l < c.length; ++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 = d[7] = -1 : m = d[l], u.x = d, u.i = 0, l = 256; l > 0; --l) u.next(); } p(i, a); } @@ -1036,6 +978,7 @@ var p1 = Kt((u1, Hw) => { })(u1, typeof Hw == "object" && Hw, typeof define == "function" && define); }); var l1 = Kt((c1, Kw) => { + "use strict"; (function(r15, e, t10) { function o(a) { var i = this; @@ -1045,10 +988,8 @@ var l1 = Kt((c1, Kw) => { }; 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 < 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; + 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); @@ -1076,6 +1017,7 @@ var l1 = Kt((c1, Kw) => { })(c1, typeof Kw == "object" && Kw, typeof define == "function" && define); }); var d1 = Kt((m1, qw) => { + "use strict"; (function(r15, e, t10) { function o(a) { var i = this, p = ""; @@ -1083,8 +1025,7 @@ var d1 = Kt((m1, qw) => { 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(); + for (var u = 0; u < p.length + 20; u++) i.b ^= p.charCodeAt(u) | 0, i.next(); } function n(a, i) { return i.a = a.a, i.b = a.b, i.c = a.c, i.d = a.d, i; @@ -1108,18 +1049,18 @@ var d1 = Kt((m1, qw) => { })(m1, typeof qw == "object" && qw, typeof define == "function" && define); }); var f1 = Kt(() => { + "use strict"; }); var g1 = Kt((h1, Md) => { + "use strict"; (function(r15, 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; function m(C, S, k) { var _ = []; S = S == true ? { entropy: true } : S || {}; var $ = g(h(S.entropy ? [C, b(e)] : C == null ? x() : C, 3), _), R = new d(_), D = function() { - for (var P = R.g(n), O = i, M = 0; P < p; ) - P = (P + M) * o, O *= o, M = R.g(1); - for (; P >= u; ) - P /= 2, O /= 2, M >>>= 1; + for (var P = R.g(n), O = i, M = 0; P < p; ) P = (P + M) * o, O *= o, M = R.g(1); + for (; P >= u; ) P /= 2, O /= 2, M >>>= 1; return (P + M) / O; }; return D.int32 = function() { @@ -1134,13 +1075,10 @@ var g1 = Kt((h1, Md) => { } function d(C) { var S, k = C.length, _ = this, $ = 0, R = _.i = _.j = 0, D = _.S = []; - for (k || (C = [k++]); $ < o; ) - D[$] = $++; - for ($ = 0; $ < o; $++) - D[$] = D[R = c & R + C[$ % k] + (S = D[$])], D[R] = S; + for (k || (C = [k++]); $ < o; ) D[$] = $++; + for ($ = 0; $ < o; $++) D[$] = D[R = c & R + C[$ % k] + (S = D[$])], D[R] = S; (_.g = function(P) { - for (var O, M = 0, L = _.i, B = _.j, z = _.S; P--; ) - O = z[L = c & L + 1], M = M * o + z[c & (z[L] = z[B = c & B + O]) + (z[B] = O)]; + for (var O, M = 0, L = _.i, B = _.j, z = _.S; P--; ) O = z[L = c & L + 1], M = M * o + z[c & (z[L] = z[B = c & B + O]) + (z[B] = O)]; return _.i = L, _.j = B, M; })(o); } @@ -1149,17 +1087,14 @@ var g1 = Kt((h1, Md) => { } function h(C, S) { var k = [], _ = typeof C, $; - if (S && _ == "object") - for ($ in C) - try { - k.push(h(C[$], S - 1)); - } catch (R) { - } + if (S && _ == "object") for ($ in C) try { + k.push(h(C[$], S - 1)); + } catch (R) { + } return k.length ? k : _ == "string" ? C : C + "\0"; } function g(C, S) { - for (var k = C + "", _, $ = 0; $ < k.length; ) - S[c & $] = c & (_ ^= S[c & $] * 19) + k.charCodeAt($++); + for (var k = C + "", _, $ = 0; $ < k.length; ) S[c & $] = c & (_ ^= S[c & $] * 19) + k.charCodeAt($++); return b(S); } function x() { @@ -1180,13 +1115,13 @@ var g1 = Kt((h1, Md) => { l = f1(); } catch (C) { } - } else - typeof define == "function" && define.amd ? define(function() { - return m; - }) : t10["seed" + a] = m; + } else typeof define == "function" && define.amd ? define(function() { + return m; + }) : t10["seed" + a] = m; })(typeof self != "undefined" ? self : h1, [], Math); }); var jw = Kt((s1e, x1) => { + "use strict"; var Dq = o1(), Aq = s1(), Fq = i1(), Pq = p1(), Oq = l1(), Mq = d1(), Ku = g1(); Ku.alea = Dq; Ku.xor128 = Aq; @@ -1197,16 +1132,22 @@ var jw = Kt((s1e, x1) => { x1.exports = Ku; }); var Vv = Kt(() => { + "use strict"; }); var Wv = Kt(() => { + "use strict"; }); var LB = Kt(() => { + "use strict"; }); var BB = Kt(() => { + "use strict"; }); var zB = Kt(() => { + "use strict"; }); var VB = Kt((Wg, Gv) => { + "use strict"; var Uv = (() => { var r15 = typeof document != "undefined" && document.currentScript ? document.currentScript.src : void 0; return typeof __filename != "undefined" && (r15 = r15 || __filename), function(e) { @@ -1246,8 +1187,7 @@ var VB = Kt((Wg, Gv) => { } var $, R, D, P; function O(F) { - if (F instanceof ku) - return; + if (F instanceof ku) return; j("exiting due to exception: " + F); } if (C) { @@ -1260,13 +1200,11 @@ var VB = Kt((Wg, Gv) => { Be ? $e(Be) : ue(Le.buffer); }); }, process.argv.length > 1 && (h = process.argv[1].replace(/\\/g, "/")), f = process.argv.slice(2), process.on("uncaughtException", function(V) { - if (!(V instanceof ku)) - throw V; + if (!(V instanceof ku)) throw V; }), process.on("unhandledRejection", function(V) { throw V; }), g = (V, ue) => { - if (Lo()) - throw process.exitCode = V, ue; + if (Lo()) throw process.exitCode = V, ue; O(ue), process.exit(V); }, u.inspect = function() { return "[Emscripten Module object]"; @@ -1278,23 +1216,22 @@ var VB = Kt((Wg, Gv) => { throw console.error('The "worker_threads" module is not supported in this node.js build - perhaps a newer version is needed?'), V; } global.Worker = F.Worker; - } else - (x || b) && (b ? k = self.location.href : typeof document != "undefined" && document.currentScript && (k = document.currentScript.src), typeof r15 != "undefined" && r15 && (k = r15), k.indexOf("blob:") !== 0 ? k = k.substr(0, k.replace(/[?#].*/, "").lastIndexOf("/") + 1) : k = "", C || ($ = (F) => { - var V = new XMLHttpRequest(); - return V.open("GET", F, false), V.send(null), V.responseText; - }, b && (D = (F) => { - var V = new XMLHttpRequest(); - return V.open("GET", F, false), V.responseType = "arraybuffer", V.send(null), new Uint8Array(V.response); - }), R = (F, V, ue) => { - var $e = new XMLHttpRequest(); - $e.open("GET", F, true), $e.responseType = "arraybuffer", $e.onload = () => { - if ($e.status == 200 || $e.status == 0 && $e.response) { - V($e.response); - return; - } - ue(); - }, $e.onerror = ue, $e.send(null); - }), P = (F) => document.title = F); + } else (x || b) && (b ? k = self.location.href : typeof document != "undefined" && document.currentScript && (k = document.currentScript.src), typeof r15 != "undefined" && r15 && (k = r15), k.indexOf("blob:") !== 0 ? k = k.substr(0, k.replace(/[?#].*/, "").lastIndexOf("/") + 1) : k = "", C || ($ = (F) => { + var V = new XMLHttpRequest(); + return V.open("GET", F, false), V.send(null), V.responseText; + }, b && (D = (F) => { + var V = new XMLHttpRequest(); + return V.open("GET", F, false), V.responseType = "arraybuffer", V.send(null), new Uint8Array(V.response); + }), R = (F, V, ue) => { + var $e = new XMLHttpRequest(); + $e.open("GET", F, true), $e.responseType = "arraybuffer", $e.onload = () => { + if ($e.status == 200 || $e.status == 0 && $e.response) { + V($e.response); + return; + } + ue(); + }, $e.onerror = ue, $e.send(null); + }), P = (F) => document.title = F); C && typeof performance == "undefined" && (global.performance = BB().performance); var B = console.log.bind(console), z = console.warn.bind(console); C && (B = (F) => M.writeSync(1, F + ` @@ -1313,10 +1250,8 @@ var VB = Kt((Wg, Gv) => { var ve = typeof TextDecoder != "undefined" ? new TextDecoder("utf8") : void 0; function Fe(F, V, ue) { V >>>= 0; - for (var $e = V + ue, Be = V; F[Be] && !(Be >= $e); ) - ++Be; - if (Be - V > 16 && F.buffer && ve) - return ve.decode(F.buffer instanceof SharedArrayBuffer ? F.slice(V, Be) : F.subarray(V, Be)); + for (var $e = V + ue, Be = V; F[Be] && !(Be >= $e); ) ++Be; + if (Be - V > 16 && F.buffer && ve) return ve.decode(F.buffer instanceof SharedArrayBuffer ? F.slice(V, Be) : F.subarray(V, Be)); for (var Le = ""; V < Be; ) { var ge = F[V++]; if (!(ge & 128)) { @@ -1329,8 +1264,7 @@ var VB = Kt((Wg, Gv) => { continue; } var Ft = F[V++] & 63; - if ((ge & 240) == 224 ? ge = (ge & 15) << 12 | Ne << 6 | Ft : ge = (ge & 7) << 18 | Ne << 12 | Ft << 6 | F[V++] & 63, ge < 65536) - Le += String.fromCharCode(ge); + if ((ge & 240) == 224 ? ge = (ge & 15) << 12 | Ne << 6 | Ft : ge = (ge & 7) << 18 | Ne << 12 | Ft << 6 | F[V++] & 63, ge < 65536) Le += String.fromCharCode(ge); else { var so = ge - 65536; Le += String.fromCharCode(55296 | so >> 10, 56320 | so & 1023); @@ -1342,8 +1276,7 @@ var VB = Kt((Wg, Gv) => { return F >>>= 0, F ? Fe(o(), F, V) : ""; } function st(F, V, ue, $e) { - if (ue >>>= 0, !($e > 0)) - return 0; + if (ue >>>= 0, !($e > 0)) return 0; for (var Be = ue, Le = ue + $e - 1, ge = 0; ge < F.length; ++ge) { var Ne = F.charCodeAt(ge); if (Ne >= 55296 && Ne <= 57343) { @@ -1351,20 +1284,16 @@ var VB = Kt((Wg, Gv) => { Ne = 65536 + ((Ne & 1023) << 10) | Ft & 1023; } if (Ne <= 127) { - if (ue >= Le) - break; + if (ue >= Le) break; V[ue++ >>> 0] = Ne; } else if (Ne <= 2047) { - if (ue + 1 >= Le) - break; + if (ue + 1 >= Le) break; V[ue++ >>> 0] = 192 | Ne >> 6, V[ue++ >>> 0] = 128 | Ne & 63; } else if (Ne <= 65535) { - if (ue + 2 >= Le) - break; + if (ue + 2 >= Le) break; V[ue++ >>> 0] = 224 | Ne >> 12, V[ue++ >>> 0] = 128 | Ne >> 6 & 63, V[ue++ >>> 0] = 128 | Ne & 63; } else { - if (ue + 3 >= Le) - break; + if (ue + 3 >= Le) break; V[ue++ >>> 0] = 240 | Ne >> 18, V[ue++ >>> 0] = 128 | Ne >> 12 & 63, V[ue++ >>> 0] = 128 | Ne >> 6 & 63, V[ue++ >>> 0] = 128 | Ne & 63; } } @@ -1379,21 +1308,16 @@ var VB = Kt((Wg, Gv) => { He = F, u.HEAP8 = lt = new Int8Array(F), u.HEAP16 = ht = new Int16Array(F), u.HEAP32 = Lr = new Int32Array(F), u.HEAPU8 = it = new Uint8Array(F), u.HEAPU16 = gt = new Uint16Array(F), u.HEAPU32 = Mt = new Uint32Array(F), u.HEAPF32 = to = new Float32Array(F), u.HEAPF64 = rr = new Float64Array(F); } var or = u.INITIAL_MEMORY || 16777216; - if (S) - oe = u.wasmMemory, He = u.buffer; - else if (u.wasmMemory) - oe = u.wasmMemory; - else if (oe = new WebAssembly.Memory({ initial: or / 65536, maximum: 65536, shared: true }), !(oe.buffer instanceof SharedArrayBuffer)) - throw j("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 && j("(on node you may need: --experimental-wasm-threads --experimental-wasm-bulk-memory and/or recent version)"), Error("bad memory"); + if (S) oe = u.wasmMemory, He = u.buffer; + else if (u.wasmMemory) oe = u.wasmMemory; + else if (oe = new WebAssembly.Memory({ initial: or / 65536, maximum: 65536, shared: true }), !(oe.buffer instanceof SharedArrayBuffer)) throw j("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 && j("(on node you may need: --experimental-wasm-threads --experimental-wasm-bulk-memory and/or recent version)"), Error("bad memory"); oe && (He = oe.buffer), or = He.byteLength, Tt(He); var nr, ro = [], oo = [], fr = [], Va = false; function Lo() { return ee; } function Ks() { - if (u.preRun) - for (typeof u.preRun == "function" && (u.preRun = [u.preRun]); u.preRun.length; ) - ol(u.preRun.shift()); + if (u.preRun) for (typeof u.preRun == "function" && (u.preRun = [u.preRun]); u.preRun.length; ) ol(u.preRun.shift()); al(ro); } function Xt() { @@ -1401,9 +1325,7 @@ var VB = Kt((Wg, Gv) => { } function Wa() { if (!S) { - if (u.postRun) - for (typeof u.postRun == "function" && (u.postRun = [u.postRun]); u.postRun.length; ) - d0(u.postRun.shift()); + if (u.postRun) for (typeof u.postRun == "function" && (u.postRun = [u.postRun]); u.postRun.length; ) d0(u.postRun.shift()); al(fr); } } @@ -1442,10 +1364,8 @@ var VB = Kt((Wg, Gv) => { hr = "tfjs-backend-wasm-threaded-simd.wasm", Sm(hr) || (hr = _(hr)); function Im(F) { try { - if (F == hr && ne) - return new Uint8Array(ne); - if (D) - return D(F); + if (F == hr && ne) return new Uint8Array(ne); + if (D) return D(F); throw "both async and sync fetching of the wasm failed"; } catch (V) { vu(V); @@ -1453,20 +1373,17 @@ var VB = Kt((Wg, Gv) => { } function Sy() { if (!ne && (x || b)) { - if (typeof fetch == "function" && !Fp(hr)) - return fetch(hr, { credentials: "same-origin" }).then(function(F) { - if (!F.ok) - throw "failed to load wasm binary file at '" + hr + "'"; - return F.arrayBuffer(); - }).catch(function() { - return Im(hr); - }); - if (R) - return new Promise(function(F, V) { - R(hr, function(ue) { - F(new Uint8Array(ue)); - }, V); - }); + if (typeof fetch == "function" && !Fp(hr)) return fetch(hr, { credentials: "same-origin" }).then(function(F) { + if (!F.ok) throw "failed to load wasm binary file at '" + hr + "'"; + return F.arrayBuffer(); + }).catch(function() { + return Im(hr); + }); + if (R) return new Promise(function(F, V) { + R(hr, function(ue) { + F(new Uint8Array(ue)); + }, V); + }); } return Promise.resolve().then(function() { return Im(hr); @@ -1506,13 +1423,12 @@ var VB = Kt((Wg, Gv) => { }); }) : $e(ue); } - if (u.instantiateWasm) - try { - var Le = u.instantiateWasm(F, V); - return Le; - } catch (ge) { - j("Module.instantiateWasm callback failed with error: " + ge), l(ge); - } + if (u.instantiateWasm) try { + var Le = u.instantiateWasm(F, V); + return Le; + } catch (ge) { + j("Module.instantiateWasm callback failed with error: " + ge), l(ge); + } return Be().catch(l), {}; } var f0, h0, vm = {}; @@ -1533,8 +1449,7 @@ var VB = Kt((Wg, Gv) => { } function Ny(F) { var V = Me.getNewWorker(); - if (!V) - return 6; + if (!V) return 6; Me.runningWorkers.push(V), Me.pthreads[F.pthread_ptr] = V, V.pthread_ptr = F.pthread_ptr; var ue = { cmd: "run", start_routine: F.startRoutine, arg: F.arg, pthread_ptr: F.pthread_ptr }; return V.runPthread = () => { @@ -1550,35 +1465,29 @@ var VB = Kt((Wg, Gv) => { return V; } }; function Nm(F) { - if (S) - return Ni(1, 1, F); + if (S) return Ni(1, 1, F); be = F, Lo() || (Me.terminateAllThreads(), u.onExit && u.onExit(F), le = true), g(F, new ku(F)); } function Ty(F, V) { - if (be = F, !V && S) - throw _m(F), "unwind"; + if (be = F, !V && S) throw _m(F), "unwind"; Nm(F); } var Tm = Ty; function _y(F) { - if (F instanceof ku || F == "unwind") - return be; + if (F instanceof ku || F == "unwind") return be; g(1, F); } var Me = { unusedWorkers: [], runningWorkers: [], tlsInitFunctions: [], pthreads: {}, init: function() { S ? Me.initWorker() : Me.initMainThread(); }, initMainThread: function() { - for (var F = 8; F--; ) - Me.allocateUnusedWorker(); + for (var F = 8; F--; ) Me.allocateUnusedWorker(); }, initWorker: function() { ee = false; }, setExitStatus: function(F) { be = F; }, terminateAllThreads: function() { - for (var F of Object.values(Me.pthreads)) - Me.returnWorkerToPool(F); - for (var F of Me.unusedWorkers) - F.terminate(); + for (var F of Object.values(Me.pthreads)) Me.returnWorkerToPool(F); + for (var F of Me.unusedWorkers) F.terminate(); Me.unusedWorkers = []; }, returnWorkerToPool: function(F) { var V = F.pthread_ptr; @@ -1605,8 +1514,7 @@ var VB = Kt((Wg, Gv) => { }), F.on("detachedExit", function() { })); var ue = [], $e = ["onExit", "onAbort", "print", "printErr"]; - for (var Be of $e) - u.hasOwnProperty(Be) && ue.push(Be); + for (var Be of $e) u.hasOwnProperty(Be) && ue.push(Be); F.postMessage({ cmd: "load", handlers: ue, urlOrBlob: u.mainScriptUrlOrBlob || r15, wasmMemory: oe, wasmModule: ie }); }, allocateUnusedWorker: function() { var F, V = _("tfjs-backend-wasm-threaded-simd.worker.js"); @@ -1616,8 +1524,7 @@ var VB = Kt((Wg, Gv) => { } }; u.PThread = Me; function al(F) { - for (; F.length > 0; ) - F.shift()(u); + for (; F.length > 0; ) F.shift()(u); } function Ey() { var F = Wm(), V = s()[F + 52 >>> 2], ue = s()[F + 56 >>> 2], $e = V - ue; @@ -1625,8 +1532,7 @@ var VB = Kt((Wg, Gv) => { } u.establishStackSpace = Ey; function _m(F) { - if (S) - return Ni(2, 0, F); + if (S) return Ni(2, 0, F); try { Tm(F); } catch (V) { @@ -1656,13 +1562,10 @@ var VB = Kt((Wg, Gv) => { return S ? Ni(3, 1, F, V, ue, $e) : $m(F, V, ue, $e); } function $m(F, V, ue, $e) { - if (typeof SharedArrayBuffer == "undefined") - return j("Current environment does not support SharedArrayBuffer, pthreads are not available!"), 6; + if (typeof SharedArrayBuffer == "undefined") return j("Current environment does not support SharedArrayBuffer, pthreads are not available!"), 6; var Be = [], Le = 0; - if (S && (Be.length === 0 || Le)) - return Em(F, V, ue, $e); - if (Le) - return Le; + if (S && (Be.length === 0 || Le)) return Em(F, V, ue, $e); + if (Le) return Le; var ge = { startRoutine: ue, pthread_ptr: F, arg: $e, transferList: Be }; return S ? (ge.cmd = "spawnThread", postMessage(ge, Be), 0) : Ny(ge); } @@ -1678,14 +1581,11 @@ var VB = Kt((Wg, Gv) => { } u.executeNotifiedProxyingQueue = il; function Ly(F, V, ue, $e) { - if (F == V) - setTimeout(() => il($e)); - else if (S) - postMessage({ targetThread: F, cmd: "processProxyingQueue", queue: $e }); + if (F == V) setTimeout(() => il($e)); + else if (S) postMessage({ targetThread: F, cmd: "processProxyingQueue", queue: $e }); else { var Be = Me.pthreads[F]; - if (!Be) - return; + if (!Be) return; Be.postMessage({ cmd: "processProxyingQueue", queue: $e }); } return 1; @@ -1739,8 +1639,7 @@ var VB = Kt((Wg, Gv) => { var pl = []; function qy(F, V, ue) { pl.length = V; - for (var $e = ue >> 3, Be = 0; Be < V; Be++) - pl[Be] = p()[$e + Be >>> 0]; + for (var $e = ue >> 3, Be = 0; Be < V; Be++) pl[Be] = p()[$e + Be >>> 0]; var Le = F < 0, ge = Le ? vm[-F - 1] : rb[F]; return ge.apply(null, pl); } @@ -1752,18 +1651,15 @@ var VB = Kt((Wg, Gv) => { } function Xy(F) { var V = o().length; - if (F = F >>> 0, F <= V) - return false; + if (F = F >>> 0, F <= V) return false; var ue = Rm(); - if (F > ue) - return false; + if (F > ue) return false; let $e = (Ft, so) => Ft + (so - Ft % so) % so; for (var Be = 1; Be <= 4; Be *= 2) { var Le = V * (1 + 0.2 / Be); Le = Math.min(Le, F + 100663296); var ge = Math.min(ue, $e(Math.max(F, Le), 65536)), Ne = jy(ge); - if (Ne) - return true; + if (Ne) return true; } return false; } @@ -1782,13 +1678,11 @@ var VB = Kt((Wg, Gv) => { V === 0 || V === 10 ? ((F === 1 ? U : j)(Fe(ue, 0)), ue.length = 0) : ue.push(V); } function Fm(F, V, ue, $e) { - if (S) - return Ni(6, 1, F, V, ue, $e); + if (S) return Ni(6, 1, F, V, ue, $e); for (var Be = 0, Le = 0; Le < ue; Le++) { var ge = a()[V >>> 2], Ne = a()[V + 4 >>> 2]; V += 8; - for (var Ft = 0; Ft < Ne; Ft++) - Zy(F, o()[ge + Ft >>> 0]); + for (var Ft = 0; Ft < Ne; Ft++) Zy(F, o()[ge + Ft >>> 0]); Be += Ne; } return a()[$e >>> 2] = Be, 0; @@ -1816,11 +1710,10 @@ var VB = Kt((Wg, Gv) => { return V === "string" ? Pe(Br) : V === "boolean" ? !!Br : Br; } var Ne = Pm(F), Ft = [], so = 0; - if ($e) - for (var Ha = 0; Ha < $e.length; Ha++) { - var I0 = Le[ue[Ha]]; - I0 ? (so === 0 && (so = XC()), Ft[Ha] = I0($e[Ha])) : Ft[Ha] = $e[Ha]; - } + if ($e) for (var Ha = 0; Ha < $e.length; Ha++) { + var I0 = Le[ue[Ha]]; + I0 ? (so === 0 && (so = XC()), Ft[Ha] = I0($e[Ha])) : Ft[Ha] = $e[Ha]; + } var YC = Ne.apply(null, Ft); function TG(Br) { return so !== 0 && Um(so), ge(Br); @@ -2168,14 +2061,12 @@ var VB = Kt((Wg, Gv) => { Hm || S0(), Hm || (Ua = F); }; function S0(F) { - if (F = F || f, ki > 0) - return; + if (F = F || f, ki > 0) return; if (S) { c(u), Xt(), startWorker(u); return; } - if (Ks(), ki > 0) - return; + if (Ks(), ki > 0) return; function V() { Hm || (Hm = true, u.calledRun = true, !le && (Xt(), c(u), u.onRuntimeInitialized && u.onRuntimeInitialized(), Wa())); } @@ -2185,9 +2076,7 @@ var VB = Kt((Wg, Gv) => { }, 1), V(); }, 1)) : V(); } - if (u.preInit) - for (typeof u.preInit == "function" && (u.preInit = [u.preInit]); u.preInit.length > 0; ) - u.preInit.pop()(); + if (u.preInit) for (typeof u.preInit == "function" && (u.preInit = [u.preInit]); u.preInit.length > 0; ) u.preInit.pop()(); S0(); var Km; m && (Km = { uncaughtException: process.listeners("uncaughtException").filter(function(F) { @@ -2196,12 +2085,9 @@ var VB = Kt((Wg, Gv) => { return !m.unhandledRejection.indexOf(F) > -1; }) }); var qm; - if (typeof WasmBackendModule != "undefined") - qm = WasmBackendModule; - else if (typeof e != "undefined") - qm = e; - else - throw new Error("Could not find wasm module in post.js"); + if (typeof WasmBackendModule != "undefined") qm = WasmBackendModule; + else if (typeof e != "undefined") qm = e; + else throw new Error("Could not find wasm module in post.js"); if (Km) { var NG = qm._dispose; qm._dispose = function() { @@ -2220,10 +2106,12 @@ var VB = Kt((Wg, Gv) => { }) : typeof Wg == "object" && (Wg.WasmBackendModuleThreadedSimd = Uv); }); var UB = Kt((e3t, WB) => { + "use strict"; WB.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")+"//# sourceURL="+f)},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.startWorker=instance=>{Module=instance;postMessage({"cmd":"loaded"})};self.onmessage=e=>{try{if(e.data.cmd==="load"){Module["wasmModule"]=e.data.wasmModule;for(const handler of e.data.handlers){Module[handler]=function(){postMessage({cmd:"callHandler",handler:handler,args:[...arguments]})}}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)}else if(e.data.cmd==="run"){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 GB = Kt((Ug, Kv) => { + "use strict"; var Hv = (() => { var r15 = typeof document != "undefined" && document.currentScript ? document.currentScript.src : void 0; return typeof __filename != "undefined" && (r15 = r15 || __filename), function(e) { @@ -2242,8 +2130,7 @@ var GB = Kt((Ug, Kv) => { } var h, g, x, b; function C(K) { - if (K instanceof Ap) - return; + if (K instanceof Ap) return; $("exiting due to exception: " + K); } if (m) { @@ -2256,34 +2143,31 @@ var GB = Kt((Ug, Kv) => { at ? Ee(at) : ae(_t.buffer); }); }, process.argv.length > 1 && (p = process.argv[1].replace(/\\/g, "/")), i = process.argv.slice(2), process.on("uncaughtException", function(K) { - if (!(K instanceof Ap)) - throw K; + if (!(K instanceof Ap)) throw K; }), process.on("unhandledRejection", function(K) { throw K; }), u = (K, ae) => { - if (it()) - throw process.exitCode = K, ae; + if (it()) throw process.exitCode = K, ae; C(ae), process.exit(K); }, t10.inspect = function() { return "[Emscripten Module object]"; }; - } else - (c || l) && (l ? d = self.location.href : typeof document != "undefined" && document.currentScript && (d = document.currentScript.src), r15 && (d = r15), d.indexOf("blob:") !== 0 ? d = d.substr(0, d.replace(/[?#].*/, "").lastIndexOf("/") + 1) : d = "", h = (K) => { - var ae = new XMLHttpRequest(); - return ae.open("GET", K, false), ae.send(null), ae.responseText; - }, l && (x = (K) => { - var ae = new XMLHttpRequest(); - return ae.open("GET", K, false), ae.responseType = "arraybuffer", ae.send(null), new Uint8Array(ae.response); - }), g = (K, ae, Ee) => { - var at = new XMLHttpRequest(); - at.open("GET", K, true), at.responseType = "arraybuffer", at.onload = () => { - if (at.status == 200 || at.status == 0 && at.response) { - ae(at.response); - return; - } - Ee(); - }, at.onerror = Ee, at.send(null); - }, b = (K) => document.title = K); + } else (c || l) && (l ? d = self.location.href : typeof document != "undefined" && document.currentScript && (d = document.currentScript.src), r15 && (d = r15), d.indexOf("blob:") !== 0 ? d = d.substr(0, d.replace(/[?#].*/, "").lastIndexOf("/") + 1) : d = "", h = (K) => { + var ae = new XMLHttpRequest(); + return ae.open("GET", K, false), ae.send(null), ae.responseText; + }, l && (x = (K) => { + var ae = new XMLHttpRequest(); + return ae.open("GET", K, false), ae.responseType = "arraybuffer", ae.send(null), new Uint8Array(ae.response); + }), g = (K, ae, Ee) => { + var at = new XMLHttpRequest(); + at.open("GET", K, true), at.responseType = "arraybuffer", at.onload = () => { + if (at.status == 200 || at.status == 0 && at.response) { + ae(at.response); + return; + } + Ee(); + }, at.onerror = Ee, at.send(null); + }, b = (K) => document.title = K); var _ = t10.print || console.log.bind(console), $ = 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, D; @@ -2297,10 +2181,8 @@ var GB = Kt((Ug, Kv) => { var z = typeof TextDecoder != "undefined" ? new TextDecoder("utf8") : void 0; function U(K, ae, Ee) { ae >>>= 0; - for (var at = ae + Ee, _t = ae; K[_t] && !(_t >= at); ) - ++_t; - if (_t - ae > 16 && K.buffer && z) - return z.decode(K.subarray(ae, _t)); + for (var at = ae + Ee, _t = ae; K[_t] && !(_t >= at); ) ++_t; + if (_t - ae > 16 && K.buffer && z) return z.decode(K.subarray(ae, _t)); for (var Et = ""; ae < _t; ) { var Qe = K[ae++]; if (!(Qe & 128)) { @@ -2313,8 +2195,7 @@ var GB = Kt((Ug, Kv) => { continue; } var Ut = K[ae++] & 63; - if ((Qe & 240) == 224 ? Qe = (Qe & 15) << 12 | Ke << 6 | Ut : Qe = (Qe & 7) << 18 | Ke << 12 | Ut << 6 | K[ae++] & 63, Qe < 65536) - Et += String.fromCharCode(Qe); + if ((Qe & 240) == 224 ? Qe = (Qe & 15) << 12 | Ke << 6 | Ut : Qe = (Qe & 7) << 18 | Ke << 12 | Ut << 6 | K[ae++] & 63, Qe < 65536) Et += String.fromCharCode(Qe); else { var no = Qe - 65536; Et += String.fromCharCode(55296 | no >> 10, 56320 | no & 1023); @@ -2326,8 +2207,7 @@ var GB = Kt((Ug, Kv) => { return K >>>= 0, K ? U(ne, K, ae) : ""; } function q(K, ae, Ee, at) { - if (Ee >>>= 0, !(at > 0)) - return 0; + if (Ee >>>= 0, !(at > 0)) return 0; for (var _t = Ee, Et = Ee + at - 1, Qe = 0; Qe < K.length; ++Qe) { var Ke = K.charCodeAt(Qe); if (Ke >= 55296 && Ke <= 57343) { @@ -2335,20 +2215,16 @@ var GB = Kt((Ug, Kv) => { Ke = 65536 + ((Ke & 1023) << 10) | Ut & 1023; } if (Ke <= 127) { - if (Ee >= Et) - break; + if (Ee >= Et) break; ae[Ee++ >>> 0] = Ke; } else if (Ke <= 2047) { - if (Ee + 1 >= Et) - break; + if (Ee + 1 >= Et) break; ae[Ee++ >>> 0] = 192 | Ke >> 6, ae[Ee++ >>> 0] = 128 | Ke & 63; } else if (Ke <= 65535) { - if (Ee + 2 >= Et) - break; + if (Ee + 2 >= Et) break; ae[Ee++ >>> 0] = 224 | Ke >> 12, ae[Ee++ >>> 0] = 128 | Ke >> 6 & 63, ae[Ee++ >>> 0] = 128 | Ke & 63; } else { - if (Ee + 3 >= Et) - break; + if (Ee + 3 >= Et) break; ae[Ee++ >>> 0] = 240 | Ke >> 18, ae[Ee++ >>> 0] = 128 | Ke >> 12 & 63, ae[Ee++ >>> 0] = 128 | Ke >> 6 & 63, ae[Ee++ >>> 0] = 128 | Ke & 63; } } @@ -2366,18 +2242,14 @@ var GB = Kt((Ug, Kv) => { return P; } function ht() { - if (t10.preRun) - for (typeof t10.preRun == "function" && (t10.preRun = [t10.preRun]); t10.preRun.length; ) - Mt(t10.preRun.shift()); + if (t10.preRun) for (typeof t10.preRun == "function" && (t10.preRun = [t10.preRun]); t10.preRun.length; ) Mt(t10.preRun.shift()); Ua(st); } function gt() { lt = true, Ua(ct); } function Lr() { - if (t10.postRun) - for (typeof t10.postRun == "function" && (t10.postRun = [t10.postRun]); t10.postRun.length; ) - rr(t10.postRun.shift()); + if (t10.postRun) for (typeof t10.postRun == "function" && (t10.postRun = [t10.postRun]); t10.postRun.length; ) rr(t10.postRun.shift()); Ua(He); } function Mt(K) { @@ -2415,10 +2287,8 @@ var GB = Kt((Ug, Kv) => { Xt = "tfjs-backend-wasm.wasm", Lo(Xt) || (Xt = f(Xt)); function Wa(K) { try { - if (K == Xt && D) - return new Uint8Array(D); - if (x) - return x(K); + if (K == Xt && D) return new Uint8Array(D); + if (x) return x(K); throw "both async and sync fetching of the wasm failed"; } catch (ae) { fr(ae); @@ -2426,20 +2296,17 @@ var GB = Kt((Ug, Kv) => { } function ol() { if (!D && (c || l)) { - if (typeof fetch == "function" && !Ks(Xt)) - return fetch(Xt, { credentials: "same-origin" }).then(function(K) { - if (!K.ok) - throw "failed to load wasm binary file at '" + Xt + "'"; - return K.arrayBuffer(); - }).catch(function() { - return Wa(Xt); - }); - if (g) - return new Promise(function(K, ae) { - g(Xt, function(Ee) { - K(new Uint8Array(Ee)); - }, ae); - }); + if (typeof fetch == "function" && !Ks(Xt)) return fetch(Xt, { credentials: "same-origin" }).then(function(K) { + if (!K.ok) throw "failed to load wasm binary file at '" + Xt + "'"; + return K.arrayBuffer(); + }).catch(function() { + return Wa(Xt); + }); + if (g) return new Promise(function(K, ae) { + g(Xt, function(Ee) { + K(new Uint8Array(Ee)); + }, ae); + }); } return Promise.resolve().then(function() { return Wa(Xt); @@ -2472,13 +2339,12 @@ var GB = Kt((Ug, Kv) => { }); }) : at(Ee); } - if (t10.instantiateWasm) - try { - var Et = t10.instantiateWasm(K, ae); - return Et; - } catch (Qe) { - $("Module.instantiateWasm callback failed with error: " + Qe), n(Qe); - } + if (t10.instantiateWasm) try { + var Et = t10.instantiateWasm(K, ae); + return Et; + } catch (Qe) { + $("Module.instantiateWasm callback failed with error: " + Qe), n(Qe); + } return _t().catch(n), {}; } var d0, ki; @@ -2486,8 +2352,7 @@ var GB = Kt((Ug, Kv) => { this.name = "ExitStatus", this.message = "Program terminated with exit(" + K + ")", this.status = K; } function Ua(K) { - for (; K.length > 0; ) - K.shift()(t10); + for (; K.length > 0; ) K.shift()(t10); } function Cy() { fr(""); @@ -2511,15 +2376,13 @@ var GB = Kt((Ug, Kv) => { var ae = ne.length; K = K >>> 0; var Ee = wm(); - if (K > Ee) - return false; + if (K > Ee) return false; let at = (Ut, no) => Ut + (no - Ut % no) % no; for (var _t = 1; _t <= 4; _t *= 2) { var Et = ae * (1 + 0.2 / _t); Et = Math.min(Et, K + 100663296); var Qe = Math.min(Ee, at(Math.max(K, Et), 65536)), Ke = Sm(Qe); - if (Ke) - return true; + if (Ke) return true; } return false; } @@ -2546,8 +2409,7 @@ var GB = Kt((Ug, Kv) => { for (var _t = 0, Et = 0; Et < Ee; Et++) { var Qe = le[ae >>> 2], Ke = le[ae + 4 >>> 2]; ae += 8; - for (var Ut = 0; Ut < Ke; Ut++) - f0(K, ne[Qe + Ut >>> 0]); + for (var Ut = 0; Ut < Ke; Ut++) f0(K, ne[Qe + Ut >>> 0]); _t += Ke; } return le[at >>> 2] = _t, 0; @@ -2575,11 +2437,10 @@ var GB = Kt((Ug, Kv) => { return ae === "string" ? j(yr) : ae === "boolean" ? !!yr : yr; } var Ke = vm(K), Ut = [], no = 0; - if (at) - for (var Ga = 0; Ga < at.length; Ga++) { - var zm = Et[Ee[Ga]]; - zm ? (no === 0 && (no = Mm()), Ut[Ga] = zm(at[Ga])) : Ut[Ga] = at[Ga]; - } + if (at) for (var Ga = 0; Ga < at.length; Ga++) { + var zm = Et[Ee[Ga]]; + zm ? (no === 0 && (no = Mm()), Ut[Ga] = zm(at[Ga])) : Ut[Ga] = at[Ga]; + } var ll = Ke.apply(null, Ut); function qC(yr) { return no !== 0 && Lm(no), Qe(yr); @@ -2902,8 +2763,7 @@ var GB = Kt((Ug, Kv) => { Op || Bm(), Op || (nr = K); }; function Bm(K) { - if (K = K || i, Tt > 0 || (ht(), Tt > 0)) - return; + if (K = K || i, Tt > 0 || (ht(), Tt > 0)) return; function ae() { Op || (Op = true, t10.calledRun = true, !M && (gt(), o(t10), t10.onRuntimeInitialized && t10.onRuntimeInitialized(), Lr())); } @@ -2913,9 +2773,7 @@ var GB = Kt((Ug, Kv) => { }, 1), ae(); }, 1)) : ae(); } - if (t10.preInit) - for (typeof t10.preInit == "function" && (t10.preInit = [t10.preInit]); t10.preInit.length > 0; ) - t10.preInit.pop()(); + if (t10.preInit) for (typeof t10.preInit == "function" && (t10.preInit = [t10.preInit]); t10.preInit.length > 0; ) t10.preInit.pop()(); Bm(); var Mp; s && (Mp = { uncaughtException: process.listeners("uncaughtException").filter(function(K) { @@ -2924,12 +2782,9 @@ var GB = Kt((Ug, Kv) => { return !s.unhandledRejection.indexOf(K) > -1; }) }); var Lp; - if (typeof e != "undefined") - Lp = e; - else if (typeof WasmBackendModuleThreadedSimd != "undefined") - Lp = WasmBackendModuleThreadedSimd; - else - throw new Error("Could not find wasm module in post.js"); + if (typeof e != "undefined") Lp = e; + else if (typeof WasmBackendModuleThreadedSimd != "undefined") Lp = WasmBackendModuleThreadedSimd; + else throw new Error("Could not find wasm module in post.js"); if (Mp) { var KC = Lp._dispose; Lp._dispose = function() { @@ -3022,15 +2877,12 @@ function zr(r15) { } function k0(r15) { let e = r15.length, t10 = 0; - for (; e > 0; ) - t10 = Math.random() * e | 0, e--, jm(r15, e, t10); + for (; e > 0; ) t10 = Math.random() * e | 0, e--, jm(r15, e, t10); } function FG(r15, e) { - if (r15.length !== e.length) - throw new Error(`Array sizes must match to be shuffled together First array length was ${r15.length}Second array length was ${e.length}`); + if (r15.length !== e.length) throw new Error(`Array sizes must match to be shuffled together First array length was ${r15.length}Second array length was ${e.length}`); let t10 = r15.length, o = 0; - for (; t10 > 0; ) - o = Math.random() * t10 | 0, t10--, jm(r15, t10, o), jm(e, t10, o); + for (; t10 > 0; ) o = Math.random() * t10 | 0, t10--, jm(r15, t10, o), jm(e, t10, o); } function Vp(r15, e, t10) { return Math.max(r15, Math.min(e, t10)); @@ -3044,8 +2896,7 @@ function jm(r15, e, t10) { } function OG(r15) { let e = 0; - for (let t10 = 0; t10 < r15.length; t10++) - e += r15[t10]; + for (let t10 = 0; t10 < r15.length; t10++) e += r15[t10]; return e; } function MG(r15, e) { @@ -3061,8 +2912,7 @@ function LG(r15, e) { return t10; } function E(r15, e) { - if (!r15) - throw new Error(typeof e == "string" ? e : e()); + if (!r15) throw new Error(typeof e == "string" ? e : e()); } function xt(r15, e, t10 = "") { E(br(r15, e), () => t10 + ` Shapes ${r15} and ${e} must match`); @@ -3071,46 +2921,33 @@ function io(r15) { E(r15 != null, () => "The input to the tensor constructor must be a non-null value."); } function ze(r15) { - if (r15.length === 0) - return 1; + if (r15.length === 0) return 1; let e = r15[0]; - for (let t10 = 1; t10 < r15.length; t10++) - e *= r15[t10]; + for (let t10 = 1; t10 < r15.length; t10++) e *= r15[t10]; return e; } function BG(r15) { return r15.length === 0; } function ZC(r15, e) { - if (r15 === e) - return true; - if (r15 == null || e == null || r15.length !== e.length) - return false; - for (let t10 = 0; t10 < r15.length; t10++) - if (r15[t10] !== null && e[t10] !== null && r15[t10] !== e[t10]) - return false; + if (r15 === e) return true; + if (r15 == null || e == null || r15.length !== e.length) return false; + for (let t10 = 0; t10 < r15.length; t10++) if (r15[t10] !== null && e[t10] !== null && r15[t10] !== e[t10]) return false; return true; } function br(r15, e) { - if (r15 === e) - return true; - if (r15 == null || e == null || r15.length !== e.length) - return false; - for (let t10 = 0; t10 < r15.length; t10++) - if (r15[t10] !== e[t10]) - return false; + if (r15 === e) return true; + if (r15 == null || e == null || r15.length !== e.length) return false; + for (let t10 = 0; t10 < r15.length; t10++) if (r15[t10] !== e[t10]) return false; return true; } function Ka(r15) { return r15 % 1 === 0; } function zG(r15) { - if (Math.tanh != null) - return Math.tanh(r15); - if (r15 === 1 / 0) - return 1; - if (r15 === -1 / 0) - return -1; + if (Math.tanh != null) return Math.tanh(r15); + if (r15 === 1 / 0) return 1; + if (r15 === -1 / 0) return -1; { let e = Math.exp(2 * r15); return (e - 1) / (e + 1); @@ -3122,8 +2959,7 @@ function VG(r15) { } function WG(r15) { let e = new Uint32Array(r15); - for (let t10 = 0; t10 < r15; ++t10) - e[t10] = t10; + for (let t10 = 0; t10 < r15; ++t10) e[t10] = t10; return k0(e), e; } function _u(r15, e) { @@ -3149,24 +2985,17 @@ function UG(r15, e = (n) => 0, t10, o) { } function GG(r15, e) { let t10 = 1, o = -1; - for (let s = 0; s < r15.length; ++s) - if (r15[s] >= 0) - t10 *= r15[s]; - else if (r15[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 (r15[s] < 0) - throw Error(`Shapes can not be < 0. Found ${r15[s]} at dim ${s}`); + for (let s = 0; s < r15.length; ++s) if (r15[s] >= 0) t10 *= r15[s]; + else if (r15[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 (r15[s] < 0) throw Error(`Shapes can not be < 0. Found ${r15[s]} at dim ${s}`); if (o === -1) { - if (e > 0 && e !== t10) - throw Error(`Size(${e}) must match the product of shape ${r15}`); + if (e > 0 && e !== t10) throw Error(`Size(${e}) must match the product of shape ${r15}`); return r15; } - if (t10 === 0) - throw Error(`Cannot infer the missing size in [${r15}] when there are 0 elements`); - if (e % t10 !== 0) - throw Error(`The implicit shape can't be a fractional number. Got ${e} / ${t10}`); + if (t10 === 0) throw Error(`Cannot infer the missing size in [${r15}] when there are 0 elements`); + if (e % t10 !== 0) throw Error(`The implicit shape can't be a fractional number. Got ${e} / ${t10}`); let n = r15.slice(); return n[o] = e / t10, n; } @@ -3178,8 +3007,7 @@ function JC(r15, e) { let t10 = [], o = [], n = e != null && Array.isArray(e) && e.length === 0, s = e == null || n ? null : _i(e, r15).sort(), a = 0; for (let i = 0; i < r15.length; ++i) { if (s != null) { - if (s[a] === i && r15[i] !== 1) - throw new Error(`Can't squeeze axis ${i} since its dim '${r15[i]}' is not 1`); + if (s[a] === i && r15[i] !== 1) throw new Error(`Can't squeeze axis ${i} since its dim '${r15[i]}' is not 1`); (s[a] == null || s[a] > i) && r15[i] === 1 && (t10.push(r15[i]), o.push(i)), s[a] <= i && a++; } r15[i] !== 1 && (t10.push(r15[i]), o.push(i)); @@ -3191,23 +3019,17 @@ function ew(r15, e) { } function Xm(r15, e) { let t10 = null; - if (r15 == null || r15 === "float32") - t10 = new Float32Array(e); - else if (r15 === "int32") - t10 = new Int32Array(e); - else if (r15 === "bool") - t10 = new Uint8Array(e); - else if (r15 === "string") - t10 = new Array(e); - else - throw new Error(`Unknown data type ${r15}`); + if (r15 == null || r15 === "float32") t10 = new Float32Array(e); + else if (r15 === "int32") t10 = new Int32Array(e); + else if (r15 === "bool") t10 = new Uint8Array(e); + else if (r15 === "string") t10 = new Array(e); + else throw new Error(`Unknown data type ${r15}`); return t10; } function tw(r15, e) { for (let t10 = 0; t10 < r15.length; t10++) { let o = r15[t10]; - if (isNaN(o) || !isFinite(o)) - throw Error(`A tensor of type ${e} being uploaded contains ${o}.`); + if (isNaN(o) || !isFinite(o)) throw Error(`A tensor of type ${e} being uploaded contains ${o}.`); } } function rw(r15) { @@ -3217,17 +3039,13 @@ function HG(r15, e) { return !(e === "complex64" || e === "float32" && r15 !== "complex64" || e === "int32" && r15 !== "float32" && r15 !== "complex64" || e === "bool" && r15 === "bool"); } function Wp(r15) { - if (r15 === "float32" || r15 === "int32") - return 4; - if (r15 === "complex64") - return 8; - if (r15 === "bool") - return 1; + if (r15 === "float32" || r15 === "int32") return 4; + if (r15 === "complex64") return 8; + if (r15 === "bool") return 1; throw new Error(`Unknown dtype ${r15}`); } function ow(r15) { - if (r15 == null) - return 0; + if (r15 == null) return 0; let e = 0; return r15.forEach((t10) => e += t10.length), e; } @@ -3247,78 +3065,58 @@ function qs(r15) { return !!(r15 && r15.constructor && r15.call && r15.apply); } function Up(r15, e) { - for (let t10 = e; t10 < r15; ++t10) - if (r15 % t10 === 0) - return t10; + for (let t10 = e; t10 < r15; ++t10) if (r15 % t10 === 0) return t10; return r15; } function js(r15) { let e = r15.length; - if (e < 2) - return []; + if (e < 2) return []; let t10 = new Array(e - 1); t10[e - 2] = r15[e - 1]; - for (let o = e - 3; o >= 0; --o) - t10[o] = t10[o + 1] * r15[o + 1]; + for (let o = e - 3; o >= 0; --o) t10[o] = t10[o + 1] * r15[o + 1]; return t10; } function _0(r15, e, t10, 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[r15 + a]; + for (let a = 0; a < s; a++) n[a] = t10[r15 + 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] = _0(r15 + p * i, a, t10, o); + for (let p = 0; p < s; p++) n[p] = _0(r15 + p * i, a, t10, o); } return n; } function Tu(r15, e, t10 = false) { - if (r15.length === 0) - return e[0]; + if (r15.length === 0) return e[0]; let o = r15.reduce((n, s) => n * s) * (t10 ? 2 : 1); - if (o === 0) - return []; - if (o !== e.length) - throw new Error(`[${r15}] does not match the input size ${e.length}${t10 ? " for a complex tensor" : ""}.`); + if (o === 0) return []; + if (o !== e.length) throw new Error(`[${r15}] does not match the input size ${e.length}${t10 ? " for a complex tensor" : ""}.`); return _0(0, r15, e, t10); } function KG(r15, e) { - if (Array.isArray(r15)) - return r15; - if (e === "float32") - return r15 instanceof Float32Array ? r15 : new Float32Array(r15); - if (e === "int32") - return r15 instanceof Int32Array ? r15 : new Int32Array(r15); - if (e === "bool" || e === "string") - return Uint8Array.from(new Int32Array(r15)); + if (Array.isArray(r15)) return r15; + if (e === "float32") return r15 instanceof Float32Array ? r15 : new Float32Array(r15); + if (e === "int32") return r15 instanceof Int32Array ? r15 : new Int32Array(r15); + if (e === "bool" || e === "string") return Uint8Array.from(new Int32Array(r15)); throw new Error(`Unknown dtype ${e}`); } function ml(r15, e) { let t10 = Gp(r15, e); - for (let o = 0; o < t10.length; o++) - t10[o] = 1; + for (let o = 0; o < t10.length; o++) t10[o] = 1; return t10; } function Gp(r15, e) { - if (e == null || e === "float32" || e === "complex64") - return new Float32Array(r15); - if (e === "int32") - return new Int32Array(r15); - if (e === "bool") - return new Uint8Array(r15); + if (e == null || e === "float32" || e === "complex64") return new Float32Array(r15); + if (e === "int32") return new Int32Array(r15); + if (e === "bool") return new Uint8Array(r15); throw new Error(`Unknown data type ${e}`); } function qG(r15, e) { let t10 = r15.reduce((o, n) => o * n, 1); - if (e == null || e === "float32") - return Tu(r15, new Float32Array(t10)); - if (e === "int32") - return Tu(r15, new Int32Array(t10)); - if (e === "bool") - return Tu(r15, new Uint8Array(t10)); + if (e == null || e === "float32") return Tu(r15, new Float32Array(t10)); + if (e === "int32") return Tu(r15, new Int32Array(t10)); + if (e === "bool") return Tu(r15, new Uint8Array(t10)); throw new Error(`Unknown data type ${e}`); } function Ct(r15) { @@ -3327,23 +3125,17 @@ function Ct(r15) { }); } function jG(r15, e, t10) { - if (e === 0) - return 0; - if (e === 1) - return r15[0]; + if (e === 0) return 0; + if (e === 1) return r15[0]; let o = r15[r15.length - 1]; - for (let n = 0; n < r15.length - 1; ++n) - o += t10[n] * r15[n]; + for (let n = 0; n < r15.length - 1; ++n) o += t10[n] * r15[n]; return o; } function XG(r15, e, t10) { - if (e === 0) - return []; - if (e === 1) - return [r15]; + if (e === 0) return []; + if (e === 1) return [r15]; let o = new Array(e); - for (let n = 0; n < o.length - 1; ++n) - o[n] = Math.floor(r15 / t10[n]), r15 -= o[n] * t10[n]; + for (let n = 0; n < o.length - 1; ++n) o[n] = Math.floor(r15 / t10[n]), r15 -= o[n] * t10[n]; return o[o.length - 1] = r15, o; } function Eu(r15) { @@ -3367,11 +3159,9 @@ var dl = class { return e in this.flags ? this.flags[e] : (this.flags[e] = await this.evaluateFlag(e), this.flags[e]); } get(e) { - if (e in this.flags) - return this.flags[e]; + if (e in this.flags) return this.flags[e]; let t10 = this.evaluateFlag(e); - if (Eu(t10)) - throw new Error(`Flag ${e} cannot be synchronously evaluated. Please use getAsync() instead.`); + if (Eu(t10)) throw new Error(`Flag ${e} cannot be synchronously evaluated. Please use getAsync() instead.`); return this.flags[e] = t10, this.flags[e]; } getNumber(e) { @@ -3390,13 +3180,11 @@ var dl = class { return this.flags; } set(e, t10) { - if (this.flagRegistry[e] == null) - throw new Error(`Cannot set flag ${e} as it has not been registered.`); + 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); } evaluateFlag(e) { - if (this.flagRegistry[e] == null) - throw new Error(`Cannot evaluate flag '${e}': no evaluation function found.`); + if (this.flagRegistry[e] == null) throw new Error(`Cannot evaluate flag '${e}': no evaluation function found.`); return this.flagRegistry[e].evaluationFn(); } setFlags(e) { @@ -3406,8 +3194,7 @@ var dl = class { this.flags = {}, this.urlFlags = {}, this.populateURLFlags(); } populateURLFlags() { - if (typeof this.global == "undefined" || typeof this.global.location == "undefined" || typeof this.global.location.search == "undefined") - return; + 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); E0 in e && e[E0].split(",").forEach((o) => { let [n, s] = o.split(":"); @@ -3437,16 +3224,11 @@ var sw; function aw() { if (sw == null) { let r15; - if (typeof window != "undefined") - r15 = window; - else if (typeof global != "undefined") - r15 = global; - else if (typeof process != "undefined") - r15 = process; - else if (typeof self != "undefined") - r15 = self; - else - throw new Error("Could not find a global object"); + if (typeof window != "undefined") r15 = window; + else if (typeof global != "undefined") r15 = global; + else if (typeof process != "undefined") r15 = process; + else if (typeof self != "undefined") r15 = self; + else throw new Error("Could not find a global object"); sw = r15; } return sw; @@ -3457,8 +3239,7 @@ function e4() { } function fl(r15, e) { let t10 = e4(); - if (t10.has(r15)) - return t10.get(r15); + if (t10.has(r15)) return t10.get(r15); { let o = e(); return t10.set(r15, o), t10.get(r15); @@ -3663,8 +3444,7 @@ function Ym(r15) { let e = jp.entries(), t10 = []; for (; ; ) { let { done: o, value: n } = e.next(); - if (o) - break; + if (o) break; let [s, a] = n, [i] = s.split("_"); i === r15 && t10.push(a); } @@ -3680,13 +3460,11 @@ function ole(r15) { } function nle(r15, e) { let t10 = uw(r15, e); - if (!jp.has(t10)) - throw new Error(`The kernel '${r15}' for backend '${e}' is not registered`); + if (!jp.has(t10)) throw new Error(`The kernel '${r15}' for backend '${e}' is not registered`); jp.delete(t10); } function sle(r15) { - if (!hl.has(r15)) - throw new Error(`The gradient '${r15}' for backend is not registered`); + if (!hl.has(r15)) throw new Error(`The gradient '${r15}' for backend is not registered`); hl.delete(r15); } function ale(r15, e) { @@ -3766,10 +3544,8 @@ function a4(r15, e = r15.length) { } function i4(r15, e = r15.length) { let t10 = Ou.fromNumber(81, true); - if (e <= 32) - return e <= 16 ? n4(r15, e) : s4(r15, e); - if (e <= 64) - return a4(r15, e); + if (e <= 32) return e <= 16 ? n4(r15, e) : s4(r15, e); + if (e <= 64) return a4(r15, e); let o = t10, n = t10.mul(Pu).add(113), s = lw(n.mul(Cr).add(113)).mul(Cr), a = [Ou.UZERO, Ou.UZERO], i = [Ou.UZERO, Ou.UZERO]; o = o.mul(Cr).add(wt(r15, 0)); let p = 0, u = (e - 1 >> 6) * 64, c = u + (e - 1 & 63) - 63; @@ -3786,21 +3562,15 @@ function p4(r15, e) { return r15 instanceof Float32Array && e === "float32" || r15 instanceof Int32Array && e === "int32" || r15 instanceof Uint8Array && e === "bool"; } function Zp(r15, e) { - if (e === "string") - throw new Error("Cannot convert a string[] to a TypedArray"); - if (Array.isArray(r15) && (r15 = Fs(r15)), A().getBool("DEBUG") && tw(r15, e), p4(r15, e)) - return r15; - if (e == null || e === "float32" || e === "complex64") - return new Float32Array(r15); - if (e === "int32") - return new Int32Array(r15); + if (e === "string") throw new Error("Cannot convert a string[] to a TypedArray"); + if (Array.isArray(r15) && (r15 = Fs(r15)), A().getBool("DEBUG") && tw(r15, e), p4(r15, e)) return r15; + if (e == null || e === "float32" || e === "complex64") return new Float32Array(r15); + if (e === "int32") return new Int32Array(r15); if (e === "bool") { let t10 = new Uint8Array(r15.length); - for (let o = 0; o < t10.length; ++o) - Math.round(r15[o]) !== 0 && (t10[o] = 1); + for (let o = 0; o < t10.length; ++o) Math.round(r15[o]) !== 0 && (t10[o] = 1); return t10; - } else - throw new Error(`Unknown data type ${e}`); + } else throw new Error(`Unknown data type ${e}`); } function Mu() { return A().platform.now(); @@ -3818,17 +3588,12 @@ function Pt(r15) { return A().platform.isTypedArray != null ? A().platform.isTypedArray(r15) : Qm(r15); } function Fs(r15, e = [], t10 = false) { - if (e == null && (e = []), typeof r15 == "boolean" || typeof r15 == "number" || typeof r15 == "string" || Eu(r15) || r15 == null || Pt(r15) && t10) - e.push(r15); - else if (Array.isArray(r15) || Pt(r15)) - for (let o = 0; o < r15.length; ++o) - Fs(r15[o], e, t10); + if (e == null && (e = []), typeof r15 == "boolean" || typeof r15 == "number" || typeof r15 == "string" || Eu(r15) || r15 == null || Pt(r15) && t10) e.push(r15); + else if (Array.isArray(r15) || Pt(r15)) for (let o = 0; o < r15.length; ++o) Fs(r15[o], e, t10); else { let o = -1; - for (let n of Object.keys(r15)) - /^([1-9]+[0-9]*|0)$/.test(n) && (o = Math.max(o, Number(n))); - for (let n = 0; n <= o; n++) - Fs(r15[n], e, t10); + for (let n of Object.keys(r15)) /^([1-9]+[0-9]*|0)$/.test(n) && (o = Math.max(o, Number(n))); + for (let n = 0; n <= o; n++) Fs(r15[n], e, t10); } return e; } @@ -3840,21 +3605,18 @@ var ed = class { let n, s = () => { n = o(); }, a, i = Mu(); - if (this.backendTimer.timerAvailable()) - a = this.backendTimer.time(s); + if (this.backendTimer.timerAvailable()) a = this.backendTimer.time(s); else { s(); - for (let u of n) - u.dataSync(); + for (let u of n) u.dataSync(); a = Promise.resolve({ kernelMs: Mu() - i }); } - if (A().getBool("CHECK_COMPUTATION_FOR_ERRORS")) - for (let u = 0; u < n.length; u++) { - let c = n[u]; - c.data().then((l) => { - l4(l, c.dtype, e); - }); - } + if (A().getBool("CHECK_COMPUTATION_FOR_ERRORS")) for (let u = 0; u < n.length; u++) { + let c = n[u]; + c.data().then((l) => { + l4(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() : "") }; } logKernelProfile(e) { @@ -3867,12 +3629,10 @@ var ed = class { } }; function l4(r15, e, t10) { - if (e !== "float32") - return false; + if (e !== "float32") return false; for (let o = 0; o < r15.length; o++) { let n = r15[o]; - if (isNaN(n) || !isFinite(n)) - return console.warn(`Found ${n} in the result of '${t10}'`), true; + if (isNaN(n) || !isFinite(n)) return console.warn(`Found ${n} in the result of '${t10}'`), true; } return false; } @@ -3891,19 +3651,16 @@ var dw = class { }; function q0(r15, e, t10) { let o = {}, n = {}; - for (let p = 0; p < e.length; p++) - o[e[p].id] = true; + for (let p = 0; p < e.length; p++) o[e[p].id] = true; for (let p = 0; p < r15.length; p++) { let u = r15[p], c = u.inputs; for (let l in c) { 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), d = true, n[u.id] = true; - break; - } - if (d) + for (let f = 0; f < e.length; f++) if (o[m.id]) { + u.outputs.forEach((h) => o[h.id] = true), d = true, n[u.id] = true; break; + } + if (d) break; } } let s = {}; @@ -3911,12 +3668,10 @@ function q0(r15, e, t10) { let a = {}; for (let p = r15.length - 1; p >= 0; p--) { let u = r15[p], c = u.inputs; - for (let l = 0; l < u.outputs.length; l++) - if (s[u.outputs[l].id]) { - for (let m in c) - s[c[m].id] = true, a[u.id] = true; - break; - } + for (let l = 0; l < u.outputs.length; l++) if (s[u.outputs[l].id]) { + for (let m in c) s[c[m].id] = true, a[u.id] = true; + break; + } } let i = []; for (let p = 0; p < r15.length; p++) { @@ -3939,20 +3694,15 @@ function j0(r15, e, t10, o) { if (s.outputs.forEach((p) => { let u = r15[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}.`); + }), 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)}.`); + if (!(p in i)) throw new Error(`Cannot backprop through input ${p}. Available gradients found: ${Object.keys(i)}.`); let u = t10(() => 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}'`); + 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 (!br(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 (r15[c.id] == null) - r15[c.id] = u; + if (!br(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 (r15[c.id] == null) r15[c.id] = u; else { let l = r15[c.id]; r15[c.id] = o(l, u), l.dispose(); @@ -3971,12 +3721,10 @@ function Y0(r15, e, t10, o) { } function m4(r15, e, t10, o) { let n = ze(e), s = o[o.length - 1], a = new Array(s).fill(0), i = e.length, p = t10 === "complex64" ? bl(r15) : r15; - 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], yl(p[c + l], 0, t10).length); - } + 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], yl(p[c + l], 0, t10).length); + } return a; } function yl(r15, e, t10) { @@ -4013,26 +3761,22 @@ function td(r15, e, t10, o, n, s = true) { let g = h * l, x = g + l; m.push(...td(r15.slice(g, x), u, t10, c, n, h === i - 1)); } - } else - for (let h = 0; h < i; h++) { - let g = h * l, x = g + l; - m.push(...td(r15.slice(g, x), u, t10, c, n, h === i - 1)); - } + } else for (let h = 0; h < i; h++) { + let g = h * l, x = g + l; + m.push(...td(r15.slice(g, x), u, t10, c, n, h === i - 1)); + } let d = p === 2 ? "," : ""; m[0] = "[" + (i > 0 ? m[0] + d : ""); - for (let h = 1; h < m.length - 1; h++) - m[h] = " " + m[h] + d; + for (let h = 1; h < m.length - 1; h++) m[h] = " " + m[h] + d; let f = `, `; - for (let h = 2; h < p; h++) - f += ` + for (let h = 2; h < p; h++) f += ` `; return m[m.length - 1] = " " + m[m.length - 1] + "]" + (s ? "" : f), m; } function bl(r15) { let e = []; - for (let t10 = 0; t10 < r15.length; t10 += 2) - e.push([r15[t10], r15[t10 + 1]]); + for (let t10 = 0; t10 < r15.length; t10 += 2) e.push([r15[t10], r15[t10 + 1]]); return e; } var tt = class { @@ -4041,8 +3785,7 @@ var tt = class { let n = o.length; E(n === this.size, () => `Length of values '${n}' does not match the size inferred by the shape '${this.size}'.`); } - if (t10 === "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)."); + if (t10 === "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 || Xm(t10, this.size), this.strides = js(e); } set(e, ...t10) { @@ -4061,28 +3804,21 @@ var tt = class { t10++; } let o = e[e.length - 1]; - for (let n = 0; n < e.length - 1; ++n) - o += this.strides[n] * e[n]; + for (let n = 0; n < e.length - 1; ++n) o += this.strides[n] * e[n]; return this.values[o]; } locToIndex(e) { - if (this.rank === 0) - return 0; - if (this.rank === 1) - return e[0]; + if (this.rank === 0) return 0; + if (this.rank === 1) return e[0]; let t10 = e[e.length - 1]; - for (let o = 0; o < e.length - 1; ++o) - t10 += this.strides[o] * e[o]; + for (let o = 0; o < e.length - 1; ++o) t10 += this.strides[o] * e[o]; return t10; } indexToLoc(e) { - if (this.rank === 0) - return []; - if (this.rank === 1) - return [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]; + 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; } get rank() { @@ -4144,12 +3880,11 @@ var mt = class { dataSync() { this.throwIfDisposed(); let e = Ps().readSync(this.dataId); - if (this.dtype === "string") - try { - return e.map((t10) => Jp(t10)); - } catch (t10) { - throw new Error("Failed to decode the string bytes into utf-8. To get the original bytes, call tensor.bytes()."); - } + if (this.dtype === "string") try { + return e.map((t10) => Jp(t10)); + } catch (t10) { + throw new Error("Failed to decode the string bytes into utf-8. To get the original bytes, call tensor.bytes()."); + } return e; } async bytes() { @@ -4164,8 +3899,7 @@ var mt = class { return this.isDisposedInternal; } throwIfDisposed() { - if (this.isDisposed) - throw new Error("Tensor is disposed."); + if (this.isDisposed) throw new Error("Tensor is disposed."); } print(e = false) { return ec.print(this, e); @@ -4194,10 +3928,8 @@ var ri = class extends mt { super(e.shape, e.dtype, e.dataId, n), this.trainable = t10, 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 (!br(e.shape, this.shape)) - throw new Error(`shape of the new value (${e.shape}) and previous value (${this.shape}) must match`); + if (e.dtype !== this.dtype) throw new Error(`dtype of the new value (${e.dtype}) and previous value (${this.dtype}) must match`); + if (!br(e.shape, this.shape)) throw new Error(`shape of the new value (${e.shape}) and previous value (${this.shape}) must match`); Ps().disposeTensor(this), this.dataId = e.dataId, Ps().incRef(this, null); } dispose() { @@ -4230,8 +3962,7 @@ var Cw; var f4 = { float32: bw, int32: xw, bool: yw, complex64: Cw }; function dt(r15, e) { if (r15 === "string" || e === "string") { - if (r15 === "string" && e === "string") - return "string"; + if (r15 === "string" && e === "string") return "string"; throw new Error(`Can not upcast ${r15} with ${e}`); } return f4[r15][e]; @@ -4246,8 +3977,7 @@ function od(r15) { return typeof GPUBuffer != "undefined" && r15 != null && typeof r15 == "object" && "buffer" in r15 && r15.buffer instanceof GPUBuffer; } function Oe(r15, e) { - if (r15.dtype === e.dtype) - return [r15, e]; + if (r15.dtype === e.dtype) return [r15, e]; let t10 = dt(r15.dtype, e.dtype); return [r15.cast(t10), e.cast(t10)]; } @@ -4262,14 +3992,12 @@ function Cl(r15) { return tk(r15, e, /* @__PURE__ */ new Set()), e; } function tk(r15, e, t10) { - if (r15 == null) - return; + if (r15 == null) return; if (r15 instanceof mt) { e.push(r15); return; } - if (!g4(r15)) - return; + if (!g4(r15)) return; let o = r15; for (let n in o) { let s = o[n]; @@ -4289,8 +4017,7 @@ var nd = class { } }; } dispose() { - for (let e in this.registeredVariables) - this.registeredVariables[e].dispose(); + for (let e in this.registeredVariables) this.registeredVariables[e].dispose(); } }; var wl = class r { @@ -4298,11 +4025,9 @@ var wl = class r { this.ENV = e, this.registry = {}, this.registryFactory = {}, this.pendingBackendInitId = 0, this.state = new nd(); } async ready() { - if (this.pendingBackendInit != null) - return this.pendingBackendInit.then(() => { - }); - if (this.backendInstance != null) - return; + if (this.pendingBackendInit != null) return this.pendingBackendInit.then(() => { + }); + if (this.backendInstance != null) return; let e = this.getSortedBackends(); for (let t10 = 0; t10 < e.length; t10++) { let o = e[t10]; @@ -4314,12 +4039,10 @@ var wl = class r { throw new Error("Could not initialize any backends, all backend initializations failed."); } get backend() { - 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.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) - 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`); + if (t10) 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); } return this.backendInstance; @@ -4328,13 +4051,10 @@ var wl = class r { return Object.keys(this.registryFactory); } findBackend(e) { - if (!(e in this.registry)) - if (e in this.registryFactory) { - let { asyncInit: t10 } = this.initializeBackend(e); - if (t10) - return null; - } else - return null; + if (!(e in this.registry)) if (e in this.registryFactory) { + let { asyncInit: t10 } = this.initializeBackend(e); + if (t10) return null; + } else return null; return this.registry[e]; } findBackendFactory(e) { @@ -4344,13 +4064,11 @@ var wl = class r { return e in this.registryFactory ? (Ia(`${e} backend was already registered. Reusing existing backend factory.`), false) : (this.registryFactory[e] = { factory: t10, priority: o }, true); } async setBackend(e) { - if (this.registryFactory[e] == null) - throw new Error(`Backend name '${e}' not found in registry`); + 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)) - return false; + if (!(o ? await t10 : t10)) return false; } return this.backendInstance = this.registry[e], this.setupRegisteredKernels(), this.profiler = new ed(this.backendInstance), true; } @@ -4366,35 +4084,30 @@ var wl = class r { } initializeBackend(e) { let t10 = this.registryFactory[e]; - if (t10 == null) - throw new Error(`Cannot initialize backend ${e}, no registration found.`); + if (t10 == null) throw new Error(`Cannot initialize backend ${e}, no registration found.`); try { let o = t10.factory(); if (o && !(o instanceof ao) && 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, Ia(`Initialization of backend ${e} failed`), Ia(a.stack || a.message)), false)); return this.pendingBackendInit = s, { success: s, asyncInit: true }; - } else - return this.registry[e] = o, { success: true, asyncInit: false }; + } else return this.registry[e] = o, { success: true, asyncInit: false }; } catch (o) { return Ia(`Initialization of backend ${e} failed`), Ia(o.stack || o.message), { success: false, asyncInit: false }; } } removeBackend(e) { - if (!(e in this.registryFactory)) - throw new Error(`${e} backend not found in registry`); + if (!(e in this.registryFactory)) throw new Error(`${e} backend not found in registry`); this.backendName === e && this.pendingBackendInit != null && this.pendingBackendInitId++, e in this.registry && (this.disposeRegisteredKernels(e), this.registry[e].dispose(), delete this.registry[e]), delete this.registryFactory[e], this.backendName === e && (this.pendingBackendInit = null, this.backendName = null, this.backendInstance = null); } getSortedBackends() { - if (Object.keys(this.registryFactory).length === 0) - throw new Error("No backend found in registry."); + 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); } initializeBackendsAndReturnBest() { let e = this.getSortedBackends(); for (let t10 = 0; t10 < e.length; t10++) { let o = e[t10], { success: n, asyncInit: s } = this.initializeBackend(o); - if (s || n) - return { name: o, asyncInit: s }; + if (s || n) return { name: o, asyncInit: s }; } throw new Error("Could not initialize any backends, all backend initializations failed."); } @@ -4405,14 +4118,11 @@ var wl = class r { tidy(e, t10) { let o = null; if (t10 == null) { - if (typeof e != "function") - throw new Error("Please provide a function to tidy()"); + if (typeof e != "function") throw new Error("Please provide a function to tidy()"); t10 = 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") - throw new Error("When calling with two arguments, the 2nd argument to tidy() must be a function"); + 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") throw new Error("When calling with two arguments, the 2nd argument to tidy() must be a function"); o = e; } let n; @@ -4441,8 +4151,7 @@ var wl = class r { return this.addTapeNode(this.state.activeScope.name, o, [t10], n, s, {}), t10; } runKernel(e, t10, o) { - if (this.backendName == null && this.backend, !(Xp(e, this.backendName) != null)) - throw new Error(`Kernel '${e}' not registered for backend '${this.backendName}'`); + if (this.backendName == null && this.backend, !(Xp(e, this.backendName) != null)) throw new Error(`Kernel '${e}' not registered for backend '${this.backendName}'`); return this.runKernelFunc({ kernelName: e, inputs: t10, attrs: o }); } shouldCheckForMemLeaks() { @@ -4454,8 +4163,7 @@ var wl = class r { s += p.dtype === "complex64" ? 3 : 1; }); let a = this.state.numDataMovesStack[this.state.numDataMovesStack.length - 1], i = n - t10 - s - a; - if (i > 0) - throw new Error(`Backend '${this.backendName}' has an internal memory leak (${i} data ids) after running '${e}'`); + 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; @@ -4509,8 +4217,7 @@ var wl = class r { return []; } makeTensor(e, t10, o, n) { - if (e == null) - throw new Error("Values passed to engine.makeTensor() are null"); + 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" && zo(e[0]) && (s = e.map((p) => Ji(p))); @@ -4533,8 +4240,7 @@ var wl = class r { makeVariable(e, t10 = true, o, n) { o = o || this.nextVariableId().toString(), n != null && n !== e.dtype && (e = e.cast(n)); let s = new ri(e, t10, o, this.nextTensorId()); - if (this.state.registeredVariables[s.name] != null) - throw new Error(`Variable with name ${s.name} was already registered`); + 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) { @@ -4549,8 +4255,7 @@ var wl = class r { this.state.tensorInfo.has(e) && this.state.tensorInfo.get(e).backend === t10 && (this.state.tensorInfo.delete(e), this.state.numDataBuffers--); } disposeTensor(e) { - if (!this.state.tensorInfo.has(e.dataId)) - return; + 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 * Wp(e.dtype); @@ -4575,8 +4280,7 @@ var wl = class r { 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; - for (let n of this.state.activeProfile.kernels) - n.kernelTimeMs = await n.kernelTimeMs, n.extraInfo = await n.extraInfo; + for (let n of this.state.activeProfile.kernels) n.kernelTimeMs = await n.kernelTimeMs, n.extraInfo = await n.extraInfo; return this.state.activeProfile; } isTapeOn() { @@ -4617,20 +4321,17 @@ var wl = class r { }); } gradients(e, t10, o, n = false) { - if (E(t10.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}'`); + if (E(t10.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 mt, () => "The result y returned by f() must be a tensor."); let a = q0(this.state.activeTape, t10, s); - if (!n && a.length === 0 && t10.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."); + if (!n && a.length === 0 && t10.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 ? x4(s.shape) : o, j0(i, a, (u) => this.tidy(u), y4); let p = t10.map((u) => i[u.id]); return this.state.gradientDepth === 0 && (this.state.activeTape.forEach((u) => { - for (let c of u.saved) - c.dispose(); + for (let c of u.saved) c.dispose(); }), this.state.activeTape = null), { value: s, grads: p }; }); } @@ -4673,8 +4374,7 @@ var wl = class r { } reset() { this.pendingBackendInitId++, this.state.dispose(), this.ENV.reset(), this.state = new nd(); - for (let e in this.registry) - this.disposeRegisteredKernels(e), this.registry[e].dispose(), delete this.registry[e]; + 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; } }; @@ -4707,11 +4407,9 @@ function C4(r15) { vw = r15; } function w4(r15) { - if (vw !== void 0) - return vw; + if (vw !== void 0) return vw; if (r15 || b4()) { - if (r15 || (r15 = navigator), r15.product === "ReactNative") - return true; + if (r15 || (r15 = navigator), r15.product === "ReactNative") return true; let e = r15.userAgent || r15.vendor || (typeof window != "undefined" ? window.opera : ""); if (!e) { let t10 = r15; @@ -4742,18 +4440,14 @@ _r.registerFlag("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU", () => false); _r.registerFlag("USE_SETTIMEOUTCUSTOM", () => false); function sr(r15, e) { let t10 = r15; - if (Pt(r15)) - return e === "string" ? [] : [r15.length]; + if (Pt(r15)) return e === "string" ? [] : [r15.length]; if (rd(r15)) { let n = r15.channels || "RGBA"; return [r15.height, r15.width * n.length]; - } else if (od(r15)) - return [r15.buffer.size / (e == null ? 4 : Wp(e))]; - if (!Array.isArray(r15)) - return []; + } else if (od(r15)) return [r15.buffer.size / (e == null ? 4 : Wp(e))]; + if (!Array.isArray(r15)) return []; let o = []; - for (; Array.isArray(t10) || Pt(t10) && e !== "string"; ) - o.push(t10.length), t10 = t10[0]; + for (; Array.isArray(t10) || Pt(t10) && e !== "string"; ) o.push(t10.length), t10 = t10[0]; return Array.isArray(r15) && A().getBool("TENSORLIKE_CHECK_SHAPE_CONSISTENCY") && nk(r15, o, []), o; } function nk(r15, e, t10) { @@ -4763,20 +4457,16 @@ function nk(r15, e, t10) { } E(e.length > 0, () => `Element arr[${t10.join("][")}] should be a primitive, but is an array of ${r15.length} elements`), E(r15.length === e[0], () => `Element arr[${t10.join("][")}] should have ${e[0]} elements, but has ${r15.length} elements`); let o = e.slice(1); - for (let n = 0; n < r15.length; ++n) - nk(r15[n], o, t10.concat(n)); + for (let n = 0; n < r15.length; ++n) nk(r15[n], o, t10.concat(n)); } function ok(r15, e, t10, o) { if (r15 !== "string_or_numeric") { - if (r15 == null) - throw new Error("Expected dtype cannot be null."); - if (r15 !== "numeric" && r15 !== e || r15 === "numeric" && e === "string") - throw new Error(`Argument '${t10}' passed to '${o}' must be ${r15} tensor, but got ${e} tensor`); + if (r15 == null) throw new Error("Expected dtype cannot be null."); + if (r15 !== "numeric" && r15 !== e || r15 === "numeric" && e === "string") throw new Error(`Argument '${t10}' passed to '${o}' must be ${r15} tensor, but got ${e} tensor`); } } function v(r15, e, t10, o = "numeric") { - if (r15 instanceof hw()) - return ok(o, r15.dtype, e, t10), r15; + if (r15 instanceof hw()) return ok(o, r15.dtype, e, t10), r15; let n = Ei(r15); if (n !== "string" && ["bool", "int32", "float32"].indexOf(o) >= 0 && (n = o), ok(o, n, e, t10), r15 == null || !Pt(r15) && !Array.isArray(r15) && typeof r15 != "number" && typeof r15 != "boolean" && typeof r15 != "string") { let p = r15 == null ? "null" : r15.constructor.name; @@ -4788,15 +4478,13 @@ function v(r15, e, t10, o = "numeric") { return T.makeTensor(i, s, n); } function ni(r15, e, t10, o = "numeric") { - if (!Array.isArray(r15)) - throw new Error(`Argument ${e} passed to ${t10} must be a \`Tensor[]\` or \`TensorLike[]\``); + if (!Array.isArray(r15)) throw new Error(`Argument ${e} passed to ${t10} must be a \`Tensor[]\` or \`TensorLike[]\``); return r15.map((s, a) => v(s, `${e}[${a}]`, t10, o)); } var Nw = "__op"; function N(r15) { let e = Object.keys(r15); - 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.`); + 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 = r15[t10]; t10.endsWith("_") && (t10 = t10.substring(0, t10.length - 1)), t10 = t10 + Nw; let n = (...s) => { @@ -4818,17 +4506,13 @@ function S4(r15, e) { } var Er = N({ complex_: S4 }); function wr(r15, e, t10, o) { - if (o == null) - o = Ei(r15); - else if (o === "complex64") - throw new Error("Cannot construct a complex64 tensor directly. Please use tf.complex(real, imag)."); + if (o == null) o = Ei(r15); + else if (o === "complex64") throw new Error("Cannot construct a complex64 tensor directly. Please use tf.complex(real, imag)."); if (od(r15) || rd(r15)) { - if (o !== "float32" && o !== "int32") - throw new Error(`Creating tensor from GPU data only supports 'float32'|'int32' dtype, while the dtype is ${o}.`); + if (o !== "float32" && o !== "int32") throw new Error(`Creating tensor from GPU data only supports 'float32'|'int32' dtype, while the dtype is ${o}.`); return T.backend.createTensorFromGPUData(r15, e || t10, o); } - if (!Pt(r15) && !Array.isArray(r15) && typeof r15 != "number" && typeof r15 != "boolean" && typeof r15 != "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 (!Pt(r15) && !Array.isArray(r15) && typeof r15 != "number" && typeof r15 != "boolean" && typeof r15 != "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) { Ct(e); let n = ze(e), s = ze(t10); @@ -4850,8 +4534,7 @@ var ir = class r2 { return new r2(e).slice(); } constructor(e) { - if (this.shards = [], this.previousShardIndex = 0, e == null || (e instanceof Array || (e = [e]), e = e.map((o) => Pt(o) ? o.buffer : o), e.length === 0)) - return; + if (this.shards = [], this.previousShardIndex = 0, e == null || (e instanceof Array || (e = [e]), e = e.map((o) => Pt(o) ? o.buffer : o), e.length === 0)) return; this.bufferUniformSize = e[0].byteLength; let t10 = 0; for (let o = 0; o < e.length; o++) { @@ -4863,31 +4546,24 @@ var ir = class r2 { this.shards.length === 0 && (this.byteLength = 0), this.byteLength = this.shards[this.shards.length - 1].end; } slice(e = 0, t10 = this.byteLength) { - if (this.shards.length === 0) - return new ArrayBuffer(0); - if (e = isNaN(Number(e)) ? 0 : e, t10 = isNaN(Number(t10)) ? 0 : t10, e = Math.max(0, e), t10 = Math.min(this.byteLength, t10), t10 <= e) - return new ArrayBuffer(0); + if (this.shards.length === 0) return new ArrayBuffer(0); + if (e = isNaN(Number(e)) ? 0 : e, t10 = isNaN(Number(t10)) ? 0 : t10, e = Math.max(0, e), t10 = Math.min(this.byteLength, t10), t10 <= e) return new ArrayBuffer(0); let o = this.findShardForByte(e); - if (o === -1) - throw new Error(`Could not find start shard for byte ${e}`); + if (o === -1) throw new Error(`Could not find start shard for byte ${e}`); let n = t10 - e, s = new ArrayBuffer(n), a = new Uint8Array(s), i = 0; for (let p = o; p < this.shards.length; p++) { let u = this.shards[p], l = e + i - u.start, m = i, f = Math.min(t10, u.end) - u.start, h = new Uint8Array(u.buffer, l, f - l); - if (a.set(h, m), i += h.length, t10 < u.end) - break; + if (a.set(h, m), i += h.length, t10 < u.end) break; } return s; } findShardForByte(e) { - if (this.shards.length === 0 || e < 0 || e >= this.byteLength) - return -1; - if (this.bufferUniformSize != null) - return this.previousShardIndex = Math.floor(e / this.bufferUniformSize), this.previousShardIndex; + if (this.shards.length === 0 || e < 0 || e >= this.byteLength) return -1; + if (this.bufferUniformSize != null) return this.previousShardIndex = Math.floor(e / this.bufferUniformSize), this.previousShardIndex; function t10(n) { return e < n.start ? -1 : e >= n.end ? 1 : 0; } - if (t10(this.shards[this.previousShardIndex]) === 0) - return this.previousShardIndex; + if (t10(this.shards[this.previousShardIndex]) === 0) return this.previousShardIndex; let o = I4(this.shards, t10); return o === -1 ? -1 : (this.previousShardIndex = o, this.previousShardIndex); } @@ -4896,8 +4572,7 @@ function I4(r15, e) { let t10 = 0, o = r15.length; for (; t10 <= o; ) { let n = Math.floor((o - t10) / 2) + t10, s = e(r15[n]); - if (s === 0) - return n; + if (s === 0) return n; s < 0 ? o = n : t10 = n + 1; } return -1; @@ -4971,8 +4646,7 @@ async function pk(r15, e) { let t10 = [], o = [], n = Array.isArray(r15) ? r15.map((a) => a.name) : Object.keys(r15); for (let a = 0; a < n.length; ++a) { let i = n[a], p = Array.isArray(r15) ? r15[a].tensor : r15[i]; - if (p.dtype !== "float32" && p.dtype !== "int32" && p.dtype !== "bool" && p.dtype !== "string" && p.dtype !== "complex64") - throw new Error(`Unsupported dtype in weight '${i}': ${p.dtype}`); + if (p.dtype !== "float32" && p.dtype !== "int32" && p.dtype !== "bool" && p.dtype !== "string" && p.dtype !== "complex64") throw new Error(`Unsupported dtype in weight '${i}': ${p.dtype}`); let u = { name: i, shape: p.shape, dtype: p.dtype }; if (p.dtype === "string") { let c = new Promise(async (l) => { @@ -4984,8 +4658,7 @@ async function pk(r15, e) { l(f); }); o.push(c); - } else - o.push(p.data()); + } else o.push(p.data()); e != null && (u.group = e), t10.push(u); } let s = await Promise.all(o); @@ -5006,11 +4679,9 @@ function v4(r15, e) { o = si[n.dtype]; } else if (r15.dtype === "string") { let n = 0; - for (let s = 0; s < t10; s++) - n += ru + new Uint32Array(e(n, n + ru))[0]; + for (let s = 0; s < t10; s++) n += ru + new Uint32Array(e(n, n + ru))[0]; return n; - } else - o = si[r15.dtype]; + } else o = si[r15.dtype]; return t10 * o; } async function k4(r15, e) { @@ -5020,11 +4691,9 @@ async function k4(r15, e) { o = si[n.dtype]; } else if (r15.dtype === "string") { let n = 0; - for (let s = 0; s < t10; s++) - n += ru + new Uint32Array(await e(n, n + ru))[0]; + for (let s = 0; s < t10; s++) n += ru + new Uint32Array(await e(n, n + ru))[0]; return n; - } else - o = si[r15.dtype]; + } else o = si[r15.dtype]; return t10 * o; } function ck(r15, e) { @@ -5032,35 +4701,27 @@ function ck(r15, e) { if ("quantization" in r15) { let p = r15.quantization; if (p.dtype === "uint8" || p.dtype === "uint16") { - if (!("min" in p && "scale" in p)) - throw new Error(`Weight ${r15.name} with quantization ${p.dtype} doesn't have corresponding metadata min and scale.`); + if (!("min" in p && "scale" in p)) throw new Error(`Weight ${r15.name} with quantization ${p.dtype} doesn't have corresponding metadata min and scale.`); } else if (p.dtype === "float16") { - if (o !== "float32") - throw new Error(`Weight ${r15.name} is quantized with ${p.dtype} which only supports weights of type float32 not ${o}.`); - } else - throw new Error(`Weight ${r15.name} has unknown quantization dtype ${p.dtype}. Supported quantization dtypes are: 'uint8', 'uint16', and 'float16'.`); + if (o !== "float32") throw new Error(`Weight ${r15.name} is quantized with ${p.dtype} which only supports weights of type float32 not ${o}.`); + } else throw new Error(`Weight ${r15.name} has unknown quantization dtype ${p.dtype}. Supported quantization dtypes are: 'uint8', 'uint16', and 'float16'.`); let u = si[p.dtype], c = p.dtype === "uint8" ? new Uint8Array(e) : new Uint16Array(e); - if (o === "float32") - if (p.dtype === "uint8" || p.dtype === "uint16") { - a = new Float32Array(c.length); - for (let l = 0; l < c.length; l++) { - let m = c[l]; - a[l] = m * p.scale + p.min; - } - } else if (p.dtype === "float16") - a = $4()(c); - else - throw new Error(`Unsupported quantization type ${p.dtype} for weight type float32.`); + if (o === "float32") if (p.dtype === "uint8" || p.dtype === "uint16") { + a = new Float32Array(c.length); + for (let l = 0; l < c.length; l++) { + let m = c[l]; + a[l] = m * p.scale + p.min; + } + } else if (p.dtype === "float16") a = $4()(c); + else throw new Error(`Unsupported quantization type ${p.dtype} for weight type float32.`); else if (o === "int32") { - if (p.dtype !== "uint8" && p.dtype !== "uint16") - throw new Error(`Unsupported quantization type ${p.dtype} for weight type int32.`); + if (p.dtype !== "uint8" && p.dtype !== "uint16") throw new Error(`Unsupported quantization type ${p.dtype} for weight type int32.`); a = new Int32Array(c.length); for (let l = 0; l < c.length; l++) { let m = c[l]; a[l] = Math.round(m * p.scale + p.min); } - } else - throw new Error(`Unsupported dtype in weight '${t10}': ${o}`); + } else throw new Error(`Unsupported dtype in weight '${t10}': ${o}`); i += s * u; } else if (o === "string") { let p = ze(r15.shape); @@ -5073,21 +4734,16 @@ function ck(r15, e) { } } else { let p = si[o]; - if (o === "float32") - a = new Float32Array(e); - else if (o === "int32") - a = new Int32Array(e); - else if (o === "bool") - a = new Uint8Array(e); + if (o === "float32") a = new Float32Array(e); + else if (o === "int32") a = new Int32Array(e); + else if (o === "bool") a = new Uint8Array(e); else if (o === "complex64") { a = new Float32Array(e); let u = new Float32Array(a.length / 2), c = new Float32Array(a.length / 2); - for (let f = 0; f < u.length; f++) - u[f] = a[f * 2], c[f] = a[f * 2 + 1]; + for (let f = 0; f < u.length; f++) u[f] = a[f * 2], c[f] = a[f * 2 + 1]; let l = ar(u, n, "float32"), m = ar(c, n, "float32"), d = Er(l, m); return l.dispose(), m.dispose(), d; - } else - throw new Error(`Unsupported dtype in weight '${t10}': ${o}`); + } else throw new Error(`Unsupported dtype in weight '${t10}': ${o}`); i += s * p; } return ar(a, n, o); @@ -5121,12 +4777,10 @@ async function ad(r15, e) { return t10; } function N4(r15) { - if (r15 === null) - throw new Error(`Invalid input value: ${JSON.stringify(r15)}`); + if (r15 === null) throw new Error(`Invalid input value: ${JSON.stringify(r15)}`); let e = 0, t10 = []; r15.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)) - throw new Error(`Unsupported TypedArray subtype: ${s.constructor.name}`); + 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)) throw new Error(`Unsupported TypedArray subtype: ${s.constructor.name}`); }); let o = new Uint8Array(e), n = 0; return t10.forEach((s) => { @@ -5138,11 +4792,9 @@ function uk(r15) { return _w ? Buffer.byteLength(r15, "utf8") : new Blob([r15]).size; } function lk(r15) { - if (_w) - return Buffer.from(r15).toString("base64"); + if (_w) return Buffer.from(r15).toString("base64"); let e = new Uint8Array(r15), t10 = ""; - for (let o = 0, n = e.length; o < n; o++) - t10 += String.fromCharCode(e[o]); + for (let o = 0, n = e.length; o < n; o++) t10 += String.fromCharCode(e[o]); return btoa(t10); } function mk(r15) { @@ -5151,8 +4803,7 @@ function mk(r15) { return o.buffer.slice(o.byteOffset, o.byteOffset + o.byteLength); } let e = atob(r15), t10 = new Uint8Array(e.length); - for (let o = 0; o < e.length; ++o) - t10.set([e.charCodeAt(o)], o); + for (let o = 0; o < e.length; ++o) t10.set([e.charCodeAt(o)], o); return t10.buffer; } function dk(r15) { @@ -5160,8 +4811,7 @@ function dk(r15) { } function Ew(r15) { let e = "/"; - for (r15 = r15.trim(); r15.endsWith(e); ) - r15 = r15.slice(0, r15.length - 1); + for (r15 = r15.trim(); r15.endsWith(e); ) r15 = r15.slice(0, r15.length - 1); let t10 = r15.split(e); return t10[t10.length - 1]; } @@ -5172,10 +4822,8 @@ function id(r15, e) { function $w(r15, e, t10) { let o = { modelTopology: r15.modelTopology, format: r15.format, generatedBy: r15.generatedBy, convertedBy: r15.convertedBy }; if (r15.trainingConfig != null && (o.trainingConfig = r15.trainingConfig), r15.weightsManifest != null) { - if (!e) - throw new Error("modelJSON has weightsManifest but weightSpecs is null"); - if (!t10) - throw new Error("modelJSON has weightsManifest but weightData is null"); + if (!e) throw new Error("modelJSON has weightsManifest but weightSpecs is null"); + if (!t10) throw new Error("modelJSON has weightsManifest but weightData is null"); o.weightSpecs = e, o.weightData = t10; } return r15.signature != null && (o.signature = r15.signature), r15.userDefinedMetadata != null && (o.userDefinedMetadata = r15.userDefinedMetadata), r15.modelInitializer != null && (o.modelInitializer = r15.modelInitializer), r15.initializerSignature != null && (o.initializerSignature = r15.initializerSignature), o; @@ -5185,43 +4833,35 @@ async function tc(r15, e) { return r15.weightsManifest != null && ([t10, o] = await e(r15.weightsManifest)), $w(r15, t10, o); } function va(r15) { - if (r15.modelTopology instanceof ArrayBuffer) - throw new Error("Expected JSON model topology, received ArrayBuffer."); + if (r15.modelTopology instanceof ArrayBuffer) throw new Error("Expected JSON model topology, received ArrayBuffer."); return { dateSaved: /* @__PURE__ */ new Date(), modelTopologyType: "JSON", modelTopologyBytes: r15.modelTopology == null ? 0 : uk(JSON.stringify(r15.modelTopology)), weightSpecsBytes: r15.weightSpecs == null ? 0 : uk(JSON.stringify(r15.weightSpecs)), weightDataBytes: r15.weightData == null ? 0 : new ir(r15.weightData).byteLength }; } function Sl(r15) { let e = []; - for (let t10 of r15) - e.push(...t10.weights); + for (let t10 of r15) e.push(...t10.weights); return e; } function T4() { let r15 = (t10) => { let o = t10 << 13, n = 0; - for (; !(o & 8388608); ) - n -= 8388608, o <<= 1; + for (; !(o & 8388608); ) 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] = r15(t10); - for (let t10 = 1024; t10 < 2048; t10++) - e[t10] = 939524096 + (t10 - 1024 << 13); + for (let t10 = 1; t10 < 1024; t10++) e[t10] = r15(t10); + for (let t10 = 1024; t10 < 2048; t10++) e[t10] = 939524096 + (t10 - 1024 << 13); return e; } function _4() { let r15 = new Uint32Array(64); r15[0] = 0, r15[31] = 1199570944, r15[32] = 2147483648, r15[63] = 3347054592; - for (let e = 1; e < 31; e++) - r15[e] = e << 23; - for (let e = 33; e < 63; e++) - r15[e] = 2147483648 + (e - 32 << 23); + for (let e = 1; e < 31; e++) r15[e] = e << 23; + for (let e = 33; e < 63; e++) r15[e] = 2147483648 + (e - 32 << 23); return r15; } function E4() { let r15 = new Uint32Array(64); - for (let e = 0; e < 64; e++) - r15[e] = 1024; + for (let e = 0; e < 64; e++) r15[e] = 1024; return r15[0] = r15[32] = 0, r15; } function $4() { @@ -5271,11 +4911,9 @@ var Dw = 1; var Lu = "models_store"; var ou = "model_info_store"; function yk() { - if (!A().getBool("IS_BROWSER")) - throw new Error("Failed to obtain IndexedDB factory because the current environmentis not a web browser."); + if (!A().getBool("IS_BROWSER")) throw new Error("Failed to obtain IndexedDB factory because the current environmentis not a web browser."); let r15 = typeof window == "undefined" ? self : window, e = r15.indexedDB || r15.mozIndexedDB || r15.webkitIndexedDB || r15.msIndexedDB || r15.shimIndexedDB; - if (e == null) - throw new Error("The current browser does not appear to support IndexedDB."); + if (e == null) throw new Error("The current browser does not appear to support IndexedDB."); return e; } function Aw(r15) { @@ -5284,13 +4922,11 @@ function Aw(r15) { } var ka = class { constructor(e) { - if (this.indexedDB = yk(), e == null || !e) - throw new Error("For IndexedDB, modelPath must not be null, undefined or empty."); + if (this.indexedDB = yk(), 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."); + 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() { @@ -5304,8 +4940,7 @@ var ka = class { if (t10 == null) { let i = a.transaction(Lu, "readonly"), u = i.objectStore(Lu).get(this.modelPath); u.onsuccess = () => { - if (u.result == null) - return a.close(), n(new Error(`Cannot find model with path '${this.modelPath}' in IndexedDB.`)); + 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 { @@ -5359,8 +4994,7 @@ var ud = class { let n = o.result, s = n.transaction(ou, "readonly"), i = s.objectStore(ou).getAll(); i.onsuccess = () => { let p = {}; - for (let u of i.result) - p[u.modelPath] = u.modelArtifactsInfo; + 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); @@ -5372,8 +5006,7 @@ var ud = class { n.onupgradeneeded = () => Aw(n), n.onsuccess = () => { let s = n.result, a = s.transaction(ou, "readwrite"), i = a.objectStore(ou), 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.`)); + 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(Lu, "readwrite"); @@ -5400,13 +5033,11 @@ function wk(r15) { return { info: [rc, r15, Ck].join(ai), topology: [rc, r15, A4].join(ai), weightSpecs: [rc, r15, F4].join(ai), weightData: [rc, r15, P4].join(ai), modelMetadata: [rc, r15, O4].join(ai) }; } function Sk(r15) { - for (let e of Object.values(r15)) - window.localStorage.removeItem(e); + for (let e of Object.values(r15)) window.localStorage.removeItem(e); } function M4(r15) { let e = r15.split(ai); - if (e.length < 3) - throw new Error(`Invalid key format: ${r15}`); + if (e.length < 3) throw new Error(`Invalid key format: ${r15}`); return e.slice(1, e.length - 1).join(ai); } function L4(r15) { @@ -5414,15 +5045,12 @@ function L4(r15) { } var Na = class { constructor(e) { - if (!A().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."); + if (!A().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 = wk(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."); + 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 = va(e), s = ir.join(e.weightData); try { @@ -5436,17 +5064,13 @@ var Na = class { } 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."); + 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 t10 = {}, 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.`); + if (o == null) throw new Error(`In local storage, the topology of model '${this.modelPath}' is missing.`); t10.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.`); + if (n == null) throw new Error(`In local storage, the weight specs of model '${this.modelPath}' are missing.`); t10.weightSpecs = n; let s = this.LS.getItem(this.keys.modelMetadata); if (s != null) { @@ -5454,8 +5078,7 @@ var Na = class { 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); } 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.`); + if (a == null) throw new Error(`In local storage, the binary weight values of model '${this.modelPath}' are missing.`); return t10.weightData = mk(a), t10; } }; @@ -5484,8 +5107,7 @@ var pd = class { async removeModel(e) { e = L4(e); let t10 = wk(e); - if (this.LS.getItem(t10.info) == null) - throw new Error(`Cannot find model at path '${e}'`); + if (this.LS.getItem(t10.info) == null) throw new Error(`Cannot find model at path '${e}'`); let o = JSON.parse(this.LS.getItem(t10.info)); return Sk(t10), o; } @@ -5505,8 +5127,7 @@ var Os = class r4 { } static getManager(e) { let t10 = r4.getInstance().managers[e]; - if (t10 == null) - throw new Error(`Cannot find model manager for scheme '${e}'`); + if (t10 == null) throw new Error(`Cannot find model manager for scheme '${e}'`); return t10; } static getSchemes() { @@ -5514,8 +5135,7 @@ var Os = class r4 { } }; function cd(r15) { - if (r15.indexOf(oc) === -1) - throw new Error(`The url string provided does not contain a scheme. Supported schemes are: ${Os.getSchemes().join(",")}`); + if (r15.indexOf(oc) === -1) throw new Error(`The url string provided does not contain a scheme. Supported schemes are: ${Os.getSchemes().join(",")}`); return { scheme: r15.split(oc)[0], path: r15.split(oc)[1] }; } async function vk(r15, e, t10 = false) { @@ -5561,8 +5181,7 @@ var Fw = class { 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}`); + if (t10 !== "utf-8" && t10 !== "utf8") throw new Error(`Browser's encoder only supports utf-8, but got ${t10}`); return this.textEncoder == null && (this.textEncoder = new TextEncoder()), this.textEncoder.encode(e); } decode(e, t10) { @@ -5612,8 +5231,7 @@ var Ow = class { 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}`); + if (t10 !== "utf-8" && t10 !== "utf8") throw new Error(`Node built-in encoder only supports utf-8, but got ${t10}`); return this.textEncoder.encode(e); } decode(e, t10) { @@ -5629,10 +5247,8 @@ function me(r15, e = "float32", t10) { } function V4(r15, e) { let t10 = v(r15, "x", "cast"); - if (!rw(e)) - throw new Error(`Failed to cast to unknown dtype ${e}`); - if (e === "string" && t10.dtype !== "string" || e !== "string" && t10.dtype === "string") - throw new Error("Only strings can be casted to strings"); + if (!rw(e)) throw new Error(`Failed to cast to unknown dtype ${e}`); + if (e === "string" && t10.dtype !== "string" || e !== "string" && t10.dtype === "string") throw new Error("Only strings can be casted to strings"); let o = { x: t10 }, n = { dtype: e }; return T.runKernel(yo, o, n); } @@ -5664,8 +5280,7 @@ function H4(r15, e) { var md = N({ floorDiv_: H4 }); function K4(r15, e) { let t10 = v(r15, "a", "div"), o = v(e, "b", "div"); - if ([t10, o] = Oe(t10, o), t10.dtype === "int32" && o.dtype === "int32") - return md(t10, o); + if ([t10, o] = Oe(t10, o), t10.dtype === "int32" && o.dtype === "int32") return md(t10, o); let n = { a: t10, b: o }, s = {}; return T.runKernel(fn, n, s); } @@ -5702,11 +5317,9 @@ function Q4(r15) { E(Array.isArray(r15), () => "The argument passed to tf.addN() must be a list of tensors"), E(r15.length >= 1, () => `Must pass at least one tensor to tf.addN(), but got ${r15.length}`); let e = r15.map((n, s) => v(n, `tensors${s}`, "addN")), t10 = e[0]; e.forEach((n) => { - if (n.dtype !== t10.dtype) - throw new Error("All tensors passed to tf.addN() must have the same dtype"); + if (n.dtype !== t10.dtype) throw new Error("All tensors passed to tf.addN() must have the same dtype"); }), e.forEach((n) => { - if (!br(n.shape, t10.shape)) - throw new Error("All tensors passed to tf.addN() must have the same shape"); + if (!br(n.shape, t10.shape)) throw new Error("All tensors passed to tf.addN() must have the same shape"); }); let o = e; return T.runKernel(Uo, o); @@ -5765,43 +5378,31 @@ function iH(r15, e, t10, o, n = "NHWC", s) { } function Lw(r15, e, t10, o, n, s, a = "channelsLast") { let [i, p] = Il(e), u; - if (a === "channelsLast") - u = [i, p, r15[3], r15[3]]; - else if (a === "channelsFirst") - u = [i, p, r15[1], r15[1]]; - else - throw new Error(`Unknown dataFormat ${a}`); + if (a === "channelsLast") u = [i, p, r15[3], r15[3]]; + else if (a === "channelsFirst") u = [i, p, r15[1], r15[1]]; + else throw new Error(`Unknown dataFormat ${a}`); return zu(r15, u, t10, o, n, s, false, a); } function uH(r15, e, t10, o, n, s, a = "NDHWC") { let [i, p, u] = Mw(e), c, l; - if (a === "NDHWC") - l = "channelsLast", c = [i, p, u, r15[4], r15[4]]; - else if (a === "NCDHW") - l = "channelsFirst", c = [i, p, u, r15[1], r15[1]]; - else - throw new Error(`Unknown dataFormat ${a}`); + if (a === "NDHWC") l = "channelsLast", c = [i, p, u, r15[4], r15[4]]; + else if (a === "NCDHW") l = "channelsFirst", c = [i, p, u, r15[1], r15[1]]; + else throw new Error(`Unknown dataFormat ${a}`); return Uk(r15, c, t10, o, n, false, l, s); } function zu(r15, e, t10, o, n, s, a = false, i = "channelsLast") { let [p, u, c, l] = [-1, -1, -1, -1]; - if (i === "channelsLast") - [p, u, c, l] = r15; - else if (i === "channelsFirst") - [p, l, u, c] = r15; - else - throw new Error(`Unknown dataFormat ${i}`); + if (i === "channelsLast") [p, u, c, l] = r15; + else if (i === "channelsFirst") [p, l, u, c] = r15; + else throw new Error(`Unknown dataFormat ${i}`); let [m, d, , f] = e, [h, g] = Il(t10), [x, b] = Il(o), C = nc(m, x), S = nc(d, b), { padInfo: k, outHeight: _, outWidth: $ } = lH(n, u, c, h, g, C, S, s, i), R = a ? f * l : f, D; return i === "channelsFirst" ? D = [p, R, _, $] : i === "channelsLast" && (D = [p, _, $, R]), { batchSize: p, dataFormat: i, inHeight: u, inWidth: c, inChannels: l, outHeight: _, outWidth: $, outChannels: R, padInfo: k, strideHeight: h, strideWidth: g, filterHeight: m, filterWidth: d, effectiveFilterHeight: C, effectiveFilterWidth: S, dilationHeight: x, dilationWidth: b, inShape: r15, outShape: D, filterShape: e }; } function Uk(r15, e, t10, 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] = r15; - else if (a === "channelsFirst") - [p, m, u, c, l] = r15; - else - throw new Error(`Unknown dataFormat ${a}`); + if (a === "channelsLast") [p, u, c, l, m] = r15; + else if (a === "channelsFirst") [p, m, u, c, l] = r15; + else throw new Error(`Unknown dataFormat ${a}`); let [d, f, h, , g] = e, [x, b, C] = Mw(t10), [S, k, _] = Mw(o), $ = nc(d, S), R = nc(f, k), D = nc(h, _), { padInfo: P, outDepth: O, outHeight: M, outWidth: L } = mH(n, u, c, l, x, b, C, $, R, D, i), B = s ? g * m : g, z; return a === "channelsFirst" ? z = [p, B, O, M, L] : a === "channelsLast" && (z = [p, O, M, L, B]), { batchSize: p, dataFormat: a, inDepth: u, inHeight: c, inWidth: l, inChannels: m, outDepth: O, outHeight: M, outWidth: L, outChannels: B, padInfo: P, strideDepth: x, strideHeight: b, strideWidth: C, filterDepth: d, filterHeight: f, filterWidth: h, effectiveFilterDepth: $, effectiveFilterHeight: R, effectiveFilterWidth: D, dilationDepth: S, dilationHeight: k, dilationWidth: _, inShape: r15, outShape: z, filterShape: e }; } @@ -5813,8 +5414,7 @@ function pH(r15, e, t10, o, n) { function cH(r15, e, t10, o, n, s) { n == null && (n = Bw(r15, e[0], o[0])); let a = [0, 0, 0, t10]; - for (let i = 0; i < 3; i++) - r15[i] + 2 * n >= e[i] && (a[i] = vl((r15[i] - e[i] + 2 * n) / o[i] + 1, s)); + for (let i = 0; i < 3; i++) r15[i] + 2 * n >= e[i] && (a[i] = vl((r15[i] - e[i] + 2 * n) / o[i] + 1, s)); return a; } function Bw(r15, e, t10, o = 1) { @@ -5840,13 +5440,11 @@ function lH(r15, e, t10, o, n, s, a, i, p) { c = Math.ceil(e / o), l = Math.ceil(t10 / n); let m = Math.max(0, (c - 1) * o + s - e), d = Math.max(0, (l - 1) * n + a - t10), 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 (r15 === "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); + } else if (r15 === "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); else if (typeof r15 == "object") { let m = p === "channelsLast" ? r15[1][0] : r15[2][0], d = p === "channelsLast" ? r15[1][1] : r15[2][1], f = p === "channelsLast" ? r15[2][0] : r15[3][0], h = p === "channelsLast" ? r15[2][1] : r15[3][1]; u = { top: m, bottom: d, left: f, right: h, type: m === 0 && d === 0 && f === 0 && h === 0 ? "VALID" : "EXPLICIT" }, c = vl((e - s + m + d) / o + 1, i), l = vl((t10 - a + f + h) / n + 1, i); - } else - throw Error(`Unknown padding parameter: ${r15}`); + } else throw Error(`Unknown padding parameter: ${r15}`); return { padInfo: u, outHeight: c, outWidth: l }; } function mH(r15, e, t10, o, n, s, a, i, p, u, c) { @@ -5859,13 +5457,11 @@ function mH(r15, e, t10, o, n, s, a, i, p, u, c) { m = Math.ceil(e / n), d = Math.ceil(t10 / s), f = Math.ceil(o / a); let h = (m - 1) * n + i - e, g = (d - 1) * s + p - t10, x = (f - 1) * a + u - o, b = Math.floor(h / 2), C = h - b, S = Math.floor(g / 2), k = g - S, _ = Math.floor(x / 2), $ = x - _; l = { top: S, bottom: k, left: _, right: $, front: b, back: C, type: "SAME" }; - } else - throw Error(`Unknown padding parameter: ${r15}`); + } else throw Error(`Unknown padding parameter: ${r15}`); return { padInfo: l, outDepth: m, outHeight: d, outWidth: f }; } function vl(r15, e) { - if (!e) - return Math.trunc(r15); + if (!e) return Math.trunc(r15); switch (e) { case "round": return Math.round(r15); @@ -5888,26 +5484,20 @@ function Ta(r15) { return Il(r15).every((e) => e > 0); } function Gk(r15) { - if (r15 === "NHWC") - return "channelsLast"; - if (r15 === "NCHW") - return "channelsFirst"; + if (r15 === "NHWC") return "channelsLast"; + if (r15 === "NCHW") return "channelsFirst"; throw new Error(`Unknown dataFormat ${r15}`); } function Lt(r15, e, t10) { if (t10 != null) { - if (typeof e == "string") - throw Error(`Error in ${r15}: pad must be an integer when using dimRoundingMode ${t10} but got pad ${e}.`); - if (typeof e == "number") - E(Ka(e), () => `Error in ${r15}: pad must be an integer when using dimRoundingMode ${t10} but got pad ${e}.`); - else if (typeof e == "object") - e.forEach((o) => { - o.forEach((n) => { - E(Ka(n), () => `Error in ${r15}: pad must be an integer when using dimRoundingMode ${t10} but got pad ${n}.`); - }); + if (typeof e == "string") throw Error(`Error in ${r15}: pad must be an integer when using dimRoundingMode ${t10} but got pad ${e}.`); + if (typeof e == "number") E(Ka(e), () => `Error in ${r15}: pad must be an integer when using dimRoundingMode ${t10} but got pad ${e}.`); + else if (typeof e == "object") e.forEach((o) => { + o.forEach((n) => { + E(Ka(n), () => `Error in ${r15}: pad must be an integer when using dimRoundingMode ${t10} but got pad ${n}.`); }); - else - throw Error(`Error in ${r15}: Unknown padding parameter: ${e}`); + }); + else throw Error(`Error in ${r15}: Unknown padding parameter: ${e}`); } } function dH(r15, e) { @@ -5935,11 +5525,9 @@ function gH(r15, e = 0) { E(r15.length >= 1, () => "Pass at least one tensor to concat"); let t10 = ni(r15, "tensors", "concat", "string_or_numeric"); if (t10[0].dtype === "complex64" && t10.forEach((s) => { - if (s.dtype !== "complex64") - throw new Error(`Cannot concatenate complex64 tensors with a tensor + if (s.dtype !== "complex64") throw new Error(`Cannot concatenate complex64 tensors with a tensor with dtype ${s.dtype}. `); - }), t10.length === 1) - return Ur(t10[0]); + }), t10.length === 1) return Ur(t10[0]); let o = t10, n = { axis: e }; return T.runKernel(ta, o, n); } @@ -5958,8 +5546,7 @@ function yH(r15) { var Ea = N({ sigmoid_: yH }); function bH(r15, e, t10) { let o = v(r15, "x", "slice", "string_or_numeric"); - if (o.rank === 0) - throw new Error("Slicing scalar is not possible"); + if (o.rank === 0) throw new Error("Slicing scalar is not possible"); let n = { x: o }, s = { begin: e, size: t10 }; return T.runKernel(ha, n, s); } @@ -6025,42 +5612,32 @@ function TH(r15, e, t10) { var hd = N({ bincount_: TH }); function _H(r15, e) { let t10 = v(r15, "x", "bitwiseAnd"), o = v(e, "y", "bitwiseAnd"); - if (!br(t10.shape, o.shape)) - throw new Error(`BitwiseAnd: Tensors must have the same shape. x: ${t10.shape}, y: ${o.shape}`); - if (t10.dtype !== "int32" || o.dtype !== "int32") - throw new Error(`BitwiseAnd: Only supports 'int32' values in tensor, found type of x: ${t10.dtype} and type of y: ${o.dtype}`); + if (!br(t10.shape, o.shape)) throw new Error(`BitwiseAnd: Tensors must have the same shape. x: ${t10.shape}, y: ${o.shape}`); + if (t10.dtype !== "int32" || o.dtype !== "int32") throw new Error(`BitwiseAnd: Only supports 'int32' values in tensor, found type of x: ${t10.dtype} and type of y: ${o.dtype}`); let n = { a: t10, b: o }; return T.runKernel(qa, n); } var Qk = N({ bitwiseAnd_: _H }); function EH(r15, e) { let t10 = v(r15, "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}`); - if (o.rank !== 1) - throw new Error(`broadcastArgs(): second input must be a vector (rank=1). Has rank ${o.rank}`); + if (t10.rank !== 1) throw new Error(`broadcastArgs(): first input must be a vector (rank=1). Has rank ${t10.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 T.runKernel(ea, n); } var Zk = N({ broadcastArgs_: EH }); function $H(r15, e) { let t10 = v(r15, "broadcastTo", "x"), o = t10.shape; - if (Ct(e), e.length < t10.rank) - throw new Error(`broadcastTo(): shape.length=${e.length} < input.rank=${t10.rank}.`); + if (Ct(e), 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(); - for (; u.length < e.length; ) - u.unshift(1); + for (; u.length < e.length; ) u.unshift(1); t10 = W(t10, u); } let n = t10.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) - 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 Ur(t10); + for (let u = e.length - 1; u >= 0; u--) if (n[u] === e[u]) s[u] = 1; + else if (t10.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 Ur(t10); let i = { x: t10 }, p = { reps: s }; return T.runKernel(po, i, p); } @@ -6077,8 +5654,7 @@ function $a(r15, e, t10) { } function DH(r15, e, t10) { let o = v(r15, "x", "clipByValue"); - if (E(e <= t10, () => `Error in clip: min (${e}) must be less than or equal to max (${t10}).`), e === t10) - return $a(o.shape, e, o.dtype); + if (E(e <= t10, () => `Error in clip: min (${e}) must be less than or equal to max (${t10}).`), e === t10) return $a(o.shape, e, o.dtype); let n = { x: o }, s = { clipValueMin: e, clipValueMax: t10 }; return T.runKernel(bo, n, s); } @@ -6237,15 +5813,12 @@ function rt(r15, e) { let s = r15[r15.length - n - 1]; s == null && (s = 1); let a = e[e.length - n - 1]; - if (a == null && (a = 1), s === 1) - o[t10 - n - 1] = a; - else if (a === 1) - o[t10 - n - 1] = s; + if (a == null && (a = 1), s === 1) o[t10 - n - 1] = a; + else if (a === 1) o[t10 - n - 1] = s; else if (s !== a) { let i = `Operands could not be broadcast together with shapes ${r15} and ${e}.`; throw Error(i); - } else - o[t10 - n - 1] = s; + } else o[t10 - n - 1] = s; } return o; } @@ -6304,8 +5877,7 @@ function sK(r15) { var bd = N({ elu_: sK }); function aK(r15, e) { let t10 = v(r15, "x", "ensureShape", "string_or_numeric"); - if (!ZC(t10.shape, e)) - throw new Error(`EnsureShape: Shape of tensor ${t10.shape} is not compatible with expected shape ${e}`); + if (!ZC(t10.shape, e)) throw new Error(`EnsureShape: Shape of tensor ${t10.shape} is not compatible with expected shape ${e}`); return r15; } var w2 = N({ ensureShape_: aK }); @@ -6317,21 +5889,17 @@ function iK(r15) { } var S2 = N({ erf_: iK }); function zw(r15, e) { - for (let t10 = 0; t10 < r15.length; ++t10) - if (r15[r15.length - t10 - 1] !== e - 1 - t10) - return false; + for (let t10 = 0; t10 < r15.length; ++t10) if (r15[r15.length - t10 - 1] !== e - 1 - t10) return false; return true; } function I2(r15, e, t10) { let o = r15.length + e.length, n = [], s = 0, a = 0; - for (let i = 0; i < o; i++) - t10.indexOf(i) === -1 ? n.push(r15[s++]) : n.push(e[a++]); + for (let i = 0; i < o; i++) t10.indexOf(i) === -1 ? n.push(r15[s++]) : n.push(e[a++]); return n; } function uK(r15, e) { let t10 = [], o = r15.length; - for (let s = 0; s < o; s++) - e.indexOf(s) === -1 && t10.push(r15[s]); + for (let s = 0; s < o; s++) e.indexOf(s) === -1 && t10.push(r15[s]); let n = e.map((s) => r15[s]); return [t10, n]; } @@ -6343,11 +5911,9 @@ function pK(r15, e, t10) { E(zw(e, t10), () => `${r15} supports only inner-most axes for now. Got axes ${e} and rank-${t10} input.`); } function cK(r15, e) { - if (zw(r15, e)) - return null; + if (zw(r15, e)) return null; let t10 = []; - for (let o = 0; o < e; ++o) - r15.indexOf(o) === -1 && t10.push(o); + for (let o = 0; o < e; ++o) r15.indexOf(o) === -1 && t10.push(o); return r15.forEach((o) => t10.push(o)), t10; } function lK(r15) { @@ -6355,8 +5921,7 @@ function lK(r15) { } function mK(r15, e) { let t10 = []; - for (let o = e - r15; o < e; ++o) - t10.push(o); + for (let o = e - r15; o < e; ++o) t10.push(o); return t10; } function fK(r15, e = null, t10 = false) { @@ -6377,10 +5942,8 @@ function gK(r15, e) { } var ui = N({ pow_: gK }); function ke(r15, e) { - if ((Pt(r15) && e !== "string" || Array.isArray(r15)) && e !== "complex64") - throw new Error("Error creating a new Scalar: value must be a primitive (number|boolean|string)"); - if (e === "string" && Pt(r15) && !(r15 instanceof Uint8Array)) - throw new Error("When making a scalar from encoded string, the value must be `Uint8Array`."); + if ((Pt(r15) && e !== "string" || Array.isArray(r15)) && e !== "complex64") throw new Error("Error creating a new Scalar: value must be a primitive (number|boolean|string)"); + if (e === "string" && Pt(r15) && !(r15 instanceof Uint8Array)) throw new Error("When making a scalar from encoded string, the value must be `Uint8Array`."); return wr(r15, [], [], e); } function xK(r15) { @@ -6410,30 +5973,20 @@ function CK(r15, e = "euclidean", t10 = null, o = false) { return W(n, s); } function v2(r15, e, t10 = null) { - if (r15.rank === 0) - return Qt(r15); - if (r15.rank !== 1 && t10 === null) - return v2(W(r15, [-1]), e, t10); + if (r15.rank === 0) return Qt(r15); + if (r15.rank !== 1 && t10 === null) return v2(W(r15, [-1]), e, t10); if (r15.rank === 1 || typeof t10 == "number" || Array.isArray(t10) && t10.length === 1) { - if (e === 1) - return ot(Qt(r15), t10); - if (e === 1 / 0) - return Ra(Qt(r15), t10); - if (e === -1 / 0) - return Nl(Qt(r15), t10); - if (e === "euclidean" || e === 2) - return Rr(ot(ui(Qt(r15), ke(2, "int32")), t10)); + if (e === 1) return ot(Qt(r15), t10); + if (e === 1 / 0) return Ra(Qt(r15), t10); + if (e === -1 / 0) return Nl(Qt(r15), t10); + if (e === "euclidean" || e === 2) return Rr(ot(ui(Qt(r15), ke(2, "int32")), t10)); throw new Error(`Error in norm: invalid ord value: ${e}`); } if (Array.isArray(t10) && t10.length === 2) { - if (e === 1) - return Ra(ot(Qt(r15), t10[0]), t10[1] - 1); - if (e === 1 / 0) - return Ra(ot(Qt(r15), t10[1]), t10[0]); - if (e === -1 / 0) - return Nl(ot(Qt(r15), t10[1]), t10[0]); - if (e === "fro" || e === "euclidean") - return Rr(ot(Zt(r15), t10)); + if (e === 1) return Ra(ot(Qt(r15), t10[0]), t10[1] - 1); + if (e === 1 / 0) return Ra(ot(Qt(r15), t10[1]), t10[0]); + if (e === -1 / 0) return Nl(ot(Qt(r15), t10[1]), t10[0]); + if (e === "fro" || e === "euclidean") return Rr(ot(Zt(r15), t10)); throw new Error(`Error in norm: invalid ord value: ${e}`); } throw new Error(`Error in norm: invalid axis: ${t10}`); @@ -6470,17 +6023,12 @@ var uu = N({ tile_: kK }); function NK(r15, e, t10, o = "float32") { e == null && (e = r15); let n = me([r15, e], o), s = r15 <= e ? r15 : e; - for (let i = 0; i < s; ++i) - n.set(1, i, i); + for (let i = 0; i < s; ++i) n.set(1, i, i); let a = W(n.toTensor(), [r15, e]); - if (t10 == null) - return a; - if (t10.length === 1) - return uu(Ms(a, 0), [t10[0], 1, 1]); - if (t10.length === 2) - return uu(Ms(Ms(a, 0), 0), [t10[0], t10[1], 1, 1]); - if (t10.length === 3) - return uu(Ms(Ms(Ms(a, 0), 0), 0), [t10[0], t10[1], t10[2], 1, 1]); + if (t10 == null) return a; + if (t10.length === 1) return uu(Ms(a, 0), [t10[0], 1, 1]); + if (t10.length === 2) return uu(Ms(Ms(a, 0), 0), [t10[0], t10[1], 1, 1]); + if (t10.length === 3) return uu(Ms(Ms(Ms(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.`); } var Cd = N({ eye_: NK }); @@ -6548,8 +6096,7 @@ function MK(r15, e) { } var ac = N({ lessEqual_: MK }); function $2(r15, e, t10) { - if (t10 <= 0) - throw new Error("The number of values should be positive."); + if (t10 <= 0) throw new Error("The number of values should be positive."); let o = { start: r15, stop: e, num: t10 }; return T.runKernel(An, {}, o); } @@ -6611,8 +6158,7 @@ function Vw(r15, e) { let t10 = e != null; if (!t10) { e = []; - for (let u in T.registeredVariables) - e.push(T.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(e.length > 0, () => `variableGrads() expects at least one of the input variables to be trainable, but none of the ${n} variables is trainable.`); @@ -6627,8 +6173,7 @@ function Ir(r15) { return T.customGrad(r15); } function Nd(r15) { - if (r15.filter((t10) => t10 == null).length > 0) - throw new Error(`Cannot compute gradient of y=f(x) with respect to x. Make sure that + if (r15.filter((t10) => t10 == 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 HK(r15) { @@ -6655,8 +6200,7 @@ function jK(r15, e) { var Te = N({ sub_: jK }); function XK(r15, e = -1) { let t10 = v(r15, "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}`); + 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}`); return Ir((n, s) => { let i = Ra(n, e, true), p = Te(n, i), u = Te(Ue(p, "float32"), pi(ot(_o(p), e, true))); return s([u]), { value: u, gradFunc: (l, m) => { @@ -6702,14 +6246,10 @@ var F2 = N({ logicalXor_: eq }); var Rd = 2147483648; function tq(r15, e, t10 = "left") { let o = v(r15, "sortedSequence", "searchSorted"), n = v(e, "values", "searchSorted"), s = o.shape[o.shape.length - 1], a = n.shape[n.shape.length - 1], i = W(o, [-1, s]), p = W(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) >= Rd) - throw new Error(`values tensor size must less than ${Rd}`); - if (i.shape[1] >= Rd) - throw new Error(`trailing dim_size must less than ${Rd} for int32 output type, was ${i.shape[1]}`); + 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) >= Rd) throw new Error(`values tensor size must less than ${Rd}`); + if (i.shape[1] >= Rd) throw new Error(`trailing dim_size must less than ${Rd} for int32 output type, was ${i.shape[1]}`); let u = { sortedSequence: i, values: p }, c = { side: t10 }; return T.runKernel(fs, u, c); } @@ -6765,13 +6305,10 @@ function Da(r15, e = "float32") { return T.makeTensor(t10, r15, e); } function L2(r15, e, { indexing: t10 = "xy" } = {}) { - if (t10 !== "xy" && t10 !== "ij") - throw new TypeError(`${t10} is not a valid third argument to meshgrid`); - if (r15 === void 0) - return []; + if (t10 !== "xy" && t10 !== "ij") throw new TypeError(`${t10} is not a valid third argument to meshgrid`); + if (r15 === void 0) return []; let o = v(r15, "x", "meshgrid", r15 instanceof mt ? r15.dtype : "float32"); - if (e === void 0) - return [o]; + if (e === void 0) return [o]; let n = v(e, "y", "meshgrid", e instanceof mt ? e.dtype : "float32"), s = ze(o.shape), a = ze(n.shape); return t10 === "xy" ? (o = W(o, [1, -1]), n = W(n, [-1, 1]), [Ze(Da([a, 1], o.dtype), o), Ze(n, Da([1, s], n.dtype))]) : (o = W(o, [-1, 1]), n = W(n, [1, -1]), [Ze(o, Da([1, a], o.dtype)), Ze(Da([s, 1], n.dtype), n)]); } @@ -6785,12 +6322,10 @@ var Hu = N({ minimum_: iq }); function uq(r15, e, t10) { E(t10 === "reflect" || t10 === "symmetric", () => `Invalid mode. Mode must be either reflect or symmetric. Got ${t10}.`); let o = v(r15, "x", "mirrorPad"); - if (o.rank === 0) - throw new Error("mirrorPad(scalar) is not defined. Pass non-scalar to 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 = t10 === "reflect" ? 1 : 0; - for (let i = 0; i < o.rank; i++) - 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}`); + for (let i = 0; i < o.rank; i++) 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: t10 }, a = { x: o }; return T.runKernel(Kn, a, s); } @@ -6817,17 +6352,14 @@ function lq(r15, e, t10, o) { p.push(m[0]), p.push(m[1]), i = m[1]; } let u = [], c = []; - for (let l = 0; l < p.length; l += 2) - u.push(p[l]), c.push(p[l + 1]); + for (let l = 0; l < p.length; l += 2) u.push(p[l]), c.push(p[l + 1]); return [u, c]; } var W2 = N({ multiRNNCell_: lq }); function mq(r15, e, t10, o = false) { let n = v(r15, "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}`); + 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 ? W(n, [1, -1]) : n }, u = { numSamples: e, seed: t10, normalized: o }, c = T.runKernel(jn, p, u); return a === 1 ? W(c, [c.size]) : c; @@ -6841,8 +6373,7 @@ function dq(r15, e) { } var Fd = N({ notEqual_: dq }); function fq(r15, e, t10 = 1, o = 0, n = "int32") { - if (e < 2) - throw new Error(`Error in oneHot: depth must be >=2, but it is ${e}`); + if (e < 2) throw new Error(`Error in oneHot: depth must be >=2, but it is ${e}`); let a = { indices: v(r15, "indices", "oneHot", "int32") }, i = { dtype: n, depth: e, onValue: t10, offValue: o }; return T.runKernel(Jn, a, i); } @@ -6861,8 +6392,7 @@ function gq(r15, e) { var H2 = N({ outerProduct_: gq }); function xq(r15, e, t10 = 0) { let o = v(r15, "x", "pad"); - if (o.rank === 0) - throw new Error("pad(scalar) is not defined. Pass non-scalar to 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 T.runKernel(es, s, n); } @@ -6938,16 +6468,11 @@ var e1 = N({ raggedTensorToTensor_: $q }); function Rq(r15, e, t10) { Ct(r15); let o = ze(r15), n = null; - if (t10 == null || t10 === "float32") - n = new Float32Array(o); - else if (t10 === "int32") - n = new Int32Array(o); - else if (t10 === "bool") - n = new Uint8Array(o); - else - throw new Error(`Unknown data type ${t10}`); - for (let s = 0; s < o; s++) - n[s] = e(); + if (t10 == null || t10 === "float32") n = new Float32Array(o); + else if (t10 === "int32") n = new Int32Array(o); + else if (t10 === "bool") n = new Uint8Array(o); + else throw new Error(`Unknown data type ${t10}`); + for (let s = 0; s < o; s++) n[s] = e(); return T.makeTensor(n, r15, t10); } var t1 = N({ rand_: Rq }); @@ -6966,23 +6491,19 @@ function Xw(r15, e, t10) { let o = true; if ((Pt(r15) || Pt(e)) && (o = false), Pt(r15) && Pt(e) && (o = true), o) { let a = r15.constructor.name, i = e.constructor.name; - if (a !== i) - throw new Error(`Arrays are of different type. Actual: ${a}. Expected: ${i}`); + if (a !== i) throw new Error(`Arrays are of different type. Actual: ${a}. Expected: ${i}`); } if (Array.isArray(r15) && Array.isArray(e)) { let a = sr(r15), i = sr(e); - if (!br(a, i)) - throw new Error(`Arrays have different shapes. Actual: [${a}]. Expected: [${i}]`); + if (!br(a, i)) throw new Error(`Arrays have different shapes. Actual: [${a}]. Expected: [${i}]`); } let n = Pt(r15) ? r15 : Fs(r15), s = Pt(e) ? e : Fs(e); - if (n.length !== s.length) - throw new Error(`Arrays have different lengths actual: ${n.length} vs expected: ${s.length}. + 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)) - throw new Error(`Arrays differ: actual[${a}] = ${i}, expected[${a}] = ${p}. + if (!t10(i, p)) throw new Error(`Arrays differ: actual[${a}] = ${i}, expected[${a}] = ${p}. Actual: ${n}. Expected: ${s}.`); } @@ -6996,25 +6517,19 @@ function Vq(r15, e) { return zo(r15) || zo(r15[0]) || zo(e) || zo(e[0]) ? Xw(r15, t10, (o, n) => o == n) : Xw(r15, e, (o, n) => Yw(o, n, 0)); } function b1(r15, e, t10) { - if (t10 == null && (t10 = Ld()), !Yw(r15, e, t10)) - throw new Error(`Numbers differ: actual === ${r15}, expected === ${e}`); + if (t10 == null && (t10 = Ld()), !Yw(r15, e, t10)) throw new Error(`Numbers differ: actual === ${r15}, expected === ${e}`); typeof expect != "undefined" && expect().nothing(); } function Yw(r15, e, t10) { return !isFinite(r15) && !isFinite(e) ? true : !(isNaN(r15) || isNaN(e) || Math.abs(r15 - e) > t10); } function Wq(r15, e, t10) { - for (let o = 0; o < r15.length; o++) - if (r15[o] < e || r15[o] > t10) - throw new Error(`Value out of range:${r15[o]} low: ${e}, high: ${t10}`); + for (let o = 0; o < r15.length; o++) if (r15[o] < e || r15[o] > t10) throw new Error(`Value out of range:${r15[o]} low: ${e}, high: ${t10}`); } function Uq(r15, e) { let t10 = new Float32Array(r15), 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}`); - 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 (t10.length !== o.length) throw new Error(`Expected ArrayBuffer to be of length ${o.length}, but it was ${t10.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`); } function C1(r15) { for (let e = 0; e < r15.length; e++) { @@ -7075,8 +6590,7 @@ var Bd = class { 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) - break; + 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) break; } return a = 1 / this.beta * this.d * a, this.alpha < 1 && (a *= Math.pow(this.randu(), 1 / this.alpha)), this.convertValue(a); } @@ -7086,8 +6600,7 @@ var Bd = class { }; var zd = 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`); + 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 = Vd.alea(n); } convertValue(e) { @@ -7098,34 +6611,28 @@ var zd = class { } }; function Kq(r15, e, t10 = 1, o = "float32", n) { - if (Ct(r15), t10 == null && (t10 = 1), o == null && (o = "float32"), o !== "float32" && o !== "int32") - throw new Error(`Unsupported data type ${o}`); + if (Ct(r15), t10 == null && (t10 = 1), o == null && (o = "float32"), o !== "float32" && o !== "int32") throw new Error(`Unsupported data type ${o}`); let s = new Bd(e, t10, o, n), a = me(r15, o); - for (let i = 0; i < a.values.length; i++) - a.values[i] = s.nextValue(); + for (let i = 0; i < a.values.length; i++) a.values[i] = s.nextValue(); return a.toTensor(); } var S1 = N({ randomGamma_: Kq }); function qq(r15, e = 0, t10 = 1, o, n) { - if (Ct(r15), o != null && o === "bool") - throw new Error(`Unsupported data type ${o}`); + if (Ct(r15), o != null && o === "bool") throw new Error(`Unsupported data type ${o}`); let s = new qu(e, t10, o, false, n), a = me(r15, o); - for (let i = 0; i < a.values.length; i++) - a.values[i] = s.nextValue(); + for (let i = 0; i < a.values.length; i++) a.values[i] = s.nextValue(); return a.toTensor(); } var Wd = N({ randomNormal_: qq }); function jq(r15, e, t10) { - if (e != null && e === "bool") - throw new Error(`Unsupported data type ${e}`); + if (e != null && e === "bool") throw new Error(`Unsupported data type ${e}`); return Wd(r15, 0, 1, e, t10); } var I1 = N({ randomStandardNormal_: jq }); function Xq(r15, e = 0, t10 = 1, o = "float32", n) { Ct(r15); let s = me(r15, o), a = new zd(e, t10, null, n); - for (let i = 0; i < s.values.length; i++) - s.values[i] = a.nextValue(); + for (let i = 0; i < s.values.length; i++) s.values[i] = a.nextValue(); return s.toTensor(); } var ic = N({ randomUniform_: Xq }); @@ -7134,8 +6641,7 @@ function Yq(r15, e, t10, o) { } var v1 = N({ randomUniformInt_: Yq }); function cu(r15, e, t10 = 1, o = "float32") { - if (t10 === 0) - throw new Error("Cannot have a step of zero"); + if (t10 === 0) throw new Error("Cannot have a step of zero"); let n = { start: r15, stop: e, step: t10, dtype: o }; return T.runKernel(ma, {}, n); } @@ -7201,8 +6707,7 @@ function u6(r15) { var R1 = N({ selu_: u6 }); function p6(r15, e, t10, o, n, s = [1, 1], a = "NHWC") { let i = v(r15, "x", "separableConv2d"), p = v(e, "depthwiseFilter", "separableConv2d"), u = v(t10, "pointwiseFilter", "separableConv2d"), c = i, l = false; - if (i.rank === 3 && (l = true, c = W(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"); + if (i.rank === 3 && (l = true, c = W(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]}.`); @@ -7214,11 +6719,9 @@ async function c6(r15, e) { let t10 = v(r15, "x", "setdiff1d"), o = v(e, "y", "setdiff1d"); E(t10.dtype === o.dtype, () => `x and y should have the same dtype, but got x (${t10.dtype}) and y (${o.dtype}).`), E(t10.rank === 1, () => `x should be 1D tensor, but got x (${t10.shape}).`), E(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; - for (let c = 0; c < n.length; c++) - a.has(n[c]) || i++; + for (let c = 0; c < n.length; c++) a.has(n[c]) || i++; let p = new tt([i], t10.dtype), u = new tt([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++); + 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 A1 = c6; @@ -7259,8 +6762,7 @@ function x6(r15, e, t10) { var z1 = N({ slice4d_: x6 }); function y6(r15, e = -1) { let t10 = v(r15, "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}`); + 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 T.runKernel(Is, o, n); } @@ -7307,8 +6809,7 @@ function I6(r15, e) { } else if (e != null && e > t10) { let f = r15.shape.map((h) => h); f[r15.shape.length - 1] = e - t10, n = yt([r15, Gr(f)], r15.shape.length - 1), t10 = e; - } else - n = r15; + } else n = r15; let s = Gt(n), a = W(Er(n, s), [o, t10]), i = uc(a), p = Math.floor(t10 / 2) + 1, u = ci(i), c = pu(i), l = li(u, [p, t10 - p], u.shape.length - 1), m = li(c, [p, t10 - p], c.shape.length - 1), d = n.shape.slice(); return d[n.shape.length - 1] = p, W(Er(l[0], m[0]), d); } @@ -7350,128 +6851,92 @@ var U1 = N({ tan_: E6 }); function Jt(r15, e) { io(r15); let t10 = sr(r15, e); - if (t10.length !== 1) - throw new Error("tensor1d() requires values to be a flat/TypedArray"); + if (t10.length !== 1) throw new Error("tensor1d() requires values to be a flat/TypedArray"); return wr(r15, null, t10, e); } function mu(r15, e, t10) { - if (io(r15), e != null && e.length !== 2) - throw new Error("tensor2d() requires shape to have two numbers"); + if (io(r15), e != null && e.length !== 2) throw new Error("tensor2d() requires shape to have two numbers"); let o = sr(r15, t10); - 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"); + 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 wr(r15, e, o, t10); } function jd(r15, e, t10) { - if (io(r15), e != null && e.length !== 3) - throw new Error("tensor3d() requires shape to have three numbers"); + if (io(r15), e != null && e.length !== 3) throw new Error("tensor3d() requires shape to have three numbers"); let o = sr(r15, t10); - 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"); + 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 wr(r15, e, o, t10); } function G1(r15, e, t10) { - if (io(r15), e != null && e.length !== 4) - throw new Error("tensor4d() requires shape to have four numbers"); + if (io(r15), e != null && e.length !== 4) throw new Error("tensor4d() requires shape to have four numbers"); let o = sr(r15, t10); - 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"); + 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 wr(r15, e, o, t10); } function H1(r15, e, t10) { - if (io(r15), e != null && e.length !== 5) - throw new Error("tensor5d() requires shape to have five numbers"); + if (io(r15), e != null && e.length !== 5) throw new Error("tensor5d() requires shape to have five numbers"); let o = sr(r15, t10); - 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"); + 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 wr(r15, e, o, t10); } function K1(r15, e, t10) { - if (io(r15), e != null && e.length !== 6) - throw new Error("tensor6d() requires shape to have six numbers"); + if (io(r15), e != null && e.length !== 6) throw new Error("tensor6d() requires shape to have six numbers"); let o = sr(r15, t10); - 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"); + 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, wr(r15, e, o, t10); } var du = {}; qe(du, { calculateShapes: () => q1, validateInput: () => lc, validateUpdateShape: () => Qw }); function Qw(r15, 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: ${r15}, sliceDim: ${o}, and batchDim: ${n}.`; - if (t10.rank < n) - throw new Error(s + ` update.rank < ${n}. `); - if (r15.length < o + (t10.rank - n)) - throw new Error(s + ` Output shape length < ${o + (t10.rank - n)}`); - if (t10.rank !== n + r15.length - o) - throw new Error(s + ` update.rank != ${n + r15.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] !== r15[a + o]) - throw new Error(s + ` updates.shape[${a + n}] (${t10.shape[a + n]}) != shape[${a + n}] (${r15[a + n]})`); + if (t10.rank < n) throw new Error(s + ` update.rank < ${n}. `); + if (r15.length < o + (t10.rank - n)) throw new Error(s + ` Output shape length < ${o + (t10.rank - n)}`); + if (t10.rank !== n + r15.length - o) throw new Error(s + ` update.rank != ${n + r15.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] !== r15[a + o]) throw new Error(s + ` updates.shape[${a + n}] (${t10.shape[a + n]}) != shape[${a + n}] (${r15[a + n]})`); } function lc(r15, e, t10) { - 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 (r15.rank < 1) - throw new Error(`tf.scatterND() expects the updates to be rank 1 or higher, but the rank was ${r15.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 (e.rank < 1) throw new Error(`tf.scatterND() expects the indices to be rank 1 or higher, but the rank was ${e.rank}.`); + if (r15.rank < 1) throw new Error(`tf.scatterND() expects the updates to be rank 1 or higher, but the rank was ${r15.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 (e.size === 0) - throw new Error(`Indices specified for empty output. indices shape: ${e.shape}`); - if (r15.size === 0) - throw new Error(`Updates specified for empty output. updates shape: ${r15.shape}`); + if (e.size === 0) throw new Error(`Indices specified for empty output. indices shape: ${e.shape}`); + if (r15.size === 0) throw new Error(`Updates specified for empty output. updates shape: ${r15.shape}`); } Qw(t10, e, r15); } function q1(r15, e, t10) { let o = e.shape.length, n = o > 1 ? e.shape[o - 1] : 1, s = t10.length, a = 1; - for (let l = n; l < s; ++l) - a *= t10[l]; + for (let l = n; l < s; ++l) a *= t10[l]; let i = n < 1 ? 1 : n, p = ze(e.shape) / i, u = [...js(t10.slice(0, n)), 1], c = ze(t10); return { sliceRank: n, numUpdates: p, sliceSize: a, strides: u, outputSize: c }; } function $6(r15, e, t10) { let o = v(r15, "tensor", "tensorScatterupdate"), n = v(e, "indices", "tensorScatterupdate", "int32"), s = v(t10, "updates", "tensorScatterupdate"); - if (lc(s, n, o.shape), o.dtype !== s.dtype) - throw new Error(`tensor and updates must have the same dtype, instead they are ${o.dtype} and ${s.dtype}.`); + if (lc(s, n, o.shape), o.dtype !== s.dtype) throw new Error(`tensor and updates must have the same dtype, instead they are ${o.dtype} and ${s.dtype}.`); let a = { tensor: o, indices: n, updates: s }, i = {}; return T.runKernel(ds, a, i); } var j1 = N({ tensorScatterUpdate_: $6 }); function R6(r15, e = 1, t10 = true) { let o = v(r15, "x", "topk"); - if (o.rank === 0) - throw new Error("topk() expects the input to be of rank 1 or higher"); + 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}`); + 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: t10 }, [i, p] = T.runKernel($s, s, a); return { values: i, indices: p }; } var X1 = N({ topk_: R6 }); function D6(r15, e = 0, t10 = 1, o, n) { - if (Ct(r15), o != null && o === "bool") - throw new Error("Unsupported data type $ { dtype }"); + if (Ct(r15), o != null && o === "bool") throw new Error("Unsupported data type $ { dtype }"); let s = new qu(e, t10, o, true, n), a = me(r15, o); - for (let i = 0; i < a.values.length; i++) - a.values[i] = s.nextValue(); + for (let i = 0; i < a.values.length; i++) a.values[i] = s.nextValue(); return a.toTensor(); } var Y1 = N({ truncatedNormal_: D6 }); @@ -7504,8 +6969,7 @@ function eN(r15, e = true, t10, o) { } function Xd(r15, e) { let t10 = []; - for (let s = 0; s < e.length; s++) - e[s] && t10.push(s); + for (let s = 0; s < e.length; s++) e[s] && t10.push(s); let o = me(r15, "int32"), n = me([t10.length, r15.length], "int32"); for (let s = 0; s < t10.length; s++) { let a = o.indexToLoc(t10[s]), i = s * r15.length; @@ -7522,8 +6986,7 @@ async function M6(r15, e, t10) { let o = v(r15, "tensor", "boolMask"), n = v(e, "mask", "boolMask", "bool"), s = t10 == null ? 0 : t10, a = n.rank, i = o.shape; E(a > 0, () => "mask cannot be scalar"), xt(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]; + for (let h = s; h < s + a; h++) p *= i[h]; let u = i.slice(0, s).concat([p], i.slice(s + a)), c = W(o, u), l = W(n, [-1]), m = await Yd(l), d = cc(m, [1]), f = Sd(c, d, s); return r15 !== o && o.dispose(), e !== n && n.dispose(), d.dispose(), c.dispose(), l.dispose(), m.dispose(), f; } @@ -7532,8 +6995,7 @@ function B6(r15, e, t10) { let o = v(r15, "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 < o.rank, () => `All entries in 'perm' must be between 0 and ${o.rank - 1} but got ${e}`); - }), o.rank <= 1) - return o.clone(); + }), o.rank <= 1) return o.clone(); let n = { x: o }, s = { perm: e }; return o.dtype === "complex64" ? De(() => { let a = ci(o), i = pu(o); @@ -7562,18 +7024,13 @@ function W6(r15, e, t10) { } var U6 = N({ scatterND_: W6 }); function tN(r15, e, t10, o) { - if (r15.dtype !== "int32") - throw new Error(`tf.sparseToDense() expects the indices to be int32 type, but the dtype was ${r15.dtype}.`); - if (r15.rank > 2) - throw new Error(`sparseIndices should be a scalar, vector, or matrix, but got shape ${r15.shape}.`); + if (r15.dtype !== "int32") throw new Error(`tf.sparseToDense() expects the indices to be int32 type, but the dtype was ${r15.dtype}.`); + if (r15.rank > 2) throw new Error(`sparseIndices should be a scalar, vector, or matrix, but got shape ${r15.shape}.`); let n = r15.rank > 0 ? r15.shape[0] : 1, s = r15.rank > 1 ? r15.shape[1] : 1; - if (t10.length !== s) - throw new Error(`outputShape has incorrect number of elements:, ${t10.length}, should be: ${s}.`); + if (t10.length !== s) throw new Error(`outputShape has incorrect number of elements:, ${t10.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"); + 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 H6(r15, e, t10, o = 0) { Ct(t10); @@ -7589,22 +7046,18 @@ function q6(r15, e) { } var j6 = N({ gatherND_: q6 }); function rN(r15, e) { - if (e == null) - return r15.shape.slice(); - if (br(r15.shape, e)) - return e; + if (e == null) return r15.shape.slice(); + if (br(r15.shape, e)) return e; if (r15.shape.length === e.length) { let t10 = []; - for (let o = 0; o < r15.shape.length; o++) - e[o] == null && r15.shape[o] != null ? t10.push(r15.shape[o]) : t10.push(e[o]); + for (let o = 0; o < r15.shape.length; o++) e[o] == null && r15.shape[o] != null ? t10.push(r15.shape[o]) : t10.push(e[o]); return t10; } return e; } function X6(r15, e, t10, o) { let n = v(r15, "x", "dropout"); - 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 r15 instanceof mt ? n.clone() : n; + 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 r15 instanceof mt ? n.clone() : n; let s = rN(n, t10), a = 1 - e, i = je(wd(Ce(ic(s, 0, 1, "float32", o), a)), a); return se(n, i); } @@ -7628,14 +7081,12 @@ async function Q6(r15, e, t10 = 1) { let a = await o.data(), i = await n.data(), [p, u] = [a.length / s, s], c = ew("bool", p); for (let l = 0; l < p; 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 }); + 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 < t10; h++) - if (f[h].index === i[l]) { - c[l] = 1; - break; - } + for (let h = 0; h < t10; h++) if (f[h].index === i[l]) { + c[l] = 1; + break; + } } return r15 !== o && o.dispose(), e !== n && n.dispose(), ar(c, n.shape, "bool"); } @@ -7654,10 +7105,8 @@ function J6(r15, e, t10, o, n, s = "NHWC", a) { } var oN = N({ conv2DBackpropFilter_: J6 }); function Xu(r15, e, t10) { - if (t10 == null || t10 === "linear") - return r15; - if (t10 === "relu") - return se(r15, qd(e)); + if (t10 == null || t10 === "linear") return r15; + if (t10 === "relu") return se(r15, qd(e)); throw new Error(`Cannot compute gradient for fused activation ${t10}.`); } function Yu(r15, e) { @@ -7665,20 +7114,13 @@ function Yu(r15, e) { return o.length > 0 && (t10 = ot(t10, o)), W(t10, r15.shape); } function Qu(r15, e, t10, o) { - if (e === "linear") - return r15; - if (e === "relu") - return lu(r15); - if (e === "elu") - return bd(r15); - if (e === "relu6") - return Ud(r15); - if (e === "prelu") - return Od(r15, t10); - if (e === "leakyrelu") - return vd(r15, o); - if (e === "sigmoid") - return Ea(r15); + if (e === "linear") return r15; + if (e === "relu") return lu(r15); + if (e === "elu") return bd(r15); + if (e === "relu6") return Ud(r15); + if (e === "prelu") return Od(r15, t10); + if (e === "leakyrelu") return vd(r15, o); + if (e === "sigmoid") return Ea(r15); throw new Error(`Unknown fused activation ${e}.`); } var Zu = (r15, e) => !(r15 > 0) || e === "linear"; @@ -7697,15 +7139,13 @@ function ej({ x: r15, filter: e, strides: t10, pad: o, dataFormat: n = "NHWC", d 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 { - rt(_, g.outShape); - } catch ($) { - let R = `Error in fused conv2d: PReLU activation weights (${_}) is not compatible with the output shape of the conv2d (${g.outShape}).`; - throw Error(R); - } + 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 { + rt(_, g.outShape); + } catch ($) { + 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 = (_, $) => { @@ -7791,8 +7231,7 @@ function nj({ a: r15, b: e, transposeA: t10 = false, transposeB: o = false, bias if (!t10 && !o ? (q = Ze(j, B, false, true), Y = Ze(L, j, true, false)) : !t10 && o ? (q = Ze(j, B, false, false), Y = Ze(j, L, true, false)) : t10 && !o ? (q = Ze(B, j, false, true), Y = Ze(L, j, false, false)) : (q = Ze(B, j, true, true), Y = Ze(j, L, true, true)), n != null) { let J = Yu(U, j); return [q, Y, J]; - } else - return [q, Y]; + } else return [q, Y]; }, D = { a: S, b: k, bias: _, preluActivationWeights: $ }, P = { transposeA: t10, transposeB: o, activation: s, leakyreluAlpha: i }; return n == null ? Ir((M, L, B) => { let z = T.runKernel(So, D, P); @@ -7813,13 +7252,11 @@ function aj(r15) { var Qd = N({ hannWindow_: aj }); function ij(r15, e, t10, o = false, n = 0) { let s = 0, a = []; - for (; s + e <= r15.size; ) - a.push(Xe(r15, s, e)), s += t10; - if (o) - for (; s < r15.size; ) { - let i = s + e - r15.size, p = yt([Xe(r15, s, e - i), $a([i], n)]); - a.push(p), s += t10; - } + for (; s + e <= r15.size; ) a.push(Xe(r15, s, e)), s += t10; + if (o) for (; s < r15.size; ) { + let i = s + e - r15.size, p = yt([Xe(r15, s, e - i), $a([i], n)]); + a.push(p), s += t10; + } return a.length === 0 ? mu([], [0, e]) : W(yt(a), [a.length, e]); } var Zd = N({ frame_: ij }); @@ -7925,14 +7362,12 @@ function tf(r15, e, t10, o, n, s) { } function eS(r15, e, t10, 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 }); + for (let g = 0; g < e.length; g++) e[g] > n && u.push({ score: e[g], boxIndex: g, suppressBeginIndex: 0 }); u.sort(yN); let c = s > 0 ? -0.5 / s : 0, l = [], m = []; for (; l.length < t10 && u.length > 0; ) { let g = u.pop(), { score: x, boxIndex: b, suppressBeginIndex: C } = g; - if (x < n) - break; + if (x < n) break; let S = false; for (let k = l.length - 1; k >= C; --k) { let _ = yj(r15, b, l[k]); @@ -7940,8 +7375,7 @@ function eS(r15, e, t10, o, n, s, a = false, i = false, p = false) { S = true; break; } - if (g.score = g.score * bj(o, c, _), g.score <= n) - break; + if (g.score = g.score * bj(o, c, _), g.score <= n) break; } g.suppressBeginIndex = l.length, S || (g.score === x ? (l.push(b), m.push(g.score)) : g.score > n && xN(u, g, yN)); } @@ -7952,8 +7386,7 @@ function eS(r15, e, t10, o, n, s, a = false, i = false, p = false) { } function yj(r15, e, t10) { let o = r15.subarray(e * 4, e * 4 + 4), n = r15.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]), d = (i - s) * (p - a), f = (l - u) * (m - c); - if (d <= 0 || f <= 0) - return 0; + 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); } @@ -8019,8 +7452,7 @@ function Tj(r15, e = "binary", t10 = false, o = 0.5) { [c, l, m] = li(n, [1, 1, 1], -1); let g = se(c, s), x = se(l, a), b = se(m, i); d = Ce(Ce(g, x), b); - } else - d = r15; + } else d = r15; if (e === "otsu") { let g = hd(Ue(Gd(d), "int32"), ar([]), 256); u = _j(g, p); @@ -8065,28 +7497,23 @@ function Rj(r15) { if (Array.isArray(r15)) { e = false, E(r15 != null && r15.length > 0, () => "Gram-Schmidt process: input must not be null, undefined, or empty"); let n = r15[0].shape[0]; - for (let s = 1; s < r15.length; ++s) - E(r15[s].shape[0] === n, () => `Gram-Schmidt: Non-unique lengths found in the input vectors: (${r15[s].shape[0]} vs. ${n})`); - } else - e = true, r15 = li(r15, r15.shape[0], 0).map((n) => cc(n, [0])); + for (let s = 1; s < r15.length; ++s) E(r15[s].shape[0] === n, () => `Gram-Schmidt: Non-unique lengths found in the input vectors: (${r15[s].shape[0]} vs. ${n})`); + } else e = true, r15 = li(r15, r15.shape[0], 0).map((n) => cc(n, [0])); E(r15.length <= r15[0].shape[0], () => `Gram-Schmidt: Number of vectors (${r15.length}) exceeds number of dimensions (${r15[0].shape[0]}).`); let t10 = [], o = r15; - for (let n = 0; n < r15.length; ++n) - t10.push(T.tidy(() => { - let s = o[n]; - if (n > 0) - for (let a = 0; a < n; ++a) { - let i = se(ot(se(t10[a], s)), t10[a]); - s = Te(s, i); - } - return je(s, Vu(s, "euclidean")); - })); + for (let n = 0; n < r15.length; ++n) t10.push(T.tidy(() => { + let s = o[n]; + if (n > 0) for (let a = 0; a < n; ++a) { + let i = se(ot(se(t10[a], s)), t10[a]); + s = Te(s, i); + } + return je(s, Vu(s, "euclidean")); + })); return e ? vr(t10, 0) : t10; } var EN = N({ gramSchmidt_: Rj }); function Dj(r15, e = false) { - if (E(r15.rank >= 2, () => `qr() requires input tensor to have a rank >= 2, but got rank ${r15.rank}`), r15.rank === 2) - return $N(r15, e); + if (E(r15.rank >= 2, () => `qr() requires input tensor to have a rank >= 2, but got rank ${r15.rank}`), r15.rank === 2) return $N(r15, e); { let t10 = r15.shape.slice(0, r15.shape.length - 2).reduce((p, u) => p * u), o = fo(W(r15, [t10, r15.shape[r15.shape.length - 2], r15.shape[r15.shape.length - 1]]), 0), n = [], s = []; o.forEach((p) => { @@ -8107,15 +7534,13 @@ function $N(r15, e = false) { let d = Xe(s, [u, u], [t10 - u, 1]), f = Vu(d), h = Xe(s, [u, u], [1, 1]), g = lo(Wu(h, 0), mu([[-1]]), mu([[1]])), x = Te(h, se(g, f)), b = je(d, x); b.shape[0] === 1 ? i = Ur(a) : i = yt([a, Xe(b, [1, 0], [b.shape[0] - 1, b.shape[1]])], 0); let C = pr(je(Ze(g, x), f)), S = Xe(s, [u, 0], [t10 - u, o]), k = se(C, i), _ = mc(i); - if (u === 0) - s = Te(S, Ze(k, Ze(_, S))); + if (u === 0) s = Te(S, Ze(k, Ze(_, S))); else { let D = Te(S, Ze(k, Ze(_, S))); s = yt([Xe(s, [0, 0], [u, o]), D], 0); } let $ = mc(k), R = Xe(n, [0, u], [t10, n.shape[1] - u]); - if (u === 0) - n = Te(R, Ze(Ze(R, i), $)); + if (u === 0) n = Te(R, Ze(Ze(R, i), $)); else { let D = Te(R, Ze(Ze(R, i), $)); n = yt([Xe(n, [0, 0], [t10, u]), D], 1); @@ -8135,21 +7560,17 @@ function Aj(r15, e, t10 = $t.SUM_BY_NONZERO_WEIGHTS) { let o = v(r15, "losses", "computeWeightedLoss"), n = null; e != null && (n = v(e, "weights", "computeWeightedLoss")); let s = n == null ? o : se(o, n); - if (t10 === $t.NONE) - return s; - if (t10 === $t.SUM) - return ot(s); + if (t10 === $t.NONE) return s; + if (t10 === $t.SUM) return ot(s); if (t10 === $t.MEAN) { - if (n == null) - return Gu(s); + if (n == null) return Gu(s); { let a = o.size / n.size, i = je(ot(s), ot(n)); return a > 1 ? je(i, ke(a)) : i; } } if (t10 === $t.SUM_BY_NONZERO_WEIGHTS) { - if (n == null) - return je(ot(s), ke(o.size)); + if (n == null) return je(ot(s), ke(o.size)); { let a = se(n, Da(o.shape)), i = Ue(ot(Fd(a, ke(0))), "float32"); return je(ot(s), i); @@ -8219,8 +7640,7 @@ function Vj(r15, e, t10, o = 0, n = $t.SUM_BY_NONZERO_WEIGHTS) { } var LN = N({ sigmoidCrossEntropy_: Vj }); function Wj(r15, 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}`); + 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}`); return Ir((n, s, a) => { let p = _d(s, [t10], true), u = Te(Ue(s, "float32"), p); a([n, u]); @@ -8243,41 +7663,31 @@ function Uj(r15, e, t10, o = 0, n = $t.SUM_BY_NONZERO_WEIGHTS) { var BN = N({ softmaxCrossEntropy_: Uj }); function Gj(r15, e, t10, o) { let n = v(r15, "indices", "sparseFillEmptyRows", "int32"), s = v(e, "values", "sparseFillEmptyRows"), a = v(t10, "denseShape", "sparseFillEmptyRows", "int32"), i = v(o, "defaultValue", "sparseFillEmptyRows", s.dtype); - if (n.rank !== 2) - throw new Error(`Indices should be Tensor2D but received shape + 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}`); + 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(Ki, p); return { outputIndices: u[0], outputValues: u[1], emptyRowIndicator: u[2], reverseIndexMap: u[3] }; } var zN = N({ sparseFillEmptyRows_: Gj }); function Hj(r15, e, t10) { let o = v(r15, "inputIndices", "sparseReshape", "int32"), n = v(e, "inputShape", "sparseReshape", "int32"), s = v(t10, "newShape", "sparseReshape", "int32"); - if (o.rank !== 2) - throw new Error(`Input indices should be Tensor2D but received shape + 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}`); + 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(ei, a); return { outputIndices: i[0], outputShape: i[1] }; } var VN = N({ sparseReshape_: Hj }); function Kj(r15, e, t10) { let o = v(r15, "data", "sparseSegmentMean"), n = v(e, "indices", "sparseSegmentMean", "int32"), s = v(t10, "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 + 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 + 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 T.runKernel(ya, a); @@ -8285,13 +7695,10 @@ function Kj(r15, e, t10) { var WN = N({ sparseSegmentMean_: Kj }); function qj(r15, e, t10) { let o = v(r15, "data", "sparseSegmentSum"), n = v(e, "indices", "sparseSegmentSum", "int32"), s = v(t10, "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 + 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 + 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 T.runKernel(ba, a); @@ -8299,31 +7706,25 @@ function qj(r15, e, t10) { var UN = N({ sparseSegmentSum_: qj }); function jj(r15, e, t10, o, n, s, a, i) { let p = v(r15, "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}`); + 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"); + 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 = T.runKernel(Ca, l, c); return { nGrams: m[0], nGramsSplits: m[1] }; } var GN = N({ stringNGrams_: jj }); function Xj(r15, e, t10 = true) { let o = v(r15, "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}`); + 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 = T.runKernel(ji, a, s); return { indices: i[0], values: i[1], shape: i[2] }; } var HN = N({ stringSplit_: Xj }); function Yj(r15, e) { let t10 = v(r15, "input", "stringToHashBucketFast", "string"), o = { numBuckets: e }; - if (e <= 0) - throw new Error("Number of buckets must be at least 1"); + if (e <= 0) throw new Error("Number of buckets must be at least 1"); let n = { input: t10 }; return T.runKernel(Xi, n, o); } @@ -8377,8 +7778,7 @@ var kr = class extends Rl { if (o != null) { let a = o.map((i) => ({ name: i.name, tensor: s[i.name] })); this.applyGradients(a); - } else - this.applyGradients(s); + } else this.applyGradients(s); return Ot(s), t10 ? n : (n.dispose(), null); } get iterations() { @@ -8419,8 +7819,7 @@ var Ju = class extends kr { let s = T.registeredVariables[o], a = false; this.accumulatedGrads[n] == null && (this.accumulatedGrads[n] = { originalName: `${o}/accum_grad`, variable: De(() => Gt(s).variable(a)) }), this.accumulatedUpdates[n] == null && (this.accumulatedUpdates[n] = { originalName: `${o}/accum_var`, variable: De(() => Gt(s).variable(a)) }); let i = Array.isArray(e) ? e[n].tensor : e[o]; - if (i == null) - return; + if (i == null) return; let p = this.accumulatedGrads[n].variable, u = this.accumulatedUpdates[n].variable; De(() => { let c = Ce(se(p, this.rho), se(Zt(i), 1 - this.rho)), l = se(je(Rr(Ce(u, this.epsilon)), Rr(Ce(p, this.epsilon))), i), m = Ce(se(u, this.rho), se(Zt(l), 1 - this.rho)); @@ -8461,8 +7860,7 @@ var ep = class extends kr { let s = T.registeredVariables[o]; this.accumulatedGrads[n] == null && (this.accumulatedGrads[n] = { originalName: `${o}/accumulator`, variable: De(() => $a(s.shape, this.initialAccumulatorValue).variable(false)) }); let a = Array.isArray(e) ? e[n].tensor : e[o]; - if (a == null) - return; + if (a == null) return; let i = this.accumulatedGrads[n].variable; De(() => { let p = Ce(i, Zt(a)); @@ -8507,8 +7905,7 @@ var tp = class extends kr { let i = T.registeredVariables[s], p = false; this.accumulatedFirstMoment[a] == null && (this.accumulatedFirstMoment[a] = { originalName: `${s}/m`, variable: De(() => Gt(i).variable(p)) }), this.accumulatedSecondMoment[a] == null && (this.accumulatedSecondMoment[a] = { originalName: `${s}/v`, variable: De(() => Gt(i).variable(p)) }); let u = Array.isArray(e) ? e[a].tensor : e[s]; - if (u == null) - return; + if (u == null) return; let c = this.accumulatedFirstMoment[a].variable, l = this.accumulatedSecondMoment[a].variable, m = Ce(se(c, this.beta1), se(u, 1 - this.beta1)), d = Ce(se(l, this.beta2), se(Zt(u), 1 - this.beta2)), f = je(m, o), h = je(d, n); c.assign(m), l.assign(d); let g = Ce(se(je(f, Ce(Rr(h), this.epsilon)), -this.learningRate), i); @@ -8554,8 +7951,7 @@ var rp = class extends kr { let i = T.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 u = Array.isArray(e) ? e[a].tensor : e[s]; - if (u == null) - return; + if (u == null) return; let c = this.accumulatedFirstMoment[a].variable, l = this.accumulatedWeightedInfNorm[a].variable, m = Ce(se(c, this.beta1), se(u, 1 - this.beta1)), d = se(l, this.beta2), f = Qt(u), h = Ad(d, f); c.assign(m), l.assign(h); let g = Ce(se(je(n, o), je(m, Ce(h, this.epsilon))), i); @@ -8589,8 +7985,7 @@ var mi = class extends kr { 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; + if (s == null) return; let a = T.registeredVariables[o]; De(() => { let i = Ce(se(this.c, s), a); @@ -8608,8 +8003,7 @@ var mi = class extends kr { 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."); + if (e = await this.extractIterations(e), e.length !== 0) throw new Error("SGD optimizer does not have settable weights."); } getConfig() { return { learningRate: this.learningRate }; @@ -8662,16 +8056,14 @@ var np = class extends kr { return "RMSProp"; } 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 = T.backend.epsilon()), e == null) - throw new Error("learningRate for RMSPropOptimizer must be defined."); + 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 = 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 = false; this.accumulatedMeanSquares[n] == null && (this.accumulatedMeanSquares[n] = { originalName: `${o}/rms`, variable: De(() => Gt(s).variable(a)) }), this.accumulatedMoments[n] == null && (this.accumulatedMoments[n] = { originalName: `${o}/momentum`, variable: De(() => Gt(s).variable(a)) }), this.accumulatedMeanGrads[n] == null && this.centered && (this.accumulatedMeanGrads[n] = { originalName: `${o}/mg`, variable: De(() => Gt(s).variable(a)) }); let i = Array.isArray(e) ? e[n].tensor : e[o]; - if (i == null) - return; + if (i == null) return; let p = this.accumulatedMeanSquares[n].variable, u = this.accumulatedMoments[n].variable; De(() => { let c = Ce(se(p, this.decay), se(Zt(i), 1 - this.decay)); @@ -8710,8 +8102,7 @@ var np = class extends kr { }; var iX = [Ju, ep, tp, rp, op, np, mi]; function XN() { - for (let r15 of iX) - rS(r15); + for (let r15 of iX) rS(r15); } var di = {}; qe(di, { CompositeArrayBuffer: () => ir, browserFiles: () => QN, browserHTTPRequest: () => tT, concatenateArrayBuffers: () => dk, copyModel: () => Tk, decodeWeights: () => sd, decodeWeightsStream: () => ad, encodeWeights: () => pk, fromMemory: () => rT, fromMemorySync: () => uS, getLoadHandlers: () => xk, getModelArtifactsForJSON: () => tc, getModelArtifactsForJSONSync: () => $w, getModelArtifactsInfoForJSON: () => va, getSaveHandlers: () => gk, getWeightSpecs: () => Sl, http: () => nf, isHTTPScheme: () => of, listModels: () => kk, loadWeights: () => JN, moveModel: () => _k, registerLoadRouter: () => hk, registerSaveRouter: () => fk, removeModel: () => Nk, weightsLoaderFactory: () => aS, withSaveHandler: () => oT, withSaveHandlerSync: () => nT }); @@ -8723,16 +8114,13 @@ function YN(r15) { } var dc = class r7 { constructor(e) { - if (!A().getBool("IS_BROWSER")) - throw new Error("browserDownloads() cannot proceed because the current environment is not a browser."); + if (!A().getBool("IS_BROWSER")) throw new Error("browserDownloads() cannot proceed because the current environment is not a browser."); e.startsWith(r7.URL_SCHEME) && (e = e.slice(r7.URL_SCHEME.length)), (e == null || e.length === 0) && (e = uX), this.modelJsonFileName = e + pX, this.weightDataFileName = e + cX; } async save(e) { - if (typeof document == "undefined") - throw new Error("Browser downloads are not supported in this environment since `document` is not present"); + if (typeof document == "undefined") throw new Error("Browser downloads are not supported in this environment since `document` is not present"); let t10 = ir.join(e.weightData), o = window.URL.createObjectURL(new Blob([t10], { type: "application/octet-stream" })); - if (e.modelTopology instanceof ArrayBuffer) - throw new Error("BrowserDownloads.save() does not support saving model topology in binary formats yet."); + if (e.modelTopology instanceof ArrayBuffer) throw new Error("BrowserDownloads.save() does not support saving model topology in binary formats yet."); { let n = [{ paths: ["./" + this.weightDataFileName], weights: e.weightSpecs }], s = id(e, n), a = window.URL.createObjectURL(new Blob([JSON.stringify(s)], { type: "application/json" })), i = this.modelJsonAnchor == null ? document.createElement("a") : this.modelJsonAnchor; if (i.download = this.modelJsonFileName, i.href = a, await YN(() => i.dispatchEvent(new MouseEvent("click"))), e.weightData != null) { @@ -8746,8 +8134,7 @@ var dc = class r7 { dc.URL_SCHEME = "downloads://"; var oS = class { constructor(e) { - if (e == null || e.length < 1) - throw new Error(`When calling browserFiles, at least 1 file is required, but received ${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() { @@ -8774,8 +8161,7 @@ var oS = class { } loadWeights(e) { let t10 = [], o = []; - for (let a of e) - t10.push(...a.weights), o.push(...a.paths); + for (let a of e) t10.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, a]); } @@ -8790,17 +8176,13 @@ var oS = class { } checkManifestAndWeightFiles(e) { let t10 = [], o = this.weightsFiles.map((s) => Ew(s.name)), n = {}; - for (let s of e) - s.paths.forEach((a) => { - let i = Ew(a); - if (t10.indexOf(i) !== -1) - throw new Error(`Duplicate file basename found in weights manifest: '${i}'`); - if (t10.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}).`); + for (let s of e) s.paths.forEach((a) => { + let i = Ew(a); + if (t10.indexOf(i) !== -1) throw new Error(`Duplicate file basename found in weights manifest: '${i}'`); + if (t10.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}).`); return n; } }; @@ -8881,8 +8263,7 @@ Manifest JSON has weights with names: ${i.join(", ")}.`); let f = e[d].paths.length, h = new ir(c.slice(m, m + f)); s[d].forEach((x) => { let b = h.slice(x.groupOffset, x.groupOffset + x.sizeBytes), C = sd(b, [x.manifestEntry]); - for (let S in C) - l[S] = C[S]; + for (let S in C) l[S] = C[S]; }), m += f; }), l; }; @@ -8891,13 +8272,11 @@ var dX = "application/octet-stream"; var fX = "application/json"; var Dl = class { constructor(e, t10) { - if (this.DEFAULT_METHOD = "POST", t10 == null && (t10 = {}), this.weightPathPrefix = t10.weightPathPrefix, this.weightUrlConverter = t10.weightUrlConverter, t10.fetchFunc != null ? (E(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 = A().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, t10.requestInit != null && t10.requestInit.body != null) - throw new Error("requestInit is expected to have no pre-existing body, but has one."); + if (this.DEFAULT_METHOD = "POST", t10 == null && (t10 = {}), this.weightPathPrefix = t10.weightPathPrefix, this.weightUrlConverter = t10.weightUrlConverter, t10.fetchFunc != null ? (E(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 = A().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, t10.requestInit != null && t10.requestInit.body != null) throw new Error("requestInit is expected to have no pre-existing body, but has one."); this.requestInit = t10.requestInit || {}, this.loadOptions = t10; } async save(e) { - if (e.modelTopology instanceof ArrayBuffer) - throw new Error("BrowserHTTPRequest.save() does not support saving model topology in binary formats yet."); + 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 = id(e, o); @@ -8906,14 +8285,12 @@ var Dl = class { t10.body.append("model.weights.bin", new Blob([a], { type: dX }), "model.weights.bin"); } let s = await this.fetch(this.path, t10); - if (s.ok) - return { modelArtifactsInfo: va(e), responses: [s] }; + if (s.ok) return { modelArtifactsInfo: va(e), responses: [s] }; throw new Error(`BrowserHTTPRequest.save() failed due to HTTP response status ${s.status}.`); } async loadModelJSON() { 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.`); + 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; try { t10 = await e.json(); @@ -8922,13 +8299,11 @@ var Dl = class { 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; - if (o == null && n == null) - throw new Error(`The JSON from HTTP path ${this.path} contains neither model topology or manifest for weights.`); + if (o == null && n == null) throw new Error(`The JSON from HTTP path ${this.path} contains neither model topology or manifest for weights.`); return t10; } async load() { - if (this.loadOptions.streamWeights) - return this.loadStream(); + if (this.loadOptions.streamWeights) return this.loadStream(); let e = await this.loadModelJSON(); return tc(e, (t10) => this.loadWeights(t10)); } @@ -8938,9 +8313,7 @@ var Dl = class { } async getWeightUrls(e) { let t10 = Array.isArray(this.path) ? this.path[1] : this.path, [o, n] = hX(t10), s = this.weightPathPrefix || o, a = [], i = []; - for (let p of e) - for (let u of p.paths) - this.weightUrlConverter != null ? i.push(this.weightUrlConverter(u)) : a.push(s + u + n); + for (let p of e) for (let u of p.paths) this.weightUrlConverter != null ? i.push(this.weightUrlConverter(u)) : a.push(s + u + n); return this.weightUrlConverter && a.push(...await Promise.all(i)), a; } async loadWeights(e) { @@ -8957,12 +8330,10 @@ function of(r15) { return r15.match(Dl.URL_SCHEME_REGEX) != null; } var eT = (r15, e) => { - if (typeof fetch == "undefined" && (e == null || e.fetchFunc == null)) - return null; + if (typeof fetch == "undefined" && (e == null || e.fetchFunc == null)) return null; { let t10 = true; - if (Array.isArray(r15) ? t10 = r15.every((o) => of(o)) : t10 = of(r15), t10) - return nf(r15, e); + if (Array.isArray(r15) ? t10 = r15.every((o) => of(o)) : t10 = of(r15), t10) return nf(r15, e); } return null; }; @@ -9022,54 +8393,35 @@ qe(cT, { draw: () => vX, fromPixels: () => kX, fromPixelsAsync: () => wX, toPixe var sp; var iT = false; function uT(r15, e = 3) { - if (e > 4) - throw new Error("Cannot construct Tensor with more than 4 channels from pixels."); - if (r15 == null) - throw new Error("pixels passed to tf.browser.fromPixels() can not be null"); + if (e > 4) throw new Error("Cannot construct Tensor with more than 4 channels from pixels."); + if (r15 == 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; - if (r15.data instanceof Uint8Array) - t10 = true; - else if (typeof ImageData != "undefined" && r15 instanceof ImageData) - o = true; - else if (typeof HTMLVideoElement != "undefined" && r15 instanceof HTMLVideoElement) - n = true; - else if (typeof HTMLImageElement != "undefined" && r15 instanceof HTMLImageElement) - s = true; - else if (r15.getContext != null) - a = true; - else if (typeof ImageBitmap != "undefined" && r15 instanceof ImageBitmap) - 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 ${r15.constructor.name}`); + if (r15.data instanceof Uint8Array) t10 = true; + else if (typeof ImageData != "undefined" && r15 instanceof ImageData) o = true; + else if (typeof HTMLVideoElement != "undefined" && r15 instanceof HTMLVideoElement) n = true; + else if (typeof HTMLImageElement != "undefined" && r15 instanceof HTMLImageElement) s = true; + else if (r15.getContext != null) a = true; + else if (typeof ImageBitmap != "undefined" && r15 instanceof ImageBitmap) 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 ${r15.constructor.name}`); if (Xp(Du, T.backendName) != null) { let f = { pixels: r15 }, h = { numChannels: e }; return T.runKernel(Du, f, h); } let [u, c] = n ? [r15.videoWidth, r15.videoHeight] : [r15.width, r15.height], l; - if (a) - l = r15.getContext("2d").getImageData(0, 0, u, c).data; - else if (o || t10) - l = r15.data; + if (a) l = r15.getContext("2d").getImageData(0, 0, u, c).data; + else if (o || t10) l = r15.data; else if (s || n || i) { - if (sp == null) - if (typeof document == "undefined") - if (typeof OffscreenCanvas != "undefined" && typeof OffscreenCanvasRenderingContext2D != "undefined") - sp = new OffscreenCanvas(1, 1).getContext("2d"); - else - throw new Error("Cannot parse input in current context. Reason: OffscreenCanvas Context2D rendering is not supported."); - else - sp = document.createElement("canvas").getContext("2d", { willReadFrequently: true }); + if (sp == null) if (typeof document == "undefined") if (typeof OffscreenCanvas != "undefined" && typeof OffscreenCanvasRenderingContext2D != "undefined") sp = new OffscreenCanvas(1, 1).getContext("2d"); + else throw new Error("Cannot parse input in current context. Reason: OffscreenCanvas Context2D rendering is not supported."); + else sp = document.createElement("canvas").getContext("2d", { willReadFrequently: true }); sp.canvas.width = u, sp.canvas.height = c, sp.drawImage(r15, 0, 0, u, c), l = sp.getImageData(0, 0, u, c).data; } let m; - if (e === 4) - m = new Int32Array(l); + if (e === 4) m = new Int32Array(l); else { 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]; + for (let h = 0; h < f; h++) for (let g = 0; g < e; ++g) m[h * e + g] = l[h * 4 + g]; } return jd(m, [c, u, e], "int32"); } @@ -9095,23 +8447,18 @@ async function wX(r15, e = 3) { o = null; } o != null && o.width === r15.width && o.height === r15.height ? t10 = o : t10 = r15; - } else - t10 = r15; + } else t10 = r15; return uT(t10, e); } function pT(r15) { - if (r15.rank !== 2 && r15.rank !== 3) - throw new Error(`toPixels only supports rank 2 or 3 tensors, got rank ${r15.rank}.`); + if (r15.rank !== 2 && r15.rank !== 3) throw new Error(`toPixels only supports rank 2 or 3 tensors, got rank ${r15.rank}.`); let e = r15.rank === 2 ? 1 : r15.shape[2]; - if (e > 4 || e === 2) - throw new Error(`toPixels only supports depth of size 1, 3 or 4 but got ${e}`); - if (r15.dtype !== "float32" && r15.dtype !== "int32") - throw new Error(`Unsupported type for toPixels: ${r15.dtype}. Please use float32 or int32 tensors.`); + if (e > 4 || e === 2) throw new Error(`toPixels only supports depth of size 1, 3 or 4 but got ${e}`); + if (r15.dtype !== "float32" && r15.dtype !== "int32") throw new Error(`Unsupported type for toPixels: ${r15.dtype}. Please use float32 or int32 tensors.`); } function SX(r15) { let e = (r15 == null ? void 0 : r15.alpha) || 1; - if (e > 1 || e < 0) - throw new Error(`Alpha value ${e} is suppoed to be in range [0 - 1].`); + if (e > 1 || e < 0) throw new Error(`Alpha value ${e} is suppoed to be in range [0 - 1].`); } async function IX(r15, e) { let t10 = v(r15, "img", "toPixels"); @@ -9126,10 +8473,8 @@ async function IX(r15, e) { for (let m = 0; m < s; m++) { let d = a[u * s + m]; if (t10.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 (t10.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}.`); + 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 (t10.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; @@ -9157,24 +8502,17 @@ var af = {}; qe(af, { prepareAndValidate: () => lT }); function lT(r15, e) { let t10 = r15.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}.`); - 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 (ze(r15.shape) === 0) - throw new Error(`Requested more than 0 entries, but input is empty. Input shape: ${r15.shape}.`); + if (t10 < 1) throw new Error(`tf.gatherND() expects the input to be rank 1 or higher, but the rank was ${t10}.`); + 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 (ze(r15.shape) === 0) throw new Error(`Requested more than 0 entries, but input is empty. Input shape: ${r15.shape}.`); let n = e.shape, s = n[n.length - 1], a = 1; - for (let l = 0; l < n.length - 1; ++l) - a *= n[l]; + for (let l = 0; l < n.length - 1; ++l) a *= n[l]; let i = r15.shape, p = n.slice(); p.pop(); let u = 1; - for (let l = s; l < t10; ++l) - u *= i[l], p.push(i[l]); + for (let l = s; l < t10; ++l) u *= i[l], p.push(i[l]); let c = [...js(r15.shape).map((l) => l / u), 1].slice(0, s); return [p, a, u, c]; } @@ -9185,27 +8523,22 @@ var NX = -1; function TX(r15, e, t10) { let o = r15.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 === t10.length, () => `Error in slice${o}D: Length of size ${t10} must match the rank of the array (${o}).`); - for (let n = 0; n < o; ++n) - E(e[n] + t10[n] <= r15.shape[n], () => `Error in slice${o}D: begin[${n}] + size[${n}] (${e[n] + t10[n]}) would overflow input.shape[${n}] (${r15.shape[n]})`); + for (let n = 0; n < o; ++n) E(e[n] + t10[n] <= r15.shape[n], () => `Error in slice${o}D: begin[${n}] + size[${n}] (${e[n] + t10[n]}) would overflow input.shape[${n}] (${r15.shape[n]})`); } function _X(r15) { let e = [], t10 = 0; - for (; r15 > 0; ) - r15 & 1 && e.push(t10), r15 /= 2, t10++; + for (; r15 > 0; ) r15 & 1 && e.push(t10), r15 /= 2, t10++; return e; } function EX(r15, e, t10) { let o = []; - for (let n = 0; n < r15.length; n++) - o[n] = Math.ceil((e[n] - r15[n]) / t10[n]); + for (let n = 0; n < r15.length; n++) o[n] = Math.ceil((e[n] - r15[n]) / t10[n]); return o; } function dT(r15, e, t10, o) { let n = [...r15]; - for (let s = n.length; s < o.length; s++) - n.push(1); - for (let s = 0; s < t10; s++) - s === 0 ? n[e] = 1 : (n.splice(e, 0, 1), n.pop()); + for (let s = n.length; s < o.length; s++) n.push(1); + for (let s = 0; s < t10; s++) s === 0 ? n[e] = 1 : (n.splice(e, 0, 1), n.pop()); return n; } function fT(r15, e, t10) { @@ -9213,8 +8546,7 @@ function fT(r15, e, t10) { } function hT(r15, e) { let t10 = []; - for (let o = 0; o < r15; o++) - t10.push(e + o); + for (let o = 0; o < r15; o++) t10.push(e + o); return t10; } function $X(r15, e, t10, o, n, s, a, i, p) { @@ -9222,31 +8554,25 @@ function $X(r15, e, t10, o, n, s, a, i, p) { if (e.length && t10 > 0) { let d = e[0], f = t10 + 1; c = gT(a, d, f, o, r15), l = xT(i, d, f, n, r15), m = dT(s, d, f, r15); - } else - for (let d = 0; d < u; d++) - c[d] = bT(a, o, s, r15, d, p), l[d] = CT(i, n, s, r15, d, p), m[d] = yT(s, d, p); + } else for (let d = 0; d < u; d++) c[d] = bT(a, o, s, r15, d, p), l[d] = CT(i, n, s, r15, d, p), m[d] = yT(s, d, p); return { begin: c, end: l, strides: m }; } function gT(r15, e, t10, o, n) { let s = [...n], a = hT(t10, e); - for (let i = 0; i < s.length; i++) - if (a.indexOf(i) > -1) - s[i] = 0; - else { - let p = fT(e, t10, i), u = o[p]; - r15 & 1 << p && (u = 0), s[i] = u; - } + for (let i = 0; i < s.length; i++) if (a.indexOf(i) > -1) s[i] = 0; + else { + let p = fT(e, t10, i), u = o[p]; + r15 & 1 << p && (u = 0), s[i] = u; + } return s; } function xT(r15, e, t10, o, n) { let s = [...n], a = hT(t10, e); - for (let i = 0; i < s.length; i++) - if (a.indexOf(i) > -1) - s[i] = Number.MAX_SAFE_INTEGER; - else { - let p = fT(e, t10, i), u = o[p]; - r15 & 1 << p && (u = Number.MAX_SAFE_INTEGER), s[i] = u; - } + for (let i = 0; i < s.length; i++) if (a.indexOf(i) > -1) s[i] = Number.MAX_SAFE_INTEGER; + else { + let p = fT(e, t10, i), u = o[p]; + r15 & 1 << p && (u = Number.MAX_SAFE_INTEGER), s[i] = u; + } for (let i = 0; i < s.length; i++) { let p = n[i]; s[i] < 0 && (s[i] += p), s[i] = Vp(0, s[i], n[i]); @@ -9271,20 +8597,16 @@ function CT(r15, e, t10, o, n, s) { } function RX(r15, e, t10) { let o = t10.length; - for (let n = 0; n < t10.length; n++) - if (t10[n] > 1) { - o = n; - break; - } - for (let n = o + 1; n < t10.length; n++) - if (e[n] > 0 || t10[n] !== r15[n]) - return false; + for (let n = 0; n < t10.length; n++) if (t10[n] > 1) { + o = n; + break; + } + for (let n = o + 1; n < t10.length; n++) if (e[n] > 0 || t10[n] !== r15[n]) return false; return true; } function DX(r15, e) { let t10 = r15.length > 0 ? r15[r15.length - 1] : 1; - for (let o = 0; o < r15.length - 1; o++) - t10 += r15[o] * e[o]; + for (let o = 0; o < r15.length - 1; o++) t10 += r15[o] * e[o]; return t10; } function AX(r15, e, t10) { @@ -9297,45 +8619,37 @@ function AX(r15, e, t10) { } function FX(r15, e, t10, 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) - throw new Error("Multiple ellipses in slice is not allowed."); + if (o == null ? (u = new Array(e.length), u.fill(1)) : u = o, a != null && a & a - 1) 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 }; - for (let C = 0; C < l.dims; C++) - c && 1 << C & i && l.numAddAxisAfterEllipsis++, 1 << C & a && (c = true); + for (let C = 0; C < l.dims; C++) c && 1 << C & i && l.numAddAxisAfterEllipsis++, 1 << C & a && (c = true); c || (l.ellipsisMask |= 1 << l.dims, l.dims++); let m = { dims: r15.length, beginMask: 0, endMask: 0, beginValid: false, endValid: false }; PX(l, m); let d = true, f = true, h = true, g = [], x = []; for (let C = 0; C < r15.length; ++C) { - if (m.strides[C] === 0) - throw Error(`strides[${C}] must be non-zero`); + if (m.strides[C] === 0) throw Error(`strides[${C}] must be non-zero`); let S = !!(m.shrinkAxisMask & 1 << C), k = r15[C]; if (k === -1) { g.push(S ? 1 : -1); continue; } let _ = [m.beginMask & 1 << C, m.endMask & 1 << C], $ = [m.strides[C] > 0 ? 0 : -1, m.strides[C] > 0 ? k : k - 1]; - if (S && m.strides[C] <= 0) - throw Error("only stride 1 allowed on non-range indexing."); + if (S && 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); if (m.beginValid && m.endValid) { if (S) { 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] = mT(m.begin[C], 0, m.strides[C], k, _, $), m.end[C] = mT(m.end[C], 1, m.strides[C], k, _, $); + 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] = mT(m.begin[C], 0, m.strides[C], k, _, $), m.end[C] = mT(m.end[C], 1, m.strides[C], k, _, $); let O = m.strides[C] === 1 && m.begin[C] === 0 && m.end[C] === k; d = d && O, f = f && (C === 0 && m.strides[C] === 1 || O); - } else - d = d && m.strides[C] === 1 && R, f = f && (C === 0 && m.strides[C] === 1 || R); + } else d = d && m.strides[C] === 1 && R, f = f && (C === 0 && m.strides[C] === 1 || R); let D, P = false; if (m.beginValid && m.endValid ? (D = m.end[C] - m.begin[C], P = true) : S ? (D = 1, P = true) : R && k >= 0 && (m.strides[C] < 0 ? D = -k : D = k, P = true), P) { let O; D === 0 || D < 0 != m.strides[C] < 0 ? O = 0 : O = Math.trunc(D / m.strides[C]) + (D % m.strides[C] !== 0 ? 1 : 0), g.push(O); - } else - g.push(-1); + } else g.push(-1); } for (let C = 0; C < m.finalShapeGatherIndices.length; ++C) { let S = m.finalShapeGatherIndices[C]; @@ -9347,28 +8661,23 @@ function PX(r15, e) { e.beginMask = 0, e.endMask = 0, e.shrinkAxisMask = 0; let t10 = 0; e.beginValid = r15.begin != null, e.endValid = r15.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 < r15.dims; o++) - if (1 << o & r15.ellipsisMask) { - let n = Math.min(e.dims - (r15.dims - o) + 1 + r15.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; - } else if (1 << o & r15.newAxisMask) - e.finalShapeGatherIndices.push(pS), 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}.`); - r15.begin != null && (e.begin[t10] = r15.begin[o]), r15.end != null && (e.end[t10] = r15.end[o]), e.strides[t10] = r15.strides[o], r15.beginMask & 1 << o && (e.beginMask |= 1 << t10), r15.endMask & 1 << o && (e.endMask |= 1 << t10), r15.shrinkAxisMask & 1 << o ? (e.finalShapeGatherIndices.push(NX), e.finalShapeGatherIndicesSparse.push(-1), e.shrinkAxisMask |= 1 << t10) : (e.finalShapeGatherIndices.push(t10), e.finalShapeGatherIndicesSparse.push(o)), e.inputShapeGatherIndicesSparse[t10] = o, t10++; - } + for (let o = 0; o < r15.dims; o++) if (1 << o & r15.ellipsisMask) { + let n = Math.min(e.dims - (r15.dims - o) + 1 + r15.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; + } else if (1 << o & r15.newAxisMask) e.finalShapeGatherIndices.push(pS), 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}.`); + r15.begin != null && (e.begin[t10] = r15.begin[o]), r15.end != null && (e.end[t10] = r15.end[o]), e.strides[t10] = r15.strides[o], r15.beginMask & 1 << o && (e.beginMask |= 1 << t10), r15.endMask & 1 << o && (e.endMask |= 1 << t10), r15.shrinkAxisMask & 1 << o ? (e.finalShapeGatherIndices.push(NX), e.finalShapeGatherIndicesSparse.push(-1), e.shrinkAxisMask |= 1 << t10) : (e.finalShapeGatherIndices.push(t10), e.finalShapeGatherIndicesSparse.push(o)), e.inputShapeGatherIndicesSparse[t10] = o, t10++; + } } function mT(r15, e, t10, o, n, s) { - if (n[e]) - return t10 > 0 ? s[e] : s[e + 1 & 1]; + if (n[e]) return t10 > 0 ? s[e] : s[e + 1 & 1]; { let a = r15 < 0 ? o + r15 : r15; return a < s[0] ? s[0] : a > s[1] ? s[1] : a; } } -var OX = "4.17.0"; +var OX = "4.21.0"; var Fl = class { static sgd(e) { return new mi(e); @@ -9406,14 +8715,12 @@ function LX(r15, e) { }), E(e >= 0 && e < t10, () => `Error in concat${t10}D: axis must be between 0 and ${t10 - 1}.`); let o = r15[0]; r15.forEach((n, s) => { - for (let a = 0; a < t10; a++) - E(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 < t10; a++) E(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}.`); }); } function BX(r15, e) { let t10 = r15[0].slice(); - for (let o = 1; o < r15.length; o++) - t10[e] += r15[o][e]; + for (let o = 1; o < r15.length; o++) t10[e] += r15[o][e]; return t10; } var Fa; @@ -9422,50 +8729,35 @@ var Fa; })(Fa || (Fa = {})); function zX(r15, e, t10) { let o = new Array(); - if (t10 == null && e == null) - return o; - if (e == null) - for (; o.length < r15 + t10.length; ) - o.push(-1); - else - o = e.slice(); - if (t10 == null) - return o; - if (r15 + t10.length !== o.length) - throw new Error(`rt input.shape and shape=${e} are incompatible: rt input.rank = ${r15 + t10.length}, but shape.rank = ${o.length}`); + if (t10 == null && e == null) return o; + if (e == null) for (; o.length < r15 + t10.length; ) o.push(-1); + else o = e.slice(); + if (t10 == null) return o; + if (r15 + t10.length !== o.length) throw new Error(`rt input.shape and shape=${e} are incompatible: rt input.rank = ${r15 + 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 (s >= 0) - if (i >= 0) { - if (i !== s) - throw new Error(`rt input.shape and shape=${e} are incompatible: rt input.shape[${n + r15}] = ${s} but shape[${n + r15}] = ${i}`); - } else - o[a] = s; + if (s >= 0) if (i >= 0) { + if (i !== s) throw new Error(`rt input.shape and shape=${e} are incompatible: rt input.shape[${n + r15}] = ${s} but shape[${n + r15}] = ${i}`); + } else o[a] = s; } return o; } function VX(r15) { let e = { FIRST_DIM_SIZE: Fa.FIRST_DIM_SIZE, VALUE_ROWIDS: Fa.VALUE_ROWIDS, ROW_LENGTHS: Fa.ROW_LENGTHS, ROW_SPLITS: Fa.ROW_SPLITS, ROW_LIMITS: Fa.ROW_LIMITS, ROW_STARTS: Fa.ROW_STARTS }, t10 = []; - for (let o of r15) - if (o in e) - t10.push(e[o]); - else - break; + for (let o of r15) if (o in e) t10.push(e[o]); + else break; return t10; } function WX(r15) { return r15.length === 0 ? 0 : r15[0] === Fa.FIRST_DIM_SIZE ? r15.length - 1 : r15.length; } function UX(r15, e) { - if (r15 == null || e == null) - return; + if (r15 == null || e == null) return; let t10 = r15.length, o = e.length; - if (t10 >= o) - throw new Error(`defaultValue.shape=${r15} and ragged tensor flatValues.shape=${e}, are incompatible: defaultValue.rank = ${t10} must be less than ragged tensor input flatValues.rank = ${o})`); + if (t10 >= o) throw new Error(`defaultValue.shape=${r15} 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 s = r15[n], a = e[n + 1]; - if (s >= 0 && a >= 0 && s !== 1 && s !== a) - throw new Error(`defaultValue.shape=${r15}, and ragged tensor input flatValues.shape=${e} are incompatible: defaultValue.shape[${n - r15.length}] = ${s} but ragged tensor input.flatValues.shape[${n - r15.length}] = ${a}`); + if (s >= 0 && a >= 0 && s !== 1 && s !== a) throw new Error(`defaultValue.shape=${r15}, and ragged tensor input flatValues.shape=${e} are incompatible: defaultValue.shape[${n - r15.length}] = ${s} but ragged tensor input.flatValues.shape[${n - r15.length}] = ${a}`); } } var uf = 30; @@ -9478,13 +8770,11 @@ function HX(r15, e, t10) { } function KX(r15, e, t10, o = true) { let n = []; - if (o) - n = n.concat(e.slice(0)), n.push(r15[0] / t10), n = n.concat(r15.slice(1)); + if (o) n = n.concat(e.slice(0)), n.push(r15[0] / t10), n = n.concat(r15.slice(1)); else { n = n.concat(r15[0]); let s = e.length; - for (let a = 0; a < s; ++a) - n = n.concat([r15[a + 1] / e[a], e[a]]); + for (let a = 0; a < s; ++a) n = n.concat([r15[a + 1] / e[a], e[a]]); n = n.concat(r15.slice(s + 1)); } return n; @@ -9493,12 +8783,10 @@ function qX(r15, e, t10 = true) { let o = []; if (t10) { o.push(e); - for (let n = e + 1; n < r15; ++n) - n <= 2 * e ? (o.push(n), o.push(n - (e + 1))) : o.push(n); + for (let n = e + 1; n < r15; ++n) n <= 2 * e ? (o.push(n), o.push(n - (e + 1))) : o.push(n); } else { let n = [], s = []; - for (let a = 1; a < r15; ++a) - a >= e * 2 + 1 || a % 2 === 1 ? s.push(a) : n.push(a); + for (let a = 1; a < r15; ++a) a >= e * 2 + 1 || a % 2 === 1 ? s.push(a) : n.push(a); o.push(...n), o.push(0), o.push(...s); } return o; @@ -9506,20 +8794,17 @@ function qX(r15, e, t10 = true) { function jX(r15, e, t10, o = true) { let n = []; o ? n.push(r15[0] / t10) : n.push(r15[0] * t10); - for (let s = 1; s < r15.length; ++s) - s <= e.length ? o ? n.push(e[s - 1] * r15[s]) : n.push(r15[s] / e[s - 1]) : n.push(r15[s]); + for (let s = 1; s < r15.length; ++s) s <= e.length ? o ? n.push(e[s - 1] * r15[s]) : n.push(r15[s] / e[s - 1]) : n.push(r15[s]); return n; } function XX(r15, e) { let t10 = [0]; - for (let o = 0; o < e; ++o) - t10.push(r15[o][0]); + for (let o = 0; o < e; ++o) t10.push(r15[o][0]); return t10; } function YX(r15, e, t10) { let o = r15.slice(0, 1); - for (let n = 0; n < t10; ++n) - o.push(r15[n + 1] - e[n][0] - e[n][1]); + for (let n = 0; n < t10; ++n) o.push(r15[n + 1] - e[n][0] - e[n][1]); return o; } var QX = 1.7580993408473768; @@ -9531,29 +8816,24 @@ var r52 = 1.421413741; var o5 = -1.453152027; var n5 = 1.061405429; function s5(r15, e) { - if (r15.length !== e.length) - throw new Error(`Cannot merge real and imag arrays of different lengths. real:${r15.length}, imag: ${e.length}.`); + if (r15.length !== e.length) throw new Error(`Cannot merge real and imag arrays of different lengths. real:${r15.length}, imag: ${e.length}.`); let t10 = new Float32Array(r15.length * 2); - for (let o = 0; o < t10.length; o += 2) - t10[o] = r15[o / 2], t10[o + 1] = e[o / 2]; + for (let o = 0; o < t10.length; o += 2) t10[o] = r15[o / 2], t10[o + 1] = e[o / 2]; return t10; } function a5(r15) { let e = new Float32Array(r15.length / 2), t10 = new Float32Array(r15.length / 2); - for (let o = 0; o < r15.length; o += 2) - e[o / 2] = r15[o], t10[o / 2] = r15[o + 1]; + for (let o = 0; o < r15.length; o += 2) e[o / 2] = r15[o], t10[o / 2] = r15[o + 1]; return { real: e, imag: t10 }; } function i5(r15) { let e = Math.ceil(r15.length / 4), t10 = new Float32Array(e), o = new Float32Array(e); - for (let n = 0; n < r15.length; n += 4) - t10[Math.floor(n / 4)] = r15[n], o[Math.floor(n / 4)] = r15[n + 1]; + for (let n = 0; n < r15.length; n += 4) t10[Math.floor(n / 4)] = r15[n], o[Math.floor(n / 4)] = r15[n + 1]; return { real: t10, imag: o }; } function u5(r15) { let e = Math.floor(r15.length / 4), t10 = new Float32Array(e), o = new Float32Array(e); - for (let n = 2; n < r15.length; n += 4) - t10[Math.floor(n / 4)] = r15[n], o[Math.floor(n / 4)] = r15[n + 1]; + for (let n = 2; n < r15.length; n += 4) t10[Math.floor(n / 4)] = r15[n], o[Math.floor(n / 4)] = r15[n + 1]; return { real: t10, imag: o }; } function p5(r15, e) { @@ -9582,22 +8862,17 @@ var ST = "..."; function f5(r15, e) { r15 = r15.replace(/\s/g, ""); let t10 = (r15.length - r15.replace(d5, "").length) / lS.length; - if (t10 < 1) - throw new Error("Equations without an arrow are not supported."); - if (t10 > 1) - throw new Error(`Equation must contain exactly one arrow ("${lS}").`); + if (t10 < 1) throw new Error("Equations without an arrow are not supported."); + if (t10 > 1) throw new Error(`Equation must contain exactly one arrow ("${lS}").`); let [o, n] = r15.split(lS); E(o.indexOf(ST) === -1, () => `The ellipsis notation ("${ST}") is not supported yet.`); let s = o.split(wT), 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."); + 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 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.`); + 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) { @@ -9606,45 +8881,37 @@ function f5(r15, e) { } 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.`); + 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 d = 0; d < s[m].length; ++d) - p[m].push(i.indexOf(s[m][d])); + 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); + for (let m = c; m < u; ++m) l.push(m); return { allDims: i, summedDims: l, idDims: p }; } function h5(r15, e) { let t10 = new Array(r15); t10.fill(-1); - for (let n = 0; n < e.length; ++n) - t10[e[n]] = n; + for (let n = 0; n < e.length; ++n) t10[e[n]] = n; let o = []; - for (let n = 0; n < r15; ++n) - t10[n] === -1 && o.push(n); + for (let n = 0; n < r15; ++n) t10[n] === -1 && o.push(n); return t10 = t10.filter((n) => n !== -1), { permutationIndices: t10, expandDims: o }; } function g5(r15, e, t10) { let o = new Array(r15); for (let n = 0; n < t10.length; ++n) { let s = t10[n].shape; - for (let a = 0; a < e[n].length; ++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]}`); + for (let a = 0; a < e[n].length; ++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 x5(r15, e) { let t10 = r15, o = [], n = 0; r15.length === 0 && t10.push(-1), n = r15.length + 1; - for (let a = 0; a < n; ++a) - o.push([]); + for (let a = 0; a < n; ++a) o.push([]); let s = []; for (let a = 0; a < t10.length; ++a) { let i = t10[a], p = b5(e, i); - for (let u of p) - s.indexOf(u) === -1 && (o[a].push(u), s.push(u)); + for (let u of p) s.indexOf(u) === -1 && (o[a].push(u), s.push(u)); } return { path: t10, steps: o }; } @@ -9653,14 +8920,12 @@ function y5(r15) { } function b5(r15, e) { let t10 = []; - for (let o = 0; o < r15.length; ++o) - (r15[o].length === 0 || r15[o].indexOf(e) !== -1 || e === -1) && t10.push(o); + for (let o = 0; o < r15.length; ++o) (r15[o].length === 0 || r15[o].indexOf(e) !== -1 || e === -1) && t10.push(o); return t10; } function C5(r15, e, t10 = 0) { let o = []; - if (typeof e == "number") - E(r15.shape[t10] % e === 0, () => "Number of splits must evenly divide the axis."), o = new Array(e).fill(r15.shape[t10] / e); + if (typeof e == "number") E(r15.shape[t10] % e === 0, () => "Number of splits must evenly divide the axis."), o = new Array(e).fill(r15.shape[t10] / 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."); @@ -9717,37 +8982,26 @@ var mS = {}; qe(mS, { collectGatherOpShapeInfo: () => P5, computeOutShape: () => F5, segOpComputeOptimalWindowSize: () => A5 }); function A5(r15, e) { let t10 = false, o; - for (r15 <= uf ? (o = r15, t10 = true) : o = Up(r15, Math.floor(Math.sqrt(r15))); !t10; ) - o > e || o === r15 ? t10 = true : o = Up(r15, o + 1); + for (r15 <= uf ? (o = r15, t10 = true) : o = Up(r15, Math.floor(Math.sqrt(r15))); !t10; ) o > e || o === r15 ? t10 = true : o = Up(r15, o + 1); return o; } function F5(r15, e, t10) { let o = [], n = r15.length; - for (let s = 0; s < n; s++) - s !== e ? o.push(r15[s]) : o.push(t10); + for (let s = 0; s < n; s++) s !== e ? o.push(r15[s]) : o.push(t10); return o; } function P5(r15, e, t10, o) { let n = e.shape.length, s = r15.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) ( + 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}).`); - for (let l = 0; l < o; ++l) - if (r15.shape[l] !== e.shape[l]) - throw new Error(`x.shape[${l}]: ${r15.shape[l]} should be equal to indices.shape[${l}]: ${e.shape[l]}.`); + if (t10 < o) throw new Error(`batchDims (${o}) must be less than or equal to axis (${t10}).`); + for (let l = 0; l < o; ++l) if (r15.shape[l] !== e.shape[l]) throw new Error(`x.shape[${l}]: ${r15.shape[l]} should be equal to indices.shape[${l}]: ${e.shape[l]}.`); let a = r15.shape[t10], i = [], p = 1, u = 1, c = 1; - for (let l = 0; l < o; ++l) - i.push(r15.shape[l]), p *= r15.shape[l]; - for (let l = o; l < t10; l++) - i.push(r15.shape[l]), u *= r15.shape[l]; - for (let l = o; l < n; l++) - i.push(e.shape[l]); - for (let l = t10 + 1; l < s; l++) - i.push(r15.shape[l]), c *= r15.shape[l]; + for (let l = 0; l < o; ++l) i.push(r15.shape[l]), p *= r15.shape[l]; + for (let l = o; l < t10; l++) i.push(r15.shape[l]), u *= r15.shape[l]; + for (let l = o; l < n; l++) i.push(e.shape[l]); + for (let l = t10 + 1; l < s; l++) i.push(r15.shape[l]), c *= r15.shape[l]; return { batchSize: p, sliceSize: c, outerSize: u, dimSize: a, outputShape: i }; } function O5(r15) { @@ -9793,8 +9047,7 @@ function I(r15, e, t10, o, n) { let s = e.inputParams[r15]; if (s && s.inputIndexStart !== void 0) { let i = s.inputIndexStart, p = s.inputIndexEnd === 0 ? void 0 : s.inputIndexEnd === void 0 ? i + 1 : s.inputIndexEnd, u = i < 0 ? e.inputNames.length + i : i; - if (s.type === "tensor") - return Bt(e.inputNames[u], t10, o, n); + if (s.type === "tensor") return Bt(e.inputNames[u], t10, o, n); if (s.type === "tensors") { let m = e.inputs.slice(i, p); return e.inputNames.slice(i, p).filter((f, h) => { @@ -9812,8 +9065,7 @@ function Bt(r15, e, t10, o) { let [n, s] = Nr(r15, t10); if (o != null) { let i = o.getHashTableHandleByName(n); - if (i != null) - return i; + if (i != null) return i; } let a = t10.currentContextIds.find((i) => !!e[cf(n, i)]); return a !== void 0 ? e[cf(n, a)][s] : void 0; @@ -9829,17 +9081,14 @@ function cf(r15, e) { return e ? `${r15}-${e}` : r15; } function Nr(r15, e) { - if (r15 === "") - return ["", 0, void 0]; + if (r15 === "") return ["", 0, void 0]; let t10 = e != null && e.parseNodeNameCache != null; if (t10) { let s = e.parseNodeNameCache.get(r15); - if (s != null) - return s; + if (s != null) return s; } let o = r15.split(":"), n; - if (o.length === 1) - n = [r15, 0, void 0]; + if (o.length === 1) n = [r15, 0, void 0]; else { let s = o[0], a = o.length === 3 ? o[1] : void 0, i = Number(o[o.length - 1]); n = [s, i, a]; @@ -9851,8 +9100,7 @@ function Pl(r15, e, t10) { if (o === "explicit") { o = I("explicitPaddings", r15, e, t10); 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]; + for (let s = 0; s < 4; s++) n[s][0] = o[s * 2], n[s][1] = o[s * 2 + 1]; return n; } return o; @@ -10048,10 +9296,8 @@ var Ol = class { }; function i8(r15) { let e = A().global; - if (typeof e.atob != "undefined") - return e.atob(r15); - if (typeof Buffer != "undefined") - return new Buffer(r15, "base64").toString(); + if (typeof e.atob != "undefined") return e.atob(r15); + if (typeof Buffer != "undefined") return new Buffer(r15, "base64").toString(); throw new Error("Unable to decode base64 in this environment. Missing built-in atob() or Buffer()"); } function kT(r15, e) { @@ -10106,8 +9352,7 @@ function hf(r15, e, t10) { return o && o.list && o.list.type ? o.list.type.map((n) => PS(n)) : t10; } function NT(r15) { - if (!r15.unknownRank) - return r15.dim != null ? r15.dim.map((e) => typeof e.size == "number" ? e.size : parseInt(e.size, 10)) : []; + if (!r15.unknownRank) return r15.dim != null ? r15.dim.map((e) => typeof e.size == "number" ? e.size : parseInt(e.size, 10)) : []; } function gf(r15, e, t10) { let o = r15[e]; @@ -10138,29 +9383,18 @@ var wf = class { } getAttr(e, t10) { let o = this.node.rawAttrs[e]; - if (o.tensor != null) - return Bt(e, this.tensorMap, this.context); - if (o.i != null || o.f != null) - return df(this.node.rawAttrs, e, t10); - if (o.s != null) - return lf(this.node.rawAttrs, e, t10); - if (o.b != null) - return mf(this.node.rawAttrs, e, t10); - if (o.shape != null) - return gf(this.node.rawAttrs, e, t10); - if (o.type != null) - return ff(this.node.rawAttrs, e, t10); + if (o.tensor != null) return Bt(e, this.tensorMap, this.context); + if (o.i != null || o.f != null) return df(this.node.rawAttrs, e, t10); + if (o.s != null) return lf(this.node.rawAttrs, e, t10); + if (o.b != null) return mf(this.node.rawAttrs, e, t10); + if (o.shape != null) return gf(this.node.rawAttrs, e, t10); + if (o.type != null) return ff(this.node.rawAttrs, e, t10); if (o.list != null) { - if (o.list.i != null || o.list.f != null) - return xf(this.node.rawAttrs, e, t10); - if (o.list.s != null) - return yf(this.node.rawAttrs, e, t10); - if (o.list.shape != null) - return bf(this.node.rawAttrs, e, t10); - if (o.list.b != null) - return Cf(this.node.rawAttrs, e, t10); - if (o.list.type != null) - return hf(this.node.rawAttrs, e, t10); + if (o.list.i != null || o.list.f != null) return xf(this.node.rawAttrs, e, t10); + if (o.list.s != null) return yf(this.node.rawAttrs, e, t10); + if (o.list.shape != null) return bf(this.node.rawAttrs, e, t10); + if (o.list.b != null) return Cf(this.node.rawAttrs, e, t10); + if (o.list.type != null) return hf(this.node.rawAttrs, e, t10); } return t10; } @@ -10308,26 +9542,20 @@ function ET(r15) { } function fc(r15, e, t10) { let o = Sf(r15, t10), n = !ET(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.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 = Sf(s.shape, o); - }), !ET(o)) - throw new Error(`Non-fully-defined elementShape: ${o}`); + }), !ET(o)) throw new Error(`Non-fully-defined elementShape: ${o}`); return o; } function Sf(r15, e) { - if (typeof r15 == "number") - return e; - if (typeof e == "number") - return r15; - if (r15.length !== e.length) - throw new Error(`Incompatible ranks during merge: ${r15} vs. ${e}`); + if (typeof r15 == "number") return e; + if (typeof e == "number") return r15; + if (r15.length !== e.length) throw new Error(`Incompatible ranks during merge: ${r15} vs. ${e}`); let t10 = []; for (let o = 0; o < r15.length; ++o) { let n = r15[o], s = e[o]; - if (n >= 0 && s >= 0 && n !== s) - throw new Error(`Incompatible shape during merge: ${r15} vs. ${e}`); + if (n >= 0 && s >= 0 && n !== s) throw new Error(`Incompatible shape during merge: ${r15} vs. ${e}`); t10[o] = n >= 0 ? n : s; } return t10; @@ -10351,84 +9579,62 @@ var If = class { 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()}`); + 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 t10 = this.tensors[e]; - if (t10.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?).`); + if (t10.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; } readMany(e) { return e.map((t10) => this.read(t10)); } write(e, t10) { - 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}`); + 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) - throw new Error(`TensorArray ${this.name}: Could not write to TensorArray index ${e}, + if (t10.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), Hr(this.elementShape, t10.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.`); + if (this.size() === 0 && (this.elementShape == null || this.elementShape.length === 0) && (this.elementShape = t10.shape), Hr(this.elementShape, t10.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, $r(t10), 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}.`); + 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])); } gather(e, t10) { - if (t10 && t10 !== this.dtype) - throw new Error(`TensorArray dtype is ${this.dtype} but gather requested dtype ${t10}`); - if (e) - e = e.slice(0, this.size()); + if (t10 && t10 !== this.dtype) throw new Error(`TensorArray dtype is ${this.dtype} but gather requested dtype ${t10}`); + if (e) e = e.slice(0, this.size()); else { e = []; - for (let n = 0; n < this.size(); n++) - e.push(n); + for (let n = 0; n < this.size(); n++) e.push(n); } - if (e.length === 0) - return ar([], [0].concat(this.elementShape)); + if (e.length === 0) return ar([], [0].concat(this.elementShape)); let o = this.readMany(e); return Hr(this.elementShape, o[0].shape, "TensorArray shape mismatch: "), vr(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 ar([], [0].concat(this.elementShape)); + if (e && e !== this.dtype) throw new Error(`TensorArray dtype is ${this.dtype} but concat requested dtype ${e}`); + if (this.size() === 0) return ar([], [0].concat(this.elementShape)); let t10 = []; - for (let n = 0; n < this.size(); n++) - t10.push(n); + for (let n = 0; n < this.size(); n++) t10.push(n); let o = this.readMany(t10); return Hr(this.elementShape, o[0].shape, `TensorArray shape mismatch: tensor array shape (${this.elementShape}) vs first tensor shape (${o[0].shape})`), yt(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]}`); + 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]}`); let o = Math.max(...e); - if (!this.dynamicSize && o >= this.maxSize) - throw new Error(`Max index must be < array size (${o} vs. ${this.maxSize})`); + if (!this.dynamicSize && o >= this.maxSize) throw new Error(`Max index must be < array size (${o} vs. ${this.maxSize})`); this.writeMany(e, fo(t10, 0)); } split(e, t10) { - if (t10.dtype !== this.dtype) - throw new Error(`TensorArray dtype is ${this.dtype} but tensor has dtype ${t10.dtype}`); + if (t10.dtype !== this.dtype) throw new Error(`TensorArray dtype is ${this.dtype} but tensor has dtype ${t10.dtype}`); let o = 0, n = e.map((p) => (o += p, o)); - if (o !== t10.shape[0]) - throw new Error(`Expected sum of lengths to be equal to + if (o !== t10.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}`); - 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`); + 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 = []; De(() => { t10 = W(t10, [1, o, s]); @@ -10439,8 +9645,7 @@ var If = class { return a; }); let i = []; - for (let p = 0; p < e.length; p++) - i[p] = p; + for (let p = 0; p < e.length; p++) i[p] = p; this.writeMany(i, a); } }; @@ -10450,8 +9655,7 @@ var hc = class r9 { } constructor(e, t10, o, n = -1) { this.tensors = e, this.elementShape = t10, 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}`); + if (o !== s.dtype) throw new Error(`Invalid data types; op elements ${o}, but list elements ${s.dtype}`); Hr(t10, s.shape, "TensorList shape mismatch: "), $r(s); }), this.idTensor = ke(0), this.maxNumElements = n, $r(this.idTensor); } @@ -10467,10 +9671,8 @@ var hc = class r9 { 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}`); - 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.`); + if (t10 !== this.elementDtype) throw new Error(`Invalid data types; op elements ${t10}, 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.`); Hr(e, this.elementShape, "TensorList shape mismatch: "); let n = fc(this.elementShape, this.tensors, e); return De(() => { @@ -10479,52 +9681,39 @@ var hc = class r9 { }); } popBack(e, t10) { - if (t10 !== this.elementDtype) - throw new Error(`Invalid data types; op elements ${t10}, but list elements ${this.elementDtype}`); - if (this.size() === 0) - throw new Error("Trying to pop from an empty list."); + if (t10 !== this.elementDtype) throw new Error(`Invalid data types; op elements ${t10}, but list elements ${this.elementDtype}`); + if (this.size() === 0) throw new Error("Trying to pop from an empty list."); let o = fc(this.elementShape, this.tensors, e), n = this.tensors.pop(); return n.kept = false, Hr(n.shape, e, "TensorList shape mismatch: "), W(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 (Hr(e.shape, this.elementShape, "TensorList shape mismatch: "), this.maxNumElements === this.size()) - throw new Error("Trying to push element into a full list."); + if (e.dtype !== this.elementDtype) throw new Error(`Invalid data types; op elements ${e.dtype}, but list elements ${this.elementDtype}`); + if (Hr(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}.`); + 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 r9([], this.elementShape, this.elementDtype, this.maxNumElements); t10.tensors.length = e; - for (let o = 0; o < Math.min(this.tensors.length, e); ++o) - t10.tensors[o] = this.tensors[o]; + for (let o = 0; o < Math.min(this.tensors.length, e); ++o) t10.tensors[o] = this.tensors[o]; return t10; } getItem(e, t10, 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.`); + 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.`); Hr(this.tensors[e].shape, t10, "TensorList shape mismatch: "); let n = fc(this.elementShape, this.tensors, t10); return W(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}`); - 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.`); + if (t10.dtype !== this.elementDtype) throw new Error(`Invalid data types; op elements ${t10.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.`); Hr(this.elementShape, t10.shape, "TensorList shape mismatch: "), $r(t10), this.tensors[e] != null && (this.tensors[e].kept = false), this.tensors[e] = t10; } gather(e, t10, o) { - if (t10 !== this.elementDtype) - throw new Error(`Invalid data types; op elements ${t10}, but list elements ${this.elementDtype}`); + if (t10 !== this.elementDtype) throw new Error(`Invalid data types; op elements ${t10}, but list elements ${this.elementDtype}`); Hr(this.elementShape, o, "TensorList shape mismatch: "), e = e.slice(0, this.size()); let n = fc(this.elementShape, this.tensors, o); return e.length === 0 ? ar([], [0].concat(n)) : De(() => { @@ -10533,8 +9722,7 @@ var hc = class r9 { }); } concat(e, t10) { - if (e && e !== this.elementDtype) - throw new Error(`TensorList dtype is ${this.elementDtype} but concat requested dtype ${e}`); + if (e && e !== this.elementDtype) throw new Error(`TensorList dtype is ${this.elementDtype} but concat requested dtype ${e}`); Hr(this.elementShape, t10, "TensorList shape mismatch: "); let o = fc(this.elementShape, this.tensors, t10); return this.size() === 0 ? ar([], [0].concat(o)) : De(() => { @@ -10545,10 +9733,8 @@ var hc = class r9 { }; function $T(r15, e, t10) { let o = r15.dtype; - if (r15.shape.length < 1) - throw new Error(`Tensor must be at least a vector, but saw shape: ${r15.shape}`); - if (r15.dtype !== t10) - throw new Error(`Invalid data types; op elements ${r15.dtype}, but list elements ${t10}`); + if (r15.shape.length < 1) throw new Error(`Tensor must be at least a vector, but saw shape: ${r15.shape}`); + if (r15.dtype !== t10) throw new Error(`Invalid data types; op elements ${r15.dtype}, but list elements ${t10}`); let n = r15.shape.slice(1); Hr(n, e, "TensorList shape mismatch: "); let s = fo(r15); @@ -10558,11 +9744,9 @@ function RT(r15, e, t10, o) { return new hc([], r15, e, o); } function DT(r15, e, t10, o) { - if (e.length !== r15.shape[0]) - throw new Error(`Expected len(indices) == tensor.shape[0], but saw: ${e.length} vs. ${r15.shape[0]}`); + if (e.length !== r15.shape[0]) throw new Error(`Expected len(indices) == tensor.shape[0], but saw: ${e.length} vs. ${r15.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})`); + if (o != null && o !== -1 && n >= o) throw new Error(`Max index must be < array size (${n} vs. ${o})`); let s = new hc([], t10, r15.dtype, o), a = fo(r15, 0); return e.forEach((i, p) => { s.setItem(i, a[p]); @@ -10570,8 +9754,7 @@ function DT(r15, e, t10, o) { } function AT(r15, e, t10) { let o = 0, n = e.map((c) => (o += c, o)); - if (o !== r15.shape[0]) - throw new Error(`Expected sum of lengths to be equal to + if (o !== r15.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: ${r15.shape}`); let s = r15.shape.slice(1), a = Sf(s, t10), i = o === 0 ? 0 : r15.size / o, p = De(() => { @@ -10583,8 +9766,7 @@ function AT(r15, e, t10) { } return r15.dispose(), c; }), u = new hc([], t10, r15.dtype, e.length); - for (let c = 0; c < p.length; c++) - u.setItem(c, p[c]); + for (let c = 0; c < p.length; c++) u.setItem(c, p[c]); return u; } var FT = async (r15, e, t10) => { @@ -10743,13 +9925,10 @@ var FT = async (r15, e, t10) => { function PT(r15, e, t10) { let [o, n] = I("fusedOps", r15, e, t10), s = o === "biasadd", a = !s, i = n === "prelu", p = o === "fusedbatchnorm", u = I("numArgs", r15, e, t10); 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 (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"); + if (p) throw new Error("FusedConv2d and DepthwiseConv2d with FusedBatchNorm is not supported"); let c = I("strides", r15, e, t10), l = Pl(r15, e, t10), m = I("dataFormat", r15, e, t10).toUpperCase(), d = I("dilations", r15, e, t10), [f, h] = I("args", r15, e, t10); a && (h = f, f = void 0); let g = I("leakyreluAlpha", r15, e, t10); @@ -10947,8 +10126,7 @@ var zT = (r15, e, t10, o = Je) => { case "Print": let a = I("x", r15, e, t10), i = I("data", r15, e, t10), p = I("message", r15, e, t10), u = I("summarize", r15, e, t10); 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)); + for (let c = 0; c < i.length; c++) console.log(Array.prototype.slice.call(i[c].dataSync()).slice(0, u)); return [a]; default: throw TypeError(`Node type ${r15.op} is not implemented`); @@ -11000,10 +10178,8 @@ var vf = class { return o != null ? o : t10; } checkKeyAndValueTensor(e, t10) { - 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 (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}`); } }; var VT = async (r15, e, t10, o) => { @@ -11011,8 +10187,7 @@ var VT = async (r15, e, t10, o) => { case "HashTable": case "HashTableV2": { let n = o.getHashTableHandleByName(r15.name); - if (n != null) - return [n]; + if (n != null) return [n]; { let s = I("keyDType", r15, e, t10), a = I("valueDType", r15, e, t10), i = new vf(s, a); return o.addHashTable(r15.name, i), [i.handle]; @@ -11103,10 +10278,8 @@ var GT = (r15, e, t10, o = Je) => { case "_FusedMatMul": let [n, s] = I("fusedOps", r15, e, t10), a = n === "biasadd", i = s === "prelu", p = I("numArgs", r15, e, t10), u = I("leakyreluAlpha", r15, e, t10); 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."); + 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", r15, e, t10); return [o.fused.matMul({ a: I("a", r15, e, t10), b: I("b", r15, e, t10), transposeA: I("transposeA", r15, e, t10), transposeB: I("transposeB", r15, e, t10), bias: c, activation: s, preluActivationWeights: l, leakyreluAlpha: u })]; @@ -11225,8 +10398,7 @@ var jT = (r15, e, t10, o = Je) => { } case "Reverse": { let n = I("dims", r15, e, t10), s = []; - for (let i = 0; i < n.length; i++) - n[i] && s.push(i); + for (let i = 0; i < n.length; i++) n[i] && s.push(i); let a = I("x", r15, e, t10); return [o.reverse(a, s)]; } @@ -11246,8 +10418,7 @@ var jT = (r15, e, t10, o = Je) => { return De(() => { let n = I("axis", r15, e, t10), s = I("tensors", r15, e, t10), 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"); + 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)]; @@ -11421,8 +10592,7 @@ function MS(r15, e, t10, o, n = De) { return VT(a, i, p, o); case "custom": let u = pf(a.op); - if (u && u.customExecutor) - return u.customExecutor(new wf(a, i, p)); + if (u && u.customExecutor) return u.customExecutor(new wf(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()`); @@ -11464,18 +10634,15 @@ var Ml = class { 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"); + 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"); + } else throw new Error("Cannot increase frame iteration, the context is empty"); } getWeight(e) { return this.weightMap[e]; @@ -11493,10 +10660,8 @@ var Ml = 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 t10 in this.tensorArrayMap) this.tensorArrayMap[t10].clearAndClose(e); + for (let t10 in this.tensorListMap) this.tensorListMap[t10].clearAndClose(e); } }; function LS(r15, e, t10, o) { @@ -11525,14 +10690,12 @@ function JT(r15, e) { let p = i([...n, ...r15.weights, ...s]).filter(a), u = i([...p, ...Object.values(r15.nodes)]).filter(a), c = new Map(u.map((g) => [g.name, g])), l = {}; for (let g of u) { l[g.name] = l[g.name] || 0; - for (let x of g.children) - a(x) || (l[x.name] = Number.POSITIVE_INFINITY), l[x.name] = (l[x.name] || 0) + 1; + for (let x of g.children) a(x) || (l[x.name] = Number.POSITIVE_INFINITY), l[x.name] = (l[x.name] || 0) + 1; } let m = Object.entries(l).filter(([, g]) => g === 0).map(([g]) => g), d = [...m]; for (; m.length > 0; ) { let g = m.pop(), x = c.get(g); - for (let b of x.children.filter(a)) - --l[b.name] === 0 && (d.push(b.name), m.push(b.name)); + for (let b of x.children.filter(a)) --l[b.name] === 0 && (d.push(b.name), m.push(b.name)); } let f = d.map((g) => c.get(g)), h = _8(f, p); return E8(h, p), h; @@ -11541,8 +10704,7 @@ function _8(r15, e) { let t10 = new Map(r15.map((a) => [a.name, a])), o = e.map((a) => a.name), n = new Set(o); for (; o.length > 0; ) { let a = o.pop(), i = t10.get(a); - for (let p of i.children) - !t10.has(p.name) || n.has(p.name) || (n.add(p.name), o.push(p.name)); + for (let p of i.children) !t10.has(p.name) || n.has(p.name) || (n.add(p.name), o.push(p.name)); } return r15.filter((a) => n.has(a.name)); } @@ -11555,18 +10717,13 @@ function E8(r15, e) { let t10 = new Map(r15.map((i, p) => [i.name, p])), o = new Set(e.map((i) => i.name)), n = (i) => o.has(typeof i == "string" ? i : i.name), s = new Set(r15.map((i) => i.name)), a = (i) => s.has(typeof i == "string" ? i : i.name); for (let i of r15) { for (let p of i.children.filter(a)) { - if (!t10.has(p.name)) - throw new gc(`Child ${p.name} of node ${i.name} is unreachable.`); - if (t10.get(i.name) > t10.get(p.name)) - throw new gc(`Node ${i.name} is scheduled to run after its child ${p.name}.`); + if (!t10.has(p.name)) throw new gc(`Child ${p.name} of node ${i.name} is unreachable.`); + if (t10.get(i.name) > t10.get(p.name)) throw new gc(`Node ${i.name} is scheduled to run after its child ${p.name}.`); + } + if (!n(i)) for (let p of i.inputs) { + if (!t10.has(p.name)) throw new gc(`Input ${p.name} of node ${i.name} is unreachable.`); + if (t10.get(p.name) > t10.get(i.name)) throw new gc(`Node ${i.name} is scheduled to run before its input ${p.name}.`); } - if (!n(i)) - for (let p of i.inputs) { - if (!t10.has(p.name)) - throw new gc(`Input ${p.name} of node ${i.name} is unreachable.`); - if (t10.get(p.name) > t10.get(i.name)) - throw new gc(`Node ${i.name} is scheduled to run before its input ${p.name}.`); - } } } function e_(r15) { @@ -11576,8 +10733,7 @@ function e_(r15) { }, s = r15.map((i, p) => i.children.map(n).reduce((u, c) => Math.max(u, c), o[p])), a = /* @__PURE__ */ new Map(); for (let i = 0; i < r15.length; ++i) { let p = s[i]; - if (p === t10) - continue; + if (p === t10) continue; let u = r15[i], c = r15[p]; a.has(c.name) || a.set(c.name, []), a.get(c.name).push(u); } @@ -11641,8 +10797,7 @@ var Ll = class r10 { } compile(e, t10) { let o = LS(e, t10, 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 (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 u = t10.map((l) => l.name), c = Object.keys(e); throw new Error(`Cannot compute the outputs [${u}] from the provided inputs [${c}]. Missing the following inputs: [${n}]`); @@ -11651,8 +10806,7 @@ var Ll = class r10 { return { orderedNodes: i, nodeLiveUntilMap: p }; } cloneAndKeepTensor(e) { - if (e == null) - return null; + if (e == null) return null; let t10 = e.clone(); return $r(t10), t10; } @@ -11684,11 +10838,9 @@ var Ll = class r10 { }); let f = this.getFrozenTensorIds(d), { orderedNodes: h, nodeLiveUntilMap: g } = u; for (let x of h) { - if (d[x.name]) - continue; + if (d[x.name]) continue; let b = MS(x, d, m, this._resourceManager); - if (y.isPromise(b)) - throw new Error(`The execution of the op '${x.op}' returned a promise. Please use model.executeAsync() instead.`); + if (y.isPromise(b)) throw new Error(`The execution of the op '${x.op}' returned a promise. Please use model.executeAsync() instead.`); d[x.name] = b, this.keepIntermediateTensors && (this.clonedTensorsMap[x.name] = this.cloneTensorList(b)), this.checkTensorForDisposalWithNodeLiveUntilInfo(x, d, m, f, a, g.get(x.name)); } return this.parent == null && m.dispose(f), t10.map((x) => Bt(x, d, m)); @@ -11700,19 +10852,15 @@ var Ll = class r10 { } checkTensorForDisposal(e, t10, o, n, s, a, i) { if (!(fu(t10) || a.has(e))) { - for (let p of o[e]) - p != null && (i[p.id] = (i[p.id] || 0) + t10.children.length); + for (let p of o[e]) p != null && (i[p.id] = (i[p.id] || 0) + t10.children.length); for (let p of t10.inputs) { - if (fu(p)) - continue; + if (fu(p)) continue; let u = hS(p.name, o, n); - if (u != null) - for (let c of u) { - if (!c || c.kept || s.has(c.id)) - continue; - let l = i[c.id]; - l === 1 ? (c.dispose(), delete i[c.id]) : l != null && i[c.id]--; - } + if (u != null) for (let c of u) { + if (!c || c.kept || s.has(c.id)) continue; + let l = i[c.id]; + l === 1 ? (c.dispose(), delete i[c.id]) : l != null && i[c.id]--; + } } } } @@ -11720,22 +10868,18 @@ var Ll = class r10 { function i(p) { return fu(p) || s.has(p.name); } - if (!(fu(e) || a == null)) - for (let p of a) { - if (i(p)) - continue; - let u = hS(p.name, t10, o); - for (let c of u) - !c || c.kept || n.has(c.id) || c.dispose(); - } + if (!(fu(e) || a == null)) for (let p of a) { + if (i(p)) continue; + let u = hS(p.name, t10, o); + for (let c of u) !c || c.kept || n.has(c.id) || c.dispose(); + } } async executeAsync(e, t10) { return this._executeAsync(e, t10); } disposeIntermediateTensors() { this.clonedTensorsMap && (Object.values(this.clonedTensorsMap).forEach((e) => { - for (let t10 of e) - t10 && !t10.isDisposed && t10.dispose(); + for (let t10 of e) t10 && !t10.isDisposed && t10.dispose(); }), this.clonedTensorsMap = null); } getIntermediateTensors() { @@ -11793,8 +10937,7 @@ var Ll = class r10 { m || ([m] = Ls(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, t10, 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, t10, o, n, s, u)); - } else - this.processChildNodes(l.node, t10, o, n, s, u); + } else this.processChildNodes(l.node, t10, o, n, s, u); } return c; } @@ -11831,8 +10974,7 @@ var Ll = class r10 { let [n] = Nr(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 (t10.length > 0) throw new Error(`The dict provided in model.execute(dict) has keys: [${t10}] that are not part of graph`); } mapOutputs(e) { return e.map((t10) => { @@ -11844,8 +10986,7 @@ var Ll = class r10 { checkOutputs(e) { e.forEach((t10) => { let [o] = Nr(t10); - if (!this.graph.nodes[o]) - throw new Error(`The output '${t10}' is not found in the graph`); + if (!this.graph.nodes[o]) throw new Error(`The output '${t10}' is not found in the graph`); }); } }; @@ -11863,10 +11004,8 @@ var kf = class { 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]; + 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 P8 = "?tfjs-format=file"; @@ -11904,22 +11043,17 @@ var Bl = class { } 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); + if (e.load != null) this.handler = e; + 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]}'`); + 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]; } } 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."); + 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((t10) => t10.getWeightStream == null ? this.loadSync(t10) : this.loadStreaming(t10)) : this.loadSync(e); } @@ -11928,8 +11062,7 @@ var Bl = class { return this.loadWithWeightMap(e, t10); } async loadStreaming(e) { - if (e.getWeightStream == null) - throw new Error("Model artifacts missing streamWeights function"); + if (e.getWeightStream == null) throw new Error("Model artifacts missing streamWeights function"); let t10 = await ad(e.getWeightStream(), e.weightSpecs); return this.loadWithWeightMap(e, t10); } @@ -11949,14 +11082,11 @@ var Bl = class { async save(e, t10) { 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}'`); + 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."); + 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) { @@ -11978,17 +11108,15 @@ var Bl = class { var t10; if (!(e instanceof mt) && !Array.isArray(e)) { let s = (t10 = this.signature) === null || t10 === void 0 ? void 0 : t10.inputs; - if (s != null) - for (let a in s) { - let i = s[a]; - i.resourceId != null && (e[a] = this.resourceIdToCapturedInput[i.resourceId]); - } + 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.`); + 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; @@ -12038,41 +11166,32 @@ var Bl = class { } }; async function M8(r15, e = {}, t10 = di) { - if (r15 == null) - throw new Error("modelUrl in loadGraphModel() cannot be null. Please provide a url or an IOHandler that loads the model"); + if (r15 == 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 r15 == "string" && (r15 = B8(r15)); let o = new Bl(r15, e, t10); return await o.load(), o; } function L8(r15) { - if (r15 == null) - throw new Error("modelUrl in loadGraphModelSync() cannot be null. Please provide model artifacts or an IOHandler that loads the model"); + if (r15 == null) throw new Error("modelUrl in loadGraphModelSync() cannot be null. Please provide model artifacts or an IOHandler that loads the model"); let e; if (r15 instanceof Array) { let [o, n] = r15; - 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'"); + 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 = di.getWeightSpecs(o.weightsManifest), a = di.getModelArtifactsForJSONSync(o, s, n); e = di.fromMemorySync(a); - } else if ("load" in r15) - e = r15; - else if ("modelTopology" in r15 && "weightSpecs" in r15 && "weightData" in r15) - e = di.fromMemorySync(r15); - else - throw new Error("Unknown model format"); + } else if ("load" in r15) e = r15; + else if ("modelTopology" in r15 && "weightSpecs" in r15 && "weightData" in r15) e = di.fromMemorySync(r15); + else throw new Error("Unknown model format"); let t10 = new Bl(e); return t10.load(), t10; } function B8(r15) { return r15.endsWith("/") || (r15 = r15 + "/"), `${r15}${O8}${P8}`; } -var z8 = "4.17.0"; +var z8 = "4.21.0"; function Q(r15, e) { Array.isArray(r15) || (r15 = [r15]), r15.forEach((t10) => { t10 != null && y.assert(t10.dtype !== "complex64", () => `${e} does not support complex64 tensors in the CPU backend.`); @@ -12099,8 +11218,7 @@ Hi, looks like you are running TensorFlow.js in Node.js. To speed things up dram if (t10 === "string" && o != null && o.length > 0 && y.isString(o[0])) { let s = o.map((a) => y.encodeString(a)); n = this.write(s, e, t10); - } else - n = this.write(o, e, t10); + } else n = this.write(o, e, t10); return { dataId: n, shape: e, dtype: t10 }; } refCount(e) { @@ -12135,13 +11253,12 @@ Hi, looks like you are running TensorFlow.js in Node.js. To speed things up dram } bufferSync(e) { let t10 = this.readSync(e.dataId); - if (e.dtype === "string") - try { - let o = t10.map((n) => y.decodeString(n)); - return me(e.shape, e.dtype, o); - } catch (o) { - throw new Error("Failed to decode encoded string bytes into utf-8"); - } + if (e.dtype === "string") try { + let o = t10.map((n) => y.decodeString(n)); + return me(e.shape, e.dtype, o); + } catch (o) { + throw new Error("Failed to decode encoded string bytes into utf-8"); + } return me(e.shape, e.dtype, t10); } makeOutput(e, t10, o) { @@ -12149,8 +11266,7 @@ Hi, looks like you are running TensorFlow.js in Node.js. To speed things up dram } disposeData(e, t10 = false) { if (this.data.has(e)) { - if (this.data.get(e).refCount--, !t10 && this.data.get(e).refCount > 0) - return false; + if (this.data.get(e).refCount--, !t10 && 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); } @@ -12185,8 +11301,7 @@ var Ic = {}; qe(Ic, { addImpl: () => VS, bincountImpl: () => Cc, bincountReduceImpl: () => Nf, bitwiseAndImpl: () => WS, castImpl: () => zS, ceilImpl: () => US, concatImpl: () => ap, equalImpl: () => GS, expImpl: () => KS, expm1Impl: () => jS, floorDivImpl: () => YS, floorImpl: () => XS, gatherNdImpl: () => Tf, gatherV2Impl: () => _f, greaterEqualImpl: () => ZS, greaterImpl: () => QS, lessEqualImpl: () => eI, lessImpl: () => JS, linSpaceImpl: () => Ef, logImpl: () => tI, maxImpl: () => $f, maximumImpl: () => rI, minimumImpl: () => oI, multiplyImpl: () => zl, negImpl: () => nI, notEqualImpl: () => sI, prodImpl: () => aI, raggedGatherImpl: () => Rf, raggedRangeImpl: () => Df, raggedTensorToTensorImpl: () => Af, rangeImpl: () => up, rsqrtImpl: () => uI, scatterImpl: () => zs, sigmoidImpl: () => R_, simpleAbsImpl: () => BS, sliceImpl: () => pp, sparseFillEmptyRowsImpl: () => Ff, sparseReshapeImpl: () => Pf, sparseSegmentReductionImpl: () => Sc, sqrtImpl: () => F_, squaredDifferenceImpl: () => cI, staticRegexReplaceImpl: () => lI, stridedSliceImpl: () => Of, stringNGramsImpl: () => cp, stringSplitImpl: () => lp, stringToHashBucketFastImpl: () => mp, subImpl: () => dI, tileImpl: () => Mf, topKImpl: () => Lf, transposeImpl: () => wc, uniqueImpl: () => dp }); function BS(r15) { let e = new Float32Array(r15.length); - for (let t10 = 0; t10 < r15.length; ++t10) - e[t10] = Math.abs(r15[t10]); + for (let t10 = 0; t10 < r15.length; ++t10) e[t10] = Math.abs(r15[t10]); return e; } var W8 = (r15) => { @@ -12199,18 +11314,15 @@ var t_ = { kernelName: Xs, backendName: "cpu", kernelFunc: W8 }; function Ve(r15) { return (e, t10, o, n, s) => { let a = w.assertAndGetBroadcastShape(e, t10), i = a.length, p = y.computeStrides(a), u = y.sizeFromShape(a), c = y.getTypedArrayFromDType(s, u), l = e.length, m = t10.length, d = y.computeStrides(e), f = y.computeStrides(t10), h = w.getBroadcastDims(e, a), g = w.getBroadcastDims(t10, a); - if (h.length + g.length === 0) - for (let x = 0; x < c.length; ++x) - c[x] = r15(o[x % o.length], n[x % n.length]); - else - for (let x = 0; x < c.length; ++x) { - let b = y.indexToLoc(x, i, p), C = b.slice(-l); - h.forEach(($) => C[$] = 0); - let S = y.locToIndex(C, l, d), k = b.slice(-m); - g.forEach(($) => k[$] = 0); - let _ = y.locToIndex(k, m, f); - c[x] = r15(o[S], n[_]); - } + if (h.length + g.length === 0) for (let x = 0; x < c.length; ++x) c[x] = r15(o[x % o.length], n[x % n.length]); + else for (let x = 0; x < c.length; ++x) { + let b = y.indexToLoc(x, i, p), C = b.slice(-l); + h.forEach(($) => C[$] = 0); + let S = y.locToIndex(C, l, d), k = b.slice(-m); + g.forEach(($) => k[$] = 0); + let _ = y.locToIndex(k, m, f); + c[x] = r15(o[S], n[_]); + } return [c, a]; }; } @@ -12251,8 +11363,7 @@ function zS(r15, e, t10, o) { function Ro(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { dtype: s } = o; if (s === "complex64") { - if (n.dtype === "complex64") - return lr({ inputs: { x: n }, backend: t10 }); + if (n.dtype === "complex64") return lr({ inputs: { x: n }, backend: t10 }); let c = yc(t10, n.shape, n.dtype), l = Ro({ inputs: { x: n }, backend: t10, attrs: { dtype: "float32" } }), m = Ht({ inputs: { real: l, imag: c }, backend: t10 }); return t10.disposeIntermediateTensorInfo(c), t10.disposeIntermediateTensorInfo(l), m; } @@ -12288,20 +11399,18 @@ function Ye(r15, e, t10, o) { function bc(r15) { return (e, t10, o, n, s, a) => { let i = w.assertAndGetBroadcastShape(e, t10), p = y.sizeFromShape(i), u = i.length, c = y.computeStrides(i), l = y.getTypedArrayFromDType("float32", p), m = y.getTypedArrayFromDType("float32", p), d = w.getBroadcastDims(e, i), f = w.getBroadcastDims(t10, i), h = w.mergeRealAndImagArrays(o, n), g = w.mergeRealAndImagArrays(s, a), x = e.length, b = y.computeStrides(e), C = t10.length, S = y.computeStrides(t10); - if (d.length + f.length === 0) - for (let k = 0; k < l.length; k++) { - let _ = k % h.length, $ = k % g.length, R = r15(h[_ * 2], h[_ * 2 + 1], g[$ * 2], g[$ * 2 + 1]); - l[k] = R.real, m[k] = R.imag; - } - else - for (let k = 0; k < l.length; k++) { - let _ = y.indexToLoc(k, u, c), $ = _.slice(-x); - d.forEach((M) => $[M] = 0); - let R = y.locToIndex($, x, b), D = _.slice(-C); - f.forEach((M) => D[M] = 0); - let P = y.locToIndex(D, C, S), O = r15(h[R * 2], h[R * 2 + 1], g[P * 2], g[P * 2 + 1]); - l[k] = O.real, m[k] = O.imag; - } + if (d.length + f.length === 0) for (let k = 0; k < l.length; k++) { + let _ = k % h.length, $ = k % g.length, R = r15(h[_ * 2], h[_ * 2 + 1], g[$ * 2], g[$ * 2 + 1]); + l[k] = R.real, m[k] = R.imag; + } + else for (let k = 0; k < l.length; k++) { + let _ = y.indexToLoc(k, u, c), $ = _.slice(-x); + d.forEach((M) => $[M] = 0); + let R = y.locToIndex($, x, b), D = _.slice(-C); + f.forEach((M) => D[M] = 0); + let P = y.locToIndex(D, C, S), O = r15(h[R * 2], h[R * 2 + 1], g[P * 2], g[P * 2 + 1]); + l[k] = O.real, m[k] = O.imag; + } return [l, m, i]; }; } @@ -12313,21 +11422,18 @@ function Cc(r15, e, t10, o, n) { let s = y.sizeFromShape(o), a = y.makeZerosTypedArray(n, t10); for (let i = 0; i < r15.length; i++) { let p = r15[i]; - if (p < 0) - throw new Error("Input x must be non-negative!"); + 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 Nf(r15, e, t10, o = false) { let n = r15.shape[0], s = r15.shape[1], a = me([n, t10], e.dtype); - for (let i = 0; i < n; i++) - for (let p = 0; p < s; p++) { - let u = r15.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)); - } + for (let i = 0; i < n; i++) for (let p = 0; p < s; p++) { + let u = r15.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; } var WS = Ve((r15, e) => r15 & e); @@ -12336,8 +11442,7 @@ var i_ = { kernelName: qa, backendName: "cpu", kernelFunc: G8 }; function jt(r15) { return (e, t10, o) => { let n = y.getArrayFromDType(t10, e.length); - for (let s = 0; s < e.length; ++s) - n[s] = r15(e[s], o); + for (let s = 0; s < e.length; ++s) n[s] = r15(e[s], o); return n; }; } @@ -12351,11 +11456,9 @@ function Ar(r15, e, t10) { Q(a, r15); let i = s, p = i.data.get(a.dataId).values, u; if (a.dtype === "string") { - if (!Array.isArray(p)) - throw new Error("String tensor's value was not an instance of Array"); + if (!Array.isArray(p)) throw new Error("String tensor's value was not an instance of Array"); u = w.fromUint8ToStringArray(p); - } else - u = p; + } else u = p; let c = t10 || a.dtype, l = e(u, c, n); return i.makeTensorInfo(a.shape, c, l); }; @@ -12377,8 +11480,7 @@ function ap(r15, e, t10, o) { let i = t10 === "string" ? w.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++]; + for (let l = 0; l < a.shape[1]; ++l) n[c + l] = i[p++]; } s += a.shape[1]; }); @@ -12408,10 +11510,8 @@ function Tf(r15, e, t10, o, n, s, a, i, p) { let f = r15[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 d = 0; d < s; d++) - u.values[c * s + d] = e.get(...e.indexToLoc(m * s + d)); + if (m < 0 || m >= p / s) throw new Error(`Invalid indices: ${l} does not index into ${i}`); + for (let d = 0; d < s; d++) u.values[c * s + d] = e.get(...e.indexToLoc(m * s + d)); } return u; } @@ -12440,8 +11540,7 @@ var x_ = { kernelName: Dn, backendName: "cpu", kernelFunc: Z8 }; function Ef(r15, e, t10) { let o = (e - r15) / (t10 - 1), n = y.makeZerosTypedArray(t10, "float32"); n[0] = r15; - for (let s = 1; s < n.length; s++) - n[s] = n[s - 1] + o; + for (let s = 1; s < n.length; s++) n[s] = n[s - 1] + o; return n; } var tI = jt((r15) => Math.log(r15)); @@ -12487,8 +11586,7 @@ function wc(r15, e, t10, o, n) { let s = e.length, a = y.sizeFromShape(e), i = y.computeStrides(e), p = y.computeStrides(n), u = y.getTypedArrayFromDType(t10, y.sizeFromShape(n)); for (let c = 0; c < a; ++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]]; + for (let f = 0; f < m.length; f++) m[f] = l[o[f]]; let d = y.locToIndex(m, s, p); u[d] = r15[c]; } @@ -12498,8 +11596,7 @@ function St(r15) { let { inputs: e, attrs: t10, backend: o } = r15, { x: n } = e, { perm: s } = t10; Q(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]]; + for (let l = 0; l < i.length; l++) i[l] = n.shape[s[l]]; let p = o.data.get(n.dataId).values, u = wc(p, n.shape, n.dtype, s, i); return { dataId: o.write(u, i, n.dtype), shape: i, dtype: n.dtype }; } @@ -12508,8 +11605,7 @@ function aI(r15, e, t10, o) { let [n, s] = w.computeOutAndReduceShapes(r15, 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]; + for (let m = 0; m < p; ++m) l *= t10[c + m]; i[u] = l; } return { outVals: i, outShape: n, outDtype: a }; @@ -12534,15 +11630,10 @@ function aY(r15, e, t10) { function iY(r15, e) { for (let t10 = 0; t10 < r15.length; ++t10) { let o = r15[t10], n = t10 === r15.length - 1 ? e : r15[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"); + 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 uY(r15, e, t10, o) { @@ -12552,8 +11643,7 @@ function uY(r15, e, t10, o) { 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 l = 1; l < p + 1; ++l) i[u].push(l * c); } for (let u = 0; u < r15.length; ++u) { let c = r15[u], l = r15[u] + 1; @@ -12561,8 +11651,7 @@ function uY(r15, e, t10, o) { let d = t10[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); + for (let x = c; x < l; ++x) i[f].push(d[x + 1] + g); } c = d[c], l = d[l]; } @@ -12580,20 +11669,16 @@ function pY(r15) { } function N_(r15, e) { let t10 = r15.slice(0, e); - for (; t10.length < e; ) - t10.push(1); - for (let o = e; o < r15.length; o++) - t10[e - 1] *= r15[o]; + for (; t10.length < e; ) t10.push(1); + for (let o = e; o < r15.length; o++) t10[e - 1] *= r15[o]; return t10; } function cY(r15, e, t10, o, n, s) { let a = N_(e, 2)[1], i = N_(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] = r15[c * a + l]; - ++p; - } + 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] = r15[c * a + l]; + ++p; + } } function lY(r15, e, t10, o, n) { let s = e.slice(); @@ -12602,47 +11687,35 @@ function lY(r15, e, t10, o, n) { return cY(r15, e, o, p, a, s), [a, s]; } function Rf(r15, e, t10, o, n, s, a, i) { - if (r15.length === 0) - throw new Error("paramsNestedSplits must be non empty"); - if (e[0].length === 0) - throw new Error("Split tensors must not be scalars"); + if (r15.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 (aY(s, a, p), o.length === 0) - throw new Error("params.rank must be nonzero"); + if (aY(s, a, p), o.length === 0) throw new Error("params.rank must be nonzero"); let u = o[0], { outSplits: c, valueSlices: l, numValues: m } = uY(s, a, r15, u), d = pY(c), f = lY(t10, o, n, l, m); return [d, f[0], f[1]]; } var T_ = 2147483647; function Df(r15, e, t10, o, n, s, a) { - if (e.length > 1) - 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"); + if (e.length > 1) 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; g < c.length; ++g) - if (c[g] !== c[g - 1]) - throw new Error("starts, limits, and deltas must have the same shape"); + 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 = y.getArrayFromDType("int32", l + 1); m[0] = 0; for (let g = 0; g < l; ++g) { let x = i ? r15[0] : r15[g], b = p ? o[0] : o[g], C = u ? s[0] : s[g]; - if (C === 0) - throw new Error("Requires delta != 0"); + if (C === 0) throw new Error("Requires delta != 0"); let S; - if (C > 0 && b < x || C < 0 && b > x) - S = 0; - else if (S = Math.ceil(Math.abs((b - x) / C)), S > T_) - throw new Error(`Requires ((limit - start) / delta) <= ${T_}`); + if (C > 0 && b < x || C < 0 && b > x) S = 0; + else if (S = Math.ceil(Math.abs((b - x) / C)), S > T_) throw new Error(`Requires ((limit - start) / delta) <= ${T_}`); m[g + 1] = m[g] + S; } let d = m[l], f = y.getArrayFromDType(t10, d), h = 0; for (let g = 0; g < l; ++g) { let x = m[g + 1] - m[g], b = i ? r15[0] : r15[g], C = u ? s[0] : s[g]; - for (let S = 0; S < x; ++S) - f[h++] = b, b += C; + for (let S = 0; S < x; ++S) f[h++] = b, b += C; } return [m, f]; } @@ -12670,8 +11743,7 @@ var iI = class r12 { } static getMaxWidthRowSplit(e) { let t10 = e.length; - if (t10 === 0 || t10 === 1) - return 0; + 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]; @@ -12681,8 +11753,7 @@ var iI = class r12 { } static getMaxWidthValueRowID(e) { let t10 = e.length; - if (t10 === 0) - return 0; + if (t10 === 0) return 0; let o = 0, n = e[0], s = 0; for (let a = 1; a < t10; ++a) { let i = e[a]; @@ -12692,8 +11763,7 @@ var iI = class r12 { } tensorShapeFromTensor(e, t10, o = true) { if (t10.length === 0) { - if (e[0] === -1) - return []; + if (e[0] === -1) return []; throw new Error("The only valid scalar shape tensor is the fully unknown shape specified as -1."); } return E_(e, o); @@ -12703,16 +11773,13 @@ var iI = class r12 { w.validateDefaultValueShape(o, t10); let n = this.tensorShapeFromTensor(this.shape, this.shapeShape), a = w.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)); + 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); + for (let i = 0; i < n; ++i, a += t10) s.push(a); + for (let i = n; i < e; ++i) s.push(-1); return y.assert(s.length === e, () => "Final length of result must be equal to firstDimension."), s; } calculateOutputIndexRowSplit(e, t10, o, n) { @@ -12720,37 +11787,29 @@ var iI = class r12 { 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); + 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."); + 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 []; + 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}`); + 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); + 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}`); + 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."); + if (a.length !== e.length) throw new Error("Invalid row ids."); return a; } calculateOutputIndex(e, t10, o, n) { @@ -12759,8 +11818,7 @@ var iI = class r12 { case Do.VALUE_ROWIDS: return this.calculateOutputIndexValueRowID(s, t10, o, n); case Do.ROW_SPLITS: - if (s.length - 1 > t10.length) - throw new Error(`Row partition size is greater than output size: ${s.length - 1} > ${t10.length}`); + 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: ${Do[a]}`); @@ -12768,8 +11826,7 @@ var iI = class r12 { } getFirstDimensionSize() { let e = this.rowPartitionValues[0]; - if (this.rowPartitionTypes.length === 0) - throw new Error("No row_partition_types given."); + if (this.rowPartitionTypes.length === 0) throw new Error("No row_partition_types given."); let t10 = this.rowPartitionTypes[0]; switch (t10) { case Do.FIRST_DIM_SIZE: @@ -12783,24 +11840,20 @@ var iI = class r12 { } } compute() { - if (this.rowPartitionValues[0].length <= 0) - throw new Error("Invalid first partition input. Tensor requires at least one element."); + 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]; + for (let p = n.length - 2; p >= 0; --p) n[p] = n[p + 1] * o[p + 1]; let s = E_(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]); - for (let u = 1; u <= this.raggedRank; ++u) - p = this.calculateOutputIndex(u - 1, p, n[u], o[u]); + 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; + 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 = t10.length, c = this.defaultValue; @@ -12826,30 +11879,24 @@ var iI = class r12 { 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); - __(g, c, p), ++d; - } + 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); + __(g, c, p), ++d; + } h < 0 ? (l = f + 1, m = d) : (l = f, m = d, d = m + 1); } } }; function __(r15, e, t10) { - for (let o = 0; o < t10; o++) - r15[o] = e[o]; + for (let o = 0; o < t10; o++) r15[o] = e[o]; } function E_(r15, e) { let t10 = []; for (let o of r15) { if (o < 0) { - if (!e) - throw new Error(`Dimension ${o} must be >= 0`); - if (o < -1) - throw new Error(`Dimension ${o} must be >= -1`); + 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); @@ -12861,12 +11908,10 @@ function Af(r15, e, t10, o, n, s, a, i, p, u) { } function up(r15, e, t10, o) { let n = r15 === e, s = r15 < e && t10 < 0, a = e < r15 && t10 > 1; - if (n || s || a) - return y.makeZerosTypedArray(0, o); + if (n || s || a) return y.makeZerosTypedArray(0, o); let i = Math.abs(Math.ceil((e - r15) / t10)), p = y.makeZerosTypedArray(i, o); e < r15 && t10 === 1 && (t10 = -1), p[0] = r15; - for (let u = 1; u < p.length; u++) - p[u] = p[u - 1] + t10; + for (let u = 1; u < p.length; u++) p[u] = p[u - 1] + t10; return p; } var uI = jt((r15) => 1 / Math.sqrt(r15)); @@ -12874,8 +11919,7 @@ var mY = Ar(ls, uI); var $_ = { kernelName: ls, backendName: "cpu", kernelFunc: mY }; function zs(r15, e, t10, o, n, s, a, i, p, u) { let c = [o / n, n], l = r15.values, m = e.values; - if (o === 0) - return me(t10, e.dtype); + if (o === 0) return me(t10, e.dtype); let d = p instanceof tt ? p : me(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++) { @@ -12884,10 +11928,8 @@ function zs(r15, e, t10, o, n, s, a, i, p, u) { 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 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]; + if (g < 0 || g >= o / n) throw new Error(`Invalid indices: ${h} does not index into ${t10}`); + 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 d; } @@ -12919,18 +11961,15 @@ var A_ = { kernelName: ha, backendName: "cpu", kernelFunc: Ao }; function Ff(r15, 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(w.getSparseFillEmptyRowsIndicesDenseShapeMismatch(i)); + if (i !== 0) throw new Error(w.getSparseFillEmptyRowsIndicesDenseShapeMismatch(i)); let g = y.getArrayFromDType(t10, 0), x = y.getArrayFromDType(n, 0); return [g, [0, l], x, u, c]; } let m = true, d = 0, f = new Array(p).fill(0); for (let g = 0; g < i; ++g) { let x = r15[g * l]; - if (x < 0) - throw new Error(w.getSparseFillEmptyRowsNegativeIndexErrorMessage(g, x)); - if (x >= p) - throw new Error(w.getSparseFillEmptyRowsOutOfRangeIndexErrorMessage(g, x, p)); + if (x < 0) throw new Error(w.getSparseFillEmptyRowsNegativeIndexErrorMessage(g, x)); + if (x >= p) throw new Error(w.getSparseFillEmptyRowsOutOfRangeIndexErrorMessage(g, x, p)); ++f[x], m = m && x >= d, d = x; } let h = true; @@ -12940,26 +11979,22 @@ function Ff(r15, e, t10, o, n, s, a) { } if (h && m) { let g = r15, x = o; - for (let b = 0; b < i; ++b) - c[b] = b; + for (let b = 0; b < i; ++b) c[b] = b; return [g, [i, l], x, u, c]; } else { let g = f[p - 1], x = y.getArrayFromDType(t10, g * l), b = y.getArrayFromDType(n, g), C = new Array(p).fill(0); for (let S = 0; S < i; ++S) { let k = r15[S * l], _ = C[k], $ = (k === 0 ? 0 : f[k - 1]) + _; C[k]++; - for (let R = 0; R < l; ++R) - x[$ * l + R] = r15[S * l + R]; + for (let R = 0; R < l; ++R) x[$ * l + R] = r15[S * l + R]; b[$] = o[S], c[S] = $; } - for (let S = 0; S < p; ++S) - if (C[S] === 0) { - let _ = S === 0 ? 0 : f[S - 1]; - x[_ * l + 0] = S; - for (let $ = 1; $ < l; ++$) - x[_ * l + $] = 0; - b[_] = a; - } + for (let S = 0; S < p; ++S) if (C[S] === 0) { + let _ = S === 0 ? 0 : f[S - 1]; + x[_ * l + 0] = S; + for (let $ = 1; $ < l; ++$) x[_ * l + $] = 0; + b[_] = a; + } return [x, [g, l], b, u, c]; } } @@ -12968,58 +12003,46 @@ function Pf(r15, e, t10, o, n) { for (let g = 0; g < i; ++g) { let x = n[g]; if (x === -1) { - if (c !== -1) - throw new Error(w.getSparseReshapeMultipleNegativeOneOutputDimErrorMessage(c, g)); + if (c !== -1) throw new Error(w.getSparseReshapeMultipleNegativeOneOutputDimErrorMessage(c, g)); c = g, p.push(1); } else { - if (x < 0) - throw new Error(w.getSparseReshapeNegativeOutputDimErrorMessage(g, x)); + if (x < 0) throw new Error(w.getSparseReshapeNegativeOutputDimErrorMessage(g, x)); u *= x, p.push(x); } } if (c !== -1) { - if (u <= 0) - throw new Error(w.getSparseReshapeEmptyTensorZeroOutputDimErrorMessage()); + if (u <= 0) throw new Error(w.getSparseReshapeEmptyTensorZeroOutputDimErrorMessage()); let g = Math.trunc(s / u); - if (u * g !== s) - throw new Error(w.getSparseReshapeInputOutputMultipleErrorMessage(o, p)); + if (u * g !== s) throw new Error(w.getSparseReshapeInputOutputMultipleErrorMessage(o, p)); p[c] = g; } - if (y.sizeFromShape(p) !== s) - throw new Error(w.getSparseReshapeInputOutputMismatchErrorMessage(o, p)); + if (y.sizeFromShape(p) !== s) throw new Error(w.getSparseReshapeInputOutputMismatchErrorMessage(o, p)); let m = o.length, d = []; if (m > 0) { d[m - 1] = 1; - for (let g = m - 2; g >= 0; --g) - d[g] = d[g + 1] * o[g + 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]; + for (let g = i - 2; g >= 0; --g) f[g] = f[g + 1] * p[g + 1]; } let h = y.getArrayFromDType(t10, a * i); for (let g = 0; g < a; ++g) { let x = 0; - for (let b = 0; b < m; ++b) - x += r15[g * m + b] * d[b]; - for (let b = 0; b < i; ++b) - h[g * i + b] = Math.trunc(x / f[b]), x %= f[b]; + for (let b = 0; b < m; ++b) x += r15[g * m + b] * d[b]; + for (let b = 0; b < i; ++b) h[g * i + b] = Math.trunc(x / f[b]), x %= f[b]; } return [h, [a, i], p]; } function Sc(r15, e, t10, o, n, s = false, a = 0) { let i = o.length, p = [e[0], r15.length / e[0]], u = p[1], l = i > 0 ? n[i - 1] + 1 : 0; - if (l < 0) - throw new Error(w.getSparseSegmentReductionNegativeSegmentIdsErrorMessage()); + if (l < 0) throw new Error(w.getSparseSegmentReductionNegativeSegmentIdsErrorMessage()); let m = e.slice(); m[0] = l; let d = m.reduce((C, S) => C * S, 1), f = y.getArrayFromDType(t10, d); - if (i === 0) - return l > 0 && f.fill(a), [f, m]; - if (l <= 0) - throw new Error(w.getSparseSegmentReductionNegativeSegmentIdsErrorMessage()); + if (i === 0) return l > 0 && f.fill(a), [f, m]; + if (l <= 0) throw new Error(w.getSparseSegmentReductionNegativeSegmentIdsErrorMessage()); let h = 0, g = 1, x = 0, b = n[h]; for (; ; ) { let C = 0; @@ -13028,24 +12051,17 @@ function Sc(r15, e, t10, o, n, s = false, a = 0) { ++g; continue; } - if (b >= C) - throw new Error(w.getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage()); + if (b >= C) throw new Error(w.getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage()); } - if (b < 0 || b >= l) - throw new Error(w.getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage(b, l)); + if (b < 0 || b >= l) throw new Error(w.getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage(b, l)); b > x && f.fill(a, x * u, b * u); for (let S = h; S < g; ++S) { let k = o[S]; - if (k < 0 || k >= p[0]) - throw new Error(w.getSparseSegmentReductionIndicesOutOfRangeErrorMessage(S, o[S], p[0])); - for (let _ = 0; _ < u; _++) - f[b * u + _] += r15[k * u + _]; + if (k < 0 || k >= p[0]) throw new Error(w.getSparseSegmentReductionIndicesOutOfRangeErrorMessage(S, o[S], p[0])); + for (let _ = 0; _ < u; _++) f[b * u + _] += r15[k * u + _]; } - if (s) - for (let S = 0; S < u; S++) - f[b * u + S] /= g - h; - if (h = g, ++g, x = b + 1, b = C, g > i) - break; + if (s) for (let S = 0; S < u; S++) f[b * u + S] /= g - h; + if (h = g, ++g, x = b + 1, b = C, g > i) break; } return x < l && f.fill(a, x * u, l * u), [f, m]; } @@ -13068,8 +12084,7 @@ function Of(r15, e, t10, o) { let n = me(r15, 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]; + for (let p = 0; p < i.length; p++) i[p] = a[p] * t10[p] + o[p]; n.set(e.get(...i), ...a); } return n; @@ -13089,23 +12104,18 @@ var mI = class { 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), d = 0; d += u * this.leftPad.length; - for (let b = 0; b < l; ++b) - d += e[m + b].length; + for (let b = 0; b < l; ++b) 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) - x(this.leftPad), x(this.separator); - for (let b = 0; b < l - 1; ++b) - x(e[m + b]), x(this.separator); + for (let b = 0; b < u; ++b) x(this.leftPad), x(this.separator); + for (let b = 0; b < l - 1; ++b) x(e[m + b]), x(this.separator); if (l > 0) { x(e[m + l - 1]); - for (let b = 0; b < c; ++b) - x(this.separator), x(this.rightPad); + for (let b = 0; b < c; ++b) x(this.separator), x(this.rightPad); } else { - for (let b = 0; b < c - 1; ++b) - x(this.rightPad), x(this.separator); + for (let b = 0; b < c - 1; ++b) x(this.rightPad), x(this.separator); x(this.rightPad); } } @@ -13114,22 +12124,18 @@ var mI = class { 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}`); + 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}]`); + 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}`); + 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; + for (let u = 0; u <= s; ++u) a[u] = 0; return [p, a]; } a[0] = 0; @@ -13147,8 +12153,7 @@ var mI = class { this.createNGrams(e, u, i, c, d, l), c += d; }), this.preserveShort && c === a[p]) { let l = t10[p + 1] - t10[p]; - if (l === 0) - continue; + if (l === 0) continue; let m = l + 2 * this.padWidth; this.createNGrams(e, u, i, c, 1, m); } @@ -13160,11 +12165,9 @@ function cp(r15, e, t10, o, n, s, a, i) { return new mI(t10, o, n, s, a, i).compute(r15, e); } function gY(r15, e, t10, o) { - if (!r15.length) - return; + if (!r15.length) return; if (e.length === 0) { - for (let s = 0; s < r15.length; ++s) - o.push(r15.subarray(s, s + 1)); + for (let s = 0; s < r15.length; ++s) o.push(r15.subarray(s, s + 1)); return; } if (e.length === 1) { @@ -13177,11 +12180,10 @@ function gY(r15, e, t10, o) { return; } let n = 0; - for (let s = 0; s < r15.length + 1; s++) - if (s === r15.length || e.indexOf(r15[s]) !== -1) { - let a = r15.subarray(n, s); - (!t10 || a.length !== 0) && o.push(a), n = s + 1; - } + for (let s = 0; s < r15.length + 1; s++) if (s === r15.length || e.indexOf(r15[s]) !== -1) { + let a = r15.subarray(n, s); + (!t10 || a.length !== 0) && o.push(a), n = s + 1; + } } function lp(r15, e, t10) { let o = r15.length, n = [], s = 0, a = 0, i = new Array(o); @@ -13192,15 +12194,12 @@ function lp(r15, e, t10) { i[m] = f, s += f, a = Math.max(a, f); } 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 d = 0; d < i[m]; ++d) - p[l * 2] = m, p[l * 2 + 1] = d, u[l] = n[l], ++l; + for (let m = 0; m < o; ++m) 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 mp(r15, e) { let t10 = y.getArrayFromDType("int32", r15.length); - for (let o = 0; o < r15.length; ++o) - t10[o] = y.fingerPrint64(r15[o]).modulo(e).getLowBitsUnsigned(); + for (let o = 0; o < r15.length; ++o) t10[o] = y.fingerPrint64(r15[o]).modulo(e).getLowBitsUnsigned(); return t10; } var dI = Ve((r15, e) => r15 - e); @@ -13209,13 +12208,11 @@ var Vl = Ye(Ts, dI, xY); var L_ = { kernelName: Ts, backendName: "cpu", kernelFunc: Vl }; function Mf(r15, e) { let t10 = new Array(r15.rank); - for (let n = 0; n < t10.length; n++) - t10[n] = r15.shape[n] * e[n]; + for (let n = 0; n < t10.length; n++) t10[n] = r15.shape[n] * e[n]; let o = me(t10, r15.dtype); for (let n = 0; n < o.values.length; ++n) { let s = o.indexToLoc(n), a = new Array(r15.rank); - for (let p = 0; p < a.length; p++) - a[p] = s[p] % r15.shape[p]; + for (let p = 0; p < a.length; p++) a[p] = s[p] % r15.shape[p]; let i = r15.locToIndex(a); o.values[n] = r15.values[i]; } @@ -13233,10 +12230,8 @@ function B_(r15, e, t10 = 0, o = r15.length - 1) { } let n = r15[e], s = t10, a = o; for (y.swap(r15, t10, e), Wl(r15[o], n) > 0 && y.swap(r15, t10, o); s < a; ) { - for (y.swap(r15, s, a), s++, a--; Wl(r15[s], n) < 0; ) - s = s + 1; - for (; Wl(r15[a], n) > 0; ) - a = a - 1; + for (y.swap(r15, s, a), s++, a--; Wl(r15[s], n) < 0; ) s = s + 1; + for (; Wl(r15[a], n) > 0; ) a = a - 1; } Wl(r15[t10], n) === 0 ? y.swap(r15, t10, a) : (a = a + 1, y.swap(r15, a, o)), a <= e && (t10 = a + 1), e <= a && (o = a - 1); } @@ -13247,34 +12242,27 @@ function Lf(r15, e, t10, o, n) { let m = l * i, d = r15.subarray(m, m + i), f = new Array(d.length); d.forEach((b, C) => f[C] = { value: b, index: C }), o < f.length && (B_(f, o), f = f.slice(0, o)), n && f.sort(Wl); 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] = f[b].value, x[b] = f[b].index; + for (let b = 0; b < o; b++) g[b] = f[b].value, x[b] = f[b].index; } let c = e.slice(); return c[c.length - 1] = o, [me(c, t10, p), me(c, "int32", u)]; } function dp(r15, e, t10, o) { let n = y.parseAxisParam(e, t10)[0], s = [1, t10[0], 1]; - for (let f = 0; f < n; f++) - s[0] *= t10[f]; + for (let f = 0; f < n; f++) s[0] *= t10[f]; s[1] = t10[n]; - for (let f = n + 1; f < t10.length; f++) - s[2] *= t10[f]; + for (let f = n + 1; f < t10.length; f++) s[2] *= t10[f]; let a = /* @__PURE__ */ new Map(), i = new Int32Array(t10[n]), p = new tt(s, o, r15), u = [], c = s[0] === 1 && s[2] === 1; for (let f = 0; f < t10[n]; f++) { let h; - if (c) - h = r15[f].toString(); + if (c) h = r15[f].toString(); else { let x = []; - for (let b = 0; b < s[0]; b++) - for (let C = 0; C < s[2]; C++) - x.push(p.get(b, f, C)); + for (let b = 0; b < s[0]; b++) for (let C = 0; C < s[2]; C++) x.push(p.get(b, f, C)); h = x.join(","); } let g = a.get(h); - if (g != null) - i[f] = g; + if (g != null) i[f] = g; else { let x = a.size; a.set(h, x), i[f] = x, u.push(f); @@ -13284,14 +12272,12 @@ function dp(r15, e, t10, o) { l[1] = a.size; let m = new tt(l, o); u.forEach((f, h) => { - for (let g = 0; g < s[0]; g++) - for (let x = 0; x < s[2]; x++) - m.set(p.get(g, f, x), g, h, x); + for (let g = 0; g < s[0]; g++) for (let x = 0; x < s[2]; x++) m.set(p.get(g, f, x), g, h, x); }); let d = t10.slice(); return d[n] = l[1], { outputValues: m.values, outputShape: d, indices: i }; } -var yY = "4.17.0"; +var yY = "4.21.0"; tu("cpu", () => new xc(), 1); var fI = Ie(hn, (r15) => r15 >= 0 ? r15 : Math.exp(r15) - 1); var z_ = { kernelName: hn, backendName: "cpu", kernelFunc: fI }; @@ -13299,8 +12285,7 @@ function hI(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { alpha: s } = o; Q([n], "leakyRelu"); let a = y.sizeFromShape(n.shape), i = t10.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]; + 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); } var V_ = { kernelName: $n, backendName: "cpu", kernelFunc: hI }; @@ -13317,20 +12302,13 @@ var U_ = { kernelName: ss, backendName: "cpu", kernelFunc: xI }; var yI = Ie(us, (r15) => Math.min(Math.max(0, r15), 6)); var G_ = { kernelName: us, backendName: "cpu", kernelFunc: yI }; function fp(r15, e, t10, o, n) { - if (t10 === "linear") - return lr({ inputs: { x: e }, backend: r15 }); - if (t10 === "relu") - return xI({ inputs: { x: e }, backend: r15 }); - if (t10 === "elu") - return fI({ inputs: { x: e }, backend: r15 }); - if (t10 === "relu6") - return yI({ inputs: { x: e }, backend: r15 }); - if (t10 === "prelu") - return gI({ inputs: { x: e, alpha: o }, backend: r15 }); - if (t10 === "leakyrelu") - return hI({ inputs: { x: e }, backend: r15, attrs: { alpha: n } }); - if (t10 === "sigmoid") - return pI({ inputs: { x: e }, backend: r15 }); + if (t10 === "linear") return lr({ inputs: { x: e }, backend: r15 }); + if (t10 === "relu") return xI({ inputs: { x: e }, backend: r15 }); + if (t10 === "elu") return fI({ inputs: { x: e }, backend: r15 }); + if (t10 === "relu6") return yI({ inputs: { x: e }, backend: r15 }); + if (t10 === "prelu") return gI({ inputs: { x: e, alpha: o }, backend: r15 }); + if (t10 === "leakyrelu") return hI({ inputs: { x: e }, backend: r15, attrs: { alpha: n } }); + if (t10 === "sigmoid") return pI({ inputs: { x: e }, backend: r15 }); throw new Error(`Activation ${t10} has not been implemented for the CPU backend.`); } function We(r15) { @@ -13358,15 +12336,14 @@ function bI(r15) { let st = Math.min(Pe + ie, P); for (let ct = 0; ct < R; ct += ie) { let He = Math.min(ct + ie, R); - for (let lt = ve; lt < Fe; lt++) - for (let it = Pe; it < st; it++) { - let ht = 0; - for (let gt = ct; gt < He; gt++) { - let Lr = M[be * U + lt * j + gt * q], Mt = L[gt * Y + it * J + _e * re]; - ht += Lr * Mt; - } - oe[le * ne + (lt * P + it)] += ht; + for (let lt = ve; lt < Fe; lt++) for (let it = Pe; it < st; it++) { + let ht = 0; + for (let gt = ct; gt < He; gt++) { + let Lr = M[be * U + lt * j + gt * q], Mt = L[gt * Y + it * J + _e * re]; + ht += Lr * Mt; } + oe[le * ne + (lt * P + it)] += ht; + } } } } @@ -13377,8 +12354,7 @@ var K_ = { kernelName: Zo, backendName: "cpu", kernelFunc: bI }; function CY(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { a: n, b: s, bias: a, preluActivationWeights: i } = e, { transposeA: p, transposeB: u, activation: c, leakyreluAlpha: l } = o, m, d, f, h = []; m = bI({ inputs: { a: n, b: s }, attrs: { transposeA: p, transposeB: u }, backend: t10 }), a && (d = Pa({ inputs: { a: m, b: a }, backend: t10 }), h.push(m), m = d), c && (f = fp(t10, m, c, i, l), h.push(m), m = f); - for (let x of h) - t10.disposeIntermediateTensorInfo(x); + for (let x of h) t10.disposeIntermediateTensorInfo(x); return m; } var q_ = { kernelName: So, backendName: "cpu", kernelFunc: CY }; @@ -13392,8 +12368,7 @@ function IY(r15) { let n = o.map((i) => t10.data.get(i.dataId).values), s = me(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]; + for (let u = 0; u < a.length; u++) a[u] += p[u]; } return t10.makeTensorInfo(s.shape, s.dtype, s.values); } @@ -13493,129 +12468,111 @@ function vc(r15, 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, d = n.padInfo.left, f = s === "max" ? Number.NEGATIVE_INFINITY : Number.POSITIVE_INFINITY, h = me(n.outShape, t10), 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 S = 0; S < n.batchSize; ++S) { let k = S * x, _ = S * o[0]; - for (let $ = 0; $ < n.inChannels; ++$) - for (let R = 0; R < n.outHeight; ++R) { - let D = R * a - m, P = Math.max(0, D), O = Math.min(n.inHeight, c + D), M = k + R * b; - for (let L = 0; L < n.outWidth; ++L) { - let B = L * i - d, z = Math.max(0, B), U = Math.min(n.inWidth, l + B), j = f, q = 0, Y = 0; - for (let re = P; re < O; re += p) { - let ne = _ + re * o[1]; - for (let ee = z; ee < U; ee += u) { - let oe = ne + ee * o[2], ie = r15[oe + $]; - s === "max" && ie > j ? j = ie : s === "avg" && (q += ie, Y++); - } - if (isNaN(j)) - break; + for (let $ = 0; $ < n.inChannels; ++$) for (let R = 0; R < n.outHeight; ++R) { + let D = R * a - m, P = Math.max(0, D), O = Math.min(n.inHeight, c + D), M = k + R * b; + for (let L = 0; L < n.outWidth; ++L) { + let B = L * i - d, z = Math.max(0, B), U = Math.min(n.inWidth, l + B), j = f, q = 0, Y = 0; + for (let re = P; re < O; re += p) { + let ne = _ + re * o[1]; + for (let ee = z; ee < U; ee += u) { + let oe = ne + ee * o[2], ie = r15[oe + $]; + s === "max" && ie > j ? j = ie : s === "avg" && (q += ie, Y++); } - let J = M + L * C + $; - g[J] = s === "avg" ? q / Y : j; + if (isNaN(j)) break; } + let J = M + L * C + $; + g[J] = s === "avg" ? q / Y : j; } + } } return h; } function Bf(r15, e, t10, o, n = false, s = false) { let a = me(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 = me(e, t10, r15); - for (let g = 0; g < o.batchSize; ++g) - for (let x = 0; x < o.inChannels; ++x) - for (let b = 0; b < o.outHeight; ++b) { - let C = b * i - d, S = C; - for (; S < 0; ) - S += u; - let k = Math.min(o.inHeight, l + C); - for (let _ = 0; _ < o.outWidth; ++_) { - let $ = _ * p - f, R = $; - for (; R < 0; ) - R += c; - let D = Math.min(o.inWidth, m + $), P = Number.NEGATIVE_INFINITY, O = -1; - for (let M = S; M < k; M += u) { - let L = M - C; - for (let B = R; B < D; B += c) { - let z = B - $, U = h.get(g, M, B, x); - U > P && (P = U, n ? O = s ? ((g * o.inHeight + M) * o.inWidth + B) * o.inChannels + x : (M * o.inWidth + B) * o.inChannels + x : O = L * m + z); - } - } - a.set(O, g, b, _, x); + for (let g = 0; g < o.batchSize; ++g) for (let x = 0; x < o.inChannels; ++x) for (let b = 0; b < o.outHeight; ++b) { + let C = b * i - d, S = C; + for (; S < 0; ) S += u; + let k = Math.min(o.inHeight, l + C); + for (let _ = 0; _ < o.outWidth; ++_) { + let $ = _ * p - f, R = $; + for (; R < 0; ) R += c; + let D = Math.min(o.inWidth, m + $), P = Number.NEGATIVE_INFINITY, O = -1; + for (let M = S; M < k; M += u) { + let L = M - C; + for (let B = R; B < D; B += c) { + let z = B - $, U = h.get(g, M, B, x); + U > P && (P = U, n ? O = s ? ((g * o.inHeight + M) * o.inWidth + B) * o.inChannels + x : (M * o.inWidth + B) * o.inChannels + x : O = L * m + z); } } + a.set(O, g, b, _, x); + } + } return a; } function zf(r15, 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, 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 = me(n.outShape, t10), S = 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], R = n.outShape[4]; for (let D = 0; D < n.batchSize; ++D) { let P = D * k, O = D * o[0]; - for (let M = 0; M < n.inChannels; ++M) - for (let L = 0; L < n.outDepth; ++L) { - let B = L * a - h, z = B; - for (; z < 0; ) - z += u; - let U = Math.min(n.inDepth, m + B), j = P + L * _; - for (let q = 0; q < n.outHeight; ++q) { - let Y = q * i - g, J = Y; - for (; J < 0; ) - J += c; - let re = Math.min(n.inHeight, d + Y), ne = j + q * $; - for (let ee = 0; ee < n.outWidth; ++ee) { - let oe = ee * p - x, ie = oe; - for (; ie < 0; ) - ie += l; - let le = Math.min(n.inWidth, f + oe), be = ne + ee * R, _e = b, ve = 0, Fe = 0; - for (let st = z; st < U; st += u) { - let ct = O + st * o[1]; - for (let He = J; He < re; He += c) { - let lt = ct + He * o[2]; - for (let it = ie; it < le; it += l) { - let ht = lt + it * o[3], gt = r15[ht + M]; - if (s === "max" && gt > _e ? _e = gt : s === "avg" && (ve += gt, Fe++), isNaN(_e)) - break; - } - if (isNaN(_e)) - break; + for (let M = 0; M < n.inChannels; ++M) for (let L = 0; L < n.outDepth; ++L) { + let B = L * a - h, z = B; + for (; z < 0; ) z += u; + let U = Math.min(n.inDepth, m + B), j = P + L * _; + for (let q = 0; q < n.outHeight; ++q) { + let Y = q * i - g, J = Y; + for (; J < 0; ) J += c; + let re = Math.min(n.inHeight, d + Y), ne = j + q * $; + for (let ee = 0; ee < n.outWidth; ++ee) { + let oe = ee * p - x, ie = oe; + for (; ie < 0; ) ie += l; + let le = Math.min(n.inWidth, f + oe), be = ne + ee * R, _e = b, ve = 0, Fe = 0; + for (let st = z; st < U; st += u) { + let ct = O + st * o[1]; + for (let He = J; He < re; He += c) { + let lt = ct + He * o[2]; + for (let it = ie; it < le; it += l) { + let ht = lt + it * o[3], gt = r15[ht + M]; + if (s === "max" && gt > _e ? _e = gt : s === "avg" && (ve += gt, Fe++), isNaN(_e)) break; } - if (isNaN(_e)) - break; + if (isNaN(_e)) break; } - let Pe = be + M; - S[Pe] = s === "avg" ? ve / Math.max(Fe, 1) : _e; + if (isNaN(_e)) break; } + let Pe = be + M; + S[Pe] = s === "avg" ? ve / Math.max(Fe, 1) : _e; } } + } } return C; } function aE(r15, e) { let t10 = me(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 x = 0; x < e.outDepth; ++x) { - let b = x * o - m, C = b; - for (; C < 0; ) - C += a; - let S = Math.min(e.inDepth, u + b); - for (let k = 0; k < e.outHeight; ++k) { - let _ = k * n - d, $ = _; - for (; $ < 0; ) - $ += i; - let R = Math.min(e.inHeight, c + _); - for (let D = 0; D < e.outWidth; ++D) { - let P = D * s - f, O = P; - for (; O < 0; ) - O += p; - let M = Math.min(e.inWidth, l + P), L = Number.NEGATIVE_INFINITY, B = -1; - for (let z = C; z < S; z += a) { - let U = z - b; - for (let j = $; j < R; j += i) { - let q = j - _; - for (let Y = O; Y < M; Y += p) { - let J = Y - P, re = r15.get(h, z, j, Y, g); - re >= L && (L = re, B = U * c * l + q * c + J); - } - } + for (let h = 0; h < e.batchSize; ++h) for (let g = 0; g < e.inChannels; ++g) for (let x = 0; x < e.outDepth; ++x) { + let b = x * o - m, C = b; + for (; C < 0; ) C += a; + let S = Math.min(e.inDepth, u + b); + for (let k = 0; k < e.outHeight; ++k) { + let _ = k * n - d, $ = _; + for (; $ < 0; ) $ += i; + let R = Math.min(e.inHeight, c + _); + for (let D = 0; D < e.outWidth; ++D) { + let P = D * s - f, O = P; + for (; O < 0; ) O += p; + let M = Math.min(e.inWidth, l + P), L = Number.NEGATIVE_INFINITY, B = -1; + for (let z = C; z < S; z += a) { + let U = z - b; + for (let j = $; j < R; j += i) { + let q = j - _; + for (let Y = O; Y < M; Y += p) { + let J = Y - P, re = r15.get(h, z, j, Y, g); + re >= L && (L = re, B = U * c * l + q * c + J); } - t10.set(B, h, x, k, D, g); } } + t10.set(B, h, x, k, D, g); } + } + } return t10; } function FY(r15) { @@ -13624,8 +12581,7 @@ function FY(r15) { let { filterSize: s, strides: a, pad: i, dimRoundingMode: p } = o, u = 1; y.assert(w.eitherStridesOrDilationsAreOne(a, u), () => `Error in avgPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${u}'`); let c = w.computePool2DInfo(n.shape, s, a, u, i, p), l; - if (c.filterWidth === 1 && c.filterHeight === 1 && y.arraysEqual(c.inShape, c.outShape)) - l = lr({ inputs: { x: n }, backend: t10 }); + if (c.filterWidth === 1 && c.filterHeight === 1 && y.arraysEqual(c.inShape, c.outShape)) l = lr({ inputs: { x: n }, backend: t10 }); else { let m = t10.data.get(n.dataId).values, d = y.computeStrides(n.shape), f = vc(m, n.shape, n.dtype, d, c, "avg"); l = t10.makeTensorInfo(c.outShape, n.dtype, f.values); @@ -13644,29 +12600,22 @@ function OY(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { dy: n, input: s } = e, { filterSize: a, strides: i, pad: p, dimRoundingMode: u } = o; Q([n, s], "avgPool3DGrad"); let c = w.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, S = c.effectiveFilterDepth, k = c.effectiveFilterHeight, _ = c.effectiveFilterWidth, $ = S - 1 - c.padInfo.front, R = _ - 1 - c.padInfo.left, D = k - 1 - c.padInfo.top, P = me(s.shape, "float32"), O = 1 / (f * h * g), M = t10.bufferSync(n); - for (let L = 0; L < c.batchSize; ++L) - for (let B = 0; B < c.inChannels; ++B) - for (let z = 0; z < c.inDepth; ++z) - for (let U = 0; U < c.inHeight; ++U) - for (let j = 0; j < c.inWidth; ++j) { - let q = z - $, Y = U - D, J = j - R, re = 0; - for (let ne = 0; ne < S; ne += x) { - let ee = (q + ne) / l; - if (!(ee < 0 || ee >= c.outDepth || Math.floor(ee) !== ee)) - for (let oe = 0; oe < k; oe += b) { - let ie = (Y + oe) / m; - if (!(ie < 0 || ie >= c.outHeight || Math.floor(ie) !== ie)) - for (let le = 0; le < _; le += C) { - let be = (J + le) / d; - if (be < 0 || be >= c.outWidth || Math.floor(be) !== be) - continue; - let _e = M.get(L, ee, ie, be, B); - re += _e; - } - } - } - P.set(re * O, L, z, U, j, B); - } + for (let L = 0; L < c.batchSize; ++L) for (let B = 0; B < c.inChannels; ++B) for (let z = 0; z < c.inDepth; ++z) for (let U = 0; U < c.inHeight; ++U) for (let j = 0; j < c.inWidth; ++j) { + let q = z - $, Y = U - D, J = j - R, re = 0; + for (let ne = 0; ne < S; ne += x) { + let ee = (q + ne) / l; + if (!(ee < 0 || ee >= c.outDepth || Math.floor(ee) !== ee)) for (let oe = 0; oe < k; oe += b) { + let ie = (Y + oe) / m; + if (!(ie < 0 || ie >= c.outHeight || Math.floor(ie) !== ie)) for (let le = 0; le < _; le += C) { + let be = (J + le) / d; + if (be < 0 || be >= c.outWidth || Math.floor(be) !== be) continue; + let _e = M.get(L, ee, ie, be, B); + re += _e; + } + } + } + P.set(re * O, L, z, U, j, B); + } return t10.makeTensorInfo(P.shape, P.dtype, P.values); } var pE = { kernelName: Ri, backendName: "cpu", kernelFunc: OY }; @@ -13674,24 +12623,19 @@ function MY(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { dy: n, input: s } = e, a = s; Q([n, s], "avgPoolGrad"); let { filterSize: i, strides: p, pad: u } = o, c = w.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, S = x - 1 - c.padInfo.top, k = me(a.shape, "float32"), _ = 1 / (d * f), $ = t10.data.get(n.dataId).values, R = me(n.shape, "float32", $); - for (let D = 0; D < c.batchSize; ++D) - for (let P = 0; P < c.inChannels; ++P) - for (let O = 0; O < c.inHeight; ++O) - for (let M = 0; M < c.inWidth; ++M) { - let L = O - S, B = M - C, z = 0; - for (let U = 0; U < x; U += h) { - let j = (L + U) / l; - if (!(j < 0 || j >= c.outHeight || Math.floor(j) !== j)) - for (let q = 0; q < b; q += g) { - let Y = (B + q) / m; - if (Y < 0 || Y >= c.outWidth || Math.floor(Y) !== Y) - continue; - let J = R.get(D, j, Y, P); - z += J; - } - } - k.set(z * _, D, O, M, P); - } + for (let D = 0; D < c.batchSize; ++D) for (let P = 0; P < c.inChannels; ++P) for (let O = 0; O < c.inHeight; ++O) for (let M = 0; M < c.inWidth; ++M) { + let L = O - S, B = M - C, z = 0; + for (let U = 0; U < x; U += h) { + let j = (L + U) / l; + if (!(j < 0 || j >= c.outHeight || Math.floor(j) !== j)) for (let q = 0; q < b; q += g) { + let Y = (B + q) / m; + if (Y < 0 || Y >= c.outWidth || Math.floor(Y) !== Y) continue; + let J = R.get(D, j, Y, P); + z += J; + } + } + k.set(z * _, D, O, M, P); + } return t10.makeTensorInfo(k.shape, k.dtype, k.values); } var cE = { kernelName: $i, backendName: "cpu", kernelFunc: MY }; @@ -13701,8 +12645,7 @@ function LY(r15) { 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, d = s ? t10.data.get(s.dataId).values : new Float32Array([1]), f = a ? t10.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, S = 0, k = 0, _ = 0, $ = 0; - for (let R = 0; R < c.length; ++R) - h[R] = f[S++] + (c[R] - l[k++]) * d[_++] / Math.sqrt(m[$++] + u), S >= g && (S = 0), k >= C && (k = 0), _ >= x && (_ = 0), $ >= b && ($ = 0); + for (let R = 0; R < c.length; ++R) h[R] = f[S++] + (c[R] - l[k++]) * d[_++] / Math.sqrt(m[$++] + u), S >= g && (S = 0), k >= C && (k = 0), _ >= x && (_ = 0), $ >= b && ($ = 0); return t10.makeTensorInfo(n.shape, n.dtype, h); } var lE = { kernelName: In, backendName: "cpu", kernelFunc: LY }; @@ -13746,11 +12689,9 @@ function hu(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { axis: n } = o, s = y.parseAxisParam(n, e[0].shape)[0], a = e.map((h) => h.shape); w.assertParamsConsistent(a, s); let i = w.computeOutShape(e.map((h) => h.shape), s); - if (y.sizeFromShape(i) === 0) - return t10.makeTensorInfo(i, e[0].dtype, []); + if (y.sizeFromShape(i) === 0) return t10.makeTensorInfo(i, e[0].dtype, []); let p = e.filter((h) => y.sizeFromShape(h.shape) > 0); - if (p.length === 1) - return lr({ inputs: { x: p[0] }, backend: t10 }); + if (p.length === 1) return lr({ inputs: { x: p[0] }, backend: t10 }); if (p[0].dtype === "complex64") { let h = p.map((S) => $o({ inputs: { input: S }, backend: t10 })), g = p.map((S) => Oa({ inputs: { input: S }, backend: t10 })), x = hu({ inputs: h, backend: t10, attrs: { axis: s } }), b = hu({ inputs: g, backend: t10, attrs: { axis: s } }), C = Ht({ inputs: { real: x, imag: b }, backend: t10 }); return h.forEach((S) => t10.disposeIntermediateTensorInfo(S)), g.forEach((S) => t10.disposeIntermediateTensorInfo(S)), t10.disposeIntermediateTensorInfo(x), t10.disposeIntermediateTensorInfo(b), C; @@ -13774,20 +12715,17 @@ function CI(r15) { let ne = J + re * M, ee = re * m.strideHeight - b; for (let oe = 0; oe < d; ++oe) { let ie = ee + oe * h; - if (ie < 0 || ie >= m.inHeight) - continue; + if (ie < 0 || ie >= m.inHeight) continue; let le = oe * _[0], be = Y + ie * R; for (let _e = 0; _e < m.outWidth; ++_e) { let ve = ne + _e * L, Fe = _e * m.strideWidth - x; for (let Pe = 0; Pe < f; ++Pe) { let st = Fe + Pe * g; - if (st < 0 || st >= m.inWidth) - continue; + if (st < 0 || st >= m.inWidth) continue; let ct = le + Pe * _[1], He = be + st * D, lt = ct; for (let it = 0; it < m.inChannels; ++it) { let ht = z[He + it * P]; - for (let gt = 0; gt < m.outChannels; ++gt) - j[ve + gt * B] += ht * U[lt + gt]; + for (let gt = 0; gt < m.outChannels; ++gt) j[ve + gt * B] += ht * U[lt + gt]; lt += m.outChannels; } } @@ -13806,19 +12744,17 @@ function GY(r15) { let P = Math.max(0, Math.ceil((S - D) / d)), O = Math.min(m.outHeight, (m.inHeight + S - D) / d); for (let M = 0; M < g; ++M) { let L = Math.max(0, Math.ceil((C - M) / f)), B = Math.min(m.outWidth, (m.inWidth + C - M) / f); - for (let z = 0; z < m.inChannels; ++z) - for (let U = 0; U < m.outChannels; ++U) { - let j = 0; - for (let q = 0; q < m.batchSize; ++q) - for (let Y = P; Y < O; ++Y) { - let J = D + Y * d - S; - for (let re = L; re < B; ++re) { - let ne = M + re * f - C; - x ? j += $.get(q, J, ne, z) * R.get(q, Y, re, U) : j += $.get(q, z, J, ne) * R.get(q, U, Y, re); - } - } - b.set(j, D, M, z, U); + for (let z = 0; z < m.inChannels; ++z) for (let U = 0; U < m.outChannels; ++U) { + let j = 0; + for (let q = 0; q < m.batchSize; ++q) for (let Y = P; Y < O; ++Y) { + let J = D + Y * d - S; + for (let re = L; re < B; ++re) { + let ne = M + re * f - C; + x ? j += $.get(q, J, ne, z) * R.get(q, Y, re, U) : j += $.get(q, z, J, ne) * R.get(q, U, Y, re); + } } + b.set(j, D, M, z, U); + } } } return t10.makeTensorInfo(b.shape, b.dtype, b.values); @@ -13830,26 +12766,24 @@ function HY(r15) { let l = y.computeStrides(s.shape), m = y.computeStrides(n.shape), d = w.convertConv2DDataFormat(u), f = w.computeConv2DInfo(a, s.shape, i, 1, p, c, false, d), h = new tt(f.inShape, "float32"), g = h.values, x = t10.data.get(n.dataId).values, b = t10.data.get(s.dataId).values, [C, S, k] = l, { batchSize: _, filterHeight: $, filterWidth: R, inChannels: D, inHeight: P, inWidth: O, outChannels: M, outHeight: L, outWidth: B, strideHeight: z, strideWidth: U } = f; d = f.dataFormat; let j = $ - 1 - f.padInfo.top, q = R - 1 - f.padInfo.left, Y = d === "channelsLast", J = h.strides[0], re = Y ? h.strides[1] : h.strides[2], ne = Y ? h.strides[2] : 1, ee = Y ? 1 : h.strides[1], oe = m[0], ie = Y ? m[1] : m[2], le = Y ? m[2] : 1, be = Y ? 1 : m[1]; - for (let _e = 0; _e < _; ++_e) - for (let ve = 0; ve < D; ++ve) - for (let Fe = 0; Fe < P; ++Fe) { - let Pe = Fe - j, st = Math.max(0, Math.ceil(Pe / z)), ct = Math.min(L, ($ + Pe) / z); - for (let He = 0; He < O; ++He) { - let lt = He - q, it = Math.max(0, Math.ceil(lt / U)), ht = Math.min(B, (R + lt) / U), gt = 0; - for (let Mt = st; Mt < ct; ++Mt) { - let to = Mt * z - Pe; - for (let rr = it; rr < ht; ++rr) { - let Tt = rr * U - lt, or = oe * _e + ie * Mt + le * rr, nr = C * ($ - 1 - to) + S * (R - 1 - Tt) + k * ve; - for (let ro = 0; ro < M; ++ro) { - let oo = x[or + be * ro], fr = b[nr + ro]; - gt += oo * fr; - } - } + for (let _e = 0; _e < _; ++_e) for (let ve = 0; ve < D; ++ve) for (let Fe = 0; Fe < P; ++Fe) { + let Pe = Fe - j, st = Math.max(0, Math.ceil(Pe / z)), ct = Math.min(L, ($ + Pe) / z); + for (let He = 0; He < O; ++He) { + let lt = He - q, it = Math.max(0, Math.ceil(lt / U)), ht = Math.min(B, (R + lt) / U), gt = 0; + for (let Mt = st; Mt < ct; ++Mt) { + let to = Mt * z - Pe; + for (let rr = it; rr < ht; ++rr) { + let Tt = rr * U - lt, or = oe * _e + ie * Mt + le * rr, nr = C * ($ - 1 - to) + S * (R - 1 - Tt) + k * ve; + for (let ro = 0; ro < M; ++ro) { + let oo = x[or + be * ro], fr = b[nr + ro]; + gt += oo * fr; } - let Lr = J * _e + re * Fe + ne * He + ee * ve; - g[Lr] = gt; } } + let Lr = J * _e + re * Fe + ne * He + ee * ve; + g[Lr] = gt; + } + } return t10.makeTensorInfo(h.shape, h.dtype, h.values); } var wE = { kernelName: rn, backendName: "cpu", kernelFunc: HY }; @@ -13863,27 +12797,23 @@ function KY(r15) { let B = M + L * S.strides[1], z = L * u.strideDepth - x; for (let U = 0; U < c; ++U) { let j = z + U * d; - if (j < 0 || j >= u.inDepth) - continue; + if (j < 0 || j >= u.inDepth) continue; let q = U * D[0], Y = O + j * R[1]; for (let J = 0; J < u.outHeight; ++J) { let re = B + J * S.strides[2], ne = J * u.strideHeight - C; for (let ee = 0; ee < l; ++ee) { let oe = ne + ee * f; - if (oe < 0 || oe >= u.inHeight) - continue; + if (oe < 0 || oe >= u.inHeight) continue; let ie = q + ee * D[1], le = Y + oe * R[2]; for (let be = 0; be < u.outWidth; ++be) { let _e = re + be * u.outChannels, ve = be * u.strideWidth - b; for (let Fe = 0; Fe < m; ++Fe) { let Pe = ve + Fe * h; - if (Pe < 0 || Pe >= u.inWidth) - continue; + if (Pe < 0 || Pe >= u.inWidth) continue; let st = ie + Fe * D[2], ct = le + Pe * u.inChannels, He = st; for (let lt = 0; lt < u.inChannels; ++lt) { let it = k[ct + lt]; - for (let ht = 0; ht < u.outChannels; ++ht) - $[_e + ht] += it * _[He + ht]; + for (let ht = 0; ht < u.outChannels; ++ht) $[_e + ht] += it * _[He + ht]; He += u.outChannels; } } @@ -13936,31 +12866,29 @@ function jY(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { dy: n, filter: s } = e, { pad: a, strides: i, inputShape: p } = o; Q([n], "conv3dBackpropInputV2"); let u = y.computeStrides(n.shape), c = y.computeStrides(s.shape), l = w.computeConv3DInfo(p, s.shape, i, 1, a), m = new tt(l.inShape, "float32"), d = m.values, [f, h, g, x] = m.strides, b = t10.data.get(n.dataId).values, [C, S, k, _] = u, $ = t10.data.get(s.dataId).values, [R, D, P, O] = c, { batchSize: M, filterDepth: L, filterHeight: B, filterWidth: z, inChannels: U, inDepth: j, inHeight: q, inWidth: Y, outChannels: J, outDepth: re, outHeight: ne, outWidth: ee, strideDepth: oe, strideHeight: ie, strideWidth: le } = l, be = L - 1 - l.padInfo.front, _e = B - 1 - l.padInfo.top, ve = z - 1 - l.padInfo.left; - for (let Fe = 0; Fe < M; ++Fe) - for (let Pe = 0; Pe < U; ++Pe) - for (let st = 0; st < j; ++st) { - let ct = st - be, He = Math.max(0, Math.ceil(ct / oe)), lt = Math.min(re, (L + ct) / oe); - for (let it = 0; it < q; ++it) { - let ht = it - _e, gt = Math.max(0, Math.ceil(ht / ie)), Lr = Math.min(ne, (B + ht) / ie); - for (let Mt = 0; Mt < Y; ++Mt) { - let to = Mt - ve, rr = Math.max(0, Math.ceil(to / le)), Tt = Math.min(ee, (z + to) / le), or = 0; - for (let nr = He; nr < lt; ++nr) { - let ro = nr * oe - ct; - for (let oo = gt; oo < Lr; ++oo) { - let fr = oo * ie - ht; - for (let Va = rr; Va < Tt; ++Va) { - let Lo = Va * le - to, Ks = C * Fe + S * nr + k * oo + _ * Va, Xt = R * (L - 1 - ro) + D * (B - 1 - fr) + P * (z - 1 - Lo) + O * Pe; - for (let Wa = 0; Wa < J; ++Wa) { - let ol = b[Ks + Wa], nl = $[Xt + Wa]; - or += ol * nl; - } - } + for (let Fe = 0; Fe < M; ++Fe) for (let Pe = 0; Pe < U; ++Pe) for (let st = 0; st < j; ++st) { + let ct = st - be, He = Math.max(0, Math.ceil(ct / oe)), lt = Math.min(re, (L + ct) / oe); + for (let it = 0; it < q; ++it) { + let ht = it - _e, gt = Math.max(0, Math.ceil(ht / ie)), Lr = Math.min(ne, (B + ht) / ie); + for (let Mt = 0; Mt < Y; ++Mt) { + let to = Mt - ve, rr = Math.max(0, Math.ceil(to / le)), Tt = Math.min(ee, (z + to) / le), or = 0; + for (let nr = He; nr < lt; ++nr) { + let ro = nr * oe - ct; + for (let oo = gt; oo < Lr; ++oo) { + let fr = oo * ie - ht; + for (let Va = rr; Va < Tt; ++Va) { + let Lo = Va * le - to, Ks = C * Fe + S * nr + k * oo + _ * Va, Xt = R * (L - 1 - ro) + D * (B - 1 - fr) + P * (z - 1 - Lo) + O * Pe; + for (let Wa = 0; Wa < J; ++Wa) { + let ol = b[Ks + Wa], nl = $[Xt + Wa]; + or += ol * nl; } } - d[f * Fe + h * st + g * it + x * Mt + Pe] = or; } } + d[f * Fe + h * st + g * it + x * Mt + Pe] = or; } + } + } return t10.makeTensorInfo(m.shape, m.dtype, m.values); } var vE = { kernelName: nn, backendName: "cpu", kernelFunc: jY }; @@ -13972,17 +12900,15 @@ function QY(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { 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 = me([f, h, g, d], "float32"), b = t10.data.get(s.dataId).values, C = t10.data.get(a.dataId).values, S = t10.data.get(n.dataId).values, k = y.computeStrides(n.shape), _ = y.computeStrides(x.shape); for (let $ = 0; $ < f; $++) { let R = $ * 4, D = b[R], P = b[R + 1], O = b[R + 2], M = b[R + 3], L = C[$]; - if (L >= c) - continue; + if (L >= c) continue; let B = h > 1 ? (O - D) * (l - 1) / (h - 1) : 0, z = g > 1 ? (M - P) * (m - 1) / (g - 1) : 0; for (let U = 0; U < h; U++) { let j = h > 1 ? D * (l - 1) + U * B : 0.5 * (D + O) * (l - 1); if (j < 0 || j > l - 1) { - for (let q = 0; q < g; q++) - for (let Y = 0; Y < d; Y++) { - let J = Y + q * _[2] + U * _[1] + $ * _[0]; - x.values[J] = u; - } + for (let q = 0; q < g; q++) for (let Y = 0; Y < d; Y++) { + let J = Y + q * _[2] + U * _[1] + $ * _[0]; + x.values[J] = u; + } continue; } if (p === "bilinear") { @@ -14008,22 +12934,21 @@ function QY(r15) { be = le + re * _[2] + U * _[1] + $ * _[0], x.values[be] = st + (ct - st) * J; } } - } else - for (let q = 0; q < g; ++q) { - let Y = g > 1 ? P * (m - 1) + q * z : 0.5 * (P + M) * (m - 1); - if (Y < 0 || Y > m - 1) { - for (let ne = 0; ne < d; ne++) { - let ee = ne + q * _[2] + U * _[1] + $ * _[0]; - x.values[ee] = u; - } - continue; - } - let J = Math.round(Y), re = Math.round(j); + } else for (let q = 0; q < g; ++q) { + let Y = g > 1 ? P * (m - 1) + q * z : 0.5 * (P + M) * (m - 1); + if (Y < 0 || Y > m - 1) { for (let ne = 0; ne < d; ne++) { - let ee = ne + J * k[2] + re * k[1] + L * k[0], oe = ne + q * _[2] + U * _[1] + $ * _[0]; - x.values[oe] = S[ee]; + let ee = ne + q * _[2] + U * _[1] + $ * _[0]; + x.values[ee] = u; } + continue; } + let J = Math.round(Y), re = Math.round(j); + for (let ne = 0; ne < d; ne++) { + let ee = ne + J * k[2] + re * k[1] + L * k[0], oe = ne + q * _[2] + U * _[1] + $ * _[0]; + x.values[oe] = S[ee]; + } + } } } return t10.makeTensorInfo(x.shape, x.dtype, x.values); @@ -14035,19 +12960,16 @@ function ZY(r15) { let p = w.getAxesPermutation([s], n.shape.length), u = n; p != null && (u = St({ inputs: { x: n }, backend: t10, attrs: { perm: p } })); let c = w.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}`); + 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 = dt(u.dtype, "int32"), m = y.makeOnesTypedArray(y.sizeFromShape(u.shape), l), d = t10.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 : d[C]; - else { - let S = h(x, b - 1); - m[C] = a ? d[S] * m[S] : d[C] * m[S]; - } + 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 : d[C]; + else { + let S = h(x, b - 1); + m[C] = a ? d[S] * m[S] : d[C] * m[S]; } + } let g = t10.makeTensorInfo(u.shape, l, m); if (p != null) { let x = w.getUndoAxesPermutation(p), b = St({ inputs: { x: g }, backend: t10, attrs: { perm: x } }); @@ -14062,19 +12984,16 @@ function JY(r15) { let p = w.getAxesPermutation([s], n.shape.length), u = n; p != null && (u = St({ inputs: { x: n }, backend: t10, attrs: { perm: p } })); let c = w.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}`); + 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 = dt(u.dtype, "int32"), m = y.makeZerosTypedArray(y.sizeFromShape(u.shape), l), d = t10.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 : d[C]; - else { - let S = h(x, b - 1); - m[C] = a ? d[S] + m[S] : d[C] + m[S]; - } + 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 : d[C]; + else { + let S = h(x, b - 1); + m[C] = a ? d[S] + m[S] : d[C] + m[S]; } + } let g = t10.makeTensorInfo(u.shape, l, m); if (p != null) { let x = w.getUndoAxesPermutation(p), b = St({ inputs: { x: g }, backend: t10, attrs: { perm: x } }); @@ -14083,7 +13002,7 @@ function JY(r15) { return g; } var EE = { kernelName: pn, backendName: "cpu", kernelFunc: JY }; -function e7(r15) { +function eQ(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { 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 = Cc(p, u, s.dtype, s.shape, a); @@ -14094,25 +13013,24 @@ function e7(r15) { } throw new Error(`Error in denseBincount: input must be at most rank 2, but got rank${n.shape.length}.`); } -var $E = { kernelName: ra, backendName: "cpu", kernelFunc: e7 }; -function t7(r15) { +var $E = { kernelName: ra, backendName: "cpu", kernelFunc: eQ }; +function tQ(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { 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 = t10.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), S = b % s; - for (let k = 0; k < m; ++k) { - let _ = Math.floor(k / s), $ = k % s, R = (S * s + $) * d; - for (let D = 0; D < d; ++D) { - let O = D + R + c * (_ + u * (C + p * x)); - h[g++] = f[O]; - } + for (let x = 0; x < i; ++x) for (let b = 0; b < l; ++b) { + let C = Math.floor(b / s), S = b % s; + for (let k = 0; k < m; ++k) { + let _ = Math.floor(k / s), $ = k % s, R = (S * s + $) * d; + for (let D = 0; D < d; ++D) { + let O = D + R + c * (_ + u * (C + p * x)); + h[g++] = f[O]; } } + } return t10.makeTensorInfo([i, l, m, d], n.dtype, h); } -var RE = { kernelName: ln, backendName: "cpu", kernelFunc: t7 }; +var RE = { kernelName: ln, backendName: "cpu", kernelFunc: tQ }; function wI(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { x: n, filter: s } = e, { strides: a, pad: i, dilations: p, dimRoundingMode: u } = o; Q([n, s], "depthwiseConv2DNative"); @@ -14125,20 +13043,17 @@ function wI(r15) { let B = M + L * _.strides[1], z = L * d.strideHeight - S; for (let U = 0; U < f; ++U) { let j = z + U * g; - if (j < 0 || j >= d.inHeight) - continue; + if (j < 0 || j >= d.inHeight) continue; let q = U * l[0], Y = O + j * c[1]; for (let J = 0; J < d.outWidth; ++J) { let re = B + J * _.strides[2], ne = J * d.strideWidth - C; for (let ee = 0; ee < h; ++ee) { let oe = ne + ee * x; - if (oe < 0 || oe >= d.inWidth) - continue; + if (oe < 0 || oe >= d.inWidth) continue; let ie = q + ee * l[1], le = Y + oe * d.inChannels, be = re, _e = ie; for (let ve = 0; ve < d.inChannels; ++ve) { let Fe = $[le + ve]; - for (let Pe = 0; Pe < k; ++Pe) - D[be + Pe] += Fe * R[_e + Pe]; + for (let Pe = 0; Pe < k; ++Pe) D[be + Pe] += Fe * R[_e + Pe]; be += k, _e += k; } } @@ -14149,7 +13064,7 @@ function wI(r15) { return t10.makeTensorInfo(_.shape, _.dtype, _.values); } var DE = { kernelName: mn, backendName: "cpu", kernelFunc: wI }; -function r72(r15) { +function rQ(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { x: n, dy: s } = e, { strides: a, dilations: i, pad: p, dimRoundingMode: u, filterShape: c } = o; Q([n, s], "depthwiseConv2dNativeBackpropFilter"); let l = w.computeConv2DInfo(n.shape, c, a, i, p, u, true), { strideHeight: m, strideWidth: d, filterHeight: f, filterWidth: h } = l, g = new tt(l.filterShape, "float32"), x = l.padInfo.left, b = l.padInfo.top, C = l.outChannels / l.inChannels, S = t10.data.get(n.dataId).values, k = new tt(n.shape, n.dtype, S), _ = t10.data.get(s.dataId).values, $ = new tt(s.shape, s.dtype, _); @@ -14159,155 +13074,141 @@ function r72(r15) { let M = Math.max(0, Math.ceil((x - O) / d)), L = Math.min(l.outWidth, (l.inWidth + x - O) / d); for (let B = 0; B < l.outChannels; ++B) { let z = Math.trunc(B / C), U = B % C, j = 0; - for (let q = 0; q < l.batchSize; ++q) - for (let Y = D; Y < P; ++Y) { - let J = R + Y * m - b; - for (let re = M; re < L; ++re) { - let ne = O + re * d - x; - j += k.get(q, J, ne, z) * $.get(q, Y, re, B); - } + for (let q = 0; q < l.batchSize; ++q) for (let Y = D; Y < P; ++Y) { + let J = R + Y * m - b; + for (let re = M; re < L; ++re) { + let ne = O + re * d - x; + j += k.get(q, J, ne, z) * $.get(q, Y, re, B); } + } g.set(j, R, O, z, U); } } } return t10.makeTensorInfo(g.shape, g.dtype, g.values); } -var AE = { kernelName: Pi, backendName: "cpu", kernelFunc: r72 }; -function o7(r15) { +var AE = { kernelName: Pi, backendName: "cpu", kernelFunc: rQ }; +function oQ(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { dy: n, filter: s } = e, { strides: a, dilations: i, pad: p, dimRoundingMode: u, inputShape: c } = o; Q([n, s], "depthwiseConv2DNativeBackpropInput"); let l = y.computeStrides(n.shape), m = y.computeStrides(s.shape), d = w.computeConv2DInfo(c, s.shape, a, i, p, u, true), f = new tt(d.inShape, "float32"), h = f.values, [g, x, b] = f.strides, C = t10.data.get(n.dataId).values, [S, k, _] = l, $ = t10.data.get(s.dataId).values, [R, D, P] = m, { batchSize: O, filterHeight: M, filterWidth: L, inChannels: B, inHeight: z, inWidth: U, outChannels: j, outHeight: q, outWidth: Y, strideHeight: J, strideWidth: re } = d, ne = M - 1 - d.padInfo.top, ee = L - 1 - d.padInfo.left, oe = j / B; - for (let ie = 0; ie < O; ++ie) - for (let le = 0; le < B; ++le) - for (let be = 0; be < z; ++be) { - let _e = be - ne, ve = Math.max(0, Math.ceil(_e / J)), Fe = Math.min(q, (M + _e) / J); - for (let Pe = 0; Pe < U; ++Pe) { - let st = Pe - ee, ct = Math.max(0, Math.ceil(st / re)), He = Math.min(Y, (L + st) / re), lt = 0; - for (let it = ve; it < Fe; ++it) { - let ht = it * J - _e; - for (let gt = ct; gt < He; ++gt) { - let Lr = gt * re - st, Mt = S * ie + k * it + _ * gt, to = R * (M - 1 - ht) + D * (L - 1 - Lr) + P * le; - for (let rr = 0; rr < oe; ++rr) { - let Tt = le * oe + rr, or = C[Mt + Tt], nr = $[to + rr]; - lt += or * nr; - } - } + for (let ie = 0; ie < O; ++ie) for (let le = 0; le < B; ++le) for (let be = 0; be < z; ++be) { + let _e = be - ne, ve = Math.max(0, Math.ceil(_e / J)), Fe = Math.min(q, (M + _e) / J); + for (let Pe = 0; Pe < U; ++Pe) { + let st = Pe - ee, ct = Math.max(0, Math.ceil(st / re)), He = Math.min(Y, (L + st) / re), lt = 0; + for (let it = ve; it < Fe; ++it) { + let ht = it * J - _e; + for (let gt = ct; gt < He; ++gt) { + let Lr = gt * re - st, Mt = S * ie + k * it + _ * gt, to = R * (M - 1 - ht) + D * (L - 1 - Lr) + P * le; + for (let rr = 0; rr < oe; ++rr) { + let Tt = le * oe + rr, or = C[Mt + Tt], nr = $[to + rr]; + lt += or * nr; } - h[g * ie + x * be + b * Pe + le] = lt; } } + h[g * ie + x * be + b * Pe + le] = lt; + } + } return t10.makeTensorInfo(f.shape, f.dtype, f.values); } -var FE = { kernelName: Oi, backendName: "cpu", kernelFunc: o7 }; -function n7(r15) { +var FE = { kernelName: Oi, backendName: "cpu", kernelFunc: oQ }; +function nQ(r15) { let { inputs: e, backend: t10 } = r15, { x: o } = e, n = y.sizeFromShape(o.shape), s = t10.data.get(o.dataId).values, a = me([n, n], o.dtype), i = a.values; - for (let u = 0; u < s.length; u++) - i[u * n + u] = s[u]; + 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); } -var PE = { kernelName: oa, backendName: "cpu", kernelFunc: n7 }; +var PE = { kernelName: oa, backendName: "cpu", kernelFunc: nQ }; var OE = { kernelName: dn, backendName: "cpu", kernelFunc: ({ inputs: r15, backend: e, attrs: t10 }) => { let { x: o, filter: n } = r15, { 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: d, inHeight: f, inWidth: h, inChannels: g, outHeight: x, outWidth: b, padInfo: C, strideHeight: S, strideWidth: k, filterHeight: _, filterWidth: $, dilationHeight: R, dilationWidth: D, outShape: P } = w.computeDilation2DInfo(o.shape, n.shape, s, a, "NHWC", i), O = y.sizeFromShape(P), M = P.length, L = y.getArrayFromDType(o.dtype, O); - for (let z = 0; z < d; ++z) - for (let U = 0; U < x; ++U) { - let j = U * S - C.top; - for (let q = 0; q < b; ++q) { - let Y = q * k - C.left; - for (let J = 0; J < g; ++J) { - let re = Number.MIN_SAFE_INTEGER; - for (let ee = 0; ee < _; ++ee) { - let oe = j + ee * R; - if (oe >= 0 && oe < f) - for (let ie = 0; ie < $; ++ie) { - let le = Y + ie * D; - if (le >= 0 && le < h) { - let be = y.locToIndex([z, oe, le, J], c, y.computeStrides(o.shape)), _e = y.locToIndex([ee, ie, J], m, y.computeStrides(n.shape)), ve = u[be] + l[_e]; - ve > re && (re = ve); - } - } + for (let z = 0; z < d; ++z) for (let U = 0; U < x; ++U) { + let j = U * S - C.top; + for (let q = 0; q < b; ++q) { + let Y = q * k - C.left; + for (let J = 0; J < g; ++J) { + let re = Number.MIN_SAFE_INTEGER; + for (let ee = 0; ee < _; ++ee) { + let oe = j + ee * R; + if (oe >= 0 && oe < f) for (let ie = 0; ie < $; ++ie) { + let le = Y + ie * D; + if (le >= 0 && le < h) { + let be = y.locToIndex([z, oe, le, J], c, y.computeStrides(o.shape)), _e = y.locToIndex([ee, ie, J], m, y.computeStrides(n.shape)), ve = u[be] + l[_e]; + ve > re && (re = ve); + } } - let ne = y.locToIndex([z, U, q, J], M, y.computeStrides(P)); - L[ne] = re; } + let ne = y.locToIndex([z, U, q, J], M, y.computeStrides(P)); + L[ne] = re; } } + } return { dataId: p.write(y.toTypedArray(L, o.dtype), P, o.dtype), shape: P, dtype: o.dtype }; } }; var ME = { kernelName: Li, backendName: "cpu", kernelFunc: ({ inputs: r15, backend: e, attrs: t10 }) => { let { x: o, filter: n, dy: s } = r15, { strides: a, pad: i, dilations: p } = t10, 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: S, filterHeight: k, filterWidth: _, dilationHeight: $, dilationWidth: R, outShape: D } = w.computeDilation2DInfo(o.shape, n.shape, a, i, "NHWC", p); y.assert(s.rank === D.length, () => `Error in ${Li}, dy must have the same rank as output ${D.length}, but got ${s.rank}`); let P = y.toNestedArray(D, u.data.get(s.dataId).values), O = y.makeZerosNestedTypedArray(n.shape, n.dtype); - for (let L = 0; L < m; ++L) - for (let B = 0; B < g; ++B) { - let z = B * C - b.top; - for (let U = 0; U < x; ++U) { - let j = U * S - b.left; - for (let q = 0; q < h; ++q) { - let Y = Number.MIN_SAFE_INTEGER, J = 0, re = 0; - for (let ne = 0; ne < k; ++ne) { - let ee = z + ne * $; - if (ee >= 0 && ee < d) - for (let oe = 0; oe < _; ++oe) { - let ie = j + oe * R; - if (ie >= 0 && ie < f) { - let le = c[L][ee][ie][q] + l[ne][oe][q]; - le > Y && (Y = le, J = ne, re = oe); - } - } + for (let L = 0; L < m; ++L) for (let B = 0; B < g; ++B) { + let z = B * C - b.top; + for (let U = 0; U < x; ++U) { + let j = U * S - b.left; + for (let q = 0; q < h; ++q) { + let Y = Number.MIN_SAFE_INTEGER, J = 0, re = 0; + for (let ne = 0; ne < k; ++ne) { + let ee = z + ne * $; + if (ee >= 0 && ee < d) for (let oe = 0; oe < _; ++oe) { + let ie = j + oe * R; + if (ie >= 0 && ie < f) { + let le = c[L][ee][ie][q] + l[ne][oe][q]; + le > Y && (Y = le, J = ne, re = oe); + } } - O[J][re][q] += P[L][B][U][q]; } + O[J][re][q] += P[L][B][U][q]; } } + } return { dataId: u.write(y.toTypedArray(O, o.dtype), n.shape, n.dtype), shape: n.shape, dtype: n.dtype }; } }; var LE = { kernelName: Mi, backendName: "cpu", kernelFunc: ({ inputs: r15, backend: e, attrs: t10 }) => { let { x: o, filter: n, dy: s } = r15, { strides: a, pad: i, dilations: p } = t10, 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: S, filterHeight: k, filterWidth: _, dilationHeight: $, dilationWidth: R, outShape: D } = w.computeDilation2DInfo(o.shape, n.shape, a, i, "NHWC", p); y.assert(s.rank === D.length, () => `Error in ${Mi}, dy must have the same rank as output ${D.length}, but got ${s.rank}`); let P = y.toNestedArray(D, u.data.get(s.dataId).values), O = y.makeZerosNestedTypedArray(o.shape, o.dtype); - for (let L = 0; L < m; ++L) - for (let B = 0; B < g; ++B) { - let z = B * C - b.top; - for (let U = 0; U < x; ++U) { - let j = U * S - b.left; - for (let q = 0; q < h; ++q) { - let Y = Number.MIN_SAFE_INTEGER, J = z < 0 ? 0 : z, re = j < 0 ? 0 : j; - for (let ne = 0; ne < k; ++ne) { - let ee = z + ne * $; - if (ee >= 0 && ee < d) - for (let oe = 0; oe < _; ++oe) { - let ie = j + oe * R; - if (ie >= 0 && ie < f) { - let le = c[L][ee][ie][q] + l[ne][oe][q]; - le > Y && (Y = le, J = ee, re = ie); - } - } + for (let L = 0; L < m; ++L) for (let B = 0; B < g; ++B) { + let z = B * C - b.top; + for (let U = 0; U < x; ++U) { + let j = U * S - b.left; + for (let q = 0; q < h; ++q) { + let Y = Number.MIN_SAFE_INTEGER, J = z < 0 ? 0 : z, re = j < 0 ? 0 : j; + for (let ne = 0; ne < k; ++ne) { + let ee = z + ne * $; + if (ee >= 0 && ee < d) for (let oe = 0; oe < _; ++oe) { + let ie = j + oe * R; + if (ie >= 0 && ie < f) { + let le = c[L][ee][ie][q] + l[ne][oe][q]; + le > Y && (Y = le, J = ee, re = ie); + } } - O[L][J][re][q] += P[L][B][U][q]; } + O[L][J][re][q] += P[L][B][U][q]; } } + } return { dataId: u.write(y.toTypedArray(O, o.dtype), o.shape, o.dtype), shape: o.shape, dtype: o.dtype }; } }; -function s7(r15) { +function sQ(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { image: n } = e, { canvas: s, options: a } = o, { contextOptions: i, imageOptions: p } = a || {}, u = (p == null ? void 0 : p.alpha) || 1, c = (i == null ? void 0 : i.contextType) || "2d"; - if (c !== "2d") - throw new Error(`Context type ${i.contextType} is not supported by the CPU backend.`); + if (c !== "2d") throw new Error(`Context type ${i.contextType} is not supported by the CPU backend.`); let l = s.getContext(c, (i == null ? void 0 : i.contextAttributes) || {}); - if (l == null) - throw new Error(`Could not get the context with ${c} type.`); + if (l == null) throw new Error(`Could not get the context with ${c} type.`); let [m, d] = n.shape.slice(0, 2), f = n.shape.length === 2 ? 1 : n.shape[2], h = t10.data.get(n.dataId).values, g = n.dtype === "float32" ? 255 : 1, x = new Uint8ClampedArray(d * m * 4); for (let C = 0; C < m * d; ++C) { let S = [0, 0, 0, 255 * u]; for (let _ = 0; _ < f; _++) { let $ = h[C * f + _]; if (n.dtype === "float32") { - if ($ < 0 || $ > 1) - throw new Error(`Tensor values for a float32 Tensor must be in the range [0 - 1] but encountered ${$}.`); - } else if (n.dtype === "int32" && ($ < 0 || $ > 255)) - throw new Error(`Tensor values for a int32 Tensor must be in the range [0 - 255] but encountered ${$}.`); + if ($ < 0 || $ > 1) throw new Error(`Tensor values for a float32 Tensor must be in the range [0 - 1] but encountered ${$}.`); + } else if (n.dtype === "int32" && ($ < 0 || $ > 255)) throw new Error(`Tensor values for a int32 Tensor must be in the range [0 - 255] but encountered ${$}.`); f === 1 ? (S[0] = $ * g, S[1] = $ * g, S[2] = $ * g) : S[_] = $ * g; } let k = C * 4; @@ -14317,7 +13218,7 @@ function s7(r15) { let b = new ImageData(x, d, m); return l.putImageData(b, 0, 0), n; } -var BE = { kernelName: $u, backendName: "cpu", kernelFunc: s7 }; +var BE = { kernelName: $u, backendName: "cpu", kernelFunc: sQ }; function fi(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { axis: s, keepDims: a } = o; Q(n, "sum"); @@ -14328,8 +13229,7 @@ function fi(r15) { let [d, f] = w.computeOutAndReduceShapes(m.shape, l), h = w.upcastType(m.dtype, "int32"), g = yc(t10, d, h), x = y.sizeFromShape(f), b = t10.data.get(g.dataId).values, C = t10.data.get(m.dataId).values; for (let S = 0; S < b.length; ++S) { let k = S * x, _ = 0; - for (let $ = 0; $ < x; ++$) - _ += C[k + $]; + for (let $ = 0; $ < x; ++$) _ += C[k + $]; b[S] = _; } if (a) { @@ -14339,7 +13239,7 @@ function fi(r15) { return t10.disposeIntermediateTensorInfo(i), c != null && t10.disposeIntermediateTensorInfo(m), g; } var zE = { kernelName: Ss, backendName: "cpu", kernelFunc: fi }; -function a7(r15) { +function aQ(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { equation: n } = o, s = e, { allDims: a, summedDims: i, idDims: p } = w.decodeEinsumEquation(n, s.length); w.checkEinsumDimSizes(a.length, p, s); let { path: u, steps: c } = w.getEinsumComputePath(i, p), l = c.length, m = null, d = a.length, f = []; @@ -14348,18 +13248,16 @@ function a7(r15) { let { permutationIndices: x, expandDims: b } = w.getEinsumPermutation(d, p[g]), C; w.isIdentityPermutation(x) ? C = s[g] : (C = St({ inputs: { x: s[g] }, backend: t10, attrs: { perm: x } }), f.push(C)); let S = C.shape.slice(); - for (let k = 0; k < b.length; ++k) - S.splice(b[k], 0, 1); + for (let k = 0; k < b.length; ++k) S.splice(b[k], 0, 1); y.arraysEqual(C.shape, S) || (C = We({ inputs: { x: C }, backend: t10, attrs: { shape: S } }), f.push(C)), m === null ? m = C : (m = ip({ inputs: { a: C, b: m }, backend: t10 }), f.push(m)); } h < l - 1 && (u[h] >= 0 && (m = fi({ inputs: { x: m }, backend: t10, attrs: { axis: u[h] - (a.length - d), keepDims: false } }), f.push(m)), d--); } - for (let h of f) - h !== m && t10.disposeIntermediateTensorInfo(h); + for (let h of f) h !== m && t10.disposeIntermediateTensorInfo(h); return m; } -var VE = { kernelName: Bi, backendName: "cpu", kernelFunc: a7 }; -function i7(r15) { +var VE = { kernelName: Bi, backendName: "cpu", kernelFunc: aQ }; +function iQ(r15) { let { inputs: e, backend: t10 } = r15, { dy: o, y: n } = e; Q([o, n], "eluGrad"); let s = new Float32Array(y.sizeFromShape(n.shape)), a = t10.data.get(n.dataId).values, i = t10.data.get(o.dataId).values; @@ -14369,30 +13267,30 @@ function i7(r15) { } return t10.makeTensorInfo(n.shape, "float32", s); } -var WE = { kernelName: Xa, backendName: "cpu", kernelFunc: i7 }; -var u7 = w.ERF_P; -var p7 = w.ERF_A1; -var c7 = w.ERF_A2; -var l7 = w.ERF_A3; -var m7 = w.ERF_A4; -var d7 = w.ERF_A5; -var f7 = Ie(gn, (r15) => { - let e = Math.sign(r15), t10 = Math.abs(r15), o = 1 / (1 + u7 * t10); - return e * (1 - ((((d7 * o + m7) * o + l7) * o + c7) * o + p7) * o * Math.exp(-t10 * t10)); +var WE = { kernelName: Xa, backendName: "cpu", kernelFunc: iQ }; +var uQ = w.ERF_P; +var pQ = w.ERF_A1; +var cQ = w.ERF_A2; +var lQ = w.ERF_A3; +var mQ = w.ERF_A4; +var dQ = w.ERF_A5; +var fQ = Ie(gn, (r15) => { + let e = Math.sign(r15), t10 = Math.abs(r15), o = 1 / (1 + uQ * t10); + return e * (1 - ((((dQ * o + mQ) * o + lQ) * o + cQ) * o + pQ) * o * Math.exp(-t10 * t10)); }); -var UE = { kernelName: gn, backendName: "cpu", kernelFunc: f7 }; +var UE = { kernelName: gn, backendName: "cpu", kernelFunc: fQ }; function kc(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { 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), We({ inputs: { x: n }, backend: t10, attrs: { shape: i } }); } var GE = { kernelName: na, backendName: "cpu", kernelFunc: kc }; -var h7 = Ve((r15, e) => r15 / e); -var Ul = Ye(fn, h7); +var hQ = Ve((r15, e) => r15 / e); +var Ul = Ye(fn, hQ); var Gl = { kernelName: fn, backendName: "cpu", kernelFunc: Ul }; function Vf(r15, e, t10) { let o = r15.shape, n = o[0], s = o[1], a = t10.data.get(r15.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 x = Ao({ inputs: { x: i }, backend: t10, attrs: { begin: [g, 0], size: [1, s] } }), b = Ao({ inputs: { x: p }, backend: t10, attrs: { begin: [g, 0], size: [1, s] } }), C = Ht({ inputs: { real: x, imag: b }, backend: t10 }), { real: S, imag: k } = g7(C, e, t10), _ = w.mergeRealAndImagArrays(S, k); + let x = Ao({ inputs: { x: i }, backend: t10, attrs: { begin: [g, 0], size: [1, s] } }), b = Ao({ inputs: { x: p }, backend: t10, attrs: { begin: [g, 0], size: [1, s] } }), C = Ht({ inputs: { real: x, imag: b }, backend: t10 }), { real: S, imag: k } = gQ(C, e, t10), _ = w.mergeRealAndImagArrays(S, k); for (let $ = 0; $ < s; $++) { let R = w.getComplexWithIndex(_, $); l[g * s + $] = R.real, m[g * s + $] = R.imag; @@ -14402,9 +13300,9 @@ function Vf(r15, e, t10) { let d = t10.makeTensorInfo(u, "float32", l), f = t10.makeTensorInfo(u, "float32", m), h = Ht({ inputs: { real: d, imag: f }, backend: t10 }); return t10.disposeIntermediateTensorInfo(d), t10.disposeIntermediateTensorInfo(f), h; } -function g7(r15, e, t10) { +function gQ(r15, e, t10) { let o = y.sizeFromShape(r15.shape), n = t10.data.get(r15.dataId), s = t10.data.get(n.complexTensorInfos.real.dataId).values, a = t10.data.get(n.complexTensorInfos.imag.dataId).values; - if (x7(o)) { + if (xQ(o)) { let i = SI(s, a, o, e, t10), p = [r15.shape[0], r15.shape[1]]; if (e) { let u = t10.makeTensorInfo(p, "float32", i.real), c = t10.makeTensorInfo(p, "float32", i.imag), l = t10.makeTensorInfo([], "float32", y.createScalarValue(o, "float32")), m = lr({ inputs: { x: l }, backend: t10 }), d = Gl.kernelFunc({ inputs: { a: u, b: l }, backend: t10 }), f = Gl.kernelFunc({ inputs: { a: c, b: m }, backend: t10 }), h = t10.data.get(d.dataId).values, g = t10.data.get(f.dataId).values; @@ -14412,20 +13310,19 @@ function g7(r15, e, t10) { } return i; } else { - let i = w.mergeRealAndImagArrays(s, a), p = y7(i, o, e); + let i = w.mergeRealAndImagArrays(s, a), p = yQ(i, o, e); return w.splitRealAndImagArrays(p); } } -function x7(r15) { +function xQ(r15) { return (r15 & r15 - 1) === 0; } function SI(r15, e, t10, o, n) { - if (t10 === 1) - return { real: r15, imag: e }; + if (t10 === 1) return { real: r15, imag: e }; let s = w.mergeRealAndImagArrays(r15, e), a = t10 / 2, i = w.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 = w.complexWithOddIndex(s), h = f.real, g = f.imag, x = [h.length], b = n.makeTensorInfo(x, "float32", h), C = n.makeTensorInfo(x, "float32", g), S = Ht({ inputs: { real: b, imag: C }, backend: n }), k = SI(p, u, a, o, n), _ = k.real, $ = k.imag, R = [_.length], D = n.makeTensorInfo(R, "float32", _), P = n.makeTensorInfo(R, "float32", $), O = Ht({ inputs: { real: D, imag: P }, backend: n }), M = SI(h, g, a, o, n), L = M.real, B = M.imag, z = [L.length], U = n.makeTensorInfo(z, "float32", L), j = n.makeTensorInfo(z, "float32", B), q = Ht({ inputs: { real: U, imag: j }, backend: n }), Y = w.exponents(t10, o), J = [Y.real.length], re = n.makeTensorInfo(J, "float32", Y.real), ne = n.makeTensorInfo(J, "float32", Y.imag), ee = Ht({ inputs: { real: re, imag: ne }, backend: n }), oe = ip({ inputs: { a: ee, b: q }, backend: n }), ie = Pa({ inputs: { a: O, b: oe }, backend: n }), le = Vl({ inputs: { a: O, b: oe }, backend: n }), be = $o({ inputs: { input: ie }, backend: n }), _e = $o({ inputs: { input: le }, backend: n }), ve = Oa({ inputs: { input: ie }, backend: n }), Fe = Oa({ inputs: { input: le }, backend: n }), Pe = hu({ inputs: [be, _e], backend: n, attrs: { axis: 0 } }), st = hu({ inputs: [ve, Fe], backend: n, attrs: { axis: 0 } }), ct = n.data.get(Pe.dataId).values, He = n.data.get(st.dataId).values; return n.disposeIntermediateTensorInfo(l), n.disposeIntermediateTensorInfo(m), n.disposeIntermediateTensorInfo(d), n.disposeIntermediateTensorInfo(b), n.disposeIntermediateTensorInfo(C), n.disposeIntermediateTensorInfo(S), n.disposeIntermediateTensorInfo(D), n.disposeIntermediateTensorInfo(P), n.disposeIntermediateTensorInfo(O), n.disposeIntermediateTensorInfo(U), n.disposeIntermediateTensorInfo(j), n.disposeIntermediateTensorInfo(q), n.disposeIntermediateTensorInfo(re), n.disposeIntermediateTensorInfo(ne), n.disposeIntermediateTensorInfo(ee), n.disposeIntermediateTensorInfo(oe), n.disposeIntermediateTensorInfo(ie), n.disposeIntermediateTensorInfo(le), n.disposeIntermediateTensorInfo(be), n.disposeIntermediateTensorInfo(ve), n.disposeIntermediateTensorInfo(_e), n.disposeIntermediateTensorInfo(Fe), n.disposeIntermediateTensorInfo(Pe), n.disposeIntermediateTensorInfo(st), { real: ct, imag: He }; } -function y7(r15, e, t10) { +function yQ(r15, e, t10) { let o = new Float32Array(e * 2); for (let n = 0; n < e; n++) { let s = 0, a = 0; @@ -14437,17 +13334,17 @@ function y7(r15, e, t10) { } return o; } -function b7(r15) { +function bQ(r15) { let { inputs: e, backend: t10 } = r15, { input: o } = e, n = y.sizeFromShape(o.shape), s = o.shape[o.shape.length - 1], a = n / s, i = We({ inputs: { x: o }, backend: t10, attrs: { shape: [a, s] } }), p = Vf(i, false, t10), u = We({ inputs: { x: p }, backend: t10, attrs: { shape: o.shape } }); return t10.disposeIntermediateTensorInfo(i), t10.disposeIntermediateTensorInfo(p), u; } -var HE = { kernelName: zi, backendName: "cpu", kernelFunc: b7 }; +var HE = { kernelName: zi, backendName: "cpu", kernelFunc: bQ }; function Hl(r15) { let { backend: e, attrs: t10 } = r15, { shape: o, value: n, dtype: s } = t10, a = s || y.inferDtype(n), i = y.getArrayFromDType(a, y.sizeFromShape(o)); - return C7(i, n, a), e.makeTensorInfo(o, a, i); + return CQ(i, n, a), e.makeTensorInfo(o, a, i); } var KE = { kernelName: sa, backendName: "cpu", kernelFunc: Hl }; -function C7(r15, e, t10) { +function CQ(r15, e, t10) { r15.fill(e); } var qE = { kernelName: Cn, backendName: "cpu", kernelFunc: ({ inputs: r15, attrs: e, backend: t10 }) => { @@ -14471,15 +13368,14 @@ var qE = { kernelName: Cn, backendName: "cpu", kernelFunc: ({ inputs: r15, attrs } return { dataId: n.write(s, o.shape, o.dtype), shape: o.shape, dtype: o.dtype }; } }; -function w7(r15) { +function wQ(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { 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 = CI({ inputs: { x: n, filter: s }, backend: t10, 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 = We({ inputs: { x: a }, backend: t10, attrs: { shape: [a.shape[0], 1, 1] } }); h = Pa({ inputs: { a: h, b: x }, backend: t10 }), t10.disposeIntermediateTensorInfo(x); - } else - h = Pa({ inputs: { a: h, b: a }, backend: t10 }); + } else h = Pa({ inputs: { a: h, b: a }, backend: t10 }); t10.disposeIntermediateTensorInfo(g); } if (d) { @@ -14487,14 +13383,13 @@ function w7(r15) { if (c === "NCHW" && d === "prelu" && i.shape.length === 1 && i.shape[0] !== 1) { let x = We({ inputs: { x: i }, backend: t10, attrs: { shape: [i.shape[0], 1, 1] } }); h = fp(t10, h, d, x, f), t10.disposeIntermediateTensorInfo(x); - } else - h = fp(t10, h, d, i, f); + } else h = fp(t10, h, d, i, f); t10.disposeIntermediateTensorInfo(g); } return h; } -var jE = { kernelName: Io, backendName: "cpu", kernelFunc: w7 }; -function S7(r15) { +var jE = { kernelName: Io, backendName: "cpu", kernelFunc: wQ }; +function SQ(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { 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 = wI({ inputs: { x: n, filter: s }, backend: t10, attrs: { strides: p, pad: u, dataFormat: c, dilations: l, dimRoundingMode: m } }); if (a) { let g = h; @@ -14506,16 +13401,15 @@ function S7(r15) { } return h; } -var XE = { kernelName: vo, backendName: "cpu", kernelFunc: S7 }; -function I7(r15) { +var XE = { kernelName: vo, backendName: "cpu", kernelFunc: SQ }; +function IQ(r15) { let { inputs: e, backend: t10 } = r15, { params: o, indices: n } = e, s = y.sizeFromShape(o.shape), a = n.shape, i = a[a.length - 1], [p, u, c, l] = w.prepareAndValidate(o, n); - if (u === 0) - return t10.makeTensorInfo(p, o.dtype, []); + if (u === 0) return t10.makeTensorInfo(p, o.dtype, []); let m = t10.data.get(n.dataId).values, d = t10.bufferSync(o), f = Tf(m, d, o.dtype, u, i, c, l, o.shape, s); return t10.makeTensorInfo(p, o.dtype, f.values); } -var YE = { kernelName: vn, backendName: "cpu", kernelFunc: I7 }; -function v7(r15) { +var YE = { kernelName: vn, backendName: "cpu", kernelFunc: IQ }; +function vQ(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { x: n, indices: s } = e, { axis: a, batchDims: i } = o; Q([n, s], "gatherV2"); let p = y.parseAxisParam(a, n.shape)[0], u = t10.data.get(s.dataId).values, c = n.shape[p]; @@ -14528,34 +13422,34 @@ function v7(r15) { let m = y.sizeFromShape(s.shape), d = w.segment_util.collectGatherOpShapeInfo(n, s, p, l), f = We({ inputs: { x: n }, backend: t10, attrs: { shape: [d.batchSize, d.outerSize, d.dimSize, d.sliceSize] } }), h = We({ inputs: { x: s }, backend: t10, attrs: { shape: [d.batchSize, m / d.batchSize] } }), g = [d.batchSize, d.outerSize, m / d.batchSize, d.sliceSize], x = t10.bufferSync(h), b = t10.bufferSync(f), C = _f(b, x, g); return t10.disposeIntermediateTensorInfo(f), t10.disposeIntermediateTensorInfo(h), t10.makeTensorInfo(d.outputShape, C.dtype, C.values); } -var QE = { kernelName: aa, backendName: "cpu", kernelFunc: v7 }; -function k7(r15) { +var QE = { kernelName: aa, backendName: "cpu", kernelFunc: vQ }; +function kQ(r15) { let { inputs: e, backend: t10 } = r15, { input: o } = e, n = y.sizeFromShape(o.shape), s = o.shape[o.shape.length - 1], a = n / s, i = We({ inputs: { x: o }, backend: t10, attrs: { shape: [a, s] } }), p = Vf(i, true, t10), u = We({ inputs: { x: p }, backend: t10, attrs: { shape: o.shape } }); return t10.disposeIntermediateTensorInfo(i), t10.disposeIntermediateTensorInfo(p), u; } -var ZE = { kernelName: Vi, backendName: "cpu", kernelFunc: k7 }; -var N7 = Ie(Tn, (r15) => Number.isFinite(r15) ? 1 : 0, "bool"); -var JE = { kernelName: Tn, backendName: "cpu", kernelFunc: N7 }; -var T7 = Ie(_n, (r15) => Math.abs(r15) === 1 / 0 ? 1 : 0, "bool"); -var e$ = { kernelName: _n, backendName: "cpu", kernelFunc: T7 }; -var _7 = Ie(En, (r15) => Number.isNaN(r15) ? 1 : 0, "bool"); -var t$ = { kernelName: En, backendName: "cpu", kernelFunc: _7 }; -function E7(r15) { +var ZE = { kernelName: Vi, backendName: "cpu", kernelFunc: kQ }; +var NQ = Ie(Tn, (r15) => Number.isFinite(r15) ? 1 : 0, "bool"); +var JE = { kernelName: Tn, backendName: "cpu", kernelFunc: NQ }; +var TQ = Ie(_n, (r15) => Math.abs(r15) === 1 / 0 ? 1 : 0, "bool"); +var e$ = { kernelName: _n, backendName: "cpu", kernelFunc: TQ }; +var _Q = Ie(En, (r15) => Number.isNaN(r15) ? 1 : 0, "bool"); +var t$ = { kernelName: En, backendName: "cpu", kernelFunc: _Q }; +function EQ(r15) { let { backend: e, attrs: t10 } = r15, { start: o, stop: n, num: s } = t10, a = Ef(o, n, s); return e.makeTensorInfo([a.length], "float32", a); } -var r$ = { kernelName: An, backendName: "cpu", kernelFunc: E7 }; -var $7 = Ie(Pn, (r15) => Math.log1p(r15)); -var o$ = { kernelName: Pn, backendName: "cpu", kernelFunc: $7 }; -var R7 = Ve((r15, e) => r15 && e); -var D7 = Ye(On, R7, null, "bool"); -var n$ = { kernelName: On, backendName: "cpu", kernelFunc: D7 }; -var A7 = Ie(Mn, (r15) => r15 ? 0 : 1, "bool"); -var s$ = { kernelName: Mn, backendName: "cpu", kernelFunc: A7 }; -var F7 = Ve((r15, e) => r15 || e); -var P7 = Ye(Ln, F7, null, "bool"); -var a$ = { kernelName: Ln, backendName: "cpu", kernelFunc: P7 }; -function O7(r15) { +var r$ = { kernelName: An, backendName: "cpu", kernelFunc: EQ }; +var $Q = Ie(Pn, (r15) => Math.log1p(r15)); +var o$ = { kernelName: Pn, backendName: "cpu", kernelFunc: $Q }; +var RQ = Ve((r15, e) => r15 && e); +var DQ = Ye(On, RQ, null, "bool"); +var n$ = { kernelName: On, backendName: "cpu", kernelFunc: DQ }; +var AQ = Ie(Mn, (r15) => r15 ? 0 : 1, "bool"); +var s$ = { kernelName: Mn, backendName: "cpu", kernelFunc: AQ }; +var FQ = Ve((r15, e) => r15 || e); +var PQ = Ye(Ln, FQ, null, "bool"); +var a$ = { kernelName: Ln, backendName: "cpu", kernelFunc: PQ }; +function OQ(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { depthRadius: s, bias: a, alpha: i, beta: p } = o; Q(n, "LRN"); let u = n.shape[3], c = u - 1, l = t10.data.get(n.dataId).values, m = y.sizeFromShape(n.shape), d = new Float32Array(m); @@ -14573,15 +13467,14 @@ function O7(r15) { } return t10.makeTensorInfo(n.shape, n.dtype, d); } -var i$ = { kernelName: Bn, backendName: "cpu", kernelFunc: O7 }; -function M7(r15) { +var i$ = { kernelName: Bn, backendName: "cpu", kernelFunc: OQ }; +function MQ(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { x: n, y: s, dy: a } = e, { depthRadius: i, bias: p, alpha: u, beta: c } = o; Q(a, "LRNGrad"); let l = y.sizeFromShape(a.shape), m = a.shape[3], d = t10.data.get(a.dataId).values, f = t10.data.get(n.dataId).values, h = t10.data.get(s.dataId).values, g = new Float32Array(l), x = l; for (let b = 0; b < x; b++) { let C = b % m, S = b - C + Math.max(0, C - i), k = b - C + Math.min(m, C + i + 1), _ = 0; - for (let $ = S; $ < k; $++) - _ += Math.pow(f[$], 2); + for (let $ = S; $ < k; $++) _ += Math.pow(f[$], 2); _ = u * _ + p; for (let $ = S; $ < k; $++) { let R = -2 * u * c * f[$] * h[b] / _; @@ -14590,13 +13483,12 @@ function M7(r15) { } return t10.makeTensorInfo(a.shape, n.dtype, g); } -var u$ = { kernelName: Ya, backendName: "cpu", kernelFunc: M7 }; +var u$ = { kernelName: Ya, backendName: "cpu", kernelFunc: MQ }; function II(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { reductionIndices: s, keepDims: a } = o, i = t10, p = n.shape, u = p.length, c = y.parseAxisParam(s, p), l = c, m = w.getAxesPermutation(l, u), d = i.data.get(n.dataId).values; if (m != null) { let S = new Array(u); - for (let k = 0; k < S.length; k++) - S[k] = p[m[k]]; + for (let k = 0; k < S.length; k++) S[k] = p[m[k]]; d = wc(d, p, n.dtype, m, S), l = w.getInnerMostAxes(l.length, u), p = S; } Q(n, "max"), w.assertAxesAreInnerMostDims("max", l, u); @@ -14604,89 +13496,74 @@ function II(r15) { return a && (C = w.expandShapeToKeepDim(f, c)), { dataId: b, shape: C, dtype: n.dtype }; } var p$ = { kernelName: zn, backendName: "cpu", kernelFunc: II }; -function L7(r15) { +function LQ(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e; Q(n, "maxPool"); let { filterSize: s, strides: a, pad: i, dimRoundingMode: p } = o, u = 1; y.assert(w.eitherStridesOrDilationsAreOne(a, u), () => `Error in maxPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${u}'`); let c = w.computePool2DInfo(n.shape, s, a, u, i, p), l; - if (c.filterWidth === 1 && c.filterHeight === 1 && y.arraysEqual(c.inShape, c.outShape)) - l = lr({ inputs: { x: n }, backend: t10 }); + if (c.filterWidth === 1 && c.filterHeight === 1 && y.arraysEqual(c.inShape, c.outShape)) l = lr({ inputs: { x: n }, backend: t10 }); else { let m = t10.data.get(n.dataId).values, d = y.computeStrides(n.shape), f = vc(m, n.shape, n.dtype, d, c, "max"); l = t10.makeTensorInfo(c.outShape, n.dtype, f.values); } return l; } -var c$ = { kernelName: Wn, backendName: "cpu", kernelFunc: L7 }; -function B7(r15) { +var c$ = { kernelName: Wn, backendName: "cpu", kernelFunc: LQ }; +function BQ(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { filterSize: s, strides: a, pad: i, dimRoundingMode: p, dataFormat: u } = o; Q(n, "maxPool3d"); let c = w.computePool3DInfo(n.shape, s, a, 1, i, p, u), l = t10.data.get(n.dataId).values, m = zf(l, n.shape, n.dtype, y.computeStrides(n.shape), c, "max"); return t10.makeTensorInfo(m.shape, "float32", m.values); } -var l$ = { kernelName: ia, backendName: "cpu", kernelFunc: B7 }; -function z7(r15) { +var l$ = { kernelName: ia, backendName: "cpu", kernelFunc: BQ }; +function zQ(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { dy: n, input: s } = e, { filterSize: a, strides: i, pad: p, dimRoundingMode: u } = o; Q([n, s], "maxPool3DGrad"); let c = w.computePool3DInfo(s.shape, a, i, 1, p, u), l = t10.bufferSync(s), m = aE(l, c), d = c.strideDepth, f = c.strideHeight, h = c.strideWidth, g = c.dilationDepth, x = c.dilationHeight, b = c.dilationWidth, C = c.effectiveFilterDepth, S = c.effectiveFilterHeight, k = c.effectiveFilterWidth, _ = C - 1 - c.padInfo.front, $ = k - 1 - c.padInfo.left, R = S - 1 - c.padInfo.top, D = me(s.shape, "float32"), P = t10.bufferSync(n); - for (let O = 0; O < c.batchSize; ++O) - for (let M = 0; M < c.inChannels; ++M) - for (let L = 0; L < c.inDepth; ++L) - for (let B = 0; B < c.inHeight; ++B) - for (let z = 0; z < c.inWidth; ++z) { - let U = L - _, j = B - R, q = z - $, Y = 0; - for (let J = 0; J < C; J += g) { - let re = (U + J) / d; - if (!(re < 0 || re >= c.outDepth || Math.floor(re) !== re)) - for (let ne = 0; ne < S; ne += x) { - let ee = (j + ne) / f; - if (!(ee < 0 || ee >= c.outHeight || Math.floor(ee) !== ee)) - for (let oe = 0; oe < k; oe += b) { - let ie = (q + oe) / h; - if (ie < 0 || ie >= c.outWidth || Math.floor(ie) !== ie) - continue; - let le = C * S * k - 1 - m.get(O, re, ee, ie, M), be = J * S * k + ne * k + oe, _e = le === be ? 1 : 0; - if (_e === 0) - continue; - let ve = P.get(O, re, ee, ie, M); - Y += ve * _e; - } - } - } - D.set(Y, O, L, B, z, M); - } + for (let O = 0; O < c.batchSize; ++O) for (let M = 0; M < c.inChannels; ++M) for (let L = 0; L < c.inDepth; ++L) for (let B = 0; B < c.inHeight; ++B) for (let z = 0; z < c.inWidth; ++z) { + let U = L - _, j = B - R, q = z - $, Y = 0; + for (let J = 0; J < C; J += g) { + let re = (U + J) / d; + if (!(re < 0 || re >= c.outDepth || Math.floor(re) !== re)) for (let ne = 0; ne < S; ne += x) { + let ee = (j + ne) / f; + if (!(ee < 0 || ee >= c.outHeight || Math.floor(ee) !== ee)) for (let oe = 0; oe < k; oe += b) { + let ie = (q + oe) / h; + if (ie < 0 || ie >= c.outWidth || Math.floor(ie) !== ie) continue; + let le = C * S * k - 1 - m.get(O, re, ee, ie, M), be = J * S * k + ne * k + oe, _e = le === be ? 1 : 0; + if (_e === 0) continue; + let ve = P.get(O, re, ee, ie, M); + Y += ve * _e; + } + } + } + D.set(Y, O, L, B, z, M); + } return t10.makeTensorInfo(D.shape, D.dtype, D.values); } -var m$ = { kernelName: Gi, backendName: "cpu", kernelFunc: z7 }; -function V7(r15) { +var m$ = { kernelName: Gi, backendName: "cpu", kernelFunc: zQ }; +function VQ(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { dy: n, input: s, output: a } = e, i = s; Q([s, a], "maxPoolGrad"); let { filterSize: p, strides: u, pad: c, dimRoundingMode: l } = o, m = w.computePool2DInfo(i.shape, p, u, 1, c, l), d = t10.data.get(i.dataId).values, f = me(m.outShape, i.dtype, Bf(d, i.shape, i.dtype, m).values), h = m.strideHeight, g = m.strideWidth, x = m.dilationHeight, b = m.dilationWidth, C = m.effectiveFilterHeight, S = m.effectiveFilterWidth, k = S - 1 - m.padInfo.left, _ = C - 1 - m.padInfo.top, $ = me(i.shape, "float32"), R = t10.data.get(n.dataId).values, D = me(n.shape, "float32", R); - for (let P = 0; P < m.batchSize; ++P) - for (let O = 0; O < m.inChannels; ++O) - for (let M = 0; M < m.inHeight; ++M) - for (let L = 0; L < m.inWidth; ++L) { - let B = M - _, z = L - k, U = 0; - for (let j = 0; j < C; j += x) { - let q = (B + j) / h; - if (!(q < 0 || q >= m.outHeight || Math.floor(q) !== q)) - for (let Y = 0; Y < S; Y += b) { - let J = (z + Y) / g; - if (J < 0 || J >= m.outWidth || Math.floor(J) !== J) - continue; - let re = C * S - 1 - f.get(P, q, J, O), ne = j * S + Y, ee = re === ne ? 1 : 0; - if (ee === 0) - continue; - let oe = D.get(P, q, J, O); - U += oe * ee; - } - } - $.set(U, P, M, L, O); - } + for (let P = 0; P < m.batchSize; ++P) for (let O = 0; O < m.inChannels; ++O) for (let M = 0; M < m.inHeight; ++M) for (let L = 0; L < m.inWidth; ++L) { + let B = M - _, z = L - k, U = 0; + for (let j = 0; j < C; j += x) { + let q = (B + j) / h; + if (!(q < 0 || q >= m.outHeight || Math.floor(q) !== q)) for (let Y = 0; Y < S; Y += b) { + let J = (z + Y) / g; + if (J < 0 || J >= m.outWidth || Math.floor(J) !== J) continue; + let re = C * S - 1 - f.get(P, q, J, O), ne = j * S + Y, ee = re === ne ? 1 : 0; + if (ee === 0) continue; + let oe = D.get(P, q, J, O); + U += oe * ee; + } + } + $.set(U, P, M, L, O); + } return t10.makeTensorInfo($.shape, $.dtype, $.values); } -var d$ = { kernelName: Ui, backendName: "cpu", kernelFunc: V7 }; +var d$ = { kernelName: Ui, backendName: "cpu", kernelFunc: VQ }; function f$(r15, e, t10, o, n) { let s = y.computeStrides(e), a = vc(r15, e, t10, s, n, "max"), i = Bf(r15, e, t10, n, true, o); return [a.values, i.values]; @@ -14697,7 +13574,7 @@ var h$ = { kernelName: ua, backendName: "cpu", kernelFunc: ({ inputs: r15, attrs let u = p.data.get(o.dataId).values, c = w.computePool2DInfo(o.shape, n, s, [1, 1], a), [l, m] = f$(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 W7(r15) { +function WQ(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { axis: s, keepDims: a } = o, i = y.parseAxisParam(s, n.shape), u = w.computeOutAndReduceShapes(n.shape, i)[1], c = y.sizeFromShape(u), l = [], m = t10.makeTensorInfo([], "float32", new Float32Array([c])); l.push(m); let d = Ro({ inputs: { x: n }, backend: t10, attrs: { dtype: "float32" } }); @@ -14707,8 +13584,8 @@ function W7(r15) { let h = fi({ inputs: { x: f }, backend: t10, attrs: { axis: s, keepDims: a } }); return l.forEach((g) => t10.disposeIntermediateTensorInfo(g)), h; } -var g$ = { kernelName: Un, backendName: "cpu", kernelFunc: W7 }; -function U7(r15) { +var g$ = { kernelName: Un, backendName: "cpu", kernelFunc: WQ }; +function UQ(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { axis: s, keepDims: a } = o; Q(n, "min"); let i = y.parseAxisParam(s, n.shape), p = i, u = w.getAxesPermutation(p, n.shape.length), c = n; @@ -14730,121 +13607,111 @@ function U7(r15) { } return g; } -var x$ = { kernelName: Gn, backendName: "cpu", kernelFunc: U7 }; -function G7(r15) { +var x$ = { kernelName: Gn, backendName: "cpu", kernelFunc: UQ }; +function GQ(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { paddings: s, mode: a } = o; Q(n, "mirrorPad"); let i = s.map((C, S) => C[0] + n.shape[S] + C[1]), p = s.map((C) => C[0]), u = s.map((C, S) => C[0] + n.shape[S]), c = a === "reflect" ? 0 : 1, l = t10.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 S = y.indexToLoc(C, h, g); - for (let _ = 0; _ < h; _++) - S[_] < p[_] ? S[_] = p[_] * 2 - S[_] - c : S[_] >= u[_] && (S[_] = (u[_] - 1) * 2 - S[_] + c); + for (let _ = 0; _ < h; _++) S[_] < p[_] ? S[_] = p[_] * 2 - S[_] - c : S[_] >= u[_] && (S[_] = (u[_] - 1) * 2 - S[_] + c); S = S.map((_, $) => _ - p[$]); let k = y.locToIndex(S, m, d); x[C] = l[k]; } return { dataId: t10.write(x, i, n.dtype), shape: i, dtype: n.dtype }; } -var y$ = { kernelName: Kn, backendName: "cpu", kernelFunc: G7 }; -var H7 = Ve((r15, e) => { +var y$ = { kernelName: Kn, backendName: "cpu", kernelFunc: GQ }; +var HQ = Ve((r15, e) => { let t10 = r15 % e; return r15 < 0 && e < 0 || r15 >= 0 && e >= 0 ? t10 : (t10 + e) % e; }); -var K7 = Ye(qn, H7); -var b$ = { kernelName: qn, backendName: "cpu", kernelFunc: K7 }; +var KQ = Ye(qn, HQ); +var b$ = { kernelName: qn, backendName: "cpu", kernelFunc: KQ }; var w$ = zp(jw()); function vI(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { 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}`); + 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 = II({ inputs: { x: n }, backend: t10, attrs: { reductionIndices: p, keepDims: false } }), c = w.expandShapeToKeepDim(u.shape, p), l = We({ inputs: { x: u }, backend: t10, attrs: { shape: c } }), m = Vl({ inputs: { a: n, b: l }, backend: t10 }), d = qS({ inputs: { x: m }, backend: t10 }), f = fi({ inputs: { x: d }, backend: t10, attrs: { axis: p, keepDims: false } }), h = We({ inputs: { x: f }, backend: t10, attrs: { shape: c } }), g = Ul({ inputs: { a: d, b: h }, backend: t10 }); return t10.disposeIntermediateTensorInfo(u), t10.disposeIntermediateTensorInfo(l), t10.disposeIntermediateTensorInfo(m), t10.disposeIntermediateTensorInfo(d), t10.disposeIntermediateTensorInfo(f), t10.disposeIntermediateTensorInfo(h), g; } var C$ = { kernelName: Is, backendName: "cpu", kernelFunc: vI }; -function q7(r15) { +function qQ(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { logits: n } = e, { numSamples: s, seed: a, normalized: i } = o; Q(n, "multinomial"); let p = i ? n : vI({ 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], 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]; + for (let C = 1; C < g.length; ++C) g[C] = g[C - 1] + l[h + C]; let x = w$.alea(a.toString()), b = f * s; for (let C = 0; C < s; ++C) { let S = x(); d[b + C] = g.length; - for (let k = 0; k < g.length; k++) - if (S < g[k]) { - d[b + C] = k; - break; - } + for (let k = 0; k < g.length; k++) if (S < g[k]) { + d[b + C] = k; + break; + } } } return i || t10.disposeIntermediateTensorInfo(p), t10.makeTensorInfo(m, "int32", d); } -var S$ = { kernelName: jn, backendName: "cpu", kernelFunc: q7 }; -var j7 = Vt.nonMaxSuppressionV3Impl; -function X7(r15) { +var S$ = { kernelName: jn, backendName: "cpu", kernelFunc: qQ }; +var jQ = Vt.nonMaxSuppressionV3Impl; +function XQ(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { boxes: n, scores: s } = e, { maxOutputSize: a, iouThreshold: i, scoreThreshold: p } = o; Q(n, "NonMaxSuppression"); - let u = t10.data.get(n.dataId).values, c = t10.data.get(s.dataId).values, { selectedIndices: l } = j7(u, c, a, i, p); + let u = t10.data.get(n.dataId).values, c = t10.data.get(s.dataId).values, { selectedIndices: l } = jQ(u, c, a, i, p); return t10.makeTensorInfo([l.length], "int32", new Int32Array(l)); } -var I$ = { kernelName: Qn, backendName: "cpu", kernelFunc: X7 }; -var Y7 = Vt.nonMaxSuppressionV4Impl; -function Q7(r15) { +var I$ = { kernelName: Qn, backendName: "cpu", kernelFunc: XQ }; +var YQ = Vt.nonMaxSuppressionV4Impl; +function QQ(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { boxes: n, scores: s } = e, { maxOutputSize: a, iouThreshold: i, scoreThreshold: p, padToMaxOutputSize: u } = o; Q(n, "NonMaxSuppressionPadded"); - let c = t10.data.get(n.dataId).values, l = t10.data.get(s.dataId).values, { selectedIndices: m, validOutputs: d } = Y7(c, l, a, i, p, u); + let c = t10.data.get(n.dataId).values, l = t10.data.get(s.dataId).values, { selectedIndices: m, validOutputs: d } = YQ(c, l, a, i, p, u); return [t10.makeTensorInfo([m.length], "int32", new Int32Array(m)), t10.makeTensorInfo([], "int32", new Int32Array([d]))]; } -var v$ = { kernelName: Qa, backendName: "cpu", kernelFunc: Q7 }; -var Z7 = Vt.nonMaxSuppressionV5Impl; -function J7(r15) { +var v$ = { kernelName: Qa, backendName: "cpu", kernelFunc: QQ }; +var ZQ = Vt.nonMaxSuppressionV5Impl; +function JQ(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { boxes: n, scores: s } = e, { maxOutputSize: a, iouThreshold: i, scoreThreshold: p, softNmsSigma: u } = o; Q(n, "NonMaxSuppressionWithScore"); - let c = t10.data.get(n.dataId).values, l = t10.data.get(s.dataId).values, m = a, d = i, f = p, h = u, { selectedIndices: g, selectedScores: x } = Z7(c, l, m, d, f, h); + let c = t10.data.get(n.dataId).values, l = t10.data.get(s.dataId).values, m = a, d = i, f = p, h = u, { selectedIndices: g, selectedScores: x } = ZQ(c, l, m, d, f, h); return [t10.makeTensorInfo([g.length], "int32", new Int32Array(g)), t10.makeTensorInfo([x.length], "float32", new Float32Array(x))]; } -var k$ = { kernelName: Zn, backendName: "cpu", kernelFunc: J7 }; -function eQ(r15) { +var k$ = { kernelName: Zn, backendName: "cpu", kernelFunc: JQ }; +function e7(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { indices: n } = e, { dtype: s, depth: a, onValue: i, offValue: p } = o; Q(n, "oneHot"); let u = y.sizeFromShape(n.shape), c = new Float32Array(u * a); c.fill(p); let l = t10.data.get(n.dataId).values; - for (let m = 0; m < u; ++m) - l[m] >= 0 && l[m] < a && (c[m * a + l[m]] = i); + 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); } -var N$ = { kernelName: Jn, backendName: "cpu", kernelFunc: eQ }; +var N$ = { kernelName: Jn, backendName: "cpu", kernelFunc: e7 }; function Kl(r15) { let { inputs: e, backend: t10 } = r15, { x: o } = e; - if (o.dtype === "string") - throw new Error("zerosLike is not supported for string tensors"); + if (o.dtype === "string") throw new Error("zerosLike is not supported for string tensors"); if (o.dtype === "complex64") { let n = $o({ inputs: { input: o }, backend: t10 }), s = Kl({ inputs: { x: n }, backend: t10 }), a = Oa({ inputs: { input: o }, backend: t10 }), i = Kl({ inputs: { x: a }, backend: t10 }), p = Ht({ inputs: { real: s, imag: i }, backend: t10 }); return t10.disposeIntermediateTensorInfo(n), t10.disposeIntermediateTensorInfo(s), t10.disposeIntermediateTensorInfo(a), t10.disposeIntermediateTensorInfo(i), p; - } else - return Hl({ backend: t10, attrs: { shape: o.shape, value: 0, dtype: o.dtype } }); + } else return Hl({ backend: t10, attrs: { shape: o.shape, value: 0, dtype: o.dtype } }); } var T$ = { kernelName: Sa, backendName: "cpu", kernelFunc: Kl }; function _$(r15) { let { inputs: e, backend: t10 } = r15, { x: o } = e; - if (o.dtype === "string") - throw new Error("onesLike is not supported for string tensors"); + if (o.dtype === "string") throw new Error("onesLike is not supported for string tensors"); if (o.dtype === "complex64") { let n = $o({ inputs: { input: o }, backend: t10 }), s = _$({ inputs: { x: n }, backend: t10 }), a = Oa({ inputs: { input: o }, backend: t10 }), i = Kl({ inputs: { x: a }, backend: t10 }), p = Ht({ inputs: { real: s, imag: i }, backend: t10 }); return t10.disposeIntermediateTensorInfo(n), t10.disposeIntermediateTensorInfo(s), t10.disposeIntermediateTensorInfo(a), t10.disposeIntermediateTensorInfo(i), p; - } else - return Hl({ backend: t10, attrs: { shape: o.shape, value: 1, dtype: o.dtype } }); + } else return Hl({ backend: t10, attrs: { shape: o.shape, value: 1, dtype: o.dtype } }); } var E$ = { kernelName: ca, backendName: "cpu", kernelFunc: _$ }; function kI(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { axis: n } = o; - if (e.length === 1) - return kc({ inputs: { input: e[0] }, backend: t10, attrs: { dim: n } }); + if (e.length === 1) return kc({ inputs: { input: e[0] }, backend: t10, 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"); @@ -14856,7 +13723,7 @@ function kI(r15) { return i.forEach((c) => t10.disposeIntermediateTensorInfo(c)), u; } var $$ = { kernelName: la, backendName: "cpu", kernelFunc: kI }; -function tQ(r15) { +function t7(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { paddings: s, constantValue: a } = o; Q(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 = 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); @@ -14867,55 +13734,54 @@ function tQ(r15) { } return { dataId: t10.write(g, i, n.dtype), shape: i, dtype: n.dtype }; } -var Wf = { kernelName: es, backendName: "cpu", kernelFunc: tQ }; -var rQ = Ve((r15, e) => Math.pow(r15, e)); -var oQ = Ye(ts, rQ); -var R$ = { kernelName: ts, backendName: "cpu", kernelFunc: oQ }; -function nQ(r15) { +var Wf = { kernelName: es, backendName: "cpu", kernelFunc: t7 }; +var r72 = Ve((r15, e) => Math.pow(r15, e)); +var o7 = Ye(ts, r72); +var R$ = { kernelName: ts, backendName: "cpu", kernelFunc: o7 }; +function n7(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { paramsNestedSplits: n, paramsDenseValues: s, indices: a } = e, { outputRaggedRank: i } = o, p = n.map((x) => t10.data.get(x.dataId).values), u = n.map((x) => x.shape), c = t10.data.get(s.dataId).values, l = t10.data.get(a.dataId).values, [m, d, f] = Rf(p, u, c, s.shape, s.dtype, l, a.shape, i), h = m.map((x) => t10.makeTensorInfo([x.length], "int32", x)), g = t10.makeTensorInfo(f, s.dtype, d); return h.concat([g]); } -var D$ = { kernelName: Hp, backendName: "cpu", kernelFunc: nQ }; -function sQ(r15) { +var D$ = { kernelName: Hp, backendName: "cpu", kernelFunc: n7 }; +function s7(r15) { let { inputs: e, backend: t10 } = r15, { 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] = Df(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); return [l, m]; } -var A$ = { kernelName: Kp, backendName: "cpu", kernelFunc: sQ }; -function aQ(r15) { +var A$ = { kernelName: Kp, backendName: "cpu", kernelFunc: s7 }; +function a7(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { 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), d = i.map((g) => g.shape), [f, h] = Af(u, n.shape, c, s.shape, s.dtype, l, a.shape, m, d, p); return t10.makeTensorInfo(f, s.dtype, h); } -var F$ = { kernelName: qp, backendName: "cpu", kernelFunc: aQ }; -function iQ(r15) { +var F$ = { kernelName: qp, backendName: "cpu", kernelFunc: a7 }; +function i7(r15) { let { backend: e, attrs: t10 } = r15, { start: o, stop: n, dtype: s, step: a } = t10, i = up(o, n, a, s); return e.makeTensorInfo([i.length], s, i); } -var P$ = { kernelName: ma, backendName: "cpu", kernelFunc: iQ }; -var uQ = Ie(ns, (r15) => 1 / r15); -var O$ = { kernelName: ns, backendName: "cpu", kernelFunc: uQ }; -function pQ(r15) { +var P$ = { kernelName: ma, backendName: "cpu", kernelFunc: i7 }; +var u7 = Ie(ns, (r15) => 1 / r15); +var O$ = { kernelName: ns, backendName: "cpu", kernelFunc: u7 }; +function p7(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { images: n } = e, { alignCorners: s, halfPixelCenters: a, size: i } = o; Q(n, "resizeBilinear"); let p = y.computeStrides(n.shape), [u, c] = i, [l, m, d, f] = n.shape, h = t10.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, S = x[0] / b[0], k = x[1] / b[1]; - for (let _ = 0; _ < l; _++) - for (let $ = 0; $ < u; $++) { - let R; - a ? R = S * ($ + 0.5) - 0.5 : R = S * $; - let D = Math.max(0, Math.floor(R)), P = R - D, O = Math.min(m - 1, Math.ceil(R)), M = _ * p[0] + D * p[1], L = _ * p[0] + O * p[1]; - for (let B = 0; B < c; B++) { - let z; - a ? z = k * (B + 0.5) - 0.5 : z = k * B; - let U = Math.max(0, Math.floor(z)), j = z - U, q = Math.min(d - 1, Math.ceil(z)), Y = M + U * p[2], J = L + U * p[2], re = M + q * p[2], ne = L + q * p[2]; - for (let ee = 0; ee < f; ee++) { - let oe = h[Y + ee], ie = h[J + ee], le = h[re + ee], be = h[ne + ee], _e = oe + (le - oe) * j, ve = ie + (be - ie) * j, Fe = _e + (ve - _e) * P; - g[C++] = Fe; - } + for (let _ = 0; _ < l; _++) for (let $ = 0; $ < u; $++) { + let R; + a ? R = S * ($ + 0.5) - 0.5 : R = S * $; + let D = Math.max(0, Math.floor(R)), P = R - D, O = Math.min(m - 1, Math.ceil(R)), M = _ * p[0] + D * p[1], L = _ * p[0] + O * p[1]; + for (let B = 0; B < c; B++) { + let z; + a ? z = k * (B + 0.5) - 0.5 : z = k * B; + let U = Math.max(0, Math.floor(z)), j = z - U, q = Math.min(d - 1, Math.ceil(z)), Y = M + U * p[2], J = L + U * p[2], re = M + q * p[2], ne = L + q * p[2]; + for (let ee = 0; ee < f; ee++) { + let oe = h[Y + ee], ie = h[J + ee], le = h[re + ee], be = h[ne + ee], _e = oe + (le - oe) * j, ve = ie + (be - ie) * j, Fe = _e + (ve - _e) * P; + g[C++] = Fe; } } + } return t10.makeTensorInfo([l, u, c, f], "float32", g); } -var M$ = { kernelName: is, backendName: "cpu", kernelFunc: pQ }; -function cQ(r15) { +var M$ = { kernelName: is, backendName: "cpu", kernelFunc: p7 }; +function c7(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { images: n, dy: s } = e, { alignCorners: a } = o; Q([s, n], "resizeBilinearGrad"); 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 = t10.data.get(s.dataId).values, S = 0; @@ -14934,8 +13800,8 @@ function cQ(r15) { } return t10.makeTensorInfo([p, c, u, l], "float32", f); } -var L$ = { kernelName: Ja, backendName: "cpu", kernelFunc: cQ }; -function lQ(r15) { +var L$ = { kernelName: Ja, backendName: "cpu", kernelFunc: c7 }; +function l7(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { images: n } = e, { alignCorners: s, halfPixelCenters: a, size: i } = o; Q(n, "resizeNearestNeighbor"); let p = y.computeStrides(n.shape), [u, c] = i, [l, m, d, f] = n.shape, h = t10.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], S = x[1] / b[1], k = 0; @@ -14958,8 +13824,8 @@ function lQ(r15) { } return t10.makeTensorInfo([l, u, c, f], n.dtype, g); } -var B$ = { kernelName: as, backendName: "cpu", kernelFunc: lQ }; -function mQ(r15) { +var B$ = { kernelName: as, backendName: "cpu", kernelFunc: l7 }; +function m7(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { images: n, dy: s } = e, { alignCorners: a } = o; Q([s, n], "resizeNearestNeighborGrad"); 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 = t10.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], S = x[1] / b[1], k = 1 / C, _ = 1 / S, $ = Math.ceil(k) * 2 + 2, R = Math.ceil(_) * 2 + 2; @@ -14973,17 +13839,14 @@ function mQ(r15) { let J = 0; for (let re = 0; re < $; re++) { let ne = re + B; - if (ne < 0 || ne >= d) - continue; + if (ne < 0 || ne >= d) continue; let ee = P + ne * p[1], oe = ne * C, ie = Math.min(c - 1, a ? Math.round(oe) : Math.floor(oe)); - if (O === ie) - for (let le = 0; le < R; le++) { - let be = le + q; - if (be < 0 || be >= f) - continue; - let _e = ee + be * p[2], ve = be * S, Fe = Math.min(l - 1, a ? Math.round(ve) : Math.floor(ve)); - z === Fe && (J += g[_e + Y]); - } + if (O === ie) for (let le = 0; le < R; le++) { + let be = le + q; + if (be < 0 || be >= f) continue; + let _e = ee + be * p[2], ve = be * S, Fe = Math.min(l - 1, a ? Math.round(ve) : Math.floor(ve)); + z === Fe && (J += g[_e + Y]); + } } h[U + Y] = J; } @@ -14992,13 +13855,12 @@ function mQ(r15) { } return t10.makeTensorInfo(n.shape, n.dtype, h); } -var z$ = { kernelName: Za, backendName: "cpu", kernelFunc: mQ }; -function dQ(r15) { +var z$ = { kernelName: Za, backendName: "cpu", kernelFunc: m7 }; +function d7(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { dims: s } = o; Q(n, "reverse"); let a = n.shape.length, i = y.parseAxisParam(s, n.shape); - if (a === 0) - return lr({ inputs: { x: n }, backend: t10 }); + if (a === 0) return lr({ inputs: { x: n }, backend: t10 }); let p = new tt(n.shape, n.dtype), u = t10.bufferSync(n); for (let c = 0; c < p.size; c++) { let l = p.indexToLoc(c), m = l.slice(); @@ -15006,7 +13868,7 @@ function dQ(r15) { } return t10.makeTensorInfo(p.shape, p.dtype, p.values); } -var V$ = { kernelName: ps, backendName: "cpu", kernelFunc: dQ }; +var V$ = { kernelName: ps, backendName: "cpu", kernelFunc: d7 }; var W$ = { kernelName: Ds, backendName: "cpu", kernelFunc: ({ inputs: r15, attrs: e, backend: t10 }) => { let { image: o } = r15, { radians: n, fillValue: s, center: a } = e, i = t10, p = y.getTypedArrayFromDType(o.dtype, y.sizeFromShape(o.shape)), [u, c, l, m] = o.shape, [d, f] = w.getImageCenter(a, c, l), h = 255, g = Math.sin(n), x = Math.cos(n), b = i.data.get(o.dataId).values; for (let S = 0; S < u; S++) { @@ -15031,145 +13893,124 @@ var W$ = { kernelName: Ds, backendName: "cpu", kernelFunc: ({ inputs: r15, attrs } return { dataId: i.write(p, o.shape, o.dtype), shape: o.shape, dtype: o.dtype }; } }; -var fQ = Ie(cs, (r15) => { +var f7 = Ie(cs, (r15) => { let e = Math.floor(r15); return r15 - e < 0.5 ? Math.floor(r15) : r15 - e > 0.5 ? Math.ceil(r15) : e % 2 === 0 ? e : e + 1; }); -var U$ = { kernelName: cs, backendName: "cpu", kernelFunc: fQ }; -function hQ(r15) { +var U$ = { kernelName: cs, backendName: "cpu", kernelFunc: f7 }; +function h7(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { indices: n, updates: s } = e, { shape: a } = o, { sliceRank: i, numUpdates: p, sliceSize: u, strides: c, outputSize: l } = w.calculateShapes(s, n, a), m = true, d = t10.bufferSync(n), f = t10.bufferSync(s), h = zs(d, f, a, l, u, p, i, c, 0, m); return t10.makeTensorInfo(a, h.dtype, h.values); } -var G$ = { kernelName: ms, backendName: "cpu", kernelFunc: hQ }; -function gQ(r15, e) { +var G$ = { kernelName: ms, backendName: "cpu", kernelFunc: h7 }; +function g7(r15, e) { let t10 = 0, o = r15.length, n = 0; - for (; t10 < o; ) - n = Math.floor((t10 + o) / 2), r15[n] < e ? t10 = n + 1 : o = n; + for (; t10 < o; ) n = Math.floor((t10 + o) / 2), r15[n] < e ? t10 = n + 1 : o = n; return o; } -function xQ(r15, e) { +function x7(r15, e) { let t10 = 0, o = r15.length, n = 0; - for (; t10 < o; ) - n = Math.floor((t10 + o) / 2), r15[n] <= e ? t10 = n + 1 : o = n; + for (; t10 < o; ) n = Math.floor((t10 + o) / 2), r15[n] <= e ? t10 = n + 1 : o = n; return o; } function H$(r15, e, t10, o, n, s) { let a = y.getArrayFromDType("int32", t10 * n); for (let i = 0; i < t10; ++i) { let p = r15.slice(i * o, (i + 1) * o), u = i * n; - for (let c = 0; c < n; ++c) - a[u + c] = s === "left" ? gQ(p, e[c + u]) : xQ(p, e[c + u]); + for (let c = 0; c < n; ++c) a[u + c] = s === "left" ? g7(p, e[c + u]) : x7(p, e[c + u]); } return a; } -function yQ(r15) { +function y7(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { sortedSequence: n, values: s } = e, { side: a } = o, i = t10.data.get(n.dataId).values, p = t10.data.get(s.dataId).values, u = H$(i, p, n.shape[0], n.shape[1], s.shape[1], a); return t10.makeTensorInfo(s.shape, "int32", u); } -var K$ = { kernelName: fs, backendName: "cpu", kernelFunc: yQ }; -function bQ(r15) { +var K$ = { kernelName: fs, backendName: "cpu", kernelFunc: y7 }; +function b7(r15) { let { inputs: e, backend: t10 } = r15, { condition: o, t: n, e: s } = e; Q([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 = 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]; + 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 t10.makeTensorInfo(n.shape, c, l); } -var q$ = { kernelName: fa, backendName: "cpu", kernelFunc: bQ }; -var CQ = w.SELU_SCALEALPHA; -var wQ = w.SELU_SCALE; -var SQ = Ie(hs, (r15) => r15 >= 0 ? wQ * r15 : CQ * (Math.exp(r15) - 1)); -var j$ = { kernelName: hs, backendName: "cpu", kernelFunc: SQ }; -var IQ = Ie(ys, (r15) => r15 < 0 ? -1 : r15 > 0 ? 1 : 0); -var X$ = { kernelName: ys, backendName: "cpu", kernelFunc: IQ }; -var vQ = Ie(gs, (r15) => Math.sin(r15)); -var Y$ = { kernelName: gs, backendName: "cpu", kernelFunc: vQ }; -var kQ = Ie(xs, (r15) => Math.sinh(r15)); -var Q$ = { kernelName: xs, backendName: "cpu", kernelFunc: kQ }; -var NQ = 11920928955078125e-23; -var Z$ = Math.log(NQ) + 2; -var TQ = Ie(Cs, (r15) => { +var q$ = { kernelName: fa, backendName: "cpu", kernelFunc: b7 }; +var C7 = w.SELU_SCALEALPHA; +var w7 = w.SELU_SCALE; +var S7 = Ie(hs, (r15) => r15 >= 0 ? w7 * r15 : C7 * (Math.exp(r15) - 1)); +var j$ = { kernelName: hs, backendName: "cpu", kernelFunc: S7 }; +var I7 = Ie(ys, (r15) => r15 < 0 ? -1 : r15 > 0 ? 1 : 0); +var X$ = { kernelName: ys, backendName: "cpu", kernelFunc: I7 }; +var v7 = Ie(gs, (r15) => Math.sin(r15)); +var Y$ = { kernelName: gs, backendName: "cpu", kernelFunc: v7 }; +var k7 = Ie(xs, (r15) => Math.sinh(r15)); +var Q$ = { kernelName: xs, backendName: "cpu", kernelFunc: k7 }; +var N7 = 11920928955078125e-23; +var Z$ = Math.log(N7) + 2; +var T7 = Ie(Cs, (r15) => { let e = r15 > -Z$, t10 = r15 < Z$, o = Math.exp(r15), n; return t10 ? n = o : e ? n = r15 : n = Math.log(1 + o), n; }); -var J$ = { kernelName: Cs, backendName: "cpu", kernelFunc: TQ }; -function _Q(r15) { +var J$ = { kernelName: Cs, backendName: "cpu", kernelFunc: T7 }; +function _7(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { blockShape: s, paddings: a } = o; Q([n], "spaceToBatchND"); let i = y.sizeFromShape(s), p = [[0, 0]]; p.push(...a); - for (let _ = 1 + s.length; _ < n.shape.length; ++_) - p.push([0, 0]); + for (let _ = 1 + s.length; _ < n.shape.length; ++_) p.push([0, 0]); let u = Wf.kernelFunc({ inputs: { x: n }, backend: t10, attrs: { paddings: p, constantValue: 0 } }), c = w.getReshaped(u.shape, s, i, false), l = w.getPermuted(c.length, s.length, false), m = w.getReshapedPermuted(u.shape, s, i, false), h = We({ inputs: { x: u }, backend: t10, attrs: { shape: c } }), b = St({ inputs: { x: h }, backend: t10, attrs: { perm: l } }), k = We({ inputs: { x: b }, backend: t10, attrs: { shape: m } }); return t10.disposeIntermediateTensorInfo(u), t10.disposeIntermediateTensorInfo(h), t10.disposeIntermediateTensorInfo(b), k; } -var eR = { kernelName: ga, backendName: "cpu", kernelFunc: _Q }; -function EQ(r15) { +var eR = { kernelName: ga, backendName: "cpu", kernelFunc: _7 }; +function E7(r15) { let { inputs: e, backend: t10 } = r15, { indices: o, values: n, denseShape: s, defaultValue: a } = e; - if (s.shape.length !== 1) - throw new Error(`Dense shape must be a vector, saw: + 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: + 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: + 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: + 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, d, f, h] = Ff(i, o.shape, o.dtype, p, n.dtype, u, c); return [t10.makeTensorInfo(m, o.dtype, l), t10.makeTensorInfo([m[0]], n.dtype, d), t10.makeTensorInfo([f.length], "bool", new Uint8Array(f.map((g) => Number(g)))), t10.makeTensorInfo([h.length], o.dtype, new Int32Array(h))]; } -var tR = { kernelName: Ki, backendName: "cpu", kernelFunc: EQ }; -function $Q(r15) { +var tR = { kernelName: Ki, backendName: "cpu", kernelFunc: E7 }; +function $7(r15) { let { inputs: e, backend: t10 } = r15, { inputIndices: o, inputShape: n, newShape: s } = e; - if (o.shape.length !== 2) - throw new Error(`Input indices should be a matrix but received shape + 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 + 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}`); + 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] = Pf(i, o.shape, o.dtype, a, p); return [t10.makeTensorInfo(c, o.dtype, u), t10.makeTensorInfo([l.length], s.dtype, new Int32Array(l))]; } -var rR = { kernelName: ei, backendName: "cpu", kernelFunc: $Q }; -function RQ(r15) { +var rR = { kernelName: ei, backendName: "cpu", kernelFunc: $7 }; +function R7(r15) { let { inputs: e, backend: t10 } = r15, { 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 + 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 + 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."); + 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] = Sc(a, o.shape, o.dtype, i, p, true); return t10.makeTensorInfo(c, o.dtype, u); } -var oR = { kernelName: ya, backendName: "cpu", kernelFunc: RQ }; -function DQ(r15) { +var oR = { kernelName: ya, backendName: "cpu", kernelFunc: R7 }; +function D7(r15) { let { inputs: e, backend: t10 } = r15, { 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 + 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 + 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."); + 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] = Sc(a, o.shape, o.dtype, i, p); return t10.makeTensorInfo(c, o.dtype, u); } -var nR = { kernelName: ba, backendName: "cpu", kernelFunc: DQ }; -function AQ(r15) { +var nR = { kernelName: ba, backendName: "cpu", kernelFunc: D7 }; +function A7(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { sparseIndices: n, sparseValues: s, defaultValue: a } = e, { outputShape: i } = o, { sliceRank: p, numUpdates: u, sliceSize: c, strides: l, outputSize: m } = w.calculateShapes(s, n, i), d = false, f = t10.bufferSync(n), h; switch (s.dtype) { case "bool": { @@ -15197,8 +14038,8 @@ function AQ(r15) { } return t10.makeTensorInfo(i, h.dtype, h.values); } -var sR = { kernelName: vs, backendName: "cpu", kernelFunc: AQ }; -function FQ(r15) { +var sR = { kernelName: vs, backendName: "cpu", kernelFunc: A7 }; +function F7(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { numOrSizeSplits: s, axis: a } = o, i = y.parseAxisParam(a, n.shape)[0], p = w.prepareSplitSize(n, s, i), u = new Array(n.shape.length).fill(0), c = n.shape.slice(); return p.map((l) => { let m = [...c]; @@ -15207,7 +14048,7 @@ function FQ(r15) { return u[i] += l, d; }); } -var aR = { kernelName: xa, backendName: "cpu", kernelFunc: FQ }; +var aR = { kernelName: xa, backendName: "cpu", kernelFunc: F7 }; var iR = { kernelName: qi, backendName: "cpu", kernelFunc: ({ inputs: r15, backend: e }) => { let { x: t10 } = r15, o = e; Q(t10, "square"); @@ -15218,17 +14059,16 @@ var iR = { kernelName: qi, backendName: "cpu", kernelFunc: ({ inputs: r15, backe } return { dataId: o.write(s, t10.shape, t10.dtype), shape: t10.shape, dtype: t10.dtype }; } }; -var PQ = Ie(wo, (r15, e) => { +var P7 = Ie(wo, (r15, e) => { let t10 = e; return isNaN(r15) ? NaN : r15 > 0 ? 1 : t10.alpha; }); -var uR = { kernelName: wo, backendName: "cpu", kernelFunc: PQ }; -function OQ(r15) { +var uR = { kernelName: wo, backendName: "cpu", kernelFunc: P7 }; +function O7(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { begin: s, end: a, strides: i, beginMask: p, endMask: u, ellipsisMask: c, newAxisMask: l, shrinkAxisMask: m } = o; Q(n, "stridedSlice"); let { finalShapeSparse: d, finalShape: f, isIdentity: h, sliceDim0: g, isSimpleSlice: x, begin: b, end: C, strides: S } = pt.sliceInfo(n.shape, s, a, i, p, u, c, l, m), k; - if (h) - k = We({ inputs: { x: n }, backend: t10, attrs: { shape: f } }); + if (h) k = We({ inputs: { x: n }, backend: t10, 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 _ = pt.computeOutShape(b, C, S), $ = Ao({ inputs: { x: n }, backend: t10, attrs: { begin: b, size: _ } }); @@ -15239,168 +14079,151 @@ function OQ(r15) { } return k; } -var pR = { kernelName: Ns, backendName: "cpu", kernelFunc: OQ }; -function MQ(r15) { +var pR = { kernelName: Ns, backendName: "cpu", kernelFunc: O7 }; +function M7(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { 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, d = t10.data.get(l.dataId).values, [f, h] = cp(m, d, n, s, a, i, p, u); return [t10.makeTensorInfo([f.length], "string", f), t10.makeTensorInfo(l.shape, "int32", h)]; } -var cR = { kernelName: Ca, backendName: "cpu", kernelFunc: MQ }; -function LQ(r15) { +var cR = { kernelName: Ca, backendName: "cpu", kernelFunc: M7 }; +function L7(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { 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}`); + 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] = lp(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))]; } -var lR = { kernelName: ji, backendName: "cpu", kernelFunc: LQ }; -function BQ(r15) { +var lR = { kernelName: ji, backendName: "cpu", kernelFunc: L7 }; +function B7(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { 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"); + 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 = mp(a, n); return t10.makeTensorInfo(s.shape, "int32", i); } -var mR = { kernelName: Xi, backendName: "cpu", kernelFunc: BQ }; -var zQ = Ie(_s, (r15) => Math.tan(r15)); -var dR = { kernelName: _s, backendName: "cpu", kernelFunc: zQ }; -var VQ = Ie(Es, (r15) => Math.tanh(r15)); -var fR = { kernelName: Es, backendName: "cpu", kernelFunc: VQ }; -function WQ(r15) { +var mR = { kernelName: Xi, backendName: "cpu", kernelFunc: B7 }; +var z7 = Ie(_s, (r15) => Math.tan(r15)); +var dR = { kernelName: _s, backendName: "cpu", kernelFunc: z7 }; +var V7 = Ie(Es, (r15) => Math.tanh(r15)); +var fR = { kernelName: Es, backendName: "cpu", kernelFunc: V7 }; +function W7(r15) { let { inputs: e, backend: t10 } = r15, { tensor: o, indices: n, updates: s } = e, { sliceRank: a, numUpdates: i, sliceSize: p, strides: u, outputSize: c } = w.calculateShapes(s, n, o.shape), l = false, m = t10.bufferSync(n), d = t10.bufferSync(s), f = t10.bufferSync(o), h = zs(m, d, o.shape, c, p, i, a, u, f, l); return t10.makeTensorInfo(o.shape, h.dtype, h.values); } -var hR = { kernelName: ds, backendName: "cpu", kernelFunc: WQ }; -function UQ(r15) { +var hR = { kernelName: ds, backendName: "cpu", kernelFunc: W7 }; +function U7(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { reps: s } = o; Q(n, "tile"); let a = Mf(t10.bufferSync(n), s); return t10.makeTensorInfo(a.shape, a.dtype, a.values); } -var gR = { kernelName: po, backendName: "cpu", kernelFunc: UQ }; -function GQ(r15) { +var gR = { kernelName: po, backendName: "cpu", kernelFunc: U7 }; +function G7(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { k: s, sorted: a } = o; Q(n, "topk"); let i = t10.data.get(n.dataId).values, [p, u] = Lf(i, n.shape, n.dtype, s, a); return [t10.makeTensorInfo(p.shape, p.dtype, p.values), t10.makeTensorInfo(u.shape, u.dtype, u.values)]; } -var xR = { kernelName: $s, backendName: "cpu", kernelFunc: GQ }; -function HQ(r15) { +var xR = { kernelName: $s, backendName: "cpu", kernelFunc: G7 }; +function H7(r15) { let { inputs: e, attrs: t10, backend: o } = r15, { image: n, transforms: s } = e, { interpolation: a, fillMode: i, fillValue: p, outputShape: u } = t10, [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], S = x[2], k = y.computeStrides(g), _ = k[0], $ = k[1], R = k[2], D = y.getTypedArrayFromDType(n.dtype, y.sizeFromShape(g)); D.fill(p); let P = o.data.get(n.dataId).values, O = o.data.get(s.dataId).values; for (let L = 0; L < c; ++L) { let B = s.shape[0] === 1 ? O : O.subarray(L * 8, L * 8 + 8); - for (let z = 0; z < f; ++z) - for (let U = 0; U < h; ++U) - for (let j = 0; j < d; ++j) { - let q, Y = B[6] * U + B[7] * z + 1; - if (Y === 0) - continue; - let J = (B[0] * U + B[1] * z + B[2]) / Y, re = (B[3] * U + B[4] * z + B[5]) / Y, ne = yR(J, m, i), ee = yR(re, l, i); - switch (a) { - case "nearest": - q = YQ(P, l, m, b, C, S, L, ee, ne, j, p); - break; - case "bilinear": - q = QQ(P, l, m, b, C, S, L, ee, ne, j, p); - break; - default: - throw new Error(`Error in Transform: Expect 'nearest' or 'bilinear', but got ${a}`); - } - let oe = L * _ + z * $ + U * R + j; - D[oe] = q; - } + for (let z = 0; z < f; ++z) for (let U = 0; U < h; ++U) for (let j = 0; j < d; ++j) { + let q, Y = B[6] * U + B[7] * z + 1; + if (Y === 0) continue; + let J = (B[0] * U + B[1] * z + B[2]) / Y, re = (B[3] * U + B[4] * z + B[5]) / Y, ne = yR(J, m, i), ee = yR(re, l, i); + switch (a) { + case "nearest": + q = Y7(P, l, m, b, C, S, L, ee, ne, j, p); + break; + case "bilinear": + q = Q7(P, l, m, b, C, S, L, ee, ne, j, p); + break; + default: + throw new Error(`Error in Transform: Expect 'nearest' or 'bilinear', but got ${a}`); + } + let oe = L * _ + z * $ + U * R + j; + D[oe] = q; + } return o.makeTensorInfo(g, n.dtype, D); } return { dataId: o.write(D, g, n.dtype), shape: n.shape, dtype: n.dtype }; } -var bR = { kernelName: Rs, backendName: "cpu", kernelFunc: HQ }; +var bR = { kernelName: Rs, backendName: "cpu", kernelFunc: H7 }; function yR(r15, e, t10) { switch (t10) { case "reflect": - return KQ(r15, e); + return K7(r15, e); case "wrap": - return qQ(r15, e); + return q7(r15, e); case "nearest": - return XQ(r15, e); + return X7(r15, e); case "constant": default: - return jQ(r15, e); + return j7(r15, e); } } -function KQ(r15, e) { +function K7(r15, e) { let t10 = r15; - if (t10 < 0) - if (e <= 1) - t10 = 0; - else { - let o = 2 * e; - t10 < o && (t10 = o * Math.trunc(-t10 / o) + t10), t10 = t10 < -e ? t10 + o : -t10 - 1; - } - else if (t10 > e - 1) - if (e <= 1) - t10 = 0; - else { - let o = 2 * e; - t10 -= o * Math.trunc(t10 / o), t10 >= e && (t10 = o - t10 - 1); - } + if (t10 < 0) if (e <= 1) t10 = 0; + else { + let o = 2 * e; + t10 < o && (t10 = o * Math.trunc(-t10 / o) + t10), t10 = t10 < -e ? t10 + o : -t10 - 1; + } + else if (t10 > e - 1) if (e <= 1) t10 = 0; + else { + let o = 2 * e; + t10 -= o * Math.trunc(t10 / o), t10 >= e && (t10 = o - t10 - 1); + } return y.clamp(0, t10, e - 1); } -function qQ(r15, e) { +function q7(r15, e) { let t10 = r15; - if (t10 < 0) - if (e <= 1) - t10 = 0; - else { - let o = e - 1; - t10 += e * (Math.trunc(-t10 / o) + 1); - } - else if (t10 > e - 1) - if (e <= 1) - t10 = 0; - else { - let o = e - 1; - t10 -= e * Math.trunc(t10 / o); - } + if (t10 < 0) if (e <= 1) t10 = 0; + else { + let o = e - 1; + t10 += e * (Math.trunc(-t10 / o) + 1); + } + else if (t10 > e - 1) if (e <= 1) t10 = 0; + else { + let o = e - 1; + t10 -= e * Math.trunc(t10 / o); + } return y.clamp(0, t10, e - 1); } -function jQ(r15, e) { +function j7(r15, e) { return r15; } -function XQ(r15, e) { +function X7(r15, e) { return y.clamp(0, r15, e - 1); } function ql(r15, e, t10, 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 ? r15[l] : c; } -function YQ(r15, e, t10, o, n, s, a, i, p, u, c) { +function Y7(r15, e, t10, o, n, s, a, i, p, u, c) { let l = Math.round(i), m = Math.round(p); return ql(r15, e, t10, o, n, s, a, l, m, u, c); } -function QQ(r15, e, t10, o, n, s, a, i, p, u, c) { +function Q7(r15, e, t10, 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) * ql(r15, e, t10, o, n, s, a, l, m, u, c) + (p - m) * ql(r15, e, t10, o, n, s, a, l, f, u, c), g = (f - p) * ql(r15, e, t10, o, n, s, a, d, m, u, c) + (p - m) * ql(r15, e, t10, o, n, s, a, d, f, u, c); return (d - i) * h + (i - l) * g; } -function ZQ(r15) { +function Z7(r15) { let { inputs: e, attrs: t10, backend: o } = r15, { axis: n } = t10, { x: s } = e; Q(s, "unique"); let a = o.data.get(s.dataId).values, { outputValues: i, outputShape: p, indices: u } = dp(a, n, s.shape, s.dtype); return [o.makeTensorInfo(p, s.dtype, i), o.makeTensorInfo([u.length], "int32", u)]; } -var CR = { kernelName: Yi, backendName: "cpu", kernelFunc: ZQ }; -function JQ(r15) { +var CR = { kernelName: Yi, backendName: "cpu", kernelFunc: Z7 }; +function J7(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { 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 d = 0; d < a; d++) - d !== s && (p[u++] = n.shape[d]); + 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); @@ -15411,7 +14234,7 @@ function JQ(r15) { } return m; } -var wR = { kernelName: wa, backendName: "cpu", kernelFunc: JQ }; +var wR = { kernelName: wa, backendName: "cpu", kernelFunc: J7 }; function eZ(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { x: n, segmentIds: s } = e, { numSegments: a } = o; Q(n, "unsortedSegmentSum"); @@ -15429,8 +14252,7 @@ function eZ(r15) { } var SR = { kernelName: Qi, backendName: "cpu", kernelFunc: eZ }; var tZ = [q_, t_, j_, X_, a_, Y_, Q_, Z_, J_, eE, tE, rE, oE, nE, sE, iE, uE, pE, cE, K_, lE, mE, dE, i_, fE, s_, u_, hE, r_, gE, yE, bE, CE, wE, SE, IE, vE, kE, NE, TE, _E, EE, $E, RE, DE, AE, FE, PE, OE, ME, LE, BE, VE, z_, WE, p_, UE, c_, GE, l_, HE, KE, qE, m_, d_, jE, XE, YE, QE, f_, h_, o_, ZE, xE, JE, e$, t$, V_, g_, x_, r$, y_, o$, n$, s$, a$, i$, u$, p$, b_, c$, l$, m$, d$, h$, g$, x$, C_, y$, b$, S$, w_, S_, I$, v$, k$, I_, N$, E$, $$, Wf, R$, W_, k_, D$, A$, F$, P$, n_, Gl, O$, U_, G_, H_, M$, L$, B$, z$, V$, W$, U$, $_, G$, K$, q$, j$, D_, X$, Y$, Q$, A_, C$, J$, eR, tR, rR, oR, nR, sR, aR, P_, iR, O_, M_, uR, pR, cR, lR, mR, L_, zE, dR, fR, hR, gR, xR, bR, v_, CR, wR, SR, T$]; -for (let r15 of tZ) - ti(r15); +for (let r15 of tZ) ti(r15); var Ec = {}; qe(Ec, { assertNotComplex: () => Vs, bindCanvasToFramebuffer: () => cZ, bindColorTextureToFramebuffer: () => Ql, bindTextureToProgramUniformSampler: () => VI, bindTextureUnit: () => NR, bindVertexBufferToProgramAttribute: () => jf, callAndCheck: () => ce, canBeRepresented: () => EI, createFragmentShader: () => RI, createFramebuffer: () => LI, createProgram: () => DI, createStaticIndexBuffer: () => PI, createStaticVertexBuffer: () => FI, createTexture: () => OI, createVertexShader: () => $I, getBatchDim: () => gi, getExtensionOrThrow: () => Nc, getFramebufferErrorMessage: () => TR, getMaxTexturesInShader: () => GI, getNumChannels: () => uZ, getProgramUniformLocation: () => zI, getProgramUniformLocationOrThrow: () => BI, getRowsCols: () => xi, getShapeAs3D: () => _c, getTextureShapeFromLogicalShape: () => WI, getWebGLDisjointQueryTimerVersion: () => HI, getWebGLErrorMessage: () => kR, getWebGLMaxTextureSize: () => UI, hasExtension: () => qr, isCapableOfRenderingToFloatTexture: () => KI, isDownloadFloatTextureEnabled: () => qI, isReshapeFree: () => xu, isWebGLFenceEnabled: () => jI, isWebGLVersionEnabled: () => Yf, linkProgram: () => AI, logShaderSourceAndInfoLog: () => qf, resetMaxTextureSize: () => lZ, resetMaxTexturesInShader: () => mZ, unbindColorTextureFromFramebuffer: () => Xf, unbindTextureUnit: () => pZ, validateFramebuffer: () => Tc, validateProgram: () => Yl, validateTextureSize: () => MI }); var hp = {}; @@ -15441,24 +14263,19 @@ function NI(r15, e) { function Kr(r15, e) { if (!(r15 in hp) || e != null) { let o = oZ(r15, e); - if (o !== null) - hp[r15] = o; - else - return console.log("Could not get context for WebGL version", r15), null; + if (o !== null) hp[r15] = o; + else return console.log("Could not get context for WebGL version", r15), null; } let t10 = hp[r15]; return t10 == null || t10.isContextLost() ? (delete hp[r15], Kr(r15)) : (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), hp[r15]); } function rZ(r15) { - if (!A().getBool("IS_SAFARI") && typeof OffscreenCanvas != "undefined" && r15 === 2) - return new OffscreenCanvas(300, 150); - if (typeof document != "undefined") - return document.createElement("canvas"); + if (!A().getBool("IS_SAFARI") && typeof OffscreenCanvas != "undefined" && r15 === 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 oZ(r15, e) { - if (r15 !== 1 && r15 !== 2) - throw new Error("Cannot get WebGL rendering context, WebGL is disabled."); + if (r15 !== 1 && r15 !== 2) throw new Error("Cannot get WebGL rendering context, WebGL is disabled."); let t10 = e == null ? rZ(r15) : e; return t10.addEventListener("webglcontextlost", (o) => { o.preventDefault(), delete hp[r15]; @@ -15503,8 +14320,7 @@ function ce(r15, e) { } function nZ(r15) { let e = r15.getError(); - if (e !== r15.NO_ERROR) - throw new Error("WebGL Error: " + kR(r15, e)); + if (e !== r15.NO_ERROR) throw new Error("WebGL Error: " + kR(r15, e)); } var sZ = 596e-10; var aZ = 65504; @@ -15536,16 +14352,13 @@ function Nc(r15, e) { } function $I(r15, e) { let t10 = hi(r15, () => r15.createShader(r15.VERTEX_SHADER), "Unable to create vertex WebGLShader."); - if (ce(r15, () => r15.shaderSource(t10, e)), ce(r15, () => r15.compileShader(t10)), r15.getShaderParameter(t10, r15.COMPILE_STATUS) === false) - throw console.log(r15.getShaderInfoLog(t10)), new Error("Failed to compile vertex shader."); + if (ce(r15, () => r15.shaderSource(t10, e)), ce(r15, () => r15.compileShader(t10)), r15.getShaderParameter(t10, r15.COMPILE_STATUS) === false) throw console.log(r15.getShaderInfoLog(t10)), new Error("Failed to compile vertex shader."); return t10; } function RI(r15, e) { let t10 = hi(r15, () => r15.createShader(r15.FRAGMENT_SHADER), "Unable to create fragment WebGLShader."); - if (ce(r15, () => r15.shaderSource(t10, e)), ce(r15, () => r15.compileShader(t10)), A().get("ENGINE_COMPILE_ONLY")) - return t10; - if (r15.getShaderParameter(t10, r15.COMPILE_STATUS) === false) - throw qf(e, r15.getShaderInfoLog(t10)), new Error("Failed to compile fragment shader."); + if (ce(r15, () => r15.shaderSource(t10, e)), ce(r15, () => r15.compileShader(t10)), A().get("ENGINE_COMPILE_ONLY")) return t10; + if (r15.getShaderParameter(t10, r15.COMPILE_STATUS) === false) throw qf(e, r15.getShaderInfoLog(t10)), new Error("Failed to compile fragment shader."); return t10; } var iZ = /ERROR: [0-9]+:([0-9]+):/g; @@ -15557,8 +14370,7 @@ function qf(r15, e) { } let o = +t10[1], n = r15.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); + 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(` @@ -15569,12 +14381,10 @@ function DI(r15) { return hi(r15, () => r15.createProgram(), "Unable to create WebGLProgram."); } function AI(r15, e) { - if (ce(r15, () => r15.linkProgram(e)), !A().get("ENGINE_COMPILE_ONLY") && r15.getProgramParameter(e, r15.LINK_STATUS) === false) - throw console.log(r15.getProgramInfoLog(e)), new Error("Failed to link vertex and fragment shaders."); + if (ce(r15, () => r15.linkProgram(e)), !A().get("ENGINE_COMPILE_ONLY") && r15.getProgramParameter(e, r15.LINK_STATUS) === false) throw console.log(r15.getProgramInfoLog(e)), new Error("Failed to link vertex and fragment shaders."); } function Yl(r15, e) { - if (ce(r15, () => r15.validateProgram(e)), r15.getProgramParameter(e, r15.VALIDATE_STATUS) === false) - throw console.log(r15.getProgramInfoLog(e)), new Error("Shader program validation failed."); + if (ce(r15, () => r15.validateProgram(e)), r15.getProgramParameter(e, r15.VALIDATE_STATUS) === false) throw console.log(r15.getProgramInfoLog(e)), new Error("Shader program validation failed."); } function FI(r15, e) { let t10 = hi(r15, () => r15.createBuffer(), "Unable to create WebGLBuffer"); @@ -15634,8 +14444,7 @@ function Xf(r15, e) { } function Tc(r15) { let e = r15.checkFramebufferStatus(r15.FRAMEBUFFER); - if (e !== r15.FRAMEBUFFER_COMPLETE) - throw new Error("Error binding framebuffer: " + TR(r15, e)); + if (e !== r15.FRAMEBUFFER_COMPLETE) throw new Error("Error binding framebuffer: " + TR(r15, e)); } function TR(r15, e) { switch (e) { @@ -15653,8 +14462,7 @@ function TR(r15, e) { } function hi(r15, e, t10) { let o = ce(r15, () => e()); - if (o == null) - throw new Error(t10); + if (o == null) throw new Error(t10); return o; } function _R(r15, e) { @@ -15668,8 +14476,7 @@ function gi(r15, e = 2) { return y.sizeFromShape(r15.slice(0, r15.length - e)); } function xi(r15) { - if (r15.length === 0) - throw Error("Cannot get rows and columns of an empty shape array."); + if (r15.length === 0) throw Error("Cannot get rows and columns of an empty shape array."); return [r15.length > 1 ? r15[r15.length - 2] : 1, r15[r15.length - 1]]; } function _c(r15) { @@ -15682,24 +14489,20 @@ function WI(r15, e = false) { let n = y.sizeFromShape(r15), s = null; r15.length <= 1 && n <= t10 ? s = [1, n] : r15.length === 2 && r15[0] <= t10 && r15[1] <= t10 ? s = r15 : r15.length === 3 && r15[0] * r15[1] <= t10 && r15[2] <= t10 ? s = [r15[0] * r15[1], r15[2]] : r15.length === 3 && r15[0] <= t10 && r15[1] * r15[2] <= t10 ? s = [r15[0], r15[1] * r15[2]] : r15.length === 4 && r15[0] * r15[1] * r15[2] <= t10 && r15[3] <= t10 ? s = [r15[0] * r15[1] * r15[2], r15[3]] : r15.length === 4 && r15[0] <= t10 && r15[1] * r15[2] * r15[3] <= t10 && (s = [r15[0], r15[1] * r15[2] * r15[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 = gi(r15), p = 2, u = 2; - r15.length && ([p, u] = xi(r15)), n = i * (p / 2) * (u / 2), s = y.sizeToSquarishShape(n).map((c) => c * 2); - } else - s = y.sizeToSquarishShape(n); + if (s == null || a) if (e) { + let i = gi(r15), p = 2, u = 2; + r15.length && ([p, u] = xi(r15)), n = i * (p / 2) * (u / 2), s = y.sizeToSquarishShape(n).map((c) => c * 2); + } else s = y.sizeToSquarishShape(n); return s; } function Gf(r15) { return r15 % 2 === 0; } function xu(r15, e) { - if (r15 = r15.slice(-2), e = e.slice(-2), y.arraysEqual(r15, e) || !r15.length || !e.length || r15[0] === 0 || r15[1] === 0 || e[0] === 0 || e[1] === 0) - return true; + if (r15 = r15.slice(-2), e = e.slice(-2), y.arraysEqual(r15, e) || !r15.length || !e.length || r15[0] === 0 || r15[1] === 0 || e[0] === 0 || e[1] === 0) return true; if (r15.length !== e.length) { let t10 = r15[r15.length - 1], o = e[e.length - 1]; - if (t10 === o || Gf(t10) && Gf(o) && (r15[0] === 1 || e[0] === 1)) - return true; + if (t10 === o || Gf(t10) && Gf(o) && (r15[0] === 1 || e[0] === 1)) return true; } return r15[1] === e[1] && Gf(r15[0]) && Gf(e[0]); } @@ -15726,8 +14529,7 @@ function GI(r15) { return Math.min(16, Kf); } function HI(r15) { - if (r15 === 0) - return 0; + if (r15 === 0) return 0; let e, t10 = Kr(r15); return qr(t10, "EXT_disjoint_timer_query_webgl2") && r15 === 2 ? e = 2 : qr(t10, "EXT_disjoint_timer_query") ? e = 1 : e = 0, e; } @@ -15736,34 +14538,27 @@ function qr(r15, e) { } function Yf(r15) { try { - if (Kr(r15) != null) - return true; + if (Kr(r15) != null) return true; } catch (e) { return console.log("Error when getting WebGL context: ", e), false; } return false; } function KI(r15) { - if (r15 === 0) - return false; + if (r15 === 0) return false; let e = Kr(r15); if (r15 === 1) { - if (!qr(e, "OES_texture_float")) - return false; - } else if (!qr(e, "EXT_color_buffer_float")) - return false; + if (!qr(e, "OES_texture_float")) return false; + } else if (!qr(e, "EXT_color_buffer_float")) return false; return _I(e); } function qI(r15) { - if (r15 === 0) - return false; + if (r15 === 0) return false; let e = Kr(r15); if (r15 === 1) { - if (!qr(e, "OES_texture_float") || !qr(e, "WEBGL_color_buffer_float")) - return false; + if (!qr(e, "OES_texture_float") || !qr(e, "WEBGL_color_buffer_float")) return false; } else { - if (qr(e, "EXT_color_buffer_float")) - return _I(e); + if (qr(e, "EXT_color_buffer_float")) return _I(e); let o = "EXT_color_buffer_half_float"; if (qr(e, o)) { let n = e.getExtension(o); @@ -15829,16 +14624,12 @@ Se.registerFlag("WEBGL_DOWNLOAD_FLOAT_ENABLED", () => qI(Se.getNumber("WEBGL_VER Se.registerFlag("WEBGL_FENCE_API_ENABLED", () => jI(Se.getNumber("WEBGL_VERSION"))); Se.registerFlag("WEBGL_SIZE_UPLOAD_UNIFORM", () => Se.getBool("WEBGL_RENDER_FLOAT32_ENABLED") ? 4 : 0); Se.registerFlag("WEBGL_DELETE_TEXTURE_THRESHOLD", () => -1, (r15) => { - if (typeof r15 != "number") - throw new Error(`WEBGL_DELETE_TEXTURE_THRESHOLD must be a number but got ${r15}.`); - if (r15 < 0 && r15 !== -1) - throw new Error(`WEBGL_DELETE_TEXTURE_THRESHOLD must be -1 (indicating never delete) or at least 0, but got ${r15}.`); + if (typeof r15 != "number") throw new Error(`WEBGL_DELETE_TEXTURE_THRESHOLD must be a number but got ${r15}.`); + if (r15 < 0 && r15 !== -1) throw new Error(`WEBGL_DELETE_TEXTURE_THRESHOLD must be -1 (indicating never delete) or at least 0, but got ${r15}.`); }); Se.registerFlag("WEBGL_FLUSH_THRESHOLD", () => eu.isMobile() ? 1 : -1, (r15) => { - if (typeof r15 != "number") - throw new Error(`WEBGL_FLUSH_THRESHOLD must be a number but got ${r15}.`); - if (r15 < 0 && r15 !== -1) - throw new Error(`WEBGL_FLUSH_THRESHOLD must be -1 (indicating never manual flush) or at least 0, but got ${r15}.`); + if (typeof r15 != "number") throw new Error(`WEBGL_FLUSH_THRESHOLD must be a number but got ${r15}.`); + if (r15 < 0 && r15 !== -1) throw new Error(`WEBGL_FLUSH_THRESHOLD must be -1 (indicating never manual flush) or at least 0, but got ${r15}.`); }); Se.registerFlag("CPU_HANDOFF_SIZE_THRESHOLD", () => 128); Se.registerFlag("WEBGL_USE_SHAPES_UNIFORMS", () => false); @@ -15917,8 +14708,7 @@ function xp(r15, e, t10 = "index") { function fZ(r15, e) { let t10 = r15.length, o = r15.map((s) => `${e}[${s}]`), n = new Array(t10 - 1); n[t10 - 2] = o[t10 - 1]; - for (let s = t10 - 3; s >= 0; --s) - n[s] = `(${n[s + 1]} * ${o[s + 1]})`; + for (let s = t10 - 3; s >= 0; --s) n[s] = `(${n[s + 1]} * ${o[s + 1]})`; return n; } function ER(r15, e, t10 = "index") { @@ -16309,8 +15099,7 @@ function TZ(r15, e, t10) { `; } function _Z(r15, e, t10) { - if (t10) - return ` + if (t10) 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)); @@ -16346,8 +15135,7 @@ function _Z(r15, e, t10) { `; } function EZ(r15, e, t10) { - if (t10) - return ` + if (t10) return ` ivec3 getOutputCoords() { ivec2 resTexRC = ivec2(resultUV.yx * vec2(outTexShape[0], outTexShape[1])); @@ -16368,8 +15156,7 @@ function EZ(r15, e, t10) { `; } function $Z(r15, e, t10) { - if (t10) - return ` + if (t10) return ` ivec4 getOutputCoords() { ivec2 packedTexShape = ivec2(ceil(float(outTexShape[0]) / 2.0), ceil(float(outTexShape[1]) / 2.0)); ivec2 resTexRC = ivec2(resultUV.yx * @@ -16393,8 +15180,7 @@ function $Z(r15, e, t10) { } `; let o = [Math.ceil(e[0] / 2), Math.ceil(e[1] / 2)], n = Math.ceil(r15[r15.length - 1] / 2), s = n * Math.ceil(r15[r15.length - 2] / 2), a = s, i = "", p = "b, r, c"; - for (let u = 2; u < r15.length - 1; u++) - a *= r15[r15.length - u - 1], i = ` + for (let u = 2; u < r15.length - 1; u++) a *= r15[r15.length - u - 1], i = ` int b${u} = index / ${a}; index -= b${u} * ${a}; ` + i, p = `b${u}, ` + p; @@ -16417,8 +15203,7 @@ function $Z(r15, e, t10) { `; } function RZ(r15, e, t10) { - if (t10) - return ` + if (t10) return ` ivec4 getOutputCoords() { ivec2 resTexRC = ivec2(resultUV.yx * vec2(outTexShape[0], outTexShape[1])); @@ -16471,8 +15256,7 @@ function AZ(r15, e) { } function FZ(r15, e, t10) { let o = [Math.ceil(e[0] / 2), Math.ceil(e[1] / 2)]; - if (y.arraysEqual(r15, e)) - return t10 ? ` + if (y.arraysEqual(r15, e)) return t10 ? ` 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])); @@ -16579,18 +15363,15 @@ function OZ(r15) { } function MZ(r15, e) { let t10 = r15.name, o = "get" + t10.charAt(0).toUpperCase() + t10.slice(1); - if (r15.shapeInfo.isUniform) - return `float ${o}() {return ${t10};}`; + if (r15.shapeInfo.isUniform) return `float ${o}() {return ${t10};}`; let [n, s] = r15.shapeInfo.texShape; - if (n === 1 && s === 1) - return ` + if (n === 1 && s === 1) return ` float ${o}() { return sampleTexture(${t10}, halfCR); } `; let a = yp(t10); - if (e) - return ` + if (e) return ` float ${o}() { vec2 uv = uvFromFlat(${t10}TexShape[0], ${t10}TexShape[1], ${a}); return sampleTexture(${t10}, uv); @@ -16606,8 +15387,7 @@ function MZ(r15, e) { } function LZ(r15, e) { let t10 = r15.name, o = "get" + t10.charAt(0).toUpperCase() + t10.slice(1), n = r15.shapeInfo.texShape, s = It(); - if (e) - return ` + if (e) return ` vec4 ${o}(int index) { ivec2 packedTexShape = ivec2(ceil(float(${t10}TexShape[0]) / 2.0), ceil(float(${t10}TexShape[1]) / 2.0)); vec2 uv = packedUVfrom1D( @@ -16626,15 +15406,13 @@ function LZ(r15, e) { } function BZ(r15, e) { let t10 = r15.name, o = "get" + t10.charAt(0).toUpperCase() + t10.slice(1); - if (r15.shapeInfo.isUniform) - return ` + if (r15.shapeInfo.isUniform) return ` float ${o}(int index) { ${Fc(r15)} } `; let n = r15.shapeInfo.texShape, s = n[0], a = n[1]; - if (a === 1 && s === 1) - return ` + if (a === 1 && s === 1) return ` float ${o}(int index) { return sampleTexture(${t10}, halfCR); } @@ -16674,8 +15452,7 @@ function BZ(r15, e) { } function zZ(r15, e) { let t10 = r15.shapeInfo.logicalShape, o = r15.name, n = "get" + o.charAt(0).toUpperCase() + o.slice(1), s = r15.shapeInfo.texShape, a = s[0], i = s[1], p = It(); - if (s != null && y.arraysEqual(t10, s)) - return e ? ` + if (s != null && y.arraysEqual(t10, s)) return e ? ` vec4 ${n}(int row, int col) { vec2 uv = (vec2(col, row) + halfCR) / vec2(${o}TexShape[1], ${o}TexShape[0]); @@ -16688,8 +15465,7 @@ function zZ(r15, e) { return ${p.texture2D}(${o}, uv); } `; - if (e) - return ` + if (e) return ` vec4 ${n}(int row, int col) { ivec2 packedTexShape = ivec2(ceil(float(${o}TexShape[0]) / 2.0), ceil(float(${o}TexShape[1]) / 2.0)); int valuesPerRow = int(ceil(float(${o}Shape[1]) / 2.0)); @@ -16708,8 +15484,7 @@ function zZ(r15, e) { function VZ(r15, e) { let t10 = r15.shapeInfo.logicalShape, o = r15.name, n = "get" + o.charAt(0).toUpperCase() + o.slice(1), s = r15.shapeInfo.texShape; if (s != null && y.arraysEqual(t10, s)) { - if (e) - return ` + 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); @@ -16733,8 +15508,7 @@ function VZ(r15, e) { } `; } - if (r15.shapeInfo.isUniform) - return ` + if (r15.shapeInfo.isUniform) return ` float ${n}(int row, int col) { int index = round(dot(vec2(row, col), vec2(${t10[1]}, 1))); ${Fc(r15)} @@ -16793,8 +15567,7 @@ function WZ(r15, e) { `; } let i = It(); - if (e) - return ` + if (e) return ` vec4 ${n}(int b, int row, int col) { ivec2 packedTexShape = ivec2(ceil(float(${o}TexShape[0]) / 2.0), ceil(float(${o}TexShape[1]) / 2.0)); int valuesPerRow = int(ceil(float(${o}Shape[2]) / 2.0)); @@ -16824,8 +15597,7 @@ function UZ(r15, e) { } `; } - if (r15.shapeInfo.isUniform) - return ` + if (r15.shapeInfo.isUniform) return ` float ${n}(int row, int col, int depth) { int index = round(dot(vec3(row, col, depth), vec3(${s}, ${a}, 1))); @@ -16833,8 +15605,7 @@ function UZ(r15, e) { } `; let c = r15.shapeInfo.texShape, l = c[0], m = c[1], d = r15.shapeInfo.flatOffset; - if (m === s && d == null) - return e ? ` + if (m === s && d == null) return e ? ` float ${n}(int row, int col, int depth) { int stride1 = ${o}Shape[2]; float texR = float(row); @@ -16852,8 +15623,7 @@ function UZ(r15, e) { return sampleTexture(${o}, uv); } `; - if (m === a && d == null) - return e ? ` + 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)); float texC = float(depth); @@ -16889,8 +15659,7 @@ function UZ(r15, e) { } function GZ(r15, e) { let t10 = r15.name, o = "get" + t10.charAt(0).toUpperCase() + t10.slice(1), n = It(); - if (e) - return ` + 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)); @@ -16904,8 +15673,7 @@ function GZ(r15, e) { } `; let s = r15.shapeInfo.logicalShape, a = s.length, i = r15.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++) - d = `int b${h}, ` + d, m *= s[a - h - 1], f = `b${h} * ${m} + ` + f; + for (let h = 2; h < a - 1; h++) d = `int b${h}, ` + d, m *= s[a - h - 1], f = `b${h} * ${m} + ` + f; return ` vec4 ${o}(${d}) { int index = ${f}; @@ -16927,8 +15695,7 @@ function HZ(r15, e) { } `; } - if (r15.shapeInfo.isUniform) - return ` + if (r15.shapeInfo.isUniform) return ` float ${n}(int row, int col, int depth, int depth2) { int index = round(dot(vec4(row, col, depth, depth2), vec4(${i}, ${a}, ${s}, 1))); @@ -16936,8 +15703,7 @@ function HZ(r15, e) { } `; let c = r15.shapeInfo.flatOffset, l = r15.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 ? ` + if (d === i && c == null) return e ? ` float ${n}(int row, int col, int depth, int depth2) { ${f} ${h} @@ -16960,8 +15726,7 @@ function HZ(r15, e) { return sampleTexture(${o}, uv); } `; - if (d === s && c == null) - return e ? ` + if (d === s && c == null) return e ? ` float ${n}(int row, int col, int depth, int depth2) { float texR = dot(vec3(row, col, depth), vec3(${o}Shape[1] * ${o}Shape[2], ${o}Shape[2], 1)); @@ -17013,8 +15778,7 @@ function KZ(r15) { } `; } - if (r15.shapeInfo.isUniform) - return ` + if (r15.shapeInfo.isUniform) return ` float ${o}(int row, int col, int depth, int depth2, int depth3) { float index = dot( vec4(row, col, depth, depth2), @@ -17024,8 +15788,7 @@ function KZ(r15) { } `; let c = r15.shapeInfo.flatOffset, l = r15.shapeInfo.texShape, m = l[0], d = l[1]; - if (d === i && c == null) - return ` + 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), @@ -17035,8 +15798,7 @@ function KZ(r15) { return sampleTexture(${t10}, uv); } `; - if (d === n && c == null) - return ` + if (d === n && c == null) return ` float ${o}(int row, int col, int depth, int depth2, int depth3) { float texR = dot( vec4(row, col, depth, depth2), @@ -17072,8 +15834,7 @@ function qZ(r15) { `; } let a = e[5], i = e[4] * a, p = e[3] * i, u = e[2] * p, c = e[1] * u; - if (r15.shapeInfo.isUniform) - return ` + if (r15.shapeInfo.isUniform) return ` float ${o}(int row, int col, int depth, int depth2, int depth3, int depth4) { int index = round(dot( @@ -17086,8 +15847,7 @@ function qZ(r15) { } `; let l = r15.shapeInfo.flatOffset, m = r15.shapeInfo.texShape, d = m[0], f = m[1]; - if (f === c && l == null) - return ` + if (f === c && l == null) return ` float ${o}(int row, int col, int depth, int depth2, int depth3, int depth4) { int texR = row; @@ -17099,8 +15859,7 @@ function qZ(r15) { return sampleTexture(${t10}, uv); } `; - if (f === a && l == null) - return ` + if (f === a && l == null) return ` float ${o}(int row, int col, int depth, int depth2, int depth3, int depth4) { float texR = dot(vec4(row, col, depth, depth2), @@ -17143,12 +15902,10 @@ function jZ(r15, e) { let m = ""; a < 2 && s > 0 ? m = "coords" : m = r15.shapeInfo.logicalShape.map((b, C) => `coords.${l[C + u]}`).join(", "); let d = "return outputValue;", h = y.sizeFromShape(r15.shapeInfo.logicalShape) === 1, x = y.sizeFromShape(e.logicalShape) === 1; - if (s === 1 && !h && !x) - d = ` + if (s === 1 && !h && !x) d = ` return vec4(outputValue.xy, outputValue.xy); `; - else if (h && !x) - a === 1 ? d = ` + else if (h && !x) a === 1 ? d = ` return vec4(outputValue.x, outputValue.x, 0., 0.); ` : d = ` return vec4(outputValue.x); @@ -17168,8 +15925,7 @@ function jZ(r15, e) { } function XZ(r15, e) { let t10 = r15.name, o = t10.charAt(0).toUpperCase() + t10.slice(1), n = "get" + o + "AtOutCoords", s = e.texShape, a = r15.shapeInfo.texShape, i = r15.shapeInfo.logicalShape.length, p = e.logicalShape.length; - if (!r15.shapeInfo.isUniform && i === p && r15.shapeInfo.flatOffset == null && y.arraysEqual(a, s)) - return ` + if (!r15.shapeInfo.isUniform && i === p && r15.shapeInfo.flatOffset == null && y.arraysEqual(a, s)) return ` float ${n}() { return sampleTexture(${t10}, resultUV); } @@ -17187,18 +15943,12 @@ function XZ(r15, e) { `; } function Re(r15) { - if (r15 <= 1) - return "int"; - if (r15 === 2) - return "ivec2"; - if (r15 === 3) - return "ivec3"; - if (r15 === 4) - return "ivec4"; - if (r15 === 5) - return "ivec5"; - if (r15 === 6) - return "ivec6"; + if (r15 <= 1) return "int"; + if (r15 === 2) return "ivec2"; + if (r15 === 3) return "ivec3"; + if (r15 === 4) return "ivec4"; + if (r15 === 5) return "ivec5"; + if (r15 === 6) return "ivec6"; throw Error(`GPU for rank ${r15} is not yet supported`); } function Zf(r15, e, t10) { @@ -17227,23 +15977,17 @@ function XI(r15, e, t10) { let m = { name: l, uniform: r15.getUniformLocation(t10, l, c), offset: r15.getUniformLocation(t10, `offset${l}`, c) }; e.enableShapeUniforms && (m.shape = r15.getUniformLocation(t10, `${l}Shape`, c), m.texShape = r15.getUniformLocation(t10, `${l}TexShape`, c)), o.push(m); } - if (e.enableShapeUniforms && (s = r15.getUniformLocation(t10, "outShape", c), i = r15.getUniformLocation(t10, "outShapeStrides", c), a = r15.getUniformLocation(t10, "outTexShape", c)), e.customUniforms) - for (let l of e.customUniforms) - n.push(r15.getUniformLocation(t10, l.name, c)); + if (e.enableShapeUniforms && (s = r15.getUniformLocation(t10, "outShape", c), i = r15.getUniformLocation(t10, "outShapeStrides", c), a = r15.getUniformLocation(t10, "outTexShape", c)), e.customUniforms) for (let l of e.customUniforms) n.push(r15.getUniformLocation(t10, l.name, c)); return { variablesLocations: o, customUniformLocations: n, infLoc: p, nanLoc: u, outShapeLocation: s, outShapeStridesLocation: i, outTexShapeLocation: a }; } function FR(r15, e) { - if (r15.length !== e.length) - throw Error(`Binary was compiled with ${r15.length} inputs, but was executed with ${e.length} inputs`); + if (r15.length !== e.length) throw Error(`Binary was compiled with ${r15.length} inputs, but was executed with ${e.length} inputs`); r15.forEach((t10, o) => { let n = t10.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) - return; + 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) return; let i = t10.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`); + 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 OR(r15, e, t10, o, n) { @@ -17273,8 +16017,7 @@ function OR(r15, e, t10, o, n) { } if (d && r15.gl.uniform2i(d, u.texData.texShape[0], u.texData.texShape[1]), c != null) { if (u.isUniform) { - if (y.sizeFromShape(u.shape) < 2) - r15.gl.uniform1f(c, u.uniformValues[0]); + if (y.sizeFromShape(u.shape) < 2) r15.gl.uniform1f(c, u.uniformValues[0]); else { let f = u.uniformValues; f instanceof Float32Array || (f = new Float32Array(f)), r15.gl.uniform1fv(c, f); @@ -17285,23 +16028,22 @@ function OR(r15, e, t10, o, n) { } } let i = e.outShapeLocation; - if (i) - switch (o.shape.length) { - case 1: - r15.gl.uniform1iv(i, new Int32Array(o.shape)); - break; - case 2: - r15.gl.uniform2iv(i, new Int32Array(o.shape)); - break; - case 3: - r15.gl.uniform3iv(i, new Int32Array(o.shape)); - break; - case 4: - r15.gl.uniform4iv(i, new Int32Array(o.shape)); - break; - default: - break; - } + if (i) switch (o.shape.length) { + case 1: + r15.gl.uniform1iv(i, new Int32Array(o.shape)); + break; + case 2: + r15.gl.uniform2iv(i, new Int32Array(o.shape)); + break; + case 3: + r15.gl.uniform3iv(i, new Int32Array(o.shape)); + break; + case 4: + r15.gl.uniform4iv(i, new Int32Array(o.shape)); + break; + default: + break; + } if (e.outShapeStridesLocation) { let p = y.computeStrides(o.shape); switch (o.shape.length) { @@ -17318,28 +16060,18 @@ function OR(r15, e, t10, o, n) { break; } } - if (e.outTexShapeLocation && r15.gl.uniform2i(e.outTexShapeLocation, o.texData.texShape[0], o.texData.texShape[1]), e.program.customUniforms && n) - for (let p = 0; p < e.program.customUniforms.length; ++p) { - let u = e.program.customUniforms[p], c = e.customUniformLocations[p], l = n[p]; - if (u.type === "float") - r15.gl.uniform1fv(c, l); - else if (u.type === "vec2") - r15.gl.uniform2fv(c, l); - else if (u.type === "vec3") - r15.gl.uniform3fv(c, l); - else if (u.type === "vec4") - r15.gl.uniform4fv(c, l); - else if (u.type === "int") - r15.gl.uniform1iv(c, l); - else if (u.type === "ivec2") - r15.gl.uniform2iv(c, l); - else if (u.type === "ivec3") - r15.gl.uniform3iv(c, l); - else if (u.type === "ivec4") - r15.gl.uniform4iv(c, l); - else - throw Error(`uniform type ${u.type} is not supported yet.`); - } + if (e.outTexShapeLocation && r15.gl.uniform2i(e.outTexShapeLocation, o.texData.texShape[0], o.texData.texShape[1]), e.program.customUniforms && n) for (let p = 0; p < e.program.customUniforms.length; ++p) { + let u = e.program.customUniforms[p], c = e.customUniformLocations[p], l = n[p]; + if (u.type === "float") r15.gl.uniform1fv(c, l); + else if (u.type === "vec2") r15.gl.uniform2fv(c, l); + else if (u.type === "vec3") r15.gl.uniform3fv(c, l); + else if (u.type === "vec4") r15.gl.uniform4fv(c, l); + else if (u.type === "int") r15.gl.uniform1iv(c, l); + else if (u.type === "ivec2") r15.gl.uniform2iv(c, l); + else if (u.type === "ivec3") r15.gl.uniform3iv(c, l); + else if (u.type === "ivec4") r15.gl.uniform4iv(c, l); + else throw Error(`uniform type ${u.type} is not supported yet.`); + } r15.executeProgram(); } function MR(r15, e, t10) { @@ -17351,8 +16083,7 @@ function MR(r15, e, t10) { if (c.length === 1 && r15.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 && !r15.packedInputs) - d = `${c[0] > 1}_${c[1] > 1}`; + } else if (c.length === 2 && !r15.packedInputs) d = `${c[0] > 1}_${c[1] > 1}`; else if (c.length > 2 && !r15.packedInputs) { let k = y.computeStrides(c); f = `${k[0] === p[1]}_${k[k.length - 1] === p[1]}`; @@ -17499,10 +16230,9 @@ var oh = class { this.outputShape = e, this.enableShapeUniforms = ut(this.outputShape.length); let n = "", s = "result"; t10 && (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; - n += ` + for (let a = 0; a <= 1; a++) for (let i = 0; i <= 1; i++) { + let p = a * 2 + i; + n += ` localCoords = coords; if(localCoords[2] + ${i} < ${this.enableShapeUniforms ? "outShape[2]" : `${e[2]}`}) { localCoords[2] += ${i}; @@ -17531,7 +16261,7 @@ var oh = class { } } `; - } + } this.userCode = ` ${this.enableShapeUniforms ? Rc() : $c(e)} @@ -17656,35 +16386,26 @@ var bp = class { 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."); + 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"), A().getNumber("WEBGL_VERSION") === 1) { let s = "OES_texture_float", a = "OES_texture_half_float"; - if (this.textureFloatExtension = Nc(this.gl, s), qr(this.gl, a)) - this.textureHalfFloatExtension = Nc(this.gl, a); - else if (A().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), qr(this.gl, n)) - this.colorBufferHalfFloatExtension = Nc(this.gl, n); - else if (A().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", qr(this.gl, o)) - this.colorBufferFloatExtension = this.gl.getExtension(o); - else if (qr(this.gl, n)) - this.colorBufferHalfFloatExtension = this.gl.getExtension(n); - else - throw new Error("GL context does not support color renderable floats"); + if (this.textureFloatExtension = Nc(this.gl, s), qr(this.gl, a)) this.textureHalfFloatExtension = Nc(this.gl, a); + else if (A().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), qr(this.gl, n)) this.colorBufferHalfFloatExtension = Nc(this.gl, n); + else if (A().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", qr(this.gl, o)) this.colorBufferFloatExtension = this.gl.getExtension(o); + else if (qr(this.gl, n)) this.colorBufferHalfFloatExtension = this.gl.getExtension(n); + else throw new Error("GL context does not support color renderable floats"); this.vertexBuffer = QI(this.gl), this.indexBuffer = ZI(this.gl), this.framebuffer = LI(this.gl), this.textureConfig = Xl(this.gl, this.textureHalfFloatExtension); } get debug() { return A().getBool("DEBUG"); } dispose() { - if (this.disposed) - return; + 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 = true; @@ -17739,8 +16460,7 @@ var bp = class { let a = n.clientWaitSync(s, 0, 0); return a === n.ALREADY_SIGNALED || a === n.CONDITION_SATISFIED; }, t10 = s; - } else - A().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION") > 0 ? (t10 = this.beginQuery(), this.endQuery(), o = () => this.isQueryAvailable(t10, A().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))) : o = () => true; + } else A().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION") > 0 ? (t10 = this.beginQuery(), this.endQuery(), o = () => this.isQueryAvailable(t10, A().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))) : o = () => true; return { query: t10, isFencePassed: o }; } downloadMatrixFromPackedTexture(e, t10, o) { @@ -17837,8 +16557,7 @@ var bp = class { return await y.repeatedTry(() => this.disposed || this.isQueryAvailable(e, A().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))), this.getQueryTime(e, A().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")); } getQueryTime(e, t10) { - if (t10 === 0) - return null; + if (t10 === 0) return null; if (t10 === 2) { let o = this.gl; return o.getQueryParameter(e, o.QUERY_RESULT) / 1e6; @@ -17848,8 +16567,7 @@ var bp = class { } } isQueryAvailable(e, t10) { - if (t10 === 0) - return true; + if (t10 === 0) return true; if (t10 === 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; @@ -17872,8 +16590,7 @@ var bp = class { this.itemsToPoll = this.itemsToPoll.slice(e + 1); } addItemToPoll(e, t10) { - if (this.itemsToPoll.push({ isDoneFn: e, resolveFn: t10 }), this.itemsToPoll.length > 1) - return; + if (this.itemsToPoll.push({ isDoneFn: e, resolveFn: t10 }), this.itemsToPoll.length > 1) return; let o; "setTimeoutCustom" in A().platform && (o = A().platform.setTimeoutCustom.bind(A().platform)), y.repeatedTry(() => (this.pollItems(), this.itemsToPoll.length === 0), () => 0, null, o); } @@ -17897,18 +16614,15 @@ var bp = class { this.throwIfDisposed(), ce(this.gl, () => this.gl.scissor(e, t10, o, n)); } throwIfDisposed() { - if (this.disposed) - throw new Error("Attempted to use disposed GPGPUContext."); + 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."); + if (this.program == null) throw new Error("No GPU program is currently set."); } }; function JZ(r15) { let e = 0; - for (; e < r15.length && r15[e](); ++e) - ; + for (; e < r15.length && r15[e](); ++e) ; return e - 1; } var { addImpl: LR, bincountImpl: ph, bincountReduceImpl: BR, bitwiseAndImpl: zR, castImpl: VR, ceilImpl: WR, concatImpl: UR, equalImpl: GR, expImpl: HR, expm1Impl: KR, floorImpl: qR, gatherNdImpl: jR, gatherV2Impl: XR, greaterImpl: YR, greaterEqualImpl: QR, lessImpl: ZR, lessEqualImpl: JR, linSpaceImpl: eD, logImpl: tD, maxImpl: rD, maximumImpl: oD, minimumImpl: nD, multiplyImpl: sD, negImpl: aD, notEqualImpl: iD, prodImpl: uD, raggedGatherImpl: pD, raggedRangeImpl: cD, raggedTensorToTensorImpl: lD, rangeImpl: mD, rsqrtImpl: dD, scatterImpl: fD, sigmoidImpl: hD, simpleAbsImpl: ch, sliceImpl: gD, sparseFillEmptyRowsImpl: xD, sparseReshapeImpl: yD, sparseSegmentReductionImpl: lh, sqrtImpl: bD, staticRegexReplaceImpl: CD, stridedSliceImpl: wD, stringNGramsImpl: SD, stringSplitImpl: ID, stringToHashBucketFastImpl: vD, subImpl: kD, tileImpl: ND, topKImpl: TD, transposeImpl: Cp, uniqueImpl: _D } = Ic; @@ -17919,17 +16633,14 @@ function Rt(r15, e) { return e === 1 ? [r15] : dv(r15, e); } function ED(r15, e) { - if (r15 === 1) - return "rc"; + if (r15 === 1) return "rc"; let t10 = ""; - for (let o = 0; o < r15; o++) - t10 += e[o], o < r15 - 1 && (t10 += ","); + for (let o = 0; o < r15; o++) t10 += e[o], o < r15 - 1 && (t10 += ","); return t10; } var mh = class { constructor(e) { - if (this.variableNames = ["A"], this.packedInputs = false, this.packedOutput = true, this.outputShape = e, this.rank = e.length, this.enableShapeUniforms = ut(this.outputShape.length), this.rank === 0) - this.userCode = ` + if (this.variableNames = ["A"], this.packedInputs = false, this.packedOutput = true, this.outputShape = e, this.rank = e.length, this.enableShapeUniforms = ut(this.outputShape.length), this.rank === 0) this.userCode = ` void main() { setOutput(vec4(getA(), 0., 0., 0.)); } @@ -17953,26 +16664,21 @@ var mh = class { } getSourceCoordsArr(e) { let t10 = []; - 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); - } + 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); + } return t10; } getOutOfBoundsCondition(e) { - if (this.rank === 1) - return `rc > ${this.enableShapeUniforms ? "outShape" : this.outputShape[0]}`; + if (this.rank === 1) return `rc > ${this.enableShapeUniforms ? "outShape" : this.outputShape[0]}`; let t10 = ""; - 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 += "||"); + 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; } getSetup(e) { - if (this.rank === 1) - return ""; + 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]; return ` int r = ${t10[0]}; @@ -18056,20 +16762,17 @@ var dh = class { return n === er.PACKED_2X2_FLOAT32 ? i = this.gpgpu.createPackedMatrixTexture(e[0], e[1]) : n === er.PACKED_2X2_FLOAT16 ? i = this.gpgpu.createFloat16PackedMatrixTexture(e[0], e[1]) : n === er.UNPACKED_FLOAT32 ? i = this.gpgpu.createFloat32MatrixTexture(e[0], e[1]) : n === er.UNPACKED_FLOAT16 ? i = this.gpgpu.createFloat16MatrixTexture(e[0], e[1]) : n === er.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) { - if (this.freeTextures == null) - return; + if (this.freeTextures == null) return; let s = RD(o, n), a = DD(t10, s, n); a in this.freeTextures || (this.freeTextures[a] = []); let i = $D(t10, s, this.gpgpu.gl, this.gpgpu.textureConfig, n), p = A().getNumber("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 && u.indexOf(e); - if (c == null || c < 0) - throw new Error("Cannot release a texture that was never provided by this texture manager"); + if (c == null || c < 0) throw new Error("Cannot release a texture that was never provided by this texture manager"); u[c] = u[u.length - 1], u.pop(), this.log(); } log() { - if (!this.logEnabled) - return; + if (!this.logEnabled) return; let e = this.numFreeTextures + this.numUsedTextures; console.log("Free/Used", `${this.numFreeTextures} / ${this.numUsedTextures}`, `(${e})`); let t10 = this._numBytesFree / this._numBytesAllocated; @@ -18089,32 +16792,24 @@ var dh = class { } dispose() { if (this.freeTextures != null) { - for (let e in this.freeTextures) - this.freeTextures[e].forEach((t10) => { - this.gpgpu.deleteMatrixTexture(t10.texture); - }); - for (let e in this.usedTextures) - this.usedTextures[e].forEach((t10) => { - this.gpgpu.deleteMatrixTexture(t10.texture); - }); + for (let e in this.freeTextures) this.freeTextures[e].forEach((t10) => { + this.gpgpu.deleteMatrixTexture(t10.texture); + }); + for (let e in this.usedTextures) this.usedTextures[e].forEach((t10) => { + this.gpgpu.deleteMatrixTexture(t10.texture); + }); this.freeTextures = null, this.usedTextures = null, this.numUsedTextures = 0, this.numFreeTextures = 0, this._numBytesAllocated = 0, this._numBytesFree = 0; } } }; function t9(r15, e) { let t10 = r15; - if (e === t10.R32F) - return 4; - if (e === t10.R16F) - return 2; - if (e === t10.RGBA32F) - return 16; - if (e === r15.RGBA) - return 16; - if (e === t10.RGBA16F) - return 8; - if (e === t10.RGBA8) - return 4; + if (e === t10.R32F) return 4; + if (e === t10.R16F) return 2; + if (e === t10.RGBA32F) return 16; + if (e === r15.RGBA) return 16; + if (e === t10.RGBA16F) return 8; + if (e === t10.RGBA8) return 4; throw new Error(`Unknown internal format ${e}`); } function $D(r15, e, t10, o, n) { @@ -18149,12 +16844,9 @@ function o9(r15) { return A().getBool("WEBGL_RENDER_FLOAT32_ENABLED") ? r15 ? er.PACKED_2X2_FLOAT32 : er.UNPACKED_FLOAT32 : r15 ? er.PACKED_2X2_FLOAT16 : er.UNPACKED_FLOAT16; } function RD(r15, e) { - if (r15 === mr.UPLOAD) - return er.PACKED_2X2_FLOAT32; - if (r15 === mr.RENDER || r15 == null) - return o9(e); - if (r15 === mr.DOWNLOAD || r15 === mr.PIXELS) - return er.PACKED_4X1_UNSIGNED_BYTE; + if (r15 === mr.UPLOAD) return er.PACKED_2X2_FLOAT32; + if (r15 === mr.RENDER || r15 == null) return o9(e); + if (r15 === mr.DOWNLOAD || r15 === mr.PIXELS) return er.PACKED_4X1_UNSIGNED_BYTE; throw new Error(`Unknown logical texture type ${r15}`); } function DD(r15, e, t10) { @@ -18269,12 +16961,10 @@ var Lc = class r13 extends ao { return r13.nextDataId++; } 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, !A().getBool("HAS_WEBGL")) - throw new Error("WebGL is not supported on this device"); + 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, !A().getBool("HAS_WEBGL")) throw new Error("WebGL is not supported on this device"); let t10; if (e != null) { - if (e instanceof bp) - t10 = e; + if (e instanceof bp) t10 = e; else { let o = Kr(A().getNumber("WEBGL_VERSION"), e); t10 = new bp(o); @@ -18296,8 +16986,7 @@ var Lc = class r13 extends ao { return l.shape = t10, p.texture = null, this.disposeIntermediateTensorInfo(i), l.dataId; } write(e, t10, o) { - if ((A().getBool("WEBGL_CHECK_NUMERICAL_PROBLEMS") || A().getBool("DEBUG")) && this.checkNumericalProblems(e), o === "complex64" && e != null) - throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag)."); + if ((A().getBool("WEBGL_CHECK_NUMERICAL_PROBLEMS") || A().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: mr.UPLOAD, refCount: 1 }), n; } @@ -18315,8 +17004,7 @@ var Lc = class r13 extends ao { } } move(e, t10, o, n, s) { - if (A().getBool("DEBUG") && this.checkNumericalProblems(t10), n === "complex64") - throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag)."); + if (A().getBool("DEBUG") && this.checkNumericalProblems(t10), 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: mr.UPLOAD, refCount: s }); } disposeIntermediateTensorInfo(e) { @@ -18330,18 +17018,15 @@ var Lc = class r13 extends ao { 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; + 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 = w.mergeRealAndImagArrays(m, d); - } else - l = this.getValuesFromTexture(e); + } else l = this.getValuesFromTexture(e); return u && (this.downloadWaitMs += y.now() - c), this.convertAndCacheOnCPU(e, l); } async read(e) { @@ -18356,10 +17041,8 @@ var Lc = class r13 extends ao { 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 (A().getBool("DEBUG") && !A().getBool("WEBGL_DOWNLOAD_FLOAT_ENABLED") && A().getNumber("WEBGL_VERSION") === 2) - throw new Error("tensor.data() with WEBGL_DOWNLOAD_FLOAT_ENABLED=false and WEBGL_VERSION=2 not yet supported."); + if (o != null) return this.convertAndCacheOnCPU(e); + if (A().getBool("DEBUG") && !A().getBool("WEBGL_DOWNLOAD_FLOAT_ENABLED") && A().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" && A().get("WEBGL_BUFFER_SUPPORTED")) { c = this.decode(e); @@ -18371,8 +17054,7 @@ var Lc = class r13 extends ao { 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 = w.mergeRealAndImagArrays(h, g); - } else if (u == null) - l = this.getValuesFromTexture(e); + } else if (u == null) l = this.getValuesFromTexture(e); else { let f = y.sizeFromShape(n); l = this.gpgpu.downloadFloat32MatrixFromBuffer(u, f); @@ -18386,37 +17068,32 @@ var Lc = class r13 extends ao { } readToGPU(e, t10 = {}) { 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 (i === "complex64") throw new Error("Does not support reading texture for complex64 dtype."); if (a != null) { let d; p ? d = new Fr(s, La) : d = new tr(s, La); let f = this.runWebGLProgram(d, [{ dataId: e, shape: s, dtype: i }], i), h = this.readToGPU(f, t10); 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."); + 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 = ur().makeTensorFromTensorInfo(c), m = this.texData.get(c.dataId); return Object.assign({ tensorRef: l }, m.texture); } bufferSync(e) { let t10 = this.readSync(e.dataId); - if (e.dtype === "string") - try { - let o = t10.map((n) => y.decodeString(n)); - return me(e.shape, e.dtype, o); - } catch (o) { - throw new Error("Failed to decode encoded string bytes into utf-8"); - } + if (e.dtype === "string") try { + let o = t10.map((n) => y.decodeString(n)); + return me(e.shape, e.dtype, o); + } catch (o) { + throw new Error("Failed to decode encoded string bytes into utf-8"); + } return me(e.shape, e.dtype, t10); } checkNumericalProblems(e) { - if (e != null) - for (let t10 = 0; t10 < e.length; t10++) { - let o = e[t10]; - if (!EI(o)) - throw A().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.`); - } + if (e != null) for (let t10 = 0; t10 < e.length; t10++) { + let o = e[t10]; + if (!EI(o)) throw A().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 = y.sizeFromShape(t10); @@ -18440,8 +17117,7 @@ var Lc = class r13 extends ao { if (A().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." }; + } else i.kernelMs = { error: "WebGL query timers are not supported in this environment." }; return this.uploadWaitMs = 0, this.downloadWaitMs = 0, i; })(); } @@ -18455,20 +17131,15 @@ var Lc = class r13 extends ao { return A().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE") > 0 ? (this.gpgpu.endQuery(), e) : (e.endMs = y.now(), e); } async getQueryTime(e) { - if (A().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE") > 0) - return this.gpgpu.waitForQueryAndGetTime(e); + if (A().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE") > 0) return this.gpgpu.waitForQueryAndGetTime(e); let t10 = e; return t10.endMs - t10.startMs; } disposeData(e, t10 = 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) - return false; - if (this.pendingRead.has(e)) - return this.pendingDisposal.add(e), this.pendingDeletes++, 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) 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; @@ -18505,8 +17176,7 @@ var Lc = class r13 extends ao { let n = ch(this.texData.get(e.dataId).values); return this.makeOutput(e.shape, e.dtype, n); } - if (A().getBool("WEBGL_PACK_UNARY_OPERATIONS")) - return this.packedUnaryOp(e, fv, e.dtype); + if (A().getBool("WEBGL_PACK_UNARY_OPERATIONS")) return this.packedUnaryOp(e, fv, e.dtype); let t10 = new tr(e.shape, fv), o = this.compileAndRun(t10, [e]); return ur().makeTensorFromTensorInfo(o); } @@ -18515,8 +17185,7 @@ var Lc = class r13 extends ao { if (t10 === "string" && o != null && o.length > 0 && y.isString(o[0])) { let s = o.map((a) => y.encodeString(a)); n = this.write(s, e, t10); - } else - n = this.write(o, e, t10); + } else n = this.write(o, e, t10); return this.texData.get(n).usage = null, { dataId: n, shape: e, dtype: t10 }; } makeOutput(e, t10, o) { @@ -18551,19 +17220,15 @@ var Lc = class r13 extends ao { let x = a != null ? a : jl(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; + 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 = t10.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."); + 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) <= A().getNumber("WEBGL_SIZE_UPLOAD_UNIFORM")) - return { shape: x.shape, texData: null, isUniform: true, uniformValues: b.values }; + if (!e.packedInputs && y.sizeFromShape(x.shape) <= A().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(x.dataId), !!b.isPacked != !!e.packedInputs) - x = b.isPacked ? this.unpackTensor(x) : this.packTensor(x), u.push(x), b = this.texData.get(x.dataId); + 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 && !xu(b.shape, x.shape)) { let C = x, S = x.shape; x.shape = b.shape, x = this.packedReshape(x, S), u.push(x), b = this.texData.get(x.dataId), C.shape = S; @@ -18604,8 +17269,7 @@ var Lc = class r13 extends ao { let e = A().getBool("DEBUG"); A().set("DEBUG", false); let t10 = this.abs(ke(1e-8)).dataSync()[0]; - if (A().set("DEBUG", e), t10 > 0) - return 32; + if (A().set("DEBUG", e), t10 > 0) return 32; } return 16; })), this.floatPrecisionValue; @@ -18615,8 +17279,7 @@ var Lc = class r13 extends ao { } uploadToGPU(e) { let t10 = this.texData.get(e), { shape: o, dtype: n, values: s, texture: a, usage: i, isPacked: p } = t10; - if (a != null) - return; + if (a != null) return; let u = this.activeTimers != null, c; u && (c = y.now()); let l = t10.texShape; @@ -18647,14 +17310,12 @@ var Lc = class r13 extends ao { return e[0] * e[1] * y.bytesPerElement(t10); } checkCompileCompletion() { - for (let [, e] of Object.entries(this.binaryCache)) - this.checkCompletion_(e); + for (let [, e] of Object.entries(this.binaryCache)) this.checkCompletion_(e); } async checkCompileCompletionAsync() { let e = []; if (this.gpgpu.parallelCompilationExtension) { - for (let [, t10] of Object.entries(this.binaryCache)) - e.push(this.checkCompletionAsync_(t10)); + for (let [, t10] of Object.entries(this.binaryCache)) e.push(this.checkCompletionAsync_(t10)); return Promise.all(e); } else { for (let [, t10] of Object.entries(this.binaryCache)) { @@ -18674,8 +17335,7 @@ var Lc = class r13 extends ao { return this.gpgpu.gl.getProgramParameter(e.webGLProgram, this.gpgpu.parallelCompilationExtension.COMPLETION_STATUS_KHR) ? this.checkCompletion_(e) : (await cS(), 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 ? (qf(e.source, this.gpgpu.gl.getShaderInfoLog(e.fragmentShader)), new Error("Failed to compile fragment shader.")) : new Error("Failed to link vertex and fragment shaders."); + 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 ? (qf(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() { @@ -18688,25 +17348,21 @@ var Lc = class r13 extends ao { createTensorFromGPUData(e, t10, o) { e.channels = e.channels || "RGBA"; let { texture: n, height: s, width: a, channels: i } = e, p = ur().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)'."); + 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 ur().makeTensorFromDataId(u, t10, o, p); } }; Lc.nextDataId = 0; function m9(r15, e) { - if (e === "float32" || e === "complex64") - return r15; + if (e === "float32" || e === "complex64") return r15; if (e === "int32" || e === "bool") { let t10 = e === "int32" ? new Int32Array(r15.length) : new Uint8Array(r15.length); - for (let o = 0; o < t10.length; ++o) - t10[o] = Math.round(r15[o]); + for (let o = 0; o < t10.length; ++o) t10[o] = Math.round(r15[o]); return t10; - } else - throw new Error(`Unknown dtype ${e}`); + } else throw new Error(`Unknown dtype ${e}`); } -var d9 = "4.17.0"; +var d9 = "4.21.0"; function GD() { A().set("WEBGL_FORCE_F16_TEXTURES", true); } @@ -18743,17 +17399,14 @@ var jr = class { let s = this.outputShape.length; this.enableShapeUniforms = ut(s); let a = ""; - if (n) - if (s === 0 || y.sizeFromShape(this.outputShape) === 1) - a = ` + if (n) if (s === 0 || y.sizeFromShape(this.outputShape) === 1) a = ` result.y = 0.; result.z = 0.; result.w = 0.; `; - else if (a = ` + else if (a = ` ${Re(s)} coords = getOutputCoords(); - `, s === 1) - this.enableShapeUniforms ? a += ` + `, s === 1) this.enableShapeUniforms ? a += ` result.y = (coords + 1) >= outShape ? 0. : result.y; result.z = 0.; result.w = 0.; @@ -18762,9 +17415,9 @@ var jr = class { result.z = 0.; result.w = 0.; `; - else { - let p = Rt("coords", s); - this.enableShapeUniforms ? a += ` + else { + let p = Rt("coords", s); + this.enableShapeUniforms ? a += ` bool nextRowOutOfBounds = (${p[s - 2]} + 1) >= outShape[${s} - 2]; bool nextColOutOfBounds = @@ -18781,7 +17434,7 @@ var jr = class { result.z = nextRowOutOfBounds ? 0. : result.z; result.w = nextColOutOfBounds || nextRowOutOfBounds ? 0. : result.w; `; - } + } this.userCode = ` vec4 binaryOperation(vec4 a, vec4 b) { ${e} @@ -18861,20 +17514,13 @@ function nt({ opSnippet: r15, packedOpSnippet: e, checkOutOfBounds: t10 = false, }; } function yi(r15, e = false) { - if (r15 === "linear") - return e ? BD : AD; - if (r15 === "relu") - return e ? VD : PD; - if (r15 === "elu") - return e ? zD : FD; - if (r15 === "relu6") - return e ? WD : OD; - if (r15 === "prelu") - return e ? yv : xv; - if (r15 === "leakyrelu") - return e ? gv : hv; - if (r15 === "sigmoid") - return e ? UD : MD; + if (r15 === "linear") return e ? BD : AD; + if (r15 === "relu") return e ? VD : PD; + if (r15 === "elu") return e ? zD : FD; + if (r15 === "relu6") return e ? WD : OD; + if (r15 === "prelu") return e ? yv : xv; + if (r15 === "leakyrelu") return e ? gv : hv; + if (r15 === "sigmoid") return e ? UD : MD; throw new Error(`Activation ${r15} has not been implemented for the WebGL backend.`); } var zc = class { @@ -19166,8 +17812,7 @@ var xh = class { constructor(e, t10) { this.variableNames = ["A"]; let o = new Array(e.length); - for (let a = 0; a < o.length; a++) - o[a] = e[t10[a]]; + for (let a = 0; a < o.length; a++) o[a] = e[t10[a]]; this.outputShape = o, this.rank = o.length; let n = Re(this.rank), s = y9(t10); this.userCode = ` @@ -19180,24 +17825,19 @@ var xh = class { }; function y9(r15) { let e = r15.length; - if (e > 6) - throw Error(`Transpose for rank ${e} is not yet supported`); + 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); - for (let n = 0; n < r15.length; n++) - o[r15[n]] = t10[n]; + for (let n = 0; n < r15.length; n++) o[r15[n]] = t10[n]; return o.join(); } var yh = class { constructor(e, t10) { 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]]; - if (this.outputShape = o, this.rank = o.length, this.rank > 6) - throw Error(`Packed transpose for rank ${this.rank} is not yet supported.`); + for (let c = 0; c < o.length; c++) o[c] = e[t10[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 = Re(this.rank), s = dv("rc", this.rank), a = new Array(this.rank); - for (let c = 0; c < t10.length; c++) - a[t10[c]] = s[c]; + for (let c = 0; c < t10.length; c++) a[t10[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() { @@ -19238,16 +17878,14 @@ function wp(r15) { var eA = { kernelName: Ss, backendName: "webgl", kernelFunc: wp }; function bt(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { 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]]; + 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 = Cp(l, n.shape, n.dtype, s, p); u = a.makeTensorInfo(p, n.dtype); let d = a.texData.get(u.dataId); d.values = m; - } else - u = yu(n, s, a); + } else u = yu(n, s, a); return u; } var tA = { kernelName: co, backendName: "webgl", kernelFunc: bt }; @@ -19275,8 +17913,7 @@ function Sp({ a: r15, b: e, transposeA: t10, transposeB: o, backend: n, bias: s } let q = te({ inputs: { x: j }, backend: n, attrs: { shape: S } }); D.push(j); - for (let Y of D) - n.disposeIntermediateTensorInfo(Y); + for (let Y of D) n.disposeIntermediateTensorInfo(Y); return q; } function b9(r15) { @@ -19351,8 +17988,7 @@ var Ch = class { }; function wh(r15) { let { inputs: e, backend: t10 } = r15, o = e; - if (o.length === 1) - return Dt({ inputs: { x: o[0] }, backend: t10 }); + if (o.length === 1) return Dt({ inputs: { x: o[0] }, backend: t10 }); if (o.length > A().getNumber("WEBGL_MAX_TEXTURES_IN_SHADER")) { let p = Math.floor(o.length / 2), u = wh({ inputs: o.slice(0, p), backend: t10 }), c = wh({ inputs: o.slice(p), backend: t10 }); return wh({ inputs: [u, c], backend: t10 }); @@ -19368,8 +18004,7 @@ function N9(r15) { if (a) { let b = w.expandShapeToKeepDim(m, p); x = te({ inputs: { x: g }, backend: t10, attrs: { shape: b } }); - } else - x = te({ inputs: { x: g }, backend: t10, attrs: { shape: m } }); + } else x = te({ inputs: { x: g }, backend: t10, attrs: { shape: m } }); return t10.disposeIntermediateTensorInfo(h), t10.disposeIntermediateTensorInfo(g), c != null && t10.disposeIntermediateTensorInfo(l), x; } var cA = { kernelName: Go, backendName: "webgl", kernelFunc: N9 }; @@ -19380,8 +18015,7 @@ function T9(r15) { if (a) { let b = w.expandShapeToKeepDim(m, p); x = te({ inputs: { x: g }, backend: t10, attrs: { shape: b } }); - } else - x = te({ inputs: { x: g }, backend: t10, attrs: { shape: m } }); + } else x = te({ inputs: { x: g }, backend: t10, attrs: { shape: m } }); return t10.disposeIntermediateTensorInfo(h), t10.disposeIntermediateTensorInfo(g), c != null && t10.disposeIntermediateTensorInfo(l), x; } var lA = { kernelName: Ho, backendName: "webgl", kernelFunc: T9 }; @@ -19432,8 +18066,7 @@ var Ih = class { --${c[p - 1]}; ${R} sourceLocB = ${R}(${c.join()}, 0); --${c[p - 2]};`; - } else - m = p, l = ` + } else m = p, l = ` ${u} sourceLocR = coords; ++${c[p - 1]}; ${u} sourceLocG = coords; @@ -19498,8 +18131,7 @@ function mA(r15, e, t10, o = null) { let a = w.computeOptimalWindowSize(s), i = { windowSize: a, inSize: s, batchSize: n, outSize: Math.ceil(s / a) }, p = new Sh(i, t10, o == null), u = [e]; o != null && u.push(o); let c = r15.runWebGLProgram(p, u, "int32"); - if (c.shape[1] === 1) - return c; + if (c.shape[1] === 1) return c; let l = mA(r15, e, t10, c); return r15.disposeIntermediateTensorInfo(c), l; } @@ -19575,8 +18207,7 @@ var z9 = xe({ opSnippet: B9 }); var CA = { kernelName: Xo, backendName: "webgl", kernelFunc: z9 }; var Us = class { constructor(e, t10, o, n = false, s = false) { - if (this.variableNames = ["x"], t10 === "avg" && o) - throw new Error("Cannot compute positions for average pool."); + if (this.variableNames = ["x"], t10 === "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 = t10 === "avg", g = `((batch * ${e.inHeight} + xR) * ${e.inWidth} + xC) * ${e.inChannels} + d`, x = `(xR * ${e.inWidth} + xC) * ${e.inChannels} + d`, b = "0.0"; @@ -19734,8 +18365,7 @@ var Us = class { }; var bu = class { constructor(e, t10, o, n = false, s = false) { - if (this.variableNames = ["x"], t10 === "avg" && o) - throw new Error("Cannot compute positions for average pool."); + if (this.variableNames = ["x"], t10 === "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 = t10 === "avg", S = "0.0"; @@ -19919,8 +18549,7 @@ function V9(r15) { let { filterSize: s, strides: a, pad: i, dimRoundingMode: p } = o, u = 1; y.assert(w.eitherStridesOrDilationsAreOne(a, u), () => `Error in avgPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${u}'`); let c = w.computePool2DInfo(n.shape, s, a, u, i, p); - if (c.filterWidth === 1 && c.filterHeight === 1 && y.arraysEqual(c.inShape, c.outShape)) - return Dt({ inputs: { x: n }, backend: t10 }); + if (c.filterWidth === 1 && c.filterHeight === 1 && y.arraysEqual(c.inShape, c.outShape)) return Dt({ inputs: { x: n }, backend: t10 }); let l = new Us(c, "avg", false); return t10.runWebGLProgram(l, [n], "float32"); } @@ -20134,10 +18763,8 @@ var Eh = class { }; var wv = ["x", "y", "z", "w", "u", "v"]; function q9(r15) { - if (r15 === 1) - return "sourceLoc"; - if (r15 <= 6) - return wv.slice(0, r15).map((e) => "sourceLoc." + e).join(","); + if (r15 === 1) return "sourceLoc"; + if (r15 <= 6) return wv.slice(0, r15).map((e) => "sourceLoc." + e).join(","); throw Error(`Slicing for rank ${r15} is not yet supported`); } var $h = class { @@ -20186,8 +18813,7 @@ function j9(r15, e, t10, o) { } function Gs(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { begin: s, size: a } = o, [i, p] = pt.parseSliceParams(n, s, a); - if (pt.assertParamsValid(n, i, p), y.sizeFromShape(p) === 0) - return t10.makeTensorInfo(p, n.dtype, []); + if (pt.assertParamsValid(n, i, p), y.sizeFromShape(p) === 0) return t10.makeTensorInfo(p, n.dtype, []); if (t10.shouldExecuteOnCPU([n]) || n.dtype === "string") { let l = t10.texData.get(n.dataId), m = gD(l.values, i, p, n.shape, n.dtype); return t10.makeTensorInfo(p, n.dtype, m); @@ -20253,8 +18879,7 @@ function FA(r15, e) { function Iv(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { dtype: s } = o; if (s === "complex64") { - if (n.dtype === "complex64") - return Dt({ inputs: { x: n }, backend: t10 }); + if (n.dtype === "complex64") return Dt({ inputs: { x: n }, backend: t10 }); let a = Gr(n.shape), i = Iv({ inputs: { x: n }, backend: t10, attrs: { dtype: "float32" } }), p = Or({ inputs: { real: i, imag: a }, backend: t10 }); return a.dispose(), t10.disposeIntermediateTensorInfo(i), p; } @@ -20270,8 +18895,7 @@ function Iv(r15) { let a = t10.texData.get(n.dataId).values, [i, p, u] = VR(a, n.shape, n.dtype, s); return t10.makeTensorInfo(i, p, u); } - if (s === "int32") - return FA(n, t10); + if (s === "int32") return FA(n, t10); if (s === "bool") { let a = t10.makeTensorInfo([], "bool", y.getTypedArrayFromDType("bool", 1)), p = Sv({ inputs: { a: n, b: a }, backend: t10 }); return t10.disposeIntermediateTensorInfo(a), p; @@ -20352,8 +18976,7 @@ var Fh = class { this.outputShape = [], this.outputShape = w.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]; + 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]; @@ -20379,8 +19002,7 @@ var Oh = class { this.variableNames = e.map((h, g) => `T${g}`); let p = new Array(e.length - 1); p[0] = e[0][t10]; - for (let h = 1; h < p.length; h++) - p[h] = p[h - 1] + e[h][t10]; + 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]}) { return getChannel( getT0(${l}), vec2(${c.join()})); @@ -20463,8 +19085,7 @@ function Vc(r15, e, t10) { d.push(Vc(g, e, t10)); } let f = Vc(d, e, t10); - for (let h of d) - t10.disposeIntermediateTensorInfo(h); + for (let h of d) t10.disposeIntermediateTensorInfo(h); return f; } if (a) { @@ -20484,8 +19105,7 @@ function vv(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { axis: n } = o, s = y.parseAxisParam(n, e[0].shape)[0], a = e.map((u) => u.shape); w.assertParamsConsistent(a, s); let i = w.computeOutShape(e.map((u) => u.shape), s); - if (y.sizeFromShape(i) === 0) - return t10.makeTensorInfo(i, e[0].dtype, []); + if (y.sizeFromShape(i) === 0) return t10.makeTensorInfo(i, e[0].dtype, []); let p = e.filter((u) => y.sizeFromShape(u.shape) > 0); return p.length === 1 ? Dt({ inputs: { x: p[0] }, backend: t10 }) : Vc(p, s, t10); } @@ -20734,8 +19354,7 @@ var Uc = class { 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 < c; g++) - m += ` + for (let g = 0; g < c; g++) m += ` vec4 xTexelC${g * 2}; int xTexelC${g * 2}Ready; vec4 xTexelC${g * 2 + 1}; @@ -20745,8 +19364,7 @@ var Uc = class { for (int r = 0; r < ${u}; r++) { for (int d1 = 0; d1 < ${e.inChannels}; d1 += 2) { `; - for (let g = 0; g < c; g++) - m += ` + for (let g = 0; g < c; g++) m += ` xTexelC${g * 2} = vec4(0.0); xTexelC${g * 2}Ready = 0; xTexelC${g * 2 + 1} = vec4(0.0); @@ -20842,8 +19460,7 @@ var Uc = class { xC${x + 1} = xTexelC${x + 1}; `; } - } else - x < c && (a % 2 === 1 ? (m += ` + } else x < c && (a % 2 === 1 ? (m += ` xCOffset = xC + 1 - strides[1]; if(xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${x}Ready == 0) { xTexelC${x} = getX(batch, xR, xCOffset, d1); @@ -20956,9 +19573,7 @@ var Lh = 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 = ut(this.outputShape.length); let { dataFormat: o } = t10, n = It(), 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 += ` + for (let c = 0; c <= 1; c++) for (let l = 0; l <= 1; l++) u += ` blockIndex = rc.z + ${l}; pos = rc.y + ${c}; @@ -21034,8 +19649,7 @@ function zh({ x: r15, filter: e, convInfo: t10, backend: o, bias: n = null, prel let S = t10.outHeight * t10.outWidth, k = te({ inputs: { x: r15 }, backend: o, attrs: { shape: d ? [t10.batchSize, S, t10.inChannels] : [t10.batchSize, t10.inChannels, S] } }), _ = te({ inputs: { x: e }, backend: o, attrs: { shape: [1, t10.inChannels, t10.outChannels] } }), $ = Sp({ 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: t10.outShape } }), x.push(k), x.push(_), x.push($); } - for (let S of x) - o.disposeIntermediateTensorInfo(S); + for (let S of x) o.disposeIntermediateTensorInfo(S); return g; } function Vh({ x: r15, filter: e, convInfo: t10, backend: o, bias: n = null, preluActivationWeights: s = null, leakyreluAlpha: a = 0, activation: i = null }) { @@ -21059,19 +19673,16 @@ function Vh({ x: r15, filter: e, convInfo: t10, backend: o, bias: n = null, prel } let U = o.runWebGLProgram(B, z, "float32"), j = te({ inputs: { x: U }, backend: o, attrs: { shape: t10.outShape } }); S.push(U); - for (let q of S) - o.disposeIntermediateTensorInfo(q); + for (let q of S) o.disposeIntermediateTensorInfo(q); return j; } function iJ(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { x: n, filter: s } = e, { strides: a, pad: i, dataFormat: p, dilations: u, dimRoundingMode: c } = o, l = w.convertConv2DDataFormat(p), m = w.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")) - d = zh({ x: n, filter: s, convInfo: m, backend: t10 }); + 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 = zh({ x: n, filter: s, convInfo: m, backend: t10 }); else if (m.strideWidth <= 2 && l === "channelsLast" && A().getBool("WEBGL_EXP_CONV")) { let h = new Uc(m), g = [[m.padInfo.top, m.padInfo.left], [m.strideHeight, m.strideWidth], [m.dilationHeight, m.dilationWidth], [m.inHeight, m.inWidth]]; d = t10.runWebGLProgram(h, [n, s], "float32", g); - } else if (A().getBool("WEBGL_CONV_IM2COL")) - d = Vh({ x: n, filter: s, convInfo: m, backend: t10 }); + } else if (A().getBool("WEBGL_CONV_IM2COL")) d = Vh({ x: n, filter: s, convInfo: m, backend: t10 }); else { let h = new Wc(m); d = t10.runWebGLProgram(h, [n, s], "float32"); @@ -21526,33 +20137,24 @@ var om = class { } }; function ZA(r15, e, t10) { - if (r15 === 1) - return `${e}`; - if (r15 === 2) - return `${e}.x, ${e}.y`; - if (r15 === 3) - return `${e}.x, ${e}.y, ${e}.z`; - if (r15 === 4) - return `${e}.x, ${e}.y, ${e}.z, ${e}.w`; + if (r15 === 1) return `${e}`; + if (r15 === 2) return `${e}.x, ${e}.y`; + if (r15 === 3) return `${e}.x, ${e}.y, ${e}.z`; + if (r15 === 4) return `${e}.x, ${e}.y, ${e}.z, ${e}.w`; throw new Error(`Cumulative ${t10} for rank ${r15} is not yet supported`); } function JA(r15, e, t10) { - if (r15 === 1) - return `${e}`; - if (r15 === 2) - return `${e}.y`; - if (r15 === 3) - return `${e}.z`; - if (r15 === 4) - return `${e}.w`; + if (r15 === 1) return `${e}`; + if (r15 === 2) return `${e}.y`; + if (r15 === 3) return `${e}.z`; + if (r15 === 4) return `${e}.w`; throw new Error(`Cumulative ${t10} for rank ${r15} is not yet supported`); } function jh(r15, e, t10, o, n, s) { let a = e.shape.length, i = w.getAxesPermutation([o], a), p = e; i != null && (p = bt({ inputs: { x: e }, backend: t10, attrs: { perm: i } })); let u = w.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}`); + 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 = Dt({ inputs: { x: p }, backend: t10 }); for (let m = 0; m <= Math.ceil(Math.log2(c)) - 1; m++) { let d = new om(r15, p.shape, false, s), f = [[m]], h = l; @@ -21702,8 +20304,7 @@ var Hc = class { 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 x = 0; x < l; x++) - d += ` + for (let x = 0; x < l; x++) d += ` vec4 xTexelC${x * 2}; int xTexelC${x * 2}Ready; vec4 xTexelC${x * 2 + 1}; @@ -21712,8 +20313,7 @@ var Hc = class { d += ` for (int r = 0; r < ${c}; r++) { `; - for (let x = 0; x < l; x++) - d += ` + 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); @@ -21809,8 +20409,7 @@ var Hc = class { xC${b + 1} = xTexelC${b + 1}; `; } - } else - b < l && (i % 2 === 1 ? (d += ` + } else 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); @@ -22103,14 +20702,12 @@ function _J(r15) { let { permutationIndices: x, expandDims: b } = w.getEinsumPermutation(d, p[g]), C; w.isIdentityPermutation(x) ? C = s[g] : (C = bt({ inputs: { x: s[g] }, backend: t10, attrs: { perm: x } }), f.push(C)); let S = C.shape.slice(); - for (let k = 0; k < b.length; ++k) - S.splice(b[k], 0, 1); + for (let k = 0; k < b.length; ++k) S.splice(b[k], 0, 1); y.arraysEqual(C.shape, S) || (C = te({ inputs: { x: C }, backend: t10, attrs: { shape: S } }), f.push(C)), m === null ? m = C : (m = tm({ inputs: { a: C, b: m }, backend: t10 }), f.push(m)); } h < l - 1 && (u[h] >= 0 && (m = wp({ inputs: { x: m }, backend: t10, attrs: { axis: u[h] - (a.length - d), keepDims: false } }), f.push(m)), d--); } - for (let h of f) - h !== m && t10.disposeIntermediateTensorInfo(h); + for (let h of f) h !== m && t10.disposeIntermediateTensorInfo(h); return m; } var pF = { kernelName: Bi, backendName: "webgl", kernelFunc: _J }; @@ -22190,12 +20787,9 @@ var nm = class { let n = t10[1]; this.outputShape = t10; 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}.`); + 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}; @@ -22426,13 +21020,11 @@ function XJ(r15) { } 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")) - x = zh({ x: n, filter: s, convInfo: g, backend: t10, bias: a, activation: d, preluActivationWeights: i, leakyreluAlpha: f }); + 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 = zh({ x: n, filter: s, convInfo: g, backend: t10, bias: a, activation: d, preluActivationWeights: i, leakyreluAlpha: f }); else if (g.strideWidth <= 2 && h === "channelsLast" && A().getBool("WEBGL_EXP_CONV")) { let R = d ? yi(d, true) : null, D = new Uc(g, C, R, S, k), P = [[g.padInfo.top, g.padInfo.left], [g.strideHeight, g.strideWidth], [g.dilationHeight, g.dilationWidth], [g.inHeight, g.inWidth]], O = _(); x = t10.runWebGLProgram(D, O, "float32", P); - } else if (A().getBool("WEBGL_CONV_IM2COL")) - x = Vh({ x: n, filter: s, convInfo: g, backend: t10, bias: a, activation: d, preluActivationWeights: i, leakyreluAlpha: f }); + } else if (A().getBool("WEBGL_CONV_IM2COL")) x = Vh({ x: n, filter: s, convInfo: g, backend: t10, bias: a, activation: d, preluActivationWeights: i, leakyreluAlpha: f }); else { let R = d ? yi(d, false) : null, D = new Wc(g, C, R, S, k), P = _(); x = t10.runWebGLProgram(D, P, "float32"); @@ -22460,8 +21052,7 @@ var ag = class { this.sliceDim = e, this.strides = t10, this.paramsShape = n, this.variableNames = ["x", "indices"], this.outputShape = o; let s = Re(o.length), a = ` int index;`; - for (let i = 0; i < this.sliceDim; i++) - a += ` + for (let i = 0; i < this.sliceDim; i++) a += ` index = round(getIndices(coords[0], ${i})); out_of_bounds = out_of_bounds || index < 0; out_of_bounds = out_of_bounds || index >= ${this.paramsShape[i]}; @@ -22505,8 +21096,7 @@ var ig = class { }; function ZJ(r15, e) { let t10 = ["resRC.x", "resRC.y", "resRC.z", "resRC.w"], o = []; - for (let n = 0; n < r15.length; n++) - n === 2 ? o.push("index") : o.push(`${t10[n]}`); + for (let n = 0; n < r15.length; n++) n === 2 ? o.push("index") : o.push(`${t10[n]}`); return o.join(); } function Tv(r15) { @@ -22791,14 +21381,12 @@ function _v(r15) { if (l) { if (m) { let C = t10.texData.get(d.dataId).values, S = new Array(i); - for (let $ = 0; $ < S.length; $++) - S[$] = n.shape[c[$]]; + for (let $ = 0; $ < S.length; $++) S[$] = n.shape[c[$]]; let k = Cp(C, n.shape, n.dtype, c, S); d = t10.makeTensorInfo(S, n.dtype); let _ = t10.texData.get(d.dataId); _.values = k; - } else - d = yu(n, c, t10); + } else d = yu(n, c, t10); u = w.getInnerMostAxes(u.length, i); } w.assertAxesAreInnerMostDims("max", u, i); @@ -22810,8 +21398,7 @@ function _v(r15) { x = t10.makeTensorInfo(g, n.dtype); let k = t10.texData.get(x.dataId); k.values = S; - } else - x = HF(d, h, g, t10); + } else x = HF(d, h, g, t10); return l && t10.disposeIntermediateTensorInfo(d), x; } var KF = { kernelName: zn, backendName: "webgl", kernelFunc: _v }; @@ -22834,8 +21421,7 @@ function Mee(r15) { let { filterSize: s, strides: a, pad: i, dimRoundingMode: p } = o, u = 1; y.assert(w.eitherStridesOrDilationsAreOne(a, u), () => `Error in maxPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${u}'`); let c = w.computePool2DInfo(n.shape, s, a, u, i, p); - if (c.filterWidth === 1 && c.filterHeight === 1 && y.arraysEqual(c.inShape, c.outShape)) - return Dt({ inputs: { x: n }, backend: t10 }); + if (c.filterWidth === 1 && c.filterHeight === 1 && y.arraysEqual(c.inShape, c.outShape)) return Dt({ inputs: { x: n }, backend: t10 }); let l = new Us(c, "max", false); return t10.runWebGLProgram(l, [n], n.dtype); } @@ -23004,22 +21590,19 @@ var t3 = { kernelName: Un, backendName: "webgl", kernelFunc: ({ inputs: r15, att if (l) { if (m) { let S = a.texData.get(f.dataId).values, k = new Array(i); - for (let R = 0; R < k.length; R++) - k[R] = o.shape[c[R]]; + for (let R = 0; R < k.length; R++) k[R] = o.shape[c[R]]; let _ = Cp(S, o.shape, o.dtype, c, k); f = a.makeTensorInfo(k, o.dtype); let $ = a.texData.get(f.dataId); $.values = _; - } else - f = yu(o, c, a); + } else f = yu(o, c, a); d.push(f), u = w.getInnerMostAxes(u.length, i); } w.assertAxesAreInnerMostDims("sum", u, i); let [h, g] = w.computeOutAndReduceShapes(f.shape, u), x = h; n && (x = w.expandShapeToKeepDim(h, p)); let b = e3(f, g, x, a); - for (let C of d) - a.disposeIntermediateTensorInfo(C); + for (let C of d) a.disposeIntermediateTensorInfo(C); return b; } }; function Vee(r15) { @@ -23029,8 +21612,7 @@ function Vee(r15) { if (a) { let b = w.expandShapeToKeepDim(m, p); x = te({ inputs: { x: g }, backend: t10, attrs: { shape: b } }); - } else - x = te({ inputs: { x: g }, backend: t10, attrs: { shape: m } }); + } else x = te({ inputs: { x: g }, backend: t10, attrs: { shape: m } }); return t10.disposeIntermediateTensorInfo(h), t10.disposeIntermediateTensorInfo(g), c != null && t10.disposeIntermediateTensorInfo(l), x; } var r32 = { kernelName: Gn, backendName: "webgl", kernelFunc: Vee }; @@ -23305,25 +21887,21 @@ function sm(r15) { if (o.dtype === "complex64") { let n = bi({ inputs: { input: o }, backend: t10 }), s = sm({ inputs: { x: n }, backend: t10 }), a = Ip({ inputs: { input: o }, backend: t10 }), i = sm({ inputs: { x: a }, backend: t10 }), p = Or({ inputs: { real: s, imag: i }, backend: t10 }); return t10.disposeIntermediateTensorInfo(n), t10.disposeIntermediateTensorInfo(s), t10.disposeIntermediateTensorInfo(a), t10.disposeIntermediateTensorInfo(i), p; - } else - return Ci({ attrs: { shape: o.shape, dtype: o.dtype, value: o.dtype === "string" ? "" : 0 }, backend: t10 }); + } else return Ci({ attrs: { shape: o.shape, dtype: o.dtype, value: o.dtype === "string" ? "" : 0 }, backend: t10 }); } var g3 = { kernelName: Sa, backendName: "webgl", kernelFunc: sm }; function x3(r15) { let { inputs: e, backend: t10 } = r15, { x: o } = e; - if (o.dtype === "string") - throw new Error("onesLike is not supported under string dtype"); + if (o.dtype === "string") throw new Error("onesLike is not supported under string dtype"); if (o.dtype === "complex64") { let n = bi({ inputs: { input: o }, backend: t10 }), s = x3({ inputs: { x: n }, backend: t10 }), a = Ip({ inputs: { input: o }, backend: t10 }), i = sm({ inputs: { x: a }, backend: t10 }), p = Or({ inputs: { real: s, imag: i }, backend: t10 }); return t10.disposeIntermediateTensorInfo(n), t10.disposeIntermediateTensorInfo(s), t10.disposeIntermediateTensorInfo(a), t10.disposeIntermediateTensorInfo(i), p; - } else - return Ci({ attrs: { shape: o.shape, dtype: o.dtype, value: 1 }, backend: t10 }); + } else return Ci({ attrs: { shape: o.shape, dtype: o.dtype, value: 1 }, backend: t10 }); } var y3 = { kernelName: ca, backendName: "webgl", kernelFunc: x3 }; function ute(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { axis: n } = o; - if (e.length === 1) - return eg({ inputs: { input: e[0] }, backend: t10, attrs: { dim: n } }); + if (e.length === 1) return eg({ inputs: { input: e[0] }, backend: t10, 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"); @@ -23381,8 +21959,7 @@ var yg = class { ${p[n - 2]} += 1; if(${p[n - 2]} < ${this.outputShape[n - 2]}) {`, n === 1 ? "" : ` ${p[n - 1]} += 1; 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++) - f += ` + for (let h = 0, g = n === 1 ? 2 : 4; h < g; h++) f += ` ${m[h]} if (${d}) { result[${h}] = float(value); @@ -23917,8 +22494,7 @@ var kg = class { constructor(e, t10) { 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 (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() { @@ -23941,8 +22517,7 @@ var Ng = class { constructor(e, t10) { this.variableNames = ["x"], this.packedInputs = true, this.packedOutput = true; let o = e.length; - if (o > 4) - throw new Error(`WebGL backend: Reverse of rank-${o} tensor is not yet supported`); + if (o > 4) throw new Error(`WebGL backend: Reverse of rank-${o} tensor is not yet supported`); this.outputShape = e; let n = Rt("rc", o), s = `${n[o - 1]} + 1 < ${this.outputShape[o - 1]}`, a = `${n[o - 2]} + 1 < ${this.outputShape[o - 2]}`, i = Re(o); o === 1 ? this.userCode = ` @@ -23997,8 +22572,7 @@ var Ng = class { }; function _te(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { dims: s } = o, a = n.shape.length, i = y.parseAxisParam(s, n.shape); - if (a === 0) - return Dt({ inputs: { x: n }, backend: t10 }); + if (a === 0) return Dt({ inputs: { x: n }, backend: t10 }); let p = A().getBool("WEBGL_PACK_ARRAY_OPERATIONS") ? new Ng(n.shape, i) : new kg(n.shape, i); return t10.runWebGLProgram(p, [n], n.dtype); } @@ -24141,8 +22715,7 @@ var _g = class { }; function Ate(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { indices: n, updates: s } = e, { shape: a } = o, { sliceRank: i, numUpdates: p, sliceSize: u, strides: c, outputSize: l } = w.calculateShapes(s, n, a), m = [l / u, u]; - if (l === 0) - return t10.makeTensorInfo(a, n.dtype); + if (l === 0) return t10.makeTensorInfo(a, n.dtype); let d = te({ inputs: { x: n }, backend: t10, attrs: { shape: [p, i] } }), f = te({ inputs: { x: s }, backend: t10, attrs: { shape: [p, u] } }), h = t10.makeTensorInfo([], "float32", new Float32Array([0])), g; A().getBool("WEBGL_PACK") ? g = new _g(p, i, d.shape.length, f.shape.length, c, m) : g = new Cu(p, i, d.shape.length, f.shape.length, c, m); let x = t10.runWebGLProgram(g, [f, d, h], f.dtype), b = te({ inputs: { x }, backend: t10, attrs: { shape: a } }); @@ -24190,14 +22763,11 @@ var $g = class { constructor(e, t10, o) { this.variableNames = ["c", "a", "b"], this.outputShape = t10; let n, s; - if (o > 4) - throw Error(`Where for rank ${o} is not yet supported`); - if (o === 1) - s = "resRC", n = "resRC"; + 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 < t10.length; c++) - u.push(`${i[c]}`), c < e && p.push(`${i[c]}`); + for (let c = 0; c < t10.length; c++) u.push(`${i[c]}`), c < e && p.push(`${i[c]}`); n = p.join(), s = u.join(); } let a = Re(o); @@ -24295,25 +22865,20 @@ var Yte = (r15) => { 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; x < n.shape.length; ++x) - p.push([0, 0]); + for (let x = 1 + s.length; x < n.shape.length; ++x) p.push([0, 0]); let u = [], c = Dv({ inputs: { x: n }, backend: t10, attrs: { paddings: p, constantValue: 0 } }), l = w.getReshaped(c.shape, s, i, false), m = w.getPermuted(l.length, s.length, false), d = w.getReshapedPermuted(c.shape, s, i, false), f = te({ inputs: { x: c }, backend: t10, attrs: { shape: l } }), h = bt({ inputs: { x: f }, backend: t10, attrs: { perm: m } }), g = te({ inputs: { x: h }, backend: t10, attrs: { shape: d } }); return u.push(c), u.push(f), u.push(h), u.forEach((x) => t10.disposeIntermediateTensorInfo(x)), g; }; var q3 = { kernelName: ga, backendName: "webgl", kernelFunc: Yte }; function Qte(r15) { let { inputs: e, backend: t10 } = r15, { indices: o, values: n, denseShape: s, defaultValue: a } = e; - if (s.shape.length !== 1) - throw new Error(`Dense shape must be a vector, saw: + 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: + 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: + 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: + 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, d, f, h] = xD(i, o.shape, o.dtype, p, n.dtype, u, c); return [t10.makeTensorInfo(m, o.dtype, l), t10.makeTensorInfo([m[0]], n.dtype, d), t10.makeTensorInfo([f.length], "bool", new Uint8Array(f.map((g) => Number(g)))), t10.makeTensorInfo([h.length], o.dtype, new Int32Array(h))]; @@ -24321,25 +22886,19 @@ function Qte(r15) { var j3 = { kernelName: Ki, backendName: "webgl", kernelFunc: Qte }; function Zte(r15) { let { inputs: e, backend: t10 } = r15, { 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}`); + 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] = yD(i, o.shape, o.dtype, a, p); return [t10.makeTensorInfo(c, o.dtype, u), t10.makeTensorInfo([l.length], s.dtype, new Int32Array(l))]; } var X3 = { kernelName: ei, backendName: "webgl", kernelFunc: Zte }; function Jte(r15) { let { inputs: e, backend: t10 } = r15, { 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 + 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 + 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] = lh(a, o.shape, o.dtype, i, p, true); return t10.makeTensorInfo(c, o.dtype, u); @@ -24347,13 +22906,10 @@ function Jte(r15) { var Y3 = { kernelName: ya, backendName: "webgl", kernelFunc: Jte }; function ere(r15) { let { inputs: e, backend: t10 } = r15, { 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 + 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 + 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] = lh(a, o.shape, o.dtype, i, p); return t10.makeTensorInfo(c, o.dtype, u); @@ -24390,8 +22946,7 @@ var are = nt({ opSnippet: oP, packedOpSnippet: oP }); var nP = { kernelName: ks, backendName: "webgl", kernelFunc: are }; function ire(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e; - if (n.dtype !== "string") - throw new Error("Input must be of datatype string"); + if (n.dtype !== "string") throw new Error("Input must be of datatype string"); let s = t10.readSync(n.dataId), a = w.fromUint8ToStringArray(s), i = CD(a, "string", o); return t10.makeTensorInfo(n.shape, "string", i); } @@ -24407,8 +22962,7 @@ var Rg = class { constructor(e, t10, o) { this.variableNames = ["x"], this.outputShape = o; let n = o.length, s = Re(o.length), a = Re(o.length), i = ""; - if (n === 1) - i = "coords * strides + begin"; + 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(","); @@ -24426,8 +22980,7 @@ var Rg = class { }; function pre(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { 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: S } = pt.sliceInfo(n.shape, s, a, i, p, u, c, l, m), k; - if (h) - k = te({ inputs: { x: n }, backend: t10, attrs: { shape: f } }); + if (h) k = te({ inputs: { x: n }, backend: t10, 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 $ = pt.computeOutShape(b, C, S), R = Gs({ inputs: { x: n }, backend: t10, attrs: { begin: b, size: $ } }); @@ -24450,22 +23003,17 @@ function cre(r15) { var uP = { kernelName: Ca, backendName: "webgl", kernelFunc: cre }; function lre(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { 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}`); + 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] = ID(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))]; } var pP = { kernelName: ji, backendName: "webgl", kernelFunc: lre }; function mre(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { 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"); + 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 = vD(a, n); return t10.makeTensorInfo(s.shape, "int32", i); } @@ -24481,8 +23029,7 @@ var gre = xe({ opSnippet: hre }); var mP = { kernelName: Es, backendName: "webgl", kernelFunc: gre }; function xre(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { tensor: n, indices: s, updates: a } = e, {} = o, { sliceRank: i, numUpdates: p, sliceSize: u, strides: c, outputSize: l } = w.calculateShapes(a, s, n.shape), m = [l / u, u]; - if (l === 0) - return t10.makeTensorInfo(n.shape, s.dtype); + if (l === 0) return t10.makeTensorInfo(n.shape, s.dtype); let d = te({ inputs: { x: s }, backend: t10, attrs: { shape: [p, i] } }), f = te({ inputs: { x: a }, backend: t10, attrs: { shape: [p, u] } }), h = te({ inputs: { x: n }, backend: t10, attrs: { shape: m } }), g = new Cu(p, i, d.shape.length, f.shape.length, c, m, false, true), x = t10.runWebGLProgram(g, [f, d, h], h.dtype), b = te({ inputs: { x }, backend: t10, attrs: { shape: n.shape } }); return t10.disposeIntermediateTensorInfo(d), t10.disposeIntermediateTensorInfo(f), t10.disposeIntermediateTensorInfo(h), t10.disposeIntermediateTensorInfo(x), b; } @@ -24491,8 +23038,7 @@ var Dg = class { constructor(e, t10) { this.variableNames = ["A"]; let o = new Array(e.length); - for (let a = 0; a < o.length; a++) - o[a] = e[a] * t10[a]; + for (let a = 0; a < o.length; a++) o[a] = e[a] * t10[a]; this.outputShape = o, this.rank = o.length; let n = Re(this.rank), s = yre(e); this.userCode = ` @@ -24505,13 +23051,10 @@ var Dg = class { }; function yre(r15) { let e = r15.length; - if (e > 5) - throw Error(`Tile for rank ${e} is not yet supported`); - if (e === 1) - return `imod(resRC, ${r15[0]})`; + if (e > 5) throw Error(`Tile for rank ${e} is not yet supported`); + if (e === 1) return `imod(resRC, ${r15[0]})`; let t10 = ["resRC.x", "resRC.y", "resRC.z", "resRC.w", "resRC.u"], o = []; - for (let n = 0; n < r15.length; n++) - o.push(`imod(${t10[n]}, ${r15[n]})`); + for (let n = 0; n < r15.length; n++) o.push(`imod(${t10[n]}, ${r15[n]})`); return o.join(); } function Fv(r15) { @@ -24613,8 +23156,7 @@ function kp(r15, e) { } function hP(r15) { let e = 1; - for (; e < r15; ) - e *= 2; + for (; e < r15; ) e *= 2; return e; } function bre(r15) { @@ -24623,10 +23165,8 @@ function bre(r15) { let P = t10.readSync(n.dataId), [O, M] = TD(P, u, n.dtype, s, a); return [t10.makeTensorInfo(O.shape, O.dtype, O.values), t10.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", [])]; - if (c === 1) - return [n, Ci({ attrs: { shape: u, dtype: "int32", value: 0 }, backend: t10 })]; + if (s === 0) return u[u.length - 1] = 0, [t10.makeTensorInfo(u, n.dtype, []), t10.makeTensorInfo(u, "int32", [])]; + if (c === 1) return [n, Ci({ attrs: { shape: u, dtype: "int32", value: 0 }, backend: t10 })]; let l = t10.texData.get(n.dataId), m = l !== null && l.isPacked, d = m ? t10.unpackTensor(n) : n, h = y.sizeFromShape(u) / c, g = te({ inputs: { x: d }, attrs: { shape: [h, c] }, backend: t10 }); m && kp(t10, d); let x = hP(s), b = hP(c), C = null, S = () => C === null ? [g, g] : [g, C], k = (P, O, M) => { @@ -24635,15 +23175,13 @@ function bre(r15) { }; for (let P = 1; P < x; P *= 2) { let O = P * 2; - for (let M = P; M >= 1; M /= 2) - k(O, M, [h, b]); + for (let M = P; M >= 1; M /= 2) k(O, M, [h, b]); } for (let P = b; P > x; P /= 2) { let O = S(), M = new Fg([h, P / 2]), B = [[c], [C === null ? 1 : 0], [x]], z = C; C = t10.runWebGLProgram(M, O, "int32", B), kp(t10, z); let U = x / 2, j = U * 2; - for (let q = U; q >= 1; q /= 2) - k(j, q, C.shape); + for (let q = U; q >= 1; q /= 2) k(j, q, C.shape); } let _ = C; C = Gs({ inputs: { x: C }, backend: t10, attrs: { begin: 0, size: [h, s] } }), kp(t10, _); @@ -24807,8 +23345,7 @@ function Sre(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { 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]); + for (let h = 0; h < i; h++) h !== s && (u[c++] = a.shape[h]); let l = [], m = new Array(i).fill(0), d = a.shape.slice(); d[s] = 1; let f = new Array(p); @@ -24944,8 +23481,7 @@ function Ire(r15) { p.push(f); let h = oi(n.dtype), g = (S, k, _, $, R) => { let D = S.shape[0], P = S.shape[1], O = w.segment_util.segOpComputeOptimalWindowSize(P, R), M = { windowSize: O, inSize: P, batchSize: D, numSegments: R }, L = new Og(M, k), B = t10.compileAndRun(L, [S, _], $); - if (p.push(B), B.shape[1] === R) - return B; + if (p.push(B), B.shape[1] === R) return B; let z = Av({ backend: t10, attrs: { start: 0, stop: R, step: 1, dtype: "float32" } }), U = Fv({ inputs: { x: z }, backend: t10, attrs: { reps: [P / O] } }); return p.push(z), p.push(U), g(B, k, U, $, R); }, x = g(f, "unsortedSegmentSum", s, h, a), b = te({ inputs: { x }, backend: t10, attrs: { shape: m } }), C = b; @@ -24958,8 +23494,7 @@ function Ire(r15) { } var CP = { kernelName: Qi, backendName: "webgl", kernelFunc: Ire }; var vre = [rA, nA, sA, aA, uA, pA, cA, lA, fA, hA, gA, xA, yA, bA, CA, wA, SA, IA, vA, kA, NA, _A, EA, $A, RA, PA, MA, LA, KD, zA, WA, UA, GA, HA, KA, qA, jA, XA, YA, QA, eF, tF, rF, oF, nF, sF, aF, iF, uF, pF, cF, lF, mF, dF, fF, hF, xF, yF, bF, CF, SF, IF, vF, kF, NF, TF, _F, EF, $F, HD, RF, VA, DF, AF, FF, qD, PF, OF, MF, LF, BF, zF, VF, WF, UF, GF, KF, qF, jF, XF, YF, QF, JF, t3, r32, o3, n3, s3, c3, YD, l3, m3, d3, f3, DA, h3, y3, b3, C3, w3, jD, S3, I3, v3, k3, N3, AA, a3, T3, _3, E3, ZD, $3, R3, D3, A3, F3, P3, O3, M3, L3, B3, z3, V3, W3, U3, G3, H3, TA, p3, K3, q3, j3, X3, Y3, Q3, Z3, J3, tP, rP, nP, sP, aP, iP, uP, pP, cP, u3, eA, lP, mP, dP, fP, gP, xP, tA, yP, bP, CP, g3]; -for (let r15 of vre) - ti(r15); +for (let r15 of vre) ti(r15); var we; (function(r15) { r15[r15.float32 = 0] = "float32", r15[r15.int32 = 1] = "int32", r15[r15.bool = 2] = "bool", r15[r15.string = 3] = "string", r15[r15.complex64 = 4] = "complex64"; @@ -24974,18 +23509,15 @@ function kre(r15) { } function Nre(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { 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."); + 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, d = t10.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}.`); + if (R.shape.length !== 1) throw new Error(`_FusedMatMul only supports rank-1 bias but got rank ${R.shape.length}.`); f = R.id; } let h = i == null ? 0 : t10.dataIdMap.get(i.dataId).id, g = wu[c]; - if (g == null) - throw new Error(`${c} activation not yet supported for FusedConv2D in the wasm backend.`); + 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 = Sr.assertAndGetBroadcastShape(n.shape.slice(0, -2), s.shape.slice(0, -2)), S = t10.makeOutput([...C, x, b], n.dtype), k = t10.dataIdMap.get(S.dataId).id, _ = new Uint8Array(new Int32Array(n.shape).buffer), $ = new Uint8Array(new Int32Array(s.shape).buffer); return wP(m, _, n.shape.length, d, $, s.shape.length, p, u, g, f, h, l || 0, k), S; } @@ -25011,8 +23543,7 @@ function Ge(r15, e, t10) { } 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 = t10 != null ? t10 : u.dtype, f = w.assertAndGetBroadcastShape(u.shape, c.shape), h = i.makeOutput(f, d); - if (y.sizeFromShape(f) === 0) - return h; + 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, we[u.dtype], b), h; } @@ -25026,16 +23557,14 @@ function _re(r15) { } function Ere(r15) { let { inputs: e, backend: t10 } = r15, o = t10.makeOutput(e[0].shape, e[0].dtype); - if (y.sizeFromShape(o.shape) === 0) - return o; + 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 TP(s, n.length, we[o.dtype], a), o; } var _P = { kernelName: Uo, backendName: "wasm", setupFunc: _re, kernelFunc: Ere }; function Np(r15) { let { inputs: { x: e }, backend: t10 } = r15; - if (e.dtype === "string") - return ar(t10.readSync(e.dataId), e.shape, e.dtype); + if (e.dtype === "string") return ar(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; } @@ -25046,8 +23575,7 @@ function $re(r15) { } function ho(r15) { let { inputs: e, backend: t10, attrs: o } = r15, [n, s] = Dre(e.x.shape, o.perm), a = true; - for (let f = 0; f < s.length; f++) - s[f] !== f && (a = false); + for (let f = 0; f < s.length; f++) s[f] !== f && (a = false); let i = Rre(e.x.shape, o.perm), p = { dataId: e.x.dataId, shape: n, dtype: e.x.dtype }; if (a) { let f = Np({ inputs: e, backend: t10 }); @@ -25058,18 +23586,15 @@ function ho(r15) { } function Rre(r15, e) { let t10 = new Array(r15.length); - for (let o = 0; o < t10.length; o++) - t10[o] = r15[e[o]]; + for (let o = 0; o < t10.length; o++) t10[o] = r15[e[o]]; return t10; } function Dre(r15, e) { let t10 = [], o = []; - for (let n = 0; n < r15.length; ++n) - r15[n] !== 1 && t10.push(r15[n]), r15[e[n]] !== 1 && o.push(e[n]); + for (let n = 0; n < r15.length; ++n) r15[n] !== 1 && t10.push(r15[n]), r15[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); + 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]; @@ -25079,8 +23604,7 @@ function Tr(r15, e, t10) { let o = r15.shape, n = r15.shape.length, s = y.parseAxisParam(e, o), a = s, i = w.getAxesPermutation(a, n), p = null, u = false; if (i != null) { let c = new Array(n); - for (let d = 0; d < c.length; d++) - c[d] = o[i[d]]; + for (let d = 0; d < c.length; d++) c[d] = o[i[d]]; a = w.getInnerMostAxes(a.length, n), p = ho({ inputs: { x: r15 }, attrs: { perm: i }, backend: t10 }); let l = t10.dataIdMap.get(r15.dataId).id; t10.dataIdMap.get(p.dataId).id !== l && (u = true); @@ -25164,10 +23688,8 @@ function Mre(r15) { } function Lre(r15) { let { inputs: e, attrs: t10, backend: o } = r15, n = e.x, s = o.dataIdMap.get(n.dataId).id, { filterSize: a, strides: i, pad: p, dimRoundingMode: u } = t10, c = w.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}].`); + 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 S = o.makeOutput(c.outShape, "float32"), k = o.dataIdMap.get(S.dataId).id; return UP(s, n.shape[0], n.shape[1], n.shape[2], l, m, d, f, h, g, x, b, C, k), S; } @@ -25210,8 +23732,7 @@ function Hre(r15) { } function Kre(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { 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."); + 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 = Sr.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 S = a ? [g, c, m] : [g, m, c], k = i ? [x, d, l] : [x, l, d], _ = zt({ inputs: { x: n }, backend: t10, attrs: { shape: S } }), $ = zt({ inputs: { x: s }, backend: t10, attrs: { shape: k } }), R = t10.dataIdMap.get(_.dataId).id, D = t10.dataIdMap.get($.dataId).id, P = a ? _.shape[2] : _.shape[1], O = i ? $.shape[1] : $.shape[2], M = Math.max(g, x), L = t10.makeOutput([M, P, O], _.dtype), B = t10.dataIdMap.get(L.dataId).id, z = new Uint8Array(new Int32Array(_.shape).buffer), U = new Uint8Array(new Int32Array($.shape).buffer); @@ -25229,12 +23750,9 @@ function Po(r15) { return l.stringBytes = f, u; } let m = n.typedArrayFromHeap(u), d = e.shape.length; - if (d === 2) - qre(p, c[0], m, s, a); - else if (d === 3) - jre(p, c[0], c[1], m, s, a); - else if (d === 4) - Xre(p, c[0], c[1], c[2], m, s, a); + if (d === 2) qre(p, c[0], m, s, a); + else if (d === 3) jre(p, c[0], c[1], m, s, a); + else if (d === 4) Xre(p, c[0], c[1], c[2], m, s, a); else { let f = pp(p, s, a, e.shape, e.dtype); m.set(f); @@ -25250,20 +23768,17 @@ function qre(r15, e, t10, o, n) { } function jre(r15, e, t10, 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 d = p; d < l; d++) { - let f = m * e + d * t10 + u; - o.set(r15.subarray(f, f + s[2]), a), a += s[2]; - } + for (let m = i; m < c; m++) for (let d = p; d < l; d++) { + let f = m * e + d * t10 + u; + o.set(r15.subarray(f, f + s[2]), a), a += s[2]; + } } function Xre(r15, 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], d = c + a[2], f = s[3]; - for (let h = p; h < l; h++) - for (let g = u; g < m; g++) - for (let x = c; x < d; x++) { - let b = h * e + g * t10 + x * o + f; - n.set(r15.subarray(b, b + a[3]), i), i += a[3]; - } + for (let h = p; h < l; h++) for (let g = u; g < m; g++) for (let x = c; x < d; x++) { + let b = h * e + g * t10 + x * o + f; + n.set(r15.subarray(b, b + a[3]), i), i += a[3]; + } } var eO = { kernelName: ha, backendName: "wasm", kernelFunc: Po }; function Yre(r15) { @@ -25309,11 +23824,9 @@ function Pv(r15) { let { inputs: e, backend: t10 } = r15, o = y.parseAxisParam(r15.attrs.axis, e[0].shape)[0], n = e.map((d) => d.shape); w.assertParamsConsistent(n, o); let s = w.computeOutShape(e.map((d) => d.shape), o), a = e.filter((d) => y.sizeFromShape(d.shape) > 0); - if (a.length === 1) - return Np({ inputs: { x: a[0] }, backend: t10 }); + if (a.length === 1) return Np({ inputs: { x: a[0] }, backend: t10 }); let i = t10.makeOutput(s, e[0].dtype); - if (y.sizeFromShape(s) === 0) - return i; + 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))]; @@ -25345,8 +23858,7 @@ function ooe(r15) { } function noe(r15) { let { inputs: e, attrs: t10, backend: o } = r15, { 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, d = w.convertConv2DDataFormat(m), f = w.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, S = f.padInfo.left, k = f.dilationHeight, _ = f.dilationWidth, $ = f.strideHeight, R = f.strideWidth, D = f.inChannels, P = f.outChannels, O = 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'.`); + 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 lO(a, n.shape[0], n.shape[1], n.shape[2], i, h, g, x, b, C, S, O, k, _, $, R, D, P, L), M; } @@ -25366,10 +23878,8 @@ function ioe(r15) { } function uoe(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { x: n, filter: s } = e, { strides: a, pad: i, dilations: p } = o; - if (n.dtype !== "float32") - throw new Error(`Tensor x must have dtype float32, got ${n.dtype}`); - if (s.dtype !== "float32") - throw new Error(`Tensor filter must have dtype float32, got ${s.dtype}`); + if (n.dtype !== "float32") throw new Error(`Tensor x must have dtype float32, got ${n.dtype}`); + if (s.dtype !== "float32") throw new Error(`Tensor filter must have dtype float32, got ${s.dtype}`); let u = w.computeConv3DInfo(n.shape, s.shape, a, p, i), c = t10.makeOutput(u.outShape, n.dtype); return hO(t10.dataIdMap.get(n.dataId).id, t10.dataIdMap.get(s.dataId).id, t10.dataIdMap.get(c.dataId).id, u.batchSize, u.inDepth, u.inHeight, u.inWidth, u.inChannels, u.outDepth, u.outHeight, u.outWidth, u.outChannels, u.strideDepth, u.strideHeight, u.strideWidth, u.dilationDepth, u.dilationHeight, u.dilationWidth, u.filterDepth, u.filterHeight, u.filterWidth, u.padInfo.front, u.padInfo.top, u.padInfo.left), c; } @@ -25380,10 +23890,8 @@ function poe(r15) { } function coe(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { x: n, dy: s } = e, { strides: a, pad: i, filterShape: p } = o; - if (n.dtype !== "float32") - throw new Error(`Tensor dy must have dtype float32, got ${n.dtype}`); - if (s.dtype !== "float32") - throw new Error(`Tensor filter must have dtype float32, got ${s.dtype}`); + if (n.dtype !== "float32") throw new Error(`Tensor dy must have dtype float32, got ${n.dtype}`); + if (s.dtype !== "float32") throw new Error(`Tensor filter must have dtype float32, got ${s.dtype}`); let u = w.computeConv3DInfo(n.shape, p, a, 1, i), c = t10.makeOutput(u.filterShape, s.dtype); return xO(t10.dataIdMap.get(n.dataId).id, t10.dataIdMap.get(s.dataId).id, t10.dataIdMap.get(c.dataId).id, u.batchSize, u.inDepth, u.inHeight, u.inWidth, u.inChannels, u.outDepth, u.outHeight, u.outWidth, u.outChannels, u.strideDepth, u.strideHeight, u.strideWidth, u.dilationDepth, u.dilationHeight, u.dilationWidth, u.filterDepth, u.filterHeight, u.filterWidth, u.padInfo.front, u.padInfo.top, u.padInfo.left), c; } @@ -25394,10 +23902,8 @@ function loe(r15) { } function moe(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { dy: n, filter: s } = e, { pad: a, strides: i, inputShape: p } = o; - if (n.dtype !== "float32") - throw new Error(`Tensor dy must have dtype float32, got ${n.dtype}`); - if (s.dtype !== "float32") - throw new Error(`Tensor filter must have dtype float32, got ${s.dtype}`); + if (n.dtype !== "float32") throw new Error(`Tensor dy must have dtype float32, got ${n.dtype}`); + if (s.dtype !== "float32") throw new Error(`Tensor filter must have dtype float32, got ${s.dtype}`); let u = w.computeConv3DInfo(p, s.shape, i, 1, a), c = t10.makeOutput(u.inShape, n.dtype); return bO(t10.dataIdMap.get(s.dataId).id, t10.dataIdMap.get(n.dataId).id, t10.dataIdMap.get(c.dataId).id, u.batchSize, u.inDepth, u.inHeight, u.inWidth, u.inChannels, u.outDepth, u.outHeight, u.outWidth, u.outChannels, u.strideDepth, u.strideHeight, u.strideWidth, u.dilationDepth, u.dilationHeight, u.dilationWidth, u.filterDepth, u.filterHeight, u.filterWidth, u.padInfo.front, u.padInfo.top, u.padInfo.left), c; } @@ -25488,8 +23994,7 @@ function Ioe(r15) { } function voe(r15) { let { inputs: e, attrs: t10, backend: o } = r15, { 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, d = w.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, S = d.dilationHeight, k = d.dilationWidth, _ = d.strideHeight, $ = d.strideWidth, R = d.inChannels, D = d.outChannels, P = 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'.`); + if (d.dataFormat !== "channelsLast") throw new Error(`wasm backend DepthwiseConv2dNative does not support dataFormat:'${d.dataFormat}'. Please use 'channelsLast'.`); let O = o.makeOutput(d.outShape, "float32"), M = o.dataIdMap.get(O.dataId).id; return AO(a, n.shape[0], n.shape[1], n.shape[2], i, f, h, g, x, b, C, P, S, k, _, $, R, D, M), O; } @@ -25509,8 +24014,7 @@ function Toe(r15) { } function _oe(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { x: n, filter: s } = e, { strides: a, pad: i, dilations: p } = o; - if (n.dtype !== s.dtype) - throw new Error(`Dilation2D error: x must have the same dtype as filter. Got ${n.dtype} and ${s.dtype}`); + if (n.dtype !== s.dtype) throw new Error(`Dilation2D error: x must have the same dtype as filter. Got ${n.dtype} and ${s.dtype}`); let u = w.computeDilation2DInfo(n.shape, s.shape, a, i, "NHWC", p), c = t10.makeOutput(u.outShape, n.dtype); return MO(t10.dataIdMap.get(n.dataId).id, t10.dataIdMap.get(s.dataId).id, t10.dataIdMap.get(c.dataId).id, we[n.dtype], u.batchSize, u.inChannels, u.inHeight, u.inWidth, u.outHeight, u.outWidth, u.strideHeight, u.strideWidth, u.dilationHeight, u.dilationWidth, u.filterHeight, u.filterWidth, u.padInfo.top, u.padInfo.left), c; } @@ -25521,8 +24025,7 @@ function Eoe(r15) { } function $oe(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { x: n, filter: s, dy: a } = e, { strides: i, pad: p, dilations: u } = o; - if (n.dtype !== s.dtype || n.dtype !== a.dtype) - throw new Error(`Dilation2DBackpropFilter error: x must have the same dtype as filter and dy. Got ${n.dtype}, ${s.dtype}, and ${a.dtype}`); + if (n.dtype !== s.dtype || n.dtype !== a.dtype) throw new Error(`Dilation2DBackpropFilter error: x must have the same dtype as filter and dy. Got ${n.dtype}, ${s.dtype}, and ${a.dtype}`); let c = w.computeDilation2DInfo(n.shape, s.shape, i, p, "NHWC", u), l = t10.makeOutput(s.shape, s.dtype); return BO(t10.dataIdMap.get(n.dataId).id, t10.dataIdMap.get(s.dataId).id, t10.dataIdMap.get(a.dataId).id, t10.dataIdMap.get(l.dataId).id, we[n.dtype], c.batchSize, c.inChannels, c.inHeight, c.inWidth, c.outHeight, c.outWidth, c.strideHeight, c.strideWidth, c.dilationHeight, c.dilationWidth, c.filterHeight, c.filterWidth, c.padInfo.top, c.padInfo.left), l; } @@ -25533,8 +24036,7 @@ function Roe(r15) { } function Doe(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { x: n, filter: s, dy: a } = e, { strides: i, pad: p, dilations: u } = o; - if (n.dtype !== s.dtype || n.dtype !== a.dtype) - throw new Error(`Dilation2DBackpropInput error: x must have the same dtype as filter and dy. Got ${n.dtype}, ${s.dtype}, and ${a.dtype}`); + if (n.dtype !== s.dtype || n.dtype !== a.dtype) throw new Error(`Dilation2DBackpropInput error: x must have the same dtype as filter and dy. Got ${n.dtype}, ${s.dtype}, and ${a.dtype}`); let c = w.computeDilation2DInfo(n.shape, s.shape, i, p, "NHWC", u), l = t10.makeOutput(n.shape, n.dtype); return VO(t10.dataIdMap.get(n.dataId).id, t10.dataIdMap.get(s.dataId).id, t10.dataIdMap.get(a.dataId).id, t10.dataIdMap.get(l.dataId).id, we[n.dtype], c.batchSize, c.inChannels, c.inHeight, c.inWidth, c.outHeight, c.outWidth, c.strideHeight, c.strideWidth, c.dilationHeight, c.dilationWidth, c.filterHeight, c.filterWidth, c.padInfo.top, c.padInfo.left), l; } @@ -25584,8 +24086,7 @@ function Boe(r15) { } function zoe(r15) { let { backend: e, inputs: t10, attrs: o } = r15, { 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, 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; + if (y.sizeFromShape(s.shape) === 0) return h; let g = e.dataIdMap.get(h.dataId).id; return rM(c, l, m, d, f, n, g), h; } @@ -25596,20 +24097,16 @@ function Voe(r15) { } function Woe(r15) { let { inputs: e, attrs: t10, backend: o } = r15, { x: n, filter: s, bias: a, preluActivationWeights: i } = e, { strides: p, pad: u, dilations: c, dataFormat: l, dimRoundingMode: m, activation: d, leakyreluAlpha: f } = t10, h = w.computeConv2DInfo(n.shape, s.shape, p, c, u, m), g = wu[d]; - if (g == null) - throw new Error(`${d} activation not yet supported for FusedConv2D in the wasm backend.`); + 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, S = 0; if (a != null) { let ee = o.dataIdMap.get(a.dataId); - if (ee.shape.length !== 1) - throw new Error(`FusedConv2D only supports rank-1 bias but got rank ${ee.shape.length}.`); - if (ee.shape[0] !== C) - throw new Error(`FusedConv2D bias shape (${ee.shape}) does not match the number of output channels (${C})`); + if (ee.shape.length !== 1) throw new Error(`FusedConv2D only supports rank-1 bias but got rank ${ee.shape.length}.`); + if (ee.shape[0] !== C) throw new Error(`FusedConv2D bias shape (${ee.shape}) does not match the number of output channels (${C})`); S = ee.id; } let k = h.filterHeight, _ = h.filterWidth, $ = h.padInfo.top, R = h.padInfo.right, D = h.padInfo.bottom, P = h.padInfo.left, O = h.dilationHeight, M = h.dilationWidth, L = h.strideHeight, B = h.strideWidth, z = h.inChannels, U = h.padInfo.type === "SAME" ? 1 : 0, j = h.batchSize, q = h.inHeight, Y = h.inWidth; - if (l !== "NHWC") - throw new Error(`wasm backend FusedConv2D does not support dataFormat:'${l}'. Please use 'NHWC'.`); + if (l !== "NHWC") throw new Error(`wasm backend FusedConv2D does not support dataFormat:'${l}'. Please use 'NHWC'.`); let J = o.makeOutput(h.outShape, "float32"), re = o.dataIdMap.get(J.dataId).id, ne = i == null ? 0 : o.dataIdMap.get(i.dataId).id; return nM(x, j, q, Y, b, k, _, S, $, R, D, P, U, O, M, L, B, z, C, g, ne, f || 0, re), J; } @@ -25620,20 +24117,16 @@ function Uoe(r15) { } function Goe(r15) { let { inputs: e, attrs: t10, backend: o } = r15, { x: n, filter: s, bias: a, preluActivationWeights: i } = e, { strides: p, pad: u, dilations: c, dataFormat: l, dimRoundingMode: m, activation: d, leakyreluAlpha: f } = t10, h = w.computeConv2DInfo(n.shape, s.shape, p, c, u, m, true), g = wu[d]; - if (g == null) - throw new Error(`${d} activation not yet supported for FusedDepthwiseConv2D in the wasm backend.`); + 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, S = 0; if (a != null) { let ee = o.dataIdMap.get(a.dataId); - if (ee.shape.length !== 1) - throw new Error(`FusedDepthwiseConv2D only supports rank-1 bias but got rank ${ee.shape.length}.`); - if (ee.shape[0] !== C) - throw new Error(`FusedDepthwiseConv2D bias shape (${ee.shape}) does not match the number of output channels (${C})`); + if (ee.shape.length !== 1) throw new Error(`FusedDepthwiseConv2D only supports rank-1 bias but got rank ${ee.shape.length}.`); + if (ee.shape[0] !== C) throw new Error(`FusedDepthwiseConv2D bias shape (${ee.shape}) does not match the number of output channels (${C})`); S = ee.id; } let k = h.filterHeight, _ = h.filterWidth, $ = h.padInfo.top, R = h.padInfo.right, D = h.padInfo.bottom, P = h.padInfo.left, O = h.dilationHeight, M = h.dilationWidth, L = h.strideHeight, B = h.strideWidth, z = h.inChannels, U = h.padInfo.type === "SAME" ? 1 : 0, j = h.batchSize, q = h.inHeight, Y = h.inWidth; - if (l !== "NHWC") - throw new Error(`wasm backend FusedDepthwiseConv2D does not support dataFormat:'${l}'. Please use 'NHWC'.`); + if (l !== "NHWC") throw new Error(`wasm backend FusedDepthwiseConv2D does not support dataFormat:'${l}'. Please use 'NHWC'.`); let J = o.makeOutput(h.outShape, "float32"), re = o.dataIdMap.get(J.dataId).id, ne = i == null ? 0 : o.dataIdMap.get(i.dataId).id; return aM(x, j, q, Y, b, k, _, S, $, R, D, P, U, O, M, L, B, z, C, g, ne, f || 0, re), J; } @@ -25644,8 +24137,7 @@ function Hoe(r15) { } function Koe(r15) { let { backend: e, inputs: t10 } = r15, { params: o, indices: n } = t10, [s, a, i, p] = af.prepareAndValidate(o, n), u = e.makeOutput(s, o.dtype); - if (a === 0) - return u; + 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 uM(d, we[o.dtype], h, a, l, i, g, x), u; } @@ -25661,8 +24153,7 @@ function joe(r15) { y.assert(P <= c - 1 && P >= 0, () => `GatherV2: the index value ${P} is not in [0, ${c - 1}]`); } let l = w.segment_util.collectGatherOpShapeInfo(n, s, p, i), m = zt({ inputs: { x: n }, attrs: { shape: [l.batchSize, l.outerSize, l.dimSize, l.sliceSize] }, backend: e }), d = y.sizeFromShape(s.shape), f = zt({ 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; + 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), R = new Uint8Array(new Int32Array(y.computeStrides(h)).buffer); return cM(C, we[n.dtype], $, x, k, l.batchSize, R, _), e.disposeData(m.dataId), e.disposeData(f.dataId), g.shape = l.outputShape, g; } @@ -25715,8 +24206,7 @@ function ane(r15) { } function ine(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { depthRadius: s, bias: a, alpha: i, beta: p } = o; - if (n.dtype !== "float32") - throw new Error("LRN error: x must have dtype float32"); + if (n.dtype !== "float32") throw new Error("LRN error: x must have dtype float32"); let u = t10.makeOutput(n.shape, n.dtype); return EM(t10.dataIdMap.get(n.dataId).id, t10.dataIdMap.get(u.dataId).id, n.shape[3], s, a, i, p), u; } @@ -25727,8 +24217,7 @@ function une(r15) { } function pne(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { x: n, y: s, dy: a } = e, { depthRadius: i, bias: p, alpha: u, beta: c } = o; - if (n.dtype !== "float32" || s.dtype !== "float32" || a.dtype !== "float32") - throw new Error("LRNGrad error: x, y, and dy must have dtype float32"); + if (n.dtype !== "float32" || s.dtype !== "float32" || a.dtype !== "float32") throw new Error("LRNGrad error: x, y, and dy must have dtype float32"); let l = t10.makeOutput(n.shape, n.dtype); return RM(t10.dataIdMap.get(n.dataId).id, t10.dataIdMap.get(s.dataId).id, t10.dataIdMap.get(a.dataId).id, t10.dataIdMap.get(l.dataId).id, a.shape[3], i, p, u, c), l; } @@ -25767,8 +24256,7 @@ function fne(r15) { let { inputs: e, attrs: t10, backend: o } = r15, 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 } = t10, c = w.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, S = 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'.`); + if (c.dataFormat !== "channelsLast") throw new Error(`wasm backend does not support dataFormat:'${c.dataFormat}'. Please use 'channelsLast'.`); let $ = o.makeOutput(c.outShape, "float32"), R = o.dataIdMap.get($.dataId).id; return OM(s, n.shape[0], n.shape[1], n.shape[2], l, m, d, f, h, g, x, b, C, S, k, _, R), $; } @@ -25892,8 +24380,7 @@ function Rne(r15) { } function Dne(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { logits: n } = e, { numSamples: s, seed: a, normalized: i } = o; - if (n.dtype !== "float32") - throw new Error(`Tensor logits must have dtype float32, got ${n.dtype}`); + if (n.dtype !== "float32") throw new Error(`Tensor logits must have dtype float32, got ${n.dtype}`); let p = i ? n : Bv({ inputs: { logits: n }, backend: t10, attrs: { dim: n.shape.length - 1 } }), [u, c] = p.shape, l = t10.makeOutput([u, s], "int32"); return tL(t10.dataIdMap.get(p.dataId).id, u, c, s, a, t10.dataIdMap.get(l.dataId).id), i || t10.disposeData(p.dataId), l; } @@ -25955,8 +24442,7 @@ function Une(r15) { var hL = { kernelName: ca, backendName: "wasm", kernelFunc: Une }; function Gne(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { axis: n } = o; - if (e.length === 1) - return Lg({ inputs: { input: e[0] }, backend: t10, attrs: { dim: n } }); + if (e.length === 1) return Lg({ inputs: { input: e[0] }, backend: t10, 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"); @@ -25974,8 +24460,7 @@ function Hne(r15) { } function Kne(r15) { let { inputs: { x: e }, backend: t10, attrs: { paddings: o, constantValue: n } } = r15, s = o.map((h, g) => h[0] + e.shape[g] + h[1]); - if (y.sizeFromShape(e.shape) === 0) - return Mv({ backend: t10, attrs: { shape: s, value: n, dtype: e.dtype } }); + if (y.sizeFromShape(e.shape) === 0) return Mv({ 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]), d = new Uint8Array(new Int32Array(l).buffer), f = new Uint8Array(new Int32Array(m).buffer); return xL(a, c, e.shape.length, we[e.dtype], d, f, n, u), i; } @@ -26034,8 +24519,7 @@ function tse(r15) { let { backend: e, inputs: t10, attrs: o } = r15, { images: n } = t10, { 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 = Mr({ 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; + if (y.sizeFromShape(n.shape) === 0) return b; let C = e.dataIdMap.get(b.dataId).id; return _L(x, c, l, m, d, p, u, s ? 1 : 0, a ? 1 : 0, C), g != null && e.disposeData(g.dataId), b; } @@ -26055,8 +24539,7 @@ function nse(r15) { } function sse(r15) { let { backend: e, inputs: t10, attrs: o } = r15, { images: n } = t10, { 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; + if (y.sizeFromShape(n.shape) === 0) return h; let g = e.dataIdMap.get(n.dataId), x; g.dtype !== "float32" && (x = Mr({ 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; @@ -26078,8 +24561,7 @@ function use(r15) { } function pse(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { dims: s } = o, a = y.parseAxisParam(s, n.shape); - if (n.shape.length === 0) - return Np({ inputs: { x: n }, backend: t10 }); + if (n.shape.length === 0) return Np({ 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); OL(p, c, a.length, l, n.shape.length, u); let m = zt({ inputs: { x: i }, attrs: { shape: n.shape }, backend: t10 }); @@ -26103,8 +24585,7 @@ function mse(r15) { } function dse(r15) { let { backend: e, inputs: t10, attrs: o } = r15, { indices: n, updates: s } = t10, { shape: a } = o, i = e.makeOutput(a, s.dtype); - if (y.sizeFromShape(a) === 0) - return i; + if (y.sizeFromShape(a) === 0) return i; let { sliceRank: p, numUpdates: u, sliceSize: c, strides: l, outputSize: m } = du.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 WL(f, g, we[s.dtype], p, u, c, x, m, b), i; } @@ -26115,8 +24596,7 @@ function fse(r15) { } function hse(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { sortedSequence: n, values: s } = e, { side: a } = o; - if (n.dtype !== s.dtype) - throw new Error(`SearchSorted error: sorted_sequence must have the same dtype as values. Got ${n.dtype} and ${s.dtype}`); + if (n.dtype !== s.dtype) throw new Error(`SearchSorted error: sorted_sequence must have the same dtype as values. Got ${n.dtype} and ${s.dtype}`); let i = t10.makeOutput(s.shape, "int32"); function p(u) { return t10.dataIdMap.get(u.dataId).id; @@ -26150,8 +24630,7 @@ var eB = he(Cs); function Cse(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { 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]); + for (let _ = 1 + s.length; _ < n.shape.length; ++_) p.push([0, 0]); let u = Bg.kernelFunc({ inputs: { x: n }, backend: t10, attrs: { paddings: p, constantValue: 0 } }), c = w.getReshaped(u.shape, s, i, false), l = w.getPermuted(c.length, s.length, false), m = w.getReshapedPermuted(u.shape, s, i, false), h = zt({ inputs: { x: u }, backend: t10, attrs: { shape: c } }), b = ho({ inputs: { x: h }, backend: t10, attrs: { perm: l } }), k = zt({ inputs: { x: b }, backend: t10, attrs: { shape: m } }); return t10.disposeData(u.dataId), t10.disposeData(h.dataId), t10.disposeData(b.dataId), k; } @@ -26177,8 +24656,7 @@ function Sse(r15) { default: P = ""; } - if (e.disposeData(_.dataId), P) - throw e.disposeData(f.dataId), e.disposeData(g.dataId), e.disposeData(b.dataId), e.disposeData(S.dataId), new Error(P); + if (e.disposeData(_.dataId), P) throw e.disposeData(f.dataId), e.disposeData(g.dataId), e.disposeData(b.dataId), e.disposeData(S.dataId), new Error(P); let O = f, M = g; return R !== c[0] && (O = Po({ inputs: { x: f }, attrs: { begin: 0, size: [R, p] }, backend: e }), M = Po({ inputs: { x: g }, attrs: { begin: 0, size: R }, backend: e }), e.disposeData(f.dataId), e.disposeData(g.dataId)), [O, M, b, S]; } @@ -26189,14 +24667,11 @@ function Ise(r15) { } function vse(r15) { let { backend: e, inputs: t10 } = r15, { inputIndices: o, inputShape: n, newShape: s } = t10; - if (o.shape.length !== 2) - throw new Error(`Input indices should be a matrix but received shape + 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 + 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}`); + 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; nB(a, i, p, u, m, f, g); let x = e.readSync(h.dataId), b; @@ -26225,8 +24700,7 @@ function vse(r15) { default: b = ""; } - if (e.disposeData(h.dataId), b) - throw e.disposeData(l.dataId), e.disposeData(d.dataId), new Error(b); + if (e.disposeData(h.dataId), b) throw e.disposeData(l.dataId), e.disposeData(d.dataId), new Error(b); return [l, d]; } var sB = { kernelName: ei, backendName: "wasm", setupFunc: Ise, kernelFunc: vse }; @@ -26236,8 +24710,7 @@ function zg(r15) { } function Vg(r15, e) { let { backend: t10, inputs: o } = r15, { 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; - if (c < 0) - throw new Error(w.getSparseSegmentReductionNegativeSegmentIdsErrorMessage()); + if (c < 0) throw new Error(w.getSparseSegmentReductionNegativeSegmentIdsErrorMessage()); let l = n.shape.slice(); l[0] = c; let m = t10.dataIdMap.get(n.dataId).id, d = t10.dataIdMap.get(s.dataId).id, f = t10.dataIdMap.get(a.dataId).id, h = t10.makeOutput(l, n.dtype), g = t10.dataIdMap.get(h.dataId).id, x = t10.makeOutput([4], "int32"), b = t10.dataIdMap.get(x.dataId).id; @@ -26261,8 +24734,7 @@ function Vg(r15, e) { default: S = ""; } - if (t10.disposeData(x.dataId), S) - throw t10.disposeData(h.dataId), new Error(S); + if (t10.disposeData(x.dataId), S) throw t10.disposeData(h.dataId), new Error(S); return h; } function kse(r15) { @@ -26279,8 +24751,7 @@ function Tse(r15) { } function _se(r15) { let { backend: e, inputs: t10, attrs: o } = r15, { sparseIndices: n, sparseValues: s, defaultValue: a } = t10, { outputShape: i } = o, p = e.makeOutput(i, a.dtype); - if (y.sizeFromShape(i) === 0) - return p; + if (y.sizeFromShape(i) === 0) return p; let { sliceRank: u, numUpdates: c, sliceSize: l, strides: m, outputSize: d } = w.calculateShapes(s, n, i), f = e.dataIdMap.get(n.dataId).id, h = e.dataIdMap.get(s.dataId).id, g = e.dataIdMap.get(a.dataId).id, x = new Uint8Array(new Int32Array(m).buffer), b = e.dataIdMap.get(p.dataId).id; return pB(f, h, s.shape.length, g, we[a.dtype], u, c, l, x, d, b), p; } @@ -26314,8 +24785,7 @@ function Ase(r15) { } function Fse(r15) { let { backend: e, inputs: t10, attrs: o } = r15, { x: n } = t10, { 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: S } = pt.sliceInfo(n.shape, s, a, i, p, u, c, l, m), k; - if (h) - k = zt({ inputs: { x: n }, backend: e, attrs: { shape: f } }); + if (h) k = zt({ 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 _ = pt.computeOutShape(b, C, S), $ = Po({ inputs: { x: n }, backend: e, attrs: { begin: b, size: _ } }); @@ -26381,8 +24851,7 @@ function Vse(r15) { } function Wse(r15) { let { backend: e, inputs: t10, attrs: o } = r15, { tensor: n, indices: s, updates: a } = t10, {} = o, i = e.makeOutput(n.shape, n.dtype); - if (y.sizeFromShape(n.shape) === 0) - return i; + if (y.sizeFromShape(n.shape) === 0) return i; let { sliceRank: p, numUpdates: u, sliceSize: c, strides: l, outputSize: m } = du.calculateShapes(a, s, n.shape), f = e.dataIdMap.get(s.dataId).id, g = e.dataIdMap.get(a.dataId).id, b = e.dataIdMap.get(n.dataId).id, C = new Uint8Array(new Int32Array(l).buffer), S = e.dataIdMap.get(i.dataId).id; return TB(f, g, we[a.dtype], p, u, c, C, m, S, b), i; } @@ -26393,8 +24862,7 @@ function Use(r15) { } function Gse(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, s = t10.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]; + 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 EB(s, p, n.shape.length, u, i.length, we[c.dtype], l), c; } @@ -26445,12 +24913,10 @@ function Yse(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { 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 < i; d++) - d !== s && (p[u++] = n.shape[d]); + 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 d = 0; d < c.length; d++) - l[s] = d, c[d] = Po({ inputs: { x: n }, attrs: { begin: l, size: m }, backend: t10 }); + for (let d = 0; d < c.length; d++) l[s] = d, c[d] = Po({ inputs: { x: n }, attrs: { begin: l, size: m }, backend: t10 }); return c.map(({ dataId: d, dtype: f }) => ({ dataId: d, dtype: f, shape: p })); } var OB = { kernelName: wa, backendName: "wasm", kernelFunc: Yse }; @@ -26460,8 +24926,7 @@ function Qse(r15) { } var MB = { kernelName: Sa, backendName: "wasm", kernelFunc: Qse }; var Zse = [SP, IP, vP, kP, NP, _P, AP, PP, OP, MP, LP, BP, zP, VP, WP, GP, YP, KP, jP, JP, tO, oO, nO, sO, aO, iO, pO, cO, mO, fO, gO, yO, CO, wO, SO, vO, NO, _O, $O, DO, FO, OO, LO, zO, WO, UO, HO, KO, qO, jO, XO, YO, QO, JO, eM, tM, oM, sM, iM, pM, lM, mM, dM, EP, fM, hM, gM, yM, bM, CM, SM, vM, IM, kM, NM, TM, _M, $M, DM, FM, PM, MM, BM, VM, UM, HM, qM, XM, YM, ZM, rL, oL, nL, sL, iL, pL, lL, mL, fL, hL, gL, Bg, yL, CL, SL, IL, vL, kL, NL, TL, QP, EL, RL, AL, PL, ML, BL, zL, VL, UL, HL, qL, jL, YL, QL, ZL, JL, eO, eL, eB, tB, oB, sB, iB, uB, cB, lB, mB, dB, fB, gB, yB, bB, CB, wB, SB, vB, kB, NB, _B, $B, DB, FB, RP, PB, OB, MB]; -for (let r15 of Zse) - ti(r15); +for (let r15 of Zse) ti(r15); var zv = A(); zv.registerFlag("WASM_HAS_SIMD_SUPPORT", async () => { try { @@ -26471,8 +24936,7 @@ zv.registerFlag("WASM_HAS_SIMD_SUPPORT", async () => { } }); zv.registerFlag("WASM_HAS_MULTITHREAD_SUPPORT", async () => { - if (zv.get("IS_NODE")) - return false; + if (zv.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])); } catch (r15) { @@ -26514,8 +24978,7 @@ var pm = class extends ao { } readSync(e, t10, 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); + if (s === "string") return (t10 == null || t10 === 0) && (o == null || o >= i.length) ? i : i.slice(t10, o); t10 = t10 || 0, o = o || y.sizeFromShape(a); let p = y.bytesPerElement(s), u = this.wasm.HEAPU8.slice(n + t10 * p, n + o * p); return tae(u.buffer, s); @@ -26523,8 +24986,7 @@ var pm = class extends ao { disposeData(e, t10 = false) { if (this.dataIdMap.has(e)) { let o = this.dataIdMap.get(e); - if (o.refCount--, !t10 && o.refCount > 0) - return false; + if (o.refCount--, !t10 && o.refCount > 0) return false; this.wasm._free(o.memoryOffset), this.wasm.tfjs.disposeData(o.id), this.dataIdMap.delete(e); } return true; @@ -26550,8 +25012,7 @@ var pm = class extends ao { } makeOutput(e, t10, o, n) { let s; - if (o == null) - s = this.write(n != null ? n : null, e, t10); + if (o == null) s = this.write(n != null ? n : null, e, t10); else { let a = this.dataIdNextNumber++; s = { id: a }, this.dataIdMap.set(s, { id: a, memoryOffset: o, shape: e, dtype: t10, refCount: 1 }); @@ -26584,8 +25045,7 @@ function eae(r15) { }), {}); } function KB(r15, e, t10) { - if (Gg != null) - return Gg; + if (Gg != null) return Gg; let o = "tfjs-backend-wasm.wasm"; return r15 && e ? o = "tfjs-backend-wasm-threaded-simd.wasm" : r15 && (o = "tfjs-backend-wasm-simd.wasm"), im != null && im[o] != null ? im[o] : t10 + o; } @@ -26602,8 +25062,7 @@ async function jB() { }, Yv && (n.instantiateWasm = eae(KB(r15, e, am != null ? am : ""))); let s = false; n.onAbort = () => { - if (s || um) - return; + if (s || um) return; um = 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; @@ -26633,20 +25092,16 @@ var im = {}; var um = false; var Yv = false; function oae(r15, e = false) { - if (Tw("setWasmPath has been deprecated in favor of setWasmPaths and will be removed in a future release."), um) - throw new Error("The WASM backend was already initialized. Make sure you call `setWasmPath()` before you call `tf.setBackend()` or `tf.ready()`"); + if (Tw("setWasmPath has been deprecated in favor of setWasmPaths and will be removed in a future release."), um) throw new Error("The WASM backend was already initialized. Make sure you call `setWasmPath()` before you call `tf.setBackend()` or `tf.ready()`"); Gg = r15, Yv = e; } function nae(r15, e = false) { - if (um) - throw new Error("The WASM backend was already initialized. Make sure you call `setWasmPaths()` before you call `tf.setBackend()` or `tf.ready()`"); - if (typeof r15 == "string") - am = r15; + if (um) throw new Error("The WASM backend was already initialized. Make sure you call `setWasmPaths()` before you call `tf.setBackend()` or `tf.ready()`"); + if (typeof r15 == "string") am = r15; else { im = r15; let t10 = rae.filter((o) => im[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.`); + 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.`); } Yv = e; } @@ -26656,11 +25111,10 @@ function sae(r15) { XB = r15; } function aae() { - if (qv === -1) - throw new Error("WASM backend not initialized."); + if (qv === -1) throw new Error("WASM backend not initialized."); return qv; } -var iae = "4.17.0"; +var iae = "4.21.0"; var uae = 2; tu("wasm", async () => { let { wasm: r15 } = await jB(); @@ -26686,10 +25140,8 @@ var Hg = class { } getIntelGPUGeneration() { if (this.isIntel()) { - if (this.architecture.startsWith("gen")) - return Number(this.architecture.match(/\d+/)); - if (this.architecture.startsWith("xe")) - return 12; + if (this.architecture.startsWith("gen")) return Number(this.architecture.match(/\d+/)); + if (this.architecture.startsWith("xe")) return 12; } return 0; } @@ -26706,11 +25158,9 @@ var Kg = class { return n ? (this.freeBuffers.has(a) || this.freeBuffers.set(a, []), this.freeBuffers.get(a).length > 0 ? (s = this.freeBuffers.get(a).pop(), this.numFreeBuffers--) : (s = this.device.createBuffer({ size: e, usage: t10, mappedAtCreation: o }), this.numBytesAllocated += e)) : (s = this.device.createBuffer({ size: e, usage: t10, mappedAtCreation: o }), this.numBytesAllocated += e), this.usedBuffers.has(a) || this.usedBuffers.set(a, []), this.usedBuffers.get(a).push(s), this.numUsedBuffers++, this.numBytesUsed += e, s; } releaseBuffer(e, t10 = true) { - if (this.freeBuffers.size === 0) - return; + if (this.freeBuffers.size === 0) return; let o = e.size, n = e.usage, s = YB(o, n), a = this.usedBuffers.get(s), i = a.indexOf(e); - if (i < 0) - throw new Error("Cannot find the buffer in buffer manager"); + if (i < 0) throw new Error("Cannot find the buffer in buffer manager"); a[i] = a[a.length - 1], a.pop(), this.numUsedBuffers--, this.numBytesUsed -= o, t10 ? (this.freeBuffers.get(s).push(e), this.numFreeBuffers++) : (e.destroy(), this.numBytesAllocated -= o); } getNumUsedBuffers() { @@ -26750,13 +25200,11 @@ var qg = class { return this.usedTextures.get(i).push(p), p; } releaseTexture(e) { - if (this.freeTextures.size === 0) - return; + if (this.freeTextures.size === 0) return; let t10 = e.width, o = e.height, n = e.format, s = e.usage, a = QB(t10, 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"); + if (p < 0) throw new Error("Cannot release a texture that was never provided by this texture manager"); i.splice(p, 1); let u = ZB(n), c = t10 * o * u; this.numBytesUsed -= c; @@ -26783,17 +25231,14 @@ function QB(r15, e, t10, o) { return `${r15}_${e}_${t10}_${o}`; } function ZB(r15) { - if (r15 === "rgba8unorm") - return 16; + if (r15 === "rgba8unorm") return 16; throw new Error(`${r15} is not supported!`); } function JB(r15, e) { - if (Math.max(...r15) > 5) - throw new Error("Cannot symbolically compute strides for rank > 6 tensor."); + if (Math.max(...r15) > 5) throw new Error("Cannot symbolically compute strides for rank > 6 tensor."); let t10 = r15.length, o = "xyzwuv", n = r15.map((a) => `${e}.${o[a]}`), s = new Array(t10 - 1); s[t10 - 2] = n[t10 - 1]; - for (let a = t10 - 3; a >= 0; --a) - s[a] = `(${s[a + 1]} * ${n[a + 1]})`; + for (let a = t10 - 3; a >= 0; --a) s[a] = `(${s[a + 1]} * ${n[a + 1]})`; return s; } var Qr = (r15, e, t10) => t10 === "int32" ? `atomicAdd(${r15}, bitcast(${e}));` : ` @@ -26837,33 +25282,21 @@ var Ae = (r15, e = "f32") => { } }; function ft(r15) { - if (r15 <= 1) - return "i32"; - if (r15 === 2) - return "vec2"; - if (r15 === 3) - return "vec3"; - if (r15 === 4) - return "vec4"; - if (r15 === 5) - return "vec5"; - if (r15 === 6) - return "vec6"; + if (r15 <= 1) return "i32"; + if (r15 === 2) return "vec2"; + if (r15 === 3) return "vec3"; + if (r15 === 4) return "vec4"; + if (r15 === 5) return "vec5"; + if (r15 === 6) return "vec6"; throw Error(`GPU for rank ${r15} is not yet supported`); } function Oo(r15) { - if (r15 === 0) - return "x"; - if (r15 === 1) - return "y"; - if (r15 === 2) - return "z"; - if (r15 === 3) - return "w"; - if (r15 === 4) - return "u"; - if (r15 === 5) - return "v"; + if (r15 === 0) return "x"; + if (r15 === 1) return "y"; + if (r15 === 2) return "z"; + if (r15 === 3) return "w"; + if (r15 === 4) return "u"; + if (r15 === 5) return "v"; throw Error(`Index ${r15} is not yet supported`); } function G(...r15) { @@ -26974,8 +25407,7 @@ function cae(r15, e, t10) { } function nz(r15, e, t10) { let o = r15.shaderKey; - if (r15.pixelsOpType != null) - return o; + if (r15.pixelsOpType != null) return o; let n = [], s = []; e.forEach((c) => { n.push(c.shape), s.push(c.dtype); @@ -27041,13 +25473,10 @@ var lae = ` `; function cm(r15, e = "") { let t10 = r15.length, o = e !== "" ? `get${e.charAt(0).toUpperCase() + e.slice(1)}CoordsFromIndex` : "getCoordsFromIndex", n = e !== "" ? `${e.charAt(0).toLowerCase() + e.slice(1)}ShapeStrides` : "outShapeStrides"; - if (t10 <= 1) - return `fn ${o}(index : i32) -> i32 { return index; }`; + if (t10 <= 1) return `fn ${o}(index : i32) -> i32 { return index; }`; let s = y.computeStrides(r15), a = ft(t10), i = []; - for (let u = 0; u < t10; u++) - i.push(`d${u}`); - if (s.length === 1) - return ` fn ${o}(index : i32) -> vec2 { + for (let u = 0; u < t10; u++) i.push(`d${u}`); + if (s.length === 1) return ` fn ${o}(index : i32) -> vec2 { let d0 = index / uniforms.${n}; let d1 = index - d0 * uniforms.${n}; return vec2(d0, d1); }`; @@ -27064,8 +25493,7 @@ function cm(r15, e = "") { } function mae(r15, e) { let t10 = r15.name, o = r15.shape.length, n = ft(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(", "); - if (o < 1) - return ` + if (o < 1) return ` fn ${s}() -> ${Ae(e)} { return ${Ae(e)}(${t10}[0]); } @@ -27080,8 +25508,7 @@ function mae(r15, e) { } function dae(r15, e, t10, o) { let n = r15.name, s = n.charAt(0).toUpperCase() + n.slice(1), a = "get" + s + "ByOutput", i = r15.shape.length, p = e.length, u = ft(p); - if (y.arraysEqual(r15.shape, e) && o) - return ` + if (y.arraysEqual(r15.shape, e) && o) return ` fn ${a}Index(globalIndex : i32) -> ${Ae(t10)} { return ${Ae(t10)}(${n}[globalIndex]); } @@ -27091,8 +25518,7 @@ function dae(r15, e, t10, o) { } `; let c = w.getBroadcastDims(r15.shape, e), l = p - i, m = ""; - if (i === 0) - return ` + if (i === 0) return ` fn ${a}Index(globalIndex : i32) -> ${Ae(t10)}{ return get${s}(); } @@ -27104,13 +25530,11 @@ function dae(r15, e, t10, o) { p < 2 && c.length >= 1 ? m = "coords = 0;" : m = c.map((g) => `coords.${Oo(g + l)} = 0;`).join(` `); let d = ""; - if (p < 2 && i > 0) - d = "coords"; + if (p < 2 && i > 0) d = "coords"; else if (p > 1) { let g = ft(i), x = r15.shape.map((b, C) => `coords.${Oo(C + l)}`).join(", "); d = `${g}(${x})`; - } else - d = "coords"; + } else d = "coords"; let f = `uniforms.${n.charAt(0).toLowerCase() + n.slice(1)}Shape`, h = `${i}D`; return ` fn ${a}Index(globalIndex : i32) -> ${Ae(t10)} { @@ -27132,10 +25556,8 @@ function fae(r15, e, t10, o) { } function hae(r15, e) { let { x: t10, y: o = [], z: n = [] } = e, s = r15.length, a = t10.length + o.length + n.length; - if (a !== s) - return ""; - if (t10.length === s) - return `fn getOutputCoords() -> ${ft(s)}{ + if (a !== s) return ""; + if (t10.length === s) return `fn getOutputCoords() -> ${ft(s)}{ let globalIndex = getGlobalIndex(); return getCoordsFromIndex(globalIndex); } @@ -27143,19 +25565,15 @@ function hae(r15, e) { let i = "", p = [t10, o, n]; for (let m = 0; m < p.length; m++) { let d = p[m]; - if (d.length !== 0) - if (d.length === 1) - i += `let d${d[0]} = i32(globalId[${m}]);`; - else { - let f = JB(d, "uniforms.outShape"); - i += `var index${m} = i32(globalId[${m}]);`; - 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]};`; - } + if (d.length !== 0) if (d.length === 1) i += `let d${d[0]} = i32(globalId[${m}]);`; + else { + let f = JB(d, "uniforms.outShape"); + i += `var index${m} = i32(globalId[${m}]);`; + 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}`); + for (let m = 0; m < a; m++) u.push(`d${m}`); let c = ft(a), l = `fn getOutputCoords() -> ${c} { ${i} `; @@ -27227,10 +25645,8 @@ function sz(r15) { return r15.dispatch[1] === 1 && r15.dispatch[2] === 1; } function Su(r15, e = 1) { - if (r15 === "float32") - return Ae(e, "f32"); - if (r15 === "int32" || r15 === "bool") - return Ae(e, "i32"); + if (r15 === "float32") return Ae(e, "f32"); + if (r15 === "int32" || r15 === "bool") return Ae(e, "i32"); throw new Error(`type ${r15} is not supported.`); } function xae(r15, e, t10) { @@ -27270,13 +25686,11 @@ var Zv = {}; qe(Zv, { GPUBytesPerElement: () => jg, MatMulProgramType: () => Mo, assertNotComplex: () => fm, computeDispatch: () => H, computeWorkPerThreadForConv2d: () => mm, computeWorkgroupInfoForMatMul: () => Qv, computeWorkgroupSizeForConv2d: () => lm, flatDispatchLayout: () => X, isWebGPUSupported: () => dm, tilesFitEvenlyIntoShape: () => Cae }); var Tp = (r15) => { let e = 1; - for (let t10 = 0; t10 < r15.length; t10++) - e *= r15[t10]; + for (let t10 = 0; t10 < r15.length; t10++) e *= r15[t10]; return e; }; function Cae(r15, e) { - if (r15.length !== e.length) - throw new Error(`Cannot compute whether rank ${r15.length} tiles fit evenly into rank ${e.length} shape - ranks must match.`); + if (r15.length !== e.length) throw new Error(`Cannot compute whether rank ${r15.length} tiles fit evenly into rank ${e.length} shape - ranks must match.`); return e.every((t10, o) => t10 % r15[o] === 0); } function H(r15, e, t10 = [1, 1, 1], o = [1, 1, 1]) { @@ -27288,14 +25702,12 @@ function Qv(r15, e, t10, o = false) { return o || (r15 <= 8 && (s[1] = 1), e <= 16 && t10 <= 16 && (n[0] = 4)), { workgroupSize: n, elementsPerThread: s }; } function lm(r15, e, t10 = false) { - if (t10) - return [8, 8, 1]; + if (t10) return [8, 8, 1]; let o = Tp(r15.x.map((s) => e[s])), n = Tp(r15.y.map((s) => e[s])); return o <= 4 ? [4, 16, 1] : n <= 4 ? [16, 4, 1] : [16, 16, 1]; } function mm(r15, e, t10 = false) { - if (t10) - return [4, 4, 1]; + if (t10) return [4, 4, 1]; let o = Tp(r15.x.map((s) => e[s])), n = Tp(r15.y.map((s) => e[s])); return o <= 4 ? [1, 2, 1] : n <= 4 ? [2, 1, 1] : [2, 2, 1]; } @@ -27303,10 +25715,8 @@ function X(r15) { return { x: r15.map((e, t10) => t10) }; } function jg(r15) { - if (r15 === "float32" || r15 === "int32" || r15 === "bool" || r15 === "string") - return 4; - if (r15 === "complex64") - return 8; + if (r15 === "float32" || r15 === "int32" || r15 === "bool" || r15 === "string") return 4; + if (r15 === "complex64") return 8; throw new Error(`Unknown dtype ${r15}`); } function dm() { @@ -27324,8 +25734,7 @@ var Mo; var wae = A().getNumber("WEBGPU_CPU_HANDOFF_SIZE_THRESHOLD"); var Sae = (r15, e) => { let t10 = r15.limits.maxComputeWorkgroupsPerDimension, o = e.dispatchLayout, n = e.dispatch; - if (n.every((a) => a <= t10)) - return n; + if (n.every((a) => a <= t10)) return n; y.assert(n[0] > t10 && 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])), y.assert(s <= t10, () => "Total dispatch size exceeds WebGPU maximum."), [s, s, s]) : [s, s, 1]; @@ -27335,16 +25744,14 @@ var jc = class r14 extends ao { return r14.nextDataId++; } constructor(e, t10) { - if (super(), this.commandQueueOwnedIds = /* @__PURE__ */ new WeakSet(), this.dispatchCountInPass = 0, this.disposed = false, this.downloadWaitMs = 0, this.tensorDataPendingDisposal = [], this.queryResolveBuffer = null, this.querySet = null, this.querySetCount = 2, this.stagingPendingDisposal = [], this.uniformPendingDisposal = [], this.uploadWaitMs = 0, this.hasReadSyncWarned = false, this.hasTimestampQueryWarned = false, !dm()) - throw new Error("WebGPU is not supported on this device"); + if (super(), this.commandQueueOwnedIds = /* @__PURE__ */ new WeakSet(), this.dispatchCountInPass = 0, this.disposed = false, this.downloadWaitMs = 0, this.tensorDataPendingDisposal = [], this.queryResolveBuffer = null, this.querySet = null, this.querySetCount = 2, this.stagingPendingDisposal = [], this.uniformPendingDisposal = [], this.uploadWaitMs = 0, this.hasReadSyncWarned = false, this.hasTimestampQueryWarned = false, !dm()) throw new Error("WebGPU is not supported on this device"); this.pipelineCache = {}, this.device = e, this.queue = e.queue, this.commandEncoder = null, this.computePassEncoder = null, this.adapterInfo = new Hg(t10), this.supportTimestampQuery = this.device.features.has("timestamp-query"), this.thresholdToIncreaseWorkgroups = this.adapterInfo.intelGPUGeneration >= 12 ? 16 : 8, this.bufferManager = new Kg(this.device), this.textureManager = new qg(this.device), this.tensorMap = new Bo(this, ur()), A().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)); } floatPrecision() { return 32; } disposeData(e, t10 = false) { - if (!this.tensorMap.has(e)) - return true; + if (!this.tensorMap.has(e)) return true; let o = this.tensorMap.get(e); return t10 ? o.refCount = 0 : o.refCount--, o.refCount > 0 ? false : (o.complexTensorInfos != null && (this.disposeData(o.complexTensorInfos.real.dataId), this.disposeData(o.complexTensorInfos.imag.dataId)), this.commandQueueOwnedIds.has(e) ? (this.tensorDataPendingDisposal.push(e), true) : (this.releaseResource(e), this.tensorMap.delete(e), true)); } @@ -27375,14 +25782,12 @@ var jc = class r14 extends ao { } } write(e, t10, o) { - if (o === "complex64" && e != null) - throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag)."); + 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; } move(e, t10, o, n, s) { - if (n === "complex64") - throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag)."); + 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 }); } submitQueue() { @@ -27408,8 +25813,7 @@ var jc = class r14 extends ao { }); } async getBufferData(e) { - if (A().getBool("WEBGPU_ENGINE_COMPILE_ONLY")) - return console.warn("The data may be invalid since WEBGPU_ENGINE_COMPILE_ONLY is true, this can only be called when WEBGPU_ENGINE_COMPILE_ONLY is false"), null; + if (A().getBool("WEBGPU_ENGINE_COMPILE_ONLY")) return console.warn("The data may be invalid since WEBGPU_ENGINE_COMPILE_ONLY is true, this can only be called when WEBGPU_ENGINE_COMPILE_ONLY is false"), null; let t10 = e.size, o = this.bufferManager.acquireBuffer(t10, GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ); this.ensureCommandEncoderReady(), this.endComputePassEncoder(), this.commandEncoder.copyBufferToBuffer(e, 0, o, 0, t10), this.submitQueue(), await o.mapAsync(GPUMapMode.READ); let n = o.getMappedRange().slice(0); @@ -27421,8 +25825,7 @@ var jc = class r14 extends ao { } readSync(e) { let t10 = this.tensorMap.get(e), { values: o, complexTensorInfos: n } = t10; - if (o != null || t10.dtype === "string") - return o; + if (o != null || t10.dtype === "string") return o; if (t10.dtype === "complex64") { let h = this.readSync(n.real.dataId), g = this.readSync(n.imag.dataId), x = y.convertBackendValuesAndArrayBuffer(w.mergeRealAndImagArrays(h, g).buffer, "float32"); return this.convertAndCacheOnCPU(e, x), x; @@ -27440,16 +25843,13 @@ var jc = class r14 extends ao { let O = d.getContext("2d", { willReadFrequently: true }); O.clearRect(0, 0, R, D), O.drawImage(m[g], 0, 0); let M = O.getImageData(0, 0, R, D).data, L = s[g], B = new Uint8ClampedArray(u, P, R * D * 4); - for (let z = 0; z < B.length; z += 4) - if (L === "premultiplied") - B[z + 3] = M[z + 3]; - else { - let U = M[z]; - B[z] = M[z + 2], B[z + 1] = M[z + 1], B[z + 2] = U; - } + for (let z = 0; z < B.length; z += 4) if (L === "premultiplied") B[z + 3] = M[z + 3]; + else { + let U = M[z]; + B[z] = M[z + 2], B[z + 1] = M[z + 1], B[z + 2] = U; + } }, C = Math.floor(p / (c * l)), S = c, k = l, _ = 0; - for (let R = 0; R < C; R++) - b(S, k, _), _ += c * l * 4; + for (let R = 0; R < C; R++) b(S, k, _), _ += c * l * 4; let $ = p % (c * l); k = Math.floor($ / c), k > 0 && (b(S, k, _), _ += k * (c * 4)), S = $ % c, S > 0 && b(S, 1, _); }); @@ -27457,11 +25857,9 @@ var jc = class r14 extends ao { return this.convertAndCacheOnCPU(e, f), f; } async read(e) { - if (!this.tensorMap.has(e)) - throw new Error(`Tensor ${e} was not registered!`); + if (!this.tensorMap.has(e)) throw new Error(`Tensor ${e} was not registered!`); let t10 = this.tensorMap.get(e), { values: o } = t10; - if (o != null) - return o; + if (o != null) return 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]; @@ -27478,23 +25876,18 @@ var jc = class r14 extends ao { } createTensorFromGPUData(e, t10, o) { let n = e.buffer; - if (o === "complex64") - throw new Error("Cannot write to a complex64 dtype. "); + if (o === "complex64") throw new Error("Cannot write to a complex64 dtype. "); let s = { id: this.nextDataId() }; this.tensorMap.set(s, { dtype: o, shape: t10, values: null, refCount: 1, external: e.zeroCopy }); let a = this.tensorMap.get(s), i = jg(a.dtype) * y.sizeFromShape(a.shape); - if (e.buffer.size < i) - throw new Error(`GPUBuffer size(${e.buffer.size}) is smaller than tensor size(${i})!`); - if ((e.buffer.usage & (GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC)) !== (GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC)) - throw new Error("GPUBuffer.usage should include GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC!"); + if (e.buffer.size < i) throw new Error(`GPUBuffer size(${e.buffer.size}) is smaller than tensor size(${i})!`); + if ((e.buffer.usage & (GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC)) !== (GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC)) throw new Error("GPUBuffer.usage should include GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC!"); return e.zeroCopy !== true && (n = this.copyBuffer(n)), a.resource = n, ur().makeTensorFromDataId(s, t10, o, this); } readToGPU(e) { let t10 = this.tensorMap.get(e), { values: o, dtype: n, shape: s, resource: a } = t10; - 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."); + 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, p = i.size, u = i.usage, c = this.bufferManager.acquireBuffer(p, u); this.ensureCommandEncoderReady(), this.endComputePassEncoder(), this.commandEncoder.copyBufferToBuffer(a, 0, c, 0, p), this.submitQueue(); let l = this.makeTensorInfo(s, n), m = ur().makeTensorFromTensorInfo(l), d = this.tensorMap.get(l.dataId); @@ -27502,13 +25895,12 @@ var jc = class r14 extends ao { } bufferSync(e) { let t10 = this.readSync(e.dataId); - if (e.dtype === "string") - try { - let o = t10.map((n) => y.decodeString(n)); - return me(e.shape, e.dtype, o); - } catch (o) { - throw new Error("Failed to decode encoded string bytes into utf-8"); - } + if (e.dtype === "string") try { + let o = t10.map((n) => y.decodeString(n)); + return me(e.shape, e.dtype, o); + } catch (o) { + throw new Error("Failed to decode encoded string bytes into utf-8"); + } return me(e.shape, e.dtype, t10); } async time(e) { @@ -27524,15 +25916,13 @@ var jc = class r14 extends ao { return t10 === "string" && o != null && o.length > 0 && y.isString(o[0]) && (o = o.map((s) => y.encodeString(s))), { dataId: this.write(o, e, t10), shape: e, dtype: t10 }; } tensorToBinding(e) { - if (!e) - return null; + if (!e) return null; let o = this.tensorMap.get(e.dataId).resource; return o instanceof GPUBuffer ? { buffer: o } : o instanceof GPUTexture ? o.createView() : o; } uploadToGPU(e) { let t10 = this.tensorMap.get(e); - if (t10.resource != null) - return; + if (t10.resource != null) return; let o = jg(t10.dtype) * y.sizeFromShape(t10.shape), n, s = GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST; if (t10.values) { if (n = this.bufferManager.acquireBuffer(o, s, true), n.mapState === "unmapped") { @@ -27543,8 +25933,7 @@ var jc = class r14 extends ao { t10.dtype === "int32" || t10.dtype === "bool" ? new Int32Array(a).set(t10.values) : new Float32Array(a).set(t10.values), n.unmap(); } t10.values = null; - } else - n = this.bufferManager.acquireBuffer(o, s); + } else n = this.bufferManager.acquireBuffer(o, s); t10.resource = n; } makeUniforms(e) { @@ -27585,12 +25974,10 @@ var jc = class r14 extends ao { return this.queue.writeBuffer(i, 0, a, 0, t10), this.uniformPendingDisposal.push(i), { offset: 0, size: t10, buffer: i }; } runWebGPUProgram(e, t10, 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; + 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 = Sae(this.device, e); let a = t10.map((p, u) => { - if (p.dtype === "complex64") - throw new Error("GPGPUProgram does not support complex64 input. For complex64 dtypes, please separate the program into real and imaginary parts."); + if (p.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(p.dataId), { dtype: this.tensorMap.get(p.dataId).dtype, shape: p.shape, name: e.variableNames[u] }; }); e.shaderKey = nz(e, a, s); @@ -27598,8 +25985,7 @@ var jc = class r14 extends ao { return e.shaderKey in this.pipelineCache || (this.pipelineCache[e.shaderKey] = oz(this.device, e, a, s, i)), e.pipeline = this.pipelineCache[e.shaderKey], i || this.recordAndSubmit(e, s, t10, n), s; } recordAndSubmit(e, t10, o, n) { - if (e.pipeline instanceof Promise) - throw new Error("Please call checkCompileCompletionAsync to ensure parallel compilation is done!"); + if (e.pipeline instanceof Promise) throw new Error("Please call checkCompileCompletionAsync to ensure parallel compilation is done!"); let s = [], a = [], i = "int32"; if (e.pixelsOpType == null) { s.push({ type: "float32", data: [NaN] }, { type: "float32", data: [1 / 0] }), a = o.concat(t10).map((d) => d.shape); @@ -27628,8 +26014,7 @@ var jc = class r14 extends ao { c && this.supportTimestampQuery ? (this.endComputePassEncoder(), this.querySet == null && (this.querySet = this.device.createQuerySet({ type: "timestamp", count: this.querySetCount })), l.timestampWrites = { querySet: this.querySet, beginningOfPassWriteIndex: 0, endOfPassWriteIndex: 1 }, this.computePassEncoder = this.commandEncoder.beginComputePass(l)) : this.computePassEncoder || (this.computePassEncoder = this.commandEncoder.beginComputePass(l)), this.computePassEncoder.setPipeline(e.pipeline), this.computePassEncoder.setBindGroup(0, u), this.computePassEncoder.dispatchWorkgroups(e.dispatch[0], e.dispatch[1], e.dispatch[2]), this.dispatchCountInPass++, (c || A().get("WEBGPU_DEFERRED_SUBMIT_BATCH_SIZE") <= this.dispatchCountInPass || e.pixelsOpType === wi.DRAW) && (this.endComputePassEncoder(), c ? this.activeTimers.push({ name: e.constructor.name, query: this.getQueryTime() }) : this.submitQueue()); } async getQueryTime() { - if (!this.supportTimestampQuery) - return 0; + if (!this.supportTimestampQuery) return 0; this.queryResolveBuffer == null && (this.queryResolveBuffer = this.bufferManager.acquireBuffer(this.querySetCount * 8, GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST | GPUBufferUsage.QUERY_RESOLVE)), this.commandEncoder.resolveQuerySet(this.querySet, 0, this.querySetCount, this.queryResolveBuffer, 0); let e = this.bufferManager.acquireBuffer(this.querySetCount * 8, GPUBufferUsage.MAP_READ | GPUBufferUsage.COPY_DST); this.commandEncoder.copyBufferToBuffer(this.queryResolveBuffer, 0, e, 0, this.querySetCount * 8), this.submitQueue(), await e.mapAsync(GPUMapMode.READ); @@ -28116,25 +26501,16 @@ function Si(r15, e) { } } function dr(r15, e = false, t10 = false, o = 3) { - if (r15 === null) - return ""; + if (r15 === null) return ""; let n = ""; - if (r15 === "linear") - n = Si(Z.LINEAR); - else if (r15 === "relu") - n = Si(Z.RELU, t10); - else if (r15 === "elu") - n = Si(Z.ELU, t10); - else if (r15 === "relu6") - n = Si(Z.RELU6, t10); - else if (r15 === "prelu") - n = Xc(fe.PRELU, t10); - else if (r15 === "sigmoid") - n = Si(Z.SIGMOID, t10); - else if (r15 === "leakyrelu") - n = Si(Z.LEAKYRELU, t10); - else - throw new Error(`Activation ${r15} has not been implemented for the WebGPU backend.`); + if (r15 === "linear") n = Si(Z.LINEAR); + else if (r15 === "relu") n = Si(Z.RELU, t10); + else if (r15 === "elu") n = Si(Z.ELU, t10); + else if (r15 === "relu6") n = Si(Z.RELU6, t10); + else if (r15 === "prelu") n = Xc(fe.PRELU, t10); + else if (r15 === "sigmoid") n = Si(Z.SIGMOID, t10); + else if (r15 === "leakyrelu") n = Si(Z.LEAKYRELU, t10); + else throw new Error(`Activation ${r15} has not been implemented for the WebGPU backend.`); let a = Ae(t10 ? 4 : 1), i = ""; return e ? i = ` fn activation(a : ${a}, coords : vec${o}) -> ${a} { @@ -28200,8 +26576,7 @@ var Uie = (r15, e) => r15 ? ` kStart + inputCol * ${e}); `; var Gie = (r15, e, t10, o) => { - if (r15) - return ` + if (r15) return ` for (var k = 0; k < ${o}; k++) { let BCached0 = mm_Bsub[k][tileCol]; let ACached0 = mm_Asub[k][localRow]; @@ -28211,8 +26586,7 @@ var Gie = (r15, e, t10, o) => { }`; { let n = "", s = ""; - for (let a = 0; a < e; a++) - n += `let BCached${a} = mm_Bsub[k * ${e} + ${a}][tileCol];`, s += `acc[i] = fma(BCached${a}, vec4(ACached[${a}]), acc[i]);`; + for (let a = 0; a < e; a++) n += `let BCached${a} = mm_Bsub[k * ${e} + ${a}][tileCol];`, s += `acc[i] = fma(BCached${a}, vec4(ACached[${a}]), acc[i]);`; return ` for (var k = 0; k < ${o / e}; k++) { ${n} @@ -28481,8 +26855,7 @@ var Xg = class { constructor(e, t10, o = false, n = false, s = null, a = null, i = null, p = false) { this.variableNames = ["A", "B"], this.uniforms = "dimAOuter : i32, dimBOuter : i32, dimInner : i32,", this.outputShape = t10, this.dispatchLayout = { x: [2], y: [1], z: [0] }; let u = o ? e[1] : e[2]; - if (this.isVec4 = (u % 4 === 0 && !o || t10[1] % 4 === 0 && o) && t10[2] % 4 === 0 && !n, this.outputComponent = this.isVec4 ? 4 : 1, this.isVectorA = t10[1] === 1 && !o, !this.isVec4 && this.isVectorA) - this.elementsPerThread = [1, 1, 1], this.workgroupSize = [32, 1, 1]; + if (this.isVec4 = (u % 4 === 0 && !o || t10[1] % 4 === 0 && o) && t10[2] % 4 === 0 && !n, this.outputComponent = this.isVec4 ? 4 : 1, this.isVectorA = t10[1] === 1 && !o, !this.isVec4 && this.isVectorA) this.elementsPerThread = [1, 1, 1], this.workgroupSize = [32, 1, 1]; else { let m = Qv(t10[1], u, t10[2], o); this.workgroupSize = m.workgroupSize, this.elementsPerThread = m.elementsPerThread; @@ -28721,8 +27094,7 @@ function $p({ a: r15, b: e, transposeA: t10, transposeB: o, backend: n, bias: s D.push(B); let ee = pe({ inputs: { x: ne }, backend: n, attrs: { shape: S } }); D.push(ne); - for (let oe of D) - n.disposeData(oe.dataId); + for (let oe of D) n.disposeData(oe.dataId); return ee; } break; @@ -28740,8 +27112,7 @@ function $p({ a: r15, b: e, transposeA: t10, transposeB: o, backend: n, bias: s s && O.push(s), a && O.push(a), p === "leakyrelu" && (M.push({ type: "float32", data: [i] }), L.uniforms += " alpha : f32,"), B = n.runWebGPUProgram(L, O, r15.dtype, M, B); let j = pe({ inputs: { x: B }, backend: n, attrs: { shape: S } }); D.push(B); - for (let q of D) - n.disposeData(q.dataId); + for (let q of D) n.disposeData(q.dataId); return j; } function Yie(r15) { @@ -28774,8 +27145,7 @@ var gm = class { }; var Ii = class { constructor(e, t10, o) { - if (this.size = true, this.variableNames = ["A", "B"], this.outputShape = w.assertAndGetBroadcastShape(t10, o), this.dispatchLayout = X(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.outputComponent = 1, this.variableComponents = [1, 1], this.lastDimensionSize = this.useSharedMemoryWithB ? o[0] : t10[0], this.shaderKey = `binary_${e}_${this.lastDimensionSize}`, this.type = "shared", this.workgroupSize = [256, 1, 1]; + if (this.size = true, this.variableNames = ["A", "B"], this.outputShape = w.assertAndGetBroadcastShape(t10, o), this.dispatchLayout = X(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.outputComponent = 1, this.variableComponents = [1, 1], this.lastDimensionSize = this.useSharedMemoryWithB ? o[0] : t10[0], this.shaderKey = `binary_${e}_${this.lastDimensionSize}`, this.type = "shared", this.workgroupSize = [256, 1, 1]; else { let n = t10.length > 0 && t10[t10.length - 1] % 4 === 0, s = o.length > 0 && o[o.length - 1] % 4 === 0; n && s ? (this.outputComponent = 4, this.variableComponents = [4, 4]) : n && (y.isScalarShape(o) || o[o.length - 1] === 1) || s && (y.isScalarShape(t10) || t10[t10.length - 1] === 1) ? (this.outputComponent = 4, this.variableComponents = n ? [4, 1] : [1, 4]) : (this.outputComponent = 1, this.variableComponents = [1, 1]), this.type = "nonshared", this.shaderKey = `binary_${e}_${this.variableComponents}`, this.workgroupSize = [128, 1, 1]; @@ -28810,8 +27180,7 @@ var Ii = class { } } `; - } else - e = ` + } else e = ` ${o} ${G("index")} { if (index < uniforms.size) { @@ -28871,11 +27240,10 @@ function et({ opType: r15, cpuKernelImpl: e, supportsComplex: t10 = false, dtype 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), d, f; - if (r15 !== fe.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 }, S = { dataId: b.dataId, dtype: b.dtype, shape: i.shape }, k = new Ii(r15, a.shape, i.shape); - return p.runWebGPUProgram(k, [C, S], dt(x.dtype, b.dtype)); - }); + if (r15 !== fe.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 }, S = { dataId: b.dataId, dtype: b.dtype, shape: i.shape }, k = new Ii(r15, a.shape, i.shape); + return p.runWebGPUProgram(k, [C, S], dt(x.dtype, b.dtype)); + }); else { let g = new gm(fe.COMPLEX_MULTIPLY_REAL, a.shape, i.shape), x = new gm(fe.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"); @@ -28928,8 +27296,7 @@ var tx = class { }; function tue(r15) { let { inputs: e, backend: t10 } = r15, o = e; - if (o.length === 1) - return At({ inputs: { x: o[0] }, backend: t10 }); + if (o.length === 1) return At({ inputs: { x: o[0] }, backend: t10 }); let n = o.map((i) => i.dtype).reduce((i, p) => dt(i, p)), s = o.map((i) => i.shape), a = new tx(s); return t10.runWebGPUProgram(a, o, n); } @@ -28938,8 +27305,7 @@ var rx = 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]]; + for (let n = 0; n < o.length; n++) o[n] = e[t10[n]]; this.outputShape = o, this.dispatchLayout = { x: [0], y: [1] }, this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize, [1, 1, 1]), this.shaderKey = "transposeShared"; } getUserCode() { @@ -28971,8 +27337,7 @@ var ox = 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]]; + for (let n = 0; n < o.length; n++) o[n] = e[t10[n]]; this.outputShape = o, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize, [this.workPerThread, 1, 1]), this.newDim = t10, this.shaderKey = `transpose_${t10}`; } getUserCode() { @@ -28993,17 +27358,14 @@ var ox = class { }; function e0(r15) { let e = r15.length; - if (e > 6) - throw Error(`Transpose for rank ${e} is not yet supported`); + if (e > 6) throw Error(`Transpose for rank ${e} is not yet supported`); let t10 = new Array(e); - for (let o = 0; o < r15.length; o++) - t10[r15[o]] = `coords.${Oo(o)}`; + for (let o = 0; o < r15.length; o++) t10[r15[o]] = `coords.${Oo(o)}`; return t10.join(); } function xr(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { 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]]; + 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 = Hz(l, n.shape, n.dtype, s, p); return t10.makeTensorInfo(p, n.dtype, m); @@ -29125,11 +27487,8 @@ var Yc = class { getUserCode() { let e = this.workgroupSize[0], t10 = () => this.inputShape.length === 1 ? "uniforms.xShape" : `uniforms.xShape.${Oo(this.inputShape.length - 1)}`, o = () => { let n = ""; - if (this.outputShape.length === 1) - this.inputShape.length !== 1 && (n += "outputCoords,"); - else - for (let s = 0; s < this.outputShape.length; s++) - n += `outputCoords.${Oo(s)},`; + if (this.outputShape.length === 1) this.inputShape.length !== 1 && (n += "outputCoords,"); + else for (let s = 0; s < this.outputShape.length; s++) n += `outputCoords.${Oo(s)},`; return n; }; return this.type === "shared" ? ` @@ -29250,8 +27609,7 @@ var sx = class { }; var Ba = class { constructor(e, t10, o = false, n = false, s = false) { - if (this.variableNames = ["x"], this.uniforms = "strides : vec2, pads : vec2, dilations : vec2, convDims : vec2, filterDims : vec2,", this.workgroupSize = [128, 1, 1], this.size = true, t10 === "avg" && o) - throw new Error("Cannot compute positions for average pool."); + if (this.variableNames = ["x"], this.uniforms = "strides : vec2, pads : vec2, dilations : vec2, convDims : vec2, filterDims : vec2,", this.workgroupSize = [128, 1, 1], this.size = true, t10 === "avg" && o) throw new Error("Cannot compute positions for average pool."); this.outputShape = e.outShape, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.poolType = t10, this.computePositions = o, this.flattenPositions = n, this.includeBatchIndex = s, this.shaderKey = `pool2D_${t10}_${o}_${n}_${s}`; } getUserCode() { @@ -29304,8 +27662,7 @@ var Ba = class { }; var Iu = class { constructor(e, t10, o = false, n = false, s = false) { - if (this.variableNames = ["x"], this.uniforms = "strides : vec3, pads : vec3, convDims : vec3, filterDims : vec3,", this.workgroupSize = [128, 1, 1], this.size = true, t10 === "avg" && o) - throw new Error("Cannot compute positions for average pool."); + if (this.variableNames = ["x"], this.uniforms = "strides : vec3, pads : vec3, convDims : vec3, filterDims : vec3,", this.workgroupSize = [128, 1, 1], this.size = true, t10 === "avg" && o) throw new Error("Cannot compute positions for average pool."); this.outputShape = e.outShape, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.poolType = t10, this.computePositions = o, this.flattenPositions = n, this.includeBatchIndex = s, this.shaderKey = `pool3D_${t10}_${o}_${n}_${s}`; } getUserCode() { @@ -29375,8 +27732,7 @@ function r0(r15) { } var uV = { kernelName: Un, backendName: "webgpu", kernelFunc: r0 }; function ax(r15, e, t10, o) { - if (e.filterWidth === 1 && e.filterHeight === 1 && y.arraysEqual(e.inShape, e.outShape)) - return At({ inputs: { x: r15 }, backend: o }); + if (e.filterWidth === 1 && e.filterHeight === 1 && y.arraysEqual(e.inShape, e.outShape)) return At({ inputs: { x: r15 }, backend: o }); if (e.filterWidth === e.inWidth && e.filterHeight === e.inHeight && e.batchSize === 1 && e.padInfo.type === "VALID") { let a = r15.shape.length, i = pe({ inputs: { x: r15 }, backend: o, attrs: { shape: [r15.shape[a - 3] * r15.shape[a - 2], r15.shape[a - 1]] } }), p; t10 === "avg" ? p = r0({ inputs: { x: i }, backend: o, attrs: { axis: 0, keepDims: false } }) : (y.assert(t10 === "max", () => `Invalid pool type ${t10}`), p = t0({ inputs: { x: i }, backend: o, attrs: { reductionIndices: 0, keepDims: false } })); @@ -29538,10 +27894,8 @@ var px = class { }; var o0 = ["x", "y", "z", "w", "u", "v"]; function xue(r15) { - if (r15 === 1) - return "sourceLoc"; - if (r15 <= 6) - return o0.slice(0, r15).map((e) => `sourceLoc.${e}`).join(","); + if (r15 === 1) return "sourceLoc"; + if (r15 <= 6) return o0.slice(0, r15).map((e) => `sourceLoc.${e}`).join(","); throw Error(`Slicing for rank ${r15} is not yet supported`); } function Hs(r15) { @@ -29550,8 +27904,7 @@ function Hs(r15) { let l = t10.tensorMap.get(n.dataId), m = Bz(l.values, i, p, n.shape, n.dtype); return t10.makeTensorInfo(p, n.dtype, m); } - if (y.sizeFromShape(p) === 0) - return t10.makeTensorInfo(p, n.dtype, []); + if (y.sizeFromShape(p) === 0) return t10.makeTensorInfo(p, n.dtype, []); let u = new px(i, p), c = [{ type: "int32", data: i }]; return t10.runWebGPUProgram(u, [n], n.dtype, c); } @@ -29661,8 +28014,7 @@ function CV(r15, e) { function s0(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { dtype: s } = o; if (s === "complex64") { - if (n.dtype === "complex64") - return At({ inputs: { x: n }, backend: t10 }); + if (n.dtype === "complex64") return At({ inputs: { x: n }, backend: t10 }); let a = Gr(n.shape), i = s0({ inputs: { x: n }, backend: t10, attrs: { dtype: "float32" } }), p = xo({ inputs: { real: i, imag: a }, backend: t10 }); return a.dispose(), t10.disposeData(i.dataId), p; } @@ -29678,8 +28030,7 @@ function s0(r15) { let a = t10.tensorMap.get(n.dataId).values, [i, p, u] = dz(a, n.shape, n.dtype, s); return t10.makeTensorInfo(i, p, u); } - if (s === "int32") - return CV(n, t10); + if (s === "int32") return CV(n, t10); if (s === "bool") { let a = t10.makeTensorInfo([], "bool", y.getTypedArrayFromDType("bool", 1)), p = n0({ inputs: { a: n, b: a }, backend: t10 }); return t10.disposeData(a.dataId), p; @@ -29762,20 +28113,17 @@ var kV = { kernelName: Ai, backendName: "webgpu", kernelFunc: kue }; var fx = class { constructor(e) { this.uniforms = "", this.workPerThread = 1, this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = w.computeOutShape(e, 1), this.variableNames = e.map((t10, o) => `T${o}`), this.dispatchLayout = X(this.outputShape), this.dispatch = H(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,`; + for (let t10 = 0; t10 < this.offsetLength; t10++) this.uniforms += `offset${t10} : i32,`; this.shaderKey = "concat"; } getUserCode() { let e = []; if (this.offsetLength > 0) { e.push("if (yC < uniforms.offset0){ setOutputAtCoords(coords.x, coords.y, getT0(yR, yC)); }"); - for (let s = 1; s < this.offsetLength; s++) - e.push(`else if (yC < uniforms.offset${[s]}){ setOutputAtCoords(coords.x, coords.y, getT${s}(yR, yC - uniforms.offset${s - 1})); }`); + for (let s = 1; s < this.offsetLength; s++) e.push(`else if (yC < uniforms.offset${[s]}){ setOutputAtCoords(coords.x, coords.y, getT${s}(yR, yC - uniforms.offset${s - 1})); }`); let o = this.offsetLength, n = this.offsetLength - 1; e.push(`else { setOutputAtCoords(coords.x, coords.y, getT${o}(yR, yC - uniforms.offset${n})); }`); - } else - e.push("setOutputAtCoords(coords.x, coords.y, getT0(yR, yC));"); + } else e.push("setOutputAtCoords(coords.x, coords.y, getT0(yR, yC));"); return ` ${G("index")} { for(var i = 0; i < ${this.workPerThread}; i = i + 1) { @@ -29820,15 +28168,13 @@ function Zc(r15, e, t10) { f.push(Zc(x, e, t10)); } let h = Zc(f, e, t10); - for (let g of f) - t10.disposeData(g.dataId); + for (let g of f) t10.disposeData(g.dataId); return h; } let { tensors2D: a, outShape: i } = Nue(r15, e, t10), p = a.map((f) => f.shape), u = new fx(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; f < l.length; f++) - l[f] = l[f - 1] + p[f][1], c.push({ type: "int32", data: [l[f]] }); + 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((f) => t10.disposeData(f.dataId)); @@ -29843,8 +28189,7 @@ function a0(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { axis: n } = o, s = y.parseAxisParam(n, e[0].shape)[0], a = e.map((u) => u.shape); w.assertParamsConsistent(a, s); let i = w.computeOutShape(e.map((u) => u.shape), s); - if (y.sizeFromShape(i) === 0) - return t10.makeTensorInfo(i, e[0].dtype, []); + if (y.sizeFromShape(i) === 0) return t10.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: t10 }) : Zc(p, s, t10); } @@ -30045,8 +28390,7 @@ function _ue({ x: r15, filter: e, convInfo: t10, backend: o, bias: n = null, pre if (l) { let x = t10.inHeight * t10.inWidth * t10.inChannels; d = pe({ inputs: { x: r15 }, backend: o, attrs: { shape: [1, t10.batchSize, x] } }), f = pe({ inputs: { x: e }, backend: o, attrs: { shape: [1, x, t10.outChannels] } }); - } else - d = pe({ inputs: { x: r15 }, backend: o, attrs: { shape: p ? [t10.batchSize, t10.inHeight * t10.inWidth, t10.inChannels] : [t10.batchSize, t10.inChannels, t10.inHeight * t10.inWidth] } }), f = pe({ inputs: { x: e }, backend: o, attrs: { shape: [1, t10.inChannels, t10.outChannels] } }); + } else d = pe({ inputs: { x: r15 }, backend: o, attrs: { shape: p ? [t10.batchSize, t10.inHeight * t10.inWidth, t10.inChannels] : [t10.batchSize, t10.inChannels, t10.inHeight * t10.inWidth] } }), f = pe({ inputs: { x: e }, backend: o, attrs: { shape: [1, t10.inChannels, t10.outChannels] } }); if (m.push(d), m.push(f), s != null) { let x = yx(s.shape, p); x != null && (s = pe({ inputs: { x: s }, backend: o, attrs: { shape: x } }), m.push(s)); @@ -30057,8 +28401,7 @@ function _ue({ x: r15, filter: e, convInfo: t10, backend: o, bias: n = null, pre } let h = $p({ a: p ? d : f, b: p ? f : d, transposeA: u, transposeB: c, backend: o, bias: n, activation: i, preluActivationWeights: s, leakyreluAlpha: a }), g = pe({ inputs: { x: h }, backend: o, attrs: { shape: t10.outShape } }); m.push(h); - for (let x of m) - o.disposeData(x.dataId); + for (let x of m) o.disposeData(x.dataId); return g; } function Eue({ x: r15, filter: e, convInfo: t10, backend: o, bias: n = null, preluActivationWeights: s = null, leakyreluAlpha: a = 0, activation: i = null }) { @@ -30075,20 +28418,16 @@ function Eue({ x: r15, filter: e, convInfo: t10, backend: o, bias: n = null, pre } let B = $p({ a: C ? D : O, b: C ? O : D, transposeA: !C, transposeB: false, backend: o, bias: n, activation: i, preluActivationWeights: s, leakyreluAlpha: a }), z = pe({ inputs: { x: B }, backend: o, attrs: { shape: t10.outShape } }); P.push(B); - for (let U of P) - o.disposeData(U.dataId); + for (let U of P) o.disposeData(U.dataId); return z; } function bx({ x: r15, 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 = A().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 _ue({ x: r15, filter: e, convInfo: t10, backend: o, bias: n, activation: i, preluActivationWeights: s, leakyreluAlpha: a }); + 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 _ue({ x: r15, filter: e, convInfo: t10, backend: o, bias: n, activation: i, preluActivationWeights: s, leakyreluAlpha: a }); let d = A().getNumber("WEBGPU_THRESHOLD_TO_INCREASE_WORKGROUPS_FOR_MATMUL"), f = d > -1 ? d : o.thresholdToIncreaseWorkgroups, h = t10.batchSize * Math.ceil(t10.outHeight * t10.outWidth / 32) * Math.ceil(t10.outChannels / 32); - if (A().getBool("WEBGPU_CONV_SEPARATE_IM2COL_SHADER") || h <= f) - return Eue({ x: r15, filter: e, convInfo: t10, backend: o, bias: n, preluActivationWeights: s, leakyreluAlpha: a, activation: i }); + if (A().getBool("WEBGPU_CONV_SEPARATE_IM2COL_SHADER") || h <= f) return Eue({ x: r15, filter: e, convInfo: t10, backend: o, bias: n, preluActivationWeights: s, leakyreluAlpha: a, activation: i }); let g, x = [t10.padInfo.top, t10.padInfo.left], b = [{ type: "int32", data: [t10.filterHeight, t10.filterWidth] }, { type: "int32", data: [...x] }, { type: "int32", data: [t10.strideHeight, t10.strideWidth] }, { type: "int32", data: [t10.dilationHeight, t10.dilationWidth] }]; - if (m) - g = new gx(t10, p, i, u); + if (m) g = new gx(t10, p, i, u); else { let _ = c ? t10.outHeight * t10.outWidth : t10.outChannels, $ = c ? t10.outChannels : t10.outHeight * t10.outWidth, R = t10.filterHeight * t10.filterWidth * t10.inChannels; b.push({ type: "int32", data: [_] }, { type: "int32", data: [$] }, { type: "int32", data: [R] }); @@ -30098,8 +28437,7 @@ function bx({ x: r15, filter: e, convInfo: t10, backend: o, bias: n = null, prel let C = [], S = [r15, e]; p && (!c && n.shape.length === 1 && (n = pe({ inputs: { x: n }, backend: o, attrs: { shape: [n.shape[0], 1, 1] } }), C.push(n)), S.push(n)), u && (!c && s.shape.length === 1 && (s = pe({ inputs: { x: s }, backend: o, attrs: { shape: [s.shape[0], 1, 1] } }), C.push(s)), S.push(s)), i === "leakyrelu" && (b.push({ type: "float32", data: [a] }), g.uniforms += " alpha : f32,"); let k = o.runWebGPUProgram(g, S, r15.dtype, b); - for (let _ of C) - o.disposeData(_.dataId); + for (let _ of C) o.disposeData(_.dataId); return k; } function $ue(r15) { @@ -30511,8 +28849,7 @@ var vx = class { }; function Aue(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { dy: n, filter: s } = e, { inputShape: a, strides: i, pad: p, dataFormat: u, dimRoundingMode: c } = o, l = w.convertConv2DDataFormat(u), m = w.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 (A().getBool("WEBGPU_USE_NAIVE_CONV2D_TRANSPOSE") || m.dataFormat !== "channelsLast") - f = new Cx(m); + if (A().getBool("WEBGPU_USE_NAIVE_CONV2D_TRANSPOSE") || m.dataFormat !== "channelsLast") f = new Cx(m); else { f = new vx(m); let h = m.inHeight * m.inWidth, g = m.inChannels, x = m.filterHeight * m.filterWidth * m.outChannels; @@ -30732,33 +29069,24 @@ var xm = class { } }; function MV(r15, e, t10) { - if (r15 === 1) - return `${e}`; - if (r15 === 2) - return `${e}.x, ${e}.y`; - if (r15 === 3) - return `${e}.x, ${e}.y, ${e}.z`; - if (r15 === 4) - return `${e}.x, ${e}.y, ${e}.z, ${e}.w`; + if (r15 === 1) return `${e}`; + if (r15 === 2) return `${e}.x, ${e}.y`; + if (r15 === 3) return `${e}.x, ${e}.y, ${e}.z`; + if (r15 === 4) return `${e}.x, ${e}.y, ${e}.z, ${e}.w`; throw Error(`Cumulative ${t10} for rank ${r15} is not yet supported`); } function LV(r15, e, t10) { - if (r15 === 1) - return `${e}`; - if (r15 === 2) - return `${e}.y`; - if (r15 === 3) - return `${e}.z`; - if (r15 === 4) - return `${e}.w`; + if (r15 === 1) return `${e}`; + if (r15 === 2) return `${e}.y`; + if (r15 === 3) return `${e}.z`; + if (r15 === 4) return `${e}.w`; throw Error(`Cumulative ${t10} for rank ${r15} is not yet supported`); } function Tx(r15, e, t10, o, n, s) { let a = e.shape.length, i = w.getAxesPermutation([o], a), p = e; i != null && (p = xr({ inputs: { x: e }, backend: t10, attrs: { perm: i } })); let u = w.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}`); + 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 = At({ inputs: { x: p }, backend: t10 }); for (let m = 0; m <= Math.ceil(Math.log2(c)) - 1; m++) { let d = new xm(r15, p.shape, false, s), f = l, h = [{ type: "float32", data: [m] }]; @@ -31230,8 +29558,7 @@ function jue(r15) { var qV = { kernelName: dn, backendName: "webgpu", kernelFunc: jue }; var Fx = class { constructor(e, t10) { - if (this.variableNames = ["x", "w", "dy"], this.uniforms = "filterDims: vec2, pads: vec2, strides: vec2, dilations: vec2, dySize: i32,", this.workgroupSize = [64, 1, 1], this.atomic = true, this.outputShape = e.inShape, this.dispatchLayout = X(e.outShape), this.dispatch = H(this.dispatchLayout, e.outShape, this.workgroupSize), t10 !== "float32" && t10 !== "int32") - throw new Error(`Dilation2DBackpropInput only supports float32 and int32 + if (this.variableNames = ["x", "w", "dy"], this.uniforms = "filterDims: vec2, pads: vec2, strides: vec2, dilations: vec2, dySize: i32,", this.workgroupSize = [64, 1, 1], this.atomic = true, this.outputShape = e.inShape, this.dispatchLayout = X(e.outShape), this.dispatch = H(this.dispatchLayout, e.outShape, this.workgroupSize), t10 !== "float32" && t10 !== "int32") throw new Error(`Dilation2DBackpropInput only supports float32 and int32 types, does not support ${t10} type.`); this.type = t10, this.shaderKey = "dilation2DBackpropInput"; } @@ -31284,8 +29611,7 @@ var Fx = class { }; var Px = class { constructor(e, t10, o) { - if (this.variableNames = ["x", "w", "dy"], this.uniforms = "filterDims: vec2, pads: vec2, strides: vec2, dilations: vec2, dySize: i32,", this.workgroupSize = [64, 1, 1], this.atomic = true, this.outputShape = e.filterShape, this.dispatchLayout = X(e.outShape), this.dispatch = H(this.dispatchLayout, e.outShape, this.workgroupSize), o !== "float32" && o !== "int32") - throw new Error(`Dilation2DBackpropFilter only supports float32 and int32 + if (this.variableNames = ["x", "w", "dy"], this.uniforms = "filterDims: vec2, pads: vec2, strides: vec2, dilations: vec2, dySize: i32,", this.workgroupSize = [64, 1, 1], this.atomic = true, this.outputShape = e.filterShape, this.dispatchLayout = X(e.outShape), this.dispatch = H(this.dispatchLayout, e.outShape, this.workgroupSize), o !== "float32" && o !== "int32") throw new Error(`Dilation2DBackpropFilter only supports float32 and int32 types, does not support ${o} type.`); this.type = o, this.shaderKey = "dilation2DBackpropFilter"; } @@ -31389,8 +29715,7 @@ function Que(r15) { let k = [{ type: "uint32", data: [x] }, { type: "float32", data: [c] }]; if (t10.runWebGPUProgram(d, [n], b, k, C), g) { let _ = s.getContext("2d"); - if (!_) - throw new Error("Please make sure this canvas has only been used for 2d or webgpu context!"); + if (!_) throw new Error("Please make sure this canvas has only been used for 2d or webgpu context!"); _.drawImage(g, 0, 0); } return t10.disposeData(C.dataId), n; @@ -31412,14 +29737,12 @@ function Zue(r15) { let { permutationIndices: x, expandDims: b } = w.getEinsumPermutation(d, p[g]), C; w.isIdentityPermutation(x) ? C = s[g] : (C = xr({ inputs: { x: s[g] }, backend: t10, attrs: { perm: x } }), f.push(C)); let S = C.shape.slice(); - for (let k = 0; k < b.length; ++k) - S.splice(b[k], 0, 1); + for (let k = 0; k < b.length; ++k) S.splice(b[k], 0, 1); y.arraysEqual(C.shape, S) || (C = pe({ inputs: { x: C }, backend: t10, attrs: { shape: S } }), f.push(C)), m === null ? m = C : (m = i0({ inputs: { a: C, b: m }, backend: t10 }), f.push(m)); } h < l - 1 && (u[h] >= 0 && (m = u0({ inputs: { x: m }, backend: t10, attrs: { axis: u[h] - (a.length - d), keepDims: false } }), f.push(m)), d--); } - for (let h of f) - h !== m && t10.disposeData(h.dataId); + for (let h of f) h !== m && t10.disposeData(h.dataId); return m; } var JV = { kernelName: Bi, backendName: "webgpu", kernelFunc: Zue }; @@ -31552,13 +29875,11 @@ var tl; var p0 = A().getBool("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU"); function upe(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { pixels: n } = e, { numChannels: s } = o; - if (n == null) - throw new Error("pixels passed to tf.browser.fromPixels() can not be null"); + 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 = A().getBool("WEBGPU_IMPORT_EXTERNAL_TEXTURE") && a, f = a || i; if (u || p || f) { let b; - if (d) - b = t10.device.importExternalTexture({ source: n }); + if (d) b = t10.device.importExternalTexture({ source: n }); else { if (f) { let L = A().getBool("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU"); @@ -31576,8 +29897,7 @@ function upe(r15) { if (s != null && s !== 4) { g = new Uint8Array(n.width * n.height * s); let b = h.length, C = 0; - for (let S = 0; S < b; S++) - S % 4 < s && (g[C++] = h[S]); + for (let S = 0; S < b; S++) S % 4 < s && (g[C++] = h[S]); } let x = t10.makeTensorInfo(m, "int32", new Int32Array(g)); return t10.uploadToGPU(x.dataId), x; @@ -31681,8 +30001,7 @@ var Ux = class { }; function mpe(r15) { let e = ["resRC.x", "resRC.y", "resRC.z", "resRC.w"], t10 = []; - for (let o = 0; o < r15.length; o++) - o === 2 ? t10.push("indexZ") : t10.push(`${e[o]}`); + for (let o = 0; o < r15.length; o++) o === 2 ? t10.push("indexZ") : t10.push(`${e[o]}`); return t10.join(); } function c0(r15) { @@ -32271,25 +30590,21 @@ function bm(r15) { if (o.dtype === "complex64") { let n = vi({ inputs: { input: o }, backend: t10 }), s = bm({ inputs: { x: n }, backend: t10 }), a = Rp({ inputs: { input: o }, backend: t10 }), i = bm({ inputs: { x: a }, backend: t10 }), p = xo({ 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; - } else - return vt({ attrs: { shape: o.shape, dtype: o.dtype, value: o.dtype === "string" ? "" : 0 }, backend: t10 }); + } else return vt({ attrs: { shape: o.shape, dtype: o.dtype, value: o.dtype === "string" ? "" : 0 }, backend: t10 }); } var QW = { kernelName: Sa, backendName: "webgpu", kernelFunc: bm }; function ZW(r15) { let { inputs: e, backend: t10 } = r15, { x: o } = e; - if (o.dtype === "string") - throw new Error("onesLike is not supported under string dtype"); + if (o.dtype === "string") throw new Error("onesLike is not supported under string dtype"); if (o.dtype === "complex64") { let n = vi({ inputs: { input: o }, backend: t10 }), s = ZW({ inputs: { x: n }, backend: t10 }), a = Rp({ inputs: { input: o }, backend: t10 }), i = bm({ inputs: { x: a }, backend: t10 }), p = xo({ 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; - } else - return vt({ attrs: { shape: o.shape, dtype: o.dtype, value: 1 }, backend: t10 }); + } else return vt({ attrs: { shape: o.shape, dtype: o.dtype, value: 1 }, backend: t10 }); } var JW = { kernelName: ca, backendName: "webgpu", kernelFunc: ZW }; function Gpe(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { axis: n } = o; - if (e.length === 1) - return Mx({ inputs: { input: e[0] }, backend: t10, attrs: { dim: n } }); + if (e.length === 1) return Mx({ inputs: { input: e[0] }, backend: t10, 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"); @@ -32333,8 +30648,7 @@ var ey = class { }; var Hpe = (r15) => { let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { paddings: s, constantValue: a } = o; - if (s.every((u) => y.arraysEqual(u, [0, 0]))) - return At({ inputs: { x: n }, backend: t10 }); + if (s.every((u) => y.arraysEqual(u, [0, 0]))) return At({ inputs: { x: n }, backend: t10 }); if (y.sizeFromShape(n.shape) === 0) { let u = s.map((c, l) => c[0] + n.shape[l] + c[1]); return vt({ backend: t10, attrs: { shape: u, value: a, dtype: n.dtype } }); @@ -32672,8 +30986,7 @@ var sy = class { }; function nce(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { dims: s } = o, a = n.shape.length; - if (a === 0) - return At({ inputs: { x: n }, backend: t10 }); + if (a === 0) return At({ inputs: { x: n }, backend: t10 }); let i = n.shape, p = [1, 1, 1, 1]; i.forEach((g, x) => { let b = x + 4 - a; @@ -32775,8 +31088,7 @@ var za = class { }; function ice(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { indices: n, updates: s } = e, { shape: a } = o, { sliceRank: i, numUpdates: p, sliceSize: u, strides: c, outputSize: l } = w.calculateShapes(s, n, a), m = [l / u, u]; - if (l === 0) - return t10.makeTensorInfo(a, n.dtype); + if (l === 0) return t10.makeTensorInfo(a, n.dtype); let d = pe({ inputs: { x: n }, backend: t10, attrs: { shape: [p, i] } }), f = pe({ inputs: { x: s }, backend: t10, attrs: { shape: [p, u] } }), h = f.dtype, g = vt({ backend: t10, 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 za(f.shape, i, d.shape.length, f.shape.length, c, m, h), S = t10.runWebGPUProgram(C, [f, d], h, b, g), k = pe({ inputs: { x: S }, backend: t10, attrs: { shape: a } }); return t10.disposeData(d.dataId), t10.disposeData(f.dataId), t10.disposeData(S.dataId), k; } @@ -32822,14 +31134,11 @@ var uy = class { } getUserCode() { let e, t10; - if (this.rank > 4) - throw Error(`Where for rank ${this.rank} is not yet supported`); - if (this.rank === 1) - t10 = "resRC", e = "resRC"; + if (this.rank > 4) throw Error(`Where for rank ${this.rank} is not yet supported`); + if (this.rank === 1) t10 = "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]}`); + 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(); } return ` @@ -32868,8 +31177,7 @@ var py = class { constructor(e, t10, o, n, s, a) { this.variableNames = ["x"], this.outputShape = [], this.uniforms = "", this.workgroupSize = [64, 1, 1], this.size = true; let i = new Array(n.length); - for (let p = 0; p < i.length; p++) - i[p] = n[s[p]]; + for (let p = 0; p < i.length; p++) i[p] = n[s[p]]; this.outputShape = i, this.newDim = s, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.xShape = e, this.paddedXShape = t10, this.uniforms += `reshapedPaddedXShape : ${ft(n.length)}, paddedXShapeStrides : ${ft(a)}, `, o.map((p, u) => { this.uniforms += ` pad${u} : vec2,`; }), this.shaderKey = `spaceToBatchND_${s}`; @@ -32894,8 +31202,7 @@ var gce = (r15) => { y.assert(n.shape.length <= 4, () => "spaceToBatchND for rank > 4 with a WebGPU backend not implemented yet"); let i = s.reduce((b, C) => b * C), p = [[0, 0]]; p.push(...a); - for (let b = 1 + s.length; b < n.shape.length; ++b) - p.push([0, 0]); + for (let b = 1 + s.length; b < n.shape.length; ++b) p.push([0, 0]); let u = p.map((b, C) => b[0] + n.shape[C] + b[1]), c = w.getReshaped(u, s, i, false), l = w.getPermuted(c.length, s.length, false), m = w.getReshapedPermuted(u, s, i, false), d = y.computeStrides(u), f = new py(n.shape, u, p, c, l, d.length), h = [{ type: "int32", data: c }, { type: "int32", data: d }]; p.map((b) => h.push({ type: "int32", data: [b[0], b[1]] })); let g = t10.runWebGPUProgram(f, [n], n.dtype, h), x = pe({ inputs: { x: g }, backend: t10, attrs: { shape: m } }); @@ -32962,8 +31269,7 @@ function dy(r15, e, t10, o = false, n) { let f = p * a, h = vt({ backend: n, attrs: { shape: d, value: 0, dtype: i } }); m = new cy(d, f, i); let g = [{ type: "int32", data: [a] }, { type: "int32", data: [f] }], x = n.runWebGPUProgram(m, [r15, e, t10], i, g, h); - if (o) - return x; + if (o) return x; let b = vt({ backend: n, attrs: { shape: [l], value: 0, dtype: "int32" } }); m = new ly(l, t10.shape); let C = n.runWebGPUProgram(m, [t10], "int32", null, b), S = vt({ backend: n, attrs: { shape: d, value: 0, dtype: i } }); @@ -32985,8 +31291,7 @@ var fy = class { constructor(e, t10) { 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]; + for (let n = 0; n < o.length; n++) o[n] = e[n] * t10[n]; this.outputShape = o, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.rank = this.outputShape.length, this.shaderKey = "tile"; } getUserCode() { @@ -33002,13 +31307,10 @@ var fy = class { } }; function bce(r15, e = "") { - if (r15 >= 5) - throw Error(`Tile for rank ${r15} is not yet supported`); - if (r15 === 1) - return `(resRC % ${e}aShape)`; + if (r15 >= 5) throw Error(`Tile for rank ${r15} is not yet supported`); + if (r15 === 1) return `(resRC % ${e}aShape)`; let t10 = ["resRC.x", "resRC.y", "resRC.z", "resRC.w"], o = []; - for (let n = 0; n < r15; n++) - o.push(`(${t10[n]} % ${e}aShape[${n}])`); + for (let n = 0; n < r15; n++) o.push(`(${t10[n]} % ${e}aShape[${n}])`); return o.join(); } function Cm(r15) { @@ -33082,8 +31384,7 @@ var hy = class { } getUserCode() { let e = this.outputShape.length, t10 = ""; - if (e === 1) - t10 = "coords * uniforms.strides + uniforms.begin"; + if (e === 1) t10 = "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(","); @@ -33100,8 +31401,7 @@ var hy = class { }; function kce(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { 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: S } = pt.sliceInfo(n.shape, s, a, i, p, u, c, l, m), k; - if (h) - k = pe({ inputs: { x: n }, backend: t10, attrs: { shape: f } }); + if (h) k = pe({ inputs: { x: n }, backend: t10, 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 _ = pt.computeOutShape(b, C, S), $ = Hs({ inputs: { x: n }, backend: t10, attrs: { begin: b, size: _ } }); @@ -33129,8 +31429,7 @@ var Ece = ye({ opType: Z.TANH }); var VU = { kernelName: Es, backendName: "webgpu", kernelFunc: Ece }; function $ce(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { tensor: n, indices: s, updates: a } = e, {} = o, { sliceRank: i, numUpdates: p, sliceSize: u, strides: c, outputSize: l } = w.calculateShapes(a, s, n.shape), m = [l / u, u]; - if (l === 0) - return t10.makeTensorInfo(n.shape, s.dtype); + if (l === 0) return t10.makeTensorInfo(n.shape, s.dtype); let d = [], f = pe({ inputs: { x: s }, backend: t10, attrs: { shape: [p, i] } }); d.push(f); let h = pe({ inputs: { x: a }, backend: t10, attrs: { shape: [p, u] } }); @@ -33291,8 +31590,7 @@ function rl(r15, e) { } function UU(r15) { let e = 1; - for (; e < r15; ) - e *= 2; + for (; e < r15; ) e *= 2; return e; } function Rce(r15) { @@ -33301,25 +31599,21 @@ function Rce(r15) { let k = t10.readSync(n.dataId), [_, $] = Gz(k, i, n.dtype, s, a); return [t10.makeTensorInfo(_.shape, _.dtype, _.values), t10.makeTensorInfo($.shape, $.dtype, $.values)]; } - if (s === 0) - return i[i.length - 1] = 0, [t10.makeTensorInfo(i, n.dtype, []), t10.makeTensorInfo(i, "int32", [])]; - if (p === 1) - return [n, vt({ attrs: { shape: i, dtype: "int32", value: 0 }, backend: t10 })]; + if (s === 0) return i[i.length - 1] = 0, [t10.makeTensorInfo(i, n.dtype, []), t10.makeTensorInfo(i, "int32", [])]; + if (p === 1) return [n, vt({ attrs: { shape: i, dtype: "int32", value: 0 }, backend: t10 })]; let c = y.sizeFromShape(i) / p, l = pe({ inputs: { x: n }, attrs: { shape: [c, p] }, backend: t10 }), m = UU(s), d = UU(p), f = null, h = () => f === null ? [l, l] : [l, f], g = (k, _, $) => { let R = h(), D = new gy($), O = [{ 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 = t10.runWebGPUProgram(D, R, "int32", O), rl(t10, M); }; for (let k = 1; k < m; k *= 2) { let _ = k * 2; - for (let $ = k; $ >= 1; $ /= 2) - g(_, $, [c, d]); + for (let $ = k; $ >= 1; $ /= 2) g(_, $, [c, d]); } for (let k = d; k > m; k /= 2) { let _ = h(), $ = new xy([c, k / 2]), D = [{ type: "int32", data: [p] }, { type: "int32", data: [f === null ? 1 : 0] }, { type: "int32", data: [m] }], P = f; f = t10.runWebGPUProgram($, _, "int32", D), rl(t10, P); let O = m / 2, M = O * 2; - for (let L = O; L >= 1; L /= 2) - g(M, L, f.shape); + for (let L = O; L >= 1; L /= 2) g(M, L, f.shape); } let x = f; f = Hs({ inputs: { x: f }, backend: t10, attrs: { begin: 0, size: [c, s] } }), rl(t10, x); @@ -33482,8 +31776,7 @@ function Ace(r15) { let { inputs: e, backend: t10, attrs: o } = r15, { 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]); + for (let h = 0; h < i; h++) h !== s && (u[c++] = a.shape[h]); let l = [], m = new Array(i).fill(0), d = a.shape.slice(); d[s] = 1; let f = new Array(p); @@ -33497,8 +31790,7 @@ function Ace(r15) { var KU = { kernelName: wa, backendName: "webgpu", kernelFunc: Ace }; var by = class { constructor(e, t10, o) { - if (this.outputShape = [], this.variableNames = ["x", "segmentIds"], this.uniforms = "numSegments : i32, xSize: i32,", this.workgroupSize = [64, 1, 1], this.atomic = true, this.outputShape = t10, this.dispatchLayout = X(e), this.dispatch = H(this.dispatchLayout, e, this.workgroupSize), o !== "float32" && o !== "int32") - throw new Error(`UnsortedSegmentSum only supports float32 and int32 + if (this.outputShape = [], this.variableNames = ["x", "segmentIds"], this.uniforms = "numSegments : i32, xSize: i32,", this.workgroupSize = [64, 1, 1], this.atomic = true, this.outputShape = t10, this.dispatchLayout = X(e), this.dispatch = H(this.dispatchLayout, e, this.workgroupSize), o !== "float32" && o !== "int32") throw new Error(`UnsortedSegmentSum only supports float32 and int32 types, does not support ${o} type.`); this.type = o, this.shaderKey = "unsortedSegmentSum"; } @@ -33539,35 +31831,31 @@ function Fce(r15) { } var qU = { kernelName: Qi, backendName: "webgpu", kernelFunc: Fce }; var Pce = [pz, Kz, qz, jz, Xz, Yz, Zz, Jz, eV, tV, rV, oV, nV, sV, aV, pV, cV, lV, mV, dV, hV, gV, xV, wV, SV, IV, lz, kV, TV, _V, EV, $V, RV, DV, AV, FV, PV, OV, BV, zV, VV, WV, GV, HV, UV, KV, qV, jV, XV, YV, JV, eW, tW, rW, oW, nW, sW, aW, iW, iz, uW, lW, pW, cW, mW, dW, fW, hW, gW, xW, yW, cz, bW, NV, CW, wW, SW, IW, vW, kW, NW, _W, TW, EW, $W, RW, AW, FW, iV, PW, OW, BW, MW, LW, zW, uV, VW, WW, UW, GW, KW, QV, qW, jW, XW, yV, YW, JW, eU, tU, rU, oU, nU, sU, bV, aU, iU, uU, pU, uz, cU, lU, mU, dU, fU, hU, gU, xU, yU, bU, CU, wU, SU, IU, vU, kU, fV, OU, MU, LU, HW, NU, TU, _U, EU, RU, DU, AU, FU, PU, BU, ZV, zU, VU, WU, $U, GU, HU, Qz, KU, qU, QW]; -for (let r15 of Pce) - ti(r15); -var jU = "4.17.0"; -var Oce = "4.17.0"; -var Mce = "4.17.0"; -var Lce = "4.17.0"; -var Bce = "4.17.0"; -var zce = "4.17.0"; +for (let r15 of Pce) ti(r15); +var jU = "4.21.0"; +var Oce = "4.21.0"; +var Mce = "4.21.0"; +var Lce = "4.21.0"; +var Bce = "4.21.0"; +var zce = "4.21.0"; var Vce = { tfjs: jU, "tfjs-core": jU, "tfjs-converter": Oce, "tfjs-backend-cpu": Mce, "tfjs-backend-webgl": Lce, "tfjs-backend-wasm": Bce, "tfjs-backend-webgpu": zce }; -var E7t = void 0; +var EQt = void 0; // src/util/util.ts function log(...msg) { const dt2 = /* @__PURE__ */ new Date(); const ts2 = `${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(ts2, "Human:", ...msg); + if (msg) console.log(ts2, "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}`); + 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(); + if (typeof performance !== "undefined") return performance.now(); return parseInt((Number(process.hrtime.bigint()) / 1e3 / 1e3).toString()); }; function validate(defaults, config3, parent = "config", msgs = []) { @@ -33576,15 +31864,12 @@ function validate(defaults, config3, parent = "config", msgs = []) { 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]}` }); + 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 (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); + if (config3.debug && parent === "config" && msgs.length > 0) log("invalid configuration", msgs); return msgs; } function mergeDeep(...objects) { @@ -33593,12 +31878,9 @@ function mergeDeep(...objects) { 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; + 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; }, {}); @@ -33874,8 +32156,7 @@ var GLProgram = class { 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 (!vertexShader || !fragmentShader) return; if (!this.id) { log("filter: could not create webgl program"); return; @@ -33889,12 +32170,10 @@ var GLProgram = class { } 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); + 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); + for (const u in this.uniform) this.uniform[u] = this.gl.getUniformLocation(this.id, u); } }; function GLImageFilter() { @@ -33916,8 +32195,7 @@ function GLImageFilter() { } this.gl = gl2; function resize(width, height) { - if (width === fxcanvas.width && height === fxcanvas.height) - return; + if (width === fxcanvas.width && height === fxcanvas.height) return; fxcanvas.width = width; fxcanvas.height = height; if (!vertexBuffer) { @@ -33952,15 +32230,12 @@ function GLImageFilter() { return tempFramebuffers[index2]; } function draw(flags = 0) { - if (!currentProgram) - return; + if (!currentProgram) return; let source = null; let target = null; let flipY = false; - if (drawCount === 0) - source = sourceTexture; - else - source = getTempFramebuffer(currentFramebufferIndex).texture || null; + if (drawCount === 0) source = sourceTexture; + else source = getTempFramebuffer(currentFramebufferIndex).texture || null; drawCount++; if (lastInChain && !(flags & DRAW.INTERMEDIATE)) { target = null; @@ -34003,8 +32278,7 @@ function GLImageFilter() { 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; + if (!program) return; gl2.uniform1fv(program.uniform["m"], m); draw(); }, @@ -34318,8 +32592,7 @@ function GLImageFilter() { const pixelSizeX = 1 / fxcanvas.width; const pixelSizeY = 1 / fxcanvas.height; const program = compileShader(convolution); - if (!program) - return; + if (!program) return; gl2.uniform1fv(program.uniform["m"], m); gl2.uniform2f(program.uniform["px"], pixelSizeX, pixelSizeY); draw(); @@ -34395,8 +32668,7 @@ function GLImageFilter() { const blurSizeX = size2 / 7 / fxcanvas.width; const blurSizeY = size2 / 7 / fxcanvas.height; const program = compileShader(blur); - if (!program) - return; + if (!program) return; gl2.uniform2f(program.uniform["px"], 0, blurSizeY); draw(DRAW.INTERMEDIATE); gl2.uniform2f(program.uniform["px"], blurSizeX, 0); @@ -34406,8 +32678,7 @@ function GLImageFilter() { const blurSizeX = size2 / fxcanvas.width; const blurSizeY = size2 / fxcanvas.height; const program = compileShader(pixelate); - if (!program) - return; + if (!program) return; gl2.uniform2f(program.uniform["size"], blurSizeX, blurSizeY); draw(); } @@ -34426,8 +32697,7 @@ function GLImageFilter() { this.apply = function(image) { resize(image.width, image.height); drawCount = 0; - if (!sourceTexture) - sourceTexture = gl2.createTexture(); + if (!sourceTexture) sourceTexture = gl2.createTexture(); gl2.bindTexture(gl2.TEXTURE_2D, sourceTexture); gl2.texParameteri(gl2.TEXTURE_2D, gl2.TEXTURE_WRAP_S, gl2.CLAMP_TO_EDGE); gl2.texParameteri(gl2.TEXTURE_2D, gl2.TEXTURE_WRAP_T, gl2.CLAMP_TO_EDGE); @@ -34494,8 +32764,7 @@ 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"); + 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") { @@ -34503,21 +32772,16 @@ function canvas(width, height) { c.width = width; c.height = height; } else if (typeof navigator !== "undefined" && navigator.product === "ReactNative") { - if (typeof env.Canvas !== "undefined") - c = new env.Canvas(width, height); - else if (typeof globalThis.Canvas !== "undefined") - c = new globalThis.Canvas(width, height); - else - throw new Error("canvas error: attempted to use canvas in react-native without canvas support installed"); + if (typeof env.Canvas !== "undefined") c = new env.Canvas(width, height); + else if (typeof globalThis.Canvas !== "undefined") c = new globalThis.Canvas(width, height); + else throw new Error("canvas error: attempted to use canvas in react-native without canvas support installed"); } else { throw new Error("canvas error: attempted to run in browser but DOM is not defined"); } } } else { - if (typeof env.Canvas !== "undefined") - c = new env.Canvas(width, height); - else if (typeof globalThis.Canvas !== "undefined") - c = new globalThis.Canvas(width, height); + 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; } @@ -34530,8 +32794,7 @@ function copy(input, output) { async function process2(input, config3, getTensor = true) { var _a, _b, _c2; if (!input) { - if (config3.debug) - log("input error: input is missing"); + if (config3.debug) log("input error: input is missing"); return { tensor: null, canvas: null }; } if (!(input instanceof mt) && !(typeof Image !== "undefined" && input instanceof Image) && !(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)) { @@ -34539,10 +32802,8 @@ async function process2(input, config3, getTensor = true) { } if (input instanceof mt) { let tensor2 = 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["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) { tensor2 = Ms(input, 0); @@ -34558,8 +32819,7 @@ async function process2(input, config3, getTensor = true) { tensor2 = z1(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 == 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 = Ue(tensor2, "float32"); Ot(tensor2); @@ -34568,15 +32828,13 @@ async function process2(input, config3, getTensor = true) { return { tensor: tensor2, canvas: config3.filter.return ? outCanvas : null }; } if (typeof input["readyState"] !== "undefined" && input.readyState <= 2) { - if (config3.debug) - log("input stream is not ready"); + 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"); + if (config3.debug) log("cannot determine input dimensions"); return { tensor: null, canvas: inCanvas }; } let targetWidth = originalWidth; @@ -34589,18 +32847,12 @@ async function process2(input, config3, getTensor = true) { 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); + 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); @@ -34614,63 +32866,41 @@ async function process2(input, config3, getTensor = true) { 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 (!outCanvas || inCanvas.width !== outCanvas.width || inCanvas.height !== outCanvas.height) outCanvas = canvas(inCanvas.width, inCanvas.height); if (config3.filter.enabled && env.webgl.supported) { - if (!fx2) - fx2 = env.browser ? new GLImageFilter() : null; + if (!fx2) fx2 = env.browser ? new GLImageFilter() : null; env.filter = !!fx2; if (!(fx2 == null ? void 0 : fx2.add)) { - if (config3.debug) - log("input process error: cannot initialize filters"); + if (config3.debug) log("input process error: cannot initialize filters"); env.webgl.supported = false; config3.filter.enabled = false; copy(inCanvas, outCanvas); } else { fx2.reset(); - if (config3.filter.brightness !== 0) - fx2.add("brightness", config3.filter.brightness); - if (config3.filter.contrast !== 0) - fx2.add("contrast", config3.filter.contrast); - if (config3.filter.sharpness !== 0) - fx2.add("sharpen", config3.filter.sharpness); - if (config3.filter.blur !== 0) - fx2.add("blur", config3.filter.blur); - if (config3.filter.saturation !== 0) - fx2.add("saturation", config3.filter.saturation); - if (config3.filter.hue !== 0) - fx2.add("hue", config3.filter.hue); - if (config3.filter.negative) - fx2.add("negative"); - if (config3.filter.sepia) - fx2.add("sepia"); - if (config3.filter.vintage) - fx2.add("brownie"); - if (config3.filter.sepia) - fx2.add("sepia"); - if (config3.filter.kodachrome) - fx2.add("kodachrome"); - if (config3.filter.technicolor) - fx2.add("technicolor"); - if (config3.filter.polaroid) - fx2.add("polaroid"); - if (config3.filter.pixelate !== 0) - fx2.add("pixelate", config3.filter.pixelate); - if (((_c2 = fx2.get()) == null ? void 0 : _c2.length) > 1) - outCanvas = fx2.apply(inCanvas); - else - outCanvas = fx2.draw(inCanvas); + if (config3.filter.brightness !== 0) fx2.add("brightness", config3.filter.brightness); + if (config3.filter.contrast !== 0) fx2.add("contrast", config3.filter.contrast); + if (config3.filter.sharpness !== 0) fx2.add("sharpen", config3.filter.sharpness); + if (config3.filter.blur !== 0) fx2.add("blur", config3.filter.blur); + if (config3.filter.saturation !== 0) fx2.add("saturation", config3.filter.saturation); + if (config3.filter.hue !== 0) fx2.add("hue", config3.filter.hue); + if (config3.filter.negative) fx2.add("negative"); + if (config3.filter.sepia) fx2.add("sepia"); + if (config3.filter.vintage) fx2.add("brownie"); + if (config3.filter.sepia) fx2.add("sepia"); + if (config3.filter.kodachrome) fx2.add("kodachrome"); + if (config3.filter.technicolor) fx2.add("technicolor"); + if (config3.filter.polaroid) fx2.add("polaroid"); + if (config3.filter.pixelate !== 0) fx2.add("pixelate", config3.filter.pixelate); + if (((_c2 = fx2.get()) == null ? void 0 : _c2.length) > 1) outCanvas = fx2.apply(inCanvas); + else outCanvas = fx2.draw(inCanvas); } } else { copy(inCanvas, outCanvas); - if (fx2) - fx2 = null; + if (fx2) fx2 = null; env.filter = !!fx2; } - if (!getTensor) - return { tensor: null, canvas: outCanvas }; - if (!outCanvas) - throw new Error("canvas error: cannot create output"); + 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) { @@ -34682,8 +32912,7 @@ async function process2(input, config3, getTensor = true) { pixels = ar(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 (!tmpCanvas || outCanvas.width !== tmpCanvas.width || outCanvas.height !== tmpCanvas.height) tmpCanvas = canvas(outCanvas.width, outCanvas.height); if (cT && env.browser) { if (config3.backend === "webgl" || config3.backend === "humangl" || config3.backend === "webgpu") { pixels = cT.fromPixels(outCanvas); @@ -34705,8 +32934,7 @@ async function process2(input, config3, getTensor = true) { Ot(pixels); pixels = rgb3; } - if (!pixels) - throw new Error("input error: cannot create tensor"); + if (!pixels) throw new Error("input error: cannot create tensor"); const casted = Ue(pixels, "float32"); const tensor = config3.filter.equalization ? await histogramEqualization(casted) : Ms(casted, 0); Ot([pixels, casted]); @@ -34720,8 +32948,7 @@ async function process2(input, config3, getTensor = true) { } 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 (config3.cacheSensitivity === 0 || !input.shape || input.shape.length !== 4 || input.shape[1] > 3840 || input.shape[2] > 2160) return skipFrame; if (!last.inputTensor) { last.inputTensor = Ur(input); } else if (last.inputTensor.shape[1] !== input.shape[1] || last.inputTensor.shape[2] !== input.shape[2]) { @@ -34743,13 +32970,11 @@ async function skip(config3, input) { async function compare(config3, input1, input2) { const t10 = {}; 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); + 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); + if (!config3.debug) log("input tensors must be of shape [1, height, width, 3]:", input1.shape, input2.shape); return 0; } t10.input1 = Ur(input1); @@ -34824,9 +33049,9 @@ var Env = class { /** List of supported kernels for current backend */ __publicField(this, "kernels", []); /** MonkeyPatch for Canvas/Image/ImageData */ - __privateAdd(this, _canvas, void 0); - __privateAdd(this, _image, void 0); - __privateAdd(this, _imageData, void 0); + __privateAdd(this, _canvas); + __privateAdd(this, _image); + __privateAdd(this, _imageData); this.browser = typeof navigator !== "undefined" && typeof navigator.appVersion !== "undefined"; this.node = typeof process !== "undefined" && typeof process.versions !== "undefined" && typeof process.versions.node !== "undefined"; this.tfjs = { version: Vce["tfjs-core"] }; @@ -34840,8 +33065,7 @@ var Env = class { const platformMatch = raw[0].match(/\(([^()]+)\)/g); this.platform = (platformMatch == null ? void 0 : platformMatch[0]) ? platformMatch[0].replace(/\(|\)/g, "") : ""; this.agent = agent.replace(raw[0], ""); - if (this.platform[1]) - this.agent = this.agent.replace(raw[1], ""); + if (this.platform[1]) this.agent = this.agent.replace(raw[1], ""); this.agent = this.agent.replace(/ /g, " "); } } else if (typeof process !== "undefined") { @@ -34918,10 +33142,8 @@ var Env = class { const cpu = { model: "", flags: [] }; if (this.node && this.platform.startsWith("linux")) { } - if (!this.cpu) - Object.defineProperty(this, "cpu", { value: cpu }); - else - this.cpu = cpu; + if (!this.cpu) Object.defineProperty(this, "cpu", { value: cpu }); + else this.cpu = cpu; } }; _canvas = new WeakMap(); @@ -34953,33 +33175,25 @@ var WebCam = class { /** start method initializizes webcam stream and associates it with a dom video element */ __publicField(this, "start", async (webcamConfig) => { var _a, _b; - 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.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 el2 = document.getElementById(webcamConfig.element); if (el2 && el2 instanceof HTMLVideoElement) { this.element = el2; } else { - if (this.config.debug) - log("webcam", "cannot get dom element", webcamConfig.element); + if (this.config.debug) log("webcam", "cannot get dom element", webcamConfig.element); return `webcam error: cannot get dom element: ${webcamConfig.element}`; } } else if (webcamConfig.element instanceof HTMLVideoElement) { this.element = webcamConfig.element; } else { - if (this.config.debug) - log("webcam", "unknown dom element", webcamConfig.element); + if (this.config.debug) log("webcam", "unknown dom element", webcamConfig.element); return `webcam error: unknown dom element: ${webcamConfig.element}`; } } else { @@ -34993,31 +33207,22 @@ var WebCam = class { resizeMode: this.config.crop ? "crop-and-scale" : "none" } }; - if (((_a = this.config) == null ? void 0 : _a.width) > 0) - requestedConstraints.video.width = { ideal: this.config.width }; - if (((_b = this.config) == null ? void 0 : _b.height) > 0) - requestedConstraints.video.height = { ideal: this.config.height }; - if (this.config.id) - requestedConstraints.video.deviceId = this.config.id; + if (((_a = this.config) == null ? void 0 : _a.width) > 0) requestedConstraints.video.width = { ideal: this.config.width }; + if (((_b = this.config) == null ? void 0 : _b.height) > 0) requestedConstraints.video.height = { ideal: this.config.height }; + if (this.config.id) requestedConstraints.video.deviceId = this.config.id; this.element.addEventListener("play", () => { - if (this.config.debug) - log("webcam", "play"); + if (this.config.debug) log("webcam", "play"); }); this.element.addEventListener("pause", () => { - if (this.config.debug) - log("webcam", "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 (!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 error", "no devices"); + if (this.config.debug) log("webcam error", "no devices"); return "webcam error: no devices"; } try { @@ -35027,16 +33232,13 @@ var WebCam = class { return `webcam error: ${err}`; } if (!this.stream) { - if (this.config.debug) - log("webcam error", "no stream"); + if (this.config.debug) log("webcam error", "no stream"); return "webcam error no stream"; } this.element.srcObject = this.stream; const ready = new Promise((resolve) => { - if (!this.element) - resolve(false); - else - this.element.onloadeddata = () => resolve(true); + if (!this.element) resolve(false); + else this.element.onloadeddata = () => resolve(true); }); await ready; await this.element.play(); @@ -35056,20 +33258,16 @@ var WebCam = class { }); /** pause webcam video method */ __publicField(this, "pause", () => { - if (this.element) - this.element.pause(); + if (this.element) this.element.pause(); }); /** play webcam video method */ __publicField(this, "play", async () => { - if (this.element) - await this.element.play(); + if (this.element) await this.element.play(); }); /** stop method stops active webcam stream track and disconnects webcam */ __publicField(this, "stop", () => { - if (this.config.debug) - log("webcam", "stop"); - if (this.track) - this.track.stop(); + if (this.config.debug) log("webcam", "stop"); + if (this.track) this.track.stop(); }); this.config = { element: void 0, @@ -35082,33 +33280,28 @@ var WebCam = class { } /** get active webcam stream track */ get track() { - if (!this.stream) - return void 0; + if (!this.stream) return void 0; return this.stream.getVideoTracks()[0]; } /** get webcam capabilities */ get capabilities() { - if (!this.track) - return void 0; + if (!this.track) return void 0; return this.track.getCapabilities ? this.track.getCapabilities() : void 0; } /** get webcam constraints */ get constraints() { - if (!this.track) - return void 0; + if (!this.track) return void 0; return this.track.getConstraints ? this.track.getConstraints() : void 0; } /** get webcam settings */ get settings() { - if (!this.stream) - return void 0; + if (!this.stream) return void 0; const track = this.stream.getVideoTracks()[0]; return track.getSettings ? track.getSettings() : void 0; } /** get webcam label */ get label() { - if (!this.track) - return ""; + if (!this.track) return ""; return this.track.label; } /** is webcam paused */ @@ -35320,8 +33513,7 @@ var options = { }; var modelStats = {}; async function httpHandler(url, init4) { - if (options.debug) - log("load model fetch:", url, init4); + if (options.debug) log("load model fetch:", url, init4); return fetch(url, init4); } function setModelLoadOptions(config3) { @@ -35332,8 +33524,7 @@ function setModelLoadOptions(config3) { async function loadModel(modelPath) { var _a, _b, _c2, _d2; let modelUrl = join(options.modelBasePath, modelPath || ""); - if (!modelUrl.toLowerCase().endsWith(".json")) - modelUrl += ".json"; + 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; @@ -35359,21 +33550,17 @@ async function loadModel(modelPath) { let loaded = false; try { model23.findIOHandler(); - if (options.debug) - log("model load handler:", model23["handler"]); + 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 M8(modelStats[shortModelName].inCache ? cachedModelName : modelUrl, tfLoadOptions); + if (artifacts) model23.loadSync(artifacts); + else model23 = await M8(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 }); + if (options.verbose) log("load:", { model: shortModelName, url: model23["modelUrl"], bytes: modelStats[shortModelName].sizeLoadedWeights }); loaded = true; } catch (err) { log("error loading model:", modelUrl, err); @@ -35381,8 +33568,7 @@ async function loadModel(modelPath) { if (loaded && options.cacheModels && options.cacheSupported && !modelStats[shortModelName].inCache) { try { const saveResult = await model23.save(cachedModelName); - if (options.debug) - log("model saved:", cachedModelName, saveResult); + if (options.debug) log("model saved:", cachedModelName, saveResult); } catch (err) { log("error saving model:", modelUrl, err); } @@ -35391,7 +33577,7 @@ async function loadModel(modelPath) { } // package.json -var version = "3.2.2"; +var version = "3.3.0"; // src/tfjs/humangl.ts var config2 = { @@ -35416,14 +33602,12 @@ var config2 = { }; function extensions() { const gl2 = config2.gl; - if (!gl2) - return; + if (!gl2) return; config2.extensions = gl2.getSupportedExtensions(); } function register(instance) { var _a; - if (instance.config.backend !== "humangl") - return; + if (instance.config.backend !== "humangl") return; if (config2.name in ur().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(); @@ -35489,8 +33673,7 @@ function register(instance) { return; } try { - if (A().flagRegistry.WEBGL_VERSION) - A().set("WEBGL_VERSION", 2); + if (A().flagRegistry.WEBGL_VERSION) A().set("WEBGL_VERSION", 2); } catch (err) { log("humangl error: cannot set WebGL backend flags:", err); return; @@ -35499,8 +33682,7 @@ function register(instance) { const backend = ak(); const current = typeof backend["gpgpu"] !== "undefined" ? backend["getGPGPUContext"]().gl : null; if (current) { - if (instance.config.debug) - log("humangl backend registered:", { webgl: current.getParameter(current.VERSION), renderer: current.getParameter(current.RENDERER) }); + 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); } @@ -35529,14 +33711,10 @@ function init() { async function getBestBackend() { var _a; await env.updateBackend(); - if ((_a = env.tensorflow) == null ? void 0 : _a.version) - 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"; + if ((_a = env.tensorflow) == null ? void 0 : _a.version) 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) { @@ -35577,41 +33755,34 @@ function registerCustomOps(config3) { env.kernels.push("rotatewithoffset"); newKernels.push("rotatewithoffset"); } - if (newKernels.length > 0 && config3.debug) - log("registered kernels:", newKernels); + if (newKernels.length > 0 && config3.debug) log("registered kernels:", newKernels); } var defaultFlags = {}; async function check(instance, force = false) { var _a, _b; instance.state = "backend"; - if (((_a = instance.config.backend) == null ? void 0 : _a.length) === 0) - instance.config.backend = await getBestBackend(); + 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 && sk() !== 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 (instance.config.debug) log("running inside web worker"); } if (typeof navigator !== "undefined" && ((_b = navigator == null ? void 0 : navigator.userAgent) == null ? void 0 : _b.toLowerCase().includes("electron"))) { - if (instance.config.debug) - log("running inside electron"); + if (instance.config.debug) log("running inside electron"); } let available = Object.keys(ur().registryFactory); if (instance.config.backend === "humangl" && !available.includes("humangl")) { register(instance); available = Object.keys(ur().registryFactory); } - if (instance.config.debug) - log("available backends:", available); + if (instance.config.debug) log("available backends:", available); if (env.browser && !env.node && instance.config.backend === "tensorflow" && available.includes("webgl")) { - if (instance.config.debug) - log("override: backend set to tensorflow while running in browser"); + if (instance.config.debug) log("override: backend set to tensorflow while running in browser"); instance.config.backend = "webgl"; } if (env.node && !env.browser && (instance.config.backend === "webgl" || instance.config.backend === "humangl") && available.includes("tensorflow")) { - if (instance.config.debug) - log(`override: backend set to ${instance.config.backend} while running in nodejs`); + 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") { @@ -35620,8 +33791,7 @@ async function check(instance, force = false) { instance.config.backend = "webgl"; } else { const adapter = await navigator.gpu.requestAdapter(); - if (instance.config.debug) - log("enumerated webgpu adapter:", adapter); + 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"; @@ -35634,29 +33804,21 @@ async function check(instance, force = false) { 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(`override: setting backend ${instance.config.backend}`); } - if (instance.config.debug) - log("setting backend:", [instance.config.backend]); + if (instance.config.debug) log("setting backend:", [instance.config.backend]); if (instance.config.backend === "wasm") { - if (A().flagRegistry.CANVAS2D_WILL_READ_FREQUENTLY) - A().set("CANVAS2D_WILL_READ_FREQUENTLY", true); - if (instance.config.debug) - log("wasm path:", instance.config.wasmPath); - if (typeof nae !== "undefined") - nae(instance.config.wasmPath, instance.config.wasmPlatformFetch); - else - throw new Error("backend error: attempting to use wasm backend but wasm path is not set"); + if (A().flagRegistry.CANVAS2D_WILL_READ_FREQUENTLY) A().set("CANVAS2D_WILL_READ_FREQUENTLY", true); + if (instance.config.debug) log("wasm path:", instance.config.wasmPath); + if (typeof nae !== "undefined") nae(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 simd = false; try { mt2 = await A().getAsync("WASM_HAS_MULTITHREAD_SUPPORT"); simd = await A().getAsync("WASM_HAS_SIMD_SUPPORT"); - if (instance.config.debug) - log(`wasm execution: ${simd ? "simd" : "no simd"} ${mt2 ? "multithreaded" : "singlethreaded"}`); - if (instance.config.debug && !simd) - log("warning: wasm simd support is not enabled"); + if (instance.config.debug) log(`wasm execution: ${simd ? "simd" : "no simd"} ${mt2 ? "multithreaded" : "singlethreaded"}`); + if (instance.config.debug && !simd) log("warning: wasm simd support is not enabled"); } catch (e) { log("wasm detection failed"); } @@ -35668,14 +33830,11 @@ async function check(instance, force = false) { log("error: cannot set backend:", instance.config.backend, err); return false; } - if (instance.config.debug) - defaultFlags = JSON.parse(JSON.stringify(A().flags)); + if (instance.config.debug) defaultFlags = JSON.parse(JSON.stringify(A().flags)); } if (sk() === "humangl" || sk() === "webgl") { - if (A().flagRegistry.WEBGL_USE_SHAPES_UNIFORMS) - A().set("WEBGL_USE_SHAPES_UNIFORMS", true); - if (A().flagRegistry.WEBGL_EXP_CONV) - A().set("WEBGL_EXP_CONV", true); + if (A().flagRegistry.WEBGL_USE_SHAPES_UNIFORMS) A().set("WEBGL_USE_SHAPES_UNIFORMS", true); + if (A().flagRegistry.WEBGL_EXP_CONV) A().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); A().set("WEBGL_DELETE_TEXTURE_THRESHOLD", 0); @@ -35687,16 +33846,13 @@ async function check(instance, force = false) { const newFlags = A().flags; const updatedFlags = {}; for (const key of Object.keys(newFlags)) { - if (defaultFlags[key] === newFlags[key]) - continue; + if (defaultFlags[key] === newFlags[key]) continue; updatedFlags[key] = newFlags[key]; } - if (instance.config.debug && Object.keys(updatedFlags).length > 0) - log("backend:", sk(), "flags:", updatedFlags); + if (instance.config.debug && Object.keys(updatedFlags).length > 0) log("backend:", sk(), "flags:", updatedFlags); } if (instance.config.flags && Object.keys(instance.config.flags).length > 0) { - if (instance.config.debug) - log("flags:", instance.config["flags"]); + if (instance.config.debug) log("flags:", instance.config["flags"]); for (const [key, val] of Object.entries(instance.config.flags)) { A().set(key, val); } @@ -35717,8 +33873,7 @@ function fakeOps(kernelNames, config3) { backendName: config3.backend, kernelFunc: (param) => { var _a; - if (config3.debug) - log("kernelFunc", kernelName, config3.backend, param); + if (config3.debug) log("kernelFunc", kernelName, config3.backend, param); return (_a = param == null ? void 0 : param.inputs) == null ? void 0 : _a.info; } // setupFunc: () => { if (config.debug) log('kernelFunc', kernelName, config.backend); }, @@ -35746,24 +33901,19 @@ __export(draw_exports, { // 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"); + if (!input) log("draw error: invalid canvas"); + else if (!input.getContext) log("draw error: canvas context not defined"); else { const ctx = input.getContext("2d", { willReadFrequently: true }); - if (!ctx) - log("draw error: cannot get canvas context"); - else - return ctx; + 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; + if (!opt.useDepth || typeof z === "undefined") return opt.color; const rgb3 = Uint8ClampedArray.from([127 + 2 * z, 127 - 2 * z, 255]); return `rgba(${rgb3[0]}, ${rgb3[1]}, ${rgb3[2]}, ${opt.alpha})`; }; @@ -35808,8 +33958,7 @@ function rect(ctx, x, y8, width, height, localOptions2) { ctx.stroke(); } function lines(ctx, points, localOptions2) { - if (points.length < 2) - return; + if (points.length < 2) return; ctx.beginPath(); ctx.moveTo(points[0][0], points[0][1]); for (const pt2 of points) { @@ -35823,8 +33972,7 @@ function lines(ctx, points, localOptions2) { } } function curves(ctx, points, localOptions2) { - if (points.length < 2) - return; + if (points.length < 2) return; ctx.lineWidth = localOptions2.lineWidth; if (!localOptions2.useCurves || points.length <= 2) { lines(ctx, points, localOptions2); @@ -39682,38 +37830,25 @@ var LANDMARKS_REFINEMENT_RIGHT_EYE_CONFIG = [ var localOptions; function drawLabels(f, ctx) { var _a, _b, _c2, _d2, _e, _f2, _g2, _h2, _i2; - if (!localOptions.drawLabels || ((_a = localOptions.faceLabels) == null ? void 0 : _a.length) === 0) - return; + if (!localOptions.drawLabels || ((_a = localOptions.faceLabels) == null ? void 0 : _a.length) === 0) return; let l = localOptions.faceLabels.slice(); l = replace(l, "[id]", f.id.toFixed(0)); - 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.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; + if (emotion2.length > 3) emotion2.length = 3; l = replace(l, "[emotions]", emotion2.join(" ")); } - if ((_c2 = (_b = f.rotation) == null ? void 0 : _b.angle) == null ? void 0 : _c2.roll) - l = replace(l, "[roll]", rad2deg(f.rotation.angle.roll)); - if ((_e = (_d2 = f.rotation) == null ? void 0 : _d2.angle) == null ? void 0 : _e.yaw) - l = replace(l, "[yaw]", rad2deg(f.rotation.angle.yaw)); - if ((_g2 = (_f2 = f.rotation) == null ? void 0 : _f2.angle) == null ? void 0 : _g2.pitch) - l = replace(l, "[pitch]", rad2deg(f.rotation.angle.pitch)); - if ((_i2 = (_h2 = f.rotation) == null ? void 0 : _h2.gaze) == null ? void 0 : _i2.bearing) - l = replace(l, "[gaze]", rad2deg(f.rotation.gaze.bearing)); + if ((_c2 = (_b = f.rotation) == null ? void 0 : _b.angle) == null ? void 0 : _c2.roll) l = replace(l, "[roll]", rad2deg(f.rotation.angle.roll)); + if ((_e = (_d2 = f.rotation) == null ? void 0 : _d2.angle) == null ? void 0 : _e.yaw) l = replace(l, "[yaw]", rad2deg(f.rotation.angle.yaw)); + if ((_g2 = (_f2 = f.rotation) == null ? void 0 : _f2.angle) == null ? void 0 : _g2.pitch) l = replace(l, "[pitch]", rad2deg(f.rotation.angle.pitch)); + if ((_i2 = (_h2 = f.rotation) == null ? void 0 : _h2.gaze) == null ? void 0 : _i2.bearing) l = replace(l, "[gaze]", rad2deg(f.rotation.gaze.bearing)); labels(ctx, l, f.box[0], f.box[1], localOptions); } function drawIrisElipse(f, ctx) { @@ -39800,22 +37935,17 @@ function drawFacePoints(f, ctx) { 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); + 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); } } } else { for (const [k, v8] of Object.entries((f == null ? void 0 : f.annotations) || {})) { - if (!(v8 == null ? void 0 : v8[0])) - continue; + if (!(v8 == null ? void 0 : v8[0])) continue; const pt2 = v8[0]; point(ctx, pt2[0], pt2[1], 0, localOptions); - if (localOptions.drawLabels) - labels(ctx, k, pt2[0], pt2[1], localOptions); + if (localOptions.drawLabels) labels(ctx, k, pt2[0], pt2[1], localOptions); } } } @@ -39827,11 +37957,9 @@ function drawFaceBoxes(f, ctx) { } function face(inCanvas2, result, drawOptions) { localOptions = mergeDeep(options2, drawOptions); - if (!result || !inCanvas2) - return; + if (!result || !inCanvas2) return; const ctx = getCanvasContext(inCanvas2); - if (!ctx) - return; + if (!ctx) return; ctx.font = localOptions.font; ctx.strokeStyle = localOptions.color; ctx.fillStyle = localOptions.color; @@ -39851,11 +37979,9 @@ function face(inCanvas2, result, drawOptions) { function body(inCanvas2, result, drawOptions) { var _a, _b; const localOptions2 = mergeDeep(options2, drawOptions); - if (!result || !inCanvas2) - return; + if (!result || !inCanvas2) return; const ctx = getCanvasContext(inCanvas2); - if (!ctx) - return; + if (!ctx) return; ctx.lineJoin = "round"; for (let i = 0; i < result.length; i++) { ctx.strokeStyle = localOptions2.color; @@ -39873,8 +37999,7 @@ function body(inCanvas2, result, drawOptions) { } if (localOptions2.drawPoints && result[i].keypoints) { for (let pt2 = 0; pt2 < result[i].keypoints.length; pt2++) { - if (!result[i].keypoints[pt2].score || result[i].keypoints[pt2].score === 0) - continue; + if (!result[i].keypoints[pt2].score || result[i].keypoints[pt2].score === 0) continue; ctx.fillStyle = colorDepth(result[i].keypoints[pt2].position[2], localOptions2); point(ctx, result[i].keypoints[pt2].position[0], result[i].keypoints[pt2].position[1], 0, localOptions2); } @@ -39882,8 +38007,7 @@ function body(inCanvas2, result, drawOptions) { if (localOptions2.drawLabels && ((_b = localOptions2.bodyPartLabels) == null ? void 0 : _b.length) > 0 && result[i].keypoints) { ctx.font = localOptions2.font; for (const pt2 of result[i].keypoints) { - if (!pt2.score || pt2.score === 0) - continue; + if (!pt2.score || pt2.score === 0) continue; let l = localOptions2.bodyPartLabels.slice(); l = replace(l, "[label]", pt2.part); l = replace(l, "[score]", 100 * pt2.score); @@ -39892,8 +38016,7 @@ function body(inCanvas2, result, drawOptions) { } 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); + for (const connected4 of part) curves(ctx, connected4, localOptions2); } } } @@ -39903,11 +38026,9 @@ function body(inCanvas2, result, drawOptions) { function hand(inCanvas2, result, drawOptions) { var _a, _b; const localOptions2 = mergeDeep(options2, drawOptions); - if (!result || !inCanvas2) - return; + if (!result || !inCanvas2) return; const ctx = getCanvasContext(inCanvas2); - if (!ctx) - return; + if (!ctx) return; ctx.lineJoin = "round"; ctx.font = localOptions2.font; for (const h of result) { @@ -39941,8 +38062,7 @@ function hand(inCanvas2, result, drawOptions) { } if (localOptions2.drawPolygons && h.annotations) { const addHandLine = (part) => { - if (!part || part.length === 0 || !part[0]) - return; + if (!part || part.length === 0 || !part[0]) return; for (let i = 0; i < part.length; i++) { ctx.beginPath(); const z = part[i][2] || 0; @@ -39966,11 +38086,9 @@ function hand(inCanvas2, result, drawOptions) { function object(inCanvas2, result, drawOptions) { var _a; const localOptions2 = mergeDeep(options2, drawOptions); - if (!result || !inCanvas2) - return; + if (!result || !inCanvas2) return; const ctx = getCanvasContext(inCanvas2); - if (!ctx) - return; + if (!ctx) return; ctx.lineJoin = "round"; ctx.font = localOptions2.font; for (const h of result) { @@ -39994,12 +38112,10 @@ function object(inCanvas2, result, drawOptions) { function gesture(inCanvas2, result, drawOptions) { var _a; const localOptions2 = mergeDeep(options2, drawOptions); - if (!result || !inCanvas2) - return; + if (!result || !inCanvas2) return; if (localOptions2.drawGestures && ((_a = localOptions2.gestureLabels) == null ? void 0 : _a.length) > 0) { const ctx = getCanvasContext(inCanvas2); - if (!ctx) - return; + if (!ctx) return; ctx.font = localOptions2.font; ctx.fillStyle = localOptions2.color; let i = 1; @@ -40042,11 +38158,9 @@ var defaultLabels = { var drawTime = 0; function person(inCanvas2, result, drawOptions) { const localOptions2 = mergeDeep(options2, drawOptions); - if (!result || !inCanvas2) - return; + if (!result || !inCanvas2) return; const ctx = getCanvasContext(inCanvas2); - if (!ctx) - return; + if (!ctx) return; ctx.lineJoin = "round"; ctx.font = localOptions2.font; for (let i = 0; i < result.length; i++) { @@ -40068,16 +38182,13 @@ function person(inCanvas2, result, drawOptions) { } } function canvas2(input, output) { - if (!input || !output) - return; + if (!input || !output) return; const ctx = getCanvasContext(output); - if (!ctx) - return; + if (!ctx) return; ctx.drawImage(input, 0, 0); } async function all(inCanvas2, result, drawOptions) { - if (!(result == null ? void 0 : result.performance) || !inCanvas2) - return null; + if (!(result == null ? void 0 : result.performance) || !inCanvas2) return null; const timeStamp = now(); const localOptions2 = mergeDeep(options2, drawOptions); const promise = Promise.all([ @@ -40248,14 +38359,12 @@ function createAnchors() { anchorTensor = { x: Jt(anchors3.map((a) => a.x)), y: Jt(anchors3.map((a) => a.y)) }; } async function loadDetector(config3) { - if (env.initial) - model = null; + 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"]); + } else if (config3.debug && model) log("cached model:", model["modelUrl"]); createAnchors(); return model; } @@ -40355,21 +38464,18 @@ var lastTime = 0; var sigmoid = (x) => 1 - 1 / (1 + Math.exp(x)); var loadDetect = (config3) => loadDetector(config3); async function loadPose(config3) { - if (env.initial) - model2 = null; + 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"]); + } else if (config3.debug) log("cached model:", model2["modelUrl"]); return model2; } function prepareImage(input, size2, cropBox) { var _a, _b; const t10 = {}; - 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; + 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) { t10.cropped = eX.cropAndResize(input, [cropBox], [0], [input.shape[1], input.shape[2]]); @@ -40445,8 +38551,7 @@ function fixKeypoints(keypoints) { 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; + if (!(model2 == null ? void 0 : model2["executor"])) return null; const t10 = {}; [ t10.ld, @@ -40471,8 +38576,7 @@ async function detectLandmarks(input, config3, outputSize2) { 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; + if (poseScore < (config3.body.minConfidence || 0)) return null; fixKeypoints(keypointsRelative); const keypoints = rescaleKeypoints(keypointsRelative, outputSize2); const kpts = keypoints.map((k) => k.position); @@ -40483,8 +38587,7 @@ async function detectLandmarks(input, config3, outputSize2) { 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) - pt2.push([pt0.position, pt1.position]); + if (pt0 && pt1) pt2.push([pt0.position, pt1.position]); } annotations2[name] = pt2; } @@ -40512,8 +38615,7 @@ async function predict(input, config3) { cache.length = 0; const bodyResult = await detectLandmarks(preparedBox, config3, outputSize2); Ot(preparedBox); - if (!bodyResult) - continue; + if (!bodyResult) continue; bodyResult.id = i; cache.push(bodyResult); } @@ -40614,19 +38716,16 @@ var last2 = []; var lastTime2 = 0; var skipped2 = Number.MAX_SAFE_INTEGER; async function load(config3) { - if (env.initial) - model3 = null; + 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"]); + } else if (config3.debug) log("cached model:", model3["modelUrl"]); return model3; } async function process3(res, outputShape, config3) { - if (!res) - return []; + if (!res) return []; const t10 = {}; const results = []; const detections = await res.array(); @@ -40643,8 +38742,7 @@ async function process3(res, outputShape, config3) { for (const id2 of Array.from(nms)) { const score = Math.trunc(100 * detections[0][id2][4]) / 100; const classVal = detections[0][id2][5]; - if (Number.isNaN(classVal)) - continue; + if (Number.isNaN(classVal)) continue; const label = labels2[classVal].label; const [x, y8] = [ detections[0][id2][0] / inputSize3, @@ -40668,8 +38766,7 @@ async function process3(res, outputShape, config3) { return results; } async function predict2(input, config3) { - if (!(model3 == null ? void 0 : model3["executor"])) - return []; + 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) { @@ -40728,12 +38825,9 @@ 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"]); + 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) { @@ -40754,8 +38848,7 @@ async function max2d(inputs, minScore) { return [0, 0, newScore]; } async function predict3(image, config3) { - if (!(model4 == null ? void 0 : model4["executor"]) || !(model4 == null ? void 0 : model4.inputs[0].shape)) - return []; + 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) { @@ -40772,8 +38865,7 @@ async function predict3(image, config3) { return norm; }); let resT; - if (config3.body.enabled) - resT = model4 == null ? void 0 : model4.execute(tensor); + if (config3.body.enabled) resT = model4 == null ? void 0 : model4.execute(tensor); lastTime3 = now(); Ot(tensor); if (resT) { @@ -40827,8 +38919,7 @@ async function predict3(image, config3) { 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)) - pt2.push([pt0.position, pt1.position]); + if (pt0 && pt1 && pt0.score > (config3.body.minConfidence || 0) && pt1.score > (config3.body.minConfidence || 0)) pt2.push([pt0.position, pt1.position]); } cache2.annotations[name] = pt2; } @@ -40905,14 +38996,12 @@ var computeRotation = (point1, point2) => normalizeRadians(Math.PI / 2 - Math.at var buildTranslationMatrix = (x, y8) => [[1, 0, x], [0, 1, y8], [0, 0, 1]]; var dot = (v12, v22) => { let product = 0; - for (let i = 0; i < v12.length; i++) - product += v12[i] * v22[i]; + for (let i = 0; i < v12.length; i++) product += v12[i] * v22[i]; return product; }; var getColumnFrom2DArr = (arr, columnIndex) => { const column = []; - for (let i = 0; i < arr.length; i++) - column.push(arr[i][columnIndex]); + for (let i = 0; i < arr.length; i++) column.push(arr[i][columnIndex]); return column; }; var multiplyTransformMatrices = (mat1, mat2) => { @@ -40920,8 +39009,7 @@ var multiplyTransformMatrices = (mat1, mat2) => { 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))); + for (let col = 0; col < size2; col++) product[row].push(dot(mat1[row], getColumnFrom2DArr(mat2, col))); } return product; }; @@ -40953,8 +39041,7 @@ function generateAnchors(inputSize10) { 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]); + for (let n = 0; n < anchorsNum; n++) anchors3.push([anchorX, anchorY]); } } } @@ -41027,20 +39114,16 @@ 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"]); + 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 = ke(inputSize4, "int32"); anchors = mu(generateAnchors(inputSize4)); return model5; } function decodeBoxes2(boxOutputs) { - if (!anchors || !inputSizeT) - return Gr([0, 0]); + if (!anchors || !inputSizeT) return Gr([0, 0]); const t10 = {}; t10.boxStarts = Xe(boxOutputs, [0, 1], [-1, 2]); t10.centers = Ce(t10.boxStarts, anchors); @@ -41058,8 +39141,7 @@ function decodeBoxes2(boxOutputs) { } async function getBoxes(inputImage, config3) { var _a, _b, _c2, _d2, _e, _f2, _g2; - if (!inputImage || inputImage["isDisposedInternal"] || inputImage.shape.length !== 4 || inputImage.shape[1] < 1 || inputImage.shape[2] < 1) - return []; + if (!inputImage || inputImage["isDisposedInternal"] || inputImage.shape.length !== 4 || inputImage.shape[1] < 1 || inputImage.shape[2] < 1) return []; const t10 = {}; t10.resized = eX.resizeBilinear(inputImage, [inputSize4, inputSize4]); t10.div = je(t10.resized, constants.tf127); @@ -41105,8 +39187,7 @@ async function getBoxes(inputImage, config3) { const scaledBox = scaleBoxCoordinates(rawBox, [(inputImage.shape[2] || 0) / inputSize4, (inputImage.shape[1] || 0) / inputSize4], anchor); const enlargedBox = enlargeBox(scaledBox, ((_e = config3.face.detector) == null ? void 0 : _e.scale) || 1.4); const squaredBox = squarifyBox(enlargedBox); - if (squaredBox.size[0] > (((_f2 = config3.face.detector) == null ? void 0 : _f2["minSize"]) || 0) && squaredBox.size[1] > (((_g2 = config3.face.detector) == null ? void 0 : _g2["minSize"]) || 0)) - boxes.push(squaredBox); + if (squaredBox.size[0] > (((_f2 = config3.face.detector) == null ? void 0 : _f2["minSize"]) || 0) && squaredBox.size[1] > (((_g2 = config3.face.detector) == null ? void 0 : _g2["minSize"]) || 0)) boxes.push(squaredBox); Object.keys(b).forEach((tensor) => Ot(b[tensor])); } } @@ -41131,15 +39212,11 @@ var irisLandmarks = { }; 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"]); + 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; + if (inputSize5 === -1) inputSize5 = 64; return model6; } function replaceIrisCoords(rawCoords, newCoords, prefix, keys) { @@ -41209,8 +39286,7 @@ var getAdjustedIrisCoords = (rawCoords, irisCoords, direction) => { }; async function augmentIris(rawCoords, face4, meshSize, config3) { var _a, _b; - if (!(model6 == null ? void 0 : model6["executor"])) - return rawCoords; + 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, ((_a = config3.face.iris) == null ? void 0 : _a.scale) || 2.3); const { box: rightEyeBox, boxSize: rightEyeBoxSize, crop: rightEyeCrop } = getEyeBox(rawCoords, face4, eyeLandmarks.rightBounds[0], eyeLandmarks.rightBounds[1], meshSize, true, ((_b = config3.face.iris) == null ? void 0 : _b.scale) || 2.3); const combined = yt([leftEyeCrop, rightEyeCrop]); @@ -41258,21 +39334,15 @@ async function augment(rawCoords, results) { // 71 x 2d = 142// output_left_eye }; for (const val of Object.values(t10)) { - if (!val) - return rawCoords; + 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 < t10.irisL.length / 2; i++) rawCoords.push([t10.irisL[2 * i + 0], t10.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 < 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]]; return rawCoords; } @@ -41322,8 +39392,7 @@ async function predict4(input, config3) { if (config3.filter.equalization) { const equilized = face4.tensor ? await histogramEqualization(face4.tensor) : void 0; Ot(face4.tensor); - if (equilized) - face4.tensor = equilized; + if (equilized) face4.tensor = equilized; } face4.boxScore = Math.round(100 * box.confidence) / 100; if (!((_e = config3.face.mesh) == null ? void 0 : _e.enabled) || !(model7 == null ? void 0 : model7["executor"])) { @@ -41333,11 +39402,9 @@ async function predict4(input, config3) { face4.size = box.size; face4.mesh = box.landmarks; face4.meshRaw = face4.mesh.map((pt2) => [pt2[0] / (input.shape[2] || 0), pt2[1] / (input.shape[1] || 0), (pt2[2] || 0) / size2]); - for (const key of Object.keys(blazeFaceLandmarks)) - face4.annotations[key] = [face4.mesh[blazeFaceLandmarks[key]]]; + 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"); + if (config3.debug) log("face mesh detection requested, but model is not loaded"); } else { if (((_f2 = config3.face.attention) == null ? void 0 : _f2.enabled) && !env.kernels.includes("atan2")) { config3.face.attention.enabled = false; @@ -41373,8 +39440,7 @@ async function predict4(input, config3) { } face4.mesh = transformRawCoords(rawCoords, box, angle, rotationMatrix, inputSize6); face4.meshRaw = face4.mesh.map((pt2) => [pt2[0] / (input.shape[2] || 0), pt2[1] / (input.shape[1] || 0), (pt2[2] || 0) / size2]); - for (const key of Object.keys(meshAnnotations)) - face4.annotations[key] = meshAnnotations[key].map((index2) => face4.mesh[index2]); + 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), @@ -41389,27 +39455,21 @@ async function predict4(input, config3) { } Ot(results); } - if (face4.score > (((_j2 = config3.face.detector) == null ? void 0 : _j2.minConfidence) || 1)) - faces.push(face4); - else - Ot(face4.tensor); + if (face4.score > (((_j2 = config3.face.detector) == null ? void 0 : _j2.minConfidence) || 1)) faces.push(face4); + else Ot(face4.tensor); } cache3.boxes = newCache; return faces; } async function load5(config3) { var _a, _b, _c2, _d2, _e, _f2; - if (env.initial) - model7 = null; + 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 (Object.keys(((_b = model7 == null ? void 0 : model7["signature"]) == null ? void 0 : _b.outputs) || {}).length < 6) model7 = null; } if (!model7) { - if ((_c2 = config3.face.attention) == null ? void 0 : _c2.enabled) - model7 = await loadModel(config3.face.attention.modelPath); - else - model7 = await loadModel((_d2 = config3.face.mesh) == null ? void 0 : _d2.modelPath); + if ((_c2 = config3.face.attention) == null ? void 0 : _c2.enabled) model7 = await loadModel(config3.face.attention.modelPath); + else model7 = await loadModel((_d2 = config3.face.mesh) == null ? void 0 : _d2.modelPath); } else if (config3.debug) { log("cached model:", model7["modelUrl"]); } @@ -41429,15 +39489,12 @@ var skipped4 = Number.MAX_SAFE_INTEGER; var rgb = false; async function load6(config3) { var _a, _b, _c2; - if (env.initial) - model8 = null; + if (env.initial) model8 = null; if (!model8) { model8 = await loadModel((_a = config3.face.emotion) == null ? void 0 : _a.modelPath); rgb = ((_c2 = (_b = model8 == null ? void 0 : model8.inputs) == null ? void 0 : _b[0].shape) == null ? void 0 : _c2[3]) === 3; - if (!rgb) - annotations = ["angry", "disgust", "fear", "happy", "sad", "surprise", "neutral"]; - else - annotations = ["angry", "disgust", "fear", "happy", "neutral", "sad", "surprise"]; + if (!rgb) annotations = ["angry", "disgust", "fear", "happy", "sad", "surprise", "neutral"]; + else annotations = ["angry", "disgust", "fear", "happy", "neutral", "sad", "surprise"]; } else if (config3.debug) { log("cached model:", model8["modelUrl"]); } @@ -41445,8 +39502,7 @@ async function load6(config3) { } async function predict5(image, config3, idx, count2) { var _a, _b; - if (!model8) - return []; + 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) { @@ -41481,8 +39537,7 @@ async function predict5(image, config3, idx, count2) { lastTime4 = now(); const data = await t10.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] }); + 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) => Ot(t10[tensor])); @@ -41501,19 +39556,15 @@ 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"]); + 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, config3) { var _a, _b; const tensor = input.image || input.tensor || input; - if (!(model9 == null ? void 0 : model9.inputs[0].shape)) - return tensor; + if (!(model9 == null ? void 0 : model9.inputs[0].shape)) return tensor; let crop; if (((_a = config3.face.description) == null ? void 0 : _a["crop"]) > 0) { const cropval = (_b = config3.face.description) == null ? void 0 : _b["crop"]; @@ -41534,8 +39585,7 @@ async function predict6(image, config3, idx, count2) { genderScore: 0, descriptor: [] }; - if (!(model9 == null ? void 0 : model9["executor"])) - return obj; + 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 && ((_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) { @@ -41563,8 +39613,7 @@ async function predict6(image, config3, idx, count2) { const ageT = resT.find((t10) => t10.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 }); + 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 descriptor = desc ? await desc.data() : []; obj.descriptor = Array.from(descriptor); @@ -41583,24 +39632,19 @@ function insidePoly(x, y8, polygon) { let inside = false; let j = polygon.length - 1; for (let i = 0; i < polygon.length; j = i++) { - if (polygon[i].y > y8 !== polygon[j].y > y8 && x < (polygon[j].x - polygon[i].x) * (y8 - polygon[i].y) / (polygon[j].y - polygon[i].y) + polygon[i].x) - inside = !inside; + if (polygon[i].y > y8 !== polygon[j].y > y8 && x < (polygon[j].x - polygon[i].x) * (y8 - 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; + 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 pt2 of meshAnnotations.silhouette) - silhouette.push({ x: (face4.mesh[pt2][0] - face4.box[0]) / face4.box[2], y: (face4.mesh[pt2][1] - face4.box[1]) / face4.box[3] }); - if (expandFact && expandFact > 0) - silhouette = silhouette.map((pt2) => ({ x: pt2.x > 0.5 ? pt2.x + expandFact : pt2.x - expandFact, y: pt2.y > 0.5 ? pt2.y + expandFact : pt2.y - expandFact })); + for (const pt2 of meshAnnotations.silhouette) silhouette.push({ x: (face4.mesh[pt2][0] - face4.box[0]) / face4.box[2], y: (face4.mesh[pt2][1] - face4.box[1]) / face4.box[3] }); + if (expandFact && expandFact > 0) silhouette = silhouette.map((pt2) => ({ x: pt2.x > 0.5 ? pt2.x + expandFact : pt2.x - expandFact, y: pt2.y > 0.5 ? pt2.y + expandFact : pt2.y - expandFact })); for (let x = 0; x < width; x++) { for (let y8 = 0; y8 < height; y8++) { const inside = insidePoly(x / width, y8 / width, silhouette); @@ -41623,18 +39667,14 @@ 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"]); + 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(image, config3, idx, count2) { var _a, _b; - if (!(model10 == null ? void 0 : model10["executor"])) - return 0; + 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]) { @@ -41662,18 +39702,14 @@ 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"]); + 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(image, config3, idx, count2) { var _a, _b; - if (!(model11 == null ? void 0 : model11["executor"])) - return 0; + 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]) { @@ -41703,18 +39739,14 @@ 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"]); + 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(image, config3, idx, count2) { var _a, _b; - if (!model12) - return { age: 0, gender: "unknown", genderScore: 0, race: [] }; + 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]) { @@ -41724,8 +39756,7 @@ async function predict9(image, config3, idx, count2) { skipped8 = 0; return new Promise(async (resolve) => { var _a2, _b2, _c2, _d2; - if (!(model12 == null ? void 0 : model12.inputs[0].shape)) - return; + if (!(model12 == null ? void 0 : model12.inputs[0].shape)) return; const t10 = {}; let box = [[0, 0.1, 0.9, 0.9]]; if (((_a2 = config3.face.gear) == null ? void 0 : _a2["crop"]) > 0) { @@ -41734,22 +39765,19 @@ async function predict9(image, config3, idx, count2) { } t10.resize = eX.cropAndResize(image, box, [0], [model12.inputs[0].shape[2], model12.inputs[0].shape[1]]); const obj = { age: 0, gender: "unknown", genderScore: 0, race: [] }; - if ((_c2 = config3.face.gear) == null ? void 0 : _c2.enabled) - [t10.age, t10.gender, t10.race] = model12.execute(t10.resize, ["age_output", "gender_output", "race_output"]); + if ((_c2 = config3.face.gear) == null ? void 0 : _c2.enabled) [t10.age, t10.gender, t10.race] = model12.execute(t10.resize, ["age_output", "gender_output", "race_output"]); const gender2 = await t10.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(); for (let i = 0; i < race.length; i++) { - if (race[i] > (((_d2 = config3.face.gear) == null ? void 0 : _d2.minConfidence) || 0.2)) - obj.race.push({ score: Math.round(100 * race[i]) / 100, race: raceNames[i] }); + if (race[i] > (((_d2 = config3.face.gear) == null ? void 0 : _d2.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 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); + 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) => Ot(t10[tensor])); last5[idx] = obj; @@ -41766,18 +39794,14 @@ 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"]); + 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(image, config3, idx, count2) { var _a, _b, _c2, _d2; - if (!model13) - return { age: 0 }; + 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 && ((_c2 = last6[idx]) == null ? void 0 : _c2.age) && ((_d2 = last6[idx]) == null ? void 0 : _d2.age) > 0) { @@ -41787,8 +39811,7 @@ async function predict10(image, config3, idx, count2) { skipped9 = 0; return new Promise(async (resolve) => { var _a2, _b2, _c3; - if (!(model13 == null ? void 0 : model13.inputs) || !model13.inputs[0] || !model13.inputs[0].shape) - return; + if (!(model13 == null ? void 0 : model13.inputs) || !model13.inputs[0] || !model13.inputs[0].shape) return; const t10 = {}; if (((_a2 = config3.face["ssrnet"]) == null ? void 0 : _a2["crop"]) > 0) { const crop = (_b2 = config3.face["ssrnet"]) == null ? void 0 : _b2["crop"]; @@ -41799,8 +39822,7 @@ async function predict10(image, config3, idx, count2) { } t10.enhance = se(t10.resize, constants.tf255); const obj = { age: 0 }; - if ((_c3 = config3.face["ssrnet"]) == null ? void 0 : _c3.enabled) - t10.age = model13.execute(t10.enhance); + if ((_c3 = config3.face["ssrnet"]) == null ? void 0 : _c3.enabled) t10.age = model13.execute(t10.enhance); if (t10.age) { const data = await t10.age.data(); obj.age = Math.trunc(10 * data[0]) / 10; @@ -41822,18 +39844,14 @@ var skipped10 = Number.MAX_SAFE_INTEGER; var rgb2 = [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"]); + 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(image, config3, idx, count2) { var _a, _b, _c2, _d2; - if (!model14) - return { gender: "unknown", genderScore: 0 }; + 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 && ((_c2 = last7[idx]) == null ? void 0 : _c2.gender) && ((_d2 = last7[idx]) == null ? void 0 : _d2.genderScore) > 0) { @@ -41843,8 +39861,7 @@ async function predict11(image, config3, idx, count2) { skipped10 = 0; return new Promise(async (resolve) => { var _a2, _b2, _c3; - if (!(model14 == null ? void 0 : model14.inputs[0].shape)) - return; + if (!(model14 == null ? void 0 : model14.inputs[0].shape)) return; const t10 = {}; if (((_a2 = config3.face["ssrnet"]) == null ? void 0 : _a2["crop"]) > 0) { const crop = (_b2 = config3.face["ssrnet"]) == null ? void 0 : _b2["crop"]; @@ -41869,8 +39886,7 @@ async function predict11(image, config3, idx, count2) { return normalize2; }); const obj = { gender: "unknown", genderScore: 0 }; - if ((_c3 = config3.face["ssrnet"]) == null ? void 0 : _c3.enabled) - t10.gender = model14.execute(t10.enhance); + if ((_c3 = config3.face["ssrnet"]) == null ? void 0 : _c3.enabled) t10.gender = model14.execute(t10.enhance); const data = await t10.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; @@ -41890,18 +39906,14 @@ 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"]); + 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 []; + 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]) { @@ -41933,18 +39945,14 @@ 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"]); + 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 []; + 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]) { @@ -41972,8 +39980,7 @@ async function predict13(input, config3, idx, count2) { // 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 }; + 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); @@ -42030,17 +40037,13 @@ var calculateFaceAngle = (face4, imageSize) => { thetaY = Math.atan2(r21, r222); thetaX = 0; } - if (Number.isNaN(thetaX)) - thetaX = 0; - if (Number.isNaN(thetaY)) - thetaY = 0; - if (Number.isNaN(thetaZ)) - thetaZ = 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 } }; + 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((pt2) => [pt2[0] * imageSize[0] / size2, pt2[1] * imageSize[1] / size2, pt2[2]]); const yAxis = normalize2(subVectors(pts[1], pts[0])); @@ -42066,8 +40069,7 @@ var calculateFaceAngle = (face4, imageSize) => { // src/face/anthropometry.ts function calculateCameraDistance(face4, width) { const f = face4 == null ? void 0 : face4.annotations; - if (!(f == null ? void 0 : f.leftEyeIris) || !(f == null ? void 0 : f.rightEyeIris)) - return 0; + if (!(f == null ? void 0 : f.leftEyeIris) || !(f == null ? void 0 : f.rightEyeIris)) 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; @@ -42090,10 +40092,8 @@ var detectFace = async (instance, input) => { 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 []; + 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) { @@ -42103,8 +40103,7 @@ var detectFace = async (instance, input) => { if ((_a = instance.config.face.detector) == null ? void 0 : _a.mask) { const masked = await mask(faces[i]); Ot(faces[i].tensor); - if (masked) - faces[i].tensor = masked; + 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:"); @@ -42219,47 +40218,31 @@ var detectFace = async (instance, input) => { 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) ? cc(faces[i].tensor) : null; Ot(faces[i].tensor); - if (faces[i].tensor) - delete 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 (tensor) - res.tensor = tensor; + 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 (tensor) res.tensor = tensor; 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; + 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; }; @@ -42324,13 +40307,11 @@ var FingerGesture = class { this.weightsRelative = [1, 1, 1, 1, 1]; } curl(finger, curl, confidence) { - if (typeof this.curls[finger] === "undefined") - this.curls[finger] = []; + 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] = []; + if (!this.directions[finger]) this.directions[finger] = []; this.directions[finger].push([position, confidence]); } weight(finger, weight) { @@ -42445,18 +40426,14 @@ var options3 = { 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; + if (slope <= 0) slope = -slope; + else if (slope > 0) slope = 180 - slope; return slope; } function getSlopes(point1, point2) { - if (!point1 || !point2) - return [0, 0]; + if (!point1 || !point2) return [0, 0]; const slopeXY = calculateSlope(point1[0], point1[1], point2[0], point2[1]); - if (point1.length === 2) - return slopeXY; + if (point1.length === 2) return slopeXY; const slopeYZ = calculateSlope(point1[1], point1[2], point2[1], point2[2]); return [slopeXY, slopeYZ]; } @@ -42464,12 +40441,9 @@ 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; + 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) { @@ -42486,58 +40460,41 @@ function estimateFingerCurl(startPoint, midPoint, endPoint) { 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + if (mid_end_y_dist < 0) estimatedDirection = FingerDirection.verticalDown; + else estimatedDirection = FingerDirection.verticalUp; } return estimatedDirection; } @@ -42546,15 +40503,11 @@ function estimateDiagonalDirection(start_end_y_dist, start_mid_y_dist, mid_end_y 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; + 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; + if (reqd_horizontal_direction === FingerDirection.horizontalLeft) estimatedDirection = FingerDirection.diagonalDownLeft; + else estimatedDirection = FingerDirection.diagonalDownRight; } return estimatedDirection; } @@ -42571,12 +40524,9 @@ function calculateFingerDirection(startPoint, midPoint, endPoint, fingerSlopes) 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; + 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); @@ -42620,8 +40570,7 @@ function estimate(landmarks) { const slopesYZ = []; const fingerCurls = []; const fingerDirections = []; - if (!landmarks) - return { curls: fingerCurls, directions: fingerDirections }; + if (!landmarks) return { curls: fingerCurls, directions: fingerDirections }; for (const finger of Finger.all) { const points = Finger.getPoints(finger); const slopeAtXY = []; @@ -42652,8 +40601,7 @@ function estimate(landmarks) { return { curls: fingerCurls, directions: fingerDirections }; } function analyze(keypoints) { - if (!keypoints || keypoints.length === 0) - return null; + if (!keypoints || keypoints.length === 0) return null; const estimatorRes = estimate(keypoints); const landmarks = {}; for (const fingerIdx of Finger.all) { @@ -42666,32 +40614,26 @@ function analyze(keypoints) { } function match(keypoints) { const poses = []; - if (!keypoints || keypoints.length === 0) - return 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 }); + if (confidence >= minConfidence) poses.push({ name: gesture2.name, confidence }); } return poses; } // src/gesture/gesture.ts var body2 = (res) => { - if (!res) - return []; + 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" }); + 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) { @@ -42701,41 +40643,32 @@ var body2 = (res) => { return gestures; }; var face2 = (res) => { - if (!res) - return []; + 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"}` }); + 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" }); + 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" }); + 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` }); + 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"}` }); + if (Math.abs(chinDepth) > 10) gestures.push({ face: i, gesture: `head ${chinDepth < 0 ? "up" : "down"}` }); } } return gestures; }; var iris2 = (res) => { var _a, _b, _c2, _d2; - if (!res) - return []; + 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]) || !((_d2 = (_c2 = res[i].annotations) == null ? void 0 : _c2.rightEyeIris) == null ? void 0 : _d2[0])) - continue; + if (!((_b = (_a = res[i].annotations) == null ? void 0 : _a.leftEyeIris) == null ? void 0 : _b[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]; const areaLeft = Math.abs(sizeXLeft * sizeYLeft); @@ -42750,38 +40683,29 @@ var iris2 = (res) => { } 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 > 0.06 || rightIrisCenterX > 0.06) center = false; if (leftIrisCenterX > rightIrisCenterX) { - if (rightIrisCenterX > 0.04) - gestures.push({ iris: i, gesture: "looking right" }); + if (rightIrisCenterX > 0.04) gestures.push({ iris: i, gesture: "looking right" }); } else { - if (leftIrisCenterX > 0.04) - gestures.push({ iris: i, gesture: "looking left" }); + if (leftIrisCenterX > 0.04) 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" }); + 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 []; + 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 (finger !== "palmBase" && Array.isArray(pos) && pos[0]) fingers.push({ name: finger.toLowerCase(), position: pos[0] }); } } if (fingers && fingers.length > 0) { @@ -42792,8 +40716,7 @@ var hand2 = (res) => { } if (res[i].keypoints) { const poses = match(res[i].keypoints); - for (const pose of poses) - gestures.push({ hand: i, gesture: pose.name }); + for (const pose of poses) gestures.push({ hand: i, gesture: pose.name }); } } return gestures; @@ -46020,14 +43943,12 @@ var HandPipeline = class { 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; + 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 (!currentBox) continue; if (config3.hand.landmarks) { const angle = config3.hand.rotation ? computeRotation2(currentBox.palmLandmarks[palmLandmarksPalmBase], currentBox.palmLandmarks[palmLandmarksMiddleFingerBase]) : 0; const palmCenter = getBoxCenter2(currentBox); @@ -46078,8 +43999,7 @@ var HandPipeline = class { } this.storedBoxes = this.storedBoxes.filter((a) => a !== null); this.detectedHands = hands.length; - if (hands.length > config3.hand.maxDetected) - hands.length = config3.hand.maxDetected; + if (hands.length > config3.hand.maxDetected) hands.length = config3.hand.maxDetected; return hands; } }; @@ -46098,15 +44018,12 @@ var handPoseModel; var handPipeline; function initPipeline() { const handDetector = handDetectorModel ? new HandDetector(handDetectorModel) : void 0; - if (handDetector && handPoseModel) - handPipeline = new HandPipeline(handDetector, handPoseModel); + if (handDetector && handPoseModel) handPipeline = new HandPipeline(handDetector, handPoseModel); } async function predict14(input, config3) { - if (!handPipeline) - initPipeline(); + if (!handPipeline) initPipeline(); const predictions = await handPipeline.estimateHands(input, config3); - if (!predictions) - return []; + if (!predictions) return []; const hands = []; for (let i = 0; i < predictions.length; i++) { const annotations2 = {}; @@ -46120,14 +44037,10 @@ async function predict14(input, config3) { let boxRaw = [0, 0, 0, 0]; if (keypoints && keypoints.length > 0) { for (const pt2 of keypoints) { - if (pt2[0] < box[0]) - box[0] = pt2[0]; - if (pt2[1] < box[1]) - box[1] = pt2[1]; - if (pt2[0] > box[2]) - box[2] = pt2[0]; - if (pt2[1] > box[3]) - box[3] = pt2[1]; + if (pt2[0] < box[0]) box[0] = pt2[0]; + if (pt2[1] < box[1]) box[1] = pt2[1]; + if (pt2[0] > box[2]) box[2] = pt2[0]; + if (pt2[1] > box[3]) box[3] = pt2[1]; } box[2] -= box[0]; box[3] -= box[1]; @@ -46164,22 +44077,16 @@ async function predict14(input, config3) { } async function loadDetect2(config3) { var _a; - if (env.initial) - handDetectorModel = null; - if (!handDetectorModel) - handDetectorModel = await loadModel((_a = config3.hand.detector) == null ? void 0 : _a.modelPath); - else if (config3.debug) - log("cached model:", handDetectorModel["modelUrl"]); + if (env.initial) handDetectorModel = null; + if (!handDetectorModel) handDetectorModel = await loadModel((_a = config3.hand.detector) == null ? void 0 : _a.modelPath); + else if (config3.debug) log("cached model:", handDetectorModel["modelUrl"]); return handDetectorModel; } async function loadSkeleton(config3) { var _a; - if (env.initial) - handPoseModel = null; - if (!handPoseModel) - handPoseModel = await loadModel((_a = config3.hand.skeleton) == null ? void 0 : _a.modelPath); - else if (config3.debug) - log("cached model:", handPoseModel["modelUrl"]); + if (env.initial) handPoseModel = null; + if (!handPoseModel) handPoseModel = await loadModel((_a = config3.hand.skeleton) == null ? void 0 : _a.modelPath); + else if (config3.debug) log("cached model:", handPoseModel["modelUrl"]); return handPoseModel; } @@ -46218,35 +44125,30 @@ var fingerMap = { }; async function loadDetect3(config3) { var _a; - if (env.initial) - models2[0] = null; + 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"]); + } else if (config3.debug) log("cached model:", models2[0]["modelUrl"]); return models2[0]; } async function loadSkeleton2(config3) { var _a; - if (env.initial) - models2[1] = null; + 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"]); + } 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; + if (!input || !models2[0]) return hands; const t10 = {}; const ratio2 = (input.shape[2] || 1) / (input.shape[1] || 1); const height = Math.min(Math.round((input.shape[1] || 0) / 8) * 8, maxDetectorResolution); @@ -46282,8 +44184,7 @@ async function detectHands(input, config3) { } Object.keys(t10).forEach((tensor) => Ot(t10[tensor])); hands.sort((a, b) => b.score - a.score); - if (hands.length > (config3.hand.maxDetected || 1)) - hands.length = config3.hand.maxDetected || 1; + if (hands.length > (config3.hand.maxDetected || 1)) hands.length = config3.hand.maxDetected || 1; return hands; } async function detectFingers(input, h, config3) { @@ -46326,8 +44227,7 @@ async function detectFingers(input, h, config3) { } 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 []; + 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; @@ -46440,14 +44340,11 @@ var interpolateTime = 0; function calc2(newResult, config3) { var _a, _b, _c2, _d2, _e, _f2, _g2, _h2, _i2, _j2, _k2, _l2, _m, _n2, _o2, _p2, _q2, _r2, _s2, _t, _u2, _v2, _w2, _x2, _y, _z2; const t02 = now(); - if (!newResult) - return empty(); + 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 (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 { @@ -46478,19 +44375,15 @@ function calc2(newResult, config3) { }); 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 ((_c2 = config3.body.modelPath) == null ? void 0 : _c2.includes("movenet")) - coords = movenetcoords_exports; + 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 ((_c2 = config3.body.modelPath) == null ? void 0 : _c2.includes("movenet")) coords = movenetcoords_exports; for (const [name, indexes] of Object.entries(coords.connected)) { const pt2 = []; for (let j = 0; j < indexes.length - 1; j++) { const pt0 = keypoints.find((kp2) => kp2.part === indexes[j]); const pt1 = keypoints.find((kp2) => kp2.part === indexes[j + 1]); - if (pt0 && pt1) - pt2.push([pt0.position, pt1.position]); + if (pt0 && pt1) pt2.push([pt0.position, pt1.position]); } annotations2[name] = pt2; } @@ -46503,8 +44396,7 @@ function calc2(newResult, config3) { 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; + 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) { @@ -46571,32 +44463,26 @@ function calc2(newResult, config3) { } } } - if (newResult.gesture) - bufferedResult.gesture = newResult.gesture; + if (newResult.gesture) bufferedResult.gesture = newResult.gesture; bufferedResult.width = newResult.width; bufferedResult.height = newResult.height; const t12 = now(); interpolateTime = env.perfadd ? interpolateTime + Math.round(t12 - t02) : Math.round(t12 - t02); - if (newResult.performance) - bufferedResult.performance = { ...newResult.performance, interpolate: interpolateTime }; + if (newResult.performance) bufferedResult.performance = { ...newResult.performance, interpolate: interpolateTime }; return bufferedResult; } // src/segmentation/meet.ts var model17; async function load15(config3) { - if (!model17 || env.initial) - model17 = await loadModel(config3.segmentation.modelPath); - else if (config3.debug) - log("cached model:", model17["modelUrl"]); + 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 load15(config3); - if (!(model17 == null ? void 0 : model17["executor"]) || !((_a = model17 == null ? void 0 : model17.inputs) == null ? void 0 : _a[0].shape)) - return null; + if (!model17) model17 = await load15(config3); + if (!(model17 == null ? void 0 : model17["executor"]) || !((_a = model17 == null ? void 0 : model17.inputs) == null ? void 0 : _a[0].shape)) return null; const t10 = {}; t10.resize = eX.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 = je(t10.resize, constants.tf255); @@ -46632,8 +44518,7 @@ __export(match_exports, { similarity: () => similarity }); function distance(descriptor1, descriptor2, options4 = { order: 2, multiplier: 25 }) { - if (!descriptor1 || !descriptor1) - return Number.MAX_SAFE_INTEGER; + if (!descriptor1 || !descriptor1) return Number.MAX_SAFE_INTEGER; let sum = 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]); @@ -46642,8 +44527,7 @@ function distance(descriptor1, descriptor2, options4 = { order: 2, multiplier: 2 return (options4.multiplier || 20) * sum; } var normalizeDistance = (dist, order, min, max) => { - if (dist === 0) - return 1; + if (dist === 0) return 1; const root = order === 2 ? Math.sqrt(dist) : dist ** (1 / order); const norm = (1 - root / 100 - min) / (max - min); const clamp2 = Math.max(Math.min(norm, 1), 0); @@ -46665,8 +44549,7 @@ function find(descriptor, descriptors, options4 = { order: 2, multiplier: 25, th lowestDistance = res; index2 = i; } - if (lowestDistance < (options4.threshold || 0)) - break; + 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 }; @@ -46711,8 +44594,7 @@ function bodyParts(body4) { const right = body4.keypoints.findIndex((kp2) => kp2 && kp2.part === pair[1]); const leftTo = body4.keypoints.findIndex((kp2) => kp2 && kp2.part === compare2[0]); const rightTo = body4.keypoints.findIndex((kp2) => kp2 && kp2.part === compare2[1]); - if (!body4.keypoints[leftTo] || !body4.keypoints[rightTo]) - continue; + 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]) @@ -46746,8 +44628,7 @@ function jitter(keypoints) { function padInput(input, inputSize10) { var _a, _b; const t10 = {}; - 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; + 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], // dont touch batch @@ -46793,18 +44674,14 @@ var cache6 = { }; async function load16(config3) { var _a; - if (env.initial) - model18 = null; + 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"]); + } 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; - if (A().flagRegistry.WEBGL_USE_SHAPES_UNIFORMS) - A().set("WEBGL_USE_SHAPES_UNIFORMS", false); + if (inputSize8 < 64) inputSize8 = 256; + if (A().flagRegistry.WEBGL_USE_SHAPES_UNIFORMS) A().set("WEBGL_USE_SHAPES_UNIFORMS", false); return model18; } function parseSinglePose(res, config3, image) { @@ -46836,8 +44713,7 @@ function parseSinglePose(res, config3, image) { for (let i = 0; i < indexes.length - 1; i++) { const pt0 = keypoints.find((kp2) => kp2.part === indexes[i]); const pt1 = keypoints.find((kp2) => kp2.part === indexes[i + 1]); - if (pt0 && pt1 && pt0.score > (config3.body.minConfidence || 0) && pt1.score > (config3.body.minConfidence || 0)) - pt2.push([pt0.position, pt1.position]); + if (pt0 && pt1 && pt0.score > (config3.body.minConfidence || 0) && pt1.score > (config3.body.minConfidence || 0)) pt2.push([pt0.position, pt1.position]); } annotations2[name] = pt2; } @@ -46873,8 +44749,7 @@ function parseMultiPose(res, config3, image) { for (let i = 0; i < indexes.length - 1; i++) { const pt0 = keypoints.find((kp2) => kp2.part === indexes[i]); const pt1 = keypoints.find((kp2) => kp2.part === indexes[i + 1]); - if (pt0 && pt1 && pt0.score > (config3.body.minConfidence || 0) && pt1.score > (config3.body.minConfidence || 0)) - pt2.push([pt0.position, pt1.position]); + if (pt0 && pt1 && pt0.score > (config3.body.minConfidence || 0) && pt1.score > (config3.body.minConfidence || 0)) pt2.push([pt0.position, pt1.position]); } annotations2[name] = pt2; } @@ -46884,16 +44759,13 @@ function parseMultiPose(res, config3, image) { } } bodies.sort((a, b) => b.score - a.score); - if (bodies.length > config3.body.maxDetected) - bodies.length = config3.body.maxDetected; + 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; + 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); @@ -46929,8 +44801,7 @@ async function load17(config3) { 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"]); + } else if (config3.debug) log("cached model:", model19["modelUrl"]); return model19; } async function process4(res, outputShape, config3) { @@ -46999,8 +44870,7 @@ async function process4(res, outputShape, config3) { return results; } async function predict18(image, config3) { - if (!(model19 == null ? void 0 : model19["executor"])) - return []; + 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) { @@ -47008,16 +44878,14 @@ async function predict18(image, config3) { return last10; } skipped15 = 0; - if (!env.kernels.includes("mod") || !env.kernels.includes("sparsetodense")) - return last10; + if (!env.kernels.includes("mod") || !env.kernels.includes("sparsetodense")) return last10; return new Promise(async (resolve) => { const outputSize2 = [image.shape[2] || 0, image.shape[1] || 0]; const resizeT = eX.resizeBilinear(image, [inputSize9, inputSize9], false); const normT = je(resizeT, constants.tf255); const transposeT = mc(normT, [0, 3, 1, 2]); let objectT; - if (config3.object.enabled) - objectT = model19.execute(transposeT); + if (config3.object.enabled) objectT = model19.execute(transposeT); lastTime15 = now(); const obj = await process4(objectT, outputSize2, config3); last10 = obj; @@ -47160,10 +45028,8 @@ var MaxHeap = class { 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; + if (j < this.numberOfElements && this.less(j, j + 1)) j++; + if (!this.less(k, j)) break; this.exchange(k, j); k = j; } @@ -47195,10 +45061,8 @@ function getImageCoords(part, outputStride2, offsets) { }; } function clamp(a, min, max) { - if (a < min) - return min; - if (a > max) - return max; + if (a < min) return min; + if (a > max) return max; return a; } function squaredDistance(y12, x1, y22, x22) { @@ -47291,8 +45155,7 @@ function scoreIsMaximumInLocalWindow(keypointId, score, heatmapY, heatmapX, scor break; } } - if (!localMaximum) - break; + if (!localMaximum) break; } return localMaximum; } @@ -47303,10 +45166,8 @@ function buildPartWithScoreQueue(minConfidence2, scores) { 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 } }); + if (score < minConfidence2) continue; + if (scoreIsMaximumInLocalWindow(keypointId, score, heatmapY, heatmapX, scores)) queue.enqueue({ score, part: { heatmapY, heatmapX, id: keypointId } }); } } } @@ -47316,15 +45177,13 @@ function withinRadius(poses, { x, y: y8 }, keypointId) { return poses.some(({ keypoints }) => { var _a; const correspondingKeypoint = (_a = keypoints[keypointId]) == null ? void 0 : _a.position; - if (!correspondingKeypoint) - return false; + if (!correspondingKeypoint) return false; return squaredDistance(y8, 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; + if (!withinRadius(existingPoses, position, keypointId)) result += score; return result; }, 0); return notOverlappedKeypointScores / keypoints.length; @@ -47335,23 +45194,19 @@ function decode(offsets, scores, displacementsFwd, displacementsBwd, maxDetected 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; + 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 }); + 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 []; + if (!(model20 == null ? void 0 : model20["executor"])) return []; const res = De(() => { - if (!model20.inputs[0].shape) - return []; + if (!model20.inputs[0].shape) return []; const resized = eX.resizeBilinear(input, [model20.inputs[0].shape[2], model20.inputs[0].shape[1]]); const normalized = Te(je(Ue(resized, "float32"), 127.5), 1); const results = model20.execute(normalized, poseNetOutputs); @@ -47360,19 +45215,15 @@ async function predict19(input, config3) { return results3d; }); const buffers = await Promise.all(res.map((tensor) => tensor.buffer())); - for (const t10 of res) - Ot(t10); + for (const t10 of res) Ot(t10); const decoded = decode(buffers[0], buffers[1], buffers[2], buffers[3], config3.body.maxDetected, config3.body.minConfidence); - if (!model20.inputs[0].shape) - return []; + 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 load18(config3) { - if (!model20 || env.initial) - model20 = await loadModel(config3.body.modelPath); - else if (config3.debug) - log("cached model:", model20["modelUrl"]); + if (!model20 || env.initial) model20 = await loadModel(config3.body.modelPath); + else if (config3.debug) log("cached model:", model20["modelUrl"]); return model20; } @@ -47391,10 +45242,8 @@ function init3(config3) { t.downsample_ratio = ar(ratio); } async function load19(config3) { - if (!model21 || env.initial) - model21 = await loadModel(config3.segmentation.modelPath); - else if (config3.debug) - log("cached model:", model21["modelUrl"]); + if (!model21 || env.initial) model21 = await loadModel(config3.segmentation.modelPath); + else if (config3.debug) log("cached model:", model21["modelUrl"]); init3(config3); return model21; } @@ -47429,13 +45278,10 @@ function getState(state) { }); } async function predict20(input, config3) { - if (!model21) - model21 = await load19(config3); - if (!(model21 == null ? void 0 : model21["executor"])) - return null; + if (!model21) model21 = await load19(config3); + if (!(model21 == null ? void 0 : model21["executor"])) return null; t.src = je(input, 255); - if (ratio !== config3.segmentation.ratio) - init3(config3); + 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") { @@ -47462,18 +45308,14 @@ async function predict20(input, config3) { // src/segmentation/selfie.ts var model22; async function load20(config3) { - if (!model22 || env.initial) - model22 = await loadModel(config3.segmentation.modelPath); - else if (config3.debug) - log("cached model:", model22["modelUrl"]); + 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 load20(config3); - if (!(model22 == null ? void 0 : model22["executor"]) || !((_a = model22 == null ? void 0 : model22.inputs) == null ? void 0 : _a[0].shape)) - return null; + if (!model22) model22 = await load20(config3); + if (!(model22 == null ? void 0 : model22["executor"]) || !((_a = model22 == null ? void 0 : model22.inputs) == null ? void 0 : _a[0].shape)) return null; const t10 = {}; t10.resize = eX.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 = je(t10.resize, constants.tf255); @@ -47501,10 +45343,8 @@ async function predict21(input, config3) { // 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; + 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 = []; @@ -47514,8 +45354,7 @@ function validateModel(instance, model23, name) { if ((_b = executor == null ? void 0 : executor.graph) == null ? void 0 : _b.nodes) { for (const kernel of Object.values(executor.graph.nodes)) { const op2 = kernel.op.toLowerCase(); - if (!ops.includes(op2)) - ops.push(op2); + if (!ops.includes(op2)) ops.push(op2); } } else { if (!executor && instance.config.debug) { @@ -47527,8 +45366,7 @@ function validateModel(instance, model23, name) { missing.push(op2); } } - if (instance.config.debug && missing.length > 0) - log("model validation failed:", name, missing); + 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 { @@ -47559,15 +45397,12 @@ var Models = class { }; } reset() { - for (const model23 of Object.keys(this.models)) - this.models[model23] = null; + for (const model23 of Object.keys(this.models)) this.models[model23] = null; } async load(instance) { var _a, _b, _c2, _d2, _e, _f2, _g2, _h2, _i2, _j2, _k2, _l2, _m, _n2, _o2, _p2, _q2, _r2, _s2, _t, _u2, _v2, _w2, _x2, _y, _z2, _A2; - if (env.initial) - this.reset(); - if (instance) - this.instance = instance; + 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; @@ -47598,8 +45433,7 @@ var Models = class { m.meet = this.instance.config.segmentation.enabled && !this.models.meet && ((_z2 = this.instance.config.segmentation.modelPath) == null ? void 0 : _z2.includes("meet")) ? load15(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")) ? load19(this.instance.config) : null; for (const [model23, promise] of Object.entries(m)) { - if (promise == null ? void 0 : promise["then"]) - promise["then"]((val) => this.models[model23] = val); + if (promise == null ? void 0 : promise["then"]) promise["then"]((val) => this.models[model23] = val); } await Promise.all(Object.values(m)); } @@ -47610,8 +45444,7 @@ var Models = class { }); for (const m of models3) { const stats = Object.keys(modelStats).find((s) => s.startsWith(m.name)); - if (!stats) - continue; + if (!stats) continue; m.size = modelStats[stats].sizeLoadedWeights; m.url = modelStats[stats].url; } @@ -47626,11 +45459,9 @@ var Models = class { const missing = []; for (const defined of Object.keys(this.models)) { const model23 = this.models[defined]; - if (!model23) - continue; + if (!model23) continue; const res = validateModel(this.instance, model23, defined); - if (res) - missing.push(res); + if (res) missing.push(res); } return missing; } @@ -47651,26 +45482,19 @@ function join2(faces, bodies, hands, gestures, shape) { 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 (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; + 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"] === ((_c2 = person2.hands.right) == null ? void 0 : _c2.id)) - person2.gestures.push(gesture2); + 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"] === ((_c2 = person2.hands.right) == null ? void 0 : _c2.id)) person2.gestures.push(gesture2); } const x = []; const y8 = []; @@ -47687,8 +45511,7 @@ function join2(faces, bodies, hands, gestures, shape) { const minX = Math.min(...x); const minY = Math.min(...y8); person2.box = [minX, minY, Math.max(...x) - minX, Math.max(...y8) - 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]]; + 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; @@ -48455,10 +46278,8 @@ async function warmupCanvas(instance) { src = ""; } let img; - if (typeof Image !== "undefined") - img = new Image(); - else if (env.Image) - img = new env.Image(); + if (typeof Image !== "undefined") img = new Image(); + else if (env.Image) img = new env.Image(); else { resolve(void 0); return; @@ -48470,53 +46291,43 @@ async function warmupCanvas(instance) { resolve(void 0); } else { const ctx = canvas3.getContext("2d"); - if (ctx) - ctx.drawImage(img, 0, 0); + if (ctx) ctx.drawImage(img, 0, 0); const tensor = await instance.image(canvas3, true); const res = tensor.tensor ? await instance.detect(tensor.tensor, instance.config) : void 0; resolve(res); } }; - if (src) - img.src = src; - else - resolve(void 0); + if (src) img.src = src; + else resolve(void 0); }); } async function warmupNode(instance) { const atob2 = (str) => Buffer.from(str, "base64"); let img; - if (instance.config.warmup === "face") - img = atob2(face3); - else - img = atob2(body3); + if (instance.config.warmup === "face") img = atob2(face3); + else img = atob2(body3); let res; if ("node" in tfjs_esm_exports && sk() === "tensorflow") { - const data = E7t.decodeJpeg(img); + const data = EQt.decodeJpeg(img); const expanded = Ms(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"); + 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); + 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, _c2, _d2; - if (!A().flagRegistry.ENGINE_COMPILE_ONLY) - return; + if (!A().flagRegistry.ENGINE_COMPILE_ONLY) return; const backendType = sk(); const webGLBackend = ak(); if (backendType !== "webgl" && backendType !== "humangl" || !(webGLBackend == null ? void 0 : webGLBackend["checkCompileCompletion"])) { @@ -48526,43 +46337,35 @@ async function runCompile(instance) { const numTensorsStart = ur().state.numTensors; const compiledModels = []; for (const [modelName, model23] of Object.entries(instance.models.models)) { - if (!model23) - continue; + if (!model23) continue; 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) && ((_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; + if (shape[dim] === -1) shape[dim] = dim === 0 ? 1 : 64; } const tensor = Gr(shape, dtype); try { const res = model23.execute(tensor); compiledModels.push(modelName); - if (Array.isArray(res)) - res.forEach((t10) => Ot(t10)); - else - Ot(res); + if (Array.isArray(res)) res.forEach((t10) => Ot(t10)); + else Ot(res); } catch (e) { - if (instance.config.debug) - log("compile fail model:", modelName); + if (instance.config.debug) log("compile fail model:", modelName); } Ot(tensor); } const kernels = await webGLBackend["checkCompileCompletionAsync"](); webGLBackend["getUniformLocations"](); - if (instance.config.debug) - log("compile pass:", { models: compiledModels, kernels: kernels.length }); + if (instance.config.debug) log("compile pass:", { models: compiledModels, kernels: kernels.length }); A().set("ENGINE_COMPILE_ONLY", false); const numTensorsEnd = ur().state.numTensors; - if (numTensorsEnd - numTensorsStart > 0) - log("tensor leak:", numTensorsEnd - numTensorsStart); + if (numTensorsEnd - numTensorsStart > 0) log("tensor leak:", numTensorsEnd - numTensorsStart); } async function warmup(instance, userConfig) { await check(instance, false); const t02 = now(); instance.state = "warmup"; - if (userConfig) - instance.config = mergeDeep(instance.config, userConfig); + if (userConfig) instance.config = mergeDeep(instance.config, userConfig); if (!instance.config.warmup || instance.config.warmup.length === 0 || instance.config.warmup === "none") { return empty(); } @@ -48571,8 +46374,7 @@ async function warmup(instance, userConfig) { await runCompile(instance); const res = await runInference(instance); const t12 = now(); - if (instance.config.debug) - log("warmup", instance.config.warmup, Math.round(t12 - t02), "ms"); + if (instance.config.debug) log("warmup", instance.config.warmup, Math.round(t12 - t02), "ms"); instance.emit("warmup"); resolve(res); }); @@ -48645,28 +46447,23 @@ var Human = class { /** Performance object that contains values for all recently performed operations */ __publicField(this, "performance"); // perf members are dynamically defined as needed - __privateAdd(this, _numTensors, void 0); - __privateAdd(this, _analyzeMemoryLeaks, void 0); - __privateAdd(this, _checkSanity, void 0); + __privateAdd(this, _numTensors); + __privateAdd(this, _analyzeMemoryLeaks); + __privateAdd(this, _checkSanity); /** internal function to measure tensor leaks */ __publicField(this, "analyze", (...msg) => { - if (!__privateGet(this, _analyzeMemoryLeaks)) - return; + 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); + if (leaked !== 0) log(...msg, leaked); }); /** internal function for quick sanity check on inputs @hidden */ __privateAdd(this, _sanity, (input) => { - if (!__privateGet(this, _checkSanity)) - return null; - if (!input) - return "input is not defined"; - if (this.env.node && !(input instanceof mt)) - return "input must be a tensor"; + if (!__privateGet(this, _checkSanity)) return null; + if (!input) return "input is not defined"; + if (this.env.node && !(input instanceof mt)) return "input must be a tensor"; try { this.tf.getBackend(); } catch (e) { @@ -48681,8 +46478,7 @@ var Human = class { /** emit event */ __publicField(this, "emit", (event) => { var _a; - if ((_a = this.events) == null ? void 0 : _a.dispatchEvent) - this.events.dispatchEvent(new Event(event)); + if ((_a = this.events) == null ? void 0 : _a.dispatchEvent) this.events.dispatchEvent(new Event(event)); }); /** internal structure that keeps track of processed videos @hidden */ __privateAdd(this, _loops, {}); @@ -48694,8 +46490,7 @@ var Human = class { 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); + if (userConfig) this.config = mergeDeep(this.config, userConfig); setModelLoadOptions(this.config); this.tf = tfjs_esm_exports; this.state = "idle"; @@ -48712,16 +46507,13 @@ var Human = class { 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"]}`); + 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); + if (this.config.debug) log("environment:", envTemp); } /** Reset configuration to default values */ reset() { @@ -48734,8 +46526,7 @@ var Human = class { /** Validate current configuration schema */ validate(userConfig) { const msgs = validate(config, userConfig || this.config); - if (msgs.length === 0) - this.config = mergeDeep(this.config, userConfig); + if (msgs.length === 0) this.config = mergeDeep(this.config, userConfig); return msgs; } /** Utility wrapper for performance.now() */ @@ -48759,20 +46550,14 @@ var Human = class { */ async segmentation(input, userConfig) { var _a, _b, _c2; - if (userConfig) - this.config = mergeDeep(this.config, userConfig); - if (!this.config.segmentation.enabled) - return null; + 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; + if (!processed.tensor) return null; let tensor = null; - if ((_a = this.config.segmentation.modelPath) == null ? void 0 : _a.includes("rvm")) - tensor = await predict20(processed.tensor, this.config); - if ((_b = this.config.segmentation.modelPath) == null ? void 0 : _b.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); + if ((_a = this.config.segmentation.modelPath) == null ? void 0 : _a.includes("rvm")) tensor = await predict20(processed.tensor, this.config); + if ((_b = this.config.segmentation.modelPath) == null ? void 0 : _b.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); Ot(processed.tensor); return tensor; } @@ -48805,22 +46590,17 @@ var Human = class { 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 (userConfig) this.config = mergeDeep(this.config, userConfig); if (this.env.initial) { - if (!await check(this, false)) - log("error: backend check failed"); + if (!await check(this, false)) log("error: backend check failed"); await Ime(); if (this.env.browser) { - if (this.config.debug) - log("configuration:", this.config); - if (this.config.debug) - log("tf flags:", this.tf.ENV.flags); + 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"); + 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) { @@ -48828,8 +46608,7 @@ var Human = class { 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; + if (current > (this.performance.loadModels || 0)) this.performance.loadModels = this.env.perfadd ? (this.performance.loadModels || 0) + current : current; } /** Runs interpolation using last known result and returns smoothened result * Interpolation is based on time since last known result so can be called independently @@ -48863,10 +46642,8 @@ var Human = class { let total = 0; for (const kernel of profile.kernels) { const ms2 = Number(kernel.kernelTimeMs) || 0; - if (kernels[kernel.name]) - kernels[kernel.name] += ms2; - else - kernels[kernel.name] = ms2; + if (kernels[kernel.name]) kernels[kernel.name] += ms2; + else kernels[kernel.name] = ms2; total += ms2; } const kernelArr = []; @@ -48912,8 +46689,7 @@ var Human = class { 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"); + if (this.config.debug) log("could not convert input to tensor"); this.emit("error"); resolve(empty("could not convert input to tensor")); return; @@ -48922,13 +46698,10 @@ var Human = class { 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; + 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++; + 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 = []; @@ -48938,39 +46711,28 @@ var Human = class { 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; + 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; + 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 ((_c2 = this.config.body.modelPath) == null ? void 0 : _c2.includes("efficientpose")) - bodyRes = this.config.body.enabled ? predict3(img.tensor, bodyConfig) : []; - else if ((_d2 = this.config.body.modelPath) == null ? void 0 : _d2.includes("movenet")) - bodyRes = this.config.body.enabled ? predict17(img.tensor, bodyConfig) : []; - if (this.performance.body) - delete this.performance.body; + 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 ((_c2 = this.config.body.modelPath) == null ? void 0 : _c2.includes("efficientpose")) bodyRes = this.config.body.enabled ? predict3(img.tensor, bodyConfig) : []; + else if ((_d2 = this.config.body.modelPath) == null ? void 0 : _d2.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 ((_f2 = this.config.body.modelPath) == null ? void 0 : _f2.includes("blazepose")) - bodyRes = this.config.body.enabled ? await predict(img.tensor, bodyConfig) : []; - else if ((_g2 = this.config.body.modelPath) == null ? void 0 : _g2.includes("efficientpose")) - bodyRes = this.config.body.enabled ? await predict3(img.tensor, bodyConfig) : []; - else if ((_h2 = this.config.body.modelPath) == null ? void 0 : _h2.includes("movenet")) - bodyRes = this.config.body.enabled ? await predict17(img.tensor, bodyConfig) : []; + if ((_e = this.config.body.modelPath) == null ? void 0 : _e.includes("posenet")) bodyRes = this.config.body.enabled ? await predict19(img.tensor, bodyConfig) : []; + else if ((_f2 = this.config.body.modelPath) == null ? void 0 : _f2.includes("blazepose")) bodyRes = this.config.body.enabled ? await predict(img.tensor, bodyConfig) : []; + else if ((_g2 = this.config.body.modelPath) == null ? void 0 : _g2.includes("efficientpose")) bodyRes = this.config.body.enabled ? await predict3(img.tensor, bodyConfig) : []; + else if ((_h2 = this.config.body.modelPath) == null ? void 0 : _h2.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:"); @@ -48978,51 +46740,38 @@ var Human = class { 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 ((_j2 = (_i2 = this.config.hand.detector) == null ? void 0 : _i2.modelPath) == null ? void 0 : _j2.includes("handdetect")) - handRes = this.config.hand.enabled ? predict14(img.tensor, handConfig) : []; - else if ((_l2 = (_k2 = this.config.hand.detector) == null ? void 0 : _k2.modelPath) == null ? void 0 : _l2.includes("handtrack")) - handRes = this.config.hand.enabled ? predict15(img.tensor, handConfig) : []; - if (this.performance.hand) - delete this.performance.hand; + if ((_j2 = (_i2 = this.config.hand.detector) == null ? void 0 : _i2.modelPath) == null ? void 0 : _j2.includes("handdetect")) handRes = this.config.hand.enabled ? predict14(img.tensor, handConfig) : []; + else if ((_l2 = (_k2 = this.config.hand.detector) == null ? void 0 : _k2.modelPath) == null ? void 0 : _l2.includes("handtrack")) handRes = this.config.hand.enabled ? predict15(img.tensor, handConfig) : []; + if (this.performance.hand) 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")) - 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")) - handRes = this.config.hand.enabled ? await predict15(img.tensor, handConfig) : []; + if ((_n2 = (_m = this.config.hand.detector) == null ? void 0 : _m.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")) 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 ((_q2 = this.config.object.modelPath) == null ? void 0 : _q2.includes("nanodet")) - objectRes = this.config.object.enabled ? predict18(img.tensor, this.config) : []; - else if ((_r2 = this.config.object.modelPath) == null ? void 0 : _r2.includes("centernet")) - objectRes = this.config.object.enabled ? predict2(img.tensor, this.config) : []; - if (this.performance.object) - delete this.performance.object; + if ((_q2 = this.config.object.modelPath) == null ? void 0 : _q2.includes("nanodet")) objectRes = this.config.object.enabled ? predict18(img.tensor, this.config) : []; + else if ((_r2 = this.config.object.modelPath) == null ? void 0 : _r2.includes("centernet")) objectRes = this.config.object.enabled ? predict2(img.tensor, this.config) : []; + if (this.performance.object) delete this.performance.object; } else { timeStamp = now(); - if ((_s2 = this.config.object.modelPath) == null ? void 0 : _s2.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) : []; + if ((_s2 = this.config.object.modelPath) == null ? void 0 : _s2.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]); + 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; + 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 = ((_u2 = this.process.tensor) == null ? void 0 : _u2.shape) || [0, 0, 0, 0]; @@ -49064,19 +46813,14 @@ var Human = class { async video(element, run = true, delay = 0) { if (run) { if (!__privateGet(this, _loops)[element.id]) { - if (this.config.debug) - log("video start", 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)); + 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); + if (this.config.debug) log("video stop", element.id); __privateGet(this, _loops)[element.id] = false; } } diff --git a/dist/human.esm.js.map b/dist/human.esm.js.map index 7ef24893..c751b085 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", "../models/models.json", "../src/tfjs/load.ts", "../package.json", "../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 _G=Object.create;var QC=Object.defineProperty;var EG=Object.getOwnPropertyDescriptor;var $G=Object.getOwnPropertyNames;var RG=Object.getPrototypeOf,DG=Object.prototype.hasOwnProperty;var Kt=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),qe=(r,e)=>{for(var t in e)QC(r,t,{get:e[t],enumerable:!0})},AG=(r,e,t,o)=>{if(e&&typeof e==\"object\"||typeof e==\"function\")for(let n of $G(e))!DG.call(r,n)&&n!==t&&QC(r,n,{get:()=>e[n],enumerable:!(o=EG(e,n))||o.enumerable});return r};var zp=(r,e,t)=>(t=r!=null?_G(RG(r)):{},AG(e||!r||!r.__esModule?QC(t,\"default\",{value:r,enumerable:!0}):t,r));var U0=Kt((ple,W0)=>{W0.exports=kt;var ko=null;try{ko=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 kt(r,e,t){this.low=r|0,this.high=e|0,this.unsigned=!!t}kt.prototype.__isLong__;Object.defineProperty(kt.prototype,\"__isLong__\",{value:!0});function Wr(r){return(r&&r.__isLong__)===!0}kt.isLong=Wr;var A0={},F0={};function Fu(r,e){var t,o,n;return e?(r>>>=0,(n=0<=r&&r<256)&&(o=F0[r],o)?o:(t=Nt(r,(r|0)<0?-1:0,!0),n&&(F0[r]=t),t)):(r|=0,(n=-128<=r&&r<128)&&(o=A0[r],o)?o:(t=Nt(r,r<0?-1:0,!1),n&&(A0[r]=t),t))}kt.fromInt=Fu;function No(r,e){if(isNaN(r))return e?Au:To;if(e){if(r<0)return Au;if(r>=L0)return V0}else{if(r<=-O0)return Vr;if(r+1>=O0)return z0}return r<0?No(-r,e).neg():Nt(r%Qp|0,r/Qp|0,e)}kt.fromNumber=No;function Nt(r,e,t){return new kt(r,e,t)}kt.fromBits=Nt;var Zm=Math.pow;function cw(r,e,t){if(r.length===0)throw Error(\"empty string\");if(r===\"NaN\"||r===\"Infinity\"||r===\"+Infinity\"||r===\"-Infinity\")return To;if(typeof e==\"number\"?(t=e,e=!1):e=!!e,t=t||10,t<2||360)throw Error(\"interior hyphen\");if(o===0)return cw(r.substring(1),e,t).neg();for(var n=No(Zm(t,8)),s=To,a=0;a>>0:this.low};de.toNumber=function(){return this.unsigned?(this.high>>>0)*Qp+(this.low>>>0):this.high*Qp+(this.low>>>0)};de.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}};de.getHighBits=function(){return this.high};de.getHighBitsUnsigned=function(){return this.high>>>0};de.getLowBits=function(){return this.low};de.getLowBitsUnsigned=function(){return this.low>>>0};de.getNumBitsAbs=function(){if(this.isNegative())return this.eq(Vr)?64:this.neg().getNumBitsAbs();for(var e=this.high!=0?this.high:this.low,t=31;t>0&&!(e&1<=0};de.isOdd=function(){return(this.low&1)===1};de.isEven=function(){return(this.low&1)===0};de.equals=function(e){return Wr(e)||(e=As(e)),this.unsigned!==e.unsigned&&this.high>>>31===1&&e.high>>>31===1?!1:this.high===e.high&&this.low===e.low};de.eq=de.equals;de.notEquals=function(e){return!this.eq(e)};de.neq=de.notEquals;de.ne=de.notEquals;de.lessThan=function(e){return this.comp(e)<0};de.lt=de.lessThan;de.lessThanOrEqual=function(e){return this.comp(e)<=0};de.lte=de.lessThanOrEqual;de.le=de.lessThanOrEqual;de.greaterThan=function(e){return this.comp(e)>0};de.gt=de.greaterThan;de.greaterThanOrEqual=function(e){return this.comp(e)>=0};de.gte=de.greaterThanOrEqual;de.ge=de.greaterThanOrEqual;de.compare=function(e){if(Wr(e)||(e=As(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};de.comp=de.compare;de.negate=function(){return!this.unsigned&&this.eq(Vr)?Vr:this.not().add(Yp)};de.neg=de.negate;de.add=function(e){Wr(e)||(e=As(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,Nt(m<<16|d,c<<16|l,this.unsigned)};de.subtract=function(e){return Wr(e)||(e=As(e)),this.add(e.neg())};de.sub=de.subtract;de.multiply=function(e){if(this.isZero())return To;if(Wr(e)||(e=As(e)),ko){var t=ko.mul(this.low,this.high,e.low,e.high);return Nt(t,ko.get_high(),this.unsigned)}if(e.isZero())return To;if(this.eq(Vr))return e.isOdd()?Vr:To;if(e.eq(Vr))return this.isOdd()?Vr:To;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(M0)&&e.lt(M0))return No(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,Nt(d<<16|f,l<<16|m,this.unsigned)};de.mul=de.multiply;de.divide=function(e){if(Wr(e)||(e=As(e)),e.isZero())throw Error(\"division by zero\");if(ko){if(!this.unsigned&&this.high===-2147483648&&e.low===-1&&e.high===-1)return this;var t=(this.unsigned?ko.div_u:ko.div_s)(this.low,this.high,e.low,e.high);return Nt(t,ko.get_high(),this.unsigned)}if(this.isZero())return this.unsigned?Au:To;var o,n,s;if(this.unsigned){if(e.unsigned||(e=e.toUnsigned()),e.gt(this))return Au;if(e.gt(this.shru(1)))return B0;s=Au}else{if(this.eq(Vr)){if(e.eq(Yp)||e.eq(pw))return Vr;if(e.eq(Vr))return Yp;var a=this.shr(1);return o=a.div(e).shl(1),o.eq(To)?e.isNegative()?Yp:pw:(n=this.sub(e.mul(o)),s=o.add(n.div(e)),s)}else if(e.eq(Vr))return this.unsigned?Au:To;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=To}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:Zm(2,i-48),u=No(o),c=u.mul(e);c.isNegative()||c.gt(n);)o-=p,u=No(o,this.unsigned),c=u.mul(e);u.isZero()&&(u=Yp),s=s.add(u),n=n.sub(c)}return s};de.div=de.divide;de.modulo=function(e){if(Wr(e)||(e=As(e)),ko){var t=(this.unsigned?ko.rem_u:ko.rem_s)(this.low,this.high,e.low,e.high);return Nt(t,ko.get_high(),this.unsigned)}return this.sub(this.div(e).mul(e))};de.mod=de.modulo;de.rem=de.modulo;de.not=function(){return Nt(~this.low,~this.high,this.unsigned)};de.and=function(e){return Wr(e)||(e=As(e)),Nt(this.low&e.low,this.high&e.high,this.unsigned)};de.or=function(e){return Wr(e)||(e=As(e)),Nt(this.low|e.low,this.high|e.high,this.unsigned)};de.xor=function(e){return Wr(e)||(e=As(e)),Nt(this.low^e.low,this.high^e.high,this.unsigned)};de.shiftLeft=function(e){return Wr(e)&&(e=e.toInt()),(e&=63)===0?this:e<32?Nt(this.low<>>32-e,this.unsigned):Nt(0,this.low<>>e|this.high<<32-e,this.high>>e,this.unsigned):Nt(this.high>>e-32,this.high>=0?0:-1,this.unsigned)};de.shr=de.shiftRight;de.shiftRightUnsigned=function(e){if(Wr(e)&&(e=e.toInt()),e&=63,e===0)return this;var t=this.high;if(e<32){var o=this.low;return Nt(o>>>e|t<<32-e,t>>>e,this.unsigned)}else return e===32?Nt(t,0,this.unsigned):Nt(t>>>e-32,0,this.unsigned)};de.shru=de.shiftRightUnsigned;de.shr_u=de.shiftRightUnsigned;de.toSigned=function(){return this.unsigned?Nt(this.low,this.high,!1):this};de.toUnsigned=function(){return this.unsigned?this:Nt(this.low,this.high,!0)};de.toBytes=function(e){return e?this.toBytesLE():this.toBytesBE()};de.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]};de.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]};kt.fromBytes=function(e,t,o){return o?kt.fromBytesLE(e,t):kt.fromBytesBE(e,t)};kt.fromBytesLE=function(e,t){return new kt(e[0]|e[1]<<8|e[2]<<16|e[3]<<24,e[4]|e[5]<<8|e[6]<<16|e[7]<<24,t)};kt.fromBytesBE=function(e,t){return new kt(e[4]<<24|e[5]<<16|e[6]<<8|e[7],e[0]<<24|e[1]<<16|e[2]<<8|e[3],t)}});var Ek=Kt(()=>{});var $k=Kt(()=>{});var o1=Kt((r1,Ww)=>{(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})(r1,typeof Ww==\"object\"&&Ww,typeof define==\"function\"&&define)});var s1=Kt((n1,Uw)=>{(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})(n1,typeof Uw==\"object\"&&Uw,typeof define==\"function\"&&define)});var i1=Kt((a1,Gw)=>{(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})(a1,typeof Gw==\"object\"&&Gw,typeof define==\"function\"&&define)});var p1=Kt((u1,Hw)=>{(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})(u1,typeof Hw==\"object\"&&Hw,typeof define==\"function\"&&define)});var l1=Kt((c1,Kw)=>{(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})(c1,typeof Kw==\"object\"&&Kw,typeof define==\"function\"&&define)});var d1=Kt((m1,qw)=>{(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})(m1,typeof qw==\"object\"&&qw,typeof define==\"function\"&&define)});var f1=Kt(()=>{});var g1=Kt((h1,Md)=>{(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,S,k){var _=[];S=S==!0?{entropy:!0}:S||{};var $=g(h(S.entropy?[C,b(e)]:C==null?x():C,3),_),R=new d(_),D=function(){for(var P=R.g(n),O=i,M=0;P=u;)P/=2,O/=2,M>>>=1;return(P+M)/O};return D.int32=function(){return R.g(4)|0},D.quick=function(){return R.g(4)/4294967296},D.double=D,g(b(R.S),e),(S.pass||k||function(P,O,M,L){return L&&(L.S&&f(L,R),P.state=function(){return f(R,{})}),M?(t[a]=P,O):P})(D,$,\"global\"in S?S.global:this==t,S.state)}function d(C){var S,k=C.length,_=this,$=0,R=_.i=_.j=0,D=_.S=[];for(k||(C=[k++]);${var Dq=o1(),Aq=s1(),Fq=i1(),Pq=p1(),Oq=l1(),Mq=d1(),Ku=g1();Ku.alea=Dq;Ku.xor128=Aq;Ku.xorwow=Fq;Ku.xorshift7=Pq;Ku.xor4096=Oq;Ku.tychei=Mq;x1.exports=Ku});var Vv=Kt(()=>{});var Wv=Kt(()=>{});var LB=Kt(()=>{});var BB=Kt(()=>{});var zB=Kt(()=>{});var VB=Kt((Wg,Gv)=>{var Uv=(()=>{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 oe.buffer!=He&&Tt(oe.buffer),lt}function o(){return oe.buffer!=He&&Tt(oe.buffer),it}function n(){return oe.buffer!=He&&Tt(oe.buffer),ht}function s(){return oe.buffer!=He&&Tt(oe.buffer),Lr}function a(){return oe.buffer!=He&&Tt(oe.buffer),Mt}function i(){return oe.buffer!=He&&Tt(oe.buffer),to}function p(){return oe.buffer!=He&&Tt(oe.buffer),rr}var u=typeof e!=\"undefined\"?e:{},c,l;u.ready=new Promise(function(F,V){c=F,l=V});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,V)=>{throw V},x=typeof window==\"object\",b=typeof importScripts==\"function\",C=typeof process==\"object\"&&typeof process.versions==\"object\"&&typeof process.versions.node==\"string\",S=u.ENVIRONMENT_IS_PTHREAD||!1,k=\"\";function _(F){return u.locateFile?u.locateFile(F,k):k+F}var $,R,D,P;function O(F){if(F instanceof ku)return;j(\"exiting due to exception: \"+F)}if(C){var M=Vv(),L=Wv();b?k=L.dirname(k)+\"/\":k=__dirname+\"/\",$=(V,ue)=>(V=Fp(V)?new URL(V):L.normalize(V),M.readFileSync(V,ue?void 0:\"utf8\")),D=V=>{var ue=$(V,!0);return ue.buffer||(ue=new Uint8Array(ue)),ue},R=(V,ue,$e)=>{V=Fp(V)?new URL(V):L.normalize(V),M.readFile(V,function(Be,Le){Be?$e(Be):ue(Le.buffer)})},process.argv.length>1&&(h=process.argv[1].replace(/\\\\/g,\"/\")),f=process.argv.slice(2),process.on(\"uncaughtException\",function(V){if(!(V instanceof ku))throw V}),process.on(\"unhandledRejection\",function(V){throw V}),g=(V,ue)=>{if(Lo())throw process.exitCode=V,ue;O(ue),process.exit(V)},u.inspect=function(){return\"[Emscripten Module object]\"};let F;try{F=LB()}catch(V){throw console.error('The \"worker_threads\" module is not supported in this node.js build - perhaps a newer version is needed?'),V}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 V=new XMLHttpRequest;return V.open(\"GET\",F,!1),V.send(null),V.responseText},b&&(D=F=>{var V=new XMLHttpRequest;return V.open(\"GET\",F,!1),V.responseType=\"arraybuffer\",V.send(null),new Uint8Array(V.response)}),R=(F,V,ue)=>{var $e=new XMLHttpRequest;$e.open(\"GET\",F,!0),$e.responseType=\"arraybuffer\",$e.onload=()=>{if($e.status==200||$e.status==0&&$e.response){V($e.response);return}ue()},$e.onerror=ue,$e.send(null)}),P=F=>document.title=F);C&&typeof performance==\"undefined\"&&(global.performance=BB().performance);var B=console.log.bind(console),z=console.warn.bind(console);C&&(B=F=>M.writeSync(1,F+`\n`),z=F=>M.writeSync(2,F+`\n`));var U=u.print||B,j=u.printErr||z;Object.assign(u,d),d=null,u.arguments&&(f=u.arguments),u.thisProgram&&(h=u.thisProgram),u.quit&&(g=u.quit);var q=4,Y=Atomics.load,J=Atomics.store,re=Atomics.compareExchange,ne;u.wasmBinary&&(ne=u.wasmBinary);var ee=u.noExitRuntime||!0;typeof WebAssembly!=\"object\"&&vu(\"no native wasm support detected\");var oe,ie,le=!1,be;function _e(F,V){F||vu(V)}var ve=typeof TextDecoder!=\"undefined\"?new TextDecoder(\"utf8\"):void 0;function Fe(F,V,ue){V>>>=0;for(var $e=V+ue,Be=V;F[Be]&&!(Be>=$e);)++Be;if(Be-V>16&&F.buffer&&ve)return ve.decode(F.buffer instanceof SharedArrayBuffer?F.slice(V,Be):F.subarray(V,Be));for(var Le=\"\";V>10,56320|so&1023)}}return Le}function Pe(F,V){return F>>>=0,F?Fe(o(),F,V):\"\"}function st(F,V,ue,$e){if(ue>>>=0,!($e>0))return 0;for(var Be=ue,Le=ue+$e-1,ge=0;ge=55296&&Ne<=57343){var Ft=F.charCodeAt(++ge);Ne=65536+((Ne&1023)<<10)|Ft&1023}if(Ne<=127){if(ue>=Le)break;V[ue++>>>0]=Ne}else if(Ne<=2047){if(ue+1>=Le)break;V[ue++>>>0]=192|Ne>>6,V[ue++>>>0]=128|Ne&63}else if(Ne<=65535){if(ue+2>=Le)break;V[ue++>>>0]=224|Ne>>12,V[ue++>>>0]=128|Ne>>6&63,V[ue++>>>0]=128|Ne&63}else{if(ue+3>=Le)break;V[ue++>>>0]=240|Ne>>18,V[ue++>>>0]=128|Ne>>12&63,V[ue++>>>0]=128|Ne>>6&63,V[ue++>>>0]=128|Ne&63}}return V[ue>>>0]=0,ue-Be}function ct(F,V,ue){return st(F,o(),V,ue)}var He,lt,it,ht,gt,Lr,Mt,to,rr;S&&(He=u.buffer);function Tt(F){He=F,u.HEAP8=lt=new Int8Array(F),u.HEAP16=ht=new Int16Array(F),u.HEAP32=Lr=new Int32Array(F),u.HEAPU8=it=new Uint8Array(F),u.HEAPU16=gt=new Uint16Array(F),u.HEAPU32=Mt=new Uint32Array(F),u.HEAPF32=to=new Float32Array(F),u.HEAPF64=rr=new Float64Array(F)}var or=u.INITIAL_MEMORY||16777216;if(S)oe=u.wasmMemory,He=u.buffer;else if(u.wasmMemory)oe=u.wasmMemory;else if(oe=new WebAssembly.Memory({initial:or/65536,maximum:65536,shared:!0}),!(oe.buffer instanceof SharedArrayBuffer))throw j(\"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&&j(\"(on node you may need: --experimental-wasm-threads --experimental-wasm-bulk-memory and/or recent version)\"),Error(\"bad memory\");oe&&(He=oe.buffer),or=He.byteLength,Tt(He);var nr,ro=[],oo=[],fr=[],Va=!1;function Lo(){return ee}function Ks(){if(u.preRun)for(typeof u.preRun==\"function\"&&(u.preRun=[u.preRun]);u.preRun.length;)ol(u.preRun.shift());al(ro)}function Xt(){Va=!0,!S&&al(oo)}function Wa(){if(!S){if(u.postRun)for(typeof u.postRun==\"function\"&&(u.postRun=[u.postRun]);u.postRun.length;)d0(u.postRun.shift());al(fr)}}function ol(F){ro.unshift(F)}function nl(F){oo.unshift(F)}function d0(F){fr.unshift(F)}var ki=0,Ap=null,Ua=null;function Cy(F){ki++,u.monitorRunDependencies&&u.monitorRunDependencies(ki)}function wm(F){if(ki--,u.monitorRunDependencies&&u.monitorRunDependencies(ki),ki==0&&(Ap!==null&&(clearInterval(Ap),Ap=null),Ua)){var V=Ua;Ua=null,V()}}function vu(F){u.onAbort&&u.onAbort(F),F=\"Aborted(\"+F+\")\",j(F),le=!0,be=1,F+=\". Build with -sASSERTIONS for more info.\";var V=new WebAssembly.RuntimeError(F);throw l(V),V}var wy=\"data:application/octet-stream;base64,\";function Sm(F){return F.startsWith(wy)}function Fp(F){return F.startsWith(\"file://\")}var hr;hr=\"tfjs-backend-wasm-threaded-simd.wasm\",Sm(hr)||(hr=_(hr));function Im(F){try{if(F==hr&&ne)return new Uint8Array(ne);if(D)return D(F);throw\"both async and sync fetching of the wasm failed\"}catch(V){vu(V)}}function Sy(){if(!ne&&(x||b)){if(typeof fetch==\"function\"&&!Fp(hr))return fetch(hr,{credentials:\"same-origin\"}).then(function(F){if(!F.ok)throw\"failed to load wasm binary file at '\"+hr+\"'\";return F.arrayBuffer()}).catch(function(){return Im(hr)});if(R)return new Promise(function(F,V){R(hr,function(ue){F(new Uint8Array(ue))},V)})}return Promise.resolve().then(function(){return Im(hr)})}function Iy(){var F={env:Om,wasi_snapshot_preview1:Om};function V(ge,Ne){var Ft=ge.exports;if(u.asm=Ft,Dy(u.asm._emscripten_tls_init),nr=u.asm.__indirect_function_table,nl(u.asm.__wasm_call_ctors),ie=Ne,!S){var so=Me.unusedWorkers.length;Me.unusedWorkers.forEach(function(Ha){Me.loadWasmModuleToWorker(Ha,function(){--so||wm(\"wasm-instantiate\")})})}}S||Cy(\"wasm-instantiate\");function ue(ge){V(ge.instance,ge.module)}function $e(ge){return Sy().then(function(Ne){return WebAssembly.instantiate(Ne,F)}).then(function(Ne){return Ne}).then(ge,function(Ne){j(\"failed to asynchronously prepare wasm: \"+Ne),vu(Ne)})}function Be(){return!ne&&typeof WebAssembly.instantiateStreaming==\"function\"&&!Sm(hr)&&!Fp(hr)&&!C&&typeof fetch==\"function\"?fetch(hr,{credentials:\"same-origin\"}).then(function(ge){var Ne=WebAssembly.instantiateStreaming(ge,F);return Ne.then(ue,function(Ft){return j(\"wasm streaming compile failed: \"+Ft),j(\"falling back to ArrayBuffer instantiation\"),$e(ue)})}):$e(ue)}if(u.instantiateWasm)try{var Le=u.instantiateWasm(F,V);return Le}catch(ge){j(\"Module.instantiateWasm callback failed with error: \"+ge),l(ge)}return Be().catch(l),{}}var f0,h0,vm={};function ku(F){this.name=\"ExitStatus\",this.message=\"Program terminated with exit(\"+F+\")\",this.status=F}function vy(F){var V=Me.pthreads[F];delete Me.pthreads[F],V.terminate(),jC(F),Me.runningWorkers.splice(Me.runningWorkers.indexOf(V),1),V.pthread_ptr=0}function ky(F){var V=Me.pthreads[F];V.postMessage({cmd:\"cancel\"})}function sl(F){var V=Me.pthreads[F];_e(V),Me.returnWorkerToPool(V)}function Ny(F){var V=Me.getNewWorker();if(!V)return 6;Me.runningWorkers.push(V),Me.pthreads[F.pthread_ptr]=V,V.pthread_ptr=F.pthread_ptr;var ue={cmd:\"run\",start_routine:F.startRoutine,arg:F.arg,pthread_ptr:F.pthread_ptr};return V.runPthread=()=>{C&&V.ref(),V.postMessage(ue,F.transferList),delete V.runPthread},V.loaded&&V.runPthread(),0}var km={varargs:void 0,get:function(){km.varargs+=4;var F=s()[km.varargs-4>>>2];return F},getStr:function(F){var V=Pe(F);return V}};function Nm(F){if(S)return Ni(1,1,F);be=F,Lo()||(Me.terminateAllThreads(),u.onExit&&u.onExit(F),le=!0),g(F,new ku(F))}function Ty(F,V){if(be=F,!V&&S)throw _m(F),\"unwind\";Nm(F)}var Tm=Ty;function _y(F){if(F instanceof ku||F==\"unwind\")return be;g(1,F)}var Me={unusedWorkers:[],runningWorkers:[],tlsInitFunctions:[],pthreads:{},init:function(){S?Me.initWorker():Me.initMainThread()},initMainThread:function(){for(var F=8;F--;)Me.allocateUnusedWorker()},initWorker:function(){ee=!1},setExitStatus:function(F){be=F},terminateAllThreads:function(){for(var F of Object.values(Me.pthreads))Me.returnWorkerToPool(F);for(var F of Me.unusedWorkers)F.terminate();Me.unusedWorkers=[]},returnWorkerToPool:function(F){var V=F.pthread_ptr;delete Me.pthreads[V],Me.unusedWorkers.push(F),Me.runningWorkers.splice(Me.runningWorkers.indexOf(F),1),F.pthread_ptr=0,C&&F.unref(),jC(V)},receiveObjectTransfer:function(F){},threadInitTLS:function(){Me.tlsInitFunctions.forEach(F=>F())},loadWasmModuleToWorker:function(F,V){F.onmessage=Le=>{var ge=Le.data,Ne=ge.cmd;if(F.pthread_ptr&&(Me.currentProxiedOperationCallerThread=F.pthread_ptr),ge.targetThread&&ge.targetThread!=Wm()){var Ft=Me.pthreads[ge.targetThread];Ft?Ft.postMessage(ge,ge.transferList):j('Internal error! Worker sent a message \"'+Ne+'\" to target pthread '+ge.targetThread+\", but that thread no longer exists!\"),Me.currentProxiedOperationCallerThread=void 0;return}Ne===\"processProxyingQueue\"?il(ge.queue):Ne===\"spawnThread\"?Ny(ge):Ne===\"cleanupThread\"?sl(ge.thread):Ne===\"killThread\"?vy(ge.thread):Ne===\"cancelThread\"?ky(ge.thread):Ne===\"loaded\"?(F.loaded=!0,C&&F.unref(),V&&V(F),F.runPthread&&F.runPthread()):Ne===\"print\"?U(\"Thread \"+ge.threadId+\": \"+ge.text):Ne===\"printErr\"?j(\"Thread \"+ge.threadId+\": \"+ge.text):Ne===\"alert\"?alert(\"Thread \"+ge.threadId+\": \"+ge.text):ge.target===\"setimmediate\"?F.postMessage(ge):Ne===\"callHandler\"?u[ge.handler](...ge.args):Ne&&j(\"worker sent an unknown command \"+Ne),Me.currentProxiedOperationCallerThread=void 0},F.onerror=Le=>{var ge=\"worker sent an error!\";throw j(ge+\" \"+Le.filename+\":\"+Le.lineno+\": \"+Le.message),Le},C&&(F.on(\"message\",function(Le){F.onmessage({data:Le})}),F.on(\"error\",function(Le){F.onerror(Le)}),F.on(\"detachedExit\",function(){}));var ue=[],$e=[\"onExit\",\"onAbort\",\"print\",\"printErr\"];for(var Be of $e)u.hasOwnProperty(Be)&&ue.push(Be);F.postMessage({cmd:\"load\",handlers:ue,urlOrBlob:u.mainScriptUrlOrBlob||r,wasmMemory:oe,wasmModule:ie})},allocateUnusedWorker:function(){var F,V=_(\"tfjs-backend-wasm-threaded-simd.worker.js\");F=new Worker(V),Me.unusedWorkers.push(F)},getNewWorker:function(){return Me.unusedWorkers.length==0&&(Me.allocateUnusedWorker(),Me.loadWasmModuleToWorker(Me.unusedWorkers[0])),Me.unusedWorkers.pop()}};u.PThread=Me;function al(F){for(;F.length>0;)F.shift()(u)}function Ey(){var F=Wm(),V=s()[F+52>>>2],ue=s()[F+56>>>2],$e=V-ue;w0(V,$e),Um(V)}u.establishStackSpace=Ey;function _m(F){if(S)return Ni(2,0,F);try{Tm(F)}catch(V){_y(V)}}var Pp=[];function $y(F){var V=Pp[F];return V||(F>=Pp.length&&(Pp.length=F+1),Pp[F]=V=nr.get(F)),V}function Ry(F,V){var ue=$y(F)(V);Lo()?Me.setExitStatus(ue):C0(ue)}u.invokeEntryPoint=Ry;function Dy(F){Me.tlsInitFunctions.push(F)}function Ay(F){x0(F,!b,1,!x),Me.threadInitTLS()}function Fy(F){S?postMessage({cmd:\"cleanupThread\",thread:F}):sl(F)}function Em(F,V,ue,$e){return S?Ni(3,1,F,V,ue,$e):$m(F,V,ue,$e)}function $m(F,V,ue,$e){if(typeof SharedArrayBuffer==\"undefined\")return j(\"Current environment does not support SharedArrayBuffer, pthreads are not available!\"),6;var Be=[],Le=0;if(S&&(Be.length===0||Le))return Em(F,V,ue,$e);if(Le)return Le;var ge={startRoutine:ue,pthread_ptr:F,arg:$e,transferList:Be};return S?(ge.cmd=\"spawnThread\",postMessage(ge,Be),0):Ny(ge)}function Py(){return 65536}var Oy=!0;function My(){return Oy}function il(F){Atomics.store(s(),F>>2,1),Wm()&&b0(F),Atomics.compareExchange(s(),F>>2,1,0)}u.executeNotifiedProxyingQueue=il;function Ly(F,V,ue,$e){if(F==V)setTimeout(()=>il($e));else if(S)postMessage({targetThread:F,cmd:\"processProxyingQueue\",queue:$e});else{var Be=Me.pthreads[F];if(!Be)return;Be.postMessage({cmd:\"processProxyingQueue\",queue:$e})}return 1}function By(F,V,ue){return-1}function zy(){vu(\"\")}function Nu(F){Nu.shown||(Nu.shown={}),Nu.shown[F]||(Nu.shown[F]=1,C&&(F=\"warning: \"+F),j(F))}function Vy(){C||b||Nu(\"Blocking on the main thread is very dangerous, see https://emscripten.org/docs/porting/pthreads.html#blocking-on-the-main-browser-thread\")}function Wy(){return Date.now()}function Rm(){return 4294901760}function Uy(){return Rm()}var ul;C?ul=()=>{var F=process.hrtime();return F[0]*1e3+F[1]/1e6}:ul=()=>performance.timeOrigin+performance.now();function Gy(F,V,ue){o().copyWithin(F>>>0,V>>>0,V+ue>>>0)}function Hy(){return C?zB().cpus().length:navigator.hardwareConcurrency}function Ky(F){var V=XC(),ue=F();return Um(V),ue}function Ni(F,V){var ue=arguments.length-2,$e=arguments;return Ky(()=>{for(var Be=ue,Le=Gm(Be*8),ge=Le>>3,Ne=0;Ne>>0]=Ft}return y0(F,Be,Le,V)})}var pl=[];function qy(F,V,ue){pl.length=V;for(var $e=ue>>3,Be=0;Be>>0];var Le=F<0,ge=Le?vm[-F-1]:rb[F];return ge.apply(null,pl)}function jy(F){try{return oe.grow(F-He.byteLength+65535>>>16),Tt(oe.buffer),1}catch(V){}}function Xy(F){var V=o().length;if(F=F>>>0,F<=V)return!1;var ue=Rm();if(F>ue)return!1;let $e=(Ft,so)=>Ft+(so-Ft%so)%so;for(var Be=1;Be<=4;Be*=2){var Le=V*(1+.2/Be);Le=Math.min(Le,F+100663296);var ge=Math.min(ue,$e(Math.max(F,Le),65536)),Ne=jy(ge);if(Ne)return!0}return!1}function Yy(){throw\"unwind\"}function Dm(F){return S?Ni(4,1,F):52}function Am(F,V,ue,$e,Be){return S?Ni(5,1,F,V,ue,$e,Be):70}var Qy=[null,[],[]];function Zy(F,V){var ue=Qy[F];V===0||V===10?((F===1?U:j)(Fe(ue,0)),ue.length=0):ue.push(V)}function Fm(F,V,ue,$e){if(S)return Ni(6,1,F,V,ue,$e);for(var Be=0,Le=0;Le>>2],Ne=a()[V+4>>>2];V+=8;for(var Ft=0;Ft>>0]);Be+=Ne}return a()[$e>>>2]=Be,0}function Pm(F){var V=u[\"_\"+F];return V}function Jy(F,V){t().set(F,V>>>0)}function eb(F,V,ue,$e,Be){var Le={string:Br=>{var Bp=0;if(Br!=null&&Br!==0){var v0=(Br.length<<2)+1;Bp=Gm(v0),ct(Br,Bp,v0)}return Bp},array:Br=>{var Bp=Gm(Br.length);return Jy(Br,Bp),Bp}};function ge(Br){return V===\"string\"?Pe(Br):V===\"boolean\"?!!Br:Br}var Ne=Pm(F),Ft=[],so=0;if($e)for(var Ha=0;Ha<$e.length;Ha++){var I0=Le[ue[Ha]];I0?(so===0&&(so=XC()),Ft[Ha]=I0($e[Ha])):Ft[Ha]=$e[Ha]}var YC=Ne.apply(null,Ft);function TG(Br){return so!==0&&Um(so),ge(Br)}return YC=TG(YC),YC}function tb(F,V,ue,$e){ue=ue||[];var Be=ue.every(ge=>ge===\"number\"||ge===\"boolean\"),Le=V!==\"string\";return Le&&Be&&!$e?Pm(F):function(){return eb(F,V,ue,arguments,$e)}}Me.init();var rb=[null,Nm,_m,Em,Dm,Am,Fm],Om={__emscripten_init_main_thread_js:Ay,__emscripten_thread_cleanup:Fy,__pthread_create_js:$m,_emscripten_default_pthread_stack_size:Py,_emscripten_get_now_is_monotonic:My,_emscripten_notify_task_queue:Ly,_emscripten_set_offscreencanvas_size:By,abort:zy,emscripten_check_blocking_allowed:Vy,emscripten_date_now:Wy,emscripten_get_heap_max:Uy,emscripten_get_now:ul,emscripten_memcpy_big:Gy,emscripten_num_logical_cores:Hy,emscripten_receive_on_main_thread_js:qy,emscripten_resize_heap:Xy,emscripten_unwind_to_js_event_loop:Yy,exit:Tm,fd_close:Dm,fd_seek:Am,fd_write:Fm,memory:oe||u.wasmMemory},g0=Iy(),ob=u.___wasm_call_ctors=function(){return(ob=u.___wasm_call_ctors=u.asm.__wasm_call_ctors).apply(null,arguments)},nb=u._init=function(){return(nb=u._init=u.asm.init).apply(null,arguments)},sb=u._init_with_threads_count=function(){return(sb=u._init_with_threads_count=u.asm.init_with_threads_count).apply(null,arguments)},ab=u._get_threads_count=function(){return(ab=u._get_threads_count=u.asm.get_threads_count).apply(null,arguments)},ib=u._register_tensor=function(){return(ib=u._register_tensor=u.asm.register_tensor).apply(null,arguments)},ub=u._dispose_data=function(){return(ub=u._dispose_data=u.asm.dispose_data).apply(null,arguments)},pb=u._dispose=function(){return(pb=u._dispose=u.asm.dispose).apply(null,arguments)},cb=u._Abs=function(){return(cb=u._Abs=u.asm.Abs).apply(null,arguments)},lb=u._Acos=function(){return(lb=u._Acos=u.asm.Acos).apply(null,arguments)},mb=u._Acosh=function(){return(mb=u._Acosh=u.asm.Acosh).apply(null,arguments)},db=u._Add=function(){return(db=u._Add=u.asm.Add).apply(null,arguments)},fb=u._AddN=function(){return(fb=u._AddN=u.asm.AddN).apply(null,arguments)},hb=u._All=function(){return(hb=u._All=u.asm.All).apply(null,arguments)},gb=u._Any=function(){return(gb=u._Any=u.asm.Any).apply(null,arguments)},xb=u._ArgMax=function(){return(xb=u._ArgMax=u.asm.ArgMax).apply(null,arguments)},yb=u._ArgMin=function(){return(yb=u._ArgMin=u.asm.ArgMin).apply(null,arguments)},bb=u._Asin=function(){return(bb=u._Asin=u.asm.Asin).apply(null,arguments)},Cb=u._Asinh=function(){return(Cb=u._Asinh=u.asm.Asinh).apply(null,arguments)},wb=u._Atan=function(){return(wb=u._Atan=u.asm.Atan).apply(null,arguments)},Sb=u._Atan2=function(){return(Sb=u._Atan2=u.asm.Atan2).apply(null,arguments)},Ib=u._Atanh=function(){return(Ib=u._Atanh=u.asm.Atanh).apply(null,arguments)},vb=u._AvgPool=function(){return(vb=u._AvgPool=u.asm.AvgPool).apply(null,arguments)},kb=u._AvgPool3D=function(){return(kb=u._AvgPool3D=u.asm.AvgPool3D).apply(null,arguments)},Nb=u._AvgPool3DGrad=function(){return(Nb=u._AvgPool3DGrad=u.asm.AvgPool3DGrad).apply(null,arguments)},Tb=u._AvgPoolGrad=function(){return(Tb=u._AvgPoolGrad=u.asm.AvgPoolGrad).apply(null,arguments)},_b=u._BatchMatMul=function(){return(_b=u._BatchMatMul=u.asm.BatchMatMul).apply(null,arguments)},Eb=u._Bincount=function(){return(Eb=u._Bincount=u.asm.Bincount).apply(null,arguments)},$b=u._BitwiseAnd=function(){return($b=u._BitwiseAnd=u.asm.BitwiseAnd).apply(null,arguments)},Rb=u._Ceil=function(){return(Rb=u._Ceil=u.asm.Ceil).apply(null,arguments)},Db=u._ClipByValue=function(){return(Db=u._ClipByValue=u.asm.ClipByValue).apply(null,arguments)},Ab=u._Conv2D=function(){return(Ab=u._Conv2D=u.asm.Conv2D).apply(null,arguments)},Fb=u._Conv2DBackpropInput=function(){return(Fb=u._Conv2DBackpropInput=u.asm.Conv2DBackpropInput).apply(null,arguments)},Pb=u._Conv3D=function(){return(Pb=u._Conv3D=u.asm.Conv3D).apply(null,arguments)},Ob=u._Conv3DBackpropFilterV2=function(){return(Ob=u._Conv3DBackpropFilterV2=u.asm.Conv3DBackpropFilterV2).apply(null,arguments)},Mb=u._Conv3DBackpropInputV2=function(){return(Mb=u._Conv3DBackpropInputV2=u.asm.Conv3DBackpropInputV2).apply(null,arguments)},Lb=u._Cos=function(){return(Lb=u._Cos=u.asm.Cos).apply(null,arguments)},Bb=u._Cosh=function(){return(Bb=u._Cosh=u.asm.Cosh).apply(null,arguments)},zb=u._CropAndResize=function(){return(zb=u._CropAndResize=u.asm.CropAndResize).apply(null,arguments)},Vb=u._Cumprod=function(){return(Vb=u._Cumprod=u.asm.Cumprod).apply(null,arguments)},Wb=u._Cumsum=function(){return(Wb=u._Cumsum=u.asm.Cumsum).apply(null,arguments)},Ub=u._DenseBincount=function(){return(Ub=u._DenseBincount=u.asm.DenseBincount).apply(null,arguments)},Gb=u._DepthToSpace=function(){return(Gb=u._DepthToSpace=u.asm.DepthToSpace).apply(null,arguments)},Hb=u._DepthwiseConv2dNative=function(){return(Hb=u._DepthwiseConv2dNative=u.asm.DepthwiseConv2dNative).apply(null,arguments)},Kb=u._Diag=function(){return(Kb=u._Diag=u.asm.Diag).apply(null,arguments)},qb=u._Dilation2D=function(){return(qb=u._Dilation2D=u.asm.Dilation2D).apply(null,arguments)},jb=u._Dilation2DBackpropFilter=function(){return(jb=u._Dilation2DBackpropFilter=u.asm.Dilation2DBackpropFilter).apply(null,arguments)},Xb=u._Dilation2DBackpropInput=function(){return(Xb=u._Dilation2DBackpropInput=u.asm.Dilation2DBackpropInput).apply(null,arguments)},Yb=u._Elu=function(){return(Yb=u._Elu=u.asm.Elu).apply(null,arguments)},Qb=u._EluGrad=function(){return(Qb=u._EluGrad=u.asm.EluGrad).apply(null,arguments)},Zb=u._Equal=function(){return(Zb=u._Equal=u.asm.Equal).apply(null,arguments)},Jb=u._Erf=function(){return(Jb=u._Erf=u.asm.Erf).apply(null,arguments)},eC=u._Exp=function(){return(eC=u._Exp=u.asm.Exp).apply(null,arguments)},tC=u._Expm1=function(){return(tC=u._Expm1=u.asm.Expm1).apply(null,arguments)},rC=u._FlipLeftRight=function(){return(rC=u._FlipLeftRight=u.asm.FlipLeftRight).apply(null,arguments)},oC=u._Floor=function(){return(oC=u._Floor=u.asm.Floor).apply(null,arguments)},nC=u._FloorDiv=function(){return(nC=u._FloorDiv=u.asm.FloorDiv).apply(null,arguments)},sC=u._FusedBatchNorm=function(){return(sC=u._FusedBatchNorm=u.asm.FusedBatchNorm).apply(null,arguments)},aC=u._FusedConv2D=function(){return(aC=u._FusedConv2D=u.asm.FusedConv2D).apply(null,arguments)},iC=u._FusedDepthwiseConv2D=function(){return(iC=u._FusedDepthwiseConv2D=u.asm.FusedDepthwiseConv2D).apply(null,arguments)},uC=u._Gather=function(){return(uC=u._Gather=u.asm.Gather).apply(null,arguments)},pC=u._GatherNd=function(){return(pC=u._GatherNd=u.asm.GatherNd).apply(null,arguments)},cC=u._Greater=function(){return(cC=u._Greater=u.asm.Greater).apply(null,arguments)},lC=u._GreaterEqual=function(){return(lC=u._GreaterEqual=u.asm.GreaterEqual).apply(null,arguments)},mC=u._IsFinite=function(){return(mC=u._IsFinite=u.asm.IsFinite).apply(null,arguments)},dC=u._IsInf=function(){return(dC=u._IsInf=u.asm.IsInf).apply(null,arguments)},fC=u._IsNan=function(){return(fC=u._IsNan=u.asm.IsNan).apply(null,arguments)},hC=u._LRN=function(){return(hC=u._LRN=u.asm.LRN).apply(null,arguments)},gC=u._LRNGrad=function(){return(gC=u._LRNGrad=u.asm.LRNGrad).apply(null,arguments)},xC=u._LeakyRelu=function(){return(xC=u._LeakyRelu=u.asm.LeakyRelu).apply(null,arguments)},yC=u._Less=function(){return(yC=u._Less=u.asm.Less).apply(null,arguments)},bC=u._LessEqual=function(){return(bC=u._LessEqual=u.asm.LessEqual).apply(null,arguments)},CC=u._LinSpace=function(){return(CC=u._LinSpace=u.asm.LinSpace).apply(null,arguments)},wC=u._Log=function(){return(wC=u._Log=u.asm.Log).apply(null,arguments)},SC=u._Log1p=function(){return(SC=u._Log1p=u.asm.Log1p).apply(null,arguments)},IC=u._LogicalAnd=function(){return(IC=u._LogicalAnd=u.asm.LogicalAnd).apply(null,arguments)},vC=u._LogicalNot=function(){return(vC=u._LogicalNot=u.asm.LogicalNot).apply(null,arguments)},kC=u._LogicalOr=function(){return(kC=u._LogicalOr=u.asm.LogicalOr).apply(null,arguments)},NC=u._LogicalXor=function(){return(NC=u._LogicalXor=u.asm.LogicalXor).apply(null,arguments)},TC=u._Max=function(){return(TC=u._Max=u.asm.Max).apply(null,arguments)},_C=u._MaxPool=function(){return(_C=u._MaxPool=u.asm.MaxPool).apply(null,arguments)},EC=u._MaxPool3D=function(){return(EC=u._MaxPool3D=u.asm.MaxPool3D).apply(null,arguments)},$C=u._MaxPool3DGrad=function(){return($C=u._MaxPool3DGrad=u.asm.MaxPool3DGrad).apply(null,arguments)},RC=u._MaxPoolGrad=function(){return(RC=u._MaxPoolGrad=u.asm.MaxPoolGrad).apply(null,arguments)},DC=u._MaxPoolWithArgmax=function(){return(DC=u._MaxPoolWithArgmax=u.asm.MaxPoolWithArgmax).apply(null,arguments)},AC=u._Maximum=function(){return(AC=u._Maximum=u.asm.Maximum).apply(null,arguments)},FC=u._Mean=function(){return(FC=u._Mean=u.asm.Mean).apply(null,arguments)},PC=u._Min=function(){return(PC=u._Min=u.asm.Min).apply(null,arguments)},OC=u._Minimum=function(){return(OC=u._Minimum=u.asm.Minimum).apply(null,arguments)},MC=u._MirrorPad=function(){return(MC=u._MirrorPad=u.asm.MirrorPad).apply(null,arguments)},LC=u._Mod=function(){return(LC=u._Mod=u.asm.Mod).apply(null,arguments)},BC=u._Multinomial=function(){return(BC=u._Multinomial=u.asm.Multinomial).apply(null,arguments)},zC=u._Multiply=function(){return(zC=u._Multiply=u.asm.Multiply).apply(null,arguments)},VC=u._Neg=function(){return(VC=u._Neg=u.asm.Neg).apply(null,arguments)},WC=u._NonMaxSuppressionV3=function(){return(WC=u._NonMaxSuppressionV3=u.asm.NonMaxSuppressionV3).apply(null,arguments)},UC=u._NonMaxSuppressionV4=function(){return(UC=u._NonMaxSuppressionV4=u.asm.NonMaxSuppressionV4).apply(null,arguments)},Mm=u._NonMaxSuppressionV5=function(){return(Mm=u._NonMaxSuppressionV5=u.asm.NonMaxSuppressionV5).apply(null,arguments)},Lm=u._NotEqual=function(){return(Lm=u._NotEqual=u.asm.NotEqual).apply(null,arguments)},cl=u._OneHot=function(){return(cl=u._OneHot=u.asm.OneHot).apply(null,arguments)},GC=u._PadV2=function(){return(GC=u._PadV2=u.asm.PadV2).apply(null,arguments)},HC=u._Pow=function(){return(HC=u._Pow=u.asm.Pow).apply(null,arguments)},Op=u._Prelu=function(){return(Op=u._Prelu=u.asm.Prelu).apply(null,arguments)},Bm=u._Prod=function(){return(Bm=u._Prod=u.asm.Prod).apply(null,arguments)},Mp=u._RealDiv=function(){return(Mp=u._RealDiv=u.asm.RealDiv).apply(null,arguments)},Lp=u._Reciprocal=function(){return(Lp=u._Reciprocal=u.asm.Reciprocal).apply(null,arguments)},KC=u._Relu=function(){return(KC=u._Relu=u.asm.Relu).apply(null,arguments)},K=u._Relu6=function(){return(K=u._Relu6=u.asm.Relu6).apply(null,arguments)},ae=u._ResizeBilinear=function(){return(ae=u._ResizeBilinear=u.asm.ResizeBilinear).apply(null,arguments)},Ee=u._ResizeBilinearGrad=function(){return(Ee=u._ResizeBilinearGrad=u.asm.ResizeBilinearGrad).apply(null,arguments)},at=u._ResizeNearestNeighbor=function(){return(at=u._ResizeNearestNeighbor=u.asm.ResizeNearestNeighbor).apply(null,arguments)},_t=u._ResizeNearestNeighborGrad=function(){return(_t=u._ResizeNearestNeighborGrad=u.asm.ResizeNearestNeighborGrad).apply(null,arguments)},Et=u._Reverse=function(){return(Et=u._Reverse=u.asm.Reverse).apply(null,arguments)},Qe=u._RotateWithOffset=function(){return(Qe=u._RotateWithOffset=u.asm.RotateWithOffset).apply(null,arguments)},Ke=u._Round=function(){return(Ke=u._Round=u.asm.Round).apply(null,arguments)},Ut=u._Rsqrt=function(){return(Ut=u._Rsqrt=u.asm.Rsqrt).apply(null,arguments)},no=u._ScatterNd=function(){return(no=u._ScatterNd=u.asm.ScatterNd).apply(null,arguments)},Ga=u._SearchSorted=function(){return(Ga=u._SearchSorted=u.asm.SearchSorted).apply(null,arguments)},zm=u._SelectV2=function(){return(zm=u._SelectV2=u.asm.SelectV2).apply(null,arguments)},ll=u._Selu=function(){return(ll=u._Selu=u.asm.Selu).apply(null,arguments)},qC=u._Sigmoid=function(){return(qC=u._Sigmoid=u.asm.Sigmoid).apply(null,arguments)},yr=u._Sign=function(){return(yr=u._Sign=u.asm.Sign).apply(null,arguments)},Ti=u._Sin=function(){return(Ti=u._Sin=u.asm.Sin).apply(null,arguments)},Vm=u._Sinh=function(){return(Vm=u._Sinh=u.asm.Sinh).apply(null,arguments)},XU=u._Softmax=function(){return(XU=u._Softmax=u.asm.Softmax).apply(null,arguments)},YU=u._Softplus=function(){return(YU=u._Softplus=u.asm.Softplus).apply(null,arguments)},QU=u._SparseFillEmptyRows=function(){return(QU=u._SparseFillEmptyRows=u.asm.SparseFillEmptyRows).apply(null,arguments)},ZU=u._SparseReshape=function(){return(ZU=u._SparseReshape=u.asm.SparseReshape).apply(null,arguments)},JU=u._SparseSegmentReduction=function(){return(JU=u._SparseSegmentReduction=u.asm.SparseSegmentReduction).apply(null,arguments)},eG=u._SparseToDense=function(){return(eG=u._SparseToDense=u.asm.SparseToDense).apply(null,arguments)},tG=u._Sqrt=function(){return(tG=u._Sqrt=u.asm.Sqrt).apply(null,arguments)},rG=u._Square=function(){return(rG=u._Square=u.asm.Square).apply(null,arguments)},oG=u._SquaredDifference=function(){return(oG=u._SquaredDifference=u.asm.SquaredDifference).apply(null,arguments)},nG=u._Step=function(){return(nG=u._Step=u.asm.Step).apply(null,arguments)},sG=u._StridedSlice=function(){return(sG=u._StridedSlice=u.asm.StridedSlice).apply(null,arguments)},aG=u._Sub=function(){return(aG=u._Sub=u.asm.Sub).apply(null,arguments)},iG=u._Sum=function(){return(iG=u._Sum=u.asm.Sum).apply(null,arguments)},uG=u._Tan=function(){return(uG=u._Tan=u.asm.Tan).apply(null,arguments)},pG=u._Tanh=function(){return(pG=u._Tanh=u.asm.Tanh).apply(null,arguments)},cG=u._TensorScatterUpdate=function(){return(cG=u._TensorScatterUpdate=u.asm.TensorScatterUpdate).apply(null,arguments)},lG=u._Tile=function(){return(lG=u._Tile=u.asm.Tile).apply(null,arguments)},mG=u._TopK=function(){return(mG=u._TopK=u.asm.TopK).apply(null,arguments)},dG=u._Transform=function(){return(dG=u._Transform=u.asm.Transform).apply(null,arguments)},fG=u._Transpose=function(){return(fG=u._Transpose=u.asm.Transpose).apply(null,arguments)},hG=u.__FusedMatMul=function(){return(hG=u.__FusedMatMul=u.asm._FusedMatMul).apply(null,arguments)},gG=u._malloc=function(){return(gG=u._malloc=u.asm.malloc).apply(null,arguments)},xG=u._free=function(){return(xG=u._free=u.asm.free).apply(null,arguments)},yG=u.__emscripten_tls_init=function(){return(yG=u.__emscripten_tls_init=u.asm._emscripten_tls_init).apply(null,arguments)},Wm=u._pthread_self=function(){return(Wm=u._pthread_self=u.asm.pthread_self).apply(null,arguments)},bG=u.___errno_location=function(){return(bG=u.___errno_location=u.asm.__errno_location).apply(null,arguments)},x0=u.__emscripten_thread_init=function(){return(x0=u.__emscripten_thread_init=u.asm._emscripten_thread_init).apply(null,arguments)},CG=u.__emscripten_thread_crashed=function(){return(CG=u.__emscripten_thread_crashed=u.asm._emscripten_thread_crashed).apply(null,arguments)},wG=u._emscripten_main_thread_process_queued_calls=function(){return(wG=u._emscripten_main_thread_process_queued_calls=u.asm.emscripten_main_thread_process_queued_calls).apply(null,arguments)},SG=u._emscripten_main_browser_thread_id=function(){return(SG=u._emscripten_main_browser_thread_id=u.asm.emscripten_main_browser_thread_id).apply(null,arguments)},y0=u._emscripten_run_in_main_runtime_thread_js=function(){return(y0=u._emscripten_run_in_main_runtime_thread_js=u.asm.emscripten_run_in_main_runtime_thread_js).apply(null,arguments)},IG=u._emscripten_dispatch_to_thread_=function(){return(IG=u._emscripten_dispatch_to_thread_=u.asm.emscripten_dispatch_to_thread_).apply(null,arguments)},b0=u.__emscripten_proxy_execute_task_queue=function(){return(b0=u.__emscripten_proxy_execute_task_queue=u.asm._emscripten_proxy_execute_task_queue).apply(null,arguments)},jC=u.__emscripten_thread_free_data=function(){return(jC=u.__emscripten_thread_free_data=u.asm._emscripten_thread_free_data).apply(null,arguments)},C0=u.__emscripten_thread_exit=function(){return(C0=u.__emscripten_thread_exit=u.asm._emscripten_thread_exit).apply(null,arguments)},w0=u._emscripten_stack_set_limits=function(){return(w0=u._emscripten_stack_set_limits=u.asm.emscripten_stack_set_limits).apply(null,arguments)},XC=u.stackSave=function(){return(XC=u.stackSave=u.asm.stackSave).apply(null,arguments)},Um=u.stackRestore=function(){return(Um=u.stackRestore=u.asm.stackRestore).apply(null,arguments)},Gm=u.stackAlloc=function(){return(Gm=u.stackAlloc=u.asm.stackAlloc).apply(null,arguments)},vG=u.dynCall_iijjiiii=function(){return(vG=u.dynCall_iijjiiii=u.asm.dynCall_iijjiiii).apply(null,arguments)},kG=u.dynCall_jiji=function(){return(kG=u.dynCall_jiji=u.asm.dynCall_jiji).apply(null,arguments)};u.keepRuntimeAlive=Lo,u.wasmMemory=oe,u.cwrap=tb,u.ExitStatus=ku,u.PThread=Me;var Hm;Ua=function F(){Hm||S0(),Hm||(Ua=F)};function S0(F){if(F=F||f,ki>0)return;if(S){c(u),Xt(),startWorker(u);return}if(Ks(),ki>0)return;function V(){Hm||(Hm=!0,u.calledRun=!0,!le&&(Xt(),c(u),u.onRuntimeInitialized&&u.onRuntimeInitialized(),Wa()))}u.setStatus?(u.setStatus(\"Running...\"),setTimeout(function(){setTimeout(function(){u.setStatus(\"\")},1),V()},1)):V()}if(u.preInit)for(typeof u.preInit==\"function\"&&(u.preInit=[u.preInit]);u.preInit.length>0;)u.preInit.pop()();S0();var Km;m&&(Km={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 qm;if(typeof WasmBackendModule!=\"undefined\")qm=WasmBackendModule;else if(typeof e!=\"undefined\")qm=e;else throw new Error(\"Could not find wasm module in post.js\");if(Km){var NG=qm._dispose;qm._dispose=function(){NG(),Km.uncaughtException.forEach(function(F){process.removeListener(\"uncaughtException\",F)}),Km.unhandledRejection.forEach(function(F){process.removeListener(\"unhandledRejection\",F)})}}return e.ready}})();typeof Wg==\"object\"&&typeof Gv==\"object\"?Gv.exports=Uv:typeof define==\"function\"&&define.amd?define([],function(){return Uv}):typeof Wg==\"object\"&&(Wg.WasmBackendModuleThreadedSimd=Uv)});var UB=Kt((e3t,WB)=>{WB.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\")+\"//# sourceURL=\"+f)},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.startWorker=instance=>{Module=instance;postMessage({\"cmd\":\"loaded\"})};self.onmessage=e=>{try{if(e.data.cmd===\"load\"){Module[\"wasmModule\"]=e.data.wasmModule;for(const handler of e.data.handlers){Module[handler]=function(){postMessage({cmd:\"callHandler\",handler:handler,args:[...arguments]})}}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)}else if(e.data.cmd===\"run\"){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 GB=Kt((Ug,Kv)=>{var Hv=(()=>{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(K,ae){o=K,n=ae});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=(K,ae)=>{throw ae},c=typeof window==\"object\",l=typeof importScripts==\"function\",m=typeof process==\"object\"&&typeof process.versions==\"object\"&&typeof process.versions.node==\"string\",d=\"\";function f(K){return t.locateFile?t.locateFile(K,d):d+K}var h,g,x,b;function C(K){if(K instanceof Ap)return;$(\"exiting due to exception: \"+K)}if(m){var S=Vv(),k=Wv();l?d=k.dirname(d)+\"/\":d=__dirname+\"/\",h=(K,ae)=>(K=Ks(K)?new URL(K):k.normalize(K),S.readFileSync(K,ae?void 0:\"utf8\")),x=K=>{var ae=h(K,!0);return ae.buffer||(ae=new Uint8Array(ae)),ae},g=(K,ae,Ee)=>{K=Ks(K)?new URL(K):k.normalize(K),S.readFile(K,function(at,_t){at?Ee(at):ae(_t.buffer)})},process.argv.length>1&&(p=process.argv[1].replace(/\\\\/g,\"/\")),i=process.argv.slice(2),process.on(\"uncaughtException\",function(K){if(!(K instanceof Ap))throw K}),process.on(\"unhandledRejection\",function(K){throw K}),u=(K,ae)=>{if(it())throw process.exitCode=K,ae;C(ae),process.exit(K)},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=K=>{var ae=new XMLHttpRequest;return ae.open(\"GET\",K,!1),ae.send(null),ae.responseText},l&&(x=K=>{var ae=new XMLHttpRequest;return ae.open(\"GET\",K,!1),ae.responseType=\"arraybuffer\",ae.send(null),new Uint8Array(ae.response)}),g=(K,ae,Ee)=>{var at=new XMLHttpRequest;at.open(\"GET\",K,!0),at.responseType=\"arraybuffer\",at.onload=()=>{if(at.status==200||at.status==0&&at.response){ae(at.response);return}Ee()},at.onerror=Ee,at.send(null)},b=K=>document.title=K);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 R=4,D;t.wasmBinary&&(D=t.wasmBinary);var P=t.noExitRuntime||!0;typeof WebAssembly!=\"object\"&&fr(\"no native wasm support detected\");var O,M=!1,L;function B(K,ae){K||fr(ae)}var z=typeof TextDecoder!=\"undefined\"?new TextDecoder(\"utf8\"):void 0;function U(K,ae,Ee){ae>>>=0;for(var at=ae+Ee,_t=ae;K[_t]&&!(_t>=at);)++_t;if(_t-ae>16&&K.buffer&&z)return z.decode(K.subarray(ae,_t));for(var Et=\"\";ae<_t;){var Qe=K[ae++];if(!(Qe&128)){Et+=String.fromCharCode(Qe);continue}var Ke=K[ae++]&63;if((Qe&224)==192){Et+=String.fromCharCode((Qe&31)<<6|Ke);continue}var Ut=K[ae++]&63;if((Qe&240)==224?Qe=(Qe&15)<<12|Ke<<6|Ut:Qe=(Qe&7)<<18|Ke<<12|Ut<<6|K[ae++]&63,Qe<65536)Et+=String.fromCharCode(Qe);else{var no=Qe-65536;Et+=String.fromCharCode(55296|no>>10,56320|no&1023)}}return Et}function j(K,ae){return K>>>=0,K?U(ne,K,ae):\"\"}function q(K,ae,Ee,at){if(Ee>>>=0,!(at>0))return 0;for(var _t=Ee,Et=Ee+at-1,Qe=0;Qe=55296&&Ke<=57343){var Ut=K.charCodeAt(++Qe);Ke=65536+((Ke&1023)<<10)|Ut&1023}if(Ke<=127){if(Ee>=Et)break;ae[Ee++>>>0]=Ke}else if(Ke<=2047){if(Ee+1>=Et)break;ae[Ee++>>>0]=192|Ke>>6,ae[Ee++>>>0]=128|Ke&63}else if(Ke<=65535){if(Ee+2>=Et)break;ae[Ee++>>>0]=224|Ke>>12,ae[Ee++>>>0]=128|Ke>>6&63,ae[Ee++>>>0]=128|Ke&63}else{if(Ee+3>=Et)break;ae[Ee++>>>0]=240|Ke>>18,ae[Ee++>>>0]=128|Ke>>12&63,ae[Ee++>>>0]=128|Ke>>6&63,ae[Ee++>>>0]=128|Ke&63}}return ae[Ee>>>0]=0,Ee-_t}function Y(K,ae,Ee){return q(K,ne,ae,Ee)}var J,re,ne,ee,oe,ie,le,be,_e;function ve(K){J=K,t.HEAP8=re=new Int8Array(K),t.HEAP16=ee=new Int16Array(K),t.HEAP32=ie=new Int32Array(K),t.HEAPU8=ne=new Uint8Array(K),t.HEAPU16=oe=new Uint16Array(K),t.HEAPU32=le=new Uint32Array(K),t.HEAPF32=be=new Float32Array(K),t.HEAPF64=_e=new Float64Array(K)}var Fe=t.INITIAL_MEMORY||16777216,Pe,st=[],ct=[],He=[],lt=!1;function it(){return P}function ht(){if(t.preRun)for(typeof t.preRun==\"function\"&&(t.preRun=[t.preRun]);t.preRun.length;)Mt(t.preRun.shift());Ua(st)}function gt(){lt=!0,Ua(ct)}function Lr(){if(t.postRun)for(typeof t.postRun==\"function\"&&(t.postRun=[t.postRun]);t.postRun.length;)rr(t.postRun.shift());Ua(He)}function Mt(K){st.unshift(K)}function to(K){ct.unshift(K)}function rr(K){He.unshift(K)}var Tt=0,or=null,nr=null;function ro(K){Tt++,t.monitorRunDependencies&&t.monitorRunDependencies(Tt)}function oo(K){if(Tt--,t.monitorRunDependencies&&t.monitorRunDependencies(Tt),Tt==0&&(or!==null&&(clearInterval(or),or=null),nr)){var ae=nr;nr=null,ae()}}function fr(K){t.onAbort&&t.onAbort(K),K=\"Aborted(\"+K+\")\",$(K),M=!0,L=1,K+=\". Build with -sASSERTIONS for more info.\";var ae=new WebAssembly.RuntimeError(K);throw n(ae),ae}var Va=\"data:application/octet-stream;base64,\";function Lo(K){return K.startsWith(Va)}function Ks(K){return K.startsWith(\"file://\")}var Xt;Xt=\"tfjs-backend-wasm.wasm\",Lo(Xt)||(Xt=f(Xt));function Wa(K){try{if(K==Xt&&D)return new Uint8Array(D);if(x)return x(K);throw\"both async and sync fetching of the wasm failed\"}catch(ae){fr(ae)}}function ol(){if(!D&&(c||l)){if(typeof fetch==\"function\"&&!Ks(Xt))return fetch(Xt,{credentials:\"same-origin\"}).then(function(K){if(!K.ok)throw\"failed to load wasm binary file at '\"+Xt+\"'\";return K.arrayBuffer()}).catch(function(){return Wa(Xt)});if(g)return new Promise(function(K,ae){g(Xt,function(Ee){K(new Uint8Array(Ee))},ae)})}return Promise.resolve().then(function(){return Wa(Xt)})}function nl(){var K={env:sl,wasi_snapshot_preview1:sl};function ae(Qe,Ke){var Ut=Qe.exports;t.asm=Ut,O=t.asm.memory,ve(O.buffer),Pe=t.asm.__indirect_function_table,to(t.asm.__wasm_call_ctors),oo(\"wasm-instantiate\")}ro(\"wasm-instantiate\");function Ee(Qe){ae(Qe.instance)}function at(Qe){return ol().then(function(Ke){return WebAssembly.instantiate(Ke,K)}).then(function(Ke){return Ke}).then(Qe,function(Ke){$(\"failed to asynchronously prepare wasm: \"+Ke),fr(Ke)})}function _t(){return!D&&typeof WebAssembly.instantiateStreaming==\"function\"&&!Lo(Xt)&&!Ks(Xt)&&!m&&typeof fetch==\"function\"?fetch(Xt,{credentials:\"same-origin\"}).then(function(Qe){var Ke=WebAssembly.instantiateStreaming(Qe,K);return Ke.then(Ee,function(Ut){return $(\"wasm streaming compile failed: \"+Ut),$(\"falling back to ArrayBuffer instantiation\"),at(Ee)})}):at(Ee)}if(t.instantiateWasm)try{var Et=t.instantiateWasm(K,ae);return Et}catch(Qe){$(\"Module.instantiateWasm callback failed with error: \"+Qe),n(Qe)}return _t().catch(n),{}}var d0,ki;function Ap(K){this.name=\"ExitStatus\",this.message=\"Program terminated with exit(\"+K+\")\",this.status=K}function Ua(K){for(;K.length>0;)K.shift()(t)}function Cy(){fr(\"\")}function wm(){return 4294901760}function vu(){return wm()}function wy(K,ae,Ee){ne.copyWithin(K>>>0,ae>>>0,ae+Ee>>>0)}function Sm(K){try{return O.grow(K-J.byteLength+65535>>>16),ve(O.buffer),1}catch(ae){}}function Fp(K){var ae=ne.length;K=K>>>0;var Ee=wm();if(K>Ee)return!1;let at=(Ut,no)=>Ut+(no-Ut%no)%no;for(var _t=1;_t<=4;_t*=2){var Et=ae*(1+.2/_t);Et=Math.min(Et,K+100663296);var Qe=Math.min(Ee,at(Math.max(K,Et),65536)),Ke=Sm(Qe);if(Ke)return!0}return!1}var hr={varargs:void 0,get:function(){hr.varargs+=4;var K=ie[hr.varargs-4>>>2];return K},getStr:function(K){var ae=j(K);return ae}};function Im(K){return 52}function Sy(K,ae,Ee,at,_t){return 70}var Iy=[null,[],[]];function f0(K,ae){var Ee=Iy[K];ae===0||ae===10?((K===1?_:$)(U(Ee,0)),Ee.length=0):Ee.push(ae)}function h0(K,ae,Ee,at){for(var _t=0,Et=0;Et>>2],Ke=le[ae+4>>>2];ae+=8;for(var Ut=0;Ut>>0]);_t+=Ke}return le[at>>>2]=_t,0}function vm(K){var ae=t[\"_\"+K];return ae}function ku(K,ae){re.set(K,ae>>>0)}function vy(K,ae,Ee,at,_t){var Et={string:yr=>{var Ti=0;if(yr!=null&&yr!==0){var Vm=(yr.length<<2)+1;Ti=cl(Vm),Y(yr,Ti,Vm)}return Ti},array:yr=>{var Ti=cl(yr.length);return ku(yr,Ti),Ti}};function Qe(yr){return ae===\"string\"?j(yr):ae===\"boolean\"?!!yr:yr}var Ke=vm(K),Ut=[],no=0;if(at)for(var Ga=0;GaQe===\"number\"||Qe===\"boolean\"),Et=ae!==\"string\";return Et&&_t&&!at?vm(K):function(){return vy(K,ae,Ee,arguments,at)}}var sl={abort:Cy,emscripten_get_heap_max:vu,emscripten_memcpy_big:wy,emscripten_resize_heap:Fp,fd_close:Im,fd_seek:Sy,fd_write:h0},Ny=nl(),km=t.___wasm_call_ctors=function(){return(km=t.___wasm_call_ctors=t.asm.__wasm_call_ctors).apply(null,arguments)},Nm=t._init=function(){return(Nm=t._init=t.asm.init).apply(null,arguments)},Ty=t._init_with_threads_count=function(){return(Ty=t._init_with_threads_count=t.asm.init_with_threads_count).apply(null,arguments)},Tm=t._get_threads_count=function(){return(Tm=t._get_threads_count=t.asm.get_threads_count).apply(null,arguments)},_y=t._register_tensor=function(){return(_y=t._register_tensor=t.asm.register_tensor).apply(null,arguments)},Me=t._dispose_data=function(){return(Me=t._dispose_data=t.asm.dispose_data).apply(null,arguments)},al=t._dispose=function(){return(al=t._dispose=t.asm.dispose).apply(null,arguments)},Ey=t._Abs=function(){return(Ey=t._Abs=t.asm.Abs).apply(null,arguments)},_m=t._Acos=function(){return(_m=t._Acos=t.asm.Acos).apply(null,arguments)},Pp=t._Acosh=function(){return(Pp=t._Acosh=t.asm.Acosh).apply(null,arguments)},$y=t._Add=function(){return($y=t._Add=t.asm.Add).apply(null,arguments)},Ry=t._AddN=function(){return(Ry=t._AddN=t.asm.AddN).apply(null,arguments)},Dy=t._All=function(){return(Dy=t._All=t.asm.All).apply(null,arguments)},Ay=t._Any=function(){return(Ay=t._Any=t.asm.Any).apply(null,arguments)},Fy=t._ArgMax=function(){return(Fy=t._ArgMax=t.asm.ArgMax).apply(null,arguments)},Em=t._ArgMin=function(){return(Em=t._ArgMin=t.asm.ArgMin).apply(null,arguments)},$m=t._Asin=function(){return($m=t._Asin=t.asm.Asin).apply(null,arguments)},Py=t._Asinh=function(){return(Py=t._Asinh=t.asm.Asinh).apply(null,arguments)},Oy=t._Atan=function(){return(Oy=t._Atan=t.asm.Atan).apply(null,arguments)},My=t._Atan2=function(){return(My=t._Atan2=t.asm.Atan2).apply(null,arguments)},il=t._Atanh=function(){return(il=t._Atanh=t.asm.Atanh).apply(null,arguments)},Ly=t._AvgPool=function(){return(Ly=t._AvgPool=t.asm.AvgPool).apply(null,arguments)},By=t._AvgPool3D=function(){return(By=t._AvgPool3D=t.asm.AvgPool3D).apply(null,arguments)},zy=t._AvgPool3DGrad=function(){return(zy=t._AvgPool3DGrad=t.asm.AvgPool3DGrad).apply(null,arguments)},Nu=t._AvgPoolGrad=function(){return(Nu=t._AvgPoolGrad=t.asm.AvgPoolGrad).apply(null,arguments)},Vy=t._BatchMatMul=function(){return(Vy=t._BatchMatMul=t.asm.BatchMatMul).apply(null,arguments)},Wy=t._Bincount=function(){return(Wy=t._Bincount=t.asm.Bincount).apply(null,arguments)},Rm=t._BitwiseAnd=function(){return(Rm=t._BitwiseAnd=t.asm.BitwiseAnd).apply(null,arguments)},Uy=t._Ceil=function(){return(Uy=t._Ceil=t.asm.Ceil).apply(null,arguments)},ul=t._ClipByValue=function(){return(ul=t._ClipByValue=t.asm.ClipByValue).apply(null,arguments)},Gy=t._Conv2D=function(){return(Gy=t._Conv2D=t.asm.Conv2D).apply(null,arguments)},Hy=t._Conv2DBackpropInput=function(){return(Hy=t._Conv2DBackpropInput=t.asm.Conv2DBackpropInput).apply(null,arguments)},Ky=t._Conv3D=function(){return(Ky=t._Conv3D=t.asm.Conv3D).apply(null,arguments)},Ni=t._Conv3DBackpropFilterV2=function(){return(Ni=t._Conv3DBackpropFilterV2=t.asm.Conv3DBackpropFilterV2).apply(null,arguments)},pl=t._Conv3DBackpropInputV2=function(){return(pl=t._Conv3DBackpropInputV2=t.asm.Conv3DBackpropInputV2).apply(null,arguments)},qy=t._Cos=function(){return(qy=t._Cos=t.asm.Cos).apply(null,arguments)},jy=t._Cosh=function(){return(jy=t._Cosh=t.asm.Cosh).apply(null,arguments)},Xy=t._CropAndResize=function(){return(Xy=t._CropAndResize=t.asm.CropAndResize).apply(null,arguments)},Yy=t._Cumprod=function(){return(Yy=t._Cumprod=t.asm.Cumprod).apply(null,arguments)},Dm=t._Cumsum=function(){return(Dm=t._Cumsum=t.asm.Cumsum).apply(null,arguments)},Am=t._DenseBincount=function(){return(Am=t._DenseBincount=t.asm.DenseBincount).apply(null,arguments)},Qy=t._DepthToSpace=function(){return(Qy=t._DepthToSpace=t.asm.DepthToSpace).apply(null,arguments)},Zy=t._DepthwiseConv2dNative=function(){return(Zy=t._DepthwiseConv2dNative=t.asm.DepthwiseConv2dNative).apply(null,arguments)},Fm=t._Diag=function(){return(Fm=t._Diag=t.asm.Diag).apply(null,arguments)},Pm=t._Dilation2D=function(){return(Pm=t._Dilation2D=t.asm.Dilation2D).apply(null,arguments)},Jy=t._Dilation2DBackpropFilter=function(){return(Jy=t._Dilation2DBackpropFilter=t.asm.Dilation2DBackpropFilter).apply(null,arguments)},eb=t._Dilation2DBackpropInput=function(){return(eb=t._Dilation2DBackpropInput=t.asm.Dilation2DBackpropInput).apply(null,arguments)},tb=t._Elu=function(){return(tb=t._Elu=t.asm.Elu).apply(null,arguments)},rb=t._EluGrad=function(){return(rb=t._EluGrad=t.asm.EluGrad).apply(null,arguments)},Om=t._Equal=function(){return(Om=t._Equal=t.asm.Equal).apply(null,arguments)},g0=t._Erf=function(){return(g0=t._Erf=t.asm.Erf).apply(null,arguments)},ob=t._Exp=function(){return(ob=t._Exp=t.asm.Exp).apply(null,arguments)},nb=t._Expm1=function(){return(nb=t._Expm1=t.asm.Expm1).apply(null,arguments)},sb=t._FlipLeftRight=function(){return(sb=t._FlipLeftRight=t.asm.FlipLeftRight).apply(null,arguments)},ab=t._Floor=function(){return(ab=t._Floor=t.asm.Floor).apply(null,arguments)},ib=t._FloorDiv=function(){return(ib=t._FloorDiv=t.asm.FloorDiv).apply(null,arguments)},ub=t._FusedBatchNorm=function(){return(ub=t._FusedBatchNorm=t.asm.FusedBatchNorm).apply(null,arguments)},pb=t._FusedConv2D=function(){return(pb=t._FusedConv2D=t.asm.FusedConv2D).apply(null,arguments)},cb=t._FusedDepthwiseConv2D=function(){return(cb=t._FusedDepthwiseConv2D=t.asm.FusedDepthwiseConv2D).apply(null,arguments)},lb=t._Gather=function(){return(lb=t._Gather=t.asm.Gather).apply(null,arguments)},mb=t._GatherNd=function(){return(mb=t._GatherNd=t.asm.GatherNd).apply(null,arguments)},db=t._Greater=function(){return(db=t._Greater=t.asm.Greater).apply(null,arguments)},fb=t._GreaterEqual=function(){return(fb=t._GreaterEqual=t.asm.GreaterEqual).apply(null,arguments)},hb=t._IsFinite=function(){return(hb=t._IsFinite=t.asm.IsFinite).apply(null,arguments)},gb=t._IsInf=function(){return(gb=t._IsInf=t.asm.IsInf).apply(null,arguments)},xb=t._IsNan=function(){return(xb=t._IsNan=t.asm.IsNan).apply(null,arguments)},yb=t._LRN=function(){return(yb=t._LRN=t.asm.LRN).apply(null,arguments)},bb=t._LRNGrad=function(){return(bb=t._LRNGrad=t.asm.LRNGrad).apply(null,arguments)},Cb=t._LeakyRelu=function(){return(Cb=t._LeakyRelu=t.asm.LeakyRelu).apply(null,arguments)},wb=t._Less=function(){return(wb=t._Less=t.asm.Less).apply(null,arguments)},Sb=t._LessEqual=function(){return(Sb=t._LessEqual=t.asm.LessEqual).apply(null,arguments)},Ib=t._LinSpace=function(){return(Ib=t._LinSpace=t.asm.LinSpace).apply(null,arguments)},vb=t._Log=function(){return(vb=t._Log=t.asm.Log).apply(null,arguments)},kb=t._Log1p=function(){return(kb=t._Log1p=t.asm.Log1p).apply(null,arguments)},Nb=t._LogicalAnd=function(){return(Nb=t._LogicalAnd=t.asm.LogicalAnd).apply(null,arguments)},Tb=t._LogicalNot=function(){return(Tb=t._LogicalNot=t.asm.LogicalNot).apply(null,arguments)},_b=t._LogicalOr=function(){return(_b=t._LogicalOr=t.asm.LogicalOr).apply(null,arguments)},Eb=t._LogicalXor=function(){return(Eb=t._LogicalXor=t.asm.LogicalXor).apply(null,arguments)},$b=t._Max=function(){return($b=t._Max=t.asm.Max).apply(null,arguments)},Rb=t._MaxPool=function(){return(Rb=t._MaxPool=t.asm.MaxPool).apply(null,arguments)},Db=t._MaxPool3D=function(){return(Db=t._MaxPool3D=t.asm.MaxPool3D).apply(null,arguments)},Ab=t._MaxPool3DGrad=function(){return(Ab=t._MaxPool3DGrad=t.asm.MaxPool3DGrad).apply(null,arguments)},Fb=t._MaxPoolGrad=function(){return(Fb=t._MaxPoolGrad=t.asm.MaxPoolGrad).apply(null,arguments)},Pb=t._MaxPoolWithArgmax=function(){return(Pb=t._MaxPoolWithArgmax=t.asm.MaxPoolWithArgmax).apply(null,arguments)},Ob=t._Maximum=function(){return(Ob=t._Maximum=t.asm.Maximum).apply(null,arguments)},Mb=t._Mean=function(){return(Mb=t._Mean=t.asm.Mean).apply(null,arguments)},Lb=t._Min=function(){return(Lb=t._Min=t.asm.Min).apply(null,arguments)},Bb=t._Minimum=function(){return(Bb=t._Minimum=t.asm.Minimum).apply(null,arguments)},zb=t._MirrorPad=function(){return(zb=t._MirrorPad=t.asm.MirrorPad).apply(null,arguments)},Vb=t._Mod=function(){return(Vb=t._Mod=t.asm.Mod).apply(null,arguments)},Wb=t._Multinomial=function(){return(Wb=t._Multinomial=t.asm.Multinomial).apply(null,arguments)},Ub=t._Multiply=function(){return(Ub=t._Multiply=t.asm.Multiply).apply(null,arguments)},Gb=t._Neg=function(){return(Gb=t._Neg=t.asm.Neg).apply(null,arguments)},Hb=t._NonMaxSuppressionV3=function(){return(Hb=t._NonMaxSuppressionV3=t.asm.NonMaxSuppressionV3).apply(null,arguments)},Kb=t._NonMaxSuppressionV4=function(){return(Kb=t._NonMaxSuppressionV4=t.asm.NonMaxSuppressionV4).apply(null,arguments)},qb=t._NonMaxSuppressionV5=function(){return(qb=t._NonMaxSuppressionV5=t.asm.NonMaxSuppressionV5).apply(null,arguments)},jb=t._NotEqual=function(){return(jb=t._NotEqual=t.asm.NotEqual).apply(null,arguments)},Xb=t._OneHot=function(){return(Xb=t._OneHot=t.asm.OneHot).apply(null,arguments)},Yb=t._PadV2=function(){return(Yb=t._PadV2=t.asm.PadV2).apply(null,arguments)},Qb=t._Pow=function(){return(Qb=t._Pow=t.asm.Pow).apply(null,arguments)},Zb=t._Prelu=function(){return(Zb=t._Prelu=t.asm.Prelu).apply(null,arguments)},Jb=t._Prod=function(){return(Jb=t._Prod=t.asm.Prod).apply(null,arguments)},eC=t._RealDiv=function(){return(eC=t._RealDiv=t.asm.RealDiv).apply(null,arguments)},tC=t._Reciprocal=function(){return(tC=t._Reciprocal=t.asm.Reciprocal).apply(null,arguments)},rC=t._Relu=function(){return(rC=t._Relu=t.asm.Relu).apply(null,arguments)},oC=t._Relu6=function(){return(oC=t._Relu6=t.asm.Relu6).apply(null,arguments)},nC=t._ResizeBilinear=function(){return(nC=t._ResizeBilinear=t.asm.ResizeBilinear).apply(null,arguments)},sC=t._ResizeBilinearGrad=function(){return(sC=t._ResizeBilinearGrad=t.asm.ResizeBilinearGrad).apply(null,arguments)},aC=t._ResizeNearestNeighbor=function(){return(aC=t._ResizeNearestNeighbor=t.asm.ResizeNearestNeighbor).apply(null,arguments)},iC=t._ResizeNearestNeighborGrad=function(){return(iC=t._ResizeNearestNeighborGrad=t.asm.ResizeNearestNeighborGrad).apply(null,arguments)},uC=t._Reverse=function(){return(uC=t._Reverse=t.asm.Reverse).apply(null,arguments)},pC=t._RotateWithOffset=function(){return(pC=t._RotateWithOffset=t.asm.RotateWithOffset).apply(null,arguments)},cC=t._Round=function(){return(cC=t._Round=t.asm.Round).apply(null,arguments)},lC=t._Rsqrt=function(){return(lC=t._Rsqrt=t.asm.Rsqrt).apply(null,arguments)},mC=t._ScatterNd=function(){return(mC=t._ScatterNd=t.asm.ScatterNd).apply(null,arguments)},dC=t._SearchSorted=function(){return(dC=t._SearchSorted=t.asm.SearchSorted).apply(null,arguments)},fC=t._SelectV2=function(){return(fC=t._SelectV2=t.asm.SelectV2).apply(null,arguments)},hC=t._Selu=function(){return(hC=t._Selu=t.asm.Selu).apply(null,arguments)},gC=t._Sigmoid=function(){return(gC=t._Sigmoid=t.asm.Sigmoid).apply(null,arguments)},xC=t._Sign=function(){return(xC=t._Sign=t.asm.Sign).apply(null,arguments)},yC=t._Sin=function(){return(yC=t._Sin=t.asm.Sin).apply(null,arguments)},bC=t._Sinh=function(){return(bC=t._Sinh=t.asm.Sinh).apply(null,arguments)},CC=t._Softmax=function(){return(CC=t._Softmax=t.asm.Softmax).apply(null,arguments)},wC=t._Softplus=function(){return(wC=t._Softplus=t.asm.Softplus).apply(null,arguments)},SC=t._SparseFillEmptyRows=function(){return(SC=t._SparseFillEmptyRows=t.asm.SparseFillEmptyRows).apply(null,arguments)},IC=t._SparseReshape=function(){return(IC=t._SparseReshape=t.asm.SparseReshape).apply(null,arguments)},vC=t._SparseSegmentReduction=function(){return(vC=t._SparseSegmentReduction=t.asm.SparseSegmentReduction).apply(null,arguments)},kC=t._SparseToDense=function(){return(kC=t._SparseToDense=t.asm.SparseToDense).apply(null,arguments)},NC=t._Sqrt=function(){return(NC=t._Sqrt=t.asm.Sqrt).apply(null,arguments)},TC=t._Square=function(){return(TC=t._Square=t.asm.Square).apply(null,arguments)},_C=t._SquaredDifference=function(){return(_C=t._SquaredDifference=t.asm.SquaredDifference).apply(null,arguments)},EC=t._Step=function(){return(EC=t._Step=t.asm.Step).apply(null,arguments)},$C=t._StridedSlice=function(){return($C=t._StridedSlice=t.asm.StridedSlice).apply(null,arguments)},RC=t._Sub=function(){return(RC=t._Sub=t.asm.Sub).apply(null,arguments)},DC=t._Sum=function(){return(DC=t._Sum=t.asm.Sum).apply(null,arguments)},AC=t._Tan=function(){return(AC=t._Tan=t.asm.Tan).apply(null,arguments)},FC=t._Tanh=function(){return(FC=t._Tanh=t.asm.Tanh).apply(null,arguments)},PC=t._TensorScatterUpdate=function(){return(PC=t._TensorScatterUpdate=t.asm.TensorScatterUpdate).apply(null,arguments)},OC=t._Tile=function(){return(OC=t._Tile=t.asm.Tile).apply(null,arguments)},MC=t._TopK=function(){return(MC=t._TopK=t.asm.TopK).apply(null,arguments)},LC=t._Transform=function(){return(LC=t._Transform=t.asm.Transform).apply(null,arguments)},BC=t._Transpose=function(){return(BC=t._Transpose=t.asm.Transpose).apply(null,arguments)},zC=t.__FusedMatMul=function(){return(zC=t.__FusedMatMul=t.asm._FusedMatMul).apply(null,arguments)},VC=t._malloc=function(){return(VC=t._malloc=t.asm.malloc).apply(null,arguments)},WC=t._free=function(){return(WC=t._free=t.asm.free).apply(null,arguments)},UC=t.___errno_location=function(){return(UC=t.___errno_location=t.asm.__errno_location).apply(null,arguments)},Mm=t.stackSave=function(){return(Mm=t.stackSave=t.asm.stackSave).apply(null,arguments)},Lm=t.stackRestore=function(){return(Lm=t.stackRestore=t.asm.stackRestore).apply(null,arguments)},cl=t.stackAlloc=function(){return(cl=t.stackAlloc=t.asm.stackAlloc).apply(null,arguments)},GC=t.dynCall_iijjiiii=function(){return(GC=t.dynCall_iijjiiii=t.asm.dynCall_iijjiiii).apply(null,arguments)},HC=t.dynCall_jiji=function(){return(HC=t.dynCall_jiji=t.asm.dynCall_jiji).apply(null,arguments)};t.cwrap=ky;var Op;nr=function K(){Op||Bm(),Op||(nr=K)};function Bm(K){if(K=K||i,Tt>0||(ht(),Tt>0))return;function ae(){Op||(Op=!0,t.calledRun=!0,!M&&(gt(),o(t),t.onRuntimeInitialized&&t.onRuntimeInitialized(),Lr()))}t.setStatus?(t.setStatus(\"Running...\"),setTimeout(function(){setTimeout(function(){t.setStatus(\"\")},1),ae()},1)):ae()}if(t.preInit)for(typeof t.preInit==\"function\"&&(t.preInit=[t.preInit]);t.preInit.length>0;)t.preInit.pop()();Bm();var Mp;s&&(Mp={uncaughtException:process.listeners(\"uncaughtException\").filter(function(K){return!s.uncaughtException.indexOf(K)>-1}),unhandledRejection:process.listeners(\"unhandledRejection\").filter(function(K){return!s.unhandledRejection.indexOf(K)>-1})});var Lp;if(typeof e!=\"undefined\")Lp=e;else if(typeof WasmBackendModuleThreadedSimd!=\"undefined\")Lp=WasmBackendModuleThreadedSimd;else throw new Error(\"Could not find wasm module in post.js\");if(Mp){var KC=Lp._dispose;Lp._dispose=function(){KC(),Mp.uncaughtException.forEach(function(K){process.removeListener(\"uncaughtException\",K)}),Mp.unhandledRejection.forEach(function(K){process.removeListener(\"unhandledRejection\",K)})}}return e.ready}})();typeof Ug==\"object\"&&typeof Kv==\"object\"?Kv.exports=Hv:typeof define==\"function\"&&define.amd?define([],function(){return Hv}):typeof Ug==\"object\"&&(Ug.WasmBackendModule=Hv)});var Bo=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}},ao=class{refCount(e){return zr(\"refCount\")}incRef(e){return zr(\"incRef\")}timerAvailable(){return!0}time(e){return zr(\"time\")}read(e){return zr(\"read\")}readSync(e){return zr(\"readSync\")}readToGPU(e,t){return zr(\"readToGPU\")}numDataIds(){return zr(\"numDataIds\")}disposeData(e,t){return zr(\"disposeData\")}write(e,t,o){return zr(\"write\")}move(e,t,o,n,s){return zr(\"move\")}createTensorFromGPUData(e,t,o){return zr(\"createTensorFromGPUData\")}memory(){return zr(\"memory\")}floatPrecision(){return zr(\"floatPrecision\")}epsilon(){return this.floatPrecision()===32?1e-7:1e-4}dispose(){return zr(\"dispose\")}};function zr(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 k0(r){let e=r.length,t=0;for(;e>0;)t=Math.random()*e|0,e--,jm(r,e,t)}function FG(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--,jm(r,t,o),jm(e,t,o)}function Vp(r,e,t){return Math.max(r,Math.min(e,t))}function PG(r){return r%2===0?r:r+1}function jm(r,e,t){let o=r[e];r[e]=r[t],r[t]=o}function OG(r){let e=0;for(let t=0;tt+` Shapes ${r} and ${e} must match`)}function io(r){E(r!=null,()=>\"The input to the tensor constructor must be a non-null value.\")}function ze(r){if(r.length===0)return 1;let e=r[0];for(let t=1;t0,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 GG(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 _i(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=>Ka(o)),()=>`All values in axis param must be integers but got axis ${r}`),r.map(o=>o<0?t+o:o)}function JC(r,e){let t=[],o=[],n=e!=null&&Array.isArray(e)&&e.length===0,s=e==null||n?null:_i(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 ew(r,e){return Xm(r,e)}function Xm(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 tw(r,e){for(let t=0;te+=t.length),e}function zo(r){return typeof r==\"string\"||r instanceof String}function N0(r){return typeof r==\"boolean\"}function T0(r){return typeof r==\"number\"}function Ei(r){return Array.isArray(r)?Ei(r[0]):r instanceof Float32Array?\"float32\":r instanceof Int32Array||r instanceof Uint8Array||r instanceof Uint8ClampedArray?\"int32\":T0(r)?\"float32\":zo(r)?\"string\":N0(r)?\"bool\":\"float32\"}function qs(r){return!!(r&&r.constructor&&r.call&&r.apply)}function Up(r,e){for(let t=e;t=0;--o)t[o]=t[o+1]*r[o+1];return t}function _0(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 _0(0,r,e,t)}function KG(r,e){if(Array.isArray(r))return r;if(e===\"float32\")return r instanceof Float32Array?r:new Float32Array(r);if(e===\"int32\")return r instanceof Int32Array?r:new Int32Array(r);if(e===\"bool\"||e===\"string\")return Uint8Array.from(new Int32Array(r));throw new Error(`Unknown dtype ${e}`)}function ml(r,e){let t=Gp(r,e);for(let o=0;oo*n,1);if(e==null||e===\"float32\")return Tu(r,new Float32Array(t));if(e===\"int32\")return Tu(r,new Int32Array(t));if(e===\"bool\")return Tu(r,new Uint8Array(t));throw new Error(`Unknown data type ${e}`)}function Ct(r){r.forEach(e=>{E(Number.isInteger(e)&&e>=0,()=>`Tensor must have a shape comprised of positive integers but got shape [${r}].`)})}function jG(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]=JG(n,s)})}};function QG(r){let e={};return r.replace(/[?&]([^=?&]+)(?:=([^&]*))?/g,(t,...o)=>(ZG(e,o[0],o[1]),o.join(\"=\"))),e}function ZG(r,e,t){r[decodeURIComponent(e)]=decodeURIComponent(t||\"\")}function JG(r,e){let t=e.toLowerCase();return t===\"true\"||t===\"false\"?t===\"true\":`${+t}`===t?+t:e}function A(){return nw}var nw=null;function $0(r){nw=r}var sw;function aw(){if(sw==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\");sw=r}return sw}function e4(){let r=aw();return r._tfGlobals==null&&(r._tfGlobals=new Map),r._tfGlobals}function fl(r,e){let t=e4();if(t.has(r))return t.get(r);{let o=e();return t.set(r,o),t.get(r)}}var Xs=\"Abs\",Vo=\"Acos\",Wo=\"Acosh\",uo=\"Add\",Uo=\"AddN\",Go=\"All\",Ho=\"Any\",Ys=\"ArgMax\",Qs=\"ArgMin\",Ko=\"Asin\",qo=\"Asinh\",jo=\"Atan\",Xo=\"Atanh\",Yo=\"Atan2\",Qo=\"AvgPool\",$i=\"AvgPoolGrad\",Zs=\"AvgPool3D\",Ri=\"AvgPool3DGrad\",Zo=\"BatchMatMul\",Js=\"BatchToSpaceND\",Jo=\"Bincount\",qa=\"BitwiseAnd\",qce=\"BroadcastTo\",ea=\"BroadcastArgs\",yo=\"Cast\",en=\"Ceil\",bo=\"ClipByValue\",Di=\"Complex\",Ai=\"ComplexAbs\",ta=\"Concat\",tn=\"Conv2D\",Fi=\"Conv2DBackpropFilter\",rn=\"Conv2DBackpropInput\",on=\"Conv3D\",ja=\"Conv3DBackpropFilterV2\",nn=\"Conv3DBackpropInputV2\",sn=\"Cos\",an=\"Cosh\",un=\"Cumprod\",pn=\"Cumsum\",cn=\"CropAndResize\",ra=\"DenseBincount\",ln=\"DepthToSpace\",mn=\"DepthwiseConv2dNative\",Pi=\"DepthwiseConv2dNativeBackpropFilter\",Oi=\"DepthwiseConv2dNativeBackpropInput\",oa=\"Diag\",dn=\"Dilation2D\",Mi=\"Dilation2DBackpropInput\",Li=\"Dilation2DBackpropFilter\",$u=\"Draw\",fn=\"RealDiv\",Bi=\"Einsum\",hn=\"Elu\",Xa=\"EluGrad\",gn=\"Erf\",xn=\"Equal\",yn=\"Exp\",na=\"ExpandDims\",bn=\"Expm1\",zi=\"FFT\",sa=\"Fill\",Cn=\"FlipLeftRight\",wn=\"Floor\",Sn=\"FloorDiv\",In=\"FusedBatchNorm\",aa=\"GatherV2\",vn=\"GatherNd\",kn=\"Greater\",Nn=\"GreaterEqual\",Co=\"Identity\",Vi=\"IFFT\",Wi=\"Imag\",Tn=\"IsFinite\",_n=\"IsInf\",En=\"IsNan\",$n=\"LeakyRelu\",Rn=\"Less\",Dn=\"LessEqual\",An=\"LinSpace\",Fn=\"Log\",Pn=\"Log1p\",On=\"LogicalAnd\",Mn=\"LogicalNot\",Ln=\"LogicalOr\",R0=\"LogicalXor\",jce=\"LogSoftmax\",Xce=\"LowerBound\",Bn=\"LRN\",Ya=\"LRNGrad\",Yce=\"MatrixBandPart\",zn=\"Max\",Vn=\"Maximum\",Wn=\"MaxPool\",Ui=\"MaxPoolGrad\",ia=\"MaxPool3D\",Gi=\"MaxPool3DGrad\",ua=\"MaxPoolWithArgmax\",Un=\"Mean\",Gn=\"Min\",Hn=\"Minimum\",Kn=\"MirrorPad\",qn=\"Mod\",jn=\"Multinomial\",Xn=\"Multiply\",pa=\"Neg\",Yn=\"NotEqual\",Qn=\"NonMaxSuppressionV3\",Qa=\"NonMaxSuppressionV4\",Zn=\"NonMaxSuppressionV5\",ca=\"OnesLike\",Jn=\"OneHot\",la=\"Pack\",es=\"PadV2\",Qce=\"Pool\",ts=\"Pow\",rs=\"Prelu\",os=\"Prod\",Hp=\"RaggedGather\",Kp=\"RaggedRange\",qp=\"RaggedTensorToTensor\",ma=\"Range\",Hi=\"Real\",ns=\"Reciprocal\",ss=\"Relu\",da=\"Reshape\",as=\"ResizeNearestNeighbor\",Za=\"ResizeNearestNeighborGrad\",is=\"ResizeBilinear\",Ja=\"ResizeBilinearGrad\",us=\"Relu6\",ps=\"Reverse\",cs=\"Round\",ls=\"Rsqrt\",ms=\"ScatterNd\",ds=\"TensorScatterUpdate\",fs=\"SearchSorted\",fa=\"Select\",hs=\"Selu\",ha=\"Slice\",gs=\"Sin\",xs=\"Sinh\",ys=\"Sign\",bs=\"Sigmoid\",Cs=\"Softplus\",ws=\"Sqrt\",Ss=\"Sum\",ga=\"SpaceToBatchND\",xa=\"SplitV\",Is=\"Softmax\",Ki=\"SparseFillEmptyRows\",ei=\"SparseReshape\",ya=\"SparseSegmentMean\",ba=\"SparseSegmentSum\",vs=\"SparseToDense\",ks=\"SquaredDifference\",qi=\"Square\",Ru=\"StaticRegexReplace\",Ns=\"StridedSlice\",Ca=\"StringNGrams\",ji=\"StringSplit\",Xi=\"StringToHashBucketFast\",Ts=\"Sub\",_s=\"Tan\",Es=\"Tanh\",po=\"Tile\",$s=\"TopK\",Rs=\"Transform\",co=\"Transpose\",Yi=\"Unique\",wa=\"Unpack\",Qi=\"UnsortedSegmentSum\",Zce=\"UpperBound\",Sa=\"ZerosLike\",wo=\"Step\",Du=\"FromPixels\",Ds=\"RotateWithOffset\",So=\"_FusedMatMul\",Io=\"FusedConv2D\",vo=\"FusedDepthwiseConv2D\";function Ia(...r){A().getBool(\"IS_TEST\")||A().getBool(\"PROD\")||console.warn(...r)}function t4(...r){A().getBool(\"IS_TEST\")||A().getBool(\"PROD\")||console.log(...r)}var jp=fl(\"kernelRegistry\",()=>new Map),hl=fl(\"gradRegistry\",()=>new Map);function Xp(r,e){let t=uw(r,e);return jp.get(t)}function iw(r){return hl.get(r)}function Ym(r){let e=jp.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 ti(r){let{kernelName:e,backendName:t}=r,o=uw(e,t);jp.has(o)&&Ia(`The kernel '${e}' for backend '${t}' is already registered`),jp.set(o,r)}function ole(r){let{kernelName:e}=r;hl.has(e)&&A().getBool(\"DEBUG\")&&Ia(`Overriding the gradient for '${e}'`),hl.set(e,r)}function nle(r,e){let t=uw(r,e);if(!jp.has(t))throw new Error(`The kernel '${r}' for backend '${e}' is not registered`);jp.delete(t)}function sle(r){if(!hl.has(r))throw new Error(`The gradient '${r}' for backend is not registered`);hl.delete(r)}function ale(r,e){Ym(r).forEach(o=>{let n=Object.assign({},o,{backendName:e});ti(n)})}function uw(r,e){return`${e}_${r}`}var y={};qe(y,{arraysEqual:()=>br,arraysEqualWithNull:()=>ZC,assert:()=>E,assertNonNegativeIntegerDimensions:()=>Ct,assertNonNull:()=>io,assertShapesMatch:()=>xt,bytesFromStringArray:()=>ow,bytesPerElement:()=>Wp,checkConversionForErrors:()=>tw,clamp:()=>Vp,computeStrides:()=>js,convertBackendValuesAndArrayBuffer:()=>KG,createScalarValue:()=>u4,createShuffledIndices:()=>WG,decodeString:()=>Jp,distSquared:()=>LG,encodeString:()=>Ji,fetch:()=>c4,fingerPrint64:()=>i4,flatten:()=>Fs,getArrayFromDType:()=>Xm,getTypedArrayFromDType:()=>ew,hasEncodingLoss:()=>HG,hexToLong:()=>gl,indexToLoc:()=>XG,inferDtype:()=>Ei,inferFromImplicitShape:()=>GG,isBoolean:()=>N0,isFunction:()=>qs,isInt:()=>Ka,isNumber:()=>T0,isPromise:()=>Eu,isScalarShape:()=>BG,isString:()=>zo,isTypedArray:()=>Pt,isValidDtype:()=>rw,locToIndex:()=>jG,makeOnesTypedArray:()=>ml,makeZerosNestedTypedArray:()=>qG,makeZerosTypedArray:()=>Gp,nearestDivisor:()=>Up,nearestLargerEven:()=>PG,now:()=>Mu,parseAxisParam:()=>_i,randUniform:()=>MG,repeatedTry:()=>UG,rightPad:()=>_u,shuffle:()=>k0,shuffleCombo:()=>FG,sizeFromShape:()=>ze,sizeToSquarishShape:()=>VG,squeezeShape:()=>JC,sum:()=>OG,swap:()=>jm,tanh:()=>zG,toNestedArray:()=>Tu,toTypedArray:()=>Zp});function Qm(r){return r instanceof Float32Array||r instanceof Int32Array||r instanceof Uint8Array||r instanceof Uint8ClampedArray}var mw=zp(U0());var Ou=mw.default||mw;function gl(r){return Ou.fromString(r,!0,16)}var H0=gl(\"c3a5c85c97cb3127\"),Pu=gl(\"b492b66fbe98f273\"),Cr=gl(\"9ae16a3b2f90404f\");function lw(r){return r.xor(r.shru(47))}function K0(r,e,t){let o=r.slice(e,e+t);return Ou.fromBytes(Array.from(o),!0,!0)}function wt(r,e){return K0(r,e,8)}function G0(r,e){return K0(r,e,4)}function Yt(r,e){return e===0?r:r.shru(e).or(r.shl(64-e))}function Zi(r,e,t=gl(\"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 o4(r,e,t,o,n,s){n=n.add(r),s=Yt(s.add(n).add(o),21);let a=n;return n=n.add(e),n=n.add(t),s=s.add(Yt(n,44)),[n.add(o),s.add(a)]}function Jm(r,e,t,o){return o4(wt(r,e),wt(r,e+8),wt(r,e+16),wt(r,e+24),t,o)}function n4(r,e=r.length){if(e>=8){let t=Cr.add(e*2),o=wt(r,0).add(Cr),n=wt(r,e-8),s=Yt(n,37).mul(t).add(o),a=Yt(o,25).add(n).mul(t);return Zi(s,a,t)}if(e>=4){let t=Cr.add(e*2),o=G0(r,0);return Zi(o.shl(3).add(e),G0(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 lw(Cr.mul(s).xor(H0.mul(a))).mul(Cr)}return Cr}function s4(r,e=r.length){let t=Cr.add(e*2),o=wt(r,0).mul(Pu),n=wt(r,8),s=wt(r,e-8).mul(t),a=wt(r,e-16).mul(Cr);return Zi(Yt(o.add(n),43).add(Yt(s,30)).add(a),o.add(Yt(n.add(Cr),18)).add(s),t)}function a4(r,e=r.length){let t=Cr.add(e*2),o=wt(r,0).mul(Cr),n=wt(r,8),s=wt(r,e-8).mul(t),a=wt(r,e-16).mul(Cr),i=Yt(o.add(n),43).add(Yt(s,30)).add(a),p=Zi(i,o.add(Yt(n.add(Cr),18)).add(s),t),u=wt(r,16).mul(t),c=wt(r,24),l=i.add(wt(r,e-32)).mul(t),m=p.add(wt(r,e-24)).mul(t);return Zi(Yt(u.add(c),43).add(Yt(l,30)).add(m),u.add(Yt(c.add(o),18)).add(l),t)}function i4(r,e=r.length){let t=Ou.fromNumber(81,!0);if(e<=32)return e<=16?n4(r,e):s4(r,e);if(e<=64)return a4(r,e);let o=t,n=t.mul(Pu).add(113),s=lw(n.mul(Cr).add(113)).mul(Cr),a=[Ou.UZERO,Ou.UZERO],i=[Ou.UZERO,Ou.UZERO];o=o.mul(Cr).add(wt(r,0));let p=0,u=(e-1>>6)*64,c=u+(e-1&63)-63;do o=Yt(o.add(n).add(a[0]).add(wt(r,p+8)),37).mul(Pu),n=Yt(n.add(a[1]).add(wt(r,p+48)),42).mul(Pu),o=o.xor(i[1]),n=n.add(a[0]).add(wt(r,p+40)),s=Yt(s.add(i[0]),33).mul(Pu),a=Jm(r,p,a[1].mul(Pu),o.add(i[0])),i=Jm(r,p+32,s.add(i[1]),n.add(wt(r,p+16))),[s,o]=[o,s],p+=64;while(p!==u);let l=Pu.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=Yt(o.add(n).add(a[0]).add(wt(r,p+8)),37).mul(l),n=Yt(n.add(a[1]).add(wt(r,p+48)),42).mul(l),o=o.xor(i[1].mul(9)),n=n.add(a[0].mul(9).add(wt(r,p+40))),s=Yt(s.add(i[0]),33).mul(l),a=Jm(r,p,a[1].mul(l),o.add(i[0])),i=Jm(r,p+32,s.add(i[1]),n.add(wt(r,p+16))),[s,o]=[o,s],Zi(Zi(a[0],i[0],l).add(lw(n).mul(H0)).add(s),Zi(a[1],i[1],l).add(o),l)}function u4(r,e){return e===\"string\"?Ji(r):Zp([r],e)}function p4(r,e){return r instanceof Float32Array&&e===\"float32\"||r instanceof Int32Array&&e===\"int32\"||r instanceof Uint8Array&&e===\"bool\"}function Zp(r,e){if(e===\"string\")throw new Error(\"Cannot convert a string[] to a TypedArray\");if(Array.isArray(r)&&(r=Fs(r)),A().getBool(\"DEBUG\")&&tw(r,e),p4(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=Mu();if(this.backendTimer.timerAvailable())a=this.backendTimer.time(s);else{s();for(let u of n)u.dataSync();a=Promise.resolve({kernelMs:Mu()-i})}if(A().getBool(\"CHECK_COMPUTATION_FOR_ERRORS\"))for(let u=0;u{l4(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 l4(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 q0(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(!br(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 X0=20,xl=3,fw=7;function Y0(r,e,t,o){let n=js(e),s=m4(r,e,t,n),a=e.length,i=td(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 m4(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\"?bl(r):r;if(i>1)for(let u=0;uX0){let g=xl*a,x=Array.from(r.slice(0,g)),b=Array.from(r.slice((i-xl)*a,i*a));return t===\"complex64\"&&(x=bl(x),b=bl(b)),[\"[\"+x.map((C,S)=>yl(C,n[S],t)).join(\", \")+\", ..., \"+b.map((C,S)=>yl(C,n[i-xl+S],t)).join(\", \")+\"]\"]}return[\"[\"+(t===\"complex64\"?bl(r):Array.from(r)).map((g,x)=>yl(g,n[x],t)).join(\", \")+\"]\"]}let u=e.slice(1),c=o.slice(1),l=o[0]*a,m=[];if(i>X0){for(let h=0;h0?m[0]+d:\"\");for(let h=1;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||Xm(t,this.size),this.strides=js(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;nJp(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(),Ps().readToGPU(this.dataId,e)}dataSync(){this.throwIfDisposed();let e=Ps().readSync(this.dataId);if(this.dtype===\"string\")try{return e.map(t=>Jp(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 Ps().read(this.dataId);return this.dtype===\"string\"?e:new Uint8Array(e.buffer)}dispose(){this.isDisposed||(this.kerasMask&&this.kerasMask.dispose(),Ps().disposeTensor(this),this.isDisposedInternal=!0)}get isDisposed(){return this.isDisposedInternal}throwIfDisposed(){if(this.isDisposed)throw new Error(\"Tensor is disposed.\")}print(e=!1){return ec.print(this,e)}clone(){return this.throwIfDisposed(),ec.clone(this)}toString(e=!1){let t=this.dataSync();return Y0(t,this.shape,this.dtype,e)}cast(e){return this.throwIfDisposed(),ec.cast(this,e)}variable(e=!0,t,o){return this.throwIfDisposed(),Ps().makeVariable(this,e,t,o)}};Object.defineProperty(mt,Symbol.hasInstance,{value:r=>!!r&&r.data!=null&&r.dataSync!=null&&r.throwIfDisposed!=null});function hw(){return fl(\"Tensor\",()=>mt)}hw();var ri=class extends mt{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(!br(e.shape,this.shape))throw new Error(`shape of the new value (${e.shape}) and previous value (${this.shape}) must match`);Ps().disposeTensor(this),this.dataId=e.dataId,Ps().incRef(this,null)}dispose(){Ps().disposeVariable(this),this.isDisposedInternal=!0}};Object.defineProperty(ri,Symbol.hasInstance,{value:r=>r instanceof mt&&r.assign!=null&&r.assign instanceof Function});var rk={};qe(rk,{assertTypesMatch:()=>ww,getTensorsInContainer:()=>Cl,isTensorInList:()=>h4,makeTypesMatch:()=>Oe});var gw;(function(r){r.R0=\"R0\",r.R1=\"R1\",r.R2=\"R2\",r.R3=\"R3\",r.R4=\"R4\",r.R5=\"R5\",r.R6=\"R6\"})(gw||(gw={}));var xw;(function(r){r.float32=\"float32\",r.int32=\"int32\",r.bool=\"int32\",r.complex64=\"complex64\"})(xw||(xw={}));var yw;(function(r){r.float32=\"float32\",r.int32=\"int32\",r.bool=\"bool\",r.complex64=\"complex64\"})(yw||(yw={}));var bw;(function(r){r.float32=\"float32\",r.int32=\"float32\",r.bool=\"float32\",r.complex64=\"complex64\"})(bw||(bw={}));var Cw;(function(r){r.float32=\"complex64\",r.int32=\"complex64\",r.bool=\"complex64\",r.complex64=\"complex64\"})(Cw||(Cw={}));var f4={float32:bw,int32:xw,bool:yw,complex64:Cw};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 f4[r][e]}function oi(r){return dt(r,\"int32\")}function rd(r){return r!=null&&typeof r==\"object\"&&\"texture\"in r&&r.texture instanceof WebGLTexture}function od(r){return typeof GPUBuffer!=\"undefined\"&&r!=null&&typeof r==\"object\"&&\"buffer\"in r&&r.buffer instanceof GPUBuffer}function Oe(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 ww(r,e){E(r.dtype===e.dtype,()=>`The dtypes of the first(${r.dtype}) and second(${e.dtype}) input must match`)}function h4(r,e){return e.some(t=>t.id===r.id)}function Cl(r){let e=[];return tk(r,e,new Set),e}function tk(r,e,t){if(r==null)return;if(r instanceof mt){e.push(r);return}if(!g4(r))return;let o=r;for(let n in o){let s=o[n];t.has(s)||(t.add(s),tk(s,e,t))}}function g4(r){return Array.isArray(r)||typeof r==\"object\"}function Sw(r){return r.kernelName!=null}var nd=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()}},wl=class r{constructor(e){this.ENV=e,this.registry={},this.registryFactory={},this.pendingBackendInitId=0,this.state=new nd}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){Ym(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 ao)&&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 r.nextTensorId++}nextVariableId(){return r.nextVariableId++}clone(e){let t=T.runKernel(Co,{x:e}),o={x:e},n=a=>({x:()=>{let i=\"float32\",p={x:a},u={dtype:i};return T.runKernel(yo,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,!(Xp(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=Sw(e)?e.kernelName:this.state.activeScope!=null?this.state.activeScope.name:\"\";if(Sw(e)){let{kernelName:f,inputs:h,attrs:g}=e;this.backendName==null&&this.backend;let x=Xp(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 S=C.map(k=>k.rank!=null?k:this.makeTensorFromTensorInfo(k));if(n){let k=this.getTensorsForGradient(f,h,S);o=this.saveTensorsForBackwardMode(k)}return S}}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=Sw(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=iw(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\"&&zo(e[0])&&(s=e.map(p=>Ji(p)));let a=n.write(s,t,o),i=new mt(t,o,a,this.nextTensorId());if(this.trackTensor(i,n),o===\"string\"){let p=this.state.tensorInfo.get(a),u=ow(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 mt(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 ri(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*Wp(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 ri||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*Wp(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=iw(e);p!=null&&(n=p.gradFunc),n!=null&&(i.gradient=u=>(u=u.map((c,l)=>{if(c==null){let m=o[l],d=Gp(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=Cl(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 mt,()=>\"The result y returned by f() must be a tensor.\");let a=q0(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?x4(s.shape):o,j0(i,a,u=>this.tidy(u),y4);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(qs(e),()=>\"The f passed in customGrad(f) must be a function.\"),(...t)=>{E(t.every(i=>i instanceof mt),()=>\"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 mt,()=>\"The function f passed in customGrad(f) must return an object where `obj.value` is a tensor\"),E(qs(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 mt),()=>\"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=Mu(),o=await this.backend.time(e);return o.wallMs=Mu()-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 nd;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}};wl.nextTensorId=0;wl.nextVariableId=0;function x4(r){let e=ml(ze(r),\"float32\");return T.makeTensor(e,r,\"float32\")}function Iw(){let r=aw();if(r._tfengine==null){let e=new dl(r);r._tfengine=new wl(e)}return $0(r._tfengine.ENV),Z0(()=>r._tfengine),r._tfengine}var T=Iw();function y4(r,e){let t={a:r,b:e};return T.runKernel(uo,t)}var eu={};qe(eu,{isBrowser:()=>kw,isMobile:()=>w4,mockIsMobile:()=>C4});function b4(){return typeof navigator!=\"undefined\"&&navigator!=null}var vw;function C4(r){vw=r}function w4(r){if(vw!==void 0)return vw;if(r||b4()){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 kw(){return typeof window!=\"undefined\"&&window.document!=null||typeof WorkerGlobalScope!=\"undefined\"}var _r=A();_r.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.\")});_r.registerFlag(\"IS_BROWSER\",()=>kw());_r.registerFlag(\"IS_NODE\",()=>typeof process!=\"undefined\"&&typeof process.versions!=\"undefined\"&&typeof process.versions.node!=\"undefined\");_r.registerFlag(\"IS_CHROME\",()=>typeof navigator!=\"undefined\"&&navigator!=null&&navigator.userAgent!=null&&/Chrome/.test(navigator.userAgent)&&/Google Inc/.test(navigator.vendor));_r.registerFlag(\"IS_SAFARI\",()=>typeof navigator!=\"undefined\"&&navigator!=null&&navigator.userAgent!=null&&/Safari/.test(navigator.userAgent)&&/Apple/.test(navigator.vendor));_r.registerFlag(\"PROD\",()=>!1);_r.registerFlag(\"TENSORLIKE_CHECK_SHAPE_CONSISTENCY\",()=>_r.getBool(\"DEBUG\"));_r.registerFlag(\"DEPRECATION_WARNINGS_ENABLED\",()=>!0);_r.registerFlag(\"IS_TEST\",()=>!1);_r.registerFlag(\"CHECK_COMPUTATION_FOR_ERRORS\",()=>_r.getBool(\"DEBUG\"));_r.registerFlag(\"WRAP_TO_IMAGEBITMAP\",()=>!1);_r.registerFlag(\"CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU\",()=>!1);_r.registerFlag(\"USE_SETTIMEOUTCUSTOM\",()=>!1);function sr(r,e){let t=r;if(Pt(r))return e===\"string\"?[]:[r.length];if(rd(r)){let n=r.channels||\"RGBA\";return[r.height,r.width*n.length]}else if(od(r))return[r.buffer.size/(e==null?4:Wp(e))];if(!Array.isArray(r))return[];let o=[];for(;Array.isArray(t)||Pt(t)&&e!==\"string\";)o.push(t.length),t=t[0];return Array.isArray(r)&&A().getBool(\"TENSORLIKE_CHECK_SHAPE_CONSISTENCY\")&&nk(r,o,[]),o}function nk(r,e,t){if(t=t||[],!Array.isArray(r)&&!Pt(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),ok(o,n,e,t),r==null||!Pt(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=sr(r,n);!Pt(r)&&!Array.isArray(r)&&(r=[r]);let i=n!==\"string\"?Zp(r,n):Fs(r,[],!0);return T.makeTensor(i,s,n)}function ni(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 Nw=\"__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+Nw;let n=(...s)=>{T.startScope(t);try{let a=o(...s);return Eu(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 S4(r,e){let t=v(r,\"real\",\"complex\"),o=v(e,\"imag\",\"complex\");xt(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(Di,n)}var Er=N({complex_:S4});function wr(r,e,t,o){if(o==null)o=Ei(r);else if(o===\"complex64\")throw new Error(\"Cannot construct a complex64 tensor directly. Please use tf.complex(real, imag).\");if(od(r)||rd(r)){if(o!==\"float32\"&&o!==\"int32\")throw new Error(`Creating tensor from GPU data only supports 'float32'|'int32' dtype, while the dtype is ${o}.`);return T.backend.createTensorFromGPUData(r,e||t,o)}if(!Pt(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){Ct(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!Pt(r)&&!Array.isArray(r)&&(r=[r]),e=e||t,r=o!==\"string\"?Zp(r,o):Fs(r,[],!0),T.makeTensor(r,e,o)}function ar(r,e,t){let o=sr(r,t);return wr(r,e,o,t)}var si={float32:4,float16:2,int32:4,uint16:2,uint8:1,bool:1,complex64:8};var ir=class r{static join(e){return new r(e).slice()}constructor(e){if(this.shards=[],this.previousShardIndex=0,e==null||(e instanceof Array||(e=[e]),e=e.map(o=>Pt(o)?o.buffer:o),e.length===0))return;this.bufferUniformSize=e[0].byteLength;let t=0;for(let o=0;o=this.byteLength)return-1;if(this.bufferUniformSize!=null)return this.previousShardIndex=Math.floor(e/this.bufferUniformSize),this.previousShardIndex;function t(n){return e=n.end?1:0}if(t(this.shards[this.previousShardIndex])===0)return this.previousShardIndex;let o=I4(this.shards,t);return o===-1?-1:(this.previousShardIndex=o,this.previousShardIndex)}};function I4(r,e){let t=0,o=r.length;for(;t<=o;){let n=Math.floor((o-t)/2)+t,s=e(r[n]);if(s===0)return n;s<0?o=n:t=n+1}return-1}function hme(){A().set(\"PROD\",!0)}function gme(){A().set(\"DEBUG\",!0)}function xme(){A().set(\"DEPRECATION_WARNINGS_ENABLED\",!1),console.warn(\"TensorFlow.js deprecation warnings have been disabled.\")}function Tw(r){A().getBool(\"DEPRECATION_WARNINGS_ENABLED\")&&console.warn(r+\" You can disable deprecation warnings with tf.disableDeprecationWarnings().\")}ek(Tw);function yme(){T.disposeVariables()}function ur(){return T}function bme(){return T.memory()}function Cme(r){return T.profile(r)}function De(r,e){return T.tidy(r,e)}function Ot(r){Cl(r).forEach(t=>t.dispose())}function $r(r){return T.keep(r)}function wme(r){return T.time(r)}function Sme(r){return T.setBackend(r)}function Ime(){return T.ready()}function sk(){return T.backendName}function vme(r){T.removeBackend(r)}function kme(r){return T.findBackend(r)}function Nme(r){return T.findBackendFactory(r)}function tu(r,e,t=1){return T.registerBackend(r,e,t)}function ak(){return T.backend}function Tme(r,e){A().setPlatform(r,e)}var ru=4;async function pk(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)+ru*m.length,f=new Uint8Array(d),h=0;for(let g=0;gt.slice(n+i,n+p));o[s.name]=ck(s,t.slice(n,n+a)),n+=a}return o}function v4(r,e){let t=ze(r.shape),o;if(\"quantization\"in r){let n=r.quantization;o=si[n.dtype]}else if(r.dtype===\"string\"){let n=0;for(let s=0;s(n=await ik(o,n,c),n.slice(u,c)));n=await ik(o,n,a);let i=n.slice(0,a);n=n.slice(a);let p=ck(s,i);if(t[s.name]=p,sk()===\"webgpu\"){let u=ak();\"uploadToGPU\"in u&&ze(p.shape)>=A().get(\"WEBGPU_CPU_HANDOFF_SIZE_THRESHOLD\")&&u.uploadToGPU(p.dataId)}}return t}function N4(r){if(r===null)throw new Error(`Invalid input value: ${JSON.stringify(r)}`);let e=0,t=[];r.forEach(s=>{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 _w=typeof Buffer!=\"undefined\"&&(typeof Blob==\"undefined\"||typeof atob==\"undefined\"||typeof btoa==\"undefined\");function uk(r){return _w?Buffer.byteLength(r,\"utf8\"):new Blob([r]).size}function lk(r){if(_w)return Buffer.from(r).toString(\"base64\");let e=new Uint8Array(r),t=\"\";for(let o=0,n=e.length;o{let o=t<<13,n=0;for(;!(o&8388608);)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 _4(){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 E4(){let r=new Uint32Array(64);for(let e=0;e<64;e++)r[e]=1024;return r[0]=r[32]=0,r}function $4(){let r=T4(),e=_4(),t=E4();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 qt=class r{constructor(){this.saveRouters=[],this.loadRouters=[]}static getInstance(){return r.instance==null&&(r.instance=new r),r.instance}static registerSaveRouter(e){r.getInstance().saveRouters.push(e)}static registerLoadRouter(e){r.getInstance().loadRouters.push(e)}static getSaveHandlers(e){return r.getHandlers(e,\"save\")}static getLoadHandlers(e,t){return r.getHandlers(e,\"load\",t)}static getHandlers(e,t,o){let n=[];return(t===\"load\"?r.getInstance().loadRouters:r.getInstance().saveRouters).forEach(a=>{let i=a(e,o);i!==null&&n.push(i)}),n}},fk=r=>qt.registerSaveRouter(r),hk=r=>qt.registerLoadRouter(r),gk=r=>qt.getSaveHandlers(r),xk=(r,e)=>qt.getLoadHandlers(r,e);var Rw=\"tensorflowjs\",Dw=1,Lu=\"models_store\",ou=\"model_info_store\";function yk(){if(!A().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 Aw(r){let e=r.result;e.createObjectStore(Lu,{keyPath:\"modelPath\"}),e.createObjectStore(ou,{keyPath:\"modelPath\"})}var ka=class{constructor(e){if(this.indexedDB=yk(),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(Rw,Dw);s.onupgradeneeded=()=>Aw(s),s.onsuccess=()=>{let a=s.result;if(t==null){let i=a.transaction(Lu,\"readonly\"),u=i.objectStore(Lu).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{t.weightData=ir.join(t.weightData);let i=va(t),p=a.transaction(ou,\"readwrite\"),u=p.objectStore(ou),c;try{c=u.put({modelPath:this.modelPath,modelArtifactsInfo:i})}catch(m){return n(m)}let l;c.onsuccess=()=>{l=a.transaction(Lu,\"readwrite\");let m=l.objectStore(Lu),d;try{d=m.put({modelPath:this.modelPath,modelArtifacts:t,modelArtifactsInfo:i})}catch(f){return n(f)}d.onsuccess=()=>o({modelArtifactsInfo:i}),d.onerror=f=>{u=p.objectStore(ou);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)})}};ka.URL_SCHEME=\"indexeddb://\";var bk=r=>A().getBool(\"IS_BROWSER\")&&!Array.isArray(r)&&r.startsWith(ka.URL_SCHEME)?R4(r.slice(ka.URL_SCHEME.length)):null;qt.registerSaveRouter(bk);qt.registerLoadRouter(bk);function R4(r){return new ka(r)}function D4(r){return r.startsWith(ka.URL_SCHEME)?r.slice(ka.URL_SCHEME.length):r}var ud=class{constructor(){this.indexedDB=yk()}async listModels(){return new Promise((e,t)=>{let o=this.indexedDB.open(Rw,Dw);o.onupgradeneeded=()=>Aw(o),o.onsuccess=()=>{let n=o.result,s=n.transaction(ou,\"readonly\"),i=s.objectStore(ou).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=D4(e),new Promise((t,o)=>{let n=this.indexedDB.open(Rw,Dw);n.onupgradeneeded=()=>Aw(n),n.onsuccess=()=>{let s=n.result,a=s.transaction(ou,\"readwrite\"),i=a.objectStore(ou),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(Lu,\"readwrite\");let d=u.objectStore(Lu).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 ai=\"/\",rc=\"tensorflowjs_models\",Ck=\"info\",A4=\"model_topology\",F4=\"weight_specs\",P4=\"weight_data\",O4=\"model_metadata\";function wk(r){return{info:[rc,r,Ck].join(ai),topology:[rc,r,A4].join(ai),weightSpecs:[rc,r,F4].join(ai),weightData:[rc,r,P4].join(ai),modelMetadata:[rc,r,O4].join(ai)}}function Sk(r){for(let e of Object.values(r))window.localStorage.removeItem(e)}function M4(r){let e=r.split(ai);if(e.length<3)throw new Error(`Invalid key format: ${r}`);return e.slice(1,e.length-1).join(ai)}function L4(r){return r.startsWith(Na.URL_SCHEME)?r.slice(Na.URL_SCHEME.length):r}var Na=class{constructor(e){if(!A().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=wk(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=va(e),s=ir.join(e.weightData);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,lk(s));let a={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(a)),{modelArtifactsInfo:n}}catch(a){throw Sk(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=mk(a),t}};Na.URL_SCHEME=\"localstorage://\";var Ik=r=>A().getBool(\"IS_BROWSER\")&&!Array.isArray(r)&&r.startsWith(Na.URL_SCHEME)?B4(r.slice(Na.URL_SCHEME.length)):null;qt.registerSaveRouter(Ik);qt.registerLoadRouter(Ik);function B4(r){return new Na(r)}var pd=class{constructor(){E(A().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=rc+ai,o=ai+Ck;for(let n=0;n\"scheme must not be undefined or null.\"),e.endsWith(oc)&&(e=e.slice(0,e.indexOf(oc))),E(e.length>0,()=>\"scheme must not be an empty string.\");let o=r.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=r.getInstance().managers[e];if(t==null)throw new Error(`Cannot find model manager for scheme '${e}'`);return t}static getSchemes(){return Object.keys(r.getInstance().managers)}};function cd(r){if(r.indexOf(oc)===-1)throw new Error(`The url string provided does not contain a scheme. Supported schemes are: ${Os.getSchemes().join(\",\")}`);return{scheme:r.split(oc)[0],path:r.split(oc)[1]}}async function vk(r,e,t=!1){E(r!==e,()=>`Old path and new path are the same: '${r}'`);let o=qt.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=qt.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=cd(r).scheme,p=cd(r).path,u=i===cd(r).scheme,c=await n.load();t&&u&&await Os.getManager(i).removeModel(p);let l=await a.save(c);return t&&!u&&await Os.getManager(i).removeModel(p),l.modelArtifactsInfo}async function kk(){let r=Os.getSchemes(),e={};for(let t of r){let o=await Os.getManager(t).listModels();for(let n in o){let s=t+oc+n;e[s]=o[n]}}return e}async function Nk(r){let e=cd(r);return Os.getManager(e.scheme).removeModel(e.path)}async function Tk(r,e){return vk(r,e,!1)}async function _k(r,e){return vk(r,e,!0)}var Fw=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\"||!A().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))}isTypedArray(e){return Qm(e)}};if(A().get(\"IS_BROWSER\")){A().setPlatform(\"browser\",new Fw);try{Os.registerManager(Na.URL_SCHEME,new pd)}catch(r){}try{Os.registerManager(ka.URL_SCHEME,new ud)}catch(r){}}var z4={importFetch:()=>Ek()},Pw;var Ow=class{constructor(){this.util=$k(),this.textEncoder=new this.util.TextEncoder}fetch(e,t){return A().global.fetch!=null?A().global.fetch(e,t):(Pw==null&&(Pw=z4.importFetch()),Pw(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)}isTypedArray(e){return this.util.types.isFloat32Array(e)||this.util.types.isInt32Array(e)||this.util.types.isUint8Array(e)||this.util.types.isUint8ClampedArray(e)}};A().get(\"IS_NODE\")&&!A().get(\"IS_BROWSER\")&&A().setPlatform(\"node\",new Ow);function me(r,e=\"float32\",t){return e=e||\"float32\",Ct(r),new tt(r,e,t)}function V4(r,e){let t=v(r,\"x\",\"cast\");if(!rw(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(yo,o,n)}var Ue=N({cast_:V4});function W4(r){let t={x:v(r,\"x\",\"clone\",\"string_or_numeric\")};return T.runKernel(Co,t)}var Ur=N({clone_:W4});function ld(r,e=!1){console.log(r.toString(e))}Iw();var U4={buffer:me,cast:Ue,clone:Ur,print:ld};J0(U4);function G4(r,e){let t=v(r,\"a\",\"add\"),o=v(e,\"b\",\"add\");[t,o]=Oe(t,o);let n={a:t,b:o};return T.runKernel(uo,n)}var Ce=N({add_:G4});function H4(r,e){let t=v(r,\"a\",\"floorDiv\"),o=v(e,\"b\",\"floorDiv\");[t,o]=Oe(t,o);let n={a:t,b:o};return T.runKernel(Sn,n)}var md=N({floorDiv_:H4});function K4(r,e){let t=v(r,\"a\",\"div\"),o=v(e,\"b\",\"div\");if([t,o]=Oe(t,o),t.dtype===\"int32\"&&o.dtype===\"int32\")return md(t,o);let n={a:t,b:o},s={};return T.runKernel(fn,n,s)}var je=N({div_:K4});function q4(r,e){let t=v(r,\"a\",\"mul\"),o=v(e,\"b\",\"mul\");[t,o]=Oe(t,o);let n={a:t,b:o};return T.runKernel(Xn,n)}var se=N({mul_:q4});function j4(r){let e=v(r,\"x\",\"abs\");if(e.dtype===\"complex64\"){let t={x:e};return T.runKernel(Ai,t)}else{let t={x:e};return T.runKernel(Xs,t)}}var Qt=N({abs_:j4});function X4(r){let t={x:v(r,\"x\",\"acos\")};return T.runKernel(Vo,t)}var Rk=N({acos_:X4});function Y4(r){let t={x:v(r,\"x\",\"acosh\")};return T.runKernel(Wo,t)}var Dk=N({acosh_:Y4});function Q4(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(!br(n.shape,t.shape))throw new Error(\"All tensors passed to tf.addN() must have the same shape\")});let o=e;return T.runKernel(Uo,o)}var Ak=N({addN_:Q4});function Z4(r,e=null,t=!1){let n={x:v(r,\"x\",\"all\",\"bool\")},s={axis:e,keepDims:t};return T.runKernel(Go,n,s)}var Fk=N({all_:Z4});function J4(r,e=null,t=!1){let n={x:v(r,\"x\",\"any\",\"bool\")},s={axis:e,keepDims:t};return T.runKernel(Ho,n,s)}var Pk=N({any_:J4});function eH(r,e=0){let o={x:v(r,\"x\",\"argMax\")},n={axis:e};return T.runKernel(Ys,o,n)}var Ok=N({argMax_:eH});function tH(r,e=0){let o={x:v(r,\"x\",\"argMin\")},n={axis:e};return T.runKernel(Qs,o,n)}var Mk=N({argMin_:tH});function rH(r){let t={x:v(r,\"x\",\"asin\")};return T.runKernel(Ko,t)}var Lk=N({asin_:rH});function oH(r){let t={x:v(r,\"x\",\"asinh\")};return T.runKernel(qo,t)}var Bk=N({asinh_:oH});function nH(r){let t={x:v(r,\"x\",\"atan\")};return T.runKernel(jo,t)}var zk=N({atan_:nH});function sH(r,e){let t=v(r,\"a\",\"atan2\"),o=v(e,\"b\",\"atan2\");[t,o]=Oe(t,o);let n={a:t,b:o};return T.runKernel(Yo,n)}var Vk=N({atan2_:sH});function aH(r){let t={x:v(r,\"x\",\"atanh\")};return T.runKernel(Xo,t)}var Wk=N({atanh_:aH});function iH(r,e,t,o,n=\"NHWC\",s){let a=r[3],i=[...e,a],p=Gk(n);return zu(r,i,t,s,o,null,null,p)}function Lw(r,e,t,o,n,s,a=\"channelsLast\"){let[i,p]=Il(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 zu(r,u,t,o,n,s,!1,a)}function uH(r,e,t,o,n,s,a=\"NDHWC\"){let[i,p,u]=Mw(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 Uk(r,c,t,o,n,!1,l,s)}function zu(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]=Il(t),[x,b]=Il(o),C=nc(m,x),S=nc(d,b),{padInfo:k,outHeight:_,outWidth:$}=lH(n,u,c,h,g,C,S,s,i),R=a?f*l:f,D;return i===\"channelsFirst\"?D=[p,R,_,$]:i===\"channelsLast\"&&(D=[p,_,$,R]),{batchSize:p,dataFormat:i,inHeight:u,inWidth:c,inChannels:l,outHeight:_,outWidth:$,outChannels:R,padInfo:k,strideHeight:h,strideWidth:g,filterHeight:m,filterWidth:d,effectiveFilterHeight:C,effectiveFilterWidth:S,dilationHeight:x,dilationWidth:b,inShape:r,outShape:D,filterShape:e}}function Uk(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]=Mw(t),[S,k,_]=Mw(o),$=nc(d,S),R=nc(f,k),D=nc(h,_),{padInfo:P,outDepth:O,outHeight:M,outWidth:L}=mH(n,u,c,l,x,b,C,$,R,D,i),B=s?g*m:g,z;return a===\"channelsFirst\"?z=[p,B,O,M,L]:a===\"channelsLast\"&&(z=[p,O,M,L,B]),{batchSize:p,dataFormat:a,inDepth:u,inHeight:c,inWidth:l,inChannels:m,outDepth:O,outHeight:M,outWidth:L,outChannels:B,padInfo:P,strideDepth:x,strideHeight:b,strideWidth:C,filterDepth:d,filterHeight:f,filterWidth:h,effectiveFilterDepth:$,effectiveFilterHeight:R,effectiveFilterWidth:D,dilationDepth:S,dilationHeight:k,dilationWidth:_,inShape:r,outShape:z,filterShape:e}}function pH(r,e,t,o,n){o==null&&(o=Bw(r,e,t));let s=r[0],a=r[1],i=vl((s-e+2*o)/t+1,n),p=vl((a-e+2*o)/t+1,n);return[i,p]}function cH(r,e,t,o,n,s){n==null&&(n=Bw(r,e[0],o[0]));let a=[0,0,0,t];for(let i=0;i<3;i++)r[i]+2*n>=e[i]&&(a[i]=vl((r[i]-e[i]+2*n)/o[i]+1,s));return a}function Bw(r,e,t,o=1){let n=nc(e,o);return Math.floor((r[0]*(t-1)-t+n)/2)}function Il(r){return typeof r==\"number\"?[r,r,r]:r.length===2?[r[0],r[1],1]:r}function Mw(r){return typeof r==\"number\"?[r,r,r]:r}function nc(r,e){return e<=1?r:r+(r-1)*(e-1)}function lH(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=pH([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=vl((e-s+m+d)/o+1,i),l=vl((t-a+f+h)/n+1,i)}else throw Error(`Unknown padding parameter: ${r}`);return{padInfo:u,outHeight:c,outWidth:l}}function mH(r,e,t,o,n,s,a,i,p,u,c){let l,m,d,f;if(r===\"valid\"&&(r=0),typeof r==\"number\"){l={top:r,bottom:r,left:r,right:r,front:r,back:r,type:r===0?\"VALID\":\"NUMBER\"};let g=cH([e,t,o,1],[i,p,u],1,[n,s,a],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,S=Math.floor(g/2),k=g-S,_=Math.floor(x/2),$=x-_;l={top:S,bottom:k,left:_,right:$,front:b,back:C,type:\"SAME\"}}else throw Error(`Unknown padding parameter: ${r}`);return{padInfo:l,outDepth:m,outHeight:d,outWidth:f}}function vl(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 Bu(r){let[e,t,o]=Il(r);return e===1&&t===1&&o===1}function gr(r,e){return Bu(r)||Bu(e)}function Ta(r){return Il(r).every(e=>e>0)}function Gk(r){if(r===\"NHWC\")return\"channelsLast\";if(r===\"NCHW\")return\"channelsFirst\";throw new Error(`Unknown dataFormat ${r}`)}function Lt(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(Ka(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(Ka(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 dH(r,e){let o={x:v(r,\"x\",\"reshape\",\"string_or_numeric\")},n={shape:e};return T.runKernel(da,o,n)}var W=N({reshape_:dH});function fH(r,e,t,o,n){let s=v(r,\"x\",\"avgPool\",\"float32\"),a=1;E(gr(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=W(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}.`),Lt(\"avgPool\",o,n);let u={x:i},c={filterSize:e,strides:t,pad:o,dimRoundingMode:n},l=T.runKernel(Qo,u,c);return l=Ue(l,s.dtype),p?W(l,[l.shape[1],l.shape[2],l.shape[3]]):l}var dd=N({avgPool_:fH});function hH(r,e,t,o,n,s=\"NDHWC\"){let a=v(r,\"x\",\"avgPool3d\",\"float32\"),i=a,p=!1;a.rank===4&&(p=!0,i=W(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}`),E(typeof t==\"number\"&&t>0||Array.isArray(t)&&t[0]>0&&t[1]>0&&t[2]>0,()=>`Error in avgPool3d: Stride must be > 0, but got '${t}'`),Lt(\"avgPool3d\",o,n);let u={x:i},c={filterSize:e,strides:t,pad:o,dimRoundingMode:n,dataFormat:s},l=T.runKernel(Zs,u,c);return l=Ue(l,i.dtype),p?W(l,[l.shape[1],l.shape[2],l.shape[3],l.shape[4]]):l}var Hk=N({avgPool3d_:hH});function gH(r,e=0){E(r.length>=1,()=>\"Pass at least one tensor to concat\");let t=ni(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 Ur(t[0]);let o=t,n={axis:e};return T.runKernel(ta,o,n)}var yt=N({concat_:gH});function xH(r,e,t=!1,o=!1){let n=v(r,\"a\",\"matMul\"),s=v(e,\"b\",\"matMul\");[n,s]=Oe(n,s);let a={a:n,b:s},i={transposeA:t,transposeB:o};return T.runKernel(Zo,a,i)}var Ze=N({matMul_:xH});function yH(r){let t={x:v(r,\"x\",\"sigmoid\",\"float32\")};return T.runKernel(bs,t)}var Ea=N({sigmoid_:yH});function bH(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(ha,n,s)}var Xe=N({slice_:bH});function CH(r){let t={x:v(r,\"x\",\"tanh\",\"float32\")};return T.runKernel(Es,t)}var kl=N({tanh_:CH});function wH(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=yt([u,l],1),d=Ze(m,i),f=Ce(d,p),h=f.shape[0],g=f.shape[1]/4,x=[h,g],b=Xe(f,[0,0],x),C=Xe(f,[0,g],x),S=Xe(f,[0,g*2],x),k=Xe(f,[0,g*3],x),_=Ce(se(Ea(b),kl(C)),se(c,Ea(Ce(a,S)))),$=se(kl(_),Ea(k));return[_,$]}var Kk=N({basicLSTMCell_:wH});function SH(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(Js,s,a)}var fd=N({batchToSpaceND_:SH});function qk(r){let e;return r.rank===0||r.rank===1?e=W(r,[1,1,1,r.size]):r.rank===2?e=W(r,[1,1,r.shape[0],r.shape[1]]):r.rank===3?e=W(r,[1,r.shape[0],r.shape[1],r.shape[2]]):e=r,e}function IH(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:qk(a),scale:u,offset:c,mean:i,variance:p},d={varianceEpsilon:s},f=T.runKernel(In,m,d);return W(f,a.shape)}var nu=N({batchNorm_:IH});function vH(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}.`),nu(a,i,p,c,u,s)}var jk=N({batchNorm2d_:vH});function kH(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}.`),nu(a,i,p,c,u,s)}var Xk=N({batchNorm3d_:kH});function NH(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}.`),nu(a,i,p,c,u,s)}var Yk=N({batchNorm4d_:NH});function TH(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(Jo,s,a)}var hd=N({bincount_:TH});function _H(r,e){let t=v(r,\"x\",\"bitwiseAnd\"),o=v(e,\"y\",\"bitwiseAnd\");if(!br(t.shape,o.shape))throw new Error(`BitwiseAnd: Tensors must have the same shape. x: ${t.shape}, y: ${o.shape}`);if(t.dtype!==\"int32\"||o.dtype!==\"int32\")throw new Error(`BitwiseAnd: Only supports 'int32' values in tensor, found type of x: ${t.dtype} and type of y: ${o.dtype}`);let n={a:t,b:o};return T.runKernel(qa,n)}var Qk=N({bitwiseAnd_:_H});function EH(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(ea,n)}var Zk=N({broadcastArgs_:EH});function $H(r,e){let t=v(r,\"broadcastTo\",\"x\"),o=t.shape;if(Ct(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 Ur(t);let i={x:t},p={reps:s};return T.runKernel(po,i,p)}var su=N({broadcastTo_:$H});function RH(r){let t={x:v(r,\"x\",\"ceil\",\"float32\")};return T.runKernel(en,t)}var Jk=N({ceil_:RH});function $a(r,e,t){Ct(r),t=t||Ei(e);let o={shape:r,value:e,dtype:t};return T.runKernel(sa,{},o)}function DH(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 $a(o.shape,e,o.dtype);let n={x:o},s={clipValueMin:e,clipValueMax:t};return T.runKernel(bo,n,s)}var e2=N({clipByValue_:DH});function AH(r){return yt(r,0)}var t2=N({concat1d_:AH});function FH(r,e){return yt(r,e)}var r2=N({concat2d_:FH});function PH(r,e){return yt(r,e)}var o2=N({concat3d_:PH});function OH(r,e){return yt(r,e)}var n2=N({concat4d_:OH});function MH(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=W(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}.`),Lt(\"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(gr(t,s),()=>`Error in conv2D: Either strides or dilations must be 1. Got strides ${t} and dilations '${s}'`),E(Ta(s),()=>\"Error in conv2D: Dilated rates should be larger than 0.\"),E(Ta(t),()=>\"Error in conv2D: Strides should be larger than 0.\");let m={x:u,filter:p},d={strides:t,pad:o,dataFormat:n,dilations:s,dimRoundingMode:a},f=T.runKernel(tn,m,d);return c?W(f,[f.shape[1],f.shape[2],f.shape[3]]):f}var au=N({conv2d_:MH});function LH(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=W(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}.`),Lt(\"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(gr(t,s),()=>`Error in conv1D: Either stride or dilation must be 1. Got stride ${t} and dilation '${s}'`),E(Ta(s),()=>\"Error in conv1D: Dilated rates should be larger than 0.\"),E(Ta(t),()=>\"Error in conv1D: Stride should be larger than 0.\"),E(n===\"NWC\",()=>`Error in conv1d: got dataFormat of ${n} but only NWC is currently supported.`);let l=W(p,[1,p.shape[0],p.shape[1],p.shape[2]]),m=W(u,[u.shape[0],1,u.shape[1],u.shape[2]]),g=au(m,l,[1,t],o,\"NHWC\",[1,s],a);return c?W(g,[g.shape[2],g.shape[3]]):W(g,[g.shape[0],g.shape[2],g.shape[3]])}var s2=N({conv1d_:LH});function BH(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=W(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]}.`),Lt(\"conv2dDerInput\",n,a);let m={dy:p,filter:t},d={strides:o,pad:n,dataFormat:s,dimRoundingMode:a,inputShape:i},f=T.runKernel(rn,m,d);return u?W(f,[f.shape[1],f.shape[2],f.shape[3]]):f}var gd=N({conv2DBackpropInput_:BH});function zH(r,e,t,o,n,s){let a=v(r,\"x\",\"conv2dTranspose\"),i=v(e,\"filter\",\"conv2dTranspose\");return gd(t,a,i,o,n,\"NHWC\",s)}var a2=N({conv2dTranspose_:zH});function VH(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=W(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(gr(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.`),E(Ta(s),()=>\"Error in conv3D: Dilated rates should be larger than 0.\"),E(Ta(t),()=>\"Error in conv3D: Strides should be larger than 0.\");let c={x:p,filter:i},l={strides:t,pad:o,dataFormat:n,dilations:s},m=T.runKernel(on,c,l);return u?W(m,[m.shape[1],m.shape[2],m.shape[3],m.shape[4]]):m}var i2=N({conv3d_:VH});function WH(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=W(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(nn,c,l);return i?W(m,[m.shape[1],m.shape[2],m.shape[3],m.shape[4]]):m}var u2=N({conv3DBackpropInput_:WH});function UH(r,e,t,o,n){let s=v(r,\"x\",\"conv3dTranspose\"),a=v(e,\"filter\",\"conv3dTranspose\");return u2(t,s,a,o,n)}var p2=N({conv3dTranspose_:UH});function GH(r){let t={x:v(r,\"x\",\"cos\",\"float32\")};return T.runKernel(sn,t)}var c2=N({cos_:GH});function HH(r){let t={x:v(r,\"x\",\"cosh\",\"float32\")};return T.runKernel(an,t)}var l2=N({cosh_:HH});function KH(r,e=0,t=!1,o=!1){let s={x:v(r,\"x\",\"cumprod\")},a={axis:e,exclusive:t,reverse:o};return T.runKernel(un,s,a)}var m2=N({cumprod_:KH});function qH(r,e=0,t=!1,o=!1){let s={x:v(r,\"x\",\"cumsum\")},a={axis:e,exclusive:t,reverse:o};return T.runKernel(pn,s,a)}var d2=N({cumsum_:qH});function jH(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(ra,a,i)}var f2=N({denseBincount_:jH});function XH(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(ln,i,p)}var h2=N({depthToSpace_:XH});function YH(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=W(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]}.`),Lt(\"depthwiseConv2d\",o,a);let m={x:u,filter:p},d={strides:t,pad:o,dataFormat:n,dilations:s,dimRoundingMode:a},f=T.runKernel(mn,m,d);return c?W(f,[f.shape[1],f.shape[2],f.shape[3]]):f}var sc=N({depthwiseConv2d_:YH});function QH(r){let t={x:v(r,\"x\",\"diag\")};return T.runKernel(oa,t)}var g2=N({diag_:QH});function ZH(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=W(a,[1,a.shape[0],a.shape[1],a.shape[2]]),u=!0),E(p.shape[3]===i.shape[2],()=>`Error in dilation2d: input and filter must have the same depth: ${p.shape[3]} vs ${i.shape[2]}`);let c={x:p,filter:i},l={strides:t,pad:o,dilations:n},m=T.runKernel(dn,c,l);return u?W(m,[m.shape[1],m.shape[2],m.shape[3]]):m}var x2=N({dilation2d_:ZH});var Sr={};qe(Sr,{assertAndGetBroadcastShape:()=>rt,getBroadcastDims:()=>y2,getReductionAxes:()=>xd});function y2(r,e){let t=r.length,o=[];for(let n=0;n1&&a===1&&o.unshift(s)}return o}function xd(r,e){let t=[];for(let o=0;o1)&&t.unshift(s)}return t}function rt(r,e){let t=Math.max(r.length,e.length),o=new Array(t);for(let n=0;n`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=W(t,[1,-1]),i=W(o,[-1,1]),p=Ze(a,i);return W(p,[])}else if(t.rank===1&&o.rank===2){let a=W(t,[1,-1]),i=W(o,[o.shape[0],o.shape[1]]),p=Ze(a,i);return W(p,[p.size])}else if(t.rank===2&&o.rank===1){let a=W(o,[-1,1]),i=Ze(t,a);return W(i,[i.size])}else{let a=W(o,[o.shape[0],o.shape[1]]);return Ze(t,a)}}var C2=N({dot_:oK});function nK(r,...e){let t=e.map((n,s)=>v(n,`tensors${s}`,\"einsum\")),o={equation:r};return T.runKernel(Bi,t,o)}var iu=N({einsum_:nK});function sK(r){let t={x:v(r,\"x\",\"elu\",\"float32\")};return T.runKernel(hn,t)}var bd=N({elu_:sK});function aK(r,e){let t=v(r,\"x\",\"ensureShape\",\"string_or_numeric\");if(!ZC(t.shape,e))throw new Error(`EnsureShape: Shape of tensor ${t.shape} is not compatible with expected shape ${e}`);return r}var w2=N({ensureShape_:aK});function iK(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=Ue(e,\"float32\"));let t={x:e};return T.runKernel(gn,t)}var S2=N({erf_:iK});function zw(r,e){for(let t=0;tr[s]);return[t,n]}function ii(r,e){let t=e.map(o=>1);return I2(r,t,e)}function pK(r,e,t){E(zw(e,t),()=>`${r} supports only inner-most axes for now. Got axes ${e} and rank-${t} input.`)}function cK(r,e){if(zw(r,e))return null;let t=[];for(let o=0;ot.push(o)),t}function lK(r){return r.map((e,t)=>[t,e]).sort((e,t)=>e[1]-t[1]).map(e=>e[0])}function mK(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(na,o,n)}var Ms=N({expandDims_:IK});function vK(r){let t={x:v(r,\"x\",\"expm1\")};return T.runKernel(bn,t)}var N2=N({expm1_:vK});function kK(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(po,o,n)}var uu=N({tile_:kK});function NK(r,e,t,o=\"float32\"){e==null&&(e=r);let n=me([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(Ka(e),()=>`Error in localResponseNormalization: depthRadius must be an integer but got depthRadius ${e}.`);let a=s,i=!1;s.rank===3&&(i=!0,a=W(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(Bn,p,u);return i?W(c,[c.shape[1],c.shape[2],c.shape[3]]):c}var R2=N({localResponseNormalization_:LK});function BK(r){let t={x:v(r,\"x\",\"log\",\"float32\")};return T.runKernel(Fn,t)}var pi=N({log_:BK});function zK(r){let t={x:v(r,\"x\",\"log1p\")};return T.runKernel(Pn,t)}var kd=N({log1p_:zK});function VK(r){return E(qs(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&&xt(s.shape,n.shape,\"The shape of dy passed in grad(f)(x, dy) must match the shape returned by f(x)\"),Nd(a),a[0]})}}function WK(r){return E(qs(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=ni(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&&xt(s.shape,n.shape,\"The shape of dy passed in grads(f)([x1,...], dy) must match the shape returned by f([x1,...])\"),Nd(a),a})}}function UK(r){return E(qs(r),()=>\"The f passed in valueAndGrad(f) must be a function\"),(e,t)=>{E(e instanceof mt,()=>\"The x passed in valueAndGrad(f)(x) must be a tensor\"),E(t==null||t instanceof mt,()=>\"The dy passed in valueAndGrad(f)(x, dy) must be a tensor\");let{grads:o,value:n}=T.gradients(()=>r(e),[e],t);return Nd(o),{grad:o[0],value:n}}}function GK(r){return E(qs(r),()=>\"The f passed in valueAndGrads(f) must be a function\"),(e,t)=>{E(Array.isArray(e)&&e.every(n=>n instanceof mt),()=>\"The args passed in valueAndGrads(f)(args) must be array of tensors\"),E(t==null||t instanceof mt,()=>\"The dy passed in valueAndGrads(f)(args, dy) must be a tensor\");let o=T.gradients(()=>r(...e),e,t);return t!=null&&xt(o.value.shape,t.shape,\"The shape of dy passed in valueAndGrads(f)([x1,...], dy) must match the shape returned by f([x1,...])\"),Nd(o.grads),o}}function Vw(r,e){E(qs(r),()=>\"The f passed in variableGrads(f) must be a function\"),E(e==null||Array.isArray(e)&&e.every(u=>u instanceof ri),()=>\"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 Ir(r){return T.customGrad(r)}function Nd(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 HK(r){let t={x:v(r,\"x\",\"neg\")};return T.runKernel(pa,t)}var pr=N({neg_:HK});function KK(r){let t={x:v(r,\"x\",\"softplus\")};return T.runKernel(Cs,t)}var Td=N({softplus_:KK});function qK(r){let e=v(r,\"x\",\"logSigmoid\");return Ir(o=>({value:pr(Td(pr(o))),gradFunc:a=>se(a,Ea(pr(o)))}))(e)}var D2=N({logSigmoid_:qK});function jK(r,e){let t=v(r,\"a\",\"sub\"),o=v(e,\"b\",\"sub\");[t,o]=Oe(t,o);let n={a:t,b:o};return T.runKernel(Ts,n)}var Te=N({sub_:jK});function XK(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 Ir((n,s)=>{let i=Ra(n,e,!0),p=Te(n,i),u=Te(Ue(p,\"float32\"),pi(ot(_o(p),e,!0)));return s([u]),{value:u,gradFunc:(l,m)=>{let[d]=m,f=!0,h=_o(d);return Te(l,se(ot(l,e,f),h))}}})(t)}var A2=N({logSoftmax_:XK});function YK(r,e=null,t=!1){let o=v(r,\"x\",\"logSumExp\"),n=_i(e,o.shape),s=Ra(o,n,!0),a=Te(o,s),i=_o(a),p=ot(i,n),u=pi(p),c=Ce(W(s,u.shape),u);if(t){let l=ii(c.shape,n);return W(c,l)}return c}var _d=N({logSumExp_:YK});function QK(r,e){let t=v(r,\"a\",\"logicalAnd\",\"bool\"),o=v(e,\"b\",\"logicalAnd\",\"bool\");rt(t.shape,o.shape);let n={a:t,b:o};return T.runKernel(On,n)}var Uu=N({logicalAnd_:QK});function ZK(r){let t={x:v(r,\"x\",\"logicalNot\",\"bool\")};return T.runKernel(Mn,t)}var Ed=N({logicalNot_:ZK});function JK(r,e){let t=v(r,\"a\",\"logicalOr\",\"bool\"),o=v(e,\"b\",\"logicalOr\",\"bool\");rt(t.shape,o.shape);let n={a:t,b:o};return T.runKernel(Ln,n)}var $d=N({logicalOr_:JK});function eq(r,e){let t=v(r,\"a\",\"logicalXor\",\"bool\"),o=v(e,\"b\",\"logicalXor\",\"bool\");return rt(t.shape,o.shape),Uu($d(r,e),Ed(Uu(r,e)))}var F2=N({logicalXor_:eq});var Rd=2147483648;function tq(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=W(o,[-1,s]),p=W(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)>=Rd)throw new Error(`values tensor size must less than ${Rd}`);if(i.shape[1]>=Rd)throw new Error(`trailing dim_size must less than ${Rd} for int32 output type, was ${i.shape[1]}`);let u={sortedSequence:i,values:p},c={side:t};return T.runKernel(fs,u,c)}var _l=N({searchSorted_:tq});function P2(r,e){return _l(r,e,\"left\")}function rq(r,e,t,o,n){let s=v(r,\"x\",\"maxPool\"),a=1,i=s,p=!1;s.rank===3&&(p=!0,i=W(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(gr(t,a),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${t} and dilations '${a}'`),Lt(\"maxPool\",o,n);let u={x:i},c={filterSize:e,strides:t,pad:o,dimRoundingMode:n},l=T.runKernel(Wn,u,c);return p?W(l,[l.shape[1],l.shape[2],l.shape[3]]):l}var Dd=N({maxPool_:rq});function oq(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=W(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}`),Lt(\"maxPool3d\",o,n);let u={x:i},c={filterSize:e,strides:t,pad:o,dimRoundingMode:n,dataFormat:s},l=T.runKernel(ia,u,c);return p?W(l,[l.shape[1],l.shape[2],l.shape[3],l.shape[4]]):l}var O2=N({maxPool3d_:oq});function nq(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(ua,a,i);return{result:p[0],indexes:p[1]}}var M2=N({maxPoolWithArgmax_:nq});function sq(r,e){let t=v(r,\"a\",\"maximum\"),o=v(e,\"b\",\"maximum\");[t,o]=Oe(t,o),t.dtype===\"bool\"&&(t=Ue(t,\"int32\"),o=Ue(o,\"int32\")),rt(t.shape,o.shape);let n={a:t,b:o};return T.runKernel(Vn,n)}var Ad=N({maximum_:sq});function aq(r,e=null,t=!1){let n={x:v(r,\"x\",\"mean\")},s={axis:e,keepDims:t};return T.runKernel(Un,n,s)}var Gu=N({mean_:aq});function Gr(r,e=\"float32\"){if(Ct(r),e===\"complex64\"){let o=Gr(r,\"float32\"),n=Gr(r,\"float32\");return Er(o,n)}let t=Gp(ze(r),e);return T.makeTensor(t,r,e)}function Da(r,e=\"float32\"){if(Ct(r),e===\"complex64\"){let o=Da(r,\"float32\"),n=Gr(r,\"float32\");return Er(o,n)}let t=ml(ze(r),e);return T.makeTensor(t,r,e)}function L2(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 mt?r.dtype:\"float32\");if(e===void 0)return[o];let n=v(e,\"y\",\"meshgrid\",e instanceof mt?e.dtype:\"float32\"),s=ze(o.shape),a=ze(n.shape);return t===\"xy\"?(o=W(o,[1,-1]),n=W(n,[-1,1]),[Ze(Da([a,1],o.dtype),o),Ze(n,Da([1,s],n.dtype))]):(o=W(o,[-1,1]),n=W(n,[1,-1]),[Ze(o,Da([1,a],o.dtype)),Ze(Da([s,1],n.dtype),n)])}function iq(r,e){let t=v(r,\"a\",\"minimum\"),o=v(e,\"b\",\"minimum\");[t,o]=Oe(t,o),t.dtype===\"bool\"&&(t=Ue(t,\"int32\"),o=Ue(o,\"int32\")),rt(t.shape,o.shape);let n={a:t,b:o};return T.runKernel(Hn,n)}var Hu=N({minimum_:iq});function uq(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(Kn,a,s)}var B2=N({mirrorPad_:uq});function pq(r,e){let t=v(r,\"a\",\"mod\"),o=v(e,\"b\",\"mod\");[t,o]=Oe(t,o);let n={a:t,b:o};return T.runKernel(qn,n)}var z2=N({mod_:pq});function cq(r,e=null,t=!1){r=v(r,\"x\",\"moments\");let o=_i(e,r.shape),n=Gu(r,o,t),s=n.shape;t||(s=ii(n.shape,o));let a=Zt(Te(Ue(r,\"float32\"),W(n,s))),i=Gu(a,o,t);return{mean:n,variance:i}}var V2=N({moments_:cq});function lq(r,e,t,o){let n=v(e,\"data\",\"multiRNNCell\"),s=ni(t,\"c\",\"multiRNNCell\"),a=ni(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?W(n,[1,-1]):n},u={numSamples:e,seed:t,normalized:o},c=T.runKernel(jn,p,u);return a===1?W(c,[c.size]):c}var U2=N({multinomial_:mq});function dq(r,e){let t=v(r,\"a\",\"notEqual\",\"string_or_numeric\"),o=v(e,\"b\",\"notEqual\",\"string_or_numeric\");[t,o]=Oe(t,o),rt(t.shape,o.shape);let n={a:t,b:o};return T.runKernel(Yn,n)}var Fd=N({notEqual_:dq});function fq(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(Jn,a,i)}var El=N({oneHot_:fq});function hq(r){let t={x:v(r,\"x\",\"onesLike\")};return T.runKernel(ca,t)}var G2=N({onesLike_:hq});function gq(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=W(t,[-1,1]),s=W(o,[1,-1]);return Ze(n,s)}var H2=N({outerProduct_:gq});function xq(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(es,s,n)}var Aa=N({pad_:xq});function yq(r,e,t=0){return E(e.length===2,()=>\"Invalid number of paddings. Must be length of 2.\"),Aa(r,[e],t)}var K2=N({pad1d_:yq});function bq(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.\"),Aa(r,e,t)}var q2=N({pad2d_:bq});function Cq(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.\"),Aa(r,e,t)}var j2=N({pad3d_:Cq});function wq(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.\"),Aa(r,e,t)}var X2=N({pad4d_:wq});function Sq(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(ga,n,s)}var Pd=N({spaceToBatchND_:Sq});function Iq(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=W(i,[1,i.shape[0],i.shape[1],i.shape[2]])),E(gr(s,n),()=>`Error in pool: Either strides or dilations must be 1. Got strides ${s} and dilations '${n}'`);let c=Lw(p.shape,e,s,n,o),l=[c.dilationHeight,c.dilationWidth],m;o===\"same\"?m=kq([c.filterHeight,c.filterWidth],l):m=[[0,0],[0,0]];let d=l[0]===1&&l[1]===1,[f,h]=vq([c.inHeight,c.inWidth],l,m),g=d?o:\"valid\",x=d?p:Pd(p,l,f),C=(t===\"avg\"?()=>dd(x,e,s,g,a):()=>Dd(x,e,s,g,a))(),S=d?C:fd(C,l,h);return u?W(S,[S.shape[1],S.shape[2],S.shape[3]]):S}function vq(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 kq(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 Y2=N({pool_:Iq});function Nq(r,e){let t=v(r,\"x\",\"prelu\"),o=v(e,\"alpha\",\"prelu\"),n={x:t,alpha:o};return T.runKernel(rs,n)}var Od=N({prelu_:Nq});function Tq(r,e=null,t=!1){let o=v(r,\"x\",\"prod\");o.dtype===\"bool\"&&(o=Ue(o,\"int32\"));let n={x:o},s={axis:e,keepDims:t};return T.runKernel(os,n,s)}var Q2=N({prod_:Tq});function _q(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(Hp,i,p);return{outputNestedSplits:u.slice(0,u.length-1),outputDenseValues:u[u.length-1]}}var Z2=N({raggedGather_:_q});function Eq(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(Kp,a);return{rtNestedSplits:i[0],rtDenseValues:i[1]}}var J2=N({raggedRange_:Eq});function $q(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(qp,u,c)}var e1=N({raggedTensorToTensor_:$q});function Rq(r,e,t){Ct(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;sy1,createVideoElement:()=>Gq,encodeStrings:()=>C1,expectArrayBuffersEqual:()=>Uq,expectArraysClose:()=>Bq,expectArraysEqual:()=>Vq,expectNumbersClose:()=>b1,expectPromiseToFail:()=>zq,expectValuesInRange:()=>Wq,play:()=>Hq,testEpsilon:()=>Ld});var Lq=.001,y1=.1;function Bq(r,e,t){return t==null&&(t=Ld()),Xw(r,e,(o,n)=>Yw(o,n,t))}function Ld(){return T.backend.floatPrecision()===32?Lq:y1}function Xw(r,e,t){let o=!0;if((Pt(r)||Pt(e))&&(o=!1),Pt(r)&&Pt(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=sr(r),i=sr(e);if(!br(a,i))throw new Error(`Arrays have different shapes. Actual: [${a}]. Expected: [${i}]`)}let n=Pt(r)?r:Fs(r),s=Pt(e)?e:Fs(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 Vq(r,e){let t=typeof e==\"string\"||typeof e==\"number\"||typeof e==\"boolean\"?[e]:e;return zo(r)||zo(r[0])||zo(e)||zo(e[0])?Xw(r,t,(o,n)=>o==n):Xw(r,e,(o,n)=>Yw(o,n,0))}function b1(r,e,t){if(t==null&&(t=Ld()),!Yw(r,e,t))throw new Error(`Numbers differ: actual === ${r}, expected === ${e}`);typeof expect!=\"undefined\"&&expect().nothing()}function Yw(r,e,t){return!isFinite(r)&&!isFinite(e)?!0:!(isNaN(r)||isNaN(e)||Math.abs(r-e)>t)}function Wq(r,e,t){for(let o=0;ot)throw new Error(`Value out of range:${r[o]} low: ${e}, high: ${t}`)}function Uq(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 Hq(r){await r.play(),\"requestVideoFrameCallback\"in r&&await new Promise(e=>{r.requestVideoFrameCallback(e)})}var qu=class{constructor(e,t,o,n,s){this.mean=e,this.stdDev=t,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=Vd.alea(a.toString())}nextValue(){if(!isNaN(this.nextVal)){let n=this.nextVal;return this.nextVal=NaN,n}let e,t,o=!1;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,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}},Bd=class{constructor(e,t,o,n){this.alpha=e,this.beta=1/t,this.dtype=o;let s=n||Math.random();this.randu=Vd.alea(s.toString()),this.randn=new qu(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=Vd.alea(n)}convertValue(e){return this.canReturnFloat()?e:Math.round(e)}nextValue(){return this.convertValue(this.min+this.range*this.random())}};function Kq(r,e,t=1,o=\"float32\",n){if(Ct(r),t==null&&(t=1),o==null&&(o=\"float32\"),o!==\"float32\"&&o!==\"int32\")throw new Error(`Unsupported data type ${o}`);let s=new Bd(e,t,o,n),a=me(r,o);for(let i=0;i`Error in reverse1D: x must be rank 1 but got rank ${e.rank}.`),mo(e,0)}var N1=N({reverse1d_:r6});function o6(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}.`),mo(t,e)}var T1=N({reverse2d_:o6});function n6(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}.`),mo(t,e)}var _1=N({reverse3d_:n6});function s6(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}.`),mo(t,e)}var E1=N({reverse4d_:s6});function a6(r){let t={x:v(r,\"x\",\"round\")};return T.runKernel(cs,t)}var Gd=N({round_:a6});function i6(r){let t={x:v(r,\"x\",\"rsqrt\",\"float32\")};return T.runKernel(ls,t)}var $1=N({rsqrt_:i6});function u6(r){let t={x:v(r,\"x\",\"selu\")};return T.runKernel(hs,t)}var R1=N({selu_:u6});function p6(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=W(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=sc(c,p,o,n,a,s),g=au(f,u,1,\"valid\",a);return l?W(g,[g.shape[1],g.shape[2],g.shape[3]]):g}var D1=N({separableConv2d_:p6});async function c6(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`),Xe(o,[e],[t])}var M1=N({slice1d_:f6});function h6(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`),Xe(o,e,t)}var L1=N({slice2d_:h6});function g6(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`),Xe(o,e,t)}var B1=N({slice3d_:g6});function x6(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`),Xe(o,e,t)}var z1=N({slice4d_:x6});function y6(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(Is,o,n)}var V1=N({softmax_:y6});function b6(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(zi,e)}var uc=N({fft_:b6});function C6(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(Vi,e)}var ju=N({ifft_:C6});function w6(r){let e=r.shape[r.shape.length-1],t=r.size/e,o;if(e<=2){let n=W(r,[t,e]);o=ju(n)}else{let n=[t,2*(e-1)],s=W(ci(r),[t,e]),a=W(pu(r),[t,e]),i=mo(Xe(s,[0,1],[t,e-2]),1),p=se(mo(Xe(a,[0,1],[t,e-2]),1),ke(-1)),u=yt([s,i],1),c=yt([a,p],1),l=W(Er(u,c),[n[0],n[1]]);o=ju(l)}if(o=ci(o),r.rank===3&&r.shape[0]!==0){let n=o,s=r.shape[0];o=W(o,[s,o.shape[0]/s,o.shape[1]]),n.dispose()}return o}var Hd=N({irfft_:w6});function S6(r,e,t=0){let n={x:v(r,\"x\",\"split\")},s={numOrSizeSplits:e,axis:t};return T.runKernel(xa,n,s)}var li=N({split_:S6});function I6(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=Xe(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=yt([r,Gr(f)],r.shape.length-1),t=e}else n=r;let s=Gt(n),a=W(Er(n,s),[o,t]),i=uc(a),p=Math.floor(t/2)+1,u=ci(i),c=pu(i),l=li(u,[p,t-p],u.shape.length-1),m=li(c,[p,t-p],c.shape.length-1),d=n.shape.slice();return d[n.shape.length-1]=p,W(Er(l[0],m[0]),d)}var pc=N({rfft_:I6});function v6(r,e){let t=v(r,\"a\",\"squaredDifference\"),o=v(e,\"b\",\"squaredDifference\");[t,o]=Oe(t,o),rt(t.shape,o.shape);let n={a:t,b:o},s={};return T.runKernel(ks,n,s)}var Kd=N({squaredDifference_:v6});function k6(r,e){let t=v(r,\"x\",\"squeeze\",\"string_or_numeric\");return W(t,JC(t.shape,e).newShape)}var cc=N({squeeze_:k6});function N6(r,e=0){let t=ni(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(la,o,n)}var vr=N({stack_:N6});function T6(r,e=0){let o={x:v(r,\"x\",\"step\")},n={alpha:e};return T.runKernel(wo,o,n)}var qd=N({step_:T6});function _6(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(Ns,c,l)}var W1=N({stridedSlice_:_6});function E6(r){let t={x:v(r,\"x\",\"tan\",\"float32\")};return T.runKernel(_s,t)}var U1=N({tan_:E6});function Jt(r,e){io(r);let t=sr(r,e);if(t.length!==1)throw new Error(\"tensor1d() requires values to be a flat/TypedArray\");return wr(r,null,t,e)}function mu(r,e,t){if(io(r),e!=null&&e.length!==2)throw new Error(\"tensor2d() requires shape to have two numbers\");let o=sr(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 wr(r,e,o,t)}function jd(r,e,t){if(io(r),e!=null&&e.length!==3)throw new Error(\"tensor3d() requires shape to have three numbers\");let o=sr(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 wr(r,e,o,t)}function G1(r,e,t){if(io(r),e!=null&&e.length!==4)throw new Error(\"tensor4d() requires shape to have four numbers\");let o=sr(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 wr(r,e,o,t)}function H1(r,e,t){if(io(r),e!=null&&e.length!==5)throw new Error(\"tensor5d() requires shape to have five numbers\");let o=sr(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 wr(r,e,o,t)}function K1(r,e,t){if(io(r),e!=null&&e.length!==6)throw new Error(\"tensor6d() requires shape to have six numbers\");let o=sr(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,wr(r,e,o,t)}var du={};qe(du,{calculateShapes:()=>q1,validateInput:()=>lc,validateUpdateShape:()=>Qw});function Qw(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;l= 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($s,s,a);return{values:i,indices:p}}var X1=N({topk_:R6});function D6(r,e=0,t=1,o,n){if(Ct(r),o!=null&&o===\"bool\")throw new Error(\"Unsupported data type $ { dtype }\");let s=new qu(e,t,o,!0,n),a=me(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(Yi,o,n);return{values:s,indices:a}}var Q1=N({unique_:A6});function F6(r,e,t){let o=v(r,\"x\",\"unsortedSegmentSum\"),n=v(e,\"segmentIds\",\"unsortedSegmentSum\",\"int32\");E(Ka(t),()=>\"numSegments must be of dtype int\");let s={x:o,segmentIds:n},a={numSegments:t};return T.runKernel(Qi,s,a)}var Z1=N({unsortedSegmentSum_:F6});function P6(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(wa,o,n)}var fo=N({unstack_:P6});function J1(r,e){return _l(r,e,\"right\")}function eN(r,e=!0,t,o){return T.makeVariable(r,e,t,o)}function Xd(r,e){let t=[];for(let s=0;s0,()=>\"mask cannot be scalar\"),xt(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;hi).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\"?De(()=>{let a=ci(o),i=pu(o);return a=T.runKernel(co,{x:a},s),i=T.runKernel(co,{x:i},s),t&&(i=pr(i)),Er(a,i)}):T.runKernel(co,n,s)}var mc=N({transpose_:B6});function z6(r,e,t,o,n=!0){let s=v(r,\"v\",\"movingAverage\"),a=v(e,\"x\",\"movingAverage\"),i=v(t,\"decay\",\"movingAverage\");ww(s,a),E(br(s.shape,a.shape),()=>\"Shape mismatch in v and x\");let p=ke(1),u=Te(p,i),c=se(Te(a,s),u);if(n){E(o!=null,()=>\"When using zeroDebias: true, step is required.\");let l=v(o,\"step\",\"movingAverage\");c=je(c,Te(p,ui(i,l)))}return Ce(s,c)}var V6=N({movingAverage_:z6});function W6(r,e,t){Ct(t);let o=v(r,\"indices\",\"scatterND\",\"int32\"),n=v(e,\"updates\",\"scatterND\");lc(n,o,t);let s={indices:o,updates:n},a={shape:t};return T.runKernel(ms,s,a)}var U6=N({scatterND_:W6});function tN(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 H6(r,e,t,o=0){Ct(t);let n=v(r,\"sparseIndices\",\"sparseToDense\",\"int32\"),s=v(e,\"sparseValues\",\"sparseToDense\",\"string_or_numeric\"),a=v(o,\"defaultValue\",\"sparseToDense\",s.dtype);tN(n,s,t,a);let i={sparseIndices:n,sparseValues:s,defaultValue:a},p={outputShape:t};return T.runKernel(vs,i,p)}var K6=N({sparseToDense_:H6});function q6(r,e){let t=v(e,\"indices\",\"gatherND\",\"int32\"),n={params:v(r,\"x\",\"gatherND\",\"string_or_numeric\"),indices:t};return T.runKernel(vn,n)}var j6=N({gatherND_:q6});function rN(r,e){if(e==null)return r.shape.slice();if(br(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 mt?n.clone():n;let s=rN(n,t),a=1-e,i=je(wd(Ce(ic(s,0,1,\"float32\",o),a)),a);return se(n,i)}var Y6=N({dropout_:X6});function Zw(r){return Math.floor(Math.pow(2,Math.ceil(Math.log(r)/Math.log(2))))}function $l(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}`),xt(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=ew(\"bool\",p);for(let l=0;lg.value-h.value),c[l]=0;for(let h=0;hnN,depthwiseConv2d:()=>iN,matMul:()=>uN});function J6(r,e,t,o,n,s=\"NHWC\",a){let i=r;r.rank===3&&(i=W(r,[1,r.shape[0],r.shape[1],r.shape[2]]));let p=e;p.rank===3&&(p=W(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]}).`),Lt(\"conv2dDerFilter\",n,a);let l={x:i,dy:p},m={strides:o,pad:n,dataFormat:s,dimRoundingMode:a,filterShape:t};return T.runKernel(Fi,l,m)}var oN=N({conv2DBackpropFilter_:J6});function Xu(r,e,t){if(t==null||t===\"linear\")return r;if(t===\"relu\")return se(r,qd(e));throw new Error(`Cannot compute gradient for fused activation ${t}.`)}function Yu(r,e){let t=e,o=xd(r.shape,e.shape);return o.length>0&&(t=ot(t,o)),W(t,r.shape)}function Qu(r,e,t,o){if(e===\"linear\")return r;if(e===\"relu\")return lu(r);if(e===\"elu\")return bd(r);if(e===\"relu6\")return Ud(r);if(e===\"prelu\")return Od(r,t);if(e===\"leakyrelu\")return vd(r,o);if(e===\"sigmoid\")return Ea(r);throw new Error(`Unknown fused activation ${e}.`)}var Zu=(r,e)=>!(r>0)||e===\"linear\";function ej({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\",Zu(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 _=au(r,e,t,o,n,s,a);return i!=null&&(_=Ce(_,i)),Qu(_,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=W(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}.`),Lt(\"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(gr(t,s),()=>`Error in conv2D: Either strides or dilations must be 1. Got strides ${t} and dilations '${s}'`);let g=zu(d.shape,m.shape,t,s,o,a),x;i!=null&&(x=v(i,\"bias\",\"fused conv2d\"),[x]=Oe(x,l),n===\"NHWC\"?rt(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{rt(_,g.outShape)}catch($){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,D,P,O]=$,M=Xu(_,P,p);E(Bu(s),()=>`Error in gradient of fused conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${s}'`);let L=gd(D.shape,M,R,t,o),B=oN(D,M,R.shape,t,o),z=[L,B];if(O!=null){let U=Yu(O,M);z.push(U)}return z},S={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?Ir(($,R,D)=>{let P=T.runKernel(Io,S,k);return D([R,$,P]),f&&(P=W(P,[P.shape[1],P.shape[2],P.shape[3]])),{value:P,gradFunc:C}})(d,m):Ir(($,R,D,P)=>{let O=T.runKernel(Io,S,k);return P([R,$,O,D]),f&&(O=W(O,[O.shape[1],O.shape[2],O.shape[3]])),{value:O,gradFunc:C}})(d,m,x)}var nN=N({fusedConv2d_:ej});function tj(r,e,t,o,n,s=[1,1],a){let i=r;r.rank===3&&(i=W(r,[1,r.shape[0],r.shape[1],r.shape[2]]));let p=e;p.rank===3&&(p=W(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(Pi,u,c)}var sN=N({depthwiseConv2dNativeBackpropFilter_:tj});function rj(r,e,t,o,n,s=[1,1],a){let i=e,p=!1;e.rank===3&&(p=!0,i=W(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(Oi,u,c);return p?W(l,[l.shape[1],l.shape[2],l.shape[3]]):l}var aN=N({depthwiseConv2dNativeBackpropInput_:rj});function oj({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(Zu(T.state.gradientDepth,p)===!1){let k=sc(r,e,t,o,n,s,a);return i!=null&&(k=Ce(k,i)),Qu(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=W(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(gr(t,s),()=>`Error in fused depthwiseConv2d: Either strides or dilations must be 1. Got strides ${t} and dilations '${s}'`),Lt(\"fused depthwiseConv2d\",o,a);let h=zu(d.shape,m.shape,t,s,o,a,!0),g;i!=null&&(g=v(i,\"bias\",\"fused conv2d\"),[g]=Oe(g,l),rt(h.outShape,g.shape));let x;u!=null&&(x=v(u,\"prelu weights\",\"fused depthwiseConv2d\"));let b=(k,_)=>{E(Bu(s),()=>`Error in gradient of fused depthwiseConv2d: dilation rates greater than 1 are not yet supported. Got dilations '${s}'`);let[$,R,D,P]=_,O=Xu(k,D,p),M=aN(R.shape,O,$,t,o,s,a),L=sN(R,O,$.shape,t,o,s,a);if(P!=null){let B=Yu(g,O);return[M,L,B]}return[M,L]},C={x:d,filter:m,bias:g,preluActivationWeights:x},S={strides:t,pad:o,dataFormat:n,dilations:s,dimRoundingMode:a,activation:p,leakyreluAlpha:c};return i==null?Ir((_,$,R)=>{let D=T.runKernel(vo,C,S);return R([$,_,D]),f&&(D=W(D,[D.shape[1],D.shape[2],D.shape[3]])),{value:D,gradFunc:b}})(d,m):Ir((_,$,R,D)=>{let P=T.runKernel(vo,C,S);return D([$,_,P,R]),f&&(P=W(P,[P.shape[1],P.shape[2],P.shape[3]])),{value:P,gradFunc:b}})(d,m,g)}var iN=N({fusedDepthwiseConv2d_:oj});function nj({a:r,b:e,transposeA:t=!1,transposeB:o=!1,bias:n,activation:s=\"linear\",preluActivationWeights:a,leakyreluAlpha:i=.2}){if(Zu(T.state.gradientDepth,s)===!1){let O=Ze(r,e,t,o);return n!=null&&(O=Ce(O,n)),Qu(O,s,a,i)}let p=v(r,\"a\",\"fused matMul\"),u=v(e,\"b\",\"fused matMul\");[p,u]=Oe(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=rt(p.shape.slice(0,-2),u.shape.slice(0,-2)).concat([m,d]),S=t?W(p,[g,c,m]):W(p,[g,m,c]),k=o?W(u,[x,d,l]):W(u,[x,l,d]),_;n!=null&&(_=v(n,\"bias\",\"fused matMul\"),[_]=Oe(_,p),rt(C,_.shape));let $;a!=null&&($=v(a,\"prelu weights\",\"fused matMul\"));let R=(O,M)=>{let[L,B,z,U]=M,j=Xu(W(O,z.shape),z,s),q,Y;if(!t&&!o?(q=Ze(j,B,!1,!0),Y=Ze(L,j,!0,!1)):!t&&o?(q=Ze(j,B,!1,!1),Y=Ze(j,L,!0,!1)):t&&!o?(q=Ze(B,j,!1,!0),Y=Ze(L,j,!1,!1)):(q=Ze(B,j,!0,!0),Y=Ze(j,L,!0,!0)),n!=null){let J=Yu(U,j);return[q,Y,J]}else return[q,Y]},D={a:S,b:k,bias:_,preluActivationWeights:$},P={transposeA:t,transposeB:o,activation:s,leakyreluAlpha:i};return n==null?Ir((M,L,B)=>{let z=T.runKernel(So,D,P);return B([M,L,z]),{value:W(z,C),gradFunc:R}})(S,k):Ir((M,L,B,z)=>{let U=T.runKernel(So,D,P);return z([M,L,U,B]),{value:W(U,C),gradFunc:R}})(S,k,_)}var uN=N({fusedMatMul_:nj});function sj(r){return $l(r,.54,.46)}var pN=N({hammingWindow_:sj});function aj(r){return $l(r,.5,.5)}var Qd=N({hannWindow_:aj});function ij(r,e,t,o=!1,n=0){let s=0,a=[];for(;s+e<=r.size;)a.push(Xe(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(cn,c,l)}var lN=N({cropAndResize_:pj});function cj(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(Cn,t,{})}var mN=N({flipLeftRight_:cj});function lj(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,uu(e,n)}var dN=N({grayscaleToRGB_:lj});function mj(r){let e=v(r,\"image\",\"RGBToGrayscale\"),t=e.rank-1,o=e.shape[t];E(e.rank>=2,()=>`Error in RGBToGrayscale: images must be at least rank 2, but got rank ${e.rank}.`),E(o===3,()=>`Error in RGBToGrayscale: last dimension of an RGB image should be size 3, but got size ${o}.`);let n=e.dtype,s=Ue(e,\"float32\"),a=Jt([.2989,.587,.114]),i;switch(e.rank){case 2:i=iu(\"ij,j->i\",s,a);break;case 3:i=iu(\"ijk,k->ij\",s,a);break;case 4:i=iu(\"ijkl,l->ijk\",s,a);break;case 5:i=iu(\"ijklm,m->ijkl\",s,a);break;case 6:i=iu(\"ijklmn,n->ijklm\",s,a);break;default:throw new Error(\"Not a valid tensor rank.\")}return i=Ms(i,-1),Ue(i,n)}var fN=N({rgbToGrayscale_:mj});function dj(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(Ds,s,a)}var hN=N({rotateWithOffset_:dj});function Eo(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 fj(r,e,t,o=.5,n=Number.NEGATIVE_INFINITY){let s=v(r,\"boxes\",\"nonMaxSuppression\",\"float32\"),a=v(e,\"scores\",\"nonMaxSuppression\",\"float32\"),i=Eo(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(Qn,{boxes:s,scores:a},p)}var gN=N({nonMaxSuppression_:fj});function xN(r,e,t){let o=hj(r,e,t),n=o<0?-(o+1):o;r.splice(n,0,e)}function hj(r,e,t){return xj(r,e,t||gj)}function gj(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 Jd(r,e,t,o,n){return eS(r,e,t,o,n,0)}function ef(r,e,t,o,n,s){return eS(r,e,t,o,n,0,!1,s,!0)}function tf(r,e,t,o,n,s){return eS(r,e,t,o,n,s,!0)}function eS(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(yN);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 _=yj(r,b,l[k]);if(_>=o){S=!0;break}if(g.score=g.score*bj(o,c,_),g.score<=n)break}g.suppressBeginIndex=l.length,S||(g.score===x?(l.push(b),m.push(g.score)):g.score>n&&xN(u,g,yN))}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 yj(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 bj(r,e,t){let o=Math.exp(e*t*t);return t<=r?o:0}function yN(r,e){return r.score-e.score||r.score===e.score&&e.boxIndex-r.boxIndex}async function Cj(r,e,t,o=.5,n=Number.NEGATIVE_INFINITY){let s=v(r,\"boxes\",\"nonMaxSuppressionAsync\"),a=v(e,\"scores\",\"nonMaxSuppressionAsync\"),i=Eo(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}=Jd(u,c,t,o,n);return s!==r&&s.dispose(),a!==e&&a.dispose(),Jt(l,\"int32\")}var bN=Cj;function wj(r,e,t,o=.5,n=Number.NEGATIVE_INFINITY,s=0){let a=v(r,\"boxes\",\"nonMaxSuppression\"),i=v(e,\"scores\",\"nonMaxSuppression\"),p=Eo(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(Zn,u,c);return{selectedIndices:l[0],selectedScores:l[1]}}var CN=N({nonMaxSuppressionWithScore_:wj});async function Sj(r,e,t,o=.5,n=Number.NEGATIVE_INFINITY,s=0){let a=v(r,\"boxes\",\"nonMaxSuppressionAsync\"),i=v(e,\"scores\",\"nonMaxSuppressionAsync\"),p=Eo(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}=tf(c,l,t,o,n,s);return a!==r&&a.dispose(),i!==e&&i.dispose(),{selectedIndices:Jt(m,\"int32\"),selectedScores:Jt(d)}}var wN=Sj;function Ij(r,e,t,o=.5,n=Number.NEGATIVE_INFINITY,s=!1){let a=v(r,\"boxes\",\"nonMaxSuppression\"),i=v(e,\"scores\",\"nonMaxSuppression\"),p=Eo(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(Qa,m,d);return{selectedIndices:f[0],validOutputs:f[1]}}var SN=N({nonMaxSuppressionPadded_:Ij});async function vj(r,e,t,o=.5,n=Number.NEGATIVE_INFINITY,s=!1){let a=v(r,\"boxes\",\"nonMaxSuppressionAsync\"),i=v(e,\"scores\",\"nonMaxSuppressionAsync\"),p=Eo(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}=ef(m,d,u,c,l,s);return a!==r&&a.dispose(),i!==e&&i.dispose(),{selectedIndices:Jt(f,\"int32\"),validOutputs:ke(h,\"int32\")}}var IN=vj;function kj(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=W(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(is,i,p);return a?W(u,[u.shape[1],u.shape[2],u.shape[3]]):u}var vN=N({resizeBilinear_:kj});function Nj(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=W(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(as,i,p);return a?W(u,[u.shape[1],u.shape[2],u.shape[3]]):u}var kN=N({resizeNearestNeighbor_:Nj});function Tj(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=se(Jt([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]=li(n,[1,1,1],-1);let g=se(c,s),x=se(l,a),b=se(m,i);d=Ce(Ce(g,x),b)}else d=r;if(e===\"otsu\"){let g=hd(Ue(Gd(d),\"int32\"),ar([]),256);u=_j(g,p)}let f=t?ac(d,u):Wu(d,u);return Ue(se(f,255),\"int32\")}function _j(r,e){let t=Jt([-1]),o=Jt([0]),n=Jt([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(Rs,p,u)}var TN=N({transform_:Ej});function $j(r,e,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),i,p;typeof e==\"number\"?(E(e%1===0,()=>`bandPart(): numLower must be an integer, got ${e}.`),E(e<=s,()=>`bandPart(): numLower (${e}) must not be greater than the number of rows (${s}).`),i=v(e<0?s:e,\"numLower\",\"bandPart\")):(E(e.dtype===\"int32\",()=>\"bandPart(): numLower's dtype must be an int32.\"),i=lo(Tl(e,0),s,Hu(e,s))),typeof t==\"number\"?(E(t%1===0,()=>`bandPart(): numUpper must be an integer, got ${t}.`),E(t<=a,()=>`bandPart(): numUpper (${t}) must not be greater than the number of columns (${a}).`),p=v(t<0?a:t,\"numUpper\",\"bandPart\")):(E(t.dtype===\"int32\",()=>\"bandPart(): numUpper's dtype must be an int32.\"),p=lo(Tl(t,0),a,Hu(t,a)));let u=W(cu(0,s,1,\"int32\"),[-1,1]),c=cu(0,a,1,\"int32\"),l=Te(u,c),m=Uu(ac(l,i),Id(l,pr(p))),d=Gr([s,a],o.dtype);return W(vr(fo(W(o,[-1,s,a])).map(f=>lo(m,f,d))),n)}var _N=N({bandPart_:$j});function Rj(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=li(r,r.shape[0],0).map(n=>cc(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 $N(r,e);{let t=r.shape.slice(0,r.shape.length-2).reduce((p,u)=>p*u),o=fo(W(r,[t,r.shape[r.shape.length-2],r.shape[r.shape.length-1]]),0),n=[],s=[];o.forEach(p=>{let[u,c]=$N(p,e);n.push(u),s.push(c)});let a=W(vr(n,0),r.shape),i=W(vr(s,0),r.shape);return[a,i]}}function $N(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=Cd(t),s=Ur(r),a=mu([[1]],[1,1]),i=Ur(a),p=t>=o?o:t;for(let u=0;u{let d=Xe(s,[u,u],[t-u,1]),f=Vu(d),h=Xe(s,[u,u],[1,1]),g=lo(Wu(h,0),mu([[-1]]),mu([[1]])),x=Te(h,se(g,f)),b=je(d,x);b.shape[0]===1?i=Ur(a):i=yt([a,Xe(b,[1,0],[b.shape[0]-1,b.shape[1]])],0);let C=pr(je(Ze(g,x),f)),S=Xe(s,[u,0],[t-u,o]),k=se(C,i),_=mc(i);if(u===0)s=Te(S,Ze(k,Ze(_,S)));else{let D=Te(S,Ze(k,Ze(_,S)));s=yt([Xe(s,[0,0],[u,o]),D],0)}let $=mc(k),R=Xe(n,[0,u],[t,n.shape[1]-u]);if(u===0)n=Te(R,Ze(Ze(R,i),$));else{let D=Te(R,Ze(Ze(R,i),$));n=yt([Xe(n,[0,0],[t,u]),D],1)}return[i,s,n]}),Ot([c,l,m])}return!e&&t>o&&(n=Xe(n,[0,0],[t,o]),s=Xe(s,[0,0],[o,o])),[n,s]})}var RN=N({qr_:Dj});var $t;(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\"})($t||($t={}));function Aj(r,e,t=$t.SUM_BY_NONZERO_WEIGHTS){let o=v(r,\"losses\",\"computeWeightedLoss\"),n=null;e!=null&&(n=v(e,\"weights\",\"computeWeightedLoss\"));let s=n==null?o:se(o,n);if(t===$t.NONE)return s;if(t===$t.SUM)return ot(s);if(t===$t.MEAN){if(n==null)return Gu(s);{let a=o.size/n.size,i=je(ot(s),ot(n));return a>1?je(i,ke(a)):i}}if(t===$t.SUM_BY_NONZERO_WEIGHTS){if(n==null)return je(ot(s),ke(o.size));{let a=se(n,Da(o.shape)),i=Ue(ot(Fd(a,ke(0))),\"float32\");return je(ot(s),i)}}throw Error(`Unknown reduction: ${t}`)}var cr=N({computeWeightedLoss_:Aj});function Fj(r,e,t,o=$t.SUM_BY_NONZERO_WEIGHTS){let n=v(r,\"labels\",\"absoluteDifference\"),s=v(e,\"predictions\",\"absoluteDifference\"),a=null;t!=null&&(a=v(t,\"weights\",\"absoluteDifference\")),xt(n.shape,s.shape,\"Error in absoluteDifference: \");let i=Qt(Te(n,s));return cr(i,a,o)}var DN=N({absoluteDifference_:Fj});function Pj(r,e,t,o,n=$t.SUM_BY_NONZERO_WEIGHTS){let s=v(r,\"labels\",\"cosineDistance\"),a=v(e,\"predictions\",\"cosineDistance\"),i=null;o!=null&&(i=v(o,\"weights\",\"cosineDistance\")),xt(s.shape,a.shape,\"Error in cosineDistance: \");let p=ke(1),u=Te(p,ot(se(s,a),t,!0));return cr(u,i,n)}var AN=N({cosineDistance_:Pj});function Oj(r,e,t,o=$t.SUM_BY_NONZERO_WEIGHTS){let n=v(r,\"labels\",\"hingeLoss\"),s=v(e,\"predictions\",\"hingeLoss\"),a=null;t!=null&&(a=v(t,\"weights\",\"hingeLoss\")),xt(n.shape,s.shape,\"Error in hingeLoss: \");let i=ke(1);n=Te(se(ke(2),n),i);let p=lu(Te(i,se(n,s)));return cr(p,a,o)}var FN=N({hingeLoss_:Oj});function Mj(r,e,t,o=1,n=$t.SUM_BY_NONZERO_WEIGHTS){let s=v(r,\"labels\",\"huberLoss\"),a=v(e,\"predictions\",\"huberLoss\"),i=null;t!=null&&(i=v(t,\"weights\",\"huberLoss\")),xt(s.shape,a.shape,\"Error in huberLoss: \");let p=ke(o),u=Qt(Te(a,s)),c=Hu(u,p),l=Te(u,c),m=Ce(se(ke(.5),Zt(c)),se(p,l));return cr(m,i,n)}var PN=N({huberLoss_:Mj});function Lj(r,e,t,o=1e-7,n=$t.SUM_BY_NONZERO_WEIGHTS){let s=v(r,\"labels\",\"logLoss\"),a=v(e,\"predictions\",\"logLoss\"),i=null;t!=null&&(i=v(t,\"weights\",\"logLoss\")),xt(s.shape,a.shape,\"Error in logLoss: \");let p=ke(1),u=ke(o),c=pr(se(s,pi(Ce(a,u)))),l=se(Te(p,s),pi(Ce(Te(p,a),u))),m=Te(c,l);return cr(m,i,n)}var ON=N({logLoss_:Lj});function Bj(r,e,t,o=$t.SUM_BY_NONZERO_WEIGHTS){let n=v(r,\"labels\",\"meanSquaredError\"),s=v(e,\"predictions\",\"meanSquaredError\"),a=null;t!=null&&(a=v(t,\"weights\",\"meanSquaredError\")),xt(n.shape,s.shape,\"Error in meanSquaredError: \");let i=Kd(n,s);return cr(i,a,o)}var MN=N({meanSquaredError_:Bj});function zj(r,e){let t=v(r,\"labels\",\"sigmoidCrossEntropyWithLogits\"),o=v(e,\"logits\",\"sigmoidCrossEntropyWithLogits\");xt(t.shape,o.shape,\"Error in sigmoidCrossEntropyWithLogits: \");let n=lu(o),s=se(o,t),a=kd(_o(pr(Qt(o))));return Ce(Te(n,s),a)}function Vj(r,e,t,o=0,n=$t.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\")),xt(s.shape,a.shape,\"Error in sigmoidCrossEntropy: \"),o>0){let u=ke(o),c=ke(1),l=ke(.5);s=Ce(se(s,Te(c,u)),se(l,u))}let p=zj(s,a);return cr(p,i,n)}var LN=N({sigmoidCrossEntropy_:Vj});function Wj(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 Ir((n,s,a)=>{let p=_d(s,[t],!0),u=Te(Ue(s,\"float32\"),p);a([n,u]);let c=pr(se(u,n));return{value:ot(c,[t]),gradFunc:(d,f)=>{let[h,g]=f,x=ii(d.shape,[t]);return[se(W(d,x),Te(Ue(h,\"float32\"),_o(g))),se(W(d,x),Te(_o(g),Ue(h,\"float32\")))]}}})(r,e)}function Uj(r,e,t,o=0,n=$t.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\")),xt(s.shape,a.shape,\"Error in softmaxCrossEntropy: \"),o>0){let u=ke(o),c=ke(1),l=ke(s.shape[1]);s=Ce(se(s,Te(c,u)),je(u,l))}let p=Wj(s,a);return cr(p,i,n)}var BN=N({softmaxCrossEntropy_:Uj});function Gj(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(Ki,p);return{outputIndices:u[0],outputValues:u[1],emptyRowIndicator:u[2],reverseIndexMap:u[3]}}var zN=N({sparseFillEmptyRows_:Gj});function Hj(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(ei,a);return{outputIndices:i[0],outputShape:i[1]}}var VN=N({sparseReshape_:Hj});function Kj(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(ya,a)}var WN=N({sparseSegmentMean_:Kj});function qj(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(ba,a)}var UN=N({sparseSegmentSum_:qj});function jj(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(Ca,l,c);return{nGrams:m[0],nGramsSplits:m[1]}}var GN=N({stringNGrams_:jj});function Xj(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(ji,a,s);return{indices:i[0],values:i[1],shape:i[2]}}var HN=N({stringSplit_:Xj});function Yj(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(Xi,n,o)}var KN=N({stringToHashBucketFast_:Yj});function Qj(r,e,t,o=!0){let n=v(r,\"input\",\"staticRegexReplace\",\"string\"),s={pattern:e,rewrite:t,replaceGlobal:o};return T.runKernel(Ru,{x:n},s)}var qN=N({staticRegexReplace_:Qj});var Zj={fft:uc,ifft:ju,rfft:pc,irfft:Hd},Jj={hammingWindow:pN,hannWindow:Qd,frame:Zd,stft:cN},eX={flipLeftRight:mN,grayscaleToRGB:dN,resizeNearestNeighbor:kN,resizeBilinear:vN,rgbToGrayscale:fN,rotateWithOffset:hN,cropAndResize:lN,nonMaxSuppression:gN,nonMaxSuppressionAsync:bN,nonMaxSuppressionWithScore:CN,nonMaxSuppressionWithScoreAsync:wN,nonMaxSuppressionPadded:SN,nonMaxSuppressionPaddedAsync:IN,threshold:NN,transform:TN},tX={bandPart:_N,gramSchmidt:EN,qr:RN},rX={absoluteDifference:DN,computeWeightedLoss:cr,cosineDistance:AN,hingeLoss:FN,huberLoss:PN,logLoss:ON,meanSquaredError:MN,sigmoidCrossEntropy:LN,softmaxCrossEntropy:BN},oX={sparseFillEmptyRows:zN,sparseReshape:VN,sparseSegmentMean:WN,sparseSegmentSum:UN},nX={stringNGrams:GN,stringSplit:HN,stringToHashBucketFast:KN,staticRegexReplace:qN};var jN={};qe(jN,{Serializable:()=>Rl,SerializationMap:()=>rf,getRegisteredName:()=>aX,registerClass:()=>rS});var sX=new Map,tS=new Map,Rl=class{getClassName(){return this.constructor.className}static fromConfig(e,t){return new e(t)}},rf=class r{constructor(){this.classNameMap={}}static getMap(){return r.instance==null&&(r.instance=new r),r.instance}static register(e){r.getMap().classNameMap[e.className]=[e,e.fromConfig]}};function rS(r,e,t){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.\"),typeof e==\"undefined\"&&(e=\"Custom\"),typeof t==\"undefined\"&&(t=r.className);let o=t,n=e+\">\"+o;return rf.register(r),sX.set(n,r),tS.set(r,n),r}function aX(r){return tS.has(r)?tS.get(r):r.className}var kr=class extends Rl{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 Ot(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 Vw(e,t)}dispose(){this.iterations_!=null&&Ot(this.iterations_)}async saveIterations(){return this.iterations_==null&&(this.iterations_=0),{name:\"iter\",tensor:ke(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(kr,Symbol.hasInstance,{value:r=>r.minimize!=null&&r.computeGradients!=null&&r.applyGradients!=null});var Ju=class extends kr{static get className(){return\"Adadelta\"}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:De(()=>Gt(s).variable(a))}),this.accumulatedUpdates[n]==null&&(this.accumulatedUpdates[n]={originalName:`${o}/accum_var`,variable:De(()=>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;De(()=>{let c=Ce(se(p,this.rho),se(Zt(i),1-this.rho)),l=se(je(Rr(Ce(u,this.epsilon)),Rr(Ce(p,this.epsilon))),i),m=Ce(se(u,this.rho),se(Zt(l),1-this.rho));p.assign(c),u.assign(m);let d=Ce(se(l,-this.learningRate),s);s.assign(d)})}),this.incrementIterations()}dispose(){this.accumulatedUpdates!=null&&(Ot(this.accumulatedGrads.map(e=>e.variable)),Ot(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)}};var ep=class extends kr{static get className(){return\"Adagrad\"}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:De(()=>$a(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;De(()=>{let p=Ce(i,Zt(a));i.assign(p);let u=Ce(se(je(a,Rr(Ce(p,T.backend.epsilon()))),-this.learningRate),s);s.assign(u)})}),this.incrementIterations()}dispose(){this.accumulatedGrads!=null&&Ot(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)}};var tp=class extends kr{static get className(){return\"Adam\"}constructor(e,t,o,n=null){super(),this.learningRate=e,this.beta1=t,this.beta2=o,this.epsilon=n,this.accumulatedFirstMoment=[],this.accumulatedSecondMoment=[],De(()=>{this.accBeta1=ke(t).variable(),this.accBeta2=ke(o).variable()}),n==null&&(this.epsilon=T.backend.epsilon())}applyGradients(e){let t=Array.isArray(e)?e.map(o=>o.name):Object.keys(e);De(()=>{let o=Te(1,this.accBeta1),n=Te(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:De(()=>Gt(i).variable(p))}),this.accumulatedSecondMoment[a]==null&&(this.accumulatedSecondMoment[a]={originalName:`${s}/v`,variable:De(()=>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=Ce(se(c,this.beta1),se(u,1-this.beta1)),d=Ce(se(l,this.beta2),se(Zt(u),1-this.beta2)),f=je(m,o),h=je(d,n);c.assign(m),l.assign(d);let g=Ce(se(je(f,Ce(Rr(h),this.epsilon)),-this.learningRate),i);i.assign(g)}),this.accBeta1.assign(se(this.accBeta1,this.beta1)),this.accBeta2.assign(se(this.accBeta2,this.beta2))}),this.incrementIterations()}dispose(){this.accBeta1.dispose(),this.accBeta2.dispose(),this.accumulatedFirstMoment!=null&&Ot(this.accumulatedFirstMoment.map(e=>e.variable)),this.accumulatedSecondMoment!=null&&Ot(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),De(()=>{this.accBeta1.assign(ui(this.beta1,this.iterations_+1)),this.accBeta2.assign(ui(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)}};var rp=class extends kr{static get className(){return\"Adamax\"}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=[],De(()=>{this.iteration=ke(0).variable(),this.accBeta1=ke(t).variable()}),n==null&&(this.epsilon=T.backend.epsilon())}applyGradients(e){let t=Array.isArray(e)?e.map(o=>o.name):Object.keys(e);De(()=>{let o=Te(1,this.accBeta1),n=je(-this.learningRate,Ce(se(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: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=Ce(se(c,this.beta1),se(u,1-this.beta1)),d=se(l,this.beta2),f=Qt(u),h=Ad(d,f);c.assign(m),l.assign(h);let g=Ce(se(je(n,o),je(m,Ce(h,this.epsilon))),i);i.assign(g)}),this.iteration.assign(Ce(this.iteration,1)),this.accBeta1.assign(se(this.accBeta1,this.beta1))}),this.incrementIterations()}dispose(){this.accBeta1.dispose(),this.iteration.dispose(),this.accumulatedFirstMoment!=null&&Ot(this.accumulatedFirstMoment.map(e=>e.variable)),this.accumulatedWeightedInfNorm!=null&&Ot(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)}};var mi=class extends kr{static get className(){return\"SGD\"}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];De(()=>{let i=Ce(se(this.c,s),a);a.assign(i)})}),this.incrementIterations()}setLearningRate(e){this.learningRate=e,this.c!=null&&this.c.dispose(),this.c=$r(ke(-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)}};var op=class extends mi{static get className(){return\"Momentum\"}constructor(e,t,o=!1){super(e),this.learningRate=e,this.momentum=t,this.useNesterov=o,this.accumulations=[],this.m=ke(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:De(()=>Gt(s).variable(!1))});let a=this.accumulations[n].variable,i=Array.isArray(e)?e[n].tensor:e[o];i!=null&&De(()=>{let p,u=Ce(se(this.m,a),i);this.useNesterov?p=Ce(se(this.c,Ce(i,se(u,this.m))),s):p=Ce(se(this.c,u),s),a.assign(u),s.assign(p)})}),this.incrementIterations()}dispose(){this.m.dispose(),this.accumulations!=null&&Ot(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)}};var np=class extends kr{static get className(){return\"RMSProp\"}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:De(()=>Gt(s).variable(a))}),this.accumulatedMoments[n]==null&&(this.accumulatedMoments[n]={originalName:`${o}/momentum`,variable:De(()=>Gt(s).variable(a))}),this.accumulatedMeanGrads[n]==null&&this.centered&&(this.accumulatedMeanGrads[n]={originalName:`${o}/mg`,variable:De(()=>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;De(()=>{let c=Ce(se(p,this.decay),se(Zt(i),1-this.decay));if(this.centered){let l=this.accumulatedMeanGrads[n].variable,m=Ce(se(l,this.decay),se(i,1-this.decay)),d=je(se(i,this.learningRate),Rr(Te(c,Ce(Zt(m),this.epsilon)))),f=Ce(se(u,this.momentum),d);p.assign(c),l.assign(m),u.assign(f);let h=Te(s,f);s.assign(h)}else{let l=Ce(se(p,this.decay),se(Zt(i),1-this.decay)),m=Ce(se(u,this.momentum),je(se(i,this.learningRate),Rr(Ce(l,this.epsilon))));p.assign(l),u.assign(m);let d=Te(s,m);s.assign(d)}})}),this.incrementIterations()}dispose(){this.accumulatedMeanSquares!=null&&Ot(this.accumulatedMeanSquares.map(e=>e.variable)),this.accumulatedMeanGrads!=null&&this.centered&&Ot(this.accumulatedMeanGrads.map(e=>e.variable)),this.accumulatedMoments!=null&&Ot(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)}};var iX=[Ju,ep,tp,rp,op,np,mi];function XN(){for(let r of iX)rS(r)}var di={};qe(di,{CompositeArrayBuffer:()=>ir,browserFiles:()=>QN,browserHTTPRequest:()=>tT,concatenateArrayBuffers:()=>dk,copyModel:()=>Tk,decodeWeights:()=>sd,decodeWeightsStream:()=>ad,encodeWeights:()=>pk,fromMemory:()=>rT,fromMemorySync:()=>uS,getLoadHandlers:()=>xk,getModelArtifactsForJSON:()=>tc,getModelArtifactsForJSONSync:()=>$w,getModelArtifactsInfoForJSON:()=>va,getSaveHandlers:()=>gk,getWeightSpecs:()=>Sl,http:()=>nf,isHTTPScheme:()=>of,listModels:()=>kk,loadWeights:()=>JN,moveModel:()=>_k,registerLoadRouter:()=>hk,registerSaveRouter:()=>fk,removeModel:()=>Nk,weightsLoaderFactory:()=>aS,withSaveHandler:()=>oT,withSaveHandlerSync:()=>nT});var uX=\"model\",pX=\".json\",cX=\".weights.bin\";function YN(r){return new Promise(e=>setTimeout(e)).then(r)}var dc=class r{constructor(e){if(!A().getBool(\"IS_BROWSER\"))throw new Error(\"browserDownloads() cannot proceed because the current environment is not a browser.\");e.startsWith(r.URL_SCHEME)&&(e=e.slice(r.URL_SCHEME.length)),(e==null||e.length===0)&&(e=uX),this.modelJsonFileName=e+pX,this.weightDataFileName=e+cX}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=ir.join(e.weightData),o=window.URL.createObjectURL(new Blob([t],{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 n=[{paths:[\"./\"+this.weightDataFileName],weights:e.weightSpecs}],s=id(e,n),a=window.URL.createObjectURL(new Blob([JSON.stringify(s)],{type:\"application/json\"})),i=this.modelJsonAnchor==null?document.createElement(\"a\"):this.modelJsonAnchor;if(i.download=this.modelJsonFileName,i.href=a,await YN(()=>i.dispatchEvent(new MouseEvent(\"click\"))),e.weightData!=null){let p=this.weightDataAnchor==null?document.createElement(\"a\"):this.weightDataAnchor;p.download=this.weightDataFileName,p.href=o,await YN(()=>p.dispatchEvent(new MouseEvent(\"click\")))}return{modelArtifactsInfo:va(e)}}}};dc.URL_SCHEME=\"downloads://\";var oS=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=tc(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,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=>Ew(s.name)),n={};for(let s of e)s.paths.forEach(a=>{let i=Ew(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}},lX=r=>A().getBool(\"IS_BROWSER\")&&!Array.isArray(r)&&r.startsWith(dc.URL_SCHEME)?mX(r.slice(dc.URL_SCHEME.length)):null;qt.registerSaveRouter(lX);function mX(r=\"model\"){return new dc(r)}function QN(r){return new oS(r)}function nS(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 sS(r,e){e==null&&(e={});let t=e.fetchFunc==null?A().platform.fetch:e.fetchFunc,o=r.map(l=>t(l,e.requestInit,{isBinary:!0})),i=(e.onProgress==null?await Promise.all(o):await nS(o,e.onProgress,0,.5)).map(l=>l.arrayBuffer());return e.onProgress==null?await Promise.all(i):await nS(i,e.onProgress,.5,1)}function ZN(r,e){var t;let o=e.fetchFunc==null?A().platform.fetch:e.fetchFunc,n=0,s;return(t=e.onProgress)===null||t===void 0||t.call(e,0),new ReadableStream({pull:async a=>{for(var i;nsS(a,{requestInit:o}))(r,e,t)}function aS(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=si[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((S,k)=>{S===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=new ir(c.slice(m,m+f));s[d].forEach(x=>{let b=h.slice(x.groupOffset,x.groupOffset+x.sizeBytes),C=sd(b,[x.manifestEntry]);for(let S in C)l[S]=C[S]}),m+=f}),l}}var dX=\"application/octet-stream\",fX=\"application/json\",Dl=class{constructor(e,t){if(this.DEFAULT_METHOD=\"POST\",t==null&&(t={}),this.weightPathPrefix=t.weightPathPrefix,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=A().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||{},this.loadOptions=t}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=id(e,o);if(t.body.append(\"model.json\",new Blob([JSON.stringify(n)],{type:fX}),\"model.json\"),e.weightData!=null){let a=ir.join(e.weightData);t.body.append(\"model.weights.bin\",new Blob([a],{type:dX}),\"model.weights.bin\")}let s=await this.fetch(this.path,t);if(s.ok)return{modelArtifactsInfo:va(e),responses:[s]};throw new Error(`BrowserHTTPRequest.save() failed due to HTTP response status ${s.status}.`)}async loadModelJSON(){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 t}async load(){if(this.loadOptions.streamWeights)return this.loadStream();let e=await this.loadModelJSON();return tc(e,t=>this.loadWeights(t))}async loadStream(){let e=await this.loadModelJSON(),t=await this.getWeightUrls(e.weightsManifest),o=Sl(e.weightsManifest),n=()=>ZN(t,this.loadOptions);return Object.assign(Object.assign({},e),{weightSpecs:o,getWeightStream:n})}async getWeightUrls(e){let t=Array.isArray(this.path)?this.path[1]:this.path,[o,n]=hX(t),s=this.weightPathPrefix||o,a=[],i=[];for(let p of e)for(let u of p.paths)this.weightUrlConverter!=null?i.push(this.weightUrlConverter(u)):a.push(s+u+n);return this.weightUrlConverter&&a.push(...await Promise.all(i)),a}async loadWeights(e){let t=await this.getWeightUrls(e),o=Sl(e),n=await sS(t,this.loadOptions);return[o,n]}};Dl.URL_SCHEME_REGEX=/^https?:\\/\\//;function hX(r){let e=r.lastIndexOf(\"/\"),t=r.lastIndexOf(\"?\"),o=r.substring(0,e),n=t>e?r.substring(t):\"\";return[o+\"/\",n]}function of(r){return r.match(Dl.URL_SCHEME_REGEX)!=null}var eT=(r,e)=>{if(typeof fetch==\"undefined\"&&(e==null||e.fetchFunc==null))return null;{let t=!0;if(Array.isArray(r)?t=r.every(o=>of(o)):t=of(r),t)return nf(r,e)}return null};qt.registerSaveRouter(eT);qt.registerLoadRouter(eT);function nf(r,e){return new Dl(r,e)}function tT(r,e){return nf(r,e)}var Al=class{constructor(e){this.modelArtifacts=e}load(){return this.modelArtifacts}},sf=class{constructor(e){this.saveHandler=e}save(e){return this.saveHandler(e)}},iS=class{constructor(e){e.load&&(this.load=()=>Promise.resolve(e.load())),e.save&&(this.save=t=>Promise.resolve(e.save(t)))}};function rT(r,e,t,o){let n=arguments;return new iS(uS(...n))}function uS(r,e,t,o){return arguments.length===1?r.modelTopology!=null||r.weightSpecs!=null?new Al(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 Al({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 Al({modelTopology:r,weightSpecs:e,weightData:t,trainingConfig:o}))}function oT(r){return new sf(r)}function nT(r){return new sf(r)}var aT={};qe(aT,{confusionMatrix:()=>sT});function gX(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=El(Ue(o,\"int32\"),t),a=El(Ue(n,\"int32\"),t),i=mc(s),p=Ze(i,a);return Ue(p,\"int32\")}var sT=N({confusionMatrix_:gX});var cT={};qe(cT,{draw:()=>vX,fromPixels:()=>kX,fromPixelsAsync:()=>wX,toPixels:()=>IX});var sp,iT=!1;function uT(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(Xp(Du,T.backendName)!=null){let f={pixels:r},h={numChannels:e};return T.runKernel(Du,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(sp==null)if(typeof document==\"undefined\")if(typeof OffscreenCanvas!=\"undefined\"&&typeof OffscreenCanvasRenderingContext2D!=\"undefined\")sp=new OffscreenCanvas(1,1).getContext(\"2d\");else throw new Error(\"Cannot parse input in current context. Reason: OffscreenCanvas Context2D rendering is not supported.\");else sp=document.createElement(\"canvas\").getContext(\"2d\",{willReadFrequently:!0});sp.canvas.width=u,sp.canvas.height=c,sp.drawImage(r,0,0,u,c),l=sp.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||e===2)throw new Error(`toPixels only supports depth of size 1, 3 or 4 but got ${e}`);if(r.dtype!==\"float32\"&&r.dtype!==\"int32\")throw new Error(`Unsupported type for toPixels: ${r.dtype}. Please use float32 or int32 tensors.`)}function SX(r){let e=(r==null?void 0:r.alpha)||1;if(e>1||e<0)throw new Error(`Alpha value ${e} is suppoed to be in range [0 - 1].`)}async function IX(r,e){let t=v(r,\"img\",\"toPixels\");if(!(r instanceof mt)){let u=t;t=Ue(u,\"int32\"),u.dispose()}pT(t);let[o,n]=t.shape.slice(0,2),s=t.rank===2?1:t.shape[2],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){iT||Xp($u,T.backendName)!=null&&(console.warn(\"tf.browser.toPixels is not efficient to draw tensor on canvas. Please try tf.browser.draw instead.\"),iT=!0),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}function vX(r,e,t){let o=v(r,\"img\",\"draw\");if(!(r instanceof mt)){let a=o;o=Ue(a,\"int32\"),a.dispose()}pT(o),SX(t==null?void 0:t.imageOptions);let n={image:o},s={canvas:e,options:t};T.runKernel($u,n,s)}var kX=N({fromPixels_:uT});var af={};qe(af,{prepareAndValidate:()=>lT});function lT(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 pt={};qe(pt,{assertParamsValid:()=>TX,computeFlatOffset:()=>DX,computeOutShape:()=>EX,getNormalizedAxes:()=>$X,isSliceContinous:()=>RX,maskToAxes:()=>_X,parseSliceParams:()=>AX,sliceInfo:()=>FX,startForAxis:()=>bT,startIndicesWithElidedDims:()=>gT,stopForAxis:()=>CT,stopIndicesWithElidedDims:()=>xT,stridesForAxis:()=>yT,stridesWithElidedDims:()=>dT});var pS=-2,NX=-1;function TX(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 _X(r){let e=[],t=0;for(;r>0;)r&1&&e.push(t),r/=2,t++;return e}function EX(r,e,t){let o=[];for(let n=0;n0){let d=e[0],f=t+1;c=gT(a,d,f,o,r),l=xT(i,d,f,n,r),m=dT(s,d,f,r)}else for(let d=0;d-1)s[i]=0;else{let p=fT(e,t,i),u=o[p];r&1<-1)s[i]=Number.MAX_SAFE_INTEGER;else{let p=fT(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=Vp(0,a,p-1),a}function CT(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=Vp(0,a,p):a=Vp(-1,a,p-1),a}function RX(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 DX(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 FX(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)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(S&&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]=mT(m.begin[C],0,m.strides[C],k,_,$),m.end[C]=mT(m.end[C],1,m.strides[C],k,_,$);let O=m.strides[C]===1&&m.begin[C]===0&&m.end[C]===k;d=d&&O,f=f&&(C===0&&m.strides[C]===1||O)}else d=d&&m.strides[C]===1&&R,f=f&&(C===0&&m.strides[C]===1||R);let D,P=!1;if(m.beginValid&&m.endValid?(D=m.end[C]-m.begin[C],P=!0):S?(D=1,P=!0):R&&k>=0&&(m.strides[C]<0?D=-k:D=k,P=!0),P){let O;D===0||D<0!=m.strides[C]<0?O=0:O=Math.trunc(D/m.strides[C])+(D%m.strides[C]!==0?1:0),g.push(O)}else g.push(-1)}for(let C=0;C=0?x.push(g[S]):S===pS&&x.push(1)}return{finalShapeSparse:x.filter((C,S)=>m.finalShapeGatherIndices[S]!==pS),finalShape:x,isIdentity:d,sliceDim0:f,isSimpleSlice:h,begin:m.begin,end:m.end,strides:m.strides}}function PX(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 OX=\"4.17.0\";var Fl=class{static sgd(e){return new mi(e)}static momentum(e,t,o=!1){return new op(e,t,o)}static rmsprop(e,t=.9,o=0,n=null,s=!1){return new np(e,t,o,n,s)}static adam(e=.001,t=.9,o=.999,n=null){return new tp(e,t,o,n)}static adadelta(e=.001,t=.95,o=null){return new Ju(e,t,o)}static adamax(e=.002,t=.9,o=.999,n=null,s=0){return new rp(e,t,o,n,s)}static adagrad(e,t=.1){return new ep(e,t)}};var OGe=Fl;var MX=typeof requestAnimationFrame!=\"undefined\"?requestAnimationFrame:typeof setImmediate!=\"undefined\"?setImmediate:r=>r();function cS(){return new Promise(r=>MX(()=>r()))}var w={};qe(w,{ERF_A1:()=>e5,ERF_A2:()=>t5,ERF_A3:()=>r5,ERF_A4:()=>o5,ERF_A5:()=>n5,ERF_P:()=>JX,PARALLELIZE_THRESHOLD:()=>uf,RowPartitionType:()=>Fa,SELU_SCALE:()=>ZX,SELU_SCALEALPHA:()=>QX,applyActivation:()=>Qu,assertAndGetBroadcastShape:()=>rt,assertAxesAreInnerMostDims:()=>pK,assertParamsConsistent:()=>LX,assignToTypedArray:()=>c5,axesAreInnerMostDims:()=>zw,calculateShapes:()=>q1,checkEinsumDimSizes:()=>g5,checkPadOnDimRoundingMode:()=>Lt,combineLocations:()=>I2,combineRaggedTensorToTensorShapes:()=>zX,complexWithEvenIndex:()=>i5,complexWithOddIndex:()=>u5,computeConv2DInfo:()=>zu,computeConv3DInfo:()=>Uk,computeDefaultPad:()=>Bw,computeDilation2DInfo:()=>iH,computeOptimalWindowSize:()=>GX,computeOutAndReduceShapes:()=>uK,computeOutShape:()=>BX,computePool2DInfo:()=>Lw,computePool3DInfo:()=>uH,convertConv2DDataFormat:()=>Gk,decodeEinsumEquation:()=>f5,eitherStridesOrDilationsAreOne:()=>gr,expandShapeToKeepDim:()=>ii,exponent:()=>m5,exponents:()=>l5,fromStringArrayToUint8:()=>M5,fromUint8ToStringArray:()=>O5,getAxesPermutation:()=>cK,getBroadcastDims:()=>y2,getComplexWithIndex:()=>p5,getEinsumComputePath:()=>x5,getEinsumPermutation:()=>h5,getFusedBiasGradient:()=>Yu,getFusedDyActivation:()=>Xu,getImageCenter:()=>HX,getInnerMostAxes:()=>mK,getPermuted:()=>qX,getRaggedRank:()=>WX,getReductionAxes:()=>xd,getReshaped:()=>KX,getReshapedPermuted:()=>jX,getRowPartitionTypesHelper:()=>VX,getSliceBeginCoords:()=>XX,getSliceSize:()=>YX,getSparseFillEmptyRowsIndicesDenseShapeMismatch:()=>w5,getSparseFillEmptyRowsNegativeIndexErrorMessage:()=>S5,getSparseFillEmptyRowsOutOfRangeIndexErrorMessage:()=>I5,getSparseReshapeEmptyTensorZeroOutputDimErrorMessage:()=>N5,getSparseReshapeInputOutputMismatchErrorMessage:()=>_5,getSparseReshapeInputOutputMultipleErrorMessage:()=>T5,getSparseReshapeMultipleNegativeOneOutputDimErrorMessage:()=>v5,getSparseReshapeNegativeOutputDimErrorMessage:()=>k5,getSparseSegmentReductionIndicesOutOfRangeErrorMessage:()=>D5,getSparseSegmentReductionNegativeSegmentIdsErrorMessage:()=>E5,getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage:()=>$5,getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage:()=>R5,getUndoAxesPermutation:()=>lK,isIdentityPermutation:()=>y5,log:()=>t4,mergeRealAndImagArrays:()=>s5,prepareAndValidate:()=>lT,prepareSplitSize:()=>C5,segment_util:()=>mS,shouldFuse:()=>Zu,slice_util:()=>pt,splitRealAndImagArrays:()=>a5,stridesOrDilationsArePositive:()=>Ta,tupleValuesAreOne:()=>Bu,upcastType:()=>dt,validateDefaultValueShape:()=>UX,validateInput:()=>lc,validateUpdateShape:()=>Qw,warn:()=>Ia});function LX(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 BX(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 VX(r){let e={FIRST_DIM_SIZE:Fa.FIRST_DIM_SIZE,VALUE_ROWIDS:Fa.VALUE_ROWIDS,ROW_LENGTHS:Fa.ROW_LENGTHS,ROW_SPLITS:Fa.ROW_SPLITS,ROW_LIMITS:Fa.ROW_LIMITS,ROW_STARTS:Fa.ROW_STARTS},t=[];for(let o of r)if(o in e)t.push(e[o]);else break;return t}function WX(r){return r.length===0?0:r[0]===Fa.FIRST_DIM_SIZE?r.length-1:r.length}function UX(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 uf=30;function GX(r){return r<=uf?r:Up(r,Math.floor(Math.sqrt(r)))}function HX(r,e,t){let o=t*(typeof r==\"number\"?r:r[0]),n=e*(typeof r==\"number\"?r:r[1]);return[o,n]}function KX(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 jX(r,e,t,o=!0){let n=[];o?n.push(r[0]/t):n.push(r[0]*t);for(let s=1;s\",d5=/->/g,wT=\",\",ST=\"...\";function f5(r,e){r=r.replace(/\\s/g,\"\");let t=(r.length-r.replace(d5,\"\").length)/lS.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 (\"${lS}\").`);let[o,n]=r.split(lS);E(o.indexOf(ST)===-1,()=>`The ellipsis notation (\"${ST}\") is not supported yet.`);let s=o.split(wT),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 g5(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 x5(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 b5(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 w5(r){return`Received SparseTensor with denseShape[0] = 0 but\n indices.shape[0] = ${r}`}function S5(r,e){return`indices(${r}, 0) is invalid: ${e} < 0`}function I5(r,e,t){return`indices(${r}, 0) is invalid: ${e} >= ${t}`}function v5(r,e){return`only one output dimension may be -1, not both ${r} and ${e}`}function k5(r,e){return`size ${r} must be non-negative, not ${e}`}function N5(){return\"reshape cannot infer the missing input size for an empty tensor unless all specified input sizes are non-zero\"}function T5(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 _5(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 E5(){return\"segment ids must be >= 0\"}function $5(){return\"segment ids are not increasing\"}function R5(r,e){return`Segment id ${r} out of range [0, ${e}), possibly because segmentIds input is not sorted.`}function D5(r,e,t){return`Bad: indices[${r}] == ${e} out of range [0, ${t})`}var mS={};qe(mS,{collectGatherOpShapeInfo:()=>P5,computeOutShape:()=>F5,segOpComputeOptimalWindowSize:()=>A5});function A5(r,e){let t=!1,o;for(r<=uf?(o=r,t=!0):o=Up(r,Math.floor(Math.sqrt(r)));!t;)o>e||o===r?t=!0:o=Up(r,o+1);return o}function F5(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(tJp(e))}catch(e){throw new Error(`Failed to decode encoded string bytes into utf-8, error: ${e}`)}}function M5(r){return r.map(e=>Ji(e))}var Vt={};qe(Vt,{nonMaxSuppressionV3Impl:()=>Jd,nonMaxSuppressionV4Impl:()=>ef,nonMaxSuppressionV5Impl:()=>tf,whereImpl:()=>Xd});XN();var L5=A();L5.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 Dr;(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\"})(Dr||(Dr={}));var IT;(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={}))})(IT||(IT={}));var fS={};function z5(r,e){let t={tfOpName:r,category:\"custom\",inputs:[],attrs:[],customExecutor:e};fS[r]=t}function pf(r){return fS[r]}function V5(r){delete fS[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,u=i<0?e.inputNames.length+i:i;if(s.type===\"tensor\")return Bt(e.inputNames[u],t,o,n);if(s.type===\"tensors\"){let m=e.inputs.slice(i,p);return e.inputNames.slice(i,p).filter((f,h)=>{var g;return((g=m[h])===null||g===void 0?void 0:g.op)!==\"NoOp\"}).map(f=>Bt(f,t,o,n))}let c=Bt(e.inputNames[u],t,o,n),l=c.dataSync();return s.type===\"number\"?l[0]:y.toNestedArray(c.shape,l)}let a=e.attrParams[r];return a&&a.value}function Bt(r,e,t,o){let[n,s]=Nr(r,t);if(o!=null){let i=o.getHashTableHandleByName(n);if(i!=null)return i}let a=t.currentContextIds.find(i=>!!e[cf(n,i)]);return a!==void 0?e[cf(n,a)][s]:void 0}function hS(r,e,t){return e[cf(r,t.currentContextId)]}function Ls(r,e){let[t,o,n]=Nr(r,e);return[cf(t,e&&e.currentContextId),o,n]}function cf(r,e){return e?`${r}-${e}`:r}function Nr(r,e){if(r===\"\")return[\"\",0,void 0];let t=e!=null&&e.parseNodeNameCache!=null;if(t){let s=e.parseNodeNameCache.get(r);if(s!=null)return s}let o=r.split(\":\"),n;if(o.length===1)n=[r,0,void 0];else{let s=o[0],a=o.length===3?o[1]:void 0,i=Number(o[o.length-1]);n=[s,i,a]}return t&&e.parseNodeNameCache.set(r,n),n}function Pl(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 Bs(r){return r.kept?r:Ur(r)}var gS={};qe(gS,{json:()=>W5});var W5=[{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 xS={};qe(xS,{json:()=>U5});var U5=[{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:\"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}]},{tfOpName:\"IsFinite\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"IsInf\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]}];var yS={};qe(yS,{json:()=>G5});var G5=[{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 bS={};qe(bS,{json:()=>H5});var H5=[{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 CS={};qe(CS,{json:()=>K5});var K5=[{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:\"RandomUniformInt\",category:\"creation\",inputs:[{start:0,name:\"shape\",type:\"number[]\"}],attrs:[{tfName:\"minval\",name:\"minval\",type:\"number\"},{tfName:\"maxval\",name:\"maxval\",type:\"number\"},{tfName:\"seed\",name:\"seed\",type:\"number\",defaultValue:0},{tfName:\"seed2\",name:\"seed2\",type:\"number\",defaultValue:0,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 wS={};qe(wS,{json:()=>q5});var q5=[{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 SS={};qe(SS,{json:()=>j5});var j5=[{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 IS={};qe(IS,{json:()=>X5});var X5=[{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 vS={};qe(vS,{json:()=>Y5});var Y5=[{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 kS={};qe(kS,{json:()=>Q5});var Q5=[{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 NS={};qe(NS,{json:()=>Z5});var Z5=[{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}]},{tfOpName:\"BitwiseAnd\",category:\"logical\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"y\",type:\"tensor\"}]}];var TS={};qe(TS,{json:()=>J5});var J5=[{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\"}]},{tfOpName:\"MatrixBandPart\",category:\"matrices\",inputs:[{start:0,name:\"a\",type:\"tensor\"},{start:1,name:\"numLower\",type:\"tensor\"},{start:1,name:\"numUpper\",type:\"tensor\"}]}];var _S={};qe(_S,{json:()=>e8});var e8=[{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\"}]}];var ES={};qe(ES,{json:()=>t8});var t8=[{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\"},{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{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 $S={};qe($S,{json:()=>r8});var r8=[{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}]},{tfOpName:\"TensorScatterUpdate\",category:\"slice_join\",inputs:[{start:0,name:\"tensor\",type:\"tensor\"},{start:1,name:\"indices\",type:\"tensor\"},{start:2,name:\"values\",type:\"tensor\"}]}];var RS={};qe(RS,{json:()=>o8});var o8=[{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 DS={};qe(DS,{json:()=>n8});var n8=[{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 AS={};qe(AS,{json:()=>s8});var s8=[{tfOpName:\"StaticRegexReplace\",category:\"string\",inputs:[{start:0,name:\"input\",type:\"tensor\"}],attrs:[{tfName:\"pattern\",name:\"pattern\",type:\"string\"},{tfName:\"rewrite\",name:\"rewrite\",type:\"string\"},{tfName:\"replace_global\",name:\"replaceGlobal\",type:\"bool\"}]},{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 FS={};qe(FS,{json:()=>a8});var a8=[{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:\"EnsureShape\",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 Ol=class{static get Instance(){return this._instance||(this._instance=new this)}constructor(){let e=[gS,xS,yS,bS,CS,wS,SS,IS,vS,kS,NS,TS,_S,ES,$S,RS,DS,AS,FS],t=[].concat(...e.map(o=>o.json));this.opMappers=t.reduce((o,n)=>(o[n.tfOpName]=n,o),{})}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,,S]=Ls(x),k=i[C];if(k.outputs!=null){let _=k.outputs.indexOf(S);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]=Ls(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]=Ls(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=pf(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=lf(e.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=lf(e.attr,s.tfDeprecatedName,s.defaultValue));break;case\"string[]\":i=yf(e.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=yf(e.attr,s.tfDeprecatedName,s.defaultValue));break;case\"number\":i=df(e.attr,s.tfName,s.defaultValue||0),i===void 0&&s.tfDeprecatedName&&(i=df(e.attr,s.tfDeprecatedName,s.defaultValue));break;case\"number[]\":i=xf(e.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=xf(e.attr,s.tfDeprecatedName,s.defaultValue));break;case\"bool\":i=mf(e.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=mf(e.attr,s.tfDeprecatedName,s.defaultValue));break;case\"bool[]\":i=Cf(e.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=Cf(e.attr,s.tfDeprecatedName,s.defaultValue));break;case\"shape\":i=gf(e.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=gf(e.attr,s.tfDeprecatedName,s.defaultValue));break;case\"shape[]\":i=bf(e.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=bf(e.attr,s.tfDeprecatedName,s.defaultValue));break;case\"dtype\":i=ff(e.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=ff(e.attr,s.tfDeprecatedName,s.defaultValue));break;case\"dtype[]\":i=hf(e.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=hf(e.attr,s.tfDeprecatedName,s.defaultValue));break;case\"func\":i=vT(e.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=vT(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]=Ls(l.name),d={name:m,op:\"Placeholder\",inputs:[],inputNames:[],category:\"graph\",inputParams:{},attrParams:{dtype:{value:PS(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]=Ls(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]=Ls(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 i8(r){let e=A().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 kT(r,e){let t=Array.isArray(r)?String.fromCharCode.apply(null,r):i8(r);return e?t:t.toLowerCase()}function lf(r,e,t,o=!1){let n=r[e];return n!=null?kT(n.s,o):t}function mf(r,e,t){let o=r[e];return o?o.b:t}function df(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 PS(r){switch(typeof r==\"string\"&&(r=Dr[r]),r){case Dr.DT_FLOAT:case Dr.DT_HALF:return\"float32\";case Dr.DT_INT32:case Dr.DT_INT64:case Dr.DT_INT8:case Dr.DT_UINT8:return\"int32\";case Dr.DT_BOOL:return\"bool\";case Dr.DT_DOUBLE:return\"float32\";case Dr.DT_STRING:return\"string\";case Dr.DT_COMPLEX64:case Dr.DT_COMPLEX128:return\"complex64\";default:return null}}function vT(r,e,t){let o=r[e];return o&&o.func?o.func.name:t}function ff(r,e,t){let o=r[e];return o&&o.type?PS(o.type):t}function hf(r,e,t){let o=r[e];return o&&o.list&&o.list.type?o.list.type.map(n=>PS(n)):t}function NT(r){if(!r.unknownRank)return r.dim!=null?r.dim.map(e=>typeof e.size==\"number\"?e.size:parseInt(e.size,10)):[]}function gf(r,e,t){let o=r[e];return o&&o.shape?NT(o.shape):t}function xf(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 yf(r,e,t,o=!1){let n=r[e];return n&&n.list&&n.list.s?n.list.s.map(s=>kT(s,o)):t}function bf(r,e,t){let o=r[e];return o&&o.list&&o.list.shape?o.list.shape.map(n=>NT(n)):t}function Cf(r,e,t){let o=r[e];return o&&o.list&&o.list.b?o.list.b:t}var wf=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 Bt(e,this.tensorMap,this.context)}getAttr(e,t){let o=this.node.rawAttrs[e];if(o.tensor!=null)return Bt(e,this.tensorMap,this.context);if(o.i!=null||o.f!=null)return df(this.node.rawAttrs,e,t);if(o.s!=null)return lf(this.node.rawAttrs,e,t);if(o.b!=null)return mf(this.node.rawAttrs,e,t);if(o.shape!=null)return gf(this.node.rawAttrs,e,t);if(o.type!=null)return ff(this.node.rawAttrs,e,t);if(o.list!=null){if(o.list.i!=null||o.list.f!=null)return xf(this.node.rawAttrs,e,t);if(o.list.s!=null)return yf(this.node.rawAttrs,e,t);if(o.list.shape!=null)return bf(this.node.rawAttrs,e,t);if(o.list.b!=null)return Cf(this.node.rawAttrs,e,t);if(o.list.type!=null)return hf(this.node.rawAttrs,e,t)}return t}};var Je={};qe(Je,{OP_SCOPE_SUFFIX:()=>Nw,abs:()=>Qt,acos:()=>Rk,acosh:()=>Dk,add:()=>Ce,addN:()=>Ak,all:()=>Fk,any:()=>Pk,argMax:()=>Ok,argMin:()=>Mk,asin:()=>Lk,asinh:()=>Bk,atan:()=>zk,atan2:()=>Vk,atanh:()=>Wk,avgPool:()=>dd,avgPool3d:()=>Hk,basicLSTMCell:()=>Kk,batchNorm:()=>nu,batchNorm2d:()=>jk,batchNorm3d:()=>Xk,batchNorm4d:()=>Yk,batchToSpaceND:()=>fd,bincount:()=>hd,bitwiseAnd:()=>Qk,booleanMaskAsync:()=>L6,broadcastArgs:()=>Zk,broadcastTo:()=>su,buffer:()=>me,cast:()=>Ue,ceil:()=>Jk,clipByValue:()=>e2,clone:()=>Ur,complex:()=>Er,concat:()=>yt,concat1d:()=>t2,concat2d:()=>r2,concat3d:()=>o2,concat4d:()=>n2,conv1d:()=>s2,conv2d:()=>au,conv2dTranspose:()=>a2,conv3d:()=>i2,conv3dTranspose:()=>p2,cos:()=>c2,cosh:()=>l2,cosineWindow:()=>$l,cumprod:()=>m2,cumsum:()=>d2,denseBincount:()=>f2,depthToSpace:()=>h2,depthwiseConv2d:()=>sc,diag:()=>g2,dilation2d:()=>x2,div:()=>je,divNoNan:()=>b2,dot:()=>C2,dropout:()=>Y6,einsum:()=>iu,elu:()=>bd,enclosingPowerOfTwo:()=>Zw,ensureShape:()=>w2,equal:()=>yd,erf:()=>S2,euclideanNorm:()=>k2,exp:()=>_o,expandDims:()=>Ms,expm1:()=>N2,eye:()=>Cd,fft:()=>uc,fill:()=>$a,floor:()=>wd,floorDiv:()=>md,fused:()=>Jw,gather:()=>Sd,gatherND:()=>j6,greater:()=>Wu,greaterEqual:()=>Id,ifft:()=>ju,imag:()=>pu,image:()=>eX,inTopKAsync:()=>Z6,irfft:()=>Hd,isFinite:()=>T2,isInf:()=>_2,isNaN:()=>E2,leakyRelu:()=>vd,less:()=>Tl,lessEqual:()=>ac,linalg:()=>tX,linspace:()=>$2,localResponseNormalization:()=>R2,log:()=>pi,log1p:()=>kd,logSigmoid:()=>D2,logSoftmax:()=>A2,logSumExp:()=>_d,logicalAnd:()=>Uu,logicalNot:()=>Ed,logicalOr:()=>$d,logicalXor:()=>F2,losses:()=>rX,lowerBound:()=>P2,matMul:()=>Ze,max:()=>Ra,maxPool:()=>Dd,maxPool3d:()=>O2,maxPoolWithArgmax:()=>M2,maximum:()=>Ad,mean:()=>Gu,meshgrid:()=>L2,min:()=>Nl,minimum:()=>Hu,mirrorPad:()=>B2,mod:()=>z2,moments:()=>V2,movingAverage:()=>V6,mul:()=>se,multiRNNCell:()=>W2,multinomial:()=>U2,neg:()=>pr,norm:()=>Vu,notEqual:()=>Fd,oneHot:()=>El,ones:()=>Da,onesLike:()=>G2,op:()=>N,outerProduct:()=>H2,pad:()=>Aa,pad1d:()=>K2,pad2d:()=>q2,pad3d:()=>j2,pad4d:()=>X2,pool:()=>Y2,pow:()=>ui,prelu:()=>Od,print:()=>ld,prod:()=>Q2,raggedGather:()=>Z2,raggedRange:()=>J2,raggedTensorToTensor:()=>e1,rand:()=>t1,randomGamma:()=>S1,randomNormal:()=>Wd,randomStandardNormal:()=>I1,randomUniform:()=>ic,randomUniformInt:()=>v1,range:()=>cu,real:()=>ci,reciprocal:()=>k1,relu:()=>lu,relu6:()=>Ud,reshape:()=>W,reverse:()=>mo,reverse1d:()=>N1,reverse2d:()=>T1,reverse3d:()=>_1,reverse4d:()=>E1,rfft:()=>pc,round:()=>Gd,rsqrt:()=>$1,scalar:()=>ke,scatterND:()=>U6,searchSorted:()=>_l,selu:()=>R1,separableConv2d:()=>D1,setdiff1dAsync:()=>A1,sigmoid:()=>Ea,sign:()=>F1,signal:()=>Jj,sin:()=>P1,sinh:()=>O1,slice:()=>Xe,slice1d:()=>M1,slice2d:()=>L1,slice3d:()=>B1,slice4d:()=>z1,softmax:()=>V1,softplus:()=>Td,spaceToBatchND:()=>Pd,sparse:()=>oX,sparseToDense:()=>K6,spectral:()=>Zj,split:()=>li,sqrt:()=>Rr,square:()=>Zt,squaredDifference:()=>Kd,squeeze:()=>cc,stack:()=>vr,step:()=>qd,stridedSlice:()=>W1,string:()=>nX,sub:()=>Te,sum:()=>ot,tan:()=>U1,tanh:()=>kl,tensor:()=>ar,tensor1d:()=>Jt,tensor2d:()=>mu,tensor3d:()=>jd,tensor4d:()=>G1,tensor5d:()=>H1,tensor6d:()=>K1,tensorScatterUpdate:()=>j1,tile:()=>uu,topk:()=>X1,transpose:()=>mc,truncatedNormal:()=>Y1,unique:()=>Q1,unsortedSegmentSum:()=>Z1,unstack:()=>fo,upperBound:()=>J1,variable:()=>eN,where:()=>lo,whereAsync:()=>Yd,zeros:()=>Gr,zerosLike:()=>Gt});var TT=(r,e,t,o=Je)=>{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 _T=(r,e,t,o=Je)=>{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(Bt(r.inputNames[0],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(Bt(r.inputNames[0],e,t))];case\"IsInf\":return[o.isInf(Bt(r.inputNames[0],e,t))];case\"IsFinite\":return[o.isFinite(Bt(r.inputNames[0],e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};function Hr(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 ET(r){return!(typeof r==\"number\"||r.some(e=>e<0))}function fc(r,e,t){let o=Sf(r,t),n=!ET(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=Sf(s.shape,o)}),!ET(o))throw new Error(`Non-fully-defined elementShape: ${o}`);return o}function Sf(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 If=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=ke(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),Hr(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,fo(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=[];De(()=>{t=W(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}`);Hr(t,s.shape,\"TensorList shape mismatch: \"),$r(s)}),this.idTensor=ke(0),this.maxNumElements=n,$r(this.idTensor)}copy(){return new r([...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.`);Hr(e,this.elementShape,\"TensorList shape mismatch: \");let n=fc(this.elementShape,this.tensors,e);return De(()=>{let s=this.tensors.map(a=>W(a,n));return vr(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=fc(this.elementShape,this.tensors,e),n=this.tensors.pop();return n.kept=!1,Hr(n.shape,e,\"TensorList shape mismatch: \"),W(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(Hr(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 r([],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.`);Hr(this.tensors[e].shape,t,\"TensorList shape mismatch: \");let n=fc(this.elementShape,this.tensors,t);return W(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.`);Hr(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}`);Hr(this.elementShape,o,\"TensorList shape mismatch: \"),e=e.slice(0,this.size());let n=fc(this.elementShape,this.tensors,o);return e.length===0?ar([],[0].concat(n)):De(()=>{let s=e.map(a=>W(this.tensors[a],n));return vr(s,0)})}concat(e,t){if(e&&e!==this.elementDtype)throw new Error(`TensorList dtype is ${this.elementDtype} but concat requested dtype ${e}`);Hr(this.elementShape,t,\"TensorList shape mismatch: \");let o=fc(this.elementShape,this.tensors,t);return this.size()===0?ar([],[0].concat(o)):De(()=>{let n=this.tensors.map(s=>W(s,o));return yt(n,0)})}};function $T(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);Hr(n,e,\"TensorList shape mismatch: \");let s=fo(r);return new hc(s,e,o)}function RT(r,e,t,o){return new hc([],r,e,o)}function DT(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 hc([],t,r.dtype,o),a=fo(r,0);return e.forEach((i,p)=>{s.setItem(i,a[p])}),s}function AT(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=Sf(s,t),i=o===0?0:r.size/o,p=De(()=>{let c=[];r=W(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[Bs(o)]}case\"Switch\":{let o=I(\"pred\",r,e,t),n=I(\"data\",r,e,t);return n.kept||(n=Bs(n)),(await o.data())[0]?[void 0,n]:[n,void 0]}case\"Merge\":{let o=r.inputNames.find(n=>Bt(n,e,t)!==void 0);if(o){let n=Bt(o,e,t);return[Bs(n)]}return}case\"Enter\":{let o=I(\"frameName\",r,e,t),n=I(\"tensor\",r,e,t);return t.enterFrame(o),[Bs(n)]}case\"Exit\":{let o=I(\"tensor\",r,e,t);return t.exitFrame(),[Bs(o)]}case\"NextIteration\":{let o=I(\"tensor\",r,e,t);return t.nextIteration(),[Bs(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 If(u,n,o,s,p,a,i);return t.addTensorArray(c),[c.idTensor,ke(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[ke(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=DT(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=RT(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=$T(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=AT(o,s,n);return t.addTensorList(a),[a.idTensor]}case\"TensorListLength\":{let o=I(\"tensorListId\",r,e,t),n=t.getTensorList(o.id);return[ke(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 PT(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=Pl(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 OT=(r,e,t,o=Je)=>{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=Pl(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}=PT(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}=PT(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=Pl(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=Pl(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 MT=(r,e,t,o=Je)=>{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\"RandomUniformInt\":return[o.randomUniformInt(I(\"shape\",r,e,t),I(\"minval\",r,e,t),I(\"maxval\",r,e,t),I(\"seed\",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 OS(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 LT=async(r,e,t,o,n=Je)=>{switch(r.op){case\"NonMaxSuppressionV5\":{let{boxes:s,scores:a,maxOutputSize:i,iouThreshold:p,scoreThreshold:u,softNmsSigma:c}=OS(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}=OS(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}=OS(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 BT=(r,e,t,o=Je)=>{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 zT=(r,e,t,o=Je)=>{switch(r.op){case\"Const\":return e[r.name];case\"PlaceholderWithDefault\":let n=I(\"default\",r,e,t);return[Bt(r.name,e,t)||n];case\"Placeholder\":return[Bt(r.name,e,t)];case\"Identity\":case\"StopGradient\":case\"FakeQuantWithMinMaxVars\":{let c=I(\"x\",r,e,t);return[Bs(c)]}case\"IdentityN\":return I(\"x\",r,e,t).map(c=>Bs(c));case\"Snapshot\":let s=I(\"x\",r,e,t);return[Bs(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 ke(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(),De(()=>{let n=fo(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 vf(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 WT=(r,e,t,o=Je)=>{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 UT=(r,e,t,o=Je)=>{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))];case\"BitwiseAnd\":return[o.bitwiseAnd(I(\"a\",r,e,t),I(\"b\",r,e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var GT=(r,e,t,o=Je)=>{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})];case\"MatrixBandPart\":return[o.linalg.bandPart(I(\"a\",r,e,t),I(\"numLower\",r,e,t),I(\"numUpper\",r,e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var HT=(r,e,t,o=Je)=>{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))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var KT=(r,e,t,o=Je)=>{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 qT=(r,e,t,o=Je)=>{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 jT=(r,e,t,o=Je)=>{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))]}case\"TensorScatterUpdate\":{let n=I(\"indices\",r,e,t),s=I(\"values\",r,e,t),a=I(\"tensor\",r,e,t);return[o.tensorScatterUpdate(a,n,s)]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};var XT=(r,e,t,o=Je)=>{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 YT=(r,e,t,o=Je)=>{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 QT=(r,e,t,o=Je)=>{switch(r.op){case\"StaticRegexReplace\":return[o.string.staticRegexReplace(I(\"input\",r,e,t),I(\"pattern\",r,e,t),I(\"rewrite\",r,e,t),I(\"replaceGlobal\",r,e,t))];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 ZT=(r,e,t,o=Je)=>{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\"EnsureShape\":return[o.ensureShape(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 MS(r,e,t,o,n=De){let s=((a,i,p)=>{switch(a.category){case\"arithmetic\":return n(()=>TT(a,i,p));case\"basic_math\":return n(()=>_T(a,i,p));case\"control\":return FT(a,i,p);case\"convolution\":return n(()=>OT(a,i,p));case\"creation\":return n(()=>MT(a,i,p));case\"dynamic\":return LT(a,i,p);case\"evaluation\":return n(()=>BT(a,i,p));case\"image\":return n(()=>WT(a,i,p));case\"graph\":return n(()=>zT(a,i,p));case\"logical\":return n(()=>UT(a,i,p));case\"matrices\":return n(()=>GT(a,i,p));case\"normalization\":return n(()=>HT(a,i,p));case\"ragged\":return n(()=>KT(a,i,p));case\"reduction\":return n(()=>qT(a,i,p));case\"slice_join\":return n(()=>jT(a,i,p));case\"sparse\":return n(()=>XT(a,i,p));case\"spectral\":return n(()=>YT(a,i,p));case\"string\":return n(()=>QT(a,i,p));case\"transformation\":return n(()=>ZT(a,i,p));case\"hash_table\":return VT(a,i,p,o);case\"custom\":let u=pf(a.op);if(u&&u.customExecutor)return u.customExecutor(new wf(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 Ml=class{constructor(e={},t={},o={},n={},s){this.weightMap=e,this.tensorArrayMap=t,this.tensorListMap=o,this.functionMap=n,this.parseNodeNameCache=s,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 LS(r,e,t,o){let n=new Set,s=[],a=null,i=null,p=new Set,u=new Set(Object.keys(r).map(m=>Nr(m)[0]));o=o||[];let c=new Set(o.map(m=>Nr(m.name)[0])),l=[...e];for(;l.length>0;){let m=l.pop();if((fu(m)||A8(m)||F8(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.has(m.name)&&!c.has(m.name)){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 JT(r,e){let{usedNodes:t,inputs:o}=e,n=Object.keys(o).map(g=>Nr(g)[0]).map(g=>r.nodes[g]),s=r.initNodes||[],a=g=>t.has(typeof g==\"string\"?g:g.name);function i(g){return[...new Map(g.map(x=>[x.name,x])).values()]}let p=i([...n,...r.weights,...s]).filter(a),u=i([...p,...Object.values(r.nodes)]).filter(a),c=new Map(u.map(g=>[g.name,g])),l={};for(let g of u){l[g.name]=l[g.name]||0;for(let x of g.children)a(x)||(l[x.name]=Number.POSITIVE_INFINITY),l[x.name]=(l[x.name]||0)+1}let m=Object.entries(l).filter(([,g])=>g===0).map(([g])=>g),d=[...m];for(;m.length>0;){let g=m.pop(),x=c.get(g);for(let b of x.children.filter(a))--l[b.name]===0&&(d.push(b.name),m.push(b.name))}let f=d.map(g=>c.get(g)),h=_8(f,p);return E8(h,p),h}function _8(r,e){let t=new Map(r.map(a=>[a.name,a])),o=e.map(a=>a.name),n=new Set(o);for(;o.length>0;){let a=o.pop(),i=t.get(a);for(let p of i.children)!t.has(p.name)||n.has(p.name)||(n.add(p.name),o.push(p.name))}return r.filter(a=>n.has(a.name))}var gc=class extends Error{constructor(e){super(`NodesExecutionOrderError: ${e}`)}};function E8(r,e){let t=new Map(r.map((i,p)=>[i.name,p])),o=new Set(e.map(i=>i.name)),n=i=>o.has(typeof i==\"string\"?i:i.name),s=new Set(r.map(i=>i.name)),a=i=>s.has(typeof i==\"string\"?i:i.name);for(let i of r){for(let p of i.children.filter(a)){if(!t.has(p.name))throw new gc(`Child ${p.name} of node ${i.name} is unreachable.`);if(t.get(i.name)>t.get(p.name))throw new gc(`Node ${i.name} is scheduled to run after its child ${p.name}.`)}if(!n(i))for(let p of i.inputs){if(!t.has(p.name))throw new gc(`Input ${p.name} of node ${i.name} is unreachable.`);if(t.get(p.name)>t.get(i.name))throw new gc(`Node ${i.name} is scheduled to run before its input ${p.name}.`)}}}function e_(r){let e=new Map(r.map((i,p)=>[i.name,p])),t=Number.MAX_SAFE_INTEGER,o=r.map((i,p)=>fu(i)?t:p),n=i=>{let p=o[e.get(i.name)];return p==null?-1:p},s=r.map((i,p)=>i.children.map(n).reduce((u,c)=>Math.max(u,c),o[p])),a=new Map;for(let i=0;ie[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),{})}constructor(e,t){this.graph=e,this.parent=t,this.compiledMap=new Map,this.parseNodeNameCache=new Map,this._weightMap={},this.SEPARATOR=\",\",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 r(e.functions[o],this)})}getCompilationKey(e,t){let o=e.map(s=>s.name).sort(),n=t.map(s=>s.name).sort();return o.join(this.SEPARATOR)+\"--\"+n.join(this.SEPARATOR)}compile(e,t){let o=LS(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 u=t.map(l=>l.name),c=Object.keys(e);throw new Error(`Cannot compute the outputs [${u}] from the provided inputs [${c}]. Missing the following inputs: [${n}]`)}let i=JT(this.graph,o),p=e_(i);return{orderedNodes:i,nodeLiveUntilMap:p}}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(m=>this.graph.nodes[Nr(m)[0]]),s=t.map(m=>Nr(m)[0]),a=new Set(s),i=s.map(m=>this.graph.nodes[m]);i.length===0&&(i=this._outputs);let p=this.getCompilationKey(n,i),u=this.compiledMap.get(p);u==null&&(u=this.compile(e,i),this.compiledMap.set(p,u));try{this.keepIntermediateTensors=A().getBool(\"KEEP_INTERMEDIATE_TENSORS\")}catch(m){this.keepIntermediateTensors=!1,console.warn(m.message)}let c={},l={};return De(()=>{let m=new Ml(this.weightMap,c,l,this.functionExecutorMap,this.parseNodeNameCache),d=Object.assign({},this.weightMap);this.keepIntermediateTensors&&(this.clonedTensorsMap=this.cloneTensorMap(this.weightMap)),Object.keys(e).forEach(x=>{let[b,C]=Nr(x,m),S=[];S[C]=e[x],d[b]=S,this.keepIntermediateTensors&&(this.clonedTensorsMap[b]=this.cloneTensorList(S))});let f=this.getFrozenTensorIds(d),{orderedNodes:h,nodeLiveUntilMap:g}=u;for(let x of h){if(d[x.name])continue;let b=MS(x,d,m,this._resourceManager);if(y.isPromise(b))throw new Error(`The execution of the op '${x.op}' returned a promise. Please use model.executeAsync() instead.`);d[x.name]=b,this.keepIntermediateTensors&&(this.clonedTensorsMap[x.name]=this.cloneTensorList(b)),this.checkTensorForDisposalWithNodeLiveUntilInfo(x,d,m,f,a,g.get(x.name))}return this.parent==null&&m.dispose(f),t.map(x=>Bt(x,d,m))})}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){if(!(fu(t)||a.has(e))){for(let p of o[e])p!=null&&(i[p.id]=(i[p.id]||0)+t.children.length);for(let p of t.inputs){if(fu(p))continue;let u=hS(p.name,o,n);if(u!=null)for(let c of u){if(!c||c.kept||s.has(c.id))continue;let l=i[c.id];l===1?(c.dispose(),delete i[c.id]):l!=null&&i[c.id]--}}}}checkTensorForDisposalWithNodeLiveUntilInfo(e,t,o,n,s,a){function i(p){return fu(p)||s.has(p.name)}if(!(fu(e)||a==null))for(let p of a){if(i(p))continue;let u=hS(p.name,t,o);for(let c of u)!c||c.kept||n.has(c.id)||c.dispose()}}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=A().getBool(\"KEEP_INTERMEDIATE_TENSORS\")}catch(m){this.keepIntermediateTensors=!1,console.warn(m.message)}let a=new Ml(this.weightMap,n,s,this.functionExecutorMap,this.parseNodeNameCache);this.keepIntermediateTensors&&(this.clonedTensorsMap=this.cloneTensorMap(this.weightMap));let i=await this.executeWithControlFlow(e,a,t,o),p=t.map(m=>Bt(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(S=>this.graph.nodes[Nr(S)[0]]),i=o.map(S=>Nr(S)[0]),p=new Set(i),u=i.map(S=>this.graph.nodes[S]);u.length===0&&(u=this._outputs);let{usedNodes:c,missingInputs:l,dynamicNode:m,syncInputs:d}=LS(e,u,this.weightMap,this._initNodes),f=[...a,...this.graph.weights,...this._initNodes||[]].map(S=>({node:S,contexts:t.currentContext})),h=Object.assign({},this.weightMap);Object.keys(e).forEach(S=>{let[k,_]=Nr(S),$=[];$[_]=e[S],h[k]=$});let g={},x=this.getFrozenTensorIds(h),b={};for(;f.length>0;){let S=this.processStack(a,f,t,h,b,x,p,g,c);await Promise.all(S)}m==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 C=u.filter(S=>!fu(S)&&!Bt(S.name,h,t)).map(S=>S.name);if(C.length>0){let S=\"\";throw m!=null&&(S=`Alternatively, to avoid the dynamic ops, use model.execute() and specify the inputs [${d}]`),new Error(`Cannot compute the outputs [${C}] from the provided inputs [${s}]. Consider providing the following inputs: [${l}]. ${S}`)}return h}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]=Ls(l.node.name,o)),n[l.node.name]==null){let d=MS(l.node,n,o,this._resourceManager);m||([m]=Ls(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]=Ls(i.name,o);s[p]||!a.has(i.name)||(i.op===\"Merge\"?i.inputNames.some(u=>!!Bt(u,n,o))&&(s[p]=!0,t.push({contexts:o.currentContext,node:i})):i.inputNames.every(u=>!!Bt(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]=Nr(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]=Nr(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]=Nr(t);if(!this.graph.nodes[o])throw new Error(`The output '${t}' is not found in the graph`)})}};var kf=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 P8=\"?tfjs-format=file\",O8=\"model.json\",Bl=class{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}constructor(e,t={},o=di){this.modelUrl=e,this.loadOptions=t,this.version=\"n/a\",this.io=o,t==null&&(this.loadOptions={}),this.resourceManager=new kf}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=>t.getWeightStream==null?this.loadSync(t):this.loadStreaming(t)):this.loadSync(e)}loadSync(e){let t=this.io.decodeWeights(e.weightData,e.weightSpecs);return this.loadWithWeightMap(e,t)}async loadStreaming(e){if(e.getWeightStream==null)throw new Error(\"Model artifacts missing streamWeights function\");let t=await ad(e.getWeightStream(),e.weightSpecs);return this.loadWithWeightMap(e,t)}loadWithWeightMap(e,t){this.artifacts=e;let o=this.artifacts.modelTopology,n=this.artifacts.signature;if(this.artifacts.userDefinedMetadata!=null){let s=this.artifacts.userDefinedMetadata;s.signature!=null&&(n=s.signature),s.structuredOutputKeys!=null&&(this.structuredOutputKeys=s.structuredOutputKeys)}if(this.signature=n,this.version=`${o.versions.producer}.${o.versions.minConsumer}`,this.executor=new Ll(Ol.Instance.transformGraph(o,this.signature)),this.executor.weightMap=this.convertTensorMapToTensorsMap(t),this.executor.resourceManager=this.resourceManager,e.modelInitializer!=null&&e.modelInitializer.node!=null){let s=Ol.Instance.transformGraph(e.modelInitializer);this.initializer=new Ll(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 mt?[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 mt)&&!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&&Ot(this.resourceIdToCapturedInput)),this.resourceManager.dispose()}};async function M8(r,e={},t=di){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=B8(r));let o=new Bl(r,e,t);return await o.load(),o}function L8(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=di.getWeightSpecs(o.weightsManifest),a=di.getModelArtifactsForJSONSync(o,s,n);e=di.fromMemorySync(a)}else if(\"load\"in r)e=r;else if(\"modelTopology\"in r&&\"weightSpecs\"in r&&\"weightData\"in r)e=di.fromMemorySync(r);else throw new Error(\"Unknown model format\");let t=new Bl(e);return t.load(),t}function B8(r){return r.endsWith(\"/\")||(r=r+\"/\"),`${r}${O8}${P8}`}var z8=\"4.17.0\";function Q(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 V8=Vt.whereImpl,xc=class r extends ao{nextDataId(){return r.nextDataId++}constructor(){super(),this.blockSize=48,this.firstUse=!0,this.data=new Bo(this,ur())}write(e,t,o){this.firstUse&&(this.firstUse=!1,A().get(\"IS_NODE\")&&w.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 w.mergeRealAndImagArrays(n,s)}return y.convertBackendValuesAndArrayBuffer(this.data.get(e).values,t)}bufferSync(e){let t=this.readSync(e.dataId);if(e.dtype===\"string\")try{let o=t.map(n=>y.decodeString(n));return me(e.shape,e.dtype,o)}catch(o){throw new Error(\"Failed to decode encoded string bytes into utf-8\")}return me(e.shape,e.dtype,t)}makeOutput(e,t,o){return ur().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){Q([e],\"where\");let t=this.readSync(e.dataId);return V8(e.shape,t)}dispose(){}floatPrecision(){return 32}epsilon(){return super.epsilon()}};xc.nextDataId=0;var Ic={};qe(Ic,{addImpl:()=>VS,bincountImpl:()=>Cc,bincountReduceImpl:()=>Nf,bitwiseAndImpl:()=>WS,castImpl:()=>zS,ceilImpl:()=>US,concatImpl:()=>ap,equalImpl:()=>GS,expImpl:()=>KS,expm1Impl:()=>jS,floorDivImpl:()=>YS,floorImpl:()=>XS,gatherNdImpl:()=>Tf,gatherV2Impl:()=>_f,greaterEqualImpl:()=>ZS,greaterImpl:()=>QS,lessEqualImpl:()=>eI,lessImpl:()=>JS,linSpaceImpl:()=>Ef,logImpl:()=>tI,maxImpl:()=>$f,maximumImpl:()=>rI,minimumImpl:()=>oI,multiplyImpl:()=>zl,negImpl:()=>nI,notEqualImpl:()=>sI,prodImpl:()=>aI,raggedGatherImpl:()=>Rf,raggedRangeImpl:()=>Df,raggedTensorToTensorImpl:()=>Af,rangeImpl:()=>up,rsqrtImpl:()=>uI,scatterImpl:()=>zs,sigmoidImpl:()=>R_,simpleAbsImpl:()=>BS,sliceImpl:()=>pp,sparseFillEmptyRowsImpl:()=>Ff,sparseReshapeImpl:()=>Pf,sparseSegmentReductionImpl:()=>Sc,sqrtImpl:()=>F_,squaredDifferenceImpl:()=>cI,staticRegexReplaceImpl:()=>lI,stridedSliceImpl:()=>Of,stringNGramsImpl:()=>cp,stringSplitImpl:()=>lp,stringToHashBucketFastImpl:()=>mp,subImpl:()=>dI,tileImpl:()=>Mf,topKImpl:()=>Lf,transposeImpl:()=>wc,uniqueImpl:()=>dp});function BS(r){let e=new Float32Array(r.length);for(let t=0;t{let{x:e}=r.inputs,t=r.backend;Q(e,\"abs\");let o=new Float32Array(y.sizeFromShape(e.shape)),n=t.data.get(e.dataId).values;return o=BS(n),t.makeOutput(o,e.shape,e.dtype)},t_={kernelName:Xs,backendName:\"cpu\",kernelFunc:W8};function Ve(r){return(e,t,o,n,s)=>{let a=w.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=w.getBroadcastDims(e,a),g=w.getBroadcastDims(t,a);if(h.length+g.length===0)for(let x=0;xC[$]=0);let S=y.locToIndex(C,l,d),k=b.slice(-m);g.forEach($=>k[$]=0);let _=y.locToIndex(k,m,f);c[x]=r(o[S],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 r_={kernelName:Di,backendName:\"cpu\",kernelFunc:Ht};function yc(r,e,t=\"float32\"){if(t===\"complex64\"){let n=yc(r,e,\"float32\"),s=yc(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 lr(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 o_={kernelName:Co,backendName:\"cpu\",kernelFunc:lr};function $o(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 n_={kernelName:Hi,backendName:\"cpu\",kernelFunc:$o};function zS(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]=Ve((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 Ro(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{dtype:s}=o;if(s===\"complex64\"){if(n.dtype===\"complex64\")return lr({inputs:{x:n},backend:t});let c=yc(t,n.shape,n.dtype),l=Ro({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=$o({inputs:{input:n},backend:t}),l=Ro({inputs:{x:c},backend:t,attrs:{dtype:s}});return t.disposeIntermediateTensorInfo(c),l}if(!y.hasEncodingLoss(n.dtype,s)){let c=lr({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]=zS(a,n.shape,n.dtype,s);return t.makeTensorInfo(i,p,u)}var s_={kernelName:yo,backendName:\"cpu\",kernelFunc:Ro};function Ye(r,e,t,o){return t==null?({inputs:n,backend:s})=>{let{a,b:i}=n,p=s;Q([a,i],r);let u=p.data.get(a.dataId).values,c=p.data.get(i.dataId).values,l=a.dtype===\"string\"?w.fromUint8ToStringArray(u):u,m=a.dtype===\"string\"?w.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=Ro({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=Ro({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,S=p.data.get(b.dataId).values,[k,_,$]=t(a.shape,i.shape,d,f,C,S),R=p.makeTensorInfo($,\"float32\",k),D=p.makeTensorInfo($,\"float32\",_),P=Ht({inputs:{real:R,imag:D},backend:p});return p.disposeIntermediateTensorInfo(u),p.disposeIntermediateTensorInfo(h),p.disposeIntermediateTensorInfo(R),p.disposeIntermediateTensorInfo(D),P}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 bc(r){return(e,t,o,n,s,a)=>{let i=w.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=w.getBroadcastDims(e,i),f=w.getBroadcastDims(t,i),h=w.mergeRealAndImagArrays(o,n),g=w.mergeRealAndImagArrays(s,a),x=e.length,b=y.computeStrides(e),C=t.length,S=y.computeStrides(t);if(d.length+f.length===0)for(let k=0;k$[M]=0);let R=y.locToIndex($,x,b),D=_.slice(-C);f.forEach(M=>D[M]=0);let P=y.locToIndex(D,C,S),O=r(h[R*2],h[R*2+1],g[P*2],g[P*2+1]);l[k]=O.real,m[k]=O.imag}return[l,m,i]}}var VS=Ve((r,e)=>r+e),U8=bc((r,e,t,o)=>({real:r+t,imag:e+o})),Pa=Ye(uo,VS,U8),a_={kernelName:uo,backendName:\"cpu\",kernelFunc:Pa};function Cc(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 Nf(r,e,t,o=!1){let n=r.shape[0],s=r.shape[1],a=me([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}var WS=Ve((r,e)=>r&e),G8=Ye(qa,WS),i_={kernelName:qa,backendName:\"cpu\",kernelFunc:G8};function jt(r){return(e,t,o)=>{let n=y.getArrayFromDType(t,e.length);for(let s=0;s{let{x:a}=o;Q(a,r);let i=s,p=i.data.get(a.dataId).values,u;if(a.dtype===\"string\"){if(!Array.isArray(p))throw new Error(\"String tensor's value was not an instance of Array\");u=w.fromUint8ToStringArray(p)}else u=p;let c=t||a.dtype,l=e(u,c,n);return i.makeTensorInfo(a.shape,c,l)}}var US=jt(r=>Math.ceil(r)),H8=Ar(en,US),u_={kernelName:en,backendName:\"cpu\",kernelFunc:H8};function ap(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\"?w.fromUint8ToStringArray(a.vals):a.vals,p=0;for(let u=0;ur===e?1:0),HS=Ye(xn,GS,null,\"bool\"),p_={kernelName:xn,backendName:\"cpu\",kernelFunc:HS};var KS=jt(r=>Math.exp(r)),qS=Ar(yn,KS,\"float32\"),c_={kernelName:yn,backendName:\"cpu\",kernelFunc:qS};var jS=jt(r=>Math.expm1(r)),K8=Ar(bn,jS),l_={kernelName:bn,backendName:\"cpu\",kernelFunc:K8};var XS=jt(r=>Math.floor(r)),q8=Ar(wn,XS),m_={kernelName:wn,backendName:\"cpu\",kernelFunc:q8};var YS=Ve((r,e)=>Math.floor(r/e)),j8=Ye(Sn,YS,null,\"int32\"),d_={kernelName:Sn,backendName:\"cpu\",kernelFunc:j8};function Tf(r,e,t,o,n,s,a,i,p){let u=me([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),X8=Ye(kn,QS,null,\"bool\"),f_={kernelName:kn,backendName:\"cpu\",kernelFunc:X8};var ZS=Ve((r,e)=>r>=e?1:0),Y8=Ye(Nn,ZS,null,\"bool\"),h_={kernelName:Nn,backendName:\"cpu\",kernelFunc:Y8};var JS=Ve((r,e)=>rr<=e?1:0),Z8=Ye(Dn,eI,null,\"bool\"),x_={kernelName:Dn,backendName:\"cpu\",kernelFunc:Z8};function Ef(r,e,t){let o=(e-r)/(t-1),n=y.makeZerosTypedArray(t,\"float32\");n[0]=r;for(let s=1;sMath.log(r)),J8=Ar(Fn,tI),y_={kernelName:Fn,backendName:\"cpu\",kernelFunc:J8};function $f(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 rI=Ve((r,e)=>Math.max(r,e)),eY=Ye(Vn,rI),b_={kernelName:Vn,backendName:\"cpu\",kernelFunc:eY};var oI=Ve((r,e)=>Math.min(r,e)),tY=Ye(Hn,oI),C_={kernelName:Hn,backendName:\"cpu\",kernelFunc:tY};var zl=Ve((r,e)=>r*e),rY=bc((r,e,t,o)=>({real:r*t-e*o,imag:r*o+e*t})),ip=Ye(Xn,zl,rY),w_={kernelName:Xn,backendName:\"cpu\",kernelFunc:ip};function nI(r,e,t){let o=y.createScalarValue(-1,t);return zl([],e,o,r,t)}function oY(r){let{inputs:e,backend:t}=r,{x:o}=e;Q(o,\"neg\");let n=t.data.get(o.dataId).values,[s,a]=nI(n,o.shape,o.dtype);return t.makeTensorInfo(a,o.dtype,s)}var S_={kernelName:pa,backendName:\"cpu\",kernelFunc:oY};var sI=Ve((r,e)=>r!==e?1:0),nY=Ye(Yn,sI,null,\"bool\"),I_={kernelName:Yn,backendName:\"cpu\",kernelFunc:nY};function wc(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 k_={kernelName:os,backendName:\"cpu\",kernelFunc:sY};function aY(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 iY(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 uY(r,e,t,o){let n=[],s=0,a=e.length-1+t.length,i=new Array(a).fill(null).map(()=>[0]);iY(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 N_(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)S=0;else if(S=Math.ceil(Math.abs((b-x)/C)),S>T_)throw new Error(`Requires ((limit - start) / delta) <= ${T_}`);m[g+1]=m[g]+S}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 Do.VALUE_ROWIDS:return this.calculateOutputIndexValueRowID(s,t,o,n);case Do.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: ${Do[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 Do.FIRST_DIM_SIZE:return e[0];case Do.VALUE_ROWIDS:throw new Error(\"Cannot handle VALUE_ROWIDS in first dimension.\");case Do.ROW_SPLITS:return this.rowPartitionValuesShapes[0][0]-1;default:throw new Error(`Cannot handle type ${Do[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=E_(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;De(()=>{let h=W(c,f);c=su(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);__(g,c,p),++d}h<0?(l=f+1,m=d):(l=f,m=d,d=m+1)}}};function __(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 Af(r,e,t,o,n,s,a,i,p,u){return new iI(r,e,t,o,n,s,a,i,p,u).compute()}function up(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)),mY=Ar(ls,uI),$_={kernelName:ls,backendName:\"cpu\",kernelFunc:mY};function zs(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 me(t,e.dtype);let d=p instanceof tt?p:me(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))),pI=Ie(bs,r=>1/(1+Math.exp(-r))),D_={kernelName:bs,backendName:\"cpu\",kernelFunc:pI};function pp(r,e,t,o,n){let s=pt.isSliceContinous(o,e,t),a=y.sizeFromShape(t),i=y.computeStrides(o);if(s){let l=pt.computeFlatOffset(e,i);return n===\"string\"?r.slice(l,l+a):r.subarray(l,l+a)}let p=n===\"string\"?w.fromUint8ToStringArray(r):r,u=me(o,n,p),c=me(t,n);for(let l=0;lf+e[h]);c.set(u.get(...d),...m)}return n===\"string\"?w.fromStringArrayToUint8(c.values):c.values}function Ao(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{begin:s,size:a}=o;Q(n,\"slice\");let[i,p]=pt.parseSliceParams(n,s,a);pt.assertParamsValid(n,i,p);let u=t.data.get(n.dataId).values,c=pp(u,i,p,n.shape,n.dtype);return t.makeTensorInfo(p,n.dtype,c)}var A_={kernelName:ha,backendName:\"cpu\",kernelFunc:Ao};function Ff(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(w.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(w.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(w.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());let m=e.slice();m[0]=l;let d=m.reduce((C,S)=>C*S,1),f=y.getArrayFromDType(t,d);if(i===0)return l>0&&f.fill(a),[f,m];if(l<=0)throw new Error(w.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());let h=0,g=1,x=0,b=n[h];for(;;){let C=0;if(g=C)throw new Error(w.getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage())}if(b<0||b>=l)throw new Error(w.getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage(b,l));b>x&&f.fill(a,x*u,b*u);for(let S=h;S=p[0])throw new Error(w.getSparseSegmentReductionIndicesOutOfRangeErrorMessage(S,o[S],p[0]));for(let _=0;_i)break}return xMath.sqrt(r)),dY=Ie(ws,r=>Math.sqrt(r)),P_={kernelName:ws,backendName:\"cpu\",kernelFunc:dY};var cI=Ve((r,e)=>{let t=r-e;return t*t}),fY=Ye(ks,cI),O_={kernelName:ks,backendName:\"cpu\",kernelFunc:fY};var lI=jt((r,e)=>{let{pattern:t,replaceGlobal:o,rewrite:n}=e;return r.replace(new RegExp(t,o?\"g\":\"\"),n)}),hY=Ar(Ru,lI),M_={kernelName:Ru,backendName:\"cpu\",kernelFunc:hY};function Of(r,e,t,o){let n=me(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;this.createNGrams(e,u,i,c,1,m)}}return[i,a]}};function cp(r,e,t,o,n,s,a,i){return new mI(t,o,n,s,a,i).compute(r,e)}function gY(r,e,t,o){if(!r.length)return;if(e.length===0){for(let s=0;sr-e),xY=bc((r,e,t,o)=>({real:r-t,imag:e-o})),Vl=Ye(Ts,dI,xY),L_={kernelName:Ts,backendName:\"cpu\",kernelFunc:Vl};function Mf(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 B_(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));B_(r,e,m,d)}let n=r[e],s=t,a=o;for(y.swap(r,t,e),Wl(r[o],n)>0&&y.swap(r,t,o);s0;)a=a-1}Wl(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 Lf(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 xc,1);var fI=Ie(hn,r=>r>=0?r:Math.exp(r)-1),z_={kernelName:hn,backendName:\"cpu\",kernelFunc:fI};function hI(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{alpha:s}=o;Q([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 gI(r){let{inputs:e,backend:t}=r,{x:o,alpha:n}=e;Q([o,n],\"prelu\");let s=t.data.get(o.dataId).values,a=t.data.get(n.dataId).values,[i,p]=bY(o.shape,n.shape,s,a,\"float32\");return t.makeTensorInfo(p,\"float32\",i)}var W_={kernelName:rs,backendName:\"cpu\",kernelFunc:gI};var xI=Ie(ss,r=>Math.max(0,r)),U_={kernelName:ss,backendName:\"cpu\",kernelFunc:xI};var yI=Ie(us,r=>Math.min(Math.max(0,r),6)),G_={kernelName:us,backendName:\"cpu\",kernelFunc:yI};function fp(r,e,t,o,n){if(t===\"linear\")return lr({inputs:{x:e},backend:r});if(t===\"relu\")return xI({inputs:{x:e},backend:r});if(t===\"elu\")return fI({inputs:{x:e},backend:r});if(t===\"relu6\")return yI({inputs:{x:e},backend:r});if(t===\"prelu\")return gI({inputs:{x:e,alpha:o},backend:r});if(t===\"leakyrelu\")return hI({inputs:{x:e},backend:r,attrs:{alpha:n}});if(t===\"sigmoid\")return pI({inputs:{x:e},backend:r});throw new Error(`Activation ${t} has not been implemented for the CPU backend.`)}function We(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 H_={kernelName:da,backendName:\"cpu\",kernelFunc:We};function bI(r){let{inputs:e,backend:t,attrs:o}=r,{a:n,b:s}=e,{transposeA:a,transposeB:i}=o;Q([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=Sr.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 S=a?[g,c,m]:[g,m,c],k=i?[x,d,l]:[x,l,d],_=We({inputs:{x:n},backend:t,attrs:{shape:S}}),$=We({inputs:{x:s},backend:t,attrs:{shape:k}}),R=a?_.shape[1]:_.shape[2],D=a?_.shape[2]:_.shape[1],P=i?$.shape[1]:$.shape[2],O=Math.max(g,x),M=t.data.get(_.dataId).values,L=t.data.get($.dataId).values,B=y.computeStrides(_.shape),z=y.computeStrides($.shape),[U,j,q]=a?[B[0],1,B[1]]:[B[0],B[1],1],[Y,J,re]=i?[1,z[1],z[0]]:[z[1],1,z[0]],ne=D*P,ee=me([O,D,P],_.dtype),oe=ee.values,ie=t.blockSize;for(let le=0;leMath.acos(r)),j_={kernelName:Vo,backendName:\"cpu\",kernelFunc:wY};var SY=Ie(Wo,r=>Math.acosh(r)),X_={kernelName:Wo,backendName:\"cpu\",kernelFunc:SY};function IY(r){let{inputs:e,backend:t}=r,o=e;Q(e,\"addN\");let n=o.map(i=>t.data.get(i.dataId).values),s=me(o[0].shape,o[0].dtype),a=s.values;for(let i=0;ib&&(b=k,C=S)}d[g]=C}return u.forEach(g=>t.disposeIntermediateTensorInfo(g)),t.makeTensorInfo(c,\"int32\",d)}var J_={kernelName:Ys,backendName:\"cpu\",kernelFunc:NY};function TY(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s}=o;Q(n,\"argMin\");let a=y.parseAxisParam(s,n.shape),i=w.getAxesPermutation(a,n.shape.length),p=n,u=[];i!=null&&(p=St({inputs:{x:n},backend:t,attrs:{perm:i}}),u.push(p),a=w.getInnerMostAxes(a.length,p.shape.length)),a=[a[0]],w.assertAxesAreInnerMostDims(\"argMin\",a,p.shape.length);let[c,l]=w.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 eE={kernelName:Qs,backendName:\"cpu\",kernelFunc:TY};var _Y=Ie(Ko,r=>Math.asin(r)),tE={kernelName:Ko,backendName:\"cpu\",kernelFunc:_Y};var EY=Ie(qo,r=>Math.asinh(r)),rE={kernelName:qo,backendName:\"cpu\",kernelFunc:EY};var $Y=Ie(jo,r=>Math.atan(r)),oE={kernelName:jo,backendName:\"cpu\",kernelFunc:$Y};var RY=Ve((r,e)=>Math.atan2(r,e)),DY=Ye(Yo,RY),nE={kernelName:Yo,backendName:\"cpu\",kernelFunc:DY};var AY=Ie(Xo,r=>Math.atanh(r)),sE={kernelName:Xo,backendName:\"cpu\",kernelFunc:AY};function vc(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=me(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 S=0;Sj?j=ie:s===\"avg\"&&(q+=ie,Y++)}if(isNaN(j))break}let J=M+L*C+$;g[J]=s===\"avg\"?q/Y:j}}}return h}function Bf(r,e,t,o,n=!1,s=!1){let a=me(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=me(e,t,r);for(let g=0;gP&&(P=U,n?O=s?((g*o.inHeight+M)*o.inWidth+B)*o.inChannels+x:(M*o.inWidth+B)*o.inChannels+x:O=L*m+z)}}a.set(O,g,b,_,x)}}return a}function zf(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=me(n.outShape,t),S=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],R=n.outShape[4];for(let D=0;D_e?_e=gt:s===\"avg\"&&(ve+=gt,Fe++),isNaN(_e))break}if(isNaN(_e))break}if(isNaN(_e))break}let Pe=be+M;S[Pe]=s===\"avg\"?ve/Math.max(Fe,1):_e}}}}return C}function aE(r,e){let t=me(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=re,B=U*c*l+q*c+J)}}}t.set(B,h,x,k,D,g)}}}return t}function FY(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e;Q(n,\"avgPool\");let{filterSize:s,strides:a,pad:i,dimRoundingMode:p}=o,u=1;y.assert(w.eitherStridesOrDilationsAreOne(a,u),()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${u}'`);let c=w.computePool2DInfo(n.shape,s,a,u,i,p),l;if(c.filterWidth===1&&c.filterHeight===1&&y.arraysEqual(c.inShape,c.outShape))l=lr({inputs:{x:n},backend:t});else{let m=t.data.get(n.dataId).values,d=y.computeStrides(n.shape),f=vc(m,n.shape,n.dtype,d,c,\"avg\");l=t.makeTensorInfo(c.outShape,n.dtype,f.values)}return l}var iE={kernelName:Qo,backendName:\"cpu\",kernelFunc:FY};function PY(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{filterSize:s,strides:a,pad:i,dimRoundingMode:p,dataFormat:u}=o;Q(n,\"avgPool3d\");let c=w.computePool3DInfo(n.shape,s,a,1,i,p,u),l=t.data.get(n.dataId).values,m=zf(l,n.shape,n.dtype,y.computeStrides(n.shape),c,\"avg\");return t.makeTensorInfo(m.shape,\"float32\",m.values)}var uE={kernelName:Zs,backendName:\"cpu\",kernelFunc:PY};function OY(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s}=e,{filterSize:a,strides:i,pad:p,dimRoundingMode:u}=o;Q([n,s],\"avgPool3DGrad\");let c=w.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,S=c.effectiveFilterDepth,k=c.effectiveFilterHeight,_=c.effectiveFilterWidth,$=S-1-c.padInfo.front,R=_-1-c.padInfo.left,D=k-1-c.padInfo.top,P=me(s.shape,\"float32\"),O=1/(f*h*g),M=t.bufferSync(n);for(let L=0;L=c.outDepth||Math.floor(ee)!==ee))for(let oe=0;oe=c.outHeight||Math.floor(ie)!==ie))for(let le=0;le<_;le+=C){let be=(J+le)/d;if(be<0||be>=c.outWidth||Math.floor(be)!==be)continue;let _e=M.get(L,ee,ie,be,B);re+=_e}}}P.set(re*O,L,z,U,j,B)}return t.makeTensorInfo(P.shape,P.dtype,P.values)}var pE={kernelName:Ri,backendName:\"cpu\",kernelFunc:OY};function MY(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s}=e,a=s;Q([n,s],\"avgPoolGrad\");let{filterSize:i,strides:p,pad:u}=o,c=w.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,S=x-1-c.padInfo.top,k=me(a.shape,\"float32\"),_=1/(d*f),$=t.data.get(n.dataId).values,R=me(n.shape,\"float32\",$);for(let D=0;D=c.outHeight||Math.floor(j)!==j))for(let q=0;q=c.outWidth||Math.floor(Y)!==Y)continue;let J=R.get(D,j,Y,P);z+=J}}k.set(z*_,D,O,M,P)}return t.makeTensorInfo(k.shape,k.dtype,k.values)}var cE={kernelName:$i,backendName:\"cpu\",kernelFunc:MY};function LY(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.\"),Q([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,S=0,k=0,_=0,$=0;for(let R=0;R=g&&(S=0),k>=C&&(k=0),_>=x&&(_=0),$>=b&&($=0);return t.makeTensorInfo(n.shape,n.dtype,h)}var lE={kernelName:In,backendName:\"cpu\",kernelFunc:LY};function BY(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{blockShape:s,crops:a}=o;Q([n],\"batchToSpaceND\");let i=s.reduce((x,b)=>x*b),p=w.getReshaped(n.shape,s,i),u=w.getPermuted(p.length,s.length),c=w.getReshapedPermuted(n.shape,s,i),l=w.getSliceBeginCoords(a,s.length),m=w.getSliceSize(c,a,s.length),d=We({inputs:{x:n},backend:t,attrs:{shape:p}}),f=St({inputs:{x:d},backend:t,attrs:{perm:u}}),h=We({inputs:{x:f},backend:t,attrs:{shape:c}}),g=Ao({inputs:{x:h},backend:t,attrs:{begin:l,size:m}});return t.disposeIntermediateTensorInfo(d),t.disposeIntermediateTensorInfo(f),t.disposeIntermediateTensorInfo(h),g}var mE={kernelName:Js,backendName:\"cpu\",kernelFunc:BY};function zY(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=Cc(i,p,s.dtype,s.shape,a);return t.makeTensorInfo([a],s.dtype,u)}var dE={kernelName:Jo,backendName:\"cpu\",kernelFunc:zY};function VY(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=w.assertAndGetBroadcastShape(Array.from(s),Array.from(a));return t.makeTensorInfo([i.length],\"int32\",Int32Array.from(i))}var fE={kernelName:ea,backendName:\"cpu\",kernelFunc:VY};var WY=Ie(bo,(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);w.assertParamsConsistent(a,s);let i=w.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 lr({inputs:{x:p[0]},backend:t});if(p[0].dtype===\"complex64\"){let h=p.map(S=>$o({inputs:{input:S},backend:t})),g=p.map(S=>Oa({inputs:{input:S},backend:t})),x=hu({inputs:h,backend:t,attrs:{axis:s}}),b=hu({inputs:g,backend:t,attrs:{axis:s}}),C=Ht({inputs:{real:x,imag:b},backend:t});return h.forEach(S=>t.disposeIntermediateTensorInfo(S)),g.forEach(S=>t.disposeIntermediateTensorInfo(S)),t.disposeIntermediateTensorInfo(x),t.disposeIntermediateTensorInfo(b),C}let u=p.map(h=>{let x=[-1,y.sizeFromShape(h.shape.slice(s))];return We({inputs:{x:h},backend:t,attrs:{shape:x}})}),c=u.map(h=>({vals:t.data.get(h.dataId).values,shape:h.shape}));i=w.computeOutShape(u.map(h=>h.shape),1);let l=u[0].shape[0]===1,m=ap(c,i,e[0].dtype,l),d=w.computeOutShape(p.map(h=>h.shape),s),f=t.makeTensorInfo(d,e[0].dtype,m);return u.forEach(h=>t.disposeIntermediateTensorInfo(h)),f}var yE={kernelName:ta,backendName:\"cpu\",kernelFunc:hu};function CI(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;Q([n,s],\"conv2d\");let l=w.convertConv2DDataFormat(p),m=w.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\",S=new tt(m.outShape,n.dtype),k=y.computeStrides(n.shape),_=y.computeStrides(s.shape),$=k[0],R=C?k[1]:k[2],D=C?k[2]:1,P=C?1:k[1],O=S.strides[0],M=C?S.strides[1]:S.strides[2],L=C?S.strides[2]:1,B=C?1:S.strides[1],z=t.data.get(n.dataId).values,U=t.data.get(s.dataId).values,j=S.values;for(let q=0;q=m.inHeight)continue;let le=oe*_[0],be=Y+ie*R;for(let _e=0;_e=m.inWidth)continue;let ct=le+Pe*_[1],He=be+st*D,lt=ct;for(let it=0;it=u.inDepth)continue;let q=U*D[0],Y=O+j*R[1];for(let J=0;J=u.inHeight)continue;let ie=q+ee*D[1],le=Y+oe*R[2];for(let be=0;be=u.inWidth)continue;let st=ie+Fe*D[2],ct=le+Pe*u.inChannels,He=st;for(let lt=0;ltMath.cos(r)),kE={kernelName:sn,backendName:\"cpu\",kernelFunc:XY};var YY=Ie(an,r=>Math.cosh(r)),NE={kernelName:an,backendName:\"cpu\",kernelFunc:YY};function QY(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=me([f,h,g,d],\"float32\"),b=t.data.get(s.dataId).values,C=t.data.get(a.dataId).values,S=t.data.get(n.dataId).values,k=y.computeStrides(n.shape),_=y.computeStrides(x.shape);for(let $=0;$=c)continue;let B=h>1?(O-D)*(l-1)/(h-1):0,z=g>1?(M-P)*(m-1)/(g-1):0;for(let U=0;U1?D*(l-1)+U*B:.5*(D+O)*(l-1);if(j<0||j>l-1){for(let q=0;q1?P*(m-1)+re*z:.5*(P+M)*(m-1);if(ne<0||ne>m-1){for(let le=0;le1?P*(m-1)+q*z:.5*(P+M)*(m-1);if(Y<0||Y>m-1){for(let ne=0;nex+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=w.computeConv2DInfo(n.shape,s.shape,a,m,i,u,!0),{filterHeight:f,filterWidth:h,dilationHeight:g,dilationWidth:x,padInfo:b}=d,C=b.left,S=b.top,k=d.outChannels/d.inChannels,_=new tt(d.outShape,n.dtype),$=t.data.get(n.dataId).values,R=t.data.get(s.dataId).values,D=_.values;for(let P=0;P=d.inHeight)continue;let q=U*l[0],Y=O+j*c[1];for(let J=0;J=d.inWidth)continue;let ie=q+ee*l[1],le=Y+oe*d.inChannels,be=re,_e=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:S,strideWidth:k,filterHeight:_,filterWidth:$,dilationHeight:R,dilationWidth:D,outShape:P}=w.computeDilation2DInfo(o.shape,n.shape,s,a,\"NHWC\",i),O=y.sizeFromShape(P),M=P.length,L=y.getArrayFromDType(o.dtype,O);for(let z=0;z=0&&oe=0&&lere&&(re=ve)}}}let ne=y.locToIndex([z,U,q,J],M,y.computeStrides(P));L[ne]=re}}}return{dataId:p.write(y.toTypedArray(L,o.dtype),P,o.dtype),shape:P,dtype:o.dtype}}};var ME={kernelName:Li,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:S,filterHeight:k,filterWidth:_,dilationHeight:$,dilationWidth:R,outShape:D}=w.computeDilation2DInfo(o.shape,n.shape,a,i,\"NHWC\",p);y.assert(s.rank===D.length,()=>`Error in ${Li}, dy must have the same rank as output ${D.length}, but got ${s.rank}`);let P=y.toNestedArray(D,u.data.get(s.dataId).values),O=y.makeZerosNestedTypedArray(n.shape,n.dtype);for(let L=0;L=0&&ee=0&&ieY&&(Y=le,J=ne,re=oe)}}}O[J][re][q]+=P[L][B][U][q]}}}return{dataId:u.write(y.toTypedArray(O,o.dtype),n.shape,n.dtype),shape:n.shape,dtype:n.dtype}}};var LE={kernelName:Mi,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:S,filterHeight:k,filterWidth:_,dilationHeight:$,dilationWidth:R,outShape:D}=w.computeDilation2DInfo(o.shape,n.shape,a,i,\"NHWC\",p);y.assert(s.rank===D.length,()=>`Error in ${Mi}, dy must have the same rank as output ${D.length}, but got ${s.rank}`);let P=y.toNestedArray(D,u.data.get(s.dataId).values),O=y.makeZerosNestedTypedArray(o.shape,o.dtype);for(let L=0;L=0&&ee=0&&ieY&&(Y=le,J=ee,re=ie)}}}O[L][J][re][q]+=P[L][B][U][q]}}}return{dataId:u.write(y.toTypedArray(O,o.dtype),o.shape,o.dtype),shape:o.shape,dtype:o.dtype}}};function s7(r){let{inputs:e,backend:t,attrs:o}=r,{image:n}=e,{canvas:s,options:a}=o,{contextOptions:i,imageOptions:p}=a||{},u=(p==null?void 0:p.alpha)||1,c=(i==null?void 0:i.contextType)||\"2d\";if(c!==\"2d\")throw new Error(`Context type ${i.contextType} is not supported by the CPU backend.`);let l=s.getContext(c,(i==null?void 0:i.contextAttributes)||{});if(l==null)throw new Error(`Could not get the context with ${c} type.`);let[m,d]=n.shape.slice(0,2),f=n.shape.length===2?1:n.shape[2],h=t.data.get(n.dataId).values,g=n.dtype===\"float32\"?255:1,x=new Uint8ClampedArray(d*m*4);for(let C=0;C1)throw new Error(`Tensor values for a float32 Tensor must be in the range [0 - 1] but encountered ${$}.`)}else if(n.dtype===\"int32\"&&($<0||$>255))throw new Error(`Tensor values for a int32 Tensor must be in the range [0 - 255] but encountered ${$}.`);f===1?(S[0]=$*g,S[1]=$*g,S[2]=$*g):S[_]=$*g}let k=C*4;x[k+0]=Math.round(S[0]),x[k+1]=Math.round(S[1]),x[k+2]=Math.round(S[2]),x[k+3]=Math.round(S[3])}s.width=d,s.height=m;let b=new ImageData(x,d,m);return l.putImageData(b,0,0),n}var BE={kernelName:$u,backendName:\"cpu\",kernelFunc:s7};function fi(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o;Q(n,\"sum\");let i;n.dtype===\"bool\"?i=Ro({inputs:{x:n},backend:t,attrs:{dtype:\"int32\"}}):i=lr({inputs:{x:n},backend:t});let p=i.shape.length,u=y.parseAxisParam(s,i.shape),c=w.getAxesPermutation(u,p),l=u,m=i;c!=null&&(m=St({inputs:{x:i},backend:t,attrs:{perm:c}}),l=w.getInnerMostAxes(l.length,p)),w.assertAxesAreInnerMostDims(\"sum\",l,m.shape.length);let[d,f]=w.computeOutAndReduceShapes(m.shape,l),h=w.upcastType(m.dtype,\"int32\"),g=yc(t,d,h),x=y.sizeFromShape(f),b=t.data.get(g.dataId).values,C=t.data.get(m.dataId).values;for(let S=0;S=0&&(m=fi({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 VE={kernelName:Bi,backendName:\"cpu\",kernelFunc:a7};function i7(r){let{inputs:e,backend:t}=r,{dy:o,y:n}=e;Q([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=0?s[p]=i[p]:s[p]=i[p]*(u+1)}return t.makeTensorInfo(n.shape,\"float32\",s)}var WE={kernelName:Xa,backendName:\"cpu\",kernelFunc:i7};var u7=w.ERF_P,p7=w.ERF_A1,c7=w.ERF_A2,l7=w.ERF_A3,m7=w.ERF_A4,d7=w.ERF_A5,f7=Ie(gn,r=>{let e=Math.sign(r),t=Math.abs(r),o=1/(1+u7*t);return e*(1-((((d7*o+m7)*o+l7)*o+c7)*o+p7)*o*Math.exp(-t*t))}),UE={kernelName:gn,backendName:\"cpu\",kernelFunc:f7};function kc(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),We({inputs:{x:n},backend:t,attrs:{shape:i}})}var GE={kernelName:na,backendName:\"cpu\",kernelFunc:kc};var h7=Ve((r,e)=>r/e),Ul=Ye(fn,h7),Gl={kernelName:fn,backendName:\"cpu\",kernelFunc:Ul};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&&C=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=w.segment_util.collectGatherOpShapeInfo(n,s,p,l),f=We({inputs:{x:n},backend:t,attrs:{shape:[d.batchSize,d.outerSize,d.dimSize,d.sliceSize]}}),h=We({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=_f(b,x,g);return t.disposeIntermediateTensorInfo(f),t.disposeIntermediateTensorInfo(h),t.makeTensorInfo(d.outputShape,C.dtype,C.values)}var QE={kernelName:aa,backendName:\"cpu\",kernelFunc:v7};function k7(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=We({inputs:{x:o},backend:t,attrs:{shape:[a,s]}}),p=Vf(i,!0,t),u=We({inputs:{x:p},backend:t,attrs:{shape:o.shape}});return t.disposeIntermediateTensorInfo(i),t.disposeIntermediateTensorInfo(p),u}var ZE={kernelName:Vi,backendName:\"cpu\",kernelFunc:k7};var N7=Ie(Tn,r=>Number.isFinite(r)?1:0,\"bool\"),JE={kernelName:Tn,backendName:\"cpu\",kernelFunc:N7};var T7=Ie(_n,r=>Math.abs(r)===1/0?1:0,\"bool\"),e$={kernelName:_n,backendName:\"cpu\",kernelFunc:T7};var _7=Ie(En,r=>Number.isNaN(r)?1:0,\"bool\"),t$={kernelName:En,backendName:\"cpu\",kernelFunc:_7};function E7(r){let{backend:e,attrs:t}=r,{start:o,stop:n,num:s}=t,a=Ef(o,n,s);return e.makeTensorInfo([a.length],\"float32\",a)}var r$={kernelName:An,backendName:\"cpu\",kernelFunc:E7};var $7=Ie(Pn,r=>Math.log1p(r)),o$={kernelName:Pn,backendName:\"cpu\",kernelFunc:$7};var R7=Ve((r,e)=>r&&e),D7=Ye(On,R7,null,\"bool\"),n$={kernelName:On,backendName:\"cpu\",kernelFunc:D7};var A7=Ie(Mn,r=>r?0:1,\"bool\"),s$={kernelName:Mn,backendName:\"cpu\",kernelFunc:A7};var F7=Ve((r,e)=>r||e),P7=Ye(Ln,F7,null,\"bool\"),a$={kernelName:Ln,backendName:\"cpu\",kernelFunc:P7};function O7(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{depthRadius:s,bias:a,alpha:i,beta:p}=o;Q(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 S=l[x];C+=S*S}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=w.computePool2DInfo(n.shape,s,a,u,i,p),l;if(c.filterWidth===1&&c.filterHeight===1&&y.arraysEqual(c.inShape,c.outShape))l=lr({inputs:{x:n},backend:t});else{let m=t.data.get(n.dataId).values,d=y.computeStrides(n.shape),f=vc(m,n.shape,n.dtype,d,c,\"max\");l=t.makeTensorInfo(c.outShape,n.dtype,f.values)}return l}var c$={kernelName:Wn,backendName:\"cpu\",kernelFunc:L7};function B7(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{filterSize:s,strides:a,pad:i,dimRoundingMode:p,dataFormat:u}=o;Q(n,\"maxPool3d\");let c=w.computePool3DInfo(n.shape,s,a,1,i,p,u),l=t.data.get(n.dataId).values,m=zf(l,n.shape,n.dtype,y.computeStrides(n.shape),c,\"max\");return t.makeTensorInfo(m.shape,\"float32\",m.values)}var l$={kernelName:ia,backendName:\"cpu\",kernelFunc:B7};function z7(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s}=e,{filterSize:a,strides:i,pad:p,dimRoundingMode:u}=o;Q([n,s],\"maxPool3DGrad\");let c=w.computePool3DInfo(s.shape,a,i,1,p,u),l=t.bufferSync(s),m=aE(l,c),d=c.strideDepth,f=c.strideHeight,h=c.strideWidth,g=c.dilationDepth,x=c.dilationHeight,b=c.dilationWidth,C=c.effectiveFilterDepth,S=c.effectiveFilterHeight,k=c.effectiveFilterWidth,_=C-1-c.padInfo.front,$=k-1-c.padInfo.left,R=S-1-c.padInfo.top,D=me(s.shape,\"float32\"),P=t.bufferSync(n);for(let O=0;O=c.outDepth||Math.floor(re)!==re))for(let ne=0;ne=c.outHeight||Math.floor(ee)!==ee))for(let oe=0;oe=c.outWidth||Math.floor(ie)!==ie)continue;let le=C*S*k-1-m.get(O,re,ee,ie,M),be=J*S*k+ne*k+oe,_e=le===be?1:0;if(_e===0)continue;let ve=P.get(O,re,ee,ie,M);Y+=ve*_e}}}D.set(Y,O,L,B,z,M)}return t.makeTensorInfo(D.shape,D.dtype,D.values)}var m$={kernelName:Gi,backendName:\"cpu\",kernelFunc:z7};function V7(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s,output:a}=e,i=s;Q([s,a],\"maxPoolGrad\");let{filterSize:p,strides:u,pad:c,dimRoundingMode:l}=o,m=w.computePool2DInfo(i.shape,p,u,1,c,l),d=t.data.get(i.dataId).values,f=me(m.outShape,i.dtype,Bf(d,i.shape,i.dtype,m).values),h=m.strideHeight,g=m.strideWidth,x=m.dilationHeight,b=m.dilationWidth,C=m.effectiveFilterHeight,S=m.effectiveFilterWidth,k=S-1-m.padInfo.left,_=C-1-m.padInfo.top,$=me(i.shape,\"float32\"),R=t.data.get(n.dataId).values,D=me(n.shape,\"float32\",R);for(let P=0;P=m.outHeight||Math.floor(q)!==q))for(let Y=0;Y=m.outWidth||Math.floor(J)!==J)continue;let re=C*S-1-f.get(P,q,J,O),ne=j*S+Y,ee=re===ne?1:0;if(ee===0)continue;let oe=D.get(P,q,J,O);U+=oe*ee}}$.set(U,P,M,L,O)}return t.makeTensorInfo($.shape,$.dtype,$.values)}var d$={kernelName:Ui,backendName:\"cpu\",kernelFunc:V7};function f$(r,e,t,o,n){let s=y.computeStrides(e),a=vc(r,e,t,s,n,\"max\"),i=Bf(r,e,t,n,!0,o);return[a.values,i.values]}var h$={kernelName:ua,backendName:\"cpu\",kernelFunc:({inputs:r,attrs:e,backend:t})=>{let{x:o}=r,{filterSize:n,strides:s,pad:a,includeBatchInIndex:i}=e,p=t;Q(o,\"MaxPoolWithArgmax\");let u=p.data.get(o.dataId).values,c=w.computePool2DInfo(o.shape,n,s,[1,1],a),[l,m]=f$(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 W7(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o,i=y.parseAxisParam(s,n.shape),u=w.computeOutAndReduceShapes(n.shape,i)[1],c=y.sizeFromShape(u),l=[],m=t.makeTensorInfo([],\"float32\",new Float32Array([c]));l.push(m);let d=Ro({inputs:{x:n},backend:t,attrs:{dtype:\"float32\"}});l.push(d);let f=Ul({inputs:{a:d,b:m},backend:t});l.push(f);let h=fi({inputs:{x:f},backend:t,attrs:{axis:s,keepDims:a}});return l.forEach(g=>t.disposeIntermediateTensorInfo(g)),h}var g$={kernelName:Un,backendName:\"cpu\",kernelFunc:W7};function U7(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o;Q(n,\"min\");let i=y.parseAxisParam(s,n.shape),p=i,u=w.getAxesPermutation(p,n.shape.length),c=n;u!=null&&(c=St({inputs:{x:n},backend:t,attrs:{perm:u}}),p=w.getInnerMostAxes(p.length,n.shape.length)),w.assertAxesAreInnerMostDims(\"min\",p,c.shape.length);let[l,m]=w.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[S]+C[1]),p=s.map(C=>C[0]),u=s.map((C,S)=>C[0]+n.shape[S]),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[_]&&(S[_]=(u[_]-1)*2-S[_]+c);S=S.map((_,$)=>_-p[$]);let k=y.locToIndex(S,m,d);x[C]=l[k]}return{dataId:t.write(x,i,n.dtype),shape:i,dtype:n.dtype}}var y$={kernelName:Kn,backendName:\"cpu\",kernelFunc:G7};var H7=Ve((r,e)=>{let t=r%e;return r<0&&e<0||r>=0&&e>=0?t:(t+e)%e}),K7=Ye(qn,H7),b$={kernelName:qn,backendName:\"cpu\",kernelFunc:K7};var w$=zp(jw());function vI(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=II({inputs:{x:n},backend:t,attrs:{reductionIndices:p,keepDims:!1}}),c=w.expandShapeToKeepDim(u.shape,p),l=We({inputs:{x:u},backend:t,attrs:{shape:c}}),m=Vl({inputs:{a:n,b:l},backend:t}),d=qS({inputs:{x:m},backend:t}),f=fi({inputs:{x:d},backend:t,attrs:{axis:p,keepDims:!1}}),h=We({inputs:{x:f},backend:t,attrs:{shape:c}}),g=Ul({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 C$={kernelName:Is,backendName:\"cpu\",kernelFunc:vI};function q7(r){let{inputs:e,backend:t,attrs:o}=r,{logits:n}=e,{numSamples:s,seed:a,normalized:i}=o;Q(n,\"multinomial\");let p=i?n:vI({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=kc({inputs:{input:c},backend:t,attrs:{dim:n}});return i.push(l),l}),u=hu({inputs:p,backend:t,attrs:{axis:n}});return i.forEach(c=>t.disposeIntermediateTensorInfo(c)),u}var $$={kernelName:la,backendName:\"cpu\",kernelFunc:kI};function tQ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{paddings:s,constantValue:a}=o;Q(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(S,f,h);g[k]=u[b]}return{dataId:t.write(g,i,n.dtype),shape:i,dtype:n.dtype}}var Wf={kernelName:es,backendName:\"cpu\",kernelFunc:tQ};var rQ=Ve((r,e)=>Math.pow(r,e)),oQ=Ye(ts,rQ),R$={kernelName:ts,backendName:\"cpu\",kernelFunc:oQ};function nQ(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]=Rf(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 D$={kernelName:Hp,backendName:\"cpu\",kernelFunc:nQ};function sQ(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]=Df(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 A$={kernelName:Kp,backendName:\"cpu\",kernelFunc:sQ};function aQ(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]=Af(u,n.shape,c,s.shape,s.dtype,l,a.shape,m,d,p);return t.makeTensorInfo(f,s.dtype,h)}var F$={kernelName:qp,backendName:\"cpu\",kernelFunc:aQ};function iQ(r){let{backend:e,attrs:t}=r,{start:o,stop:n,dtype:s,step:a}=t,i=up(o,n,a,s);return e.makeTensorInfo([i.length],s,i)}var P$={kernelName:ma,backendName:\"cpu\",kernelFunc:iQ};var uQ=Ie(ns,r=>1/r),O$={kernelName:ns,backendName:\"cpu\",kernelFunc:uQ};function pQ(r){let{inputs:e,backend:t,attrs:o}=r,{images:n}=e,{alignCorners:s,halfPixelCenters:a,size:i}=o;Q(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,S=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,S=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],S=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],S=x[1]/b[1],k=1/C,_=1/S,$=Math.ceil(k)*2+2,R=Math.ceil(_)*2+2;for(let D=0;D=d)continue;let ee=P+ne*p[1],oe=ne*C,ie=Math.min(c-1,a?Math.round(oe):Math.floor(oe));if(O===ie)for(let le=0;le=f)continue;let _e=ee+be*p[2],ve=be*S,Fe=Math.min(l-1,a?Math.round(ve):Math.floor(ve));z===Fe&&(J+=g[_e+Y])}}h[U+Y]=J}}}}return t.makeTensorInfo(n.shape,n.dtype,h)}var z$={kernelName:Za,backendName:\"cpu\",kernelFunc:mQ};function dQ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{dims:s}=o;Q(n,\"reverse\");let a=n.shape.length,i=y.parseAxisParam(s,n.shape);if(a===0)return lr({inputs:{x:n},backend:t});let p=new tt(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 V$={kernelName:ps,backendName:\"cpu\",kernelFunc:dQ};var W$={kernelName:Ds,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]=w.getImageCenter(a,c,l),h=255,g=Math.sin(n),x=Math.cos(n),b=i.data.get(o.dataId).values;for(let S=0;S=0&&B=0&&z{let e=Math.floor(r);return r-e<.5?Math.floor(r):r-e>.5?Math.ceil(r):e%2===0?e:e+1}),U$={kernelName:cs,backendName:\"cpu\",kernelFunc:fQ};function hQ(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}=w.calculateShapes(s,n,a),m=!0,d=t.bufferSync(n),f=t.bufferSync(s),h=zs(d,f,a,l,u,p,i,c,0,m);return t.makeTensorInfo(a,h.dtype,h.values)}var G$={kernelName:ms,backendName:\"cpu\",kernelFunc:hQ};function gQ(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?wQ*r:CQ*(Math.exp(r)-1)),j$={kernelName:hs,backendName:\"cpu\",kernelFunc:SQ};var IQ=Ie(ys,r=>r<0?-1:r>0?1:0),X$={kernelName:ys,backendName:\"cpu\",kernelFunc:IQ};var vQ=Ie(gs,r=>Math.sin(r)),Y$={kernelName:gs,backendName:\"cpu\",kernelFunc:vQ};var kQ=Ie(xs,r=>Math.sinh(r)),Q$={kernelName:xs,backendName:\"cpu\",kernelFunc:kQ};var NQ=11920928955078125e-23,Z$=Math.log(NQ)+2,TQ=Ie(Cs,r=>{let e=r>-Z$,t=rNumber(g)))),t.makeTensorInfo([h.length],o.dtype,new Int32Array(h))]}var tR={kernelName:Ki,backendName:\"cpu\",kernelFunc:EQ};function $Q(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]=Pf(i,o.shape,o.dtype,a,p);return[t.makeTensorInfo(c,o.dtype,u),t.makeTensorInfo([l.length],s.dtype,new Int32Array(l))]}var rR={kernelName:ei,backendName:\"cpu\",kernelFunc:$Q};function RQ(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]=Sc(a,o.shape,o.dtype,i,p,!0);return t.makeTensorInfo(c,o.dtype,u)}var oR={kernelName:ya,backendName:\"cpu\",kernelFunc:RQ};function DQ(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]=Sc(a,o.shape,o.dtype,i,p);return t.makeTensorInfo(c,o.dtype,u)}var nR={kernelName:ba,backendName:\"cpu\",kernelFunc:DQ};function AQ(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}=w.calculateShapes(s,n,i),d=!1,f=t.bufferSync(n),h;switch(s.dtype){case\"bool\":{let g=t.bufferSync(s),x=!!t.data.get(a.dataId).values[0];h=zs(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=zs(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=zs(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=zs(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 sR={kernelName:vs,backendName:\"cpu\",kernelFunc:AQ};function FQ(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=w.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=Ao({inputs:{x:n},backend:t,attrs:{begin:u,size:m}});return u[i]+=l,d})}var aR={kernelName:xa,backendName:\"cpu\",kernelFunc:FQ};var iR={kernelName:qi,backendName:\"cpu\",kernelFunc:({inputs:r,backend:e})=>{let{x:t}=r,o=e;Q(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}),uR={kernelName:wo,backendName:\"cpu\",kernelFunc:PQ};function OQ(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;Q(n,\"stridedSlice\");let{finalShapeSparse:d,finalShape:f,isIdentity:h,sliceDim0:g,isSimpleSlice:x,begin:b,end:C,strides:S}=pt.sliceInfo(n.shape,s,a,i,p,u,c,l,m),k;if(h)k=We({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 _=pt.computeOutShape(b,C,S),$=Ao({inputs:{x:n},backend:t,attrs:{begin:b,size:_}});k=We({inputs:{x:$},backend:t,attrs:{shape:f}}),t.disposeIntermediateTensorInfo($)}else{let _=t.bufferSync(n),$=Of(d,_,S,b);k=t.makeTensorInfo(f,$.dtype,$.values)}return k}var pR={kernelName:Ns,backendName:\"cpu\",kernelFunc:OQ};function MQ(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]=cp(m,d,n,s,a,i,p,u);return[t.makeTensorInfo([f.length],\"string\",f),t.makeTensorInfo(l.shape,\"int32\",h)]}var cR={kernelName:Ca,backendName:\"cpu\",kernelFunc:MQ};function LQ(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]=lp(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 lR={kernelName:ji,backendName:\"cpu\",kernelFunc:LQ};function BQ(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=mp(a,n);return t.makeTensorInfo(s.shape,\"int32\",i)}var mR={kernelName:Xi,backendName:\"cpu\",kernelFunc:BQ};var zQ=Ie(_s,r=>Math.tan(r)),dR={kernelName:_s,backendName:\"cpu\",kernelFunc:zQ};var VQ=Ie(Es,r=>Math.tanh(r)),fR={kernelName:Es,backendName:\"cpu\",kernelFunc:VQ};function WQ(r){let{inputs:e,backend:t}=r,{tensor:o,indices:n,updates:s}=e,{sliceRank:a,numUpdates:i,sliceSize:p,strides:u,outputSize:c}=w.calculateShapes(s,n,o.shape),l=!1,m=t.bufferSync(n),d=t.bufferSync(s),f=t.bufferSync(o),h=zs(m,d,o.shape,c,p,i,a,u,f,l);return t.makeTensorInfo(o.shape,h.dtype,h.values)}var hR={kernelName:ds,backendName:\"cpu\",kernelFunc:WQ};function UQ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{reps:s}=o;Q(n,\"tile\");let a=Mf(t.bufferSync(n),s);return t.makeTensorInfo(a.shape,a.dtype,a.values)}var gR={kernelName:po,backendName:\"cpu\",kernelFunc:UQ};function GQ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{k:s,sorted:a}=o;Q(n,\"topk\");let i=t.data.get(n.dataId).values,[p,u]=Lf(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 xR={kernelName:$s,backendName:\"cpu\",kernelFunc:GQ};function HQ(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],S=x[2],k=y.computeStrides(g),_=k[0],$=k[1],R=k[2],D=y.getTypedArrayFromDType(n.dtype,y.sizeFromShape(g));D.fill(p);let P=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 y.clamp(0,t,e-1)}function qQ(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 jQ(r,e){return r}function XQ(r,e){return y.clamp(0,r,e-1)}function ql(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 SR={kernelName:Qi,backendName:\"cpu\",kernelFunc:eZ};var tZ=[q_,t_,j_,X_,a_,Y_,Q_,Z_,J_,eE,tE,rE,oE,nE,sE,iE,uE,pE,cE,K_,lE,mE,dE,i_,fE,s_,u_,hE,r_,gE,yE,bE,CE,wE,SE,IE,vE,kE,NE,TE,_E,EE,$E,RE,DE,AE,FE,PE,OE,ME,LE,BE,VE,z_,WE,p_,UE,c_,GE,l_,HE,KE,qE,m_,d_,jE,XE,YE,QE,f_,h_,o_,ZE,xE,JE,e$,t$,V_,g_,x_,r$,y_,o$,n$,s$,a$,i$,u$,p$,b_,c$,l$,m$,d$,h$,g$,x$,C_,y$,b$,S$,w_,S_,I$,v$,k$,I_,N$,E$,$$,Wf,R$,W_,k_,D$,A$,F$,P$,n_,Gl,O$,U_,G_,H_,M$,L$,B$,z$,V$,W$,U$,$_,G$,K$,q$,j$,D_,X$,Y$,Q$,A_,C$,J$,eR,tR,rR,oR,nR,sR,aR,P_,iR,O_,M_,uR,pR,cR,lR,mR,L_,zE,dR,fR,hR,gR,xR,bR,v_,CR,wR,SR,T$];for(let r of tZ)ti(r);var Ec={};qe(Ec,{assertNotComplex:()=>Vs,bindCanvasToFramebuffer:()=>cZ,bindColorTextureToFramebuffer:()=>Ql,bindTextureToProgramUniformSampler:()=>VI,bindTextureUnit:()=>NR,bindVertexBufferToProgramAttribute:()=>jf,callAndCheck:()=>ce,canBeRepresented:()=>EI,createFragmentShader:()=>RI,createFramebuffer:()=>LI,createProgram:()=>DI,createStaticIndexBuffer:()=>PI,createStaticVertexBuffer:()=>FI,createTexture:()=>OI,createVertexShader:()=>$I,getBatchDim:()=>gi,getExtensionOrThrow:()=>Nc,getFramebufferErrorMessage:()=>TR,getMaxTexturesInShader:()=>GI,getNumChannels:()=>uZ,getProgramUniformLocation:()=>zI,getProgramUniformLocationOrThrow:()=>BI,getRowsCols:()=>xi,getShapeAs3D:()=>_c,getTextureShapeFromLogicalShape:()=>WI,getWebGLDisjointQueryTimerVersion:()=>HI,getWebGLErrorMessage:()=>kR,getWebGLMaxTextureSize:()=>UI,hasExtension:()=>qr,isCapableOfRenderingToFloatTexture:()=>KI,isDownloadFloatTextureEnabled:()=>qI,isReshapeFree:()=>xu,isWebGLFenceEnabled:()=>jI,isWebGLVersionEnabled:()=>Yf,linkProgram:()=>AI,logShaderSourceAndInfoLog:()=>qf,resetMaxTextureSize:()=>lZ,resetMaxTexturesInShader:()=>mZ,unbindColorTextureFromFramebuffer:()=>Xf,unbindTextureUnit:()=>pZ,validateFramebuffer:()=>Tc,validateProgram:()=>Yl,validateTextureSize:()=>MI});var hp={},Uf={alpha:!1,antialias:!1,premultipliedAlpha:!1,preserveDrawingBuffer:!1,depth:!1,stencil:!1,failIfMajorPerformanceCaveat:!0};function NI(r,e){hp[r]=e}function Kr(r,e){if(!(r in hp)||e!=null){let o=oZ(r,e);if(o!==null)hp[r]=o;else return console.log(\"Could not get context for WebGL version\",r),null}let t=hp[r];return t==null||t.isContextLost()?(delete hp[r],Kr(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),hp[r])}function rZ(r){if(!A().getBool(\"IS_SAFARI\")&&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 oZ(r,e){if(r!==1&&r!==2)throw new Error(\"Cannot get WebGL rendering context, WebGL is disabled.\");let t=e==null?rZ(r):e;return t.addEventListener(\"webglcontextlost\",o=>{o.preventDefault(),delete hp[r]},!1),A().getBool(\"SOFTWARE_WEBGL_ENABLED\")&&(Uf.failIfMajorPerformanceCaveat=!1),r===1?t.getContext(\"webgl\",Uf)||t.getContext(\"experimental-webgl\",Uf):t.getContext(\"webgl2\",Uf)}var gu;(function(r){r[r.DENSE=0]=\"DENSE\",r[r.SHARED_BATCH=1]=\"SHARED_BATCH\"})(gu||(gu={}));var mr;(function(r){r[r.RENDER=0]=\"RENDER\",r[r.UPLOAD=1]=\"UPLOAD\",r[r.PIXELS=2]=\"PIXELS\",r[r.DOWNLOAD=3]=\"DOWNLOAD\"})(mr||(mr={}));var er;(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\"})(er||(er={}));function gp(r,e){return[e,r]}function IR(r,e){return r*e}function jl(r){let e=y.sizeFromShape(r),t=Math.ceil(e/4);return y.sizeToSquarishShape(t)}function Ma(r,e){return[Math.max(1,Math.ceil(e/2)),Math.max(1,Math.ceil(r/2))]}function vR(r,e){let[t,o]=Ma(r,e);return t*o*4}function Xl(r,e){let t=r,o,n,s,a,i,p,u,c,l,m;return A().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 A().getBool(\"DEBUG\")&&nZ(r),t}function nZ(r){let e=r.getError();if(e!==r.NO_ERROR)throw new Error(\"WebGL Error: \"+kR(r,e))}var sZ=596e-10,aZ=65504;function EI(r){return!!(A().getBool(\"WEBGL_RENDER_FLOAT32_ENABLED\")||r===0||sZr.getExtension(e),'Extension \"'+e+'\" not supported on this browser.')}function $I(r,e){let t=hi(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 RI(r,e){let t=hi(r,()=>r.createShader(r.FRAGMENT_SHADER),\"Unable to create fragment WebGLShader.\");if(ce(r,()=>r.shaderSource(t,e)),ce(r,()=>r.compileShader(t)),A().get(\"ENGINE_COMPILE_ONLY\"))return t;if(r.getShaderParameter(t,r.COMPILE_STATUS)===!1)throw qf(e,r.getShaderInfoLog(t)),new Error(\"Failed to compile fragment shader.\");return t}var iZ=/ERROR: [0-9]+:([0-9]+):/g;function qf(r,e){let t=iZ.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 AI(r,e){if(ce(r,()=>r.linkProgram(e)),!A().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 Yl(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 FI(r,e){let t=hi(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 PI(r,e){let t=hi(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 uZ(){return A().getNumber(\"WEBGL_VERSION\")===2?1:4}function OI(r){return hi(r,()=>r.createTexture(),\"Unable to create WebGLTexture.\")}function MI(r,e){let t=A().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 LI(r){return hi(r,()=>r.createFramebuffer(),\"Unable to create WebGLFramebuffer.\")}function jf(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 NR(r,e,t){_R(r,t),ce(r,()=>r.activeTexture(r.TEXTURE0+t)),ce(r,()=>r.bindTexture(r.TEXTURE_2D,e))}function pZ(r,e){_R(r,e),ce(r,()=>r.activeTexture(r.TEXTURE0+e)),ce(r,()=>r.bindTexture(r.TEXTURE_2D,null))}function BI(r,e,t){return hi(r,()=>r.getUniformLocation(e,t),'uniform \"'+t+'\" not present in program.')}function zI(r,e,t){return r.getUniformLocation(e,t)}function VI(r,e,t,o){ce(r,()=>NR(r,e,o)),ce(r,()=>r.uniform1i(t,o))}function cZ(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 Ql(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 Xf(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: \"+TR(r,e))}function TR(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 hi(r,e,t){let o=ce(r,()=>e());if(o==null)throw new Error(t);return o}function _R(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 gi(r,e=2){return y.sizeFromShape(r.slice(0,r.length-e))}function xi(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 _c(r){let e=[1,1,1];return r.length===0||r.length===1&&r[0]===1||(e=[gi(r),...xi(r)]),e}function WI(r,e=!1){let t=A().getNumber(\"WEBGL_MAX_TEXTURE_SIZE\"),o=A().getNumber(\"WEBGL_MAX_SIZE_FOR_NARROW_TEXTURE\");o===1/0&&A().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=gi(r),p=2,u=2;r.length&&([p,u]=xi(r)),n=i*(p/2)*(u/2),s=y.sizeToSquarishShape(n).map(c=>c*2)}else s=y.sizeToSquarishShape(n);return s}function Gf(r){return r%2===0}function xu(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[r.length-1],o=e[e.length-1];if(t===o||Gf(t)&&Gf(o)&&(r[0]===1||e[0]===1))return!0}return r[1]===e[1]&&Gf(r[0])&&Gf(e[0])}var Hf,Kf;function UI(r){if(Hf==null){let e=Kr(r);Hf=e.getParameter(e.MAX_TEXTURE_SIZE)}return Hf}function lZ(){Hf=null}function mZ(){Kf=null}function GI(r){if(Kf==null){let e=Kr(r);Kf=e.getParameter(e.MAX_TEXTURE_IMAGE_UNITS)}return Math.min(16,Kf)}function HI(r){if(r===0)return 0;let e,t=Kr(r);return qr(t,\"EXT_disjoint_timer_query_webgl2\")&&r===2?e=2:qr(t,\"EXT_disjoint_timer_query\")?e=1:e=0,e}function qr(r,e){return r.getExtension(e)!=null}function Yf(r){try{if(Kr(r)!=null)return!0}catch(e){return console.log(\"Error when getting WebGL context: \",e),!1}return!1}function KI(r){if(r===0)return!1;let e=Kr(r);if(r===1){if(!qr(e,\"OES_texture_float\"))return!1}else if(!qr(e,\"EXT_color_buffer_float\"))return!1;return _I(e)}function qI(r){if(r===0)return!1;let e=Kr(r);if(r===1){if(!qr(e,\"OES_texture_float\")||!qr(e,\"WEBGL_color_buffer_float\"))return!1}else{if(qr(e,\"EXT_color_buffer_float\"))return _I(e);let o=\"EXT_color_buffer_half_float\";if(qr(e,o)){let n=e.getExtension(o);return dZ(e,n)}return!1}return _I(e)}function _I(r){let e=Xl(r),t=r.createTexture();r.bindTexture(r.TEXTURE_2D,t),r.texImage2D(r.TEXTURE_2D,0,e.internalFormatFloat,1,1,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 dZ(r,e){let t=Xl(r,e),o=r.createTexture();r.bindTexture(r.TEXTURE_2D,o),r.texImage2D(r.TEXTURE_2D,0,t.internalFormatHalfFloat,1,1,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 jI(r){return r!==2?!1:Kr(r).fenceSync!=null}function Vs(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 Se=A();Se.registerFlag(\"HAS_WEBGL\",()=>Se.getNumber(\"WEBGL_VERSION\")>0);Se.registerFlag(\"WEBGL_VERSION\",()=>Yf(2)?2:Yf(1)?1:0);Se.registerFlag(\"WEBGL_CHECK_NUMERICAL_PROBLEMS\",()=>!1);Se.registerFlag(\"WEBGL_BUFFER_SUPPORTED\",()=>Se.get(\"WEBGL_VERSION\")===2);Se.registerFlag(\"WEBGL_CPU_FORWARD\",()=>!0);Se.registerFlag(\"WEBGL_FORCE_F16_TEXTURES\",()=>!1);Se.registerFlag(\"WEBGL_PACK\",()=>Se.getBool(\"HAS_WEBGL\"));Se.registerFlag(\"WEBGL_PACK_NORMALIZATION\",()=>Se.getBool(\"WEBGL_PACK\"));Se.registerFlag(\"WEBGL_PACK_CLIP\",()=>Se.getBool(\"WEBGL_PACK\"));Se.registerFlag(\"WEBGL_PACK_DEPTHWISECONV\",()=>Se.getBool(\"WEBGL_PACK\"));Se.registerFlag(\"WEBGL_PACK_BINARY_OPERATIONS\",()=>Se.getBool(\"WEBGL_PACK\"));Se.registerFlag(\"WEBGL_PACK_UNARY_OPERATIONS\",()=>Se.getBool(\"WEBGL_PACK\"));Se.registerFlag(\"WEBGL_PACK_ARRAY_OPERATIONS\",()=>Se.getBool(\"WEBGL_PACK\"));Se.registerFlag(\"WEBGL_PACK_IMAGE_OPERATIONS\",()=>Se.getBool(\"WEBGL_PACK\"));Se.registerFlag(\"WEBGL_PACK_REDUCE\",()=>Se.getBool(\"WEBGL_PACK\"));Se.registerFlag(\"WEBGL_LAZILY_UNPACK\",()=>Se.getBool(\"WEBGL_PACK\"));Se.registerFlag(\"WEBGL_CONV_IM2COL\",()=>Se.getBool(\"WEBGL_PACK\"));Se.registerFlag(\"WEBGL_PACK_CONV2DTRANSPOSE\",()=>Se.getBool(\"WEBGL_PACK\"));Se.registerFlag(\"WEBGL_MAX_TEXTURE_SIZE\",()=>UI(Se.getNumber(\"WEBGL_VERSION\")));Se.registerFlag(\"WEBGL_MAX_TEXTURES_IN_SHADER\",()=>GI(Se.getNumber(\"WEBGL_VERSION\")));Se.registerFlag(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION\",()=>{let r=Se.getNumber(\"WEBGL_VERSION\");return r===0?0:HI(r)});Se.registerFlag(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE\",()=>Se.getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION\")>0&&!eu.isMobile());Se.registerFlag(\"WEBGL_RENDER_FLOAT32_CAPABLE\",()=>KI(Se.getNumber(\"WEBGL_VERSION\")));Se.registerFlag(\"WEBGL_RENDER_FLOAT32_ENABLED\",()=>Se.getBool(\"WEBGL_FORCE_F16_TEXTURES\")?!1:Se.getBool(\"WEBGL_RENDER_FLOAT32_CAPABLE\"));Se.registerFlag(\"WEBGL_DOWNLOAD_FLOAT_ENABLED\",()=>qI(Se.getNumber(\"WEBGL_VERSION\")));Se.registerFlag(\"WEBGL_FENCE_API_ENABLED\",()=>jI(Se.getNumber(\"WEBGL_VERSION\")));Se.registerFlag(\"WEBGL_SIZE_UPLOAD_UNIFORM\",()=>Se.getBool(\"WEBGL_RENDER_FLOAT32_ENABLED\")?4:0);Se.registerFlag(\"WEBGL_DELETE_TEXTURE_THRESHOLD\",()=>-1,r=>{if(typeof r!=\"number\")throw new Error(`WEBGL_DELETE_TEXTURE_THRESHOLD must be a number but got ${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}.`)});Se.registerFlag(\"WEBGL_FLUSH_THRESHOLD\",()=>eu.isMobile()?1:-1,r=>{if(typeof r!=\"number\")throw new Error(`WEBGL_FLUSH_THRESHOLD must be a number but got ${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}.`)});Se.registerFlag(\"CPU_HANDOFF_SIZE_THRESHOLD\",()=>128);Se.registerFlag(\"WEBGL_USE_SHAPES_UNIFORMS\",()=>!1);Se.registerFlag(\"TOPK_LAST_DIM_CPU_HANDOFF_SIZE_THRESHOLD\",()=>1e5);Se.registerFlag(\"TOPK_K_CPU_HANDOFF_THRESHOLD\",()=>128);Se.registerFlag(\"WEBGL_EXP_CONV\",()=>!1);Se.registerFlag(\"SOFTWARE_WEBGL_ENABLED\",()=>Se.getBool(\"IS_TEST\"));Se.registerFlag(\"WEBGL_MAX_SIZE_FOR_NARROW_TEXTURE\",()=>1/0);Se.registerFlag(\"WEBGL_AUTO_SQUARIFY_NARROW_TEXTURE_SHAPE\",()=>!1);Se.registerFlag(\"WEBGL2_ISNAN_CUSTOM\",()=>!1);Se.registerFlag(\"ENGINE_COMPILE_ONLY\",()=>!1);function It(){let r,e,t,o,n,s,a,i,p,u;return A().getNumber(\"WEBGL_VERSION\")===2?(r=\"#version 300 es\",e=\"in\",t=\"out\",o=\"in\",n=\"texture\",s=\"outputColor\",a=\"out vec4 outputColor;\",i=A().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 Ws(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 xp(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 fZ(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 ER(r,e,t=\"index\"){let o=r.map((s,a)=>a),n=fZ(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 $c(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 Rc(){return`\n int getFlatIndex(ivec3 coords) {\n return coords.x * outShapeStrides[0] + coords.y * outShapeStrides[1] + coords.z;\n }\n`}var Qf=`\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:$R}=w;function RR(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}=Zf(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=>hZ(d,e,t.packedInputs,t.enableShapeUniforms)).join(`\n`),a=e.texShape,i=It(),p=yZ(i),u,c,l=wZ(i);return e.isPacked?(u=gZ(e.logicalShape,a,t.enableShapeUniforms),c=CZ(i)):(u=xZ(e.logicalShape,a,t.enableShapeUniforms),c=bZ(i)),t.packedInputs&&(l+=kZ),[l,p,c,n,u,s,t.userCode].join(`\n`)}function Ac(r,e=!1){let t=r.shapeInfo.logicalShape;switch(t.length){case 0:return MZ(r,e);case 1:return BZ(r,e);case 2:return VZ(r,e);case 3:return UZ(r,e);case 4:return HZ(r,e);case 5:return KZ(r);case 6:return qZ(r);default:throw new Error(`${t.length}-D input sampling is not yet supported`)}}function DR(r,e){switch(r.shapeInfo.logicalShape.length){case 0:return OZ(r);case 1:return LZ(r,e);case 2:return zZ(r,e);case 3:return WZ(r,e);default:return GZ(r,e)}}function hZ(r,e,t=!1,o){let n=\"\";t?n+=DR(r,o):n+=Ac(r,o);let s=r.shapeInfo.logicalShape,a=e.logicalShape;return s.length<=a.length&&(t?n+=jZ(r,e):n+=XZ(r,e)),n}function gZ(r,e,t){switch(r.length){case 0:return AR();case 1:return NZ(r,e,t);case 2:return FZ(r,e,t);case 3:return _Z(r,e,t);default:return $Z(r,e,t)}}function xZ(r,e,t){switch(r.length){case 0:return AR();case 1:return TZ(r,e,t);case 2:return PZ(r,e,t);case 3:return EZ(r,e,t);case 4:return RZ(r,e,t);case 5:return DZ(r,e);case 6:return AZ(r,e);default:throw new Error(`${r.length}-D output sampling is not yet supported`)}}function yZ(r){return`\n float sampleTexture(sampler2D textureSampler, vec2 uv) {\n return ${r.texture2D}(textureSampler, uv).r;\n }\n `}function bZ(r){return`\n void setOutput(float val) {\n ${r.output} = vec4(val, 0, 0, 0);\n }\n `}function CZ(r){return`\n void setOutput(vec4 val) {\n ${r.output} = val;\n }\n `}function wZ(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 ${SZ}\n ${IZ}\n ${vZ}\n `}var SZ=`\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`,IZ=`\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`,vZ=`\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`,kZ=`\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 AR(){return`\n int getOutputCoords() {\n return 0;\n }\n `}function NZ(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 TZ(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 _Z(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 EZ(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 ${xp([\"r\",\"c\",\"d\"],r)}\n return ivec3(r, c, d);\n }\n`;let o=Ws([\"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 $Z(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 XZ(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=Re(p),c=$R(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 Re(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 Zf(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 PR(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=RR(n,a,e),p=RI(r.gl,i),u=r.createProgram(p);return A().get(\"ENGINE_COMPILE_ONLY\")?{program:e,fragmentShader:p,source:i,webGLProgram:u,inShapeInfos:s,outShapeInfo:a,variablesLocations:null,customUniformLocations:null,infLoc:null,nanLoc:null,outShapeLocation:null,outShapeStridesLocation:null,outTexShapeLocation:null}:(r.buildVao(u),Object.assign({program:e,fragmentShader:p,source:i,webGLProgram:u,inShapeInfos:s,outShapeInfo:a},XI(r,e,u)))}function XI(r,e,t){let o=[],n=[],s,a,i,p=null,u=null;u=r.getUniformLocation(t,\"NAN\",!1),A().getNumber(\"WEBGL_VERSION\")===1&&(p=r.getUniformLocation(t,\"INFINITY\",!1));let c=!1;for(let l of e.variableNames){let m={name:l,uniform:r.getUniformLocation(t,l,c),offset:r.getUniformLocation(t,`offset${l}`,c)};e.enableShapeUniforms&&(m.shape=r.getUniformLocation(t,`${l}Shape`,c),m.texShape=r.getUniformLocation(t,`${l}TexShape`,c)),o.push(m)}if(e.enableShapeUniforms&&(s=r.getUniformLocation(t,\"outShape\",c),i=r.getUniformLocation(t,\"outShapeStrides\",c),a=r.getUniformLocation(t,\"outTexShape\",c)),e.customUniforms)for(let l of e.customUniforms)n.push(r.getUniformLocation(t,l.name,c));return{variablesLocations:o,customUniformLocations:n,infLoc:p,nanLoc:u,outShapeLocation:s,outShapeStridesLocation:i,outTexShapeLocation:a}}function FR(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 OR(r,e,t,o,n){e.program.enableShapeUniforms||(FR(e.inShapeInfos,t),FR([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),r.bindVertexArray(e.webGLProgram.vao),A().getNumber(\"WEBGL_VERSION\")===1&&e.infLoc!==null&&r.gl.uniform1f(e.infLoc,1/0),e.nanLoc!==null&&r.gl.uniform1f(e.nanLoc,NaN);for(let p=0;p{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}=Zf(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=w.getBroadcastDims(a.shape,t.shape),C=!r.packedInputs&&h===t.shape.length&&y.arraysEqual(p,t.texData.texShape),S=r.packedInputs||c.length>2?\"\":`${p[0]>1}_${p[1]>1}`;o+=`${h}_${C}_${u?l:\"\"}_${c.length}_${x}_${b}_${g}_${m}_${d}_${f}_${S}_${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+`${A().getNumber(\"WEBGL_VERSION\")}`,s}function ut(r){return A().getBool(\"WEBGL_USE_SHAPES_UNIFORMS\")&&r<=4}var Jf=class{constructor(e){this.variableNames=[\"A\"],this.packedInputs=!1,this.packedOutput=!0,this.outPackingScheme=gu.DENSE,this.customUniforms=[{name:\"texShape\",type:\"ivec2\"}];let t=It();this.outputShape=e,this.enableShapeUniforms=ut(this.outputShape.length),this.userCode=`\n ivec3 outCoordsFromFlatIndex(int index) {\n ${this.enableShapeUniforms?xp([\"r\",\"c\",\"d\"],e):Ws([\"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 eh=class{constructor(e){this.variableNames=[\"A\"],this.packedInputs=!0,this.packedOutput=!0,this.outPackingScheme=gu.DENSE,this.customUniforms=[{name:\"texShape\",type:\"ivec2\"}];let t=It();this.outputShape=e,this.enableShapeUniforms=ut(this.outputShape.length),this.userCode=`\n ivec3 outCoordsFromFlatIndex(int index) {\n ${this.enableShapeUniforms?xp([\"r\",\"c\",\"d\"],e):Ws([\"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 th=class{constructor(e){this.variableNames=[\"A\"],this.outTexUsage=mr.DOWNLOAD;let t=It();this.outputShape=e,this.userCode=`\n ${Qf}\n\n void main() {\n float x = getAAtOutCoords();\n ${t.output} = encode_float(x);\n }\n `}};var rh=class{constructor(e){this.variableNames=[\"A\"],this.packedInputs=!0,this.packedOutput=!1,this.outTexUsage=mr.DOWNLOAD;let t=It();this.outputShape=e,this.userCode=`\n ${Qf}\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 ZZ={R:0,G:1,B:2,A:3},Zl=class{constructor(e,t=!1,o=\"RGBA\"){this.variableNames=[\"A\"],this.customUniforms=[{name:\"texShape\",type:\"ivec2\"}];let n=It();this.outputShape=e,this.enableShapeUniforms=ut(this.outputShape.length);let s=\"result\";t&&(s=\"floor(result * 255. + 0.5)\");let a=\"\";for(let i=0;inv,createBufferFromOutputTexture:()=>iv,createFloat16MatrixTexture:()=>ev,createFloat16PackedMatrixTexture:()=>ov,createFloat32MatrixTexture:()=>JI,createIndexBuffer:()=>ZI,createPackedMatrixTexture:()=>rv,createUnsignedBytesMatrixTexture:()=>tv,createVertexBuffer:()=>QI,createVertexShader:()=>YI,downloadByteEncodedFloatMatrixFromOutputTexture:()=>pv,downloadFloat32MatrixFromBuffer:()=>uv,downloadMatrixFromPackedOutputTexture:()=>lv,downloadPackedMatrixFromBuffer:()=>cv,getInternalFormatForFloat16MatrixTexture:()=>sh,getInternalFormatForFloat16PackedMatrixTexture:()=>uh,getInternalFormatForFloat32MatrixTexture:()=>nh,getInternalFormatForPackedMatrixTexture:()=>ih,getInternalFormatForUnsignedBytesMatrixTexture:()=>ah,uploadDenseMatrixToTexture:()=>sv,uploadPixelDataToTexture:()=>av});function YI(r){let e=It(),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 $I(r,t)}function QI(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 FI(r,e)}function ZI(r){let e=new Uint16Array([0,1,2,2,1,3]);return PI(r,e)}function Jl(r,e,t,o,n,s){MI(e,t);let a=OI(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)),A().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 nh(r){return r.internalFormatFloat}function JI(r,e,t,o){let[n,s]=gp(e,t);return Jl(r,n,s,nh(o),o.textureFormatFloat,r.FLOAT)}function sh(r){return r.internalFormatHalfFloat}function ev(r,e,t,o){let[n,s]=gp(e,t);return Jl(r,n,s,sh(o),o.textureFormatFloat,o.textureTypeHalfFloat)}function ah(r){return r.downloadTextureFormat}function tv(r,e,t,o){let[n,s]=gp(e,t);return Jl(r,n,s,ah(o),r.RGBA,r.UNSIGNED_BYTE)}function ih(r){return r.internalFormatPackedFloat}function rv(r,e,t,o){let[n,s]=Ma(e,t);return Jl(r,n,s,ih(o),r.RGBA,r.FLOAT)}function uh(r){return r.internalFormatPackedHalfFloat}function ov(r,e,t,o){let[n,s]=Ma(e,t);return Jl(r,n,s,uh(o),r.RGBA,o.textureTypeHalfFloat)}function nv(r,e,t){return ce(r,()=>r.bindBuffer(r.ARRAY_BUFFER,t)),jf(r,e,\"clipSpacePos\",t,3,20,0)&&jf(r,e,\"uv\",t,2,20,12)}function sv(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),A().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 av(r,e,t){ce(r,()=>r.bindTexture(r.TEXTURE_2D,e)),t.data instanceof Uint8Array?A().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)):A().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 iv(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 uv(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 pv(r,e,t,o){let[n,s]=gp(e,t),a=4,i=new Uint8Array(IR(e*t,a));return ce(r,()=>r.readPixels(0,0,n,s,o.downloadTextureFormat,r.UNSIGNED_BYTE,i)),new Float32Array(i.buffer)}function cv(r,e,t,o,n,s,a,i){let p=r,u=new Float32Array(vR(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 lv(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 bp=class{constructor(e){this.outputTexture=null,this.program=null,this.disposed=!1,this.itemsToPoll=[];let t=A().getNumber(\"WEBGL_VERSION\");if(e!=null?(this.gl=e,NI(t,e)):this.gl=Kr(t),e=this.gl,A().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\"),A().getNumber(\"WEBGL_VERSION\")===1){let s=\"OES_texture_float\",a=\"OES_texture_half_float\";if(this.textureFloatExtension=Nc(this.gl,s),qr(this.gl,a))this.textureHalfFloatExtension=Nc(this.gl,a);else if(A().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),qr(this.gl,n))this.colorBufferHalfFloatExtension=Nc(this.gl,n);else if(A().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\",qr(this.gl,o))this.colorBufferFloatExtension=this.gl.getExtension(o);else if(qr(this.gl,n))this.colorBufferHalfFloatExtension=this.gl.getExtension(n);else throw new Error(\"GL context does not support color renderable floats\");this.vertexBuffer=QI(this.gl),this.indexBuffer=ZI(this.gl),this.framebuffer=LI(this.gl),this.textureConfig=Xl(this.gl,this.textureHalfFloatExtension)}get debug(){return A().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(),JI(this.gl,e,t,this.textureConfig)}createFloat16MatrixTexture(e,t){return this.throwIfDisposed(),ev(this.gl,e,t,this.textureConfig)}createUnsignedBytesMatrixTexture(e,t){return this.throwIfDisposed(),tv(this.gl,e,t,this.textureConfig)}uploadPixelDataToTexture(e,t){this.throwIfDisposed(),av(this.gl,e,t)}uploadDenseMatrixToTexture(e,t,o,n){this.throwIfDisposed(),sv(this.gl,e,t,o,n,this.textureConfig)}createFloat16PackedMatrixTexture(e,t){return this.throwIfDisposed(),ov(this.gl,e,t,this.textureConfig)}createPackedMatrixTexture(e,t){return this.throwIfDisposed(),rv(this.gl,e,t,this.textureConfig)}deleteMatrixTexture(e){this.throwIfDisposed(),this.outputTexture===e&&(Xf(this.gl,this.framebuffer),this.outputTexture=null),ce(this.gl,()=>this.gl.deleteTexture(e))}downloadByteEncodedFloatMatrixFromOutputTexture(e,t,o){return this.downloadMatrixDriver(e,()=>pv(this.gl,t,o,this.textureConfig))}downloadPackedMatrixFromBuffer(e,t,o,n,s,a){return cv(this.gl,e,t,o,n,s,a,this.textureConfig)}downloadFloat32MatrixFromBuffer(e,t){return uv(this.gl,e,t)}createBufferFromTexture(e,t,o){this.bindTextureToFrameBuffer(e);let n=iv(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(A().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 A().getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION\")>0?(t=this.beginQuery(),this.endQuery(),o=()=>this.isQueryAvailable(t,A().getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION\"))):o=()=>!0;return{query:t,isFencePassed:o}}downloadMatrixFromPackedTexture(e,t,o){return this.downloadMatrixDriver(e,()=>lv(this.gl,t,o))}createProgram(e){this.throwIfDisposed();let t=this.gl;this.vertexShader==null&&(this.vertexShader=YI(t));let o=DI(t);ce(t,()=>t.attachShader(o,this.vertexShader)),ce(t,()=>t.attachShader(o,e)),AI(t,o);let n=Object.assign(o,{vao:this.createVertexArray()});return this.debug&&Yl(t,n),n}buildVao(e){this.setProgram(e),this.bindVertexArray(e.vao);let t=this.gl;ce(t,()=>t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer)),nv(t,e,this.vertexBuffer)}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&&Yl(this.gl,this.program),ce(this.gl,()=>this.gl.useProgram(e))}getUniformLocation(e,t,o=!0){return this.throwIfDisposed(),o?BI(this.gl,e,t):zI(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(),VI(this.gl,e,t,o)}setOutputMatrixTexture(e,t,o){this.setOutputMatrixTextureDriver(e,o,t)}setOutputPackedMatrixTexture(e,t,o){this.throwIfDisposed();let[n,s]=Ma(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&&Yl(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=Nc(this.gl,A().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(A().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(A().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,A().getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION\"))),this.getQueryTime(e,A().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=JZ(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 A().platform&&(o=A().platform.setTimeoutCustom.bind(A().platform)),y.repeatedTry(()=>(this.pollItems(),this.itemsToPoll.length===0),()=>0,null,o)}bindTextureToFrameBuffer(e){this.throwIfDisposed(),Ql(this.gl,e,this.framebuffer),this.debug&&Tc(this.gl)}unbindTextureToFrameBuffer(){this.outputTexture!=null?(Ql(this.gl,this.outputTexture,this.framebuffer),this.debug&&Tc(this.gl)):Xf(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;Ql(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 JZ(r){let e=0;for(;e`${r}.${t}`)}function Rt(r,e){return e===1?[r]:dv(r,e)}function ED(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 Mc=class{constructor(e,t){this.variableNames=[\"A\"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:\"inputShape\",type:\"ivec3\"}],this.outputShape=e,this.enableShapeUniforms=ut(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 ${e9(t,this.enableShapeUniforms)}\n ${this.enableShapeUniforms?Rc():$c(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 e9(r,e){return`\n ivec3 inputCoordsFromReshapedOutCoords(int index) {\n ${e?ER([\"r\",\"c\",\"d\"],\"inputShape\"):Ws([\"r\",\"c\",\"d\"],r)}\n return ivec3(r, c, d);\n }\n `}var dh=class{constructor(e){this.gpgpu=e,this.numUsedTextures=0,this.numFreeTextures=0,this._numBytesAllocated=0,this._numBytesFree=0,this.freeTextures={},this.usedTextures={},this.logEnabled=!1}acquireTexture(e,t,o){let n=RD(t,o),s=DD(e,n,o);s in this.freeTextures||(this.freeTextures[s]=[]),s in this.usedTextures||(this.usedTextures[s]=[]);let a=$D(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].pop();return this.usedTextures[s].push(p),p}let i;return n===er.PACKED_2X2_FLOAT32?i=this.gpgpu.createPackedMatrixTexture(e[0],e[1]):n===er.PACKED_2X2_FLOAT16?i=this.gpgpu.createFloat16PackedMatrixTexture(e[0],e[1]):n===er.UNPACKED_FLOAT32?i=this.gpgpu.createFloat32MatrixTexture(e[0],e[1]):n===er.UNPACKED_FLOAT16?i=this.gpgpu.createFloat16MatrixTexture(e[0],e[1]):n===er.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=RD(o,n),a=DD(t,s,n);a in this.freeTextures||(this.freeTextures[a]=[]);let i=$D(t,s,this.gpgpu.gl,this.gpgpu.textureConfig,n),p=A().getNumber(\"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&&u.indexOf(e);if(c==null||c<0)throw new Error(\"Cannot release a texture that was never provided by this texture manager\");u[c]=u[u.length-1],u.pop(),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 t9(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 $D(r,e,t,o,n){let s=r9(e,o),a;if(n){let[p,u]=Ma(r[0],r[1]);a=p*u}else{let[p,u]=gp(r[0],r[1]);a=p*u}let i=t9(t,s);return a*i}function r9(r,e){switch(r){case er.PACKED_2X2_FLOAT32:return ih(e);case er.PACKED_2X2_FLOAT16:return uh(e);case er.UNPACKED_FLOAT32:return nh(e);case er.UNPACKED_FLOAT16:return sh(e);case er.PACKED_4X1_UNSIGNED_BYTE:return ah(e);default:throw new Error(`Unknown physical texture type ${r}`)}}function o9(r){return A().getBool(\"WEBGL_RENDER_FLOAT32_ENABLED\")?r?er.PACKED_2X2_FLOAT32:er.UNPACKED_FLOAT32:r?er.PACKED_2X2_FLOAT16:er.UNPACKED_FLOAT16}function RD(r,e){if(r===mr.UPLOAD)return er.PACKED_2X2_FLOAT32;if(r===mr.RENDER||r==null)return o9(e);if(r===mr.DOWNLOAD||r===mr.PIXELS)return er.PACKED_4X1_UNSIGNED_BYTE;throw new Error(`Unknown logical texture type ${r}`)}function DD(r,e,t){return`${r[0]}_${r[1]}_${e}_${t}`}var tr=class{constructor(e,t){this.variableNames=[\"A\"],this.outputShape=e,this.enableShapeUniforms=ut(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 `}},Wt=\"if (isnan(x)) return x;\",AD=\"return x;\",fv=\"return abs(x);\";var FD=\"return (x >= 0.0) ? x : (exp(x) - 1.0);\",PD=Wt+`\n return (x < 0.0) ? 0.0 : x;\n`,OD=Wt+`\n return (x < 0.0) ? 0.0 : min(6.0, x);\n`,La=\"return x;\",MD=\"return 1.0 / (1.0 + exp(-1.0 * x));\";var BD=\"return x;\",zD=`\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`,VD=`\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`,WD=`\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`,UD=\"return 1.0 / (1.0 + exp(-1.0 * x));\",Fr=class{constructor(e,t){this.variableNames=[\"A\"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e,this.enableShapeUniforms=ut(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 fh=class{constructor(e){this.variableNames=[\"A\"],this.packedInputs=!0,this.packedOutput=!1,this.outputShape=e,this.enableShapeUniforms=ut(this.outputShape.length);let t=e.length,o=Rt(\"rc\",t),n=Re(t),s=ED(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 s9=Vt.whereImpl,a9=1e-7,i9=1e-4,hh={};function u9(r){return r in hh||(hh[r]={}),hh[r]}var p9=A().getNumber(\"CPU_HANDOFF_SIZE_THRESHOLD\"),c9=600;function l9(){return A().global.screen==null?1024:A().global.screen.height*A().global.screen.width*window.devicePixelRatio*c9/1024/1024}var Lc=class r extends ao{nextDataId(){return r.nextDataId++}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,!A().getBool(\"HAS_WEBGL\"))throw new Error(\"WebGL is not supported on this device\");let t;if(e!=null){if(e instanceof bp)t=e;else{let o=Kr(A().getNumber(\"WEBGL_VERSION\"),e);t=new bp(o)}this.binaryCache={},this.gpgpuCreatedLocally=!1}else{let o=Kr(A().getNumber(\"WEBGL_VERSION\"));t=new bp(o),this.binaryCache=u9(A().getNumber(\"WEBGL_VERSION\")),this.gpgpuCreatedLocally=!0}this.gpgpu=t,this.canvas=this.gpgpu.gl.canvas,this.textureManager=new dh(this.gpgpu),this.numMBBeforeWarning=l9(),this.texData=new Bo(this,ur())}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=_c(t),c=new Zl(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((A().getBool(\"WEBGL_CHECK_NUMERICAL_PROBLEMS\")||A().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:mr.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(A().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:mr.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 Fr(i,La):m=new tr(i,La);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=w.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 Fr(n,La):f=new tr(n,La);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(A().getBool(\"DEBUG\")&&!A().getBool(\"WEBGL_DOWNLOAD_FLOAT_ENABLED\")&&A().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\"&&A().get(\"WEBGL_BUFFER_SUPPORTED\")){c=this.decode(e);let f=this.texData.get(c.dataId);u=this.gpgpu.createBufferFromTexture(f.texture.texture,...jl(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=w.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)&&ur().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 Fr(s,La):d=new tr(s,La);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=ur().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 me(e.shape,e.dtype,o)}catch(o){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,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(A().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 A().getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE\")>0?this.gpgpu.beginQuery():{startMs:y.now(),endMs:null}}endTimer(e){return A().getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE\")>0?(this.gpgpu.endQuery(),e):(e.endMs=y.now(),e)}async getQueryTime(e){if(A().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=p9){return A().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 ur().makeTensorFromTensorInfo(this.makeTensorInfo(e,t,o),this)}unpackTensor(e){let t=new fh(e.shape);return this.runWebGLProgram(t,[e],e.dtype)}packTensor(e){let t=new mh(e.shape);return this.runWebGLProgram(t,[e],e.dtype,null,!0)}packedReshape(e,t){let o=[gi(e.shape),...xi(e.shape)],n={dtype:e.dtype,shape:o,dataId:e.dataId},s=[gi(t),...xi(t)],a=new Mc(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=_c(s),p;n?p=new eh(i):p=new Jf(i);let u=!0,c=[t!=null?t:jl(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===gu.DENSE){let x=a!=null?a:jl(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)<=A().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&&!xu(b.shape,x.shape)){let C=x,S=x.shape;x.shape=b.shape,x=this.packedReshape(x,S),u.push(x),b=this.texData.get(x.dataId),C.shape=S}return{shape:x.shape,texData:b,isUniform:!1}});this.uploadToGPU(i.dataId);let l={shape:i.shape,texData:p,isUniform:!1},m=MR(e,c,l),d=this.getAndSaveBinary(m,()=>PR(this.gpgpu,e,c,l)),f=this.activeTimers!=null,h;f&&(h=this.startTimer()),A().get(\"ENGINE_COMPILE_ONLY\")||OR(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=A().getNumber(\"WEBGL_FLUSH_THRESHOLD\");if(g>0){let x=y.now();x-this.lastGlFlushTime>g&&(this.gpgpu.gl.flush(),this.lastGlFlushTime=x)}if(!A().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||(A().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=De(()=>{if(!A().get(\"WEBGL_RENDER_FLOAT32_ENABLED\")){let e=A().getBool(\"DEBUG\");A().set(\"DEBUG\",!1);let t=this.abs(ke(1e-8)).dataSync()[0];if(A().set(\"DEBUG\",e),t>0)return 32}return 16})),this.floatPrecisionValue}epsilon(){return this.floatPrecision()===32?a9:i9}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=WI(o,p),t.texShape=l),s!=null){let m=_c(o),d,f=l[1],h=l[0],g=s instanceof Uint8Array||s instanceof Uint8ClampedArray;(p||!g)&&([f,h]=Ma(l[0],l[1])),p?d=new oh(m,g):d=new Zl(m,g);let x=g?[h,f]:l,b=this.makeTensorInfo(x,n),C=this.texData.get(b.dataId);g?C.usage=mr.PIXELS:C.usage=mr.UPLOAD,C.texShape=x,this.gpgpu.uploadDenseMatrixToTexture(this.getTexture(b.dataId),f,h,s);let S=[[h,f]],_=this.runWebGLProgram(d,[b],n,S,!0),$=this.texData.get(_.dataId);t.texShape=$.texShape,t.isPacked=$.isPacked,t.usage=$.usage,A().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=m9(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 cS(),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?(qf(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.values(this.binaryCache)){this.gpgpu.buildVao(e.webGLProgram);let{variablesLocations:t,customUniformLocations:o,infLoc:n,nanLoc:s,outShapeLocation:a,outShapeStridesLocation:i,outTexShapeLocation:p}=XI(this.gpgpu,e.program,e.webGLProgram);e.variablesLocations=t,e.customUniformLocations=o,e.infLoc=n,e.nanLoc=s,e.outShapeLocation=a,e.outShapeStridesLocation=i,e.outTexShapeLocation=p}}createTensorFromGPUData(e,t,o){e.channels=e.channels||\"RGBA\";let{texture:n,height:s,width:a,channels:i}=e,p=ur().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 ur().makeTensorFromDataId(u,t,o,p)}};Lc.nextDataId=0;function m9(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 Lc,2);var $at={forceHalfFloat:GD};var Bc=`\n if (isnan(a)) return a;\n if (isnan(b)) return b;\n`;var Pr=class{constructor(e,t,o){this.variableNames=[\"A\",\"B\"],this.outputShape=w.assertAndGetBroadcastShape(t,o),this.enableShapeUniforms=ut(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 Xr=`\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 jr=class{constructor(e,t,o,n=!1){this.variableNames=[\"A\",\"B\"],this.supportsBroadcasting=!0,this.packedInputs=!0,this.packedOutput=!0,this.outputShape=w.assertAndGetBroadcastShape(t,o);let s=this.outputShape.length;this.enableShapeUniforms=ut(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 ${Re(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=Rt(\"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 Dt(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 HD={kernelName:Co,backendName:\"webgl\",kernelFunc:Dt};function Or(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=Dt({inputs:{x:o},backend:t}),p=Dt({inputs:{x:n},backend:t});return a.complexTensorInfos={real:i,imag:p},s}var KD={kernelName:Di,backendName:\"webgl\",kernelFunc:Or};var hv=\"return (a < 0.) ? b * a : a;\",gv=`\n vec4 aLessThanZero = vec4(lessThan(a, vec4(0.)));\n return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a);\n`;function f9(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{alpha:s}=o,a=t.makeTensorInfo([],\"float32\",y.createScalarValue(s,\"float32\")),i=A().getBool(\"WEBGL_PACK_BINARY_OPERATIONS\")?new jr(gv,n.shape,a.shape):new Pr(hv,n.shape,a.shape),p=t.runWebGLProgram(i,[n,a],\"float32\");return t.disposeIntermediateTensorInfo(a),p}var qD={kernelName:$n,backendName:\"webgl\",kernelFunc:f9};var xv=\"return (a < 0.) ? b * a : a;\",yv=`\n vec4 aLessThanZero = vec4(lessThan(a, vec4(0.)));\n return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a);\n`;function h9(r){let{inputs:e,backend:t}=r,{x:o,alpha:n}=e,s=A().getBool(\"WEBGL_PACK_BINARY_OPERATIONS\")?new jr(yv,o.shape,n.shape):new Pr(xv,o.shape,n.shape);return t.runWebGLProgram(s,[o,n],\"float32\")}var jD={kernelName:rs,backendName:\"webgl\",kernelFunc:h9};var Fo=\"if (isnan(x)) return x;\";function xe({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=A().getBool(\"WEBGL_PACK_UNARY_OPERATIONS\")&&e!=null,c;return u?c=new Fr(a.shape,e):c=new tr(a.shape,r),i.runWebGLProgram(c,[a],p)}}function nt({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[S,k]=C,_={dataId:S.dataId,dtype:S.dtype,shape:p.shape},$={dataId:k.dataId,dtype:k.dtype,shape:u.shape},R=new Pr(r,p.shape,u.shape);return c.runWebGLProgram(R,[_,$],dt(S.dtype,k.dtype))}),b=Or({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\"?w.fromUint8ToStringArray(f):f,x=p.dtype===\"string\"?w.fromUint8ToStringArray(h):h,[b,C]=n(p.shape,u.shape,g,x,l),S=c.makeTensorInfo(C,l),k=c.texData.get(S.dataId);return k.values=b,S}let m=A().getBool(\"WEBGL_PACK_BINARY_OPERATIONS\")&&e!=null,d;return m?d=new jr(e,p.shape,u.shape,t):d=new Pr(r,p.shape,u.shape),c.runWebGLProgram(d,[p,u],l)}}function yi(r,e=!1){if(r===\"linear\")return e?BD:AD;if(r===\"relu\")return e?VD:PD;if(r===\"elu\")return e?zD:FD;if(r===\"relu6\")return e?WD:OD;if(r===\"prelu\")return e?yv:xv;if(r===\"leakyrelu\")return e?gv:hv;if(r===\"sigmoid\")return e?UD:MD;throw new Error(`Activation ${r} has not been implemented for the WebGL backend.`)}var zc=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=ut(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\",S=\"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&&!xu(n.shape,p)&&!(c.texture!==null&&xu(c.shape,p))?QD(n,p,a):(a.incRef(n.dataId),{dataId:n.dataId,shape:p,dtype:n.dtype})}var ZD={kernelName:da,backendName:\"webgl\",kernelFunc:te};var rm=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 gh=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 x9(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=w.computeOptimalWindowSize(t);e.push({inSize:t,windowSize:o,outSize:Math.ceil(t/o)})}return e}function Yr(r,e,t,o){let n=x9(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=Re(this.rank),s=dv(\"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}}),R=te({inputs:{x:e},backend:n,attrs:{shape:_}}),D=[$,R],P=Math.max(x,b),O=t?$.shape[1]:$.shape[2],M=s!=null,L=a!=null,B=p===\"leakyrelu\",z=p!=null?yi(p,!0):null,U=M||L||B||z!=null,j;if((d===1||f===1)&&O>Cv&&U===!1){let Y=$,J=R;t&&(Y=bt({inputs:{x:$},backend:n,attrs:{perm:[0,2,1]}}),D.push(Y)),o&&(J=bt({inputs:{x:R},backend:n,attrs:{perm:[0,2,1]}}),D.push(J));let re=f!==1,ne=f===1,ee=Y;re&&(ee=te({inputs:{x:Y},backend:n,attrs:{shape:[P,O,1]}}),D.push(ee));let oe=f===1?2:1,ie=J;ne&&(ie=te({inputs:{x:J},backend:n,attrs:{shape:[P,1,O]}}),D.push(ie));let le=tm({inputs:{a:ee,b:ie},backend:n});j=wp({inputs:{x:le},backend:n,attrs:{axis:oe,keepDims:!0}}),D.push(le)}else{let Y=dt(r.dtype,e.dtype),J=new zc(k,_,[P,d,f],t,o,M,z,L,B),re=[$,R];if(s!=null&&re.push(s),L&&re.push(a),B){let ne=n.makeTensorInfo([],\"float32\",y.createScalarValue(i,\"float32\"));re.push(ne),D.push(ne)}j=n.runWebGLProgram(J,re,Y)}let q=te({inputs:{x:j},backend:n,attrs:{shape:S}});D.push(j);for(let Y of D)n.disposeIntermediateTensorInfo(Y);return q}function b9(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 Sp({a:n,b:s,transposeA:p,transposeB:u,backend:t,bias:a,preluActivationWeights:i,leakyreluAlpha:l,activation:c})}var rA={kernelName:So,backendName:\"webgl\",kernelFunc:b9};var oA=\"return abs(x);\";function C9(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=ch(s.values);return t.makeTensorInfo(o.shape,o.dtype,a)}let n;return A().getBool(\"WEBGL_PACK_UNARY_OPERATIONS\")?n=new Fr(o.shape,oA):n=new tr(o.shape,oA),t.runWebGLProgram(n,[o],o.dtype)}var nA={kernelName:Xs,backendName:\"webgl\",kernelFunc:C9};var w9=Wt+`\n if (abs(x) > 1.) {\n return NAN;\n }\n return acos(x);\n`,S9=xe({opSnippet:w9}),sA={kernelName:Vo,backendName:\"webgl\",kernelFunc:S9};var I9=Wt+`\n if (x < 1.0) return NAN;\nreturn log(x + sqrt(x * x - 1.0));`,v9=xe({opSnippet:I9}),aA={kernelName:Wo,backendName:\"webgl\",kernelFunc:v9};var iA=\"return a + b;\",k9=nt({opSnippet:iA,packedOpSnippet:iA,supportsComplex:!0,cpuKernelImpl:LR}),uA={kernelName:uo,backendName:\"webgl\",kernelFunc:k9};var bh=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 Ch=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 wh(r){let{inputs:e,backend:t}=r,o=e;if(o.length===1)return Dt({inputs:{x:o[0]},backend:t});if(o.length>A().getNumber(\"WEBGL_MAX_TEXTURES_IN_SHADER\")){let p=Math.floor(o.length/2),u=wh({inputs:o.slice(0,p),backend:t}),c=wh({inputs:o.slice(p),backend:t});return wh({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=A().getBool(\"WEBGL_PACK\")?new Ch(o[0].shape,s):new bh(o[0].shape,s);return t.runWebGLProgram(i,o,n)}var pA={kernelName:Uo,backendName:\"webgl\",kernelFunc:wh};function N9(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=w.getAxesPermutation(u,i),l=n;c!=null&&(l=bt({inputs:{x:n},backend:t,attrs:{perm:c}}),u=w.getInnerMostAxes(u.length,i)),w.assertAxesAreInnerMostDims(\"all\",u,i);let[m,d]=w.computeOutAndReduceShapes(l.shape,u),f=y.sizeFromShape(d),h=te({inputs:{x:l},backend:t,attrs:{shape:[-1,f]}}),g=Yr(h,h.dtype,\"all\",t),x;if(a){let b=w.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 cA={kernelName:Go,backendName:\"webgl\",kernelFunc:N9};function T9(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=w.getAxesPermutation(u,i),l=n;c!=null&&(l=bt({inputs:{x:n},backend:t,attrs:{perm:c}}),u=w.getInnerMostAxes(u.length,i)),w.assertAxesAreInnerMostDims(\"any\",u,i);let[m,d]=w.computeOutAndReduceShapes(l.shape,u),f=y.sizeFromShape(d),h=te({inputs:{x:l},backend:t,attrs:{shape:[-1,f]}}),g=Yr(h,h.dtype,\"any\",t),x;if(a){let b=w.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 lA={kernelName:Ho,backendName:\"webgl\",kernelFunc:T9};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 Ih=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=Re(p),c=Rt(\"coords\",p),l,m;if(a===1){m=p+1;let R=Re(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 d=[\"x\",\"y\",\"z\",\"w\",\"u\",\"v\"].slice(0,m),f=\".\"+d[m-1],h=d.map(R=>\"int \"+R),g=Rt(\"sourceLocR\",m-1).concat(\"inIdx.r\"),x=Rt(\"sourceLocG\",m-1).concat(\"inIdx.g\"),b=Rt(\"sourceLocB\",m-1).concat(\"inIdx.b\"),C=Rt(\"sourceLocA\",m-1).concat(\"inIdx.a\"),S=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(${S}(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 mA(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=w.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=mA(r,e,t,c);return r.disposeIntermediateTensorInfo(c),l}function dA(r,e,t,o=null){let n=o!=null?o.shape:e.shape,s=n[n.length-1],a=w.computeOptimalWindowSize(s),i=new Ih(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=dA(r,e,t,u);return r.disposeIntermediateTensorInfo(u),c}return u}function vh(r,e,t,o){let n=[t];if(w.assertAxesAreInnerMostDims(\"arg\"+o.charAt(0).toUpperCase()+o.slice(1),n,e.shape.length),!A().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]=w.computeOutAndReduceShapes(p.shape,n),l=y.sizeFromShape(c),m=te({inputs:{x:p},backend:r,attrs:{shape:[-1,l]}});s.push(m);let d=mA(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 dA(r,e,o)}function _9(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s}=o,a=y.parseAxisParam(s,n.shape),i=w.getAxesPermutation(a,n.shape.length),p=n,u=[];i!=null&&(p=bt({inputs:{x:n},backend:t,attrs:{perm:i}}),u.push(p),a=w.getInnerMostAxes(a.length,p.shape.length)),w.assertAxesAreInnerMostDims(\"argMax\",[a[0]],p.shape.length);let c=vh(t,p,a[0],\"max\");return u.forEach(l=>t.disposeIntermediateTensorInfo(l)),c}var fA={kernelName:Ys,backendName:\"webgl\",kernelFunc:_9};function E9(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s}=o,a=y.parseAxisParam(s,n.shape),i=w.getAxesPermutation(a,n.shape.length),p=n,u=[];i!=null&&(p=bt({inputs:{x:n},backend:t,attrs:{perm:i}}),u.push(p),a=w.getInnerMostAxes(a.length,p.shape.length)),w.assertAxesAreInnerMostDims(\"argMin\",[a[0]],p.shape.length);let c=vh(t,p,a[0],\"min\");return u.forEach(l=>t.disposeIntermediateTensorInfo(l)),c}var hA={kernelName:Qs,backendName:\"webgl\",kernelFunc:E9};var $9=Wt+`\n if (abs(x) > 1.) {\n return NAN;\n }\n return asin(x);\n`,R9=xe({opSnippet:$9}),gA={kernelName:Ko,backendName:\"webgl\",kernelFunc:R9};var D9=Wt+\"return log(x + sqrt(x * x + 1.0));\",A9=xe({opSnippet:D9}),xA={kernelName:qo,backendName:\"webgl\",kernelFunc:A9};var F9=Wt+`\n return atan(x);\n`,P9=xe({opSnippet:F9}),yA={kernelName:jo,backendName:\"webgl\",kernelFunc:P9};var O9=Bc+`\n return atan(a, b);\n`,M9=`\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 `+Xr+`\n return result;\n`,L9=nt({opSnippet:O9,packedOpSnippet:M9}),bA={kernelName:Yo,backendName:\"webgl\",kernelFunc:L9};var B9=Wt+`\n if ((x < -1.0) || (x > 1.0)) return NAN;\nreturn (log(1.0 + x) - log(1.0 - x)) / 2.0;`,z9=xe({opSnippet:B9}),CA={kernelName:Xo,backendName:\"webgl\",kernelFunc:z9};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,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 R=\">=\";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 ${R} 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\",S=`${t}(${t}(${t}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`;t===\"avg\"&&(S=\"avgValue / max(count, 1.0)\");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(${S});\n }\n `}},bu=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\",S=\"0.0\";if(C||(S=\"-1.0 / 1e-20\"),o){let P=\">=\";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 ${P} 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 / max(count, 1.0)\");let $=Math.floor(a/4)*4,R=a%4,D=`\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 = ${S};\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(${S});\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 ${D}\n }\n\n int xC = xCCorner + ${$};\n if (${R===1}) {\n vec4 values = vec4(\n getValue(batch, xD, xR, xC, ch),\n initializationValue,\n initializationValue,\n initializationValue\n );\n\n ${D}\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 ${D}\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 ${D}\n }\n }\n }\n setOutput(${_});\n }\n `}};function V9(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e;Vs(n,\"avgPool\");let{filterSize:s,strides:a,pad:i,dimRoundingMode:p}=o,u=1;y.assert(w.eitherStridesOrDilationsAreOne(a,u),()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${u}'`);let c=w.computePool2DInfo(n.shape,s,a,u,i,p);if(c.filterWidth===1&&c.filterHeight===1&&y.arraysEqual(c.inShape,c.outShape))return Dt({inputs:{x:n},backend:t});let l=new Us(c,\"avg\",!1);return t.runWebGLProgram(l,[n],\"float32\")}var wA={kernelName:Qo,backendName:\"webgl\",kernelFunc:V9};function W9(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=w.computePool3DInfo(n.shape,s,a,c,i,p,u),m=new bu(l,\"avg\",!1);return t.runWebGLProgram(m,[n],\"float32\")}var SA={kernelName:Zs,backendName:\"webgl\",kernelFunc:W9};var kh=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 `}},Nh=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 U9(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=w.computePool3DInfo(a.shape,i,p,l,u,c),d=new Nh(m);return t.runWebGLProgram(d,[n],a.dtype)}var IA={kernelName:Ri,backendName:\"webgl\",kernelFunc:U9};function G9(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s}=e,a=s;Vs([n,s],\"avgPoolGrad\");let{filterSize:i,strides:p,pad:u}=o,c=w.computePool2DInfo(a.shape,i,p,1,u),l=new kh(c);return t.runWebGLProgram(l,[n],a.dtype)}var vA={kernelName:$i,backendName:\"webgl\",kernelFunc:G9};function H9(r){let{inputs:e,backend:t,attrs:o}=r,{a:n,b:s}=e,{transposeA:a,transposeB:i}=o;return Sp({a:n,b:s,transposeA:a,transposeB:i,backend:t})}var kA={kernelName:Zo,backendName:\"webgl\",kernelFunc:H9};var Th=class{constructor(e,t,o,n,s,a){this.outputShape=[],this.variableNames=[\"x\",\"mean\",\"variance\"],w.assertAndGetBroadcastShape(e,t),w.assertAndGetBroadcastShape(e,o);let i=\"0.0\";n!=null&&(w.assertAndGetBroadcastShape(e,n),this.variableNames.push(\"offset\"),i=\"getOffsetAtOutCoords()\");let p=\"1.0\";s!=null&&(w.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 _h=class{constructor(e,t,o,n,s,a){this.packedInputs=!0,this.packedOutput=!0,this.variableNames=[\"x\",\"mean\",\"variance\"],w.assertAndGetBroadcastShape(e,t),w.assertAndGetBroadcastShape(e,o);let i=\"vec4(0.0)\";n!=null&&(w.assertAndGetBroadcastShape(e,n),this.variableNames.push(\"offset\"),i=\"getOffsetAtOutCoords()\");let p=\"vec4(1.0)\";s!=null&&(w.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 K9=({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=A().getBool(\"WEBGL_PACK_NORMALIZATION\")?new _h(o.shape,n.shape,s.shape,c,l,p):new Th(o.shape,n.shape,s.shape,c,l,p);return e.runWebGLProgram(m,u,u[0].dtype)},NA={kernelName:In,backendName:\"webgl\",kernelFunc:K9};var Eh=class{constructor(e){this.variableNames=[\"source\"],this.outputShape=e,this.rank=e.length;let t=Re(this.rank);this.customUniforms=[{name:\"start\",arrayIndex:this.rank,type:\"int\"}];let o=q9(this.rank),n,s=e.map((a,i)=>`sourceLoc.${wv[i]} = start[${i}] + coords.${wv[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 `}},wv=[\"x\",\"y\",\"z\",\"w\",\"u\",\"v\"];function q9(r){if(r===1)return\"sourceLoc\";if(r<=6)return wv.slice(0,r).map(e=>\"sourceLoc.\"+e).join(\",\");throw Error(`Slicing for rank ${r} is not yet supported`)}var $h=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=Re(this.rank),o=Rt(\"coords\",this.rank),n=Rt(\"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 j9(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=pt.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 Gs(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{begin:s,size:a}=o,[i,p]=pt.parseSliceParams(n,s,a);if(pt.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=gD(l.values,i,p,n.shape,n.dtype);return t.makeTensorInfo(p,n.dtype,m)}let{isPacked:u}=t.texData.get(n.dataId),c=pt.isSliceContinous(n.shape,i,p);if(u||!c){let l=A().getBool(\"WEBGL_PACK_ARRAY_OPERATIONS\")?new $h(p):new Eh(p),m=[i];return t.runWebGLProgram(l,[n],n.dtype,m)}return t.uploadToGPU(n.dataId),j9(n,i,p,t)}var TA={kernelName:ha,backendName:\"webgl\",kernelFunc:Gs};var X9=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=w.getReshaped(n.shape,s,i),u=w.getPermuted(p.length,s.length),c=w.getReshapedPermuted(n.shape,s,i),l=w.getSliceBeginCoords(a,s.length),m=w.getSliceSize(c,a,s.length),d=[],f=te({inputs:{x:n},backend:t,attrs:{shape:p}}),h=bt({inputs:{x:f},backend:t,attrs:{perm:u}}),g=te({inputs:{x:h},backend:t,attrs:{shape:c}}),x=Gs({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},_A={kernelName:Js,backendName:\"webgl\",kernelFunc:X9};function Y9(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=ph(i,p,s.dtype,s.shape,a);return t.makeTensorInfo([a],s.dtype,u)}var EA={kernelName:Jo,backendName:\"webgl\",kernelFunc:Y9};var Q9=`\n int r = int(a.r) & int(b.r);\n int g = int(a.g) & int(b.g);\n int rb = int(a.b) & int(b.b);\n int ra = int(a.a) & int(b.a);\n return vec4(r, g, rb, ra);\n`,Z9=`\n return float(int(a.r) & int(b.r));\n`;function J9(r){let{inputs:e,backend:t}=r,{a:o,b:n}=e,s=A().getBool(\"WEBGL_PACK_BINARY_OPERATIONS\"),a=A().getNumber(\"WEBGL_VERSION\");if(t.shouldExecuteOnCPU([o,n])||a===1){let p=t.texData.get(o.dataId).values,u=t.texData.get(n.dataId).values,[c,l]=zR(o.shape,n.shape,p,u,o.dtype),m=t.makeTensorInfo(l,o.dtype),d=t.texData.get(m.dataId);return d.values=c,m}let i;return s?i=new jr(Q9,o.shape,n.shape,!1):i=new Pr(Z9,o.shape,n.shape),t.runWebGLProgram(i,[o,n],o.dtype)}var $A={kernelName:qa,backendName:\"webgl\",kernelFunc:J9};function eJ(r){let{inputs:e,backend:t}=r,{s0:o,s1:n}=e,s=t.readSync(o.dataId),a=t.readSync(n.dataId),i=w.assertAndGetBroadcastShape(Array.from(s),Array.from(a));return t.makeTensorInfo([i.length],\"int32\",Int32Array.from(i))}var RA={kernelName:ea,backendName:\"webgl\",kernelFunc:eJ};var tJ=\"return float(a != b);\",Sv=nt({opSnippet:tJ,cpuKernelImpl:iD,dtype:\"bool\"}),DA={kernelName:Yn,backendName:\"webgl\",kernelFunc:Sv};function bi(r){let{inputs:e,backend:t}=r,{input:o}=e,n=t.texData.get(o.dataId);return Dt({inputs:{x:n.complexTensorInfos.real},backend:t})}var AA={kernelName:Hi,backendName:\"webgl\",kernelFunc:bi};var rJ=\"return float(int(x));\";function FA(r,e){let t=new tr(r.shape,rJ),o=e.runWebGLProgram(t,[r],\"int32\");return{dataId:o.dataId,shape:o.shape,dtype:o.dtype}}function Iv(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{dtype:s}=o;if(s===\"complex64\"){if(n.dtype===\"complex64\")return Dt({inputs:{x:n},backend:t});let a=Gr(n.shape),i=Iv({inputs:{x:n},backend:t,attrs:{dtype:\"float32\"}}),p=Or({inputs:{real:i,imag:a},backend:t});return a.dispose(),t.disposeIntermediateTensorInfo(i),p}if(n.dtype===\"complex64\"){let a=bi({inputs:{input:n},backend:t}),i=Iv({inputs:{x:a},backend:t,attrs:{dtype:s}});return t.disposeIntermediateTensorInfo(a),i}if(!y.hasEncodingLoss(n.dtype,s)){let a=Dt({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]=VR(a,n.shape,n.dtype,s);return t.makeTensorInfo(i,p,u)}if(s===\"int32\")return FA(n,t);if(s===\"bool\"){let a=t.makeTensorInfo([],\"bool\",y.getTypedArrayFromDType(\"bool\",1)),p=Sv({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 PA={kernelName:yo,backendName:\"webgl\",kernelFunc:Iv};var OA=\"return ceil(x);\",oJ=xe({opSnippet:OA,packedOpSnippet:OA,cpuKernelImpl:WR}),MA={kernelName:en,backendName:\"webgl\",kernelFunc:oJ};var Rh=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 Dh=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 nJ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{clipValueMin:s,clipValueMax:a}=o,i;A().getBool(\"WEBGL_PACK_CLIP\")?i=new Dh(n.shape):i=new Rh(n.shape);let p=[[s],[a]];return t.runWebGLProgram(i,[n],n.dtype,p)}var LA={kernelName:bo,backendName:\"webgl\",kernelFunc:nJ};var Ah=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 BA(r,e){return{dataId:e.dataId,dtype:e.dtype,shape:r.shape}}function sJ(r){let{inputs:e,backend:t}=r,{x:o}=e,n=t.texData.get(o.dataId),s=new Ah(o.shape),a=[BA(o,n.complexTensorInfos.real),BA(o,n.complexTensorInfos.imag)];return t.runWebGLProgram(s,a,a[0].dtype)}var zA={kernelName:Ai,backendName:\"webgl\",kernelFunc:sJ};var Fh=class{constructor(e){this.outputShape=[],this.outputShape=w.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}(${Ph(i,u,g)}),\n vec2(${Ph(c,u,g)}));\n }`}let d=p.length,f=p[p.length-1];m+=`\n return getChannel(\n getT${d}(${Ph(i,u,f)}),\n vec2(${Ph(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 Ph(r,e,t){let o=r.indexOf(e);return r.map((s,a)=>a===o?`${s} - ${t}`:s).join()}function Ip(r){let{inputs:e,backend:t}=r,{input:o}=e,n=t.texData.get(o.dataId);return Dt({inputs:{x:n.complexTensorInfos.imag},backend:t})}var VA={kernelName:Wi,backendName:\"webgl\",kernelFunc:Ip};function Vc(r,e,t){let o=r[0].dtype;if(o===\"complex64\"){let d=r.map(b=>bi({inputs:{input:b},backend:t})),f=r.map(b=>Ip({inputs:{input:b},backend:t})),h=Vc(d,e,t),g=Vc(f,e,t),x=Or({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(S=>{let _=[-1,y.sizeFromShape(S.shape.slice(e))];return te({inputs:{x:S},backend:t,attrs:{shape:_}})}),f=d.map(S=>({vals:t.readSync(S.dataId),shape:S.shape})),h=w.computeOutShape(d.map(S=>S.shape),1),g=d[0].shape[0]===1,x=UR(f,h,o,g),b=w.computeOutShape(r.map(S=>S.shape),e),C=t.makeTensorInfo(b,o,x);return d.forEach(S=>t.disposeIntermediateTensorInfo(S)),C}let s=r.filter(d=>y.sizeFromShape(d.shape)>0),a=A().getBool(\"WEBGL_PACK_ARRAY_OPERATIONS\")&&s[0].shape.length>1;if(s.length===1){let d=a?new tr(r[0].shape,La):new Fr(r[0].shape,La);return t.runWebGLProgram(d,r,o)}let i=A().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}=aJ(s,e,t),c=new Fh(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 aJ(r,e,t){let o=w.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 vv(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);w.assertParamsConsistent(a,s);let i=w.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?Dt({inputs:{x:p[0]},backend:t}):Vc(p,s,t)}var WA={kernelName:ta,backendName:\"webgl\",kernelFunc:vv};var Wc=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,S=\"\",k=\"\";o&&(n?S=`float activation(float a) {\n float b = getPreluActivationWeightsAtOutCoords();\n ${o}\n }`:s?S=`float activation(float a) {\n float b = getLeakyreluAlphaAtOutCoords();\n ${o}\n }`:S=`\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 ${S}\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 `}},Mh=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 Uc=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=ut(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 Bh(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 zh({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 S=Bh(s.shape,d);S!=null&&(s=te({inputs:{x:s},backend:o,attrs:{shape:S}}),x.push(s))}if(n!=null){let S=Bh(n.shape,d);S!=null&&(n=te({inputs:{x:n},backend:o,attrs:{shape:S}}),x.push(n))}if(!((l===1||m===1)&&c>Cv)&&u.isPacked&&d&&u.texture!=null&&p[2]%2!==0&&y.arraysEqual(u.shape.slice(-3),p.slice(-3))){let S=p[0]*p[1]*(p[2]+1),k={dataId:r.dataId,shape:[1,S,t.inChannels],dtype:r.dtype},_=u.shape;u.shape=u.shape.slice(),u.shape[u.shape.length-2]++,y.assert(xu(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 R=Sp({a:k,b:$,backend:o,transposeA:f,transposeB:h,bias:n,activation:i,preluActivationWeights:s,leakyreluAlpha:a}),D=o.texData.get(R.dataId);y.assert(D.isPacked,()=>\"batchMatMul result is expected to be packed\"),u.shape=_,D.shape=t.outShape,g=Dt({inputs:{x:R},backend:o}),g.shape=t.outShape,x.push(R)}else{let S=t.outHeight*t.outWidth,k=te({inputs:{x:r},backend:o,attrs:{shape:d?[t.batchSize,S,t.inChannels]:[t.batchSize,t.inChannels,S]}}),_=te({inputs:{x:e},backend:o,attrs:{shape:[1,t.inChannels,t.outChannels]}}),$=Sp({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 S of x)o.disposeIntermediateTensorInfo(S);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,S=[];if(s!=null){let q=Bh(s.shape,f);q!=null&&(s=te({inputs:{x:s},backend:o,attrs:{shape:q}}),S.push(s))}if(n!=null){let q=Bh(n.shape,f);q!=null&&(n=te({inputs:{x:n},backend:o,attrs:{shape:q}}),S.push(n))}let k=te({inputs:{x:e},backend:o,attrs:{shape:[1,h,y.sizeFromShape(e.shape)/h]}});S.push(k);let _=new Lh(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]],R=o.runWebGLProgram(_,[r],\"float32\",$),D=te({inputs:{x:R},backend:o,attrs:{shape:x}});S.push(R),S.push(D);let P=n!=null,O=s!=null,M=i===\"leakyrelu\",L=i?yi(i,!0):null,B=new zc(f?D.shape:k.shape,f?k.shape:D.shape,f?[t.batchSize,g,t.outChannels]:[t.batchSize,t.outChannels,g],b,C,P,L,O,M),z=f?[D,k]:[k,D];if(n&&z.push(n),O&&z.push(s),M){let q=o.makeTensorInfo([],\"float32\",y.createScalarValue(a,\"float32\"));z.push(q),S.push(q)}let U=o.runWebGLProgram(B,z,\"float32\"),j=te({inputs:{x:U},backend:o,attrs:{shape:t.outShape}});S.push(U);for(let q of S)o.disposeIntermediateTensorInfo(q);return j}function iJ(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=w.convertConv2DDataFormat(p),m=w.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=zh({x:n,filter:s,convInfo:m,backend:t});else if(m.strideWidth<=2&&l===\"channelsLast\"&&A().getBool(\"WEBGL_EXP_CONV\")){let h=new Uc(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(A().getBool(\"WEBGL_CONV_IM2COL\"))d=Vh({x:n,filter:s,convInfo:m,backend:t});else{let h=new Wc(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 UA={kernelName:tn,backendName:\"webgl\",kernelFunc:iJ};var Wh=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 ${a?`float dyValue = getDy(b, yR, yC, d2);\n float xValue = getX(b, xR, xC, d1);\n dotProd += (xValue * dyValue);`:`float dyValue = getDy(b, d2, yR, yC);\n float xValue = getX(b, d1, xR, xC);\n dotProd += (xValue * dyValue);`}\n }\n }\n }\n setOutput(dotProd);\n }\n `}},Uh=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 `}},Gh=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 `}},Hh=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 uJ(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=w.convertConv2DDataFormat(p),m=w.computeConv2DInfo(n.shape,c,a,1,i,u,!1,l),d=new Wh(m);return t.runWebGLProgram(d,[n,s],\"float32\")}var GA={kernelName:Fi,backendName:\"webgl\",kernelFunc:uJ};var Kh=class{constructor(e){this.variableNames=[\"dy\",\"W\"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:\"strides\",type:\"vec2\"}],this.outputShape=e.inShape,this.enableShapeUniforms=ut(this.outputShape.length);let t=e.filterHeight,o=e.filterWidth,n=t-1-e.padInfo.top,s=o-1-e.padInfo.left;this.userCode=`\n const ivec2 pads = ivec2(${n}, ${s});\n\n void main() {\n ivec4 coords = getOutputCoords();\n int batch = coords[0];\n int d1 = coords[3];\n\n ivec2 dyCorner = ivec2(coords[1], coords[2]) - pads;\n int dyRCorner = dyCorner.x;\n int dyCCorner = dyCorner.y;\n\n vec4 result = vec4(0.);\n for (int wR = 0; wR < ${t}; wR++) {\n float dyR = float(dyRCorner + wR) / strides[0];\n if (dyR < 0.0 || dyR >= ${e.outHeight}.0 || fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n int wRPerm = ${t} - 1 - wR;\n\n for (int wC = 0; wC < ${o}; wC++) {\n int wCPerm = ${o} - 1 - wC;\n\n float dyC = float(dyCCorner + wC) / strides[1];\n bool idyCVal = (dyC >= 0.0) && (dyC < ${e.outWidth}.0)\n && (fract(dyC) == 0.0);\n int idyC = int(dyC);\n\n float dyC2 = float(dyCCorner + wC + 1) / strides[1];\n bool idyCVal2 = (dyC2 >= 0.0) && (dyC2 < ${e.outWidth}.0)\n && (fract(dyC2) == 0.0);\n int idyC2 = int(dyC2);\n\n if (idyCVal && idyCVal2) {\n for (int d2 = 0; d2 < ${e.outChannels}; d2 += 2) {\n vec4 wValue = getW(wRPerm, wCPerm, d1, d2);\n vec4 dySample = getDy(batch, idyR, idyC, d2);\n vec4 dySample2 = (idyC / 2 == idyC2 / 2) ?\n dySample : getDy(batch, idyR, idyC2, d2);\n\n vec2 dyValue = mod(float(idyC), 2.) == 0. ?\n dySample.xy : dySample.zw;\n result.xy += vec2(dot(dyValue, wValue.xy),\n dot(dyValue, wValue.zw));\n\n dyValue = mod(float(idyC2), 2.) == 0. ?\n dySample2.xy : dySample2.zw;\n result.zw += vec2(dot(dyValue, wValue.xy),\n dot(dyValue, wValue.zw));\n }\n } else if (idyCVal) {\n for (int d2 = 0; d2 < ${e.outChannels}; d2 += 2) {\n vec4 wValue = getW(wRPerm, wCPerm, d1, d2);\n vec4 dySample = getDy(batch, idyR, idyC, d2);\n vec2 dyValue = mod(float(idyC), 2.) == 0. ?\n dySample.xy : dySample.zw;\n result.xy += vec2(dot(dyValue, wValue.xy),\n dot(dyValue, wValue.zw));\n }\n } else if (idyCVal2) {\n for (int d2 = 0; d2 < ${e.outChannels}; d2 += 2) {\n vec4 wValue = getW(wRPerm, wCPerm, d1, d2);\n vec4 dySample = getDy(batch, idyR, idyC2, d2);\n vec2 dyValue = mod(float(idyC2), 2.) == 0. ?\n dySample.xy : dySample.zw;\n result.zw += vec2(dot(dyValue, wValue.xy),\n dot(dyValue, wValue.zw));\n }\n }\n }\n }\n setOutput(result);\n }\n `}};function pJ(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=w.convertConv2DDataFormat(u),m=w.computeConv2DInfo(a,s.shape,i,1,p,c,!1,l);if(A().getBool(\"WEBGL_PACK_CONV2DTRANSPOSE\")&&l===\"channelsLast\"){let d=[[m.strideHeight,m.strideWidth]],f=new Kh(m);return t.runWebGLProgram(f,[n,s],\"float32\",d)}else{let d=new Uh(m);return t.runWebGLProgram(d,[n,s],\"float32\")}}var HA={kernelName:rn,backendName:\"webgl\",kernelFunc:pJ};function cJ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s}=e,{strides:a,pad:i,dilations:p}=o,u=w.computeConv3DInfo(n.shape,s.shape,a,p,i),c=new Mh(u);return t.runWebGLProgram(c,[n,s],\"float32\")}var KA={kernelName:on,backendName:\"webgl\",kernelFunc:cJ};function lJ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,dy:s}=e,{strides:a,pad:i,filterShape:p}=o,u=w.computeConv3DInfo(n.shape,p,a,1,i),c=new Gh(u);return t.runWebGLProgram(c,[n,s],\"float32\")}var qA={kernelName:ja,backendName:\"webgl\",kernelFunc:lJ};function mJ(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,filter:s}=e,{pad:a,strides:i,inputShape:p}=o,u=w.computeConv3DInfo(p,s.shape,i,1,a),c=new Hh(u);return t.runWebGLProgram(c,[n,s],\"float32\")}var jA={kernelName:nn,backendName:\"webgl\",kernelFunc:mJ};var dJ=Fo+`\n return cos(x);\n`,fJ=`\n vec4 result = cos(x);\n bvec4 isNaN = isnan(x);\n ${Xr}\n return result;\n`,hJ=xe({opSnippet:dJ,packedOpSnippet:fJ}),XA={kernelName:sn,backendName:\"webgl\",kernelFunc:hJ};var gJ=`\n float e2x = exp(-x);\n return (e2x + 1.0 / e2x) / 2.0;\n`,xJ=xe({opSnippet:gJ}),YA={kernelName:an,backendName:\"webgl\",kernelFunc:xJ};var qh=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,S,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 = ${S};\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 yJ=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 qh(n.shape,s.shape,i,p,u);return t.runWebGLProgram(c,[n,s,a],\"float32\")},QA={kernelName:cn,backendName:\"webgl\",kernelFunc:yJ};var vp;(function(r){r.Prod=\"*\",r.Sum=\"+\"})(vp||(vp={}));var om=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===vp.Prod?\"1.0\":\"0.0\",i=o?a:`getX(${ZA(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 ${Re(s)} coords = getOutputCoords();\n int end = ${JA(s,\"coords\",this.op)};\n float val = ${i};\n int pow2 = int(pow(2.0, index));\n if (${u}) {\n int idx = ${c};\n ${JA(s,\"coords\",this.op)} = idx;\n val ${this.op}= getX(${ZA(s,\"coords\",this.op)});\n }\n setOutput(val);\n }\n `}};function ZA(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 JA(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 jh(r,e,t,o,n,s){let a=e.shape.length,i=w.getAxesPermutation([o],a),p=e;i!=null&&(p=bt({inputs:{x:e},backend:t,attrs:{perm:i}}));let u=w.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=Dt({inputs:{x:p},backend:t});for(let m=0;m<=Math.ceil(Math.log2(c))-1;m++){let d=new om(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 om(r,p.shape,n,s),d=l;l=t.runWebGLProgram(m,[l],l.dtype),t.disposeIntermediateTensorInfo(d)}if(i!=null){let m=w.getUndoAxesPermutation(i),d=bt({inputs:{x:l},backend:t,attrs:{perm:m}});return t.disposeIntermediateTensorInfo(l),t.disposeIntermediateTensorInfo(p),d}return l}function bJ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,exclusive:a,reverse:i}=o;return jh(vp.Prod,n,t,s,a,i)}var eF={kernelName:un,backendName:\"webgl\",kernelFunc:bJ};function CJ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,exclusive:a,reverse:i}=o;return jh(vp.Sum,n,t,s,a,i)}var tF={kernelName:pn,backendName:\"webgl\",kernelFunc:CJ};function wJ(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=ph(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=BR(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 rF={kernelName:ra,backendName:\"webgl\",kernelFunc:wJ};var Xh=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 SJ(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 Xh(f,s,a);return t.runWebGLProgram(h,[n],n.dtype)}var oF={kernelName:ln,backendName:\"webgl\",kernelFunc:SJ};var Gc=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=ut(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 Hc=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=ut(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=w.computeConv2DInfo(n.shape,s.shape,a,c,i,u,!0),m;A().getBool(\"WEBGL_PACK_DEPTHWISECONV\")&&l.strideWidth<=2&&l.outChannels/l.inChannels===1?m=new Hc(l):m=new Gc(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 nF={kernelName:mn,backendName:\"webgl\",kernelFunc:IJ};var Yh=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 `}},Qh=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 vJ(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=w.computeConv2DInfo(n.shape,c,a,i,p,u,!0),m=new Yh(l);return t.runWebGLProgram(m,[n,s],\"float32\")}var sF={kernelName:Pi,backendName:\"webgl\",kernelFunc:vJ};function kJ(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=w.computeConv2DInfo(c,s.shape,a,i,p,u,!0),m=new Qh(l);return t.runWebGLProgram(m,[n,s],\"float32\")}var aF={kernelName:Oi,backendName:\"webgl\",kernelFunc:kJ};var Zh=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 NJ(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 Zh(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 iF={kernelName:oa,backendName:\"webgl\",kernelFunc:NJ};var Jh=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 TJ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s}=e,{strides:a,pad:i,dilations:p}=o,u=w.computeDilation2DInfo(n.shape,s.shape,a,i,\"NHWC\",p),c,l=new Jh(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 uF={kernelName:dn,backendName:\"webgl\",kernelFunc:TJ};function _J(r){let{inputs:e,backend:t,attrs:o}=r,{equation:n}=o,s=e,{allDims:a,summedDims:i,idDims:p}=w.decodeEinsumEquation(n,s.length);w.checkEinsumDimSizes(a.length,p,s);let{path:u,steps:c}=w.getEinsumComputePath(i,p),l=c.length,m=null,d=a.length,f=[];for(let h=0;h=0&&(m=wp({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 pF={kernelName:Bi,backendName:\"webgl\",kernelFunc:_J};var EJ=\"return (x >= 0.0) ? x : (exp(x) - 1.0);\",$J=`\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`,RJ=xe({opSnippet:EJ,packedOpSnippet:$J}),cF={kernelName:hn,backendName:\"webgl\",kernelFunc:RJ};var DJ=\"return (b >= 0.0) ? a : a * (b + 1.0);\",AJ=`\n vec4 bGTEZero = vec4(greaterThanEqual(b, vec4(0.)));\n return (bGTEZero * a) + ((vec4(1.0) - bGTEZero) * (a * (b + vec4(1.0))));\n`,FJ=r=>{let{inputs:e,backend:t}=r,{dy:o,y:n}=e,s=A().getBool(\"WEBGL_PACK_BINARY_OPERATIONS\")?new jr(AJ,o.shape,n.shape):new Pr(DJ,o.shape,n.shape);return t.runWebGLProgram(s,[o,n],o.dtype)},lF={kernelName:Xa,backendName:\"webgl\",kernelFunc:FJ};var PJ=`\n return vec4(equal(a, b));\n`,OJ=\"return float(a == b);\",MJ=nt({opSnippet:OJ,packedOpSnippet:PJ,dtype:\"bool\",cpuKernelImpl:GR}),mF={kernelName:xn,backendName:\"webgl\",kernelFunc:MJ};var LJ=`\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 = ${w.ERF_P};\n float a1 = ${w.ERF_A1};\n float a2 = ${w.ERF_A2};\n float a3 = ${w.ERF_A3};\n float a4 = ${w.ERF_A4};\n float a5 = ${w.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`,BJ=xe({opSnippet:LJ}),dF={kernelName:gn,backendName:\"webgl\",kernelFunc:BJ};var zJ=Fo+`\n return exp(x);\n`,VJ=`\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`,kv=xe({opSnippet:zJ,packedOpSnippet:VJ,cpuKernelImpl:HR,dtype:\"float32\"}),fF={kernelName:yn,backendName:\"webgl\",kernelFunc:kv};function eg(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 hF={kernelName:na,backendName:\"webgl\",kernelFunc:eg};var gF=\"return exp(x) - 1.0;\",WJ=xe({opSnippet:gF,packedOpSnippet:gF,cpuKernelImpl:KR}),xF={kernelName:bn,backendName:\"webgl\",kernelFunc:WJ};var nm=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 tg(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 nm(\"real\",p,e),c=new nm(\"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=Or({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 UJ(r){let{inputs:e,backend:t}=r,{input:o}=e;return tg(o,!1,t)}var yF={kernelName:zi,backendName:\"webgl\",kernelFunc:UJ};var rg=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 Ci(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 rg(o,n),i=[[n]];return e.runWebGLProgram(a,[],s,i)}}var bF={kernelName:sa,backendName:\"webgl\",kernelFunc:Ci};var og=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 CF={kernelName:Cn,backendName:\"webgl\",kernelFunc:({inputs:r,backend:e})=>{let{image:t}=r,o=e,n=new og(t.shape);return o.runWebGLProgram(n,[t],t.dtype)}};var wF=\"return floor(x);\",GJ=xe({opSnippet:wF,packedOpSnippet:wF,cpuKernelImpl:qR}),SF={kernelName:wn,backendName:\"webgl\",kernelFunc:GJ};var HJ=`\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`,KJ=`\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`,qJ=nt({opSnippet:HJ,packedOpSnippet:KJ,dtype:\"int32\"}),IF={kernelName:Sn,backendName:\"webgl\",kernelFunc:qJ};var ng=class{constructor(e){this.variableNames=[\"A\"];let t=It(),[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 sg=class{constructor(e){this.variableNames=[\"A\"],this.packedInputs=!1,this.packedOutput=!0;let t=It(),[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 vF={kernelName:Du,backendName:\"webgl\",kernelFunc:jJ},Kc,Nv=A().getBool(\"CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU\");function jJ(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=A().getBool(\"CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU\");(Kc==null||h!==Nv)&&(Nv=h,Kc=document.createElement(\"canvas\").getContext(\"2d\",{willReadFrequently:Nv})),Kc.canvas.width=p,Kc.canvas.height=u,Kc.drawImage(n,0,0,p,u),n=Kc.canvas}let m=t.makeTensorInfo(c,\"int32\");t.texData.get(m.dataId).usage=mr.PIXELS,t.gpgpu.uploadPixelDataToTexture(t.getTexture(m.dataId),n);let d=A().getBool(\"WEBGL_PACK\")?new sg(l):new ng(l),f=t.runWebGLProgram(d,[m],\"int32\");return t.disposeData(m.dataId),f}function XJ(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=w.convertConv2DDataFormat(c),g=w.computeConv2DInfo(n.shape,s.shape,p,l,u,m,!1,h),x,b=[],C=a!=null,S=i!=null,k=d===\"leakyrelu\",_=()=>{let R=[n,s],D=(P,O)=>{if(O===\"NCHW\"&&P.shape.length===1&&P.shape[0]!==1){let M=te({inputs:{x:P},backend:t,attrs:{shape:[P.shape[0],1,1]}});return b.push(M),M}return P};if(C&&R.push(D(a,c)),S&&R.push(D(i,c)),k){let P=t.makeTensorInfo([],\"float32\",y.createScalarValue(f,\"float32\"));R.push(P),b.push(P)}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\"))x=zh({x:n,filter:s,convInfo:g,backend:t,bias:a,activation:d,preluActivationWeights:i,leakyreluAlpha:f});else if(g.strideWidth<=2&&h===\"channelsLast\"&&A().getBool(\"WEBGL_EXP_CONV\")){let R=d?yi(d,!0):null,D=new Uc(g,C,R,S,k),P=[[g.padInfo.top,g.padInfo.left],[g.strideHeight,g.strideWidth],[g.dilationHeight,g.dilationWidth],[g.inHeight,g.inWidth]],O=_();x=t.runWebGLProgram(D,O,\"float32\",P)}else if(A().getBool(\"WEBGL_CONV_IM2COL\"))x=Vh({x:n,filter:s,convInfo:g,backend:t,bias:a,activation:d,preluActivationWeights:i,leakyreluAlpha:f});else{let R=d?yi(d,!1):null,D=new Wc(g,C,R,S,k),P=_();x=t.runWebGLProgram(D,P,\"float32\")}let $=te({inputs:{x},backend:t,attrs:{shape:g.outShape}});return b.push(x),b.forEach(R=>t.disposeIntermediateTensorInfo(R)),$}var kF={kernelName:Io,backendName:\"webgl\",kernelFunc:XJ};function YJ(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(w.eitherStridesOrDilationsAreOne(p,h),()=>`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${p} and dilations '${h}'`);let g=w.computeConv2DInfo(n.shape,s.shape,p,h,u,l,!0),x=A().getBool(\"WEBGL_PACK_DEPTHWISECONV\")&&g.strideWidth<=2&&g.outChannels/g.inChannels===1,b=m?yi(m,x):null,C=[n,s],S=a!=null,k=i!=null,_=m===\"leakyrelu\";if(S&&C.push(a),k&&C.push(i),_){let P=t.makeTensorInfo([],\"float32\",y.createScalarValue(d,\"float32\"));C.push(P),f.push(P)}let $;x?$=new Hc(g,S,b,k,_):$=new Gc(g,S,b,k,_);let R=[[g.padInfo.top,g.padInfo.left],[g.strideHeight,g.strideWidth],[g.dilationHeight,g.dilationWidth],[g.inHeight,g.inWidth]],D=t.runWebGLProgram($,C,\"float32\",R);return f.forEach(P=>t.disposeIntermediateTensorInfo(P)),D}var NF={kernelName:vo,backendName:\"webgl\",kernelFunc:YJ};var ag=class{constructor(e,t,o,n){this.sliceDim=e,this.strides=t,this.paramsShape=n,this.variableNames=[\"x\",\"indices\"],this.outputShape=o;let s=Re(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 QJ(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]=w.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=jR(x,b,o.dtype,u,a,c,l,o.shape,i);return t.makeTensorInfo(p,o.dtype,C.values)}let f=new ag(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 TF={kernelName:vn,backendName:\"webgl\",kernelFunc:QJ};var ig=class{constructor(e,t){this.variableNames=[\"A\",\"indices\"],this.outputShape=t,this.rank=t.length;let o=Re(this.rank),n=ZJ(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 ZJ(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=w.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),S=XR(C,b,f);return l.forEach(k=>t.disposeIntermediateTensorInfo(k)),t.makeTensorInfo(u.outputShape,S.dtype,S.values)}let h=new ig(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 _F={kernelName:aa,backendName:\"webgl\",kernelFunc:Tv};var JJ=\"return float(a > b);\",eee=`\n return vec4(greaterThan(a, b));\n`,tee=nt({opSnippet:JJ,packedOpSnippet:eee,cpuKernelImpl:YR,dtype:\"bool\"}),EF={kernelName:kn,backendName:\"webgl\",kernelFunc:tee};var ree=\"return float(a >= b);\",oee=`\n return vec4(greaterThanEqual(a, b));\n`,nee=nt({opSnippet:ree,packedOpSnippet:oee,dtype:\"bool\",cpuKernelImpl:QR}),$F={kernelName:Nn,backendName:\"webgl\",kernelFunc:nee};function see(r){let{inputs:e,backend:t}=r,{input:o}=e;return tg(o,!0,t)}var RF={kernelName:Vi,backendName:\"webgl\",kernelFunc:see};var aee=\"return float(!isnan(x) && !isinf(x));\",iee=xe({opSnippet:aee,dtype:\"bool\"}),DF={kernelName:Tn,backendName:\"webgl\",kernelFunc:iee};var uee=\"return float(isinf(x));\",pee=xe({opSnippet:uee,dtype:\"bool\"}),AF={kernelName:_n,backendName:\"webgl\",kernelFunc:pee};var cee=\"return float(isnan(x));\",lee=xe({opSnippet:cee,dtype:\"bool\"}),FF={kernelName:En,backendName:\"webgl\",kernelFunc:lee};var mee=\"return float(a < b);\",dee=`\n return vec4(lessThan(a, b));\n`,fee=nt({opSnippet:mee,packedOpSnippet:dee,cpuKernelImpl:ZR,dtype:\"bool\"}),PF={kernelName:Rn,backendName:\"webgl\",kernelFunc:fee};var hee=\"return float(a <= b);\",gee=`\n return vec4(lessThanEqual(a, b));\n`,xee=nt({opSnippet:hee,packedOpSnippet:gee,cpuKernelImpl:JR,dtype:\"bool\"}),OF={kernelName:Dn,backendName:\"webgl\",kernelFunc:xee};function yee(r){let{backend:e,attrs:t}=r,{start:o,stop:n,num:s}=t,a=eD(o,n,s);return e.makeTensorInfo([a.length],\"float32\",a)}var MF={kernelName:An,backendName:\"webgl\",kernelFunc:yee};var bee=Fo+`\n return x < 0.0 ? 0./0. : log(x);\n`,Cee=`\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`,wee=xe({opSnippet:bee,packedOpSnippet:Cee,cpuKernelImpl:tD}),LF={kernelName:Fn,backendName:\"webgl\",kernelFunc:wee};var See=Fo+`\n return log(1.0 + x);\n`,Iee=xe({opSnippet:See}),BF={kernelName:Pn,backendName:\"webgl\",kernelFunc:Iee};var vee=\"return float(a >= 1.0 && b >= 1.0);\",kee=`\n return vec4(\n vec4(greaterThanEqual(a, vec4(1.0))) *\n vec4(greaterThanEqual(b, vec4(1.0))));\n`,Nee=nt({opSnippet:vee,packedOpSnippet:kee,dtype:\"bool\"}),zF={kernelName:On,backendName:\"webgl\",kernelFunc:Nee};var Tee=\"return float(!(x >= 1.0));\",_ee=xe({opSnippet:Tee}),VF={kernelName:Mn,backendName:\"webgl\",kernelFunc:_ee};var Eee=\"return float(a >= 1.0 || b >= 1.0);\",$ee=`\n return min(\n vec4(greaterThanEqual(a, vec4(1.0))) +\n vec4(greaterThanEqual(b, vec4(1.0))),\n vec4(1.0));\n`,Ree=nt({opSnippet:Eee,packedOpSnippet:$ee,dtype:\"bool\"}),WF={kernelName:Ln,backendName:\"webgl\",kernelFunc:Ree};var ug=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 pg=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 Dee=r=>{let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{depthRadius:s,bias:a,alpha:i,beta:p}=o,u=A().getBool(\"WEBGL_PACK_NORMALIZATION\")?new pg(n.shape,s,a,i,p):new ug(n.shape,s,a,i,p);return t.runWebGLProgram(u,[n],n.dtype)},UF={kernelName:Bn,backendName:\"webgl\",kernelFunc:Dee};var cg=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 Aee=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 cg(n.shape,i,p,u,c);return t.runWebGLProgram(l,[n,s,a],n.dtype)},GF={kernelName:Ya,backendName:\"webgl\",kernelFunc:Aee};function HF(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=Yr(i,r.dtype,\"max\",o),u=te({inputs:{x:p},attrs:{shape:t},backend:o});return o.disposeIntermediateTensorInfo(i),o.disposeIntermediateTensorInfo(p),u}function _v(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=w.getAxesPermutation(u,i),l=c!=null,m=t.shouldExecuteOnCPU([n]),d=n;if(l){if(m){let C=t.texData.get(d.dataId).values,S=new Array(i);for(let $=0;$`Error in maxPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${u}'`);let c=w.computePool2DInfo(n.shape,s,a,u,i,p);if(c.filterWidth===1&&c.filterHeight===1&&y.arraysEqual(c.inShape,c.outShape))return Dt({inputs:{x:n},backend:t});let l=new Us(c,\"max\",!1);return t.runWebGLProgram(l,[n],n.dtype)}var jF={kernelName:Wn,backendName:\"webgl\",kernelFunc:Mee};function Lee(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=w.computePool3DInfo(n.shape,s,a,c,i,u,p),m=new bu(l,\"max\",!1);return t.runWebGLProgram(m,[n],n.dtype)}var XF={kernelName:ia,backendName:\"webgl\",kernelFunc:Lee};var lg=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 `}},mg=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 Bee(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=w.computePool3DInfo(a.shape,i,p,l,u,c),d=new bu(m,\"max\",!0),f=t.runWebGLProgram(d,[a],a.dtype),h=new mg(m),g=t.runWebGLProgram(h,[n,f],a.dtype);return t.disposeIntermediateTensorInfo(f),g}var YF={kernelName:Gi,backendName:\"webgl\",kernelFunc:Bee};function zee(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s,output:a}=e,i=s;Vs([s,a],\"maxPoolGrad\");let{filterSize:p,strides:u,pad:c,dimRoundingMode:l}=o,m=w.computePool2DInfo(i.shape,p,u,1,c,l),d=!0,f=new Us(m,\"max\",d),h=t.runWebGLProgram(f,[i],i.dtype),g=new lg(m),x=t.runWebGLProgram(g,[n,h],i.dtype);return t.disposeIntermediateTensorInfo(h),x}var QF={kernelName:Ui,backendName:\"webgl\",kernelFunc:zee};function ZF(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 JF={kernelName:ua,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(w.eitherStridesOrDilationsAreOne(s,u),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${s} and dilations '${u}'`);let c=w.computePool2DInfo(o.shape,n,s,u,a),[l,m]=ZF(o,i,c,p);return[l,m]}};function e3(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=Yr(i,\"float32\",\"mean\",o),u=te({inputs:{x:p},attrs:{shape:t},backend:o});return o.disposeIntermediateTensorInfo(i),o.disposeIntermediateTensorInfo(p),u}var t3={kernelName:Un,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=w.getAxesPermutation(u,i),l=c!=null,m=a.shouldExecuteOnCPU([o]),d=[],f=o;if(l){if(m){let S=a.texData.get(f.dataId).values,k=new Array(i);for(let R=0;Rc[0]+e[l]+c[1]);let n=e.length,s=Re(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 fg=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=Re(n),a=t.map(f=>f[0]).join(\",\"),i=t.map((f,h)=>f[0]+e[h]).join(\",\"),p=Rt(\"rc\",n),u=Rt(\"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 Hee=({inputs:r,backend:e,attrs:t})=>{let{x:o}=r,{paddings:n,mode:s}=t,a=A().getBool(\"WEBGL_PACK_ARRAY_OPERATIONS\")?new fg(o.shape,n,s):new dg(o.shape,n,s);return e.runWebGLProgram(a,[o],o.dtype)},n3={kernelName:Kn,backendName:\"webgl\",kernelFunc:Hee};var Kee=`if (b == 0.0) return NAN;\n return mod(a, b);`,qee=`\n vec4 result = mod(a, b);\n bvec4 isNaN = equal(b, vec4(0.0));\n `+Xr+`\n return result;\n`,jee=nt({opSnippet:Kee,packedOpSnippet:qee}),s3={kernelName:qn,backendName:\"webgl\",kernelFunc:jee};var hg=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 Xee=`\nif (a == b) {\n return 1.0;\n};\nreturn a / b;`,Yee=`\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`,Ev=nt({opSnippet:Xee,packedOpSnippet:Yee,checkOutOfBounds:!0}),a3={kernelName:fn,backendName:\"webgl\",kernelFunc:Ev};var i3=\"return a - b;\",$v=nt({opSnippet:i3,packedOpSnippet:i3,supportsComplex:!0,cpuKernelImpl:kD}),u3={kernelName:Ts,backendName:\"webgl\",kernelFunc:$v};function Rv(r){let{inputs:e,backend:t,attrs:o}=r,{logits:n}=e,{dim:s}=o,a=y.parseAxisParam([s],n.shape),i=_v({inputs:{x:n},backend:t,attrs:{reductionIndices:a,keepDims:!1}}),p=w.expandShapeToKeepDim(i.shape,a),u=te({inputs:{x:i},backend:t,attrs:{shape:p}}),c=$v({inputs:{a:n,b:u},backend:t}),l=kv({inputs:{x:c},backend:t}),m=wp({inputs:{x:l},backend:t,attrs:{axis:a,keepDims:!1}}),d=te({inputs:{x:m},backend:t,attrs:{shape:p}}),f=Ev({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 p3={kernelName:Is,backendName:\"webgl\",kernelFunc:Rv};function Qee(r){let{inputs:e,backend:t,attrs:o}=r,{logits:n}=e,{numSamples:s,seed:a,normalized:i}=o,p=i?n:Rv({inputs:{logits:n},backend:t,attrs:{dim:n.shape.length-1}}),u=p.shape[0],c=p.shape[1],l=new hg(u,c,s),m=[[a]],d=t.runWebGLProgram(l,[p],\"int32\",m);return i||t.disposeIntermediateTensorInfo(p),d}var c3={kernelName:jn,backendName:\"webgl\",kernelFunc:Qee};var Zee=Wt+`\n return -x;\n`,Jee=`\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 ete(r){let{inputs:e,backend:t}=r,{x:o}=e;if(t.shouldExecuteOnCPU([o])){let s=t.texData.get(o.dataId),[a,i]=aD(s.values,o.shape,o.dtype);return t.makeTensorInfo(i,o.dtype,a)}let n;return A().getBool(\"WEBGL_PACK_UNARY_OPERATIONS\")?n=new Fr(o.shape,Jee):n=new tr(o.shape,Zee),t.runWebGLProgram(n,[o],o.dtype)}var l3={kernelName:pa,backendName:\"webgl\",kernelFunc:ete};var tte=Vt.nonMaxSuppressionV3Impl;function rte(r){w.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}=tte(u,c,a,i,p);return t.makeTensorInfo([l.length],\"int32\",new Int32Array(l))}var m3={kernelName:Qn,backendName:\"webgl\",kernelFunc:rte};var ote=Vt.nonMaxSuppressionV4Impl;function nte(r){w.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}=ote(c,l,a,i,p,u);return[t.makeTensorInfo([m.length],\"int32\",new Int32Array(m)),t.makeTensorInfo([],\"int32\",new Int32Array([d]))]}var d3={kernelName:Qa,backendName:\"webgl\",kernelFunc:nte};var ste=Vt.nonMaxSuppressionV5Impl;function ate(r){w.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}=ste(c,l,m,d,f,h);return[t.makeTensorInfo([g.length],\"int32\",new Int32Array(g)),t.makeTensorInfo([x.length],\"float32\",new Float32Array(x))]}var f3={kernelName:Zn,backendName:\"webgl\",kernelFunc:ate};var gg=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 ite=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 gg(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},h3={kernelName:Jn,backendName:\"webgl\",kernelFunc:ite};function sm(r){let{inputs:e,backend:t}=r,{x:o}=e;if(o.dtype===\"complex64\"){let n=bi({inputs:{input:o},backend:t}),s=sm({inputs:{x:n},backend:t}),a=Ip({inputs:{input:o},backend:t}),i=sm({inputs:{x:a},backend:t}),p=Or({inputs:{real:s,imag:i},backend:t});return t.disposeIntermediateTensorInfo(n),t.disposeIntermediateTensorInfo(s),t.disposeIntermediateTensorInfo(a),t.disposeIntermediateTensorInfo(i),p}else return Ci({attrs:{shape:o.shape,dtype:o.dtype,value:o.dtype===\"string\"?\"\":0},backend:t})}var g3={kernelName:Sa,backendName:\"webgl\",kernelFunc:sm};function x3(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=bi({inputs:{input:o},backend:t}),s=x3({inputs:{x:n},backend:t}),a=Ip({inputs:{input:o},backend:t}),i=sm({inputs:{x:a},backend:t}),p=Or({inputs:{real:s,imag:i},backend:t});return t.disposeIntermediateTensorInfo(n),t.disposeIntermediateTensorInfo(s),t.disposeIntermediateTensorInfo(a),t.disposeIntermediateTensorInfo(i),p}else return Ci({attrs:{shape:o.shape,dtype:o.dtype,value:1},backend:t})}var y3={kernelName:ca,backendName:\"webgl\",kernelFunc:x3};function ute(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=>{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:t,attrs:{dim:n}});return i.push(l),l}),u=vv({inputs:p,backend:t,attrs:{axis:n}});return i.forEach(c=>t.disposeIntermediateTensorInfo(c)),u}var b3={kernelName:la,backendName:\"webgl\",kernelFunc:ute};var xg=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=Re(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 yg=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=Re(n),a=t.map(h=>h[0]).join(\",\"),i=t.map((h,g)=>h[0]+e[g]).join(\",\"),p=Rt(\"rc\",n),u=Rt(\"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 Ci({backend:t,attrs:{shape:u,value:a,dtype:n.dtype}})}let i=A().getBool(\"WEBGL_PACK_ARRAY_OPERATIONS\")?new yg(n.shape,s,a):new xg(n.shape,s,a),p=[[a]];return t.runWebGLProgram(i,[n],n.dtype,p)},C3={kernelName:es,backendName:\"webgl\",kernelFunc:Dv};var pte=`\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`,cte=`\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 `+Xr+`\n return result;\n`,lte=nt({opSnippet:pte,packedOpSnippet:cte}),w3={kernelName:ts,backendName:\"webgl\",kernelFunc:lte};function mte(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=w.getAxesPermutation(c,i),m=n;l!=null&&(m=bt({inputs:{x:n},backend:t,attrs:{perm:l}}),c=w.getInnerMostAxes(c.length,i),p.push(m)),w.assertAxesAreInnerMostDims(\"prod\",c,i);let d;if(t.shouldExecuteOnCPU([m])){let f=t.texData.get(m.dataId).values,{outVals:h,outShape:g,outDtype:x}=uD(m.shape,m.dtype,f,c);d=t.makeTensorInfo(g,x,h)}else{let[f,h]=w.computeOutAndReduceShapes(m.shape,c),g=y.sizeFromShape(h),x=te({inputs:{x:m},backend:t,attrs:{shape:[-1,g]}}),b=oi(n.dtype),C=Yr(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=w.expandShapeToKeepDim(d.shape,u);d=te({inputs:{x:d},backend:t,attrs:{shape:f}})}return p.forEach(f=>t.disposeIntermediateTensorInfo(f)),d}var S3={kernelName:os,backendName:\"webgl\",kernelFunc:mte};function dte(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]=pD(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 I3={kernelName:Hp,backendName:\"webgl\",kernelFunc:dte};function fte(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]=cD(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 v3={kernelName:Kp,backendName:\"webgl\",kernelFunc:fte};function hte(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]=lD(u,n.shape,c,s.shape,s.dtype,l,a.shape,m,d,p);return t.makeTensorInfo(f,s.dtype,h)}var k3={kernelName:qp,backendName:\"webgl\",kernelFunc:hte};var Av=r=>{let{backend:e,attrs:t}=r,{start:o,stop:n,step:s,dtype:a}=t,i=mD(o,n,s,a);return e.makeTensorInfo([i.length],a,i)},N3={kernelName:ma,backendName:\"webgl\",kernelFunc:Av};var gte=\"return 1.0 / x;\",xte=xe({opSnippet:gte}),T3={kernelName:ns,backendName:\"webgl\",kernelFunc:xte};var yte=Wt+`\n return (x < 0.0) ? 0.0 : x;\n`,bte=`\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`,Cte=xe({opSnippet:yte,packedOpSnippet:bte}),_3={kernelName:ss,backendName:\"webgl\",kernelFunc:Cte};var wte=Wt+`\n return (x < 0.0) ? 0.0 : min(6.0, x);\n`,Ste=`\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`,Ite=xe({opSnippet:wte,packedOpSnippet:Ste}),E3={kernelName:us,backendName:\"webgl\",kernelFunc:Ite};var bg=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 Cg=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 vte(r){let{inputs:e,backend:t,attrs:o}=r,{images:n}=e,{alignCorners:s,halfPixelCenters:a,size:i}=o,[p,u]=i,c=A().getBool(\"WEBGL_PACK_IMAGE_OPERATIONS\")?new Cg(n.shape,p,u,s,a):new bg(n.shape,p,u,s,a);return t.runWebGLProgram(c,[n],\"float32\")}var $3={kernelName:is,backendName:\"webgl\",kernelFunc:vte};var wg=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 kte(r){let{inputs:e,backend:t,attrs:o}=r,{images:n,dy:s}=e,{alignCorners:a}=o,i=new wg(s.shape,n.shape,a);return t.runWebGLProgram(i,[s],s.dtype)}var R3={kernelName:Ja,backendName:\"webgl\",kernelFunc:kte};var Sg=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 Ig=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 Nte(r){let{inputs:e,backend:t,attrs:o}=r,{images:n}=e,{alignCorners:s,halfPixelCenters:a,size:i}=o,[p,u]=i,c=A().getBool(\"WEBGL_PACK_IMAGE_OPERATIONS\")?new Ig(n.shape,p,u,s,a):new Sg(n.shape,p,u,s,a);return t.runWebGLProgram(c,[n],n.dtype)}var D3={kernelName:as,backendName:\"webgl\",kernelFunc:Nte};var vg=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 Tte(r){let{inputs:e,backend:t,attrs:o}=r,{images:n,dy:s}=e,{alignCorners:a}=o,i=new vg(s.shape,n.shape,a);return t.runWebGLProgram(i,[s],s.dtype)}var A3={kernelName:Za,backendName:\"webgl\",kernelFunc:Tte};var kg=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=Re(o);this.userCode=`\n void main() {\n ${a} coords = getOutputCoords();\n setOutput(getX(${s}));\n }\n `}};var Ng=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=Rt(\"rc\",o),s=`${n[o-1]} + 1 < ${this.outputShape[o-1]}`,a=`${n[o-2]} + 1 < ${this.outputShape[o-2]}`,i=Re(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 _te(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 Dt({inputs:{x:n},backend:t});let p=A().getBool(\"WEBGL_PACK_ARRAY_OPERATIONS\")?new Ng(n.shape,i):new kg(n.shape,i);return t.runWebGLProgram(p,[n],n.dtype)}var F3={kernelName:ps,backendName:\"webgl\",kernelFunc:_te};var Tg=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 P3={kernelName:Ds,backendName:\"webgl\",kernelFunc:({inputs:r,attrs:e,backend:t})=>{let{image:o}=r,{radians:n,fillValue:s,center:a}=e,i=t,p=new Tg(o.shape,s),[u,c]=w.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 Ete=`\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`,$te=xe({opSnippet:Ete}),O3={kernelName:cs,backendName:\"webgl\",kernelFunc:$te};var Rte=\"return inversesqrt(x);\",Dte=xe({opSnippet:Rte,cpuKernelImpl:dD}),M3={kernelName:ls,backendName:\"webgl\",kernelFunc:Dte};var Cu=class{constructor(e,t,o,n,s,a,i=!0,p=!1){this.variableNames=[\"updates\",\"indices\",\"defaultValue\"],this.outputShape=a;let u=Re(s.length),c=Re(a.length),l=\"\";o===1?l=\"i\":o===2&&(l=\"i, j\");let m=`getIndices(${l})`,d=\"\";n===1?d=\"i\":n===2&&(d=\"i, coords[1]\");let f=`getUpdates(${d})`,h=\"\";p&&(h=\"coords[0], coords[1]\");let g=`getDefaultValue(${h})`,x=t>1?\"strides[j]\":\"strides\";this.userCode=`\n ${u} strides = ${u}(${s});\n\n void main() {\n ${c} 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(${m});\n flattenedIndex += index * ${x};\n }\n if (flattenedIndex == coords[0]) {\n sum += ${f};\n found = true;\n }\n }\n setOutput(mix(${g}, sum, float(found)));\n }\n `}};var _g=class{constructor(e,t,o,n,s,a,i=!0,p=!1){this.variableNames=[\"updates\",\"indices\",\"defaultValue\"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=a;let u=Re(s.length),c=Re(a.length),l=\"\";o===1?l=\"i\":o===2&&(l=\"i, j\");let m=`getIndices(${l})`,d=\"\";n===1?d=\"i\":n===2&&(d=\"i, coords[1]\");let f=`getUpdates(${d})`,h=\"\";p&&(h=\"coords[0], coords[1]\");let g=`getDefaultValue(${h})`,x=t>1?\"strides[j]\":\"strides\",b=t>1?\"strides[j + 1]\":\"strides\";this.userCode=`\n ${u} strides = ${u}(${s});\n\n void main() {\n ${c} coords = getOutputCoords();\n vec4 sum = vec4(0.);\n vec4 found = vec4(0.);\n for (int i = 0; i < ${e}; i+=2) {\n ivec2 flattenedIndex = ivec2(0);\n for (int j = 0; j < ${t}; j+=2) {\n ivec4 index = round(${m});\n flattenedIndex += index.xz * ${x};\n if (j + 1 < ${t}) {\n flattenedIndex += index.yw * ${b};\n }\n }\n if (flattenedIndex[0] == coords[0] || flattenedIndex[1] == coords[0] ||\n flattenedIndex[0] == coords[0] + 1 || flattenedIndex[1] == coords[0] + 1) {\n vec4 updVals = ${f};\n if (flattenedIndex[0] == coords[0]) {\n sum.xy += updVals.xy;\n found.xy = vec2(1.);\n } else if (flattenedIndex[0] == coords[0] + 1) {\n sum.zw += updVals.xy;\n found.zw = vec2(1.);\n }\n if (flattenedIndex[1] == coords[0]) {\n sum.xy += updVals.zw;\n found.xy = vec2(1.);\n } else if (flattenedIndex[1] == coords[0] + 1) {\n sum.zw += updVals.zw;\n found.zw = vec2(1.);\n }\n }\n }\n setOutput(mix(${g}, sum, found));\n }\n `}};function Ate(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}=w.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;A().getBool(\"WEBGL_PACK\")?g=new _g(p,i,d.shape.length,f.shape.length,c,m):g=new Cu(p,i,d.shape.length,f.shape.length,c,m);let 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 L3={kernelName:ms,backendName:\"webgl\",kernelFunc:Ate};var Eg=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=A().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 Fte(r){let{inputs:e,backend:t,attrs:o}=r,{sortedSequence:n,values:s}=e,{side:a}=o,i=new Eg(n.shape[0],n.shape[1],s.shape[1],a),p=[[n.shape[1]]];return t.runWebGLProgram(i,[n,s],\"int32\",p)}var B3={kernelName:fs,backendName:\"webgl\",kernelFunc:Fte};var $g=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 Pte(r){let{inputs:e,backend:t}=r,{condition:o,t:n,e:s}=e,a=new $g(o.shape.length,n.shape,n.shape.length);return t.runWebGLProgram(a,[o,n,s],dt(n.dtype,s.dtype))}var z3={kernelName:fa,backendName:\"webgl\",kernelFunc:Pte};var Ote=`\n // Stable and Attracting Fixed Point (0, 1) for Normalized Weights.\n // see: https://arxiv.org/abs/1706.02515\n float scaleAlpha = ${w.SELU_SCALEALPHA};\n float scale = ${w.SELU_SCALE};\n return (x >= 0.0) ? scale * x : scaleAlpha * (exp(x) - 1.0);\n`,Mte=xe({opSnippet:Ote}),V3={kernelName:hs,backendName:\"webgl\",kernelFunc:Mte};var Lte=Fo+`\n return 1.0 / (1.0 + exp(-1.0 * x));\n`,Bte=`\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`,zte=xe({opSnippet:Lte,packedOpSnippet:Bte,cpuKernelImpl:hD}),W3={kernelName:bs,backendName:\"webgl\",kernelFunc:zte};var Vte=`\n if (isnan(x)) { return 0.0; }\n return sign(x);\n`,Wte=xe({opSnippet:Vte}),U3={kernelName:ys,backendName:\"webgl\",kernelFunc:Wte};var Ute=Fo+`\n return sin(x);\n`,Gte=`\n vec4 result = sin(x);\n bvec4 isNaN = isnan(x);\n ${Xr}\n return result;\n`,Hte=xe({opSnippet:Ute,packedOpSnippet:Gte}),G3={kernelName:gs,backendName:\"webgl\",kernelFunc:Hte};var Kte=`\n float e2x = exp(x);\n return (e2x - 1.0 / e2x) / 2.0;\n`,qte=xe({opSnippet:Kte}),H3={kernelName:xs,backendName:\"webgl\",kernelFunc:qte};var jte=`\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`,Xte=xe({opSnippet:jte}),K3={kernelName:Cs,backendName:\"webgl\",kernelFunc:Xte};var Yte=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},q3={kernelName:ga,backendName:\"webgl\",kernelFunc:Yte};function Qte(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]=xD(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 j3={kernelName:Ki,backendName:\"webgl\",kernelFunc:Qte};function Zte(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]=yD(i,o.shape,o.dtype,a,p);return[t.makeTensorInfo(c,o.dtype,u),t.makeTensorInfo([l.length],s.dtype,new Int32Array(l))]}var X3={kernelName:ei,backendName:\"webgl\",kernelFunc:Zte};function Jte(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]=lh(a,o.shape,o.dtype,i,p,!0);return t.makeTensorInfo(c,o.dtype,u)}var Y3={kernelName:ya,backendName:\"webgl\",kernelFunc:Jte};function ere(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]=lh(a,o.shape,o.dtype,i,p);return t.makeTensorInfo(c,o.dtype,u)}var Q3={kernelName:ba,backendName:\"webgl\",kernelFunc:ere};function tre(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}=w.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]),S=fD(x,b,i,m,c,u,p,l,C,d);return t.makeTensorInfo(i,S.dtype,S.values)}let f=new Cu(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 Z3={kernelName:vs,backendName:\"webgl\",kernelFunc:tre};function rre(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=w.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=Gs({inputs:{x:n},backend:t,attrs:{begin:c,size:d}});return c[i]+=m,f})}var J3={kernelName:xa,backendName:\"webgl\",kernelFunc:rre};var eP=\"return sqrt(x);\",ore=xe({opSnippet:eP,packedOpSnippet:eP,cpuKernelImpl:bD}),tP={kernelName:ws,backendName:\"webgl\",kernelFunc:ore};var nre=\"return x * x;\",sre=xe({opSnippet:nre}),rP={kernelName:qi,backendName:\"webgl\",kernelFunc:sre};var oP=\"return (a - b) * (a - b);\",are=nt({opSnippet:oP,packedOpSnippet:oP}),nP={kernelName:ks,backendName:\"webgl\",kernelFunc:are};function ire(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e;if(n.dtype!==\"string\")throw new Error(\"Input must be of datatype string\");let s=t.readSync(n.dataId),a=w.fromUint8ToStringArray(s),i=CD(a,\"string\",o);return t.makeTensorInfo(n.shape,\"string\",i)}var sP={kernelName:Ru,backendName:\"webgl\",kernelFunc:ire};function ure({inputs:r,attrs:e,backend:t}){let{x:o}=r,n=Wt+`\n return x > 0.0 ? 1.0 : float(${e.alpha});\n `,s=new tr(o.shape,n);return t.runWebGLProgram(s,[o],o.dtype)}var aP={kernelName:wo,backendName:\"webgl\",kernelFunc:ure};var Rg=class{constructor(e,t,o){this.variableNames=[\"x\"],this.outputShape=o;let n=o.length,s=Re(o.length),a=Re(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 pre(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:S}=pt.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 $=pt.computeOutShape(b,C,S),R=Gs({inputs:{x:n},backend:t,attrs:{begin:b,size:$}});k=te({inputs:{x:R},backend:t,attrs:{shape:f}}),t.disposeIntermediateTensorInfo(R)}else if(t.shouldExecuteOnCPU([n])){let R=t.readSync(n.dataId),D=me(n.shape,n.dtype,R),P=wD(d,D,S,b);k=t.makeTensorInfo(f,n.dtype,P.values)}else{let R=new Rg(b,S,d);k=t.runWebGLProgram(R,[n],n.dtype)}let _=te({inputs:{x:k},backend:t,attrs:{shape:f}});return t.disposeIntermediateTensorInfo(k),_}var iP={kernelName:Ns,backendName:\"webgl\",kernelFunc:pre};function cre(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]=SD(m,d,n,s,a,i,p,u);return[t.makeTensorInfo([f.length],\"string\",f),t.makeTensorInfo(l.shape,\"int32\",h)]}var uP={kernelName:Ca,backendName:\"webgl\",kernelFunc:cre};function lre(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]=ID(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 pP={kernelName:ji,backendName:\"webgl\",kernelFunc:lre};function mre(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=vD(a,n);return t.makeTensorInfo(s.shape,\"int32\",i)}var cP={kernelName:Xi,backendName:\"webgl\",kernelFunc:mre};var dre=\"return tan(x);\",fre=xe({opSnippet:dre}),lP={kernelName:_s,backendName:\"webgl\",kernelFunc:fre};var hre=`\n float e2x = exp(-2.0 * abs(x));\n return sign(x) * (1.0 - e2x) / (1.0 + e2x);\n`,gre=xe({opSnippet:hre}),mP={kernelName:Es,backendName:\"webgl\",kernelFunc:gre};function xre(r){let{inputs:e,backend:t,attrs:o}=r,{tensor:n,indices:s,updates:a}=e,{}=o,{sliceRank:i,numUpdates:p,sliceSize:u,strides:c,outputSize:l}=w.calculateShapes(a,s,n.shape),m=[l/u,u];if(l===0)return t.makeTensorInfo(n.shape,s.dtype);let d=te({inputs:{x:s},backend:t,attrs:{shape:[p,i]}}),f=te({inputs:{x:a},backend:t,attrs:{shape:[p,u]}}),h=te({inputs:{x:n},backend:t,attrs:{shape:m}}),g=new Cu(p,i,d.shape.length,f.shape.length,c,m,!1,!0),x=t.runWebGLProgram(g,[f,d,h],h.dtype),b=te({inputs:{x},backend:t,attrs:{shape:n.shape}});return t.disposeIntermediateTensorInfo(d),t.disposeIntermediateTensorInfo(f),t.disposeIntermediateTensorInfo(h),t.disposeIntermediateTensorInfo(x),b}var dP={kernelName:ds,backendName:\"webgl\",kernelFunc:xre};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=me(n.shape,n.dtype,u),l=ND(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 fP={kernelName:po,backendName:\"webgl\",kernelFunc:Fv};var Ag=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 `}},Fg=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 kp(r,e){e!==null&&r.disposeIntermediateTensorInfo(e)}function hP(r){let e=1;for(;ep){let P=t.readSync(n.dataId),[O,M]=TD(P,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,Ci({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&&kp(t,d);let x=hP(s),b=hP(c),C=null,S=()=>C===null?[g,g]:[g,C],k=(P,O,M)=>{let L=S(),B=new Ag(M),U=[[c],[C===null?1:0],[Number.NEGATIVE_INFINITY],[P],[O]],j=C;C=t.runWebGLProgram(B,L,\"int32\",U),kp(t,j)};for(let P=1;P=1;M/=2)k(O,M,[h,b])}for(let P=b;P>x;P/=2){let O=S(),M=new Fg([h,P/2]),B=[[c],[C===null?1:0],[x]],z=C;C=t.runWebGLProgram(M,O,\"int32\",B),kp(t,z);let U=x/2,j=U*2;for(let q=U;q>=1;q/=2)k(j,q,C.shape)}let _=C;C=Gs({inputs:{x:C},backend:t,attrs:{begin:0,size:[h,s]}}),kp(t,_);let $=Tv({inputs:{x:g,indices:C},backend:t,attrs:{axis:1,batchDims:1}});kp(t,g);let R=u.slice(0,-1);R.push(s),_=C,C=te({inputs:{x:C},attrs:{shape:R},backend:t}),kp(t,_);let D=$;return $=te({inputs:{x:$},attrs:{shape:R},backend:t}),kp(t,D),[$,C]}var gP={kernelName:$s,backendName:\"webgl\",kernelFunc:bre};var Pg=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 Cre(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 Pg(l,m,a,i,p,g);return t.runWebGLProgram(x,[n,s],\"float32\")}var xP={kernelName:Rs,backendName:\"webgl\",kernelFunc:Cre};function wre(r){let{inputs:e,attrs:t,backend:o}=r,{axis:n}=t,{x:s}=e;Vs(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}=_D(a,n,s.shape,s.dtype);return[o.makeTensorInfo(p,s.dtype,i),o.makeTensorInfo([u.length],\"int32\",u)]}var yP={kernelName:Yi,backendName:\"webgl\",kernelFunc:wre};function Sre(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 bP={kernelName:wa,backendName:\"webgl\",kernelFunc:Sre};var Og=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 Ire(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=w.getAxesPermutation([u],i),l=n;c!=null&&(l=bt({inputs:{x:n},backend:t,attrs:{perm:c}}),p.push(l),u=w.getInnerMostAxes(1,i)[0]);let m=w.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=oi(n.dtype),g=(S,k,_,$,R)=>{let D=S.shape[0],P=S.shape[1],O=w.segment_util.segOpComputeOptimalWindowSize(P,R),M={windowSize:O,inSize:P,batchSize:D,numSegments:R},L=new Og(M,k),B=t.compileAndRun(L,[S,_],$);if(p.push(B),B.shape[1]===R)return B;let z=Av({backend:t,attrs:{start:0,stop:R,step:1,dtype:\"float32\"}}),U=Fv({inputs:{x:z},backend:t,attrs:{reps:[P/O]}});return p.push(z),p.push(U),g(B,k,U,$,R)},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 S=w.getUndoAxesPermutation(c);C=bt({inputs:{x:C},backend:t,attrs:{perm:S}})}return p.forEach(S=>t.disposeIntermediateTensorInfo(S)),C}var CP={kernelName:Qi,backendName:\"webgl\",kernelFunc:Ire};var vre=[rA,nA,sA,aA,uA,pA,cA,lA,fA,hA,gA,xA,yA,bA,CA,wA,SA,IA,vA,kA,NA,_A,EA,$A,RA,PA,MA,LA,KD,zA,WA,UA,GA,HA,KA,qA,jA,XA,YA,QA,eF,tF,rF,oF,nF,sF,aF,iF,uF,pF,cF,lF,mF,dF,fF,hF,xF,yF,bF,CF,SF,IF,vF,kF,NF,TF,_F,EF,$F,HD,RF,VA,DF,AF,FF,qD,PF,OF,MF,LF,BF,zF,VF,WF,UF,GF,KF,qF,jF,XF,YF,QF,JF,t3,r3,o3,n3,s3,c3,YD,l3,m3,d3,f3,DA,h3,y3,b3,C3,w3,jD,S3,I3,v3,k3,N3,AA,a3,T3,_3,E3,ZD,$3,R3,D3,A3,F3,P3,O3,M3,L3,B3,z3,V3,W3,U3,G3,H3,TA,p3,K3,q3,j3,X3,Y3,Q3,Z3,J3,tP,rP,nP,sP,aP,iP,uP,pP,cP,u3,eA,lP,mP,dP,fP,gP,xP,tA,yP,bP,CP,g3];for(let r of vre)ti(r);var we;(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\"})(we||(we={}));var wu;(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\"})(wu||(wu={}));var wP;function kre(r){wP=r.wasm.cwrap(So,null,[\"number\",\"array\",\"number\",\"number\",\"array\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function Nre(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 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}.`);f=R.id}let h=i==null?0:t.dataIdMap.get(i.dataId).id,g=wu[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=Sr.assertAndGetBroadcastShape(n.shape.slice(0,-2),s.shape.slice(0,-2)),S=t.makeOutput([...C,x,b],n.dtype),k=t.dataIdMap.get(S.dataId).id,_=new Uint8Array(new Int32Array(n.shape).buffer),$=new Uint8Array(new Int32Array(s.shape).buffer);return wP(m,_,n.shape.length,d,$,s.shape.length,p,u,g,f,h,l||0,k),S}var SP={kernelName:So,backendName:\"wasm\",setupFunc:kre,kernelFunc:Nre};function he(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,we[i.dtype],c),u}return{kernelName:r,backendName:\"wasm\",setupFunc:o,kernelFunc:n}}var IP=he(Xs);var vP=he(Vo);var kP=he(Wo);function Ge(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=w.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,we[u.dtype],b),h}return{kernelName:r,backendName:\"wasm\",setupFunc:n,kernelFunc:s}}var Tre=!0,NP=Ge(uo,Tre);var TP;function _re(r){TP=r.wasm.cwrap(Uo,null,[\"array\",\"number\",\"number\",\"number\"])}function Ere(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 TP(s,n.length,we[o.dtype],a),o}var _P={kernelName:Uo,backendName:\"wasm\",setupFunc:_re,kernelFunc:Ere};function Np(r){let{inputs:{x:e},backend:t}=r;if(e.dtype===\"string\")return ar(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 EP={kernelName:Co,backendName:\"wasm\",kernelFunc:Np};var $P;function $re(r){$P=r.wasm.cwrap(co,null,[\"number\",\"array\",\"number\",\"number\",\"number\",\"array\",\"number\"])}function ho(r){let{inputs:e,backend:t,attrs:o}=r,[n,s]=Dre(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 RP={kernelName:co,backendName:\"wasm\",kernelFunc:ho,setupFunc:$re};function Tr(r,e,t){let o=r.shape,n=r.shape.length,s=y.parseAxisParam(e,o),a=s,i=w.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 QP={kernelName:da,backendName:\"wasm\",kernelFunc:zt};var ZP;function Hre(r){ZP=r.wasm.cwrap(Zo,null,[\"number\",\"array\",\"number\",\"number\",\"array\",\"number\",\"number\",\"number\",\"number\"])}function Kre(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=Sr.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 S=a?[g,c,m]:[g,m,c],k=i?[x,d,l]:[x,l,d],_=zt({inputs:{x:n},backend:t,attrs:{shape:S}}),$=zt({inputs:{x:s},backend:t,attrs:{shape:k}}),R=t.dataIdMap.get(_.dataId).id,D=t.dataIdMap.get($.dataId).id,P=a?_.shape[2]:_.shape[1],O=i?$.shape[1]:$.shape[2],M=Math.max(g,x),L=t.makeOutput([M,P,O],_.dtype),B=t.dataIdMap.get(L.dataId).id,z=new Uint8Array(new Int32Array(_.shape).buffer),U=new Uint8Array(new Int32Array($.shape).buffer);return ZP(R,z,_.shape.length,D,U,$.shape.length,a,i,B),t.disposeData(_.dataId),t.disposeData($.dataId),L.shape=C,L}var JP={kernelName:Zo,backendName:\"wasm\",setupFunc:Hre,kernelFunc:Kre};function Po(r){let{inputs:{x:e},attrs:{begin:t,size:o},backend:n}=r,[s,a]=pt.parseSliceParams(e,t,o),i=pt.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=pt.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=pp(p,s,a,e.shape,e.dtype);return l.stringBytes=f,u}let m=n.typedArrayFromHeap(u),d=e.shape.length;if(d===2)qre(p,c[0],m,s,a);else if(d===3)jre(p,c[0],c[1],m,s,a);else if(d===4)Xre(p,c[0],c[1],c[2],m,s,a);else{let f=pp(p,s,a,e.shape,e.dtype);m.set(f)}return u}function qre(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=w.getReshaped(n.shape,s,i),u=w.getPermuted(p.length,s.length),c=w.getReshapedPermuted(n.shape,s,i),l=w.getSliceBeginCoords(a,s.length),m=w.getSliceSize(c,a,s.length),d=zt({inputs:{x:n},backend:t,attrs:{shape:p}}),f=ho({inputs:{x:d},backend:t,attrs:{perm:u}}),h=zt({inputs:{x:f},backend:t,attrs:{shape:c}}),g=Po({inputs:{x:h},backend:t,attrs:{begin:l,size:m}});return t.disposeData(d.dataId),t.disposeData(f.dataId),t.disposeData(h.dataId),g}var tO={kernelName:Js,backendName:\"wasm\",kernelFunc:Yre};var rO;function Qre(r){rO=r.wasm.cwrap(Jo,null,[\"number\",\"number\",\"boolean\",\"number\",\"number\",\"number\"])}function Zre(r){let{backend:e,inputs:t,attrs:o}=r,{x:n,weights:s}=t,{size:a}=o,i=s.shape.reduce((l,m)=>l*m,1)!==0,p=n.shape.length===1?[a]:[n.shape[0],a],u=e.makeOutput(p,s.dtype);function c(l){return e.dataIdMap.get(l.dataId).id}return rO(c(n),a,i,c(s),we[s.dtype],c(u)),u}var oO={kernelName:Jo,backendName:\"wasm\",setupFunc:Qre,kernelFunc:Zre};var Jre=!0,nO=Ge(qa,Jre);function eoe(r){let{inputs:e,backend:t}=r,{s0:o,s1:n}=e,s=t.typedArrayFromHeap(o),a=t.typedArrayFromHeap(n),i=w.assertAndGetBroadcastShape(Array.from(s),Array.from(a));return t.makeOutput([i.length],\"int32\",void 0,new Int32Array(i))}var sO={kernelName:ea,backendName:\"wasm\",kernelFunc:eoe};function Mr(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 aO={kernelName:yo,backendName:\"wasm\",kernelFunc:Mr};var iO=he(en);var uO;function toe(r){uO=r.wasm.cwrap(bo,null,[\"number\",\"number\",\"number\",\"number\"])}function roe(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 uO(i,s,a,u),p}var pO={kernelName:bo,backendName:\"wasm\",setupFunc:toe,kernelFunc:roe};function Pv(r){let{inputs:e,backend:t}=r,o=y.parseAxisParam(r.attrs.axis,e[0].shape)[0],n=e.map(d=>d.shape);w.assertParamsConsistent(n,o);let s=w.computeOutShape(e.map(d=>d.shape),o),a=e.filter(d=>y.sizeFromShape(d.shape)>0);if(a.length===1)return Np({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 zt({inputs:{x:C},backend:t,attrs:{shape:k}})}),f=d.map(C=>({vals:t.readSync(C.dataId),shape:C.shape}));s=w.computeOutShape(d.map(C=>C.shape),1);let h=d[0].shape[0]===1,g=ap(f,s,e[0].dtype,h),x=w.computeOutShape(a.map(C=>C.shape),o);i.shape=x;let b=t.dataIdMap.get(i.dataId);return b.stringBytes=w.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=w.getAxesPermutation([s],p),c=n;u!==null&&(c=ho({inputs:{x:n},attrs:{perm:u},backend:t}));let l=w.getInnerMostAxes(1,p)[0];w.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;kO(f,a?1:0,i?1:0,d,h,we[n.dtype]);let g=m;if(u!==null){let x=w.getUndoAxesPermutation(u);g=ho({inputs:{x:m},attrs:{perm:x},backend:t}),t.disposeData(c.dataId),t.disposeData(m.dataId)}return g}var NO={kernelName:un,backendName:\"wasm\",setupFunc:hoe,kernelFunc:goe};var TO;function xoe(r){TO=r.wasm.cwrap(pn,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function yoe(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=w.getAxesPermutation([s],p),c=n;u!==null&&(c=ho({inputs:{x:n},attrs:{perm:u},backend:t}));let l=w.getInnerMostAxes(1,p)[0];w.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;TO(f,a?1:0,i?1:0,d,h,we[n.dtype]);let g=m;if(u!==null){let x=w.getUndoAxesPermutation(u);g=ho({inputs:{x:m},attrs:{perm:x},backend:t}),t.disposeData(c.dataId),t.disposeData(m.dataId)}return g}var _O={kernelName:pn,backendName:\"wasm\",setupFunc:xoe,kernelFunc:yoe};var EO;function boe(r){EO=r.wasm.cwrap(\"DenseBincount\",null,[\"number\",\"array\",\"number\",\"number\",\"boolean\",\"number\",\"number\",\"boolean\",\"number\"])}function Coe(r){let{backend:e,inputs:t,attrs:o}=r,{x:n,weights:s}=t,{size:a,binaryOutput:i}=o,p=s.shape.reduce((m,d)=>m*d,1)!==0,u=n.shape.length===1?[a]:[n.shape[0],a],c=e.makeOutput(u,s.dtype);function l(m){return e.dataIdMap.get(m.dataId).id}return EO(l(n),new Uint8Array(new Int32Array(n.shape).buffer),n.shape.length,a,p,l(s),we[s.dtype],i,l(c)),c}var $O={kernelName:ra,backendName:\"wasm\",setupFunc:boe,kernelFunc:Coe};var RO;function woe(r){RO=r.wasm.cwrap(ln,null,[\"number\",\"number\",\"number\",\"array\",\"number\",\"array\",\"array\",\"number\",\"number\"])}function Soe(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),S=new Uint8Array(new Int32Array(y.computeStrides(f)).buffer),k=e.dataIdMap.get(h.dataId).id;return RO(x,s,a===\"NHWC\"?1:0,b,n.shape.length-1,C,S,f.length,k),h}var DO={kernelName:ln,backendName:\"wasm\",setupFunc:woe,kernelFunc:Soe};var AO;function Ioe(r){AO=r.wasm.cwrap(mn,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function voe(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=w.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,S=d.dilationHeight,k=d.dilationWidth,_=d.strideHeight,$=d.strideWidth,R=d.inChannels,D=d.outChannels,P=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 O=o.makeOutput(d.outShape,\"float32\"),M=o.dataIdMap.get(O.dataId).id;return AO(a,n.shape[0],n.shape[1],n.shape[2],i,f,h,g,x,b,C,P,S,k,_,$,R,D,M),O}var FO={kernelName:mn,backendName:\"wasm\",setupFunc:Ioe,kernelFunc:voe};var PO;function koe(r){PO=r.wasm.cwrap(\"Diag\",null,[\"number\",\"number\",\"number\",\"number\"])}function Noe(r){let{inputs:e,backend:t}=r,{x:o}=e,n=y.sizeFromShape(o.shape),s=t.makeOutput([...o.shape,...o.shape],o.dtype);return PO(t.dataIdMap.get(o.dataId).id,we[o.dtype],n,t.dataIdMap.get(s.dataId).id),s}var OO={kernelName:oa,backendName:\"wasm\",setupFunc:koe,kernelFunc:Noe};var MO;function Toe(r){MO=r.wasm.cwrap(dn,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function _oe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s}=e,{strides:a,pad:i,dilations:p}=o;if(n.dtype!==s.dtype)throw new Error(`Dilation2D error: x must have the same dtype as filter. Got ${n.dtype} and ${s.dtype}`);let u=w.computeDilation2DInfo(n.shape,s.shape,a,i,\"NHWC\",p),c=t.makeOutput(u.outShape,n.dtype);return MO(t.dataIdMap.get(n.dataId).id,t.dataIdMap.get(s.dataId).id,t.dataIdMap.get(c.dataId).id,we[n.dtype],u.batchSize,u.inChannels,u.inHeight,u.inWidth,u.outHeight,u.outWidth,u.strideHeight,u.strideWidth,u.dilationHeight,u.dilationWidth,u.filterHeight,u.filterWidth,u.padInfo.top,u.padInfo.left),c}var LO={kernelName:dn,backendName:\"wasm\",setupFunc:Toe,kernelFunc:_oe};var BO;function Eoe(r){BO=r.wasm.cwrap(Li,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function $oe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s,dy:a}=e,{strides:i,pad:p,dilations:u}=o;if(n.dtype!==s.dtype||n.dtype!==a.dtype)throw new Error(`Dilation2DBackpropFilter error: x must have the same dtype as filter and dy. Got ${n.dtype}, ${s.dtype}, and ${a.dtype}`);let c=w.computeDilation2DInfo(n.shape,s.shape,i,p,\"NHWC\",u),l=t.makeOutput(s.shape,s.dtype);return BO(t.dataIdMap.get(n.dataId).id,t.dataIdMap.get(s.dataId).id,t.dataIdMap.get(a.dataId).id,t.dataIdMap.get(l.dataId).id,we[n.dtype],c.batchSize,c.inChannels,c.inHeight,c.inWidth,c.outHeight,c.outWidth,c.strideHeight,c.strideWidth,c.dilationHeight,c.dilationWidth,c.filterHeight,c.filterWidth,c.padInfo.top,c.padInfo.left),l}var zO={kernelName:Li,backendName:\"wasm\",setupFunc:Eoe,kernelFunc:$oe};var VO;function Roe(r){VO=r.wasm.cwrap(Mi,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function Doe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s,dy:a}=e,{strides:i,pad:p,dilations:u}=o;if(n.dtype!==s.dtype||n.dtype!==a.dtype)throw new Error(`Dilation2DBackpropInput error: x must have the same dtype as filter and dy. Got ${n.dtype}, ${s.dtype}, and ${a.dtype}`);let c=w.computeDilation2DInfo(n.shape,s.shape,i,p,\"NHWC\",u),l=t.makeOutput(n.shape,n.dtype);return VO(t.dataIdMap.get(n.dataId).id,t.dataIdMap.get(s.dataId).id,t.dataIdMap.get(a.dataId).id,t.dataIdMap.get(l.dataId).id,we[n.dtype],c.batchSize,c.inChannels,c.inHeight,c.inWidth,c.outHeight,c.outWidth,c.strideHeight,c.strideWidth,c.dilationHeight,c.dilationWidth,c.filterHeight,c.filterWidth,c.padInfo.top,c.padInfo.left),l}var WO={kernelName:Mi,backendName:\"wasm\",setupFunc:Roe,kernelFunc:Doe};var UO=he(hn);var GO;function Aoe(r){GO=r.wasm.cwrap(Xa,null,[\"number\",\"number\",\"number\"])}function Foe(r){let{inputs:e,backend:t}=r,{dy:o,y:n}=e,s=t.makeOutput(n.shape,\"float32\"),a=i=>t.dataIdMap.get(i.dataId).id;return GO(a(n),a(o),a(s)),s}var HO={kernelName:Xa,backendName:\"wasm\",setupFunc:Aoe,kernelFunc:Foe};var Poe=!1,KO=Ge(xn,Poe,\"bool\");var qO=he(gn);var jO=he(yn,\"float32\");function Lg(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),zt({inputs:{x:n},backend:o,attrs:{shape:i}})}var XO={kernelName:na,backendName:\"wasm\",kernelFunc:Lg};var YO=he(bn,\"float32\");function Mv(r){let{attrs:{shape:e,value:t},backend:o}=r,{attrs:{dtype:n}}=r;n=n||y.inferDtype(t);let s=o.makeOutput(e,n);return o.typedArrayFromHeap(s).fill(t),s}var QO={kernelName:sa,backendName:\"wasm\",kernelFunc:Mv};var ZO;function Ooe(r){ZO=r.wasm.cwrap(Cn,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function Moe(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 ZO(s,i,p,u,c,a),n}var JO={kernelName:Cn,backendName:\"wasm\",kernelFunc:Moe,setupFunc:Ooe};var eM=he(wn);var Loe=!1,tM=Ge(Sn,Loe);var rM;function Boe(r){rM=r.wasm.cwrap(In,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function zoe(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 rM(c,l,m,d,f,n,g),h}var oM={kernelName:In,backendName:\"wasm\",setupFunc:Boe,kernelFunc:zoe};var nM;function Voe(r){nM=r.wasm.cwrap(Io,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 Woe(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=w.computeConv2DInfo(n.shape,s.shape,p,c,u,m),g=wu[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,S=0;if(a!=null){let ee=o.dataIdMap.get(a.dataId);if(ee.shape.length!==1)throw new Error(`FusedConv2D only supports rank-1 bias but got rank ${ee.shape.length}.`);if(ee.shape[0]!==C)throw new Error(`FusedConv2D bias shape (${ee.shape}) does not match the number of output channels (${C})`);S=ee.id}let k=h.filterHeight,_=h.filterWidth,$=h.padInfo.top,R=h.padInfo.right,D=h.padInfo.bottom,P=h.padInfo.left,O=h.dilationHeight,M=h.dilationWidth,L=h.strideHeight,B=h.strideWidth,z=h.inChannels,U=h.padInfo.type===\"SAME\"?1:0,j=h.batchSize,q=h.inHeight,Y=h.inWidth;if(l!==\"NHWC\")throw new Error(`wasm backend FusedConv2D does not support dataFormat:'${l}'. Please use 'NHWC'.`);let J=o.makeOutput(h.outShape,\"float32\"),re=o.dataIdMap.get(J.dataId).id,ne=i==null?0:o.dataIdMap.get(i.dataId).id;return nM(x,j,q,Y,b,k,_,S,$,R,D,P,U,O,M,L,B,z,C,g,ne,f||0,re),J}var sM={kernelName:Io,backendName:\"wasm\",setupFunc:Voe,kernelFunc:Woe};var aM;function Uoe(r){aM=r.wasm.cwrap(vo,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 Goe(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=w.computeConv2DInfo(n.shape,s.shape,p,c,u,m,!0),g=wu[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,S=0;if(a!=null){let ee=o.dataIdMap.get(a.dataId);if(ee.shape.length!==1)throw new Error(`FusedDepthwiseConv2D only supports rank-1 bias but got rank ${ee.shape.length}.`);if(ee.shape[0]!==C)throw new Error(`FusedDepthwiseConv2D bias shape (${ee.shape}) does not match the number of output channels (${C})`);S=ee.id}let k=h.filterHeight,_=h.filterWidth,$=h.padInfo.top,R=h.padInfo.right,D=h.padInfo.bottom,P=h.padInfo.left,O=h.dilationHeight,M=h.dilationWidth,L=h.strideHeight,B=h.strideWidth,z=h.inChannels,U=h.padInfo.type===\"SAME\"?1:0,j=h.batchSize,q=h.inHeight,Y=h.inWidth;if(l!==\"NHWC\")throw new Error(`wasm backend FusedDepthwiseConv2D does not support dataFormat:'${l}'. Please use 'NHWC'.`);let J=o.makeOutput(h.outShape,\"float32\"),re=o.dataIdMap.get(J.dataId).id,ne=i==null?0:o.dataIdMap.get(i.dataId).id;return aM(x,j,q,Y,b,k,_,S,$,R,D,P,U,O,M,L,B,z,C,g,ne,f||0,re),J}var iM={kernelName:vo,backendName:\"wasm\",setupFunc:Uoe,kernelFunc:Goe};var uM;function Hoe(r){uM=r.wasm.cwrap(vn,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"array\",\"number\"])}function Koe(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],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 uM(d,we[o.dtype],h,a,l,i,g,x),u}var pM={kernelName:vn,backendName:\"wasm\",setupFunc:Hoe,kernelFunc:Koe};var cM;function qoe(r){cM=r.wasm.cwrap(\"Gather\",null,[\"number\",\"number\",\"array\",\"number\",\"number\",\"number\",\"array\",\"number\"])}function joe(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 D=0;D=0,()=>`GatherV2: the index value ${P} is not in [0, ${c-1}]`)}let l=w.segment_util.collectGatherOpShapeInfo(n,s,p,i),m=zt({inputs:{x:n},attrs:{shape:[l.batchSize,l.outerSize,l.dimSize,l.sliceSize]},backend:e}),d=y.sizeFromShape(s.shape),f=zt({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),R=new Uint8Array(new Int32Array(y.computeStrides(h)).buffer);return cM(C,we[n.dtype],$,x,k,l.batchSize,R,_),e.disposeData(m.dataId),e.disposeData(f.dataId),g.shape=l.outputShape,g}var lM={kernelName:aa,backendName:\"wasm\",setupFunc:qoe,kernelFunc:joe};var Xoe=!1,mM=Ge(kn,Xoe,\"bool\");var Yoe=!1,dM=Ge(Nn,Yoe,\"bool\");var fM=he(Tn,\"bool\");var hM=he(_n,\"bool\");var gM=he(En,\"bool\");var xM;function Qoe(r){xM=r.wasm.cwrap($n,null,[\"number\",\"number\",\"number\",\"number\"])}function Zoe(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;xM(n,we[e.dtype],t,a)}return s}var yM={kernelName:$n,backendName:\"wasm\",setupFunc:Qoe,kernelFunc:Zoe};var Joe=!1,bM=Ge(Rn,Joe,\"bool\");var ene=!1,CM=Ge(Dn,ene,\"bool\");var wM;function tne(r){wM=r.wasm.cwrap(An,null,[\"number\",\"number\",\"number\",\"number\"])}function rne(r){let{attrs:e,backend:t}=r,{start:o,stop:n,num:s}=e,a=Math.floor(s),i=t.makeOutput([a],\"float32\");return wM(t.dataIdMap.get(i.dataId).id,o,n,a),i}var SM={kernelName:An,backendName:\"wasm\",setupFunc:tne,kernelFunc:rne};var IM=he(Fn);var vM=he(Pn);var one=!1,kM=Ge(On,one,\"bool\");var NM=he(Mn);var nne=!1,TM=Ge(Ln,nne,\"bool\");var sne=!1,_M=Ge(R0,sne,\"bool\");var EM;function ane(r){EM=r.wasm.cwrap(Bn,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function ine(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{depthRadius:s,bias:a,alpha:i,beta:p}=o;if(n.dtype!==\"float32\")throw new Error(\"LRN error: x must have dtype float32\");let u=t.makeOutput(n.shape,n.dtype);return EM(t.dataIdMap.get(n.dataId).id,t.dataIdMap.get(u.dataId).id,n.shape[3],s,a,i,p),u}var $M={kernelName:Bn,backendName:\"wasm\",setupFunc:ane,kernelFunc:ine};var RM;function une(r){RM=r.wasm.cwrap(Ya,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function pne(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;if(n.dtype!==\"float32\"||s.dtype!==\"float32\"||a.dtype!==\"float32\")throw new Error(\"LRNGrad error: x, y, and dy must have dtype float32\");let l=t.makeOutput(n.shape,n.dtype);return RM(t.dataIdMap.get(n.dataId).id,t.dataIdMap.get(s.dataId).id,t.dataIdMap.get(a.dataId).id,t.dataIdMap.get(l.dataId).id,a.shape[3],i,p,u,c),l}var DM={kernelName:Ya,backendName:\"wasm\",setupFunc:une,kernelFunc:pne};var AM;function cne(r){AM=r.wasm.cwrap(zn,null,[\"number\",\"number\",\"number\",\"number\"])}function lne(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}=Tr(a,n,e);if(d){let C=e.dataIdMap.get(c.dataId).id;u=c,p=C}let f=u.shape.length;w.assertAxesAreInnerMostDims(\"max\",l,f);let[h,g]=w.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;AM(p,we[a.dtype],x,C)}if(d&&e.disposeData(c.dataId),s){let C=w.expandShapeToKeepDim(b.shape,m);b.shape=C}return b}var FM={kernelName:zn,backendName:\"wasm\",setupFunc:cne,kernelFunc:lne};var mne=!1,PM=Ge(Vn,mne);var OM;function dne(r){OM=r.wasm.cwrap(Wn,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function fne(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=w.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,S=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\"),R=o.dataIdMap.get($.dataId).id;return OM(s,n.shape[0],n.shape[1],n.shape[2],l,m,d,f,h,g,x,b,C,S,k,_,R),$}var MM={kernelName:Wn,backendName:\"wasm\",setupFunc:dne,kernelFunc:fne};var LM;function hne(r){LM=r.wasm.cwrap(\"MaxPool3D\",null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function gne(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{filterSize:s,strides:a,pad:i,dimRoundingMode:p,dataFormat:u}=o,c=w.computePool3DInfo(n.shape,s,a,1,i,p,u),l=t.makeOutput(c.outShape,n.dtype);return LM(t.dataIdMap.get(n.dataId).id,t.dataIdMap.get(l.dataId).id,c.batchSize,c.inChannels,c.inDepth,c.inHeight,c.inWidth,c.outDepth,c.outHeight,c.outWidth,c.strideDepth,c.strideHeight,c.strideWidth,c.dilationDepth,c.dilationHeight,c.dilationWidth,c.effectiveFilterDepth,c.effectiveFilterHeight,c.effectiveFilterWidth,c.padInfo.front,c.padInfo.top,c.padInfo.left),l}var BM={kernelName:ia,backendName:\"wasm\",setupFunc:hne,kernelFunc:gne};var zM;function xne(r){zM=r.wasm.cwrap(\"MaxPool3DGrad\",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 yne(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s}=e,{filterSize:a,strides:i,pad:p,dimRoundingMode:u}=o,c=w.computePool3DInfo(s.shape,a,i,1,p,u),l=t.makeOutput(s.shape,s.dtype);return zM(t.dataIdMap.get(s.dataId).id,t.dataIdMap.get(n.dataId).id,t.dataIdMap.get(l.dataId).id,c.batchSize,c.inChannels,c.inDepth,c.inHeight,c.inWidth,c.outDepth,c.outHeight,c.outWidth,c.strideDepth,c.strideHeight,c.strideWidth,c.dilationDepth,c.dilationHeight,c.dilationWidth,c.effectiveFilterDepth,c.effectiveFilterHeight,c.effectiveFilterWidth,c.padInfo.front,c.padInfo.top,c.padInfo.left),l}var VM={kernelName:Gi,backendName:\"wasm\",setupFunc:xne,kernelFunc:yne};var WM;function bne(r){WM=r.wasm.cwrap(\"MaxPoolGrad\",null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function Cne(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s}=e,{filterSize:a,strides:i,pad:p,dimRoundingMode:u}=o,c=w.computePool2DInfo(s.shape,a,i,1,p,u),l=t.makeOutput(s.shape,s.dtype);return WM(t.dataIdMap.get(s.dataId).id,t.dataIdMap.get(n.dataId).id,t.dataIdMap.get(l.dataId).id,c.batchSize,c.inChannels,c.inHeight,c.inWidth,c.outHeight,c.outWidth,c.strideHeight,c.strideWidth,c.dilationHeight,c.dilationWidth,c.effectiveFilterHeight,c.effectiveFilterWidth,c.padInfo.top,c.padInfo.left),l}var UM={kernelName:Ui,backendName:\"wasm\",setupFunc:bne,kernelFunc:Cne};var GM;function wne(r){GM=r.wasm.cwrap(\"MaxPoolWithArgmax\",null,[\"number\",\"number\",\"number\",\"number\",\"boolean\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function Sne(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{filterSize:s,strides:a,pad:i,includeBatchInIndex:p}=o;y.assert(n.shape.length===4,()=>`Error in maxPool: input must be rank 4 but got rank ${n.shape.length}.`);let u=[1,1];y.assert(w.eitherStridesOrDilationsAreOne(a,u),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${u}'`);let c=w.computePool2DInfo(n.shape,s,a,[1,1],i),l=t.makeOutput(c.outShape,n.dtype),m=t.makeOutput(c.outShape,\"int32\");return GM(t.dataIdMap.get(n.dataId).id,t.dataIdMap.get(l.dataId).id,t.dataIdMap.get(m.dataId).id,we[n.dtype],p,c.batchSize,c.inChannels,c.inHeight,c.inWidth,c.outHeight,c.outWidth,c.strideHeight,c.strideWidth,c.dilationHeight,c.dilationWidth,c.effectiveFilterHeight,c.effectiveFilterWidth,c.padInfo.top,c.padInfo.left),[l,m]}var HM={kernelName:ua,backendName:\"wasm\",setupFunc:wne,kernelFunc:Sne};var KM;function Ine(r){KM=r.wasm.cwrap(Un,null,[\"number, number, number\"])}function vne(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}=Tr(a,n,e),f=l;if(d){let S=e.dataIdMap.get(c.dataId).id;S!==i&&(u=c,p=S,f=w.getInnerMostAxes(f.length,u.shape.length))}w.assertAxesAreInnerMostDims(\"mean\",f,u.shape.length);let[h,g]=w.computeOutAndReduceShapes(u.shape,f),x=y.sizeFromShape(g),b=u;u.dtype!==\"float32\"&&(b=Mr({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 S=e.dataIdMap.get(C.dataId).id;KM(p,x,S)}if(d&&e.disposeData(c.dataId),s){let S=w.expandShapeToKeepDim(C.shape,m);C.shape=S}return u.dtype!==\"float32\"&&e.disposeData(b.dataId),C}var qM={kernelName:Un,backendName:\"wasm\",setupFunc:Ine,kernelFunc:vne};var jM;function kne(r){jM=r.wasm.cwrap(Gn,null,[\"number\",\"number\",\"number\",\"number\"])}function Nne(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}=Tr(a,n,e);if(d){let C=e.dataIdMap.get(c.dataId).id;C!==i&&(u=c,p=C)}let f=u.shape.length;w.assertAxesAreInnerMostDims(\"min\",l,f);let[h,g]=w.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;jM(p,we[a.dtype],x,C)}if(d&&e.disposeData(c.dataId),s){let C=w.expandShapeToKeepDim(b.shape,m);b.shape=C}return b}var XM={kernelName:Gn,backendName:\"wasm\",setupFunc:kne,kernelFunc:Nne};var Tne=!1,YM=Ge(Hn,Tne);var Lv;(function(r){r[r.reflect=0]=\"reflect\",r[r.symmetric=1]=\"symmetric\"})(Lv||(Lv={}));var QM;function _ne(r){QM=r.wasm.cwrap(Kn,null,[\"number\",\"array\",\"number\",\"number\",\"array\",\"array\",\"number\",\"number\"])}function Ene(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 QM(a,u,e.shape.length,we[e.dtype],m,d,Lv[n],p),i}var ZM={kernelName:Kn,backendName:\"wasm\",kernelFunc:Ene,setupFunc:_ne};var JM;function $ne(r){JM=r.wasm.cwrap(Is,null,[\"number\",\"number\",\"number\",\"number\"])}function Bv(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||JM(n,a,i,p),s}var eL={kernelName:Is,backendName:\"wasm\",setupFunc:$ne,kernelFunc:Bv};var tL;function Rne(r){tL=r.wasm.cwrap(jn,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function Dne(r){let{inputs:e,backend:t,attrs:o}=r,{logits:n}=e,{numSamples:s,seed:a,normalized:i}=o;if(n.dtype!==\"float32\")throw new Error(`Tensor logits must have dtype float32, got ${n.dtype}`);let p=i?n:Bv({inputs:{logits:n},backend:t,attrs:{dim:n.shape.length-1}}),[u,c]=p.shape,l=t.makeOutput([u,s],\"int32\");return tL(t.dataIdMap.get(p.dataId).id,u,c,s,a,t.dataIdMap.get(l.dataId).id),i||t.disposeData(p.dataId),l}var rL={kernelName:jn,backendName:\"wasm\",setupFunc:Rne,kernelFunc:Dne};var oL=Ge(qn,!0);var Ane=!0,nL=Ge(Xn,Ane);var sL=he(pa);function qc(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 aL;function Fne(r){aL=r.wasm.cwrap(Qn,\"number\",[\"number\",\"number\",\"number\",\"number\",\"number\"])}function Pne(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=aL(u,c,s,n,a),{pSelectedIndices:m,selectedSize:d,pSelectedScores:f,pValidOutputs:h}=qc(e,l);return e.wasm._free(f),e.wasm._free(h),e.makeOutput([d],\"int32\",m)}var iL={kernelName:Qn,backendName:\"wasm\",setupFunc:Fne,kernelFunc:Pne};var uL;function One(r){uL=r.wasm.cwrap(Qa,\"number\",[\"number\",\"number\",\"number\",\"number\",\"number\",\"bool\"])}function Mne(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=uL(c,l,s,n,a,i),{pSelectedIndices:d,selectedSize:f,pSelectedScores:h,pValidOutputs:g}=qc(e,m);e.wasm._free(h);let x=e.makeOutput([f],\"int32\",d),b=e.makeOutput([],\"int32\",g);return[x,b]}var pL={kernelName:Qa,backendName:\"wasm\",setupFunc:One,kernelFunc:Mne};var cL;function Lne(r){cL=r.wasm.cwrap(Zn,\"number\",[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function Bne(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=cL(c,l,s,n,a,i),{pSelectedIndices:d,selectedSize:f,pSelectedScores:h,pValidOutputs:g}=qc(e,m);e.wasm._free(g);let x=e.makeOutput([f],\"int32\",d),b=e.makeOutput([f],\"float32\",h);return[x,b]}var lL={kernelName:Zn,backendName:\"wasm\",setupFunc:Lne,kernelFunc:Bne};var zne=!1,mL=Ge(Yn,zne,\"bool\");var dL;function Vne(r){dL=r.wasm.cwrap(Jn,null,[\"number\",\"number\",\"number\",\"number\",\"number\"])}function Wne(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 dL(m,a,i,p,c),u}var fL={kernelName:Jn,backendName:\"wasm\",setupFunc:Vne,kernelFunc:Wne};function Une(r){let{inputs:{x:e},backend:t}=r,o=t.makeOutput(e.shape,e.dtype);return t.typedArrayFromHeap(o).fill(1),o}var hL={kernelName:ca,backendName:\"wasm\",kernelFunc:Une};function Gne(r){let{inputs:e,backend:t,attrs:o}=r,{axis:n}=o;if(e.length===1)return Lg({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=Lg({inputs:{input:c},backend:t,attrs:{dim:n}});return i.push(l),l}),u=Pv({inputs:p,backend:t,attrs:{axis:n}});return i.forEach(c=>t.disposeData(c.dataId)),u}var gL={kernelName:la,backendName:\"wasm\",kernelFunc:Gne};var xL;function Hne(r){xL=r.wasm.cwrap(es,null,[\"number\",\"array\",\"number\",\"number\",\"array\",\"array\",\"number\",\"number\"])}function Kne(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 Mv({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 xL(a,c,e.shape.length,we[e.dtype],d,f,n,u),i}var Bg={kernelName:es,backendName:\"wasm\",kernelFunc:Kne,setupFunc:Hne};var qne=!1,yL=Ge(ts,qne);var bL;function jne(r){bL=r.wasm.cwrap(rs,null,[\"number\",\"number\",\"number\"])}function Xne(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=Mr({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 bL(i,a,l),p.dtype!==\"float32\"&&t.disposeData(u.dataId),c}var CL={kernelName:rs,backendName:\"wasm\",setupFunc:jne,kernelFunc:Xne};var wL;function Yne(r){wL=r.wasm.cwrap(os,null,[\"number\",\"number\",\"number\",\"number\"])}function Qne(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}=Tr(a,n,e),f=l;if(d){let C=e.dataIdMap.get(c.dataId).id;C!==i&&(u=c,p=C,f=w.getInnerMostAxes(f.length,u.shape.length))}w.assertAxesAreInnerMostDims(\"prod\",f,u.shape.length);let[h,g]=w.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;wL(p,x,we[b.dtype],C)}if(d&&e.disposeData(c.dataId),s){let C=w.expandShapeToKeepDim(b.shape,m);b.shape=C}return b}var SL={kernelName:os,backendName:\"wasm\",setupFunc:Yne,kernelFunc:Qne};var Zne=r=>{let{backend:e,attrs:t}=r,{start:o,stop:n,step:s,dtype:a}=t,i=up(o,n,s,a),p=e.makeOutput([i.length],a);return e.typedArrayFromHeap(p).set(i),p},IL={kernelName:ma,backendName:\"wasm\",kernelFunc:Zne};var Jne=!0,vL=Ge(fn,Jne);var kL=he(ns);var NL=he(ss);var TL=he(us);var _L;function ese(r){_L=r.wasm.cwrap(is,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function tse(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=Mr({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 _L(x,c,l,m,d,p,u,s?1:0,a?1:0,C),g!=null&&e.disposeData(g.dataId),b}var EL={kernelName:is,backendName:\"wasm\",setupFunc:ese,kernelFunc:tse};var $L;function rse(r){$L=r.wasm.cwrap(Ja,null,[\"number\",\"number\",\"number\",\"array\",\"array\",\"boolean\"])}function ose(r){let{inputs:e,backend:t,attrs:o}=r,{images:n,dy:s}=e,{alignCorners:a}=o,i=t.makeOutput(n.shape,\"float32\"),p=t.dataIdMap.get(n.dataId),u;return p.dtype!==\"float32\"&&(u=Mr({backend:t,inputs:{x:n},attrs:{dtype:\"float32\"}}),p=t.dataIdMap.get(u.dataId)),$L(t.dataIdMap.get(n.dataId).id,t.dataIdMap.get(s.dataId).id,t.dataIdMap.get(i.dataId).id,new Uint8Array(new Int32Array(n.shape).buffer),new Uint8Array(new Int32Array(s.shape).buffer),a),u!=null&&t.disposeData(u.dataId),i}var RL={kernelName:Ja,backendName:\"wasm\",setupFunc:rse,kernelFunc:ose};var DL;function nse(r){DL=r.wasm.cwrap(as,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function sse(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=Mr({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 DL(b,c,l,m,d,p,u,s?1:0,a?1:0,C),x!=null&&e.disposeData(x.dataId),h}var AL={kernelName:as,backendName:\"wasm\",setupFunc:nse,kernelFunc:sse};var FL;function ase(r){FL=r.wasm.cwrap(Za,null,[\"number\",\"number\",\"number\",\"array\",\"array\",\"boolean\"])}function ise(r){let{inputs:e,backend:t,attrs:o}=r,{images:n,dy:s}=e,{alignCorners:a}=o,i=t.makeOutput(n.shape,\"float32\"),p=t.dataIdMap.get(n.dataId),u;return p.dtype!==\"float32\"&&(u=Mr({backend:t,inputs:{x:n},attrs:{dtype:\"float32\"}}),p=t.dataIdMap.get(u.dataId)),FL(t.dataIdMap.get(n.dataId).id,t.dataIdMap.get(s.dataId).id,t.dataIdMap.get(i.dataId).id,new Uint8Array(new Int32Array(n.shape).buffer),new Uint8Array(new Int32Array(s.shape).buffer),a),u!=null&&t.disposeData(u.dataId),i}var PL={kernelName:Za,backendName:\"wasm\",setupFunc:ase,kernelFunc:ise};var OL;function use(r){OL=r.wasm.cwrap(ps,null,[\"number\",\"array\",\"number\",\"array\",\"number\",\"number\"])}function pse(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 Np({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);OL(p,c,a.length,l,n.shape.length,u);let m=zt({inputs:{x:i},attrs:{shape:n.shape},backend:t});return t.disposeData(i.dataId),m}var ML={kernelName:ps,backendName:\"wasm\",kernelFunc:pse,setupFunc:use};var LL;function cse(r){LL=r.wasm.cwrap(Ds,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"array\",\"number\",\"number\"])}function lse(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]=w.getImageCenter(i,m,d),x=a===0,b=255,C=typeof a==\"number\"?[a,a,a,x?0:b]:[...a,b],S=new Uint8Array(new Int32Array(C).buffer);return LL(u,l,m,d,f,s,h,g,S,C.length,c),p}var BL={kernelName:Ds,backendName:\"wasm\",kernelFunc:lse,setupFunc:cse};var zL=he(cs);var VL=he(ls);var WL;function mse(r){WL=r.wasm.cwrap(ms,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"array\",\"number\",\"number\"])}function dse(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}=du.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 WL(f,g,we[s.dtype],p,u,c,x,m,b),i}var UL={kernelName:ms,backendName:\"wasm\",setupFunc:mse,kernelFunc:dse};var GL;function fse(r){GL=r.wasm.cwrap(fs,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"bool\",\"number\"])}function hse(r){let{inputs:e,backend:t,attrs:o}=r,{sortedSequence:n,values:s}=e,{side:a}=o;if(n.dtype!==s.dtype)throw new Error(`SearchSorted error: sorted_sequence must have the same dtype as values. Got ${n.dtype} and ${s.dtype}`);let i=t.makeOutput(s.shape,\"int32\");function p(u){return t.dataIdMap.get(u.dataId).id}return GL(p(n),p(s),n.shape[0],n.shape[1],s.shape[1],we[n.dtype],a===\"left\",p(i)),i}var HL={kernelName:fs,backendName:\"wasm\",setupFunc:fse,kernelFunc:hse};var KL;function gse(r){KL=r.wasm.cwrap(\"SelectV2\",null,[\"number\",\"number\",\"number\",\"number\",\"number\"])}function xse(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 KL(a,i,p,d,c),u}var qL={kernelName:fa,backendName:\"wasm\",kernelFunc:xse,setupFunc:gse};var jL=he(hs);var XL;function yse(r){XL=r.wasm.cwrap(bs,null,[\"number\",\"number\"])}function bse(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||XL(o,s),n}var YL={kernelName:\"Sigmoid\",backendName:\"wasm\",setupFunc:yse,kernelFunc:bse};var QL=he(ys);var ZL=he(gs);var JL=he(xs);var eB=he(Cs);function Cse(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(w.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;aB(m,we[n.dtype],n.shape[0],d,f,g,b,e,0);let C=t.readSync(x.dataId),S;switch(C[0]){case 0:{S=w.getSparseSegmentReductionNegativeSegmentIdsErrorMessage();break}case 1:{S=w.getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage();break}case 2:S=w.getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage(C[1],C[2]);break;case 3:S=w.getSparseSegmentReductionIndicesOutOfRangeErrorMessage(C[1],C[2],C[3]);break;default:S=\"\"}if(t.disposeData(x.dataId),S)throw t.disposeData(h.dataId),new Error(S);return h}function kse(r){return Vg(r,!0)}var iB={kernelName:ya,backendName:\"wasm\",setupFunc:zg,kernelFunc:kse};function Nse(r){return Vg(r,!1)}var uB={kernelName:ba,backendName:\"wasm\",setupFunc:zg,kernelFunc:Nse};var pB;function Tse(r){pB=r.wasm.cwrap(vs,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"array\",\"number\",\"number\"])}function _se(r){let{backend:e,inputs:t,attrs:o}=r,{sparseIndices:n,sparseValues:s,defaultValue:a}=t,{outputShape:i}=o,p=e.makeOutput(i,a.dtype);if(y.sizeFromShape(i)===0)return p;let{sliceRank:u,numUpdates:c,sliceSize:l,strides:m,outputSize:d}=w.calculateShapes(s,n,i),f=e.dataIdMap.get(n.dataId).id,h=e.dataIdMap.get(s.dataId).id,g=e.dataIdMap.get(a.dataId).id,x=new Uint8Array(new Int32Array(m).buffer),b=e.dataIdMap.get(p.dataId).id;return pB(f,h,s.shape.length,g,we[a.dtype],u,c,l,x,d,b),p}var cB={kernelName:vs,backendName:\"wasm\",setupFunc:Tse,kernelFunc:_se};function Ese(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=w.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=Po({inputs:{x:n},attrs:{begin:u,size:m},backend:o});return u[i]+=l,d})}var lB={kernelName:xa,backendName:\"wasm\",kernelFunc:Ese};var mB=he(ws);var dB=he(qi);var $se=!0,fB=Ge(ks,$se);var hB;function Rse(r){hB=r.wasm.cwrap(wo,null,[\"number\",\"number\",\"number\",\"number\"])}function Dse(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 hB(a,n,we[s.dtype],p),i}var gB={kernelName:wo,backendName:\"wasm\",setupFunc:Rse,kernelFunc:Dse};var xB;function Ase(r){xB=r.wasm.cwrap(Ns,null,[\"number\",\"array\",\"number\",\"array\",\"array\",\"array\",\"array\",\"array\",\"number\",\"number\"])}function Fse(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:S}=pt.sliceInfo(n.shape,s,a,i,p,u,c,l,m),k;if(h)k=zt({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 _=pt.computeOutShape(b,C,S),$=Po({inputs:{x:n},backend:e,attrs:{begin:b,size:_}});k=zt({inputs:{x:$},backend:e,attrs:{shape:f}}),e.disposeData($.dataId)}else{let _=e.makeOutput(d,\"float32\"),$=e.dataIdMap.get(n.dataId).id,R=new Uint8Array(new Int32Array(y.computeStrides(n.shape)).buffer),D=new Uint8Array(new Int32Array(b).buffer),P=new Uint8Array(new Int32Array(C).buffer),O=new Uint8Array(new Int32Array(S).buffer),M=new Uint8Array(new Int32Array(d).buffer),L=new Uint8Array(new Int32Array(y.computeStrides(d)).buffer),B=e.dataIdMap.get(_.dataId).id;xB($,R,n.shape.length,D,P,O,M,L,d.length,B),k=zt({inputs:{x:_},backend:e,attrs:{shape:f}}),e.disposeData(_.dataId)}return k}var yB={kernelName:Ns,backendName:\"wasm\",setupFunc:Ase,kernelFunc:Fse};function Pse(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]=cp(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 bB={kernelName:Ca,backendName:\"wasm\",kernelFunc:Pse};function Ose(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]=lp(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 CB={kernelName:ji,backendName:\"wasm\",kernelFunc:Ose};function Mse(r){let{backend:e,inputs:t,attrs:o}=r,{input:n}=t,{numBuckets:s}=o,a=e.readSync(n.dataId),i=mp(a,s),p=e.makeOutput(n.shape,\"int32\");return e.typedArrayFromHeap(p).set(i),p}var wB={kernelName:Xi,backendName:\"wasm\",kernelFunc:Mse};var Lse=!0,SB=Ge(Ts,Lse);var IB;function Bse(r){IB=r.wasm.cwrap(Ss,null,[\"number\",\"number\",\"number\",\"number\"])}function zse(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}=Tr(a,n,e),f=l;if(d){let C=e.dataIdMap.get(c.dataId).id;C!==i&&(u=c,p=C,f=w.getInnerMostAxes(f.length,u.shape.length))}w.assertAxesAreInnerMostDims(\"sum\",f,u.shape.length);let[h,g]=w.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;IB(p,x,we[b.dtype],C)}if(d&&e.disposeData(c.dataId),s){let C=w.expandShapeToKeepDim(b.shape,m);b.shape=C}return b}var vB={kernelName:Ss,backendName:\"wasm\",setupFunc:Bse,kernelFunc:zse};var kB=he(_s);var NB=he(Es);var TB;function Vse(r){TB=r.wasm.cwrap(ds,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"array\",\"number\",\"number\",\"number\"])}function Wse(r){let{backend:e,inputs:t,attrs:o}=r,{tensor:n,indices:s,updates:a}=t,{}=o,i=e.makeOutput(n.shape,n.dtype);if(y.sizeFromShape(n.shape)===0)return i;let{sliceRank:p,numUpdates:u,sliceSize:c,strides:l,outputSize:m}=du.calculateShapes(a,s,n.shape),f=e.dataIdMap.get(s.dataId).id,g=e.dataIdMap.get(a.dataId).id,b=e.dataIdMap.get(n.dataId).id,C=new Uint8Array(new Int32Array(l).buffer),S=e.dataIdMap.get(i.dataId).id;return TB(f,g,we[a.dtype],p,u,c,C,m,S,b),i}var _B={kernelName:ds,backendName:\"wasm\",setupFunc:Vse,kernelFunc:Wse};var EB;function Use(r){EB=r.wasm.cwrap(po,null,[\"number\",\"array\",\"number\",\"array\",\"number\",\"number\"])}function Gse(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 RB(a,i,o.shape.length,we[o.dtype],n,s,c,m),[u,l]},DB={kernelName:$s,backendName:\"wasm\",setupFunc:Hse,kernelFunc:Kse};var AB;function qse(r){AB=r.wasm.cwrap(Rs,null,[\"number\",\"number\",\"bool\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"array\",\"number\",\"array\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function jse(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),S=e.dataIdMap.get(C.dataId).id,_=e.dataIdMap.get(n.dataId).id,R=e.dataIdMap.get(s.dataId).id,D=a===\"nearest\"?1:2,P;switch(i){case\"constant\":P=1;break;case\"reflect\":P=2;break;case\"wrap\":P=3;break;case\"nearest\":P=4;break;default:P=1;break}return AB(_,R,s.shape[0]>1,c,f,h,d,m,l,x,n.shape.length-1,b,g.length-1,D,P,p,S),C}var FB={kernelName:Rs,backendName:\"wasm\",setupFunc:qse,kernelFunc:jse};function Xse(r){let{inputs:e,attrs:t,backend:o}=r,{axis:n}=t,{x:s}=e,{outputValues:a,outputShape:i,indices:p}=dp(o.readSync(s.dataId),n,s.shape,s.dtype);return[o.makeOutput(i,s.dtype,void 0,a),o.makeOutput([p.length],\"int32\",void 0,p)]}var PB={kernelName:Yi,backendName:\"wasm\",kernelFunc:Xse};function Yse(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 OB={kernelName:wa,backendName:\"wasm\",kernelFunc:Yse};function Qse(r){let{inputs:{x:e},backend:t}=r,o=t.makeOutput(e.shape,e.dtype);return t.typedArrayFromHeap(o).fill(0),o}var MB={kernelName:Sa,backendName:\"wasm\",kernelFunc:Qse};var Zse=[SP,IP,vP,kP,NP,_P,AP,PP,OP,MP,LP,BP,zP,VP,WP,GP,YP,KP,jP,JP,tO,oO,nO,sO,aO,iO,pO,cO,mO,fO,gO,yO,CO,wO,SO,vO,NO,_O,$O,DO,FO,OO,LO,zO,WO,UO,HO,KO,qO,jO,XO,YO,QO,JO,eM,tM,oM,sM,iM,pM,lM,mM,dM,EP,fM,hM,gM,yM,bM,CM,SM,vM,IM,kM,NM,TM,_M,$M,DM,FM,PM,MM,BM,VM,UM,HM,qM,XM,YM,ZM,rL,oL,nL,sL,iL,pL,lL,mL,fL,hL,gL,Bg,yL,CL,SL,IL,vL,kL,NL,TL,QP,EL,RL,AL,PL,ML,BL,zL,VL,UL,HL,qL,jL,YL,QL,ZL,JL,eO,eL,eB,tB,oB,sB,iB,uB,cB,lB,mB,dB,fB,gB,yB,bB,CB,wB,SB,vB,kB,NB,_B,$B,DB,FB,RP,PB,OB,MB];for(let r of Zse)ti(r);var zv=A();zv.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}});zv.registerFlag(\"WASM_HAS_MULTITHREAD_SUPPORT\",async()=>{if(zv.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 jv=zp(VB()),qB=zp(UB()),Xv=zp(GB());var HB=jv.default||jv,Jse=Xv.default||Xv,pm=class extends ao{constructor(e){super(),this.wasm=e,this.dataIdNextNumber=1,this.wasm.tfjs.initWithThreadsCount(XB),qv=this.wasm.tfjs.getThreadsCount(),this.dataIdMap=new Bo(this,ur())}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)>>>0;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 tae(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,n){let s;if(o==null)s=this.write(n!=null?n:null,e,t);else{let a=this.dataIdNextNumber++;s={id:a},this.dataIdMap.set(s,{id:a,memoryOffset:o,shape:e,dtype:t,refCount:1});let i=y.sizeFromShape(e);this.wasm.tfjs.registerTensor(a,i,o)}return{dataId:s,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 eae(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 KB(r,e,t){if(Gg!=null)return Gg;let o=\"tfjs-backend-wasm.wasm\";return r&&e?o=\"tfjs-backend-wasm-threaded-simd.wasm\":r&&(o=\"tfjs-backend-wasm-simd.wasm\"),im!=null&&im[o]!=null?im[o]:t+o}async function jB(){let[r,e]=await Promise.all([A().getAsync(\"WASM_HAS_SIMD_SUPPORT\"),A().getAsync(\"WASM_HAS_MULTITHREAD_SUPPORT\")]);return new Promise((t,o)=>{let n={};n.locateFile=(i,p)=>{if(i.endsWith(\".worker.js\")){let u=qB.wasmWorkerContents.replace(/\\n/g,\"\\\\n\"),c=new Blob([u],{type:\"application/javascript\"});return URL.createObjectURL(c)}return i.endsWith(\".wasm\")?KB(r,e,am!=null?am:p):p+i},Yv&&(n.instantiateWasm=eae(KB(r,e,am!=null?am:\"\")));let s=!1;n.onAbort=()=>{if(s||um)return;um=!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&&Gg==null?(n.mainScriptUrlOrBlob=new Blob([\"var WasmBackendModuleThreadedSimd = \"+HB.toString()],{type:\"text/javascript\"}),a=HB(n)):a=Jse(n),a.then(i=>{s=!0,um=!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 tae(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 rae=[\"tfjs-backend-wasm.wasm\",\"tfjs-backend-wasm-simd.wasm\",\"tfjs-backend-wasm-threaded-simd.wasm\"],Gg=null,am=null,im={},um=!1,Yv=!1;function oae(r,e=!1){if(Tw(\"setWasmPath has been deprecated in favor of setWasmPaths and will be removed in a future release.\"),um)throw new Error(\"The WASM backend was already initialized. Make sure you call `setWasmPath()` before you call `tf.setBackend()` or `tf.ready()`\");Gg=r,Yv=e}function nae(r,e=!1){if(um)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\")am=r;else{im=r;let t=rae.filter(o=>im[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.`)}Yv=e}var XB=-1,qv=-1;function sae(r){XB=r}function aae(){if(qv===-1)throw new Error(\"WASM backend not initialized.\");return qv}var iae=\"4.17.0\";var uae=2;tu(\"wasm\",async()=>{let{wasm:r}=await jB();return new pm(r)},uae);var go=A();go.registerFlag(\"WEBGPU_DEFERRED_SUBMIT_BATCH_SIZE\",()=>15);go.registerFlag(\"WEBGPU_CPU_FORWARD\",()=>!0);go.registerFlag(\"WEBGPU_MATMUL_PROGRAM_TYPE\",()=>-1);go.registerFlag(\"WEBGPU_USE_NAIVE_CONV2D_TRANSPOSE\",()=>!0);go.registerFlag(\"WEBGPU_USE_LOW_POWER_GPU\",()=>!1);go.registerFlag(\"WEBGPU_CPU_HANDOFF_SIZE_THRESHOLD\",()=>1e3);go.registerFlag(\"WEBGPU_USE_PROFILE_TOOL\",()=>!1);go.registerFlag(\"WEBGPU_IMPORT_EXTERNAL_TEXTURE\",()=>!0);go.registerFlag(\"WEBGPU_USE_NAIVE_CONV2D_DEBUG\",()=>!1);go.registerFlag(\"WEBGPU_THRESHOLD_TO_INCREASE_WORKGROUPS_FOR_MATMUL\",()=>-1);go.registerFlag(\"WEBGPU_CONV_SEPARATE_IM2COL_SHADER\",()=>!1);go.registerFlag(\"WEBGPU_PRINT_SHADER\",()=>\"\");go.registerFlag(\"WEBGPU_ENGINE_COMPILE_ONLY\",()=>!1);var Hg=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 Kg=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}acquireBuffer(e,t,o=!1,n=!0){let s,a=YB(e,t);return n?(this.freeBuffers.has(a)||this.freeBuffers.set(a,[]),this.freeBuffers.get(a).length>0?(s=this.freeBuffers.get(a).pop(),this.numFreeBuffers--):(s=this.device.createBuffer({size:e,usage:t,mappedAtCreation:o}),this.numBytesAllocated+=e)):(s=this.device.createBuffer({size:e,usage:t,mappedAtCreation:o}),this.numBytesAllocated+=e),this.usedBuffers.has(a)||this.usedBuffers.set(a,[]),this.usedBuffers.get(a).push(s),this.numUsedBuffers++,this.numBytesUsed+=e,s}releaseBuffer(e,t=!0){if(this.freeBuffers.size===0)return;let o=e.size,n=e.usage,s=YB(o,n),a=this.usedBuffers.get(s),i=a.indexOf(e);if(i<0)throw new Error(\"Cannot find the buffer in buffer manager\");a[i]=a[a.length-1],a.pop(),this.numUsedBuffers--,this.numBytesUsed-=o,t?(this.freeBuffers.get(s).push(e),this.numFreeBuffers++):(e.destroy(),this.numBytesAllocated-=o)}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 YB(r,e){return`${r}_${e}`}var qg=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=ZB(o),a=e*t*s,i=QB(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){if(this.freeTextures.size===0)return;let t=e.width,o=e.height,n=e.format,s=e.usage,a=QB(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=ZB(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 QB(r,e,t,o){return`${r}_${e}_${t}_${o}`}function ZB(r){if(r===\"rgba8unorm\")return 16;throw new Error(`${r} is not supported!`)}function JB(r,e){if(Math.max(...r)>5)throw new Error(\"Cannot symbolically compute strides for rank > 6 tensor.\");let t=r.length,o=\"xyzwuv\",n=r.map(a=>`${e}.${o[a]}`),s=new Array(t-1);s[t-2]=n[t-1];for(let a=t-3;a>=0;--a)s[a]=`(${s[a+1]} * ${n[a+1]})`;return s}var Qr=(r,e,t)=>t===\"int32\"?`atomicAdd(${r}, bitcast(${e}));`:`\n {\n var oldValue = 0;\n loop {\n let newValueF32 = bitcast(oldValue) + (${e});\n let newValue = bitcast(newValueF32);\n let res = atomicCompareExchangeWeak(${r}, oldValue, newValue);\n if res.exchanged {\n break;\n }\n oldValue = res.old_value;\n }\n }`;var wi;(function(r){r[r.FROM_PIXELS=0]=\"FROM_PIXELS\",r[r.DRAW=1]=\"DRAW\"})(wi||(wi={}));var oz=(r,e,t,o,n)=>{let s={dtype:o.dtype,shape:o.shape},a=cae(t,s,e),i=r.createShaderModule({code:a,label:e.constructor.name}),p=A().get(\"WEBGPU_PRINT_SHADER\");if(p!==\"\"){p=p.toLowerCase();let u=p.split(\",\");(p===\"all\"||u.some(c=>e.shaderKey.toLowerCase().includes(c)))&&(console.group(e.shaderKey),console.debug(a),console.groupEnd())}return n?r.createComputePipelineAsync({compute:{module:i,entryPoint:\"_start\"},label:e.constructor.name,layout:\"auto\"}):r.createComputePipeline({compute:{module:i,entryPoint:\"_start\"},label:e.constructor.name,layout:\"auto\"})},Ae=(r,e=\"f32\")=>{switch(r){case 1:return`${e}`;case 2:return`vec2<${e}>`;case 3:return`vec3<${e}>`;case 4:return`vec4<${e}>`;default:throw new Error(`${r}-component ${e} is not supported.`)}};function ft(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 Oo(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 G(...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 ez(r,e){let t;return t=`\n ${pae(e)}\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 `,t}function pae(r){return`\n @compute @workgroup_size(${r.workgroupSize[0]}, ${r.workgroupSize[1]}, ${r.workgroupSize[2]})\n`}function cae(r,e,t){let o=[],n=t.workgroupSize[0]*t.workgroupSize[1]*t.workgroupSize[2];if(t.outputComponent=t.outputComponent?t.outputComponent:1,o.push(`\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 ${sz(t)?\" return i32(globalId.x);\":` return i32((workgroupId.z * numWorkgroups.x * numWorkgroups.y +\n workgroupId.y * numWorkgroups.x + workgroupId.x) * ${n}u +\n localIndex);\n `}\n }\n `),t.pixelsOpType!=null){let f=t.pixelsOpType===wi.FROM_PIXELS?`@group(0) @binding(0) var result: array<${Su(e.dtype,t.outputComponent)}>;`:`@group(0) @binding(1) var inBuf : array<${Su(r[0].dtype,t.outputComponent)}>;`,h=e.shape.length===3?\"vec2\":\"i32\";o.push(`\n struct Uniform {\n outShapeStrides : ${h},\n size : i32,\n numChannels : i32,\n alpha : f32,\n };\n\n ${f}\n @group(0) @binding(2) var uniforms: Uniform;\n `);let g=rz(t);return[tz,o.join(`\n`),cm(e.shape),t.getUserCode(),ez(g,t)].join(`\n`)}let s,a,i=\"struct Uniforms { NAN : f32, INFINITY : f32, \";t.variableNames.forEach((f,h)=>{let g=ft(r[h].shape.length);i+=`${f.charAt(0).toLowerCase()+f.slice(1)}Shape : ${g}, `,s=r[h].shape.length-1,a=ft(s),i+=`${f.charAt(0).toLowerCase()+f.slice(1)}ShapeStrides: ${a}, `});let p=ft(e.shape.length);i+=`outShape : ${p}, `,s=e.shape.length-1,a=ft(s),i+=`\n outShapeStrides: ${a}, `,t.size&&(i+=\"size : i32, \"),t.uniforms&&(i+=t.uniforms),i+=\"};\",i=yae(i),o.push(i),t.atomic?o.push(`\n @group(0) @binding(0) var result: array>;\n `):o.push(`\n @group(0) @binding(0) var result: array<${Su(e.dtype,t.outputComponent)}>;\n `),t.variableNames.forEach((f,h)=>{o.push(`\n @group(0) @binding(${1+h}) var ${f}: array<${t.variableComponents?Su(r[h].dtype,t.variableComponents[h]):Su(r[h].dtype,t.outputComponent)}>;\n `)}),i!==\"\"&&o.push(`\n @group(0) @binding(${1+t.variableNames.length}) var uniforms: Uniforms;\n `);let u=hae(e.shape,t.dispatchLayout),c=[tz,o.join(`\n`)+lae,cm(e.shape),u,gae(e.shape.length)];t.atomic||c.push(xae(e.shape,e.dtype,t.outputComponent)),t.variableNames.forEach((f,h)=>{c.push(`${cm(r[h].shape,f)}`)});let l=r.map((f,h)=>fae(f,e.shape,t.variableComponents?t.variableComponents[h]:t.outputComponent,t.dispatchLayout.x.length===e.shape.length)).join(`\n`);c.push(l),c.push(t.getUserCode());let m=rz(t);return c.push(ez(m,t)),c.join(`\n`)}function nz(r,e,t){let o=r.shaderKey;if(r.pixelsOpType!=null)return o;let n=[],s=[];e.forEach(c=>{n.push(c.shape),s.push(c.dtype)}),n.push(t.shape),s.push(t.dtype);let a=e.map(c=>w.getBroadcastDims(c.shape,t.shape)),i=e.map(c=>y.arraysEqual(c.shape,t.shape)).join(\"_\"),p=a.map(c=>c.join(\"_\")).join(\";\"),u=sz(r)?\"flatDispatch\":\"\";return o+=\"_\"+(r.workgroupSize?r.workgroupSize.join(\",\"):\"\")+n.map(c=>c.length).join(\",\")+s.join(\",\")+r.variableNames.join(\",\")+p+i+u,o}var tz=`\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 // 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 let floatToUint: vec4 = bitcast>(val);\n return (floatToUint & vec4(0x7fffffffu)) > vec4(0x7f800000u);\n }\n`,lae=`\n fn isinf(val: f32) -> bool {\n return abs(val) == uniforms.INFINITY;\n }\n`;function cm(r,e=\"\"){let t=r.length,o=e!==\"\"?`get${e.charAt(0).toUpperCase()+e.slice(1)}CoordsFromIndex`:\"getCoordsFromIndex\",n=e!==\"\"?`${e.charAt(0).toLowerCase()+e.slice(1)}ShapeStrides`:\"outShapeStrides\";if(t<=1)return`fn ${o}(index : i32) -> i32 { return index; }`;let s=y.computeStrides(r),a=ft(t),i=[];for(let u=0;u vec2 {\n let d0 = index / uniforms.${n}; let d1 = index - d0 * uniforms.${n};\n return vec2(d0, d1);\n }`;let p;return p=\"var index2 = index;\"+s.map((u,c)=>{let l=`let ${i[c]} = index2 / uniforms.${n}.${Oo(c)}`,m=c===s.length-1?`let ${i[c+1]} = index2 - ${i[c]} * uniforms.${n}.${Oo(c)}`:`index2 = index2 - ${i[c]} * uniforms.${n}.${Oo(c)}`;return`${l}; ${m};`}).join(\"\"),`\n fn ${o}(index : i32) -> ${a} {\n ${p}\n return ${a}(${i.join(\",\")});\n }\n `}function mae(r,e){let t=r.name,o=r.shape.length,n=ft(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`\n fn ${s}() -> ${Ae(e)} {\n return ${Ae(e)}(${t}[0]);\n }\n `;let p=`uniforms.${t.charAt(0).toLowerCase()+t.slice(1)}Shape`,u=`${o}D`;return o===0&&(u=\"1D\"),`\n fn ${s}(${i}) -> ${Ae(e)} {\n return ${Ae(e)}(${t}[getIndexFromCoords${u}(${n}(${a.join(\",\")}),\n ${p})${e===1?\"\":` / ${e}`}]);\n }\n `}function dae(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=ft(p);if(y.arraysEqual(r.shape,e)&&o)return`\n fn ${a}Index(globalIndex : i32) -> ${Ae(t)} {\n return ${Ae(t)}(${n}[globalIndex]);\n }\n\n fn ${a}Coords(coords : ${u}) -> ${Ae(t)} {\n return ${Ae(t)}(${n}[${p>1?\"getOutputIndexFromCoords(coords)\":\"coords\"}${t===1?\"\":` / ${t}`}]);\n }\n `;let c=w.getBroadcastDims(r.shape,e),l=p-i,m=\"\";if(i===0)return`\n fn ${a}Index(globalIndex : i32) -> ${Ae(t)}{\n return get${s}();\n }\n\n fn ${a}Coords(coords : ${u}) -> ${Ae(t)}{\n return get${s}();\n }\n `;p<2&&c.length>=1?m=\"coords = 0;\":m=c.map(g=>`coords.${Oo(g+l)} = 0;`).join(`\n`);let d=\"\";if(p<2&&i>0)d=\"coords\";else if(p>1){let g=ft(i),x=r.shape.map((b,C)=>`coords.${Oo(C+l)}`).join(\", \");d=`${g}(${x})`}else d=\"coords\";let f=`uniforms.${n.charAt(0).toLowerCase()+n.slice(1)}Shape`,h=`${i}D`;return`\n fn ${a}Index(globalIndex : i32) -> ${Ae(t)} {\n var coords = getCoordsFromIndex(globalIndex);\n ${m}\n return ${Ae(t)}(${n}[getIndexFromCoords${h}(${d}, ${f})${t===1?\"\":` / ${t}`}]);\n }\n\n fn ${a}Coords(coordsIn : ${u}) -> ${Ae(t)} {\n var coords = coordsIn;\n ${m}\n return ${Ae(t)}(${n}[getIndexFromCoords${h}(${d}, ${f})${t===1?\"\":` / ${t}`}]);\n }\n`}function fae(r,e,t,o){let n=mae(r,t);return r.shape.length<=e.length&&(n+=dae(r,e,t,o)),n}function hae(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() -> ${ft(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 gae(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 sz(r){return r.dispatch[1]===1&&r.dispatch[2]===1}function Su(r,e=1){if(r===\"float32\")return Ae(e,\"f32\");if(r===\"int32\"||r===\"bool\")return Ae(e,\"i32\");throw new Error(`type ${r} is not supported.`)}function xae(r,e,t){let o=r.length,n=Su(e,t),s=`fn setOutputAtIndex(flatIndex : i32, value : ${Ae(t)}) {\n result[flatIndex] = ${n}(value);\n }\n\n fn setOutputAtIndexI32(flatIndex : i32, value : ${Ae(t,\"i32\")}) {\n result[flatIndex] = ${n}(value);\n }\n `;if(o>=2){let a=[\"d0\",\"d1\",\"d2\",\"d3\",\"d4\",\"d5\"].slice(0,o),i=ft(o);s+=`\n fn setOutputAtCoords(${a.map(p=>`${p} : i32`).join(\", \")}, value : ${Ae(t)}) {\n let flatIndex = getOutputIndexFromCoords(${i}(${a.join(\", \")}));\n setOutputAtIndex(flatIndex${t===1?\"\":` / ${t}`}, value);\n }\n fn setOutputAtCoordsI32(${a.map(p=>`${p} : i32`).join(\", \")}, value : ${Ae(t,\"i32\")}) {\n let flatIndex = getOutputIndexFromCoords(${i}(${a.join(\", \")}));\n setOutputAtIndexI32(flatIndex${t===1?\"\":` / ${t}`}, value);\n }\n `}return s}function yae(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 rz(r){return!(r.dispatchLayout.hasOwnProperty(\"y\")&&r.dispatchLayout.y.length!==0||r.dispatchLayout.hasOwnProperty(\"z\")&&r.dispatchLayout.z.length!==0)}var Zv={};qe(Zv,{GPUBytesPerElement:()=>jg,MatMulProgramType:()=>Mo,assertNotComplex:()=>fm,computeDispatch:()=>H,computeWorkPerThreadForConv2d:()=>mm,computeWorkgroupInfoForMatMul:()=>Qv,computeWorkgroupSizeForConv2d:()=>lm,flatDispatchLayout:()=>X,isWebGPUSupported:()=>dm,tilesFitEvenlyIntoShape:()=>Cae});var Tp=r=>{let e=1;for(let t=0;tt%r[o]===0)}function H(r,e,t=[1,1,1],o=[1,1,1]){let[n,s,a]=[Math.ceil(Tp(r.x.map(i=>e[i]))/(t[0]*o[0])),r.y?Math.ceil(Tp(r.y.map(i=>e[i]))/(t[1]*o[1])):1,r.z?Math.ceil(Tp(r.z.map(i=>e[i]))/(t[2]*o[2])):1];return[n,s,a]}function Qv(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 lm(r,e,t=!1){if(t)return[8,8,1];let o=Tp(r.x.map(s=>e[s])),n=Tp(r.y.map(s=>e[s]));return o<=4?[4,16,1]:n<=4?[16,4,1]:[16,16,1]}function mm(r,e,t=!1){if(t)return[4,4,1];let o=Tp(r.x.map(s=>e[s])),n=Tp(r.y.map(s=>e[s]));return o<=4?[1,2,1]:n<=4?[2,1,1]:[2,2,1]}function X(r){return{x:r.map((e,t)=>t)}}function jg(r){if(r===\"float32\"||r===\"int32\"||r===\"bool\"||r===\"string\")return 4;if(r===\"complex64\")return 8;throw new Error(`Unknown dtype ${r}`)}function dm(){return!!(typeof globalThis!=\"undefined\"&&globalThis.navigator&&globalThis.navigator.gpu)}function fm(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 WebGPU backend.`)})}var Mo;(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\"})(Mo||(Mo={}));var wae=A().getNumber(\"WEBGPU_CPU_HANDOFF_SIZE_THRESHOLD\"),Sae=(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]},jc=class r extends ao{nextDataId(){return r.nextDataId++}constructor(e,t){if(super(),this.commandQueueOwnedIds=new WeakSet,this.dispatchCountInPass=0,this.disposed=!1,this.downloadWaitMs=0,this.tensorDataPendingDisposal=[],this.queryResolveBuffer=null,this.querySet=null,this.querySetCount=2,this.stagingPendingDisposal=[],this.uniformPendingDisposal=[],this.uploadWaitMs=0,this.hasReadSyncWarned=!1,this.hasTimestampQueryWarned=!1,!dm())throw new Error(\"WebGPU is not supported on this device\");this.pipelineCache={},this.device=e,this.queue=e.queue,this.commandEncoder=null,this.computePassEncoder=null,this.adapterInfo=new Hg(t),this.supportTimestampQuery=this.device.features.has(\"timestamp-query\"),this.thresholdToIncreaseWorkgroups=this.adapterInfo.intelGPUGeneration>=12?16:8,this.bufferManager=new Kg(this.device),this.textureManager=new qg(this.device),this.tensorMap=new Bo(this,ur()),A().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))}floatPrecision(){return 32}disposeData(e,t=!1){if(!this.tensorMap.has(e))return!0;let o=this.tensorMap.get(e);return t?o.refCount=0:o.refCount--,o.refCount>0?!1:(o.complexTensorInfos!=null&&(this.disposeData(o.complexTensorInfos.real.dataId),this.disposeData(o.complexTensorInfos.imag.dataId)),this.commandQueueOwnedIds.has(e)?(this.tensorDataPendingDisposal.push(e),!0):(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.resource)){if(t.external){t.resource=null;return}t.resource instanceof GPUBuffer?this.bufferManager.releaseBuffer(t.resource):t.resource instanceof GPUTexture&&this.textureManager.releaseTexture(t.resource),t.resource=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.queue.submit([this.commandEncoder.finish()]),this.commandEncoder=null,this.dispatchCountInPass=0,this.commandQueueOwnedIds=new WeakSet,this.tensorDataPendingDisposal.forEach(e=>{this.releaseResource(e),this.tensorMap.delete(e)}),this.uniformPendingDisposal.forEach(e=>this.bufferManager.releaseBuffer(e)),this.stagingPendingDisposal.forEach(e=>this.bufferManager.releaseBuffer(e,!1)),this.tensorDataPendingDisposal=[],this.uniformPendingDisposal=[],this.stagingPendingDisposal=[]}ensureCommandEncoderReady(){this.commandEncoder||(this.commandEncoder=this.device.createCommandEncoder())}endComputePassEncoder(){this.computePassEncoder&&(this.computePassEncoder.end(),this.computePassEncoder=null)}async checkCompileCompletionAsync(){let e;try{e=await Promise.all(Object.values(this.pipelineCache))}catch(t){throw new Error(t.message)}Object.keys(this.pipelineCache).map((t,o)=>{this.pipelineCache[t]=e[o]})}async getBufferData(e){if(A().getBool(\"WEBGPU_ENGINE_COMPILE_ONLY\"))return console.warn(\"The data may be invalid since WEBGPU_ENGINE_COMPILE_ONLY is true, this can only be called when WEBGPU_ENGINE_COMPILE_ONLY is false\"),null;let t=e.size,o=this.bufferManager.acquireBuffer(t,GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ);this.ensureCommandEncoderReady(),this.endComputePassEncoder(),this.commandEncoder.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),A().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 o.values=t,o.values}readSync(e){let t=this.tensorMap.get(e),{values:o,complexTensorInfos:n}=t;if(o!=null||t.dtype===\"string\")return o;if(t.dtype===\"complex64\"){let h=this.readSync(n.real.dataId),g=this.readSync(n.imag.dataId),x=y.convertBackendValuesAndArrayBuffer(w.mergeRealAndImagArrays(h,g).buffer,\"float32\");return this.convertAndCacheOnCPU(e,x),x}this.hasReadSyncWarned||(this.hasReadSyncWarned=!0,console.warn(\"The performance of synchronously reading data from GPU to CPU is poor on the webgpu backend, please use asynchronous APIs instead.\"));let s=[\"opaque\",\"premultiplied\"],a=t.resource,i=a.size;y.assert(i%4===0,()=>\"Because there is 4 bytes for one pixel, buffer size must be multiple of 4.\");let p=i/4,u=new ArrayBuffer(i),c=256,l=256,m=s.map(h=>new OffscreenCanvas(c,l)),d=new OffscreenCanvas(c,l);this.endComputePassEncoder(),m.map((h,g)=>{let x=h.getContext(\"webgpu\");return x.configure({device:this.device,format:\"bgra8unorm\",usage:GPUTextureUsage.COPY_DST,alphaMode:s[g]}),x.getCurrentTexture()}).map((h,g)=>{let x=c*4,b=(R,D,P)=>{this.ensureCommandEncoderReady(),this.commandEncoder.copyBufferToTexture({buffer:a,bytesPerRow:x,offset:P},{texture:h},{width:R,height:D}),this.submitQueue();let O=d.getContext(\"2d\",{willReadFrequently:!0});O.clearRect(0,0,R,D),O.drawImage(m[g],0,0);let M=O.getImageData(0,0,R,D).data,L=s[g],B=new Uint8ClampedArray(u,P,R*D*4);for(let z=0;z0&&(b(S,k,_),_+=k*(c*4)),S=$%c,S>0&&b(S,1,_)});let f=y.convertBackendValuesAndArrayBuffer(u,t.dtype);return this.convertAndCacheOnCPU(e,f),f}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 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=w.mergeRealAndImagArrays(a,i)}else{let s=await this.getBufferData(t.resource);n=y.convertBackendValuesAndArrayBuffer(s,t.dtype)}return this.convertAndCacheOnCPU(e,n),n}copyBuffer(e){let t=e.size,o=e.usage,n=this.bufferManager.acquireBuffer(t,o);return this.ensureCommandEncoderReady(),this.endComputePassEncoder(),this.commandEncoder.copyBufferToBuffer(e,0,n,0,t),this.submitQueue(),n}createTensorFromGPUData(e,t,o){let n=e.buffer;if(o===\"complex64\")throw new Error(\"Cannot write to a complex64 dtype. \");let s={id:this.nextDataId()};this.tensorMap.set(s,{dtype:o,shape:t,values:null,refCount:1,external:e.zeroCopy});let a=this.tensorMap.get(s),i=jg(a.dtype)*y.sizeFromShape(a.shape);if(e.buffer.sizey.decodeString(n));return me(e.shape,e.dtype,o)}catch(o){throw new Error(\"Failed to decode encoded string bytes into utf-8\")}return me(e.shape,e.dtype,t)}async time(e){!this.supportTimestampQuery&&!this.hasTimestampQueryWarned&&(console.warn(\"This device doesn't support timestamp-query extension. Start Chrome browser with flag --enable-dawn-features=allow_unsafe_apis to try it again. Otherwise, zero will be shown for the kernel time when profiling mode is enabled.\"),this.hasTimestampQueryWarned=!0);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 o=this.tensorMap.get(e.dataId).resource;return o instanceof GPUBuffer?{buffer:o}:o instanceof GPUTexture?o.createView():o}uploadToGPU(e){let t=this.tensorMap.get(e);if(t.resource!=null)return;let o=jg(t.dtype)*y.sizeFromShape(t.shape),n,s=GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC|GPUBufferUsage.COPY_DST;if(t.values){if(n=this.bufferManager.acquireBuffer(o,s,!0),n.mapState===\"unmapped\"){let a=this.bufferManager.acquireBuffer(o,GPUBufferUsage.MAP_WRITE|GPUBufferUsage.COPY_SRC,!0,!1),i=a.getMappedRange();t.dtype===\"int32\"||t.dtype===\"bool\"?new Int32Array(i).set(t.values):new Float32Array(i).set(t.values),a.unmap(),this.ensureCommandEncoderReady(),this.endComputePassEncoder(),this.commandEncoder.copyBufferToBuffer(a,0,n,0,o),this.stagingPendingDisposal.push(a)}else{let a=n.getMappedRange();t.dtype===\"int32\"||t.dtype===\"bool\"?new Int32Array(a).set(t.values):new Float32Array(a).set(t.values),n.unmap()}t.values=null}else n=this.bufferManager.acquireBuffer(o,s);t.resource=n}makeUniforms(e){let t=0,o=0,n=[],s=1;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),u>s&&(s=u),t=Math.ceil(t/u)*u,o=p.data.length,n.push(t),t+=p.data.length*4}),t=Math.ceil(t/s)*s;let a=new ArrayBuffer(t);e.forEach((p,u)=>{let c=n[u];p.type===\"int32\"?new Int32Array(a,c,p.data.length).set(p.data):p.type===\"uint32\"?new Uint32Array(a,c,p.data.length).set(p.data):new Float32Array(a,c,p.data.length).set(p.data)});let i=this.bufferManager.acquireBuffer(t,GPUBufferUsage.COPY_DST|GPUBufferUsage.UNIFORM);return this.queue.writeBuffer(i,0,a,0,t),this.uniformPendingDisposal.push(i),{offset:0,size:t,buffer:i}}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=Sae(this.device,e);let a=t.map((p,u)=>{if(p.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(p.dataId),{dtype:this.tensorMap.get(p.dataId).dtype,shape:p.shape,name:e.variableNames[u]}});e.shaderKey=nz(e,a,s);let i=A().getBool(\"WEBGPU_ENGINE_COMPILE_ONLY\");return e.shaderKey in this.pipelineCache||(this.pipelineCache[e.shaderKey]=oz(this.device,e,a,s,i)),e.pipeline=this.pipelineCache[e.shaderKey],i||this.recordAndSubmit(e,s,t,n),s}recordAndSubmit(e,t,o,n){if(e.pipeline instanceof Promise)throw new Error(\"Please call checkCompileCompletionAsync to ensure parallel compilation is done!\");let s=[],a=[],i=\"int32\";if(e.pixelsOpType==null){s.push({type:\"float32\",data:[NaN]},{type:\"float32\",data:[1/0]}),a=o.concat(t).map(d=>d.shape);let m=\"int32\";a.map(d=>{s.push({type:m,data:d});let f=y.computeStrides(d);s.push({type:m,data:f})})}else{let m=y.computeStrides(t.shape);s.push({type:i,data:m})}if(e.size){let m=y.sizeFromShape(e.outputShape);s.push({type:i,data:[e.outputComponent?m/e.outputComponent:m]})}n&&(s=[...s,...n]);let p=[this.tensorToBinding(t),...o.map(m=>this.tensorToBinding(m)),this.makeUniforms(s)];o.forEach(m=>{this.commandQueueOwnedIds.add(m.dataId)}),this.commandQueueOwnedIds.add(t.dataId);let u=this.device.createBindGroup({layout:e.pipeline.getBindGroupLayout(0),entries:p.map((m,d)=>({binding:d,resource:m}))}),c=this.activeTimers!=null;this.ensureCommandEncoderReady();let l={};c&&this.supportTimestampQuery?(this.endComputePassEncoder(),this.querySet==null&&(this.querySet=this.device.createQuerySet({type:\"timestamp\",count:this.querySetCount})),l.timestampWrites={querySet:this.querySet,beginningOfPassWriteIndex:0,endOfPassWriteIndex:1},this.computePassEncoder=this.commandEncoder.beginComputePass(l)):this.computePassEncoder||(this.computePassEncoder=this.commandEncoder.beginComputePass(l)),this.computePassEncoder.setPipeline(e.pipeline),this.computePassEncoder.setBindGroup(0,u),this.computePassEncoder.dispatchWorkgroups(e.dispatch[0],e.dispatch[1],e.dispatch[2]),this.dispatchCountInPass++,(c||A().get(\"WEBGPU_DEFERRED_SUBMIT_BATCH_SIZE\")<=this.dispatchCountInPass||e.pixelsOpType===wi.DRAW)&&(this.endComputePassEncoder(),c?this.activeTimers.push({name:e.constructor.name,query:this.getQueryTime()}):this.submitQueue())}async getQueryTime(){if(!this.supportTimestampQuery)return 0;this.queryResolveBuffer==null&&(this.queryResolveBuffer=this.bufferManager.acquireBuffer(this.querySetCount*8,GPUBufferUsage.COPY_SRC|GPUBufferUsage.COPY_DST|GPUBufferUsage.QUERY_RESOLVE)),this.commandEncoder.resolveQuerySet(this.querySet,0,this.querySetCount,this.queryResolveBuffer,0);let e=this.bufferManager.acquireBuffer(this.querySetCount*8,GPUBufferUsage.MAP_READ|GPUBufferUsage.COPY_DST);this.commandEncoder.copyBufferToBuffer(this.queryResolveBuffer,0,e,0,this.querySetCount*8),this.submitQueue(),await e.mapAsync(GPUMapMode.READ);let t=new BigUint64Array(e.getMappedRange()),o=Number(t[1]-t[0])/1e6;return e.unmap(),this.bufferManager.releaseBuffer(e),o}shouldExecuteOnCPU(e,t=wae){return A().getBool(\"WEBGPU_CPU_FORWARD\")&&e.every(o=>this.tensorMap.get(o.dataId).resource==null&&y.sizeFromShape(o.shape){let r={powerPreference:A().get(\"WEBGPU_USE_LOW_POWER_GPU\")?\"low-power\":\"high-performance\"},e=await navigator.gpu.requestAdapter(r),t={},o=[];e.features.has(\"timestamp-query\")&&o.push(\"timestamp-query\"),e.features.has(\"bgra8unorm-storage\")&&o.push([\"bgra8unorm-storage\"]),t.requiredFeatures=o;let n=e.limits;t.requiredLimits={maxComputeWorkgroupStorageSize:n.maxComputeWorkgroupStorageSize,maxComputeWorkgroupsPerDimension:n.maxComputeWorkgroupsPerDimension,maxStorageBufferBindingSize:n.maxStorageBufferBindingSize,maxBufferSize:n.maxBufferSize,maxComputeWorkgroupSizeX:n.maxComputeWorkgroupSizeX,maxComputeInvocationsPerWorkgroup:n.maxComputeInvocationsPerWorkgroup};let s=await e.requestDevice(t),a=await e.requestAdapterInfo();return new jc(s,a)},3);var fe;(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.ELU_DER=5]=\"ELU_DER\",r[r.EQUAL=6]=\"EQUAL\",r[r.FLOOR_DIV=7]=\"FLOOR_DIV\",r[r.GREATER=8]=\"GREATER\",r[r.GREATER_EQUAL=9]=\"GREATER_EQUAL\",r[r.LESS=10]=\"LESS\",r[r.LESS_EQUAL=11]=\"LESS_EQUAL\",r[r.LOGICAL_AND=12]=\"LOGICAL_AND\",r[r.LOGICAL_OR=13]=\"LOGICAL_OR\",r[r.MAX=14]=\"MAX\",r[r.MIN=15]=\"MIN\",r[r.MOD=16]=\"MOD\",r[r.MUL=17]=\"MUL\",r[r.NOT_EQUAL=18]=\"NOT_EQUAL\",r[r.POW=19]=\"POW\",r[r.PRELU=20]=\"PRELU\",r[r.SQUARED_DIFFERENCE=21]=\"SQUARED_DIFFERENCE\",r[r.SUB=22]=\"SUB\"})(fe||(fe={}));var Iae=\"let resultTemp = a + b;\",vae=\"let resultTemp = atan2(a, b);\",kae=\"let resultTemp = areal * breal - aimag * bimag;\",Nae=\"let resultTemp = areal * bimag + aimag * breal;\",Tae=\"let resultTemp = a / b;\",_ae=\"let resultTemp = select(a * (b + 1.0), a, b >= b - b);\",Eae=`\n let zero = sign(a) * 0 + 0;\n let one = sign(b) * 0 + 1;\n let resultTemp = select(zero, one, a == b);\n`,$ae=`\n let remainder =\n select(a % b, round(a % b), (round(a) == a) & (round(b) == b));\n let quotient = (a - remainder) / b;\n let resultTemp =\n round(select(quotient, quotient - 1, sign(remainder) == -sign(b)));\n`,Rae=`\n let zero = sign(a) * 0 + 0;\n let one = sign(b) * 0 + 1;\n let resultTemp = select(zero, one, a > b);\n`,Dae=`\n let zero = sign(a) * 0 + 0;\n let one = sign(b) * 0 + 1;\n let resultTemp = select(zero, one, a >= b);\n`,Aae=`\n let zero = sign(a) * 0 + 0;\n let one = sign(b) * 0 + 1;\n let resultTemp = select(zero, one, a < b);\n`,Fae=`\n let zero = sign(a) * 0 + 0;\n let one = sign(b) * 0 + 1;\n let resultTemp = select(zero, one, a <= b);\n`,Pae=\"return f32(a >= 1.0 && b >= 1.0);\",Oae=`return (vec4(a >= vec4(1.0)) *\n vec4(b >= vec4(1.0)));`,Mae=\"return f32(a >= 1.0 || b >= 1.0);\",Lae=`return min(vec4(a >= vec4(1.0)) +\n vec4(b >= vec4(1.0)), vec4(1.0));`,Bae=\"let resultTemp = max(a, b);\",zae=\"let resultTemp = min(a, b);\",Vae=`\n let isNaN = b == 0.;\n var resultTemp = a % b;\n resultTemp = select((resultTemp + b) % b, resultTemp,\n (a < 0. && b < 0.) || (a >= 0. && b > 0.));\n`,Wae=`\n let isNaN = !vec4(b);\n var resultTemp = vec4(a % b);\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`,Uae=\"let resultTemp = a * b;\",Gae=`\n var resultTemp = f32(a != b);\n let valueForNaN = 1.0;\n`,Hae=`\n var resultTemp = vec4(a != b);\n let valueForNaN = 1.0;\n`,Kae=`\n let isNaN = a < 0.0 && floor(b) < b;\n if (b == 0.0) {\n return 1.0;\n }\n var resultTemp = select(sign(a) * pow(abs(a), b), pow(abs(a), b),\n round(abs(b) % 2.0) != 1.0);\n`,qae=`\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`,jae=\"if (a < 0.0) { return b * a; } return a;\",Xae=`\n let aLessThanZero = vec4(a < vec4(0.0));\n return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a);\n`,Yae=\"let resultTemp = (a - b) * (a - b);\",Qae=\"let resultTemp = a - b;\";function Xc(r,e){let t;do{switch(r){case fe.ATAN2:t=vae;break;case fe.MAX:t=Bae;break;case fe.MIN:t=zae;break;case fe.MOD:t=e?Wae:Vae;break;case fe.NOT_EQUAL:t=e?Hae:Gae;break;case fe.POW:t=e?qae:Kae;break;default:continue}let o,n,s;return e?(o=\"isnanVec4\",n=\"vec4\",s=\"vec4\"):(o=\"isnan\",n=\"f32\",s=\"bool\"),`\n let aIsNaN = ${o}(a);\n let aPostLegalization = select(a, ${n}(42), aIsNaN);\n let bIsNaN = ${o}(b);\n let bPostLegalization = select(b, ${n}(42), bIsNaN);\n let isNaN = false;\n let valueForNaN = uniforms.NAN;\n {\n let a = aPostLegalization;\n let b = bPostLegalization;\n ${t}\n return select(\n resultTemp, ${n}(valueForNaN),\n ${s}(isNaN) | aIsNaN | bIsNaN);\n }\n `}while(!1);switch(r){case fe.ADD:t=Iae;break;case fe.COMPLEX_MULTIPLY_IMAG:t=Nae;break;case fe.COMPLEX_MULTIPLY_REAL:t=kae;break;case fe.DIV:t=Tae;break;case fe.ELU_DER:t=_ae;break;case fe.EQUAL:t=Eae;break;case fe.FLOOR_DIV:t=$ae;break;case fe.GREATER:t=Rae;break;case fe.GREATER_EQUAL:t=Dae;break;case fe.LESS:t=Aae;break;case fe.LESS_EQUAL:t=Fae;break;case fe.LOGICAL_AND:return e?Oae:Pae;case fe.LOGICAL_OR:return e?Lae:Mae;case fe.MUL:t=Uae;break;case fe.PRELU:return e?Xae:jae;case fe.SQUARED_DIFFERENCE:t=Yae;break;case fe.SUB:t=Qae;break;default:}return`\n ${t}\n return resultTemp;\n `}var Z;(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.ROUND=27]=\"ROUND\",r[r.RSQRT=28]=\"RSQRT\",r[r.SELU=29]=\"SELU\",r[r.SIGMOID=30]=\"SIGMOID\",r[r.SIGN=31]=\"SIGN\",r[r.SIN=32]=\"SIN\",r[r.SINH=33]=\"SINH\",r[r.SOFTPLUS=34]=\"SOFTPLUS\",r[r.SQRT=35]=\"SQRT\",r[r.SQUARE=36]=\"SQUARE\",r[r.STEP=37]=\"STEP\",r[r.TAN=38]=\"TAN\",r[r.TANH=39]=\"TANH\",r[r.TO_INT=40]=\"TO_INT\"})(Z||(Z={}));var Zae=\"return abs(a);\",Jae=`\n if (abs(a) > 1.) {\n return uniforms.NAN;\n }\n return acos(a);\n`,eie=`\n if (a < 1.) {\n return uniforms.NAN;\n }\n return acosh(a);\n`,tie=`\n if (abs(a) > 1.) {\n return uniforms.NAN;\n }\n return asin(a);\n`,rie=\"return asinh(a);\",oie=`\n if (isnan(a)) {\n return uniforms.NAN;\n }\n return atan(a);\n`,nie=`\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`,sie=\"return ceil(a);\",aie=\"return cos(a);\",iie=`\n let e2x = exp(-a);\n return (e2x + 1.0 / e2x) / 2.0;\n`,uie=\"return exp(a) - 1.0;\",pie=\"if (a >= 0.0) { return a; } return (exp(a) - 1.0);\",cie=`\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`,lie=`\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 = ${w.ERF_P};\n let a1 = ${w.ERF_A1};\n let a2 = ${w.ERF_A2};\n let a3 = ${w.ERF_A3};\n let a4 = ${w.ERF_A4};\n let a5 = ${w.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`,mie=\"return exp(a);\",die=\"return floor(a);\",fie=\"return f32(!isnan(a) && !isinf(a));\",hie=\"return f32(isinf(a));\",gie=\"return f32(isnan(a));\",xie=\"return a;\",yie=`if (a < 0.0) { return uniforms.NAN; }\n return log(a);`,bie=`\n if (isnan(a)) { return a; }\n return log(1.0 + a);\n`,Cie=\"return f32(!(a >= 1.0));\",wie=\"return -a;\",Sie=\"if (a < 0.0) { return uniforms.alpha * a; } return a;\",Iie=`\n let aLessThanZero = vec4(a < vec4(0.0));\n return (aLessThanZero * (uniforms.alpha * a)) + ((vec4(1.0) - aLessThanZero) * a);\n`,vie=\"return 1.0 / a;\",kie=\"return select(a, 0.0, a < 0.0);\",Nie=\"return clamp(a, 0.0, 6.0);\",Tie=\"return clamp(a, vec4(0.0, 0.0, 0.0, 0.0), vec4(6.0, 6.0, 6.0, 6.0));\",_ie=`\n return select(a, vec4(0.0), a < vec4(0.0));\n`,Eie=\"return round(a);\",$ie=\"return inverseSqrt(a);\",Rie=`\n if (a >= 0.0) {\n return ${w.SELU_SCALE} * a;\n } else {\n return ${w.SELU_SCALEALPHA} * (exp(a) - 1.0);\n }\n`,Die=\"return 1.0 / (1.0 + exp(-1.0 * a));\",Aie=\"return sign(a);\",Fie=\"return sin(a);\",Pie=`\n let e2x = exp(a);\n return (e2x - 1.0 / e2x) / 2.0;\n`,Oie=`\n let epsilon = 1.1920928955078125e-7;\n let threshold = log(epsilon) + 2.0;\n\n let too_large = a > -threshold;\n let too_small = a < threshold;\n let exp_a = exp(a);\n\n if (too_large) {\n return a;\n } else if (too_small) {\n return exp_a;\n } else {\n return log(exp_a + 1.0);\n }\n`,Mie=\"return sqrt(a);\",Lie=\"return a * a;\",Bie=`\n if (isnan(a)) {\n return a;\n }\n\n return select(uniforms.stepAlpha, 1.0, a > 0.0);\n`,zie=\"return tan(a);\",Vie=`\n let e2x = exp(-2.0 * abs(a));\n return sign(a) * (1.0 - e2x) / (1.0 + e2x);\n`,Wie=\"return f32(i32((a)));\";function Si(r,e){switch(r){case Z.ABS:return Zae;case Z.ACOS:return Jae;case Z.ACOSH:return eie;case Z.ASIN:return tie;case Z.ASINH:return rie;case Z.ATAN:return oie;case Z.ATANH:return nie;case Z.COS:return aie;case Z.COSH:return iie;case Z.CEIL:return sie;case Z.ELU:return e?cie:pie;case Z.ERF:return lie;case Z.EXP:return mie;case Z.EXPM1:return uie;case Z.FLOOR:return die;case Z.IS_FINITE:return fie;case Z.IS_INF:return hie;case Z.IS_NAN:return gie;case Z.LINEAR:return xie;case Z.LOG:return yie;case Z.LOG1P:return bie;case Z.LOGICAL_NOT:return Cie;case Z.NEG:return wie;case Z.LEAKYRELU:return e?Iie:Sie;case Z.RECIPROCAL:return vie;case Z.RELU:return e?_ie:kie;case Z.RELU6:return e?Tie:Nie;case Z.ROUND:return Eie;case Z.RSQRT:return $ie;case Z.SELU:return Rie;case Z.SIGMOID:return Die;case Z.SIGN:return Aie;case Z.SIN:return Fie;case Z.SINH:return Pie;case Z.SOFTPLUS:return Oie;case Z.SQRT:return Mie;case Z.SQUARE:return Lie;case Z.STEP:return Bie;case Z.TAN:return zie;case Z.TANH:return Vie;case Z.TO_INT:return Wie;default:throw new Error(`BinaryType ${r} is not implemented!`)}}function dr(r,e=!1,t=!1,o=3){if(r===null)return\"\";let n=\"\";if(r===\"linear\")n=Si(Z.LINEAR);else if(r===\"relu\")n=Si(Z.RELU,t);else if(r===\"elu\")n=Si(Z.ELU,t);else if(r===\"relu6\")n=Si(Z.RELU6,t);else if(r===\"prelu\")n=Xc(fe.PRELU,t);else if(r===\"sigmoid\")n=Si(Z.SIGMOID,t);else if(r===\"leakyrelu\")n=Si(Z.LEAKYRELU,t);else throw new Error(`Activation ${r} has not been implemented for the WebGPU backend.`);let a=Ae(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 Zr(r,e){return`\n ${r?\"value = value + getBiasByOutputCoords(coords);\":\"\"}\n ${e?\"value = activation(value, coords);\":\"\"}\n `}function Jv(r,e,t=!1,o=!1,n=!1,s=1){y.assert(r&&s===1||!r,()=>`transposeA ${r} is not compatible with component size ${s}`);let a=`\n ${r?\"value = getA(batch, col, row);\":\"value = getA(batch, row, col);\"}\n\n `,i=e?\"value = getB(batch, col, row);\":\"value = getB(batch, row, col);\";return`\n fn mm_readA(batch: i32, row: i32, col: i32) -> ${Ae(s)} {\n var value = ${Ae(s)}(0.0);\n ${t&&n?a:`\n ${r?\"if(row < uniforms.dimAOuter && col < uniforms.dimInner)\":\"if(row < uniforms.aShape[1] && col < uniforms.aShape[2])\"}\n {\n ${a}\n }\n `}\n return value;\n }\n\n fn mm_readB(batch: i32, row: i32, col: i32) -> ${Ae(s)} {\n var value = ${Ae(s)}(0.0);\n ${i}\n return value;\n }\n `}function hm(r,e,t,o,n=!1,s=!1,a=!1,i=1){return`\n ${Jv(t,o,n,s,a,i)}\n fn mm_write(batch: i32, row: i32, col: i32, valueIn: ${Ae(i)}) {\n ${n&&s?\"\":\"if (row < uniforms.dimAOuter && col < uniforms.dimBOuter)\"}\n {\n var value = valueIn;\n let coords = vec3(batch, row, col);\n ${Zr(r,e)}\n setOutputAtCoords(coords[0], coords[1], coords[2], value);\n }\n }\n `}var Uie=(r,e)=>r?`\n mm_Asub[inputRow][inputCol] = mm_readA(batchA,\n kStart + inputRow,\n globalRowStart + inputCol * ${e});\n `:`\n mm_Asub[inputRow][inputCol] = mm_readA(batchA,\n globalRow + innerRow,\n kStart + inputCol * ${e});\n `,Gie=(r,e,t,o)=>{if(r)return`\n for (var k = 0; k < ${o}; k++) {\n let BCached0 = mm_Bsub[k][tileCol];\n let ACached0 = mm_Asub[k][localRow];\n for (var i = 0; i < ${t}; i++) {\n acc[i] = fma(BCached0, vec4(ACached0[i]), acc[i]);\n }\n }`;{let n=\"\",s=\"\";for(let a=0;a(ACached[${a}]), acc[i]);`;return`\n for (var k = 0; k < ${o/e}; k++) {\n ${n}\n for (var i = 0; i < ${t}; i++) {\n let ACached = mm_Asub[tileRow + i][k];\n ${s}\n }\n }`}};function _p(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],d=r[1],f=r[0];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 ${G()} {\n let localRow = i32(localId.y);\n let tileRow = localRow * ${d};\n let tileCol = i32(localId.x);\n\n let globalRow = i32(globalId.y) * ${d};\n let globalCol = i32(globalId.x) * ${f};\n let batch = ${n?\"0\":\"i32(globalId.z)\"};\n let batchA = ${n||!a?\"batch\":\"batch % uniforms.aShape[0]\"};\n let batchB = ${n||!a?\"batch\":\"batch % uniforms.bShape[0]\"};\n let globalRowStart = i32(workgroupId.y) * ${i};\n\n let numTiles = ${n?`${Math.ceil(s/o)}`:`(uniforms.dimInner - 1) / ${o} + 1`};\n var kStart = ${n?`i32(globalId.z) * ${s}`:\"0\"};\n\n var acc: array, ${d}>;\n\n // Loop over shared dimension.\n let tileRowB = localRow * ${m};\n for (var t = 0; t < numTiles; t++) {\n // Load one tile of A into local memory.\n for (var innerRow = 0; innerRow < ${d}; innerRow++) {\n let inputRow = tileRow + innerRow;\n let inputCol = tileCol;\n ${Uie(t,l)}\n }\n\n // Load one tile of B into local memory.\n for (var innerRow = 0; innerRow < ${m}; innerRow++) {\n let inputRow = tileRowB + innerRow;\n let inputCol = tileCol;\n mm_Bsub[inputRow][inputCol] = mm_readB(batchB, kStart + inputRow, globalCol);\n }\n kStart = kStart + ${o};\n workgroupBarrier();\n\n // Compute acc values for a single thread.\n ${Gie(t,l,d,o)}\n workgroupBarrier();\n }\n\n for (var innerRow = 0; innerRow < ${d}; innerRow++) {\n mm_write(batch, globalRow + innerRow, globalCol, acc[innerRow]);\n }\n }`}var az=r=>r?`\n mm_Asub[inputRow][inputCol] = mm_readA(batchA,\n kStart + inputRow,\n globalRowStart + inputCol);\n `:`\n mm_Asub[inputRow][inputCol] = mm_readA(batchA,\n globalRowStart + inputRow,\n kStart + inputCol);\n `,Hie=r=>r?\"let ACached = mm_Asub[k][tileRow + innerRow];\":\"let ACached = mm_Asub[tileRow + innerRow][k];\";function Ep(r,e,t=!1,o=32,n=!1,s=32,a=!1,i=!1){let p=r[1]*e[1],u=r[0]*e[0],c=t?p:o,l=t?o:p;y.assert(l%e[1]===0&&c%e[0]===0&&o%e[1]===0,()=>`tileAHight ${l} must be divisible by workgroupSize[1]${e[1]}, tileAWidth ${c} must be divisible by workgroupSize[0]${e[0]}, tileInner ${o} must be divisible by workgroupSize[1]${e[1]}`);let m=l/e[1],d=c/e[0],f=o/e[1],h=r[1],g=r[0],x=a?`\n let localRow = i32(localId.y);\n let localCol = i32(localId.x);\n let globalRowStart = i32(workgroupId.y) * ${p};\n let globalColStart = i32(workgroupId.x) * ${u};\n\n // Loop over shared dimension.\n for (var t = 0; t < numTiles; t++) {\n // Load one tile of A into local memory.\n for (var inputRow = localRow; inputRow < ${l}; inputRow = inputRow + ${e[1]}) {\n for (var inputCol = localCol; inputCol < ${c}; inputCol = inputCol + ${e[0]}) {\n ${az(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 < ${u}; inputCol = inputCol + ${e[0]}) {\n mm_Bsub[inputRow][inputCol] = mm_readB(batchB,\n kStart + inputRow,\n globalColStart + inputCol);\n }\n }\n kStart = kStart + ${o};\n workgroupBarrier();\n\n // Compute acc values for a single thread.\n var BCached : array;\n for (var k = 0; k < ${o}; k++) {\n for (var inner = 0; inner < ${g}; inner++) {\n BCached[inner] = mm_Bsub[k][localCol + inner * ${e[0]}];\n }\n for (var innerRow = 0; innerRow < ${h}; innerRow++) {\n let ACached = ${t?`mm_Asub[k][localRow + innerRow * ${e[1]}];`:`mm_Asub[localRow + innerRow * ${e[1]}][k];`}\n for (var innerCol = 0; innerCol < ${g}; innerCol++) {\n acc[innerRow][innerCol] =\n fma(ACached, BCached[innerCol], acc[innerRow][innerCol]);\n }\n }\n }\n workgroupBarrier();\n }\n for (var innerRow = 0; innerRow < ${h}; innerRow++) {\n let gRow = globalRowStart + localRow + innerRow * ${e[1]};\n for (var innerCol = 0; innerCol < ${g}; innerCol++) {\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) * ${h};\n let tileCol = i32(localId.x) * ${g};\n\n let globalRow = i32(globalId.y) * ${h};\n let globalCol = i32(globalId.x) * ${g};\n let globalRowStart = i32(workgroupId.y) * ${p};\n\n let tileRowA = i32(localId.y) * ${m};\n let tileColA = i32(localId.x) * ${d};\n let tileRowB = i32(localId.y) * ${f};\n // Loop over shared dimension.\n for (var t = 0; t < numTiles; t++) {\n // Load one tile of A into local memory.\n for (var innerRow = 0; innerRow < ${m}; innerRow++) {\n for (var innerCol = 0; innerCol < ${d}; innerCol++) {\n let inputRow = tileRowA + innerRow;\n let inputCol = tileColA + innerCol;\n ${az(t)}\n }\n }\n\n // Load one tile of B into local memory.\n for (var innerRow = 0; innerRow < ${f}; innerRow++) {\n for (var innerCol = 0; innerCol < ${g}; innerCol++) {\n let inputRow = tileRowB + innerRow;\n let inputCol = tileCol + innerCol;\n mm_Bsub[inputRow][inputCol] = mm_readB(batchB,\n kStart + inputRow,\n globalCol + innerCol);\n }\n }\n kStart = kStart + ${o};\n workgroupBarrier();\n\n // Compute acc values for a single thread.\n var BCached : array;\n for (var k = 0; k < ${o}; k++) {\n for (var inner = 0; inner < ${g}; inner++) {\n BCached[inner] = mm_Bsub[k][tileCol + inner];\n }\n\n for (var innerRow = 0; innerRow < ${h}; innerRow++) {\n ${Hie(t)}\n for (var innerCol = 0; innerCol < ${g}; innerCol++) {\n acc[innerRow][innerCol] =\n fma(ACached, BCached[innerCol], acc[innerRow][innerCol]);\n }\n }\n }\n\n workgroupBarrier();\n }\n\n for (var innerRow = 0; innerRow < ${h}; innerRow++) {\n for (var innerCol = 0; innerCol < ${g}; innerCol++) {\n mm_write(batch, globalRow + innerRow, globalCol + innerCol,\n acc[innerRow][innerCol]);\n }\n }\n `;return`\n var mm_Asub : array, ${l}>;\n var mm_Bsub : array, ${o}>;\n\n ${G()} {\n let batch = ${n?\"0\":\"i32(globalId.z)\"};\n let batchA = ${n||!i?\"batch\":\"batch % uniforms.aShape[0]\"};\n let batchB = ${n||!i?\"batch\":\"batch % uniforms.bShape[0]\"};\n let numTiles = ${n?`${Math.ceil(s/o)}`:`(uniforms.dimInner - 1) / ${o} + 1`};\n var kStart = ${n?`i32(globalId.z) * ${s}`:\"0\"};\n\n var acc : array, ${h}>;\n\n // Without this initialization strange values show up in acc.\n for (var innerRow = 0; innerRow < ${h}; innerRow++) {\n for (var innerCol = 0; innerCol < ${g}; innerCol++) {\n acc[innerRow][innerCol] = 0.0;\n }\n }\n ${x}\n }\n `}var Kie=r=>r?`\n mm_readA(batchA, colA, globalRow),\n mm_readA(batchA, colA + 1, globalRow),\n mm_readA(batchA, colA + 2, globalRow),\n mm_readA(batchA, colA + 3, globalRow)\n `:`\n mm_readA(batchA, globalRow, colA),\n mm_readA(batchA, globalRow, colA + 1),\n mm_readA(batchA, globalRow, colA + 2),\n mm_readA(batchA, globalRow, colA + 3)\n `;function qie(r,e=!1){y.assert(r[1]===1&&r[2]===1,()=>`A linear work group size is required. But got ${r}.`);let t=r[0]*4;return`\n var mm_Asub : array, ${r[0]}>;\n\n ${G()} {\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) / ${t} + 1;\n let batch = i32(globalId.z);\n let batchA = batch % uniforms.aShape[0];\n let batchB = batch % uniforms.bShape[0];\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++) {\n // Load one tile of A into local memory.\n let colA = t * ${t} + tileCol * 4;\n mm_Asub[tileCol] = vec4(${Kie(e)});\n workgroupBarrier();\n\n // Compute acc values for a single thread.\n for (var k = 0; k < ${t/4}; k++) {\n let rowB = t * ${t} + k * 4;\n let BCached = vec4(mm_readB(batchB, rowB, globalCol),\n mm_readB(batchB, rowB + 1, globalCol),\n mm_readB(batchB, rowB + 2, globalCol),\n mm_readB(batchB, 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 Xg=class{constructor(e,t,o=!1,n=!1,s=null,a=null,i=null,p=!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 u=o?e[1]:e[2];if(this.isVec4=(u%4===0&&!o||t[1]%4===0&&o)&&t[2]%4===0&&!n,this.outputComponent=this.isVec4?4:1,this.isVectorA=t[1]===1&&!o,!this.isVec4&&this.isVectorA)this.elementsPerThread=[1,1,1],this.workgroupSize=[32,1,1];else{let m=Qv(t[1],u,t[2],o);this.workgroupSize=m.workgroupSize,this.elementsPerThread=m.elementsPerThread}this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize,this.elementsPerThread);let c=s!=null,l=i!=null;c&&this.variableNames.push(\"bias\"),l&&this.variableNames.push(\"preluActivationWeights\"),this.sequentialAccessByThreads=p,this.transposeA=o,this.transposeB=n,this.addBias=c,this.activation=a,this.hasPreluActivationWeights=l,[this.fitAOuter,this.fitBOuter,this.fitInner]=this.getShapeFit(t[1],t[2],u),this.shaderKey=`matMulPacked_${this.elementsPerThread}_${o}_${n}_${this.activation}_${this.fitAOuter}_${this.fitBOuter}_${this.fitInner}_${this.isVec4}_${this.isVectorA}_${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 ${dr(this.activation,this.hasPreluActivationWeights,this.isVec4)}\n ${hm(this.addBias,this.activation,!1,this.transposeB,this.fitAOuter,this.fitBOuter,this.fitInner,this.isVec4?4:1)}\n ${this.isVec4?_p(this.elementsPerThread,this.workgroupSize,this.transposeA,this.tileInner,!1,null,!0):this.isVectorA?qie(this.workgroupSize,this.transposeA):Ep(this.elementsPerThread,this.workgroupSize,this.transposeA,this.tileInner,!1,null,this.sequentialAccessByThreads,!0)}\n `}};function jie(r){return`\n var sumValues : array;\n ${G()} {\n let coords = getOutputCoords();\n let batch = coords[0];\n let batchA = batch % uniforms.aShape[0];\n let batchB = batch % uniforms.bShape[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 + ${r}) {\n let dataA = mm_readA(batchA, row, k);\n let dataB = mm_readB(batchB, k, col);\n sum = sum + dataA * dataB;\n }\n sumValues[localId.x] = sum;\n workgroupBarrier();\n\n for(var currentSize = ${r/2}u; 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 Yg=class{constructor(e,t=!1,o=!1,n=null,s=null,a=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=H(this.dispatchLayout,this.outputShape,this.workgroupSize);let i=n!=null,p=a!=null;i&&this.variableNames.push(\"bias\"),p&&this.variableNames.push(\"preluActivationWeights\"),this.transposeA=t,this.transposeB=o,this.addBias=i,this.activation=s,this.hasPreluActivationWeights=p,this.shaderKey=`matMulReduce_${this.activation}_${t}_${o}`}getUserCode(){return`\n ${dr(this.activation,this.hasPreluActivationWeights)}\n ${hm(this.addBias,this.activation,this.transposeA,this.transposeB)}\n ${jie(this.workgroupSize[0])}\n `}};function Xie(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 ${G()} {\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 let batchA = batch % uniforms.aShape[0];\n let batchB = batch % uniforms.bShape[0];\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(batchA, globalRow, globalColA);\n var regB0 = mm_readB(batchB, globalRowB + 2 * tileRow, globalCol);\n var regB1 = mm_readB(batchB, 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(batchA, globalRow, globalColA);\n regB0 = mm_readB(batchB, globalRowB + 2 * tileRow, globalCol);\n regB1 = mm_readB(batchB, 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 Qg=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.shaderKey=`matMulSmallOutputSize_${this.activation}_${n}_${s}`}getUserCode(){return`\n ${dr(this.activation,this.hasPreluActivationWeights)}\n ${hm(this.addBias,this.activation,this.transposeA,this.transposeB)}\n ${Xie(this.workgroupSize)}\n `}};var Zg=class{constructor(e,t,o=!1,n=!1){this.variableNames=[\"A\",\"B\"],this.uniforms=\"dimAOuter : i32, dimBOuter : i32, dimInner : i32,\",this.workgroupSize=[8,8,1],this.atomic=!0,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]};let s=(o&&this.outputShape[1]%4===0||!o&&t%4===0)&&this.outputShape[2]%4===0;this.elementsPerThread=[4,4,this.splitedDimInner],this.outputComponent=s?4:1,s||(this.outputShape[1]<16&&(this.elementsPerThread[1]=1),this.outputShape[2]<16&&(this.elementsPerThread[0]=1)),this.dispatch=H(this.dispatchLayout,[this.outputShape[0],this.outputShape[1],this.outputShape[2],t],this.workgroupSize,this.elementsPerThread),this.transposeA=o,this.transposeB=n,this.shaderKey=`matMulSplitK_${o}_${n}_${this.elementsPerThread}_${this.outputComponent}`}getUserCode(){let e=this.outputComponent;return`\n ${Jv(!1,this.transposeB,!1,!1,!1,e)}\n fn mm_write(batch: i32, row : i32, col : i32, value : ${Ae(e)}) {\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 for (var i = 0; i < ${e}; i = i + 1) {\n ${Qr(\"&result[flatIndex + i]\",`${e>1?\"value[i]\":\"value\"}`,\"float32\")}\n }\n }\n }\n ${e===4?_p(this.elementsPerThread,this.workgroupSize,this.transposeA,32,!0,this.splitedDimInner):Ep(this.elementsPerThread,this.workgroupSize,this.transposeA,32,!0,this.splitedDimInner)}\n `}},Jg=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=X(this.outputShape),this.dispatch=H(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 ${dr(this.activation,this.hasPreluActivationWeights)}\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n var value = getXByOutputIndex(index);\n ${Zr(this.addBias,this.activation)}\n setOutputAtIndex(index, value);\n }\n }\n `}};var ex=class{constructor(e){this.variableNames=[],this.outputShape=[],this.uniforms=\"value : f32,\",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"fill\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n setOutputAtIndex(index, uniforms.value);\n }\n }\n `}};function vt(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 ex(o),i=[{type:\"float32\",data:[n]}];return e.runWebGPUProgram(a,[],s,i)}}var iz={kernelName:sa,backendName:\"webgpu\",kernelFunc:vt};function pe(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 uz={kernelName:da,backendName:\"webgpu\",kernelFunc:pe};function $p({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),S=Sr.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],$=pe({inputs:{x:r},backend:n,attrs:{shape:k}}),R=pe({inputs:{x:e},backend:n,attrs:{shape:_}}),D=[$,R],P=Math.max(x,b),O=[$,R],M=[{type:\"int32\",data:[d]},{type:\"int32\",data:[f]},{type:\"int32\",data:[l]}],L,B,z=[P,d,f],U=A().get(\"WEBGPU_MATMUL_PROGRAM_TYPE\");if(U<0){let q=A().getNumber(\"WEBGPU_THRESHOLD_TO_INCREASE_WORKGROUPS_FOR_MATMUL\"),Y=q>0?q:n.thresholdToIncreaseWorkgroups,J=P*Math.ceil(d/32)*Math.ceil(f/32);J<=Y||d<=8&&J<=Y*2?P*d*f<=128?U=Mo.MatMulReduceProgram:P===1&&m>=2e3?U=Mo.MatMulSplitKProgram:U=Mo.MatMulSmallOutputSizeProgram:U=Mo.MatMulPackedProgram}switch(U){case Mo.MatMulReduceProgram:L=new Yg(z,t,o,s,p,a);break;case Mo.MatMulSplitKProgram:{if(B=vt({backend:n,attrs:{shape:z,value:0,dtype:r.dtype}}),L=new Zg(z,m,t,o),s||p){B=n.runWebGPUProgram(L,O,r.dtype,M,B);let Y=new Jg(B.shape,s,p,a),J=null,re=[B];s&&re.push(s),a&&re.push(a),p===\"leakyrelu\"&&(J=[{type:\"float32\",data:[i]}],Y.uniforms+=\" alpha : f32,\");let ne=n.runWebGPUProgram(Y,re,B.dtype,J);D.push(B);let ee=pe({inputs:{x:ne},backend:n,attrs:{shape:S}});D.push(ne);for(let oe of D)n.disposeData(oe.dataId);return ee}break}case Mo.MatMulSmallOutputSizeProgram:L=new Qg(k,_,z,t,o,s,p,a);break;case Mo.MatMulPackedProgram:let q=n.adapterInfo.isIntel();L=new Xg(k,z,t,o,s,p,a,q);break;default:throw new Error(`Unsupported MatMulProgramType ${U}.`)}s&&O.push(s),a&&O.push(a),p===\"leakyrelu\"&&(M.push({type:\"float32\",data:[i]}),L.uniforms+=\" alpha : f32,\"),B=n.runWebGPUProgram(L,O,r.dtype,M,B);let j=pe({inputs:{x:B},backend:n,attrs:{shape:S}});D.push(B);for(let q of D)n.disposeData(q.dataId);return j}function Yie(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 $p({a:n,b:s,transposeA:p,transposeB:u,backend:t,bias:a,preluActivationWeights:i,leakyreluAlpha:l,activation:c})}var pz={kernelName:So,backendName:\"webgpu\",kernelFunc:Yie};var gm=class{constructor(e,t,o){this.variableNames=[\"AReal\",\"AImag\",\"BReal\",\"BImag\"],this.workgroupSize=[128,1,1],this.size=!0,this.outputShape=w.assertAndGetBroadcastShape(t,o),this.dispatchLayout=X(this.outputShape),this.dispatch=H(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 ${Xc(this.op,!1)}\n }\n\n ${G(\"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 Ii=class{constructor(e,t,o){if(this.size=!0,this.variableNames=[\"A\",\"B\"],this.outputShape=w.assertAndGetBroadcastShape(t,o),this.dispatchLayout=X(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.outputComponent=1,this.variableComponents=[1,1],this.lastDimensionSize=this.useSharedMemoryWithB?o[0]:t[0],this.shaderKey=`binary_${e}_${this.lastDimensionSize}`,this.type=\"shared\",this.workgroupSize=[256,1,1];else{let n=t.length>0&&t[t.length-1]%4===0,s=o.length>0&&o[o.length-1]%4===0;n&&s?(this.outputComponent=4,this.variableComponents=[4,4]):n&&(y.isScalarShape(o)||o[o.length-1]===1)||s&&(y.isScalarShape(t)||t[t.length-1]===1)?(this.outputComponent=4,this.variableComponents=n?[4,1]:[1,4]):(this.outputComponent=1,this.variableComponents=[1,1]),this.type=\"nonshared\",this.shaderKey=`binary_${e}_${this.variableComponents}`,this.workgroupSize=[128,1,1]}this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize,[this.outputComponent,1,1])}getUserCode(){let e,t=this.outputComponent===4?\"vec4\":\"f32\",o=`\n fn binaryOperation(a : ${t}, b : ${t}) -> ${t} {\n ${Xc(this.op,this.outputComponent===4)}\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 ${G(\"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 ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index * ${this.outputComponent});\n let a = ${t}(getAByOutputCoords(coords));\n let b = ${t}(getBByOutputCoords(coords));\n setOutputAtIndex(index, binaryOperation(a, b));\n }\n }\n `;return e}};function At(r){let{inputs:e}=r,{x:t}=e;return r.backend.incRef(t.dataId),{dataId:t.dataId,shape:t.shape,dtype:t.dtype}}var cz={kernelName:Co,backendName:\"webgpu\",kernelFunc:At};function xo(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=At({inputs:{x:o},backend:t}),p=At({inputs:{x:n},backend:t});return a.complexTensorInfos={real:i,imag:p},s}var lz={kernelName:Di,backendName:\"webgpu\",kernelFunc:xo};var Jr=class{constructor(e,t,o=\"\"){this.variableNames=[\"A\"],this.size=!0;let n=128;this.workgroupSize=[n,1,1],this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.op=t,o!==\"\"&&(this.uniforms=o),this.shaderKey=`unary_${t}`}getUserCode(){return`\n fn unaryOperation(a : f32) -> f32 {\n ${Si(this.op,!1)}\n }\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let a = getAByOutputIndex(index);\n setOutputAtIndex(index, unaryOperation(a));\n }\n }\n `}};function ye({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 Jr(s.shape,r);return a.runWebGPUProgram(p,[s],i)}}function et({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!==fe.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},S={dataId:b.dataId,dtype:b.dtype,shape:i.shape},k=new Ii(r,a.shape,i.shape);return p.runWebGPUProgram(k,[C,S],dt(x.dtype,b.dtype))});else{let g=new gm(fe.COMPLEX_MULTIPLY_REAL,a.shape,i.shape),x=new gm(fe.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=xo({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\"?w.fromUint8ToStringArray(l):l,f=a.dtype===\"string\"?w.fromUint8ToStringArray(m):m,[h,g]=e(a.shape,i.shape,d,f,u);return p.makeTensorInfo(g,u,h)}let c=new Ii(r,a.shape,i.shape);return p.runWebGPUProgram(c,[a,i],u)}}var{addImpl:mz,castImpl:dz,ceilImpl:fz,concatImpl:hz,equalImpl:gz,expImpl:xz,expm1Impl:yz,floorImpl:bz,floorDivImpl:Cz,gatherNdImpl:wz,gatherV2Impl:Sz,greaterEqualImpl:Iz,greaterImpl:vz,lessEqualImpl:kz,lessImpl:Nz,logImpl:Tz,maxImpl:_z,maximumImpl:Ez,minimumImpl:$z,multiplyImpl:Rz,negImpl:Dz,notEqualImpl:Az,prodImpl:Fz,rangeImpl:Pz,rsqrtImpl:Oz,scatterImpl:Mz,simpleAbsImpl:Lz,sliceImpl:Bz,stridedSliceImpl:zz,stringNGramsImpl:Vz,subImpl:Wz,tileImpl:Uz,topKImpl:Gz,transposeImpl:Hz,uniqueImpl:rOt}=Ic;var Qie=ye({opType:Z.ABS,cpuKernelImpl:Lz}),Kz={kernelName:Xs,backendName:\"webgpu\",kernelFunc:Qie};var Zie=ye({opType:Z.ACOS}),qz={kernelName:Vo,backendName:\"webgpu\",kernelFunc:Zie};var Jie=ye({opType:Z.ACOSH}),jz={kernelName:Wo,backendName:\"webgpu\",kernelFunc:Jie};var eue=et({opType:fe.ADD,cpuKernelImpl:mz,supportsComplex:!0}),Xz={kernelName:uo,backendName:\"webgpu\",kernelFunc:eue};var tx=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=X(this.outputShape),this.dispatch=H(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 ${G(\"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 tue(r){let{inputs:e,backend:t}=r,o=e;if(o.length===1)return At({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 tx(s);return t.runWebGPUProgram(a,o,n)}var Yz={kernelName:Uo,backendName:\"webgpu\",kernelFunc:tue};var rx=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]}`);let e=this.workgroupSize[0];return`\n var tile : array, ${this.workgroupSize[0]}>;\n ${G()} {\n var x = i32(workgroupId.x) * ${e} + i32(localId.x);\n var y = i32(workgroupId.y) * ${e} + 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) * ${e} + i32(localId.x);\n y = i32(workgroupId.x) * ${e} + i32(localId.y);\n if (x < height && y < width) {\n setOutputAtIndex((y * height + x), tile[localId.x]\n [localId.y]);\n }\n }\n `}};var ox=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=32768&&o>=512?this.workgroupSize=[512,1,1]:e.inSize>=4096?this.workgroupSize=[256,1,1]:this.workgroupSize=[64,1,1],this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,[1,1,1]),this.reduceType=t,this.shaderKey=`reduce_${t}`}getUserCode(){let e=\"\",t=\"0.0\",o=this.workgroupSize[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\"):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 n=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 ${G(\"index\")} {\n let outputIndex = index / ${o};\n let offset = getOffset(outputIndex);\n var bestValue = ${t};\n let Length = uniforms.reduceSize;\n let WorkPerThread = DIV_CEIL(u32(Length), ${o}u);\n for (var k = i32(localId.x); k < Length && outputIndex < uniforms.size;\n k = k + ${o}) {\n let candidate = f32(x[offset + k]);\n ${e}\n }\n xBestValues[localId.x] = bestValue;\n workgroupBarrier();\n\n var reduceSize = min(u32(Length), ${o}u);\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 ${n}\n }\n }\n `}};var rue={mean:\"float32\",all:\"bool\",any:\"bool\"};function eo(r,e,t,o,n){let s=r.shape.length,a=[],i=y.parseAxisParam(e,r.shape),p=i,u=w.getAxesPermutation(p,s),c=r;u!=null&&(c=xr({inputs:{x:r},attrs:{perm:u},backend:n}),p=w.getInnerMostAxes(p.length,s),a.push(c)),w.assertAxesAreInnerMostDims(o,p,s);let[l,m]=w.computeOutAndReduceShapes(c.shape,p),d=l;t&&(d=w.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=_z(h,y.sizeFromShape(m),d,r.dtype);f=n.makeTensorInfo(d,r.dtype,g);break;case\"prod\":let{outVals:x,outShape:b,outDtype:C}=Fz(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=rue[o]||oi(r.dtype),S=[{type:\"int32\",data:[h]}],k=new nx(b,o,n.device.limits.maxComputeWorkgroupSizeX),_=n.runWebGPUProgram(k,[c],C,S);a.push(_),f=pe({inputs:{x:_},attrs:{shape:d},backend:n})}return a.forEach(h=>n.disposeData(h.dataId)),f}function oue(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{keepDims:s,axis:a}=o;return eo(n,a,s,\"all\",t)}var Zz={kernelName:Go,backendName:\"webgpu\",kernelFunc:oue};function nue(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{keepDims:s,axis:a}=o;return eo(n,a,s,\"any\",t)}var Jz={kernelName:Ho,backendName:\"webgpu\",kernelFunc:nue};var Yc=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]=w.computeOutAndReduceShapes(e,n);this.outputShape=s.length===0?[1]:s,this.dispatchLayout=X(this.outputShape),y.sizeFromShape(a)<32?(this.type=\"plain\",this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize)):(this.type=\"shared\",this.dispatch=H(this.dispatchLayout,this.outputShape,[1,1,1])),this.inputShape=e,this.shaderKey=`argMinMax_${this.op}_${this.type}`}getUserCode(){let e=this.workgroupSize[0],t=()=>this.inputShape.length===1?\"uniforms.xShape\":`uniforms.xShape.${Oo(this.inputShape.length-1)}`,o=()=>{let n=\"\";if(this.outputShape.length===1)this.inputShape.length!==1&&(n+=\"outputCoords,\");else for(let s=0;s u32 {\n return ((a - 1u) / b + 1u);\n }\n\n ${`\n var xBestIndices : array;\n var xBestValues : array;\n `}\n\n ${G(\"index\")} {\n let outputIndex = index / ${e};\n let reduceLength = ${t()};\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 + ${e}) {\n let candidate = getX(${o()} 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), ${e}u);\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 ${G(\"index\")} {\n if (index < uniforms.size) {\n let outputCoords = getCoordsFromIndex(index);\n var bestIndex = 0;\n var bestValue = getX(${o()} 0);\n let reduceLength = ${t()};\n for (var i = 1; i < reduceLength; i++) {\n let candidate = getX(${o()} i);\n if (candidate ${this.op} bestValue) {\n bestValue = candidate;\n bestIndex = i;\n }\n }\n setOutputAtIndexI32(index, bestIndex);\n }\n }\n `}};function sue(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s}=o,a=y.parseAxisParam(s,n.shape),i=w.getAxesPermutation(a,n.shape.length),p=n,u=[];i!=null&&(p=xr({inputs:{x:n},backend:t,attrs:{perm:i}}),u.push(p),a=w.getInnerMostAxes(a.length,p.shape.length)),w.assertAxesAreInnerMostDims(\"argMax\",[a[0]],p.shape.length);let c=new Yc(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 eV={kernelName:Ys,backendName:\"webgpu\",kernelFunc:sue};function aue(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s}=o,a=y.parseAxisParam(s,n.shape),i=w.getAxesPermutation(a,n.shape.length),p=n,u=[];i!=null&&(p=xr({inputs:{x:n},backend:t,attrs:{perm:i}}),u.push(p),a=w.getInnerMostAxes(a.length,p.shape.length)),w.assertAxesAreInnerMostDims(\"argMin\",[a[0]],p.shape.length);let c=new Yc(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 tV={kernelName:Qs,backendName:\"webgpu\",kernelFunc:aue};var iue=ye({opType:Z.ASIN}),rV={kernelName:Ko,backendName:\"webgpu\",kernelFunc:iue};var uue=ye({opType:Z.ASINH}),oV={kernelName:qo,backendName:\"webgpu\",kernelFunc:uue};var pue=ye({opType:Z.ATAN}),nV={kernelName:jo,backendName:\"webgpu\",kernelFunc:pue};var cue=et({opType:fe.ATAN2}),sV={kernelName:Yo,backendName:\"webgpu\",kernelFunc:cue};var lue=ye({opType:Z.ATANH}),aV={kernelName:Xo,backendName:\"webgpu\",kernelFunc:lue};var sx=class{constructor(e){this.variableNames=[\"x\"],this.uniforms=\"strides : vec2,\",this.workgroupSize=[256,1,1],this.size=!0,this.outputShape=e.outShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"poolWithFilterSizeEqualsOne\"}getUserCode(){return`\n ${G(\"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.strides;\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 Ba=class{constructor(e,t,o=!1,n=!1,s=!1){if(this.variableNames=[\"x\"],this.uniforms=\"strides : vec2, pads : vec2, dilations : vec2, convDims : vec2, filterDims : vec2,\",this.workgroupSize=[128,1,1],this.size=!0,t===\"avg\"&&o)throw new Error(\"Cannot compute positions for average pool.\");this.outputShape=e.outShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.poolType=t,this.computePositions=o,this.flattenPositions=n,this.includeBatchIndex=s,this.shaderKey=`pool2D_${t}_${o}_${n}_${s}`}getUserCode(){let e;this.poolType===\"avg\"?e=\"resultValue = resultValue + value; count = count + 1.0;\":this.computePositions?e=`let currMaxValue = mix(value, maxValue, maxValueFound);\n if (value >= currMaxValue) {\n maxValue = value;\n maxValueFound = 1.0;\n maxPosition = ${this.flattenPositions?this.includeBatchIndex?\"((batch * uniforms.xShape[1] + xR) * uniforms.xShape[2] + xC) * uniforms.xShape[3] + d\":\"(xR * uniforms.xShape[2] + xC) * uniforms.xShape[3] + d\":\"wR * uniforms.filterDims.y + wC\"};\n }`:e=\"resultValue = max(value, resultValue);\";let t=\"resultValue\";return this.poolType===\"avg\"&&(t=\"resultValue / max(count, 1.0)\"),`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n let batch = coords[0];\n let d = coords[3];\n let xRCCorner = vec2(coords.yz) * uniforms.strides - uniforms.pads;\n let xRCorner = xRCCorner.x;\n let xCCorner = xRCCorner.y;\n\n ${this.computePositions?`var maxValue = 0.0;\n var maxValueFound = 0.0;\n var maxPosition = 0;`:`var resultValue = ${this.poolType===\"avg\"?\"0.0\":\"-1.0 / pow(10.0, -20.0)\"};`}\n\n var count = 0.0;\n for (var wR = 0; wR < uniforms.filterDims.x; wR = wR + uniforms.dilations.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.dilations.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, d);\n ${e}\n }\n }\n\n ${this.computePositions?\"setOutputAtIndexI32(index, maxPosition);\":`setOutputAtIndex(index, ${t});`}\n }\n }\n `}},Iu=class{constructor(e,t,o=!1,n=!1,s=!1){if(this.variableNames=[\"x\"],this.uniforms=\"strides : vec3, pads : vec3, convDims : vec3, filterDims : vec3,\",this.workgroupSize=[128,1,1],this.size=!0,t===\"avg\"&&o)throw new Error(\"Cannot compute positions for average pool.\");this.outputShape=e.outShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.poolType=t,this.computePositions=o,this.flattenPositions=n,this.includeBatchIndex=s,this.shaderKey=`pool3D_${t}_${o}_${n}_${s}`}getUserCode(){let e;this.poolType===\"avg\"?e=\"resultValue += value; count += 1.0;\":this.computePositions?e=`let currMaxValue = mix(value, maxValue, maxValueFound);\n if (value >= currMaxValue) {\n maxValue = value;\n maxValueFound = 1.0;\n maxPosition = ${this.flattenPositions?this.includeBatchIndex?\"(((batch * uniforms.xShape.y + xD) * uniforms.xShape.z + xR) * uniforms.xShape.w + xC) * uniforms.xShape.u + ch\":\"((xD * uniforms.xShape.z + xR) * uniforms.xShape.w + xC) * uniforms.xShape.u + ch\":\"wD * uniforms.filterDims.y * uniforms.filterDims.y + wR * uniforms.filterDims.z + wC\"};\n }`:e=\"resultValue = max(value, resultValue);\";let t=\"resultValue\";return this.poolType===\"avg\"&&(t=\"resultValue / max(count, 1.0)\"),`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n let batch = coords.x;\n let ch = coords.u;\n\n let xCorner = vec3(coords.y, coords.z, coords.w) * uniforms.strides - uniforms.pads;\n let xDCorner = xCorner.x;\n let xRCorner = xCorner.y;\n let xCCorner = xCorner.z;\n\n ${this.computePositions?`var maxValue = 0.0;\n var maxValueFound = 0.0;\n var maxPosition = 0;`:`var resultValue = ${this.poolType===\"avg\"?\"0.0\":\"-1.0 / pow(10.0, -20.0)\"};`}\n\n var count = 0.0;\n for (var wD = 0; wD < uniforms.filterDims.x; wD++) {\n let xD = xDCorner + wD;\n if (xD < 0 || xD >= uniforms.convDims.x) {\n continue;\n }\n\n for (var wR = 0; wR < uniforms.filterDims.y; wR++) {\n let xR = xRCorner + wR;\n if (xR < 0 || xR >= uniforms.convDims.y) {\n continue;\n }\n\n for (var wC = 0; wC < uniforms.filterDims.z; wC++) {\n let xC = xCCorner + wC;\n if (xC < 0 || xC >= uniforms.convDims.z) {\n continue;\n }\n\n let value = getX(batch, xD, xR, xC, ch);\n ${e}\n }\n }\n }\n\n ${this.computePositions?\"setOutputAtIndexI32(index, maxPosition);\":`setOutputAtIndex(index, ${t});`}\n }\n }\n `}};function t0(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{reductionIndices:s,keepDims:a}=o;return eo(n,s,a,\"max\",t)}var iV={kernelName:zn,backendName:\"webgpu\",kernelFunc:t0};function r0(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{keepDims:s,axis:a}=o;return eo(n,a,s,\"mean\",t)}var uV={kernelName:Un,backendName:\"webgpu\",kernelFunc:r0};function ax(r,e,t,o){if(e.filterWidth===1&&e.filterHeight===1&&y.arraysEqual(e.inShape,e.outShape))return At({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=pe({inputs:{x:r},backend:o,attrs:{shape:[r.shape[a-3]*r.shape[a-2],r.shape[a-1]]}}),p;t===\"avg\"?p=r0({inputs:{x:i},backend:o,attrs:{axis:0,keepDims:!1}}):(y.assert(t===\"max\",()=>`Invalid pool type ${t}`),p=t0({inputs:{x:i},backend:o,attrs:{reductionIndices:0,keepDims:!1}}));let u=pe({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 sx(e):(t===\"avg\"?n=new Ba(e,\"avg\"):(y.assert(t===\"max\",()=>`Invalid pool type ${t}`),n=new Ba(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 mue(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{filterSize:s,strides:a,pad:i,dimRoundingMode:p}=o,c=w.computePool2DInfo(n.shape,s,a,1,i,p);return ax(n,c,\"avg\",t)}var pV={kernelName:Qo,backendName:\"webgpu\",kernelFunc:mue};function due(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=w.computePool3DInfo(n.shape,s,a,c,i,u,p),m=new Iu(l,\"avg\"),d=[{type:\"int32\",data:[l.strideDepth,l.strideHeight,l.strideWidth]},{type:\"int32\",data:[l.padInfo.front,l.padInfo.top,l.padInfo.left]},{type:\"int32\",data:[l.inDepth,l.inHeight,l.inWidth]},{type:\"int32\",data:[l.effectiveFilterDepth,l.effectiveFilterHeight,l.effectiveFilterWidth]}];return t.runWebGPUProgram(m,[n],n.dtype,d)}var cV={kernelName:Zs,backendName:\"webgpu\",kernelFunc:due};var ix=class{constructor(e){this.variableNames=[\"dy\"],this.uniforms=`strides : vec2, pads : vec2, dilations : vec2, filterDims : vec2,\n outHeight : i32, outWidth : i32, avgMultiplier : f32,`,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.inShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"avgPool2DBackprop\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n let batch = coords[0];\n let d = coords[3];\n\n let dyRCCorner = vec2(coords.yz) - uniforms.pads;\n let dyRCorner = dyRCCorner.x;\n let 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 var dotProd = 0.0;\n for (var wR = 0; wR < uniforms.filterDims[0]; wR = wR + uniforms.dilations[0]) {\n let dyR = f32(dyRCorner + wR) / f32(uniforms.strides[0]);\n\n if (dyR < 0.0 || dyR >= f32(uniforms.outHeight) || fract(dyR) > 0.0) {\n continue;\n }\n let idyR = i32(dyR);\n\n for (var wC = 0; wC < uniforms.filterDims[1]; wC = wC + uniforms.dilations[1]) {\n let dyC = f32(dyCCorner + wC) / f32(uniforms.strides[1]);\n\n if (dyC < 0.0 || dyC >= f32(uniforms.outWidth) || fract(dyC) > 0.0) {\n continue;\n }\n let idyC = i32(dyC);\n\n let dyValue = getDy(batch, idyR, idyC, d);\n\n dotProd = dotProd + dyValue * uniforms.avgMultiplier;\n }\n }\n setOutputAtIndex(index, dotProd);\n }\n }\n `}},ux=class{constructor(e){this.variableNames=[\"dy\"],this.uniforms=`strides : vec3, pads : vec3, filterDims : vec3,\n outDepth : i32, outHeight : i32, outWidth : i32, avgMultiplier : f32,`,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.inShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"avgPool3DBackprop\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n let batch = coords.x;\n let ch = coords.u;\n\n let dyCorner = vec3(coords.y, coords.z, coords.w) - uniforms.pads;\n let dyDCorner = dyCorner.x;\n let dyRCorner = dyCorner.y;\n let 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 var dotProd = 0.0;\n for (var wD = 0; wD < uniforms.filterDims[0]; wD++) {\n let dyD = f32(dyDCorner + wD) / f32(uniforms.strides[0]);\n\n if (dyD < 0.0 || dyD >= f32(uniforms.outDepth) || fract(dyD) > 0.0) {\n continue;\n }\n let idyD = i32(dyD);\n\n for (var wR = 0; wR < uniforms.filterDims[1]; wR++) {\n let dyR = f32(dyRCorner + wR) / f32(uniforms.strides[1]);\n\n if (dyR < 0.0 || dyR >= f32(uniforms.outHeight) || fract(dyR) > 0.0) {\n continue;\n }\n let idyR = i32(dyR);\n\n for (var wC = 0; wC < uniforms.filterDims[2]; wC++) {\n let dyC = f32(dyCCorner + wC) / f32(uniforms.strides[2]);\n\n if (dyC < 0.0 || dyC >= f32(uniforms.outWidth) || fract(dyC) > 0.0) {\n continue;\n }\n let idyC = i32(dyC);\n\n let dyValue = getDy(batch, idyD, idyR, idyC, ch);\n dotProd += dyValue * uniforms.avgMultiplier;\n }\n }\n }\n setOutputAtIndex(index, dotProd);\n }\n }\n `}};function fue(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=w.computePool3DInfo(a.shape,i,p,1,u,c),m=new ux(l),d=1/(l.filterDepth*l.filterHeight*l.filterWidth),f=[{type:\"int32\",data:[l.strideDepth,l.strideHeight,l.strideWidth]},{type:\"int32\",data:[l.effectiveFilterDepth-1-l.padInfo.front,l.effectiveFilterHeight-1-l.padInfo.top,l.effectiveFilterWidth-1-l.padInfo.left]},{type:\"int32\",data:[l.effectiveFilterDepth,l.effectiveFilterHeight,l.effectiveFilterWidth]},{type:\"int32\",data:[l.outDepth]},{type:\"int32\",data:[l.outHeight]},{type:\"int32\",data:[l.outWidth]},{type:\"float32\",data:[d]}];return t.runWebGPUProgram(m,[n],a.dtype,f)}var lV={kernelName:Ri,backendName:\"webgpu\",kernelFunc:fue};function hue(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s}=e,a=s;fm([n,s],\"avgPoolGrad\");let{filterSize:i,strides:p,pad:u}=o,c=w.computePool2DInfo(a.shape,i,p,1,u),l=new ix(c),m=1/(c.filterHeight*c.filterWidth),d=[{type:\"int32\",data:[c.strideHeight,c.strideWidth]},{type:\"int32\",data:[c.effectiveFilterHeight-1-c.padInfo.top,c.effectiveFilterWidth-1-c.padInfo.left]},{type:\"int32\",data:[c.dilationHeight,c.dilationWidth]},{type:\"int32\",data:[c.effectiveFilterHeight,c.effectiveFilterWidth]},{type:\"int32\",data:[c.outHeight]},{type:\"int32\",data:[c.outWidth]},{type:\"float32\",data:[m]}];return t.runWebGPUProgram(l,[n],a.dtype,d)}var mV={kernelName:$i,backendName:\"webgpu\",kernelFunc:hue};function gue(r){let{inputs:e,backend:t,attrs:o}=r,{a:n,b:s}=e,{transposeA:a,transposeB:i}=o;return $p({a:n,b:s,transposeA:a,transposeB:i,backend:t})}var dV={kernelName:Zo,backendName:\"webgpu\",kernelFunc:gue};var px=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=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize,[this.workPerThread,1,1]),this.start=e,this.uniforms=`start : ${ft(e.length)}, `,this.shaderKey=\"slice\"}getUserCode(){let e=ft(this.rank),t=xue(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.${o0[a]} = uniforms.start.${Oo(a)} + coords.${o0[a]};`),`\n ${G(\"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 `}},o0=[\"x\",\"y\",\"z\",\"w\",\"u\",\"v\"];function xue(r){if(r===1)return\"sourceLoc\";if(r<=6)return o0.slice(0,r).map(e=>`sourceLoc.${e}`).join(\",\");throw Error(`Slicing for rank ${r} is not yet supported`)}function Hs(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{begin:s,size:a}=o,[i,p]=pt.parseSliceParams(n,s,a);if(pt.assertParamsValid(n,i,p),t.shouldExecuteOnCPU([n])||n.dtype===\"string\"){let l=t.tensorMap.get(n.dataId),m=Bz(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 px(i,p),c=[{type:\"int32\",data:i}];return t.runWebGPUProgram(u,[n],n.dtype,c)}var fV={kernelName:ha,backendName:\"webgpu\",kernelFunc:Hs};var yue=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=w.getReshaped(n.shape,s,i),u=w.getPermuted(p.length,s.length),c=w.getReshapedPermuted(n.shape,s,i),l=w.getSliceBeginCoords(a,s.length),m=w.getSliceSize(c,a,s.length),d=[],f=pe({inputs:{x:n},backend:t,attrs:{shape:p}}),h=xr({inputs:{x:f},backend:t,attrs:{perm:u}}),g=pe({inputs:{x:h},backend:t,attrs:{shape:c}}),x=Hs({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},hV={kernelName:Js,backendName:\"webgpu\",kernelFunc:yue};var bue=`\n fn bincount_write(index: i32, value: f32) {\n ${Qr(\"&result[index]\",\"value\",\"float32\")}\n }\n`,Cue=`\n fn bincount_write(index: i32, value: f32) {\n atomicStore(&result[index], bitcast(value));\n }\n`,Qc=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=X(this.outputShape),this.dispatch=H(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?Cue:bue}\n ${G(\"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?\"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?\"getW(coord[0], coord[1])\":\"1.\"};\n bincount_write(coord.x * uniforms.binCountSize + indexVal, value);\n }\n }`}\n }\n `}};function wue(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=vt({backend:t,attrs:{shape:c,value:0,dtype:l}}),d=new Qc([i],u),f=[{type:\"int32\",data:[a]}],h=u?[n,s]:[n];return t.runWebGPUProgram(d,h,l,f,m)}var gV={kernelName:Jo,backendName:\"webgpu\",kernelFunc:wue};var cx=class{constructor(e){this.outputShape=[],this.variableNames=[\"s0\",\"s1\"],this.uniforms=\"s0Size : i32, s1Size : i32, \",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=[e],this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"broadcastArgs\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n var s0 = 1.0;\n var s1 = 1.0;\n let indexS0 = index - uniforms.size + uniforms.s0Size;\n let indexS1 = index - uniforms.size + uniforms.s1Size;\n if (indexS0 >= 0) {\n s0 = getS0(indexS0);\n }\n if (indexS1 >= 0) {\n s1 = getS1(indexS1);\n }\n\n if (s0 == 1.0) {\n setOutputAtIndex(index, s1);\n } else if (s1 == 1.0) {\n setOutputAtIndex(index, s0);\n } else if (s0 != s1) {\n setOutputAtIndex(index, uniforms.NAN);\n } else {\n setOutputAtIndex(index, s0);\n }\n }\n }\n `}};function Sue(r){let{inputs:e,backend:t}=r,{s0:o,s1:n}=e;if(t.shouldExecuteOnCPU([o,n])){let c=t.tensorMap.get(o.dataId),l=t.tensorMap.get(n.dataId),m=c.values,d=l.values,f=w.assertAndGetBroadcastShape(Array.from(m),Array.from(d));return t.makeTensorInfo([f.length],\"int32\",Int32Array.from(f))}let s=y.sizeFromShape(o.shape),a=y.sizeFromShape(n.shape),i=Math.max(s,a),p=new cx(i),u=[{type:\"int32\",data:[s]},{type:\"int32\",data:[a]}];return t.runWebGPUProgram(p,[o,n],\"int32\",u)}var xV={kernelName:ea,backendName:\"webgpu\",kernelFunc:Sue};var n0=et({opType:fe.NOT_EQUAL,dtype:\"bool\",cpuKernelImpl:Az}),yV={kernelName:Yn,backendName:\"webgpu\",kernelFunc:n0};function vi(r){let{inputs:e,backend:t}=r,{input:o}=e,n=t.tensorMap.get(o.dataId);return At({inputs:{x:n.complexTensorInfos.real},backend:t})}var bV={kernelName:Hi,backendName:\"webgpu\",kernelFunc:vi};function CV(r,e){let t=new Jr(r.shape,Z.TO_INT),o=e.runWebGPUProgram(t,[r],\"int32\");return{dataId:o.dataId,shape:o.shape,dtype:o.dtype}}function s0(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=Gr(n.shape),i=s0({inputs:{x:n},backend:t,attrs:{dtype:\"float32\"}}),p=xo({inputs:{real:i,imag:a},backend:t});return a.dispose(),t.disposeData(i.dataId),p}if(n.dtype===\"complex64\"){let a=vi({inputs:{input:n},backend:t}),i=s0({inputs:{x:a},backend:t,attrs:{dtype:s}});return t.disposeData(a.dataId),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.tensorMap.get(n.dataId).values,[i,p,u]=dz(a,n.shape,n.dtype,s);return t.makeTensorInfo(i,p,u)}if(s===\"int32\")return CV(n,t);if(s===\"bool\"){let a=t.makeTensorInfo([],\"bool\",y.getTypedArrayFromDType(\"bool\",1)),p=n0({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 wV={kernelName:yo,backendName:\"webgpu\",kernelFunc:s0};var Iue=ye({opType:Z.CEIL,cpuKernelImpl:fz}),SV={kernelName:en,backendName:\"webgpu\",kernelFunc:Iue};var lx=class{constructor(e){this.variableNames=[\"A\"],this.uniforms=\"minVal : f32, maxVal : f32,\",this.workPerThread=4,this.workgroupSize=[64,1,1],this.outputComponent=4,this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize,[this.workPerThread,1,1]),this.shaderKey=\"clipVec4\"}getUserCode(){return`\n ${G(\"index\")} {\n if(index < uniforms.size) {\n let value = getAByOutputIndex(index);\n var clampedValue = clamp(\n value, vec4(uniforms.minVal), vec4(uniforms.maxVal));\n clampedValue = select(clampedValue, value, isnanVec4(value));\n setOutputAtIndex(index, clampedValue);\n }\n }\n `}};var mx=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=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"clip\"}getUserCode(){return`\n ${G(\"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 vue(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 lx(n.shape):i=new mx(n.shape),t.runWebGPUProgram(i,[n],n.dtype,p)}var IV={kernelName:bo,backendName:\"webgpu\",kernelFunc:vue};var dx=class{constructor(e){this.outputShape=[],this.variableNames=[\"real\",\"imag\"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"complexAbs\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let re = abs(getRealByOutputIndex(index));\n let im = abs(getImagByOutputIndex(index));\n let mx = max(re, im);\n\n // The length function in wgsl may be not underflow-safe on some GPUs.\n // So the safe solution is to ensure underflow-safety in all cases.\n setOutputAtIndex(index, select(mx * length(vec2(1, min(re, im)/mx)), 0.0, mx == 0.0));\n }\n }\n `}};function vV(r,e){return{dataId:e.dataId,dtype:e.dtype,shape:r.shape}}function kue(r){let{inputs:e,backend:t}=r,{x:o}=e,n=t.tensorMap.get(o.dataId),s=new dx(o.shape),a=[vV(o,n.complexTensorInfos.real),vV(o,n.complexTensorInfos.imag)];return t.runWebGPUProgram(s,a,a[0].dtype)}var kV={kernelName:Ai,backendName:\"webgpu\",kernelFunc:kue};var fx=class{constructor(e){this.uniforms=\"\",this.workPerThread=1,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=w.computeOutShape(e,1),this.variableNames=e.map((t,o)=>`T${o}`),this.dispatchLayout=X(this.outputShape),this.dispatch=H(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;svi({inputs:{input:C},backend:t})),h=r.map(C=>Rp({inputs:{input:C},backend:t})),g=Zc(f,e,t),x=Zc(h,e,t),b=xo({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 pe({inputs:{x:k},backend:t,attrs:{shape:$}})}),h=f.map(k=>({vals:t.readSync(k.dataId),shape:k.shape})),g=w.computeOutShape(f.map(k=>k.shape),1),x=f[0].shape[0]===1,b=hz(h,g,o,x),C=w.computeOutShape(r.map(k=>k.shape),e),S=t.makeTensorInfo(C,o,b);return f.forEach(k=>t.disposeData(k.dataId)),S}let s=t.device.limits.maxStorageBuffersPerShaderStage-1;if(r.length>s){let f=[];for(let g=0;gf.shape),u=new fx(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=pe({inputs:{x:m},backend:t,attrs:{shape:i}});return t.disposeData(m.dataId),d}function Nue(r,e,t){let o=w.computeOutShape(r.map(s=>s.shape),e);return{tensors2D:r.map(s=>pe({inputs:{x:s},backend:t,attrs:{shape:[y.sizeFromShape(s.shape.slice(0,e)),y.sizeFromShape(s.shape.slice(e))]}})),outShape:o}}function a0(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);w.assertParamsConsistent(a,s);let i=w.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}):Zc(p,s,t)}var TV={kernelName:ta,backendName:\"webgpu\",kernelFunc:a0};function Tue(r,e,t,o,n=!1,s=null,a=!1,i=4,p=4,u=4){let c=D=>{switch(D){case 1:return\"resData = f32(x[xIndex]);\";case 3:return\"resData = vec3(x[xIndex], x[xIndex + 1], x[xIndex + 2]);\";case 4:return\"resData = vec4(x[xIndex / 4]);\";default:throw new Error(`innerElementSize ${D} is not supported.`)}},l=D=>{switch(D){case 1:return\"return f32(W[row * uniforms.wShape[3] + col]);\";case 4:return\"return vec4(W[(row * uniforms.wShape[3] + col) / 4]);\";default:throw new Error(`innerElementSize ${D} 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.strides[0] + uniforms.dilations[0] * WRow - uniforms.pads[0];\n let xCol = outCol * uniforms.strides[1] + uniforms.dilations[1] * WCol - uniforms.pads[1];\n let xCh = ${x} % inChannels;\n var resData = ${Ae(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 ${b}`:`\n if (row < uniforms.dimAOuter && col < uniforms.dimInner) {\n ${b}\n }\n return ${Ae(i)}(0.0);`:o&&t?`\n ${b}`:`\n if (row < uniforms.dimInner && col < uniforms.dimBOuter) {\n ${b}\n }\n return ${Ae(i)}(0.0);`,S=`${l(p)}`,k=Ae(u),_=r?Ae(i):Ae(p),$=r?Ae(p):Ae(i);return`\n ${dr(s,a,u===4,4)}\n fn mm_readA(batch: i32, row : i32, col : i32) -> ${_} {\n ${r?C:S}\n }\n\n fn mm_readB(batch: i32, row : i32, col : i32) -> ${$} {\n ${r?S:C}\n }\n\n fn mm_write(batch: i32, row : i32, col : i32, valueIn : ${k}) {\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 ${Zr(n,s)}\n setOutputAtCoords(coords[0], coords[1], coords[2], coords[3], value);\n }\n }`}var hx=class{constructor(e,t,o,n,s=!1,a=null,i=!1,p=!1){this.variableNames=[\"x\",\"W\"],this.uniforms=\"filterDims : vec2, pads : vec2, strides : vec2, dilations : 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=lm(this.dispatchLayout,this.outputShape,this.isVec4),this.elementsPerThread=mm(this.dispatchLayout,this.outputShape,this.isVec4),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize,this.elementsPerThread),this.isVec4?(this.outputComponent=4,this.isChannelsLast&&e.inChannels%4!==0?(this.innerElementSize=3,this.variableComponents=[1,4]):(this.innerElementSize=4,this.variableComponents=[4,4]),s&&(this.variableNames.push(\"bias\"),this.variableComponents.push(4)),i&&(this.variableNames.push(\"preluActivationWeights\"),this.variableComponents.push(4))):(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?_p(this.elementsPerThread,this.workgroupSize,!this.isChannelsLast,this.tileInner):Ep(this.elementsPerThread,this.workgroupSize,!this.isChannelsLast,this.tileInner,!1,null,this.sequentialAccessByThreads),t=this.isVec4?[this.innerElementSize,4,4]:[1,1,1];return`\n ${Tue(this.isChannelsLast,this.fitAOuter,this.fitBOuter,this.fitInner,this.addBias,this.activation,this.hasPreluActivationWeights,t[0],t[1],t[2])}\n ${e}\n `}};var gx=class{constructor(e,t=!1,o=null,n=!1){this.variableNames=[\"x\",\"W\"],this.uniforms=\"filterDims: vec2, pads: vec2, strides: vec2, dilations: 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=H(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 ${dr(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 ${Zr(this.addBias,this.activation)}\n setOutputAtCoords(coords.x, coords.y, coords.z, coords.w, value);\n }\n }\n ${G(\"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.strides[0] + uniforms.dilations[0] * row - uniforms.pads[0];\n let xCol = outCol * uniforms.strides[1] + uniforms.dilations[1] * col - uniforms.pads[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 xx=class{constructor(e,t){this.variableNames=[\"x\"],this.uniforms=`pads : vec2, strides : vec2, dilations : vec2, outWidth : i32, itemsPerBlockRow : i32,\n inChannels : i32,`,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(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 ${G(\"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.strides[0] - uniforms.pads[0];\n let xRow = offsetY + uniforms.dilations[0] * (col / uniforms.itemsPerBlockRow);\n var value = 0.0;\n if(xRow < uniforms.xShape[${e}] && xRow >= 0) {\n let offsetX = (row % uniforms.outWidth) * uniforms.strides[1] -\n uniforms.pads[1];\n let xCol = offsetX + uniforms.dilations[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 yx(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 _ue({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=pe({inputs:{x:r},backend:o,attrs:{shape:[1,t.batchSize,x]}}),f=pe({inputs:{x:e},backend:o,attrs:{shape:[1,x,t.outChannels]}})}else d=pe({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=pe({inputs:{x:e},backend:o,attrs:{shape:[1,t.inChannels,t.outChannels]}});if(m.push(d),m.push(f),s!=null){let x=yx(s.shape,p);x!=null&&(s=pe({inputs:{x:s},backend:o,attrs:{shape:x}}),m.push(s))}if(n!=null){let x=yx(n.shape,p);x!=null&&(n=pe({inputs:{x:n},backend:o,attrs:{shape:x}}),m.push(n))}let h=$p({a:p?d:f,b:p?f:d,transposeA:u,transposeB:c,backend:o,bias:n,activation:i,preluActivationWeights:s,leakyreluAlpha:a}),g=pe({inputs:{x:h},backend:o,attrs:{shape:t.outShape}});m.push(h);for(let x of m)o.disposeData(x.dataId);return g}function Eue({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\",S=p*u*c,k=h*f,_=C?[t.batchSize,k,S]:[t.batchSize,S,k],$=new xx(_,C),R=[{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]}],D=o.runWebGPUProgram($,[r],r.dtype,R),P=[];P.push(D);let O=pe({inputs:{x:e},backend:o,attrs:{shape:[1,S,-1]}});if(P.push(O),s!=null){let U=yx(s.shape,C);U!=null&&(s=pe({inputs:{x:s},backend:o,attrs:{shape:U}}),P.push(s))}if(n!=null){let U=yx(n.shape,C);U!=null&&(n=pe({inputs:{x:n},backend:o,attrs:{shape:U}}),P.push(n))}let B=$p({a:C?D:O,b:C?O:D,transposeA:!C,transposeB:!1,backend:o,bias:n,activation:i,preluActivationWeights:s,leakyreluAlpha:a}),z=pe({inputs:{x:B},backend:o,attrs:{shape:t.outShape}});P.push(B);for(let U of P)o.disposeData(U.dataId);return z}function bx({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=A().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 _ue({x:r,filter:e,convInfo:t,backend:o,bias:n,activation:i,preluActivationWeights:s,leakyreluAlpha:a});let d=A().getNumber(\"WEBGPU_THRESHOLD_TO_INCREASE_WORKGROUPS_FOR_MATMUL\"),f=d>-1?d:o.thresholdToIncreaseWorkgroups,h=t.batchSize*Math.ceil(t.outHeight*t.outWidth/32)*Math.ceil(t.outChannels/32);if(A().getBool(\"WEBGPU_CONV_SEPARATE_IM2COL_SHADER\")||h<=f)return Eue({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 gx(t,p,i,u);else{let _=c?t.outHeight*t.outWidth:t.outChannels,$=c?t.outChannels:t.outHeight*t.outWidth,R=t.filterHeight*t.filterWidth*t.inChannels;b.push({type:\"int32\",data:[_]},{type:\"int32\",data:[$]},{type:\"int32\",data:[R]});let D=o.adapterInfo.isIntel();g=new hx(t,_,$,R,p,i,u,D)}let C=[],S=[r,e];p&&(!c&&n.shape.length===1&&(n=pe({inputs:{x:n},backend:o,attrs:{shape:[n.shape[0],1,1]}}),C.push(n)),S.push(n)),u&&(!c&&s.shape.length===1&&(s=pe({inputs:{x:s},backend:o,attrs:{shape:[s.shape[0],1,1]}}),C.push(s)),S.push(s)),i===\"leakyrelu\"&&(b.push({type:\"float32\",data:[a]}),g.uniforms+=\" alpha : f32,\");let k=o.runWebGPUProgram(g,S,r.dtype,b);for(let _ of C)o.disposeData(_.dataId);return k}function $ue(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=w.convertConv2DDataFormat(p),m=w.computeConv2DInfo(n.shape,s.shape,a,u,i,c,!1,l);return bx({x:n,filter:s,convInfo:m,backend:o})}var _V={kernelName:tn,backendName:\"webgpu\",kernelFunc:$ue};var Cx=class{constructor(e){this.variableNames=[\"dy\",\"W\"],this.uniforms=\"filterDims : vec2, pads : vec2, strides : vec2, outBackprop : vec4,\",this.workgroupSize=[64,1,1],this.size=!1,this.isVec4=!1,this.workPerThread=1,this.outputShape=e.inShape,this.isChannelsLast=e.dataFormat===\"channelsLast\",this.isVec4=this.isChannelsLast&&e.outChannels%4===0&&e.inChannels%4===0,this.isVec4?(this.workPerThread=2,this.outputComponent=4,this.workgroupSize=[4,4,4],this.dispatchLayout={x:[3],y:[2],z:[0,1]},this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize,[4,this.workPerThread,1])):(this.size=!0,this.workPerThread=1,this.workgroupSize=[64,1,1],this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize)),this.shaderKey=`conv2DDerInput_${this.isChannelsLast}_${this.isVec4}_${this.workPerThread}`}getUserCode(){let e=this.isChannelsLast?1:2,t=this.isChannelsLast?2:3,o=this.isChannelsLast?3:1,n=`\n ${G()} {\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\n let dyCorner = vec2(r, c) - uniforms.pads;\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: array, ${this.workPerThread}>;\n for (var i = 0; i < ${this.workPerThread}; i++) {\n dotProd[i] = vec4(0.0);\n }\n for (var wR = 0; wR < uniforms.filterDims.x; wR = wR + 1) {\n let dyR = f32(dyCorner.x + wR) / f32(uniforms.strides.x);\n let wRPerm = uniforms.filterDims.x - 1 - wR;\n if (dyR < 0.0 || dyR >= f32(uniforms.outBackprop[1]) ||\n fract(dyR) > 0.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(dyCorner.y + wC) / f32(uniforms.strides.y);\n let dyC2 = f32(dyCorner.y + 1 + wC) / f32(uniforms.strides.y);\n let wCPerm = uniforms.filterDims.y - 1 - wC;\n var bDyCVal = true;\n var bDyCVal2 = true;\n if (dyC < 0.0 || dyC >= f32(uniforms.outBackprop[2]) ||\n fract(dyC) > 0.0) {\n bDyCVal = false;\n }\n if (dyC2 < 0.0 || dyC2 >= f32(uniforms.outBackprop[2]) ||\n fract(dyC2) > 0.0) {\n bDyCVal2 = false;\n }\n\n let idyC = i32(dyC);\n let idyC2 = i32(dyC2);\n if (bDyCVal && bDyCVal2) {\n let d2Length = uniforms.outBackprop[3];\n for (var d2 = 0; d2 < d2Length; d2 = d2 + 4) {\n let wValue0 = getW(wRPerm, wCPerm, d1, d2);\n let wValue1 = getW(wRPerm, wCPerm, d1 + 1, d2);\n let wValue2 = getW(wRPerm, wCPerm, d1 + 2, d2);\n let wValue3 = getW(wRPerm, wCPerm, d1 + 3, d2);\n var xValue = getDy(batch, idyR, idyC, d2);\n let tmpval = vec4(dot(xValue, wValue0),\n dot(xValue, wValue1),\n dot(xValue, wValue2),\n dot(xValue, wValue3));\n dotProd[0] = dotProd[0] + tmpval;\n xValue = getDy(batch, idyR, idyC2, d2);\n dotProd[1] = dotProd[1] + vec4(dot(xValue, wValue0),\n dot(xValue, wValue1),\n dot(xValue, wValue2),\n dot(xValue, wValue3));\n }\n } else if (bDyCVal) {\n let d2Length = uniforms.outBackprop[3];\n for (var d2 = 0; d2 < d2Length; d2 = d2 + 4) {\n let wValue0 = getW(wRPerm, wCPerm, d1, d2);\n let wValue1 = getW(wRPerm, wCPerm, d1 + 1, d2);\n let wValue2 = getW(wRPerm, wCPerm, d1 + 2, d2);\n let wValue3 = getW(wRPerm, wCPerm, d1 + 3, d2);\n var xValue = getDy(batch, idyR, idyC, d2);\n let tmpval = vec4(dot(xValue, wValue0),\n dot(xValue, wValue1),\n dot(xValue, wValue2),\n dot(xValue, wValue3));\n dotProd[0] = dotProd[0] + tmpval;\n }\n } else if (bDyCVal2) {\n let d2Length = uniforms.outBackprop[3];\n for (var d2 = 0; d2 < d2Length; d2 = d2 + 4) {\n let wValue0 = getW(wRPerm, wCPerm, d1, d2);\n let wValue1 = getW(wRPerm, wCPerm, d1 + 1, d2);\n let wValue2 = getW(wRPerm, wCPerm, d1 + 2, d2);\n let wValue3 = getW(wRPerm, wCPerm, d1 + 3, d2);\n var xValue = getDy(batch, idyR, idyC2, d2);\n let tmpval = vec4(dot(xValue, wValue0),\n dot(xValue, wValue1),\n dot(xValue, wValue2),\n dot(xValue, wValue3));\n dotProd[1] = dotProd[1] + tmpval;\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 setOutputAtCoords(coords[0], coords[1], coords[2], coords[3], dotProd[i]);\n }\n }\n }\n `;return this.isVec4?`\n ${n}\n `:`\n ${G(\"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.strides.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.strides.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 let xValue = ${this.isChannelsLast?\"getDy(batch, idyR, idyC, d2)\":\"getDy(batch, d2, idyR, idyC)\"};\n let wValue = getW(wRPerm, wCPerm, d1, d2);\n dotProd = dotProd + xValue * wValue;\n }\n }\n }\n setOutputAtIndex(index, dotProd);\n }\n }\n `}},wx=class{constructor(e){this.variableNames=[\"x\",\"dy\"],this.uniforms=\"pads : vec2, strides : vec2, batchSize : i32, outHeight : i32, outWidth : i32, inHeight : i32, inWidth : i32,\",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.filterShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.isChannelsLast=e.dataFormat===\"channelsLast\",this.shaderKey=`conv2DDerFilter_${this.isChannelsLast}`}getUserCode(){return`\n ${G(\"index\")} {\n if(index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n let wR = coords[0];\n let wC = coords[1];\n let d1 = coords[2];\n let d2 = coords[3];\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 var dotProd = 0.0;\n for (var b = 0; b < uniforms.batchSize; b = b + 1) {\n for (var yR = 0; yR < uniforms.outHeight; yR = yR + 1) {\n let xR = wR + yR * uniforms.strides[0] - uniforms.pads[0];\n if (xR < 0 || xR >= uniforms.inHeight) {\n continue;\n }\n\n for (var yC = 0; yC < uniforms.outWidth; yC = yC + 1) {\n let xC = wC + yC * uniforms.strides[1] - uniforms.pads[1];\n\n if (xC < 0 || xC >= uniforms.inWidth) {\n continue;\n }\n\n if (${this.isChannelsLast}) {\n let dyValue = getDy(b, yR, yC, d2);\n let xValue = getX(b, xR, xC, d1);\n dotProd = dotProd + xValue * dyValue;\n } else {\n let dyValue = getDy(b, d2, yR, yC);\n let xValue = getX(b, d1, xR, xC);\n dotProd = dotProd + xValue * dyValue;\n }\n }\n }\n }\n setOutputAtIndex(index, dotProd);\n }\n }\n `}},Sx=class{constructor(e){this.variableNames=[\"x\",\"dy\"],this.uniforms=`pads : vec3, strides : vec3, batchSize : i32, outDepth : i32,\n outHeight : i32, outWidth : i32, inDepth : i32, inHeight : i32, inWidth : i32,`,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.filterShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"conv3DDerFilter\"}getUserCode(){return`\n ${G(\"index\")} {\n if(index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n let wF = coords.x;\n let wR = coords.y;\n let wC = coords.z;\n let d1 = coords.w;\n let d2 = coords.u;\n\n var dotProd = 0.0;\n for (var b = 0; b < uniforms.batchSize; b++) {\n for (var yF = 0; yF < uniforms.outDepth; yF++) {\n let xF = wF + yF * uniforms.strides[0] - uniforms.pads[0];\n if (xF < 0 || xF >= uniforms.inDepth) {\n continue;\n }\n\n for (var yR = 0; yR < uniforms.outHeight; yR++) {\n let xR = wR + yR * uniforms.strides[1] - uniforms.pads[1];\n if (xR < 0 || xR >= uniforms.inHeight) {\n continue;\n }\n\n for (var yC = 0; yC < uniforms.outWidth; yC++) {\n let xC = wC + yC * uniforms.strides[2] - uniforms.pads[2];\n if (xC < 0 || xC >= uniforms.inWidth) {\n continue;\n }\n\n let dyValue = getDy(b, yF, yR, yC, d2);\n let xValue = getX(b, xF, xR, xC, d1);\n dotProd += xValue * dyValue;\n }\n }\n }\n }\n setOutputAtIndex(index, dotProd);\n }\n }\n `}},Ix=class{constructor(e){this.variableNames=[\"dy\",\"W\"],this.uniforms=`filterDims : vec3, pads : vec3, strides : vec3,\n outDepth : i32, outHeight : i32, outWidth : i32, outChannels : i32,`,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.inShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"conv3DDerInput\"}getUserCode(){return`\n ${G(\"index\")} {\n if(index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n let batch = coords.x;\n let d1 = coords.u;\n\n let dyCorner = vec3(coords.y, coords.z, coords.w) - uniforms.pads;\n let dyFCorner = dyCorner.x;\n let dyRCorner = dyCorner.y;\n let dyCCorner = dyCorner.z;\n\n var dotProd = 0.0;\n for (var wF = 0; wF < uniforms.filterDims[0]; wF++) {\n let dyF = f32(dyFCorner + wF) / f32(uniforms.strides[0]);\n if (dyF < 0.0 || dyF >= f32(uniforms.outDepth) || fract(dyF) > 0.0) {\n continue;\n }\n let idyF = i32(dyF);\n\n let wFPerm = uniforms.filterDims[0] - 1 - wF;\n\n for (var wR = 0; wR < uniforms.filterDims[1]; wR++) {\n let dyR = f32(dyRCorner + wR) / f32(uniforms.strides[1]);\n\n if (dyR < 0.0 || dyR >= f32(uniforms.outHeight) || fract(dyR) > 0.0) {\n continue;\n }\n let idyR = i32(dyR);\n\n let wRPerm = uniforms.filterDims[1] - 1 - wR;\n\n for (var wC = 0; wC < uniforms.filterDims[2]; wC++) {\n let dyC = f32(dyCCorner + wC) / f32(uniforms.strides[2]);\n\n if (dyC < 0.0 || dyC >= f32(uniforms.outWidth) || fract(dyC) > 0.0) {\n continue;\n }\n let idyC = i32(dyC);\n\n let wCPerm = uniforms.filterDims[2] - 1 - wC;\n\n for (var d2 = 0; d2 < uniforms.outChannels; d2++) {\n let xValue = getDy(batch, idyF, idyR, idyC, d2);\n let wValue = getW(wFPerm, wRPerm, wCPerm, d1, d2);\n dotProd += xValue * wValue;\n }\n }\n }\n }\n setOutputAtIndex(index, dotProd);\n }\n }\n `}};function Rue(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=w.convertConv2DDataFormat(p),m=w.computeConv2DInfo(n.shape,c,a,1,i,u,!1,l),d=new wx(m),f=[{type:\"int32\",data:[m.padInfo.top,m.padInfo.left]},{type:\"int32\",data:[m.strideHeight,m.strideWidth]},{type:\"int32\",data:[m.batchSize]},{type:\"int32\",data:[m.outHeight]},{type:\"int32\",data:[m.outWidth]},{type:\"int32\",data:[m.inHeight]},{type:\"int32\",data:[m.inWidth]}];return t.runWebGPUProgram(d,[n,s],n.dtype,f)}var EV={kernelName:Fi,backendName:\"webgpu\",kernelFunc:Rue};function Due(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.strides[0]);\n let xC = f32(outCol - uniforms.pads[1] + WCol) / f32(uniforms.strides[1]);\n if (xR < 0.0 || xR >= f32(uniforms.outBackprop[1]) || fract(xR) > 0.0) {\n return ${Ae(r)}(0.0);\n }\n if (xC < 0.0 || xC >= f32(uniforms.outBackprop[2]) || fract(xC) > 0.0) {\n return ${Ae(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 ${Ae(r)}(0.0);`;return`\n fn mm_readA(batch: i32, row : i32, col : i32) -> ${Ae(r)} {\n ${o}\n }\n\n fn mm_readB(batch: i32, row : i32, col : i32) -> ${Ae(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 ${Ae(r)}(0.0);\n }\n\n fn mm_write(batch: i32, row : i32, col : i32, valueInput : ${Ae(r)}) {\n if (row < uniforms.dimAOuter && col < 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 vx=class{constructor(e){this.variableNames=[\"x\",\"W\"],this.uniforms=\"filterDims : vec2, pads : vec2, strides : 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=lm(this.dispatchLayout,this.outputShape,this.isVec4),this.elementsPerThread=mm(this.dispatchLayout,this.outputShape,this.isVec4),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize,this.elementsPerThread),this.isVec4&&(this.outputComponent=4,this.variableComponents=[4,1]),this.shaderKey=`conv2DDerInputMM_${this.isVec4}_${this.elementsPerThread}`}getUserCode(){let e=this.isVec4?_p(this.elementsPerThread,this.workgroupSize):Ep(this.elementsPerThread,this.workgroupSize);return`\n ${Due(this.isVec4?4:1)}\n ${e}\n `}};function Aue(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=w.convertConv2DDataFormat(u),m=w.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(A().getBool(\"WEBGPU_USE_NAIVE_CONV2D_TRANSPOSE\")||m.dataFormat!==\"channelsLast\")f=new Cx(m);else{f=new vx(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 $V={kernelName:rn,backendName:\"webgpu\",kernelFunc:Aue};var kx=class{constructor(e){this.variableNames=[\"x\",\"W\"],this.uniforms=\"filterDims: vec3, pads: vec3, strides: vec3, dilations: vec3,\",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.outShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"conv3dnaive\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getOutputCoords();\n let batch = coords.x;\n let d2 = coords.u;\n\n let xFRCCorner = vec3(coords.y, coords.z, coords.w) * uniforms.strides - uniforms.pads;\n let xFCorner = xFRCCorner.x;\n let xRCorner = xFRCCorner.y;\n let xCCorner = xFRCCorner.z;\n\n let inputDepthNearestVec4 = (uniforms.xShape.u / 4) * 4;\n let inputDepthVec4Remainder = uniforms.xShape.u % 4;\n\n var dotProd = 0.0;\n for (var wF = 0; wF < uniforms.filterDims[0]; wF++) {\n let xF = xFCorner + wF * uniforms.dilations[0];\n if (xF < 0 || xF >= uniforms.xShape.y) {\n continue;\n }\n\n for (var wR = 0; wR < uniforms.filterDims[1]; wR++) {\n let xR = xRCorner + wR * uniforms.dilations[1];\n if (xR < 0 || xR >= uniforms.xShape.z) {\n continue;\n }\n\n for (var wC = 0; wC < uniforms.filterDims[2]; wC++) {\n let xC = xCCorner + wC * uniforms.dilations[2];\n if (xC < 0 || xC >= uniforms.xShape.w) {\n continue;\n }\n\n for (var d1 = 0; d1 < inputDepthNearestVec4; d1 += 4) {\n let 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 let 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 (inputDepthVec4Remainder == 1) {\n dotProd += getX(batch, xF, xR, xC, inputDepthNearestVec4) *\n getW(wF, wR, wC, inputDepthNearestVec4, d2);\n } else if (inputDepthVec4Remainder == 2) {\n let xValues = vec2(\n getX(batch, xF, xR, xC, inputDepthNearestVec4),\n getX(batch, xF, xR, xC, inputDepthNearestVec4 + 1)\n );\n let wValues = vec2(\n getW(wF, wR, wC, inputDepthNearestVec4, d2),\n getW(wF, wR, wC, inputDepthNearestVec4 + 1, d2)\n );\n dotProd += dot(xValues, wValues);\n } else if (inputDepthVec4Remainder == 3) {\n let xValues = vec3(\n getX(batch, xF, xR, xC, inputDepthNearestVec4),\n getX(batch, xF, xR, xC, inputDepthNearestVec4 + 1),\n getX(batch, xF, xR, xC, inputDepthNearestVec4 + 2)\n );\n let wValues = vec3(\n getW(wF, wR, wC, inputDepthNearestVec4, d2),\n getW(wF, wR, wC, inputDepthNearestVec4 + 1, d2),\n getW(wF, wR, wC, inputDepthNearestVec4 + 2, d2)\n );\n dotProd += dot(xValues, wValues);\n }\n }\n }\n }\n setOutputAtIndex(index, dotProd);\n }\n }`}};function Fue(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s}=e,{strides:a,pad:i,dilations:p}=o,u=w.computeConv3DInfo(n.shape,s.shape,a,p,i),c=[u.padInfo.front,u.padInfo.top,u.padInfo.left],l=[{type:\"int32\",data:[u.filterDepth,u.filterHeight,u.filterWidth]},{type:\"int32\",data:[...c]},{type:\"int32\",data:[u.strideDepth,u.strideHeight,u.strideWidth]},{type:\"int32\",data:[u.dilationDepth,u.dilationHeight,u.dilationWidth]}],m=new kx(u),d=dt(n.dtype,s.dtype);return t.runWebGPUProgram(m,[n,s],d,l)}var RV={kernelName:on,backendName:\"webgpu\",kernelFunc:Fue};function Pue(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,dy:s}=e,{strides:a,pad:i,filterShape:p}=o,u=w.computeConv3DInfo(n.shape,p,a,1,i),c=new Sx(u),l=[{type:\"int32\",data:[u.padInfo.front,u.padInfo.top,u.padInfo.left]},{type:\"int32\",data:[u.strideDepth,u.strideHeight,u.strideWidth]},{type:\"int32\",data:[u.batchSize]},{type:\"int32\",data:[u.outDepth]},{type:\"int32\",data:[u.outHeight]},{type:\"int32\",data:[u.outWidth]},{type:\"int32\",data:[u.inDepth]},{type:\"int32\",data:[u.inHeight]},{type:\"int32\",data:[u.inWidth]}];return t.runWebGPUProgram(c,[n,s],s.dtype,l)}var DV={kernelName:ja,backendName:\"webgpu\",kernelFunc:Pue};function Oue(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,filter:s}=e,{strides:a,pad:i,inputShape:p}=o,u=w.computeConv3DInfo(p,s.shape,a,1,i),c=new Ix(u),l=[{type:\"int32\",data:[u.filterDepth,u.filterHeight,u.filterWidth]},{type:\"int32\",data:[u.filterDepth-1-u.padInfo.front,u.filterHeight-1-u.padInfo.top,u.filterWidth-1-u.padInfo.left]},{type:\"int32\",data:[u.strideDepth,u.strideHeight,u.strideWidth]},{type:\"int32\",data:[u.outDepth]},{type:\"int32\",data:[u.outHeight]},{type:\"int32\",data:[u.outWidth]},{type:\"int32\",data:[u.outChannels]}];return t.runWebGPUProgram(c,[n,s],n.dtype,l)}var AV={kernelName:nn,backendName:\"webgpu\",kernelFunc:Oue};var Mue=ye({opType:Z.COS}),FV={kernelName:sn,backendName:\"webgpu\",kernelFunc:Mue};var Lue=ye({opType:Z.COSH}),PV={kernelName:an,backendName:\"webgpu\",kernelFunc:Lue};var Nx=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=X(this.outputShape),this.dispatch=H(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 ${G(\"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 Bue=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 Nx(n.shape[3],s.shape,i,p),l=[{type:\"float32\",data:[u]}];return t.runWebGPUProgram(c,[n,s,a],\"float32\",l)},OV={kernelName:cn,backendName:\"webgpu\",kernelFunc:Bue};var Dp;(function(r){r.Prod=\"*\",r.Sum=\"+\"})(Dp||(Dp={}));var xm=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=X(this.outputShape),this.dispatch=H(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===Dp.Prod?\"1.0\":\"0.0\",o=this.exclusive?t:`getX(${MV(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 ${G(\"index\")} {\n if (index < uniforms.size) {\n var coords = getCoordsFromIndex(index);\n\n let end = ${LV(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 ${LV(e,\"coords\",this.op)} = idx;\n val ${this.op}= getX(${MV(e,\"coords\",this.op)});\n }\n setOutputAtIndex(index, val);\n }\n }\n `}};function MV(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 LV(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 Tx(r,e,t,o,n,s){let a=e.shape.length,i=w.getAxesPermutation([o],a),p=e;i!=null&&(p=xr({inputs:{x:e},backend:t,attrs:{perm:i}}));let u=w.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=At({inputs:{x:p},backend:t});for(let m=0;m<=Math.ceil(Math.log2(c))-1;m++){let d=new xm(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 xm(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=w.getUndoAxesPermutation(i),d=xr({inputs:{x:l},backend:t,attrs:{perm:m}});return t.disposeData(l.dataId),t.disposeData(p.dataId),d}return l}function zue(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,exclusive:a,reverse:i}=o;return Tx(Dp.Prod,n,t,s,a,i)}var BV={kernelName:un,backendName:\"webgpu\",kernelFunc:zue};function Vue(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,exclusive:a,reverse:i}=o;return Tx(Dp.Sum,n,t,s,a,i)}var zV={kernelName:pn,backendName:\"webgpu\",kernelFunc:Vue};function Wue(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=vt({backend:t,attrs:{shape:d,value:0,dtype:l}}),h=new Qc(m,c,i),g=[{type:\"int32\",data:[a]}],x=c?[n,s]:[n];return t.runWebGPUProgram(h,x,l,g,f)}var VV={kernelName:ra,backendName:\"webgpu\",kernelFunc:Wue};var _x=class{constructor(e,t){this.variableNames=[\"x\"],this.workgroupSize=[64,1,1],this.size=!0,this.uniforms=\"blockSize : i32,\",this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=`depthToSpace_${t}`,this.dataFormat=t}getUserCode(){return`\n ${G(\"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 Uue(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 _x(f,a);return t.runWebGPUProgram(g,[n],n.dtype,h)}var WV={kernelName:ln,backendName:\"webgpu\",kernelFunc:Uue};var Ex=class{constructor(e,t,o,n=!1,s=null,a=!1){this.variableNames=[\"x\",\"W\"],this.uniforms=\"pads : vec2, inDims : vec2,\",this.workgroupSize=[16,16,1],this.outputShape=e,this.dispatchLayout={x:[3],y:[2],z:[0,1]},this.dispatch=H(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 ${dr(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 ${G()} {\n let coords = getOutputCoords();\n let batch = coords[0];\n let xRCCorner = vec2(coords.zw) - uniforms.pads;\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, virtualWidth : i32,\",this.workgroupSize=[64,1,1],this.workPerThread=4,this.outputComponent=4,this.outputShape=e.outShape,this.virtualWidth=Math.ceil(this.outputShape[2]/this.workPerThread)*this.workPerThread;let s=[this.outputShape[0],this.outputShape[1],this.virtualWidth,this.outputShape[3]];this.dispatchLayout=X(s),this.dispatch=H(this.dispatchLayout,s,this.workgroupSize,[this.outputComponent*this.workPerThread,1,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,t=this.convInfo.strideHeight,o=this.convInfo.strideWidth;return`\n ${dr(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 ${G(\"index\")} {\n let width0 = uniforms.outShape[3] / ${this.outputComponent};\n let d1 = (index % width0) * ${this.outputComponent};\n var index1 = index / width0;\n let width1 = uniforms.virtualWidth / ${this.workPerThread};\n let c = (index1 % width1) * ${this.workPerThread};\n index1 = index1 / width1;\n let r = index1 % uniforms.outShape[1];\n let batch = index1 / uniforms.outShape[1];\n\n let xRCCorner = vec2(r, c) * vec2(${t}, ${o}) - uniforms.pads;\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 * ${o} + 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 ${Zr(this.addBias,this.activation)}\n setOutputAtCoords(coords[0], coords[1], coords[2], coords[3], value);\n }\n }\n }\n `}};var el=class{constructor(e,t=!1,o=null,n=!1){this.variableNames=[\"x\",\"W\"],this.uniforms=`pads : vec2, inDims : vec2, filterHeight : i32,\n filterWidth : i32, strides : vec2, dilations : vec2,`,this.workgroupSize=[256,1,1],this.size=!0,this.outputShape=e.outShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(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 ${dr(this.activation,this.hasPreluActivation,!1,4)}\n\n ${G(\"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.strides - uniforms.pads;\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.dilations[0];\n let inputColEnd = inputColStart + uniforms.filterWidth *\n uniforms.dilations[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.dilations[0];\n\n for (var wC = 0; wC < uniforms.filterWidth; wC = wC + 1) {\n let xC = inputColStart + wC * uniforms.dilations[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.dilations[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.dilations[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 ${Zr(this.addBias,this.activation)}\n setOutputAtCoords(coords[0], coords[1], coords[2], coords[3], value);\n }\n }\n `}};function Gue(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=w.convertConv2DDataFormat(p),m=u;m==null&&(m=[1,1]);let d=w.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 Jc(d),f.push({type:\"int32\",data:[g.virtualWidth]})):(g=new el(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 UV={kernelName:mn,backendName:\"webgpu\",kernelFunc:Gue};var $x=class{constructor(e){this.variableNames=[\"x\",\"dy\"],this.uniforms=`strides : vec2, pads : vec2, filterDims : vec2, outHeight : i32,\n outWidth : i32, inHeight : i32, inWidth : i32, batchSize : i32, channelMul : i32,`,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.filterShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"depthwise_conv2d_backprop_filter\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n let wR = coords[0];\n let wC = coords[1];\n let d1 = coords[2];\n let dm = coords[3];\n let d2 = d1 * uniforms.channelMul + dm;\n\n var dotProd = 0.0;\n for (var b = 0; b < uniforms.batchSize; b++) {\n for (var yR = 0; yR < uniforms.outHeight; yR++) {\n let xR = wR + yR * uniforms.strides[0] - uniforms.pads[0];\n\n if (xR < 0 || xR >= uniforms.inHeight) {\n continue;\n }\n\n for (var yC = 0; yC < uniforms.outWidth; yC++) {\n let xC = wC + yC * uniforms.strides[1] - uniforms.pads[1];\n\n if (xC < 0 || xC >= uniforms.inWidth) {\n continue;\n }\n\n let dyValue = getDy(b, yR, yC, d2);\n let xValue = getX(b, xR, xC, d1);\n dotProd += xValue * dyValue;\n }\n }\n }\n setOutputAtIndex(index, dotProd);\n }\n }\n `}},Rx=class{constructor(e){this.variableNames=[\"dy\",\"W\"],this.uniforms=`strides : vec2, pads : vec2, filterDims : vec2,\n outHeight : i32, outWidth : i32, channelMul : i32,`,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.inShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"depthwise_conv2d_backprop_input\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n let batch = coords[0];\n let d1 = coords[3];\n let dyCorner = coords.yz - uniforms.pads;\n let dyRCorner = dyCorner.x;\n let dyCCorner = dyCorner.y;\n\n var dotProd = 0.0;\n for (var wR = 0; wR < uniforms.filterDims[0]; wR++) {\n let dyR = f32(dyRCorner + wR) / f32(uniforms.strides[0]);\n\n if (dyR < 0.0 || dyR >= f32(uniforms.outHeight) || fract(dyR) > 0.0) {\n continue;\n }\n\n let idyR = i32(dyR);\n let wRPerm = uniforms.filterDims[0] - 1 - wR;\n\n for (var wC = 0; wC < uniforms.filterDims[1]; wC++) {\n let dyC = f32(dyCCorner + wC) / f32(uniforms.strides[1]);\n\n if (dyC < 0.0 || dyC >= f32(uniforms.outWidth) || fract(dyC) > 0.0) {\n continue;\n }\n\n let idyC = i32(dyC);\n let wCPerm = uniforms.filterDims[1] - 1 - wC;\n\n for (var dm = 0; dm < uniforms.channelMul; dm++) {\n let d2 = d1 * uniforms.channelMul + dm;\n let xValue = getDy(batch, idyR, idyC, d2);\n let wValue = getW(wRPerm, wCPerm, d1, dm);\n dotProd += xValue * wValue;\n }\n }\n }\n setOutputAtIndex(index, dotProd);\n }\n }\n `}};function Hue(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=w.computeConv2DInfo(n.shape,c,a,i,p,u,!0),m=new $x(l),d=[{type:\"int32\",data:[l.strideHeight,l.strideWidth]},{type:\"int32\",data:[l.padInfo.top,l.padInfo.left]},{type:\"int32\",data:[l.filterHeight,l.filterWidth]},{type:\"int32\",data:[l.outHeight]},{type:\"int32\",data:[l.outWidth]},{type:\"int32\",data:[l.inHeight]},{type:\"int32\",data:[l.inWidth]},{type:\"int32\",data:[l.batchSize]},{type:\"int32\",data:[l.outChannels/l.inChannels]}];return t.runWebGPUProgram(m,[n,s],\"float32\",d)}var GV={kernelName:Pi,backendName:\"webgpu\",kernelFunc:Hue};function Kue(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=w.computeConv2DInfo(c,s.shape,a,i,p,u,!0),m=new Rx(l),d=[{type:\"int32\",data:[l.strideHeight,l.strideWidth]},{type:\"int32\",data:[l.filterHeight-1-l.padInfo.top,l.filterWidth-1-l.padInfo.left]},{type:\"int32\",data:[l.filterHeight,l.filterWidth]},{type:\"int32\",data:[l.outHeight]},{type:\"int32\",data:[l.outWidth]},{type:\"int32\",data:[l.outChannels/l.inChannels]}];return t.runWebGPUProgram(m,[n,s],n.dtype,d)}var HV={kernelName:Oi,backendName:\"webgpu\",kernelFunc:Kue};var Dx=class{constructor(e){this.variableNames=[\"x\"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=[e,e],this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"diag\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getOutputCoords();\n let value = select(0.0, getX(coords[0]), coords[0] == coords[1]);\n setOutputAtIndex(index, value);\n }\n }\n `}};function que(r){let{inputs:e,backend:t}=r,{x:o}=e,n=[...o.shape,...o.shape],s=y.sizeFromShape(o.shape),a=pe({inputs:{x:o},backend:t,attrs:{shape:[s]}}),i=new Dx(s),p=t.runWebGPUProgram(i,[a],a.dtype),u=pe({inputs:{x:p},backend:t,attrs:{shape:n}});return t.disposeData(a.dataId),t.disposeData(p.dataId),u}var KV={kernelName:oa,backendName:\"webgpu\",kernelFunc:que};var Ax=class{constructor(e){this.variableNames=[\"x\",\"w\"],this.uniforms=\"filterDims: vec2, pads: vec2, strides: vec2, dilations: vec2\",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.outShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"dilation2d\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let neg_infinity = -3.4e38;\n let coords = getOutputCoords();\n let batch = coords.x;\n let d1 = coords.w;\n let outTopLeftCorner = coords.yz * uniforms.strides - uniforms.pads;\n let hBeg = outTopLeftCorner.x;\n let wBeg = outTopLeftCorner.y;\n\n var curVal = neg_infinity;\n for (var h = 0; h < uniforms.filterDims[0]; h = h + 1) {\n let hIn = hBeg + h * uniforms.dilations[0];\n\n if (hIn >= 0 && hIn < uniforms.xShape[1]) {\n for (var w = 0; w < uniforms.filterDims[1]; w = w + 1) {\n let wIn = wBeg + w * uniforms.dilations[1];\n\n if (wIn >= 0 && wIn < uniforms.xShape[2]) {\n let val = getX(batch, hIn, wIn, d1) + getW(h, w, d1);\n if (val > curVal) {\n curVal = val;\n }\n }\n }\n }\n }\n\n setOutputAtIndex(index, curVal);\n }\n }\n `}};function jue(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s}=e,{strides:a,pad:i,dilations:p}=o,u=w.computeDilation2DInfo(n.shape,s.shape,a,i,\"NHWC\",p),c=[u.padInfo.top,u.padInfo.left],l=[{type:\"int32\",data:[u.filterHeight,u.filterWidth]},{type:\"int32\",data:[...c]},{type:\"int32\",data:[u.strideHeight,u.strideWidth]},{type:\"int32\",data:[u.dilationHeight,u.dilationWidth]}],m=new Ax(u);return t.runWebGPUProgram(m,[n,s],n.dtype,l)}var qV={kernelName:dn,backendName:\"webgpu\",kernelFunc:jue};var Fx=class{constructor(e,t){if(this.variableNames=[\"x\",\"w\",\"dy\"],this.uniforms=\"filterDims: vec2, pads: vec2, strides: vec2, dilations: vec2, dySize: i32,\",this.workgroupSize=[64,1,1],this.atomic=!0,this.outputShape=e.inShape,this.dispatchLayout=X(e.outShape),this.dispatch=H(this.dispatchLayout,e.outShape,this.workgroupSize),t!==\"float32\"&&t!==\"int32\")throw new Error(`Dilation2DBackpropInput only supports float32 and int32\n types, does not support ${t} type.`);this.type=t,this.shaderKey=\"dilation2DBackpropInput\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.dySize) {\n let coords = getDyCoordsFromIndex(index);\n let b = coords[0];\n let r = coords[1];\n let c = coords[2];\n let d = coords[3];\n\n let dyCorner = vec2(r, c) * uniforms.strides - uniforms.pads;\n var curVal = -3.4e38; // neg_infinity\n var xRMax = 0;\n var xCMax = 0;\n\n // In the case of multiple argmax branches, we only back-propagate\n // along the last branch, i.e., the one with largest value of\n // 'wR * uniforms.filterDims[1] + wC', similarly to the max-pooling\n // backward routines.\n for (var wR = 0; wR < uniforms.filterDims[0]; wR++) {\n let xR = dyCorner.x + wR * uniforms.dilations[0];\n\n if (xR >= 0 && xR < uniforms.xShape[1]) {\n for (var wC = 0; wC < uniforms.filterDims[1]; wC++) {\n let xC = dyCorner.y + wC * uniforms.dilations[1];\n\n if (xC >= 0 && xC < uniforms.xShape[2]) {\n let val = getX(b, xR, xC, d) + getW(wR, wC, d);\n if (val > curVal) {\n curVal = val;\n xRMax = xR;\n xCMax = xC;\n }\n }\n }\n }\n }\n\n let flatIndexIn = d + uniforms.xShape[3] *\n (xCMax + uniforms.xShape[2] * (xRMax + uniforms.xShape[1] * b));\n let value = getDy(b, r, c, d);\n ${Qr(\"&result[flatIndexIn]\",\"value\",this.type)}\n }\n }\n `}},Px=class{constructor(e,t,o){if(this.variableNames=[\"x\",\"w\",\"dy\"],this.uniforms=\"filterDims: vec2, pads: vec2, strides: vec2, dilations: vec2, dySize: i32,\",this.workgroupSize=[64,1,1],this.atomic=!0,this.outputShape=e.filterShape,this.dispatchLayout=X(e.outShape),this.dispatch=H(this.dispatchLayout,e.outShape,this.workgroupSize),o!==\"float32\"&&o!==\"int32\")throw new Error(`Dilation2DBackpropFilter only supports float32 and int32\n types, does not support ${o} type.`);this.type=o,this.shaderKey=\"dilation2DBackpropFilter\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.dySize) {\n let coords = getDyCoordsFromIndex(index);\n let b = coords[0];\n let r = coords[1];\n let c = coords[2];\n let d = coords[3];\n\n let dyCorner = vec2(r, c) * uniforms.strides - uniforms.pads;\n var curVal = -3.4e38; // neg_infinity\n var wRMax = 0;\n var wCMax = 0;\n\n // In the case of multiple argmax branches, we only back-propagate\n // along the last branch, i.e., the one with largest value of\n // 'wR * uniforms.filterDims[1] + wC', similarly to the max-pooling\n // backward routines.\n for (var wR = 0; wR < uniforms.filterDims[0]; wR++) {\n let xR = dyCorner.x + wR * uniforms.dilations[0];\n\n if (xR >= 0 && xR < uniforms.xShape[1]) {\n for (var wC = 0; wC < uniforms.filterDims[1]; wC++) {\n let xC = dyCorner.y + wC * uniforms.dilations[1];\n\n if (xC >= 0 && xC < uniforms.xShape[2]) {\n let val = getX(b, xR, xC, d) + getW(wR, wC, d);\n if (val > curVal) {\n curVal = val;\n wRMax = wR;\n wCMax = wC;\n }\n }\n }\n }\n }\n\n let flatIndexIn = d + uniforms.wShape[2] * (wCMax + wRMax * uniforms.wShape[1]);\n let value = getDy(b, r, c, d);\n ${Qr(\"&result[flatIndexIn]\",\"value\",this.type)}\n }\n }\n `}};function Xue(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s,dy:a}=e,{strides:i,pad:p,dilations:u}=o,c=w.computeDilation2DInfo(n.shape,s.shape,i,p,\"NHWC\",u),l=s.dtype,m=new Px(c,s.shape,l),d=[{type:\"int32\",data:[c.filterHeight,c.filterWidth]},{type:\"int32\",data:[c.padInfo.top,c.padInfo.left]},{type:\"int32\",data:[c.strideHeight,c.strideWidth]},{type:\"int32\",data:[c.dilationHeight,c.dilationWidth]},{type:\"int32\",data:[y.sizeFromShape(c.outShape)]}],f=vt({backend:t,attrs:{shape:s.shape,value:0,dtype:l}});return t.runWebGPUProgram(m,[n,s,a],l,d,f)}var jV={kernelName:Li,backendName:\"webgpu\",kernelFunc:Xue};function Yue(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s,dy:a}=e,{strides:i,pad:p,dilations:u}=o,c=w.computeDilation2DInfo(n.shape,s.shape,i,p,\"NHWC\",u),l=n.dtype,m=new Fx(c,l),d=[{type:\"int32\",data:[c.filterHeight,c.filterWidth]},{type:\"int32\",data:[c.padInfo.top,c.padInfo.left]},{type:\"int32\",data:[c.strideHeight,c.strideWidth]},{type:\"int32\",data:[c.dilationHeight,c.dilationWidth]},{type:\"int32\",data:[y.sizeFromShape(c.outShape)]}],f=vt({backend:t,attrs:{shape:c.inShape,value:0,dtype:l}});return t.runWebGPUProgram(m,[n,s,a],l,d,f)}var XV={kernelName:Mi,backendName:\"webgpu\",kernelFunc:Yue};var Ox=class{constructor(e,t,o){this.variableNames=[\"Image\"],this.uniforms=\"alpha: f32,\",this.workgroupSize=[64,1,1],this.pixelsOpType=wi.DRAW,this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.type=t,this.textureFormat=o,this.shaderKey=`draw_${t}_${o}`}getUserCode(){let e,t=this.type===\"float32\"?\"value\":\"value / 255.0\";return e=`\n if (uniforms.numChannels == 1) {\n rgba[0] = ${t};\n rgba[1] = ${t};\n rgba[2] = ${t};\n } else {\n rgba[d] = ${t};\n }`,`\n @group(0) @binding(0) var outImage : texture_storage_2d<${this.textureFormat}, write>;\n ${G(\"index\")} {\n if (index < uniforms.size) {\n var rgba = vec4(0.0, 0.0, 0.0, uniforms.alpha);\n for (var d = 0; d < uniforms.numChannels; d = d + 1) {\n let value = f32(inBuf[index * uniforms.numChannels + d]);\n ${e}\n }\n rgba.x = rgba.x * rgba.w;\n rgba.y = rgba.y * rgba.w;\n rgba.z = rgba.z * rgba.w;\n let coords = getCoordsFromIndex(index);\n textureStore(outImage, vec2(coords.yx), rgba);\n }\n }\n `}};function Que(r){let{inputs:e,backend:t,attrs:o}=r,{image:n}=e,{canvas:s,options:a}=o,[i,p]=n.shape.slice(0,2),{imageOptions:u}=a||{},c=(u==null?void 0:u.alpha)||1,l=t.device.features.has(\"bgra8unorm-storage\")?\"bgra8unorm\":\"rgba8unorm\",m=[i,p],d=new Ox(m,n.dtype,l);s.width=p,s.height=i;let f=\"webgpu\",h=s.getContext(f),g;h||(g=new OffscreenCanvas(p,i),h=g.getContext(f));let x=n.shape.length===3?n.shape[2]:1;h.configure({device:t.device,format:l,usage:GPUTextureUsage.STORAGE_BINDING,alphaMode:\"premultiplied\"});let b=\"int32\",C=t.makeTensorInfo(m,b),S=t.tensorMap.get(C.dataId);S.resource=h.getCurrentTexture(),S.external=!0;let k=[{type:\"uint32\",data:[x]},{type:\"float32\",data:[c]}];if(t.runWebGPUProgram(d,[n],b,k,C),g){let _=s.getContext(\"2d\");if(!_)throw new Error(\"Please make sure this canvas has only been used for 2d or webgpu context!\");_.drawImage(g,0,0)}return t.disposeData(C.dataId),n}var YV={kernelName:$u,backendName:\"webgpu\",kernelFunc:Que};var i0=et({opType:fe.MUL,cpuKernelImpl:Rz,supportsComplex:!0}),QV={kernelName:Xn,backendName:\"webgpu\",kernelFunc:i0};function u0(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o;return eo(n,s,a,\"sum\",t)}var ZV={kernelName:Ss,backendName:\"webgpu\",kernelFunc:u0};function Zue(r){let{inputs:e,backend:t,attrs:o}=r,{equation:n}=o,s=e,{allDims:a,summedDims:i,idDims:p}=w.decodeEinsumEquation(n,s.length);w.checkEinsumDimSizes(a.length,p,s);let{path:u,steps:c}=w.getEinsumComputePath(i,p),l=c.length,m=null,d=a.length,f=[];for(let h=0;h=0&&(m=u0({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 JV={kernelName:Bi,backendName:\"webgpu\",kernelFunc:Zue};var Jue=ye({opType:Z.ELU}),eW={kernelName:hn,backendName:\"webgpu\",kernelFunc:Jue};var epe=r=>{let{inputs:e,backend:t}=r,{dy:o,y:n}=e,s=new Ii(fe.ELU_DER,o.shape,n.shape);return t.runWebGPUProgram(s,[o,n],o.dtype)},tW={kernelName:Xa,backendName:\"webgpu\",kernelFunc:epe};var tpe=et({opType:fe.EQUAL,dtype:\"bool\",cpuKernelImpl:gz}),rW={kernelName:xn,backendName:\"webgpu\",kernelFunc:tpe};var rpe=ye({opType:Z.ERF}),oW={kernelName:gn,backendName:\"webgpu\",kernelFunc:rpe};var ope=ye({opType:Z.EXP,cpuKernelImpl:xz,dtype:\"float32\"}),nW={kernelName:yn,backendName:\"webgpu\",kernelFunc:ope};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&&(y.assert(-(a+1)<=n,()=>`Axis must be in the interval [${-(a+1)}, ${a}]`),p=a+n+1),i.splice(p,0,1),pe({inputs:{x:s},backend:o,attrs:{shape:i}})}var sW={kernelName:na,backendName:\"webgpu\",kernelFunc:Mx};var npe=ye({opType:Z.EXPM1,cpuKernelImpl:yz}),aW={kernelName:bn,backendName:\"webgpu\",kernelFunc:npe};var ym=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=X(this.outputShape),this.dispatch=H(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 ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getOutputCoords();\n setOutputAtIndex(index, mulMatDFT(coords[0], coords[1]));\n }\n }\n `}};function Lx(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=pe({inputs:{x:r},backend:t,attrs:{shape:[a,s]}});i.push(p);let u=p.shape,c=new ym(\"real\",u),l=new ym(\"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=xo({inputs:{real:g,imag:x},backend:t});i.push(b);let C=pe({inputs:{x:b},backend:t,attrs:{shape:r.shape}});return i.forEach(S=>t.disposeData(S.dataId)),C}function spe(r){let{inputs:e,backend:t}=r,{input:o}=e;return Lx(o,!1,t)}var iW={kernelName:zi,backendName:\"webgpu\",kernelFunc:spe};var Bx=class{constructor(e){this.outputShape=[],this.variableNames=[\"x\"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"flipLeftRight\"}getUserCode(){return`\n ${G(\"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 uW={kernelName:Cn,backendName:\"webgpu\",kernelFunc:({inputs:r,backend:e})=>{let{image:t}=r,o=e,n=new Bx(t.shape);return o.runWebGPUProgram(n,[t],t.dtype)}};var ape=ye({opType:Z.FLOOR,cpuKernelImpl:bz}),pW={kernelName:wn,backendName:\"webgpu\",kernelFunc:ape};var ipe=et({opType:fe.FLOOR_DIV,cpuKernelImpl:Cz,dtype:\"int32\"}),cW={kernelName:Sn,backendName:\"webgpu\",kernelFunc:ipe};var zx=class{constructor(e,t,o=!1){this.pixelsOpType=wi.FROM_PIXELS,this.outputShape=[0],this.variableNames=[],this.workgroupSize=[256,1,1],this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(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 ${G(\"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 lW={kernelName:Du,backendName:\"webgpu\",kernelFunc:upe},tl,p0=A().getBool(\"CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU\");function upe(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=A().getBool(\"WEBGPU_IMPORT_EXTERNAL_TEXTURE\")&&a,f=a||i;if(u||p||f){let b;if(d)b=t.device.importExternalTexture({source:n});else{if(f){let L=A().getBool(\"CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU\");(tl==null||L!==p0)&&(p0=L,tl=document.createElement(\"canvas\").getContext(\"2d\",{willReadFrequently:p0})),tl.canvas.width=c,tl.canvas.height=l,tl.drawImage(n,0,0,c,l),n=tl.canvas}let P=GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.TEXTURE_BINDING,M=t.textureManager.acquireTexture(m[1],m[0],\"rgba8unorm\",P);t.queue.copyExternalImageToTexture({source:n},{texture:M},[m[1],m[0]]),b=M}let C=y.sizeFromShape(m),S=y.computeStrides(m),k=new zx(m,s,d),_=[{type:\"uint32\",data:[C]},{type:\"uint32\",data:[s]},{type:\"uint32\",data:[...S]}],$=t.makeTensorInfo([l,c],\"int32\"),R=t.tensorMap.get($.dataId);R.resource=b;let D=t.runWebGPUProgram(k,[$],\"int32\",_);return t.disposeData($.dataId),D}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 S=0;S(xValue, -meanValue, offsetValue), vec3(inv, inv, 1.0)));\n }\n }\n `}};var mW={kernelName:In,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 Vx(o.shape,a.shape,i.shape,l,m),f=[{type:\"float32\",data:[p]}];return u.runWebGPUProgram(d,c,o.dtype,f)}};function ppe(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=w.convertConv2DDataFormat(c),g=w.computeConv2DInfo(n.shape,s.shape,p,l,u,m,!1,h);return bx({x:n,filter:s,convInfo:g,backend:t,bias:a,preluActivationWeights:i,leakyreluAlpha:f,activation:d})}var dW={kernelName:Io,backendName:\"webgpu\",kernelFunc:ppe};function cpe(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(w.eitherStridesOrDilationsAreOne(p,f),()=>`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${p} and dilations '${f}'`);let h=w.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]}],S;return h.outHeight>4&&h.outWidth>4&&h.strideWidth<=2&&h.inChannels===h.outChannels&&h.dilationHeight===1&&h.dilationWidth===1&&h.inChannels%4===0?(S=new Jc(h,x,m,b),C.push({type:\"int32\",data:[S.virtualWidth]})):(S=new el(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]}),S.uniforms+=\" alpha : f32,\"),t.runWebGPUProgram(S,g,\"float32\",C)}var fW={kernelName:vo,backendName:\"webgpu\",kernelFunc:cpe};var Wx=class{constructor(e,t){this.variableNames=[\"A\",\"indices\"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=t,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=`gathernd_${e}`,this.sliceDim=e,this.uniforms=`sliceDim : i32, strides : ${ft(e)},`}getUserCode(){let e;return this.sliceDim>1?e=\"uniforms.strides[j]\":e=\"uniforms.strides\",`\n ${G(\"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 lpe(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]=w.prepareAndValidate(o,n),m=pe({inputs:{x:n},backend:t,attrs:{shape:[u,a]}}),d=pe({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),S=wz(b,C,o.dtype,u,a,c,l,o.shape,i);return t.makeTensorInfo(p,o.dtype,S.values)}let f=new Wx(a,[u,c]),h=[{type:\"int32\",data:[a]},{type:\"int32\",data:l}],g=t.runWebGPUProgram(f,[d,m],d.dtype,h),x=pe({inputs:{x:g},backend:t,attrs:{shape:p}});return t.disposeData(m.dataId),t.disposeData(d.dataId),t.disposeData(g.dataId),x}var hW={kernelName:vn,backendName:\"webgpu\",kernelFunc:lpe};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=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"gather\"}getUserCode(){let e=mpe(this.aShape);return`\n ${G(\"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 mpe(r){let e=[\"resRC.x\",\"resRC.y\",\"resRC.z\",\"resRC.w\"],t=[];for(let o=0;ot.disposeData(D.dataId)),t.makeTensorInfo(u.outputShape,R.dtype,R.values)}let h=new Ux(m.shape,f),g=t.runWebGPUProgram(h,[m,d],m.dtype);l.push(g);let x=pe({inputs:{x:g},backend:t,attrs:{shape:u.outputShape}});return l.forEach(b=>t.disposeData(b.dataId)),x}var gW={kernelName:aa,backendName:\"webgpu\",kernelFunc:c0};var dpe=et({opType:fe.GREATER,cpuKernelImpl:vz,dtype:\"bool\"}),xW={kernelName:kn,backendName:\"webgpu\",kernelFunc:dpe};var fpe=et({opType:fe.GREATER_EQUAL,dtype:\"bool\",cpuKernelImpl:Iz}),yW={kernelName:Nn,backendName:\"webgpu\",kernelFunc:fpe};function hpe(r){let{inputs:e,backend:t}=r,{input:o}=e;return Lx(o,!0,t)}var bW={kernelName:Vi,backendName:\"webgpu\",kernelFunc:hpe};var gpe=ye({opType:Z.IS_FINITE,dtype:\"bool\"}),CW={kernelName:Tn,backendName:\"webgpu\",kernelFunc:gpe};var xpe=ye({opType:Z.IS_INF,dtype:\"bool\"}),wW={kernelName:_n,backendName:\"webgpu\",kernelFunc:xpe};var ype=ye({opType:Z.IS_NAN,dtype:\"bool\"}),SW={kernelName:En,backendName:\"webgpu\",kernelFunc:ype};function bpe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{alpha:s}=o,a=[{type:\"float32\",data:[s]}],i=new Jr(n.shape,Z.LEAKYRELU,\"alpha : f32,\");return t.runWebGPUProgram(i,[n],\"float32\",a)}var IW={kernelName:$n,backendName:\"webgpu\",kernelFunc:bpe};var Cpe=et({opType:fe.LESS,dtype:\"bool\",cpuKernelImpl:Nz}),vW={kernelName:Rn,backendName:\"webgpu\",kernelFunc:Cpe};var wpe=et({opType:fe.LESS_EQUAL,dtype:\"bool\",cpuKernelImpl:kz}),kW={kernelName:Dn,backendName:\"webgpu\",kernelFunc:wpe};var Gx=class{constructor(e){this.variableNames=[],this.outputShape=[],this.uniforms=\"start : f32, step : f32,\",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=[e],this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"linSpace\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n setOutputAtIndex(index, uniforms.start + f32(index) * uniforms.step);\n }\n }\n `}};function Spe(r){let{backend:e,attrs:t}=r,{start:o,stop:n,num:s}=t,a=(n-o)/(s-1),i=new Gx(s),p=[{type:\"float32\",data:[o]},{type:\"float32\",data:[a]}];return e.runWebGPUProgram(i,[],\"float32\",p)}var NW={kernelName:An,backendName:\"webgpu\",kernelFunc:Spe};var Ipe=ye({opType:Z.LOG,cpuKernelImpl:Tz}),TW={kernelName:Fn,backendName:\"webgpu\",kernelFunc:Ipe};var vpe=ye({opType:Z.LOG1P}),_W={kernelName:Pn,backendName:\"webgpu\",kernelFunc:vpe};var kpe=et({opType:fe.LOGICAL_AND,dtype:\"bool\"}),EW={kernelName:On,backendName:\"webgpu\",kernelFunc:kpe};var Npe=ye({opType:Z.LOGICAL_NOT}),$W={kernelName:Mn,backendName:\"webgpu\",kernelFunc:Npe};var Tpe=et({opType:fe.LOGICAL_OR}),RW={kernelName:Ln,backendName:\"webgpu\",kernelFunc:Tpe};var DW=`\n var powValue = 0.0;\n let basis = uniforms.bias + uniforms.alpha * sum;\n if (uniforms.beta == 0.5) {\n powValue = inverseSqrt(basis);\n } else if (uniforms.beta == 1.0) {\n powValue = 1.0 / basis;\n } else {\n powValue = exp(log(basis) * (-uniforms.beta));\n }\n`,Hx=class{constructor(e){this.outputShape=[],this.variableNames=[\"x\"],this.uniforms=\"radius : i32, bias : f32, alpha : f32, beta : f32,\",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"lrn\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getOutputCoords();\n let b = coords[0];\n let r = coords[1];\n let c = coords[2];\n let d = coords[3];\n\n let x = getX(b, r, c, d);\n var sum = 0.0;\n for (var i = -uniforms.radius; i <= uniforms.radius; i = i + 1) {\n let idx = d + i;\n if (idx >= 0 && idx < uniforms.xShape[3]) {\n let z = getX(b, r, c, idx);\n sum = sum + z * z;\n }\n }\n ${DW}\n\n setOutputAtIndex(index, x * powValue);\n }\n }\n `}},Kx=class{constructor(e,t){this.outputShape=[],this.variableNames=[\"x\"],this.uniforms=\"radius : i32, bias : f32, alpha : f32, beta : f32,\",this.workgroupSize=[256,1,1],this.maxAllowRadius=16,y.assert(t<=this.maxAllowRadius,()=>`Radius must be less than or equal to ${this.maxAllowRadius}, current radius is ${t}`),this.outputShape=e,this.elementsPerWorkgroup=this.workgroupSize[0]-2*this.maxAllowRadius,this.dispatchLayout={x:[3],y:[2],z:[0,1]},this.dispatch=H(this.dispatchLayout,this.outputShape,[this.elementsPerWorkgroup,this.workgroupSize[1],this.workgroupSize[2]]),this.shaderKey=\"lrn_shared\"}getUserCode(){return`\n var lrnSub: array;\n const elementsPerWorkgroup = ${this.elementsPerWorkgroup};\n const maxAllowRadius = ${this.maxAllowRadius};\n\n ${G()} {\n let localDepth = i32(localId.x);\n let workgroupDepth = i32(workgroupId.x) * elementsPerWorkgroup;\n let xDepth = workgroupDepth + localDepth - maxAllowRadius;\n let b = i32(globalId.z) / uniforms.xShape[1];\n let r = i32(globalId.z) - b * uniforms.xShape[1];\n let c = i32(globalId.y);\n let d = workgroupDepth + localDepth;\n\n var x = 0.0;\n if (xDepth >= 0 && xDepth < uniforms.xShape[3]) {\n x = getX(b, r, c, xDepth);\n }\n lrnSub[localDepth] = x;\n workgroupBarrier();\n\n if (localDepth < elementsPerWorkgroup && d < uniforms.outShape[3]) {\n var sum = 0.0;\n let index = localDepth + maxAllowRadius;\n for (var i = -uniforms.radius; i <= uniforms.radius; i = i + 1) {\n let z = lrnSub[index + i];\n sum = sum + z * z;\n }\n ${DW}\n\n setOutputAtCoords(b, r, c, d, lrnSub[index] * powValue);\n }\n } `}};function _pe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{depthRadius:s,bias:a,alpha:i,beta:p}=o,u;s>16?u=new Hx(n.shape):u=new Kx(n.shape,s);let c=[{type:\"int32\",data:[s]},{type:\"float32\",data:[a]},{type:\"float32\",data:[i]},{type:\"float32\",data:[p]}];return t.runWebGPUProgram(u,[n],n.dtype,c)}var AW={kernelName:Bn,backendName:\"webgpu\",kernelFunc:_pe};var qx=class{constructor(e){this.outputShape=[],this.variableNames=[\"inputImage\",\"outputImage\",\"dy\"],this.uniforms=\"depthRadius : i32, bias : f32, alpha : f32, beta : f32,\",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"lrn_grad\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getOutputCoords();\n let b = coords[0];\n let r = coords[1];\n let c = coords[2];\n\n let MIN_DEPTH_BEGIN = 0;\n let MAX_DEPTH_END = uniforms.outShape[3];\n var result = 0.0;\n for (var d = MIN_DEPTH_BEGIN; d < MAX_DEPTH_END; d++) {\n let depthBegin = max(MIN_DEPTH_BEGIN, d - uniforms.depthRadius);\n let depthEnd = min(MAX_DEPTH_END, d + uniforms.depthRadius + 1);\n\n var norm = 0.0;\n for (var k = MIN_DEPTH_BEGIN; k < MAX_DEPTH_END; k++) {\n if (k < depthBegin) {\n continue;\n } else if (k >= depthBegin && k < depthEnd) {\n norm += getInputImage(b, r, c, k) * getInputImage(b, r, c, k);\n } else {\n break;\n }\n }\n\n norm = uniforms.alpha * norm + uniforms.bias;\n\n for (var k = MIN_DEPTH_BEGIN; k < MAX_DEPTH_END; k++) {\n if (k < depthBegin) {\n continue;\n } else if (k >= depthBegin && k < depthEnd) {\n var dyi = -2.0 * uniforms.alpha * uniforms.beta\n * getInputImage(b, r, c, k) * getOutputImage(b, r, c, d) / norm;\n if (k == d) {\n dyi += pow(norm, -1.0 * uniforms.beta);\n }\n if (k == coords[3]) {\n dyi *= getDy(b, r, c, d);\n result += dyi;\n }\n } else {\n break;\n }\n }\n }\n\n setOutputAtIndex(index, result);\n }\n }\n `}};function Epe(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 qx(n.shape),m=[{type:\"int32\",data:[i]},{type:\"float32\",data:[p]},{type:\"float32\",data:[u]},{type:\"float32\",data:[c]}];return t.runWebGPUProgram(l,[n,s,a],n.dtype,m)}var FW={kernelName:Ya,backendName:\"webgpu\",kernelFunc:Epe};var $pe=et({opType:fe.MAX,cpuKernelImpl:Ez}),PW={kernelName:Vn,backendName:\"webgpu\",kernelFunc:$pe};function Rpe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{filterSize:s,strides:a,pad:i,dimRoundingMode:p}=o,c=w.computePool2DInfo(n.shape,s,a,1,i,p);return ax(n,c,\"max\",t)}var OW={kernelName:Wn,backendName:\"webgpu\",kernelFunc:Rpe};function Dpe(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=w.computePool3DInfo(n.shape,s,a,c,i,u,p),m=new Iu(l,\"max\"),d=[{type:\"int32\",data:[l.strideDepth,l.strideHeight,l.strideWidth]},{type:\"int32\",data:[l.padInfo.front,l.padInfo.top,l.padInfo.left]},{type:\"int32\",data:[l.inDepth,l.inHeight,l.inWidth]},{type:\"int32\",data:[l.effectiveFilterDepth,l.effectiveFilterHeight,l.effectiveFilterWidth]}];return t.runWebGPUProgram(m,[n],n.dtype,d)}var MW={kernelName:ia,backendName:\"webgpu\",kernelFunc:Dpe};var jx=class{constructor(e){this.variableNames=[\"dy\",\"maxPos\"],this.uniforms=`strides : vec2, pads : vec2, dilations : vec2, filterDims : vec2,\n outHeight : i32, outWidth : i32`,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.inShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"maxPool2DBackprop\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n let batch = coords[0];\n let d = coords[3];\n\n let dyRCCorner = vec2(coords.yz) - uniforms.pads;\n let dyRCorner = dyRCCorner.x;\n let 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 var dotProd = 0.0;\n let lastIndex = uniforms.filterDims[0] * uniforms.filterDims[1] - 1;\n for (var wR = 0; wR < uniforms.filterDims[0]; wR += uniforms.dilations[0]) {\n let dyR = f32(dyRCorner + wR) / f32(uniforms.strides[0]);\n\n if (dyR < 0.0 || dyR >= f32(uniforms.outHeight) || fract(dyR) > 0.0) {\n continue;\n }\n let idyR = i32(dyR);\n\n for (var wC = 0; wC < uniforms.filterDims[1]; wC += uniforms.dilations[1]) {\n let dyC = f32(dyCCorner + wC) / f32(uniforms.strides[1]);\n\n if (dyC < 0.0 || dyC >= f32(uniforms.outWidth) || fract(dyC) > 0.0) {\n continue;\n }\n let idyC = i32(dyC);\n\n let dyValue = getDy(batch, idyR, idyC, d);\n let maxPosValue = lastIndex - i32(getMaxPos(batch, idyR, idyC, d));\n\n // Get the current value, check it against the value from the\n // position matrix.\n let curPosValue = wR * uniforms.filterDims[1] + wC;\n let mask = select(0.0, 1.0, maxPosValue == curPosValue);\n dotProd += dyValue * mask;\n }\n }\n setOutputAtIndex(index, dotProd);\n }\n }\n `}},Xx=class{constructor(e){this.variableNames=[\"dy\",\"maxPos\"],this.uniforms=`strides : vec3, pads : vec3, filterDims : vec3,\n outDepth : i32, outHeight : i32, outWidth : i32`,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.inShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"maxPool3DBackprop\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n let batch = coords.x;\n let ch = coords.u;\n\n let dyCorner = vec3(coords.y, coords.z, coords.w) - uniforms.pads;\n let dyDCorner = dyCorner.x;\n let dyRCorner = dyCorner.y;\n let 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 var dotProd = 0.0;\n let lastIndex = uniforms.filterDims[0] * uniforms.filterDims[1] * uniforms.filterDims[2] - 1;\n\n for (var wD = 0; wD < uniforms.filterDims[0]; wD++) {\n let dyD = f32(dyDCorner + wD) / f32(uniforms.strides[0]);\n\n if (dyD < 0.0 || dyD >= f32(uniforms.outDepth) || fract(dyD) > 0.0) {\n continue;\n }\n let idyD = i32(dyD);\n\n for (var wR = 0; wR < uniforms.filterDims[1]; wR++) {\n let dyR = f32(dyRCorner + wR) / f32(uniforms.strides[1]);\n\n if (dyR < 0.0 || dyR >= f32(uniforms.outHeight) || fract(dyR) > 0.0) {\n continue;\n }\n let idyR = i32(dyR);\n\n for (var wC = 0; wC < uniforms.filterDims[2]; wC++) {\n let dyC = f32(dyCCorner + wC) / f32(uniforms.strides[2]);\n\n if (dyC < 0.0 || dyC >= f32(uniforms.outWidth) || fract(dyC) > 0.0) {\n continue;\n }\n let idyC = i32(dyC);\n\n let dyValue = getDy(batch, idyD, idyR, idyC, ch);\n let maxPosValue = lastIndex - i32(getMaxPos(batch, idyD, idyR, idyC, ch));\n\n // Get the current value, check it against the value from the\n // position matrix.\n let curPosValue = wD * uniforms.filterDims[1] * uniforms.filterDims[2] + wR * uniforms.filterDims[2] + wC;\n let mask = select(0.0, 1.0, maxPosValue == curPosValue);\n dotProd += dyValue * mask;\n }\n }\n }\n\n setOutputAtIndex(index, dotProd);\n }\n }\n `}};function Ape(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=w.computePool3DInfo(a.shape,i,p,l,u,c),d=new Iu(m,\"max\",!0),f=[{type:\"int32\",data:[m.strideDepth,m.strideHeight,m.strideWidth]},{type:\"int32\",data:[m.padInfo.front,m.padInfo.top,m.padInfo.left]},{type:\"int32\",data:[m.inDepth,m.inHeight,m.inWidth]},{type:\"int32\",data:[m.effectiveFilterDepth,m.effectiveFilterHeight,m.effectiveFilterWidth]}],h=t.runWebGPUProgram(d,[a],\"int32\",f),g=new Xx(m);f=[{type:\"int32\",data:[m.strideDepth,m.strideHeight,m.strideWidth]},{type:\"int32\",data:[m.effectiveFilterDepth-1-m.padInfo.front,m.effectiveFilterHeight-1-m.padInfo.top,m.effectiveFilterWidth-1-m.padInfo.left]},{type:\"int32\",data:[m.effectiveFilterDepth,m.effectiveFilterHeight,m.effectiveFilterWidth]},{type:\"int32\",data:[m.outDepth]},{type:\"int32\",data:[m.outHeight]},{type:\"int32\",data:[m.outWidth]}];let x=t.runWebGPUProgram(g,[n,h],a.dtype,f);return t.disposeData(h.dataId),x}var LW={kernelName:Gi,backendName:\"webgpu\",kernelFunc:Ape};function Fpe(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s,output:a}=e,i=s;fm([s,a],\"maxPoolGrad\");let{filterSize:p,strides:u,pad:c,dimRoundingMode:l}=o,m=w.computePool2DInfo(i.shape,p,u,1,c,l),d=new Ba(m,\"max\",!0),f=[{type:\"int32\",data:[m.strideHeight,m.strideWidth]},{type:\"int32\",data:[m.padInfo.top,m.padInfo.left]},{type:\"int32\",data:[m.dilationHeight,m.dilationWidth]},{type:\"int32\",data:[m.inHeight,m.inWidth]},{type:\"int32\",data:[m.effectiveFilterHeight,m.effectiveFilterWidth]}],h=t.runWebGPUProgram(d,[i],\"int32\",f),g=new jx(m);f=[{type:\"int32\",data:[m.strideHeight,m.strideWidth]},{type:\"int32\",data:[m.effectiveFilterHeight-1-m.padInfo.top,m.effectiveFilterWidth-1-m.padInfo.left]},{type:\"int32\",data:[m.dilationHeight,m.dilationWidth]},{type:\"int32\",data:[m.effectiveFilterHeight,m.effectiveFilterWidth]},{type:\"int32\",data:[m.outHeight]},{type:\"int32\",data:[m.outWidth]}];let x=t.runWebGPUProgram(g,[n,h],i.dtype,f);return t.disposeData(h.dataId),x}var BW={kernelName:Ui,backendName:\"webgpu\",kernelFunc:Fpe};function Ppe(r){let{inputs:e,backend:t,attrs:o}=r,{filterSize:n,strides:s,pad:a,includeBatchInIndex:i}=o,{x:p}=e;y.assert(p.shape.length===4,()=>`Error in maxPool: input must be rank 4 but got rank ${p.shape.length}.`);let u=[1,1];y.assert(w.eitherStridesOrDilationsAreOne(s,u),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${s} and dilations '${u}'`);let c=w.computePool2DInfo(p.shape,n,s,u,a),l=[{type:\"int32\",data:[c.strideHeight,c.strideWidth]},{type:\"int32\",data:[c.padInfo.top,c.padInfo.left]},{type:\"int32\",data:[c.dilationHeight,c.dilationWidth]},{type:\"int32\",data:[c.inHeight,c.inWidth]},{type:\"int32\",data:[c.effectiveFilterHeight,c.effectiveFilterWidth]}],m=new Ba(c,\"max\",!1),d=t.runWebGPUProgram(m,[p],p.dtype,l);m=new Ba(c,\"max\",!0,!0,i);let f=t.runWebGPUProgram(m,[p],\"int32\",l);return[d,f]}var zW={kernelName:ua,backendName:\"webgpu\",kernelFunc:Ppe};function Ope(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o;return eo(n,s,a,\"min\",t)}var VW={kernelName:Gn,backendName:\"webgpu\",kernelFunc:Ope};var Mpe=et({opType:fe.MIN,cpuKernelImpl:$z}),WW={kernelName:Hn,backendName:\"webgpu\",kernelFunc:Mpe};var Yx=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=X(this.outputShape),this.dispatch=H(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=ft(e),p=e>1?[\"coords[0]\",\"coords[1]\",\"coords[2]\",\"coords[3]\"].slice(0,e):\"coords\";return`\n ${G(\"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 UW={kernelName:Kn,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 Yx(o.shape,n,s);return a.runWebGPUProgram(p,[o],o.dtype,i)}};var Lpe=et({opType:fe.MOD}),GW={kernelName:qn,backendName:\"webgpu\",kernelFunc:Lpe};var Qx=class{constructor(e,t){this.variableNames=[\"probs\"],this.outputShape=[],this.uniforms=\"seed : f32, numOutcomes: i32,\",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=[e,t],this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"multinomial\"}getUserCode(){return`\n //Based on the work of Dave Hoskins\n //https://www.shadertoy.com/view/4djSRW\n fn random (seed : f32, resultUV : vec2) -> f32 {\n let HASHSCALE1 = 443.8975;\n let p = resultUV * seed;\n var p3 = fract(vec3(p.xyx) * HASHSCALE1);\n p3 = p3 + dot(p3, p3.yzx + 19.19);\n return fract((p3.x + p3.y) * p3.z);\n }\n\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getOutputCoords();\n let batch = coords[0];\n\n let resUV = vec2(f32(coords[1]) / f32(uniforms.outShape[1]),\n f32(coords[0]) / f32(uniforms.outShape[0]));\n let r = random(uniforms.seed, resUV);\n var cdf = 0.0;\n for (var i = 0; i < uniforms.numOutcomes - 1; i = i + 1) {\n cdf = cdf + getProbs(batch, i);\n\n if (r < cdf) {\n setOutputAtIndexI32(index, i);\n return;\n }\n }\n\n // If no other event happened, last event happened.\n setOutputAtIndexI32(index, uniforms.numOutcomes - 1);\n }\n }\n `}};var Zx=class{constructor(e){this.variableNames=[\"logits\"],this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=[this.outputShape[0],1,1],this.outputShape[1]>=4096?this.workgroupSize=[256,1,1]:this.workgroupSize=[64,1,1],this.shaderKey=\"softmax\"}getUserCode(){return`\n var buf : array;\n var rowMaxShared : f32;\n var rowSumShared : f32;\n const blockSize = ${this.workgroupSize[0]};\n ${G(\"index\")} {\n let row = index / blockSize;\n let tid = i32(localId.x);\n let cols = uniforms.outShape[1];\n\n var threadMax = -3.402823e+38f;\n for (var col = tid; col < cols; col += blockSize) {\n let value = getLogits(row, col);\n threadMax = max(threadMax, value);\n }\n if (tid < cols) {\n buf[tid] = threadMax;\n }\n workgroupBarrier();\n\n var reduceSize = min(cols, blockSize);\n for (var currSize = reduceSize >> 1; currSize > 0; currSize = reduceSize >> 1) {\n reduceSize = currSize + (reduceSize & 1);\n if (tid < currSize) {\n buf[tid] = max(buf[tid], buf[tid + reduceSize]);\n }\n workgroupBarrier();\n }\n\n if (tid == 0) {\n rowMaxShared = buf[0];\n }\n workgroupBarrier();\n\n var threadSum = 0.0;\n for (var col = tid; col < cols; col += blockSize) {\n let subExp = exp(getLogits(row, col) - rowMaxShared);\n threadSum += subExp;\n }\n buf[tid] = threadSum;\n workgroupBarrier();\n\n for (var currSize = blockSize >> 1; currSize > 0; currSize = currSize >> 1) {\n if (tid < currSize) {\n buf[tid] = buf[tid] + buf[tid + currSize];\n }\n workgroupBarrier();\n }\n\n if (tid == 0) {\n rowSumShared = buf[0];\n }\n workgroupBarrier();\n\n for (var col = tid; col < cols; col += blockSize) {\n let value = exp(getLogits(row, col) - rowMaxShared) / rowSumShared;\n setOutputAtCoords(row, col, value);\n }\n }\n `}};function l0(r){let{inputs:e,backend:t,attrs:o}=r,{logits:n}=e,{dim:s}=o,a=pe({inputs:{x:n},backend:t,attrs:{shape:[y.sizeFromShape(n.shape)/n.shape[s],n.shape[s]]}}),i=new Zx(a.shape),p=t.runWebGPUProgram(i,[a],n.dtype),u=pe({inputs:{x:p},backend:t,attrs:{shape:n.shape}});return t.disposeData(a.dataId),t.disposeData(p.dataId),u}var HW={kernelName:Is,backendName:\"webgpu\",kernelFunc:l0};function Bpe(r){let{inputs:e,backend:t,attrs:o}=r,{logits:n}=e,{numSamples:s,seed:a,normalized:i}=o,p=i?n:l0({inputs:{logits:n},backend:t,attrs:{dim:n.shape.length-1}}),u=p.shape[0],c=p.shape[1],l=new Qx(u,s),m=[{type:\"float32\",data:[a]},{type:\"int32\",data:[c]}],d=t.runWebGPUProgram(l,[p],\"int32\",m);return i||t.disposeData(p.dataId),d}var KW={kernelName:jn,backendName:\"webgpu\",kernelFunc:Bpe};function zpe(r){let{inputs:e,backend:t}=r,{x:o}=e;if(t.shouldExecuteOnCPU([o])){let s=t.tensorMap.get(o.dataId),[a,i]=Dz(s.values,o.shape,o.dtype);return t.makeTensorInfo(i,o.dtype,a)}let n=new Jr(o.shape,Z.NEG);return t.runWebGPUProgram(n,[o],o.dtype)}var qW={kernelName:pa,backendName:\"webgpu\",kernelFunc:zpe};function Vpe(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}=Vt.nonMaxSuppressionV3Impl(u,c,a,i,p);return t.makeTensorInfo([l.length],\"int32\",new Int32Array(l))}var jW={kernelName:Qn,backendName:\"webgpu\",kernelFunc:Vpe};function Wpe(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}=Vt.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 XW={kernelName:Zn,backendName:\"webgpu\",kernelFunc:Wpe};var Jx=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=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"onehot\"}getUserCode(){return`\n ${G(\"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 Upe(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 Jx(u,a),l=pe({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=pe({inputs:{x:d},backend:t,attrs:{shape:f}});return t.disposeData(d.dataId),h}var YW={kernelName:Jn,backendName:\"webgpu\",kernelFunc:Upe};function bm(r){let{inputs:e,backend:t}=r,{x:o}=e;if(o.dtype===\"complex64\"){let n=vi({inputs:{input:o},backend:t}),s=bm({inputs:{x:n},backend:t}),a=Rp({inputs:{input:o},backend:t}),i=bm({inputs:{x:a},backend:t}),p=xo({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 vt({attrs:{shape:o.shape,dtype:o.dtype,value:o.dtype===\"string\"?\"\":0},backend:t})}var QW={kernelName:Sa,backendName:\"webgpu\",kernelFunc:bm};function ZW(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=vi({inputs:{input:o},backend:t}),s=ZW({inputs:{x:n},backend:t}),a=Rp({inputs:{input:o},backend:t}),i=bm({inputs:{x:a},backend:t}),p=xo({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 vt({attrs:{shape:o.shape,dtype:o.dtype,value:1},backend:t})}var JW={kernelName:ca,backendName:\"webgpu\",kernelFunc:ZW};function Gpe(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=>{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:t,attrs:{dim:n}});return i.push(l),l}),u=a0({inputs:p,backend:t,attrs:{axis:n}});return i.forEach(c=>t.disposeData(c.dataId)),u}var eU={kernelName:la,backendName:\"webgpu\",kernelFunc:Gpe};function m0(r,e=!1){let t=r.length,o=ft(t),n=r.map((l,m)=>`uniforms.pad${m}[0]`).join(\",\"),s=r.map((l,m)=>`uniforms.pad${m}[0] + uniforms.xShape${t>1?`[${m}]`:\"\"}`).join(\",\"),a=t>1?`${o}(${n})`:`${n}`,i=t>1?`${o}(${s})`:`${s}`,p=t>1?\"any(paddedCoords < start)\":\"paddedCoords < start\",u=t>1?\"any(paddedCoords >= end)\":\"paddedCoords >= end\",c=t>1?[\"coords[0]\",\"coords[1]\",\"coords[2]\",\"coords[3]\"].slice(0,t):\"coords\";return`\n let start = ${a};\n let end = ${i};\n if (${p} || ${u}) {\n setOutputAtIndex(index, ${e?0:\"uniforms.constantValue\"});\n } else {\n let coords = paddedCoords - start;\n setOutputAtIndex(index, getX(${c}));\n }\n `}var ey=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=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),t.map((o,n)=>{this.uniforms+=` pad${n} : vec2,`}),this.xShape=e,this.shaderKey=\"pad\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let paddedCoords = getCoordsFromIndex(index);\n ${m0(this.xShape)}\n }\n }\n `}};var Hpe=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 At({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 vt({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 ey(n.shape,s);return t.runWebGPUProgram(p,[n],n.dtype,i)},tU={kernelName:es,backendName:\"webgpu\",kernelFunc:Hpe};var Kpe=et({opType:fe.POW}),rU={kernelName:ts,backendName:\"webgpu\",kernelFunc:Kpe};function qpe(r){let{inputs:e,backend:t}=r,{x:o,alpha:n}=e,s=new Ii(fe.PRELU,o.shape,n.shape);return t.runWebGPUProgram(s,[o,n],\"float32\")}var oU={kernelName:rs,backendName:\"webgpu\",kernelFunc:qpe};function jpe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o;return eo(n,s,a,\"prod\",t)}var nU={kernelName:os,backendName:\"webgpu\",kernelFunc:jpe};var Xpe=r=>{let{backend:e,attrs:t}=r,{start:o,stop:n,step:s,dtype:a}=t,i=Pz(o,n,s,a);return e.makeTensorInfo([i.length],a,i)},sU={kernelName:ma,backendName:\"webgpu\",kernelFunc:Xpe};var Ype=et({opType:fe.DIV}),aU={kernelName:fn,backendName:\"webgpu\",kernelFunc:Ype};var Qpe=ye({opType:Z.RECIPROCAL}),iU={kernelName:ns,backendName:\"webgpu\",kernelFunc:Qpe};var Zpe=ye({opType:Z.RELU}),uU={kernelName:ss,backendName:\"webgpu\",kernelFunc:Zpe};var Jpe=ye({opType:Z.RELU6}),pU={kernelName:us,backendName:\"webgpu\",kernelFunc:Jpe};var ty=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=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"resizeBilinear\"}getUserCode(){return`\n ${G(\"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 ece(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 ty(n.shape,p,u);return t.runWebGPUProgram(f,[n],\"float32\",d)}var cU={kernelName:is,backendName:\"webgpu\",kernelFunc:ece};var ry=class{constructor(e,t){this.variableNames=[\"dy\"],this.uniforms=`effectiveXSize : vec2, effectiveYSize : vec2, heightScale : f32, widthScale : f32,\n invHeightScale : f32, invWidthScale : f32, winHeight : i32, winWidth : i32,`,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.alignCorners=t,this.shaderKey=`resizeBilinearBackprop_${t}`}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getOutputCoords();\n let b = coords[0];\n let d = coords[3];\n let r = coords[1];\n let c = coords[2];\n\n var accumulator = 0.0;\n\n // Compute bounds for where in dy we will look\n let startRLerp = floor(f32(r) * uniforms.invHeightScale);\n let startDyR = i32(startRLerp - f32(uniforms.winHeight / 2));\n\n let startCLerp = floor(f32(c) * uniforms.invWidthScale);\n let startDyC = i32(startCLerp - f32(uniforms.winWidth / 2));\n\n // Loop over dy\n for (var dyROffset = 0; dyROffset < uniforms.winHeight; dyROffset++) {\n let dyR = startDyR + dyROffset;\n\n // Guard against the window exceeding the bounds of dy\n if (dyR < 0 || dyR >= uniforms.dyShape[1]) {\n continue;\n }\n\n for (var dyCOffset = 0; dyCOffset < uniforms.winWidth; dyCOffset++) {\n let dyC = startDyC + dyCOffset;\n\n // Guard against the window exceeding the bounds of dy\n if (dyC < 0 || dyC >= uniforms.dyShape[2]) {\n continue;\n }\n\n let dxR = f32(dyR) * uniforms.heightScale;\n let topDxRIndex = i32(floor(dxR));\n let bottomDxRIndex = i32(min(ceil(dxR), f32(uniforms.outShape[1] - 1)));\n let dxRLerp = dxR - f32(topDxRIndex);\n let inverseDxRLerp = 1.0 - dxRLerp;\n\n let dxC = f32(dyC) * uniforms.widthScale;\n let leftDxCIndex = i32(floor(dxC));\n let rightDxCIndex = i32(min(ceil(dxC), f32(uniforms.outShape[2] - 1)));\n let dxCLerp = dxC - f32(leftDxCIndex);\n let 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 setOutputAtIndex(index, accumulator);\n }\n }\n `}};function tce(r){let{inputs:e,backend:t,attrs:o}=r,{images:n,dy:s}=e,{alignCorners:a}=o,[,i,p]=n.shape,[,u,c]=s.shape,l=[a&&u>1?i-1:i,a&&c>1?p-1:p],m=[a&&u>1?u-1:u,a&&c>1?c-1:c],d=l[0]/m[0],f=l[1]/m[1],h=1/d,g=1/f,x=Math.ceil(h)*2+2,b=Math.ceil(g)*2+2,C=new ry(n.shape,a),S=[{type:\"int32\",data:l},{type:\"int32\",data:m},{type:\"float32\",data:[d]},{type:\"float32\",data:[f]},{type:\"float32\",data:[h]},{type:\"float32\",data:[g]},{type:\"int32\",data:[x]},{type:\"int32\",data:[b]}];return t.runWebGPUProgram(C,[s],s.dtype,S)}var lU={kernelName:Ja,backendName:\"webgpu\",kernelFunc:tce};var oy=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=X(this.outputShape),this.dispatch=H(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 ${G(\"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 rce(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 oy(n.shape,p,u,a);return t.runWebGPUProgram(f,[n],n.dtype,d)}var mU={kernelName:as,backendName:\"webgpu\",kernelFunc:rce};var ny=class{constructor(e,t){this.variableNames=[\"dy\"],this.uniforms=`effectiveXSize : vec2, effectiveYSize : vec2, invHeightScale : f32, invWidthScale : f32,\n winHeight : i32, winWidth : i32,`,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.alignCorners=t,this.shaderKey=`resizeNearestNeigborBackprop_${t}`}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getOutputCoords();\n let b = coords[0];\n let d = coords[3];\n let r = coords[1];\n let c = coords[2];\n\n var accumulator = 0.0;\n\n // Compute bounds for where in dy we will look\n let startRLerp = floor(f32(r) * uniforms.invHeightScale);\n let startDyR = i32(floor(startRLerp - f32(uniforms.winHeight / 2)));\n\n let startCLerp = floor(f32(c) * uniforms.invWidthScale);\n let startDyC = i32(floor(startCLerp - f32(uniforms.winWidth / 2)));\n\n // Loop over dy\n for (var dyROffset = 0; dyROffset < uniforms.winHeight; dyROffset++) {\n let dyR = startDyR + dyROffset;\n\n // Guard against the window exceeding the bounds of dy\n if (dyR < 0 || dyR >= uniforms.dyShape[1]) {\n continue;\n }\n\n for (var dyCOffset = 0; dyCOffset < uniforms.winWidth; dyCOffset++) {\n let dyC = startDyC + dyCOffset;\n\n // Guard against the window exceeding the bounds of dy\n if (dyC < 0 || dyC >= uniforms.dyShape[2]) {\n continue;\n }\n\n let sourceFracRow = f32(uniforms.effectiveXSize[0]) *\n (f32(dyR) / f32(uniforms.effectiveYSize[0]));\n\n let sourceFracCol = f32(uniforms.effectiveXSize[1]) *\n (f32(dyC) / f32(uniforms.effectiveYSize[1]));\n\n let sourceNearestRow =\n i32(min(f32(uniforms.outShape[1] - 1),\n ${this.alignCorners?\"floor(sourceFracRow + 0.5)\":\"floor(sourceFracRow)\"}));\n\n let sourceNearestCol =\n i32(min(f32(uniforms.outShape[2] - 1),\n ${this.alignCorners?\"floor(sourceFracCol + 0.5)\":\"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 setOutputAtIndex(index, accumulator);\n }\n }\n `}};function oce(r){let{inputs:e,backend:t,attrs:o}=r,{images:n,dy:s}=e,{alignCorners:a}=o,[,i,p]=n.shape,[,u,c]=s.shape,l=[a&&u>1?i-1:i,a&&c>1?p-1:p],m=[a&&u>1?u-1:u,a&&c>1?c-1:c],d=l[0]/m[0],f=l[1]/m[1],h=1/d,g=1/f,x=Math.ceil(h)*2+2,b=Math.ceil(g)*2+2,C=new ny(n.shape,a),S=[{type:\"int32\",data:l},{type:\"int32\",data:m},{type:\"float32\",data:[h]},{type:\"float32\",data:[g]},{type:\"int32\",data:[x]},{type:\"int32\",data:[b]}];return t.runWebGPUProgram(C,[s],s.dtype,S)}var dU={kernelName:Za,backendName:\"webgpu\",kernelFunc:oce};var sy=class{constructor(e){this.variableNames=[\"x\"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(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 ${G(\"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 nce(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{dims:s}=o,a=n.shape.length;if(a===0)return At({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=pe({inputs:{x:n},backend:t,attrs:{shape:p}}),d=new sy(p),f=t.runWebGPUProgram(d,[m],m.dtype,l);t.disposeData(m.dataId);let h=pe({inputs:{x:f},backend:t,attrs:{shape:i}});return t.disposeData(f.dataId),h}var fU={kernelName:ps,backendName:\"webgpu\",kernelFunc:nce};var ay=class{constructor(e,t){this.outputShape=[],this.variableNames=[\"x\"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(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 ${G(\"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 hU={kernelName:Ds,backendName:\"webgpu\",kernelFunc:({inputs:r,attrs:e,backend:t})=>{let{image:o}=r,{radians:n,fillValue:s,center:a}=e,i=t,p=new ay(o.shape,s),[u,c]=w.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 sce=ye({opType:Z.ROUND}),gU={kernelName:cs,backendName:\"webgpu\",kernelFunc:sce};var ace=ye({opType:Z.RSQRT,cpuKernelImpl:Oz}),xU={kernelName:ls,backendName:\"webgpu\",kernelFunc:ace};var za=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=X(e),this.dispatch=H(this.dispatchLayout,e,this.workgroupSize),this.sliceDimGreaterThanOne=t>1,this.shaderKey=`scatter_${o}_${n}_${this.sliceDimGreaterThanOne}_${i}_${p}_${s.length}`;let u=ft(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},(u,c)=>`coords[${c}]`).join(\", \")})`;return`\n ${s}\n ${G(\"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 ${Su(this.type)}(${i});\n let flatIndex = getOutputIndexFromCoords(${n});\n\n ${this.sumDupeIndices?Qr(\"&result[flatIndex]\",\"updateValue\",this.type):\"atomicStore(&result[flatIndex], bitcast(updateValue));\"}\n }\n }`}};function ice(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}=w.calculateShapes(s,n,a),m=[l/u,u];if(l===0)return t.makeTensorInfo(a,n.dtype);let d=pe({inputs:{x:n},backend:t,attrs:{shape:[p,i]}}),f=pe({inputs:{x:s},backend:t,attrs:{shape:[p,u]}}),h=f.dtype,g=vt({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 za(f.shape,i,d.shape.length,f.shape.length,c,m,h),S=t.runWebGPUProgram(C,[f,d],h,b,g),k=pe({inputs:{x:S},backend:t,attrs:{shape:a}});return t.disposeData(d.dataId),t.disposeData(f.dataId),t.disposeData(S.dataId),k}var yU={kernelName:ms,backendName:\"webgpu\",kernelFunc:ice};var iy=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=X(this.outputShape),this.dispatch=H(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 ${G(\"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 uce(r){let{inputs:e,backend:t,attrs:o}=r,{sortedSequence:n,values:s}=e,{side:a}=o,i=new iy([s.shape[0],s.shape[1]],a),p=[{type:\"int32\",data:[n.shape[1]]}];return t.runWebGPUProgram(i,[n,s],\"int32\",p)}var bU={kernelName:fs,backendName:\"webgpu\",kernelFunc:uce};var uy=class{constructor(e,t,o){this.variableNames=[\"c\",\"a\",\"b\"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=t,this.dispatchLayout=X(this.outputShape),this.dispatch=H(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 pce(r){let{inputs:e,backend:t}=r,{condition:o,t:n,e:s}=e,a=new uy(o.shape.length,n.shape,n.shape.length);return t.runWebGPUProgram(a,[o,n,s],dt(n.dtype,s.dtype))}var CU={kernelName:fa,backendName:\"webgpu\",kernelFunc:pce};var cce=ye({opType:Z.SELU}),wU={kernelName:hs,backendName:\"webgpu\",kernelFunc:cce};var lce=ye({opType:Z.SIGMOID}),SU={kernelName:bs,backendName:\"webgpu\",kernelFunc:lce};var mce=ye({opType:Z.SIGN}),IU={kernelName:ys,backendName:\"webgpu\",kernelFunc:mce};var dce=ye({opType:Z.SIN}),vU={kernelName:gs,backendName:\"webgpu\",kernelFunc:dce};var fce=ye({opType:Z.SINH}),kU={kernelName:xs,backendName:\"webgpu\",kernelFunc:fce};var hce=ye({opType:Z.SOFTPLUS}),NU={kernelName:Cs,backendName:\"webgpu\",kernelFunc:hce};var py=class{constructor(e,t,o,n,s,a){this.variableNames=[\"x\"],this.outputShape=[],this.uniforms=\"\",this.workgroupSize=[64,1,1],this.size=!0;let i=new Array(n.length);for(let p=0;p{this.uniforms+=` pad${u} : vec2,`}),this.shaderKey=`spaceToBatchND_${s}`}getUserCode(){let e=ft(this.outputShape.length),t=e0(this.newDim);return`\n ${cm(this.paddedXShape,\"PaddedX\")}\n ${G(\"index\")} {\n if(index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n let switchedIndex = getIndexFromCoords${this.outputShape.length}D(${e}(${t}), uniforms.reshapedPaddedXShape);\n let paddedCoords = getPaddedXCoordsFromIndex(switchedIndex);\n ${m0(this.xShape,!0)}\n }\n }\n `}};var gce=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((b,C)=>b*C),p=[[0,0]];p.push(...a);for(let b=1+s.length;bb[0]+n.shape[C]+b[1]),c=w.getReshaped(u,s,i,!1),l=w.getPermuted(c.length,s.length,!1),m=w.getReshapedPermuted(u,s,i,!1),d=y.computeStrides(u),f=new py(n.shape,u,p,c,l,d.length),h=[{type:\"int32\",data:c},{type:\"int32\",data:d}];p.map(b=>h.push({type:\"int32\",data:[b[0],b[1]]}));let g=t.runWebGPUProgram(f,[n],n.dtype,h),x=pe({inputs:{x:g},backend:t,attrs:{shape:m}});return t.disposeData(g.dataId),x},TU={kernelName:ga,backendName:\"webgpu\",kernelFunc:gce};var cy=class{constructor(e,t,o){this.variableNames=[\"input\",\"indices\",\"segmentIds\"],this.outputShape=[],this.uniforms=\"segmentSize : i32, sparseSize : i32,\",this.workgroupSize=[64,1,1],this.atomic=!0,this.outputShape=e,this.type=o,this.dispatchLayout=X([t]),this.dispatch=H(this.dispatchLayout,[t],this.workgroupSize),this.shaderKey=\"sparseSegmentSum\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.sparseSize) {\n let indexInSegmentIds = index / uniforms.segmentSize;\n let indexInSegment = index % uniforms.segmentSize;\n let indexInInput = indices[indexInSegmentIds];\n let segmentId = segmentIds[indexInSegmentIds];\n\n let value = input[indexInInput * uniforms.segmentSize + indexInSegment];\n let outIndex = segmentId * uniforms.segmentSize + indexInSegment;\n ${Qr(\"&result[outIndex]\",\"value\",this.type)}\n }\n }\n `}},ly=class{constructor(e,t){this.variableNames=[\"segmentIds\"],this.outputShape=[],this.workgroupSize=[64,1,1],this.atomic=!0,this.outputShape=[e],this.dispatchLayout=X(t),this.dispatch=H(this.dispatchLayout,t,this.workgroupSize),this.shaderKey=\"sparseSegmentIdCountProgram\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.segmentIdsShape) {\n let segmentId = segmentIds[index];\n ${Qr(\"&result[segmentId]\",\"1\",\"int32\")}\n }\n }\n `}},my=class{constructor(e,t){this.variableNames=[\"segmentSum\",\"sameSegmentIdCount\"],this.outputShape=[],this.uniforms=\"segmentSize : i32\",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.type=t,this.dispatchLayout=X(e),this.dispatch=H(this.dispatchLayout,e,this.workgroupSize),this.shaderKey=\"sparseSegmentMean\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let segmentId = index / uniforms.segmentSize;\n let count = sameSegmentIdCount[segmentId];\n if (count != 0) {\n ${this.type===\"float32\"?\"setOutputAtIndex(index, segmentSum[index] / f32(count));\":\"setOutputAtIndexI32(index, segmentSum[index] / count);\"}\n }\n }\n }\n `}};function dy(r,e,t,o=!1,n){let a=y.sizeFromShape(r.shape)/r.shape[0],i=r.dtype,p=y.sizeFromShape(e.shape),u=n.readSync(t.dataId),l=p>0?u[p-1]+1:0,m,d=r.shape.slice();d[0]=l;let f=p*a,h=vt({backend:n,attrs:{shape:d,value:0,dtype:i}});m=new cy(d,f,i);let g=[{type:\"int32\",data:[a]},{type:\"int32\",data:[f]}],x=n.runWebGPUProgram(m,[r,e,t],i,g,h);if(o)return x;let b=vt({backend:n,attrs:{shape:[l],value:0,dtype:\"int32\"}});m=new ly(l,t.shape);let C=n.runWebGPUProgram(m,[t],\"int32\",null,b),S=vt({backend:n,attrs:{shape:d,value:0,dtype:i}});m=new my(d,i),g=[{type:\"int32\",data:[a]}];let k=n.runWebGPUProgram(m,[x,C],i,g,S);return n.disposeData(x.dataId),n.disposeData(C.dataId),k}function xce(r){let{inputs:e,backend:t}=r,{data:o,indices:n,segmentIds:s}=e;return dy(o,n,s,!1,t)}var _U={kernelName:ya,backendName:\"webgpu\",kernelFunc:xce};function yce(r){let{inputs:e,backend:t}=r,{data:o,indices:n,segmentIds:s}=e;return dy(o,n,s,!0,t)}var EU={kernelName:ba,backendName:\"webgpu\",kernelFunc:yce};var fy=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=me(n.shape,n.dtype,u),l=Uz(c,s);return t.makeTensorInfo(l.shape,l.dtype,l.values)}let a=new fy(n.shape,s);return t.runWebGPUProgram(a,[n],n.dtype)}var $U={kernelName:po,backendName:\"webgpu\",kernelFunc:Cm};function Cce(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}=w.calculateShapes(s,n,i),d=!1;if(s.dtype===\"string\"){let R=t.bufferSync(n),D=t.bufferSync(s),P=y.decodeString(t.readSync(a.dataId)[0]),O=Mz(R,D,i,m,c,u,p,l,P,d);return t.makeTensorInfo(i,O.dtype,O.values)}let f=[m/c,c],h=pe({inputs:{x:n},backend:t,attrs:{shape:[u,p]}}),g=s.shape.length?pe({inputs:{x:s},backend:t,attrs:{shape:[u,c]}}):At({inputs:{x:s},backend:t}),x=g.dtype,b=t.makeTensorInfo([],x,y.makeZerosTypedArray(1,x)),C=pe({inputs:{x:a},backend:t,attrs:{shape:Array(f.length).fill(1)}}),S=Cm({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 R=new za([u,c],p,h.shape.length,g.shape.length,l,f,x,d);t.runWebGPUProgram(R,[g,h],x,_,S)}break;default:{let R=new za([u,c],p,h.shape.length,b.shape.length,l,f,x,d);t.runWebGPUProgram(R,[b,h],x,_,S)}{let R=new za([u,c],p,h.shape.length,g.shape.length,l,f,x);t.runWebGPUProgram(R,[g,h],x,_,S)}}let $=pe({inputs:{x:S},backend:t,attrs:{shape:i}});return t.disposeData(h.dataId),t.disposeData(g.dataId),t.disposeData(C.dataId),t.disposeData(b.dataId),t.disposeData(S.dataId),$}var RU={kernelName:vs,backendName:\"webgpu\",kernelFunc:Cce};function wce(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=w.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=Hs({inputs:{x:n},backend:t,attrs:{begin:c,size:d}});return c[i]+=m,f})}var DU={kernelName:xa,backendName:\"webgpu\",kernelFunc:wce};var Sce=ye({opType:Z.SQRT}),AU={kernelName:ws,backendName:\"webgpu\",kernelFunc:Sce};var FU={kernelName:qi,backendName:\"webgpu\",kernelFunc:({inputs:r,backend:e})=>{let{x:t}=r,o=e,n=new Jr(t.shape,Z.SQUARE);return o.runWebGPUProgram(n,[t],t.dtype)}};var Ice=et({opType:fe.SQUARED_DIFFERENCE}),PU={kernelName:ks,backendName:\"webgpu\",kernelFunc:Ice};function vce({inputs:r,attrs:e,backend:t}){let{x:o}=r,n=new Jr(o.shape,Z.STEP,\"stepAlpha : f32,\"),s=[{type:\"float32\",data:[e.alpha]}];return t.runWebGPUProgram(n,[o],o.dtype,s)}var OU={kernelName:wo,backendName:\"webgpu\",kernelFunc:vce};var hy=class{constructor(e){this.variableNames=[\"x\"],this.workPerThread=1,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize,[this.workPerThread,1,1]);let t=ft(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 ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n setOutputAtIndex(index, getX(${t}));\n }\n }\n `}};function kce(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:S}=pt.sliceInfo(n.shape,s,a,i,p,u,c,l,m),k;if(h)k=pe({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 _=pt.computeOutShape(b,C,S),$=Hs({inputs:{x:n},backend:t,attrs:{begin:b,size:_}});k=pe({inputs:{x:$},backend:t,attrs:{shape:f}}),t.disposeData($.dataId)}else if(t.shouldExecuteOnCPU([n])){let $=t.readSync(n.dataId),R=me(n.shape,n.dtype,$),D=zz(d,R,S,b);k=t.makeTensorInfo(f,n.dtype,D.values)}else{let $=new hy(d),R=[{type:\"int32\",data:b},{type:\"int32\",data:S}],D=t.runWebGPUProgram($,[n],n.dtype,R);k=pe({inputs:{x:D},backend:t,attrs:{shape:f}}),t.disposeData(D.dataId)}return k}var MU={kernelName:Ns,backendName:\"webgpu\",kernelFunc:kce};function Nce(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]=Vz(m,d,n,s,a,i,p,u);return[t.makeTensorInfo([f.length],\"string\",f),t.makeTensorInfo(l.shape,\"int32\",h)]}var LU={kernelName:Ca,backendName:\"webgpu\",kernelFunc:Nce};var Tce=et({opType:fe.SUB,cpuKernelImpl:Wz,supportsComplex:!0}),BU={kernelName:Ts,backendName:\"webgpu\",kernelFunc:Tce};var _ce=ye({opType:Z.TAN}),zU={kernelName:_s,backendName:\"webgpu\",kernelFunc:_ce};var Ece=ye({opType:Z.TANH}),VU={kernelName:Es,backendName:\"webgpu\",kernelFunc:Ece};function $ce(r){let{inputs:e,backend:t,attrs:o}=r,{tensor:n,indices:s,updates:a}=e,{}=o,{sliceRank:i,numUpdates:p,sliceSize:u,strides:c,outputSize:l}=w.calculateShapes(a,s,n.shape),m=[l/u,u];if(l===0)return t.makeTensorInfo(n.shape,s.dtype);let d=[],f=pe({inputs:{x:s},backend:t,attrs:{shape:[p,i]}});d.push(f);let h=pe({inputs:{x:a},backend:t,attrs:{shape:[p,u]}});d.push(h);let g=pe({inputs:{x:n},backend:t,attrs:{shape:m}});d.push(g);let x=Cm({inputs:{x:g},backend:t,attrs:{reps:Array(m.length).fill(1)}}),b=new za([p,u],i,f.shape.length,h.shape.length,c,m,n.dtype,!1),C=y.sizeFromShape([p,u]),S=[{type:\"int32\",data:[i]},{type:\"int32\",data:c},{type:\"int32\",data:[C]}],k=t.runWebGPUProgram(b,[h,f],g.dtype,S,x);d.push(k);let _=pe({inputs:{x:k},backend:t,attrs:{shape:n.shape}});return d.forEach($=>t.disposeData($.dataId)),_}var WU={kernelName:ds,backendName:\"webgpu\",kernelFunc:$ce};var gy=class{constructor(e){this.variableNames=[\"x\",\"indices\"],this.workgroupSize=[256,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(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 ${G(\"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 `}},xy=class{constructor(e){this.variableNames=[\"x\",\"indices\"],this.workgroupSize=[256,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.uniforms=\"inputSize : i32, firstPass : i32, k : i32,\",this.shaderKey=\"merge\"}getUserCode(){return`\n ${G(\"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 rl(r,e){e!==null&&r.disposeData(e.dataId)}function UU(r){let e=1;for(;ef===null?[l,l]:[l,f],g=(k,_,$)=>{let R=h(),D=new gy($),O=[{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(D,R,\"int32\",O),rl(t,M)};for(let k=1;k=1;$/=2)g(_,$,[c,d])}for(let k=d;k>m;k/=2){let _=h(),$=new xy([c,k/2]),D=[{type:\"int32\",data:[p]},{type:\"int32\",data:[f===null?1:0]},{type:\"int32\",data:[m]}],P=f;f=t.runWebGPUProgram($,_,\"int32\",D),rl(t,P);let O=m/2,M=O*2;for(let L=O;L>=1;L/=2)g(M,L,f.shape)}let x=f;f=Hs({inputs:{x:f},backend:t,attrs:{begin:0,size:[c,s]}}),rl(t,x);let b=c0({inputs:{x:l,indices:f},backend:t,attrs:{axis:1,batchDims:1}});rl(t,l);let C=i.slice(0,-1);C.push(s),x=f,f=pe({inputs:{x:f},attrs:{shape:C},backend:t}),rl(t,x);let S=b;return b=pe({inputs:{x:b},attrs:{shape:C},backend:t}),rl(t,S),[b,f]}var GU={kernelName:$s,backendName:\"webgpu\",kernelFunc:Rce};var yy=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=X(this.outputShape),this.dispatch=H(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 ${G(\"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 Dce(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 yy(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 S=[{type:\"int32\",data:[b]},{type:\"int32\",data:[C]},{type:\"float32\",data:[p]}];return t.runWebGPUProgram(x,[n,s],\"float32\",S)}var HU={kernelName:Rs,backendName:\"webgpu\",kernelFunc:Dce};function Ace(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 KU={kernelName:wa,backendName:\"webgpu\",kernelFunc:Ace};var by=class{constructor(e,t,o){if(this.outputShape=[],this.variableNames=[\"x\",\"segmentIds\"],this.uniforms=\"numSegments : i32, xSize: i32,\",this.workgroupSize=[64,1,1],this.atomic=!0,this.outputShape=t,this.dispatchLayout=X(e),this.dispatch=H(this.dispatchLayout,e,this.workgroupSize),o!==\"float32\"&&o!==\"int32\")throw new Error(`UnsortedSegmentSum only supports float32 and int32\n types, does not support ${o} type.`);this.type=o,this.shaderKey=\"unsortedSegmentSum\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.xSize) {\n let coords = getXCoordsFromIndex(index);\n let b = coords[0];\n let inCol = coords[1];\n\n let segmentId = i32(getSegmentIds(inCol));\n if (segmentId >= 0) {\n let flatIndex = b * uniforms.numSegments + segmentId % uniforms.numSegments;\n let value = getX(b, inCol);\n\n ${Qr(\"&result[flatIndex]\",\"value\",this.type)}\n }\n }\n }\n `}};function Fce(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=w.getAxesPermutation([u],i),l=n;c!=null&&(l=xr({inputs:{x:n},backend:t,attrs:{perm:c}}),p.push(l),u=w.getInnerMostAxes(1,i)[0]);let m=w.segment_util.computeOutShape(l.shape,u,a),d=y.sizeFromShape([l.shape[u]]),f=pe({inputs:{x:l},backend:t,attrs:{shape:[-1,d]}});p.push(f);let h=n.dtype,g=[f.shape[0],a],x=vt({backend:t,attrs:{shape:g,value:0,dtype:h}}),b=new by(f.shape,g,h),C=[{type:\"int32\",data:[a]},{type:\"int32\",data:[y.sizeFromShape(f.shape)]}],S=t.runWebGPUProgram(b,[f,s],h,C,x),k=pe({inputs:{x:S},backend:t,attrs:{shape:m}});p.push(S);let _=k;if(c!=null){p.push(k);let $=w.getUndoAxesPermutation(c);_=xr({inputs:{x:_},backend:t,attrs:{perm:$}})}return p.forEach($=>t.disposeData($.dataId)),_}var qU={kernelName:Qi,backendName:\"webgpu\",kernelFunc:Fce};var Pce=[pz,Kz,qz,jz,Xz,Yz,Zz,Jz,eV,tV,rV,oV,nV,sV,aV,pV,cV,lV,mV,dV,hV,gV,xV,wV,SV,IV,lz,kV,TV,_V,EV,$V,RV,DV,AV,FV,PV,OV,BV,zV,VV,WV,GV,HV,UV,KV,qV,jV,XV,YV,JV,eW,tW,rW,oW,nW,sW,aW,iW,iz,uW,lW,pW,cW,mW,dW,fW,hW,gW,xW,yW,cz,bW,NV,CW,wW,SW,IW,vW,kW,NW,_W,TW,EW,$W,RW,AW,FW,iV,PW,OW,BW,MW,LW,zW,uV,VW,WW,UW,GW,KW,QV,qW,jW,XW,yV,YW,JW,eU,tU,rU,oU,nU,sU,bV,aU,iU,uU,pU,uz,cU,lU,mU,dU,fU,hU,gU,xU,yU,bU,CU,wU,SU,IU,vU,kU,fV,OU,MU,LU,HW,NU,TU,_U,EU,RU,DU,AU,FU,PU,BU,ZV,zU,VU,WU,$U,GU,HU,Qz,KU,qU,QW];for(let r of Pce)ti(r);var jU=\"4.17.0\",Oce=\"4.17.0\",Mce=\"4.17.0\",Lce=\"4.17.0\",Bce=\"4.17.0\",zce=\"4.17.0\",Vce={tfjs:jU,\"tfjs-core\":jU,\"tfjs-converter\":Oce,\"tfjs-backend-cpu\":Mce,\"tfjs-backend-webgl\":Lce,\"tfjs-backend-wasm\":Bce,\"tfjs-backend-webgpu\":zce};var E7t=void 0;export{Xs as Abs,Vo as Acos,Wo as Acosh,Ju as AdadeltaOptimizer,ep as AdagradOptimizer,tp as AdamOptimizer,rp as AdamaxOptimizer,uo as Add,Uo as AddN,Go as All,Ho as Any,Ys as ArgMax,Qs as ArgMin,Ko as Asin,qo as Asinh,jo as Atan,Yo as Atan2,Xo as Atanh,Qo as AvgPool,Zs as AvgPool3D,Ri as AvgPool3DGrad,$i as AvgPoolGrad,pm as BackendWasm,Zo as BatchMatMul,Js as BatchToSpaceND,Jo as Bincount,qa as BitwiseAnd,ea as BroadcastArgs,qce as BroadcastTo,yo as Cast,en as Ceil,bo as ClipByValue,Di as Complex,Ai as ComplexAbs,ta as Concat,tn as Conv2D,Fi as Conv2DBackpropFilter,rn as Conv2DBackpropInput,on as Conv3D,ja as Conv3DBackpropFilterV2,nn as Conv3DBackpropInputV2,sn as Cos,an as Cosh,cn as CropAndResize,un as Cumprod,pn as Cumsum,Bo as DataStorage,ra as DenseBincount,ln as DepthToSpace,mn as DepthwiseConv2dNative,Pi as DepthwiseConv2dNativeBackpropFilter,Oi as DepthwiseConv2dNativeBackpropInput,oa as Diag,dn as Dilation2D,Li as Dilation2DBackpropFilter,Mi as Dilation2DBackpropInput,$u as Draw,nw as ENV,Bi as Einsum,hn as Elu,Xa as EluGrad,dl as Environment,xn as Equal,gn as Erf,yn as Exp,na as ExpandDims,bn as Expm1,zi as FFT,sa as Fill,Cn as FlipLeftRight,wn as Floor,Sn as FloorDiv,Du as FromPixels,In as FusedBatchNorm,Io as FusedConv2D,vo as FusedDepthwiseConv2D,bp as GPGPUContext,vn as GatherNd,aa as GatherV2,Bl as GraphModel,kn as Greater,Nn as GreaterEqual,Vi as IFFT,Co as Identity,Wi as Imag,Tn as IsFinite,_n as IsInf,En as IsNan,ao as KernelBackend,Bn as LRN,Ya as LRNGrad,$n as LeakyRelu,Rn as Less,Dn as LessEqual,An as LinSpace,Fn as Log,Pn as Log1p,jce as LogSoftmax,On as LogicalAnd,Mn as LogicalNot,Ln as LogicalOr,R0 as LogicalXor,Xce as LowerBound,xc as MathBackendCPU,Lc as MathBackendWebGL,Yce as MatrixBandPart,zn as Max,Wn as MaxPool,ia as MaxPool3D,Gi as MaxPool3DGrad,Ui as MaxPoolGrad,ua as MaxPoolWithArgmax,Vn as Maximum,Un as Mean,Gn as Min,Hn as Minimum,Kn as MirrorPad,qn as Mod,op as MomentumOptimizer,jn as Multinomial,Xn as Multiply,pa as Neg,Qn as NonMaxSuppressionV3,Qa as NonMaxSuppressionV4,Zn as NonMaxSuppressionV5,Yn as NotEqual,Nw as OP_SCOPE_SUFFIX,Jn as OneHot,ca as OnesLike,kr as Optimizer,Fl as OptimizerConstructors,la as Pack,es as PadV2,Qce as Pool,ts as Pow,rs as Prelu,os as Prod,np as RMSPropOptimizer,Hp as RaggedGather,Kp as RaggedRange,qp as RaggedTensorToTensor,ma as Range,gw as Rank,Hi as Real,fn as RealDiv,ns as Reciprocal,$t as Reduction,ss as Relu,us as Relu6,da as Reshape,is as ResizeBilinear,Ja as ResizeBilinearGrad,as as ResizeNearestNeighbor,Za as ResizeNearestNeighborGrad,ps as Reverse,Ds as RotateWithOffset,cs as Round,ls as Rsqrt,mi as SGDOptimizer,ms as ScatterNd,fs as SearchSorted,fa as Select,hs as Selu,bs as Sigmoid,ys as Sign,gs as Sin,xs as Sinh,ha as Slice,Is as Softmax,Cs as Softplus,ga as SpaceToBatchND,Ki as SparseFillEmptyRows,ei as SparseReshape,ya as SparseSegmentMean,ba as SparseSegmentSum,vs as SparseToDense,xa as SplitV,ws as Sqrt,qi as Square,ks as SquaredDifference,Ru as StaticRegexReplace,wo as Step,Ns as StridedSlice,Ca as StringNGrams,ji as StringSplit,Xi as StringToHashBucketFast,Ts as Sub,Ss as Sum,_s as Tan,Es as Tanh,mt as Tensor,tt as TensorBuffer,ds as TensorScatterUpdate,po as Tile,$s as TopK,Rs as Transform,co as Transpose,Yi as Unique,wa as Unpack,Qi as UnsortedSegmentSum,Zce as UpperBound,ri as Variable,jc as WebGPUBackend,Sa as ZerosLike,So as _FusedMatMul,Qt as abs,Rk as acos,Dk as acosh,Ce as add,Ak as addN,Fk as all,Pk as any,Ok as argMax,Mk as argMin,Lk as asin,Bk as asinh,zk as atan,Vk as atan2,Wk as atanh,dd as avgPool,Hk as avgPool3d,ak as backend,w as backend_util,Kk as basicLSTMCell,nu as batchNorm,jk as batchNorm2d,Xk as batchNorm3d,Yk as batchNorm4d,fd as batchToSpaceND,hd as bincount,Qk as bitwiseAnd,L6 as booleanMaskAsync,Zk as broadcastArgs,su as broadcastTo,Sr as broadcast_util,cT as browser,me as buffer,Ue as cast,Jk as ceil,e2 as clipByValue,Ur as clone,Er as complex,yt as concat,t2 as concat1d,r2 as concat2d,o2 as concat3d,n2 as concat4d,s2 as conv1d,au as conv2d,a2 as conv2dTranspose,i2 as conv3d,p2 as conv3dTranspose,ale as copyRegisteredKernels,c2 as cos,l2 as cosh,$l as cosineWindow,m2 as cumprod,d2 as cumsum,Ir as customGrad,f2 as denseBincount,Tw as deprecationWarn,h2 as depthToSpace,sc as depthwiseConv2d,V5 as deregisterOp,eu as device_util,g2 as diag,x2 as dilation2d,xme as disableDeprecationWarnings,Ot as dispose,yme as disposeVariables,je as div,b2 as divNoNan,C2 as dot,Y6 as dropout,iu as einsum,bd as elu,gme as enableDebugMode,hme as enableProdMode,Zw as enclosingPowerOfTwo,ur as engine,w2 as ensureShape,A as env,yd as equal,S2 as erf,k2 as euclideanNorm,_o as exp,Ms as expandDims,N2 as expm1,Cd as eye,uc as fft,$a as fill,kme as findBackend,Nme as findBackendFactory,wd as floor,md as floorDiv,GD as forceHalfFloat,Jw as fused,Sd as gather,j6 as gatherND,af as gather_util,sk as getBackend,iw as getGradient,Xp as getKernel,Ym as getKernelsForBackend,aae as getThreadsCount,mv as gpgpu_util,VK as grad,WK as grads,Wu as greater,Id as greaterEqual,ju as ifft,pu as imag,eX as image,Z6 as inTopKAsync,di as io,Hd as irfft,T2 as isFinite,_2 as isInf,E2 as isNaN,$r as keep,Vt as kernel_impls,vd as leakyRelu,Tl as less,ac as lessEqual,tX as linalg,$2 as linspace,M8 as loadGraphModel,L8 as loadGraphModelSync,R2 as localResponseNormalization,pi as log,kd as log1p,D2 as logSigmoid,A2 as logSoftmax,_d as logSumExp,Uu as logicalAnd,Ed as logicalNot,$d as logicalOr,F2 as logicalXor,rX as losses,P2 as lowerBound,Ze as matMul,aT as math,Ra as max,Dd as maxPool,O2 as maxPool3d,M2 as maxPoolWithArgmax,Ad as maximum,Gu as mean,bme as memory,L2 as meshgrid,Nl as min,Hu as minimum,B2 as mirrorPad,z2 as mod,V2 as moments,V6 as movingAverage,se as mul,W2 as multiRNNCell,U2 as multinomial,pr as neg,cS as nextFrame,E7t as node,Vu as norm,Fd as notEqual,El as oneHot,Da as ones,G2 as onesLike,N as op,H2 as outerProduct,Aa as pad,K2 as pad1d,q2 as pad2d,j2 as pad3d,X2 as pad4d,Y2 as pool,ui as pow,Od as prelu,ld as print,Q2 as prod,Cme as profile,Z2 as raggedGather,J2 as raggedRange,e1 as raggedTensorToTensor,t1 as rand,S1 as randomGamma,Wd as randomNormal,I1 as randomStandardNormal,ic as randomUniform,v1 as randomUniformInt,cu as range,Ime as ready,ci as real,k1 as reciprocal,tu as registerBackend,ole as registerGradient,ti as registerKernel,z5 as registerOp,lu as relu,Ud as relu6,vme as removeBackend,W as reshape,mo as reverse,N1 as reverse1d,T1 as reverse2d,_1 as reverse3d,E1 as reverse4d,pc as rfft,Gd as round,$1 as rsqrt,ke as scalar,U6 as scatterND,du as scatter_util,_l as searchSorted,R1 as selu,D1 as separableConv2d,jN as serialization,Sme as setBackend,Tme as setPlatform,sae as setThreadsCount,oae as setWasmPath,nae as setWasmPaths,NI as setWebGLContext,A1 as setdiff1dAsync,Ic as shared,Ea as sigmoid,F1 as sign,Jj as signal,P1 as sin,O1 as sinh,Xe as slice,M1 as slice1d,L1 as slice2d,B1 as slice3d,z1 as slice4d,pt as slice_util,V1 as softmax,Td as softplus,Pd as spaceToBatchND,oX as sparse,K6 as sparseToDense,Zj as spectral,li as split,Rr as sqrt,Zt as square,Kd as squaredDifference,cc as squeeze,vr as stack,qd as step,W1 as stridedSlice,nX as string,Te as sub,ot as sum,oi as sumOutType,U1 as tan,kl as tanh,ar as tensor,Jt as tensor1d,mu as tensor2d,jd as tensor3d,G1 as tensor4d,H1 as tensor5d,K1 as tensor6d,j1 as tensorScatterUpdate,rk as tensor_util,w1 as test_util,De as tidy,uu as tile,wme as time,X1 as topk,OGe as train,mc as transpose,Y1 as truncatedNormal,Q1 as unique,sle as unregisterGradient,nle as unregisterKernel,Z1 as unsortedSegmentSum,fo as unstack,dt as upcastType,J1 as upperBound,y as util,UK as valueAndGrad,GK as valueAndGrads,eN as variable,Vw as variableGrads,Vce as version,z8 as version_converter,OX as version_core,yY as version_cpu,iae as version_wasm,d9 as version_webgl,$at as webgl,Ec as webgl_util,Zv as webgpu_util,lo as where,Yd as whereAsync,Gr 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 size in pixels of a detected face box before resutls are discared */\n minSize: number,\n /** minimum overlap between two detected faces before one is discarded */\n iouThreshold: number,\n /** how much should face box be enlarged over the min/max facial coordinates */\n scale: 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 /** how much should iris box be enlarged over the min/max iris coordinates */\n scale: number,\n}\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: false,\n maxDetected: 1,\n skipFrames: 99,\n skipTime: 2500,\n minConfidence: 0.2,\n minSize: 0,\n iouThreshold: 0.1,\n scale: 1.4,\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 scale: 2.3,\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-lite.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 '../tfjs/types';\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, stack]);\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; // eslint-disable-line @typescript-eslint/no-redundant-type-constituents\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') {\n c = document.createElement('canvas');\n c.width = width;\n c.height = height;\n } else if (typeof navigator !== 'undefined' && navigator.product === 'ReactNative') {\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 react-native without canvas support installed');\n } else {\n throw new Error('canvas error: attempted to run in browser but DOM is not defined');\n }\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 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 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\n /** MonkeyPatch for Canvas/Image/ImageData */\n #canvas: undefined;\n #image: undefined;\n #imageData: undefined;\n\n get Canvas() { return this.#canvas; }\n set Canvas(val) { this.#canvas = val; globalThis.Canvas = val; }\n get Image() { return this.#image; }\n // @ts-ignore monkey-patch;\n set Image(val) { this.#image = val; globalThis.Image = val; }\n get ImageData() { return this.#imageData; }\n // @ts-ignore monkey-patch;\n set ImageData(val) { this.#imageData = val; globalThis.ImageData = val; }\n\n constructor() {\n this.browser = (typeof navigator !== 'undefined') && (typeof navigator.appVersion !== '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') && (typeof navigator.userAgent !== 'undefined')) { // TBD replace with navigator.userAgentData once in mainline\n const agent = navigator.userAgent || '';\n const raw = agent.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 = agent.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 !== 'undefined' && 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 `webcam error: cannot get dom element: ${webcamConfig.element}`;\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 `webcam error: unknown dom element: ${webcamConfig.element}`;\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 },\n };\n if (this.config?.width > 0) (requestedConstraints.video as MediaTrackConstraints).width = { ideal: this.config.width };\n if (this.config?.height > 0) (requestedConstraints.video as MediaTrackConstraints).height = { ideal: this.config.height };\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 error', 'no devices');\n return 'webcam error: no devices';\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 `webcam error: ${err}`;\n }\n if (!this.stream) {\n if (this.config.debug) log('webcam error', 'no stream');\n return 'webcam error no stream';\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 return `webcam: ${this.label}`;\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", "{\n \"antispoof\": 853098,\n \"blazeface\": 538928,\n \"centernet\": 4030290,\n \"emotion\": 820516,\n \"facemesh\": 1477958,\n \"faceres\": 6978814,\n \"handlandmark-lite\": 2023432,\n \"handtrack\": 2964837,\n \"iris\": 2599092,\n \"liveness\": 592976,\n \"models\": 0,\n \"movenet-lightning\": 4650216,\n \"affectnet-mobilenet\": 6920630,\n \"age\": 161240,\n \"blazeface-back\": 538928,\n \"blazeface-front\": 402048,\n \"blazepose-detector\": 5928856,\n \"blazepose-full\": 6339202,\n \"blazepose-heavy\": 27502466,\n \"blazepose-lite\": 2726402,\n \"efficientpose\": 5651240,\n \"faceboxes\": 2013002,\n \"facemesh-attention-pinto\": 2387598,\n \"facemesh-attention\": 2382414,\n \"facemesh-detection-full\": 1026192,\n \"facemesh-detection-short\": 201268,\n \"faceres-deep\": 13957620,\n \"gear-e1\": 112438,\n \"gear-e2\": 112438,\n \"gear\": 1498916,\n \"gender-ssrnet-imdb\": 161236,\n \"gender\": 201808,\n \"handdetect\": 3515612,\n \"handlandmark-full\": 5431368,\n \"handlandmark-sparse\": 5286322,\n \"handskeleton\": 5502280,\n \"meet\": 372228,\n \"mobileface\": 2183192,\n \"mobilefacenet\": 5171976,\n \"movenet-multipose\": 9448838,\n \"movenet-thunder\": 12477112,\n \"nanodet\": 7574558,\n \"posenet\": 5032780,\n \"rvm\": 3739355,\n \"selfie\": 212886,\n \"anti-spoofing\": 853098,\n \"efficientpose-i-lite\": 2269064,\n \"efficientpose-ii-lite\": 5651240,\n \"efficientpose-iv\": 25643252,\n \"insightface-efficientnet-b0\": 13013224,\n \"insightface-ghostnet-strides1\": 8093408,\n \"insightface-ghostnet-strides2\": 8049584,\n \"insightface-mobilenet-emore\": 6938536,\n \"insightface-mobilenet-swish\": 12168584,\n \"nanodet-e\": 12319156,\n \"nanodet-g\": 7574558,\n \"nanodet-m\": 1887474,\n \"nanodet-t\": 5294216\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", "{\n \"name\": \"@vladmandic/human\",\n \"version\": \"3.2.2\",\n \"description\": \"Human: AI-powered 3D Face Detection & Rotation Tracking, Face Description & Recognition, Body Pose Tracking, 3D Hand & Finger Tracking, Iris Analysis, Age & Gender & Emotion Prediction, Gesture Recognition\",\n \"sideEffects\": false,\n \"main\": \"dist/human.node.js\",\n \"module\": \"dist/human.esm.js\",\n \"browser\": \"dist/human.esm.js\",\n \"types\": \"types/human.d.ts\",\n \"exports\": {\n \"node\": {\n \"require\": \"./dist/human.node.js\",\n \"import\": \"./dist/human.node.js\",\n \"module\": \"./dist/human.node.js\"\n },\n \"require\": \"./dist/human.node.js\",\n \"import\": \"./dist/human.esm.js\",\n \"script\": \"./dist/human.js\",\n \"module\": \"./dist/human.esm.js\",\n \"types\": \"./types/human.d.ts\",\n \"dist/human\": \"./dist/human.js\",\n \"dist/human.js\": \"./dist/human.js\",\n \"dist/human.esm\": \"./dist/human.esm.js\",\n \"dist/human.esm.js\": \"./dist/human.esm.js\",\n \"dist/human.esm-nobundle\": \"./dist/human.esm-nobundle.js\",\n \"dist/human.esm-nobundle.js\": \"./dist/human.esm-nobundle.js\",\n \"dist/human.node\": \"./dist/human.node.js\",\n \"dist/human.node.js\": \"./dist/human.node.js\",\n \"dist/human.node-wasm\": \"./dist/human.node-wasm.js\",\n \"dist/human.node-wasm.js\": \"./dist/human.node-wasm.js\",\n \"dist/human.node-gpu\": \"./dist/human.node-gpu.js\",\n \"dist/human.node-gpu.js\": \"./dist/human.node-gpu.js\"\n },\n \"author\": \"Vladimir Mandic \",\n \"bugs\": {\n \"url\": \"https://github.com/vladmandic/human/issues\"\n },\n \"homepage\": \"https://vladmandic.github.io/human/demo/index.html\",\n \"license\": \"MIT\",\n \"engines\": {\n \"node\": \">=14.0.0\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/vladmandic/human.git\"\n },\n \"scripts\": {\n \"start\": \"node --no-warnings demo/nodejs/node.js\",\n \"dev\": \"build --profile development\",\n \"clean\": \"build --profile clean\",\n \"build\": \"rimraf test/build.log && node build.js\",\n \"test\": \"node --no-warnings --unhandled-rejections=strict --trace-uncaught test/node.js\",\n \"lint\": \"eslint *.json *.js src demo test models wiki\",\n \"scan\": \"npx auditjs@latest ossi --dev --quiet\"\n },\n \"keywords\": [\n \"human\",\n \"human-library\",\n \"face-detection\",\n \"faceid\",\n \"face-geometry\",\n \"face-embedding\",\n \"face-recognition\",\n \"face-description\",\n \"face-matching\",\n \"body-tracking\",\n \"body-segmentation\",\n \"hand-tracking\",\n \"iris-tracking\",\n \"age-estimation\",\n \"emotion-detection\",\n \"gender-prediction\",\n \"gesture-recognition\",\n \"gaze-tracking\",\n \"age-gender\",\n \"tensorflowjs\",\n \"tfjs\",\n \"tensorflow\"\n ],\n \"devDependencies\": {\n \"@html-eslint/eslint-plugin\": \"^0.24.1\",\n \"@html-eslint/parser\": \"^0.24.1\",\n \"@microsoft/api-extractor\": \"^7.43.1\",\n \"@tensorflow/tfjs-backend-cpu\": \"^4.17.0\",\n \"@tensorflow/tfjs-backend-wasm\": \"^4.17.0\",\n \"@tensorflow/tfjs-backend-webgl\": \"^4.17.0\",\n \"@tensorflow/tfjs-backend-webgpu\": \"4.17.0\",\n \"@tensorflow/tfjs-converter\": \"^4.17.0\",\n \"@tensorflow/tfjs-core\": \"^4.17.0\",\n \"@tensorflow/tfjs-data\": \"^4.17.0\",\n \"@tensorflow/tfjs-layers\": \"^4.17.0\",\n \"@tensorflow/tfjs-node\": \"^4.17.0\",\n \"@tensorflow/tfjs-node-gpu\": \"^4.17.0\",\n \"@types/emscripten\": \"^1.39.10\",\n \"@types/node\": \"^20.12.7\",\n \"@types/offscreencanvas\": \"^2019.7.3\",\n \"@typescript-eslint/eslint-plugin\": \"^7.7.0\",\n \"@typescript-eslint/parser\": \"^7.7.0\",\n \"@vladmandic/build\": \"^0.9.3\",\n \"@vladmandic/pilogger\": \"^0.4.9\",\n \"@vladmandic/tfjs\": \"github:vladmandic/tfjs\",\n \"canvas\": \"^2.11.2\",\n \"esbuild\": \"^0.20.2\",\n \"eslint\": \"9.0.0\",\n \"eslint-config-airbnb-base\": \"^15.0.0\",\n \"eslint-plugin-html\": \"^8.1.0\",\n \"eslint-plugin-import\": \"^2.29.1\",\n \"eslint-plugin-json\": \"^3.1.0\",\n \"eslint-plugin-markdown\": \"^4.0.1\",\n \"eslint-plugin-node\": \"^11.1.0\",\n \"eslint-plugin-promise\": \"^6.1.1\",\n \"rimraf\": \"^5.0.5\",\n \"tslib\": \"^2.6.2\",\n \"typedoc\": \"0.25.13\",\n \"typescript\": \"~5.4.5\"\n }\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.tensorflow?.version) 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 if (typeof navigator !== 'undefined' && navigator?.userAgent?.toLowerCase().includes('electron')) {\n if (instance.config.debug) log('running inside electron');\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 // force browser vs node backend\n if (env.browser && !env.node && (instance.config.backend === 'tensorflow') && available.includes('webgl')) {\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 && !env.browser && (instance.config.backend === 'webgl' || instance.config.backend === 'humangl') && available.includes('tensorflow')) {\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 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', { willReadFrequently: true });\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 l = replace(l, '[id]', f.id.toFixed(0));\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) {\n if (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 } else {\n for (const [k, v] of Object.entries(f?.annotations || {})) {\n if (!v?.[0]) continue;\n const pt = v[0];\n point(ctx, pt[0], pt[1], 0, localOptions);\n if (localOptions.drawLabels) labels(ctx, k, pt[0], pt[1], 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, '[id]', result[i].id.toFixed(0));\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, '[id]', h.id.toFixed(0));\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, '[id]', h.id.toFixed(0));\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 // @ts-ignore model signature properties are not typed and inputs are unreliable for this model\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 // @ts-ignore model signature properties are not typed and inputs are unreliable for this model\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 // @ts-ignore model signature properties are not typed and inputs are unreliable for this model\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, anchor) => {\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 // const centerPoint = [(startPoint[0] + endPoint[0]) / 2, (startPoint[1] + endPoint[1]) / 2];\n const landmarks = box.landmarks.map((pt) => [(pt[0] + anchor[0]) * factor[0], (pt[1] + anchor[1]) * factor[1]]);\n /**\n face.mesh = box.landmarks.map((pt) => [\n ((box.startPoint[0] + box.endPoint[0]) / 2) + (pt[0] * input.shape[2] / blazeface.size()),\n ((box.startPoint[1] + box.endPoint[1]) / 2) + (pt[1] * input.shape[1] / blazeface.size()),\n ]);\n */\n\n return { startPoint, endPoint, 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 {\n startPoint: [center[0] - halfSize[0], center[1] - halfSize[1]] as Point,\n endPoint: [center[0] + halfSize[0], center[1] + halfSize[1]] as Point,\n landmarks: box.landmarks,\n confidence: box.confidence,\n size,\n };\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 {\n startPoint: [Math.round(centers[0] - halfSize), Math.round(centers[1] - halfSize)] as Point,\n endPoint: [Math.round(centers[0] + halfSize), Math.round(centers[1] + halfSize)] as Point,\n landmarks: box.landmarks,\n confidence: box.confidence,\n size: [Math.round(size[0]), Math.round(size[1])] as [number, number],\n };\n};\n\nexport const calculateLandmarksBoundingBox = (landmarks) => {\n const x = landmarks.map((d) => d[0]);\n const y = landmarks.map((d) => d[1]);\n return {\n startPoint: [Math.min(...x), Math.min(...y)] as Point,\n endPoint: [Math.max(...x), Math.max(...y)] as Point,\n landmarks,\n };\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;\nlet model: GraphModel | null;\nlet anchors: Tensor | null = null;\nlet inputSize = 0;\nlet inputSizeT: Tensor | null = null;\n\nexport interface DetectBox { startPoint: Point, endPoint: Point, landmarks: Point[], confidence: number, size: [number, 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): Promise {\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.tf1);\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\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 b.anchor = tf.slice(anchors as Tensor, [nms[i], 0], [1, 2]);\n const anchor = await b.anchor.data();\n const scaledBox = util.scaleBoxCoordinates(rawBox, [(inputImage.shape[2] || 0) / inputSize, (inputImage.shape[1] || 0) / inputSize], anchor);\n const enlargedBox = util.enlargeBox(scaledBox, config.face.detector?.scale || 1.4);\n const squaredBox = util.squarifyBox(enlargedBox);\n if (squaredBox.size[0] > (config.face.detector?.['minSize'] || 0) && squaredBox.size[1] > (config.face.detector?.['minSize'] || 0)) 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 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, scale = 2.3) => {\n const box = util.squarifyBox(util.enlargeBox(util.calculateLandmarksBoundingBox([rawCoords[eyeInnerCornerIndex], rawCoords[eyeOuterCornerIndex]]), scale));\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, config: Config) {\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, config.face.iris?.scale || 2.3);\n const { box: rightEyeBox, boxSize: rightEyeBoxSize, crop: rightEyeCrop } = getEyeBox(rawCoords, face, eyeLandmarks.rightBounds[0], eyeLandmarks.rightBounds[1], meshSize, true, config.face.iris?.scale || 2.3);\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';\nimport type { DetectBox } from './blazeface';\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 // 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 size: [0, 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 || !model?.['executor']) { // mesh not enabled or not loaded, 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.size = box.size;\n face.mesh = box.landmarks;\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)) face.annotations[key] = [face.mesh[coords.blazeFaceLandmarks[key] as number]]; // add annotations\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.size = box.size;\n face.score = face.boxScore;\n face.mesh = box.landmarks;\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, config); // 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 = {\n ...util.calculateFaceBox(face.mesh, box),\n confidence: box.confidence,\n landmarks: box.landmarks,\n size: box.size,\n };\n face.box = util.clampBox(calculatedBox, input);\n face.boxRaw = util.getRawBox(calculatedBox, input);\n face.size = calculatedBox.size;\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\nlet annotations: string[] = [];\nlet model: GraphModel | null;\nconst last: { score: number, emotion: Emotion }[][] = [];\nlet lastCount = 0;\nlet lastTime = 0;\nlet skipped = Number.MAX_SAFE_INTEGER;\nlet rgb = false;\n\nexport async function load(config: Config): Promise {\n if (env.initial) model = null;\n if (!model) {\n model = await loadModel(config.face.emotion?.modelPath);\n rgb = model?.inputs?.[0].shape?.[3] === 3;\n if (!rgb) annotations = ['angry', 'disgust', 'fear', 'happy', 'sad', 'surprise', 'neutral']; // oarriaga and gear\n else annotations = ['angry', 'disgust', 'fear', 'happy', 'neutral', 'sad', 'surprise']; // affectnet\n } else if (config.debug) {\n log('cached model:', model['modelUrl']);\n }\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 if (config.face.emotion?.['crop'] > 0) { // optional crop\n const crop = config.face.emotion?.['crop'];\n const box = [[crop, crop, 1 - crop, 1 - crop]];\n t.resize = tf.image.cropAndResize(image, box, [0], [inputSize, inputSize]);\n } else {\n t.resize = tf.image.resizeBilinear(image, [inputSize, inputSize], false);\n }\n if (rgb) {\n t.mul = tf.mul(t.resize, 255);\n t.normalize = tf.sub(t.mul, [103.939, 116.779, 123.68]); // affectnet uses specific norm values\n t.emotion = model?.execute(t.normalize) as Tensor; // result is already in range 0..1, no need for additional activation\n } else {\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 }\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, config: Config): 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 let crop: Tensor;\n if (config.face.description?.['crop'] > 0) { // optional crop\n const cropval = config.face.description?.['crop'];\n const box = [[cropval, cropval, 1 - cropval, 1 - cropval]];\n crop = tf.image.cropAndResize(tensor, box, [0], [model.inputs[0].shape[2], model.inputs[0].shape[1]]);\n } else {\n crop = tf.image.resizeBilinear(tensor, [model.inputs[0].shape[2], model.inputs[0].shape[1]], false);\n }\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, config);\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 let box = [[0.0, 0.10, 0.90, 0.90]]; // empyrical values for top, left, bottom, right\n if (config.face.gear?.['crop'] > 0) { // optional crop config value\n const crop = config.face.gear?.['crop'];\n box = [[crop, crop, 1 - crop, 1 - crop]];\n }\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 if (config.face['ssrnet']?.['crop'] > 0) { // optional crop\n const crop = config.face['ssrnet']?.['crop'];\n const box = [[crop, crop, 1 - crop, 1 - crop]];\n t.resize = tf.image.cropAndResize(image, box, [0], [model.inputs[0].shape[2], model.inputs[0].shape[1]]);\n } else {\n t.resize = tf.image.resizeBilinear(image, [model.inputs[0].shape[2], model.inputs[0].shape[1]], false);\n }\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 if (config.face['ssrnet']?.['crop'] > 0) { // optional crop\n const crop = config.face['ssrnet']?.['crop'];\n const box = [[crop, crop, 1 - crop, 1 - crop]];\n t.resize = tf.image.cropAndResize(image, box, [0], [model.inputs[0].shape[2], model.inputs[0].shape[1]]);\n } else {\n t.resize = tf.image.resizeBilinear(image, [model.inputs[0].shape[2], model.inputs[0].shape[1]], false);\n }\n t.enhance = tf.tidy(() => {\n let normalize: Tensor;\n if (model?.inputs?.[0].shape?.[3] === 1) {\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 normalize = tf.mul(tf.sub(grayscale, constants.tf05), 2); // range grayscale:-1..1\n } else {\n normalize = tf.mul(tf.sub(t.resize, constants.tf05), 2); // range rgb:-1..1\n }\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?.leftEyeIris || !f?.rightEyeIris) 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?.leftEyeIris || !f?.rightEyeIris) 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 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 (rightIrisCenterX > 0.04) gestures.push({ iris: i, gesture: 'looking right' });\n } else {\n if (leftIrisCenterX > 0.04) 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 this.skipped++;\n } else {\n boxes = await this.handDetector.predict(image, config);\n this.skipped = 0;\n }\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 function initPipeline() {\n const handDetector = handDetectorModel ? new handdetector.HandDetector(handDetectorModel) : undefined;\n if (handDetector && handPoseModel) handPipeline = new handpipeline.HandPipeline(handDetector, handPoseModel);\n}\n\nexport async function predict(input: Tensor, config: Config): Promise {\n if (!handPipeline) initPipeline();\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 loadDetect(config: Config): Promise {\n if (env.initial) handDetectorModel = null;\n if (!handDetectorModel) handDetectorModel = await loadModel(config.hand.detector?.modelPath);\n else if (config.debug) log('cached model:', handDetectorModel['modelUrl']);\n return handDetectorModel;\n}\n\nexport async function loadSkeleton(config: Config): Promise {\n if (env.initial) handPoseModel = null;\n if (!handPoseModel) handPoseModel = await loadModel(config.hand.skeleton?.modelPath);\n else if (config.debug) log('cached model:', handPoseModel['modelUrl']);\n return 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 // @ts-ignore model signature properties are not typed and inputs are unreliable for this model\n inputSize[0][0] = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[1].size) : 0;\n // @ts-ignore model signature properties are not typed and inputs are unreliable for this model\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 // @ts-ignore model signature properties are not typed and inputs are unreliable for this model\n inputSize[1][0] = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[1].size) : 0;\n // @ts-ignore model signature properties are not typed and inputs are unreliable for this model\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 box size */\n size: [number, number],\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, FaceLandmark } 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 let annotations: Record = newResult.face[i].annotations;\n if (Object.keys(bufferedResult.face[i].annotations).length !== Object.keys(newResult.face[i].annotations).length) {\n bufferedResult.face[i].annotations = newResult.face[i].annotations; // reset annotations as previous frame did not have them\n annotations = bufferedResult.face[i].annotations;\n } else if (newResult.face[i].annotations) {\n for (const key of Object.keys(newResult.face[i].annotations)) { // update annotations\n annotations[key] = newResult.face[i]?.annotations?.[key]?.[0]\n ? newResult.face[i].annotations[key]\n .map((val, j: number) => val\n .map((coord: number, k: number) => ((bufferedFactor - 1) * bufferedResult.face[i].annotations[key][j][k] + coord) / bufferedFactor))\n : null;\n }\n }\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, annotations }; // shallow clone plus updated values\n } else {\n bufferedResult.face[i] = { ...newResult.face[i], box, boxRaw, annotations }; // 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 if (this.instance.config.hand.enabled && !this.models.handdetect && this.instance.config.hand.detector?.modelPath?.includes('handdetect')) {\n m.handdetect = handpose.loadDetect(this.instance.config);\n m.handskeleton = handpose.loadSkeleton(this.instance.config);\n }\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 for (const [model, promise] of Object.entries(m)) {\n if (promise?.['then']) promise['then']((val) => this.models[model] = val);\n }\n await Promise.all(Object.values(m)); // wait so this function does not resolve prematurely\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 // @ts-ignore private property\n if (tf.env().flagRegistry.WEBGL_USE_SHAPES_UNIFORMS) tf.env().set('WEBGL_USE_SHAPES_UNIFORMS', false); // default=false \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 boxScore = Math.round(100 * kpt[51 + 4]) / 100;\n if (boxScore > 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 boxNorm: 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 const body: BodyResult = { id, score: boxScore, box: boxNorm, 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 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 // @ts-ignore model signature properties are not typed and inputs are unreliable for this model\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\nCvLhho3rN9RWs9Z23n5y6O21YhrVYbdGOCfrrLPJRpv863zVS6FS09SvZj3lVZZRdPSqmnSWdrIE\nebOkK4ldTsgW1WKqd1oMZhEVZyRAImOjGI6rJ7IiATNd46qL02bHkiaxaoNGY2n4ImPgtyV2n0Vo\nGvlx7x2beiyTk08RPevSVUxux00+Fn2n7N+n5rRFb4AAAAAAAAAAAAAAACLVres1tETWekxKQHlu\nL8InR2nPp43wz3j8P/s5dLveWrFqzW0bxPeJeV4xwmdFec+CJnDM9Y/CrY1xv8qvTZ+WYdbDk5oh\n5zHk283U0eo3jaZZ2N5XYjrCnLSJhOK+8d1kxvCqzSwZvousrb7k9LfJ3nB1OLeJdLhufx9LEWn3\n6e7LXN9Ofy5/W4AuxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAETaKxMzO0Qi9646Ta07RDmZ9VbPbaOlI7Qi3i+c3TPUaqcu9adKfy0722ZXvFa9\nXO1OrjrESxt66ZJmcjPUanlidmhkzTZVfLN5VWvsC2b7R3U3yqrZZtO1esz2h2+F+zWTUcuXXTNM\nfeKR3n5+iZLVbqRzNJo9TxHLyaekz62ntD1fDOA6fQbZL7Zc/wCKY6R8odLBgxabFGPDSKUjyiFj\nSZkYa3aALKAAAAAAAAAAAAAADQ4pl2pTFH3p3n5Q33E12Tn1eSfKscsLZ+orS00eJqbW+Lfnu1tF\nXaJnZsz3WpCfsyp00fWSvmPdVYOmSUDd8kR3InoQosy7JmUX7MdwZ17ro7KKT1XRPRAsrO0rYndr\n79V1ZBaQiJ6JgCSIJASwrO07MpV2nqBlrv1a1o2bf2qtfLXaQUTO0sb05o3jv3ZXhjS20xEphW5h\nyeJjjf7UdJWNKLziyRePsz0lux1SgAQAAAAAAAAAAAAAADG9K5KTS8Rato2mJZAPIcU4ZbQZuekT\nOC3afT4NXFkmlntc2GmoxWx5K71tG0vHa/RX0GpmlutJ61t6wrY2xr8dXS5uesN+tt4ef0eaa223\n2dnHk3juyreM81OaFGiy/RtZET9jJ7s/2bdutd2jqKeic3iNTsd8a2h1H0jTVtP2o6W+bZbOO+gA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABje9cdJt\nadohGTLXFTmvO0fy52bJfU23t0pHaqLeL5xdK9Rnvqb+cUjtCi94xxvK3JetKuHrdZvaa1ljb10y\ncnIs1Wt3naJc++TmVWvMz1YWybfMGdsm3eWek0mo4jm8PT0mfW3lDf4V7P5tdMZdRviwfvZ6/TaX\nDpMMYsFIpWPTzXmf+steT8jn8L4Dp+HxF77Zc/4pjpHydYGjC3oAAAAAAAAAAAAAAAAADG9opS1p\n7RG7zszN6WtPe0zLua+3Joss/wBOzhzG2OsL5+IrY09dsSyYRijbHEMvOChb7KjF0yS2LQ169Mso\nS24noyrPVXWejNVKbTuw3T3REdQWU6LYlVvsyiUDPfqupPRr79VuOQX1lZEqoZxIMksd0gT2VT0l\nbPZVbuCaW8i8bwr32WxbcGnkjaZa9p2ndv5qbw5+aNugLItF6TEtvTX5sMb969HMpfazc0d9stqe\nvVZDdAQAAAAAAAAAAAAAAAADV1+iprtPOO/2u9bektoB4TJTJpNRbHkja1Z6uto8viVht+0HDvpG\nH6Tjj6zHHvbecONw7Ltfkmeqmo6Ma69DXbbZTkr1mGWO3RneOaGbZRoM30fVzSelMnT83aef1FZ7\nx3h1tBqfpGnjmn369LNc3sc3kzy9bQCzIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAa+q1dNNXr7157VhGp1Xh70x+9f9ocy283m1p5rz3mVbrjXHjt91lz\n5c9+fJ1nyjyhdM8lZlOOIiqrUXikd+kMreunnI5XEdX4dZiZcG+XmtNl/F83PeeWWHDOGanieSKY\nq+5H2rz2hMzWd1Iqx1yajJXHhrNrW6REeb1nCPZumn2z62Ivl7xTyr/6uhwzhGn4Zj2xxzZJ+1kn\nvLoNJnjHW7TbbsAszAAAAAAAAAAAAAAAAAAAAaPFrbaSK/itEOXt0rDf4xb/ACa/GZacRvaF58Q2\nIjasQnzPIhCU92tMbZGzHmotG10C6nZkwpPRmipIllEbMIZIE7solgmJBnCyk9VMM6z1BtVllEqK\nz0WRILYlluriWcSDJVbusV27gwInaSWM9ECyZ3hqamnSWxFmOSOaqRx725bNnSZNs9J+OynVY+WZ\nYYr7TE+nVaIr0Ais81Yn1hKAAAAAAAAAAAAAAAAAABExvG09peU4nov9n66L0j6q/WPg9Y1OJaON\nZpL0+9HWs/EWzeVz9PbmrEtnyc3h9reHy26TWdnSr2YX6657ijLXpLX0+onSamL/AHJ6W+Tbv2aW\nekTv16JzeI1Ox6KJiYiY7Slz+E6jxdN4dp3vj6fl5Og2clnKACAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACZ2jeQRMxEbzO0Q08uqtkma4ulfO3r8lefUePMxWf\ncjy9WvlzVxV6T1Z61/x0Y8f7Wc7Ur1lqVy+LqOWJ2hp6rXddon5rOF1tfmz5OkT0qzb8dWbxjp1c\nbiuuilJ5Z6r+IcQrixzEy8zl1E6rNt1tMztFY81sztU1eRucN4ffi2p5esRM72n0h7rS6XFo8FcO\nCkVpX082nwXh3+z9FWLxHi36328vg6TZyW9ABAAAAAAAAAAAAAAAAAAAAAADj8Unm1tK/hqppHvw\ny1k8/EMk+m0GOPeafiFpCZYwolnXspvHvLa9mF46gmnZmwozRUiUCBKYYsoBLOFbKAX0llEqqyzi\nQXRLOJVRLOOwLIljZMEgrlhKyYYTAK5nZPN0RZjugUanHzVlz6xtLq361c+9eXItPpXX0dubTU+E\nbL2lw2++O1fSW6m/VYAISAAAAAAAAAAAAAAAAAp1GbwcfTreelYEydcuMcRrM/L9nnlsV6wqpi2r\ntv133mfWVkRyRtEdGFva7MzkYZNoamWN4bV4mYa9qztKIujhVppxGI8r1mJegeZpknBqKZY+7L0t\nLRekWrO8TG8Ns/HJ5ZypAWZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAADS12fp4VJ6z9qVuq1HgUiI+3bpDl589cOKZmevqprXPTbx477rDJlrhr1nq4+s182tMRP\nRqaziXiZJrWekNG17ZbxWJ336M5LXRbI3dLTJrs07RMY6fan1dHLrowY+X7MVjt6N3R6Kul0EbWm\ns7bz8Z+LnabQX43r7Y53php/mXj+Dnv0f1JO1x/8ZxbUzj02O15mfLtD13AvZqnDds+pmMmo26el\nXX0Wh0/D8EYtNjilY7+s/NstpOOTW7QBKgAAAAAAAAAAAAAAAAAAAAAADG88tLW9I3BwJtz6nNf1\nvK/DHVqYJ3pzT5y3MPZeojOWMQylEKpTVjZnDCwkqzYQyRRICATCITAJZQxhMAshnEq4ZQC2srKq\nqrIBZCWNZZgwswmFloVyCu0dFcx1WyrtCBhv5NTPHXds2U5o3hIz4ffbPt+KHUcTSW5c9Jme0u2v\nVYAKpAAAAAAAAAAAAAAAAYZctcVOa35R6tLrltN795/YvknNqrfhpPLH92V5isd9mWq6fHjk6rn0\nZxG8KK5Jm/wbVZiYZtqrmkqL023bkxvCiY3lJHNyRG81mHS4Rn5sNsNp64+3yaWaNrzOzHBl+i6q\nmT7s9J+S+ay8mex6EIneN47SNXKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAImYiJme0JafEs3h6fkidrZOn5eaLeJk7eOdm1Hi2vmtPTry/CHmOJcUvmvOPF1n09Pm\n6HF9ZGm01qxO3R5vSY7XwzmzTy47zzTEd7en5Mfvt2/PURWdo3tvPrPlKymbktFqTtMTvHzbOLDG\nf63JXbFX7FdnoODcDprZpq9TjiMMTvSn4vj8l5fxnrk91saPSa7i2hpOfbTVt5x1m0fLydzR6PDo\ndPGHBXasd585n1lsRERG0dIF5OOe6tAEqgAAAAAAAAAAAAAAAAAAAAAAADX11+TRZrf0y2Gjxe22\ngtH4piP3TPpXKwxtjhuYo9xq442iIblI2pC1RET2ILd9kxCqRjZmwlCSEohIJAQAAJZISDKGUd2M\nMoBnVbVVCyAWVWeSuqyOwIlXZZKue4MJV2WWYT2QKbKL9YlfdRdIo35b7/Hd3KTzUrPrDh27uxpb\nc2mpPwX/ABX9XAKpAAAAAAAAAAAAAACekTIp1eTwtJmv+GkyJn1oafeazbfpMzLR4jq/o8b823zX\n6XNF8ERCvTcNpxLV5LauvPhx9Irv3lhztdtv8TtaWLicXrt03jzjzb2k1nid56ty3s/w+a7Uwzjn\n1raejlarhmbhl/FpbxMO/fzj5p/ixSeXOvTtRfeI280ZI26tfDm3pWe63LaZx7qtGvniJ6tPLvOK\nfOa9WzbJvTbza02jl3n5SSljscK1MajSxWZ96nSW88xw/VfQ9XMT9nfa3yemid43jtLeXsce88qQ\nEqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADia3UTm1l4j7OP3Y/u\n7Vp2rM+kPJW1PhYcmS0+9MzKm/jbwz31weMzbV8UppazPL9q0/BF4rk1GLDSNqxPWPhCnHmnNrtT\nqPKteWPm6U6OdHaZvO+SaRNvhv12Ub/q3FhtrNVj0uKOt56z6R5y9zix1w4qY6RtWsREOJ7L6OKa\nS2rvX6zNM7T6Vh3mmZyOfya7eACzIAAAAAAAAAAAAAAAAAAAAAAAAAAczjVvqMVfW/8AZ03I41bf\nLp6/OVs/UVrY47NyOzUxd4bUJpEbb3Z7IiOrKIVSjZhMLJYyhKIgmGUQSDESIEbJEgQmCITEAmGU\nIiGUAyhZVhDOoM4Wx2VQtqBKuyyWEgqlhKyyuyBVaGtkbNmvk7A15l1eH2300R6TMORPSXT4ZO+O\n8fFefEX63gEAAAAAAAAAAAAAAAq1WPxdLlp+Kkx+y1Fvsz8gjhaDauGK8sx07y3OE3m1tT6RaP4c\nvU6yMNKUx73zT0ilY3l2eF6a+m0kRl/zbzz3+Ez5M8z26fJruW6wzYq5sV8d43raNpZjRzPPaTmx\n5b6bJ9rHO3zb2WJ8GWPEscY9bgzxH2t62n19GWW0eHOzHU5XbjXZ1x8WTnz2iZ7S2M1IjH2+LX0V\nKTqs8zO9ot0j8nUthi1J3UaOFMTfLFo6xMbS9BwHWTqdHOO8+/hnln5eTjYMFo1WTH5VnePzXcIm\n2k4zlpPSmXy/hfF5eMfJns69OA2cgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAADG/2LfJ874rW845mubliY7bPoto5qzHrDz0+yePNF41OotaJ7RWNtpV1OtfHqZ715fhu\nj8adNpcVfeyzE2/vLuanhOu1nEctIxTTFa/+ZPbZ3eHcF0vDbTfFE2yzG03t32+DokynXl9+leDB\nTTYKYccbUpWIhYCzEAAAAAAAAAAAAAAAAAAAAAAAAAAAAcXjE/4zDH9M/wAu04XF5/3jj/0f3Wz9\nRUYmzDWxS2I7FSyjuzY1ZKpRKEygEwiWUIkGIk2QJNhKQhMIhkCYZQxhlAMoZwwZwgWQshVCyATL\nCWc9ldpBhZXLOVdpQK7NfJPRdaWvknoDVvPvOnwuel4+TlXn3nS4VPvXj4QtEV0wAAAAAAAAAAAA\nAAAAAVV02CmTxK4qRf8AFFeq0AAAanEsfPpZmO9Ji0NDLfkwdOsulrumiyzHlVzJrz4Ovoy26vB8\ncTBa9NffLtMY77Rv8Yegx5ImkKdJoY1HC81Y+3OSbVn0mGGkmbY45u6tnrrTOu2xGO0RxCd+nNVj\nqKxTV1vH2pjaGtnyzXXYdo96ZmGXEMk15b7/AGZiVerWPTYckZcNbx5wzc7hGbnxXxzPWk7x8pdF\n0S9jh1OXgAlUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAcPjEf4/FP9H93ccXjMf4vDP9Mx+62fqKrx+S+GvibEFSsqyYwlVK\nZYsmIMoRKYJQIPIEiQ2ATCUQygCGUIhMAyhnDCGUIFkLIV1ZxIMpVWWSrsCuyqyyyq09ECq8tfJK\n66jJ2Bp5J6upwn7dv9Lk5J951uE/av8AJaIrqAAAAAAAAAAAAAAAAAAAAAAq1Mc2myxPnWf4cmtu\nXT9fR0tffk0WSe28bfq5Wbamm3326MtunwfK6PCv/AxPraZ/dz9PO97/AOqf5dHhdZrw7Dv3mOb9\nXOxRFM+avpe38mvkPHf/AFWlrKba7Tzt99ZxKkfR7euyNXMTrtPHfa0z+zPiM/UR8Zj+Wbdu8HpN\nM2bfzrV13M4dO2pyR61dNvj44/J/oAWZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADj8bj63BPzdhyeNx0wz8ZWz9RWri7Nmv\nVrYu0NmqaRZHZlDGGSiwxZSgCEkCBCQSCQBMJRCYgEsoYx3Z17AlMIhlCBnDOGEM4AlhZZKq4KrK\n7LLKrIFN2vdfZReAaObu6/CO9vk5OePR1uEd7fJeIrqAIAAAAAAAAAAAAAAAAAAAAGtxCk5NFliI\n3mI32+XVyNTyZOHTee946PQKPoeDffw4777eW/yVs60xv+ZxOnr4Okx1t05KRv8Ao41Z5q3yed5m\nXY1szXRZ5jvFJ/hxItP0aOSN9q7yrtr4f2tHFM5+KT16Yq/vK/iGSbXw4vO14UcPx5MGfNbPG18m\n1oj4THRsTw7VanPXVYpi3gzMcnrvCnG11JOupwuN8+a3pEQ6jT4divjxWnJExa09pbjbM5HHu90A\nJUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAHM41H1GOf6nTc/jEf4Ws+lls/UX45uGekNujTwdm5RNIthKIZKLDFlsiQIShIC\nEgCUJ7AmGTGO7IDzZQhMSDJMMYZQgZwzhhDOATuqssmVdgVWVWWyqtCBTeVF19lF+wNLNG7q8I+9\n8nLyupwnt+S8RXUAQAAAAAAAAAAAAAAAAAAAAAAItWL1mto3iY2lyrcLyUxzix2ia2nvPeK+jrCL\nOrTVnxpanhuPPemSs8l6RtE7dJj0ldpNP9GwRSZ3neZmV4cR/Vs4AJQAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHi1d9H\nM+kt5ra+vPoskfDdOfqK4mn7Q3aNHBPZu0W0RdDOGFWcKLCJZeTGQQlCQSgASBsCYZQxhlAJTAmA\nTsmAgGcM4YQyjsgRLC3VnaVcgwsrt3Z2V2QK7tbJ1bN5a9waeWO7p8Knt8nNyebpcK8vkvlFdQBA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK9RXmwZI+ErEWjesx6wQeZwejeo0cccuW8\nelpblJaaRGxVnCuss4ZrMvJEgCAASISCQIBlCYYpieoM0wx8k7gzIRueYM4Z79FcSy3QEsLJmWFp\nBjaVVpZWlXMoGNmvkXXlr3kGtknu6XCf7OXkl1OEdl8orqgIAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAHmskcmtzV/rls0U62OXiWX4zErcc9GmkRfWVkSqqziWayxCPIANwBIhIJSxS\nCRG6dwZwlhEs4BluMdzfqgZxLLdXuy3AmVdpZTKuZBjaVVpWWV2QlhZRdfZRcGpl7urwfrzfJy8r\nrcH61vPyWitdMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHA4nHLxKZ9awnH2ZcY\njbW459aq8fZpfiI2IZwrqzhmsz3Ebm4JN0AMhCQSIASndiAziWUSriWcAyRujc80DM3RCfIETLCW\nUsZEsJYSslXZAwlTddPZTkBp5e7r8Gj6rJPxhx8k9Xa4PG2C8/FaK10QAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAcfjcbZMFvnDWx9m5x2PqcNvS+zSxT7sNPxH62YZQwqzhRZO6UCB\nKUAJTux3SDIRuAncQAmJZRLBMSgZ7iIAZRKd2DICUSlAljLCYWMLIFVukNfI2bNbIDTyT7zu8Ijb\nSz/qcG/2nf4T/wCE/wD2WnxWt4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHL9oL\n+Hw2cm28VvEuPptfgyVj6yIn0no7/FtJfW8NzYMe3PaPd39d3iMug1WktNc2C9dvPbeP1aZ9xF+v\nT471tHu2iflK2HkqWmvaZj5Surqc9Ps5bx+alTHqYHm68S1Vf/NmfnC2vGNTXvyT84Ql6A3cSvHM\nsfaxVn5Ssrxyv3sM/lKB1xza8bwT3pePyWV4tpZ+/MfOEjfGrXiGlt2zV/PotrqcN/s5aT/+wLRj\nFontMSlAlKEgndO6IAZQljDIEgeQljLCzOVdkCu/SGrkbF56NPNeKxMzMRHxENe0+89DwuNtHHzl\n5PJr8NcnLW3Pbf7r1nCZm2gpae8zMrz4i/W6AgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAETETG0xukB4HVaeMHEtRi26RedvkyjBSfX9W77QYvC4xz7dMlYlrU7M929dWJLFc6aPK0q\n7YLxPS0S22FlP6q38Zac0yR92s/KVc3tHfFf8tpbcsLRvB/dR/8ALLVnU0r9uL1+dZI1mnmdvGpv\n6TOy6ym+Oto2tWJ+cJ/tW+KLK5KW+zes/KU7tG+h01p64qx8Y6NXNo6Y+uPJlp8rLf0rfG7MXtHa\n0x8pZxqs9e2a8f8A7Oj7HaTHn0+f6RWM23LETfr6vRW4PoL99NT8ui7F4+vEdXXtnt+fVbXjGsr/\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 {\n resolve(undefined);\n return;\n }\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.models)) {\n if (!model) continue;\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 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,kBAAAA;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,IAAI,KAAG,OAAO;AAAO,IAAI,KAAG,OAAO;AAAe,IAAI,KAAG,OAAO;AAAyB,IAAI,KAAG,OAAO;AAAoB,IAAI,KAAG,OAAO;AAAd,IAA6B,KAAG,OAAO,UAAU;AAAe,IAAI,KAAG,CAACC,KAAE,MAAI,OAAK,KAAGA,KAAG,IAAE,EAAC,SAAQ,CAAC,EAAC,GAAG,SAAQ,CAAC,GAAE,EAAE;AAAtD,IAA+D,KAAG,CAACA,KAAE,MAAI;AAAC,WAAQC,OAAK;AAAE,OAAGD,KAAEC,KAAE,EAAC,KAAI,EAAEA,GAAC,GAAE,YAAW,KAAE,CAAC;AAAC;AAAzH,IAA2H,KAAG,CAACD,KAAE,GAAEC,KAAE,MAAI;AAAC,MAAG,KAAG,OAAO,KAAG,YAAU,OAAO,KAAG;AAAW,aAAQ,KAAK,GAAG,CAAC;AAAE,OAAC,GAAG,KAAKD,KAAE,CAAC,KAAG,MAAIC,OAAG,GAAGD,KAAE,GAAE,EAAC,KAAI,MAAI,EAAE,CAAC,GAAE,YAAW,EAAE,IAAE,GAAG,GAAE,CAAC,MAAI,EAAE,WAAU,CAAC;AAAE,SAAOA;AAAC;AAAE,IAAI,KAAG,CAACA,KAAE,GAAEC,SAAKA,MAAED,OAAG,OAAK,GAAG,GAAGA,GAAC,CAAC,IAAE,CAAC,GAAE,GAAG,KAAG,CAACA,OAAG,CAACA,IAAE,aAAW,GAAGC,KAAE,WAAU,EAAC,OAAMD,KAAE,YAAW,KAAE,CAAC,IAAEC,KAAED,GAAC;AAAG,IAAI,KAAG,GAAG,CAAC,KAAI,OAAK;AAAC,KAAG,UAAQ;AAAG,MAAI,KAAG;AAAK,MAAG;AAAC,SAAG,IAAI,YAAY,SAAS,IAAI,YAAY,OAAO,IAAI,WAAW,CAAC,GAAE,IAAG,KAAI,KAAI,GAAE,GAAE,GAAE,GAAE,GAAE,IAAG,GAAE,IAAG,GAAE,GAAE,KAAI,IAAG,GAAE,KAAI,KAAI,KAAI,KAAI,GAAE,KAAI,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,KAAI,GAAE,IAAG,GAAE,IAAG,GAAE,IAAG,GAAE,GAAE,KAAI,KAAI,KAAI,GAAE,GAAE,GAAE,KAAI,KAAI,KAAI,IAAG,KAAI,GAAE,GAAE,GAAE,KAAI,KAAI,KAAI,IAAG,KAAI,GAAE,GAAE,GAAE,KAAI,KAAI,KAAI,IAAG,KAAI,GAAE,GAAE,GAAE,KAAI,KAAI,KAAI,IAAG,KAAI,GAAE,GAAE,GAAE,KAAI,KAAI,KAAI,IAAG,KAAI,KAAI,KAAI,KAAI,GAAE,GAAE,IAAG,KAAI,GAAE,GAAE,GAAE,GAAE,IAAG,GAAE,IAAG,IAAG,GAAE,GAAE,KAAI,IAAG,GAAE,KAAI,IAAG,GAAE,KAAI,IAAG,IAAG,KAAI,KAAI,IAAG,GAAE,KAAI,IAAG,GAAE,KAAI,IAAG,IAAG,KAAI,KAAI,KAAI,IAAG,GAAE,IAAG,IAAG,KAAI,KAAI,IAAG,GAAE,IAAG,GAAE,KAAI,IAAG,IAAG,GAAE,GAAE,KAAI,IAAG,GAAE,KAAI,IAAG,GAAE,KAAI,IAAG,IAAG,KAAI,KAAI,IAAG,GAAE,KAAI,IAAG,GAAE,KAAI,IAAG,IAAG,KAAI,KAAI,KAAI,IAAG,GAAE,IAAG,IAAG,KAAI,KAAI,IAAG,GAAE,IAAG,GAAE,KAAI,IAAG,IAAG,GAAE,GAAE,KAAI,IAAG,GAAE,KAAI,IAAG,GAAE,KAAI,IAAG,IAAG,KAAI,KAAI,IAAG,GAAE,KAAI,IAAG,GAAE,KAAI,IAAG,IAAG,KAAI,KAAI,KAAI,IAAG,GAAE,IAAG,IAAG,KAAI,KAAI,IAAG,GAAE,IAAG,GAAE,KAAI,IAAG,IAAG,GAAE,GAAE,KAAI,IAAG,GAAE,KAAI,IAAG,GAAE,KAAI,IAAG,IAAG,KAAI,KAAI,IAAG,GAAE,KAAI,IAAG,GAAE,KAAI,IAAG,IAAG,KAAI,KAAI,KAAI,IAAG,GAAE,IAAG,IAAG,KAAI,KAAI,IAAG,GAAE,IAAG,GAAE,KAAI,IAAG,IAAG,GAAE,GAAE,KAAI,IAAG,GAAE,KAAI,IAAG,GAAE,KAAI,IAAG,IAAG,KAAI,KAAI,IAAG,G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AAC,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,iBAAiB;AAAA,EACnC,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,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,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,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,gBAAgB;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;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,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,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,C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AAK;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,E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EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,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,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AAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AChJpB,eAAe,aAAa,UAA8C;AACxE,QAAM,YAAY,CAAC,QAAgB,OAAO,+BAA+B,MAAM,QAAQ,IAAI,WAAW,MAAM,EAAE,EAAE,KAAK,CAACC,SAAQA,KAAI,KAAK,CAAC;AACxI,MAAI;AACJ,MAAI;AACJ,UAAQ,SAAS,OAAO,QAAQ;AAAA,IAC9B,KAAK;AAAQ,aAAO,MAAM,UAAiBC,KAAI;AAAG;AAAA,IAClD,KAAK;AAAA,IACL,KAAK;AAAQ,aAAO,MAAM,UAAiBC,KAAI;AAAG;AAAA,IAClD;AAAS,aAAO;AAAA,EAClB;AACA,MAAI,MAAM;AACR,UAAM,SAAS,MAAM,kBAAkB,IAAI;AAC3C,UAAM,MAAM,SAAS,OAAO,QAAQ,SAAS,MAAM;AACnD,WAAO,MAAM;AAAA,EACf;AACA,SAAO;AACT;AAEA,eAAe,aAAa,UAA8C;AACxE,SAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,QAAI;AAEJ,YAAQ,SAAS,OAAO,QAAQ;AAAA,MAC9B,KAAK;AAEH,cAAM,4BAAmCD;AACzC;AAAA,MACF,KAAK;AAAA,MACL,KAAK;AAEH,cAAM,4BAAmCC;AACzC;AAAA,MACF;AACE,cAAM;AAAA,IACV;AAEA,QAAI;AACJ,QAAI,OAAO,UAAU;AAAa,YAAM,IAAI,MAAM;AAAA,aAEzC,IAAI;AAAO,YAAM,IAAI,IAAI,MAAM;AAAA,SACnC;AACH,cAAQ,MAAS;AACjB;AAAA,IACF;AACA,QAAI,SAAS,YAAY;AACvB,YAAMC,UAAe,OAAO,IAAI,cAAc,IAAI,aAAa;AAC/D,UAAI,CAACA,SAAQ;AACX,YAAI,0BAA0B;AAC9B,gBAAQ,MAAS;AAAA,MACnB,OAAO;AACL,cAAM,MAAMA,QAAO,WAAW,IAAI;AAClC,YAAI;AAAK,cAAI,UAAU,KAAK,GAAG,CAAC;AAEhC,cAAM,SAAS,MAAM,SAAS,MAAMA,SAAQ,IAAI;AAChD,cAAM,MAAM,OAAO,SAAS,MAAM,SAAS,OAAO,OAAO,QAAQ,SAAS,MAAM,IAAI;AACpF,gBAAQ,GAAG;AAAA,MACb;AAAA,IACF;AACA,QAAI;AAAK,UAAI,MAAM;AAAA;AACd,cAAQ,MAAS;AAAA,EACxB,CAAC;AACH;AAEA,eAAe,WAAW,UAA8C;AACtE,QAAMC,QAAO,CAAC,QAAgB,OAAO,KAAK,KAAK,QAAQ;AACvD,MAAI;AACJ,MAAI,SAAS,OAAO,WAAW;AAAQ,UAAMA,MAAYH,KAAI;AAAA;AACxD,UAAMG,MAAYF,KAAI;AAC3B,MAAI;AACJ,MAAK,UAAU,oBAAW,GAAW,MAAM,cAAe;AAExD,UAAM,OAAkB,IAAQ,WAAW,GAAG;AAC9C,UAAM,WAAsB,GAAW,MAAM,CAAC;AAC9C,aAAS,GAAG,QAAQ,IAAI;AAExB,UAAM,MAAM,SAAS,OAAO,UAAU,SAAS,MAAM;AACrD,aAAS,GAAG,QAAQ,QAAQ;AAAA,EAC9B,OAAO;AACL,QAAI,SAAS,OAAO;AAAO,UAAI,6BAA6B;AAAA,EAQ9D;AAEA,SAAO;AACT;AAEA,eAAe,aAAa,UAAiB;AAC3C,MAAI;AACJ,MAAI,OAAO,sBAAsB;AAAY,UAAM,MAAM,aAAa,QAAQ;AAAA,WACpE,OAAO,UAAU,eAAiB,IAAI,WAAW;AAAY,UAAM,MAAM,aAAa,QAAQ;AAAA;AACnG,UAAM,MAAM,WAAW,QAAQ;AACpC,SAAO;AACT;AAGA,eAAsB,WAAW,UAAiB;AAnHlD,cAAAG,KAAAC;AAqHE,MAAI,CAAI,EAAI,EAAE,aAAa;AAAqB;AAChD,QAAM,cAAiB,GAAW;AAClC,QAAM,eAAkB,GAAQ;AAChC,MAAK,gBAAgB,WAAW,gBAAgB,aAAc,EAAC,6CAAe,4BAA2B;AAEvG;AAAA,EACF;AACA,EAAG,EAAI,EAAE,IAAI,uBAAuB,IAAI;AACxC,QAAM,kBAAqB,GAAO,EAAE,MAAM;AAC1C,QAAM,iBAA2B,CAAC;AAClC,aAAW,CAAC,WAAWC,OAAK,KAAK,OAAO,QAAQ,SAAS,OAAO,MAAM,GAAG;AACvE,QAAI,CAACA;AAAO;AACZ,UAAM,SAASA,WAAA,gBAAAA,QAAO,qBAAkB,WAAAA,WAAA,gBAAAA,QAAO,WAAP,mBAAgB,OAAhB,mBAAoB,SAAS,CAAC,GAAGA,QAAM,OAAO,CAAC,EAAE,KAAK,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC;AAC/G,UAAM,SAAmBA,WAAA,gBAAAA,QAAO,qBAAkBD,OAAAD,MAAAE,WAAA,gBAAAA,QAAO,WAAP,gBAAAF,IAAgB,OAAhB,gBAAAC,IAAoB,SAASC,QAAM,OAAO,CAAC,EAAE,QAAQ;AACvG,aAAS,MAAM,GAAG,MAAM,MAAM,QAAQ,OAAO;AAC3C,UAAI,MAAM,GAAG,MAAM;AAAI,cAAM,GAAG,IAAI,QAAQ,IAAI,IAAI;AAAA,IACtD;AACA,UAAM,SAAY,GAAM,OAAO,KAAK;AACpC,QAAI;AACF,YAAM,MAAMA,QAAM,QAAQ,MAAM;AAChC,qBAAe,KAAK,SAAS;AAC7B,UAAI,MAAM,QAAQ,GAAG;AAAG,YAAI,QAAQ,CAACC,QAAS,GAAQA,GAAC,CAAC;AAAA;AACnD,QAAG,GAAQ,GAAG;AAAA,IACrB,SAAQ;AACN,UAAI,SAAS,OAAO;AAAO,YAAI,uBAAuB,SAAS;AAAA,IACjE;AACA,IAAG,GAAQ,MAAM;AAAA,EACnB;AACA,QAAM,UAAU,MAAM,aAAa,6BAA6B,EAAE;AAClE,eAAa,qBAAqB,EAAE;AACpC,MAAI,SAAS,OAAO;AAAO,QAAI,iBAAiB,EAAE,QAAQ,gBAAgB,SAAS,QAAQ,OAAO,CAAC;AACnG,EAAG,EAAI,EAAE,IAAI,uBAAuB,KAAK;AACzC,QAAM,gBAAmB,GAAO,EAAE,MAAM;AACxC,MAAK,gBAAgB,kBAAmB;AAAG,QAAI,gBAAgB,gBAAgB,eAAe;AAChG;AAOA,eAAsB,OAAO,UAAiB,YAA2D;AACvG,QAAc,MAAM,UAAU,KAAK;AACnC,QAAMC,MAAK,IAAI;AACf,WAAS,QAAQ;AACjB,MAAI;AAAY,aAAS,SAAS,UAAU,SAAS,QAAQ,UAAU;AACvE,MAAI,CAAC,SAAS,OAAO,UAAU,SAAS,OAAO,OAAO,WAAW,KAAK,SAAS,OAAO,WAAW,QAAQ;AACvG,WAAO,MAAM;AAAA,EACf;AACA,SAAO,IAAI,QAAQ,OAAO,YAAY;AACpC,UAAM,SAAS,OAAO,KAAK;AAC3B,UAAM,WAAW,QAAQ;AACzB,UAAM,MAAM,MAAM,aAAa,QAAQ;AACvC,UAAMC,MAAK,IAAI;AACf,QAAI,SAAS,OAAO;AAAO,UAAI,UAAU,SAAS,OAAO,QAAQ,KAAK,MAAMA,MAAKD,GAAE,GAAG,IAAI;AAC1F,aAAS,KAAK,QAAQ;AACtB,YAAQ,GAAG;AAAA,EACb,CAAC;AACH;;;AC/KA;AAyDO,IAAM,QAAN,MAAY;AAAA;AAAA;AAAA;AAAA;AAAA,EA6EjB,YAAY,YAA8B;AA3E1C;AAAA;AAKA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA,+BAAW;AAQX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gCAAoB;AAOpB;AAAA;AAAA;AAAA;AAAA;AAAA,iCAAsB;AAMtB;AAAA;AAAA;AAAA;AAAA;AAWA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAEA;AAAA;AAEA;AAAA;AACA;AAAA;AACA;AACA;AAqDA;AAAA,mCAAU,IAAI,QAAkB;AAC9B,UAAI,CAAC,mBAAK;AAAqB;AAC/B,YAAM,iBAAiB,KAAK,GAAG,OAAO,EAAE,MAAM;AAC9C,YAAM,kBAAkB,mBAAK;AAC7B,yBAAK,aAAc;AACnB,YAAM,SAAS,iBAAiB;AAChC,UAAI,WAAW;AAAG,YAAI,GAAG,KAAK,MAAM;AAAA,IACtC;AAGA;AAAA,gCAAU,CAAC,UAAgC;AACzC,UAAI,CAAC,mBAAK;AAAc,eAAO;AAC/B,UAAI,CAAC;AAAO,eAAO;AACnB,UAAI,KAAK,IAAI,QAAQ,EAAE,iBAAoB;AAAS,eAAO;AAC3D,UAAI;AACF,aAAK,GAAG,WAAW;AAAA,MACrB,SAAQ;AACN,eAAO;AAAA,MACT;AACA,aAAO;AAAA,IACT;AA6EA;AAAA;AAAA;AAAA,wBAAO,UAAS,IAAI,OAAO;AAoC3B;AAAA,gCAAO,CAAC,UAAkB;AA1T5B;AA2TI,WAAI,UAAK,WAAL,mBAAa;AAAe,aAAK,OAAO,cAAc,IAAI,MAAM,KAAK,CAAC;AAAA,IAC5E;AAuOA;AAAA,+BAAkC,CAAC;AAvZjC,UAAM,aAAgB,IAAQ,QAAW,IAAc,QAAQ,SAAS,EAAE;AAC1E,WAAS,WAAW,8DAA8D,SAAS;AAC3F,WAAS,gBAAgB,IAAI,UAAU,eAAe;AACtD,SAAK,UAAc;AACnB,WAAO,eAAe,MAAM,WAAW,EAAE,OAAW,QAAQ,CAAC;AAC7D,SAAK,SAAS,KAAK,MAAM,KAAK,UAAU,MAAQ,CAAC;AACjD,WAAO,KAAK,KAAK,MAAM;AACvB,SAAK,OAAO,cAAc,OAAO,cAAc;AAC/C,QAAI;AAAY,WAAK,SAAS,UAAU,KAAK,QAAQ,UAAU;AAC/D,wBAAoB,KAAK,MAAM;AAC/B,SAAK,KAAK;AACV,SAAK,QAAQ;AACb,uBAAK,aAAc;AACnB,uBAAK,qBAAsB;AAC3B,uBAAK,cAAe;AACpB,SAAK,cAAc,CAAC;AACpB,SAAK,SAAU,OAAO,gBAAgB,cAAe,IAAI,YAAY,IAAI;AAEzE,SAAK,SAAS,IAAW,OAAO,IAAI;AAEpC,IAAKE,MAAK;AACV,SAAK,SAAS,MAAM;AAEpB,SAAK,UAAU,EAAE,QAAQ,MAAM,QAAQ,KAAK;AAE5C,SAAK,oBAA6B;AAClC,SAAK,YAAqB;AAE1B,IAAO,cAAc,MAAM,MAAM,EAAE;AAEnC,SAAK,KAAK,QAAQ;AAClB,QAAI,KAAK,OAAO,SAAS,KAAK,IAAI;AAAS,UAAI,YAAY,KAAK,OAAO,EAAE;AACzE,QAAI,KAAK,OAAO;AAAO,UAAI,iBAAiB,KAAK,GAAG,QAAQ,WAAW,CAAC,EAAE;AAC1E,UAAM,UAAU,KAAK,MAAM,KAAK,UAAU,KAAK,GAAG,CAAC;AACnD,WAAO,QAAQ;AACf,WAAO,QAAQ;AACf,WAAO,QAAQ;AACf,QAAI,KAAK,OAAO;AAAO,UAAI,gBAAgB,OAAO;AAAA,EACpD;AAAA;AAAA,EA0BA,QAAc;AACZ,UAAM,iBAAiB,KAAK,OAAO;AACnC,SAAK,SAAS,KAAK,MAAM,KAAK,UAAU,MAAQ,CAAC;AACjD,SAAK,OAAO,UAAU;AACtB,IAAM,MAAM;AACZ,QAAI,UAAU;AAAA,EAChB;AAAA;AAAA,EAGA,SAAS,YAA8B;AACrC,UAAM,OAAO,SAAS,QAAU,cAAc,KAAK,MAAM;AACzD,QAAI,KAAK,WAAW;AAAG,WAAK,SAAS,UAAU,KAAK,QAAQ,UAAU;AACtE,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,MAAc;AACZ,WAAO,IAAI;AAAA,EACb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,OAAc,YAAqB,OAAO;AAC9C,WAAaC,SAAQ,OAAO,KAAK,QAAQ,SAAS;AAAA,EACpD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,aAAa,OAAc,YAAsD;AAhPzF,gBAAAC;AAiPI,QAAI;AAAY,WAAK,SAAS,UAAU,KAAK,QAAQ,UAAU;AAC/D,QAAI,CAAC,KAAK,OAAO,aAAa;AAAS,aAAO;AAC9C,UAAM,YAAY,MAAYD,SAAQ,OAAO,KAAK,MAAM;AACxD,QAAI,CAAC,UAAU;AAAQ,aAAO;AAC9B,QAAI,SAAwB;AAC5B,SAAI,UAAK,OAAO,aAAa,cAAzB,mBAAoC,SAAS;AAAQ,eAAS,MAAUE,UAAQ,UAAU,QAAQ,KAAK,MAAM;AACjH,SAAI,UAAK,OAAO,aAAa,cAAzB,mBAAoC,SAAS;AAAS,eAAS,MAAWA,UAAQ,UAAU,QAAQ,KAAK,MAAM;AACnH,SAAID,MAAA,KAAK,OAAO,aAAa,cAAzB,gBAAAA,IAAoC,SAAS;AAAW,eAAS,MAAaC,UAAQ,UAAU,QAAQ,KAAK,MAAM;AACvH,IAAG,GAAQ,UAAU,MAAM;AAC3B,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,QAAQ,kBAA0B,mBAA4C;AAC5E,WAAa,QAAQ,KAAK,QAAQ,kBAAkB,iBAAiB;AAAA,EACvE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,OAAsB;AAC1B,UAAc,MAAM,MAAM,IAAI;AAC9B,UAAM,KAAK,GAAG,MAAM;AACpB,IAAM,MAAM;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,MAAM,KAAK,YAA6C;AACtD,SAAK,QAAQ;AACb,UAAM,YAAY,IAAI;AACtB,UAAMC,SAAQ,OAAO,OAAO,KAAK,OAAO,MAAM,EAAE,OAAO,CAACC,YAAUA,OAAK,EAAE;AACzE,QAAI;AAAY,WAAK,SAAS,UAAU,KAAK,QAAQ,UAAU;AAC/D,QAAI,KAAK,IAAI,SAAS;AACpB,UAAI,CAAC,MAAc,MAAM,MAAM,KAAK;AAAG,YAAI,6BAA6B;AACxE,YAAS,IAAM;AACf,UAAI,KAAK,IAAI,SAAS;AACpB,YAAI,KAAK,OAAO;AAAO,cAAI,kBAAkB,KAAK,MAAM;AACxD,YAAI,KAAK,OAAO;AAAO,cAAI,aAAa,KAAK,GAAG,IAAI,KAAK;AAAA,MAC3D;AAAA,IACF;AAEA,UAAM,KAAK,OAAO,KAAK,IAAI;AAC3B,QAAI,KAAK,IAAI,WAAW,KAAK,OAAO;AAAO,UAAI,oBAAoB,KAAK,GAAG,OAAO,EAAE,MAAM,UAAU,SAAS,KAAK,GAAG,OAAO,EAAE,MAAM,YAAY,SAAS;AACzJ,SAAK,IAAI,UAAU;AAEnB,UAAM,SAAS,OAAO,OAAO,KAAK,OAAO,MAAM,EAAE,OAAO,CAACA,YAAUA,OAAK,EAAE;AAC1E,QAAI,WAAWD,QAAO;AACpB,WAAK,OAAO,SAAS;AACrB,WAAK,KAAK,MAAM;AAAA,IAClB;AAEA,UAAM,UAAU,KAAK,MAAM,IAAI,IAAI,SAAS;AAC5C,QAAI,WAAW,KAAK,YAAY,cAAc;AAAI,WAAK,YAAY,aAAa,KAAK,IAAI,WAAW,KAAK,YAAY,cAAc,KAAK,UAAU;AAAA,EACpJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,KAAK,SAAiB,KAAK,QAAgB;AACzC,WAAmBE,MAAK,QAAQ,KAAK,MAAM;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,OAAO,YAA8B;AACzC,UAAMC,MAAK,IAAI;AACf,UAAM,MAAM,MAAc,OAAO,MAAM,UAAU;AACjD,UAAMC,MAAK,IAAI;AACf,SAAK,YAAY,SAAS,KAAK,MAAMA,MAAKD,GAAE;AAC5C,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,QAAQ,OAAc,YAAyF;AAEnH,UAAM,UAAU,MAAM,KAAK,GAAG,QAAQ,MAAM,KAAK,OAAO,OAAO,UAAU,CAAC;AAC1E,UAAM,UAAkC,CAAC;AACzC,QAAI,QAAQ;AACZ,eAAW,UAAU,QAAQ,SAAS;AACpC,YAAME,MAAK,OAAO,OAAO,YAAY,KAAK;AAC1C,UAAI,QAAQ,OAAO,IAAI;AAAG,gBAAQ,OAAO,IAAI,KAAKA;AAAA;AAC7C,gBAAQ,OAAO,IAAI,IAAIA;AAC5B,eAASA;AAAA,IACX;AACA,UAAM,YAA8D,CAAC;AACrE,WAAO,QAAQ,OAAO,EAAE,QAAQ,CAAC,QAAQ,UAAU,KAAK,EAAE,QAAQ,IAAI,CAAC,GAAG,MAAM,IAAI,CAAC,GAAwB,MAAM,EAAE,CAAC,CAAC;AACvH,eAAW,UAAU,WAAW;AAC9B,aAAO,OAAO,KAAK,MAAM,MAAO,OAAO,OAAO,KAAK,IAAI;AACvD,aAAO,OAAO,KAAK,MAAM,MAAO,OAAO,IAAI,IAAI;AAAA,IACjD;AACA,cAAU,KAAK,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE,IAAI;AACxC,cAAU,SAAS;AACnB,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,MAAM,OAAO,OAAc,YAA+C;AAExE,SAAK,QAAQ;AACb,WAAO,IAAI,QAAQ,OAAO,YAAY;AA7X1C,kBAAAP,KAAAQ,KAAA,IAAAC,KAAAC,KAAAC,KAAAC,KAAAC,KAAAC,KAAAC,KAAA,IAAAC,KAAAC,KAAAC,KAAAC,KAAAC,KAAAC,KAAA,IAAAC;AA8XM,WAAK,QAAQ;AACb,UAAI;AAGJ,WAAK,SAAS,UAAU,KAAK,QAAQ,UAAU;AAG/C,WAAK,QAAQ;AACb,YAAM,QAAQ,mBAAK,SAAL,WAAa;AAC3B,UAAI,OAAO;AACT,YAAI,OAAO,KAAK;AAChB,aAAK,KAAK,OAAO;AACjB,gBAAQ,MAAM,KAAK,CAAC;AAAA,MACtB;AAEA,YAAM,YAAY,IAAI;AAGtB,YAAM,KAAK,KAAK;AAEhB,kBAAY,IAAI;AAChB,WAAK,QAAQ;AACb,YAAM,MAAM,MAAYvB,SAAQ,OAAO,KAAK,MAAM;AAClD,WAAK,UAAU;AACf,WAAK,YAAY,eAAe,KAAK,IAAI,WAAW,KAAK,YAAY,gBAAgB,KAAK,KAAK,MAAM,IAAI,IAAI,SAAS,IAAI,KAAK,MAAM,IAAI,IAAI,SAAS;AACtJ,WAAK,QAAQ,YAAY;AAEzB,UAAI,CAAC,IAAI,QAAQ;AACf,YAAI,KAAK,OAAO;AAAO,cAAI,mCAAmC;AAC9D,aAAK,KAAK,OAAO;AACjB,gBAAQ,MAAM,mCAAmC,CAAC;AAClD;AAAA,MACF;AACA,WAAK,KAAK,OAAO;AAEjB,kBAAY,IAAI;AAChB,WAAK,OAAO,cAAc,MAAY,KAAK,KAAK,QAAQ,IAAI,MAAM;AAClE,WAAK,OAAO,OAAO,kBAAkB,KAAK,OAAO,OAAO,kBAAkB,UAAU,KAAK,OAAO;AAChG,UAAI,CAAC,KAAK,YAAY;AAAa,aAAK,YAAY,cAAc;AAClE,UAAI,CAAC,KAAK,YAAY;AAAc,aAAK,YAAY,eAAe;AACpE,MAAC,KAAK,YAAY;AAClB,UAAI,KAAK,OAAO;AAAa,aAAK,YAAY;AAC9C,WAAK,YAAY,aAAa,KAAK,IAAI,WAAW,KAAK,YAAY,cAAc,KAAK,KAAK,MAAM,IAAI,IAAI,SAAS,IAAI,KAAK,MAAM,IAAI,IAAI,SAAS;AAClJ,WAAK,QAAQ,gBAAgB;AAI7B,UAAI,UAA0D,CAAC;AAC/D,UAAI,UAA0D,CAAC;AAC/D,UAAI,UAA0D,CAAC;AAC/D,UAAI,YAAgE,CAAC;AAGrE,WAAK,QAAQ;AACb,UAAI,KAAK,OAAO,OAAO;AACrB,kBAAU,KAAK,OAAO,KAAK,UAAe,WAAW,MAAM,IAAI,MAAM,IAAI,CAAC;AAC1E,YAAI,KAAK,YAAY;AAAM,iBAAO,KAAK,YAAY;AAAA,MACrD,OAAO;AACL,oBAAY,IAAI;AAChB,kBAAU,KAAK,OAAO,KAAK,UAAU,MAAW,WAAW,MAAM,IAAI,MAAM,IAAI,CAAC;AAChF,aAAK,YAAY,OAAO,KAAK,IAAI,WAAW,KAAK,YAAY,QAAQ,KAAK,KAAK,MAAM,IAAI,IAAI,SAAS,IAAI,KAAK,MAAM,IAAI,IAAI,SAAS;AAAA,MACxI;AAEA,UAAI,KAAK,OAAO,UAAU,KAAK,OAAO,KAAK,gBAAgB,MAAM,KAAK,OAAO,KAAK,gBAAgB;AAAK,kBAAU,MAAM;AAGvH,WAAK,QAAQ,aAAa;AAC1B,WAAK,QAAQ;AACb,YAAM,aAAa,KAAK,OAAO,KAAK,gBAAgB,KAAK,UAAU,KAAK,QAAQ,EAAE,MAAM,EAAE,aAAa,KAAK,OAAO,KAAK,UAAU,IAAK,QAAyB,SAAS,EAAE,EAAE,CAAC,IAAI,KAAK;AACvL,UAAI,KAAK,OAAO,OAAO;AACrB,aAAI,UAAK,OAAO,KAAK,cAAjB,mBAA4B,SAAS;AAAY,oBAAU,KAAK,OAAO,KAAK,UAAkBE,UAAQ,IAAI,QAAQ,UAAU,IAAI,CAAC;AAAA,kBAC5H,UAAK,OAAO,KAAK,cAAjB,mBAA4B,SAAS;AAAc,oBAAU,KAAK,OAAO,KAAK,UAAoB,QAAQ,IAAI,QAAQ,UAAU,IAAI,CAAC;AAAA,kBACrID,MAAA,KAAK,OAAO,KAAK,cAAjB,gBAAAA,IAA4B,SAAS;AAAkB,oBAAU,KAAK,OAAO,KAAK,UAAwBC,SAAQ,IAAI,QAAQ,UAAU,IAAI,CAAC;AAAA,kBAC7IO,MAAA,KAAK,OAAO,KAAK,cAAjB,gBAAAA,IAA4B,SAAS;AAAY,oBAAU,KAAK,OAAO,KAAK,UAAkBP,UAAQ,IAAI,QAAQ,UAAU,IAAI,CAAC;AAC1I,YAAI,KAAK,YAAY;AAAM,iBAAO,KAAK,YAAY;AAAA,MACrD,OAAO;AACL,oBAAY,IAAI;AAChB,aAAI,UAAK,OAAO,KAAK,cAAjB,mBAA4B,SAAS;AAAY,oBAAU,KAAK,OAAO,KAAK,UAAU,MAAcA,UAAQ,IAAI,QAAQ,UAAU,IAAI,CAAC;AAAA,kBAClIQ,MAAA,KAAK,OAAO,KAAK,cAAjB,gBAAAA,IAA4B,SAAS;AAAc,oBAAU,KAAK,OAAO,KAAK,UAAU,MAAgB,QAAQ,IAAI,QAAQ,UAAU,IAAI,CAAC;AAAA,kBAC3IC,MAAA,KAAK,OAAO,KAAK,cAAjB,gBAAAA,IAA4B,SAAS;AAAkB,oBAAU,KAAK,OAAO,KAAK,UAAU,MAAoBT,SAAQ,IAAI,QAAQ,UAAU,IAAI,CAAC;AAAA,kBACnJU,MAAA,KAAK,OAAO,KAAK,cAAjB,gBAAAA,IAA4B,SAAS;AAAY,oBAAU,KAAK,OAAO,KAAK,UAAU,MAAcV,UAAQ,IAAI,QAAQ,UAAU,IAAI,CAAC;AAChJ,aAAK,YAAY,OAAO,KAAK,IAAI,WAAW,KAAK,YAAY,QAAQ,KAAK,KAAK,MAAM,IAAI,IAAI,SAAS,IAAI,KAAK,MAAM,IAAI,IAAI,SAAS;AAAA,MACxI;AACA,WAAK,QAAQ,WAAW;AAGxB,WAAK,QAAQ,aAAa;AAC1B,WAAK,QAAQ;AACb,YAAM,aAAa,KAAK,OAAO,KAAK,gBAAgB,KAAK,UAAU,KAAK,QAAQ,EAAE,MAAM,EAAE,aAAa,KAAK,OAAO,KAAK,UAAU,IAAK,QAAyB,SAAS,EAAE,EAAE,CAAC,IAAI,KAAK;AACvL,UAAI,KAAK,OAAO,OAAO;AACrB,aAAIY,OAAAD,MAAA,KAAK,OAAO,KAAK,aAAjB,gBAAAA,IAA2B,cAA3B,gBAAAC,IAAsC,SAAS;AAAe,oBAAU,KAAK,OAAO,KAAK,UAAmBZ,UAAQ,IAAI,QAAQ,UAAU,IAAI,CAAC;AAAA,kBAC1Ic,OAAAD,MAAA,KAAK,OAAO,KAAK,aAAjB,gBAAAA,IAA2B,cAA3B,gBAAAC,IAAsC,SAAS;AAAc,oBAAU,KAAK,OAAO,KAAK,UAAoBd,UAAQ,IAAI,QAAQ,UAAU,IAAI,CAAC;AACxJ,YAAI,KAAK,YAAY;AAAM,iBAAO,KAAK,YAAY;AAAA,MACrD,OAAO;AACL,oBAAY,IAAI;AAChB,aAAIe,OAAA,UAAK,OAAO,KAAK,aAAjB,mBAA2B,cAA3B,gBAAAA,IAAsC,SAAS;AAAe,oBAAU,KAAK,OAAO,KAAK,UAAU,MAAef,UAAQ,IAAI,QAAQ,UAAU,IAAI,CAAC;AAAA,kBAChJiB,OAAAD,MAAA,KAAK,OAAO,KAAK,aAAjB,gBAAAA,IAA2B,cAA3B,gBAAAC,IAAsC,SAAS;AAAc,oBAAU,KAAK,OAAO,KAAK,UAAU,MAAgBjB,UAAQ,IAAI,QAAQ,UAAU,IAAI,CAAC;AAC9J,aAAK,YAAY,OAAO,KAAK,IAAI,WAAW,KAAK,YAAY,QAAQ,KAAK,KAAK,MAAM,IAAI,IAAI,SAAS,IAAI,KAAK,MAAM,IAAI,IAAI,SAAS;AAAA,MACxI;AACA,WAAK,QAAQ,WAAW;AAGxB,WAAK,QAAQ,eAAe;AAC5B,WAAK,QAAQ;AACb,UAAI,KAAK,OAAO,OAAO;AACrB,aAAIkB,MAAA,KAAK,OAAO,OAAO,cAAnB,gBAAAA,IAA8B,SAAS;AAAY,sBAAY,KAAK,OAAO,OAAO,UAAkBlB,UAAQ,IAAI,QAAQ,KAAK,MAAM,IAAI,CAAC;AAAA,kBACnImB,MAAA,KAAK,OAAO,OAAO,cAAnB,gBAAAA,IAA8B,SAAS;AAAc,sBAAY,KAAK,OAAO,OAAO,UAAoBnB,SAAQ,IAAI,QAAQ,KAAK,MAAM,IAAI,CAAC;AACrJ,YAAI,KAAK,YAAY;AAAQ,iBAAO,KAAK,YAAY;AAAA,MACvD,OAAO;AACL,oBAAY,IAAI;AAChB,aAAIoB,MAAA,KAAK,OAAO,OAAO,cAAnB,gBAAAA,IAA8B,SAAS;AAAY,sBAAY,KAAK,OAAO,OAAO,UAAU,MAAcpB,UAAQ,IAAI,QAAQ,KAAK,MAAM,IAAI,CAAC;AAAA,kBACzI,UAAK,OAAO,OAAO,cAAnB,mBAA8B,SAAS;AAAc,sBAAY,KAAK,OAAO,OAAO,UAAU,MAAgBA,SAAQ,IAAI,QAAQ,KAAK,MAAM,IAAI,CAAC;AAC3J,aAAK,YAAY,SAAS,KAAK,IAAI,WAAW,KAAK,YAAY,UAAU,KAAK,KAAK,MAAM,IAAI,IAAI,SAAS,IAAI,KAAK,MAAM,IAAI,IAAI,SAAS;AAAA,MAC5I;AACA,WAAK,QAAQ,aAAa;AAG1B,WAAK,QAAQ;AACb,UAAI,KAAK,OAAO;AAAO,SAAC,SAAS,SAAS,SAAS,SAAS,IAAI,MAAM,QAAQ,IAAI,CAAC,SAAS,SAAS,SAAS,SAAS,CAAC;AAGxH,WAAK,QAAQ;AACb,UAAI,aAA8B,CAAC;AACnC,UAAI,KAAK,OAAO,QAAQ,SAAS;AAC/B,oBAAY,IAAI;AAChB,qBAAa,CAAC,GAAWsB,MAAK,OAAuB,GAAG,GAAWC,MAAK,OAAuB,GAAG,GAAWC,MAAK,OAAuB,GAAG,GAAWC,MAAK,OAAuB,CAAC;AACpL,YAAI,CAAC,KAAK,OAAO;AAAO,eAAK,YAAY,UAAU,KAAK,IAAI,WAAW,KAAK,YAAY,WAAW,KAAK,KAAK,MAAM,IAAI,IAAI,SAAS,IAAI,KAAK,MAAM,IAAI,IAAI,SAAS;AAAA,iBAC3J,KAAK,YAAY;AAAS,iBAAO,KAAK,YAAY;AAAA,MAC7D;AAEA,WAAK,YAAY,QAAQ,KAAK,IAAI,WAAW,KAAK,YAAY,SAAS,KAAK,KAAK,MAAM,IAAI,IAAI,SAAS,IAAI,KAAK,MAAM,IAAI,IAAI,SAAS;AACxI,YAAM,UAAQJ,MAAA,KAAK,QAAQ,WAAb,gBAAAA,IAAqB,UAAS,CAAC,GAAG,GAAG,GAAG,CAAC;AACvD,WAAK,SAAS;AAAA,QACZ,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,QACN,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,aAAa,KAAK;AAAA,QAClB,QAAQ,KAAK,QAAQ;AAAA,QACrB,WAAW,KAAK,IAAI;AAAA,QACpB,OAAO;AAAA,QACP,OAAO,MAAM,CAAC;AAAA,QACd,QAAQ,MAAM,CAAC;AAAA,QACf,IAAI,UAAU;AAAE,iBAAeK,MAAK,SAAyB,SAAyB,SAAyB,YAAY,KAAK;AAAA,QAAG;AAAA,MACrI;AAGA,MAAG,GAAQ,IAAI,MAAM;AAGrB,WAAK,KAAK,QAAQ;AAClB,WAAK,QAAQ;AACb,cAAQ,KAAK,MAAM;AAAA,IACrB,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,MAAMpB,KAA2B;AACrC,WAAO,IAAI,QAAQ,CAAC,YAAY;AAAE,iBAAW,SAASA,GAAE;AAAA,IAAG,CAAC;AAAA,EAC9D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,MAAM,SAA2B,MAAe,MAAM,QAAgB,GAAG;AAC7E,QAAI,KAAK;AACP,UAAI,CAAC,mBAAK,QAAO,QAAQ,EAAE,GAAG;AAC5B,YAAI,KAAK,OAAO;AAAO,cAAI,eAAe,QAAQ,EAAE;AACpD,2BAAK,QAAO,QAAQ,EAAE,IAAI;AAAA,MAC5B;AACA,UAAI,CAAC,QAAQ,UAAU,mBAAK,QAAO,QAAQ,EAAE,KAAM,QAAQ,cAAc;AAAI,cAAM,KAAK,OAAO,OAAO;AACtG,UAAI,QAAQ;AAAG,cAAM,KAAK,MAAM,KAAK;AACrC,UAAI,mBAAK,QAAO,QAAQ,EAAE;AAAG,8BAAsB,MAAM,KAAK,MAAM,SAAS,KAAK,KAAK,CAAC;AAAA,IAC1F,OAAO;AACL,UAAI,KAAK,OAAO;AAAO,YAAI,cAAc,QAAQ,EAAE;AACnD,yBAAK,QAAO,QAAQ,EAAE,IAAI;AAAA,IAC5B;AAAA,EACF;AACF;AAzbE;AACA;AACA;AA+DA;AAoWA;", + "sourcesContent": ["/*\n Human\n homepage: \n author: '\n*/\n\nvar _G=Object.create;var QC=Object.defineProperty;var EG=Object.getOwnPropertyDescriptor;var $G=Object.getOwnPropertyNames;var RG=Object.getPrototypeOf,DG=Object.prototype.hasOwnProperty;var Kt=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),qe=(r,e)=>{for(var t in e)QC(r,t,{get:e[t],enumerable:!0})},AG=(r,e,t,o)=>{if(e&&typeof e==\"object\"||typeof e==\"function\")for(let n of $G(e))!DG.call(r,n)&&n!==t&&QC(r,n,{get:()=>e[n],enumerable:!(o=EG(e,n))||o.enumerable});return r};var zp=(r,e,t)=>(t=r!=null?_G(RG(r)):{},AG(e||!r||!r.__esModule?QC(t,\"default\",{value:r,enumerable:!0}):t,r));var U0=Kt((ple,W0)=>{\"use strict\";W0.exports=kt;var ko=null;try{ko=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 kt(r,e,t){this.low=r|0,this.high=e|0,this.unsigned=!!t}kt.prototype.__isLong__;Object.defineProperty(kt.prototype,\"__isLong__\",{value:!0});function Wr(r){return(r&&r.__isLong__)===!0}kt.isLong=Wr;var A0={},F0={};function Fu(r,e){var t,o,n;return e?(r>>>=0,(n=0<=r&&r<256)&&(o=F0[r],o)?o:(t=Nt(r,(r|0)<0?-1:0,!0),n&&(F0[r]=t),t)):(r|=0,(n=-128<=r&&r<128)&&(o=A0[r],o)?o:(t=Nt(r,r<0?-1:0,!1),n&&(A0[r]=t),t))}kt.fromInt=Fu;function No(r,e){if(isNaN(r))return e?Au:To;if(e){if(r<0)return Au;if(r>=L0)return V0}else{if(r<=-O0)return Vr;if(r+1>=O0)return z0}return r<0?No(-r,e).neg():Nt(r%Qp|0,r/Qp|0,e)}kt.fromNumber=No;function Nt(r,e,t){return new kt(r,e,t)}kt.fromBits=Nt;var Zm=Math.pow;function cw(r,e,t){if(r.length===0)throw Error(\"empty string\");if(r===\"NaN\"||r===\"Infinity\"||r===\"+Infinity\"||r===\"-Infinity\")return To;if(typeof e==\"number\"?(t=e,e=!1):e=!!e,t=t||10,t<2||360)throw Error(\"interior hyphen\");if(o===0)return cw(r.substring(1),e,t).neg();for(var n=No(Zm(t,8)),s=To,a=0;a>>0:this.low};de.toNumber=function(){return this.unsigned?(this.high>>>0)*Qp+(this.low>>>0):this.high*Qp+(this.low>>>0)};de.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}};de.getHighBits=function(){return this.high};de.getHighBitsUnsigned=function(){return this.high>>>0};de.getLowBits=function(){return this.low};de.getLowBitsUnsigned=function(){return this.low>>>0};de.getNumBitsAbs=function(){if(this.isNegative())return this.eq(Vr)?64:this.neg().getNumBitsAbs();for(var e=this.high!=0?this.high:this.low,t=31;t>0&&!(e&1<=0};de.isOdd=function(){return(this.low&1)===1};de.isEven=function(){return(this.low&1)===0};de.equals=function(e){return Wr(e)||(e=As(e)),this.unsigned!==e.unsigned&&this.high>>>31===1&&e.high>>>31===1?!1:this.high===e.high&&this.low===e.low};de.eq=de.equals;de.notEquals=function(e){return!this.eq(e)};de.neq=de.notEquals;de.ne=de.notEquals;de.lessThan=function(e){return this.comp(e)<0};de.lt=de.lessThan;de.lessThanOrEqual=function(e){return this.comp(e)<=0};de.lte=de.lessThanOrEqual;de.le=de.lessThanOrEqual;de.greaterThan=function(e){return this.comp(e)>0};de.gt=de.greaterThan;de.greaterThanOrEqual=function(e){return this.comp(e)>=0};de.gte=de.greaterThanOrEqual;de.ge=de.greaterThanOrEqual;de.compare=function(e){if(Wr(e)||(e=As(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};de.comp=de.compare;de.negate=function(){return!this.unsigned&&this.eq(Vr)?Vr:this.not().add(Yp)};de.neg=de.negate;de.add=function(e){Wr(e)||(e=As(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,Nt(m<<16|d,c<<16|l,this.unsigned)};de.subtract=function(e){return Wr(e)||(e=As(e)),this.add(e.neg())};de.sub=de.subtract;de.multiply=function(e){if(this.isZero())return To;if(Wr(e)||(e=As(e)),ko){var t=ko.mul(this.low,this.high,e.low,e.high);return Nt(t,ko.get_high(),this.unsigned)}if(e.isZero())return To;if(this.eq(Vr))return e.isOdd()?Vr:To;if(e.eq(Vr))return this.isOdd()?Vr:To;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(M0)&&e.lt(M0))return No(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,Nt(d<<16|f,l<<16|m,this.unsigned)};de.mul=de.multiply;de.divide=function(e){if(Wr(e)||(e=As(e)),e.isZero())throw Error(\"division by zero\");if(ko){if(!this.unsigned&&this.high===-2147483648&&e.low===-1&&e.high===-1)return this;var t=(this.unsigned?ko.div_u:ko.div_s)(this.low,this.high,e.low,e.high);return Nt(t,ko.get_high(),this.unsigned)}if(this.isZero())return this.unsigned?Au:To;var o,n,s;if(this.unsigned){if(e.unsigned||(e=e.toUnsigned()),e.gt(this))return Au;if(e.gt(this.shru(1)))return B0;s=Au}else{if(this.eq(Vr)){if(e.eq(Yp)||e.eq(pw))return Vr;if(e.eq(Vr))return Yp;var a=this.shr(1);return o=a.div(e).shl(1),o.eq(To)?e.isNegative()?Yp:pw:(n=this.sub(e.mul(o)),s=o.add(n.div(e)),s)}else if(e.eq(Vr))return this.unsigned?Au:To;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=To}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:Zm(2,i-48),u=No(o),c=u.mul(e);c.isNegative()||c.gt(n);)o-=p,u=No(o,this.unsigned),c=u.mul(e);u.isZero()&&(u=Yp),s=s.add(u),n=n.sub(c)}return s};de.div=de.divide;de.modulo=function(e){if(Wr(e)||(e=As(e)),ko){var t=(this.unsigned?ko.rem_u:ko.rem_s)(this.low,this.high,e.low,e.high);return Nt(t,ko.get_high(),this.unsigned)}return this.sub(this.div(e).mul(e))};de.mod=de.modulo;de.rem=de.modulo;de.not=function(){return Nt(~this.low,~this.high,this.unsigned)};de.and=function(e){return Wr(e)||(e=As(e)),Nt(this.low&e.low,this.high&e.high,this.unsigned)};de.or=function(e){return Wr(e)||(e=As(e)),Nt(this.low|e.low,this.high|e.high,this.unsigned)};de.xor=function(e){return Wr(e)||(e=As(e)),Nt(this.low^e.low,this.high^e.high,this.unsigned)};de.shiftLeft=function(e){return Wr(e)&&(e=e.toInt()),(e&=63)===0?this:e<32?Nt(this.low<>>32-e,this.unsigned):Nt(0,this.low<>>e|this.high<<32-e,this.high>>e,this.unsigned):Nt(this.high>>e-32,this.high>=0?0:-1,this.unsigned)};de.shr=de.shiftRight;de.shiftRightUnsigned=function(e){if(Wr(e)&&(e=e.toInt()),e&=63,e===0)return this;var t=this.high;if(e<32){var o=this.low;return Nt(o>>>e|t<<32-e,t>>>e,this.unsigned)}else return e===32?Nt(t,0,this.unsigned):Nt(t>>>e-32,0,this.unsigned)};de.shru=de.shiftRightUnsigned;de.shr_u=de.shiftRightUnsigned;de.toSigned=function(){return this.unsigned?Nt(this.low,this.high,!1):this};de.toUnsigned=function(){return this.unsigned?this:Nt(this.low,this.high,!0)};de.toBytes=function(e){return e?this.toBytesLE():this.toBytesBE()};de.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]};de.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]};kt.fromBytes=function(e,t,o){return o?kt.fromBytesLE(e,t):kt.fromBytesBE(e,t)};kt.fromBytesLE=function(e,t){return new kt(e[0]|e[1]<<8|e[2]<<16|e[3]<<24,e[4]|e[5]<<8|e[6]<<16|e[7]<<24,t)};kt.fromBytesBE=function(e,t){return new kt(e[4]<<24|e[5]<<16|e[6]<<8|e[7],e[0]<<24|e[1]<<16|e[2]<<8|e[3],t)}});var Ek=Kt(()=>{\"use strict\"});var $k=Kt(()=>{\"use strict\"});var o1=Kt((r1,Ww)=>{\"use strict\";(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})(r1,typeof Ww==\"object\"&&Ww,typeof define==\"function\"&&define)});var s1=Kt((n1,Uw)=>{\"use strict\";(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})(n1,typeof Uw==\"object\"&&Uw,typeof define==\"function\"&&define)});var i1=Kt((a1,Gw)=>{\"use strict\";(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})(a1,typeof Gw==\"object\"&&Gw,typeof define==\"function\"&&define)});var p1=Kt((u1,Hw)=>{\"use strict\";(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})(u1,typeof Hw==\"object\"&&Hw,typeof define==\"function\"&&define)});var l1=Kt((c1,Kw)=>{\"use strict\";(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})(c1,typeof Kw==\"object\"&&Kw,typeof define==\"function\"&&define)});var d1=Kt((m1,qw)=>{\"use strict\";(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})(m1,typeof qw==\"object\"&&qw,typeof define==\"function\"&&define)});var f1=Kt(()=>{\"use strict\"});var g1=Kt((h1,Md)=>{\"use strict\";(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,S,k){var _=[];S=S==!0?{entropy:!0}:S||{};var $=g(h(S.entropy?[C,b(e)]:C==null?x():C,3),_),R=new d(_),D=function(){for(var P=R.g(n),O=i,M=0;P=u;)P/=2,O/=2,M>>>=1;return(P+M)/O};return D.int32=function(){return R.g(4)|0},D.quick=function(){return R.g(4)/4294967296},D.double=D,g(b(R.S),e),(S.pass||k||function(P,O,M,L){return L&&(L.S&&f(L,R),P.state=function(){return f(R,{})}),M?(t[a]=P,O):P})(D,$,\"global\"in S?S.global:this==t,S.state)}function d(C){var S,k=C.length,_=this,$=0,R=_.i=_.j=0,D=_.S=[];for(k||(C=[k++]);${\"use strict\";var Dq=o1(),Aq=s1(),Fq=i1(),Pq=p1(),Oq=l1(),Mq=d1(),Ku=g1();Ku.alea=Dq;Ku.xor128=Aq;Ku.xorwow=Fq;Ku.xorshift7=Pq;Ku.xor4096=Oq;Ku.tychei=Mq;x1.exports=Ku});var Vv=Kt(()=>{\"use strict\"});var Wv=Kt(()=>{\"use strict\"});var LB=Kt(()=>{\"use strict\"});var BB=Kt(()=>{\"use strict\"});var zB=Kt(()=>{\"use strict\"});var VB=Kt((Wg,Gv)=>{\"use strict\";var Uv=(()=>{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 oe.buffer!=He&&Tt(oe.buffer),lt}function o(){return oe.buffer!=He&&Tt(oe.buffer),it}function n(){return oe.buffer!=He&&Tt(oe.buffer),ht}function s(){return oe.buffer!=He&&Tt(oe.buffer),Lr}function a(){return oe.buffer!=He&&Tt(oe.buffer),Mt}function i(){return oe.buffer!=He&&Tt(oe.buffer),to}function p(){return oe.buffer!=He&&Tt(oe.buffer),rr}var u=typeof e!=\"undefined\"?e:{},c,l;u.ready=new Promise(function(F,V){c=F,l=V});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,V)=>{throw V},x=typeof window==\"object\",b=typeof importScripts==\"function\",C=typeof process==\"object\"&&typeof process.versions==\"object\"&&typeof process.versions.node==\"string\",S=u.ENVIRONMENT_IS_PTHREAD||!1,k=\"\";function _(F){return u.locateFile?u.locateFile(F,k):k+F}var $,R,D,P;function O(F){if(F instanceof ku)return;j(\"exiting due to exception: \"+F)}if(C){var M=Vv(),L=Wv();b?k=L.dirname(k)+\"/\":k=__dirname+\"/\",$=(V,ue)=>(V=Fp(V)?new URL(V):L.normalize(V),M.readFileSync(V,ue?void 0:\"utf8\")),D=V=>{var ue=$(V,!0);return ue.buffer||(ue=new Uint8Array(ue)),ue},R=(V,ue,$e)=>{V=Fp(V)?new URL(V):L.normalize(V),M.readFile(V,function(Be,Le){Be?$e(Be):ue(Le.buffer)})},process.argv.length>1&&(h=process.argv[1].replace(/\\\\/g,\"/\")),f=process.argv.slice(2),process.on(\"uncaughtException\",function(V){if(!(V instanceof ku))throw V}),process.on(\"unhandledRejection\",function(V){throw V}),g=(V,ue)=>{if(Lo())throw process.exitCode=V,ue;O(ue),process.exit(V)},u.inspect=function(){return\"[Emscripten Module object]\"};let F;try{F=LB()}catch(V){throw console.error('The \"worker_threads\" module is not supported in this node.js build - perhaps a newer version is needed?'),V}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 V=new XMLHttpRequest;return V.open(\"GET\",F,!1),V.send(null),V.responseText},b&&(D=F=>{var V=new XMLHttpRequest;return V.open(\"GET\",F,!1),V.responseType=\"arraybuffer\",V.send(null),new Uint8Array(V.response)}),R=(F,V,ue)=>{var $e=new XMLHttpRequest;$e.open(\"GET\",F,!0),$e.responseType=\"arraybuffer\",$e.onload=()=>{if($e.status==200||$e.status==0&&$e.response){V($e.response);return}ue()},$e.onerror=ue,$e.send(null)}),P=F=>document.title=F);C&&typeof performance==\"undefined\"&&(global.performance=BB().performance);var B=console.log.bind(console),z=console.warn.bind(console);C&&(B=F=>M.writeSync(1,F+`\n`),z=F=>M.writeSync(2,F+`\n`));var U=u.print||B,j=u.printErr||z;Object.assign(u,d),d=null,u.arguments&&(f=u.arguments),u.thisProgram&&(h=u.thisProgram),u.quit&&(g=u.quit);var q=4,Y=Atomics.load,J=Atomics.store,re=Atomics.compareExchange,ne;u.wasmBinary&&(ne=u.wasmBinary);var ee=u.noExitRuntime||!0;typeof WebAssembly!=\"object\"&&vu(\"no native wasm support detected\");var oe,ie,le=!1,be;function _e(F,V){F||vu(V)}var ve=typeof TextDecoder!=\"undefined\"?new TextDecoder(\"utf8\"):void 0;function Fe(F,V,ue){V>>>=0;for(var $e=V+ue,Be=V;F[Be]&&!(Be>=$e);)++Be;if(Be-V>16&&F.buffer&&ve)return ve.decode(F.buffer instanceof SharedArrayBuffer?F.slice(V,Be):F.subarray(V,Be));for(var Le=\"\";V>10,56320|so&1023)}}return Le}function Pe(F,V){return F>>>=0,F?Fe(o(),F,V):\"\"}function st(F,V,ue,$e){if(ue>>>=0,!($e>0))return 0;for(var Be=ue,Le=ue+$e-1,ge=0;ge=55296&&Ne<=57343){var Ft=F.charCodeAt(++ge);Ne=65536+((Ne&1023)<<10)|Ft&1023}if(Ne<=127){if(ue>=Le)break;V[ue++>>>0]=Ne}else if(Ne<=2047){if(ue+1>=Le)break;V[ue++>>>0]=192|Ne>>6,V[ue++>>>0]=128|Ne&63}else if(Ne<=65535){if(ue+2>=Le)break;V[ue++>>>0]=224|Ne>>12,V[ue++>>>0]=128|Ne>>6&63,V[ue++>>>0]=128|Ne&63}else{if(ue+3>=Le)break;V[ue++>>>0]=240|Ne>>18,V[ue++>>>0]=128|Ne>>12&63,V[ue++>>>0]=128|Ne>>6&63,V[ue++>>>0]=128|Ne&63}}return V[ue>>>0]=0,ue-Be}function ct(F,V,ue){return st(F,o(),V,ue)}var He,lt,it,ht,gt,Lr,Mt,to,rr;S&&(He=u.buffer);function Tt(F){He=F,u.HEAP8=lt=new Int8Array(F),u.HEAP16=ht=new Int16Array(F),u.HEAP32=Lr=new Int32Array(F),u.HEAPU8=it=new Uint8Array(F),u.HEAPU16=gt=new Uint16Array(F),u.HEAPU32=Mt=new Uint32Array(F),u.HEAPF32=to=new Float32Array(F),u.HEAPF64=rr=new Float64Array(F)}var or=u.INITIAL_MEMORY||16777216;if(S)oe=u.wasmMemory,He=u.buffer;else if(u.wasmMemory)oe=u.wasmMemory;else if(oe=new WebAssembly.Memory({initial:or/65536,maximum:65536,shared:!0}),!(oe.buffer instanceof SharedArrayBuffer))throw j(\"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&&j(\"(on node you may need: --experimental-wasm-threads --experimental-wasm-bulk-memory and/or recent version)\"),Error(\"bad memory\");oe&&(He=oe.buffer),or=He.byteLength,Tt(He);var nr,ro=[],oo=[],fr=[],Va=!1;function Lo(){return ee}function Ks(){if(u.preRun)for(typeof u.preRun==\"function\"&&(u.preRun=[u.preRun]);u.preRun.length;)ol(u.preRun.shift());al(ro)}function Xt(){Va=!0,!S&&al(oo)}function Wa(){if(!S){if(u.postRun)for(typeof u.postRun==\"function\"&&(u.postRun=[u.postRun]);u.postRun.length;)d0(u.postRun.shift());al(fr)}}function ol(F){ro.unshift(F)}function nl(F){oo.unshift(F)}function d0(F){fr.unshift(F)}var ki=0,Ap=null,Ua=null;function Cy(F){ki++,u.monitorRunDependencies&&u.monitorRunDependencies(ki)}function wm(F){if(ki--,u.monitorRunDependencies&&u.monitorRunDependencies(ki),ki==0&&(Ap!==null&&(clearInterval(Ap),Ap=null),Ua)){var V=Ua;Ua=null,V()}}function vu(F){u.onAbort&&u.onAbort(F),F=\"Aborted(\"+F+\")\",j(F),le=!0,be=1,F+=\". Build with -sASSERTIONS for more info.\";var V=new WebAssembly.RuntimeError(F);throw l(V),V}var wy=\"data:application/octet-stream;base64,\";function Sm(F){return F.startsWith(wy)}function Fp(F){return F.startsWith(\"file://\")}var hr;hr=\"tfjs-backend-wasm-threaded-simd.wasm\",Sm(hr)||(hr=_(hr));function Im(F){try{if(F==hr&&ne)return new Uint8Array(ne);if(D)return D(F);throw\"both async and sync fetching of the wasm failed\"}catch(V){vu(V)}}function Sy(){if(!ne&&(x||b)){if(typeof fetch==\"function\"&&!Fp(hr))return fetch(hr,{credentials:\"same-origin\"}).then(function(F){if(!F.ok)throw\"failed to load wasm binary file at '\"+hr+\"'\";return F.arrayBuffer()}).catch(function(){return Im(hr)});if(R)return new Promise(function(F,V){R(hr,function(ue){F(new Uint8Array(ue))},V)})}return Promise.resolve().then(function(){return Im(hr)})}function Iy(){var F={env:Om,wasi_snapshot_preview1:Om};function V(ge,Ne){var Ft=ge.exports;if(u.asm=Ft,Dy(u.asm._emscripten_tls_init),nr=u.asm.__indirect_function_table,nl(u.asm.__wasm_call_ctors),ie=Ne,!S){var so=Me.unusedWorkers.length;Me.unusedWorkers.forEach(function(Ha){Me.loadWasmModuleToWorker(Ha,function(){--so||wm(\"wasm-instantiate\")})})}}S||Cy(\"wasm-instantiate\");function ue(ge){V(ge.instance,ge.module)}function $e(ge){return Sy().then(function(Ne){return WebAssembly.instantiate(Ne,F)}).then(function(Ne){return Ne}).then(ge,function(Ne){j(\"failed to asynchronously prepare wasm: \"+Ne),vu(Ne)})}function Be(){return!ne&&typeof WebAssembly.instantiateStreaming==\"function\"&&!Sm(hr)&&!Fp(hr)&&!C&&typeof fetch==\"function\"?fetch(hr,{credentials:\"same-origin\"}).then(function(ge){var Ne=WebAssembly.instantiateStreaming(ge,F);return Ne.then(ue,function(Ft){return j(\"wasm streaming compile failed: \"+Ft),j(\"falling back to ArrayBuffer instantiation\"),$e(ue)})}):$e(ue)}if(u.instantiateWasm)try{var Le=u.instantiateWasm(F,V);return Le}catch(ge){j(\"Module.instantiateWasm callback failed with error: \"+ge),l(ge)}return Be().catch(l),{}}var f0,h0,vm={};function ku(F){this.name=\"ExitStatus\",this.message=\"Program terminated with exit(\"+F+\")\",this.status=F}function vy(F){var V=Me.pthreads[F];delete Me.pthreads[F],V.terminate(),jC(F),Me.runningWorkers.splice(Me.runningWorkers.indexOf(V),1),V.pthread_ptr=0}function ky(F){var V=Me.pthreads[F];V.postMessage({cmd:\"cancel\"})}function sl(F){var V=Me.pthreads[F];_e(V),Me.returnWorkerToPool(V)}function Ny(F){var V=Me.getNewWorker();if(!V)return 6;Me.runningWorkers.push(V),Me.pthreads[F.pthread_ptr]=V,V.pthread_ptr=F.pthread_ptr;var ue={cmd:\"run\",start_routine:F.startRoutine,arg:F.arg,pthread_ptr:F.pthread_ptr};return V.runPthread=()=>{C&&V.ref(),V.postMessage(ue,F.transferList),delete V.runPthread},V.loaded&&V.runPthread(),0}var km={varargs:void 0,get:function(){km.varargs+=4;var F=s()[km.varargs-4>>>2];return F},getStr:function(F){var V=Pe(F);return V}};function Nm(F){if(S)return Ni(1,1,F);be=F,Lo()||(Me.terminateAllThreads(),u.onExit&&u.onExit(F),le=!0),g(F,new ku(F))}function Ty(F,V){if(be=F,!V&&S)throw _m(F),\"unwind\";Nm(F)}var Tm=Ty;function _y(F){if(F instanceof ku||F==\"unwind\")return be;g(1,F)}var Me={unusedWorkers:[],runningWorkers:[],tlsInitFunctions:[],pthreads:{},init:function(){S?Me.initWorker():Me.initMainThread()},initMainThread:function(){for(var F=8;F--;)Me.allocateUnusedWorker()},initWorker:function(){ee=!1},setExitStatus:function(F){be=F},terminateAllThreads:function(){for(var F of Object.values(Me.pthreads))Me.returnWorkerToPool(F);for(var F of Me.unusedWorkers)F.terminate();Me.unusedWorkers=[]},returnWorkerToPool:function(F){var V=F.pthread_ptr;delete Me.pthreads[V],Me.unusedWorkers.push(F),Me.runningWorkers.splice(Me.runningWorkers.indexOf(F),1),F.pthread_ptr=0,C&&F.unref(),jC(V)},receiveObjectTransfer:function(F){},threadInitTLS:function(){Me.tlsInitFunctions.forEach(F=>F())},loadWasmModuleToWorker:function(F,V){F.onmessage=Le=>{var ge=Le.data,Ne=ge.cmd;if(F.pthread_ptr&&(Me.currentProxiedOperationCallerThread=F.pthread_ptr),ge.targetThread&&ge.targetThread!=Wm()){var Ft=Me.pthreads[ge.targetThread];Ft?Ft.postMessage(ge,ge.transferList):j('Internal error! Worker sent a message \"'+Ne+'\" to target pthread '+ge.targetThread+\", but that thread no longer exists!\"),Me.currentProxiedOperationCallerThread=void 0;return}Ne===\"processProxyingQueue\"?il(ge.queue):Ne===\"spawnThread\"?Ny(ge):Ne===\"cleanupThread\"?sl(ge.thread):Ne===\"killThread\"?vy(ge.thread):Ne===\"cancelThread\"?ky(ge.thread):Ne===\"loaded\"?(F.loaded=!0,C&&F.unref(),V&&V(F),F.runPthread&&F.runPthread()):Ne===\"print\"?U(\"Thread \"+ge.threadId+\": \"+ge.text):Ne===\"printErr\"?j(\"Thread \"+ge.threadId+\": \"+ge.text):Ne===\"alert\"?alert(\"Thread \"+ge.threadId+\": \"+ge.text):ge.target===\"setimmediate\"?F.postMessage(ge):Ne===\"callHandler\"?u[ge.handler](...ge.args):Ne&&j(\"worker sent an unknown command \"+Ne),Me.currentProxiedOperationCallerThread=void 0},F.onerror=Le=>{var ge=\"worker sent an error!\";throw j(ge+\" \"+Le.filename+\":\"+Le.lineno+\": \"+Le.message),Le},C&&(F.on(\"message\",function(Le){F.onmessage({data:Le})}),F.on(\"error\",function(Le){F.onerror(Le)}),F.on(\"detachedExit\",function(){}));var ue=[],$e=[\"onExit\",\"onAbort\",\"print\",\"printErr\"];for(var Be of $e)u.hasOwnProperty(Be)&&ue.push(Be);F.postMessage({cmd:\"load\",handlers:ue,urlOrBlob:u.mainScriptUrlOrBlob||r,wasmMemory:oe,wasmModule:ie})},allocateUnusedWorker:function(){var F,V=_(\"tfjs-backend-wasm-threaded-simd.worker.js\");F=new Worker(V),Me.unusedWorkers.push(F)},getNewWorker:function(){return Me.unusedWorkers.length==0&&(Me.allocateUnusedWorker(),Me.loadWasmModuleToWorker(Me.unusedWorkers[0])),Me.unusedWorkers.pop()}};u.PThread=Me;function al(F){for(;F.length>0;)F.shift()(u)}function Ey(){var F=Wm(),V=s()[F+52>>>2],ue=s()[F+56>>>2],$e=V-ue;w0(V,$e),Um(V)}u.establishStackSpace=Ey;function _m(F){if(S)return Ni(2,0,F);try{Tm(F)}catch(V){_y(V)}}var Pp=[];function $y(F){var V=Pp[F];return V||(F>=Pp.length&&(Pp.length=F+1),Pp[F]=V=nr.get(F)),V}function Ry(F,V){var ue=$y(F)(V);Lo()?Me.setExitStatus(ue):C0(ue)}u.invokeEntryPoint=Ry;function Dy(F){Me.tlsInitFunctions.push(F)}function Ay(F){x0(F,!b,1,!x),Me.threadInitTLS()}function Fy(F){S?postMessage({cmd:\"cleanupThread\",thread:F}):sl(F)}function Em(F,V,ue,$e){return S?Ni(3,1,F,V,ue,$e):$m(F,V,ue,$e)}function $m(F,V,ue,$e){if(typeof SharedArrayBuffer==\"undefined\")return j(\"Current environment does not support SharedArrayBuffer, pthreads are not available!\"),6;var Be=[],Le=0;if(S&&(Be.length===0||Le))return Em(F,V,ue,$e);if(Le)return Le;var ge={startRoutine:ue,pthread_ptr:F,arg:$e,transferList:Be};return S?(ge.cmd=\"spawnThread\",postMessage(ge,Be),0):Ny(ge)}function Py(){return 65536}var Oy=!0;function My(){return Oy}function il(F){Atomics.store(s(),F>>2,1),Wm()&&b0(F),Atomics.compareExchange(s(),F>>2,1,0)}u.executeNotifiedProxyingQueue=il;function Ly(F,V,ue,$e){if(F==V)setTimeout(()=>il($e));else if(S)postMessage({targetThread:F,cmd:\"processProxyingQueue\",queue:$e});else{var Be=Me.pthreads[F];if(!Be)return;Be.postMessage({cmd:\"processProxyingQueue\",queue:$e})}return 1}function By(F,V,ue){return-1}function zy(){vu(\"\")}function Nu(F){Nu.shown||(Nu.shown={}),Nu.shown[F]||(Nu.shown[F]=1,C&&(F=\"warning: \"+F),j(F))}function Vy(){C||b||Nu(\"Blocking on the main thread is very dangerous, see https://emscripten.org/docs/porting/pthreads.html#blocking-on-the-main-browser-thread\")}function Wy(){return Date.now()}function Rm(){return 4294901760}function Uy(){return Rm()}var ul;C?ul=()=>{var F=process.hrtime();return F[0]*1e3+F[1]/1e6}:ul=()=>performance.timeOrigin+performance.now();function Gy(F,V,ue){o().copyWithin(F>>>0,V>>>0,V+ue>>>0)}function Hy(){return C?zB().cpus().length:navigator.hardwareConcurrency}function Ky(F){var V=XC(),ue=F();return Um(V),ue}function Ni(F,V){var ue=arguments.length-2,$e=arguments;return Ky(()=>{for(var Be=ue,Le=Gm(Be*8),ge=Le>>3,Ne=0;Ne>>0]=Ft}return y0(F,Be,Le,V)})}var pl=[];function qy(F,V,ue){pl.length=V;for(var $e=ue>>3,Be=0;Be>>0];var Le=F<0,ge=Le?vm[-F-1]:rb[F];return ge.apply(null,pl)}function jy(F){try{return oe.grow(F-He.byteLength+65535>>>16),Tt(oe.buffer),1}catch(V){}}function Xy(F){var V=o().length;if(F=F>>>0,F<=V)return!1;var ue=Rm();if(F>ue)return!1;let $e=(Ft,so)=>Ft+(so-Ft%so)%so;for(var Be=1;Be<=4;Be*=2){var Le=V*(1+.2/Be);Le=Math.min(Le,F+100663296);var ge=Math.min(ue,$e(Math.max(F,Le),65536)),Ne=jy(ge);if(Ne)return!0}return!1}function Yy(){throw\"unwind\"}function Dm(F){return S?Ni(4,1,F):52}function Am(F,V,ue,$e,Be){return S?Ni(5,1,F,V,ue,$e,Be):70}var Qy=[null,[],[]];function Zy(F,V){var ue=Qy[F];V===0||V===10?((F===1?U:j)(Fe(ue,0)),ue.length=0):ue.push(V)}function Fm(F,V,ue,$e){if(S)return Ni(6,1,F,V,ue,$e);for(var Be=0,Le=0;Le>>2],Ne=a()[V+4>>>2];V+=8;for(var Ft=0;Ft>>0]);Be+=Ne}return a()[$e>>>2]=Be,0}function Pm(F){var V=u[\"_\"+F];return V}function Jy(F,V){t().set(F,V>>>0)}function eb(F,V,ue,$e,Be){var Le={string:Br=>{var Bp=0;if(Br!=null&&Br!==0){var v0=(Br.length<<2)+1;Bp=Gm(v0),ct(Br,Bp,v0)}return Bp},array:Br=>{var Bp=Gm(Br.length);return Jy(Br,Bp),Bp}};function ge(Br){return V===\"string\"?Pe(Br):V===\"boolean\"?!!Br:Br}var Ne=Pm(F),Ft=[],so=0;if($e)for(var Ha=0;Ha<$e.length;Ha++){var I0=Le[ue[Ha]];I0?(so===0&&(so=XC()),Ft[Ha]=I0($e[Ha])):Ft[Ha]=$e[Ha]}var YC=Ne.apply(null,Ft);function TG(Br){return so!==0&&Um(so),ge(Br)}return YC=TG(YC),YC}function tb(F,V,ue,$e){ue=ue||[];var Be=ue.every(ge=>ge===\"number\"||ge===\"boolean\"),Le=V!==\"string\";return Le&&Be&&!$e?Pm(F):function(){return eb(F,V,ue,arguments,$e)}}Me.init();var rb=[null,Nm,_m,Em,Dm,Am,Fm],Om={__emscripten_init_main_thread_js:Ay,__emscripten_thread_cleanup:Fy,__pthread_create_js:$m,_emscripten_default_pthread_stack_size:Py,_emscripten_get_now_is_monotonic:My,_emscripten_notify_task_queue:Ly,_emscripten_set_offscreencanvas_size:By,abort:zy,emscripten_check_blocking_allowed:Vy,emscripten_date_now:Wy,emscripten_get_heap_max:Uy,emscripten_get_now:ul,emscripten_memcpy_big:Gy,emscripten_num_logical_cores:Hy,emscripten_receive_on_main_thread_js:qy,emscripten_resize_heap:Xy,emscripten_unwind_to_js_event_loop:Yy,exit:Tm,fd_close:Dm,fd_seek:Am,fd_write:Fm,memory:oe||u.wasmMemory},g0=Iy(),ob=u.___wasm_call_ctors=function(){return(ob=u.___wasm_call_ctors=u.asm.__wasm_call_ctors).apply(null,arguments)},nb=u._init=function(){return(nb=u._init=u.asm.init).apply(null,arguments)},sb=u._init_with_threads_count=function(){return(sb=u._init_with_threads_count=u.asm.init_with_threads_count).apply(null,arguments)},ab=u._get_threads_count=function(){return(ab=u._get_threads_count=u.asm.get_threads_count).apply(null,arguments)},ib=u._register_tensor=function(){return(ib=u._register_tensor=u.asm.register_tensor).apply(null,arguments)},ub=u._dispose_data=function(){return(ub=u._dispose_data=u.asm.dispose_data).apply(null,arguments)},pb=u._dispose=function(){return(pb=u._dispose=u.asm.dispose).apply(null,arguments)},cb=u._Abs=function(){return(cb=u._Abs=u.asm.Abs).apply(null,arguments)},lb=u._Acos=function(){return(lb=u._Acos=u.asm.Acos).apply(null,arguments)},mb=u._Acosh=function(){return(mb=u._Acosh=u.asm.Acosh).apply(null,arguments)},db=u._Add=function(){return(db=u._Add=u.asm.Add).apply(null,arguments)},fb=u._AddN=function(){return(fb=u._AddN=u.asm.AddN).apply(null,arguments)},hb=u._All=function(){return(hb=u._All=u.asm.All).apply(null,arguments)},gb=u._Any=function(){return(gb=u._Any=u.asm.Any).apply(null,arguments)},xb=u._ArgMax=function(){return(xb=u._ArgMax=u.asm.ArgMax).apply(null,arguments)},yb=u._ArgMin=function(){return(yb=u._ArgMin=u.asm.ArgMin).apply(null,arguments)},bb=u._Asin=function(){return(bb=u._Asin=u.asm.Asin).apply(null,arguments)},Cb=u._Asinh=function(){return(Cb=u._Asinh=u.asm.Asinh).apply(null,arguments)},wb=u._Atan=function(){return(wb=u._Atan=u.asm.Atan).apply(null,arguments)},Sb=u._Atan2=function(){return(Sb=u._Atan2=u.asm.Atan2).apply(null,arguments)},Ib=u._Atanh=function(){return(Ib=u._Atanh=u.asm.Atanh).apply(null,arguments)},vb=u._AvgPool=function(){return(vb=u._AvgPool=u.asm.AvgPool).apply(null,arguments)},kb=u._AvgPool3D=function(){return(kb=u._AvgPool3D=u.asm.AvgPool3D).apply(null,arguments)},Nb=u._AvgPool3DGrad=function(){return(Nb=u._AvgPool3DGrad=u.asm.AvgPool3DGrad).apply(null,arguments)},Tb=u._AvgPoolGrad=function(){return(Tb=u._AvgPoolGrad=u.asm.AvgPoolGrad).apply(null,arguments)},_b=u._BatchMatMul=function(){return(_b=u._BatchMatMul=u.asm.BatchMatMul).apply(null,arguments)},Eb=u._Bincount=function(){return(Eb=u._Bincount=u.asm.Bincount).apply(null,arguments)},$b=u._BitwiseAnd=function(){return($b=u._BitwiseAnd=u.asm.BitwiseAnd).apply(null,arguments)},Rb=u._Ceil=function(){return(Rb=u._Ceil=u.asm.Ceil).apply(null,arguments)},Db=u._ClipByValue=function(){return(Db=u._ClipByValue=u.asm.ClipByValue).apply(null,arguments)},Ab=u._Conv2D=function(){return(Ab=u._Conv2D=u.asm.Conv2D).apply(null,arguments)},Fb=u._Conv2DBackpropInput=function(){return(Fb=u._Conv2DBackpropInput=u.asm.Conv2DBackpropInput).apply(null,arguments)},Pb=u._Conv3D=function(){return(Pb=u._Conv3D=u.asm.Conv3D).apply(null,arguments)},Ob=u._Conv3DBackpropFilterV2=function(){return(Ob=u._Conv3DBackpropFilterV2=u.asm.Conv3DBackpropFilterV2).apply(null,arguments)},Mb=u._Conv3DBackpropInputV2=function(){return(Mb=u._Conv3DBackpropInputV2=u.asm.Conv3DBackpropInputV2).apply(null,arguments)},Lb=u._Cos=function(){return(Lb=u._Cos=u.asm.Cos).apply(null,arguments)},Bb=u._Cosh=function(){return(Bb=u._Cosh=u.asm.Cosh).apply(null,arguments)},zb=u._CropAndResize=function(){return(zb=u._CropAndResize=u.asm.CropAndResize).apply(null,arguments)},Vb=u._Cumprod=function(){return(Vb=u._Cumprod=u.asm.Cumprod).apply(null,arguments)},Wb=u._Cumsum=function(){return(Wb=u._Cumsum=u.asm.Cumsum).apply(null,arguments)},Ub=u._DenseBincount=function(){return(Ub=u._DenseBincount=u.asm.DenseBincount).apply(null,arguments)},Gb=u._DepthToSpace=function(){return(Gb=u._DepthToSpace=u.asm.DepthToSpace).apply(null,arguments)},Hb=u._DepthwiseConv2dNative=function(){return(Hb=u._DepthwiseConv2dNative=u.asm.DepthwiseConv2dNative).apply(null,arguments)},Kb=u._Diag=function(){return(Kb=u._Diag=u.asm.Diag).apply(null,arguments)},qb=u._Dilation2D=function(){return(qb=u._Dilation2D=u.asm.Dilation2D).apply(null,arguments)},jb=u._Dilation2DBackpropFilter=function(){return(jb=u._Dilation2DBackpropFilter=u.asm.Dilation2DBackpropFilter).apply(null,arguments)},Xb=u._Dilation2DBackpropInput=function(){return(Xb=u._Dilation2DBackpropInput=u.asm.Dilation2DBackpropInput).apply(null,arguments)},Yb=u._Elu=function(){return(Yb=u._Elu=u.asm.Elu).apply(null,arguments)},Qb=u._EluGrad=function(){return(Qb=u._EluGrad=u.asm.EluGrad).apply(null,arguments)},Zb=u._Equal=function(){return(Zb=u._Equal=u.asm.Equal).apply(null,arguments)},Jb=u._Erf=function(){return(Jb=u._Erf=u.asm.Erf).apply(null,arguments)},eC=u._Exp=function(){return(eC=u._Exp=u.asm.Exp).apply(null,arguments)},tC=u._Expm1=function(){return(tC=u._Expm1=u.asm.Expm1).apply(null,arguments)},rC=u._FlipLeftRight=function(){return(rC=u._FlipLeftRight=u.asm.FlipLeftRight).apply(null,arguments)},oC=u._Floor=function(){return(oC=u._Floor=u.asm.Floor).apply(null,arguments)},nC=u._FloorDiv=function(){return(nC=u._FloorDiv=u.asm.FloorDiv).apply(null,arguments)},sC=u._FusedBatchNorm=function(){return(sC=u._FusedBatchNorm=u.asm.FusedBatchNorm).apply(null,arguments)},aC=u._FusedConv2D=function(){return(aC=u._FusedConv2D=u.asm.FusedConv2D).apply(null,arguments)},iC=u._FusedDepthwiseConv2D=function(){return(iC=u._FusedDepthwiseConv2D=u.asm.FusedDepthwiseConv2D).apply(null,arguments)},uC=u._Gather=function(){return(uC=u._Gather=u.asm.Gather).apply(null,arguments)},pC=u._GatherNd=function(){return(pC=u._GatherNd=u.asm.GatherNd).apply(null,arguments)},cC=u._Greater=function(){return(cC=u._Greater=u.asm.Greater).apply(null,arguments)},lC=u._GreaterEqual=function(){return(lC=u._GreaterEqual=u.asm.GreaterEqual).apply(null,arguments)},mC=u._IsFinite=function(){return(mC=u._IsFinite=u.asm.IsFinite).apply(null,arguments)},dC=u._IsInf=function(){return(dC=u._IsInf=u.asm.IsInf).apply(null,arguments)},fC=u._IsNan=function(){return(fC=u._IsNan=u.asm.IsNan).apply(null,arguments)},hC=u._LRN=function(){return(hC=u._LRN=u.asm.LRN).apply(null,arguments)},gC=u._LRNGrad=function(){return(gC=u._LRNGrad=u.asm.LRNGrad).apply(null,arguments)},xC=u._LeakyRelu=function(){return(xC=u._LeakyRelu=u.asm.LeakyRelu).apply(null,arguments)},yC=u._Less=function(){return(yC=u._Less=u.asm.Less).apply(null,arguments)},bC=u._LessEqual=function(){return(bC=u._LessEqual=u.asm.LessEqual).apply(null,arguments)},CC=u._LinSpace=function(){return(CC=u._LinSpace=u.asm.LinSpace).apply(null,arguments)},wC=u._Log=function(){return(wC=u._Log=u.asm.Log).apply(null,arguments)},SC=u._Log1p=function(){return(SC=u._Log1p=u.asm.Log1p).apply(null,arguments)},IC=u._LogicalAnd=function(){return(IC=u._LogicalAnd=u.asm.LogicalAnd).apply(null,arguments)},vC=u._LogicalNot=function(){return(vC=u._LogicalNot=u.asm.LogicalNot).apply(null,arguments)},kC=u._LogicalOr=function(){return(kC=u._LogicalOr=u.asm.LogicalOr).apply(null,arguments)},NC=u._LogicalXor=function(){return(NC=u._LogicalXor=u.asm.LogicalXor).apply(null,arguments)},TC=u._Max=function(){return(TC=u._Max=u.asm.Max).apply(null,arguments)},_C=u._MaxPool=function(){return(_C=u._MaxPool=u.asm.MaxPool).apply(null,arguments)},EC=u._MaxPool3D=function(){return(EC=u._MaxPool3D=u.asm.MaxPool3D).apply(null,arguments)},$C=u._MaxPool3DGrad=function(){return($C=u._MaxPool3DGrad=u.asm.MaxPool3DGrad).apply(null,arguments)},RC=u._MaxPoolGrad=function(){return(RC=u._MaxPoolGrad=u.asm.MaxPoolGrad).apply(null,arguments)},DC=u._MaxPoolWithArgmax=function(){return(DC=u._MaxPoolWithArgmax=u.asm.MaxPoolWithArgmax).apply(null,arguments)},AC=u._Maximum=function(){return(AC=u._Maximum=u.asm.Maximum).apply(null,arguments)},FC=u._Mean=function(){return(FC=u._Mean=u.asm.Mean).apply(null,arguments)},PC=u._Min=function(){return(PC=u._Min=u.asm.Min).apply(null,arguments)},OC=u._Minimum=function(){return(OC=u._Minimum=u.asm.Minimum).apply(null,arguments)},MC=u._MirrorPad=function(){return(MC=u._MirrorPad=u.asm.MirrorPad).apply(null,arguments)},LC=u._Mod=function(){return(LC=u._Mod=u.asm.Mod).apply(null,arguments)},BC=u._Multinomial=function(){return(BC=u._Multinomial=u.asm.Multinomial).apply(null,arguments)},zC=u._Multiply=function(){return(zC=u._Multiply=u.asm.Multiply).apply(null,arguments)},VC=u._Neg=function(){return(VC=u._Neg=u.asm.Neg).apply(null,arguments)},WC=u._NonMaxSuppressionV3=function(){return(WC=u._NonMaxSuppressionV3=u.asm.NonMaxSuppressionV3).apply(null,arguments)},UC=u._NonMaxSuppressionV4=function(){return(UC=u._NonMaxSuppressionV4=u.asm.NonMaxSuppressionV4).apply(null,arguments)},Mm=u._NonMaxSuppressionV5=function(){return(Mm=u._NonMaxSuppressionV5=u.asm.NonMaxSuppressionV5).apply(null,arguments)},Lm=u._NotEqual=function(){return(Lm=u._NotEqual=u.asm.NotEqual).apply(null,arguments)},cl=u._OneHot=function(){return(cl=u._OneHot=u.asm.OneHot).apply(null,arguments)},GC=u._PadV2=function(){return(GC=u._PadV2=u.asm.PadV2).apply(null,arguments)},HC=u._Pow=function(){return(HC=u._Pow=u.asm.Pow).apply(null,arguments)},Op=u._Prelu=function(){return(Op=u._Prelu=u.asm.Prelu).apply(null,arguments)},Bm=u._Prod=function(){return(Bm=u._Prod=u.asm.Prod).apply(null,arguments)},Mp=u._RealDiv=function(){return(Mp=u._RealDiv=u.asm.RealDiv).apply(null,arguments)},Lp=u._Reciprocal=function(){return(Lp=u._Reciprocal=u.asm.Reciprocal).apply(null,arguments)},KC=u._Relu=function(){return(KC=u._Relu=u.asm.Relu).apply(null,arguments)},K=u._Relu6=function(){return(K=u._Relu6=u.asm.Relu6).apply(null,arguments)},ae=u._ResizeBilinear=function(){return(ae=u._ResizeBilinear=u.asm.ResizeBilinear).apply(null,arguments)},Ee=u._ResizeBilinearGrad=function(){return(Ee=u._ResizeBilinearGrad=u.asm.ResizeBilinearGrad).apply(null,arguments)},at=u._ResizeNearestNeighbor=function(){return(at=u._ResizeNearestNeighbor=u.asm.ResizeNearestNeighbor).apply(null,arguments)},_t=u._ResizeNearestNeighborGrad=function(){return(_t=u._ResizeNearestNeighborGrad=u.asm.ResizeNearestNeighborGrad).apply(null,arguments)},Et=u._Reverse=function(){return(Et=u._Reverse=u.asm.Reverse).apply(null,arguments)},Qe=u._RotateWithOffset=function(){return(Qe=u._RotateWithOffset=u.asm.RotateWithOffset).apply(null,arguments)},Ke=u._Round=function(){return(Ke=u._Round=u.asm.Round).apply(null,arguments)},Ut=u._Rsqrt=function(){return(Ut=u._Rsqrt=u.asm.Rsqrt).apply(null,arguments)},no=u._ScatterNd=function(){return(no=u._ScatterNd=u.asm.ScatterNd).apply(null,arguments)},Ga=u._SearchSorted=function(){return(Ga=u._SearchSorted=u.asm.SearchSorted).apply(null,arguments)},zm=u._SelectV2=function(){return(zm=u._SelectV2=u.asm.SelectV2).apply(null,arguments)},ll=u._Selu=function(){return(ll=u._Selu=u.asm.Selu).apply(null,arguments)},qC=u._Sigmoid=function(){return(qC=u._Sigmoid=u.asm.Sigmoid).apply(null,arguments)},yr=u._Sign=function(){return(yr=u._Sign=u.asm.Sign).apply(null,arguments)},Ti=u._Sin=function(){return(Ti=u._Sin=u.asm.Sin).apply(null,arguments)},Vm=u._Sinh=function(){return(Vm=u._Sinh=u.asm.Sinh).apply(null,arguments)},XU=u._Softmax=function(){return(XU=u._Softmax=u.asm.Softmax).apply(null,arguments)},YU=u._Softplus=function(){return(YU=u._Softplus=u.asm.Softplus).apply(null,arguments)},QU=u._SparseFillEmptyRows=function(){return(QU=u._SparseFillEmptyRows=u.asm.SparseFillEmptyRows).apply(null,arguments)},ZU=u._SparseReshape=function(){return(ZU=u._SparseReshape=u.asm.SparseReshape).apply(null,arguments)},JU=u._SparseSegmentReduction=function(){return(JU=u._SparseSegmentReduction=u.asm.SparseSegmentReduction).apply(null,arguments)},eG=u._SparseToDense=function(){return(eG=u._SparseToDense=u.asm.SparseToDense).apply(null,arguments)},tG=u._Sqrt=function(){return(tG=u._Sqrt=u.asm.Sqrt).apply(null,arguments)},rG=u._Square=function(){return(rG=u._Square=u.asm.Square).apply(null,arguments)},oG=u._SquaredDifference=function(){return(oG=u._SquaredDifference=u.asm.SquaredDifference).apply(null,arguments)},nG=u._Step=function(){return(nG=u._Step=u.asm.Step).apply(null,arguments)},sG=u._StridedSlice=function(){return(sG=u._StridedSlice=u.asm.StridedSlice).apply(null,arguments)},aG=u._Sub=function(){return(aG=u._Sub=u.asm.Sub).apply(null,arguments)},iG=u._Sum=function(){return(iG=u._Sum=u.asm.Sum).apply(null,arguments)},uG=u._Tan=function(){return(uG=u._Tan=u.asm.Tan).apply(null,arguments)},pG=u._Tanh=function(){return(pG=u._Tanh=u.asm.Tanh).apply(null,arguments)},cG=u._TensorScatterUpdate=function(){return(cG=u._TensorScatterUpdate=u.asm.TensorScatterUpdate).apply(null,arguments)},lG=u._Tile=function(){return(lG=u._Tile=u.asm.Tile).apply(null,arguments)},mG=u._TopK=function(){return(mG=u._TopK=u.asm.TopK).apply(null,arguments)},dG=u._Transform=function(){return(dG=u._Transform=u.asm.Transform).apply(null,arguments)},fG=u._Transpose=function(){return(fG=u._Transpose=u.asm.Transpose).apply(null,arguments)},hG=u.__FusedMatMul=function(){return(hG=u.__FusedMatMul=u.asm._FusedMatMul).apply(null,arguments)},gG=u._malloc=function(){return(gG=u._malloc=u.asm.malloc).apply(null,arguments)},xG=u._free=function(){return(xG=u._free=u.asm.free).apply(null,arguments)},yG=u.__emscripten_tls_init=function(){return(yG=u.__emscripten_tls_init=u.asm._emscripten_tls_init).apply(null,arguments)},Wm=u._pthread_self=function(){return(Wm=u._pthread_self=u.asm.pthread_self).apply(null,arguments)},bG=u.___errno_location=function(){return(bG=u.___errno_location=u.asm.__errno_location).apply(null,arguments)},x0=u.__emscripten_thread_init=function(){return(x0=u.__emscripten_thread_init=u.asm._emscripten_thread_init).apply(null,arguments)},CG=u.__emscripten_thread_crashed=function(){return(CG=u.__emscripten_thread_crashed=u.asm._emscripten_thread_crashed).apply(null,arguments)},wG=u._emscripten_main_thread_process_queued_calls=function(){return(wG=u._emscripten_main_thread_process_queued_calls=u.asm.emscripten_main_thread_process_queued_calls).apply(null,arguments)},SG=u._emscripten_main_browser_thread_id=function(){return(SG=u._emscripten_main_browser_thread_id=u.asm.emscripten_main_browser_thread_id).apply(null,arguments)},y0=u._emscripten_run_in_main_runtime_thread_js=function(){return(y0=u._emscripten_run_in_main_runtime_thread_js=u.asm.emscripten_run_in_main_runtime_thread_js).apply(null,arguments)},IG=u._emscripten_dispatch_to_thread_=function(){return(IG=u._emscripten_dispatch_to_thread_=u.asm.emscripten_dispatch_to_thread_).apply(null,arguments)},b0=u.__emscripten_proxy_execute_task_queue=function(){return(b0=u.__emscripten_proxy_execute_task_queue=u.asm._emscripten_proxy_execute_task_queue).apply(null,arguments)},jC=u.__emscripten_thread_free_data=function(){return(jC=u.__emscripten_thread_free_data=u.asm._emscripten_thread_free_data).apply(null,arguments)},C0=u.__emscripten_thread_exit=function(){return(C0=u.__emscripten_thread_exit=u.asm._emscripten_thread_exit).apply(null,arguments)},w0=u._emscripten_stack_set_limits=function(){return(w0=u._emscripten_stack_set_limits=u.asm.emscripten_stack_set_limits).apply(null,arguments)},XC=u.stackSave=function(){return(XC=u.stackSave=u.asm.stackSave).apply(null,arguments)},Um=u.stackRestore=function(){return(Um=u.stackRestore=u.asm.stackRestore).apply(null,arguments)},Gm=u.stackAlloc=function(){return(Gm=u.stackAlloc=u.asm.stackAlloc).apply(null,arguments)},vG=u.dynCall_iijjiiii=function(){return(vG=u.dynCall_iijjiiii=u.asm.dynCall_iijjiiii).apply(null,arguments)},kG=u.dynCall_jiji=function(){return(kG=u.dynCall_jiji=u.asm.dynCall_jiji).apply(null,arguments)};u.keepRuntimeAlive=Lo,u.wasmMemory=oe,u.cwrap=tb,u.ExitStatus=ku,u.PThread=Me;var Hm;Ua=function F(){Hm||S0(),Hm||(Ua=F)};function S0(F){if(F=F||f,ki>0)return;if(S){c(u),Xt(),startWorker(u);return}if(Ks(),ki>0)return;function V(){Hm||(Hm=!0,u.calledRun=!0,!le&&(Xt(),c(u),u.onRuntimeInitialized&&u.onRuntimeInitialized(),Wa()))}u.setStatus?(u.setStatus(\"Running...\"),setTimeout(function(){setTimeout(function(){u.setStatus(\"\")},1),V()},1)):V()}if(u.preInit)for(typeof u.preInit==\"function\"&&(u.preInit=[u.preInit]);u.preInit.length>0;)u.preInit.pop()();S0();var Km;m&&(Km={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 qm;if(typeof WasmBackendModule!=\"undefined\")qm=WasmBackendModule;else if(typeof e!=\"undefined\")qm=e;else throw new Error(\"Could not find wasm module in post.js\");if(Km){var NG=qm._dispose;qm._dispose=function(){NG(),Km.uncaughtException.forEach(function(F){process.removeListener(\"uncaughtException\",F)}),Km.unhandledRejection.forEach(function(F){process.removeListener(\"unhandledRejection\",F)})}}return e.ready}})();typeof Wg==\"object\"&&typeof Gv==\"object\"?Gv.exports=Uv:typeof define==\"function\"&&define.amd?define([],function(){return Uv}):typeof Wg==\"object\"&&(Wg.WasmBackendModuleThreadedSimd=Uv)});var UB=Kt((e3t,WB)=>{\"use strict\";WB.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\")+\"//# sourceURL=\"+f)},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.startWorker=instance=>{Module=instance;postMessage({\"cmd\":\"loaded\"})};self.onmessage=e=>{try{if(e.data.cmd===\"load\"){Module[\"wasmModule\"]=e.data.wasmModule;for(const handler of e.data.handlers){Module[handler]=function(){postMessage({cmd:\"callHandler\",handler:handler,args:[...arguments]})}}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)}else if(e.data.cmd===\"run\"){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 GB=Kt((Ug,Kv)=>{\"use strict\";var Hv=(()=>{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(K,ae){o=K,n=ae});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=(K,ae)=>{throw ae},c=typeof window==\"object\",l=typeof importScripts==\"function\",m=typeof process==\"object\"&&typeof process.versions==\"object\"&&typeof process.versions.node==\"string\",d=\"\";function f(K){return t.locateFile?t.locateFile(K,d):d+K}var h,g,x,b;function C(K){if(K instanceof Ap)return;$(\"exiting due to exception: \"+K)}if(m){var S=Vv(),k=Wv();l?d=k.dirname(d)+\"/\":d=__dirname+\"/\",h=(K,ae)=>(K=Ks(K)?new URL(K):k.normalize(K),S.readFileSync(K,ae?void 0:\"utf8\")),x=K=>{var ae=h(K,!0);return ae.buffer||(ae=new Uint8Array(ae)),ae},g=(K,ae,Ee)=>{K=Ks(K)?new URL(K):k.normalize(K),S.readFile(K,function(at,_t){at?Ee(at):ae(_t.buffer)})},process.argv.length>1&&(p=process.argv[1].replace(/\\\\/g,\"/\")),i=process.argv.slice(2),process.on(\"uncaughtException\",function(K){if(!(K instanceof Ap))throw K}),process.on(\"unhandledRejection\",function(K){throw K}),u=(K,ae)=>{if(it())throw process.exitCode=K,ae;C(ae),process.exit(K)},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=K=>{var ae=new XMLHttpRequest;return ae.open(\"GET\",K,!1),ae.send(null),ae.responseText},l&&(x=K=>{var ae=new XMLHttpRequest;return ae.open(\"GET\",K,!1),ae.responseType=\"arraybuffer\",ae.send(null),new Uint8Array(ae.response)}),g=(K,ae,Ee)=>{var at=new XMLHttpRequest;at.open(\"GET\",K,!0),at.responseType=\"arraybuffer\",at.onload=()=>{if(at.status==200||at.status==0&&at.response){ae(at.response);return}Ee()},at.onerror=Ee,at.send(null)},b=K=>document.title=K);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 R=4,D;t.wasmBinary&&(D=t.wasmBinary);var P=t.noExitRuntime||!0;typeof WebAssembly!=\"object\"&&fr(\"no native wasm support detected\");var O,M=!1,L;function B(K,ae){K||fr(ae)}var z=typeof TextDecoder!=\"undefined\"?new TextDecoder(\"utf8\"):void 0;function U(K,ae,Ee){ae>>>=0;for(var at=ae+Ee,_t=ae;K[_t]&&!(_t>=at);)++_t;if(_t-ae>16&&K.buffer&&z)return z.decode(K.subarray(ae,_t));for(var Et=\"\";ae<_t;){var Qe=K[ae++];if(!(Qe&128)){Et+=String.fromCharCode(Qe);continue}var Ke=K[ae++]&63;if((Qe&224)==192){Et+=String.fromCharCode((Qe&31)<<6|Ke);continue}var Ut=K[ae++]&63;if((Qe&240)==224?Qe=(Qe&15)<<12|Ke<<6|Ut:Qe=(Qe&7)<<18|Ke<<12|Ut<<6|K[ae++]&63,Qe<65536)Et+=String.fromCharCode(Qe);else{var no=Qe-65536;Et+=String.fromCharCode(55296|no>>10,56320|no&1023)}}return Et}function j(K,ae){return K>>>=0,K?U(ne,K,ae):\"\"}function q(K,ae,Ee,at){if(Ee>>>=0,!(at>0))return 0;for(var _t=Ee,Et=Ee+at-1,Qe=0;Qe=55296&&Ke<=57343){var Ut=K.charCodeAt(++Qe);Ke=65536+((Ke&1023)<<10)|Ut&1023}if(Ke<=127){if(Ee>=Et)break;ae[Ee++>>>0]=Ke}else if(Ke<=2047){if(Ee+1>=Et)break;ae[Ee++>>>0]=192|Ke>>6,ae[Ee++>>>0]=128|Ke&63}else if(Ke<=65535){if(Ee+2>=Et)break;ae[Ee++>>>0]=224|Ke>>12,ae[Ee++>>>0]=128|Ke>>6&63,ae[Ee++>>>0]=128|Ke&63}else{if(Ee+3>=Et)break;ae[Ee++>>>0]=240|Ke>>18,ae[Ee++>>>0]=128|Ke>>12&63,ae[Ee++>>>0]=128|Ke>>6&63,ae[Ee++>>>0]=128|Ke&63}}return ae[Ee>>>0]=0,Ee-_t}function Y(K,ae,Ee){return q(K,ne,ae,Ee)}var J,re,ne,ee,oe,ie,le,be,_e;function ve(K){J=K,t.HEAP8=re=new Int8Array(K),t.HEAP16=ee=new Int16Array(K),t.HEAP32=ie=new Int32Array(K),t.HEAPU8=ne=new Uint8Array(K),t.HEAPU16=oe=new Uint16Array(K),t.HEAPU32=le=new Uint32Array(K),t.HEAPF32=be=new Float32Array(K),t.HEAPF64=_e=new Float64Array(K)}var Fe=t.INITIAL_MEMORY||16777216,Pe,st=[],ct=[],He=[],lt=!1;function it(){return P}function ht(){if(t.preRun)for(typeof t.preRun==\"function\"&&(t.preRun=[t.preRun]);t.preRun.length;)Mt(t.preRun.shift());Ua(st)}function gt(){lt=!0,Ua(ct)}function Lr(){if(t.postRun)for(typeof t.postRun==\"function\"&&(t.postRun=[t.postRun]);t.postRun.length;)rr(t.postRun.shift());Ua(He)}function Mt(K){st.unshift(K)}function to(K){ct.unshift(K)}function rr(K){He.unshift(K)}var Tt=0,or=null,nr=null;function ro(K){Tt++,t.monitorRunDependencies&&t.monitorRunDependencies(Tt)}function oo(K){if(Tt--,t.monitorRunDependencies&&t.monitorRunDependencies(Tt),Tt==0&&(or!==null&&(clearInterval(or),or=null),nr)){var ae=nr;nr=null,ae()}}function fr(K){t.onAbort&&t.onAbort(K),K=\"Aborted(\"+K+\")\",$(K),M=!0,L=1,K+=\". Build with -sASSERTIONS for more info.\";var ae=new WebAssembly.RuntimeError(K);throw n(ae),ae}var Va=\"data:application/octet-stream;base64,\";function Lo(K){return K.startsWith(Va)}function Ks(K){return K.startsWith(\"file://\")}var Xt;Xt=\"tfjs-backend-wasm.wasm\",Lo(Xt)||(Xt=f(Xt));function Wa(K){try{if(K==Xt&&D)return new Uint8Array(D);if(x)return x(K);throw\"both async and sync fetching of the wasm failed\"}catch(ae){fr(ae)}}function ol(){if(!D&&(c||l)){if(typeof fetch==\"function\"&&!Ks(Xt))return fetch(Xt,{credentials:\"same-origin\"}).then(function(K){if(!K.ok)throw\"failed to load wasm binary file at '\"+Xt+\"'\";return K.arrayBuffer()}).catch(function(){return Wa(Xt)});if(g)return new Promise(function(K,ae){g(Xt,function(Ee){K(new Uint8Array(Ee))},ae)})}return Promise.resolve().then(function(){return Wa(Xt)})}function nl(){var K={env:sl,wasi_snapshot_preview1:sl};function ae(Qe,Ke){var Ut=Qe.exports;t.asm=Ut,O=t.asm.memory,ve(O.buffer),Pe=t.asm.__indirect_function_table,to(t.asm.__wasm_call_ctors),oo(\"wasm-instantiate\")}ro(\"wasm-instantiate\");function Ee(Qe){ae(Qe.instance)}function at(Qe){return ol().then(function(Ke){return WebAssembly.instantiate(Ke,K)}).then(function(Ke){return Ke}).then(Qe,function(Ke){$(\"failed to asynchronously prepare wasm: \"+Ke),fr(Ke)})}function _t(){return!D&&typeof WebAssembly.instantiateStreaming==\"function\"&&!Lo(Xt)&&!Ks(Xt)&&!m&&typeof fetch==\"function\"?fetch(Xt,{credentials:\"same-origin\"}).then(function(Qe){var Ke=WebAssembly.instantiateStreaming(Qe,K);return Ke.then(Ee,function(Ut){return $(\"wasm streaming compile failed: \"+Ut),$(\"falling back to ArrayBuffer instantiation\"),at(Ee)})}):at(Ee)}if(t.instantiateWasm)try{var Et=t.instantiateWasm(K,ae);return Et}catch(Qe){$(\"Module.instantiateWasm callback failed with error: \"+Qe),n(Qe)}return _t().catch(n),{}}var d0,ki;function Ap(K){this.name=\"ExitStatus\",this.message=\"Program terminated with exit(\"+K+\")\",this.status=K}function Ua(K){for(;K.length>0;)K.shift()(t)}function Cy(){fr(\"\")}function wm(){return 4294901760}function vu(){return wm()}function wy(K,ae,Ee){ne.copyWithin(K>>>0,ae>>>0,ae+Ee>>>0)}function Sm(K){try{return O.grow(K-J.byteLength+65535>>>16),ve(O.buffer),1}catch(ae){}}function Fp(K){var ae=ne.length;K=K>>>0;var Ee=wm();if(K>Ee)return!1;let at=(Ut,no)=>Ut+(no-Ut%no)%no;for(var _t=1;_t<=4;_t*=2){var Et=ae*(1+.2/_t);Et=Math.min(Et,K+100663296);var Qe=Math.min(Ee,at(Math.max(K,Et),65536)),Ke=Sm(Qe);if(Ke)return!0}return!1}var hr={varargs:void 0,get:function(){hr.varargs+=4;var K=ie[hr.varargs-4>>>2];return K},getStr:function(K){var ae=j(K);return ae}};function Im(K){return 52}function Sy(K,ae,Ee,at,_t){return 70}var Iy=[null,[],[]];function f0(K,ae){var Ee=Iy[K];ae===0||ae===10?((K===1?_:$)(U(Ee,0)),Ee.length=0):Ee.push(ae)}function h0(K,ae,Ee,at){for(var _t=0,Et=0;Et>>2],Ke=le[ae+4>>>2];ae+=8;for(var Ut=0;Ut>>0]);_t+=Ke}return le[at>>>2]=_t,0}function vm(K){var ae=t[\"_\"+K];return ae}function ku(K,ae){re.set(K,ae>>>0)}function vy(K,ae,Ee,at,_t){var Et={string:yr=>{var Ti=0;if(yr!=null&&yr!==0){var Vm=(yr.length<<2)+1;Ti=cl(Vm),Y(yr,Ti,Vm)}return Ti},array:yr=>{var Ti=cl(yr.length);return ku(yr,Ti),Ti}};function Qe(yr){return ae===\"string\"?j(yr):ae===\"boolean\"?!!yr:yr}var Ke=vm(K),Ut=[],no=0;if(at)for(var Ga=0;GaQe===\"number\"||Qe===\"boolean\"),Et=ae!==\"string\";return Et&&_t&&!at?vm(K):function(){return vy(K,ae,Ee,arguments,at)}}var sl={abort:Cy,emscripten_get_heap_max:vu,emscripten_memcpy_big:wy,emscripten_resize_heap:Fp,fd_close:Im,fd_seek:Sy,fd_write:h0},Ny=nl(),km=t.___wasm_call_ctors=function(){return(km=t.___wasm_call_ctors=t.asm.__wasm_call_ctors).apply(null,arguments)},Nm=t._init=function(){return(Nm=t._init=t.asm.init).apply(null,arguments)},Ty=t._init_with_threads_count=function(){return(Ty=t._init_with_threads_count=t.asm.init_with_threads_count).apply(null,arguments)},Tm=t._get_threads_count=function(){return(Tm=t._get_threads_count=t.asm.get_threads_count).apply(null,arguments)},_y=t._register_tensor=function(){return(_y=t._register_tensor=t.asm.register_tensor).apply(null,arguments)},Me=t._dispose_data=function(){return(Me=t._dispose_data=t.asm.dispose_data).apply(null,arguments)},al=t._dispose=function(){return(al=t._dispose=t.asm.dispose).apply(null,arguments)},Ey=t._Abs=function(){return(Ey=t._Abs=t.asm.Abs).apply(null,arguments)},_m=t._Acos=function(){return(_m=t._Acos=t.asm.Acos).apply(null,arguments)},Pp=t._Acosh=function(){return(Pp=t._Acosh=t.asm.Acosh).apply(null,arguments)},$y=t._Add=function(){return($y=t._Add=t.asm.Add).apply(null,arguments)},Ry=t._AddN=function(){return(Ry=t._AddN=t.asm.AddN).apply(null,arguments)},Dy=t._All=function(){return(Dy=t._All=t.asm.All).apply(null,arguments)},Ay=t._Any=function(){return(Ay=t._Any=t.asm.Any).apply(null,arguments)},Fy=t._ArgMax=function(){return(Fy=t._ArgMax=t.asm.ArgMax).apply(null,arguments)},Em=t._ArgMin=function(){return(Em=t._ArgMin=t.asm.ArgMin).apply(null,arguments)},$m=t._Asin=function(){return($m=t._Asin=t.asm.Asin).apply(null,arguments)},Py=t._Asinh=function(){return(Py=t._Asinh=t.asm.Asinh).apply(null,arguments)},Oy=t._Atan=function(){return(Oy=t._Atan=t.asm.Atan).apply(null,arguments)},My=t._Atan2=function(){return(My=t._Atan2=t.asm.Atan2).apply(null,arguments)},il=t._Atanh=function(){return(il=t._Atanh=t.asm.Atanh).apply(null,arguments)},Ly=t._AvgPool=function(){return(Ly=t._AvgPool=t.asm.AvgPool).apply(null,arguments)},By=t._AvgPool3D=function(){return(By=t._AvgPool3D=t.asm.AvgPool3D).apply(null,arguments)},zy=t._AvgPool3DGrad=function(){return(zy=t._AvgPool3DGrad=t.asm.AvgPool3DGrad).apply(null,arguments)},Nu=t._AvgPoolGrad=function(){return(Nu=t._AvgPoolGrad=t.asm.AvgPoolGrad).apply(null,arguments)},Vy=t._BatchMatMul=function(){return(Vy=t._BatchMatMul=t.asm.BatchMatMul).apply(null,arguments)},Wy=t._Bincount=function(){return(Wy=t._Bincount=t.asm.Bincount).apply(null,arguments)},Rm=t._BitwiseAnd=function(){return(Rm=t._BitwiseAnd=t.asm.BitwiseAnd).apply(null,arguments)},Uy=t._Ceil=function(){return(Uy=t._Ceil=t.asm.Ceil).apply(null,arguments)},ul=t._ClipByValue=function(){return(ul=t._ClipByValue=t.asm.ClipByValue).apply(null,arguments)},Gy=t._Conv2D=function(){return(Gy=t._Conv2D=t.asm.Conv2D).apply(null,arguments)},Hy=t._Conv2DBackpropInput=function(){return(Hy=t._Conv2DBackpropInput=t.asm.Conv2DBackpropInput).apply(null,arguments)},Ky=t._Conv3D=function(){return(Ky=t._Conv3D=t.asm.Conv3D).apply(null,arguments)},Ni=t._Conv3DBackpropFilterV2=function(){return(Ni=t._Conv3DBackpropFilterV2=t.asm.Conv3DBackpropFilterV2).apply(null,arguments)},pl=t._Conv3DBackpropInputV2=function(){return(pl=t._Conv3DBackpropInputV2=t.asm.Conv3DBackpropInputV2).apply(null,arguments)},qy=t._Cos=function(){return(qy=t._Cos=t.asm.Cos).apply(null,arguments)},jy=t._Cosh=function(){return(jy=t._Cosh=t.asm.Cosh).apply(null,arguments)},Xy=t._CropAndResize=function(){return(Xy=t._CropAndResize=t.asm.CropAndResize).apply(null,arguments)},Yy=t._Cumprod=function(){return(Yy=t._Cumprod=t.asm.Cumprod).apply(null,arguments)},Dm=t._Cumsum=function(){return(Dm=t._Cumsum=t.asm.Cumsum).apply(null,arguments)},Am=t._DenseBincount=function(){return(Am=t._DenseBincount=t.asm.DenseBincount).apply(null,arguments)},Qy=t._DepthToSpace=function(){return(Qy=t._DepthToSpace=t.asm.DepthToSpace).apply(null,arguments)},Zy=t._DepthwiseConv2dNative=function(){return(Zy=t._DepthwiseConv2dNative=t.asm.DepthwiseConv2dNative).apply(null,arguments)},Fm=t._Diag=function(){return(Fm=t._Diag=t.asm.Diag).apply(null,arguments)},Pm=t._Dilation2D=function(){return(Pm=t._Dilation2D=t.asm.Dilation2D).apply(null,arguments)},Jy=t._Dilation2DBackpropFilter=function(){return(Jy=t._Dilation2DBackpropFilter=t.asm.Dilation2DBackpropFilter).apply(null,arguments)},eb=t._Dilation2DBackpropInput=function(){return(eb=t._Dilation2DBackpropInput=t.asm.Dilation2DBackpropInput).apply(null,arguments)},tb=t._Elu=function(){return(tb=t._Elu=t.asm.Elu).apply(null,arguments)},rb=t._EluGrad=function(){return(rb=t._EluGrad=t.asm.EluGrad).apply(null,arguments)},Om=t._Equal=function(){return(Om=t._Equal=t.asm.Equal).apply(null,arguments)},g0=t._Erf=function(){return(g0=t._Erf=t.asm.Erf).apply(null,arguments)},ob=t._Exp=function(){return(ob=t._Exp=t.asm.Exp).apply(null,arguments)},nb=t._Expm1=function(){return(nb=t._Expm1=t.asm.Expm1).apply(null,arguments)},sb=t._FlipLeftRight=function(){return(sb=t._FlipLeftRight=t.asm.FlipLeftRight).apply(null,arguments)},ab=t._Floor=function(){return(ab=t._Floor=t.asm.Floor).apply(null,arguments)},ib=t._FloorDiv=function(){return(ib=t._FloorDiv=t.asm.FloorDiv).apply(null,arguments)},ub=t._FusedBatchNorm=function(){return(ub=t._FusedBatchNorm=t.asm.FusedBatchNorm).apply(null,arguments)},pb=t._FusedConv2D=function(){return(pb=t._FusedConv2D=t.asm.FusedConv2D).apply(null,arguments)},cb=t._FusedDepthwiseConv2D=function(){return(cb=t._FusedDepthwiseConv2D=t.asm.FusedDepthwiseConv2D).apply(null,arguments)},lb=t._Gather=function(){return(lb=t._Gather=t.asm.Gather).apply(null,arguments)},mb=t._GatherNd=function(){return(mb=t._GatherNd=t.asm.GatherNd).apply(null,arguments)},db=t._Greater=function(){return(db=t._Greater=t.asm.Greater).apply(null,arguments)},fb=t._GreaterEqual=function(){return(fb=t._GreaterEqual=t.asm.GreaterEqual).apply(null,arguments)},hb=t._IsFinite=function(){return(hb=t._IsFinite=t.asm.IsFinite).apply(null,arguments)},gb=t._IsInf=function(){return(gb=t._IsInf=t.asm.IsInf).apply(null,arguments)},xb=t._IsNan=function(){return(xb=t._IsNan=t.asm.IsNan).apply(null,arguments)},yb=t._LRN=function(){return(yb=t._LRN=t.asm.LRN).apply(null,arguments)},bb=t._LRNGrad=function(){return(bb=t._LRNGrad=t.asm.LRNGrad).apply(null,arguments)},Cb=t._LeakyRelu=function(){return(Cb=t._LeakyRelu=t.asm.LeakyRelu).apply(null,arguments)},wb=t._Less=function(){return(wb=t._Less=t.asm.Less).apply(null,arguments)},Sb=t._LessEqual=function(){return(Sb=t._LessEqual=t.asm.LessEqual).apply(null,arguments)},Ib=t._LinSpace=function(){return(Ib=t._LinSpace=t.asm.LinSpace).apply(null,arguments)},vb=t._Log=function(){return(vb=t._Log=t.asm.Log).apply(null,arguments)},kb=t._Log1p=function(){return(kb=t._Log1p=t.asm.Log1p).apply(null,arguments)},Nb=t._LogicalAnd=function(){return(Nb=t._LogicalAnd=t.asm.LogicalAnd).apply(null,arguments)},Tb=t._LogicalNot=function(){return(Tb=t._LogicalNot=t.asm.LogicalNot).apply(null,arguments)},_b=t._LogicalOr=function(){return(_b=t._LogicalOr=t.asm.LogicalOr).apply(null,arguments)},Eb=t._LogicalXor=function(){return(Eb=t._LogicalXor=t.asm.LogicalXor).apply(null,arguments)},$b=t._Max=function(){return($b=t._Max=t.asm.Max).apply(null,arguments)},Rb=t._MaxPool=function(){return(Rb=t._MaxPool=t.asm.MaxPool).apply(null,arguments)},Db=t._MaxPool3D=function(){return(Db=t._MaxPool3D=t.asm.MaxPool3D).apply(null,arguments)},Ab=t._MaxPool3DGrad=function(){return(Ab=t._MaxPool3DGrad=t.asm.MaxPool3DGrad).apply(null,arguments)},Fb=t._MaxPoolGrad=function(){return(Fb=t._MaxPoolGrad=t.asm.MaxPoolGrad).apply(null,arguments)},Pb=t._MaxPoolWithArgmax=function(){return(Pb=t._MaxPoolWithArgmax=t.asm.MaxPoolWithArgmax).apply(null,arguments)},Ob=t._Maximum=function(){return(Ob=t._Maximum=t.asm.Maximum).apply(null,arguments)},Mb=t._Mean=function(){return(Mb=t._Mean=t.asm.Mean).apply(null,arguments)},Lb=t._Min=function(){return(Lb=t._Min=t.asm.Min).apply(null,arguments)},Bb=t._Minimum=function(){return(Bb=t._Minimum=t.asm.Minimum).apply(null,arguments)},zb=t._MirrorPad=function(){return(zb=t._MirrorPad=t.asm.MirrorPad).apply(null,arguments)},Vb=t._Mod=function(){return(Vb=t._Mod=t.asm.Mod).apply(null,arguments)},Wb=t._Multinomial=function(){return(Wb=t._Multinomial=t.asm.Multinomial).apply(null,arguments)},Ub=t._Multiply=function(){return(Ub=t._Multiply=t.asm.Multiply).apply(null,arguments)},Gb=t._Neg=function(){return(Gb=t._Neg=t.asm.Neg).apply(null,arguments)},Hb=t._NonMaxSuppressionV3=function(){return(Hb=t._NonMaxSuppressionV3=t.asm.NonMaxSuppressionV3).apply(null,arguments)},Kb=t._NonMaxSuppressionV4=function(){return(Kb=t._NonMaxSuppressionV4=t.asm.NonMaxSuppressionV4).apply(null,arguments)},qb=t._NonMaxSuppressionV5=function(){return(qb=t._NonMaxSuppressionV5=t.asm.NonMaxSuppressionV5).apply(null,arguments)},jb=t._NotEqual=function(){return(jb=t._NotEqual=t.asm.NotEqual).apply(null,arguments)},Xb=t._OneHot=function(){return(Xb=t._OneHot=t.asm.OneHot).apply(null,arguments)},Yb=t._PadV2=function(){return(Yb=t._PadV2=t.asm.PadV2).apply(null,arguments)},Qb=t._Pow=function(){return(Qb=t._Pow=t.asm.Pow).apply(null,arguments)},Zb=t._Prelu=function(){return(Zb=t._Prelu=t.asm.Prelu).apply(null,arguments)},Jb=t._Prod=function(){return(Jb=t._Prod=t.asm.Prod).apply(null,arguments)},eC=t._RealDiv=function(){return(eC=t._RealDiv=t.asm.RealDiv).apply(null,arguments)},tC=t._Reciprocal=function(){return(tC=t._Reciprocal=t.asm.Reciprocal).apply(null,arguments)},rC=t._Relu=function(){return(rC=t._Relu=t.asm.Relu).apply(null,arguments)},oC=t._Relu6=function(){return(oC=t._Relu6=t.asm.Relu6).apply(null,arguments)},nC=t._ResizeBilinear=function(){return(nC=t._ResizeBilinear=t.asm.ResizeBilinear).apply(null,arguments)},sC=t._ResizeBilinearGrad=function(){return(sC=t._ResizeBilinearGrad=t.asm.ResizeBilinearGrad).apply(null,arguments)},aC=t._ResizeNearestNeighbor=function(){return(aC=t._ResizeNearestNeighbor=t.asm.ResizeNearestNeighbor).apply(null,arguments)},iC=t._ResizeNearestNeighborGrad=function(){return(iC=t._ResizeNearestNeighborGrad=t.asm.ResizeNearestNeighborGrad).apply(null,arguments)},uC=t._Reverse=function(){return(uC=t._Reverse=t.asm.Reverse).apply(null,arguments)},pC=t._RotateWithOffset=function(){return(pC=t._RotateWithOffset=t.asm.RotateWithOffset).apply(null,arguments)},cC=t._Round=function(){return(cC=t._Round=t.asm.Round).apply(null,arguments)},lC=t._Rsqrt=function(){return(lC=t._Rsqrt=t.asm.Rsqrt).apply(null,arguments)},mC=t._ScatterNd=function(){return(mC=t._ScatterNd=t.asm.ScatterNd).apply(null,arguments)},dC=t._SearchSorted=function(){return(dC=t._SearchSorted=t.asm.SearchSorted).apply(null,arguments)},fC=t._SelectV2=function(){return(fC=t._SelectV2=t.asm.SelectV2).apply(null,arguments)},hC=t._Selu=function(){return(hC=t._Selu=t.asm.Selu).apply(null,arguments)},gC=t._Sigmoid=function(){return(gC=t._Sigmoid=t.asm.Sigmoid).apply(null,arguments)},xC=t._Sign=function(){return(xC=t._Sign=t.asm.Sign).apply(null,arguments)},yC=t._Sin=function(){return(yC=t._Sin=t.asm.Sin).apply(null,arguments)},bC=t._Sinh=function(){return(bC=t._Sinh=t.asm.Sinh).apply(null,arguments)},CC=t._Softmax=function(){return(CC=t._Softmax=t.asm.Softmax).apply(null,arguments)},wC=t._Softplus=function(){return(wC=t._Softplus=t.asm.Softplus).apply(null,arguments)},SC=t._SparseFillEmptyRows=function(){return(SC=t._SparseFillEmptyRows=t.asm.SparseFillEmptyRows).apply(null,arguments)},IC=t._SparseReshape=function(){return(IC=t._SparseReshape=t.asm.SparseReshape).apply(null,arguments)},vC=t._SparseSegmentReduction=function(){return(vC=t._SparseSegmentReduction=t.asm.SparseSegmentReduction).apply(null,arguments)},kC=t._SparseToDense=function(){return(kC=t._SparseToDense=t.asm.SparseToDense).apply(null,arguments)},NC=t._Sqrt=function(){return(NC=t._Sqrt=t.asm.Sqrt).apply(null,arguments)},TC=t._Square=function(){return(TC=t._Square=t.asm.Square).apply(null,arguments)},_C=t._SquaredDifference=function(){return(_C=t._SquaredDifference=t.asm.SquaredDifference).apply(null,arguments)},EC=t._Step=function(){return(EC=t._Step=t.asm.Step).apply(null,arguments)},$C=t._StridedSlice=function(){return($C=t._StridedSlice=t.asm.StridedSlice).apply(null,arguments)},RC=t._Sub=function(){return(RC=t._Sub=t.asm.Sub).apply(null,arguments)},DC=t._Sum=function(){return(DC=t._Sum=t.asm.Sum).apply(null,arguments)},AC=t._Tan=function(){return(AC=t._Tan=t.asm.Tan).apply(null,arguments)},FC=t._Tanh=function(){return(FC=t._Tanh=t.asm.Tanh).apply(null,arguments)},PC=t._TensorScatterUpdate=function(){return(PC=t._TensorScatterUpdate=t.asm.TensorScatterUpdate).apply(null,arguments)},OC=t._Tile=function(){return(OC=t._Tile=t.asm.Tile).apply(null,arguments)},MC=t._TopK=function(){return(MC=t._TopK=t.asm.TopK).apply(null,arguments)},LC=t._Transform=function(){return(LC=t._Transform=t.asm.Transform).apply(null,arguments)},BC=t._Transpose=function(){return(BC=t._Transpose=t.asm.Transpose).apply(null,arguments)},zC=t.__FusedMatMul=function(){return(zC=t.__FusedMatMul=t.asm._FusedMatMul).apply(null,arguments)},VC=t._malloc=function(){return(VC=t._malloc=t.asm.malloc).apply(null,arguments)},WC=t._free=function(){return(WC=t._free=t.asm.free).apply(null,arguments)},UC=t.___errno_location=function(){return(UC=t.___errno_location=t.asm.__errno_location).apply(null,arguments)},Mm=t.stackSave=function(){return(Mm=t.stackSave=t.asm.stackSave).apply(null,arguments)},Lm=t.stackRestore=function(){return(Lm=t.stackRestore=t.asm.stackRestore).apply(null,arguments)},cl=t.stackAlloc=function(){return(cl=t.stackAlloc=t.asm.stackAlloc).apply(null,arguments)},GC=t.dynCall_iijjiiii=function(){return(GC=t.dynCall_iijjiiii=t.asm.dynCall_iijjiiii).apply(null,arguments)},HC=t.dynCall_jiji=function(){return(HC=t.dynCall_jiji=t.asm.dynCall_jiji).apply(null,arguments)};t.cwrap=ky;var Op;nr=function K(){Op||Bm(),Op||(nr=K)};function Bm(K){if(K=K||i,Tt>0||(ht(),Tt>0))return;function ae(){Op||(Op=!0,t.calledRun=!0,!M&&(gt(),o(t),t.onRuntimeInitialized&&t.onRuntimeInitialized(),Lr()))}t.setStatus?(t.setStatus(\"Running...\"),setTimeout(function(){setTimeout(function(){t.setStatus(\"\")},1),ae()},1)):ae()}if(t.preInit)for(typeof t.preInit==\"function\"&&(t.preInit=[t.preInit]);t.preInit.length>0;)t.preInit.pop()();Bm();var Mp;s&&(Mp={uncaughtException:process.listeners(\"uncaughtException\").filter(function(K){return!s.uncaughtException.indexOf(K)>-1}),unhandledRejection:process.listeners(\"unhandledRejection\").filter(function(K){return!s.unhandledRejection.indexOf(K)>-1})});var Lp;if(typeof e!=\"undefined\")Lp=e;else if(typeof WasmBackendModuleThreadedSimd!=\"undefined\")Lp=WasmBackendModuleThreadedSimd;else throw new Error(\"Could not find wasm module in post.js\");if(Mp){var KC=Lp._dispose;Lp._dispose=function(){KC(),Mp.uncaughtException.forEach(function(K){process.removeListener(\"uncaughtException\",K)}),Mp.unhandledRejection.forEach(function(K){process.removeListener(\"unhandledRejection\",K)})}}return e.ready}})();typeof Ug==\"object\"&&typeof Kv==\"object\"?Kv.exports=Hv:typeof define==\"function\"&&define.amd?define([],function(){return Hv}):typeof Ug==\"object\"&&(Ug.WasmBackendModule=Hv)});var Bo=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}},ao=class{refCount(e){return zr(\"refCount\")}incRef(e){return zr(\"incRef\")}timerAvailable(){return!0}time(e){return zr(\"time\")}read(e){return zr(\"read\")}readSync(e){return zr(\"readSync\")}readToGPU(e,t){return zr(\"readToGPU\")}numDataIds(){return zr(\"numDataIds\")}disposeData(e,t){return zr(\"disposeData\")}write(e,t,o){return zr(\"write\")}move(e,t,o,n,s){return zr(\"move\")}createTensorFromGPUData(e,t,o){return zr(\"createTensorFromGPUData\")}memory(){return zr(\"memory\")}floatPrecision(){return zr(\"floatPrecision\")}epsilon(){return this.floatPrecision()===32?1e-7:1e-4}dispose(){return zr(\"dispose\")}};function zr(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 k0(r){let e=r.length,t=0;for(;e>0;)t=Math.random()*e|0,e--,jm(r,e,t)}function FG(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--,jm(r,t,o),jm(e,t,o)}function Vp(r,e,t){return Math.max(r,Math.min(e,t))}function PG(r){return r%2===0?r:r+1}function jm(r,e,t){let o=r[e];r[e]=r[t],r[t]=o}function OG(r){let e=0;for(let t=0;tt+` Shapes ${r} and ${e} must match`)}function io(r){E(r!=null,()=>\"The input to the tensor constructor must be a non-null value.\")}function ze(r){if(r.length===0)return 1;let e=r[0];for(let t=1;t0,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 GG(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 _i(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=>Ka(o)),()=>`All values in axis param must be integers but got axis ${r}`),r.map(o=>o<0?t+o:o)}function JC(r,e){let t=[],o=[],n=e!=null&&Array.isArray(e)&&e.length===0,s=e==null||n?null:_i(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 ew(r,e){return Xm(r,e)}function Xm(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 tw(r,e){for(let t=0;te+=t.length),e}function zo(r){return typeof r==\"string\"||r instanceof String}function N0(r){return typeof r==\"boolean\"}function T0(r){return typeof r==\"number\"}function Ei(r){return Array.isArray(r)?Ei(r[0]):r instanceof Float32Array?\"float32\":r instanceof Int32Array||r instanceof Uint8Array||r instanceof Uint8ClampedArray?\"int32\":T0(r)?\"float32\":zo(r)?\"string\":N0(r)?\"bool\":\"float32\"}function qs(r){return!!(r&&r.constructor&&r.call&&r.apply)}function Up(r,e){for(let t=e;t=0;--o)t[o]=t[o+1]*r[o+1];return t}function _0(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 _0(0,r,e,t)}function KG(r,e){if(Array.isArray(r))return r;if(e===\"float32\")return r instanceof Float32Array?r:new Float32Array(r);if(e===\"int32\")return r instanceof Int32Array?r:new Int32Array(r);if(e===\"bool\"||e===\"string\")return Uint8Array.from(new Int32Array(r));throw new Error(`Unknown dtype ${e}`)}function ml(r,e){let t=Gp(r,e);for(let o=0;oo*n,1);if(e==null||e===\"float32\")return Tu(r,new Float32Array(t));if(e===\"int32\")return Tu(r,new Int32Array(t));if(e===\"bool\")return Tu(r,new Uint8Array(t));throw new Error(`Unknown data type ${e}`)}function Ct(r){r.forEach(e=>{E(Number.isInteger(e)&&e>=0,()=>`Tensor must have a shape comprised of positive integers but got shape [${r}].`)})}function jG(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]=JG(n,s)})}};function QG(r){let e={};return r.replace(/[?&]([^=?&]+)(?:=([^&]*))?/g,(t,...o)=>(ZG(e,o[0],o[1]),o.join(\"=\"))),e}function ZG(r,e,t){r[decodeURIComponent(e)]=decodeURIComponent(t||\"\")}function JG(r,e){let t=e.toLowerCase();return t===\"true\"||t===\"false\"?t===\"true\":`${+t}`===t?+t:e}function A(){return nw}var nw=null;function $0(r){nw=r}var sw;function aw(){if(sw==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\");sw=r}return sw}function e4(){let r=aw();return r._tfGlobals==null&&(r._tfGlobals=new Map),r._tfGlobals}function fl(r,e){let t=e4();if(t.has(r))return t.get(r);{let o=e();return t.set(r,o),t.get(r)}}var Xs=\"Abs\",Vo=\"Acos\",Wo=\"Acosh\",uo=\"Add\",Uo=\"AddN\",Go=\"All\",Ho=\"Any\",Ys=\"ArgMax\",Qs=\"ArgMin\",Ko=\"Asin\",qo=\"Asinh\",jo=\"Atan\",Xo=\"Atanh\",Yo=\"Atan2\",Qo=\"AvgPool\",$i=\"AvgPoolGrad\",Zs=\"AvgPool3D\",Ri=\"AvgPool3DGrad\",Zo=\"BatchMatMul\",Js=\"BatchToSpaceND\",Jo=\"Bincount\",qa=\"BitwiseAnd\",qce=\"BroadcastTo\",ea=\"BroadcastArgs\",yo=\"Cast\",en=\"Ceil\",bo=\"ClipByValue\",Di=\"Complex\",Ai=\"ComplexAbs\",ta=\"Concat\",tn=\"Conv2D\",Fi=\"Conv2DBackpropFilter\",rn=\"Conv2DBackpropInput\",on=\"Conv3D\",ja=\"Conv3DBackpropFilterV2\",nn=\"Conv3DBackpropInputV2\",sn=\"Cos\",an=\"Cosh\",un=\"Cumprod\",pn=\"Cumsum\",cn=\"CropAndResize\",ra=\"DenseBincount\",ln=\"DepthToSpace\",mn=\"DepthwiseConv2dNative\",Pi=\"DepthwiseConv2dNativeBackpropFilter\",Oi=\"DepthwiseConv2dNativeBackpropInput\",oa=\"Diag\",dn=\"Dilation2D\",Mi=\"Dilation2DBackpropInput\",Li=\"Dilation2DBackpropFilter\",$u=\"Draw\",fn=\"RealDiv\",Bi=\"Einsum\",hn=\"Elu\",Xa=\"EluGrad\",gn=\"Erf\",xn=\"Equal\",yn=\"Exp\",na=\"ExpandDims\",bn=\"Expm1\",zi=\"FFT\",sa=\"Fill\",Cn=\"FlipLeftRight\",wn=\"Floor\",Sn=\"FloorDiv\",In=\"FusedBatchNorm\",aa=\"GatherV2\",vn=\"GatherNd\",kn=\"Greater\",Nn=\"GreaterEqual\",Co=\"Identity\",Vi=\"IFFT\",Wi=\"Imag\",Tn=\"IsFinite\",_n=\"IsInf\",En=\"IsNan\",$n=\"LeakyRelu\",Rn=\"Less\",Dn=\"LessEqual\",An=\"LinSpace\",Fn=\"Log\",Pn=\"Log1p\",On=\"LogicalAnd\",Mn=\"LogicalNot\",Ln=\"LogicalOr\",R0=\"LogicalXor\",jce=\"LogSoftmax\",Xce=\"LowerBound\",Bn=\"LRN\",Ya=\"LRNGrad\",Yce=\"MatrixBandPart\",zn=\"Max\",Vn=\"Maximum\",Wn=\"MaxPool\",Ui=\"MaxPoolGrad\",ia=\"MaxPool3D\",Gi=\"MaxPool3DGrad\",ua=\"MaxPoolWithArgmax\",Un=\"Mean\",Gn=\"Min\",Hn=\"Minimum\",Kn=\"MirrorPad\",qn=\"Mod\",jn=\"Multinomial\",Xn=\"Multiply\",pa=\"Neg\",Yn=\"NotEqual\",Qn=\"NonMaxSuppressionV3\",Qa=\"NonMaxSuppressionV4\",Zn=\"NonMaxSuppressionV5\",ca=\"OnesLike\",Jn=\"OneHot\",la=\"Pack\",es=\"PadV2\",Qce=\"Pool\",ts=\"Pow\",rs=\"Prelu\",os=\"Prod\",Hp=\"RaggedGather\",Kp=\"RaggedRange\",qp=\"RaggedTensorToTensor\",ma=\"Range\",Hi=\"Real\",ns=\"Reciprocal\",ss=\"Relu\",da=\"Reshape\",as=\"ResizeNearestNeighbor\",Za=\"ResizeNearestNeighborGrad\",is=\"ResizeBilinear\",Ja=\"ResizeBilinearGrad\",us=\"Relu6\",ps=\"Reverse\",cs=\"Round\",ls=\"Rsqrt\",ms=\"ScatterNd\",ds=\"TensorScatterUpdate\",fs=\"SearchSorted\",fa=\"Select\",hs=\"Selu\",ha=\"Slice\",gs=\"Sin\",xs=\"Sinh\",ys=\"Sign\",bs=\"Sigmoid\",Cs=\"Softplus\",ws=\"Sqrt\",Ss=\"Sum\",ga=\"SpaceToBatchND\",xa=\"SplitV\",Is=\"Softmax\",Ki=\"SparseFillEmptyRows\",ei=\"SparseReshape\",ya=\"SparseSegmentMean\",ba=\"SparseSegmentSum\",vs=\"SparseToDense\",ks=\"SquaredDifference\",qi=\"Square\",Ru=\"StaticRegexReplace\",Ns=\"StridedSlice\",Ca=\"StringNGrams\",ji=\"StringSplit\",Xi=\"StringToHashBucketFast\",Ts=\"Sub\",_s=\"Tan\",Es=\"Tanh\",po=\"Tile\",$s=\"TopK\",Rs=\"Transform\",co=\"Transpose\",Yi=\"Unique\",wa=\"Unpack\",Qi=\"UnsortedSegmentSum\",Zce=\"UpperBound\",Sa=\"ZerosLike\",wo=\"Step\",Du=\"FromPixels\",Ds=\"RotateWithOffset\",So=\"_FusedMatMul\",Io=\"FusedConv2D\",vo=\"FusedDepthwiseConv2D\";function Ia(...r){A().getBool(\"IS_TEST\")||A().getBool(\"PROD\")||console.warn(...r)}function t4(...r){A().getBool(\"IS_TEST\")||A().getBool(\"PROD\")||console.log(...r)}var jp=fl(\"kernelRegistry\",()=>new Map),hl=fl(\"gradRegistry\",()=>new Map);function Xp(r,e){let t=uw(r,e);return jp.get(t)}function iw(r){return hl.get(r)}function Ym(r){let e=jp.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 ti(r){let{kernelName:e,backendName:t}=r,o=uw(e,t);jp.has(o)&&Ia(`The kernel '${e}' for backend '${t}' is already registered`),jp.set(o,r)}function ole(r){let{kernelName:e}=r;hl.has(e)&&A().getBool(\"DEBUG\")&&Ia(`Overriding the gradient for '${e}'`),hl.set(e,r)}function nle(r,e){let t=uw(r,e);if(!jp.has(t))throw new Error(`The kernel '${r}' for backend '${e}' is not registered`);jp.delete(t)}function sle(r){if(!hl.has(r))throw new Error(`The gradient '${r}' for backend is not registered`);hl.delete(r)}function ale(r,e){Ym(r).forEach(o=>{let n=Object.assign({},o,{backendName:e});ti(n)})}function uw(r,e){return`${e}_${r}`}var y={};qe(y,{arraysEqual:()=>br,arraysEqualWithNull:()=>ZC,assert:()=>E,assertNonNegativeIntegerDimensions:()=>Ct,assertNonNull:()=>io,assertShapesMatch:()=>xt,bytesFromStringArray:()=>ow,bytesPerElement:()=>Wp,checkConversionForErrors:()=>tw,clamp:()=>Vp,computeStrides:()=>js,convertBackendValuesAndArrayBuffer:()=>KG,createScalarValue:()=>u4,createShuffledIndices:()=>WG,decodeString:()=>Jp,distSquared:()=>LG,encodeString:()=>Ji,fetch:()=>c4,fingerPrint64:()=>i4,flatten:()=>Fs,getArrayFromDType:()=>Xm,getTypedArrayFromDType:()=>ew,hasEncodingLoss:()=>HG,hexToLong:()=>gl,indexToLoc:()=>XG,inferDtype:()=>Ei,inferFromImplicitShape:()=>GG,isBoolean:()=>N0,isFunction:()=>qs,isInt:()=>Ka,isNumber:()=>T0,isPromise:()=>Eu,isScalarShape:()=>BG,isString:()=>zo,isTypedArray:()=>Pt,isValidDtype:()=>rw,locToIndex:()=>jG,makeOnesTypedArray:()=>ml,makeZerosNestedTypedArray:()=>qG,makeZerosTypedArray:()=>Gp,nearestDivisor:()=>Up,nearestLargerEven:()=>PG,now:()=>Mu,parseAxisParam:()=>_i,randUniform:()=>MG,repeatedTry:()=>UG,rightPad:()=>_u,shuffle:()=>k0,shuffleCombo:()=>FG,sizeFromShape:()=>ze,sizeToSquarishShape:()=>VG,squeezeShape:()=>JC,sum:()=>OG,swap:()=>jm,tanh:()=>zG,toNestedArray:()=>Tu,toTypedArray:()=>Zp});function Qm(r){return r instanceof Float32Array||r instanceof Int32Array||r instanceof Uint8Array||r instanceof Uint8ClampedArray}var mw=zp(U0());var Ou=mw.default||mw;function gl(r){return Ou.fromString(r,!0,16)}var H0=gl(\"c3a5c85c97cb3127\"),Pu=gl(\"b492b66fbe98f273\"),Cr=gl(\"9ae16a3b2f90404f\");function lw(r){return r.xor(r.shru(47))}function K0(r,e,t){let o=r.slice(e,e+t);return Ou.fromBytes(Array.from(o),!0,!0)}function wt(r,e){return K0(r,e,8)}function G0(r,e){return K0(r,e,4)}function Yt(r,e){return e===0?r:r.shru(e).or(r.shl(64-e))}function Zi(r,e,t=gl(\"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 o4(r,e,t,o,n,s){n=n.add(r),s=Yt(s.add(n).add(o),21);let a=n;return n=n.add(e),n=n.add(t),s=s.add(Yt(n,44)),[n.add(o),s.add(a)]}function Jm(r,e,t,o){return o4(wt(r,e),wt(r,e+8),wt(r,e+16),wt(r,e+24),t,o)}function n4(r,e=r.length){if(e>=8){let t=Cr.add(e*2),o=wt(r,0).add(Cr),n=wt(r,e-8),s=Yt(n,37).mul(t).add(o),a=Yt(o,25).add(n).mul(t);return Zi(s,a,t)}if(e>=4){let t=Cr.add(e*2),o=G0(r,0);return Zi(o.shl(3).add(e),G0(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 lw(Cr.mul(s).xor(H0.mul(a))).mul(Cr)}return Cr}function s4(r,e=r.length){let t=Cr.add(e*2),o=wt(r,0).mul(Pu),n=wt(r,8),s=wt(r,e-8).mul(t),a=wt(r,e-16).mul(Cr);return Zi(Yt(o.add(n),43).add(Yt(s,30)).add(a),o.add(Yt(n.add(Cr),18)).add(s),t)}function a4(r,e=r.length){let t=Cr.add(e*2),o=wt(r,0).mul(Cr),n=wt(r,8),s=wt(r,e-8).mul(t),a=wt(r,e-16).mul(Cr),i=Yt(o.add(n),43).add(Yt(s,30)).add(a),p=Zi(i,o.add(Yt(n.add(Cr),18)).add(s),t),u=wt(r,16).mul(t),c=wt(r,24),l=i.add(wt(r,e-32)).mul(t),m=p.add(wt(r,e-24)).mul(t);return Zi(Yt(u.add(c),43).add(Yt(l,30)).add(m),u.add(Yt(c.add(o),18)).add(l),t)}function i4(r,e=r.length){let t=Ou.fromNumber(81,!0);if(e<=32)return e<=16?n4(r,e):s4(r,e);if(e<=64)return a4(r,e);let o=t,n=t.mul(Pu).add(113),s=lw(n.mul(Cr).add(113)).mul(Cr),a=[Ou.UZERO,Ou.UZERO],i=[Ou.UZERO,Ou.UZERO];o=o.mul(Cr).add(wt(r,0));let p=0,u=(e-1>>6)*64,c=u+(e-1&63)-63;do o=Yt(o.add(n).add(a[0]).add(wt(r,p+8)),37).mul(Pu),n=Yt(n.add(a[1]).add(wt(r,p+48)),42).mul(Pu),o=o.xor(i[1]),n=n.add(a[0]).add(wt(r,p+40)),s=Yt(s.add(i[0]),33).mul(Pu),a=Jm(r,p,a[1].mul(Pu),o.add(i[0])),i=Jm(r,p+32,s.add(i[1]),n.add(wt(r,p+16))),[s,o]=[o,s],p+=64;while(p!==u);let l=Pu.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=Yt(o.add(n).add(a[0]).add(wt(r,p+8)),37).mul(l),n=Yt(n.add(a[1]).add(wt(r,p+48)),42).mul(l),o=o.xor(i[1].mul(9)),n=n.add(a[0].mul(9).add(wt(r,p+40))),s=Yt(s.add(i[0]),33).mul(l),a=Jm(r,p,a[1].mul(l),o.add(i[0])),i=Jm(r,p+32,s.add(i[1]),n.add(wt(r,p+16))),[s,o]=[o,s],Zi(Zi(a[0],i[0],l).add(lw(n).mul(H0)).add(s),Zi(a[1],i[1],l).add(o),l)}function u4(r,e){return e===\"string\"?Ji(r):Zp([r],e)}function p4(r,e){return r instanceof Float32Array&&e===\"float32\"||r instanceof Int32Array&&e===\"int32\"||r instanceof Uint8Array&&e===\"bool\"}function Zp(r,e){if(e===\"string\")throw new Error(\"Cannot convert a string[] to a TypedArray\");if(Array.isArray(r)&&(r=Fs(r)),A().getBool(\"DEBUG\")&&tw(r,e),p4(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=Mu();if(this.backendTimer.timerAvailable())a=this.backendTimer.time(s);else{s();for(let u of n)u.dataSync();a=Promise.resolve({kernelMs:Mu()-i})}if(A().getBool(\"CHECK_COMPUTATION_FOR_ERRORS\"))for(let u=0;u{l4(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 l4(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 q0(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(!br(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 X0=20,xl=3,fw=7;function Y0(r,e,t,o){let n=js(e),s=m4(r,e,t,n),a=e.length,i=td(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 m4(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\"?bl(r):r;if(i>1)for(let u=0;uX0){let g=xl*a,x=Array.from(r.slice(0,g)),b=Array.from(r.slice((i-xl)*a,i*a));return t===\"complex64\"&&(x=bl(x),b=bl(b)),[\"[\"+x.map((C,S)=>yl(C,n[S],t)).join(\", \")+\", ..., \"+b.map((C,S)=>yl(C,n[i-xl+S],t)).join(\", \")+\"]\"]}return[\"[\"+(t===\"complex64\"?bl(r):Array.from(r)).map((g,x)=>yl(g,n[x],t)).join(\", \")+\"]\"]}let u=e.slice(1),c=o.slice(1),l=o[0]*a,m=[];if(i>X0){for(let h=0;h0?m[0]+d:\"\");for(let h=1;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||Xm(t,this.size),this.strides=js(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;nJp(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(),Ps().readToGPU(this.dataId,e)}dataSync(){this.throwIfDisposed();let e=Ps().readSync(this.dataId);if(this.dtype===\"string\")try{return e.map(t=>Jp(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 Ps().read(this.dataId);return this.dtype===\"string\"?e:new Uint8Array(e.buffer)}dispose(){this.isDisposed||(this.kerasMask&&this.kerasMask.dispose(),Ps().disposeTensor(this),this.isDisposedInternal=!0)}get isDisposed(){return this.isDisposedInternal}throwIfDisposed(){if(this.isDisposed)throw new Error(\"Tensor is disposed.\")}print(e=!1){return ec.print(this,e)}clone(){return this.throwIfDisposed(),ec.clone(this)}toString(e=!1){let t=this.dataSync();return Y0(t,this.shape,this.dtype,e)}cast(e){return this.throwIfDisposed(),ec.cast(this,e)}variable(e=!0,t,o){return this.throwIfDisposed(),Ps().makeVariable(this,e,t,o)}};Object.defineProperty(mt,Symbol.hasInstance,{value:r=>!!r&&r.data!=null&&r.dataSync!=null&&r.throwIfDisposed!=null});function hw(){return fl(\"Tensor\",()=>mt)}hw();var ri=class extends mt{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(!br(e.shape,this.shape))throw new Error(`shape of the new value (${e.shape}) and previous value (${this.shape}) must match`);Ps().disposeTensor(this),this.dataId=e.dataId,Ps().incRef(this,null)}dispose(){Ps().disposeVariable(this),this.isDisposedInternal=!0}};Object.defineProperty(ri,Symbol.hasInstance,{value:r=>r instanceof mt&&r.assign!=null&&r.assign instanceof Function});var rk={};qe(rk,{assertTypesMatch:()=>ww,getTensorsInContainer:()=>Cl,isTensorInList:()=>h4,makeTypesMatch:()=>Oe});var gw;(function(r){r.R0=\"R0\",r.R1=\"R1\",r.R2=\"R2\",r.R3=\"R3\",r.R4=\"R4\",r.R5=\"R5\",r.R6=\"R6\"})(gw||(gw={}));var xw;(function(r){r.float32=\"float32\",r.int32=\"int32\",r.bool=\"int32\",r.complex64=\"complex64\"})(xw||(xw={}));var yw;(function(r){r.float32=\"float32\",r.int32=\"int32\",r.bool=\"bool\",r.complex64=\"complex64\"})(yw||(yw={}));var bw;(function(r){r.float32=\"float32\",r.int32=\"float32\",r.bool=\"float32\",r.complex64=\"complex64\"})(bw||(bw={}));var Cw;(function(r){r.float32=\"complex64\",r.int32=\"complex64\",r.bool=\"complex64\",r.complex64=\"complex64\"})(Cw||(Cw={}));var f4={float32:bw,int32:xw,bool:yw,complex64:Cw};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 f4[r][e]}function oi(r){return dt(r,\"int32\")}function rd(r){return r!=null&&typeof r==\"object\"&&\"texture\"in r&&r.texture instanceof WebGLTexture}function od(r){return typeof GPUBuffer!=\"undefined\"&&r!=null&&typeof r==\"object\"&&\"buffer\"in r&&r.buffer instanceof GPUBuffer}function Oe(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 ww(r,e){E(r.dtype===e.dtype,()=>`The dtypes of the first(${r.dtype}) and second(${e.dtype}) input must match`)}function h4(r,e){return e.some(t=>t.id===r.id)}function Cl(r){let e=[];return tk(r,e,new Set),e}function tk(r,e,t){if(r==null)return;if(r instanceof mt){e.push(r);return}if(!g4(r))return;let o=r;for(let n in o){let s=o[n];t.has(s)||(t.add(s),tk(s,e,t))}}function g4(r){return Array.isArray(r)||typeof r==\"object\"}function Sw(r){return r.kernelName!=null}var nd=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()}},wl=class r{constructor(e){this.ENV=e,this.registry={},this.registryFactory={},this.pendingBackendInitId=0,this.state=new nd}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){Ym(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 ao)&&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 r.nextTensorId++}nextVariableId(){return r.nextVariableId++}clone(e){let t=T.runKernel(Co,{x:e}),o={x:e},n=a=>({x:()=>{let i=\"float32\",p={x:a},u={dtype:i};return T.runKernel(yo,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,!(Xp(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=Sw(e)?e.kernelName:this.state.activeScope!=null?this.state.activeScope.name:\"\";if(Sw(e)){let{kernelName:f,inputs:h,attrs:g}=e;this.backendName==null&&this.backend;let x=Xp(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 S=C.map(k=>k.rank!=null?k:this.makeTensorFromTensorInfo(k));if(n){let k=this.getTensorsForGradient(f,h,S);o=this.saveTensorsForBackwardMode(k)}return S}}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=Sw(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=iw(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\"&&zo(e[0])&&(s=e.map(p=>Ji(p)));let a=n.write(s,t,o),i=new mt(t,o,a,this.nextTensorId());if(this.trackTensor(i,n),o===\"string\"){let p=this.state.tensorInfo.get(a),u=ow(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 mt(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 ri(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*Wp(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 ri||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*Wp(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=iw(e);p!=null&&(n=p.gradFunc),n!=null&&(i.gradient=u=>(u=u.map((c,l)=>{if(c==null){let m=o[l],d=Gp(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=Cl(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 mt,()=>\"The result y returned by f() must be a tensor.\");let a=q0(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?x4(s.shape):o,j0(i,a,u=>this.tidy(u),y4);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(qs(e),()=>\"The f passed in customGrad(f) must be a function.\"),(...t)=>{E(t.every(i=>i instanceof mt),()=>\"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 mt,()=>\"The function f passed in customGrad(f) must return an object where `obj.value` is a tensor\"),E(qs(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 mt),()=>\"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=Mu(),o=await this.backend.time(e);return o.wallMs=Mu()-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 nd;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}};wl.nextTensorId=0;wl.nextVariableId=0;function x4(r){let e=ml(ze(r),\"float32\");return T.makeTensor(e,r,\"float32\")}function Iw(){let r=aw();if(r._tfengine==null){let e=new dl(r);r._tfengine=new wl(e)}return $0(r._tfengine.ENV),Z0(()=>r._tfengine),r._tfengine}var T=Iw();function y4(r,e){let t={a:r,b:e};return T.runKernel(uo,t)}var eu={};qe(eu,{isBrowser:()=>kw,isMobile:()=>w4,mockIsMobile:()=>C4});function b4(){return typeof navigator!=\"undefined\"&&navigator!=null}var vw;function C4(r){vw=r}function w4(r){if(vw!==void 0)return vw;if(r||b4()){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 kw(){return typeof window!=\"undefined\"&&window.document!=null||typeof WorkerGlobalScope!=\"undefined\"}var _r=A();_r.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.\")});_r.registerFlag(\"IS_BROWSER\",()=>kw());_r.registerFlag(\"IS_NODE\",()=>typeof process!=\"undefined\"&&typeof process.versions!=\"undefined\"&&typeof process.versions.node!=\"undefined\");_r.registerFlag(\"IS_CHROME\",()=>typeof navigator!=\"undefined\"&&navigator!=null&&navigator.userAgent!=null&&/Chrome/.test(navigator.userAgent)&&/Google Inc/.test(navigator.vendor));_r.registerFlag(\"IS_SAFARI\",()=>typeof navigator!=\"undefined\"&&navigator!=null&&navigator.userAgent!=null&&/Safari/.test(navigator.userAgent)&&/Apple/.test(navigator.vendor));_r.registerFlag(\"PROD\",()=>!1);_r.registerFlag(\"TENSORLIKE_CHECK_SHAPE_CONSISTENCY\",()=>_r.getBool(\"DEBUG\"));_r.registerFlag(\"DEPRECATION_WARNINGS_ENABLED\",()=>!0);_r.registerFlag(\"IS_TEST\",()=>!1);_r.registerFlag(\"CHECK_COMPUTATION_FOR_ERRORS\",()=>_r.getBool(\"DEBUG\"));_r.registerFlag(\"WRAP_TO_IMAGEBITMAP\",()=>!1);_r.registerFlag(\"CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU\",()=>!1);_r.registerFlag(\"USE_SETTIMEOUTCUSTOM\",()=>!1);function sr(r,e){let t=r;if(Pt(r))return e===\"string\"?[]:[r.length];if(rd(r)){let n=r.channels||\"RGBA\";return[r.height,r.width*n.length]}else if(od(r))return[r.buffer.size/(e==null?4:Wp(e))];if(!Array.isArray(r))return[];let o=[];for(;Array.isArray(t)||Pt(t)&&e!==\"string\";)o.push(t.length),t=t[0];return Array.isArray(r)&&A().getBool(\"TENSORLIKE_CHECK_SHAPE_CONSISTENCY\")&&nk(r,o,[]),o}function nk(r,e,t){if(t=t||[],!Array.isArray(r)&&!Pt(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),ok(o,n,e,t),r==null||!Pt(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=sr(r,n);!Pt(r)&&!Array.isArray(r)&&(r=[r]);let i=n!==\"string\"?Zp(r,n):Fs(r,[],!0);return T.makeTensor(i,s,n)}function ni(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 Nw=\"__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+Nw;let n=(...s)=>{T.startScope(t);try{let a=o(...s);return Eu(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 S4(r,e){let t=v(r,\"real\",\"complex\"),o=v(e,\"imag\",\"complex\");xt(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(Di,n)}var Er=N({complex_:S4});function wr(r,e,t,o){if(o==null)o=Ei(r);else if(o===\"complex64\")throw new Error(\"Cannot construct a complex64 tensor directly. Please use tf.complex(real, imag).\");if(od(r)||rd(r)){if(o!==\"float32\"&&o!==\"int32\")throw new Error(`Creating tensor from GPU data only supports 'float32'|'int32' dtype, while the dtype is ${o}.`);return T.backend.createTensorFromGPUData(r,e||t,o)}if(!Pt(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){Ct(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!Pt(r)&&!Array.isArray(r)&&(r=[r]),e=e||t,r=o!==\"string\"?Zp(r,o):Fs(r,[],!0),T.makeTensor(r,e,o)}function ar(r,e,t){let o=sr(r,t);return wr(r,e,o,t)}var si={float32:4,float16:2,int32:4,uint16:2,uint8:1,bool:1,complex64:8};var ir=class r{static join(e){return new r(e).slice()}constructor(e){if(this.shards=[],this.previousShardIndex=0,e==null||(e instanceof Array||(e=[e]),e=e.map(o=>Pt(o)?o.buffer:o),e.length===0))return;this.bufferUniformSize=e[0].byteLength;let t=0;for(let o=0;o=this.byteLength)return-1;if(this.bufferUniformSize!=null)return this.previousShardIndex=Math.floor(e/this.bufferUniformSize),this.previousShardIndex;function t(n){return e=n.end?1:0}if(t(this.shards[this.previousShardIndex])===0)return this.previousShardIndex;let o=I4(this.shards,t);return o===-1?-1:(this.previousShardIndex=o,this.previousShardIndex)}};function I4(r,e){let t=0,o=r.length;for(;t<=o;){let n=Math.floor((o-t)/2)+t,s=e(r[n]);if(s===0)return n;s<0?o=n:t=n+1}return-1}function hme(){A().set(\"PROD\",!0)}function gme(){A().set(\"DEBUG\",!0)}function xme(){A().set(\"DEPRECATION_WARNINGS_ENABLED\",!1),console.warn(\"TensorFlow.js deprecation warnings have been disabled.\")}function Tw(r){A().getBool(\"DEPRECATION_WARNINGS_ENABLED\")&&console.warn(r+\" You can disable deprecation warnings with tf.disableDeprecationWarnings().\")}ek(Tw);function yme(){T.disposeVariables()}function ur(){return T}function bme(){return T.memory()}function Cme(r){return T.profile(r)}function De(r,e){return T.tidy(r,e)}function Ot(r){Cl(r).forEach(t=>t.dispose())}function $r(r){return T.keep(r)}function wme(r){return T.time(r)}function Sme(r){return T.setBackend(r)}function Ime(){return T.ready()}function sk(){return T.backendName}function vme(r){T.removeBackend(r)}function kme(r){return T.findBackend(r)}function Nme(r){return T.findBackendFactory(r)}function tu(r,e,t=1){return T.registerBackend(r,e,t)}function ak(){return T.backend}function Tme(r,e){A().setPlatform(r,e)}var ru=4;async function pk(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)+ru*m.length,f=new Uint8Array(d),h=0;for(let g=0;gt.slice(n+i,n+p));o[s.name]=ck(s,t.slice(n,n+a)),n+=a}return o}function v4(r,e){let t=ze(r.shape),o;if(\"quantization\"in r){let n=r.quantization;o=si[n.dtype]}else if(r.dtype===\"string\"){let n=0;for(let s=0;s(n=await ik(o,n,c),n.slice(u,c)));n=await ik(o,n,a);let i=n.slice(0,a);n=n.slice(a);let p=ck(s,i);if(t[s.name]=p,sk()===\"webgpu\"){let u=ak();\"uploadToGPU\"in u&&ze(p.shape)>=A().get(\"WEBGPU_CPU_HANDOFF_SIZE_THRESHOLD\")&&u.uploadToGPU(p.dataId)}}return t}function N4(r){if(r===null)throw new Error(`Invalid input value: ${JSON.stringify(r)}`);let e=0,t=[];r.forEach(s=>{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 _w=typeof Buffer!=\"undefined\"&&(typeof Blob==\"undefined\"||typeof atob==\"undefined\"||typeof btoa==\"undefined\");function uk(r){return _w?Buffer.byteLength(r,\"utf8\"):new Blob([r]).size}function lk(r){if(_w)return Buffer.from(r).toString(\"base64\");let e=new Uint8Array(r),t=\"\";for(let o=0,n=e.length;o{let o=t<<13,n=0;for(;!(o&8388608);)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 _4(){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 E4(){let r=new Uint32Array(64);for(let e=0;e<64;e++)r[e]=1024;return r[0]=r[32]=0,r}function $4(){let r=T4(),e=_4(),t=E4();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 qt=class r{constructor(){this.saveRouters=[],this.loadRouters=[]}static getInstance(){return r.instance==null&&(r.instance=new r),r.instance}static registerSaveRouter(e){r.getInstance().saveRouters.push(e)}static registerLoadRouter(e){r.getInstance().loadRouters.push(e)}static getSaveHandlers(e){return r.getHandlers(e,\"save\")}static getLoadHandlers(e,t){return r.getHandlers(e,\"load\",t)}static getHandlers(e,t,o){let n=[];return(t===\"load\"?r.getInstance().loadRouters:r.getInstance().saveRouters).forEach(a=>{let i=a(e,o);i!==null&&n.push(i)}),n}},fk=r=>qt.registerSaveRouter(r),hk=r=>qt.registerLoadRouter(r),gk=r=>qt.getSaveHandlers(r),xk=(r,e)=>qt.getLoadHandlers(r,e);var Rw=\"tensorflowjs\",Dw=1,Lu=\"models_store\",ou=\"model_info_store\";function yk(){if(!A().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 Aw(r){let e=r.result;e.createObjectStore(Lu,{keyPath:\"modelPath\"}),e.createObjectStore(ou,{keyPath:\"modelPath\"})}var ka=class{constructor(e){if(this.indexedDB=yk(),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(Rw,Dw);s.onupgradeneeded=()=>Aw(s),s.onsuccess=()=>{let a=s.result;if(t==null){let i=a.transaction(Lu,\"readonly\"),u=i.objectStore(Lu).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{t.weightData=ir.join(t.weightData);let i=va(t),p=a.transaction(ou,\"readwrite\"),u=p.objectStore(ou),c;try{c=u.put({modelPath:this.modelPath,modelArtifactsInfo:i})}catch(m){return n(m)}let l;c.onsuccess=()=>{l=a.transaction(Lu,\"readwrite\");let m=l.objectStore(Lu),d;try{d=m.put({modelPath:this.modelPath,modelArtifacts:t,modelArtifactsInfo:i})}catch(f){return n(f)}d.onsuccess=()=>o({modelArtifactsInfo:i}),d.onerror=f=>{u=p.objectStore(ou);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)})}};ka.URL_SCHEME=\"indexeddb://\";var bk=r=>A().getBool(\"IS_BROWSER\")&&!Array.isArray(r)&&r.startsWith(ka.URL_SCHEME)?R4(r.slice(ka.URL_SCHEME.length)):null;qt.registerSaveRouter(bk);qt.registerLoadRouter(bk);function R4(r){return new ka(r)}function D4(r){return r.startsWith(ka.URL_SCHEME)?r.slice(ka.URL_SCHEME.length):r}var ud=class{constructor(){this.indexedDB=yk()}async listModels(){return new Promise((e,t)=>{let o=this.indexedDB.open(Rw,Dw);o.onupgradeneeded=()=>Aw(o),o.onsuccess=()=>{let n=o.result,s=n.transaction(ou,\"readonly\"),i=s.objectStore(ou).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=D4(e),new Promise((t,o)=>{let n=this.indexedDB.open(Rw,Dw);n.onupgradeneeded=()=>Aw(n),n.onsuccess=()=>{let s=n.result,a=s.transaction(ou,\"readwrite\"),i=a.objectStore(ou),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(Lu,\"readwrite\");let d=u.objectStore(Lu).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 ai=\"/\",rc=\"tensorflowjs_models\",Ck=\"info\",A4=\"model_topology\",F4=\"weight_specs\",P4=\"weight_data\",O4=\"model_metadata\";function wk(r){return{info:[rc,r,Ck].join(ai),topology:[rc,r,A4].join(ai),weightSpecs:[rc,r,F4].join(ai),weightData:[rc,r,P4].join(ai),modelMetadata:[rc,r,O4].join(ai)}}function Sk(r){for(let e of Object.values(r))window.localStorage.removeItem(e)}function M4(r){let e=r.split(ai);if(e.length<3)throw new Error(`Invalid key format: ${r}`);return e.slice(1,e.length-1).join(ai)}function L4(r){return r.startsWith(Na.URL_SCHEME)?r.slice(Na.URL_SCHEME.length):r}var Na=class{constructor(e){if(!A().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=wk(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=va(e),s=ir.join(e.weightData);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,lk(s));let a={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(a)),{modelArtifactsInfo:n}}catch(a){throw Sk(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=mk(a),t}};Na.URL_SCHEME=\"localstorage://\";var Ik=r=>A().getBool(\"IS_BROWSER\")&&!Array.isArray(r)&&r.startsWith(Na.URL_SCHEME)?B4(r.slice(Na.URL_SCHEME.length)):null;qt.registerSaveRouter(Ik);qt.registerLoadRouter(Ik);function B4(r){return new Na(r)}var pd=class{constructor(){E(A().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=rc+ai,o=ai+Ck;for(let n=0;n\"scheme must not be undefined or null.\"),e.endsWith(oc)&&(e=e.slice(0,e.indexOf(oc))),E(e.length>0,()=>\"scheme must not be an empty string.\");let o=r.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=r.getInstance().managers[e];if(t==null)throw new Error(`Cannot find model manager for scheme '${e}'`);return t}static getSchemes(){return Object.keys(r.getInstance().managers)}};function cd(r){if(r.indexOf(oc)===-1)throw new Error(`The url string provided does not contain a scheme. Supported schemes are: ${Os.getSchemes().join(\",\")}`);return{scheme:r.split(oc)[0],path:r.split(oc)[1]}}async function vk(r,e,t=!1){E(r!==e,()=>`Old path and new path are the same: '${r}'`);let o=qt.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=qt.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=cd(r).scheme,p=cd(r).path,u=i===cd(r).scheme,c=await n.load();t&&u&&await Os.getManager(i).removeModel(p);let l=await a.save(c);return t&&!u&&await Os.getManager(i).removeModel(p),l.modelArtifactsInfo}async function kk(){let r=Os.getSchemes(),e={};for(let t of r){let o=await Os.getManager(t).listModels();for(let n in o){let s=t+oc+n;e[s]=o[n]}}return e}async function Nk(r){let e=cd(r);return Os.getManager(e.scheme).removeModel(e.path)}async function Tk(r,e){return vk(r,e,!1)}async function _k(r,e){return vk(r,e,!0)}var Fw=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\"||!A().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))}isTypedArray(e){return Qm(e)}};if(A().get(\"IS_BROWSER\")){A().setPlatform(\"browser\",new Fw);try{Os.registerManager(Na.URL_SCHEME,new pd)}catch(r){}try{Os.registerManager(ka.URL_SCHEME,new ud)}catch(r){}}var z4={importFetch:()=>Ek()},Pw;var Ow=class{constructor(){this.util=$k(),this.textEncoder=new this.util.TextEncoder}fetch(e,t){return A().global.fetch!=null?A().global.fetch(e,t):(Pw==null&&(Pw=z4.importFetch()),Pw(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)}isTypedArray(e){return this.util.types.isFloat32Array(e)||this.util.types.isInt32Array(e)||this.util.types.isUint8Array(e)||this.util.types.isUint8ClampedArray(e)}};A().get(\"IS_NODE\")&&!A().get(\"IS_BROWSER\")&&A().setPlatform(\"node\",new Ow);function me(r,e=\"float32\",t){return e=e||\"float32\",Ct(r),new tt(r,e,t)}function V4(r,e){let t=v(r,\"x\",\"cast\");if(!rw(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(yo,o,n)}var Ue=N({cast_:V4});function W4(r){let t={x:v(r,\"x\",\"clone\",\"string_or_numeric\")};return T.runKernel(Co,t)}var Ur=N({clone_:W4});function ld(r,e=!1){console.log(r.toString(e))}Iw();var U4={buffer:me,cast:Ue,clone:Ur,print:ld};J0(U4);function G4(r,e){let t=v(r,\"a\",\"add\"),o=v(e,\"b\",\"add\");[t,o]=Oe(t,o);let n={a:t,b:o};return T.runKernel(uo,n)}var Ce=N({add_:G4});function H4(r,e){let t=v(r,\"a\",\"floorDiv\"),o=v(e,\"b\",\"floorDiv\");[t,o]=Oe(t,o);let n={a:t,b:o};return T.runKernel(Sn,n)}var md=N({floorDiv_:H4});function K4(r,e){let t=v(r,\"a\",\"div\"),o=v(e,\"b\",\"div\");if([t,o]=Oe(t,o),t.dtype===\"int32\"&&o.dtype===\"int32\")return md(t,o);let n={a:t,b:o},s={};return T.runKernel(fn,n,s)}var je=N({div_:K4});function q4(r,e){let t=v(r,\"a\",\"mul\"),o=v(e,\"b\",\"mul\");[t,o]=Oe(t,o);let n={a:t,b:o};return T.runKernel(Xn,n)}var se=N({mul_:q4});function j4(r){let e=v(r,\"x\",\"abs\");if(e.dtype===\"complex64\"){let t={x:e};return T.runKernel(Ai,t)}else{let t={x:e};return T.runKernel(Xs,t)}}var Qt=N({abs_:j4});function X4(r){let t={x:v(r,\"x\",\"acos\")};return T.runKernel(Vo,t)}var Rk=N({acos_:X4});function Y4(r){let t={x:v(r,\"x\",\"acosh\")};return T.runKernel(Wo,t)}var Dk=N({acosh_:Y4});function Q4(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(!br(n.shape,t.shape))throw new Error(\"All tensors passed to tf.addN() must have the same shape\")});let o=e;return T.runKernel(Uo,o)}var Ak=N({addN_:Q4});function Z4(r,e=null,t=!1){let n={x:v(r,\"x\",\"all\",\"bool\")},s={axis:e,keepDims:t};return T.runKernel(Go,n,s)}var Fk=N({all_:Z4});function J4(r,e=null,t=!1){let n={x:v(r,\"x\",\"any\",\"bool\")},s={axis:e,keepDims:t};return T.runKernel(Ho,n,s)}var Pk=N({any_:J4});function eH(r,e=0){let o={x:v(r,\"x\",\"argMax\")},n={axis:e};return T.runKernel(Ys,o,n)}var Ok=N({argMax_:eH});function tH(r,e=0){let o={x:v(r,\"x\",\"argMin\")},n={axis:e};return T.runKernel(Qs,o,n)}var Mk=N({argMin_:tH});function rH(r){let t={x:v(r,\"x\",\"asin\")};return T.runKernel(Ko,t)}var Lk=N({asin_:rH});function oH(r){let t={x:v(r,\"x\",\"asinh\")};return T.runKernel(qo,t)}var Bk=N({asinh_:oH});function nH(r){let t={x:v(r,\"x\",\"atan\")};return T.runKernel(jo,t)}var zk=N({atan_:nH});function sH(r,e){let t=v(r,\"a\",\"atan2\"),o=v(e,\"b\",\"atan2\");[t,o]=Oe(t,o);let n={a:t,b:o};return T.runKernel(Yo,n)}var Vk=N({atan2_:sH});function aH(r){let t={x:v(r,\"x\",\"atanh\")};return T.runKernel(Xo,t)}var Wk=N({atanh_:aH});function iH(r,e,t,o,n=\"NHWC\",s){let a=r[3],i=[...e,a],p=Gk(n);return zu(r,i,t,s,o,null,null,p)}function Lw(r,e,t,o,n,s,a=\"channelsLast\"){let[i,p]=Il(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 zu(r,u,t,o,n,s,!1,a)}function uH(r,e,t,o,n,s,a=\"NDHWC\"){let[i,p,u]=Mw(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 Uk(r,c,t,o,n,!1,l,s)}function zu(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]=Il(t),[x,b]=Il(o),C=nc(m,x),S=nc(d,b),{padInfo:k,outHeight:_,outWidth:$}=lH(n,u,c,h,g,C,S,s,i),R=a?f*l:f,D;return i===\"channelsFirst\"?D=[p,R,_,$]:i===\"channelsLast\"&&(D=[p,_,$,R]),{batchSize:p,dataFormat:i,inHeight:u,inWidth:c,inChannels:l,outHeight:_,outWidth:$,outChannels:R,padInfo:k,strideHeight:h,strideWidth:g,filterHeight:m,filterWidth:d,effectiveFilterHeight:C,effectiveFilterWidth:S,dilationHeight:x,dilationWidth:b,inShape:r,outShape:D,filterShape:e}}function Uk(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]=Mw(t),[S,k,_]=Mw(o),$=nc(d,S),R=nc(f,k),D=nc(h,_),{padInfo:P,outDepth:O,outHeight:M,outWidth:L}=mH(n,u,c,l,x,b,C,$,R,D,i),B=s?g*m:g,z;return a===\"channelsFirst\"?z=[p,B,O,M,L]:a===\"channelsLast\"&&(z=[p,O,M,L,B]),{batchSize:p,dataFormat:a,inDepth:u,inHeight:c,inWidth:l,inChannels:m,outDepth:O,outHeight:M,outWidth:L,outChannels:B,padInfo:P,strideDepth:x,strideHeight:b,strideWidth:C,filterDepth:d,filterHeight:f,filterWidth:h,effectiveFilterDepth:$,effectiveFilterHeight:R,effectiveFilterWidth:D,dilationDepth:S,dilationHeight:k,dilationWidth:_,inShape:r,outShape:z,filterShape:e}}function pH(r,e,t,o,n){o==null&&(o=Bw(r,e,t));let s=r[0],a=r[1],i=vl((s-e+2*o)/t+1,n),p=vl((a-e+2*o)/t+1,n);return[i,p]}function cH(r,e,t,o,n,s){n==null&&(n=Bw(r,e[0],o[0]));let a=[0,0,0,t];for(let i=0;i<3;i++)r[i]+2*n>=e[i]&&(a[i]=vl((r[i]-e[i]+2*n)/o[i]+1,s));return a}function Bw(r,e,t,o=1){let n=nc(e,o);return Math.floor((r[0]*(t-1)-t+n)/2)}function Il(r){return typeof r==\"number\"?[r,r,r]:r.length===2?[r[0],r[1],1]:r}function Mw(r){return typeof r==\"number\"?[r,r,r]:r}function nc(r,e){return e<=1?r:r+(r-1)*(e-1)}function lH(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=pH([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=vl((e-s+m+d)/o+1,i),l=vl((t-a+f+h)/n+1,i)}else throw Error(`Unknown padding parameter: ${r}`);return{padInfo:u,outHeight:c,outWidth:l}}function mH(r,e,t,o,n,s,a,i,p,u,c){let l,m,d,f;if(r===\"valid\"&&(r=0),typeof r==\"number\"){l={top:r,bottom:r,left:r,right:r,front:r,back:r,type:r===0?\"VALID\":\"NUMBER\"};let g=cH([e,t,o,1],[i,p,u],1,[n,s,a],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,S=Math.floor(g/2),k=g-S,_=Math.floor(x/2),$=x-_;l={top:S,bottom:k,left:_,right:$,front:b,back:C,type:\"SAME\"}}else throw Error(`Unknown padding parameter: ${r}`);return{padInfo:l,outDepth:m,outHeight:d,outWidth:f}}function vl(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 Bu(r){let[e,t,o]=Il(r);return e===1&&t===1&&o===1}function gr(r,e){return Bu(r)||Bu(e)}function Ta(r){return Il(r).every(e=>e>0)}function Gk(r){if(r===\"NHWC\")return\"channelsLast\";if(r===\"NCHW\")return\"channelsFirst\";throw new Error(`Unknown dataFormat ${r}`)}function Lt(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(Ka(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(Ka(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 dH(r,e){let o={x:v(r,\"x\",\"reshape\",\"string_or_numeric\")},n={shape:e};return T.runKernel(da,o,n)}var W=N({reshape_:dH});function fH(r,e,t,o,n){let s=v(r,\"x\",\"avgPool\",\"float32\"),a=1;E(gr(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=W(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}.`),Lt(\"avgPool\",o,n);let u={x:i},c={filterSize:e,strides:t,pad:o,dimRoundingMode:n},l=T.runKernel(Qo,u,c);return l=Ue(l,s.dtype),p?W(l,[l.shape[1],l.shape[2],l.shape[3]]):l}var dd=N({avgPool_:fH});function hH(r,e,t,o,n,s=\"NDHWC\"){let a=v(r,\"x\",\"avgPool3d\",\"float32\"),i=a,p=!1;a.rank===4&&(p=!0,i=W(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}`),E(typeof t==\"number\"&&t>0||Array.isArray(t)&&t[0]>0&&t[1]>0&&t[2]>0,()=>`Error in avgPool3d: Stride must be > 0, but got '${t}'`),Lt(\"avgPool3d\",o,n);let u={x:i},c={filterSize:e,strides:t,pad:o,dimRoundingMode:n,dataFormat:s},l=T.runKernel(Zs,u,c);return l=Ue(l,i.dtype),p?W(l,[l.shape[1],l.shape[2],l.shape[3],l.shape[4]]):l}var Hk=N({avgPool3d_:hH});function gH(r,e=0){E(r.length>=1,()=>\"Pass at least one tensor to concat\");let t=ni(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 Ur(t[0]);let o=t,n={axis:e};return T.runKernel(ta,o,n)}var yt=N({concat_:gH});function xH(r,e,t=!1,o=!1){let n=v(r,\"a\",\"matMul\"),s=v(e,\"b\",\"matMul\");[n,s]=Oe(n,s);let a={a:n,b:s},i={transposeA:t,transposeB:o};return T.runKernel(Zo,a,i)}var Ze=N({matMul_:xH});function yH(r){let t={x:v(r,\"x\",\"sigmoid\",\"float32\")};return T.runKernel(bs,t)}var Ea=N({sigmoid_:yH});function bH(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(ha,n,s)}var Xe=N({slice_:bH});function CH(r){let t={x:v(r,\"x\",\"tanh\",\"float32\")};return T.runKernel(Es,t)}var kl=N({tanh_:CH});function wH(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=yt([u,l],1),d=Ze(m,i),f=Ce(d,p),h=f.shape[0],g=f.shape[1]/4,x=[h,g],b=Xe(f,[0,0],x),C=Xe(f,[0,g],x),S=Xe(f,[0,g*2],x),k=Xe(f,[0,g*3],x),_=Ce(se(Ea(b),kl(C)),se(c,Ea(Ce(a,S)))),$=se(kl(_),Ea(k));return[_,$]}var Kk=N({basicLSTMCell_:wH});function SH(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(Js,s,a)}var fd=N({batchToSpaceND_:SH});function qk(r){let e;return r.rank===0||r.rank===1?e=W(r,[1,1,1,r.size]):r.rank===2?e=W(r,[1,1,r.shape[0],r.shape[1]]):r.rank===3?e=W(r,[1,r.shape[0],r.shape[1],r.shape[2]]):e=r,e}function IH(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:qk(a),scale:u,offset:c,mean:i,variance:p},d={varianceEpsilon:s},f=T.runKernel(In,m,d);return W(f,a.shape)}var nu=N({batchNorm_:IH});function vH(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}.`),nu(a,i,p,c,u,s)}var jk=N({batchNorm2d_:vH});function kH(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}.`),nu(a,i,p,c,u,s)}var Xk=N({batchNorm3d_:kH});function NH(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}.`),nu(a,i,p,c,u,s)}var Yk=N({batchNorm4d_:NH});function TH(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(Jo,s,a)}var hd=N({bincount_:TH});function _H(r,e){let t=v(r,\"x\",\"bitwiseAnd\"),o=v(e,\"y\",\"bitwiseAnd\");if(!br(t.shape,o.shape))throw new Error(`BitwiseAnd: Tensors must have the same shape. x: ${t.shape}, y: ${o.shape}`);if(t.dtype!==\"int32\"||o.dtype!==\"int32\")throw new Error(`BitwiseAnd: Only supports 'int32' values in tensor, found type of x: ${t.dtype} and type of y: ${o.dtype}`);let n={a:t,b:o};return T.runKernel(qa,n)}var Qk=N({bitwiseAnd_:_H});function EH(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(ea,n)}var Zk=N({broadcastArgs_:EH});function $H(r,e){let t=v(r,\"broadcastTo\",\"x\"),o=t.shape;if(Ct(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 Ur(t);let i={x:t},p={reps:s};return T.runKernel(po,i,p)}var su=N({broadcastTo_:$H});function RH(r){let t={x:v(r,\"x\",\"ceil\",\"float32\")};return T.runKernel(en,t)}var Jk=N({ceil_:RH});function $a(r,e,t){Ct(r),t=t||Ei(e);let o={shape:r,value:e,dtype:t};return T.runKernel(sa,{},o)}function DH(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 $a(o.shape,e,o.dtype);let n={x:o},s={clipValueMin:e,clipValueMax:t};return T.runKernel(bo,n,s)}var e2=N({clipByValue_:DH});function AH(r){return yt(r,0)}var t2=N({concat1d_:AH});function FH(r,e){return yt(r,e)}var r2=N({concat2d_:FH});function PH(r,e){return yt(r,e)}var o2=N({concat3d_:PH});function OH(r,e){return yt(r,e)}var n2=N({concat4d_:OH});function MH(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=W(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}.`),Lt(\"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(gr(t,s),()=>`Error in conv2D: Either strides or dilations must be 1. Got strides ${t} and dilations '${s}'`),E(Ta(s),()=>\"Error in conv2D: Dilated rates should be larger than 0.\"),E(Ta(t),()=>\"Error in conv2D: Strides should be larger than 0.\");let m={x:u,filter:p},d={strides:t,pad:o,dataFormat:n,dilations:s,dimRoundingMode:a},f=T.runKernel(tn,m,d);return c?W(f,[f.shape[1],f.shape[2],f.shape[3]]):f}var au=N({conv2d_:MH});function LH(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=W(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}.`),Lt(\"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(gr(t,s),()=>`Error in conv1D: Either stride or dilation must be 1. Got stride ${t} and dilation '${s}'`),E(Ta(s),()=>\"Error in conv1D: Dilated rates should be larger than 0.\"),E(Ta(t),()=>\"Error in conv1D: Stride should be larger than 0.\"),E(n===\"NWC\",()=>`Error in conv1d: got dataFormat of ${n} but only NWC is currently supported.`);let l=W(p,[1,p.shape[0],p.shape[1],p.shape[2]]),m=W(u,[u.shape[0],1,u.shape[1],u.shape[2]]),g=au(m,l,[1,t],o,\"NHWC\",[1,s],a);return c?W(g,[g.shape[2],g.shape[3]]):W(g,[g.shape[0],g.shape[2],g.shape[3]])}var s2=N({conv1d_:LH});function BH(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=W(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]}.`),Lt(\"conv2dDerInput\",n,a);let m={dy:p,filter:t},d={strides:o,pad:n,dataFormat:s,dimRoundingMode:a,inputShape:i},f=T.runKernel(rn,m,d);return u?W(f,[f.shape[1],f.shape[2],f.shape[3]]):f}var gd=N({conv2DBackpropInput_:BH});function zH(r,e,t,o,n,s){let a=v(r,\"x\",\"conv2dTranspose\"),i=v(e,\"filter\",\"conv2dTranspose\");return gd(t,a,i,o,n,\"NHWC\",s)}var a2=N({conv2dTranspose_:zH});function VH(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=W(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(gr(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.`),E(Ta(s),()=>\"Error in conv3D: Dilated rates should be larger than 0.\"),E(Ta(t),()=>\"Error in conv3D: Strides should be larger than 0.\");let c={x:p,filter:i},l={strides:t,pad:o,dataFormat:n,dilations:s},m=T.runKernel(on,c,l);return u?W(m,[m.shape[1],m.shape[2],m.shape[3],m.shape[4]]):m}var i2=N({conv3d_:VH});function WH(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=W(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(nn,c,l);return i?W(m,[m.shape[1],m.shape[2],m.shape[3],m.shape[4]]):m}var u2=N({conv3DBackpropInput_:WH});function UH(r,e,t,o,n){let s=v(r,\"x\",\"conv3dTranspose\"),a=v(e,\"filter\",\"conv3dTranspose\");return u2(t,s,a,o,n)}var p2=N({conv3dTranspose_:UH});function GH(r){let t={x:v(r,\"x\",\"cos\",\"float32\")};return T.runKernel(sn,t)}var c2=N({cos_:GH});function HH(r){let t={x:v(r,\"x\",\"cosh\",\"float32\")};return T.runKernel(an,t)}var l2=N({cosh_:HH});function KH(r,e=0,t=!1,o=!1){let s={x:v(r,\"x\",\"cumprod\")},a={axis:e,exclusive:t,reverse:o};return T.runKernel(un,s,a)}var m2=N({cumprod_:KH});function qH(r,e=0,t=!1,o=!1){let s={x:v(r,\"x\",\"cumsum\")},a={axis:e,exclusive:t,reverse:o};return T.runKernel(pn,s,a)}var d2=N({cumsum_:qH});function jH(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(ra,a,i)}var f2=N({denseBincount_:jH});function XH(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(ln,i,p)}var h2=N({depthToSpace_:XH});function YH(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=W(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]}.`),Lt(\"depthwiseConv2d\",o,a);let m={x:u,filter:p},d={strides:t,pad:o,dataFormat:n,dilations:s,dimRoundingMode:a},f=T.runKernel(mn,m,d);return c?W(f,[f.shape[1],f.shape[2],f.shape[3]]):f}var sc=N({depthwiseConv2d_:YH});function QH(r){let t={x:v(r,\"x\",\"diag\")};return T.runKernel(oa,t)}var g2=N({diag_:QH});function ZH(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=W(a,[1,a.shape[0],a.shape[1],a.shape[2]]),u=!0),E(p.shape[3]===i.shape[2],()=>`Error in dilation2d: input and filter must have the same depth: ${p.shape[3]} vs ${i.shape[2]}`);let c={x:p,filter:i},l={strides:t,pad:o,dilations:n},m=T.runKernel(dn,c,l);return u?W(m,[m.shape[1],m.shape[2],m.shape[3]]):m}var x2=N({dilation2d_:ZH});var Sr={};qe(Sr,{assertAndGetBroadcastShape:()=>rt,getBroadcastDims:()=>y2,getReductionAxes:()=>xd});function y2(r,e){let t=r.length,o=[];for(let n=0;n1&&a===1&&o.unshift(s)}return o}function xd(r,e){let t=[];for(let o=0;o1)&&t.unshift(s)}return t}function rt(r,e){let t=Math.max(r.length,e.length),o=new Array(t);for(let n=0;n`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=W(t,[1,-1]),i=W(o,[-1,1]),p=Ze(a,i);return W(p,[])}else if(t.rank===1&&o.rank===2){let a=W(t,[1,-1]),i=W(o,[o.shape[0],o.shape[1]]),p=Ze(a,i);return W(p,[p.size])}else if(t.rank===2&&o.rank===1){let a=W(o,[-1,1]),i=Ze(t,a);return W(i,[i.size])}else{let a=W(o,[o.shape[0],o.shape[1]]);return Ze(t,a)}}var C2=N({dot_:oK});function nK(r,...e){let t=e.map((n,s)=>v(n,`tensors${s}`,\"einsum\")),o={equation:r};return T.runKernel(Bi,t,o)}var iu=N({einsum_:nK});function sK(r){let t={x:v(r,\"x\",\"elu\",\"float32\")};return T.runKernel(hn,t)}var bd=N({elu_:sK});function aK(r,e){let t=v(r,\"x\",\"ensureShape\",\"string_or_numeric\");if(!ZC(t.shape,e))throw new Error(`EnsureShape: Shape of tensor ${t.shape} is not compatible with expected shape ${e}`);return r}var w2=N({ensureShape_:aK});function iK(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=Ue(e,\"float32\"));let t={x:e};return T.runKernel(gn,t)}var S2=N({erf_:iK});function zw(r,e){for(let t=0;tr[s]);return[t,n]}function ii(r,e){let t=e.map(o=>1);return I2(r,t,e)}function pK(r,e,t){E(zw(e,t),()=>`${r} supports only inner-most axes for now. Got axes ${e} and rank-${t} input.`)}function cK(r,e){if(zw(r,e))return null;let t=[];for(let o=0;ot.push(o)),t}function lK(r){return r.map((e,t)=>[t,e]).sort((e,t)=>e[1]-t[1]).map(e=>e[0])}function mK(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(na,o,n)}var Ms=N({expandDims_:IK});function vK(r){let t={x:v(r,\"x\",\"expm1\")};return T.runKernel(bn,t)}var N2=N({expm1_:vK});function kK(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(po,o,n)}var uu=N({tile_:kK});function NK(r,e,t,o=\"float32\"){e==null&&(e=r);let n=me([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(Ka(e),()=>`Error in localResponseNormalization: depthRadius must be an integer but got depthRadius ${e}.`);let a=s,i=!1;s.rank===3&&(i=!0,a=W(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(Bn,p,u);return i?W(c,[c.shape[1],c.shape[2],c.shape[3]]):c}var R2=N({localResponseNormalization_:LK});function BK(r){let t={x:v(r,\"x\",\"log\",\"float32\")};return T.runKernel(Fn,t)}var pi=N({log_:BK});function zK(r){let t={x:v(r,\"x\",\"log1p\")};return T.runKernel(Pn,t)}var kd=N({log1p_:zK});function VK(r){return E(qs(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&&xt(s.shape,n.shape,\"The shape of dy passed in grad(f)(x, dy) must match the shape returned by f(x)\"),Nd(a),a[0]})}}function WK(r){return E(qs(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=ni(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&&xt(s.shape,n.shape,\"The shape of dy passed in grads(f)([x1,...], dy) must match the shape returned by f([x1,...])\"),Nd(a),a})}}function UK(r){return E(qs(r),()=>\"The f passed in valueAndGrad(f) must be a function\"),(e,t)=>{E(e instanceof mt,()=>\"The x passed in valueAndGrad(f)(x) must be a tensor\"),E(t==null||t instanceof mt,()=>\"The dy passed in valueAndGrad(f)(x, dy) must be a tensor\");let{grads:o,value:n}=T.gradients(()=>r(e),[e],t);return Nd(o),{grad:o[0],value:n}}}function GK(r){return E(qs(r),()=>\"The f passed in valueAndGrads(f) must be a function\"),(e,t)=>{E(Array.isArray(e)&&e.every(n=>n instanceof mt),()=>\"The args passed in valueAndGrads(f)(args) must be array of tensors\"),E(t==null||t instanceof mt,()=>\"The dy passed in valueAndGrads(f)(args, dy) must be a tensor\");let o=T.gradients(()=>r(...e),e,t);return t!=null&&xt(o.value.shape,t.shape,\"The shape of dy passed in valueAndGrads(f)([x1,...], dy) must match the shape returned by f([x1,...])\"),Nd(o.grads),o}}function Vw(r,e){E(qs(r),()=>\"The f passed in variableGrads(f) must be a function\"),E(e==null||Array.isArray(e)&&e.every(u=>u instanceof ri),()=>\"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 Ir(r){return T.customGrad(r)}function Nd(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 HK(r){let t={x:v(r,\"x\",\"neg\")};return T.runKernel(pa,t)}var pr=N({neg_:HK});function KK(r){let t={x:v(r,\"x\",\"softplus\")};return T.runKernel(Cs,t)}var Td=N({softplus_:KK});function qK(r){let e=v(r,\"x\",\"logSigmoid\");return Ir(o=>({value:pr(Td(pr(o))),gradFunc:a=>se(a,Ea(pr(o)))}))(e)}var D2=N({logSigmoid_:qK});function jK(r,e){let t=v(r,\"a\",\"sub\"),o=v(e,\"b\",\"sub\");[t,o]=Oe(t,o);let n={a:t,b:o};return T.runKernel(Ts,n)}var Te=N({sub_:jK});function XK(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 Ir((n,s)=>{let i=Ra(n,e,!0),p=Te(n,i),u=Te(Ue(p,\"float32\"),pi(ot(_o(p),e,!0)));return s([u]),{value:u,gradFunc:(l,m)=>{let[d]=m,f=!0,h=_o(d);return Te(l,se(ot(l,e,f),h))}}})(t)}var A2=N({logSoftmax_:XK});function YK(r,e=null,t=!1){let o=v(r,\"x\",\"logSumExp\"),n=_i(e,o.shape),s=Ra(o,n,!0),a=Te(o,s),i=_o(a),p=ot(i,n),u=pi(p),c=Ce(W(s,u.shape),u);if(t){let l=ii(c.shape,n);return W(c,l)}return c}var _d=N({logSumExp_:YK});function QK(r,e){let t=v(r,\"a\",\"logicalAnd\",\"bool\"),o=v(e,\"b\",\"logicalAnd\",\"bool\");rt(t.shape,o.shape);let n={a:t,b:o};return T.runKernel(On,n)}var Uu=N({logicalAnd_:QK});function ZK(r){let t={x:v(r,\"x\",\"logicalNot\",\"bool\")};return T.runKernel(Mn,t)}var Ed=N({logicalNot_:ZK});function JK(r,e){let t=v(r,\"a\",\"logicalOr\",\"bool\"),o=v(e,\"b\",\"logicalOr\",\"bool\");rt(t.shape,o.shape);let n={a:t,b:o};return T.runKernel(Ln,n)}var $d=N({logicalOr_:JK});function eq(r,e){let t=v(r,\"a\",\"logicalXor\",\"bool\"),o=v(e,\"b\",\"logicalXor\",\"bool\");return rt(t.shape,o.shape),Uu($d(r,e),Ed(Uu(r,e)))}var F2=N({logicalXor_:eq});var Rd=2147483648;function tq(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=W(o,[-1,s]),p=W(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)>=Rd)throw new Error(`values tensor size must less than ${Rd}`);if(i.shape[1]>=Rd)throw new Error(`trailing dim_size must less than ${Rd} for int32 output type, was ${i.shape[1]}`);let u={sortedSequence:i,values:p},c={side:t};return T.runKernel(fs,u,c)}var _l=N({searchSorted_:tq});function P2(r,e){return _l(r,e,\"left\")}function rq(r,e,t,o,n){let s=v(r,\"x\",\"maxPool\"),a=1,i=s,p=!1;s.rank===3&&(p=!0,i=W(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(gr(t,a),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${t} and dilations '${a}'`),Lt(\"maxPool\",o,n);let u={x:i},c={filterSize:e,strides:t,pad:o,dimRoundingMode:n},l=T.runKernel(Wn,u,c);return p?W(l,[l.shape[1],l.shape[2],l.shape[3]]):l}var Dd=N({maxPool_:rq});function oq(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=W(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}`),Lt(\"maxPool3d\",o,n);let u={x:i},c={filterSize:e,strides:t,pad:o,dimRoundingMode:n,dataFormat:s},l=T.runKernel(ia,u,c);return p?W(l,[l.shape[1],l.shape[2],l.shape[3],l.shape[4]]):l}var O2=N({maxPool3d_:oq});function nq(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(ua,a,i);return{result:p[0],indexes:p[1]}}var M2=N({maxPoolWithArgmax_:nq});function sq(r,e){let t=v(r,\"a\",\"maximum\"),o=v(e,\"b\",\"maximum\");[t,o]=Oe(t,o),t.dtype===\"bool\"&&(t=Ue(t,\"int32\"),o=Ue(o,\"int32\")),rt(t.shape,o.shape);let n={a:t,b:o};return T.runKernel(Vn,n)}var Ad=N({maximum_:sq});function aq(r,e=null,t=!1){let n={x:v(r,\"x\",\"mean\")},s={axis:e,keepDims:t};return T.runKernel(Un,n,s)}var Gu=N({mean_:aq});function Gr(r,e=\"float32\"){if(Ct(r),e===\"complex64\"){let o=Gr(r,\"float32\"),n=Gr(r,\"float32\");return Er(o,n)}let t=Gp(ze(r),e);return T.makeTensor(t,r,e)}function Da(r,e=\"float32\"){if(Ct(r),e===\"complex64\"){let o=Da(r,\"float32\"),n=Gr(r,\"float32\");return Er(o,n)}let t=ml(ze(r),e);return T.makeTensor(t,r,e)}function L2(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 mt?r.dtype:\"float32\");if(e===void 0)return[o];let n=v(e,\"y\",\"meshgrid\",e instanceof mt?e.dtype:\"float32\"),s=ze(o.shape),a=ze(n.shape);return t===\"xy\"?(o=W(o,[1,-1]),n=W(n,[-1,1]),[Ze(Da([a,1],o.dtype),o),Ze(n,Da([1,s],n.dtype))]):(o=W(o,[-1,1]),n=W(n,[1,-1]),[Ze(o,Da([1,a],o.dtype)),Ze(Da([s,1],n.dtype),n)])}function iq(r,e){let t=v(r,\"a\",\"minimum\"),o=v(e,\"b\",\"minimum\");[t,o]=Oe(t,o),t.dtype===\"bool\"&&(t=Ue(t,\"int32\"),o=Ue(o,\"int32\")),rt(t.shape,o.shape);let n={a:t,b:o};return T.runKernel(Hn,n)}var Hu=N({minimum_:iq});function uq(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(Kn,a,s)}var B2=N({mirrorPad_:uq});function pq(r,e){let t=v(r,\"a\",\"mod\"),o=v(e,\"b\",\"mod\");[t,o]=Oe(t,o);let n={a:t,b:o};return T.runKernel(qn,n)}var z2=N({mod_:pq});function cq(r,e=null,t=!1){r=v(r,\"x\",\"moments\");let o=_i(e,r.shape),n=Gu(r,o,t),s=n.shape;t||(s=ii(n.shape,o));let a=Zt(Te(Ue(r,\"float32\"),W(n,s))),i=Gu(a,o,t);return{mean:n,variance:i}}var V2=N({moments_:cq});function lq(r,e,t,o){let n=v(e,\"data\",\"multiRNNCell\"),s=ni(t,\"c\",\"multiRNNCell\"),a=ni(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?W(n,[1,-1]):n},u={numSamples:e,seed:t,normalized:o},c=T.runKernel(jn,p,u);return a===1?W(c,[c.size]):c}var U2=N({multinomial_:mq});function dq(r,e){let t=v(r,\"a\",\"notEqual\",\"string_or_numeric\"),o=v(e,\"b\",\"notEqual\",\"string_or_numeric\");[t,o]=Oe(t,o),rt(t.shape,o.shape);let n={a:t,b:o};return T.runKernel(Yn,n)}var Fd=N({notEqual_:dq});function fq(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(Jn,a,i)}var El=N({oneHot_:fq});function hq(r){let t={x:v(r,\"x\",\"onesLike\")};return T.runKernel(ca,t)}var G2=N({onesLike_:hq});function gq(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=W(t,[-1,1]),s=W(o,[1,-1]);return Ze(n,s)}var H2=N({outerProduct_:gq});function xq(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(es,s,n)}var Aa=N({pad_:xq});function yq(r,e,t=0){return E(e.length===2,()=>\"Invalid number of paddings. Must be length of 2.\"),Aa(r,[e],t)}var K2=N({pad1d_:yq});function bq(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.\"),Aa(r,e,t)}var q2=N({pad2d_:bq});function Cq(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.\"),Aa(r,e,t)}var j2=N({pad3d_:Cq});function wq(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.\"),Aa(r,e,t)}var X2=N({pad4d_:wq});function Sq(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(ga,n,s)}var Pd=N({spaceToBatchND_:Sq});function Iq(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=W(i,[1,i.shape[0],i.shape[1],i.shape[2]])),E(gr(s,n),()=>`Error in pool: Either strides or dilations must be 1. Got strides ${s} and dilations '${n}'`);let c=Lw(p.shape,e,s,n,o),l=[c.dilationHeight,c.dilationWidth],m;o===\"same\"?m=kq([c.filterHeight,c.filterWidth],l):m=[[0,0],[0,0]];let d=l[0]===1&&l[1]===1,[f,h]=vq([c.inHeight,c.inWidth],l,m),g=d?o:\"valid\",x=d?p:Pd(p,l,f),C=(t===\"avg\"?()=>dd(x,e,s,g,a):()=>Dd(x,e,s,g,a))(),S=d?C:fd(C,l,h);return u?W(S,[S.shape[1],S.shape[2],S.shape[3]]):S}function vq(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 kq(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 Y2=N({pool_:Iq});function Nq(r,e){let t=v(r,\"x\",\"prelu\"),o=v(e,\"alpha\",\"prelu\"),n={x:t,alpha:o};return T.runKernel(rs,n)}var Od=N({prelu_:Nq});function Tq(r,e=null,t=!1){let o=v(r,\"x\",\"prod\");o.dtype===\"bool\"&&(o=Ue(o,\"int32\"));let n={x:o},s={axis:e,keepDims:t};return T.runKernel(os,n,s)}var Q2=N({prod_:Tq});function _q(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(Hp,i,p);return{outputNestedSplits:u.slice(0,u.length-1),outputDenseValues:u[u.length-1]}}var Z2=N({raggedGather_:_q});function Eq(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(Kp,a);return{rtNestedSplits:i[0],rtDenseValues:i[1]}}var J2=N({raggedRange_:Eq});function $q(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(qp,u,c)}var e1=N({raggedTensorToTensor_:$q});function Rq(r,e,t){Ct(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;sy1,createVideoElement:()=>Gq,encodeStrings:()=>C1,expectArrayBuffersEqual:()=>Uq,expectArraysClose:()=>Bq,expectArraysEqual:()=>Vq,expectNumbersClose:()=>b1,expectPromiseToFail:()=>zq,expectValuesInRange:()=>Wq,play:()=>Hq,testEpsilon:()=>Ld});var Lq=.001,y1=.1;function Bq(r,e,t){return t==null&&(t=Ld()),Xw(r,e,(o,n)=>Yw(o,n,t))}function Ld(){return T.backend.floatPrecision()===32?Lq:y1}function Xw(r,e,t){let o=!0;if((Pt(r)||Pt(e))&&(o=!1),Pt(r)&&Pt(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=sr(r),i=sr(e);if(!br(a,i))throw new Error(`Arrays have different shapes. Actual: [${a}]. Expected: [${i}]`)}let n=Pt(r)?r:Fs(r),s=Pt(e)?e:Fs(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 Vq(r,e){let t=typeof e==\"string\"||typeof e==\"number\"||typeof e==\"boolean\"?[e]:e;return zo(r)||zo(r[0])||zo(e)||zo(e[0])?Xw(r,t,(o,n)=>o==n):Xw(r,e,(o,n)=>Yw(o,n,0))}function b1(r,e,t){if(t==null&&(t=Ld()),!Yw(r,e,t))throw new Error(`Numbers differ: actual === ${r}, expected === ${e}`);typeof expect!=\"undefined\"&&expect().nothing()}function Yw(r,e,t){return!isFinite(r)&&!isFinite(e)?!0:!(isNaN(r)||isNaN(e)||Math.abs(r-e)>t)}function Wq(r,e,t){for(let o=0;ot)throw new Error(`Value out of range:${r[o]} low: ${e}, high: ${t}`)}function Uq(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 Hq(r){await r.play(),\"requestVideoFrameCallback\"in r&&await new Promise(e=>{r.requestVideoFrameCallback(e)})}var qu=class{constructor(e,t,o,n,s){this.mean=e,this.stdDev=t,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=Vd.alea(a.toString())}nextValue(){if(!isNaN(this.nextVal)){let n=this.nextVal;return this.nextVal=NaN,n}let e,t,o=!1;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,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}},Bd=class{constructor(e,t,o,n){this.alpha=e,this.beta=1/t,this.dtype=o;let s=n||Math.random();this.randu=Vd.alea(s.toString()),this.randn=new qu(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=Vd.alea(n)}convertValue(e){return this.canReturnFloat()?e:Math.round(e)}nextValue(){return this.convertValue(this.min+this.range*this.random())}};function Kq(r,e,t=1,o=\"float32\",n){if(Ct(r),t==null&&(t=1),o==null&&(o=\"float32\"),o!==\"float32\"&&o!==\"int32\")throw new Error(`Unsupported data type ${o}`);let s=new Bd(e,t,o,n),a=me(r,o);for(let i=0;i`Error in reverse1D: x must be rank 1 but got rank ${e.rank}.`),mo(e,0)}var N1=N({reverse1d_:r6});function o6(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}.`),mo(t,e)}var T1=N({reverse2d_:o6});function n6(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}.`),mo(t,e)}var _1=N({reverse3d_:n6});function s6(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}.`),mo(t,e)}var E1=N({reverse4d_:s6});function a6(r){let t={x:v(r,\"x\",\"round\")};return T.runKernel(cs,t)}var Gd=N({round_:a6});function i6(r){let t={x:v(r,\"x\",\"rsqrt\",\"float32\")};return T.runKernel(ls,t)}var $1=N({rsqrt_:i6});function u6(r){let t={x:v(r,\"x\",\"selu\")};return T.runKernel(hs,t)}var R1=N({selu_:u6});function p6(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=W(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=sc(c,p,o,n,a,s),g=au(f,u,1,\"valid\",a);return l?W(g,[g.shape[1],g.shape[2],g.shape[3]]):g}var D1=N({separableConv2d_:p6});async function c6(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`),Xe(o,[e],[t])}var M1=N({slice1d_:f6});function h6(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`),Xe(o,e,t)}var L1=N({slice2d_:h6});function g6(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`),Xe(o,e,t)}var B1=N({slice3d_:g6});function x6(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`),Xe(o,e,t)}var z1=N({slice4d_:x6});function y6(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(Is,o,n)}var V1=N({softmax_:y6});function b6(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(zi,e)}var uc=N({fft_:b6});function C6(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(Vi,e)}var ju=N({ifft_:C6});function w6(r){let e=r.shape[r.shape.length-1],t=r.size/e,o;if(e<=2){let n=W(r,[t,e]);o=ju(n)}else{let n=[t,2*(e-1)],s=W(ci(r),[t,e]),a=W(pu(r),[t,e]),i=mo(Xe(s,[0,1],[t,e-2]),1),p=se(mo(Xe(a,[0,1],[t,e-2]),1),ke(-1)),u=yt([s,i],1),c=yt([a,p],1),l=W(Er(u,c),[n[0],n[1]]);o=ju(l)}if(o=ci(o),r.rank===3&&r.shape[0]!==0){let n=o,s=r.shape[0];o=W(o,[s,o.shape[0]/s,o.shape[1]]),n.dispose()}return o}var Hd=N({irfft_:w6});function S6(r,e,t=0){let n={x:v(r,\"x\",\"split\")},s={numOrSizeSplits:e,axis:t};return T.runKernel(xa,n,s)}var li=N({split_:S6});function I6(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=Xe(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=yt([r,Gr(f)],r.shape.length-1),t=e}else n=r;let s=Gt(n),a=W(Er(n,s),[o,t]),i=uc(a),p=Math.floor(t/2)+1,u=ci(i),c=pu(i),l=li(u,[p,t-p],u.shape.length-1),m=li(c,[p,t-p],c.shape.length-1),d=n.shape.slice();return d[n.shape.length-1]=p,W(Er(l[0],m[0]),d)}var pc=N({rfft_:I6});function v6(r,e){let t=v(r,\"a\",\"squaredDifference\"),o=v(e,\"b\",\"squaredDifference\");[t,o]=Oe(t,o),rt(t.shape,o.shape);let n={a:t,b:o},s={};return T.runKernel(ks,n,s)}var Kd=N({squaredDifference_:v6});function k6(r,e){let t=v(r,\"x\",\"squeeze\",\"string_or_numeric\");return W(t,JC(t.shape,e).newShape)}var cc=N({squeeze_:k6});function N6(r,e=0){let t=ni(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(la,o,n)}var vr=N({stack_:N6});function T6(r,e=0){let o={x:v(r,\"x\",\"step\")},n={alpha:e};return T.runKernel(wo,o,n)}var qd=N({step_:T6});function _6(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(Ns,c,l)}var W1=N({stridedSlice_:_6});function E6(r){let t={x:v(r,\"x\",\"tan\",\"float32\")};return T.runKernel(_s,t)}var U1=N({tan_:E6});function Jt(r,e){io(r);let t=sr(r,e);if(t.length!==1)throw new Error(\"tensor1d() requires values to be a flat/TypedArray\");return wr(r,null,t,e)}function mu(r,e,t){if(io(r),e!=null&&e.length!==2)throw new Error(\"tensor2d() requires shape to have two numbers\");let o=sr(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 wr(r,e,o,t)}function jd(r,e,t){if(io(r),e!=null&&e.length!==3)throw new Error(\"tensor3d() requires shape to have three numbers\");let o=sr(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 wr(r,e,o,t)}function G1(r,e,t){if(io(r),e!=null&&e.length!==4)throw new Error(\"tensor4d() requires shape to have four numbers\");let o=sr(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 wr(r,e,o,t)}function H1(r,e,t){if(io(r),e!=null&&e.length!==5)throw new Error(\"tensor5d() requires shape to have five numbers\");let o=sr(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 wr(r,e,o,t)}function K1(r,e,t){if(io(r),e!=null&&e.length!==6)throw new Error(\"tensor6d() requires shape to have six numbers\");let o=sr(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,wr(r,e,o,t)}var du={};qe(du,{calculateShapes:()=>q1,validateInput:()=>lc,validateUpdateShape:()=>Qw});function Qw(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;l= 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($s,s,a);return{values:i,indices:p}}var X1=N({topk_:R6});function D6(r,e=0,t=1,o,n){if(Ct(r),o!=null&&o===\"bool\")throw new Error(\"Unsupported data type $ { dtype }\");let s=new qu(e,t,o,!0,n),a=me(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(Yi,o,n);return{values:s,indices:a}}var Q1=N({unique_:A6});function F6(r,e,t){let o=v(r,\"x\",\"unsortedSegmentSum\"),n=v(e,\"segmentIds\",\"unsortedSegmentSum\",\"int32\");E(Ka(t),()=>\"numSegments must be of dtype int\");let s={x:o,segmentIds:n},a={numSegments:t};return T.runKernel(Qi,s,a)}var Z1=N({unsortedSegmentSum_:F6});function P6(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(wa,o,n)}var fo=N({unstack_:P6});function J1(r,e){return _l(r,e,\"right\")}function eN(r,e=!0,t,o){return T.makeVariable(r,e,t,o)}function Xd(r,e){let t=[];for(let s=0;s0,()=>\"mask cannot be scalar\"),xt(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;hi).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\"?De(()=>{let a=ci(o),i=pu(o);return a=T.runKernel(co,{x:a},s),i=T.runKernel(co,{x:i},s),t&&(i=pr(i)),Er(a,i)}):T.runKernel(co,n,s)}var mc=N({transpose_:B6});function z6(r,e,t,o,n=!0){let s=v(r,\"v\",\"movingAverage\"),a=v(e,\"x\",\"movingAverage\"),i=v(t,\"decay\",\"movingAverage\");ww(s,a),E(br(s.shape,a.shape),()=>\"Shape mismatch in v and x\");let p=ke(1),u=Te(p,i),c=se(Te(a,s),u);if(n){E(o!=null,()=>\"When using zeroDebias: true, step is required.\");let l=v(o,\"step\",\"movingAverage\");c=je(c,Te(p,ui(i,l)))}return Ce(s,c)}var V6=N({movingAverage_:z6});function W6(r,e,t){Ct(t);let o=v(r,\"indices\",\"scatterND\",\"int32\"),n=v(e,\"updates\",\"scatterND\");lc(n,o,t);let s={indices:o,updates:n},a={shape:t};return T.runKernel(ms,s,a)}var U6=N({scatterND_:W6});function tN(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 H6(r,e,t,o=0){Ct(t);let n=v(r,\"sparseIndices\",\"sparseToDense\",\"int32\"),s=v(e,\"sparseValues\",\"sparseToDense\",\"string_or_numeric\"),a=v(o,\"defaultValue\",\"sparseToDense\",s.dtype);tN(n,s,t,a);let i={sparseIndices:n,sparseValues:s,defaultValue:a},p={outputShape:t};return T.runKernel(vs,i,p)}var K6=N({sparseToDense_:H6});function q6(r,e){let t=v(e,\"indices\",\"gatherND\",\"int32\"),n={params:v(r,\"x\",\"gatherND\",\"string_or_numeric\"),indices:t};return T.runKernel(vn,n)}var j6=N({gatherND_:q6});function rN(r,e){if(e==null)return r.shape.slice();if(br(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 mt?n.clone():n;let s=rN(n,t),a=1-e,i=je(wd(Ce(ic(s,0,1,\"float32\",o),a)),a);return se(n,i)}var Y6=N({dropout_:X6});function Zw(r){return Math.floor(Math.pow(2,Math.ceil(Math.log(r)/Math.log(2))))}function $l(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}`),xt(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=ew(\"bool\",p);for(let l=0;lg.value-h.value),c[l]=0;for(let h=0;hnN,depthwiseConv2d:()=>iN,matMul:()=>uN});function J6(r,e,t,o,n,s=\"NHWC\",a){let i=r;r.rank===3&&(i=W(r,[1,r.shape[0],r.shape[1],r.shape[2]]));let p=e;p.rank===3&&(p=W(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]}).`),Lt(\"conv2dDerFilter\",n,a);let l={x:i,dy:p},m={strides:o,pad:n,dataFormat:s,dimRoundingMode:a,filterShape:t};return T.runKernel(Fi,l,m)}var oN=N({conv2DBackpropFilter_:J6});function Xu(r,e,t){if(t==null||t===\"linear\")return r;if(t===\"relu\")return se(r,qd(e));throw new Error(`Cannot compute gradient for fused activation ${t}.`)}function Yu(r,e){let t=e,o=xd(r.shape,e.shape);return o.length>0&&(t=ot(t,o)),W(t,r.shape)}function Qu(r,e,t,o){if(e===\"linear\")return r;if(e===\"relu\")return lu(r);if(e===\"elu\")return bd(r);if(e===\"relu6\")return Ud(r);if(e===\"prelu\")return Od(r,t);if(e===\"leakyrelu\")return vd(r,o);if(e===\"sigmoid\")return Ea(r);throw new Error(`Unknown fused activation ${e}.`)}var Zu=(r,e)=>!(r>0)||e===\"linear\";function ej({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\",Zu(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 _=au(r,e,t,o,n,s,a);return i!=null&&(_=Ce(_,i)),Qu(_,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=W(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}.`),Lt(\"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(gr(t,s),()=>`Error in conv2D: Either strides or dilations must be 1. Got strides ${t} and dilations '${s}'`);let g=zu(d.shape,m.shape,t,s,o,a),x;i!=null&&(x=v(i,\"bias\",\"fused conv2d\"),[x]=Oe(x,l),n===\"NHWC\"?rt(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{rt(_,g.outShape)}catch($){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,D,P,O]=$,M=Xu(_,P,p);E(Bu(s),()=>`Error in gradient of fused conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${s}'`);let L=gd(D.shape,M,R,t,o),B=oN(D,M,R.shape,t,o),z=[L,B];if(O!=null){let U=Yu(O,M);z.push(U)}return z},S={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?Ir(($,R,D)=>{let P=T.runKernel(Io,S,k);return D([R,$,P]),f&&(P=W(P,[P.shape[1],P.shape[2],P.shape[3]])),{value:P,gradFunc:C}})(d,m):Ir(($,R,D,P)=>{let O=T.runKernel(Io,S,k);return P([R,$,O,D]),f&&(O=W(O,[O.shape[1],O.shape[2],O.shape[3]])),{value:O,gradFunc:C}})(d,m,x)}var nN=N({fusedConv2d_:ej});function tj(r,e,t,o,n,s=[1,1],a){let i=r;r.rank===3&&(i=W(r,[1,r.shape[0],r.shape[1],r.shape[2]]));let p=e;p.rank===3&&(p=W(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(Pi,u,c)}var sN=N({depthwiseConv2dNativeBackpropFilter_:tj});function rj(r,e,t,o,n,s=[1,1],a){let i=e,p=!1;e.rank===3&&(p=!0,i=W(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(Oi,u,c);return p?W(l,[l.shape[1],l.shape[2],l.shape[3]]):l}var aN=N({depthwiseConv2dNativeBackpropInput_:rj});function oj({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(Zu(T.state.gradientDepth,p)===!1){let k=sc(r,e,t,o,n,s,a);return i!=null&&(k=Ce(k,i)),Qu(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=W(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(gr(t,s),()=>`Error in fused depthwiseConv2d: Either strides or dilations must be 1. Got strides ${t} and dilations '${s}'`),Lt(\"fused depthwiseConv2d\",o,a);let h=zu(d.shape,m.shape,t,s,o,a,!0),g;i!=null&&(g=v(i,\"bias\",\"fused conv2d\"),[g]=Oe(g,l),rt(h.outShape,g.shape));let x;u!=null&&(x=v(u,\"prelu weights\",\"fused depthwiseConv2d\"));let b=(k,_)=>{E(Bu(s),()=>`Error in gradient of fused depthwiseConv2d: dilation rates greater than 1 are not yet supported. Got dilations '${s}'`);let[$,R,D,P]=_,O=Xu(k,D,p),M=aN(R.shape,O,$,t,o,s,a),L=sN(R,O,$.shape,t,o,s,a);if(P!=null){let B=Yu(g,O);return[M,L,B]}return[M,L]},C={x:d,filter:m,bias:g,preluActivationWeights:x},S={strides:t,pad:o,dataFormat:n,dilations:s,dimRoundingMode:a,activation:p,leakyreluAlpha:c};return i==null?Ir((_,$,R)=>{let D=T.runKernel(vo,C,S);return R([$,_,D]),f&&(D=W(D,[D.shape[1],D.shape[2],D.shape[3]])),{value:D,gradFunc:b}})(d,m):Ir((_,$,R,D)=>{let P=T.runKernel(vo,C,S);return D([$,_,P,R]),f&&(P=W(P,[P.shape[1],P.shape[2],P.shape[3]])),{value:P,gradFunc:b}})(d,m,g)}var iN=N({fusedDepthwiseConv2d_:oj});function nj({a:r,b:e,transposeA:t=!1,transposeB:o=!1,bias:n,activation:s=\"linear\",preluActivationWeights:a,leakyreluAlpha:i=.2}){if(Zu(T.state.gradientDepth,s)===!1){let O=Ze(r,e,t,o);return n!=null&&(O=Ce(O,n)),Qu(O,s,a,i)}let p=v(r,\"a\",\"fused matMul\"),u=v(e,\"b\",\"fused matMul\");[p,u]=Oe(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=rt(p.shape.slice(0,-2),u.shape.slice(0,-2)).concat([m,d]),S=t?W(p,[g,c,m]):W(p,[g,m,c]),k=o?W(u,[x,d,l]):W(u,[x,l,d]),_;n!=null&&(_=v(n,\"bias\",\"fused matMul\"),[_]=Oe(_,p),rt(C,_.shape));let $;a!=null&&($=v(a,\"prelu weights\",\"fused matMul\"));let R=(O,M)=>{let[L,B,z,U]=M,j=Xu(W(O,z.shape),z,s),q,Y;if(!t&&!o?(q=Ze(j,B,!1,!0),Y=Ze(L,j,!0,!1)):!t&&o?(q=Ze(j,B,!1,!1),Y=Ze(j,L,!0,!1)):t&&!o?(q=Ze(B,j,!1,!0),Y=Ze(L,j,!1,!1)):(q=Ze(B,j,!0,!0),Y=Ze(j,L,!0,!0)),n!=null){let J=Yu(U,j);return[q,Y,J]}else return[q,Y]},D={a:S,b:k,bias:_,preluActivationWeights:$},P={transposeA:t,transposeB:o,activation:s,leakyreluAlpha:i};return n==null?Ir((M,L,B)=>{let z=T.runKernel(So,D,P);return B([M,L,z]),{value:W(z,C),gradFunc:R}})(S,k):Ir((M,L,B,z)=>{let U=T.runKernel(So,D,P);return z([M,L,U,B]),{value:W(U,C),gradFunc:R}})(S,k,_)}var uN=N({fusedMatMul_:nj});function sj(r){return $l(r,.54,.46)}var pN=N({hammingWindow_:sj});function aj(r){return $l(r,.5,.5)}var Qd=N({hannWindow_:aj});function ij(r,e,t,o=!1,n=0){let s=0,a=[];for(;s+e<=r.size;)a.push(Xe(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(cn,c,l)}var lN=N({cropAndResize_:pj});function cj(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(Cn,t,{})}var mN=N({flipLeftRight_:cj});function lj(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,uu(e,n)}var dN=N({grayscaleToRGB_:lj});function mj(r){let e=v(r,\"image\",\"RGBToGrayscale\"),t=e.rank-1,o=e.shape[t];E(e.rank>=2,()=>`Error in RGBToGrayscale: images must be at least rank 2, but got rank ${e.rank}.`),E(o===3,()=>`Error in RGBToGrayscale: last dimension of an RGB image should be size 3, but got size ${o}.`);let n=e.dtype,s=Ue(e,\"float32\"),a=Jt([.2989,.587,.114]),i;switch(e.rank){case 2:i=iu(\"ij,j->i\",s,a);break;case 3:i=iu(\"ijk,k->ij\",s,a);break;case 4:i=iu(\"ijkl,l->ijk\",s,a);break;case 5:i=iu(\"ijklm,m->ijkl\",s,a);break;case 6:i=iu(\"ijklmn,n->ijklm\",s,a);break;default:throw new Error(\"Not a valid tensor rank.\")}return i=Ms(i,-1),Ue(i,n)}var fN=N({rgbToGrayscale_:mj});function dj(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(Ds,s,a)}var hN=N({rotateWithOffset_:dj});function Eo(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 fj(r,e,t,o=.5,n=Number.NEGATIVE_INFINITY){let s=v(r,\"boxes\",\"nonMaxSuppression\",\"float32\"),a=v(e,\"scores\",\"nonMaxSuppression\",\"float32\"),i=Eo(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(Qn,{boxes:s,scores:a},p)}var gN=N({nonMaxSuppression_:fj});function xN(r,e,t){let o=hj(r,e,t),n=o<0?-(o+1):o;r.splice(n,0,e)}function hj(r,e,t){return xj(r,e,t||gj)}function gj(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 Jd(r,e,t,o,n){return eS(r,e,t,o,n,0)}function ef(r,e,t,o,n,s){return eS(r,e,t,o,n,0,!1,s,!0)}function tf(r,e,t,o,n,s){return eS(r,e,t,o,n,s,!0)}function eS(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(yN);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 _=yj(r,b,l[k]);if(_>=o){S=!0;break}if(g.score=g.score*bj(o,c,_),g.score<=n)break}g.suppressBeginIndex=l.length,S||(g.score===x?(l.push(b),m.push(g.score)):g.score>n&&xN(u,g,yN))}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 yj(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 bj(r,e,t){let o=Math.exp(e*t*t);return t<=r?o:0}function yN(r,e){return r.score-e.score||r.score===e.score&&e.boxIndex-r.boxIndex}async function Cj(r,e,t,o=.5,n=Number.NEGATIVE_INFINITY){let s=v(r,\"boxes\",\"nonMaxSuppressionAsync\"),a=v(e,\"scores\",\"nonMaxSuppressionAsync\"),i=Eo(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}=Jd(u,c,t,o,n);return s!==r&&s.dispose(),a!==e&&a.dispose(),Jt(l,\"int32\")}var bN=Cj;function wj(r,e,t,o=.5,n=Number.NEGATIVE_INFINITY,s=0){let a=v(r,\"boxes\",\"nonMaxSuppression\"),i=v(e,\"scores\",\"nonMaxSuppression\"),p=Eo(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(Zn,u,c);return{selectedIndices:l[0],selectedScores:l[1]}}var CN=N({nonMaxSuppressionWithScore_:wj});async function Sj(r,e,t,o=.5,n=Number.NEGATIVE_INFINITY,s=0){let a=v(r,\"boxes\",\"nonMaxSuppressionAsync\"),i=v(e,\"scores\",\"nonMaxSuppressionAsync\"),p=Eo(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}=tf(c,l,t,o,n,s);return a!==r&&a.dispose(),i!==e&&i.dispose(),{selectedIndices:Jt(m,\"int32\"),selectedScores:Jt(d)}}var wN=Sj;function Ij(r,e,t,o=.5,n=Number.NEGATIVE_INFINITY,s=!1){let a=v(r,\"boxes\",\"nonMaxSuppression\"),i=v(e,\"scores\",\"nonMaxSuppression\"),p=Eo(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(Qa,m,d);return{selectedIndices:f[0],validOutputs:f[1]}}var SN=N({nonMaxSuppressionPadded_:Ij});async function vj(r,e,t,o=.5,n=Number.NEGATIVE_INFINITY,s=!1){let a=v(r,\"boxes\",\"nonMaxSuppressionAsync\"),i=v(e,\"scores\",\"nonMaxSuppressionAsync\"),p=Eo(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}=ef(m,d,u,c,l,s);return a!==r&&a.dispose(),i!==e&&i.dispose(),{selectedIndices:Jt(f,\"int32\"),validOutputs:ke(h,\"int32\")}}var IN=vj;function kj(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=W(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(is,i,p);return a?W(u,[u.shape[1],u.shape[2],u.shape[3]]):u}var vN=N({resizeBilinear_:kj});function Nj(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=W(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(as,i,p);return a?W(u,[u.shape[1],u.shape[2],u.shape[3]]):u}var kN=N({resizeNearestNeighbor_:Nj});function Tj(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=se(Jt([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]=li(n,[1,1,1],-1);let g=se(c,s),x=se(l,a),b=se(m,i);d=Ce(Ce(g,x),b)}else d=r;if(e===\"otsu\"){let g=hd(Ue(Gd(d),\"int32\"),ar([]),256);u=_j(g,p)}let f=t?ac(d,u):Wu(d,u);return Ue(se(f,255),\"int32\")}function _j(r,e){let t=Jt([-1]),o=Jt([0]),n=Jt([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(Rs,p,u)}var TN=N({transform_:Ej});function $j(r,e,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),i,p;typeof e==\"number\"?(E(e%1===0,()=>`bandPart(): numLower must be an integer, got ${e}.`),E(e<=s,()=>`bandPart(): numLower (${e}) must not be greater than the number of rows (${s}).`),i=v(e<0?s:e,\"numLower\",\"bandPart\")):(E(e.dtype===\"int32\",()=>\"bandPart(): numLower's dtype must be an int32.\"),i=lo(Tl(e,0),s,Hu(e,s))),typeof t==\"number\"?(E(t%1===0,()=>`bandPart(): numUpper must be an integer, got ${t}.`),E(t<=a,()=>`bandPart(): numUpper (${t}) must not be greater than the number of columns (${a}).`),p=v(t<0?a:t,\"numUpper\",\"bandPart\")):(E(t.dtype===\"int32\",()=>\"bandPart(): numUpper's dtype must be an int32.\"),p=lo(Tl(t,0),a,Hu(t,a)));let u=W(cu(0,s,1,\"int32\"),[-1,1]),c=cu(0,a,1,\"int32\"),l=Te(u,c),m=Uu(ac(l,i),Id(l,pr(p))),d=Gr([s,a],o.dtype);return W(vr(fo(W(o,[-1,s,a])).map(f=>lo(m,f,d))),n)}var _N=N({bandPart_:$j});function Rj(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=li(r,r.shape[0],0).map(n=>cc(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 $N(r,e);{let t=r.shape.slice(0,r.shape.length-2).reduce((p,u)=>p*u),o=fo(W(r,[t,r.shape[r.shape.length-2],r.shape[r.shape.length-1]]),0),n=[],s=[];o.forEach(p=>{let[u,c]=$N(p,e);n.push(u),s.push(c)});let a=W(vr(n,0),r.shape),i=W(vr(s,0),r.shape);return[a,i]}}function $N(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=Cd(t),s=Ur(r),a=mu([[1]],[1,1]),i=Ur(a),p=t>=o?o:t;for(let u=0;u{let d=Xe(s,[u,u],[t-u,1]),f=Vu(d),h=Xe(s,[u,u],[1,1]),g=lo(Wu(h,0),mu([[-1]]),mu([[1]])),x=Te(h,se(g,f)),b=je(d,x);b.shape[0]===1?i=Ur(a):i=yt([a,Xe(b,[1,0],[b.shape[0]-1,b.shape[1]])],0);let C=pr(je(Ze(g,x),f)),S=Xe(s,[u,0],[t-u,o]),k=se(C,i),_=mc(i);if(u===0)s=Te(S,Ze(k,Ze(_,S)));else{let D=Te(S,Ze(k,Ze(_,S)));s=yt([Xe(s,[0,0],[u,o]),D],0)}let $=mc(k),R=Xe(n,[0,u],[t,n.shape[1]-u]);if(u===0)n=Te(R,Ze(Ze(R,i),$));else{let D=Te(R,Ze(Ze(R,i),$));n=yt([Xe(n,[0,0],[t,u]),D],1)}return[i,s,n]}),Ot([c,l,m])}return!e&&t>o&&(n=Xe(n,[0,0],[t,o]),s=Xe(s,[0,0],[o,o])),[n,s]})}var RN=N({qr_:Dj});var $t;(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\"})($t||($t={}));function Aj(r,e,t=$t.SUM_BY_NONZERO_WEIGHTS){let o=v(r,\"losses\",\"computeWeightedLoss\"),n=null;e!=null&&(n=v(e,\"weights\",\"computeWeightedLoss\"));let s=n==null?o:se(o,n);if(t===$t.NONE)return s;if(t===$t.SUM)return ot(s);if(t===$t.MEAN){if(n==null)return Gu(s);{let a=o.size/n.size,i=je(ot(s),ot(n));return a>1?je(i,ke(a)):i}}if(t===$t.SUM_BY_NONZERO_WEIGHTS){if(n==null)return je(ot(s),ke(o.size));{let a=se(n,Da(o.shape)),i=Ue(ot(Fd(a,ke(0))),\"float32\");return je(ot(s),i)}}throw Error(`Unknown reduction: ${t}`)}var cr=N({computeWeightedLoss_:Aj});function Fj(r,e,t,o=$t.SUM_BY_NONZERO_WEIGHTS){let n=v(r,\"labels\",\"absoluteDifference\"),s=v(e,\"predictions\",\"absoluteDifference\"),a=null;t!=null&&(a=v(t,\"weights\",\"absoluteDifference\")),xt(n.shape,s.shape,\"Error in absoluteDifference: \");let i=Qt(Te(n,s));return cr(i,a,o)}var DN=N({absoluteDifference_:Fj});function Pj(r,e,t,o,n=$t.SUM_BY_NONZERO_WEIGHTS){let s=v(r,\"labels\",\"cosineDistance\"),a=v(e,\"predictions\",\"cosineDistance\"),i=null;o!=null&&(i=v(o,\"weights\",\"cosineDistance\")),xt(s.shape,a.shape,\"Error in cosineDistance: \");let p=ke(1),u=Te(p,ot(se(s,a),t,!0));return cr(u,i,n)}var AN=N({cosineDistance_:Pj});function Oj(r,e,t,o=$t.SUM_BY_NONZERO_WEIGHTS){let n=v(r,\"labels\",\"hingeLoss\"),s=v(e,\"predictions\",\"hingeLoss\"),a=null;t!=null&&(a=v(t,\"weights\",\"hingeLoss\")),xt(n.shape,s.shape,\"Error in hingeLoss: \");let i=ke(1);n=Te(se(ke(2),n),i);let p=lu(Te(i,se(n,s)));return cr(p,a,o)}var FN=N({hingeLoss_:Oj});function Mj(r,e,t,o=1,n=$t.SUM_BY_NONZERO_WEIGHTS){let s=v(r,\"labels\",\"huberLoss\"),a=v(e,\"predictions\",\"huberLoss\"),i=null;t!=null&&(i=v(t,\"weights\",\"huberLoss\")),xt(s.shape,a.shape,\"Error in huberLoss: \");let p=ke(o),u=Qt(Te(a,s)),c=Hu(u,p),l=Te(u,c),m=Ce(se(ke(.5),Zt(c)),se(p,l));return cr(m,i,n)}var PN=N({huberLoss_:Mj});function Lj(r,e,t,o=1e-7,n=$t.SUM_BY_NONZERO_WEIGHTS){let s=v(r,\"labels\",\"logLoss\"),a=v(e,\"predictions\",\"logLoss\"),i=null;t!=null&&(i=v(t,\"weights\",\"logLoss\")),xt(s.shape,a.shape,\"Error in logLoss: \");let p=ke(1),u=ke(o),c=pr(se(s,pi(Ce(a,u)))),l=se(Te(p,s),pi(Ce(Te(p,a),u))),m=Te(c,l);return cr(m,i,n)}var ON=N({logLoss_:Lj});function Bj(r,e,t,o=$t.SUM_BY_NONZERO_WEIGHTS){let n=v(r,\"labels\",\"meanSquaredError\"),s=v(e,\"predictions\",\"meanSquaredError\"),a=null;t!=null&&(a=v(t,\"weights\",\"meanSquaredError\")),xt(n.shape,s.shape,\"Error in meanSquaredError: \");let i=Kd(n,s);return cr(i,a,o)}var MN=N({meanSquaredError_:Bj});function zj(r,e){let t=v(r,\"labels\",\"sigmoidCrossEntropyWithLogits\"),o=v(e,\"logits\",\"sigmoidCrossEntropyWithLogits\");xt(t.shape,o.shape,\"Error in sigmoidCrossEntropyWithLogits: \");let n=lu(o),s=se(o,t),a=kd(_o(pr(Qt(o))));return Ce(Te(n,s),a)}function Vj(r,e,t,o=0,n=$t.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\")),xt(s.shape,a.shape,\"Error in sigmoidCrossEntropy: \"),o>0){let u=ke(o),c=ke(1),l=ke(.5);s=Ce(se(s,Te(c,u)),se(l,u))}let p=zj(s,a);return cr(p,i,n)}var LN=N({sigmoidCrossEntropy_:Vj});function Wj(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 Ir((n,s,a)=>{let p=_d(s,[t],!0),u=Te(Ue(s,\"float32\"),p);a([n,u]);let c=pr(se(u,n));return{value:ot(c,[t]),gradFunc:(d,f)=>{let[h,g]=f,x=ii(d.shape,[t]);return[se(W(d,x),Te(Ue(h,\"float32\"),_o(g))),se(W(d,x),Te(_o(g),Ue(h,\"float32\")))]}}})(r,e)}function Uj(r,e,t,o=0,n=$t.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\")),xt(s.shape,a.shape,\"Error in softmaxCrossEntropy: \"),o>0){let u=ke(o),c=ke(1),l=ke(s.shape[1]);s=Ce(se(s,Te(c,u)),je(u,l))}let p=Wj(s,a);return cr(p,i,n)}var BN=N({softmaxCrossEntropy_:Uj});function Gj(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(Ki,p);return{outputIndices:u[0],outputValues:u[1],emptyRowIndicator:u[2],reverseIndexMap:u[3]}}var zN=N({sparseFillEmptyRows_:Gj});function Hj(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(ei,a);return{outputIndices:i[0],outputShape:i[1]}}var VN=N({sparseReshape_:Hj});function Kj(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(ya,a)}var WN=N({sparseSegmentMean_:Kj});function qj(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(ba,a)}var UN=N({sparseSegmentSum_:qj});function jj(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(Ca,l,c);return{nGrams:m[0],nGramsSplits:m[1]}}var GN=N({stringNGrams_:jj});function Xj(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(ji,a,s);return{indices:i[0],values:i[1],shape:i[2]}}var HN=N({stringSplit_:Xj});function Yj(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(Xi,n,o)}var KN=N({stringToHashBucketFast_:Yj});function Qj(r,e,t,o=!0){let n=v(r,\"input\",\"staticRegexReplace\",\"string\"),s={pattern:e,rewrite:t,replaceGlobal:o};return T.runKernel(Ru,{x:n},s)}var qN=N({staticRegexReplace_:Qj});var Zj={fft:uc,ifft:ju,rfft:pc,irfft:Hd},Jj={hammingWindow:pN,hannWindow:Qd,frame:Zd,stft:cN},eX={flipLeftRight:mN,grayscaleToRGB:dN,resizeNearestNeighbor:kN,resizeBilinear:vN,rgbToGrayscale:fN,rotateWithOffset:hN,cropAndResize:lN,nonMaxSuppression:gN,nonMaxSuppressionAsync:bN,nonMaxSuppressionWithScore:CN,nonMaxSuppressionWithScoreAsync:wN,nonMaxSuppressionPadded:SN,nonMaxSuppressionPaddedAsync:IN,threshold:NN,transform:TN},tX={bandPart:_N,gramSchmidt:EN,qr:RN},rX={absoluteDifference:DN,computeWeightedLoss:cr,cosineDistance:AN,hingeLoss:FN,huberLoss:PN,logLoss:ON,meanSquaredError:MN,sigmoidCrossEntropy:LN,softmaxCrossEntropy:BN},oX={sparseFillEmptyRows:zN,sparseReshape:VN,sparseSegmentMean:WN,sparseSegmentSum:UN},nX={stringNGrams:GN,stringSplit:HN,stringToHashBucketFast:KN,staticRegexReplace:qN};var jN={};qe(jN,{Serializable:()=>Rl,SerializationMap:()=>rf,getRegisteredName:()=>aX,registerClass:()=>rS});var sX=new Map,tS=new Map,Rl=class{getClassName(){return this.constructor.className}static fromConfig(e,t){return new e(t)}},rf=class r{constructor(){this.classNameMap={}}static getMap(){return r.instance==null&&(r.instance=new r),r.instance}static register(e){r.getMap().classNameMap[e.className]=[e,e.fromConfig]}};function rS(r,e,t){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.\"),typeof e==\"undefined\"&&(e=\"Custom\"),typeof t==\"undefined\"&&(t=r.className);let o=t,n=e+\">\"+o;return rf.register(r),sX.set(n,r),tS.set(r,n),r}function aX(r){return tS.has(r)?tS.get(r):r.className}var kr=class extends Rl{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 Ot(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 Vw(e,t)}dispose(){this.iterations_!=null&&Ot(this.iterations_)}async saveIterations(){return this.iterations_==null&&(this.iterations_=0),{name:\"iter\",tensor:ke(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(kr,Symbol.hasInstance,{value:r=>r.minimize!=null&&r.computeGradients!=null&&r.applyGradients!=null});var Ju=class extends kr{static get className(){return\"Adadelta\"}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:De(()=>Gt(s).variable(a))}),this.accumulatedUpdates[n]==null&&(this.accumulatedUpdates[n]={originalName:`${o}/accum_var`,variable:De(()=>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;De(()=>{let c=Ce(se(p,this.rho),se(Zt(i),1-this.rho)),l=se(je(Rr(Ce(u,this.epsilon)),Rr(Ce(p,this.epsilon))),i),m=Ce(se(u,this.rho),se(Zt(l),1-this.rho));p.assign(c),u.assign(m);let d=Ce(se(l,-this.learningRate),s);s.assign(d)})}),this.incrementIterations()}dispose(){this.accumulatedUpdates!=null&&(Ot(this.accumulatedGrads.map(e=>e.variable)),Ot(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)}};var ep=class extends kr{static get className(){return\"Adagrad\"}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:De(()=>$a(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;De(()=>{let p=Ce(i,Zt(a));i.assign(p);let u=Ce(se(je(a,Rr(Ce(p,T.backend.epsilon()))),-this.learningRate),s);s.assign(u)})}),this.incrementIterations()}dispose(){this.accumulatedGrads!=null&&Ot(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)}};var tp=class extends kr{static get className(){return\"Adam\"}constructor(e,t,o,n=null){super(),this.learningRate=e,this.beta1=t,this.beta2=o,this.epsilon=n,this.accumulatedFirstMoment=[],this.accumulatedSecondMoment=[],De(()=>{this.accBeta1=ke(t).variable(),this.accBeta2=ke(o).variable()}),n==null&&(this.epsilon=T.backend.epsilon())}applyGradients(e){let t=Array.isArray(e)?e.map(o=>o.name):Object.keys(e);De(()=>{let o=Te(1,this.accBeta1),n=Te(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:De(()=>Gt(i).variable(p))}),this.accumulatedSecondMoment[a]==null&&(this.accumulatedSecondMoment[a]={originalName:`${s}/v`,variable:De(()=>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=Ce(se(c,this.beta1),se(u,1-this.beta1)),d=Ce(se(l,this.beta2),se(Zt(u),1-this.beta2)),f=je(m,o),h=je(d,n);c.assign(m),l.assign(d);let g=Ce(se(je(f,Ce(Rr(h),this.epsilon)),-this.learningRate),i);i.assign(g)}),this.accBeta1.assign(se(this.accBeta1,this.beta1)),this.accBeta2.assign(se(this.accBeta2,this.beta2))}),this.incrementIterations()}dispose(){this.accBeta1.dispose(),this.accBeta2.dispose(),this.accumulatedFirstMoment!=null&&Ot(this.accumulatedFirstMoment.map(e=>e.variable)),this.accumulatedSecondMoment!=null&&Ot(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),De(()=>{this.accBeta1.assign(ui(this.beta1,this.iterations_+1)),this.accBeta2.assign(ui(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)}};var rp=class extends kr{static get className(){return\"Adamax\"}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=[],De(()=>{this.iteration=ke(0).variable(),this.accBeta1=ke(t).variable()}),n==null&&(this.epsilon=T.backend.epsilon())}applyGradients(e){let t=Array.isArray(e)?e.map(o=>o.name):Object.keys(e);De(()=>{let o=Te(1,this.accBeta1),n=je(-this.learningRate,Ce(se(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: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=Ce(se(c,this.beta1),se(u,1-this.beta1)),d=se(l,this.beta2),f=Qt(u),h=Ad(d,f);c.assign(m),l.assign(h);let g=Ce(se(je(n,o),je(m,Ce(h,this.epsilon))),i);i.assign(g)}),this.iteration.assign(Ce(this.iteration,1)),this.accBeta1.assign(se(this.accBeta1,this.beta1))}),this.incrementIterations()}dispose(){this.accBeta1.dispose(),this.iteration.dispose(),this.accumulatedFirstMoment!=null&&Ot(this.accumulatedFirstMoment.map(e=>e.variable)),this.accumulatedWeightedInfNorm!=null&&Ot(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)}};var mi=class extends kr{static get className(){return\"SGD\"}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];De(()=>{let i=Ce(se(this.c,s),a);a.assign(i)})}),this.incrementIterations()}setLearningRate(e){this.learningRate=e,this.c!=null&&this.c.dispose(),this.c=$r(ke(-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)}};var op=class extends mi{static get className(){return\"Momentum\"}constructor(e,t,o=!1){super(e),this.learningRate=e,this.momentum=t,this.useNesterov=o,this.accumulations=[],this.m=ke(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:De(()=>Gt(s).variable(!1))});let a=this.accumulations[n].variable,i=Array.isArray(e)?e[n].tensor:e[o];i!=null&&De(()=>{let p,u=Ce(se(this.m,a),i);this.useNesterov?p=Ce(se(this.c,Ce(i,se(u,this.m))),s):p=Ce(se(this.c,u),s),a.assign(u),s.assign(p)})}),this.incrementIterations()}dispose(){this.m.dispose(),this.accumulations!=null&&Ot(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)}};var np=class extends kr{static get className(){return\"RMSProp\"}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:De(()=>Gt(s).variable(a))}),this.accumulatedMoments[n]==null&&(this.accumulatedMoments[n]={originalName:`${o}/momentum`,variable:De(()=>Gt(s).variable(a))}),this.accumulatedMeanGrads[n]==null&&this.centered&&(this.accumulatedMeanGrads[n]={originalName:`${o}/mg`,variable:De(()=>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;De(()=>{let c=Ce(se(p,this.decay),se(Zt(i),1-this.decay));if(this.centered){let l=this.accumulatedMeanGrads[n].variable,m=Ce(se(l,this.decay),se(i,1-this.decay)),d=je(se(i,this.learningRate),Rr(Te(c,Ce(Zt(m),this.epsilon)))),f=Ce(se(u,this.momentum),d);p.assign(c),l.assign(m),u.assign(f);let h=Te(s,f);s.assign(h)}else{let l=Ce(se(p,this.decay),se(Zt(i),1-this.decay)),m=Ce(se(u,this.momentum),je(se(i,this.learningRate),Rr(Ce(l,this.epsilon))));p.assign(l),u.assign(m);let d=Te(s,m);s.assign(d)}})}),this.incrementIterations()}dispose(){this.accumulatedMeanSquares!=null&&Ot(this.accumulatedMeanSquares.map(e=>e.variable)),this.accumulatedMeanGrads!=null&&this.centered&&Ot(this.accumulatedMeanGrads.map(e=>e.variable)),this.accumulatedMoments!=null&&Ot(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)}};var iX=[Ju,ep,tp,rp,op,np,mi];function XN(){for(let r of iX)rS(r)}var di={};qe(di,{CompositeArrayBuffer:()=>ir,browserFiles:()=>QN,browserHTTPRequest:()=>tT,concatenateArrayBuffers:()=>dk,copyModel:()=>Tk,decodeWeights:()=>sd,decodeWeightsStream:()=>ad,encodeWeights:()=>pk,fromMemory:()=>rT,fromMemorySync:()=>uS,getLoadHandlers:()=>xk,getModelArtifactsForJSON:()=>tc,getModelArtifactsForJSONSync:()=>$w,getModelArtifactsInfoForJSON:()=>va,getSaveHandlers:()=>gk,getWeightSpecs:()=>Sl,http:()=>nf,isHTTPScheme:()=>of,listModels:()=>kk,loadWeights:()=>JN,moveModel:()=>_k,registerLoadRouter:()=>hk,registerSaveRouter:()=>fk,removeModel:()=>Nk,weightsLoaderFactory:()=>aS,withSaveHandler:()=>oT,withSaveHandlerSync:()=>nT});var uX=\"model\",pX=\".json\",cX=\".weights.bin\";function YN(r){return new Promise(e=>setTimeout(e)).then(r)}var dc=class r{constructor(e){if(!A().getBool(\"IS_BROWSER\"))throw new Error(\"browserDownloads() cannot proceed because the current environment is not a browser.\");e.startsWith(r.URL_SCHEME)&&(e=e.slice(r.URL_SCHEME.length)),(e==null||e.length===0)&&(e=uX),this.modelJsonFileName=e+pX,this.weightDataFileName=e+cX}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=ir.join(e.weightData),o=window.URL.createObjectURL(new Blob([t],{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 n=[{paths:[\"./\"+this.weightDataFileName],weights:e.weightSpecs}],s=id(e,n),a=window.URL.createObjectURL(new Blob([JSON.stringify(s)],{type:\"application/json\"})),i=this.modelJsonAnchor==null?document.createElement(\"a\"):this.modelJsonAnchor;if(i.download=this.modelJsonFileName,i.href=a,await YN(()=>i.dispatchEvent(new MouseEvent(\"click\"))),e.weightData!=null){let p=this.weightDataAnchor==null?document.createElement(\"a\"):this.weightDataAnchor;p.download=this.weightDataFileName,p.href=o,await YN(()=>p.dispatchEvent(new MouseEvent(\"click\")))}return{modelArtifactsInfo:va(e)}}}};dc.URL_SCHEME=\"downloads://\";var oS=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=tc(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,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=>Ew(s.name)),n={};for(let s of e)s.paths.forEach(a=>{let i=Ew(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}},lX=r=>A().getBool(\"IS_BROWSER\")&&!Array.isArray(r)&&r.startsWith(dc.URL_SCHEME)?mX(r.slice(dc.URL_SCHEME.length)):null;qt.registerSaveRouter(lX);function mX(r=\"model\"){return new dc(r)}function QN(r){return new oS(r)}function nS(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 sS(r,e){e==null&&(e={});let t=e.fetchFunc==null?A().platform.fetch:e.fetchFunc,o=r.map(l=>t(l,e.requestInit,{isBinary:!0})),i=(e.onProgress==null?await Promise.all(o):await nS(o,e.onProgress,0,.5)).map(l=>l.arrayBuffer());return e.onProgress==null?await Promise.all(i):await nS(i,e.onProgress,.5,1)}function ZN(r,e){var t;let o=e.fetchFunc==null?A().platform.fetch:e.fetchFunc,n=0,s;return(t=e.onProgress)===null||t===void 0||t.call(e,0),new ReadableStream({pull:async a=>{for(var i;nsS(a,{requestInit:o}))(r,e,t)}function aS(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=si[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((S,k)=>{S===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=new ir(c.slice(m,m+f));s[d].forEach(x=>{let b=h.slice(x.groupOffset,x.groupOffset+x.sizeBytes),C=sd(b,[x.manifestEntry]);for(let S in C)l[S]=C[S]}),m+=f}),l}}var dX=\"application/octet-stream\",fX=\"application/json\",Dl=class{constructor(e,t){if(this.DEFAULT_METHOD=\"POST\",t==null&&(t={}),this.weightPathPrefix=t.weightPathPrefix,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=A().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||{},this.loadOptions=t}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=id(e,o);if(t.body.append(\"model.json\",new Blob([JSON.stringify(n)],{type:fX}),\"model.json\"),e.weightData!=null){let a=ir.join(e.weightData);t.body.append(\"model.weights.bin\",new Blob([a],{type:dX}),\"model.weights.bin\")}let s=await this.fetch(this.path,t);if(s.ok)return{modelArtifactsInfo:va(e),responses:[s]};throw new Error(`BrowserHTTPRequest.save() failed due to HTTP response status ${s.status}.`)}async loadModelJSON(){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 t}async load(){if(this.loadOptions.streamWeights)return this.loadStream();let e=await this.loadModelJSON();return tc(e,t=>this.loadWeights(t))}async loadStream(){let e=await this.loadModelJSON(),t=await this.getWeightUrls(e.weightsManifest),o=Sl(e.weightsManifest),n=()=>ZN(t,this.loadOptions);return Object.assign(Object.assign({},e),{weightSpecs:o,getWeightStream:n})}async getWeightUrls(e){let t=Array.isArray(this.path)?this.path[1]:this.path,[o,n]=hX(t),s=this.weightPathPrefix||o,a=[],i=[];for(let p of e)for(let u of p.paths)this.weightUrlConverter!=null?i.push(this.weightUrlConverter(u)):a.push(s+u+n);return this.weightUrlConverter&&a.push(...await Promise.all(i)),a}async loadWeights(e){let t=await this.getWeightUrls(e),o=Sl(e),n=await sS(t,this.loadOptions);return[o,n]}};Dl.URL_SCHEME_REGEX=/^https?:\\/\\//;function hX(r){let e=r.lastIndexOf(\"/\"),t=r.lastIndexOf(\"?\"),o=r.substring(0,e),n=t>e?r.substring(t):\"\";return[o+\"/\",n]}function of(r){return r.match(Dl.URL_SCHEME_REGEX)!=null}var eT=(r,e)=>{if(typeof fetch==\"undefined\"&&(e==null||e.fetchFunc==null))return null;{let t=!0;if(Array.isArray(r)?t=r.every(o=>of(o)):t=of(r),t)return nf(r,e)}return null};qt.registerSaveRouter(eT);qt.registerLoadRouter(eT);function nf(r,e){return new Dl(r,e)}function tT(r,e){return nf(r,e)}var Al=class{constructor(e){this.modelArtifacts=e}load(){return this.modelArtifacts}},sf=class{constructor(e){this.saveHandler=e}save(e){return this.saveHandler(e)}},iS=class{constructor(e){e.load&&(this.load=()=>Promise.resolve(e.load())),e.save&&(this.save=t=>Promise.resolve(e.save(t)))}};function rT(r,e,t,o){let n=arguments;return new iS(uS(...n))}function uS(r,e,t,o){return arguments.length===1?r.modelTopology!=null||r.weightSpecs!=null?new Al(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 Al({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 Al({modelTopology:r,weightSpecs:e,weightData:t,trainingConfig:o}))}function oT(r){return new sf(r)}function nT(r){return new sf(r)}var aT={};qe(aT,{confusionMatrix:()=>sT});function gX(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=El(Ue(o,\"int32\"),t),a=El(Ue(n,\"int32\"),t),i=mc(s),p=Ze(i,a);return Ue(p,\"int32\")}var sT=N({confusionMatrix_:gX});var cT={};qe(cT,{draw:()=>vX,fromPixels:()=>kX,fromPixelsAsync:()=>wX,toPixels:()=>IX});var sp,iT=!1;function uT(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(Xp(Du,T.backendName)!=null){let f={pixels:r},h={numChannels:e};return T.runKernel(Du,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(sp==null)if(typeof document==\"undefined\")if(typeof OffscreenCanvas!=\"undefined\"&&typeof OffscreenCanvasRenderingContext2D!=\"undefined\")sp=new OffscreenCanvas(1,1).getContext(\"2d\");else throw new Error(\"Cannot parse input in current context. Reason: OffscreenCanvas Context2D rendering is not supported.\");else sp=document.createElement(\"canvas\").getContext(\"2d\",{willReadFrequently:!0});sp.canvas.width=u,sp.canvas.height=c,sp.drawImage(r,0,0,u,c),l=sp.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||e===2)throw new Error(`toPixels only supports depth of size 1, 3 or 4 but got ${e}`);if(r.dtype!==\"float32\"&&r.dtype!==\"int32\")throw new Error(`Unsupported type for toPixels: ${r.dtype}. Please use float32 or int32 tensors.`)}function SX(r){let e=(r==null?void 0:r.alpha)||1;if(e>1||e<0)throw new Error(`Alpha value ${e} is suppoed to be in range [0 - 1].`)}async function IX(r,e){let t=v(r,\"img\",\"toPixels\");if(!(r instanceof mt)){let u=t;t=Ue(u,\"int32\"),u.dispose()}pT(t);let[o,n]=t.shape.slice(0,2),s=t.rank===2?1:t.shape[2],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){iT||Xp($u,T.backendName)!=null&&(console.warn(\"tf.browser.toPixels is not efficient to draw tensor on canvas. Please try tf.browser.draw instead.\"),iT=!0),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}function vX(r,e,t){let o=v(r,\"img\",\"draw\");if(!(r instanceof mt)){let a=o;o=Ue(a,\"int32\"),a.dispose()}pT(o),SX(t==null?void 0:t.imageOptions);let n={image:o},s={canvas:e,options:t};T.runKernel($u,n,s)}var kX=N({fromPixels_:uT});var af={};qe(af,{prepareAndValidate:()=>lT});function lT(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 pt={};qe(pt,{assertParamsValid:()=>TX,computeFlatOffset:()=>DX,computeOutShape:()=>EX,getNormalizedAxes:()=>$X,isSliceContinous:()=>RX,maskToAxes:()=>_X,parseSliceParams:()=>AX,sliceInfo:()=>FX,startForAxis:()=>bT,startIndicesWithElidedDims:()=>gT,stopForAxis:()=>CT,stopIndicesWithElidedDims:()=>xT,stridesForAxis:()=>yT,stridesWithElidedDims:()=>dT});var pS=-2,NX=-1;function TX(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 _X(r){let e=[],t=0;for(;r>0;)r&1&&e.push(t),r/=2,t++;return e}function EX(r,e,t){let o=[];for(let n=0;n0){let d=e[0],f=t+1;c=gT(a,d,f,o,r),l=xT(i,d,f,n,r),m=dT(s,d,f,r)}else for(let d=0;d-1)s[i]=0;else{let p=fT(e,t,i),u=o[p];r&1<-1)s[i]=Number.MAX_SAFE_INTEGER;else{let p=fT(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=Vp(0,a,p-1),a}function CT(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=Vp(0,a,p):a=Vp(-1,a,p-1),a}function RX(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 DX(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 FX(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)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(S&&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]=mT(m.begin[C],0,m.strides[C],k,_,$),m.end[C]=mT(m.end[C],1,m.strides[C],k,_,$);let O=m.strides[C]===1&&m.begin[C]===0&&m.end[C]===k;d=d&&O,f=f&&(C===0&&m.strides[C]===1||O)}else d=d&&m.strides[C]===1&&R,f=f&&(C===0&&m.strides[C]===1||R);let D,P=!1;if(m.beginValid&&m.endValid?(D=m.end[C]-m.begin[C],P=!0):S?(D=1,P=!0):R&&k>=0&&(m.strides[C]<0?D=-k:D=k,P=!0),P){let O;D===0||D<0!=m.strides[C]<0?O=0:O=Math.trunc(D/m.strides[C])+(D%m.strides[C]!==0?1:0),g.push(O)}else g.push(-1)}for(let C=0;C=0?x.push(g[S]):S===pS&&x.push(1)}return{finalShapeSparse:x.filter((C,S)=>m.finalShapeGatherIndices[S]!==pS),finalShape:x,isIdentity:d,sliceDim0:f,isSimpleSlice:h,begin:m.begin,end:m.end,strides:m.strides}}function PX(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 OX=\"4.21.0\";var Fl=class{static sgd(e){return new mi(e)}static momentum(e,t,o=!1){return new op(e,t,o)}static rmsprop(e,t=.9,o=0,n=null,s=!1){return new np(e,t,o,n,s)}static adam(e=.001,t=.9,o=.999,n=null){return new tp(e,t,o,n)}static adadelta(e=.001,t=.95,o=null){return new Ju(e,t,o)}static adamax(e=.002,t=.9,o=.999,n=null,s=0){return new rp(e,t,o,n,s)}static adagrad(e,t=.1){return new ep(e,t)}};var OGe=Fl;var MX=typeof requestAnimationFrame!=\"undefined\"?requestAnimationFrame:typeof setImmediate!=\"undefined\"?setImmediate:r=>r();function cS(){return new Promise(r=>MX(()=>r()))}var w={};qe(w,{ERF_A1:()=>e5,ERF_A2:()=>t5,ERF_A3:()=>r5,ERF_A4:()=>o5,ERF_A5:()=>n5,ERF_P:()=>JX,PARALLELIZE_THRESHOLD:()=>uf,RowPartitionType:()=>Fa,SELU_SCALE:()=>ZX,SELU_SCALEALPHA:()=>QX,applyActivation:()=>Qu,assertAndGetBroadcastShape:()=>rt,assertAxesAreInnerMostDims:()=>pK,assertParamsConsistent:()=>LX,assignToTypedArray:()=>c5,axesAreInnerMostDims:()=>zw,calculateShapes:()=>q1,checkEinsumDimSizes:()=>g5,checkPadOnDimRoundingMode:()=>Lt,combineLocations:()=>I2,combineRaggedTensorToTensorShapes:()=>zX,complexWithEvenIndex:()=>i5,complexWithOddIndex:()=>u5,computeConv2DInfo:()=>zu,computeConv3DInfo:()=>Uk,computeDefaultPad:()=>Bw,computeDilation2DInfo:()=>iH,computeOptimalWindowSize:()=>GX,computeOutAndReduceShapes:()=>uK,computeOutShape:()=>BX,computePool2DInfo:()=>Lw,computePool3DInfo:()=>uH,convertConv2DDataFormat:()=>Gk,decodeEinsumEquation:()=>f5,eitherStridesOrDilationsAreOne:()=>gr,expandShapeToKeepDim:()=>ii,exponent:()=>m5,exponents:()=>l5,fromStringArrayToUint8:()=>M5,fromUint8ToStringArray:()=>O5,getAxesPermutation:()=>cK,getBroadcastDims:()=>y2,getComplexWithIndex:()=>p5,getEinsumComputePath:()=>x5,getEinsumPermutation:()=>h5,getFusedBiasGradient:()=>Yu,getFusedDyActivation:()=>Xu,getImageCenter:()=>HX,getInnerMostAxes:()=>mK,getPermuted:()=>qX,getRaggedRank:()=>WX,getReductionAxes:()=>xd,getReshaped:()=>KX,getReshapedPermuted:()=>jX,getRowPartitionTypesHelper:()=>VX,getSliceBeginCoords:()=>XX,getSliceSize:()=>YX,getSparseFillEmptyRowsIndicesDenseShapeMismatch:()=>w5,getSparseFillEmptyRowsNegativeIndexErrorMessage:()=>S5,getSparseFillEmptyRowsOutOfRangeIndexErrorMessage:()=>I5,getSparseReshapeEmptyTensorZeroOutputDimErrorMessage:()=>N5,getSparseReshapeInputOutputMismatchErrorMessage:()=>_5,getSparseReshapeInputOutputMultipleErrorMessage:()=>T5,getSparseReshapeMultipleNegativeOneOutputDimErrorMessage:()=>v5,getSparseReshapeNegativeOutputDimErrorMessage:()=>k5,getSparseSegmentReductionIndicesOutOfRangeErrorMessage:()=>D5,getSparseSegmentReductionNegativeSegmentIdsErrorMessage:()=>E5,getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage:()=>$5,getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage:()=>R5,getUndoAxesPermutation:()=>lK,isIdentityPermutation:()=>y5,log:()=>t4,mergeRealAndImagArrays:()=>s5,prepareAndValidate:()=>lT,prepareSplitSize:()=>C5,segment_util:()=>mS,shouldFuse:()=>Zu,slice_util:()=>pt,splitRealAndImagArrays:()=>a5,stridesOrDilationsArePositive:()=>Ta,tupleValuesAreOne:()=>Bu,upcastType:()=>dt,validateDefaultValueShape:()=>UX,validateInput:()=>lc,validateUpdateShape:()=>Qw,warn:()=>Ia});function LX(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 BX(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 VX(r){let e={FIRST_DIM_SIZE:Fa.FIRST_DIM_SIZE,VALUE_ROWIDS:Fa.VALUE_ROWIDS,ROW_LENGTHS:Fa.ROW_LENGTHS,ROW_SPLITS:Fa.ROW_SPLITS,ROW_LIMITS:Fa.ROW_LIMITS,ROW_STARTS:Fa.ROW_STARTS},t=[];for(let o of r)if(o in e)t.push(e[o]);else break;return t}function WX(r){return r.length===0?0:r[0]===Fa.FIRST_DIM_SIZE?r.length-1:r.length}function UX(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 uf=30;function GX(r){return r<=uf?r:Up(r,Math.floor(Math.sqrt(r)))}function HX(r,e,t){let o=t*(typeof r==\"number\"?r:r[0]),n=e*(typeof r==\"number\"?r:r[1]);return[o,n]}function KX(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 jX(r,e,t,o=!0){let n=[];o?n.push(r[0]/t):n.push(r[0]*t);for(let s=1;s\",d5=/->/g,wT=\",\",ST=\"...\";function f5(r,e){r=r.replace(/\\s/g,\"\");let t=(r.length-r.replace(d5,\"\").length)/lS.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 (\"${lS}\").`);let[o,n]=r.split(lS);E(o.indexOf(ST)===-1,()=>`The ellipsis notation (\"${ST}\") is not supported yet.`);let s=o.split(wT),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 g5(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 x5(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 b5(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 w5(r){return`Received SparseTensor with denseShape[0] = 0 but\n indices.shape[0] = ${r}`}function S5(r,e){return`indices(${r}, 0) is invalid: ${e} < 0`}function I5(r,e,t){return`indices(${r}, 0) is invalid: ${e} >= ${t}`}function v5(r,e){return`only one output dimension may be -1, not both ${r} and ${e}`}function k5(r,e){return`size ${r} must be non-negative, not ${e}`}function N5(){return\"reshape cannot infer the missing input size for an empty tensor unless all specified input sizes are non-zero\"}function T5(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 _5(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 E5(){return\"segment ids must be >= 0\"}function $5(){return\"segment ids are not increasing\"}function R5(r,e){return`Segment id ${r} out of range [0, ${e}), possibly because segmentIds input is not sorted.`}function D5(r,e,t){return`Bad: indices[${r}] == ${e} out of range [0, ${t})`}var mS={};qe(mS,{collectGatherOpShapeInfo:()=>P5,computeOutShape:()=>F5,segOpComputeOptimalWindowSize:()=>A5});function A5(r,e){let t=!1,o;for(r<=uf?(o=r,t=!0):o=Up(r,Math.floor(Math.sqrt(r)));!t;)o>e||o===r?t=!0:o=Up(r,o+1);return o}function F5(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(tJp(e))}catch(e){throw new Error(`Failed to decode encoded string bytes into utf-8, error: ${e}`)}}function M5(r){return r.map(e=>Ji(e))}var Vt={};qe(Vt,{nonMaxSuppressionV3Impl:()=>Jd,nonMaxSuppressionV4Impl:()=>ef,nonMaxSuppressionV5Impl:()=>tf,whereImpl:()=>Xd});XN();var L5=A();L5.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 Dr;(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\"})(Dr||(Dr={}));var IT;(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={}))})(IT||(IT={}));var fS={};function z5(r,e){let t={tfOpName:r,category:\"custom\",inputs:[],attrs:[],customExecutor:e};fS[r]=t}function pf(r){return fS[r]}function V5(r){delete fS[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,u=i<0?e.inputNames.length+i:i;if(s.type===\"tensor\")return Bt(e.inputNames[u],t,o,n);if(s.type===\"tensors\"){let m=e.inputs.slice(i,p);return e.inputNames.slice(i,p).filter((f,h)=>{var g;return((g=m[h])===null||g===void 0?void 0:g.op)!==\"NoOp\"}).map(f=>Bt(f,t,o,n))}let c=Bt(e.inputNames[u],t,o,n),l=c.dataSync();return s.type===\"number\"?l[0]:y.toNestedArray(c.shape,l)}let a=e.attrParams[r];return a&&a.value}function Bt(r,e,t,o){let[n,s]=Nr(r,t);if(o!=null){let i=o.getHashTableHandleByName(n);if(i!=null)return i}let a=t.currentContextIds.find(i=>!!e[cf(n,i)]);return a!==void 0?e[cf(n,a)][s]:void 0}function hS(r,e,t){return e[cf(r,t.currentContextId)]}function Ls(r,e){let[t,o,n]=Nr(r,e);return[cf(t,e&&e.currentContextId),o,n]}function cf(r,e){return e?`${r}-${e}`:r}function Nr(r,e){if(r===\"\")return[\"\",0,void 0];let t=e!=null&&e.parseNodeNameCache!=null;if(t){let s=e.parseNodeNameCache.get(r);if(s!=null)return s}let o=r.split(\":\"),n;if(o.length===1)n=[r,0,void 0];else{let s=o[0],a=o.length===3?o[1]:void 0,i=Number(o[o.length-1]);n=[s,i,a]}return t&&e.parseNodeNameCache.set(r,n),n}function Pl(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 Bs(r){return r.kept?r:Ur(r)}var gS={};qe(gS,{json:()=>W5});var W5=[{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 xS={};qe(xS,{json:()=>U5});var U5=[{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:\"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}]},{tfOpName:\"IsFinite\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"IsInf\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]}];var yS={};qe(yS,{json:()=>G5});var G5=[{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 bS={};qe(bS,{json:()=>H5});var H5=[{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 CS={};qe(CS,{json:()=>K5});var K5=[{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:\"RandomUniformInt\",category:\"creation\",inputs:[{start:0,name:\"shape\",type:\"number[]\"}],attrs:[{tfName:\"minval\",name:\"minval\",type:\"number\"},{tfName:\"maxval\",name:\"maxval\",type:\"number\"},{tfName:\"seed\",name:\"seed\",type:\"number\",defaultValue:0},{tfName:\"seed2\",name:\"seed2\",type:\"number\",defaultValue:0,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 wS={};qe(wS,{json:()=>q5});var q5=[{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 SS={};qe(SS,{json:()=>j5});var j5=[{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 IS={};qe(IS,{json:()=>X5});var X5=[{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 vS={};qe(vS,{json:()=>Y5});var Y5=[{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 kS={};qe(kS,{json:()=>Q5});var Q5=[{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 NS={};qe(NS,{json:()=>Z5});var Z5=[{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}]},{tfOpName:\"BitwiseAnd\",category:\"logical\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"y\",type:\"tensor\"}]}];var TS={};qe(TS,{json:()=>J5});var J5=[{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\"}]},{tfOpName:\"MatrixBandPart\",category:\"matrices\",inputs:[{start:0,name:\"a\",type:\"tensor\"},{start:1,name:\"numLower\",type:\"tensor\"},{start:1,name:\"numUpper\",type:\"tensor\"}]}];var _S={};qe(_S,{json:()=>e8});var e8=[{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\"}]}];var ES={};qe(ES,{json:()=>t8});var t8=[{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\"},{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{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 $S={};qe($S,{json:()=>r8});var r8=[{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}]},{tfOpName:\"TensorScatterUpdate\",category:\"slice_join\",inputs:[{start:0,name:\"tensor\",type:\"tensor\"},{start:1,name:\"indices\",type:\"tensor\"},{start:2,name:\"values\",type:\"tensor\"}]}];var RS={};qe(RS,{json:()=>o8});var o8=[{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 DS={};qe(DS,{json:()=>n8});var n8=[{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 AS={};qe(AS,{json:()=>s8});var s8=[{tfOpName:\"StaticRegexReplace\",category:\"string\",inputs:[{start:0,name:\"input\",type:\"tensor\"}],attrs:[{tfName:\"pattern\",name:\"pattern\",type:\"string\"},{tfName:\"rewrite\",name:\"rewrite\",type:\"string\"},{tfName:\"replace_global\",name:\"replaceGlobal\",type:\"bool\"}]},{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 FS={};qe(FS,{json:()=>a8});var a8=[{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:\"EnsureShape\",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 Ol=class{static get Instance(){return this._instance||(this._instance=new this)}constructor(){let e=[gS,xS,yS,bS,CS,wS,SS,IS,vS,kS,NS,TS,_S,ES,$S,RS,DS,AS,FS],t=[].concat(...e.map(o=>o.json));this.opMappers=t.reduce((o,n)=>(o[n.tfOpName]=n,o),{})}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,,S]=Ls(x),k=i[C];if(k.outputs!=null){let _=k.outputs.indexOf(S);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]=Ls(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]=Ls(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=pf(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=lf(e.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=lf(e.attr,s.tfDeprecatedName,s.defaultValue));break;case\"string[]\":i=yf(e.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=yf(e.attr,s.tfDeprecatedName,s.defaultValue));break;case\"number\":i=df(e.attr,s.tfName,s.defaultValue||0),i===void 0&&s.tfDeprecatedName&&(i=df(e.attr,s.tfDeprecatedName,s.defaultValue));break;case\"number[]\":i=xf(e.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=xf(e.attr,s.tfDeprecatedName,s.defaultValue));break;case\"bool\":i=mf(e.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=mf(e.attr,s.tfDeprecatedName,s.defaultValue));break;case\"bool[]\":i=Cf(e.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=Cf(e.attr,s.tfDeprecatedName,s.defaultValue));break;case\"shape\":i=gf(e.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=gf(e.attr,s.tfDeprecatedName,s.defaultValue));break;case\"shape[]\":i=bf(e.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=bf(e.attr,s.tfDeprecatedName,s.defaultValue));break;case\"dtype\":i=ff(e.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=ff(e.attr,s.tfDeprecatedName,s.defaultValue));break;case\"dtype[]\":i=hf(e.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=hf(e.attr,s.tfDeprecatedName,s.defaultValue));break;case\"func\":i=vT(e.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=vT(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]=Ls(l.name),d={name:m,op:\"Placeholder\",inputs:[],inputNames:[],category:\"graph\",inputParams:{},attrParams:{dtype:{value:PS(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]=Ls(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]=Ls(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 i8(r){let e=A().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 kT(r,e){let t=Array.isArray(r)?String.fromCharCode.apply(null,r):i8(r);return e?t:t.toLowerCase()}function lf(r,e,t,o=!1){let n=r[e];return n!=null?kT(n.s,o):t}function mf(r,e,t){let o=r[e];return o?o.b:t}function df(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 PS(r){switch(typeof r==\"string\"&&(r=Dr[r]),r){case Dr.DT_FLOAT:case Dr.DT_HALF:return\"float32\";case Dr.DT_INT32:case Dr.DT_INT64:case Dr.DT_INT8:case Dr.DT_UINT8:return\"int32\";case Dr.DT_BOOL:return\"bool\";case Dr.DT_DOUBLE:return\"float32\";case Dr.DT_STRING:return\"string\";case Dr.DT_COMPLEX64:case Dr.DT_COMPLEX128:return\"complex64\";default:return null}}function vT(r,e,t){let o=r[e];return o&&o.func?o.func.name:t}function ff(r,e,t){let o=r[e];return o&&o.type?PS(o.type):t}function hf(r,e,t){let o=r[e];return o&&o.list&&o.list.type?o.list.type.map(n=>PS(n)):t}function NT(r){if(!r.unknownRank)return r.dim!=null?r.dim.map(e=>typeof e.size==\"number\"?e.size:parseInt(e.size,10)):[]}function gf(r,e,t){let o=r[e];return o&&o.shape?NT(o.shape):t}function xf(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 yf(r,e,t,o=!1){let n=r[e];return n&&n.list&&n.list.s?n.list.s.map(s=>kT(s,o)):t}function bf(r,e,t){let o=r[e];return o&&o.list&&o.list.shape?o.list.shape.map(n=>NT(n)):t}function Cf(r,e,t){let o=r[e];return o&&o.list&&o.list.b?o.list.b:t}var wf=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 Bt(e,this.tensorMap,this.context)}getAttr(e,t){let o=this.node.rawAttrs[e];if(o.tensor!=null)return Bt(e,this.tensorMap,this.context);if(o.i!=null||o.f!=null)return df(this.node.rawAttrs,e,t);if(o.s!=null)return lf(this.node.rawAttrs,e,t);if(o.b!=null)return mf(this.node.rawAttrs,e,t);if(o.shape!=null)return gf(this.node.rawAttrs,e,t);if(o.type!=null)return ff(this.node.rawAttrs,e,t);if(o.list!=null){if(o.list.i!=null||o.list.f!=null)return xf(this.node.rawAttrs,e,t);if(o.list.s!=null)return yf(this.node.rawAttrs,e,t);if(o.list.shape!=null)return bf(this.node.rawAttrs,e,t);if(o.list.b!=null)return Cf(this.node.rawAttrs,e,t);if(o.list.type!=null)return hf(this.node.rawAttrs,e,t)}return t}};var Je={};qe(Je,{OP_SCOPE_SUFFIX:()=>Nw,abs:()=>Qt,acos:()=>Rk,acosh:()=>Dk,add:()=>Ce,addN:()=>Ak,all:()=>Fk,any:()=>Pk,argMax:()=>Ok,argMin:()=>Mk,asin:()=>Lk,asinh:()=>Bk,atan:()=>zk,atan2:()=>Vk,atanh:()=>Wk,avgPool:()=>dd,avgPool3d:()=>Hk,basicLSTMCell:()=>Kk,batchNorm:()=>nu,batchNorm2d:()=>jk,batchNorm3d:()=>Xk,batchNorm4d:()=>Yk,batchToSpaceND:()=>fd,bincount:()=>hd,bitwiseAnd:()=>Qk,booleanMaskAsync:()=>L6,broadcastArgs:()=>Zk,broadcastTo:()=>su,buffer:()=>me,cast:()=>Ue,ceil:()=>Jk,clipByValue:()=>e2,clone:()=>Ur,complex:()=>Er,concat:()=>yt,concat1d:()=>t2,concat2d:()=>r2,concat3d:()=>o2,concat4d:()=>n2,conv1d:()=>s2,conv2d:()=>au,conv2dTranspose:()=>a2,conv3d:()=>i2,conv3dTranspose:()=>p2,cos:()=>c2,cosh:()=>l2,cosineWindow:()=>$l,cumprod:()=>m2,cumsum:()=>d2,denseBincount:()=>f2,depthToSpace:()=>h2,depthwiseConv2d:()=>sc,diag:()=>g2,dilation2d:()=>x2,div:()=>je,divNoNan:()=>b2,dot:()=>C2,dropout:()=>Y6,einsum:()=>iu,elu:()=>bd,enclosingPowerOfTwo:()=>Zw,ensureShape:()=>w2,equal:()=>yd,erf:()=>S2,euclideanNorm:()=>k2,exp:()=>_o,expandDims:()=>Ms,expm1:()=>N2,eye:()=>Cd,fft:()=>uc,fill:()=>$a,floor:()=>wd,floorDiv:()=>md,fused:()=>Jw,gather:()=>Sd,gatherND:()=>j6,greater:()=>Wu,greaterEqual:()=>Id,ifft:()=>ju,imag:()=>pu,image:()=>eX,inTopKAsync:()=>Z6,irfft:()=>Hd,isFinite:()=>T2,isInf:()=>_2,isNaN:()=>E2,leakyRelu:()=>vd,less:()=>Tl,lessEqual:()=>ac,linalg:()=>tX,linspace:()=>$2,localResponseNormalization:()=>R2,log:()=>pi,log1p:()=>kd,logSigmoid:()=>D2,logSoftmax:()=>A2,logSumExp:()=>_d,logicalAnd:()=>Uu,logicalNot:()=>Ed,logicalOr:()=>$d,logicalXor:()=>F2,losses:()=>rX,lowerBound:()=>P2,matMul:()=>Ze,max:()=>Ra,maxPool:()=>Dd,maxPool3d:()=>O2,maxPoolWithArgmax:()=>M2,maximum:()=>Ad,mean:()=>Gu,meshgrid:()=>L2,min:()=>Nl,minimum:()=>Hu,mirrorPad:()=>B2,mod:()=>z2,moments:()=>V2,movingAverage:()=>V6,mul:()=>se,multiRNNCell:()=>W2,multinomial:()=>U2,neg:()=>pr,norm:()=>Vu,notEqual:()=>Fd,oneHot:()=>El,ones:()=>Da,onesLike:()=>G2,op:()=>N,outerProduct:()=>H2,pad:()=>Aa,pad1d:()=>K2,pad2d:()=>q2,pad3d:()=>j2,pad4d:()=>X2,pool:()=>Y2,pow:()=>ui,prelu:()=>Od,print:()=>ld,prod:()=>Q2,raggedGather:()=>Z2,raggedRange:()=>J2,raggedTensorToTensor:()=>e1,rand:()=>t1,randomGamma:()=>S1,randomNormal:()=>Wd,randomStandardNormal:()=>I1,randomUniform:()=>ic,randomUniformInt:()=>v1,range:()=>cu,real:()=>ci,reciprocal:()=>k1,relu:()=>lu,relu6:()=>Ud,reshape:()=>W,reverse:()=>mo,reverse1d:()=>N1,reverse2d:()=>T1,reverse3d:()=>_1,reverse4d:()=>E1,rfft:()=>pc,round:()=>Gd,rsqrt:()=>$1,scalar:()=>ke,scatterND:()=>U6,searchSorted:()=>_l,selu:()=>R1,separableConv2d:()=>D1,setdiff1dAsync:()=>A1,sigmoid:()=>Ea,sign:()=>F1,signal:()=>Jj,sin:()=>P1,sinh:()=>O1,slice:()=>Xe,slice1d:()=>M1,slice2d:()=>L1,slice3d:()=>B1,slice4d:()=>z1,softmax:()=>V1,softplus:()=>Td,spaceToBatchND:()=>Pd,sparse:()=>oX,sparseToDense:()=>K6,spectral:()=>Zj,split:()=>li,sqrt:()=>Rr,square:()=>Zt,squaredDifference:()=>Kd,squeeze:()=>cc,stack:()=>vr,step:()=>qd,stridedSlice:()=>W1,string:()=>nX,sub:()=>Te,sum:()=>ot,tan:()=>U1,tanh:()=>kl,tensor:()=>ar,tensor1d:()=>Jt,tensor2d:()=>mu,tensor3d:()=>jd,tensor4d:()=>G1,tensor5d:()=>H1,tensor6d:()=>K1,tensorScatterUpdate:()=>j1,tile:()=>uu,topk:()=>X1,transpose:()=>mc,truncatedNormal:()=>Y1,unique:()=>Q1,unsortedSegmentSum:()=>Z1,unstack:()=>fo,upperBound:()=>J1,variable:()=>eN,where:()=>lo,whereAsync:()=>Yd,zeros:()=>Gr,zerosLike:()=>Gt});var TT=(r,e,t,o=Je)=>{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 _T=(r,e,t,o=Je)=>{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(Bt(r.inputNames[0],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(Bt(r.inputNames[0],e,t))];case\"IsInf\":return[o.isInf(Bt(r.inputNames[0],e,t))];case\"IsFinite\":return[o.isFinite(Bt(r.inputNames[0],e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};function Hr(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 ET(r){return!(typeof r==\"number\"||r.some(e=>e<0))}function fc(r,e,t){let o=Sf(r,t),n=!ET(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=Sf(s.shape,o)}),!ET(o))throw new Error(`Non-fully-defined elementShape: ${o}`);return o}function Sf(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 If=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=ke(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),Hr(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,fo(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=[];De(()=>{t=W(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}`);Hr(t,s.shape,\"TensorList shape mismatch: \"),$r(s)}),this.idTensor=ke(0),this.maxNumElements=n,$r(this.idTensor)}copy(){return new r([...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.`);Hr(e,this.elementShape,\"TensorList shape mismatch: \");let n=fc(this.elementShape,this.tensors,e);return De(()=>{let s=this.tensors.map(a=>W(a,n));return vr(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=fc(this.elementShape,this.tensors,e),n=this.tensors.pop();return n.kept=!1,Hr(n.shape,e,\"TensorList shape mismatch: \"),W(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(Hr(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 r([],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.`);Hr(this.tensors[e].shape,t,\"TensorList shape mismatch: \");let n=fc(this.elementShape,this.tensors,t);return W(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.`);Hr(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}`);Hr(this.elementShape,o,\"TensorList shape mismatch: \"),e=e.slice(0,this.size());let n=fc(this.elementShape,this.tensors,o);return e.length===0?ar([],[0].concat(n)):De(()=>{let s=e.map(a=>W(this.tensors[a],n));return vr(s,0)})}concat(e,t){if(e&&e!==this.elementDtype)throw new Error(`TensorList dtype is ${this.elementDtype} but concat requested dtype ${e}`);Hr(this.elementShape,t,\"TensorList shape mismatch: \");let o=fc(this.elementShape,this.tensors,t);return this.size()===0?ar([],[0].concat(o)):De(()=>{let n=this.tensors.map(s=>W(s,o));return yt(n,0)})}};function $T(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);Hr(n,e,\"TensorList shape mismatch: \");let s=fo(r);return new hc(s,e,o)}function RT(r,e,t,o){return new hc([],r,e,o)}function DT(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 hc([],t,r.dtype,o),a=fo(r,0);return e.forEach((i,p)=>{s.setItem(i,a[p])}),s}function AT(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=Sf(s,t),i=o===0?0:r.size/o,p=De(()=>{let c=[];r=W(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[Bs(o)]}case\"Switch\":{let o=I(\"pred\",r,e,t),n=I(\"data\",r,e,t);return n.kept||(n=Bs(n)),(await o.data())[0]?[void 0,n]:[n,void 0]}case\"Merge\":{let o=r.inputNames.find(n=>Bt(n,e,t)!==void 0);if(o){let n=Bt(o,e,t);return[Bs(n)]}return}case\"Enter\":{let o=I(\"frameName\",r,e,t),n=I(\"tensor\",r,e,t);return t.enterFrame(o),[Bs(n)]}case\"Exit\":{let o=I(\"tensor\",r,e,t);return t.exitFrame(),[Bs(o)]}case\"NextIteration\":{let o=I(\"tensor\",r,e,t);return t.nextIteration(),[Bs(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 If(u,n,o,s,p,a,i);return t.addTensorArray(c),[c.idTensor,ke(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[ke(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=DT(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=RT(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=$T(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=AT(o,s,n);return t.addTensorList(a),[a.idTensor]}case\"TensorListLength\":{let o=I(\"tensorListId\",r,e,t),n=t.getTensorList(o.id);return[ke(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 PT(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=Pl(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 OT=(r,e,t,o=Je)=>{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=Pl(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}=PT(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}=PT(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=Pl(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=Pl(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 MT=(r,e,t,o=Je)=>{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\"RandomUniformInt\":return[o.randomUniformInt(I(\"shape\",r,e,t),I(\"minval\",r,e,t),I(\"maxval\",r,e,t),I(\"seed\",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 OS(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 LT=async(r,e,t,o,n=Je)=>{switch(r.op){case\"NonMaxSuppressionV5\":{let{boxes:s,scores:a,maxOutputSize:i,iouThreshold:p,scoreThreshold:u,softNmsSigma:c}=OS(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}=OS(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}=OS(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 BT=(r,e,t,o=Je)=>{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 zT=(r,e,t,o=Je)=>{switch(r.op){case\"Const\":return e[r.name];case\"PlaceholderWithDefault\":let n=I(\"default\",r,e,t);return[Bt(r.name,e,t)||n];case\"Placeholder\":return[Bt(r.name,e,t)];case\"Identity\":case\"StopGradient\":case\"FakeQuantWithMinMaxVars\":{let c=I(\"x\",r,e,t);return[Bs(c)]}case\"IdentityN\":return I(\"x\",r,e,t).map(c=>Bs(c));case\"Snapshot\":let s=I(\"x\",r,e,t);return[Bs(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 ke(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(),De(()=>{let n=fo(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 vf(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 WT=(r,e,t,o=Je)=>{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 UT=(r,e,t,o=Je)=>{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))];case\"BitwiseAnd\":return[o.bitwiseAnd(I(\"a\",r,e,t),I(\"b\",r,e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var GT=(r,e,t,o=Je)=>{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})];case\"MatrixBandPart\":return[o.linalg.bandPart(I(\"a\",r,e,t),I(\"numLower\",r,e,t),I(\"numUpper\",r,e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var HT=(r,e,t,o=Je)=>{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))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var KT=(r,e,t,o=Je)=>{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 qT=(r,e,t,o=Je)=>{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 jT=(r,e,t,o=Je)=>{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))]}case\"TensorScatterUpdate\":{let n=I(\"indices\",r,e,t),s=I(\"values\",r,e,t),a=I(\"tensor\",r,e,t);return[o.tensorScatterUpdate(a,n,s)]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};var XT=(r,e,t,o=Je)=>{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 YT=(r,e,t,o=Je)=>{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 QT=(r,e,t,o=Je)=>{switch(r.op){case\"StaticRegexReplace\":return[o.string.staticRegexReplace(I(\"input\",r,e,t),I(\"pattern\",r,e,t),I(\"rewrite\",r,e,t),I(\"replaceGlobal\",r,e,t))];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 ZT=(r,e,t,o=Je)=>{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\"EnsureShape\":return[o.ensureShape(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 MS(r,e,t,o,n=De){let s=((a,i,p)=>{switch(a.category){case\"arithmetic\":return n(()=>TT(a,i,p));case\"basic_math\":return n(()=>_T(a,i,p));case\"control\":return FT(a,i,p);case\"convolution\":return n(()=>OT(a,i,p));case\"creation\":return n(()=>MT(a,i,p));case\"dynamic\":return LT(a,i,p);case\"evaluation\":return n(()=>BT(a,i,p));case\"image\":return n(()=>WT(a,i,p));case\"graph\":return n(()=>zT(a,i,p));case\"logical\":return n(()=>UT(a,i,p));case\"matrices\":return n(()=>GT(a,i,p));case\"normalization\":return n(()=>HT(a,i,p));case\"ragged\":return n(()=>KT(a,i,p));case\"reduction\":return n(()=>qT(a,i,p));case\"slice_join\":return n(()=>jT(a,i,p));case\"sparse\":return n(()=>XT(a,i,p));case\"spectral\":return n(()=>YT(a,i,p));case\"string\":return n(()=>QT(a,i,p));case\"transformation\":return n(()=>ZT(a,i,p));case\"hash_table\":return VT(a,i,p,o);case\"custom\":let u=pf(a.op);if(u&&u.customExecutor)return u.customExecutor(new wf(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 Ml=class{constructor(e={},t={},o={},n={},s){this.weightMap=e,this.tensorArrayMap=t,this.tensorListMap=o,this.functionMap=n,this.parseNodeNameCache=s,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 LS(r,e,t,o){let n=new Set,s=[],a=null,i=null,p=new Set,u=new Set(Object.keys(r).map(m=>Nr(m)[0]));o=o||[];let c=new Set(o.map(m=>Nr(m.name)[0])),l=[...e];for(;l.length>0;){let m=l.pop();if((fu(m)||A8(m)||F8(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.has(m.name)&&!c.has(m.name)){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 JT(r,e){let{usedNodes:t,inputs:o}=e,n=Object.keys(o).map(g=>Nr(g)[0]).map(g=>r.nodes[g]),s=r.initNodes||[],a=g=>t.has(typeof g==\"string\"?g:g.name);function i(g){return[...new Map(g.map(x=>[x.name,x])).values()]}let p=i([...n,...r.weights,...s]).filter(a),u=i([...p,...Object.values(r.nodes)]).filter(a),c=new Map(u.map(g=>[g.name,g])),l={};for(let g of u){l[g.name]=l[g.name]||0;for(let x of g.children)a(x)||(l[x.name]=Number.POSITIVE_INFINITY),l[x.name]=(l[x.name]||0)+1}let m=Object.entries(l).filter(([,g])=>g===0).map(([g])=>g),d=[...m];for(;m.length>0;){let g=m.pop(),x=c.get(g);for(let b of x.children.filter(a))--l[b.name]===0&&(d.push(b.name),m.push(b.name))}let f=d.map(g=>c.get(g)),h=_8(f,p);return E8(h,p),h}function _8(r,e){let t=new Map(r.map(a=>[a.name,a])),o=e.map(a=>a.name),n=new Set(o);for(;o.length>0;){let a=o.pop(),i=t.get(a);for(let p of i.children)!t.has(p.name)||n.has(p.name)||(n.add(p.name),o.push(p.name))}return r.filter(a=>n.has(a.name))}var gc=class extends Error{constructor(e){super(`NodesExecutionOrderError: ${e}`)}};function E8(r,e){let t=new Map(r.map((i,p)=>[i.name,p])),o=new Set(e.map(i=>i.name)),n=i=>o.has(typeof i==\"string\"?i:i.name),s=new Set(r.map(i=>i.name)),a=i=>s.has(typeof i==\"string\"?i:i.name);for(let i of r){for(let p of i.children.filter(a)){if(!t.has(p.name))throw new gc(`Child ${p.name} of node ${i.name} is unreachable.`);if(t.get(i.name)>t.get(p.name))throw new gc(`Node ${i.name} is scheduled to run after its child ${p.name}.`)}if(!n(i))for(let p of i.inputs){if(!t.has(p.name))throw new gc(`Input ${p.name} of node ${i.name} is unreachable.`);if(t.get(p.name)>t.get(i.name))throw new gc(`Node ${i.name} is scheduled to run before its input ${p.name}.`)}}}function e_(r){let e=new Map(r.map((i,p)=>[i.name,p])),t=Number.MAX_SAFE_INTEGER,o=r.map((i,p)=>fu(i)?t:p),n=i=>{let p=o[e.get(i.name)];return p==null?-1:p},s=r.map((i,p)=>i.children.map(n).reduce((u,c)=>Math.max(u,c),o[p])),a=new Map;for(let i=0;ie[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),{})}constructor(e,t){this.graph=e,this.parent=t,this.compiledMap=new Map,this.parseNodeNameCache=new Map,this._weightMap={},this.SEPARATOR=\",\",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 r(e.functions[o],this)})}getCompilationKey(e,t){let o=e.map(s=>s.name).sort(),n=t.map(s=>s.name).sort();return o.join(this.SEPARATOR)+\"--\"+n.join(this.SEPARATOR)}compile(e,t){let o=LS(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 u=t.map(l=>l.name),c=Object.keys(e);throw new Error(`Cannot compute the outputs [${u}] from the provided inputs [${c}]. Missing the following inputs: [${n}]`)}let i=JT(this.graph,o),p=e_(i);return{orderedNodes:i,nodeLiveUntilMap:p}}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(m=>this.graph.nodes[Nr(m)[0]]),s=t.map(m=>Nr(m)[0]),a=new Set(s),i=s.map(m=>this.graph.nodes[m]);i.length===0&&(i=this._outputs);let p=this.getCompilationKey(n,i),u=this.compiledMap.get(p);u==null&&(u=this.compile(e,i),this.compiledMap.set(p,u));try{this.keepIntermediateTensors=A().getBool(\"KEEP_INTERMEDIATE_TENSORS\")}catch(m){this.keepIntermediateTensors=!1,console.warn(m.message)}let c={},l={};return De(()=>{let m=new Ml(this.weightMap,c,l,this.functionExecutorMap,this.parseNodeNameCache),d=Object.assign({},this.weightMap);this.keepIntermediateTensors&&(this.clonedTensorsMap=this.cloneTensorMap(this.weightMap)),Object.keys(e).forEach(x=>{let[b,C]=Nr(x,m),S=[];S[C]=e[x],d[b]=S,this.keepIntermediateTensors&&(this.clonedTensorsMap[b]=this.cloneTensorList(S))});let f=this.getFrozenTensorIds(d),{orderedNodes:h,nodeLiveUntilMap:g}=u;for(let x of h){if(d[x.name])continue;let b=MS(x,d,m,this._resourceManager);if(y.isPromise(b))throw new Error(`The execution of the op '${x.op}' returned a promise. Please use model.executeAsync() instead.`);d[x.name]=b,this.keepIntermediateTensors&&(this.clonedTensorsMap[x.name]=this.cloneTensorList(b)),this.checkTensorForDisposalWithNodeLiveUntilInfo(x,d,m,f,a,g.get(x.name))}return this.parent==null&&m.dispose(f),t.map(x=>Bt(x,d,m))})}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){if(!(fu(t)||a.has(e))){for(let p of o[e])p!=null&&(i[p.id]=(i[p.id]||0)+t.children.length);for(let p of t.inputs){if(fu(p))continue;let u=hS(p.name,o,n);if(u!=null)for(let c of u){if(!c||c.kept||s.has(c.id))continue;let l=i[c.id];l===1?(c.dispose(),delete i[c.id]):l!=null&&i[c.id]--}}}}checkTensorForDisposalWithNodeLiveUntilInfo(e,t,o,n,s,a){function i(p){return fu(p)||s.has(p.name)}if(!(fu(e)||a==null))for(let p of a){if(i(p))continue;let u=hS(p.name,t,o);for(let c of u)!c||c.kept||n.has(c.id)||c.dispose()}}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=A().getBool(\"KEEP_INTERMEDIATE_TENSORS\")}catch(m){this.keepIntermediateTensors=!1,console.warn(m.message)}let a=new Ml(this.weightMap,n,s,this.functionExecutorMap,this.parseNodeNameCache);this.keepIntermediateTensors&&(this.clonedTensorsMap=this.cloneTensorMap(this.weightMap));let i=await this.executeWithControlFlow(e,a,t,o),p=t.map(m=>Bt(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(S=>this.graph.nodes[Nr(S)[0]]),i=o.map(S=>Nr(S)[0]),p=new Set(i),u=i.map(S=>this.graph.nodes[S]);u.length===0&&(u=this._outputs);let{usedNodes:c,missingInputs:l,dynamicNode:m,syncInputs:d}=LS(e,u,this.weightMap,this._initNodes),f=[...a,...this.graph.weights,...this._initNodes||[]].map(S=>({node:S,contexts:t.currentContext})),h=Object.assign({},this.weightMap);Object.keys(e).forEach(S=>{let[k,_]=Nr(S),$=[];$[_]=e[S],h[k]=$});let g={},x=this.getFrozenTensorIds(h),b={};for(;f.length>0;){let S=this.processStack(a,f,t,h,b,x,p,g,c);await Promise.all(S)}m==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 C=u.filter(S=>!fu(S)&&!Bt(S.name,h,t)).map(S=>S.name);if(C.length>0){let S=\"\";throw m!=null&&(S=`Alternatively, to avoid the dynamic ops, use model.execute() and specify the inputs [${d}]`),new Error(`Cannot compute the outputs [${C}] from the provided inputs [${s}]. Consider providing the following inputs: [${l}]. ${S}`)}return h}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]=Ls(l.node.name,o)),n[l.node.name]==null){let d=MS(l.node,n,o,this._resourceManager);m||([m]=Ls(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]=Ls(i.name,o);s[p]||!a.has(i.name)||(i.op===\"Merge\"?i.inputNames.some(u=>!!Bt(u,n,o))&&(s[p]=!0,t.push({contexts:o.currentContext,node:i})):i.inputNames.every(u=>!!Bt(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]=Nr(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]=Nr(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]=Nr(t);if(!this.graph.nodes[o])throw new Error(`The output '${t}' is not found in the graph`)})}};var kf=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 P8=\"?tfjs-format=file\",O8=\"model.json\",Bl=class{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}constructor(e,t={},o=di){this.modelUrl=e,this.loadOptions=t,this.version=\"n/a\",this.io=o,t==null&&(this.loadOptions={}),this.resourceManager=new kf}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=>t.getWeightStream==null?this.loadSync(t):this.loadStreaming(t)):this.loadSync(e)}loadSync(e){let t=this.io.decodeWeights(e.weightData,e.weightSpecs);return this.loadWithWeightMap(e,t)}async loadStreaming(e){if(e.getWeightStream==null)throw new Error(\"Model artifacts missing streamWeights function\");let t=await ad(e.getWeightStream(),e.weightSpecs);return this.loadWithWeightMap(e,t)}loadWithWeightMap(e,t){this.artifacts=e;let o=this.artifacts.modelTopology,n=this.artifacts.signature;if(this.artifacts.userDefinedMetadata!=null){let s=this.artifacts.userDefinedMetadata;s.signature!=null&&(n=s.signature),s.structuredOutputKeys!=null&&(this.structuredOutputKeys=s.structuredOutputKeys)}if(this.signature=n,this.version=`${o.versions.producer}.${o.versions.minConsumer}`,this.executor=new Ll(Ol.Instance.transformGraph(o,this.signature)),this.executor.weightMap=this.convertTensorMapToTensorsMap(t),this.executor.resourceManager=this.resourceManager,e.modelInitializer!=null&&e.modelInitializer.node!=null){let s=Ol.Instance.transformGraph(e.modelInitializer);this.initializer=new Ll(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 mt?[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 mt)&&!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&&Ot(this.resourceIdToCapturedInput)),this.resourceManager.dispose()}};async function M8(r,e={},t=di){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=B8(r));let o=new Bl(r,e,t);return await o.load(),o}function L8(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=di.getWeightSpecs(o.weightsManifest),a=di.getModelArtifactsForJSONSync(o,s,n);e=di.fromMemorySync(a)}else if(\"load\"in r)e=r;else if(\"modelTopology\"in r&&\"weightSpecs\"in r&&\"weightData\"in r)e=di.fromMemorySync(r);else throw new Error(\"Unknown model format\");let t=new Bl(e);return t.load(),t}function B8(r){return r.endsWith(\"/\")||(r=r+\"/\"),`${r}${O8}${P8}`}var z8=\"4.21.0\";function Q(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 V8=Vt.whereImpl,xc=class r extends ao{nextDataId(){return r.nextDataId++}constructor(){super(),this.blockSize=48,this.firstUse=!0,this.data=new Bo(this,ur())}write(e,t,o){this.firstUse&&(this.firstUse=!1,A().get(\"IS_NODE\")&&w.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 w.mergeRealAndImagArrays(n,s)}return y.convertBackendValuesAndArrayBuffer(this.data.get(e).values,t)}bufferSync(e){let t=this.readSync(e.dataId);if(e.dtype===\"string\")try{let o=t.map(n=>y.decodeString(n));return me(e.shape,e.dtype,o)}catch(o){throw new Error(\"Failed to decode encoded string bytes into utf-8\")}return me(e.shape,e.dtype,t)}makeOutput(e,t,o){return ur().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){Q([e],\"where\");let t=this.readSync(e.dataId);return V8(e.shape,t)}dispose(){}floatPrecision(){return 32}epsilon(){return super.epsilon()}};xc.nextDataId=0;var Ic={};qe(Ic,{addImpl:()=>VS,bincountImpl:()=>Cc,bincountReduceImpl:()=>Nf,bitwiseAndImpl:()=>WS,castImpl:()=>zS,ceilImpl:()=>US,concatImpl:()=>ap,equalImpl:()=>GS,expImpl:()=>KS,expm1Impl:()=>jS,floorDivImpl:()=>YS,floorImpl:()=>XS,gatherNdImpl:()=>Tf,gatherV2Impl:()=>_f,greaterEqualImpl:()=>ZS,greaterImpl:()=>QS,lessEqualImpl:()=>eI,lessImpl:()=>JS,linSpaceImpl:()=>Ef,logImpl:()=>tI,maxImpl:()=>$f,maximumImpl:()=>rI,minimumImpl:()=>oI,multiplyImpl:()=>zl,negImpl:()=>nI,notEqualImpl:()=>sI,prodImpl:()=>aI,raggedGatherImpl:()=>Rf,raggedRangeImpl:()=>Df,raggedTensorToTensorImpl:()=>Af,rangeImpl:()=>up,rsqrtImpl:()=>uI,scatterImpl:()=>zs,sigmoidImpl:()=>R_,simpleAbsImpl:()=>BS,sliceImpl:()=>pp,sparseFillEmptyRowsImpl:()=>Ff,sparseReshapeImpl:()=>Pf,sparseSegmentReductionImpl:()=>Sc,sqrtImpl:()=>F_,squaredDifferenceImpl:()=>cI,staticRegexReplaceImpl:()=>lI,stridedSliceImpl:()=>Of,stringNGramsImpl:()=>cp,stringSplitImpl:()=>lp,stringToHashBucketFastImpl:()=>mp,subImpl:()=>dI,tileImpl:()=>Mf,topKImpl:()=>Lf,transposeImpl:()=>wc,uniqueImpl:()=>dp});function BS(r){let e=new Float32Array(r.length);for(let t=0;t{let{x:e}=r.inputs,t=r.backend;Q(e,\"abs\");let o=new Float32Array(y.sizeFromShape(e.shape)),n=t.data.get(e.dataId).values;return o=BS(n),t.makeOutput(o,e.shape,e.dtype)},t_={kernelName:Xs,backendName:\"cpu\",kernelFunc:W8};function Ve(r){return(e,t,o,n,s)=>{let a=w.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=w.getBroadcastDims(e,a),g=w.getBroadcastDims(t,a);if(h.length+g.length===0)for(let x=0;xC[$]=0);let S=y.locToIndex(C,l,d),k=b.slice(-m);g.forEach($=>k[$]=0);let _=y.locToIndex(k,m,f);c[x]=r(o[S],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 r_={kernelName:Di,backendName:\"cpu\",kernelFunc:Ht};function yc(r,e,t=\"float32\"){if(t===\"complex64\"){let n=yc(r,e,\"float32\"),s=yc(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 lr(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 o_={kernelName:Co,backendName:\"cpu\",kernelFunc:lr};function $o(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 n_={kernelName:Hi,backendName:\"cpu\",kernelFunc:$o};function zS(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]=Ve((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 Ro(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{dtype:s}=o;if(s===\"complex64\"){if(n.dtype===\"complex64\")return lr({inputs:{x:n},backend:t});let c=yc(t,n.shape,n.dtype),l=Ro({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=$o({inputs:{input:n},backend:t}),l=Ro({inputs:{x:c},backend:t,attrs:{dtype:s}});return t.disposeIntermediateTensorInfo(c),l}if(!y.hasEncodingLoss(n.dtype,s)){let c=lr({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]=zS(a,n.shape,n.dtype,s);return t.makeTensorInfo(i,p,u)}var s_={kernelName:yo,backendName:\"cpu\",kernelFunc:Ro};function Ye(r,e,t,o){return t==null?({inputs:n,backend:s})=>{let{a,b:i}=n,p=s;Q([a,i],r);let u=p.data.get(a.dataId).values,c=p.data.get(i.dataId).values,l=a.dtype===\"string\"?w.fromUint8ToStringArray(u):u,m=a.dtype===\"string\"?w.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=Ro({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=Ro({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,S=p.data.get(b.dataId).values,[k,_,$]=t(a.shape,i.shape,d,f,C,S),R=p.makeTensorInfo($,\"float32\",k),D=p.makeTensorInfo($,\"float32\",_),P=Ht({inputs:{real:R,imag:D},backend:p});return p.disposeIntermediateTensorInfo(u),p.disposeIntermediateTensorInfo(h),p.disposeIntermediateTensorInfo(R),p.disposeIntermediateTensorInfo(D),P}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 bc(r){return(e,t,o,n,s,a)=>{let i=w.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=w.getBroadcastDims(e,i),f=w.getBroadcastDims(t,i),h=w.mergeRealAndImagArrays(o,n),g=w.mergeRealAndImagArrays(s,a),x=e.length,b=y.computeStrides(e),C=t.length,S=y.computeStrides(t);if(d.length+f.length===0)for(let k=0;k$[M]=0);let R=y.locToIndex($,x,b),D=_.slice(-C);f.forEach(M=>D[M]=0);let P=y.locToIndex(D,C,S),O=r(h[R*2],h[R*2+1],g[P*2],g[P*2+1]);l[k]=O.real,m[k]=O.imag}return[l,m,i]}}var VS=Ve((r,e)=>r+e),U8=bc((r,e,t,o)=>({real:r+t,imag:e+o})),Pa=Ye(uo,VS,U8),a_={kernelName:uo,backendName:\"cpu\",kernelFunc:Pa};function Cc(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 Nf(r,e,t,o=!1){let n=r.shape[0],s=r.shape[1],a=me([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}var WS=Ve((r,e)=>r&e),G8=Ye(qa,WS),i_={kernelName:qa,backendName:\"cpu\",kernelFunc:G8};function jt(r){return(e,t,o)=>{let n=y.getArrayFromDType(t,e.length);for(let s=0;s{let{x:a}=o;Q(a,r);let i=s,p=i.data.get(a.dataId).values,u;if(a.dtype===\"string\"){if(!Array.isArray(p))throw new Error(\"String tensor's value was not an instance of Array\");u=w.fromUint8ToStringArray(p)}else u=p;let c=t||a.dtype,l=e(u,c,n);return i.makeTensorInfo(a.shape,c,l)}}var US=jt(r=>Math.ceil(r)),H8=Ar(en,US),u_={kernelName:en,backendName:\"cpu\",kernelFunc:H8};function ap(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\"?w.fromUint8ToStringArray(a.vals):a.vals,p=0;for(let u=0;ur===e?1:0),HS=Ye(xn,GS,null,\"bool\"),p_={kernelName:xn,backendName:\"cpu\",kernelFunc:HS};var KS=jt(r=>Math.exp(r)),qS=Ar(yn,KS,\"float32\"),c_={kernelName:yn,backendName:\"cpu\",kernelFunc:qS};var jS=jt(r=>Math.expm1(r)),K8=Ar(bn,jS),l_={kernelName:bn,backendName:\"cpu\",kernelFunc:K8};var XS=jt(r=>Math.floor(r)),q8=Ar(wn,XS),m_={kernelName:wn,backendName:\"cpu\",kernelFunc:q8};var YS=Ve((r,e)=>Math.floor(r/e)),j8=Ye(Sn,YS,null,\"int32\"),d_={kernelName:Sn,backendName:\"cpu\",kernelFunc:j8};function Tf(r,e,t,o,n,s,a,i,p){let u=me([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),X8=Ye(kn,QS,null,\"bool\"),f_={kernelName:kn,backendName:\"cpu\",kernelFunc:X8};var ZS=Ve((r,e)=>r>=e?1:0),Y8=Ye(Nn,ZS,null,\"bool\"),h_={kernelName:Nn,backendName:\"cpu\",kernelFunc:Y8};var JS=Ve((r,e)=>rr<=e?1:0),Z8=Ye(Dn,eI,null,\"bool\"),x_={kernelName:Dn,backendName:\"cpu\",kernelFunc:Z8};function Ef(r,e,t){let o=(e-r)/(t-1),n=y.makeZerosTypedArray(t,\"float32\");n[0]=r;for(let s=1;sMath.log(r)),J8=Ar(Fn,tI),y_={kernelName:Fn,backendName:\"cpu\",kernelFunc:J8};function $f(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 rI=Ve((r,e)=>Math.max(r,e)),eY=Ye(Vn,rI),b_={kernelName:Vn,backendName:\"cpu\",kernelFunc:eY};var oI=Ve((r,e)=>Math.min(r,e)),tY=Ye(Hn,oI),C_={kernelName:Hn,backendName:\"cpu\",kernelFunc:tY};var zl=Ve((r,e)=>r*e),rY=bc((r,e,t,o)=>({real:r*t-e*o,imag:r*o+e*t})),ip=Ye(Xn,zl,rY),w_={kernelName:Xn,backendName:\"cpu\",kernelFunc:ip};function nI(r,e,t){let o=y.createScalarValue(-1,t);return zl([],e,o,r,t)}function oY(r){let{inputs:e,backend:t}=r,{x:o}=e;Q(o,\"neg\");let n=t.data.get(o.dataId).values,[s,a]=nI(n,o.shape,o.dtype);return t.makeTensorInfo(a,o.dtype,s)}var S_={kernelName:pa,backendName:\"cpu\",kernelFunc:oY};var sI=Ve((r,e)=>r!==e?1:0),nY=Ye(Yn,sI,null,\"bool\"),I_={kernelName:Yn,backendName:\"cpu\",kernelFunc:nY};function wc(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 k_={kernelName:os,backendName:\"cpu\",kernelFunc:sY};function aY(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 iY(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 uY(r,e,t,o){let n=[],s=0,a=e.length-1+t.length,i=new Array(a).fill(null).map(()=>[0]);iY(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 N_(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)S=0;else if(S=Math.ceil(Math.abs((b-x)/C)),S>T_)throw new Error(`Requires ((limit - start) / delta) <= ${T_}`);m[g+1]=m[g]+S}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 Do.VALUE_ROWIDS:return this.calculateOutputIndexValueRowID(s,t,o,n);case Do.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: ${Do[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 Do.FIRST_DIM_SIZE:return e[0];case Do.VALUE_ROWIDS:throw new Error(\"Cannot handle VALUE_ROWIDS in first dimension.\");case Do.ROW_SPLITS:return this.rowPartitionValuesShapes[0][0]-1;default:throw new Error(`Cannot handle type ${Do[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=E_(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;De(()=>{let h=W(c,f);c=su(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);__(g,c,p),++d}h<0?(l=f+1,m=d):(l=f,m=d,d=m+1)}}};function __(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 Af(r,e,t,o,n,s,a,i,p,u){return new iI(r,e,t,o,n,s,a,i,p,u).compute()}function up(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)),mY=Ar(ls,uI),$_={kernelName:ls,backendName:\"cpu\",kernelFunc:mY};function zs(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 me(t,e.dtype);let d=p instanceof tt?p:me(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))),pI=Ie(bs,r=>1/(1+Math.exp(-r))),D_={kernelName:bs,backendName:\"cpu\",kernelFunc:pI};function pp(r,e,t,o,n){let s=pt.isSliceContinous(o,e,t),a=y.sizeFromShape(t),i=y.computeStrides(o);if(s){let l=pt.computeFlatOffset(e,i);return n===\"string\"?r.slice(l,l+a):r.subarray(l,l+a)}let p=n===\"string\"?w.fromUint8ToStringArray(r):r,u=me(o,n,p),c=me(t,n);for(let l=0;lf+e[h]);c.set(u.get(...d),...m)}return n===\"string\"?w.fromStringArrayToUint8(c.values):c.values}function Ao(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{begin:s,size:a}=o;Q(n,\"slice\");let[i,p]=pt.parseSliceParams(n,s,a);pt.assertParamsValid(n,i,p);let u=t.data.get(n.dataId).values,c=pp(u,i,p,n.shape,n.dtype);return t.makeTensorInfo(p,n.dtype,c)}var A_={kernelName:ha,backendName:\"cpu\",kernelFunc:Ao};function Ff(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(w.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(w.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(w.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());let m=e.slice();m[0]=l;let d=m.reduce((C,S)=>C*S,1),f=y.getArrayFromDType(t,d);if(i===0)return l>0&&f.fill(a),[f,m];if(l<=0)throw new Error(w.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());let h=0,g=1,x=0,b=n[h];for(;;){let C=0;if(g=C)throw new Error(w.getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage())}if(b<0||b>=l)throw new Error(w.getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage(b,l));b>x&&f.fill(a,x*u,b*u);for(let S=h;S=p[0])throw new Error(w.getSparseSegmentReductionIndicesOutOfRangeErrorMessage(S,o[S],p[0]));for(let _=0;_i)break}return xMath.sqrt(r)),dY=Ie(ws,r=>Math.sqrt(r)),P_={kernelName:ws,backendName:\"cpu\",kernelFunc:dY};var cI=Ve((r,e)=>{let t=r-e;return t*t}),fY=Ye(ks,cI),O_={kernelName:ks,backendName:\"cpu\",kernelFunc:fY};var lI=jt((r,e)=>{let{pattern:t,replaceGlobal:o,rewrite:n}=e;return r.replace(new RegExp(t,o?\"g\":\"\"),n)}),hY=Ar(Ru,lI),M_={kernelName:Ru,backendName:\"cpu\",kernelFunc:hY};function Of(r,e,t,o){let n=me(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;this.createNGrams(e,u,i,c,1,m)}}return[i,a]}};function cp(r,e,t,o,n,s,a,i){return new mI(t,o,n,s,a,i).compute(r,e)}function gY(r,e,t,o){if(!r.length)return;if(e.length===0){for(let s=0;sr-e),xY=bc((r,e,t,o)=>({real:r-t,imag:e-o})),Vl=Ye(Ts,dI,xY),L_={kernelName:Ts,backendName:\"cpu\",kernelFunc:Vl};function Mf(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 B_(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));B_(r,e,m,d)}let n=r[e],s=t,a=o;for(y.swap(r,t,e),Wl(r[o],n)>0&&y.swap(r,t,o);s0;)a=a-1}Wl(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 Lf(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 xc,1);var fI=Ie(hn,r=>r>=0?r:Math.exp(r)-1),z_={kernelName:hn,backendName:\"cpu\",kernelFunc:fI};function hI(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{alpha:s}=o;Q([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 gI(r){let{inputs:e,backend:t}=r,{x:o,alpha:n}=e;Q([o,n],\"prelu\");let s=t.data.get(o.dataId).values,a=t.data.get(n.dataId).values,[i,p]=bY(o.shape,n.shape,s,a,\"float32\");return t.makeTensorInfo(p,\"float32\",i)}var W_={kernelName:rs,backendName:\"cpu\",kernelFunc:gI};var xI=Ie(ss,r=>Math.max(0,r)),U_={kernelName:ss,backendName:\"cpu\",kernelFunc:xI};var yI=Ie(us,r=>Math.min(Math.max(0,r),6)),G_={kernelName:us,backendName:\"cpu\",kernelFunc:yI};function fp(r,e,t,o,n){if(t===\"linear\")return lr({inputs:{x:e},backend:r});if(t===\"relu\")return xI({inputs:{x:e},backend:r});if(t===\"elu\")return fI({inputs:{x:e},backend:r});if(t===\"relu6\")return yI({inputs:{x:e},backend:r});if(t===\"prelu\")return gI({inputs:{x:e,alpha:o},backend:r});if(t===\"leakyrelu\")return hI({inputs:{x:e},backend:r,attrs:{alpha:n}});if(t===\"sigmoid\")return pI({inputs:{x:e},backend:r});throw new Error(`Activation ${t} has not been implemented for the CPU backend.`)}function We(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 H_={kernelName:da,backendName:\"cpu\",kernelFunc:We};function bI(r){let{inputs:e,backend:t,attrs:o}=r,{a:n,b:s}=e,{transposeA:a,transposeB:i}=o;Q([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=Sr.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 S=a?[g,c,m]:[g,m,c],k=i?[x,d,l]:[x,l,d],_=We({inputs:{x:n},backend:t,attrs:{shape:S}}),$=We({inputs:{x:s},backend:t,attrs:{shape:k}}),R=a?_.shape[1]:_.shape[2],D=a?_.shape[2]:_.shape[1],P=i?$.shape[1]:$.shape[2],O=Math.max(g,x),M=t.data.get(_.dataId).values,L=t.data.get($.dataId).values,B=y.computeStrides(_.shape),z=y.computeStrides($.shape),[U,j,q]=a?[B[0],1,B[1]]:[B[0],B[1],1],[Y,J,re]=i?[1,z[1],z[0]]:[z[1],1,z[0]],ne=D*P,ee=me([O,D,P],_.dtype),oe=ee.values,ie=t.blockSize;for(let le=0;leMath.acos(r)),j_={kernelName:Vo,backendName:\"cpu\",kernelFunc:wY};var SY=Ie(Wo,r=>Math.acosh(r)),X_={kernelName:Wo,backendName:\"cpu\",kernelFunc:SY};function IY(r){let{inputs:e,backend:t}=r,o=e;Q(e,\"addN\");let n=o.map(i=>t.data.get(i.dataId).values),s=me(o[0].shape,o[0].dtype),a=s.values;for(let i=0;ib&&(b=k,C=S)}d[g]=C}return u.forEach(g=>t.disposeIntermediateTensorInfo(g)),t.makeTensorInfo(c,\"int32\",d)}var J_={kernelName:Ys,backendName:\"cpu\",kernelFunc:NY};function TY(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s}=o;Q(n,\"argMin\");let a=y.parseAxisParam(s,n.shape),i=w.getAxesPermutation(a,n.shape.length),p=n,u=[];i!=null&&(p=St({inputs:{x:n},backend:t,attrs:{perm:i}}),u.push(p),a=w.getInnerMostAxes(a.length,p.shape.length)),a=[a[0]],w.assertAxesAreInnerMostDims(\"argMin\",a,p.shape.length);let[c,l]=w.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 eE={kernelName:Qs,backendName:\"cpu\",kernelFunc:TY};var _Y=Ie(Ko,r=>Math.asin(r)),tE={kernelName:Ko,backendName:\"cpu\",kernelFunc:_Y};var EY=Ie(qo,r=>Math.asinh(r)),rE={kernelName:qo,backendName:\"cpu\",kernelFunc:EY};var $Y=Ie(jo,r=>Math.atan(r)),oE={kernelName:jo,backendName:\"cpu\",kernelFunc:$Y};var RY=Ve((r,e)=>Math.atan2(r,e)),DY=Ye(Yo,RY),nE={kernelName:Yo,backendName:\"cpu\",kernelFunc:DY};var AY=Ie(Xo,r=>Math.atanh(r)),sE={kernelName:Xo,backendName:\"cpu\",kernelFunc:AY};function vc(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=me(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 S=0;Sj?j=ie:s===\"avg\"&&(q+=ie,Y++)}if(isNaN(j))break}let J=M+L*C+$;g[J]=s===\"avg\"?q/Y:j}}}return h}function Bf(r,e,t,o,n=!1,s=!1){let a=me(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=me(e,t,r);for(let g=0;gP&&(P=U,n?O=s?((g*o.inHeight+M)*o.inWidth+B)*o.inChannels+x:(M*o.inWidth+B)*o.inChannels+x:O=L*m+z)}}a.set(O,g,b,_,x)}}return a}function zf(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=me(n.outShape,t),S=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],R=n.outShape[4];for(let D=0;D_e?_e=gt:s===\"avg\"&&(ve+=gt,Fe++),isNaN(_e))break}if(isNaN(_e))break}if(isNaN(_e))break}let Pe=be+M;S[Pe]=s===\"avg\"?ve/Math.max(Fe,1):_e}}}}return C}function aE(r,e){let t=me(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=re,B=U*c*l+q*c+J)}}}t.set(B,h,x,k,D,g)}}}return t}function FY(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e;Q(n,\"avgPool\");let{filterSize:s,strides:a,pad:i,dimRoundingMode:p}=o,u=1;y.assert(w.eitherStridesOrDilationsAreOne(a,u),()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${u}'`);let c=w.computePool2DInfo(n.shape,s,a,u,i,p),l;if(c.filterWidth===1&&c.filterHeight===1&&y.arraysEqual(c.inShape,c.outShape))l=lr({inputs:{x:n},backend:t});else{let m=t.data.get(n.dataId).values,d=y.computeStrides(n.shape),f=vc(m,n.shape,n.dtype,d,c,\"avg\");l=t.makeTensorInfo(c.outShape,n.dtype,f.values)}return l}var iE={kernelName:Qo,backendName:\"cpu\",kernelFunc:FY};function PY(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{filterSize:s,strides:a,pad:i,dimRoundingMode:p,dataFormat:u}=o;Q(n,\"avgPool3d\");let c=w.computePool3DInfo(n.shape,s,a,1,i,p,u),l=t.data.get(n.dataId).values,m=zf(l,n.shape,n.dtype,y.computeStrides(n.shape),c,\"avg\");return t.makeTensorInfo(m.shape,\"float32\",m.values)}var uE={kernelName:Zs,backendName:\"cpu\",kernelFunc:PY};function OY(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s}=e,{filterSize:a,strides:i,pad:p,dimRoundingMode:u}=o;Q([n,s],\"avgPool3DGrad\");let c=w.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,S=c.effectiveFilterDepth,k=c.effectiveFilterHeight,_=c.effectiveFilterWidth,$=S-1-c.padInfo.front,R=_-1-c.padInfo.left,D=k-1-c.padInfo.top,P=me(s.shape,\"float32\"),O=1/(f*h*g),M=t.bufferSync(n);for(let L=0;L=c.outDepth||Math.floor(ee)!==ee))for(let oe=0;oe=c.outHeight||Math.floor(ie)!==ie))for(let le=0;le<_;le+=C){let be=(J+le)/d;if(be<0||be>=c.outWidth||Math.floor(be)!==be)continue;let _e=M.get(L,ee,ie,be,B);re+=_e}}}P.set(re*O,L,z,U,j,B)}return t.makeTensorInfo(P.shape,P.dtype,P.values)}var pE={kernelName:Ri,backendName:\"cpu\",kernelFunc:OY};function MY(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s}=e,a=s;Q([n,s],\"avgPoolGrad\");let{filterSize:i,strides:p,pad:u}=o,c=w.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,S=x-1-c.padInfo.top,k=me(a.shape,\"float32\"),_=1/(d*f),$=t.data.get(n.dataId).values,R=me(n.shape,\"float32\",$);for(let D=0;D=c.outHeight||Math.floor(j)!==j))for(let q=0;q=c.outWidth||Math.floor(Y)!==Y)continue;let J=R.get(D,j,Y,P);z+=J}}k.set(z*_,D,O,M,P)}return t.makeTensorInfo(k.shape,k.dtype,k.values)}var cE={kernelName:$i,backendName:\"cpu\",kernelFunc:MY};function LY(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.\"),Q([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,S=0,k=0,_=0,$=0;for(let R=0;R=g&&(S=0),k>=C&&(k=0),_>=x&&(_=0),$>=b&&($=0);return t.makeTensorInfo(n.shape,n.dtype,h)}var lE={kernelName:In,backendName:\"cpu\",kernelFunc:LY};function BY(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{blockShape:s,crops:a}=o;Q([n],\"batchToSpaceND\");let i=s.reduce((x,b)=>x*b),p=w.getReshaped(n.shape,s,i),u=w.getPermuted(p.length,s.length),c=w.getReshapedPermuted(n.shape,s,i),l=w.getSliceBeginCoords(a,s.length),m=w.getSliceSize(c,a,s.length),d=We({inputs:{x:n},backend:t,attrs:{shape:p}}),f=St({inputs:{x:d},backend:t,attrs:{perm:u}}),h=We({inputs:{x:f},backend:t,attrs:{shape:c}}),g=Ao({inputs:{x:h},backend:t,attrs:{begin:l,size:m}});return t.disposeIntermediateTensorInfo(d),t.disposeIntermediateTensorInfo(f),t.disposeIntermediateTensorInfo(h),g}var mE={kernelName:Js,backendName:\"cpu\",kernelFunc:BY};function zY(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=Cc(i,p,s.dtype,s.shape,a);return t.makeTensorInfo([a],s.dtype,u)}var dE={kernelName:Jo,backendName:\"cpu\",kernelFunc:zY};function VY(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=w.assertAndGetBroadcastShape(Array.from(s),Array.from(a));return t.makeTensorInfo([i.length],\"int32\",Int32Array.from(i))}var fE={kernelName:ea,backendName:\"cpu\",kernelFunc:VY};var WY=Ie(bo,(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);w.assertParamsConsistent(a,s);let i=w.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 lr({inputs:{x:p[0]},backend:t});if(p[0].dtype===\"complex64\"){let h=p.map(S=>$o({inputs:{input:S},backend:t})),g=p.map(S=>Oa({inputs:{input:S},backend:t})),x=hu({inputs:h,backend:t,attrs:{axis:s}}),b=hu({inputs:g,backend:t,attrs:{axis:s}}),C=Ht({inputs:{real:x,imag:b},backend:t});return h.forEach(S=>t.disposeIntermediateTensorInfo(S)),g.forEach(S=>t.disposeIntermediateTensorInfo(S)),t.disposeIntermediateTensorInfo(x),t.disposeIntermediateTensorInfo(b),C}let u=p.map(h=>{let x=[-1,y.sizeFromShape(h.shape.slice(s))];return We({inputs:{x:h},backend:t,attrs:{shape:x}})}),c=u.map(h=>({vals:t.data.get(h.dataId).values,shape:h.shape}));i=w.computeOutShape(u.map(h=>h.shape),1);let l=u[0].shape[0]===1,m=ap(c,i,e[0].dtype,l),d=w.computeOutShape(p.map(h=>h.shape),s),f=t.makeTensorInfo(d,e[0].dtype,m);return u.forEach(h=>t.disposeIntermediateTensorInfo(h)),f}var yE={kernelName:ta,backendName:\"cpu\",kernelFunc:hu};function CI(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;Q([n,s],\"conv2d\");let l=w.convertConv2DDataFormat(p),m=w.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\",S=new tt(m.outShape,n.dtype),k=y.computeStrides(n.shape),_=y.computeStrides(s.shape),$=k[0],R=C?k[1]:k[2],D=C?k[2]:1,P=C?1:k[1],O=S.strides[0],M=C?S.strides[1]:S.strides[2],L=C?S.strides[2]:1,B=C?1:S.strides[1],z=t.data.get(n.dataId).values,U=t.data.get(s.dataId).values,j=S.values;for(let q=0;q=m.inHeight)continue;let le=oe*_[0],be=Y+ie*R;for(let _e=0;_e=m.inWidth)continue;let ct=le+Pe*_[1],He=be+st*D,lt=ct;for(let it=0;it=u.inDepth)continue;let q=U*D[0],Y=O+j*R[1];for(let J=0;J=u.inHeight)continue;let ie=q+ee*D[1],le=Y+oe*R[2];for(let be=0;be=u.inWidth)continue;let st=ie+Fe*D[2],ct=le+Pe*u.inChannels,He=st;for(let lt=0;ltMath.cos(r)),kE={kernelName:sn,backendName:\"cpu\",kernelFunc:XY};var YY=Ie(an,r=>Math.cosh(r)),NE={kernelName:an,backendName:\"cpu\",kernelFunc:YY};function QY(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=me([f,h,g,d],\"float32\"),b=t.data.get(s.dataId).values,C=t.data.get(a.dataId).values,S=t.data.get(n.dataId).values,k=y.computeStrides(n.shape),_=y.computeStrides(x.shape);for(let $=0;$=c)continue;let B=h>1?(O-D)*(l-1)/(h-1):0,z=g>1?(M-P)*(m-1)/(g-1):0;for(let U=0;U1?D*(l-1)+U*B:.5*(D+O)*(l-1);if(j<0||j>l-1){for(let q=0;q1?P*(m-1)+re*z:.5*(P+M)*(m-1);if(ne<0||ne>m-1){for(let le=0;le1?P*(m-1)+q*z:.5*(P+M)*(m-1);if(Y<0||Y>m-1){for(let ne=0;nex+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=w.computeConv2DInfo(n.shape,s.shape,a,m,i,u,!0),{filterHeight:f,filterWidth:h,dilationHeight:g,dilationWidth:x,padInfo:b}=d,C=b.left,S=b.top,k=d.outChannels/d.inChannels,_=new tt(d.outShape,n.dtype),$=t.data.get(n.dataId).values,R=t.data.get(s.dataId).values,D=_.values;for(let P=0;P=d.inHeight)continue;let q=U*l[0],Y=O+j*c[1];for(let J=0;J=d.inWidth)continue;let ie=q+ee*l[1],le=Y+oe*d.inChannels,be=re,_e=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:S,strideWidth:k,filterHeight:_,filterWidth:$,dilationHeight:R,dilationWidth:D,outShape:P}=w.computeDilation2DInfo(o.shape,n.shape,s,a,\"NHWC\",i),O=y.sizeFromShape(P),M=P.length,L=y.getArrayFromDType(o.dtype,O);for(let z=0;z=0&&oe=0&&lere&&(re=ve)}}}let ne=y.locToIndex([z,U,q,J],M,y.computeStrides(P));L[ne]=re}}}return{dataId:p.write(y.toTypedArray(L,o.dtype),P,o.dtype),shape:P,dtype:o.dtype}}};var ME={kernelName:Li,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:S,filterHeight:k,filterWidth:_,dilationHeight:$,dilationWidth:R,outShape:D}=w.computeDilation2DInfo(o.shape,n.shape,a,i,\"NHWC\",p);y.assert(s.rank===D.length,()=>`Error in ${Li}, dy must have the same rank as output ${D.length}, but got ${s.rank}`);let P=y.toNestedArray(D,u.data.get(s.dataId).values),O=y.makeZerosNestedTypedArray(n.shape,n.dtype);for(let L=0;L=0&&ee=0&&ieY&&(Y=le,J=ne,re=oe)}}}O[J][re][q]+=P[L][B][U][q]}}}return{dataId:u.write(y.toTypedArray(O,o.dtype),n.shape,n.dtype),shape:n.shape,dtype:n.dtype}}};var LE={kernelName:Mi,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:S,filterHeight:k,filterWidth:_,dilationHeight:$,dilationWidth:R,outShape:D}=w.computeDilation2DInfo(o.shape,n.shape,a,i,\"NHWC\",p);y.assert(s.rank===D.length,()=>`Error in ${Mi}, dy must have the same rank as output ${D.length}, but got ${s.rank}`);let P=y.toNestedArray(D,u.data.get(s.dataId).values),O=y.makeZerosNestedTypedArray(o.shape,o.dtype);for(let L=0;L=0&&ee=0&&ieY&&(Y=le,J=ee,re=ie)}}}O[L][J][re][q]+=P[L][B][U][q]}}}return{dataId:u.write(y.toTypedArray(O,o.dtype),o.shape,o.dtype),shape:o.shape,dtype:o.dtype}}};function sQ(r){let{inputs:e,backend:t,attrs:o}=r,{image:n}=e,{canvas:s,options:a}=o,{contextOptions:i,imageOptions:p}=a||{},u=(p==null?void 0:p.alpha)||1,c=(i==null?void 0:i.contextType)||\"2d\";if(c!==\"2d\")throw new Error(`Context type ${i.contextType} is not supported by the CPU backend.`);let l=s.getContext(c,(i==null?void 0:i.contextAttributes)||{});if(l==null)throw new Error(`Could not get the context with ${c} type.`);let[m,d]=n.shape.slice(0,2),f=n.shape.length===2?1:n.shape[2],h=t.data.get(n.dataId).values,g=n.dtype===\"float32\"?255:1,x=new Uint8ClampedArray(d*m*4);for(let C=0;C1)throw new Error(`Tensor values for a float32 Tensor must be in the range [0 - 1] but encountered ${$}.`)}else if(n.dtype===\"int32\"&&($<0||$>255))throw new Error(`Tensor values for a int32 Tensor must be in the range [0 - 255] but encountered ${$}.`);f===1?(S[0]=$*g,S[1]=$*g,S[2]=$*g):S[_]=$*g}let k=C*4;x[k+0]=Math.round(S[0]),x[k+1]=Math.round(S[1]),x[k+2]=Math.round(S[2]),x[k+3]=Math.round(S[3])}s.width=d,s.height=m;let b=new ImageData(x,d,m);return l.putImageData(b,0,0),n}var BE={kernelName:$u,backendName:\"cpu\",kernelFunc:sQ};function fi(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o;Q(n,\"sum\");let i;n.dtype===\"bool\"?i=Ro({inputs:{x:n},backend:t,attrs:{dtype:\"int32\"}}):i=lr({inputs:{x:n},backend:t});let p=i.shape.length,u=y.parseAxisParam(s,i.shape),c=w.getAxesPermutation(u,p),l=u,m=i;c!=null&&(m=St({inputs:{x:i},backend:t,attrs:{perm:c}}),l=w.getInnerMostAxes(l.length,p)),w.assertAxesAreInnerMostDims(\"sum\",l,m.shape.length);let[d,f]=w.computeOutAndReduceShapes(m.shape,l),h=w.upcastType(m.dtype,\"int32\"),g=yc(t,d,h),x=y.sizeFromShape(f),b=t.data.get(g.dataId).values,C=t.data.get(m.dataId).values;for(let S=0;S=0&&(m=fi({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 VE={kernelName:Bi,backendName:\"cpu\",kernelFunc:aQ};function iQ(r){let{inputs:e,backend:t}=r,{dy:o,y:n}=e;Q([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=0?s[p]=i[p]:s[p]=i[p]*(u+1)}return t.makeTensorInfo(n.shape,\"float32\",s)}var WE={kernelName:Xa,backendName:\"cpu\",kernelFunc:iQ};var uQ=w.ERF_P,pQ=w.ERF_A1,cQ=w.ERF_A2,lQ=w.ERF_A3,mQ=w.ERF_A4,dQ=w.ERF_A5,fQ=Ie(gn,r=>{let e=Math.sign(r),t=Math.abs(r),o=1/(1+uQ*t);return e*(1-((((dQ*o+mQ)*o+lQ)*o+cQ)*o+pQ)*o*Math.exp(-t*t))}),UE={kernelName:gn,backendName:\"cpu\",kernelFunc:fQ};function kc(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),We({inputs:{x:n},backend:t,attrs:{shape:i}})}var GE={kernelName:na,backendName:\"cpu\",kernelFunc:kc};var hQ=Ve((r,e)=>r/e),Ul=Ye(fn,hQ),Gl={kernelName:fn,backendName:\"cpu\",kernelFunc:Ul};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&&C=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=w.segment_util.collectGatherOpShapeInfo(n,s,p,l),f=We({inputs:{x:n},backend:t,attrs:{shape:[d.batchSize,d.outerSize,d.dimSize,d.sliceSize]}}),h=We({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=_f(b,x,g);return t.disposeIntermediateTensorInfo(f),t.disposeIntermediateTensorInfo(h),t.makeTensorInfo(d.outputShape,C.dtype,C.values)}var QE={kernelName:aa,backendName:\"cpu\",kernelFunc:vQ};function kQ(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=We({inputs:{x:o},backend:t,attrs:{shape:[a,s]}}),p=Vf(i,!0,t),u=We({inputs:{x:p},backend:t,attrs:{shape:o.shape}});return t.disposeIntermediateTensorInfo(i),t.disposeIntermediateTensorInfo(p),u}var ZE={kernelName:Vi,backendName:\"cpu\",kernelFunc:kQ};var NQ=Ie(Tn,r=>Number.isFinite(r)?1:0,\"bool\"),JE={kernelName:Tn,backendName:\"cpu\",kernelFunc:NQ};var TQ=Ie(_n,r=>Math.abs(r)===1/0?1:0,\"bool\"),e$={kernelName:_n,backendName:\"cpu\",kernelFunc:TQ};var _Q=Ie(En,r=>Number.isNaN(r)?1:0,\"bool\"),t$={kernelName:En,backendName:\"cpu\",kernelFunc:_Q};function EQ(r){let{backend:e,attrs:t}=r,{start:o,stop:n,num:s}=t,a=Ef(o,n,s);return e.makeTensorInfo([a.length],\"float32\",a)}var r$={kernelName:An,backendName:\"cpu\",kernelFunc:EQ};var $Q=Ie(Pn,r=>Math.log1p(r)),o$={kernelName:Pn,backendName:\"cpu\",kernelFunc:$Q};var RQ=Ve((r,e)=>r&&e),DQ=Ye(On,RQ,null,\"bool\"),n$={kernelName:On,backendName:\"cpu\",kernelFunc:DQ};var AQ=Ie(Mn,r=>r?0:1,\"bool\"),s$={kernelName:Mn,backendName:\"cpu\",kernelFunc:AQ};var FQ=Ve((r,e)=>r||e),PQ=Ye(Ln,FQ,null,\"bool\"),a$={kernelName:Ln,backendName:\"cpu\",kernelFunc:PQ};function OQ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{depthRadius:s,bias:a,alpha:i,beta:p}=o;Q(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 S=l[x];C+=S*S}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=w.computePool2DInfo(n.shape,s,a,u,i,p),l;if(c.filterWidth===1&&c.filterHeight===1&&y.arraysEqual(c.inShape,c.outShape))l=lr({inputs:{x:n},backend:t});else{let m=t.data.get(n.dataId).values,d=y.computeStrides(n.shape),f=vc(m,n.shape,n.dtype,d,c,\"max\");l=t.makeTensorInfo(c.outShape,n.dtype,f.values)}return l}var c$={kernelName:Wn,backendName:\"cpu\",kernelFunc:LQ};function BQ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{filterSize:s,strides:a,pad:i,dimRoundingMode:p,dataFormat:u}=o;Q(n,\"maxPool3d\");let c=w.computePool3DInfo(n.shape,s,a,1,i,p,u),l=t.data.get(n.dataId).values,m=zf(l,n.shape,n.dtype,y.computeStrides(n.shape),c,\"max\");return t.makeTensorInfo(m.shape,\"float32\",m.values)}var l$={kernelName:ia,backendName:\"cpu\",kernelFunc:BQ};function zQ(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s}=e,{filterSize:a,strides:i,pad:p,dimRoundingMode:u}=o;Q([n,s],\"maxPool3DGrad\");let c=w.computePool3DInfo(s.shape,a,i,1,p,u),l=t.bufferSync(s),m=aE(l,c),d=c.strideDepth,f=c.strideHeight,h=c.strideWidth,g=c.dilationDepth,x=c.dilationHeight,b=c.dilationWidth,C=c.effectiveFilterDepth,S=c.effectiveFilterHeight,k=c.effectiveFilterWidth,_=C-1-c.padInfo.front,$=k-1-c.padInfo.left,R=S-1-c.padInfo.top,D=me(s.shape,\"float32\"),P=t.bufferSync(n);for(let O=0;O=c.outDepth||Math.floor(re)!==re))for(let ne=0;ne=c.outHeight||Math.floor(ee)!==ee))for(let oe=0;oe=c.outWidth||Math.floor(ie)!==ie)continue;let le=C*S*k-1-m.get(O,re,ee,ie,M),be=J*S*k+ne*k+oe,_e=le===be?1:0;if(_e===0)continue;let ve=P.get(O,re,ee,ie,M);Y+=ve*_e}}}D.set(Y,O,L,B,z,M)}return t.makeTensorInfo(D.shape,D.dtype,D.values)}var m$={kernelName:Gi,backendName:\"cpu\",kernelFunc:zQ};function VQ(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s,output:a}=e,i=s;Q([s,a],\"maxPoolGrad\");let{filterSize:p,strides:u,pad:c,dimRoundingMode:l}=o,m=w.computePool2DInfo(i.shape,p,u,1,c,l),d=t.data.get(i.dataId).values,f=me(m.outShape,i.dtype,Bf(d,i.shape,i.dtype,m).values),h=m.strideHeight,g=m.strideWidth,x=m.dilationHeight,b=m.dilationWidth,C=m.effectiveFilterHeight,S=m.effectiveFilterWidth,k=S-1-m.padInfo.left,_=C-1-m.padInfo.top,$=me(i.shape,\"float32\"),R=t.data.get(n.dataId).values,D=me(n.shape,\"float32\",R);for(let P=0;P=m.outHeight||Math.floor(q)!==q))for(let Y=0;Y=m.outWidth||Math.floor(J)!==J)continue;let re=C*S-1-f.get(P,q,J,O),ne=j*S+Y,ee=re===ne?1:0;if(ee===0)continue;let oe=D.get(P,q,J,O);U+=oe*ee}}$.set(U,P,M,L,O)}return t.makeTensorInfo($.shape,$.dtype,$.values)}var d$={kernelName:Ui,backendName:\"cpu\",kernelFunc:VQ};function f$(r,e,t,o,n){let s=y.computeStrides(e),a=vc(r,e,t,s,n,\"max\"),i=Bf(r,e,t,n,!0,o);return[a.values,i.values]}var h$={kernelName:ua,backendName:\"cpu\",kernelFunc:({inputs:r,attrs:e,backend:t})=>{let{x:o}=r,{filterSize:n,strides:s,pad:a,includeBatchInIndex:i}=e,p=t;Q(o,\"MaxPoolWithArgmax\");let u=p.data.get(o.dataId).values,c=w.computePool2DInfo(o.shape,n,s,[1,1],a),[l,m]=f$(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 WQ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o,i=y.parseAxisParam(s,n.shape),u=w.computeOutAndReduceShapes(n.shape,i)[1],c=y.sizeFromShape(u),l=[],m=t.makeTensorInfo([],\"float32\",new Float32Array([c]));l.push(m);let d=Ro({inputs:{x:n},backend:t,attrs:{dtype:\"float32\"}});l.push(d);let f=Ul({inputs:{a:d,b:m},backend:t});l.push(f);let h=fi({inputs:{x:f},backend:t,attrs:{axis:s,keepDims:a}});return l.forEach(g=>t.disposeIntermediateTensorInfo(g)),h}var g$={kernelName:Un,backendName:\"cpu\",kernelFunc:WQ};function UQ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o;Q(n,\"min\");let i=y.parseAxisParam(s,n.shape),p=i,u=w.getAxesPermutation(p,n.shape.length),c=n;u!=null&&(c=St({inputs:{x:n},backend:t,attrs:{perm:u}}),p=w.getInnerMostAxes(p.length,n.shape.length)),w.assertAxesAreInnerMostDims(\"min\",p,c.shape.length);let[l,m]=w.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[S]+C[1]),p=s.map(C=>C[0]),u=s.map((C,S)=>C[0]+n.shape[S]),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[_]&&(S[_]=(u[_]-1)*2-S[_]+c);S=S.map((_,$)=>_-p[$]);let k=y.locToIndex(S,m,d);x[C]=l[k]}return{dataId:t.write(x,i,n.dtype),shape:i,dtype:n.dtype}}var y$={kernelName:Kn,backendName:\"cpu\",kernelFunc:GQ};var HQ=Ve((r,e)=>{let t=r%e;return r<0&&e<0||r>=0&&e>=0?t:(t+e)%e}),KQ=Ye(qn,HQ),b$={kernelName:qn,backendName:\"cpu\",kernelFunc:KQ};var w$=zp(jw());function vI(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=II({inputs:{x:n},backend:t,attrs:{reductionIndices:p,keepDims:!1}}),c=w.expandShapeToKeepDim(u.shape,p),l=We({inputs:{x:u},backend:t,attrs:{shape:c}}),m=Vl({inputs:{a:n,b:l},backend:t}),d=qS({inputs:{x:m},backend:t}),f=fi({inputs:{x:d},backend:t,attrs:{axis:p,keepDims:!1}}),h=We({inputs:{x:f},backend:t,attrs:{shape:c}}),g=Ul({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 C$={kernelName:Is,backendName:\"cpu\",kernelFunc:vI};function qQ(r){let{inputs:e,backend:t,attrs:o}=r,{logits:n}=e,{numSamples:s,seed:a,normalized:i}=o;Q(n,\"multinomial\");let p=i?n:vI({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=kc({inputs:{input:c},backend:t,attrs:{dim:n}});return i.push(l),l}),u=hu({inputs:p,backend:t,attrs:{axis:n}});return i.forEach(c=>t.disposeIntermediateTensorInfo(c)),u}var $$={kernelName:la,backendName:\"cpu\",kernelFunc:kI};function t7(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{paddings:s,constantValue:a}=o;Q(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(S,f,h);g[k]=u[b]}return{dataId:t.write(g,i,n.dtype),shape:i,dtype:n.dtype}}var Wf={kernelName:es,backendName:\"cpu\",kernelFunc:t7};var r7=Ve((r,e)=>Math.pow(r,e)),o7=Ye(ts,r7),R$={kernelName:ts,backendName:\"cpu\",kernelFunc:o7};function n7(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]=Rf(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 D$={kernelName:Hp,backendName:\"cpu\",kernelFunc:n7};function s7(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]=Df(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 A$={kernelName:Kp,backendName:\"cpu\",kernelFunc:s7};function a7(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]=Af(u,n.shape,c,s.shape,s.dtype,l,a.shape,m,d,p);return t.makeTensorInfo(f,s.dtype,h)}var F$={kernelName:qp,backendName:\"cpu\",kernelFunc:a7};function i7(r){let{backend:e,attrs:t}=r,{start:o,stop:n,dtype:s,step:a}=t,i=up(o,n,a,s);return e.makeTensorInfo([i.length],s,i)}var P$={kernelName:ma,backendName:\"cpu\",kernelFunc:i7};var u7=Ie(ns,r=>1/r),O$={kernelName:ns,backendName:\"cpu\",kernelFunc:u7};function p7(r){let{inputs:e,backend:t,attrs:o}=r,{images:n}=e,{alignCorners:s,halfPixelCenters:a,size:i}=o;Q(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,S=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,S=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],S=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],S=x[1]/b[1],k=1/C,_=1/S,$=Math.ceil(k)*2+2,R=Math.ceil(_)*2+2;for(let D=0;D=d)continue;let ee=P+ne*p[1],oe=ne*C,ie=Math.min(c-1,a?Math.round(oe):Math.floor(oe));if(O===ie)for(let le=0;le=f)continue;let _e=ee+be*p[2],ve=be*S,Fe=Math.min(l-1,a?Math.round(ve):Math.floor(ve));z===Fe&&(J+=g[_e+Y])}}h[U+Y]=J}}}}return t.makeTensorInfo(n.shape,n.dtype,h)}var z$={kernelName:Za,backendName:\"cpu\",kernelFunc:m7};function d7(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{dims:s}=o;Q(n,\"reverse\");let a=n.shape.length,i=y.parseAxisParam(s,n.shape);if(a===0)return lr({inputs:{x:n},backend:t});let p=new tt(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 V$={kernelName:ps,backendName:\"cpu\",kernelFunc:d7};var W$={kernelName:Ds,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]=w.getImageCenter(a,c,l),h=255,g=Math.sin(n),x=Math.cos(n),b=i.data.get(o.dataId).values;for(let S=0;S=0&&B=0&&z{let e=Math.floor(r);return r-e<.5?Math.floor(r):r-e>.5?Math.ceil(r):e%2===0?e:e+1}),U$={kernelName:cs,backendName:\"cpu\",kernelFunc:f7};function h7(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}=w.calculateShapes(s,n,a),m=!0,d=t.bufferSync(n),f=t.bufferSync(s),h=zs(d,f,a,l,u,p,i,c,0,m);return t.makeTensorInfo(a,h.dtype,h.values)}var G$={kernelName:ms,backendName:\"cpu\",kernelFunc:h7};function g7(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?w7*r:C7*(Math.exp(r)-1)),j$={kernelName:hs,backendName:\"cpu\",kernelFunc:S7};var I7=Ie(ys,r=>r<0?-1:r>0?1:0),X$={kernelName:ys,backendName:\"cpu\",kernelFunc:I7};var v7=Ie(gs,r=>Math.sin(r)),Y$={kernelName:gs,backendName:\"cpu\",kernelFunc:v7};var k7=Ie(xs,r=>Math.sinh(r)),Q$={kernelName:xs,backendName:\"cpu\",kernelFunc:k7};var N7=11920928955078125e-23,Z$=Math.log(N7)+2,T7=Ie(Cs,r=>{let e=r>-Z$,t=rNumber(g)))),t.makeTensorInfo([h.length],o.dtype,new Int32Array(h))]}var tR={kernelName:Ki,backendName:\"cpu\",kernelFunc:E7};function $7(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]=Pf(i,o.shape,o.dtype,a,p);return[t.makeTensorInfo(c,o.dtype,u),t.makeTensorInfo([l.length],s.dtype,new Int32Array(l))]}var rR={kernelName:ei,backendName:\"cpu\",kernelFunc:$7};function R7(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]=Sc(a,o.shape,o.dtype,i,p,!0);return t.makeTensorInfo(c,o.dtype,u)}var oR={kernelName:ya,backendName:\"cpu\",kernelFunc:R7};function D7(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]=Sc(a,o.shape,o.dtype,i,p);return t.makeTensorInfo(c,o.dtype,u)}var nR={kernelName:ba,backendName:\"cpu\",kernelFunc:D7};function A7(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}=w.calculateShapes(s,n,i),d=!1,f=t.bufferSync(n),h;switch(s.dtype){case\"bool\":{let g=t.bufferSync(s),x=!!t.data.get(a.dataId).values[0];h=zs(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=zs(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=zs(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=zs(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 sR={kernelName:vs,backendName:\"cpu\",kernelFunc:A7};function F7(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=w.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=Ao({inputs:{x:n},backend:t,attrs:{begin:u,size:m}});return u[i]+=l,d})}var aR={kernelName:xa,backendName:\"cpu\",kernelFunc:F7};var iR={kernelName:qi,backendName:\"cpu\",kernelFunc:({inputs:r,backend:e})=>{let{x:t}=r,o=e;Q(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}),uR={kernelName:wo,backendName:\"cpu\",kernelFunc:P7};function O7(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;Q(n,\"stridedSlice\");let{finalShapeSparse:d,finalShape:f,isIdentity:h,sliceDim0:g,isSimpleSlice:x,begin:b,end:C,strides:S}=pt.sliceInfo(n.shape,s,a,i,p,u,c,l,m),k;if(h)k=We({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 _=pt.computeOutShape(b,C,S),$=Ao({inputs:{x:n},backend:t,attrs:{begin:b,size:_}});k=We({inputs:{x:$},backend:t,attrs:{shape:f}}),t.disposeIntermediateTensorInfo($)}else{let _=t.bufferSync(n),$=Of(d,_,S,b);k=t.makeTensorInfo(f,$.dtype,$.values)}return k}var pR={kernelName:Ns,backendName:\"cpu\",kernelFunc:O7};function M7(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]=cp(m,d,n,s,a,i,p,u);return[t.makeTensorInfo([f.length],\"string\",f),t.makeTensorInfo(l.shape,\"int32\",h)]}var cR={kernelName:Ca,backendName:\"cpu\",kernelFunc:M7};function L7(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]=lp(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 lR={kernelName:ji,backendName:\"cpu\",kernelFunc:L7};function B7(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=mp(a,n);return t.makeTensorInfo(s.shape,\"int32\",i)}var mR={kernelName:Xi,backendName:\"cpu\",kernelFunc:B7};var z7=Ie(_s,r=>Math.tan(r)),dR={kernelName:_s,backendName:\"cpu\",kernelFunc:z7};var V7=Ie(Es,r=>Math.tanh(r)),fR={kernelName:Es,backendName:\"cpu\",kernelFunc:V7};function W7(r){let{inputs:e,backend:t}=r,{tensor:o,indices:n,updates:s}=e,{sliceRank:a,numUpdates:i,sliceSize:p,strides:u,outputSize:c}=w.calculateShapes(s,n,o.shape),l=!1,m=t.bufferSync(n),d=t.bufferSync(s),f=t.bufferSync(o),h=zs(m,d,o.shape,c,p,i,a,u,f,l);return t.makeTensorInfo(o.shape,h.dtype,h.values)}var hR={kernelName:ds,backendName:\"cpu\",kernelFunc:W7};function U7(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{reps:s}=o;Q(n,\"tile\");let a=Mf(t.bufferSync(n),s);return t.makeTensorInfo(a.shape,a.dtype,a.values)}var gR={kernelName:po,backendName:\"cpu\",kernelFunc:U7};function G7(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{k:s,sorted:a}=o;Q(n,\"topk\");let i=t.data.get(n.dataId).values,[p,u]=Lf(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 xR={kernelName:$s,backendName:\"cpu\",kernelFunc:G7};function H7(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],S=x[2],k=y.computeStrides(g),_=k[0],$=k[1],R=k[2],D=y.getTypedArrayFromDType(n.dtype,y.sizeFromShape(g));D.fill(p);let P=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 y.clamp(0,t,e-1)}function q7(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 j7(r,e){return r}function X7(r,e){return y.clamp(0,r,e-1)}function ql(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 SR={kernelName:Qi,backendName:\"cpu\",kernelFunc:eZ};var tZ=[q_,t_,j_,X_,a_,Y_,Q_,Z_,J_,eE,tE,rE,oE,nE,sE,iE,uE,pE,cE,K_,lE,mE,dE,i_,fE,s_,u_,hE,r_,gE,yE,bE,CE,wE,SE,IE,vE,kE,NE,TE,_E,EE,$E,RE,DE,AE,FE,PE,OE,ME,LE,BE,VE,z_,WE,p_,UE,c_,GE,l_,HE,KE,qE,m_,d_,jE,XE,YE,QE,f_,h_,o_,ZE,xE,JE,e$,t$,V_,g_,x_,r$,y_,o$,n$,s$,a$,i$,u$,p$,b_,c$,l$,m$,d$,h$,g$,x$,C_,y$,b$,S$,w_,S_,I$,v$,k$,I_,N$,E$,$$,Wf,R$,W_,k_,D$,A$,F$,P$,n_,Gl,O$,U_,G_,H_,M$,L$,B$,z$,V$,W$,U$,$_,G$,K$,q$,j$,D_,X$,Y$,Q$,A_,C$,J$,eR,tR,rR,oR,nR,sR,aR,P_,iR,O_,M_,uR,pR,cR,lR,mR,L_,zE,dR,fR,hR,gR,xR,bR,v_,CR,wR,SR,T$];for(let r of tZ)ti(r);var Ec={};qe(Ec,{assertNotComplex:()=>Vs,bindCanvasToFramebuffer:()=>cZ,bindColorTextureToFramebuffer:()=>Ql,bindTextureToProgramUniformSampler:()=>VI,bindTextureUnit:()=>NR,bindVertexBufferToProgramAttribute:()=>jf,callAndCheck:()=>ce,canBeRepresented:()=>EI,createFragmentShader:()=>RI,createFramebuffer:()=>LI,createProgram:()=>DI,createStaticIndexBuffer:()=>PI,createStaticVertexBuffer:()=>FI,createTexture:()=>OI,createVertexShader:()=>$I,getBatchDim:()=>gi,getExtensionOrThrow:()=>Nc,getFramebufferErrorMessage:()=>TR,getMaxTexturesInShader:()=>GI,getNumChannels:()=>uZ,getProgramUniformLocation:()=>zI,getProgramUniformLocationOrThrow:()=>BI,getRowsCols:()=>xi,getShapeAs3D:()=>_c,getTextureShapeFromLogicalShape:()=>WI,getWebGLDisjointQueryTimerVersion:()=>HI,getWebGLErrorMessage:()=>kR,getWebGLMaxTextureSize:()=>UI,hasExtension:()=>qr,isCapableOfRenderingToFloatTexture:()=>KI,isDownloadFloatTextureEnabled:()=>qI,isReshapeFree:()=>xu,isWebGLFenceEnabled:()=>jI,isWebGLVersionEnabled:()=>Yf,linkProgram:()=>AI,logShaderSourceAndInfoLog:()=>qf,resetMaxTextureSize:()=>lZ,resetMaxTexturesInShader:()=>mZ,unbindColorTextureFromFramebuffer:()=>Xf,unbindTextureUnit:()=>pZ,validateFramebuffer:()=>Tc,validateProgram:()=>Yl,validateTextureSize:()=>MI});var hp={},Uf={alpha:!1,antialias:!1,premultipliedAlpha:!1,preserveDrawingBuffer:!1,depth:!1,stencil:!1,failIfMajorPerformanceCaveat:!0};function NI(r,e){hp[r]=e}function Kr(r,e){if(!(r in hp)||e!=null){let o=oZ(r,e);if(o!==null)hp[r]=o;else return console.log(\"Could not get context for WebGL version\",r),null}let t=hp[r];return t==null||t.isContextLost()?(delete hp[r],Kr(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),hp[r])}function rZ(r){if(!A().getBool(\"IS_SAFARI\")&&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 oZ(r,e){if(r!==1&&r!==2)throw new Error(\"Cannot get WebGL rendering context, WebGL is disabled.\");let t=e==null?rZ(r):e;return t.addEventListener(\"webglcontextlost\",o=>{o.preventDefault(),delete hp[r]},!1),A().getBool(\"SOFTWARE_WEBGL_ENABLED\")&&(Uf.failIfMajorPerformanceCaveat=!1),r===1?t.getContext(\"webgl\",Uf)||t.getContext(\"experimental-webgl\",Uf):t.getContext(\"webgl2\",Uf)}var gu;(function(r){r[r.DENSE=0]=\"DENSE\",r[r.SHARED_BATCH=1]=\"SHARED_BATCH\"})(gu||(gu={}));var mr;(function(r){r[r.RENDER=0]=\"RENDER\",r[r.UPLOAD=1]=\"UPLOAD\",r[r.PIXELS=2]=\"PIXELS\",r[r.DOWNLOAD=3]=\"DOWNLOAD\"})(mr||(mr={}));var er;(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\"})(er||(er={}));function gp(r,e){return[e,r]}function IR(r,e){return r*e}function jl(r){let e=y.sizeFromShape(r),t=Math.ceil(e/4);return y.sizeToSquarishShape(t)}function Ma(r,e){return[Math.max(1,Math.ceil(e/2)),Math.max(1,Math.ceil(r/2))]}function vR(r,e){let[t,o]=Ma(r,e);return t*o*4}function Xl(r,e){let t=r,o,n,s,a,i,p,u,c,l,m;return A().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 A().getBool(\"DEBUG\")&&nZ(r),t}function nZ(r){let e=r.getError();if(e!==r.NO_ERROR)throw new Error(\"WebGL Error: \"+kR(r,e))}var sZ=596e-10,aZ=65504;function EI(r){return!!(A().getBool(\"WEBGL_RENDER_FLOAT32_ENABLED\")||r===0||sZr.getExtension(e),'Extension \"'+e+'\" not supported on this browser.')}function $I(r,e){let t=hi(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 RI(r,e){let t=hi(r,()=>r.createShader(r.FRAGMENT_SHADER),\"Unable to create fragment WebGLShader.\");if(ce(r,()=>r.shaderSource(t,e)),ce(r,()=>r.compileShader(t)),A().get(\"ENGINE_COMPILE_ONLY\"))return t;if(r.getShaderParameter(t,r.COMPILE_STATUS)===!1)throw qf(e,r.getShaderInfoLog(t)),new Error(\"Failed to compile fragment shader.\");return t}var iZ=/ERROR: [0-9]+:([0-9]+):/g;function qf(r,e){let t=iZ.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 AI(r,e){if(ce(r,()=>r.linkProgram(e)),!A().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 Yl(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 FI(r,e){let t=hi(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 PI(r,e){let t=hi(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 uZ(){return A().getNumber(\"WEBGL_VERSION\")===2?1:4}function OI(r){return hi(r,()=>r.createTexture(),\"Unable to create WebGLTexture.\")}function MI(r,e){let t=A().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 LI(r){return hi(r,()=>r.createFramebuffer(),\"Unable to create WebGLFramebuffer.\")}function jf(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 NR(r,e,t){_R(r,t),ce(r,()=>r.activeTexture(r.TEXTURE0+t)),ce(r,()=>r.bindTexture(r.TEXTURE_2D,e))}function pZ(r,e){_R(r,e),ce(r,()=>r.activeTexture(r.TEXTURE0+e)),ce(r,()=>r.bindTexture(r.TEXTURE_2D,null))}function BI(r,e,t){return hi(r,()=>r.getUniformLocation(e,t),'uniform \"'+t+'\" not present in program.')}function zI(r,e,t){return r.getUniformLocation(e,t)}function VI(r,e,t,o){ce(r,()=>NR(r,e,o)),ce(r,()=>r.uniform1i(t,o))}function cZ(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 Ql(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 Xf(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: \"+TR(r,e))}function TR(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 hi(r,e,t){let o=ce(r,()=>e());if(o==null)throw new Error(t);return o}function _R(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 gi(r,e=2){return y.sizeFromShape(r.slice(0,r.length-e))}function xi(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 _c(r){let e=[1,1,1];return r.length===0||r.length===1&&r[0]===1||(e=[gi(r),...xi(r)]),e}function WI(r,e=!1){let t=A().getNumber(\"WEBGL_MAX_TEXTURE_SIZE\"),o=A().getNumber(\"WEBGL_MAX_SIZE_FOR_NARROW_TEXTURE\");o===1/0&&A().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=gi(r),p=2,u=2;r.length&&([p,u]=xi(r)),n=i*(p/2)*(u/2),s=y.sizeToSquarishShape(n).map(c=>c*2)}else s=y.sizeToSquarishShape(n);return s}function Gf(r){return r%2===0}function xu(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[r.length-1],o=e[e.length-1];if(t===o||Gf(t)&&Gf(o)&&(r[0]===1||e[0]===1))return!0}return r[1]===e[1]&&Gf(r[0])&&Gf(e[0])}var Hf,Kf;function UI(r){if(Hf==null){let e=Kr(r);Hf=e.getParameter(e.MAX_TEXTURE_SIZE)}return Hf}function lZ(){Hf=null}function mZ(){Kf=null}function GI(r){if(Kf==null){let e=Kr(r);Kf=e.getParameter(e.MAX_TEXTURE_IMAGE_UNITS)}return Math.min(16,Kf)}function HI(r){if(r===0)return 0;let e,t=Kr(r);return qr(t,\"EXT_disjoint_timer_query_webgl2\")&&r===2?e=2:qr(t,\"EXT_disjoint_timer_query\")?e=1:e=0,e}function qr(r,e){return r.getExtension(e)!=null}function Yf(r){try{if(Kr(r)!=null)return!0}catch(e){return console.log(\"Error when getting WebGL context: \",e),!1}return!1}function KI(r){if(r===0)return!1;let e=Kr(r);if(r===1){if(!qr(e,\"OES_texture_float\"))return!1}else if(!qr(e,\"EXT_color_buffer_float\"))return!1;return _I(e)}function qI(r){if(r===0)return!1;let e=Kr(r);if(r===1){if(!qr(e,\"OES_texture_float\")||!qr(e,\"WEBGL_color_buffer_float\"))return!1}else{if(qr(e,\"EXT_color_buffer_float\"))return _I(e);let o=\"EXT_color_buffer_half_float\";if(qr(e,o)){let n=e.getExtension(o);return dZ(e,n)}return!1}return _I(e)}function _I(r){let e=Xl(r),t=r.createTexture();r.bindTexture(r.TEXTURE_2D,t),r.texImage2D(r.TEXTURE_2D,0,e.internalFormatFloat,1,1,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 dZ(r,e){let t=Xl(r,e),o=r.createTexture();r.bindTexture(r.TEXTURE_2D,o),r.texImage2D(r.TEXTURE_2D,0,t.internalFormatHalfFloat,1,1,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 jI(r){return r!==2?!1:Kr(r).fenceSync!=null}function Vs(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 Se=A();Se.registerFlag(\"HAS_WEBGL\",()=>Se.getNumber(\"WEBGL_VERSION\")>0);Se.registerFlag(\"WEBGL_VERSION\",()=>Yf(2)?2:Yf(1)?1:0);Se.registerFlag(\"WEBGL_CHECK_NUMERICAL_PROBLEMS\",()=>!1);Se.registerFlag(\"WEBGL_BUFFER_SUPPORTED\",()=>Se.get(\"WEBGL_VERSION\")===2);Se.registerFlag(\"WEBGL_CPU_FORWARD\",()=>!0);Se.registerFlag(\"WEBGL_FORCE_F16_TEXTURES\",()=>!1);Se.registerFlag(\"WEBGL_PACK\",()=>Se.getBool(\"HAS_WEBGL\"));Se.registerFlag(\"WEBGL_PACK_NORMALIZATION\",()=>Se.getBool(\"WEBGL_PACK\"));Se.registerFlag(\"WEBGL_PACK_CLIP\",()=>Se.getBool(\"WEBGL_PACK\"));Se.registerFlag(\"WEBGL_PACK_DEPTHWISECONV\",()=>Se.getBool(\"WEBGL_PACK\"));Se.registerFlag(\"WEBGL_PACK_BINARY_OPERATIONS\",()=>Se.getBool(\"WEBGL_PACK\"));Se.registerFlag(\"WEBGL_PACK_UNARY_OPERATIONS\",()=>Se.getBool(\"WEBGL_PACK\"));Se.registerFlag(\"WEBGL_PACK_ARRAY_OPERATIONS\",()=>Se.getBool(\"WEBGL_PACK\"));Se.registerFlag(\"WEBGL_PACK_IMAGE_OPERATIONS\",()=>Se.getBool(\"WEBGL_PACK\"));Se.registerFlag(\"WEBGL_PACK_REDUCE\",()=>Se.getBool(\"WEBGL_PACK\"));Se.registerFlag(\"WEBGL_LAZILY_UNPACK\",()=>Se.getBool(\"WEBGL_PACK\"));Se.registerFlag(\"WEBGL_CONV_IM2COL\",()=>Se.getBool(\"WEBGL_PACK\"));Se.registerFlag(\"WEBGL_PACK_CONV2DTRANSPOSE\",()=>Se.getBool(\"WEBGL_PACK\"));Se.registerFlag(\"WEBGL_MAX_TEXTURE_SIZE\",()=>UI(Se.getNumber(\"WEBGL_VERSION\")));Se.registerFlag(\"WEBGL_MAX_TEXTURES_IN_SHADER\",()=>GI(Se.getNumber(\"WEBGL_VERSION\")));Se.registerFlag(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION\",()=>{let r=Se.getNumber(\"WEBGL_VERSION\");return r===0?0:HI(r)});Se.registerFlag(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE\",()=>Se.getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION\")>0&&!eu.isMobile());Se.registerFlag(\"WEBGL_RENDER_FLOAT32_CAPABLE\",()=>KI(Se.getNumber(\"WEBGL_VERSION\")));Se.registerFlag(\"WEBGL_RENDER_FLOAT32_ENABLED\",()=>Se.getBool(\"WEBGL_FORCE_F16_TEXTURES\")?!1:Se.getBool(\"WEBGL_RENDER_FLOAT32_CAPABLE\"));Se.registerFlag(\"WEBGL_DOWNLOAD_FLOAT_ENABLED\",()=>qI(Se.getNumber(\"WEBGL_VERSION\")));Se.registerFlag(\"WEBGL_FENCE_API_ENABLED\",()=>jI(Se.getNumber(\"WEBGL_VERSION\")));Se.registerFlag(\"WEBGL_SIZE_UPLOAD_UNIFORM\",()=>Se.getBool(\"WEBGL_RENDER_FLOAT32_ENABLED\")?4:0);Se.registerFlag(\"WEBGL_DELETE_TEXTURE_THRESHOLD\",()=>-1,r=>{if(typeof r!=\"number\")throw new Error(`WEBGL_DELETE_TEXTURE_THRESHOLD must be a number but got ${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}.`)});Se.registerFlag(\"WEBGL_FLUSH_THRESHOLD\",()=>eu.isMobile()?1:-1,r=>{if(typeof r!=\"number\")throw new Error(`WEBGL_FLUSH_THRESHOLD must be a number but got ${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}.`)});Se.registerFlag(\"CPU_HANDOFF_SIZE_THRESHOLD\",()=>128);Se.registerFlag(\"WEBGL_USE_SHAPES_UNIFORMS\",()=>!1);Se.registerFlag(\"TOPK_LAST_DIM_CPU_HANDOFF_SIZE_THRESHOLD\",()=>1e5);Se.registerFlag(\"TOPK_K_CPU_HANDOFF_THRESHOLD\",()=>128);Se.registerFlag(\"WEBGL_EXP_CONV\",()=>!1);Se.registerFlag(\"SOFTWARE_WEBGL_ENABLED\",()=>Se.getBool(\"IS_TEST\"));Se.registerFlag(\"WEBGL_MAX_SIZE_FOR_NARROW_TEXTURE\",()=>1/0);Se.registerFlag(\"WEBGL_AUTO_SQUARIFY_NARROW_TEXTURE_SHAPE\",()=>!1);Se.registerFlag(\"WEBGL2_ISNAN_CUSTOM\",()=>!1);Se.registerFlag(\"ENGINE_COMPILE_ONLY\",()=>!1);function It(){let r,e,t,o,n,s,a,i,p,u;return A().getNumber(\"WEBGL_VERSION\")===2?(r=\"#version 300 es\",e=\"in\",t=\"out\",o=\"in\",n=\"texture\",s=\"outputColor\",a=\"out vec4 outputColor;\",i=A().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 Ws(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 xp(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 fZ(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 ER(r,e,t=\"index\"){let o=r.map((s,a)=>a),n=fZ(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 $c(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 Rc(){return`\n int getFlatIndex(ivec3 coords) {\n return coords.x * outShapeStrides[0] + coords.y * outShapeStrides[1] + coords.z;\n }\n`}var Qf=`\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:$R}=w;function RR(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}=Zf(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=>hZ(d,e,t.packedInputs,t.enableShapeUniforms)).join(`\n`),a=e.texShape,i=It(),p=yZ(i),u,c,l=wZ(i);return e.isPacked?(u=gZ(e.logicalShape,a,t.enableShapeUniforms),c=CZ(i)):(u=xZ(e.logicalShape,a,t.enableShapeUniforms),c=bZ(i)),t.packedInputs&&(l+=kZ),[l,p,c,n,u,s,t.userCode].join(`\n`)}function Ac(r,e=!1){let t=r.shapeInfo.logicalShape;switch(t.length){case 0:return MZ(r,e);case 1:return BZ(r,e);case 2:return VZ(r,e);case 3:return UZ(r,e);case 4:return HZ(r,e);case 5:return KZ(r);case 6:return qZ(r);default:throw new Error(`${t.length}-D input sampling is not yet supported`)}}function DR(r,e){switch(r.shapeInfo.logicalShape.length){case 0:return OZ(r);case 1:return LZ(r,e);case 2:return zZ(r,e);case 3:return WZ(r,e);default:return GZ(r,e)}}function hZ(r,e,t=!1,o){let n=\"\";t?n+=DR(r,o):n+=Ac(r,o);let s=r.shapeInfo.logicalShape,a=e.logicalShape;return s.length<=a.length&&(t?n+=jZ(r,e):n+=XZ(r,e)),n}function gZ(r,e,t){switch(r.length){case 0:return AR();case 1:return NZ(r,e,t);case 2:return FZ(r,e,t);case 3:return _Z(r,e,t);default:return $Z(r,e,t)}}function xZ(r,e,t){switch(r.length){case 0:return AR();case 1:return TZ(r,e,t);case 2:return PZ(r,e,t);case 3:return EZ(r,e,t);case 4:return RZ(r,e,t);case 5:return DZ(r,e);case 6:return AZ(r,e);default:throw new Error(`${r.length}-D output sampling is not yet supported`)}}function yZ(r){return`\n float sampleTexture(sampler2D textureSampler, vec2 uv) {\n return ${r.texture2D}(textureSampler, uv).r;\n }\n `}function bZ(r){return`\n void setOutput(float val) {\n ${r.output} = vec4(val, 0, 0, 0);\n }\n `}function CZ(r){return`\n void setOutput(vec4 val) {\n ${r.output} = val;\n }\n `}function wZ(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 ${SZ}\n ${IZ}\n ${vZ}\n `}var SZ=`\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`,IZ=`\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`,vZ=`\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`,kZ=`\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 AR(){return`\n int getOutputCoords() {\n return 0;\n }\n `}function NZ(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 TZ(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 _Z(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 EZ(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 ${xp([\"r\",\"c\",\"d\"],r)}\n return ivec3(r, c, d);\n }\n`;let o=Ws([\"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 $Z(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 XZ(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=Re(p),c=$R(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 Re(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 Zf(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 PR(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=RR(n,a,e),p=RI(r.gl,i),u=r.createProgram(p);return A().get(\"ENGINE_COMPILE_ONLY\")?{program:e,fragmentShader:p,source:i,webGLProgram:u,inShapeInfos:s,outShapeInfo:a,variablesLocations:null,customUniformLocations:null,infLoc:null,nanLoc:null,outShapeLocation:null,outShapeStridesLocation:null,outTexShapeLocation:null}:(r.buildVao(u),Object.assign({program:e,fragmentShader:p,source:i,webGLProgram:u,inShapeInfos:s,outShapeInfo:a},XI(r,e,u)))}function XI(r,e,t){let o=[],n=[],s,a,i,p=null,u=null;u=r.getUniformLocation(t,\"NAN\",!1),A().getNumber(\"WEBGL_VERSION\")===1&&(p=r.getUniformLocation(t,\"INFINITY\",!1));let c=!1;for(let l of e.variableNames){let m={name:l,uniform:r.getUniformLocation(t,l,c),offset:r.getUniformLocation(t,`offset${l}`,c)};e.enableShapeUniforms&&(m.shape=r.getUniformLocation(t,`${l}Shape`,c),m.texShape=r.getUniformLocation(t,`${l}TexShape`,c)),o.push(m)}if(e.enableShapeUniforms&&(s=r.getUniformLocation(t,\"outShape\",c),i=r.getUniformLocation(t,\"outShapeStrides\",c),a=r.getUniformLocation(t,\"outTexShape\",c)),e.customUniforms)for(let l of e.customUniforms)n.push(r.getUniformLocation(t,l.name,c));return{variablesLocations:o,customUniformLocations:n,infLoc:p,nanLoc:u,outShapeLocation:s,outShapeStridesLocation:i,outTexShapeLocation:a}}function FR(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 OR(r,e,t,o,n){e.program.enableShapeUniforms||(FR(e.inShapeInfos,t),FR([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),r.bindVertexArray(e.webGLProgram.vao),A().getNumber(\"WEBGL_VERSION\")===1&&e.infLoc!==null&&r.gl.uniform1f(e.infLoc,1/0),e.nanLoc!==null&&r.gl.uniform1f(e.nanLoc,NaN);for(let p=0;p{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}=Zf(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=w.getBroadcastDims(a.shape,t.shape),C=!r.packedInputs&&h===t.shape.length&&y.arraysEqual(p,t.texData.texShape),S=r.packedInputs||c.length>2?\"\":`${p[0]>1}_${p[1]>1}`;o+=`${h}_${C}_${u?l:\"\"}_${c.length}_${x}_${b}_${g}_${m}_${d}_${f}_${S}_${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+`${A().getNumber(\"WEBGL_VERSION\")}`,s}function ut(r){return A().getBool(\"WEBGL_USE_SHAPES_UNIFORMS\")&&r<=4}var Jf=class{constructor(e){this.variableNames=[\"A\"],this.packedInputs=!1,this.packedOutput=!0,this.outPackingScheme=gu.DENSE,this.customUniforms=[{name:\"texShape\",type:\"ivec2\"}];let t=It();this.outputShape=e,this.enableShapeUniforms=ut(this.outputShape.length),this.userCode=`\n ivec3 outCoordsFromFlatIndex(int index) {\n ${this.enableShapeUniforms?xp([\"r\",\"c\",\"d\"],e):Ws([\"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 eh=class{constructor(e){this.variableNames=[\"A\"],this.packedInputs=!0,this.packedOutput=!0,this.outPackingScheme=gu.DENSE,this.customUniforms=[{name:\"texShape\",type:\"ivec2\"}];let t=It();this.outputShape=e,this.enableShapeUniforms=ut(this.outputShape.length),this.userCode=`\n ivec3 outCoordsFromFlatIndex(int index) {\n ${this.enableShapeUniforms?xp([\"r\",\"c\",\"d\"],e):Ws([\"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 th=class{constructor(e){this.variableNames=[\"A\"],this.outTexUsage=mr.DOWNLOAD;let t=It();this.outputShape=e,this.userCode=`\n ${Qf}\n\n void main() {\n float x = getAAtOutCoords();\n ${t.output} = encode_float(x);\n }\n `}};var rh=class{constructor(e){this.variableNames=[\"A\"],this.packedInputs=!0,this.packedOutput=!1,this.outTexUsage=mr.DOWNLOAD;let t=It();this.outputShape=e,this.userCode=`\n ${Qf}\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 ZZ={R:0,G:1,B:2,A:3},Zl=class{constructor(e,t=!1,o=\"RGBA\"){this.variableNames=[\"A\"],this.customUniforms=[{name:\"texShape\",type:\"ivec2\"}];let n=It();this.outputShape=e,this.enableShapeUniforms=ut(this.outputShape.length);let s=\"result\";t&&(s=\"floor(result * 255. + 0.5)\");let a=\"\";for(let i=0;inv,createBufferFromOutputTexture:()=>iv,createFloat16MatrixTexture:()=>ev,createFloat16PackedMatrixTexture:()=>ov,createFloat32MatrixTexture:()=>JI,createIndexBuffer:()=>ZI,createPackedMatrixTexture:()=>rv,createUnsignedBytesMatrixTexture:()=>tv,createVertexBuffer:()=>QI,createVertexShader:()=>YI,downloadByteEncodedFloatMatrixFromOutputTexture:()=>pv,downloadFloat32MatrixFromBuffer:()=>uv,downloadMatrixFromPackedOutputTexture:()=>lv,downloadPackedMatrixFromBuffer:()=>cv,getInternalFormatForFloat16MatrixTexture:()=>sh,getInternalFormatForFloat16PackedMatrixTexture:()=>uh,getInternalFormatForFloat32MatrixTexture:()=>nh,getInternalFormatForPackedMatrixTexture:()=>ih,getInternalFormatForUnsignedBytesMatrixTexture:()=>ah,uploadDenseMatrixToTexture:()=>sv,uploadPixelDataToTexture:()=>av});function YI(r){let e=It(),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 $I(r,t)}function QI(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 FI(r,e)}function ZI(r){let e=new Uint16Array([0,1,2,2,1,3]);return PI(r,e)}function Jl(r,e,t,o,n,s){MI(e,t);let a=OI(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)),A().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 nh(r){return r.internalFormatFloat}function JI(r,e,t,o){let[n,s]=gp(e,t);return Jl(r,n,s,nh(o),o.textureFormatFloat,r.FLOAT)}function sh(r){return r.internalFormatHalfFloat}function ev(r,e,t,o){let[n,s]=gp(e,t);return Jl(r,n,s,sh(o),o.textureFormatFloat,o.textureTypeHalfFloat)}function ah(r){return r.downloadTextureFormat}function tv(r,e,t,o){let[n,s]=gp(e,t);return Jl(r,n,s,ah(o),r.RGBA,r.UNSIGNED_BYTE)}function ih(r){return r.internalFormatPackedFloat}function rv(r,e,t,o){let[n,s]=Ma(e,t);return Jl(r,n,s,ih(o),r.RGBA,r.FLOAT)}function uh(r){return r.internalFormatPackedHalfFloat}function ov(r,e,t,o){let[n,s]=Ma(e,t);return Jl(r,n,s,uh(o),r.RGBA,o.textureTypeHalfFloat)}function nv(r,e,t){return ce(r,()=>r.bindBuffer(r.ARRAY_BUFFER,t)),jf(r,e,\"clipSpacePos\",t,3,20,0)&&jf(r,e,\"uv\",t,2,20,12)}function sv(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),A().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 av(r,e,t){ce(r,()=>r.bindTexture(r.TEXTURE_2D,e)),t.data instanceof Uint8Array?A().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)):A().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 iv(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 uv(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 pv(r,e,t,o){let[n,s]=gp(e,t),a=4,i=new Uint8Array(IR(e*t,a));return ce(r,()=>r.readPixels(0,0,n,s,o.downloadTextureFormat,r.UNSIGNED_BYTE,i)),new Float32Array(i.buffer)}function cv(r,e,t,o,n,s,a,i){let p=r,u=new Float32Array(vR(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 lv(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 bp=class{constructor(e){this.outputTexture=null,this.program=null,this.disposed=!1,this.itemsToPoll=[];let t=A().getNumber(\"WEBGL_VERSION\");if(e!=null?(this.gl=e,NI(t,e)):this.gl=Kr(t),e=this.gl,A().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\"),A().getNumber(\"WEBGL_VERSION\")===1){let s=\"OES_texture_float\",a=\"OES_texture_half_float\";if(this.textureFloatExtension=Nc(this.gl,s),qr(this.gl,a))this.textureHalfFloatExtension=Nc(this.gl,a);else if(A().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),qr(this.gl,n))this.colorBufferHalfFloatExtension=Nc(this.gl,n);else if(A().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\",qr(this.gl,o))this.colorBufferFloatExtension=this.gl.getExtension(o);else if(qr(this.gl,n))this.colorBufferHalfFloatExtension=this.gl.getExtension(n);else throw new Error(\"GL context does not support color renderable floats\");this.vertexBuffer=QI(this.gl),this.indexBuffer=ZI(this.gl),this.framebuffer=LI(this.gl),this.textureConfig=Xl(this.gl,this.textureHalfFloatExtension)}get debug(){return A().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(),JI(this.gl,e,t,this.textureConfig)}createFloat16MatrixTexture(e,t){return this.throwIfDisposed(),ev(this.gl,e,t,this.textureConfig)}createUnsignedBytesMatrixTexture(e,t){return this.throwIfDisposed(),tv(this.gl,e,t,this.textureConfig)}uploadPixelDataToTexture(e,t){this.throwIfDisposed(),av(this.gl,e,t)}uploadDenseMatrixToTexture(e,t,o,n){this.throwIfDisposed(),sv(this.gl,e,t,o,n,this.textureConfig)}createFloat16PackedMatrixTexture(e,t){return this.throwIfDisposed(),ov(this.gl,e,t,this.textureConfig)}createPackedMatrixTexture(e,t){return this.throwIfDisposed(),rv(this.gl,e,t,this.textureConfig)}deleteMatrixTexture(e){this.throwIfDisposed(),this.outputTexture===e&&(Xf(this.gl,this.framebuffer),this.outputTexture=null),ce(this.gl,()=>this.gl.deleteTexture(e))}downloadByteEncodedFloatMatrixFromOutputTexture(e,t,o){return this.downloadMatrixDriver(e,()=>pv(this.gl,t,o,this.textureConfig))}downloadPackedMatrixFromBuffer(e,t,o,n,s,a){return cv(this.gl,e,t,o,n,s,a,this.textureConfig)}downloadFloat32MatrixFromBuffer(e,t){return uv(this.gl,e,t)}createBufferFromTexture(e,t,o){this.bindTextureToFrameBuffer(e);let n=iv(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(A().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 A().getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION\")>0?(t=this.beginQuery(),this.endQuery(),o=()=>this.isQueryAvailable(t,A().getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION\"))):o=()=>!0;return{query:t,isFencePassed:o}}downloadMatrixFromPackedTexture(e,t,o){return this.downloadMatrixDriver(e,()=>lv(this.gl,t,o))}createProgram(e){this.throwIfDisposed();let t=this.gl;this.vertexShader==null&&(this.vertexShader=YI(t));let o=DI(t);ce(t,()=>t.attachShader(o,this.vertexShader)),ce(t,()=>t.attachShader(o,e)),AI(t,o);let n=Object.assign(o,{vao:this.createVertexArray()});return this.debug&&Yl(t,n),n}buildVao(e){this.setProgram(e),this.bindVertexArray(e.vao);let t=this.gl;ce(t,()=>t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer)),nv(t,e,this.vertexBuffer)}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&&Yl(this.gl,this.program),ce(this.gl,()=>this.gl.useProgram(e))}getUniformLocation(e,t,o=!0){return this.throwIfDisposed(),o?BI(this.gl,e,t):zI(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(),VI(this.gl,e,t,o)}setOutputMatrixTexture(e,t,o){this.setOutputMatrixTextureDriver(e,o,t)}setOutputPackedMatrixTexture(e,t,o){this.throwIfDisposed();let[n,s]=Ma(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&&Yl(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=Nc(this.gl,A().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(A().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(A().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,A().getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION\"))),this.getQueryTime(e,A().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=JZ(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 A().platform&&(o=A().platform.setTimeoutCustom.bind(A().platform)),y.repeatedTry(()=>(this.pollItems(),this.itemsToPoll.length===0),()=>0,null,o)}bindTextureToFrameBuffer(e){this.throwIfDisposed(),Ql(this.gl,e,this.framebuffer),this.debug&&Tc(this.gl)}unbindTextureToFrameBuffer(){this.outputTexture!=null?(Ql(this.gl,this.outputTexture,this.framebuffer),this.debug&&Tc(this.gl)):Xf(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;Ql(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 JZ(r){let e=0;for(;e`${r}.${t}`)}function Rt(r,e){return e===1?[r]:dv(r,e)}function ED(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 Mc=class{constructor(e,t){this.variableNames=[\"A\"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:\"inputShape\",type:\"ivec3\"}],this.outputShape=e,this.enableShapeUniforms=ut(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 ${e9(t,this.enableShapeUniforms)}\n ${this.enableShapeUniforms?Rc():$c(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 e9(r,e){return`\n ivec3 inputCoordsFromReshapedOutCoords(int index) {\n ${e?ER([\"r\",\"c\",\"d\"],\"inputShape\"):Ws([\"r\",\"c\",\"d\"],r)}\n return ivec3(r, c, d);\n }\n `}var dh=class{constructor(e){this.gpgpu=e,this.numUsedTextures=0,this.numFreeTextures=0,this._numBytesAllocated=0,this._numBytesFree=0,this.freeTextures={},this.usedTextures={},this.logEnabled=!1}acquireTexture(e,t,o){let n=RD(t,o),s=DD(e,n,o);s in this.freeTextures||(this.freeTextures[s]=[]),s in this.usedTextures||(this.usedTextures[s]=[]);let a=$D(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].pop();return this.usedTextures[s].push(p),p}let i;return n===er.PACKED_2X2_FLOAT32?i=this.gpgpu.createPackedMatrixTexture(e[0],e[1]):n===er.PACKED_2X2_FLOAT16?i=this.gpgpu.createFloat16PackedMatrixTexture(e[0],e[1]):n===er.UNPACKED_FLOAT32?i=this.gpgpu.createFloat32MatrixTexture(e[0],e[1]):n===er.UNPACKED_FLOAT16?i=this.gpgpu.createFloat16MatrixTexture(e[0],e[1]):n===er.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=RD(o,n),a=DD(t,s,n);a in this.freeTextures||(this.freeTextures[a]=[]);let i=$D(t,s,this.gpgpu.gl,this.gpgpu.textureConfig,n),p=A().getNumber(\"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&&u.indexOf(e);if(c==null||c<0)throw new Error(\"Cannot release a texture that was never provided by this texture manager\");u[c]=u[u.length-1],u.pop(),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 t9(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 $D(r,e,t,o,n){let s=r9(e,o),a;if(n){let[p,u]=Ma(r[0],r[1]);a=p*u}else{let[p,u]=gp(r[0],r[1]);a=p*u}let i=t9(t,s);return a*i}function r9(r,e){switch(r){case er.PACKED_2X2_FLOAT32:return ih(e);case er.PACKED_2X2_FLOAT16:return uh(e);case er.UNPACKED_FLOAT32:return nh(e);case er.UNPACKED_FLOAT16:return sh(e);case er.PACKED_4X1_UNSIGNED_BYTE:return ah(e);default:throw new Error(`Unknown physical texture type ${r}`)}}function o9(r){return A().getBool(\"WEBGL_RENDER_FLOAT32_ENABLED\")?r?er.PACKED_2X2_FLOAT32:er.UNPACKED_FLOAT32:r?er.PACKED_2X2_FLOAT16:er.UNPACKED_FLOAT16}function RD(r,e){if(r===mr.UPLOAD)return er.PACKED_2X2_FLOAT32;if(r===mr.RENDER||r==null)return o9(e);if(r===mr.DOWNLOAD||r===mr.PIXELS)return er.PACKED_4X1_UNSIGNED_BYTE;throw new Error(`Unknown logical texture type ${r}`)}function DD(r,e,t){return`${r[0]}_${r[1]}_${e}_${t}`}var tr=class{constructor(e,t){this.variableNames=[\"A\"],this.outputShape=e,this.enableShapeUniforms=ut(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 `}},Wt=\"if (isnan(x)) return x;\",AD=\"return x;\",fv=\"return abs(x);\";var FD=\"return (x >= 0.0) ? x : (exp(x) - 1.0);\",PD=Wt+`\n return (x < 0.0) ? 0.0 : x;\n`,OD=Wt+`\n return (x < 0.0) ? 0.0 : min(6.0, x);\n`,La=\"return x;\",MD=\"return 1.0 / (1.0 + exp(-1.0 * x));\";var BD=\"return x;\",zD=`\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`,VD=`\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`,WD=`\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`,UD=\"return 1.0 / (1.0 + exp(-1.0 * x));\",Fr=class{constructor(e,t){this.variableNames=[\"A\"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e,this.enableShapeUniforms=ut(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 fh=class{constructor(e){this.variableNames=[\"A\"],this.packedInputs=!0,this.packedOutput=!1,this.outputShape=e,this.enableShapeUniforms=ut(this.outputShape.length);let t=e.length,o=Rt(\"rc\",t),n=Re(t),s=ED(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 s9=Vt.whereImpl,a9=1e-7,i9=1e-4,hh={};function u9(r){return r in hh||(hh[r]={}),hh[r]}var p9=A().getNumber(\"CPU_HANDOFF_SIZE_THRESHOLD\"),c9=600;function l9(){return A().global.screen==null?1024:A().global.screen.height*A().global.screen.width*window.devicePixelRatio*c9/1024/1024}var Lc=class r extends ao{nextDataId(){return r.nextDataId++}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,!A().getBool(\"HAS_WEBGL\"))throw new Error(\"WebGL is not supported on this device\");let t;if(e!=null){if(e instanceof bp)t=e;else{let o=Kr(A().getNumber(\"WEBGL_VERSION\"),e);t=new bp(o)}this.binaryCache={},this.gpgpuCreatedLocally=!1}else{let o=Kr(A().getNumber(\"WEBGL_VERSION\"));t=new bp(o),this.binaryCache=u9(A().getNumber(\"WEBGL_VERSION\")),this.gpgpuCreatedLocally=!0}this.gpgpu=t,this.canvas=this.gpgpu.gl.canvas,this.textureManager=new dh(this.gpgpu),this.numMBBeforeWarning=l9(),this.texData=new Bo(this,ur())}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=_c(t),c=new Zl(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((A().getBool(\"WEBGL_CHECK_NUMERICAL_PROBLEMS\")||A().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:mr.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(A().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:mr.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 Fr(i,La):m=new tr(i,La);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=w.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 Fr(n,La):f=new tr(n,La);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(A().getBool(\"DEBUG\")&&!A().getBool(\"WEBGL_DOWNLOAD_FLOAT_ENABLED\")&&A().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\"&&A().get(\"WEBGL_BUFFER_SUPPORTED\")){c=this.decode(e);let f=this.texData.get(c.dataId);u=this.gpgpu.createBufferFromTexture(f.texture.texture,...jl(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=w.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)&&ur().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 Fr(s,La):d=new tr(s,La);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=ur().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 me(e.shape,e.dtype,o)}catch(o){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,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(A().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 A().getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE\")>0?this.gpgpu.beginQuery():{startMs:y.now(),endMs:null}}endTimer(e){return A().getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE\")>0?(this.gpgpu.endQuery(),e):(e.endMs=y.now(),e)}async getQueryTime(e){if(A().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=p9){return A().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 ur().makeTensorFromTensorInfo(this.makeTensorInfo(e,t,o),this)}unpackTensor(e){let t=new fh(e.shape);return this.runWebGLProgram(t,[e],e.dtype)}packTensor(e){let t=new mh(e.shape);return this.runWebGLProgram(t,[e],e.dtype,null,!0)}packedReshape(e,t){let o=[gi(e.shape),...xi(e.shape)],n={dtype:e.dtype,shape:o,dataId:e.dataId},s=[gi(t),...xi(t)],a=new Mc(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=_c(s),p;n?p=new eh(i):p=new Jf(i);let u=!0,c=[t!=null?t:jl(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===gu.DENSE){let x=a!=null?a:jl(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)<=A().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&&!xu(b.shape,x.shape)){let C=x,S=x.shape;x.shape=b.shape,x=this.packedReshape(x,S),u.push(x),b=this.texData.get(x.dataId),C.shape=S}return{shape:x.shape,texData:b,isUniform:!1}});this.uploadToGPU(i.dataId);let l={shape:i.shape,texData:p,isUniform:!1},m=MR(e,c,l),d=this.getAndSaveBinary(m,()=>PR(this.gpgpu,e,c,l)),f=this.activeTimers!=null,h;f&&(h=this.startTimer()),A().get(\"ENGINE_COMPILE_ONLY\")||OR(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=A().getNumber(\"WEBGL_FLUSH_THRESHOLD\");if(g>0){let x=y.now();x-this.lastGlFlushTime>g&&(this.gpgpu.gl.flush(),this.lastGlFlushTime=x)}if(!A().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||(A().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=De(()=>{if(!A().get(\"WEBGL_RENDER_FLOAT32_ENABLED\")){let e=A().getBool(\"DEBUG\");A().set(\"DEBUG\",!1);let t=this.abs(ke(1e-8)).dataSync()[0];if(A().set(\"DEBUG\",e),t>0)return 32}return 16})),this.floatPrecisionValue}epsilon(){return this.floatPrecision()===32?a9:i9}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=WI(o,p),t.texShape=l),s!=null){let m=_c(o),d,f=l[1],h=l[0],g=s instanceof Uint8Array||s instanceof Uint8ClampedArray;(p||!g)&&([f,h]=Ma(l[0],l[1])),p?d=new oh(m,g):d=new Zl(m,g);let x=g?[h,f]:l,b=this.makeTensorInfo(x,n),C=this.texData.get(b.dataId);g?C.usage=mr.PIXELS:C.usage=mr.UPLOAD,C.texShape=x,this.gpgpu.uploadDenseMatrixToTexture(this.getTexture(b.dataId),f,h,s);let S=[[h,f]],_=this.runWebGLProgram(d,[b],n,S,!0),$=this.texData.get(_.dataId);t.texShape=$.texShape,t.isPacked=$.isPacked,t.usage=$.usage,A().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=m9(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 cS(),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?(qf(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.values(this.binaryCache)){this.gpgpu.buildVao(e.webGLProgram);let{variablesLocations:t,customUniformLocations:o,infLoc:n,nanLoc:s,outShapeLocation:a,outShapeStridesLocation:i,outTexShapeLocation:p}=XI(this.gpgpu,e.program,e.webGLProgram);e.variablesLocations=t,e.customUniformLocations=o,e.infLoc=n,e.nanLoc=s,e.outShapeLocation=a,e.outShapeStridesLocation=i,e.outTexShapeLocation=p}}createTensorFromGPUData(e,t,o){e.channels=e.channels||\"RGBA\";let{texture:n,height:s,width:a,channels:i}=e,p=ur().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 ur().makeTensorFromDataId(u,t,o,p)}};Lc.nextDataId=0;function m9(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 Lc,2);var $at={forceHalfFloat:GD};var Bc=`\n if (isnan(a)) return a;\n if (isnan(b)) return b;\n`;var Pr=class{constructor(e,t,o){this.variableNames=[\"A\",\"B\"],this.outputShape=w.assertAndGetBroadcastShape(t,o),this.enableShapeUniforms=ut(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 Xr=`\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 jr=class{constructor(e,t,o,n=!1){this.variableNames=[\"A\",\"B\"],this.supportsBroadcasting=!0,this.packedInputs=!0,this.packedOutput=!0,this.outputShape=w.assertAndGetBroadcastShape(t,o);let s=this.outputShape.length;this.enableShapeUniforms=ut(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 ${Re(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=Rt(\"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 Dt(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 HD={kernelName:Co,backendName:\"webgl\",kernelFunc:Dt};function Or(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=Dt({inputs:{x:o},backend:t}),p=Dt({inputs:{x:n},backend:t});return a.complexTensorInfos={real:i,imag:p},s}var KD={kernelName:Di,backendName:\"webgl\",kernelFunc:Or};var hv=\"return (a < 0.) ? b * a : a;\",gv=`\n vec4 aLessThanZero = vec4(lessThan(a, vec4(0.)));\n return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a);\n`;function f9(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{alpha:s}=o,a=t.makeTensorInfo([],\"float32\",y.createScalarValue(s,\"float32\")),i=A().getBool(\"WEBGL_PACK_BINARY_OPERATIONS\")?new jr(gv,n.shape,a.shape):new Pr(hv,n.shape,a.shape),p=t.runWebGLProgram(i,[n,a],\"float32\");return t.disposeIntermediateTensorInfo(a),p}var qD={kernelName:$n,backendName:\"webgl\",kernelFunc:f9};var xv=\"return (a < 0.) ? b * a : a;\",yv=`\n vec4 aLessThanZero = vec4(lessThan(a, vec4(0.)));\n return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a);\n`;function h9(r){let{inputs:e,backend:t}=r,{x:o,alpha:n}=e,s=A().getBool(\"WEBGL_PACK_BINARY_OPERATIONS\")?new jr(yv,o.shape,n.shape):new Pr(xv,o.shape,n.shape);return t.runWebGLProgram(s,[o,n],\"float32\")}var jD={kernelName:rs,backendName:\"webgl\",kernelFunc:h9};var Fo=\"if (isnan(x)) return x;\";function xe({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=A().getBool(\"WEBGL_PACK_UNARY_OPERATIONS\")&&e!=null,c;return u?c=new Fr(a.shape,e):c=new tr(a.shape,r),i.runWebGLProgram(c,[a],p)}}function nt({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[S,k]=C,_={dataId:S.dataId,dtype:S.dtype,shape:p.shape},$={dataId:k.dataId,dtype:k.dtype,shape:u.shape},R=new Pr(r,p.shape,u.shape);return c.runWebGLProgram(R,[_,$],dt(S.dtype,k.dtype))}),b=Or({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\"?w.fromUint8ToStringArray(f):f,x=p.dtype===\"string\"?w.fromUint8ToStringArray(h):h,[b,C]=n(p.shape,u.shape,g,x,l),S=c.makeTensorInfo(C,l),k=c.texData.get(S.dataId);return k.values=b,S}let m=A().getBool(\"WEBGL_PACK_BINARY_OPERATIONS\")&&e!=null,d;return m?d=new jr(e,p.shape,u.shape,t):d=new Pr(r,p.shape,u.shape),c.runWebGLProgram(d,[p,u],l)}}function yi(r,e=!1){if(r===\"linear\")return e?BD:AD;if(r===\"relu\")return e?VD:PD;if(r===\"elu\")return e?zD:FD;if(r===\"relu6\")return e?WD:OD;if(r===\"prelu\")return e?yv:xv;if(r===\"leakyrelu\")return e?gv:hv;if(r===\"sigmoid\")return e?UD:MD;throw new Error(`Activation ${r} has not been implemented for the WebGL backend.`)}var zc=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=ut(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\",S=\"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&&!xu(n.shape,p)&&!(c.texture!==null&&xu(c.shape,p))?QD(n,p,a):(a.incRef(n.dataId),{dataId:n.dataId,shape:p,dtype:n.dtype})}var ZD={kernelName:da,backendName:\"webgl\",kernelFunc:te};var rm=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 gh=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 x9(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=w.computeOptimalWindowSize(t);e.push({inSize:t,windowSize:o,outSize:Math.ceil(t/o)})}return e}function Yr(r,e,t,o){let n=x9(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=Re(this.rank),s=dv(\"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}}),R=te({inputs:{x:e},backend:n,attrs:{shape:_}}),D=[$,R],P=Math.max(x,b),O=t?$.shape[1]:$.shape[2],M=s!=null,L=a!=null,B=p===\"leakyrelu\",z=p!=null?yi(p,!0):null,U=M||L||B||z!=null,j;if((d===1||f===1)&&O>Cv&&U===!1){let Y=$,J=R;t&&(Y=bt({inputs:{x:$},backend:n,attrs:{perm:[0,2,1]}}),D.push(Y)),o&&(J=bt({inputs:{x:R},backend:n,attrs:{perm:[0,2,1]}}),D.push(J));let re=f!==1,ne=f===1,ee=Y;re&&(ee=te({inputs:{x:Y},backend:n,attrs:{shape:[P,O,1]}}),D.push(ee));let oe=f===1?2:1,ie=J;ne&&(ie=te({inputs:{x:J},backend:n,attrs:{shape:[P,1,O]}}),D.push(ie));let le=tm({inputs:{a:ee,b:ie},backend:n});j=wp({inputs:{x:le},backend:n,attrs:{axis:oe,keepDims:!0}}),D.push(le)}else{let Y=dt(r.dtype,e.dtype),J=new zc(k,_,[P,d,f],t,o,M,z,L,B),re=[$,R];if(s!=null&&re.push(s),L&&re.push(a),B){let ne=n.makeTensorInfo([],\"float32\",y.createScalarValue(i,\"float32\"));re.push(ne),D.push(ne)}j=n.runWebGLProgram(J,re,Y)}let q=te({inputs:{x:j},backend:n,attrs:{shape:S}});D.push(j);for(let Y of D)n.disposeIntermediateTensorInfo(Y);return q}function b9(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 Sp({a:n,b:s,transposeA:p,transposeB:u,backend:t,bias:a,preluActivationWeights:i,leakyreluAlpha:l,activation:c})}var rA={kernelName:So,backendName:\"webgl\",kernelFunc:b9};var oA=\"return abs(x);\";function C9(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=ch(s.values);return t.makeTensorInfo(o.shape,o.dtype,a)}let n;return A().getBool(\"WEBGL_PACK_UNARY_OPERATIONS\")?n=new Fr(o.shape,oA):n=new tr(o.shape,oA),t.runWebGLProgram(n,[o],o.dtype)}var nA={kernelName:Xs,backendName:\"webgl\",kernelFunc:C9};var w9=Wt+`\n if (abs(x) > 1.) {\n return NAN;\n }\n return acos(x);\n`,S9=xe({opSnippet:w9}),sA={kernelName:Vo,backendName:\"webgl\",kernelFunc:S9};var I9=Wt+`\n if (x < 1.0) return NAN;\nreturn log(x + sqrt(x * x - 1.0));`,v9=xe({opSnippet:I9}),aA={kernelName:Wo,backendName:\"webgl\",kernelFunc:v9};var iA=\"return a + b;\",k9=nt({opSnippet:iA,packedOpSnippet:iA,supportsComplex:!0,cpuKernelImpl:LR}),uA={kernelName:uo,backendName:\"webgl\",kernelFunc:k9};var bh=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 Ch=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 wh(r){let{inputs:e,backend:t}=r,o=e;if(o.length===1)return Dt({inputs:{x:o[0]},backend:t});if(o.length>A().getNumber(\"WEBGL_MAX_TEXTURES_IN_SHADER\")){let p=Math.floor(o.length/2),u=wh({inputs:o.slice(0,p),backend:t}),c=wh({inputs:o.slice(p),backend:t});return wh({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=A().getBool(\"WEBGL_PACK\")?new Ch(o[0].shape,s):new bh(o[0].shape,s);return t.runWebGLProgram(i,o,n)}var pA={kernelName:Uo,backendName:\"webgl\",kernelFunc:wh};function N9(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=w.getAxesPermutation(u,i),l=n;c!=null&&(l=bt({inputs:{x:n},backend:t,attrs:{perm:c}}),u=w.getInnerMostAxes(u.length,i)),w.assertAxesAreInnerMostDims(\"all\",u,i);let[m,d]=w.computeOutAndReduceShapes(l.shape,u),f=y.sizeFromShape(d),h=te({inputs:{x:l},backend:t,attrs:{shape:[-1,f]}}),g=Yr(h,h.dtype,\"all\",t),x;if(a){let b=w.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 cA={kernelName:Go,backendName:\"webgl\",kernelFunc:N9};function T9(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=w.getAxesPermutation(u,i),l=n;c!=null&&(l=bt({inputs:{x:n},backend:t,attrs:{perm:c}}),u=w.getInnerMostAxes(u.length,i)),w.assertAxesAreInnerMostDims(\"any\",u,i);let[m,d]=w.computeOutAndReduceShapes(l.shape,u),f=y.sizeFromShape(d),h=te({inputs:{x:l},backend:t,attrs:{shape:[-1,f]}}),g=Yr(h,h.dtype,\"any\",t),x;if(a){let b=w.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 lA={kernelName:Ho,backendName:\"webgl\",kernelFunc:T9};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 Ih=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=Re(p),c=Rt(\"coords\",p),l,m;if(a===1){m=p+1;let R=Re(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 d=[\"x\",\"y\",\"z\",\"w\",\"u\",\"v\"].slice(0,m),f=\".\"+d[m-1],h=d.map(R=>\"int \"+R),g=Rt(\"sourceLocR\",m-1).concat(\"inIdx.r\"),x=Rt(\"sourceLocG\",m-1).concat(\"inIdx.g\"),b=Rt(\"sourceLocB\",m-1).concat(\"inIdx.b\"),C=Rt(\"sourceLocA\",m-1).concat(\"inIdx.a\"),S=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(${S}(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 mA(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=w.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=mA(r,e,t,c);return r.disposeIntermediateTensorInfo(c),l}function dA(r,e,t,o=null){let n=o!=null?o.shape:e.shape,s=n[n.length-1],a=w.computeOptimalWindowSize(s),i=new Ih(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=dA(r,e,t,u);return r.disposeIntermediateTensorInfo(u),c}return u}function vh(r,e,t,o){let n=[t];if(w.assertAxesAreInnerMostDims(\"arg\"+o.charAt(0).toUpperCase()+o.slice(1),n,e.shape.length),!A().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]=w.computeOutAndReduceShapes(p.shape,n),l=y.sizeFromShape(c),m=te({inputs:{x:p},backend:r,attrs:{shape:[-1,l]}});s.push(m);let d=mA(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 dA(r,e,o)}function _9(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s}=o,a=y.parseAxisParam(s,n.shape),i=w.getAxesPermutation(a,n.shape.length),p=n,u=[];i!=null&&(p=bt({inputs:{x:n},backend:t,attrs:{perm:i}}),u.push(p),a=w.getInnerMostAxes(a.length,p.shape.length)),w.assertAxesAreInnerMostDims(\"argMax\",[a[0]],p.shape.length);let c=vh(t,p,a[0],\"max\");return u.forEach(l=>t.disposeIntermediateTensorInfo(l)),c}var fA={kernelName:Ys,backendName:\"webgl\",kernelFunc:_9};function E9(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s}=o,a=y.parseAxisParam(s,n.shape),i=w.getAxesPermutation(a,n.shape.length),p=n,u=[];i!=null&&(p=bt({inputs:{x:n},backend:t,attrs:{perm:i}}),u.push(p),a=w.getInnerMostAxes(a.length,p.shape.length)),w.assertAxesAreInnerMostDims(\"argMin\",[a[0]],p.shape.length);let c=vh(t,p,a[0],\"min\");return u.forEach(l=>t.disposeIntermediateTensorInfo(l)),c}var hA={kernelName:Qs,backendName:\"webgl\",kernelFunc:E9};var $9=Wt+`\n if (abs(x) > 1.) {\n return NAN;\n }\n return asin(x);\n`,R9=xe({opSnippet:$9}),gA={kernelName:Ko,backendName:\"webgl\",kernelFunc:R9};var D9=Wt+\"return log(x + sqrt(x * x + 1.0));\",A9=xe({opSnippet:D9}),xA={kernelName:qo,backendName:\"webgl\",kernelFunc:A9};var F9=Wt+`\n return atan(x);\n`,P9=xe({opSnippet:F9}),yA={kernelName:jo,backendName:\"webgl\",kernelFunc:P9};var O9=Bc+`\n return atan(a, b);\n`,M9=`\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 `+Xr+`\n return result;\n`,L9=nt({opSnippet:O9,packedOpSnippet:M9}),bA={kernelName:Yo,backendName:\"webgl\",kernelFunc:L9};var B9=Wt+`\n if ((x < -1.0) || (x > 1.0)) return NAN;\nreturn (log(1.0 + x) - log(1.0 - x)) / 2.0;`,z9=xe({opSnippet:B9}),CA={kernelName:Xo,backendName:\"webgl\",kernelFunc:z9};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,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 R=\">=\";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 ${R} 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\",S=`${t}(${t}(${t}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`;t===\"avg\"&&(S=\"avgValue / max(count, 1.0)\");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(${S});\n }\n `}},bu=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\",S=\"0.0\";if(C||(S=\"-1.0 / 1e-20\"),o){let P=\">=\";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 ${P} 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 / max(count, 1.0)\");let $=Math.floor(a/4)*4,R=a%4,D=`\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 = ${S};\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(${S});\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 ${D}\n }\n\n int xC = xCCorner + ${$};\n if (${R===1}) {\n vec4 values = vec4(\n getValue(batch, xD, xR, xC, ch),\n initializationValue,\n initializationValue,\n initializationValue\n );\n\n ${D}\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 ${D}\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 ${D}\n }\n }\n }\n setOutput(${_});\n }\n `}};function V9(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e;Vs(n,\"avgPool\");let{filterSize:s,strides:a,pad:i,dimRoundingMode:p}=o,u=1;y.assert(w.eitherStridesOrDilationsAreOne(a,u),()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${u}'`);let c=w.computePool2DInfo(n.shape,s,a,u,i,p);if(c.filterWidth===1&&c.filterHeight===1&&y.arraysEqual(c.inShape,c.outShape))return Dt({inputs:{x:n},backend:t});let l=new Us(c,\"avg\",!1);return t.runWebGLProgram(l,[n],\"float32\")}var wA={kernelName:Qo,backendName:\"webgl\",kernelFunc:V9};function W9(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=w.computePool3DInfo(n.shape,s,a,c,i,p,u),m=new bu(l,\"avg\",!1);return t.runWebGLProgram(m,[n],\"float32\")}var SA={kernelName:Zs,backendName:\"webgl\",kernelFunc:W9};var kh=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 `}},Nh=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 U9(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=w.computePool3DInfo(a.shape,i,p,l,u,c),d=new Nh(m);return t.runWebGLProgram(d,[n],a.dtype)}var IA={kernelName:Ri,backendName:\"webgl\",kernelFunc:U9};function G9(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s}=e,a=s;Vs([n,s],\"avgPoolGrad\");let{filterSize:i,strides:p,pad:u}=o,c=w.computePool2DInfo(a.shape,i,p,1,u),l=new kh(c);return t.runWebGLProgram(l,[n],a.dtype)}var vA={kernelName:$i,backendName:\"webgl\",kernelFunc:G9};function H9(r){let{inputs:e,backend:t,attrs:o}=r,{a:n,b:s}=e,{transposeA:a,transposeB:i}=o;return Sp({a:n,b:s,transposeA:a,transposeB:i,backend:t})}var kA={kernelName:Zo,backendName:\"webgl\",kernelFunc:H9};var Th=class{constructor(e,t,o,n,s,a){this.outputShape=[],this.variableNames=[\"x\",\"mean\",\"variance\"],w.assertAndGetBroadcastShape(e,t),w.assertAndGetBroadcastShape(e,o);let i=\"0.0\";n!=null&&(w.assertAndGetBroadcastShape(e,n),this.variableNames.push(\"offset\"),i=\"getOffsetAtOutCoords()\");let p=\"1.0\";s!=null&&(w.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 _h=class{constructor(e,t,o,n,s,a){this.packedInputs=!0,this.packedOutput=!0,this.variableNames=[\"x\",\"mean\",\"variance\"],w.assertAndGetBroadcastShape(e,t),w.assertAndGetBroadcastShape(e,o);let i=\"vec4(0.0)\";n!=null&&(w.assertAndGetBroadcastShape(e,n),this.variableNames.push(\"offset\"),i=\"getOffsetAtOutCoords()\");let p=\"vec4(1.0)\";s!=null&&(w.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 K9=({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=A().getBool(\"WEBGL_PACK_NORMALIZATION\")?new _h(o.shape,n.shape,s.shape,c,l,p):new Th(o.shape,n.shape,s.shape,c,l,p);return e.runWebGLProgram(m,u,u[0].dtype)},NA={kernelName:In,backendName:\"webgl\",kernelFunc:K9};var Eh=class{constructor(e){this.variableNames=[\"source\"],this.outputShape=e,this.rank=e.length;let t=Re(this.rank);this.customUniforms=[{name:\"start\",arrayIndex:this.rank,type:\"int\"}];let o=q9(this.rank),n,s=e.map((a,i)=>`sourceLoc.${wv[i]} = start[${i}] + coords.${wv[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 `}},wv=[\"x\",\"y\",\"z\",\"w\",\"u\",\"v\"];function q9(r){if(r===1)return\"sourceLoc\";if(r<=6)return wv.slice(0,r).map(e=>\"sourceLoc.\"+e).join(\",\");throw Error(`Slicing for rank ${r} is not yet supported`)}var $h=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=Re(this.rank),o=Rt(\"coords\",this.rank),n=Rt(\"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 j9(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=pt.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 Gs(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{begin:s,size:a}=o,[i,p]=pt.parseSliceParams(n,s,a);if(pt.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=gD(l.values,i,p,n.shape,n.dtype);return t.makeTensorInfo(p,n.dtype,m)}let{isPacked:u}=t.texData.get(n.dataId),c=pt.isSliceContinous(n.shape,i,p);if(u||!c){let l=A().getBool(\"WEBGL_PACK_ARRAY_OPERATIONS\")?new $h(p):new Eh(p),m=[i];return t.runWebGLProgram(l,[n],n.dtype,m)}return t.uploadToGPU(n.dataId),j9(n,i,p,t)}var TA={kernelName:ha,backendName:\"webgl\",kernelFunc:Gs};var X9=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=w.getReshaped(n.shape,s,i),u=w.getPermuted(p.length,s.length),c=w.getReshapedPermuted(n.shape,s,i),l=w.getSliceBeginCoords(a,s.length),m=w.getSliceSize(c,a,s.length),d=[],f=te({inputs:{x:n},backend:t,attrs:{shape:p}}),h=bt({inputs:{x:f},backend:t,attrs:{perm:u}}),g=te({inputs:{x:h},backend:t,attrs:{shape:c}}),x=Gs({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},_A={kernelName:Js,backendName:\"webgl\",kernelFunc:X9};function Y9(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=ph(i,p,s.dtype,s.shape,a);return t.makeTensorInfo([a],s.dtype,u)}var EA={kernelName:Jo,backendName:\"webgl\",kernelFunc:Y9};var Q9=`\n int r = int(a.r) & int(b.r);\n int g = int(a.g) & int(b.g);\n int rb = int(a.b) & int(b.b);\n int ra = int(a.a) & int(b.a);\n return vec4(r, g, rb, ra);\n`,Z9=`\n return float(int(a.r) & int(b.r));\n`;function J9(r){let{inputs:e,backend:t}=r,{a:o,b:n}=e,s=A().getBool(\"WEBGL_PACK_BINARY_OPERATIONS\"),a=A().getNumber(\"WEBGL_VERSION\");if(t.shouldExecuteOnCPU([o,n])||a===1){let p=t.texData.get(o.dataId).values,u=t.texData.get(n.dataId).values,[c,l]=zR(o.shape,n.shape,p,u,o.dtype),m=t.makeTensorInfo(l,o.dtype),d=t.texData.get(m.dataId);return d.values=c,m}let i;return s?i=new jr(Q9,o.shape,n.shape,!1):i=new Pr(Z9,o.shape,n.shape),t.runWebGLProgram(i,[o,n],o.dtype)}var $A={kernelName:qa,backendName:\"webgl\",kernelFunc:J9};function eJ(r){let{inputs:e,backend:t}=r,{s0:o,s1:n}=e,s=t.readSync(o.dataId),a=t.readSync(n.dataId),i=w.assertAndGetBroadcastShape(Array.from(s),Array.from(a));return t.makeTensorInfo([i.length],\"int32\",Int32Array.from(i))}var RA={kernelName:ea,backendName:\"webgl\",kernelFunc:eJ};var tJ=\"return float(a != b);\",Sv=nt({opSnippet:tJ,cpuKernelImpl:iD,dtype:\"bool\"}),DA={kernelName:Yn,backendName:\"webgl\",kernelFunc:Sv};function bi(r){let{inputs:e,backend:t}=r,{input:o}=e,n=t.texData.get(o.dataId);return Dt({inputs:{x:n.complexTensorInfos.real},backend:t})}var AA={kernelName:Hi,backendName:\"webgl\",kernelFunc:bi};var rJ=\"return float(int(x));\";function FA(r,e){let t=new tr(r.shape,rJ),o=e.runWebGLProgram(t,[r],\"int32\");return{dataId:o.dataId,shape:o.shape,dtype:o.dtype}}function Iv(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{dtype:s}=o;if(s===\"complex64\"){if(n.dtype===\"complex64\")return Dt({inputs:{x:n},backend:t});let a=Gr(n.shape),i=Iv({inputs:{x:n},backend:t,attrs:{dtype:\"float32\"}}),p=Or({inputs:{real:i,imag:a},backend:t});return a.dispose(),t.disposeIntermediateTensorInfo(i),p}if(n.dtype===\"complex64\"){let a=bi({inputs:{input:n},backend:t}),i=Iv({inputs:{x:a},backend:t,attrs:{dtype:s}});return t.disposeIntermediateTensorInfo(a),i}if(!y.hasEncodingLoss(n.dtype,s)){let a=Dt({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]=VR(a,n.shape,n.dtype,s);return t.makeTensorInfo(i,p,u)}if(s===\"int32\")return FA(n,t);if(s===\"bool\"){let a=t.makeTensorInfo([],\"bool\",y.getTypedArrayFromDType(\"bool\",1)),p=Sv({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 PA={kernelName:yo,backendName:\"webgl\",kernelFunc:Iv};var OA=\"return ceil(x);\",oJ=xe({opSnippet:OA,packedOpSnippet:OA,cpuKernelImpl:WR}),MA={kernelName:en,backendName:\"webgl\",kernelFunc:oJ};var Rh=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 Dh=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 nJ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{clipValueMin:s,clipValueMax:a}=o,i;A().getBool(\"WEBGL_PACK_CLIP\")?i=new Dh(n.shape):i=new Rh(n.shape);let p=[[s],[a]];return t.runWebGLProgram(i,[n],n.dtype,p)}var LA={kernelName:bo,backendName:\"webgl\",kernelFunc:nJ};var Ah=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 BA(r,e){return{dataId:e.dataId,dtype:e.dtype,shape:r.shape}}function sJ(r){let{inputs:e,backend:t}=r,{x:o}=e,n=t.texData.get(o.dataId),s=new Ah(o.shape),a=[BA(o,n.complexTensorInfos.real),BA(o,n.complexTensorInfos.imag)];return t.runWebGLProgram(s,a,a[0].dtype)}var zA={kernelName:Ai,backendName:\"webgl\",kernelFunc:sJ};var Fh=class{constructor(e){this.outputShape=[],this.outputShape=w.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}(${Ph(i,u,g)}),\n vec2(${Ph(c,u,g)}));\n }`}let d=p.length,f=p[p.length-1];m+=`\n return getChannel(\n getT${d}(${Ph(i,u,f)}),\n vec2(${Ph(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 Ph(r,e,t){let o=r.indexOf(e);return r.map((s,a)=>a===o?`${s} - ${t}`:s).join()}function Ip(r){let{inputs:e,backend:t}=r,{input:o}=e,n=t.texData.get(o.dataId);return Dt({inputs:{x:n.complexTensorInfos.imag},backend:t})}var VA={kernelName:Wi,backendName:\"webgl\",kernelFunc:Ip};function Vc(r,e,t){let o=r[0].dtype;if(o===\"complex64\"){let d=r.map(b=>bi({inputs:{input:b},backend:t})),f=r.map(b=>Ip({inputs:{input:b},backend:t})),h=Vc(d,e,t),g=Vc(f,e,t),x=Or({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(S=>{let _=[-1,y.sizeFromShape(S.shape.slice(e))];return te({inputs:{x:S},backend:t,attrs:{shape:_}})}),f=d.map(S=>({vals:t.readSync(S.dataId),shape:S.shape})),h=w.computeOutShape(d.map(S=>S.shape),1),g=d[0].shape[0]===1,x=UR(f,h,o,g),b=w.computeOutShape(r.map(S=>S.shape),e),C=t.makeTensorInfo(b,o,x);return d.forEach(S=>t.disposeIntermediateTensorInfo(S)),C}let s=r.filter(d=>y.sizeFromShape(d.shape)>0),a=A().getBool(\"WEBGL_PACK_ARRAY_OPERATIONS\")&&s[0].shape.length>1;if(s.length===1){let d=a?new tr(r[0].shape,La):new Fr(r[0].shape,La);return t.runWebGLProgram(d,r,o)}let i=A().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}=aJ(s,e,t),c=new Fh(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 aJ(r,e,t){let o=w.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 vv(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);w.assertParamsConsistent(a,s);let i=w.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?Dt({inputs:{x:p[0]},backend:t}):Vc(p,s,t)}var WA={kernelName:ta,backendName:\"webgl\",kernelFunc:vv};var Wc=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,S=\"\",k=\"\";o&&(n?S=`float activation(float a) {\n float b = getPreluActivationWeightsAtOutCoords();\n ${o}\n }`:s?S=`float activation(float a) {\n float b = getLeakyreluAlphaAtOutCoords();\n ${o}\n }`:S=`\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 ${S}\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 `}},Mh=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 Uc=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=ut(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 Bh(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 zh({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 S=Bh(s.shape,d);S!=null&&(s=te({inputs:{x:s},backend:o,attrs:{shape:S}}),x.push(s))}if(n!=null){let S=Bh(n.shape,d);S!=null&&(n=te({inputs:{x:n},backend:o,attrs:{shape:S}}),x.push(n))}if(!((l===1||m===1)&&c>Cv)&&u.isPacked&&d&&u.texture!=null&&p[2]%2!==0&&y.arraysEqual(u.shape.slice(-3),p.slice(-3))){let S=p[0]*p[1]*(p[2]+1),k={dataId:r.dataId,shape:[1,S,t.inChannels],dtype:r.dtype},_=u.shape;u.shape=u.shape.slice(),u.shape[u.shape.length-2]++,y.assert(xu(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 R=Sp({a:k,b:$,backend:o,transposeA:f,transposeB:h,bias:n,activation:i,preluActivationWeights:s,leakyreluAlpha:a}),D=o.texData.get(R.dataId);y.assert(D.isPacked,()=>\"batchMatMul result is expected to be packed\"),u.shape=_,D.shape=t.outShape,g=Dt({inputs:{x:R},backend:o}),g.shape=t.outShape,x.push(R)}else{let S=t.outHeight*t.outWidth,k=te({inputs:{x:r},backend:o,attrs:{shape:d?[t.batchSize,S,t.inChannels]:[t.batchSize,t.inChannels,S]}}),_=te({inputs:{x:e},backend:o,attrs:{shape:[1,t.inChannels,t.outChannels]}}),$=Sp({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 S of x)o.disposeIntermediateTensorInfo(S);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,S=[];if(s!=null){let q=Bh(s.shape,f);q!=null&&(s=te({inputs:{x:s},backend:o,attrs:{shape:q}}),S.push(s))}if(n!=null){let q=Bh(n.shape,f);q!=null&&(n=te({inputs:{x:n},backend:o,attrs:{shape:q}}),S.push(n))}let k=te({inputs:{x:e},backend:o,attrs:{shape:[1,h,y.sizeFromShape(e.shape)/h]}});S.push(k);let _=new Lh(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]],R=o.runWebGLProgram(_,[r],\"float32\",$),D=te({inputs:{x:R},backend:o,attrs:{shape:x}});S.push(R),S.push(D);let P=n!=null,O=s!=null,M=i===\"leakyrelu\",L=i?yi(i,!0):null,B=new zc(f?D.shape:k.shape,f?k.shape:D.shape,f?[t.batchSize,g,t.outChannels]:[t.batchSize,t.outChannels,g],b,C,P,L,O,M),z=f?[D,k]:[k,D];if(n&&z.push(n),O&&z.push(s),M){let q=o.makeTensorInfo([],\"float32\",y.createScalarValue(a,\"float32\"));z.push(q),S.push(q)}let U=o.runWebGLProgram(B,z,\"float32\"),j=te({inputs:{x:U},backend:o,attrs:{shape:t.outShape}});S.push(U);for(let q of S)o.disposeIntermediateTensorInfo(q);return j}function iJ(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=w.convertConv2DDataFormat(p),m=w.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=zh({x:n,filter:s,convInfo:m,backend:t});else if(m.strideWidth<=2&&l===\"channelsLast\"&&A().getBool(\"WEBGL_EXP_CONV\")){let h=new Uc(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(A().getBool(\"WEBGL_CONV_IM2COL\"))d=Vh({x:n,filter:s,convInfo:m,backend:t});else{let h=new Wc(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 UA={kernelName:tn,backendName:\"webgl\",kernelFunc:iJ};var Wh=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 ${a?`float dyValue = getDy(b, yR, yC, d2);\n float xValue = getX(b, xR, xC, d1);\n dotProd += (xValue * dyValue);`:`float dyValue = getDy(b, d2, yR, yC);\n float xValue = getX(b, d1, xR, xC);\n dotProd += (xValue * dyValue);`}\n }\n }\n }\n setOutput(dotProd);\n }\n `}},Uh=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 `}},Gh=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 `}},Hh=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 uJ(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=w.convertConv2DDataFormat(p),m=w.computeConv2DInfo(n.shape,c,a,1,i,u,!1,l),d=new Wh(m);return t.runWebGLProgram(d,[n,s],\"float32\")}var GA={kernelName:Fi,backendName:\"webgl\",kernelFunc:uJ};var Kh=class{constructor(e){this.variableNames=[\"dy\",\"W\"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:\"strides\",type:\"vec2\"}],this.outputShape=e.inShape,this.enableShapeUniforms=ut(this.outputShape.length);let t=e.filterHeight,o=e.filterWidth,n=t-1-e.padInfo.top,s=o-1-e.padInfo.left;this.userCode=`\n const ivec2 pads = ivec2(${n}, ${s});\n\n void main() {\n ivec4 coords = getOutputCoords();\n int batch = coords[0];\n int d1 = coords[3];\n\n ivec2 dyCorner = ivec2(coords[1], coords[2]) - pads;\n int dyRCorner = dyCorner.x;\n int dyCCorner = dyCorner.y;\n\n vec4 result = vec4(0.);\n for (int wR = 0; wR < ${t}; wR++) {\n float dyR = float(dyRCorner + wR) / strides[0];\n if (dyR < 0.0 || dyR >= ${e.outHeight}.0 || fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n int wRPerm = ${t} - 1 - wR;\n\n for (int wC = 0; wC < ${o}; wC++) {\n int wCPerm = ${o} - 1 - wC;\n\n float dyC = float(dyCCorner + wC) / strides[1];\n bool idyCVal = (dyC >= 0.0) && (dyC < ${e.outWidth}.0)\n && (fract(dyC) == 0.0);\n int idyC = int(dyC);\n\n float dyC2 = float(dyCCorner + wC + 1) / strides[1];\n bool idyCVal2 = (dyC2 >= 0.0) && (dyC2 < ${e.outWidth}.0)\n && (fract(dyC2) == 0.0);\n int idyC2 = int(dyC2);\n\n if (idyCVal && idyCVal2) {\n for (int d2 = 0; d2 < ${e.outChannels}; d2 += 2) {\n vec4 wValue = getW(wRPerm, wCPerm, d1, d2);\n vec4 dySample = getDy(batch, idyR, idyC, d2);\n vec4 dySample2 = (idyC / 2 == idyC2 / 2) ?\n dySample : getDy(batch, idyR, idyC2, d2);\n\n vec2 dyValue = mod(float(idyC), 2.) == 0. ?\n dySample.xy : dySample.zw;\n result.xy += vec2(dot(dyValue, wValue.xy),\n dot(dyValue, wValue.zw));\n\n dyValue = mod(float(idyC2), 2.) == 0. ?\n dySample2.xy : dySample2.zw;\n result.zw += vec2(dot(dyValue, wValue.xy),\n dot(dyValue, wValue.zw));\n }\n } else if (idyCVal) {\n for (int d2 = 0; d2 < ${e.outChannels}; d2 += 2) {\n vec4 wValue = getW(wRPerm, wCPerm, d1, d2);\n vec4 dySample = getDy(batch, idyR, idyC, d2);\n vec2 dyValue = mod(float(idyC), 2.) == 0. ?\n dySample.xy : dySample.zw;\n result.xy += vec2(dot(dyValue, wValue.xy),\n dot(dyValue, wValue.zw));\n }\n } else if (idyCVal2) {\n for (int d2 = 0; d2 < ${e.outChannels}; d2 += 2) {\n vec4 wValue = getW(wRPerm, wCPerm, d1, d2);\n vec4 dySample = getDy(batch, idyR, idyC2, d2);\n vec2 dyValue = mod(float(idyC2), 2.) == 0. ?\n dySample.xy : dySample.zw;\n result.zw += vec2(dot(dyValue, wValue.xy),\n dot(dyValue, wValue.zw));\n }\n }\n }\n }\n setOutput(result);\n }\n `}};function pJ(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=w.convertConv2DDataFormat(u),m=w.computeConv2DInfo(a,s.shape,i,1,p,c,!1,l);if(A().getBool(\"WEBGL_PACK_CONV2DTRANSPOSE\")&&l===\"channelsLast\"){let d=[[m.strideHeight,m.strideWidth]],f=new Kh(m);return t.runWebGLProgram(f,[n,s],\"float32\",d)}else{let d=new Uh(m);return t.runWebGLProgram(d,[n,s],\"float32\")}}var HA={kernelName:rn,backendName:\"webgl\",kernelFunc:pJ};function cJ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s}=e,{strides:a,pad:i,dilations:p}=o,u=w.computeConv3DInfo(n.shape,s.shape,a,p,i),c=new Mh(u);return t.runWebGLProgram(c,[n,s],\"float32\")}var KA={kernelName:on,backendName:\"webgl\",kernelFunc:cJ};function lJ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,dy:s}=e,{strides:a,pad:i,filterShape:p}=o,u=w.computeConv3DInfo(n.shape,p,a,1,i),c=new Gh(u);return t.runWebGLProgram(c,[n,s],\"float32\")}var qA={kernelName:ja,backendName:\"webgl\",kernelFunc:lJ};function mJ(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,filter:s}=e,{pad:a,strides:i,inputShape:p}=o,u=w.computeConv3DInfo(p,s.shape,i,1,a),c=new Hh(u);return t.runWebGLProgram(c,[n,s],\"float32\")}var jA={kernelName:nn,backendName:\"webgl\",kernelFunc:mJ};var dJ=Fo+`\n return cos(x);\n`,fJ=`\n vec4 result = cos(x);\n bvec4 isNaN = isnan(x);\n ${Xr}\n return result;\n`,hJ=xe({opSnippet:dJ,packedOpSnippet:fJ}),XA={kernelName:sn,backendName:\"webgl\",kernelFunc:hJ};var gJ=`\n float e2x = exp(-x);\n return (e2x + 1.0 / e2x) / 2.0;\n`,xJ=xe({opSnippet:gJ}),YA={kernelName:an,backendName:\"webgl\",kernelFunc:xJ};var qh=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,S,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 = ${S};\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 yJ=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 qh(n.shape,s.shape,i,p,u);return t.runWebGLProgram(c,[n,s,a],\"float32\")},QA={kernelName:cn,backendName:\"webgl\",kernelFunc:yJ};var vp;(function(r){r.Prod=\"*\",r.Sum=\"+\"})(vp||(vp={}));var om=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===vp.Prod?\"1.0\":\"0.0\",i=o?a:`getX(${ZA(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 ${Re(s)} coords = getOutputCoords();\n int end = ${JA(s,\"coords\",this.op)};\n float val = ${i};\n int pow2 = int(pow(2.0, index));\n if (${u}) {\n int idx = ${c};\n ${JA(s,\"coords\",this.op)} = idx;\n val ${this.op}= getX(${ZA(s,\"coords\",this.op)});\n }\n setOutput(val);\n }\n `}};function ZA(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 JA(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 jh(r,e,t,o,n,s){let a=e.shape.length,i=w.getAxesPermutation([o],a),p=e;i!=null&&(p=bt({inputs:{x:e},backend:t,attrs:{perm:i}}));let u=w.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=Dt({inputs:{x:p},backend:t});for(let m=0;m<=Math.ceil(Math.log2(c))-1;m++){let d=new om(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 om(r,p.shape,n,s),d=l;l=t.runWebGLProgram(m,[l],l.dtype),t.disposeIntermediateTensorInfo(d)}if(i!=null){let m=w.getUndoAxesPermutation(i),d=bt({inputs:{x:l},backend:t,attrs:{perm:m}});return t.disposeIntermediateTensorInfo(l),t.disposeIntermediateTensorInfo(p),d}return l}function bJ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,exclusive:a,reverse:i}=o;return jh(vp.Prod,n,t,s,a,i)}var eF={kernelName:un,backendName:\"webgl\",kernelFunc:bJ};function CJ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,exclusive:a,reverse:i}=o;return jh(vp.Sum,n,t,s,a,i)}var tF={kernelName:pn,backendName:\"webgl\",kernelFunc:CJ};function wJ(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=ph(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=BR(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 rF={kernelName:ra,backendName:\"webgl\",kernelFunc:wJ};var Xh=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 SJ(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 Xh(f,s,a);return t.runWebGLProgram(h,[n],n.dtype)}var oF={kernelName:ln,backendName:\"webgl\",kernelFunc:SJ};var Gc=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=ut(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 Hc=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=ut(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=w.computeConv2DInfo(n.shape,s.shape,a,c,i,u,!0),m;A().getBool(\"WEBGL_PACK_DEPTHWISECONV\")&&l.strideWidth<=2&&l.outChannels/l.inChannels===1?m=new Hc(l):m=new Gc(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 nF={kernelName:mn,backendName:\"webgl\",kernelFunc:IJ};var Yh=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 `}},Qh=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 vJ(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=w.computeConv2DInfo(n.shape,c,a,i,p,u,!0),m=new Yh(l);return t.runWebGLProgram(m,[n,s],\"float32\")}var sF={kernelName:Pi,backendName:\"webgl\",kernelFunc:vJ};function kJ(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=w.computeConv2DInfo(c,s.shape,a,i,p,u,!0),m=new Qh(l);return t.runWebGLProgram(m,[n,s],\"float32\")}var aF={kernelName:Oi,backendName:\"webgl\",kernelFunc:kJ};var Zh=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 NJ(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 Zh(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 iF={kernelName:oa,backendName:\"webgl\",kernelFunc:NJ};var Jh=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 TJ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s}=e,{strides:a,pad:i,dilations:p}=o,u=w.computeDilation2DInfo(n.shape,s.shape,a,i,\"NHWC\",p),c,l=new Jh(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 uF={kernelName:dn,backendName:\"webgl\",kernelFunc:TJ};function _J(r){let{inputs:e,backend:t,attrs:o}=r,{equation:n}=o,s=e,{allDims:a,summedDims:i,idDims:p}=w.decodeEinsumEquation(n,s.length);w.checkEinsumDimSizes(a.length,p,s);let{path:u,steps:c}=w.getEinsumComputePath(i,p),l=c.length,m=null,d=a.length,f=[];for(let h=0;h=0&&(m=wp({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 pF={kernelName:Bi,backendName:\"webgl\",kernelFunc:_J};var EJ=\"return (x >= 0.0) ? x : (exp(x) - 1.0);\",$J=`\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`,RJ=xe({opSnippet:EJ,packedOpSnippet:$J}),cF={kernelName:hn,backendName:\"webgl\",kernelFunc:RJ};var DJ=\"return (b >= 0.0) ? a : a * (b + 1.0);\",AJ=`\n vec4 bGTEZero = vec4(greaterThanEqual(b, vec4(0.)));\n return (bGTEZero * a) + ((vec4(1.0) - bGTEZero) * (a * (b + vec4(1.0))));\n`,FJ=r=>{let{inputs:e,backend:t}=r,{dy:o,y:n}=e,s=A().getBool(\"WEBGL_PACK_BINARY_OPERATIONS\")?new jr(AJ,o.shape,n.shape):new Pr(DJ,o.shape,n.shape);return t.runWebGLProgram(s,[o,n],o.dtype)},lF={kernelName:Xa,backendName:\"webgl\",kernelFunc:FJ};var PJ=`\n return vec4(equal(a, b));\n`,OJ=\"return float(a == b);\",MJ=nt({opSnippet:OJ,packedOpSnippet:PJ,dtype:\"bool\",cpuKernelImpl:GR}),mF={kernelName:xn,backendName:\"webgl\",kernelFunc:MJ};var LJ=`\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 = ${w.ERF_P};\n float a1 = ${w.ERF_A1};\n float a2 = ${w.ERF_A2};\n float a3 = ${w.ERF_A3};\n float a4 = ${w.ERF_A4};\n float a5 = ${w.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`,BJ=xe({opSnippet:LJ}),dF={kernelName:gn,backendName:\"webgl\",kernelFunc:BJ};var zJ=Fo+`\n return exp(x);\n`,VJ=`\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`,kv=xe({opSnippet:zJ,packedOpSnippet:VJ,cpuKernelImpl:HR,dtype:\"float32\"}),fF={kernelName:yn,backendName:\"webgl\",kernelFunc:kv};function eg(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 hF={kernelName:na,backendName:\"webgl\",kernelFunc:eg};var gF=\"return exp(x) - 1.0;\",WJ=xe({opSnippet:gF,packedOpSnippet:gF,cpuKernelImpl:KR}),xF={kernelName:bn,backendName:\"webgl\",kernelFunc:WJ};var nm=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 tg(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 nm(\"real\",p,e),c=new nm(\"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=Or({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 UJ(r){let{inputs:e,backend:t}=r,{input:o}=e;return tg(o,!1,t)}var yF={kernelName:zi,backendName:\"webgl\",kernelFunc:UJ};var rg=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 Ci(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 rg(o,n),i=[[n]];return e.runWebGLProgram(a,[],s,i)}}var bF={kernelName:sa,backendName:\"webgl\",kernelFunc:Ci};var og=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 CF={kernelName:Cn,backendName:\"webgl\",kernelFunc:({inputs:r,backend:e})=>{let{image:t}=r,o=e,n=new og(t.shape);return o.runWebGLProgram(n,[t],t.dtype)}};var wF=\"return floor(x);\",GJ=xe({opSnippet:wF,packedOpSnippet:wF,cpuKernelImpl:qR}),SF={kernelName:wn,backendName:\"webgl\",kernelFunc:GJ};var HJ=`\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`,KJ=`\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`,qJ=nt({opSnippet:HJ,packedOpSnippet:KJ,dtype:\"int32\"}),IF={kernelName:Sn,backendName:\"webgl\",kernelFunc:qJ};var ng=class{constructor(e){this.variableNames=[\"A\"];let t=It(),[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 sg=class{constructor(e){this.variableNames=[\"A\"],this.packedInputs=!1,this.packedOutput=!0;let t=It(),[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 vF={kernelName:Du,backendName:\"webgl\",kernelFunc:jJ},Kc,Nv=A().getBool(\"CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU\");function jJ(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=A().getBool(\"CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU\");(Kc==null||h!==Nv)&&(Nv=h,Kc=document.createElement(\"canvas\").getContext(\"2d\",{willReadFrequently:Nv})),Kc.canvas.width=p,Kc.canvas.height=u,Kc.drawImage(n,0,0,p,u),n=Kc.canvas}let m=t.makeTensorInfo(c,\"int32\");t.texData.get(m.dataId).usage=mr.PIXELS,t.gpgpu.uploadPixelDataToTexture(t.getTexture(m.dataId),n);let d=A().getBool(\"WEBGL_PACK\")?new sg(l):new ng(l),f=t.runWebGLProgram(d,[m],\"int32\");return t.disposeData(m.dataId),f}function XJ(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=w.convertConv2DDataFormat(c),g=w.computeConv2DInfo(n.shape,s.shape,p,l,u,m,!1,h),x,b=[],C=a!=null,S=i!=null,k=d===\"leakyrelu\",_=()=>{let R=[n,s],D=(P,O)=>{if(O===\"NCHW\"&&P.shape.length===1&&P.shape[0]!==1){let M=te({inputs:{x:P},backend:t,attrs:{shape:[P.shape[0],1,1]}});return b.push(M),M}return P};if(C&&R.push(D(a,c)),S&&R.push(D(i,c)),k){let P=t.makeTensorInfo([],\"float32\",y.createScalarValue(f,\"float32\"));R.push(P),b.push(P)}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\"))x=zh({x:n,filter:s,convInfo:g,backend:t,bias:a,activation:d,preluActivationWeights:i,leakyreluAlpha:f});else if(g.strideWidth<=2&&h===\"channelsLast\"&&A().getBool(\"WEBGL_EXP_CONV\")){let R=d?yi(d,!0):null,D=new Uc(g,C,R,S,k),P=[[g.padInfo.top,g.padInfo.left],[g.strideHeight,g.strideWidth],[g.dilationHeight,g.dilationWidth],[g.inHeight,g.inWidth]],O=_();x=t.runWebGLProgram(D,O,\"float32\",P)}else if(A().getBool(\"WEBGL_CONV_IM2COL\"))x=Vh({x:n,filter:s,convInfo:g,backend:t,bias:a,activation:d,preluActivationWeights:i,leakyreluAlpha:f});else{let R=d?yi(d,!1):null,D=new Wc(g,C,R,S,k),P=_();x=t.runWebGLProgram(D,P,\"float32\")}let $=te({inputs:{x},backend:t,attrs:{shape:g.outShape}});return b.push(x),b.forEach(R=>t.disposeIntermediateTensorInfo(R)),$}var kF={kernelName:Io,backendName:\"webgl\",kernelFunc:XJ};function YJ(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(w.eitherStridesOrDilationsAreOne(p,h),()=>`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${p} and dilations '${h}'`);let g=w.computeConv2DInfo(n.shape,s.shape,p,h,u,l,!0),x=A().getBool(\"WEBGL_PACK_DEPTHWISECONV\")&&g.strideWidth<=2&&g.outChannels/g.inChannels===1,b=m?yi(m,x):null,C=[n,s],S=a!=null,k=i!=null,_=m===\"leakyrelu\";if(S&&C.push(a),k&&C.push(i),_){let P=t.makeTensorInfo([],\"float32\",y.createScalarValue(d,\"float32\"));C.push(P),f.push(P)}let $;x?$=new Hc(g,S,b,k,_):$=new Gc(g,S,b,k,_);let R=[[g.padInfo.top,g.padInfo.left],[g.strideHeight,g.strideWidth],[g.dilationHeight,g.dilationWidth],[g.inHeight,g.inWidth]],D=t.runWebGLProgram($,C,\"float32\",R);return f.forEach(P=>t.disposeIntermediateTensorInfo(P)),D}var NF={kernelName:vo,backendName:\"webgl\",kernelFunc:YJ};var ag=class{constructor(e,t,o,n){this.sliceDim=e,this.strides=t,this.paramsShape=n,this.variableNames=[\"x\",\"indices\"],this.outputShape=o;let s=Re(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 QJ(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]=w.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=jR(x,b,o.dtype,u,a,c,l,o.shape,i);return t.makeTensorInfo(p,o.dtype,C.values)}let f=new ag(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 TF={kernelName:vn,backendName:\"webgl\",kernelFunc:QJ};var ig=class{constructor(e,t){this.variableNames=[\"A\",\"indices\"],this.outputShape=t,this.rank=t.length;let o=Re(this.rank),n=ZJ(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 ZJ(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=w.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),S=XR(C,b,f);return l.forEach(k=>t.disposeIntermediateTensorInfo(k)),t.makeTensorInfo(u.outputShape,S.dtype,S.values)}let h=new ig(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 _F={kernelName:aa,backendName:\"webgl\",kernelFunc:Tv};var JJ=\"return float(a > b);\",eee=`\n return vec4(greaterThan(a, b));\n`,tee=nt({opSnippet:JJ,packedOpSnippet:eee,cpuKernelImpl:YR,dtype:\"bool\"}),EF={kernelName:kn,backendName:\"webgl\",kernelFunc:tee};var ree=\"return float(a >= b);\",oee=`\n return vec4(greaterThanEqual(a, b));\n`,nee=nt({opSnippet:ree,packedOpSnippet:oee,dtype:\"bool\",cpuKernelImpl:QR}),$F={kernelName:Nn,backendName:\"webgl\",kernelFunc:nee};function see(r){let{inputs:e,backend:t}=r,{input:o}=e;return tg(o,!0,t)}var RF={kernelName:Vi,backendName:\"webgl\",kernelFunc:see};var aee=\"return float(!isnan(x) && !isinf(x));\",iee=xe({opSnippet:aee,dtype:\"bool\"}),DF={kernelName:Tn,backendName:\"webgl\",kernelFunc:iee};var uee=\"return float(isinf(x));\",pee=xe({opSnippet:uee,dtype:\"bool\"}),AF={kernelName:_n,backendName:\"webgl\",kernelFunc:pee};var cee=\"return float(isnan(x));\",lee=xe({opSnippet:cee,dtype:\"bool\"}),FF={kernelName:En,backendName:\"webgl\",kernelFunc:lee};var mee=\"return float(a < b);\",dee=`\n return vec4(lessThan(a, b));\n`,fee=nt({opSnippet:mee,packedOpSnippet:dee,cpuKernelImpl:ZR,dtype:\"bool\"}),PF={kernelName:Rn,backendName:\"webgl\",kernelFunc:fee};var hee=\"return float(a <= b);\",gee=`\n return vec4(lessThanEqual(a, b));\n`,xee=nt({opSnippet:hee,packedOpSnippet:gee,cpuKernelImpl:JR,dtype:\"bool\"}),OF={kernelName:Dn,backendName:\"webgl\",kernelFunc:xee};function yee(r){let{backend:e,attrs:t}=r,{start:o,stop:n,num:s}=t,a=eD(o,n,s);return e.makeTensorInfo([a.length],\"float32\",a)}var MF={kernelName:An,backendName:\"webgl\",kernelFunc:yee};var bee=Fo+`\n return x < 0.0 ? 0./0. : log(x);\n`,Cee=`\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`,wee=xe({opSnippet:bee,packedOpSnippet:Cee,cpuKernelImpl:tD}),LF={kernelName:Fn,backendName:\"webgl\",kernelFunc:wee};var See=Fo+`\n return log(1.0 + x);\n`,Iee=xe({opSnippet:See}),BF={kernelName:Pn,backendName:\"webgl\",kernelFunc:Iee};var vee=\"return float(a >= 1.0 && b >= 1.0);\",kee=`\n return vec4(\n vec4(greaterThanEqual(a, vec4(1.0))) *\n vec4(greaterThanEqual(b, vec4(1.0))));\n`,Nee=nt({opSnippet:vee,packedOpSnippet:kee,dtype:\"bool\"}),zF={kernelName:On,backendName:\"webgl\",kernelFunc:Nee};var Tee=\"return float(!(x >= 1.0));\",_ee=xe({opSnippet:Tee}),VF={kernelName:Mn,backendName:\"webgl\",kernelFunc:_ee};var Eee=\"return float(a >= 1.0 || b >= 1.0);\",$ee=`\n return min(\n vec4(greaterThanEqual(a, vec4(1.0))) +\n vec4(greaterThanEqual(b, vec4(1.0))),\n vec4(1.0));\n`,Ree=nt({opSnippet:Eee,packedOpSnippet:$ee,dtype:\"bool\"}),WF={kernelName:Ln,backendName:\"webgl\",kernelFunc:Ree};var ug=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 pg=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 Dee=r=>{let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{depthRadius:s,bias:a,alpha:i,beta:p}=o,u=A().getBool(\"WEBGL_PACK_NORMALIZATION\")?new pg(n.shape,s,a,i,p):new ug(n.shape,s,a,i,p);return t.runWebGLProgram(u,[n],n.dtype)},UF={kernelName:Bn,backendName:\"webgl\",kernelFunc:Dee};var cg=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 Aee=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 cg(n.shape,i,p,u,c);return t.runWebGLProgram(l,[n,s,a],n.dtype)},GF={kernelName:Ya,backendName:\"webgl\",kernelFunc:Aee};function HF(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=Yr(i,r.dtype,\"max\",o),u=te({inputs:{x:p},attrs:{shape:t},backend:o});return o.disposeIntermediateTensorInfo(i),o.disposeIntermediateTensorInfo(p),u}function _v(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=w.getAxesPermutation(u,i),l=c!=null,m=t.shouldExecuteOnCPU([n]),d=n;if(l){if(m){let C=t.texData.get(d.dataId).values,S=new Array(i);for(let $=0;$`Error in maxPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${u}'`);let c=w.computePool2DInfo(n.shape,s,a,u,i,p);if(c.filterWidth===1&&c.filterHeight===1&&y.arraysEqual(c.inShape,c.outShape))return Dt({inputs:{x:n},backend:t});let l=new Us(c,\"max\",!1);return t.runWebGLProgram(l,[n],n.dtype)}var jF={kernelName:Wn,backendName:\"webgl\",kernelFunc:Mee};function Lee(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=w.computePool3DInfo(n.shape,s,a,c,i,u,p),m=new bu(l,\"max\",!1);return t.runWebGLProgram(m,[n],n.dtype)}var XF={kernelName:ia,backendName:\"webgl\",kernelFunc:Lee};var lg=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 `}},mg=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 Bee(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=w.computePool3DInfo(a.shape,i,p,l,u,c),d=new bu(m,\"max\",!0),f=t.runWebGLProgram(d,[a],a.dtype),h=new mg(m),g=t.runWebGLProgram(h,[n,f],a.dtype);return t.disposeIntermediateTensorInfo(f),g}var YF={kernelName:Gi,backendName:\"webgl\",kernelFunc:Bee};function zee(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s,output:a}=e,i=s;Vs([s,a],\"maxPoolGrad\");let{filterSize:p,strides:u,pad:c,dimRoundingMode:l}=o,m=w.computePool2DInfo(i.shape,p,u,1,c,l),d=!0,f=new Us(m,\"max\",d),h=t.runWebGLProgram(f,[i],i.dtype),g=new lg(m),x=t.runWebGLProgram(g,[n,h],i.dtype);return t.disposeIntermediateTensorInfo(h),x}var QF={kernelName:Ui,backendName:\"webgl\",kernelFunc:zee};function ZF(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 JF={kernelName:ua,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(w.eitherStridesOrDilationsAreOne(s,u),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${s} and dilations '${u}'`);let c=w.computePool2DInfo(o.shape,n,s,u,a),[l,m]=ZF(o,i,c,p);return[l,m]}};function e3(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=Yr(i,\"float32\",\"mean\",o),u=te({inputs:{x:p},attrs:{shape:t},backend:o});return o.disposeIntermediateTensorInfo(i),o.disposeIntermediateTensorInfo(p),u}var t3={kernelName:Un,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=w.getAxesPermutation(u,i),l=c!=null,m=a.shouldExecuteOnCPU([o]),d=[],f=o;if(l){if(m){let S=a.texData.get(f.dataId).values,k=new Array(i);for(let R=0;Rc[0]+e[l]+c[1]);let n=e.length,s=Re(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 fg=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=Re(n),a=t.map(f=>f[0]).join(\",\"),i=t.map((f,h)=>f[0]+e[h]).join(\",\"),p=Rt(\"rc\",n),u=Rt(\"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 Hee=({inputs:r,backend:e,attrs:t})=>{let{x:o}=r,{paddings:n,mode:s}=t,a=A().getBool(\"WEBGL_PACK_ARRAY_OPERATIONS\")?new fg(o.shape,n,s):new dg(o.shape,n,s);return e.runWebGLProgram(a,[o],o.dtype)},n3={kernelName:Kn,backendName:\"webgl\",kernelFunc:Hee};var Kee=`if (b == 0.0) return NAN;\n return mod(a, b);`,qee=`\n vec4 result = mod(a, b);\n bvec4 isNaN = equal(b, vec4(0.0));\n `+Xr+`\n return result;\n`,jee=nt({opSnippet:Kee,packedOpSnippet:qee}),s3={kernelName:qn,backendName:\"webgl\",kernelFunc:jee};var hg=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 Xee=`\nif (a == b) {\n return 1.0;\n};\nreturn a / b;`,Yee=`\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`,Ev=nt({opSnippet:Xee,packedOpSnippet:Yee,checkOutOfBounds:!0}),a3={kernelName:fn,backendName:\"webgl\",kernelFunc:Ev};var i3=\"return a - b;\",$v=nt({opSnippet:i3,packedOpSnippet:i3,supportsComplex:!0,cpuKernelImpl:kD}),u3={kernelName:Ts,backendName:\"webgl\",kernelFunc:$v};function Rv(r){let{inputs:e,backend:t,attrs:o}=r,{logits:n}=e,{dim:s}=o,a=y.parseAxisParam([s],n.shape),i=_v({inputs:{x:n},backend:t,attrs:{reductionIndices:a,keepDims:!1}}),p=w.expandShapeToKeepDim(i.shape,a),u=te({inputs:{x:i},backend:t,attrs:{shape:p}}),c=$v({inputs:{a:n,b:u},backend:t}),l=kv({inputs:{x:c},backend:t}),m=wp({inputs:{x:l},backend:t,attrs:{axis:a,keepDims:!1}}),d=te({inputs:{x:m},backend:t,attrs:{shape:p}}),f=Ev({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 p3={kernelName:Is,backendName:\"webgl\",kernelFunc:Rv};function Qee(r){let{inputs:e,backend:t,attrs:o}=r,{logits:n}=e,{numSamples:s,seed:a,normalized:i}=o,p=i?n:Rv({inputs:{logits:n},backend:t,attrs:{dim:n.shape.length-1}}),u=p.shape[0],c=p.shape[1],l=new hg(u,c,s),m=[[a]],d=t.runWebGLProgram(l,[p],\"int32\",m);return i||t.disposeIntermediateTensorInfo(p),d}var c3={kernelName:jn,backendName:\"webgl\",kernelFunc:Qee};var Zee=Wt+`\n return -x;\n`,Jee=`\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 ete(r){let{inputs:e,backend:t}=r,{x:o}=e;if(t.shouldExecuteOnCPU([o])){let s=t.texData.get(o.dataId),[a,i]=aD(s.values,o.shape,o.dtype);return t.makeTensorInfo(i,o.dtype,a)}let n;return A().getBool(\"WEBGL_PACK_UNARY_OPERATIONS\")?n=new Fr(o.shape,Jee):n=new tr(o.shape,Zee),t.runWebGLProgram(n,[o],o.dtype)}var l3={kernelName:pa,backendName:\"webgl\",kernelFunc:ete};var tte=Vt.nonMaxSuppressionV3Impl;function rte(r){w.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}=tte(u,c,a,i,p);return t.makeTensorInfo([l.length],\"int32\",new Int32Array(l))}var m3={kernelName:Qn,backendName:\"webgl\",kernelFunc:rte};var ote=Vt.nonMaxSuppressionV4Impl;function nte(r){w.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}=ote(c,l,a,i,p,u);return[t.makeTensorInfo([m.length],\"int32\",new Int32Array(m)),t.makeTensorInfo([],\"int32\",new Int32Array([d]))]}var d3={kernelName:Qa,backendName:\"webgl\",kernelFunc:nte};var ste=Vt.nonMaxSuppressionV5Impl;function ate(r){w.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}=ste(c,l,m,d,f,h);return[t.makeTensorInfo([g.length],\"int32\",new Int32Array(g)),t.makeTensorInfo([x.length],\"float32\",new Float32Array(x))]}var f3={kernelName:Zn,backendName:\"webgl\",kernelFunc:ate};var gg=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 ite=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 gg(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},h3={kernelName:Jn,backendName:\"webgl\",kernelFunc:ite};function sm(r){let{inputs:e,backend:t}=r,{x:o}=e;if(o.dtype===\"complex64\"){let n=bi({inputs:{input:o},backend:t}),s=sm({inputs:{x:n},backend:t}),a=Ip({inputs:{input:o},backend:t}),i=sm({inputs:{x:a},backend:t}),p=Or({inputs:{real:s,imag:i},backend:t});return t.disposeIntermediateTensorInfo(n),t.disposeIntermediateTensorInfo(s),t.disposeIntermediateTensorInfo(a),t.disposeIntermediateTensorInfo(i),p}else return Ci({attrs:{shape:o.shape,dtype:o.dtype,value:o.dtype===\"string\"?\"\":0},backend:t})}var g3={kernelName:Sa,backendName:\"webgl\",kernelFunc:sm};function x3(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=bi({inputs:{input:o},backend:t}),s=x3({inputs:{x:n},backend:t}),a=Ip({inputs:{input:o},backend:t}),i=sm({inputs:{x:a},backend:t}),p=Or({inputs:{real:s,imag:i},backend:t});return t.disposeIntermediateTensorInfo(n),t.disposeIntermediateTensorInfo(s),t.disposeIntermediateTensorInfo(a),t.disposeIntermediateTensorInfo(i),p}else return Ci({attrs:{shape:o.shape,dtype:o.dtype,value:1},backend:t})}var y3={kernelName:ca,backendName:\"webgl\",kernelFunc:x3};function ute(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=>{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:t,attrs:{dim:n}});return i.push(l),l}),u=vv({inputs:p,backend:t,attrs:{axis:n}});return i.forEach(c=>t.disposeIntermediateTensorInfo(c)),u}var b3={kernelName:la,backendName:\"webgl\",kernelFunc:ute};var xg=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=Re(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 yg=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=Re(n),a=t.map(h=>h[0]).join(\",\"),i=t.map((h,g)=>h[0]+e[g]).join(\",\"),p=Rt(\"rc\",n),u=Rt(\"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 Ci({backend:t,attrs:{shape:u,value:a,dtype:n.dtype}})}let i=A().getBool(\"WEBGL_PACK_ARRAY_OPERATIONS\")?new yg(n.shape,s,a):new xg(n.shape,s,a),p=[[a]];return t.runWebGLProgram(i,[n],n.dtype,p)},C3={kernelName:es,backendName:\"webgl\",kernelFunc:Dv};var pte=`\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`,cte=`\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 `+Xr+`\n return result;\n`,lte=nt({opSnippet:pte,packedOpSnippet:cte}),w3={kernelName:ts,backendName:\"webgl\",kernelFunc:lte};function mte(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=w.getAxesPermutation(c,i),m=n;l!=null&&(m=bt({inputs:{x:n},backend:t,attrs:{perm:l}}),c=w.getInnerMostAxes(c.length,i),p.push(m)),w.assertAxesAreInnerMostDims(\"prod\",c,i);let d;if(t.shouldExecuteOnCPU([m])){let f=t.texData.get(m.dataId).values,{outVals:h,outShape:g,outDtype:x}=uD(m.shape,m.dtype,f,c);d=t.makeTensorInfo(g,x,h)}else{let[f,h]=w.computeOutAndReduceShapes(m.shape,c),g=y.sizeFromShape(h),x=te({inputs:{x:m},backend:t,attrs:{shape:[-1,g]}}),b=oi(n.dtype),C=Yr(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=w.expandShapeToKeepDim(d.shape,u);d=te({inputs:{x:d},backend:t,attrs:{shape:f}})}return p.forEach(f=>t.disposeIntermediateTensorInfo(f)),d}var S3={kernelName:os,backendName:\"webgl\",kernelFunc:mte};function dte(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]=pD(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 I3={kernelName:Hp,backendName:\"webgl\",kernelFunc:dte};function fte(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]=cD(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 v3={kernelName:Kp,backendName:\"webgl\",kernelFunc:fte};function hte(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]=lD(u,n.shape,c,s.shape,s.dtype,l,a.shape,m,d,p);return t.makeTensorInfo(f,s.dtype,h)}var k3={kernelName:qp,backendName:\"webgl\",kernelFunc:hte};var Av=r=>{let{backend:e,attrs:t}=r,{start:o,stop:n,step:s,dtype:a}=t,i=mD(o,n,s,a);return e.makeTensorInfo([i.length],a,i)},N3={kernelName:ma,backendName:\"webgl\",kernelFunc:Av};var gte=\"return 1.0 / x;\",xte=xe({opSnippet:gte}),T3={kernelName:ns,backendName:\"webgl\",kernelFunc:xte};var yte=Wt+`\n return (x < 0.0) ? 0.0 : x;\n`,bte=`\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`,Cte=xe({opSnippet:yte,packedOpSnippet:bte}),_3={kernelName:ss,backendName:\"webgl\",kernelFunc:Cte};var wte=Wt+`\n return (x < 0.0) ? 0.0 : min(6.0, x);\n`,Ste=`\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`,Ite=xe({opSnippet:wte,packedOpSnippet:Ste}),E3={kernelName:us,backendName:\"webgl\",kernelFunc:Ite};var bg=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 Cg=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 vte(r){let{inputs:e,backend:t,attrs:o}=r,{images:n}=e,{alignCorners:s,halfPixelCenters:a,size:i}=o,[p,u]=i,c=A().getBool(\"WEBGL_PACK_IMAGE_OPERATIONS\")?new Cg(n.shape,p,u,s,a):new bg(n.shape,p,u,s,a);return t.runWebGLProgram(c,[n],\"float32\")}var $3={kernelName:is,backendName:\"webgl\",kernelFunc:vte};var wg=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 kte(r){let{inputs:e,backend:t,attrs:o}=r,{images:n,dy:s}=e,{alignCorners:a}=o,i=new wg(s.shape,n.shape,a);return t.runWebGLProgram(i,[s],s.dtype)}var R3={kernelName:Ja,backendName:\"webgl\",kernelFunc:kte};var Sg=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 Ig=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 Nte(r){let{inputs:e,backend:t,attrs:o}=r,{images:n}=e,{alignCorners:s,halfPixelCenters:a,size:i}=o,[p,u]=i,c=A().getBool(\"WEBGL_PACK_IMAGE_OPERATIONS\")?new Ig(n.shape,p,u,s,a):new Sg(n.shape,p,u,s,a);return t.runWebGLProgram(c,[n],n.dtype)}var D3={kernelName:as,backendName:\"webgl\",kernelFunc:Nte};var vg=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 Tte(r){let{inputs:e,backend:t,attrs:o}=r,{images:n,dy:s}=e,{alignCorners:a}=o,i=new vg(s.shape,n.shape,a);return t.runWebGLProgram(i,[s],s.dtype)}var A3={kernelName:Za,backendName:\"webgl\",kernelFunc:Tte};var kg=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=Re(o);this.userCode=`\n void main() {\n ${a} coords = getOutputCoords();\n setOutput(getX(${s}));\n }\n `}};var Ng=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=Rt(\"rc\",o),s=`${n[o-1]} + 1 < ${this.outputShape[o-1]}`,a=`${n[o-2]} + 1 < ${this.outputShape[o-2]}`,i=Re(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 _te(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 Dt({inputs:{x:n},backend:t});let p=A().getBool(\"WEBGL_PACK_ARRAY_OPERATIONS\")?new Ng(n.shape,i):new kg(n.shape,i);return t.runWebGLProgram(p,[n],n.dtype)}var F3={kernelName:ps,backendName:\"webgl\",kernelFunc:_te};var Tg=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 P3={kernelName:Ds,backendName:\"webgl\",kernelFunc:({inputs:r,attrs:e,backend:t})=>{let{image:o}=r,{radians:n,fillValue:s,center:a}=e,i=t,p=new Tg(o.shape,s),[u,c]=w.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 Ete=`\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`,$te=xe({opSnippet:Ete}),O3={kernelName:cs,backendName:\"webgl\",kernelFunc:$te};var Rte=\"return inversesqrt(x);\",Dte=xe({opSnippet:Rte,cpuKernelImpl:dD}),M3={kernelName:ls,backendName:\"webgl\",kernelFunc:Dte};var Cu=class{constructor(e,t,o,n,s,a,i=!0,p=!1){this.variableNames=[\"updates\",\"indices\",\"defaultValue\"],this.outputShape=a;let u=Re(s.length),c=Re(a.length),l=\"\";o===1?l=\"i\":o===2&&(l=\"i, j\");let m=`getIndices(${l})`,d=\"\";n===1?d=\"i\":n===2&&(d=\"i, coords[1]\");let f=`getUpdates(${d})`,h=\"\";p&&(h=\"coords[0], coords[1]\");let g=`getDefaultValue(${h})`,x=t>1?\"strides[j]\":\"strides\";this.userCode=`\n ${u} strides = ${u}(${s});\n\n void main() {\n ${c} 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(${m});\n flattenedIndex += index * ${x};\n }\n if (flattenedIndex == coords[0]) {\n sum += ${f};\n found = true;\n }\n }\n setOutput(mix(${g}, sum, float(found)));\n }\n `}};var _g=class{constructor(e,t,o,n,s,a,i=!0,p=!1){this.variableNames=[\"updates\",\"indices\",\"defaultValue\"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=a;let u=Re(s.length),c=Re(a.length),l=\"\";o===1?l=\"i\":o===2&&(l=\"i, j\");let m=`getIndices(${l})`,d=\"\";n===1?d=\"i\":n===2&&(d=\"i, coords[1]\");let f=`getUpdates(${d})`,h=\"\";p&&(h=\"coords[0], coords[1]\");let g=`getDefaultValue(${h})`,x=t>1?\"strides[j]\":\"strides\",b=t>1?\"strides[j + 1]\":\"strides\";this.userCode=`\n ${u} strides = ${u}(${s});\n\n void main() {\n ${c} coords = getOutputCoords();\n vec4 sum = vec4(0.);\n vec4 found = vec4(0.);\n for (int i = 0; i < ${e}; i+=2) {\n ivec2 flattenedIndex = ivec2(0);\n for (int j = 0; j < ${t}; j+=2) {\n ivec4 index = round(${m});\n flattenedIndex += index.xz * ${x};\n if (j + 1 < ${t}) {\n flattenedIndex += index.yw * ${b};\n }\n }\n if (flattenedIndex[0] == coords[0] || flattenedIndex[1] == coords[0] ||\n flattenedIndex[0] == coords[0] + 1 || flattenedIndex[1] == coords[0] + 1) {\n vec4 updVals = ${f};\n if (flattenedIndex[0] == coords[0]) {\n sum.xy += updVals.xy;\n found.xy = vec2(1.);\n } else if (flattenedIndex[0] == coords[0] + 1) {\n sum.zw += updVals.xy;\n found.zw = vec2(1.);\n }\n if (flattenedIndex[1] == coords[0]) {\n sum.xy += updVals.zw;\n found.xy = vec2(1.);\n } else if (flattenedIndex[1] == coords[0] + 1) {\n sum.zw += updVals.zw;\n found.zw = vec2(1.);\n }\n }\n }\n setOutput(mix(${g}, sum, found));\n }\n `}};function Ate(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}=w.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;A().getBool(\"WEBGL_PACK\")?g=new _g(p,i,d.shape.length,f.shape.length,c,m):g=new Cu(p,i,d.shape.length,f.shape.length,c,m);let 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 L3={kernelName:ms,backendName:\"webgl\",kernelFunc:Ate};var Eg=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=A().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 Fte(r){let{inputs:e,backend:t,attrs:o}=r,{sortedSequence:n,values:s}=e,{side:a}=o,i=new Eg(n.shape[0],n.shape[1],s.shape[1],a),p=[[n.shape[1]]];return t.runWebGLProgram(i,[n,s],\"int32\",p)}var B3={kernelName:fs,backendName:\"webgl\",kernelFunc:Fte};var $g=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 Pte(r){let{inputs:e,backend:t}=r,{condition:o,t:n,e:s}=e,a=new $g(o.shape.length,n.shape,n.shape.length);return t.runWebGLProgram(a,[o,n,s],dt(n.dtype,s.dtype))}var z3={kernelName:fa,backendName:\"webgl\",kernelFunc:Pte};var Ote=`\n // Stable and Attracting Fixed Point (0, 1) for Normalized Weights.\n // see: https://arxiv.org/abs/1706.02515\n float scaleAlpha = ${w.SELU_SCALEALPHA};\n float scale = ${w.SELU_SCALE};\n return (x >= 0.0) ? scale * x : scaleAlpha * (exp(x) - 1.0);\n`,Mte=xe({opSnippet:Ote}),V3={kernelName:hs,backendName:\"webgl\",kernelFunc:Mte};var Lte=Fo+`\n return 1.0 / (1.0 + exp(-1.0 * x));\n`,Bte=`\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`,zte=xe({opSnippet:Lte,packedOpSnippet:Bte,cpuKernelImpl:hD}),W3={kernelName:bs,backendName:\"webgl\",kernelFunc:zte};var Vte=`\n if (isnan(x)) { return 0.0; }\n return sign(x);\n`,Wte=xe({opSnippet:Vte}),U3={kernelName:ys,backendName:\"webgl\",kernelFunc:Wte};var Ute=Fo+`\n return sin(x);\n`,Gte=`\n vec4 result = sin(x);\n bvec4 isNaN = isnan(x);\n ${Xr}\n return result;\n`,Hte=xe({opSnippet:Ute,packedOpSnippet:Gte}),G3={kernelName:gs,backendName:\"webgl\",kernelFunc:Hte};var Kte=`\n float e2x = exp(x);\n return (e2x - 1.0 / e2x) / 2.0;\n`,qte=xe({opSnippet:Kte}),H3={kernelName:xs,backendName:\"webgl\",kernelFunc:qte};var jte=`\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`,Xte=xe({opSnippet:jte}),K3={kernelName:Cs,backendName:\"webgl\",kernelFunc:Xte};var Yte=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},q3={kernelName:ga,backendName:\"webgl\",kernelFunc:Yte};function Qte(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]=xD(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 j3={kernelName:Ki,backendName:\"webgl\",kernelFunc:Qte};function Zte(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]=yD(i,o.shape,o.dtype,a,p);return[t.makeTensorInfo(c,o.dtype,u),t.makeTensorInfo([l.length],s.dtype,new Int32Array(l))]}var X3={kernelName:ei,backendName:\"webgl\",kernelFunc:Zte};function Jte(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]=lh(a,o.shape,o.dtype,i,p,!0);return t.makeTensorInfo(c,o.dtype,u)}var Y3={kernelName:ya,backendName:\"webgl\",kernelFunc:Jte};function ere(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]=lh(a,o.shape,o.dtype,i,p);return t.makeTensorInfo(c,o.dtype,u)}var Q3={kernelName:ba,backendName:\"webgl\",kernelFunc:ere};function tre(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}=w.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]),S=fD(x,b,i,m,c,u,p,l,C,d);return t.makeTensorInfo(i,S.dtype,S.values)}let f=new Cu(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 Z3={kernelName:vs,backendName:\"webgl\",kernelFunc:tre};function rre(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=w.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=Gs({inputs:{x:n},backend:t,attrs:{begin:c,size:d}});return c[i]+=m,f})}var J3={kernelName:xa,backendName:\"webgl\",kernelFunc:rre};var eP=\"return sqrt(x);\",ore=xe({opSnippet:eP,packedOpSnippet:eP,cpuKernelImpl:bD}),tP={kernelName:ws,backendName:\"webgl\",kernelFunc:ore};var nre=\"return x * x;\",sre=xe({opSnippet:nre}),rP={kernelName:qi,backendName:\"webgl\",kernelFunc:sre};var oP=\"return (a - b) * (a - b);\",are=nt({opSnippet:oP,packedOpSnippet:oP}),nP={kernelName:ks,backendName:\"webgl\",kernelFunc:are};function ire(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e;if(n.dtype!==\"string\")throw new Error(\"Input must be of datatype string\");let s=t.readSync(n.dataId),a=w.fromUint8ToStringArray(s),i=CD(a,\"string\",o);return t.makeTensorInfo(n.shape,\"string\",i)}var sP={kernelName:Ru,backendName:\"webgl\",kernelFunc:ire};function ure({inputs:r,attrs:e,backend:t}){let{x:o}=r,n=Wt+`\n return x > 0.0 ? 1.0 : float(${e.alpha});\n `,s=new tr(o.shape,n);return t.runWebGLProgram(s,[o],o.dtype)}var aP={kernelName:wo,backendName:\"webgl\",kernelFunc:ure};var Rg=class{constructor(e,t,o){this.variableNames=[\"x\"],this.outputShape=o;let n=o.length,s=Re(o.length),a=Re(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 pre(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:S}=pt.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 $=pt.computeOutShape(b,C,S),R=Gs({inputs:{x:n},backend:t,attrs:{begin:b,size:$}});k=te({inputs:{x:R},backend:t,attrs:{shape:f}}),t.disposeIntermediateTensorInfo(R)}else if(t.shouldExecuteOnCPU([n])){let R=t.readSync(n.dataId),D=me(n.shape,n.dtype,R),P=wD(d,D,S,b);k=t.makeTensorInfo(f,n.dtype,P.values)}else{let R=new Rg(b,S,d);k=t.runWebGLProgram(R,[n],n.dtype)}let _=te({inputs:{x:k},backend:t,attrs:{shape:f}});return t.disposeIntermediateTensorInfo(k),_}var iP={kernelName:Ns,backendName:\"webgl\",kernelFunc:pre};function cre(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]=SD(m,d,n,s,a,i,p,u);return[t.makeTensorInfo([f.length],\"string\",f),t.makeTensorInfo(l.shape,\"int32\",h)]}var uP={kernelName:Ca,backendName:\"webgl\",kernelFunc:cre};function lre(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]=ID(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 pP={kernelName:ji,backendName:\"webgl\",kernelFunc:lre};function mre(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=vD(a,n);return t.makeTensorInfo(s.shape,\"int32\",i)}var cP={kernelName:Xi,backendName:\"webgl\",kernelFunc:mre};var dre=\"return tan(x);\",fre=xe({opSnippet:dre}),lP={kernelName:_s,backendName:\"webgl\",kernelFunc:fre};var hre=`\n float e2x = exp(-2.0 * abs(x));\n return sign(x) * (1.0 - e2x) / (1.0 + e2x);\n`,gre=xe({opSnippet:hre}),mP={kernelName:Es,backendName:\"webgl\",kernelFunc:gre};function xre(r){let{inputs:e,backend:t,attrs:o}=r,{tensor:n,indices:s,updates:a}=e,{}=o,{sliceRank:i,numUpdates:p,sliceSize:u,strides:c,outputSize:l}=w.calculateShapes(a,s,n.shape),m=[l/u,u];if(l===0)return t.makeTensorInfo(n.shape,s.dtype);let d=te({inputs:{x:s},backend:t,attrs:{shape:[p,i]}}),f=te({inputs:{x:a},backend:t,attrs:{shape:[p,u]}}),h=te({inputs:{x:n},backend:t,attrs:{shape:m}}),g=new Cu(p,i,d.shape.length,f.shape.length,c,m,!1,!0),x=t.runWebGLProgram(g,[f,d,h],h.dtype),b=te({inputs:{x},backend:t,attrs:{shape:n.shape}});return t.disposeIntermediateTensorInfo(d),t.disposeIntermediateTensorInfo(f),t.disposeIntermediateTensorInfo(h),t.disposeIntermediateTensorInfo(x),b}var dP={kernelName:ds,backendName:\"webgl\",kernelFunc:xre};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=me(n.shape,n.dtype,u),l=ND(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 fP={kernelName:po,backendName:\"webgl\",kernelFunc:Fv};var Ag=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 `}},Fg=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 kp(r,e){e!==null&&r.disposeIntermediateTensorInfo(e)}function hP(r){let e=1;for(;ep){let P=t.readSync(n.dataId),[O,M]=TD(P,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,Ci({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&&kp(t,d);let x=hP(s),b=hP(c),C=null,S=()=>C===null?[g,g]:[g,C],k=(P,O,M)=>{let L=S(),B=new Ag(M),U=[[c],[C===null?1:0],[Number.NEGATIVE_INFINITY],[P],[O]],j=C;C=t.runWebGLProgram(B,L,\"int32\",U),kp(t,j)};for(let P=1;P=1;M/=2)k(O,M,[h,b])}for(let P=b;P>x;P/=2){let O=S(),M=new Fg([h,P/2]),B=[[c],[C===null?1:0],[x]],z=C;C=t.runWebGLProgram(M,O,\"int32\",B),kp(t,z);let U=x/2,j=U*2;for(let q=U;q>=1;q/=2)k(j,q,C.shape)}let _=C;C=Gs({inputs:{x:C},backend:t,attrs:{begin:0,size:[h,s]}}),kp(t,_);let $=Tv({inputs:{x:g,indices:C},backend:t,attrs:{axis:1,batchDims:1}});kp(t,g);let R=u.slice(0,-1);R.push(s),_=C,C=te({inputs:{x:C},attrs:{shape:R},backend:t}),kp(t,_);let D=$;return $=te({inputs:{x:$},attrs:{shape:R},backend:t}),kp(t,D),[$,C]}var gP={kernelName:$s,backendName:\"webgl\",kernelFunc:bre};var Pg=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 Cre(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 Pg(l,m,a,i,p,g);return t.runWebGLProgram(x,[n,s],\"float32\")}var xP={kernelName:Rs,backendName:\"webgl\",kernelFunc:Cre};function wre(r){let{inputs:e,attrs:t,backend:o}=r,{axis:n}=t,{x:s}=e;Vs(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}=_D(a,n,s.shape,s.dtype);return[o.makeTensorInfo(p,s.dtype,i),o.makeTensorInfo([u.length],\"int32\",u)]}var yP={kernelName:Yi,backendName:\"webgl\",kernelFunc:wre};function Sre(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 bP={kernelName:wa,backendName:\"webgl\",kernelFunc:Sre};var Og=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 Ire(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=w.getAxesPermutation([u],i),l=n;c!=null&&(l=bt({inputs:{x:n},backend:t,attrs:{perm:c}}),p.push(l),u=w.getInnerMostAxes(1,i)[0]);let m=w.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=oi(n.dtype),g=(S,k,_,$,R)=>{let D=S.shape[0],P=S.shape[1],O=w.segment_util.segOpComputeOptimalWindowSize(P,R),M={windowSize:O,inSize:P,batchSize:D,numSegments:R},L=new Og(M,k),B=t.compileAndRun(L,[S,_],$);if(p.push(B),B.shape[1]===R)return B;let z=Av({backend:t,attrs:{start:0,stop:R,step:1,dtype:\"float32\"}}),U=Fv({inputs:{x:z},backend:t,attrs:{reps:[P/O]}});return p.push(z),p.push(U),g(B,k,U,$,R)},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 S=w.getUndoAxesPermutation(c);C=bt({inputs:{x:C},backend:t,attrs:{perm:S}})}return p.forEach(S=>t.disposeIntermediateTensorInfo(S)),C}var CP={kernelName:Qi,backendName:\"webgl\",kernelFunc:Ire};var vre=[rA,nA,sA,aA,uA,pA,cA,lA,fA,hA,gA,xA,yA,bA,CA,wA,SA,IA,vA,kA,NA,_A,EA,$A,RA,PA,MA,LA,KD,zA,WA,UA,GA,HA,KA,qA,jA,XA,YA,QA,eF,tF,rF,oF,nF,sF,aF,iF,uF,pF,cF,lF,mF,dF,fF,hF,xF,yF,bF,CF,SF,IF,vF,kF,NF,TF,_F,EF,$F,HD,RF,VA,DF,AF,FF,qD,PF,OF,MF,LF,BF,zF,VF,WF,UF,GF,KF,qF,jF,XF,YF,QF,JF,t3,r3,o3,n3,s3,c3,YD,l3,m3,d3,f3,DA,h3,y3,b3,C3,w3,jD,S3,I3,v3,k3,N3,AA,a3,T3,_3,E3,ZD,$3,R3,D3,A3,F3,P3,O3,M3,L3,B3,z3,V3,W3,U3,G3,H3,TA,p3,K3,q3,j3,X3,Y3,Q3,Z3,J3,tP,rP,nP,sP,aP,iP,uP,pP,cP,u3,eA,lP,mP,dP,fP,gP,xP,tA,yP,bP,CP,g3];for(let r of vre)ti(r);var we;(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\"})(we||(we={}));var wu;(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\"})(wu||(wu={}));var wP;function kre(r){wP=r.wasm.cwrap(So,null,[\"number\",\"array\",\"number\",\"number\",\"array\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function Nre(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 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}.`);f=R.id}let h=i==null?0:t.dataIdMap.get(i.dataId).id,g=wu[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=Sr.assertAndGetBroadcastShape(n.shape.slice(0,-2),s.shape.slice(0,-2)),S=t.makeOutput([...C,x,b],n.dtype),k=t.dataIdMap.get(S.dataId).id,_=new Uint8Array(new Int32Array(n.shape).buffer),$=new Uint8Array(new Int32Array(s.shape).buffer);return wP(m,_,n.shape.length,d,$,s.shape.length,p,u,g,f,h,l||0,k),S}var SP={kernelName:So,backendName:\"wasm\",setupFunc:kre,kernelFunc:Nre};function he(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,we[i.dtype],c),u}return{kernelName:r,backendName:\"wasm\",setupFunc:o,kernelFunc:n}}var IP=he(Xs);var vP=he(Vo);var kP=he(Wo);function Ge(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=w.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,we[u.dtype],b),h}return{kernelName:r,backendName:\"wasm\",setupFunc:n,kernelFunc:s}}var Tre=!0,NP=Ge(uo,Tre);var TP;function _re(r){TP=r.wasm.cwrap(Uo,null,[\"array\",\"number\",\"number\",\"number\"])}function Ere(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 TP(s,n.length,we[o.dtype],a),o}var _P={kernelName:Uo,backendName:\"wasm\",setupFunc:_re,kernelFunc:Ere};function Np(r){let{inputs:{x:e},backend:t}=r;if(e.dtype===\"string\")return ar(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 EP={kernelName:Co,backendName:\"wasm\",kernelFunc:Np};var $P;function $re(r){$P=r.wasm.cwrap(co,null,[\"number\",\"array\",\"number\",\"number\",\"number\",\"array\",\"number\"])}function ho(r){let{inputs:e,backend:t,attrs:o}=r,[n,s]=Dre(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 RP={kernelName:co,backendName:\"wasm\",kernelFunc:ho,setupFunc:$re};function Tr(r,e,t){let o=r.shape,n=r.shape.length,s=y.parseAxisParam(e,o),a=s,i=w.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 QP={kernelName:da,backendName:\"wasm\",kernelFunc:zt};var ZP;function Hre(r){ZP=r.wasm.cwrap(Zo,null,[\"number\",\"array\",\"number\",\"number\",\"array\",\"number\",\"number\",\"number\",\"number\"])}function Kre(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=Sr.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 S=a?[g,c,m]:[g,m,c],k=i?[x,d,l]:[x,l,d],_=zt({inputs:{x:n},backend:t,attrs:{shape:S}}),$=zt({inputs:{x:s},backend:t,attrs:{shape:k}}),R=t.dataIdMap.get(_.dataId).id,D=t.dataIdMap.get($.dataId).id,P=a?_.shape[2]:_.shape[1],O=i?$.shape[1]:$.shape[2],M=Math.max(g,x),L=t.makeOutput([M,P,O],_.dtype),B=t.dataIdMap.get(L.dataId).id,z=new Uint8Array(new Int32Array(_.shape).buffer),U=new Uint8Array(new Int32Array($.shape).buffer);return ZP(R,z,_.shape.length,D,U,$.shape.length,a,i,B),t.disposeData(_.dataId),t.disposeData($.dataId),L.shape=C,L}var JP={kernelName:Zo,backendName:\"wasm\",setupFunc:Hre,kernelFunc:Kre};function Po(r){let{inputs:{x:e},attrs:{begin:t,size:o},backend:n}=r,[s,a]=pt.parseSliceParams(e,t,o),i=pt.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=pt.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=pp(p,s,a,e.shape,e.dtype);return l.stringBytes=f,u}let m=n.typedArrayFromHeap(u),d=e.shape.length;if(d===2)qre(p,c[0],m,s,a);else if(d===3)jre(p,c[0],c[1],m,s,a);else if(d===4)Xre(p,c[0],c[1],c[2],m,s,a);else{let f=pp(p,s,a,e.shape,e.dtype);m.set(f)}return u}function qre(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=w.getReshaped(n.shape,s,i),u=w.getPermuted(p.length,s.length),c=w.getReshapedPermuted(n.shape,s,i),l=w.getSliceBeginCoords(a,s.length),m=w.getSliceSize(c,a,s.length),d=zt({inputs:{x:n},backend:t,attrs:{shape:p}}),f=ho({inputs:{x:d},backend:t,attrs:{perm:u}}),h=zt({inputs:{x:f},backend:t,attrs:{shape:c}}),g=Po({inputs:{x:h},backend:t,attrs:{begin:l,size:m}});return t.disposeData(d.dataId),t.disposeData(f.dataId),t.disposeData(h.dataId),g}var tO={kernelName:Js,backendName:\"wasm\",kernelFunc:Yre};var rO;function Qre(r){rO=r.wasm.cwrap(Jo,null,[\"number\",\"number\",\"boolean\",\"number\",\"number\",\"number\"])}function Zre(r){let{backend:e,inputs:t,attrs:o}=r,{x:n,weights:s}=t,{size:a}=o,i=s.shape.reduce((l,m)=>l*m,1)!==0,p=n.shape.length===1?[a]:[n.shape[0],a],u=e.makeOutput(p,s.dtype);function c(l){return e.dataIdMap.get(l.dataId).id}return rO(c(n),a,i,c(s),we[s.dtype],c(u)),u}var oO={kernelName:Jo,backendName:\"wasm\",setupFunc:Qre,kernelFunc:Zre};var Jre=!0,nO=Ge(qa,Jre);function eoe(r){let{inputs:e,backend:t}=r,{s0:o,s1:n}=e,s=t.typedArrayFromHeap(o),a=t.typedArrayFromHeap(n),i=w.assertAndGetBroadcastShape(Array.from(s),Array.from(a));return t.makeOutput([i.length],\"int32\",void 0,new Int32Array(i))}var sO={kernelName:ea,backendName:\"wasm\",kernelFunc:eoe};function Mr(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 aO={kernelName:yo,backendName:\"wasm\",kernelFunc:Mr};var iO=he(en);var uO;function toe(r){uO=r.wasm.cwrap(bo,null,[\"number\",\"number\",\"number\",\"number\"])}function roe(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 uO(i,s,a,u),p}var pO={kernelName:bo,backendName:\"wasm\",setupFunc:toe,kernelFunc:roe};function Pv(r){let{inputs:e,backend:t}=r,o=y.parseAxisParam(r.attrs.axis,e[0].shape)[0],n=e.map(d=>d.shape);w.assertParamsConsistent(n,o);let s=w.computeOutShape(e.map(d=>d.shape),o),a=e.filter(d=>y.sizeFromShape(d.shape)>0);if(a.length===1)return Np({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 zt({inputs:{x:C},backend:t,attrs:{shape:k}})}),f=d.map(C=>({vals:t.readSync(C.dataId),shape:C.shape}));s=w.computeOutShape(d.map(C=>C.shape),1);let h=d[0].shape[0]===1,g=ap(f,s,e[0].dtype,h),x=w.computeOutShape(a.map(C=>C.shape),o);i.shape=x;let b=t.dataIdMap.get(i.dataId);return b.stringBytes=w.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=w.getAxesPermutation([s],p),c=n;u!==null&&(c=ho({inputs:{x:n},attrs:{perm:u},backend:t}));let l=w.getInnerMostAxes(1,p)[0];w.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;kO(f,a?1:0,i?1:0,d,h,we[n.dtype]);let g=m;if(u!==null){let x=w.getUndoAxesPermutation(u);g=ho({inputs:{x:m},attrs:{perm:x},backend:t}),t.disposeData(c.dataId),t.disposeData(m.dataId)}return g}var NO={kernelName:un,backendName:\"wasm\",setupFunc:hoe,kernelFunc:goe};var TO;function xoe(r){TO=r.wasm.cwrap(pn,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function yoe(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=w.getAxesPermutation([s],p),c=n;u!==null&&(c=ho({inputs:{x:n},attrs:{perm:u},backend:t}));let l=w.getInnerMostAxes(1,p)[0];w.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;TO(f,a?1:0,i?1:0,d,h,we[n.dtype]);let g=m;if(u!==null){let x=w.getUndoAxesPermutation(u);g=ho({inputs:{x:m},attrs:{perm:x},backend:t}),t.disposeData(c.dataId),t.disposeData(m.dataId)}return g}var _O={kernelName:pn,backendName:\"wasm\",setupFunc:xoe,kernelFunc:yoe};var EO;function boe(r){EO=r.wasm.cwrap(\"DenseBincount\",null,[\"number\",\"array\",\"number\",\"number\",\"boolean\",\"number\",\"number\",\"boolean\",\"number\"])}function Coe(r){let{backend:e,inputs:t,attrs:o}=r,{x:n,weights:s}=t,{size:a,binaryOutput:i}=o,p=s.shape.reduce((m,d)=>m*d,1)!==0,u=n.shape.length===1?[a]:[n.shape[0],a],c=e.makeOutput(u,s.dtype);function l(m){return e.dataIdMap.get(m.dataId).id}return EO(l(n),new Uint8Array(new Int32Array(n.shape).buffer),n.shape.length,a,p,l(s),we[s.dtype],i,l(c)),c}var $O={kernelName:ra,backendName:\"wasm\",setupFunc:boe,kernelFunc:Coe};var RO;function woe(r){RO=r.wasm.cwrap(ln,null,[\"number\",\"number\",\"number\",\"array\",\"number\",\"array\",\"array\",\"number\",\"number\"])}function Soe(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),S=new Uint8Array(new Int32Array(y.computeStrides(f)).buffer),k=e.dataIdMap.get(h.dataId).id;return RO(x,s,a===\"NHWC\"?1:0,b,n.shape.length-1,C,S,f.length,k),h}var DO={kernelName:ln,backendName:\"wasm\",setupFunc:woe,kernelFunc:Soe};var AO;function Ioe(r){AO=r.wasm.cwrap(mn,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function voe(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=w.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,S=d.dilationHeight,k=d.dilationWidth,_=d.strideHeight,$=d.strideWidth,R=d.inChannels,D=d.outChannels,P=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 O=o.makeOutput(d.outShape,\"float32\"),M=o.dataIdMap.get(O.dataId).id;return AO(a,n.shape[0],n.shape[1],n.shape[2],i,f,h,g,x,b,C,P,S,k,_,$,R,D,M),O}var FO={kernelName:mn,backendName:\"wasm\",setupFunc:Ioe,kernelFunc:voe};var PO;function koe(r){PO=r.wasm.cwrap(\"Diag\",null,[\"number\",\"number\",\"number\",\"number\"])}function Noe(r){let{inputs:e,backend:t}=r,{x:o}=e,n=y.sizeFromShape(o.shape),s=t.makeOutput([...o.shape,...o.shape],o.dtype);return PO(t.dataIdMap.get(o.dataId).id,we[o.dtype],n,t.dataIdMap.get(s.dataId).id),s}var OO={kernelName:oa,backendName:\"wasm\",setupFunc:koe,kernelFunc:Noe};var MO;function Toe(r){MO=r.wasm.cwrap(dn,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function _oe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s}=e,{strides:a,pad:i,dilations:p}=o;if(n.dtype!==s.dtype)throw new Error(`Dilation2D error: x must have the same dtype as filter. Got ${n.dtype} and ${s.dtype}`);let u=w.computeDilation2DInfo(n.shape,s.shape,a,i,\"NHWC\",p),c=t.makeOutput(u.outShape,n.dtype);return MO(t.dataIdMap.get(n.dataId).id,t.dataIdMap.get(s.dataId).id,t.dataIdMap.get(c.dataId).id,we[n.dtype],u.batchSize,u.inChannels,u.inHeight,u.inWidth,u.outHeight,u.outWidth,u.strideHeight,u.strideWidth,u.dilationHeight,u.dilationWidth,u.filterHeight,u.filterWidth,u.padInfo.top,u.padInfo.left),c}var LO={kernelName:dn,backendName:\"wasm\",setupFunc:Toe,kernelFunc:_oe};var BO;function Eoe(r){BO=r.wasm.cwrap(Li,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function $oe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s,dy:a}=e,{strides:i,pad:p,dilations:u}=o;if(n.dtype!==s.dtype||n.dtype!==a.dtype)throw new Error(`Dilation2DBackpropFilter error: x must have the same dtype as filter and dy. Got ${n.dtype}, ${s.dtype}, and ${a.dtype}`);let c=w.computeDilation2DInfo(n.shape,s.shape,i,p,\"NHWC\",u),l=t.makeOutput(s.shape,s.dtype);return BO(t.dataIdMap.get(n.dataId).id,t.dataIdMap.get(s.dataId).id,t.dataIdMap.get(a.dataId).id,t.dataIdMap.get(l.dataId).id,we[n.dtype],c.batchSize,c.inChannels,c.inHeight,c.inWidth,c.outHeight,c.outWidth,c.strideHeight,c.strideWidth,c.dilationHeight,c.dilationWidth,c.filterHeight,c.filterWidth,c.padInfo.top,c.padInfo.left),l}var zO={kernelName:Li,backendName:\"wasm\",setupFunc:Eoe,kernelFunc:$oe};var VO;function Roe(r){VO=r.wasm.cwrap(Mi,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function Doe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s,dy:a}=e,{strides:i,pad:p,dilations:u}=o;if(n.dtype!==s.dtype||n.dtype!==a.dtype)throw new Error(`Dilation2DBackpropInput error: x must have the same dtype as filter and dy. Got ${n.dtype}, ${s.dtype}, and ${a.dtype}`);let c=w.computeDilation2DInfo(n.shape,s.shape,i,p,\"NHWC\",u),l=t.makeOutput(n.shape,n.dtype);return VO(t.dataIdMap.get(n.dataId).id,t.dataIdMap.get(s.dataId).id,t.dataIdMap.get(a.dataId).id,t.dataIdMap.get(l.dataId).id,we[n.dtype],c.batchSize,c.inChannels,c.inHeight,c.inWidth,c.outHeight,c.outWidth,c.strideHeight,c.strideWidth,c.dilationHeight,c.dilationWidth,c.filterHeight,c.filterWidth,c.padInfo.top,c.padInfo.left),l}var WO={kernelName:Mi,backendName:\"wasm\",setupFunc:Roe,kernelFunc:Doe};var UO=he(hn);var GO;function Aoe(r){GO=r.wasm.cwrap(Xa,null,[\"number\",\"number\",\"number\"])}function Foe(r){let{inputs:e,backend:t}=r,{dy:o,y:n}=e,s=t.makeOutput(n.shape,\"float32\"),a=i=>t.dataIdMap.get(i.dataId).id;return GO(a(n),a(o),a(s)),s}var HO={kernelName:Xa,backendName:\"wasm\",setupFunc:Aoe,kernelFunc:Foe};var Poe=!1,KO=Ge(xn,Poe,\"bool\");var qO=he(gn);var jO=he(yn,\"float32\");function Lg(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),zt({inputs:{x:n},backend:o,attrs:{shape:i}})}var XO={kernelName:na,backendName:\"wasm\",kernelFunc:Lg};var YO=he(bn,\"float32\");function Mv(r){let{attrs:{shape:e,value:t},backend:o}=r,{attrs:{dtype:n}}=r;n=n||y.inferDtype(t);let s=o.makeOutput(e,n);return o.typedArrayFromHeap(s).fill(t),s}var QO={kernelName:sa,backendName:\"wasm\",kernelFunc:Mv};var ZO;function Ooe(r){ZO=r.wasm.cwrap(Cn,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function Moe(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 ZO(s,i,p,u,c,a),n}var JO={kernelName:Cn,backendName:\"wasm\",kernelFunc:Moe,setupFunc:Ooe};var eM=he(wn);var Loe=!1,tM=Ge(Sn,Loe);var rM;function Boe(r){rM=r.wasm.cwrap(In,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function zoe(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 rM(c,l,m,d,f,n,g),h}var oM={kernelName:In,backendName:\"wasm\",setupFunc:Boe,kernelFunc:zoe};var nM;function Voe(r){nM=r.wasm.cwrap(Io,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 Woe(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=w.computeConv2DInfo(n.shape,s.shape,p,c,u,m),g=wu[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,S=0;if(a!=null){let ee=o.dataIdMap.get(a.dataId);if(ee.shape.length!==1)throw new Error(`FusedConv2D only supports rank-1 bias but got rank ${ee.shape.length}.`);if(ee.shape[0]!==C)throw new Error(`FusedConv2D bias shape (${ee.shape}) does not match the number of output channels (${C})`);S=ee.id}let k=h.filterHeight,_=h.filterWidth,$=h.padInfo.top,R=h.padInfo.right,D=h.padInfo.bottom,P=h.padInfo.left,O=h.dilationHeight,M=h.dilationWidth,L=h.strideHeight,B=h.strideWidth,z=h.inChannels,U=h.padInfo.type===\"SAME\"?1:0,j=h.batchSize,q=h.inHeight,Y=h.inWidth;if(l!==\"NHWC\")throw new Error(`wasm backend FusedConv2D does not support dataFormat:'${l}'. Please use 'NHWC'.`);let J=o.makeOutput(h.outShape,\"float32\"),re=o.dataIdMap.get(J.dataId).id,ne=i==null?0:o.dataIdMap.get(i.dataId).id;return nM(x,j,q,Y,b,k,_,S,$,R,D,P,U,O,M,L,B,z,C,g,ne,f||0,re),J}var sM={kernelName:Io,backendName:\"wasm\",setupFunc:Voe,kernelFunc:Woe};var aM;function Uoe(r){aM=r.wasm.cwrap(vo,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 Goe(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=w.computeConv2DInfo(n.shape,s.shape,p,c,u,m,!0),g=wu[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,S=0;if(a!=null){let ee=o.dataIdMap.get(a.dataId);if(ee.shape.length!==1)throw new Error(`FusedDepthwiseConv2D only supports rank-1 bias but got rank ${ee.shape.length}.`);if(ee.shape[0]!==C)throw new Error(`FusedDepthwiseConv2D bias shape (${ee.shape}) does not match the number of output channels (${C})`);S=ee.id}let k=h.filterHeight,_=h.filterWidth,$=h.padInfo.top,R=h.padInfo.right,D=h.padInfo.bottom,P=h.padInfo.left,O=h.dilationHeight,M=h.dilationWidth,L=h.strideHeight,B=h.strideWidth,z=h.inChannels,U=h.padInfo.type===\"SAME\"?1:0,j=h.batchSize,q=h.inHeight,Y=h.inWidth;if(l!==\"NHWC\")throw new Error(`wasm backend FusedDepthwiseConv2D does not support dataFormat:'${l}'. Please use 'NHWC'.`);let J=o.makeOutput(h.outShape,\"float32\"),re=o.dataIdMap.get(J.dataId).id,ne=i==null?0:o.dataIdMap.get(i.dataId).id;return aM(x,j,q,Y,b,k,_,S,$,R,D,P,U,O,M,L,B,z,C,g,ne,f||0,re),J}var iM={kernelName:vo,backendName:\"wasm\",setupFunc:Uoe,kernelFunc:Goe};var uM;function Hoe(r){uM=r.wasm.cwrap(vn,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"array\",\"number\"])}function Koe(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],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 uM(d,we[o.dtype],h,a,l,i,g,x),u}var pM={kernelName:vn,backendName:\"wasm\",setupFunc:Hoe,kernelFunc:Koe};var cM;function qoe(r){cM=r.wasm.cwrap(\"Gather\",null,[\"number\",\"number\",\"array\",\"number\",\"number\",\"number\",\"array\",\"number\"])}function joe(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 D=0;D=0,()=>`GatherV2: the index value ${P} is not in [0, ${c-1}]`)}let l=w.segment_util.collectGatherOpShapeInfo(n,s,p,i),m=zt({inputs:{x:n},attrs:{shape:[l.batchSize,l.outerSize,l.dimSize,l.sliceSize]},backend:e}),d=y.sizeFromShape(s.shape),f=zt({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),R=new Uint8Array(new Int32Array(y.computeStrides(h)).buffer);return cM(C,we[n.dtype],$,x,k,l.batchSize,R,_),e.disposeData(m.dataId),e.disposeData(f.dataId),g.shape=l.outputShape,g}var lM={kernelName:aa,backendName:\"wasm\",setupFunc:qoe,kernelFunc:joe};var Xoe=!1,mM=Ge(kn,Xoe,\"bool\");var Yoe=!1,dM=Ge(Nn,Yoe,\"bool\");var fM=he(Tn,\"bool\");var hM=he(_n,\"bool\");var gM=he(En,\"bool\");var xM;function Qoe(r){xM=r.wasm.cwrap($n,null,[\"number\",\"number\",\"number\",\"number\"])}function Zoe(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;xM(n,we[e.dtype],t,a)}return s}var yM={kernelName:$n,backendName:\"wasm\",setupFunc:Qoe,kernelFunc:Zoe};var Joe=!1,bM=Ge(Rn,Joe,\"bool\");var ene=!1,CM=Ge(Dn,ene,\"bool\");var wM;function tne(r){wM=r.wasm.cwrap(An,null,[\"number\",\"number\",\"number\",\"number\"])}function rne(r){let{attrs:e,backend:t}=r,{start:o,stop:n,num:s}=e,a=Math.floor(s),i=t.makeOutput([a],\"float32\");return wM(t.dataIdMap.get(i.dataId).id,o,n,a),i}var SM={kernelName:An,backendName:\"wasm\",setupFunc:tne,kernelFunc:rne};var IM=he(Fn);var vM=he(Pn);var one=!1,kM=Ge(On,one,\"bool\");var NM=he(Mn);var nne=!1,TM=Ge(Ln,nne,\"bool\");var sne=!1,_M=Ge(R0,sne,\"bool\");var EM;function ane(r){EM=r.wasm.cwrap(Bn,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function ine(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{depthRadius:s,bias:a,alpha:i,beta:p}=o;if(n.dtype!==\"float32\")throw new Error(\"LRN error: x must have dtype float32\");let u=t.makeOutput(n.shape,n.dtype);return EM(t.dataIdMap.get(n.dataId).id,t.dataIdMap.get(u.dataId).id,n.shape[3],s,a,i,p),u}var $M={kernelName:Bn,backendName:\"wasm\",setupFunc:ane,kernelFunc:ine};var RM;function une(r){RM=r.wasm.cwrap(Ya,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function pne(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;if(n.dtype!==\"float32\"||s.dtype!==\"float32\"||a.dtype!==\"float32\")throw new Error(\"LRNGrad error: x, y, and dy must have dtype float32\");let l=t.makeOutput(n.shape,n.dtype);return RM(t.dataIdMap.get(n.dataId).id,t.dataIdMap.get(s.dataId).id,t.dataIdMap.get(a.dataId).id,t.dataIdMap.get(l.dataId).id,a.shape[3],i,p,u,c),l}var DM={kernelName:Ya,backendName:\"wasm\",setupFunc:une,kernelFunc:pne};var AM;function cne(r){AM=r.wasm.cwrap(zn,null,[\"number\",\"number\",\"number\",\"number\"])}function lne(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}=Tr(a,n,e);if(d){let C=e.dataIdMap.get(c.dataId).id;u=c,p=C}let f=u.shape.length;w.assertAxesAreInnerMostDims(\"max\",l,f);let[h,g]=w.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;AM(p,we[a.dtype],x,C)}if(d&&e.disposeData(c.dataId),s){let C=w.expandShapeToKeepDim(b.shape,m);b.shape=C}return b}var FM={kernelName:zn,backendName:\"wasm\",setupFunc:cne,kernelFunc:lne};var mne=!1,PM=Ge(Vn,mne);var OM;function dne(r){OM=r.wasm.cwrap(Wn,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function fne(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=w.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,S=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\"),R=o.dataIdMap.get($.dataId).id;return OM(s,n.shape[0],n.shape[1],n.shape[2],l,m,d,f,h,g,x,b,C,S,k,_,R),$}var MM={kernelName:Wn,backendName:\"wasm\",setupFunc:dne,kernelFunc:fne};var LM;function hne(r){LM=r.wasm.cwrap(\"MaxPool3D\",null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function gne(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{filterSize:s,strides:a,pad:i,dimRoundingMode:p,dataFormat:u}=o,c=w.computePool3DInfo(n.shape,s,a,1,i,p,u),l=t.makeOutput(c.outShape,n.dtype);return LM(t.dataIdMap.get(n.dataId).id,t.dataIdMap.get(l.dataId).id,c.batchSize,c.inChannels,c.inDepth,c.inHeight,c.inWidth,c.outDepth,c.outHeight,c.outWidth,c.strideDepth,c.strideHeight,c.strideWidth,c.dilationDepth,c.dilationHeight,c.dilationWidth,c.effectiveFilterDepth,c.effectiveFilterHeight,c.effectiveFilterWidth,c.padInfo.front,c.padInfo.top,c.padInfo.left),l}var BM={kernelName:ia,backendName:\"wasm\",setupFunc:hne,kernelFunc:gne};var zM;function xne(r){zM=r.wasm.cwrap(\"MaxPool3DGrad\",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 yne(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s}=e,{filterSize:a,strides:i,pad:p,dimRoundingMode:u}=o,c=w.computePool3DInfo(s.shape,a,i,1,p,u),l=t.makeOutput(s.shape,s.dtype);return zM(t.dataIdMap.get(s.dataId).id,t.dataIdMap.get(n.dataId).id,t.dataIdMap.get(l.dataId).id,c.batchSize,c.inChannels,c.inDepth,c.inHeight,c.inWidth,c.outDepth,c.outHeight,c.outWidth,c.strideDepth,c.strideHeight,c.strideWidth,c.dilationDepth,c.dilationHeight,c.dilationWidth,c.effectiveFilterDepth,c.effectiveFilterHeight,c.effectiveFilterWidth,c.padInfo.front,c.padInfo.top,c.padInfo.left),l}var VM={kernelName:Gi,backendName:\"wasm\",setupFunc:xne,kernelFunc:yne};var WM;function bne(r){WM=r.wasm.cwrap(\"MaxPoolGrad\",null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function Cne(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s}=e,{filterSize:a,strides:i,pad:p,dimRoundingMode:u}=o,c=w.computePool2DInfo(s.shape,a,i,1,p,u),l=t.makeOutput(s.shape,s.dtype);return WM(t.dataIdMap.get(s.dataId).id,t.dataIdMap.get(n.dataId).id,t.dataIdMap.get(l.dataId).id,c.batchSize,c.inChannels,c.inHeight,c.inWidth,c.outHeight,c.outWidth,c.strideHeight,c.strideWidth,c.dilationHeight,c.dilationWidth,c.effectiveFilterHeight,c.effectiveFilterWidth,c.padInfo.top,c.padInfo.left),l}var UM={kernelName:Ui,backendName:\"wasm\",setupFunc:bne,kernelFunc:Cne};var GM;function wne(r){GM=r.wasm.cwrap(\"MaxPoolWithArgmax\",null,[\"number\",\"number\",\"number\",\"number\",\"boolean\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function Sne(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{filterSize:s,strides:a,pad:i,includeBatchInIndex:p}=o;y.assert(n.shape.length===4,()=>`Error in maxPool: input must be rank 4 but got rank ${n.shape.length}.`);let u=[1,1];y.assert(w.eitherStridesOrDilationsAreOne(a,u),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${u}'`);let c=w.computePool2DInfo(n.shape,s,a,[1,1],i),l=t.makeOutput(c.outShape,n.dtype),m=t.makeOutput(c.outShape,\"int32\");return GM(t.dataIdMap.get(n.dataId).id,t.dataIdMap.get(l.dataId).id,t.dataIdMap.get(m.dataId).id,we[n.dtype],p,c.batchSize,c.inChannels,c.inHeight,c.inWidth,c.outHeight,c.outWidth,c.strideHeight,c.strideWidth,c.dilationHeight,c.dilationWidth,c.effectiveFilterHeight,c.effectiveFilterWidth,c.padInfo.top,c.padInfo.left),[l,m]}var HM={kernelName:ua,backendName:\"wasm\",setupFunc:wne,kernelFunc:Sne};var KM;function Ine(r){KM=r.wasm.cwrap(Un,null,[\"number, number, number\"])}function vne(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}=Tr(a,n,e),f=l;if(d){let S=e.dataIdMap.get(c.dataId).id;S!==i&&(u=c,p=S,f=w.getInnerMostAxes(f.length,u.shape.length))}w.assertAxesAreInnerMostDims(\"mean\",f,u.shape.length);let[h,g]=w.computeOutAndReduceShapes(u.shape,f),x=y.sizeFromShape(g),b=u;u.dtype!==\"float32\"&&(b=Mr({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 S=e.dataIdMap.get(C.dataId).id;KM(p,x,S)}if(d&&e.disposeData(c.dataId),s){let S=w.expandShapeToKeepDim(C.shape,m);C.shape=S}return u.dtype!==\"float32\"&&e.disposeData(b.dataId),C}var qM={kernelName:Un,backendName:\"wasm\",setupFunc:Ine,kernelFunc:vne};var jM;function kne(r){jM=r.wasm.cwrap(Gn,null,[\"number\",\"number\",\"number\",\"number\"])}function Nne(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}=Tr(a,n,e);if(d){let C=e.dataIdMap.get(c.dataId).id;C!==i&&(u=c,p=C)}let f=u.shape.length;w.assertAxesAreInnerMostDims(\"min\",l,f);let[h,g]=w.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;jM(p,we[a.dtype],x,C)}if(d&&e.disposeData(c.dataId),s){let C=w.expandShapeToKeepDim(b.shape,m);b.shape=C}return b}var XM={kernelName:Gn,backendName:\"wasm\",setupFunc:kne,kernelFunc:Nne};var Tne=!1,YM=Ge(Hn,Tne);var Lv;(function(r){r[r.reflect=0]=\"reflect\",r[r.symmetric=1]=\"symmetric\"})(Lv||(Lv={}));var QM;function _ne(r){QM=r.wasm.cwrap(Kn,null,[\"number\",\"array\",\"number\",\"number\",\"array\",\"array\",\"number\",\"number\"])}function Ene(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 QM(a,u,e.shape.length,we[e.dtype],m,d,Lv[n],p),i}var ZM={kernelName:Kn,backendName:\"wasm\",kernelFunc:Ene,setupFunc:_ne};var JM;function $ne(r){JM=r.wasm.cwrap(Is,null,[\"number\",\"number\",\"number\",\"number\"])}function Bv(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||JM(n,a,i,p),s}var eL={kernelName:Is,backendName:\"wasm\",setupFunc:$ne,kernelFunc:Bv};var tL;function Rne(r){tL=r.wasm.cwrap(jn,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function Dne(r){let{inputs:e,backend:t,attrs:o}=r,{logits:n}=e,{numSamples:s,seed:a,normalized:i}=o;if(n.dtype!==\"float32\")throw new Error(`Tensor logits must have dtype float32, got ${n.dtype}`);let p=i?n:Bv({inputs:{logits:n},backend:t,attrs:{dim:n.shape.length-1}}),[u,c]=p.shape,l=t.makeOutput([u,s],\"int32\");return tL(t.dataIdMap.get(p.dataId).id,u,c,s,a,t.dataIdMap.get(l.dataId).id),i||t.disposeData(p.dataId),l}var rL={kernelName:jn,backendName:\"wasm\",setupFunc:Rne,kernelFunc:Dne};var oL=Ge(qn,!0);var Ane=!0,nL=Ge(Xn,Ane);var sL=he(pa);function qc(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 aL;function Fne(r){aL=r.wasm.cwrap(Qn,\"number\",[\"number\",\"number\",\"number\",\"number\",\"number\"])}function Pne(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=aL(u,c,s,n,a),{pSelectedIndices:m,selectedSize:d,pSelectedScores:f,pValidOutputs:h}=qc(e,l);return e.wasm._free(f),e.wasm._free(h),e.makeOutput([d],\"int32\",m)}var iL={kernelName:Qn,backendName:\"wasm\",setupFunc:Fne,kernelFunc:Pne};var uL;function One(r){uL=r.wasm.cwrap(Qa,\"number\",[\"number\",\"number\",\"number\",\"number\",\"number\",\"bool\"])}function Mne(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=uL(c,l,s,n,a,i),{pSelectedIndices:d,selectedSize:f,pSelectedScores:h,pValidOutputs:g}=qc(e,m);e.wasm._free(h);let x=e.makeOutput([f],\"int32\",d),b=e.makeOutput([],\"int32\",g);return[x,b]}var pL={kernelName:Qa,backendName:\"wasm\",setupFunc:One,kernelFunc:Mne};var cL;function Lne(r){cL=r.wasm.cwrap(Zn,\"number\",[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function Bne(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=cL(c,l,s,n,a,i),{pSelectedIndices:d,selectedSize:f,pSelectedScores:h,pValidOutputs:g}=qc(e,m);e.wasm._free(g);let x=e.makeOutput([f],\"int32\",d),b=e.makeOutput([f],\"float32\",h);return[x,b]}var lL={kernelName:Zn,backendName:\"wasm\",setupFunc:Lne,kernelFunc:Bne};var zne=!1,mL=Ge(Yn,zne,\"bool\");var dL;function Vne(r){dL=r.wasm.cwrap(Jn,null,[\"number\",\"number\",\"number\",\"number\",\"number\"])}function Wne(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 dL(m,a,i,p,c),u}var fL={kernelName:Jn,backendName:\"wasm\",setupFunc:Vne,kernelFunc:Wne};function Une(r){let{inputs:{x:e},backend:t}=r,o=t.makeOutput(e.shape,e.dtype);return t.typedArrayFromHeap(o).fill(1),o}var hL={kernelName:ca,backendName:\"wasm\",kernelFunc:Une};function Gne(r){let{inputs:e,backend:t,attrs:o}=r,{axis:n}=o;if(e.length===1)return Lg({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=Lg({inputs:{input:c},backend:t,attrs:{dim:n}});return i.push(l),l}),u=Pv({inputs:p,backend:t,attrs:{axis:n}});return i.forEach(c=>t.disposeData(c.dataId)),u}var gL={kernelName:la,backendName:\"wasm\",kernelFunc:Gne};var xL;function Hne(r){xL=r.wasm.cwrap(es,null,[\"number\",\"array\",\"number\",\"number\",\"array\",\"array\",\"number\",\"number\"])}function Kne(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 Mv({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 xL(a,c,e.shape.length,we[e.dtype],d,f,n,u),i}var Bg={kernelName:es,backendName:\"wasm\",kernelFunc:Kne,setupFunc:Hne};var qne=!1,yL=Ge(ts,qne);var bL;function jne(r){bL=r.wasm.cwrap(rs,null,[\"number\",\"number\",\"number\"])}function Xne(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=Mr({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 bL(i,a,l),p.dtype!==\"float32\"&&t.disposeData(u.dataId),c}var CL={kernelName:rs,backendName:\"wasm\",setupFunc:jne,kernelFunc:Xne};var wL;function Yne(r){wL=r.wasm.cwrap(os,null,[\"number\",\"number\",\"number\",\"number\"])}function Qne(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}=Tr(a,n,e),f=l;if(d){let C=e.dataIdMap.get(c.dataId).id;C!==i&&(u=c,p=C,f=w.getInnerMostAxes(f.length,u.shape.length))}w.assertAxesAreInnerMostDims(\"prod\",f,u.shape.length);let[h,g]=w.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;wL(p,x,we[b.dtype],C)}if(d&&e.disposeData(c.dataId),s){let C=w.expandShapeToKeepDim(b.shape,m);b.shape=C}return b}var SL={kernelName:os,backendName:\"wasm\",setupFunc:Yne,kernelFunc:Qne};var Zne=r=>{let{backend:e,attrs:t}=r,{start:o,stop:n,step:s,dtype:a}=t,i=up(o,n,s,a),p=e.makeOutput([i.length],a);return e.typedArrayFromHeap(p).set(i),p},IL={kernelName:ma,backendName:\"wasm\",kernelFunc:Zne};var Jne=!0,vL=Ge(fn,Jne);var kL=he(ns);var NL=he(ss);var TL=he(us);var _L;function ese(r){_L=r.wasm.cwrap(is,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function tse(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=Mr({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 _L(x,c,l,m,d,p,u,s?1:0,a?1:0,C),g!=null&&e.disposeData(g.dataId),b}var EL={kernelName:is,backendName:\"wasm\",setupFunc:ese,kernelFunc:tse};var $L;function rse(r){$L=r.wasm.cwrap(Ja,null,[\"number\",\"number\",\"number\",\"array\",\"array\",\"boolean\"])}function ose(r){let{inputs:e,backend:t,attrs:o}=r,{images:n,dy:s}=e,{alignCorners:a}=o,i=t.makeOutput(n.shape,\"float32\"),p=t.dataIdMap.get(n.dataId),u;return p.dtype!==\"float32\"&&(u=Mr({backend:t,inputs:{x:n},attrs:{dtype:\"float32\"}}),p=t.dataIdMap.get(u.dataId)),$L(t.dataIdMap.get(n.dataId).id,t.dataIdMap.get(s.dataId).id,t.dataIdMap.get(i.dataId).id,new Uint8Array(new Int32Array(n.shape).buffer),new Uint8Array(new Int32Array(s.shape).buffer),a),u!=null&&t.disposeData(u.dataId),i}var RL={kernelName:Ja,backendName:\"wasm\",setupFunc:rse,kernelFunc:ose};var DL;function nse(r){DL=r.wasm.cwrap(as,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function sse(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=Mr({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 DL(b,c,l,m,d,p,u,s?1:0,a?1:0,C),x!=null&&e.disposeData(x.dataId),h}var AL={kernelName:as,backendName:\"wasm\",setupFunc:nse,kernelFunc:sse};var FL;function ase(r){FL=r.wasm.cwrap(Za,null,[\"number\",\"number\",\"number\",\"array\",\"array\",\"boolean\"])}function ise(r){let{inputs:e,backend:t,attrs:o}=r,{images:n,dy:s}=e,{alignCorners:a}=o,i=t.makeOutput(n.shape,\"float32\"),p=t.dataIdMap.get(n.dataId),u;return p.dtype!==\"float32\"&&(u=Mr({backend:t,inputs:{x:n},attrs:{dtype:\"float32\"}}),p=t.dataIdMap.get(u.dataId)),FL(t.dataIdMap.get(n.dataId).id,t.dataIdMap.get(s.dataId).id,t.dataIdMap.get(i.dataId).id,new Uint8Array(new Int32Array(n.shape).buffer),new Uint8Array(new Int32Array(s.shape).buffer),a),u!=null&&t.disposeData(u.dataId),i}var PL={kernelName:Za,backendName:\"wasm\",setupFunc:ase,kernelFunc:ise};var OL;function use(r){OL=r.wasm.cwrap(ps,null,[\"number\",\"array\",\"number\",\"array\",\"number\",\"number\"])}function pse(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 Np({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);OL(p,c,a.length,l,n.shape.length,u);let m=zt({inputs:{x:i},attrs:{shape:n.shape},backend:t});return t.disposeData(i.dataId),m}var ML={kernelName:ps,backendName:\"wasm\",kernelFunc:pse,setupFunc:use};var LL;function cse(r){LL=r.wasm.cwrap(Ds,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"array\",\"number\",\"number\"])}function lse(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]=w.getImageCenter(i,m,d),x=a===0,b=255,C=typeof a==\"number\"?[a,a,a,x?0:b]:[...a,b],S=new Uint8Array(new Int32Array(C).buffer);return LL(u,l,m,d,f,s,h,g,S,C.length,c),p}var BL={kernelName:Ds,backendName:\"wasm\",kernelFunc:lse,setupFunc:cse};var zL=he(cs);var VL=he(ls);var WL;function mse(r){WL=r.wasm.cwrap(ms,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"array\",\"number\",\"number\"])}function dse(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}=du.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 WL(f,g,we[s.dtype],p,u,c,x,m,b),i}var UL={kernelName:ms,backendName:\"wasm\",setupFunc:mse,kernelFunc:dse};var GL;function fse(r){GL=r.wasm.cwrap(fs,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"bool\",\"number\"])}function hse(r){let{inputs:e,backend:t,attrs:o}=r,{sortedSequence:n,values:s}=e,{side:a}=o;if(n.dtype!==s.dtype)throw new Error(`SearchSorted error: sorted_sequence must have the same dtype as values. Got ${n.dtype} and ${s.dtype}`);let i=t.makeOutput(s.shape,\"int32\");function p(u){return t.dataIdMap.get(u.dataId).id}return GL(p(n),p(s),n.shape[0],n.shape[1],s.shape[1],we[n.dtype],a===\"left\",p(i)),i}var HL={kernelName:fs,backendName:\"wasm\",setupFunc:fse,kernelFunc:hse};var KL;function gse(r){KL=r.wasm.cwrap(\"SelectV2\",null,[\"number\",\"number\",\"number\",\"number\",\"number\"])}function xse(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 KL(a,i,p,d,c),u}var qL={kernelName:fa,backendName:\"wasm\",kernelFunc:xse,setupFunc:gse};var jL=he(hs);var XL;function yse(r){XL=r.wasm.cwrap(bs,null,[\"number\",\"number\"])}function bse(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||XL(o,s),n}var YL={kernelName:\"Sigmoid\",backendName:\"wasm\",setupFunc:yse,kernelFunc:bse};var QL=he(ys);var ZL=he(gs);var JL=he(xs);var eB=he(Cs);function Cse(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(w.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;aB(m,we[n.dtype],n.shape[0],d,f,g,b,e,0);let C=t.readSync(x.dataId),S;switch(C[0]){case 0:{S=w.getSparseSegmentReductionNegativeSegmentIdsErrorMessage();break}case 1:{S=w.getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage();break}case 2:S=w.getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage(C[1],C[2]);break;case 3:S=w.getSparseSegmentReductionIndicesOutOfRangeErrorMessage(C[1],C[2],C[3]);break;default:S=\"\"}if(t.disposeData(x.dataId),S)throw t.disposeData(h.dataId),new Error(S);return h}function kse(r){return Vg(r,!0)}var iB={kernelName:ya,backendName:\"wasm\",setupFunc:zg,kernelFunc:kse};function Nse(r){return Vg(r,!1)}var uB={kernelName:ba,backendName:\"wasm\",setupFunc:zg,kernelFunc:Nse};var pB;function Tse(r){pB=r.wasm.cwrap(vs,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"array\",\"number\",\"number\"])}function _se(r){let{backend:e,inputs:t,attrs:o}=r,{sparseIndices:n,sparseValues:s,defaultValue:a}=t,{outputShape:i}=o,p=e.makeOutput(i,a.dtype);if(y.sizeFromShape(i)===0)return p;let{sliceRank:u,numUpdates:c,sliceSize:l,strides:m,outputSize:d}=w.calculateShapes(s,n,i),f=e.dataIdMap.get(n.dataId).id,h=e.dataIdMap.get(s.dataId).id,g=e.dataIdMap.get(a.dataId).id,x=new Uint8Array(new Int32Array(m).buffer),b=e.dataIdMap.get(p.dataId).id;return pB(f,h,s.shape.length,g,we[a.dtype],u,c,l,x,d,b),p}var cB={kernelName:vs,backendName:\"wasm\",setupFunc:Tse,kernelFunc:_se};function Ese(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=w.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=Po({inputs:{x:n},attrs:{begin:u,size:m},backend:o});return u[i]+=l,d})}var lB={kernelName:xa,backendName:\"wasm\",kernelFunc:Ese};var mB=he(ws);var dB=he(qi);var $se=!0,fB=Ge(ks,$se);var hB;function Rse(r){hB=r.wasm.cwrap(wo,null,[\"number\",\"number\",\"number\",\"number\"])}function Dse(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 hB(a,n,we[s.dtype],p),i}var gB={kernelName:wo,backendName:\"wasm\",setupFunc:Rse,kernelFunc:Dse};var xB;function Ase(r){xB=r.wasm.cwrap(Ns,null,[\"number\",\"array\",\"number\",\"array\",\"array\",\"array\",\"array\",\"array\",\"number\",\"number\"])}function Fse(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:S}=pt.sliceInfo(n.shape,s,a,i,p,u,c,l,m),k;if(h)k=zt({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 _=pt.computeOutShape(b,C,S),$=Po({inputs:{x:n},backend:e,attrs:{begin:b,size:_}});k=zt({inputs:{x:$},backend:e,attrs:{shape:f}}),e.disposeData($.dataId)}else{let _=e.makeOutput(d,\"float32\"),$=e.dataIdMap.get(n.dataId).id,R=new Uint8Array(new Int32Array(y.computeStrides(n.shape)).buffer),D=new Uint8Array(new Int32Array(b).buffer),P=new Uint8Array(new Int32Array(C).buffer),O=new Uint8Array(new Int32Array(S).buffer),M=new Uint8Array(new Int32Array(d).buffer),L=new Uint8Array(new Int32Array(y.computeStrides(d)).buffer),B=e.dataIdMap.get(_.dataId).id;xB($,R,n.shape.length,D,P,O,M,L,d.length,B),k=zt({inputs:{x:_},backend:e,attrs:{shape:f}}),e.disposeData(_.dataId)}return k}var yB={kernelName:Ns,backendName:\"wasm\",setupFunc:Ase,kernelFunc:Fse};function Pse(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]=cp(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 bB={kernelName:Ca,backendName:\"wasm\",kernelFunc:Pse};function Ose(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]=lp(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 CB={kernelName:ji,backendName:\"wasm\",kernelFunc:Ose};function Mse(r){let{backend:e,inputs:t,attrs:o}=r,{input:n}=t,{numBuckets:s}=o,a=e.readSync(n.dataId),i=mp(a,s),p=e.makeOutput(n.shape,\"int32\");return e.typedArrayFromHeap(p).set(i),p}var wB={kernelName:Xi,backendName:\"wasm\",kernelFunc:Mse};var Lse=!0,SB=Ge(Ts,Lse);var IB;function Bse(r){IB=r.wasm.cwrap(Ss,null,[\"number\",\"number\",\"number\",\"number\"])}function zse(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}=Tr(a,n,e),f=l;if(d){let C=e.dataIdMap.get(c.dataId).id;C!==i&&(u=c,p=C,f=w.getInnerMostAxes(f.length,u.shape.length))}w.assertAxesAreInnerMostDims(\"sum\",f,u.shape.length);let[h,g]=w.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;IB(p,x,we[b.dtype],C)}if(d&&e.disposeData(c.dataId),s){let C=w.expandShapeToKeepDim(b.shape,m);b.shape=C}return b}var vB={kernelName:Ss,backendName:\"wasm\",setupFunc:Bse,kernelFunc:zse};var kB=he(_s);var NB=he(Es);var TB;function Vse(r){TB=r.wasm.cwrap(ds,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"array\",\"number\",\"number\",\"number\"])}function Wse(r){let{backend:e,inputs:t,attrs:o}=r,{tensor:n,indices:s,updates:a}=t,{}=o,i=e.makeOutput(n.shape,n.dtype);if(y.sizeFromShape(n.shape)===0)return i;let{sliceRank:p,numUpdates:u,sliceSize:c,strides:l,outputSize:m}=du.calculateShapes(a,s,n.shape),f=e.dataIdMap.get(s.dataId).id,g=e.dataIdMap.get(a.dataId).id,b=e.dataIdMap.get(n.dataId).id,C=new Uint8Array(new Int32Array(l).buffer),S=e.dataIdMap.get(i.dataId).id;return TB(f,g,we[a.dtype],p,u,c,C,m,S,b),i}var _B={kernelName:ds,backendName:\"wasm\",setupFunc:Vse,kernelFunc:Wse};var EB;function Use(r){EB=r.wasm.cwrap(po,null,[\"number\",\"array\",\"number\",\"array\",\"number\",\"number\"])}function Gse(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 RB(a,i,o.shape.length,we[o.dtype],n,s,c,m),[u,l]},DB={kernelName:$s,backendName:\"wasm\",setupFunc:Hse,kernelFunc:Kse};var AB;function qse(r){AB=r.wasm.cwrap(Rs,null,[\"number\",\"number\",\"bool\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"array\",\"number\",\"array\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function jse(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),S=e.dataIdMap.get(C.dataId).id,_=e.dataIdMap.get(n.dataId).id,R=e.dataIdMap.get(s.dataId).id,D=a===\"nearest\"?1:2,P;switch(i){case\"constant\":P=1;break;case\"reflect\":P=2;break;case\"wrap\":P=3;break;case\"nearest\":P=4;break;default:P=1;break}return AB(_,R,s.shape[0]>1,c,f,h,d,m,l,x,n.shape.length-1,b,g.length-1,D,P,p,S),C}var FB={kernelName:Rs,backendName:\"wasm\",setupFunc:qse,kernelFunc:jse};function Xse(r){let{inputs:e,attrs:t,backend:o}=r,{axis:n}=t,{x:s}=e,{outputValues:a,outputShape:i,indices:p}=dp(o.readSync(s.dataId),n,s.shape,s.dtype);return[o.makeOutput(i,s.dtype,void 0,a),o.makeOutput([p.length],\"int32\",void 0,p)]}var PB={kernelName:Yi,backendName:\"wasm\",kernelFunc:Xse};function Yse(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 OB={kernelName:wa,backendName:\"wasm\",kernelFunc:Yse};function Qse(r){let{inputs:{x:e},backend:t}=r,o=t.makeOutput(e.shape,e.dtype);return t.typedArrayFromHeap(o).fill(0),o}var MB={kernelName:Sa,backendName:\"wasm\",kernelFunc:Qse};var Zse=[SP,IP,vP,kP,NP,_P,AP,PP,OP,MP,LP,BP,zP,VP,WP,GP,YP,KP,jP,JP,tO,oO,nO,sO,aO,iO,pO,cO,mO,fO,gO,yO,CO,wO,SO,vO,NO,_O,$O,DO,FO,OO,LO,zO,WO,UO,HO,KO,qO,jO,XO,YO,QO,JO,eM,tM,oM,sM,iM,pM,lM,mM,dM,EP,fM,hM,gM,yM,bM,CM,SM,vM,IM,kM,NM,TM,_M,$M,DM,FM,PM,MM,BM,VM,UM,HM,qM,XM,YM,ZM,rL,oL,nL,sL,iL,pL,lL,mL,fL,hL,gL,Bg,yL,CL,SL,IL,vL,kL,NL,TL,QP,EL,RL,AL,PL,ML,BL,zL,VL,UL,HL,qL,jL,YL,QL,ZL,JL,eO,eL,eB,tB,oB,sB,iB,uB,cB,lB,mB,dB,fB,gB,yB,bB,CB,wB,SB,vB,kB,NB,_B,$B,DB,FB,RP,PB,OB,MB];for(let r of Zse)ti(r);var zv=A();zv.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}});zv.registerFlag(\"WASM_HAS_MULTITHREAD_SUPPORT\",async()=>{if(zv.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 jv=zp(VB()),qB=zp(UB()),Xv=zp(GB());var HB=jv.default||jv,Jse=Xv.default||Xv,pm=class extends ao{constructor(e){super(),this.wasm=e,this.dataIdNextNumber=1,this.wasm.tfjs.initWithThreadsCount(XB),qv=this.wasm.tfjs.getThreadsCount(),this.dataIdMap=new Bo(this,ur())}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)>>>0;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 tae(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,n){let s;if(o==null)s=this.write(n!=null?n:null,e,t);else{let a=this.dataIdNextNumber++;s={id:a},this.dataIdMap.set(s,{id:a,memoryOffset:o,shape:e,dtype:t,refCount:1});let i=y.sizeFromShape(e);this.wasm.tfjs.registerTensor(a,i,o)}return{dataId:s,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 eae(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 KB(r,e,t){if(Gg!=null)return Gg;let o=\"tfjs-backend-wasm.wasm\";return r&&e?o=\"tfjs-backend-wasm-threaded-simd.wasm\":r&&(o=\"tfjs-backend-wasm-simd.wasm\"),im!=null&&im[o]!=null?im[o]:t+o}async function jB(){let[r,e]=await Promise.all([A().getAsync(\"WASM_HAS_SIMD_SUPPORT\"),A().getAsync(\"WASM_HAS_MULTITHREAD_SUPPORT\")]);return new Promise((t,o)=>{let n={};n.locateFile=(i,p)=>{if(i.endsWith(\".worker.js\")){let u=qB.wasmWorkerContents.replace(/\\n/g,\"\\\\n\"),c=new Blob([u],{type:\"application/javascript\"});return URL.createObjectURL(c)}return i.endsWith(\".wasm\")?KB(r,e,am!=null?am:p):p+i},Yv&&(n.instantiateWasm=eae(KB(r,e,am!=null?am:\"\")));let s=!1;n.onAbort=()=>{if(s||um)return;um=!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&&Gg==null?(n.mainScriptUrlOrBlob=new Blob([\"var WasmBackendModuleThreadedSimd = \"+HB.toString()],{type:\"text/javascript\"}),a=HB(n)):a=Jse(n),a.then(i=>{s=!0,um=!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 tae(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 rae=[\"tfjs-backend-wasm.wasm\",\"tfjs-backend-wasm-simd.wasm\",\"tfjs-backend-wasm-threaded-simd.wasm\"],Gg=null,am=null,im={},um=!1,Yv=!1;function oae(r,e=!1){if(Tw(\"setWasmPath has been deprecated in favor of setWasmPaths and will be removed in a future release.\"),um)throw new Error(\"The WASM backend was already initialized. Make sure you call `setWasmPath()` before you call `tf.setBackend()` or `tf.ready()`\");Gg=r,Yv=e}function nae(r,e=!1){if(um)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\")am=r;else{im=r;let t=rae.filter(o=>im[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.`)}Yv=e}var XB=-1,qv=-1;function sae(r){XB=r}function aae(){if(qv===-1)throw new Error(\"WASM backend not initialized.\");return qv}var iae=\"4.21.0\";var uae=2;tu(\"wasm\",async()=>{let{wasm:r}=await jB();return new pm(r)},uae);var go=A();go.registerFlag(\"WEBGPU_DEFERRED_SUBMIT_BATCH_SIZE\",()=>15);go.registerFlag(\"WEBGPU_CPU_FORWARD\",()=>!0);go.registerFlag(\"WEBGPU_MATMUL_PROGRAM_TYPE\",()=>-1);go.registerFlag(\"WEBGPU_USE_NAIVE_CONV2D_TRANSPOSE\",()=>!0);go.registerFlag(\"WEBGPU_USE_LOW_POWER_GPU\",()=>!1);go.registerFlag(\"WEBGPU_CPU_HANDOFF_SIZE_THRESHOLD\",()=>1e3);go.registerFlag(\"WEBGPU_USE_PROFILE_TOOL\",()=>!1);go.registerFlag(\"WEBGPU_IMPORT_EXTERNAL_TEXTURE\",()=>!0);go.registerFlag(\"WEBGPU_USE_NAIVE_CONV2D_DEBUG\",()=>!1);go.registerFlag(\"WEBGPU_THRESHOLD_TO_INCREASE_WORKGROUPS_FOR_MATMUL\",()=>-1);go.registerFlag(\"WEBGPU_CONV_SEPARATE_IM2COL_SHADER\",()=>!1);go.registerFlag(\"WEBGPU_PRINT_SHADER\",()=>\"\");go.registerFlag(\"WEBGPU_ENGINE_COMPILE_ONLY\",()=>!1);var Hg=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 Kg=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}acquireBuffer(e,t,o=!1,n=!0){let s,a=YB(e,t);return n?(this.freeBuffers.has(a)||this.freeBuffers.set(a,[]),this.freeBuffers.get(a).length>0?(s=this.freeBuffers.get(a).pop(),this.numFreeBuffers--):(s=this.device.createBuffer({size:e,usage:t,mappedAtCreation:o}),this.numBytesAllocated+=e)):(s=this.device.createBuffer({size:e,usage:t,mappedAtCreation:o}),this.numBytesAllocated+=e),this.usedBuffers.has(a)||this.usedBuffers.set(a,[]),this.usedBuffers.get(a).push(s),this.numUsedBuffers++,this.numBytesUsed+=e,s}releaseBuffer(e,t=!0){if(this.freeBuffers.size===0)return;let o=e.size,n=e.usage,s=YB(o,n),a=this.usedBuffers.get(s),i=a.indexOf(e);if(i<0)throw new Error(\"Cannot find the buffer in buffer manager\");a[i]=a[a.length-1],a.pop(),this.numUsedBuffers--,this.numBytesUsed-=o,t?(this.freeBuffers.get(s).push(e),this.numFreeBuffers++):(e.destroy(),this.numBytesAllocated-=o)}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 YB(r,e){return`${r}_${e}`}var qg=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=ZB(o),a=e*t*s,i=QB(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){if(this.freeTextures.size===0)return;let t=e.width,o=e.height,n=e.format,s=e.usage,a=QB(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=ZB(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 QB(r,e,t,o){return`${r}_${e}_${t}_${o}`}function ZB(r){if(r===\"rgba8unorm\")return 16;throw new Error(`${r} is not supported!`)}function JB(r,e){if(Math.max(...r)>5)throw new Error(\"Cannot symbolically compute strides for rank > 6 tensor.\");let t=r.length,o=\"xyzwuv\",n=r.map(a=>`${e}.${o[a]}`),s=new Array(t-1);s[t-2]=n[t-1];for(let a=t-3;a>=0;--a)s[a]=`(${s[a+1]} * ${n[a+1]})`;return s}var Qr=(r,e,t)=>t===\"int32\"?`atomicAdd(${r}, bitcast(${e}));`:`\n {\n var oldValue = 0;\n loop {\n let newValueF32 = bitcast(oldValue) + (${e});\n let newValue = bitcast(newValueF32);\n let res = atomicCompareExchangeWeak(${r}, oldValue, newValue);\n if res.exchanged {\n break;\n }\n oldValue = res.old_value;\n }\n }`;var wi;(function(r){r[r.FROM_PIXELS=0]=\"FROM_PIXELS\",r[r.DRAW=1]=\"DRAW\"})(wi||(wi={}));var oz=(r,e,t,o,n)=>{let s={dtype:o.dtype,shape:o.shape},a=cae(t,s,e),i=r.createShaderModule({code:a,label:e.constructor.name}),p=A().get(\"WEBGPU_PRINT_SHADER\");if(p!==\"\"){p=p.toLowerCase();let u=p.split(\",\");(p===\"all\"||u.some(c=>e.shaderKey.toLowerCase().includes(c)))&&(console.group(e.shaderKey),console.debug(a),console.groupEnd())}return n?r.createComputePipelineAsync({compute:{module:i,entryPoint:\"_start\"},label:e.constructor.name,layout:\"auto\"}):r.createComputePipeline({compute:{module:i,entryPoint:\"_start\"},label:e.constructor.name,layout:\"auto\"})},Ae=(r,e=\"f32\")=>{switch(r){case 1:return`${e}`;case 2:return`vec2<${e}>`;case 3:return`vec3<${e}>`;case 4:return`vec4<${e}>`;default:throw new Error(`${r}-component ${e} is not supported.`)}};function ft(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 Oo(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 G(...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 ez(r,e){let t;return t=`\n ${pae(e)}\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 `,t}function pae(r){return`\n @compute @workgroup_size(${r.workgroupSize[0]}, ${r.workgroupSize[1]}, ${r.workgroupSize[2]})\n`}function cae(r,e,t){let o=[],n=t.workgroupSize[0]*t.workgroupSize[1]*t.workgroupSize[2];if(t.outputComponent=t.outputComponent?t.outputComponent:1,o.push(`\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 ${sz(t)?\" return i32(globalId.x);\":` return i32((workgroupId.z * numWorkgroups.x * numWorkgroups.y +\n workgroupId.y * numWorkgroups.x + workgroupId.x) * ${n}u +\n localIndex);\n `}\n }\n `),t.pixelsOpType!=null){let f=t.pixelsOpType===wi.FROM_PIXELS?`@group(0) @binding(0) var result: array<${Su(e.dtype,t.outputComponent)}>;`:`@group(0) @binding(1) var inBuf : array<${Su(r[0].dtype,t.outputComponent)}>;`,h=e.shape.length===3?\"vec2\":\"i32\";o.push(`\n struct Uniform {\n outShapeStrides : ${h},\n size : i32,\n numChannels : i32,\n alpha : f32,\n };\n\n ${f}\n @group(0) @binding(2) var uniforms: Uniform;\n `);let g=rz(t);return[tz,o.join(`\n`),cm(e.shape),t.getUserCode(),ez(g,t)].join(`\n`)}let s,a,i=\"struct Uniforms { NAN : f32, INFINITY : f32, \";t.variableNames.forEach((f,h)=>{let g=ft(r[h].shape.length);i+=`${f.charAt(0).toLowerCase()+f.slice(1)}Shape : ${g}, `,s=r[h].shape.length-1,a=ft(s),i+=`${f.charAt(0).toLowerCase()+f.slice(1)}ShapeStrides: ${a}, `});let p=ft(e.shape.length);i+=`outShape : ${p}, `,s=e.shape.length-1,a=ft(s),i+=`\n outShapeStrides: ${a}, `,t.size&&(i+=\"size : i32, \"),t.uniforms&&(i+=t.uniforms),i+=\"};\",i=yae(i),o.push(i),t.atomic?o.push(`\n @group(0) @binding(0) var result: array>;\n `):o.push(`\n @group(0) @binding(0) var result: array<${Su(e.dtype,t.outputComponent)}>;\n `),t.variableNames.forEach((f,h)=>{o.push(`\n @group(0) @binding(${1+h}) var ${f}: array<${t.variableComponents?Su(r[h].dtype,t.variableComponents[h]):Su(r[h].dtype,t.outputComponent)}>;\n `)}),i!==\"\"&&o.push(`\n @group(0) @binding(${1+t.variableNames.length}) var uniforms: Uniforms;\n `);let u=hae(e.shape,t.dispatchLayout),c=[tz,o.join(`\n`)+lae,cm(e.shape),u,gae(e.shape.length)];t.atomic||c.push(xae(e.shape,e.dtype,t.outputComponent)),t.variableNames.forEach((f,h)=>{c.push(`${cm(r[h].shape,f)}`)});let l=r.map((f,h)=>fae(f,e.shape,t.variableComponents?t.variableComponents[h]:t.outputComponent,t.dispatchLayout.x.length===e.shape.length)).join(`\n`);c.push(l),c.push(t.getUserCode());let m=rz(t);return c.push(ez(m,t)),c.join(`\n`)}function nz(r,e,t){let o=r.shaderKey;if(r.pixelsOpType!=null)return o;let n=[],s=[];e.forEach(c=>{n.push(c.shape),s.push(c.dtype)}),n.push(t.shape),s.push(t.dtype);let a=e.map(c=>w.getBroadcastDims(c.shape,t.shape)),i=e.map(c=>y.arraysEqual(c.shape,t.shape)).join(\"_\"),p=a.map(c=>c.join(\"_\")).join(\";\"),u=sz(r)?\"flatDispatch\":\"\";return o+=\"_\"+(r.workgroupSize?r.workgroupSize.join(\",\"):\"\")+n.map(c=>c.length).join(\",\")+s.join(\",\")+r.variableNames.join(\",\")+p+i+u,o}var tz=`\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 // 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 let floatToUint: vec4 = bitcast>(val);\n return (floatToUint & vec4(0x7fffffffu)) > vec4(0x7f800000u);\n }\n`,lae=`\n fn isinf(val: f32) -> bool {\n return abs(val) == uniforms.INFINITY;\n }\n`;function cm(r,e=\"\"){let t=r.length,o=e!==\"\"?`get${e.charAt(0).toUpperCase()+e.slice(1)}CoordsFromIndex`:\"getCoordsFromIndex\",n=e!==\"\"?`${e.charAt(0).toLowerCase()+e.slice(1)}ShapeStrides`:\"outShapeStrides\";if(t<=1)return`fn ${o}(index : i32) -> i32 { return index; }`;let s=y.computeStrides(r),a=ft(t),i=[];for(let u=0;u vec2 {\n let d0 = index / uniforms.${n}; let d1 = index - d0 * uniforms.${n};\n return vec2(d0, d1);\n }`;let p;return p=\"var index2 = index;\"+s.map((u,c)=>{let l=`let ${i[c]} = index2 / uniforms.${n}.${Oo(c)}`,m=c===s.length-1?`let ${i[c+1]} = index2 - ${i[c]} * uniforms.${n}.${Oo(c)}`:`index2 = index2 - ${i[c]} * uniforms.${n}.${Oo(c)}`;return`${l}; ${m};`}).join(\"\"),`\n fn ${o}(index : i32) -> ${a} {\n ${p}\n return ${a}(${i.join(\",\")});\n }\n `}function mae(r,e){let t=r.name,o=r.shape.length,n=ft(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`\n fn ${s}() -> ${Ae(e)} {\n return ${Ae(e)}(${t}[0]);\n }\n `;let p=`uniforms.${t.charAt(0).toLowerCase()+t.slice(1)}Shape`,u=`${o}D`;return o===0&&(u=\"1D\"),`\n fn ${s}(${i}) -> ${Ae(e)} {\n return ${Ae(e)}(${t}[getIndexFromCoords${u}(${n}(${a.join(\",\")}),\n ${p})${e===1?\"\":` / ${e}`}]);\n }\n `}function dae(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=ft(p);if(y.arraysEqual(r.shape,e)&&o)return`\n fn ${a}Index(globalIndex : i32) -> ${Ae(t)} {\n return ${Ae(t)}(${n}[globalIndex]);\n }\n\n fn ${a}Coords(coords : ${u}) -> ${Ae(t)} {\n return ${Ae(t)}(${n}[${p>1?\"getOutputIndexFromCoords(coords)\":\"coords\"}${t===1?\"\":` / ${t}`}]);\n }\n `;let c=w.getBroadcastDims(r.shape,e),l=p-i,m=\"\";if(i===0)return`\n fn ${a}Index(globalIndex : i32) -> ${Ae(t)}{\n return get${s}();\n }\n\n fn ${a}Coords(coords : ${u}) -> ${Ae(t)}{\n return get${s}();\n }\n `;p<2&&c.length>=1?m=\"coords = 0;\":m=c.map(g=>`coords.${Oo(g+l)} = 0;`).join(`\n`);let d=\"\";if(p<2&&i>0)d=\"coords\";else if(p>1){let g=ft(i),x=r.shape.map((b,C)=>`coords.${Oo(C+l)}`).join(\", \");d=`${g}(${x})`}else d=\"coords\";let f=`uniforms.${n.charAt(0).toLowerCase()+n.slice(1)}Shape`,h=`${i}D`;return`\n fn ${a}Index(globalIndex : i32) -> ${Ae(t)} {\n var coords = getCoordsFromIndex(globalIndex);\n ${m}\n return ${Ae(t)}(${n}[getIndexFromCoords${h}(${d}, ${f})${t===1?\"\":` / ${t}`}]);\n }\n\n fn ${a}Coords(coordsIn : ${u}) -> ${Ae(t)} {\n var coords = coordsIn;\n ${m}\n return ${Ae(t)}(${n}[getIndexFromCoords${h}(${d}, ${f})${t===1?\"\":` / ${t}`}]);\n }\n`}function fae(r,e,t,o){let n=mae(r,t);return r.shape.length<=e.length&&(n+=dae(r,e,t,o)),n}function hae(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() -> ${ft(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 gae(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 sz(r){return r.dispatch[1]===1&&r.dispatch[2]===1}function Su(r,e=1){if(r===\"float32\")return Ae(e,\"f32\");if(r===\"int32\"||r===\"bool\")return Ae(e,\"i32\");throw new Error(`type ${r} is not supported.`)}function xae(r,e,t){let o=r.length,n=Su(e,t),s=`fn setOutputAtIndex(flatIndex : i32, value : ${Ae(t)}) {\n result[flatIndex] = ${n}(value);\n }\n\n fn setOutputAtIndexI32(flatIndex : i32, value : ${Ae(t,\"i32\")}) {\n result[flatIndex] = ${n}(value);\n }\n `;if(o>=2){let a=[\"d0\",\"d1\",\"d2\",\"d3\",\"d4\",\"d5\"].slice(0,o),i=ft(o);s+=`\n fn setOutputAtCoords(${a.map(p=>`${p} : i32`).join(\", \")}, value : ${Ae(t)}) {\n let flatIndex = getOutputIndexFromCoords(${i}(${a.join(\", \")}));\n setOutputAtIndex(flatIndex${t===1?\"\":` / ${t}`}, value);\n }\n fn setOutputAtCoordsI32(${a.map(p=>`${p} : i32`).join(\", \")}, value : ${Ae(t,\"i32\")}) {\n let flatIndex = getOutputIndexFromCoords(${i}(${a.join(\", \")}));\n setOutputAtIndexI32(flatIndex${t===1?\"\":` / ${t}`}, value);\n }\n `}return s}function yae(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 rz(r){return!(r.dispatchLayout.hasOwnProperty(\"y\")&&r.dispatchLayout.y.length!==0||r.dispatchLayout.hasOwnProperty(\"z\")&&r.dispatchLayout.z.length!==0)}var Zv={};qe(Zv,{GPUBytesPerElement:()=>jg,MatMulProgramType:()=>Mo,assertNotComplex:()=>fm,computeDispatch:()=>H,computeWorkPerThreadForConv2d:()=>mm,computeWorkgroupInfoForMatMul:()=>Qv,computeWorkgroupSizeForConv2d:()=>lm,flatDispatchLayout:()=>X,isWebGPUSupported:()=>dm,tilesFitEvenlyIntoShape:()=>Cae});var Tp=r=>{let e=1;for(let t=0;tt%r[o]===0)}function H(r,e,t=[1,1,1],o=[1,1,1]){let[n,s,a]=[Math.ceil(Tp(r.x.map(i=>e[i]))/(t[0]*o[0])),r.y?Math.ceil(Tp(r.y.map(i=>e[i]))/(t[1]*o[1])):1,r.z?Math.ceil(Tp(r.z.map(i=>e[i]))/(t[2]*o[2])):1];return[n,s,a]}function Qv(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 lm(r,e,t=!1){if(t)return[8,8,1];let o=Tp(r.x.map(s=>e[s])),n=Tp(r.y.map(s=>e[s]));return o<=4?[4,16,1]:n<=4?[16,4,1]:[16,16,1]}function mm(r,e,t=!1){if(t)return[4,4,1];let o=Tp(r.x.map(s=>e[s])),n=Tp(r.y.map(s=>e[s]));return o<=4?[1,2,1]:n<=4?[2,1,1]:[2,2,1]}function X(r){return{x:r.map((e,t)=>t)}}function jg(r){if(r===\"float32\"||r===\"int32\"||r===\"bool\"||r===\"string\")return 4;if(r===\"complex64\")return 8;throw new Error(`Unknown dtype ${r}`)}function dm(){return!!(typeof globalThis!=\"undefined\"&&globalThis.navigator&&globalThis.navigator.gpu)}function fm(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 WebGPU backend.`)})}var Mo;(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\"})(Mo||(Mo={}));var wae=A().getNumber(\"WEBGPU_CPU_HANDOFF_SIZE_THRESHOLD\"),Sae=(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]},jc=class r extends ao{nextDataId(){return r.nextDataId++}constructor(e,t){if(super(),this.commandQueueOwnedIds=new WeakSet,this.dispatchCountInPass=0,this.disposed=!1,this.downloadWaitMs=0,this.tensorDataPendingDisposal=[],this.queryResolveBuffer=null,this.querySet=null,this.querySetCount=2,this.stagingPendingDisposal=[],this.uniformPendingDisposal=[],this.uploadWaitMs=0,this.hasReadSyncWarned=!1,this.hasTimestampQueryWarned=!1,!dm())throw new Error(\"WebGPU is not supported on this device\");this.pipelineCache={},this.device=e,this.queue=e.queue,this.commandEncoder=null,this.computePassEncoder=null,this.adapterInfo=new Hg(t),this.supportTimestampQuery=this.device.features.has(\"timestamp-query\"),this.thresholdToIncreaseWorkgroups=this.adapterInfo.intelGPUGeneration>=12?16:8,this.bufferManager=new Kg(this.device),this.textureManager=new qg(this.device),this.tensorMap=new Bo(this,ur()),A().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))}floatPrecision(){return 32}disposeData(e,t=!1){if(!this.tensorMap.has(e))return!0;let o=this.tensorMap.get(e);return t?o.refCount=0:o.refCount--,o.refCount>0?!1:(o.complexTensorInfos!=null&&(this.disposeData(o.complexTensorInfos.real.dataId),this.disposeData(o.complexTensorInfos.imag.dataId)),this.commandQueueOwnedIds.has(e)?(this.tensorDataPendingDisposal.push(e),!0):(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.resource)){if(t.external){t.resource=null;return}t.resource instanceof GPUBuffer?this.bufferManager.releaseBuffer(t.resource):t.resource instanceof GPUTexture&&this.textureManager.releaseTexture(t.resource),t.resource=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.queue.submit([this.commandEncoder.finish()]),this.commandEncoder=null,this.dispatchCountInPass=0,this.commandQueueOwnedIds=new WeakSet,this.tensorDataPendingDisposal.forEach(e=>{this.releaseResource(e),this.tensorMap.delete(e)}),this.uniformPendingDisposal.forEach(e=>this.bufferManager.releaseBuffer(e)),this.stagingPendingDisposal.forEach(e=>this.bufferManager.releaseBuffer(e,!1)),this.tensorDataPendingDisposal=[],this.uniformPendingDisposal=[],this.stagingPendingDisposal=[]}ensureCommandEncoderReady(){this.commandEncoder||(this.commandEncoder=this.device.createCommandEncoder())}endComputePassEncoder(){this.computePassEncoder&&(this.computePassEncoder.end(),this.computePassEncoder=null)}async checkCompileCompletionAsync(){let e;try{e=await Promise.all(Object.values(this.pipelineCache))}catch(t){throw new Error(t.message)}Object.keys(this.pipelineCache).map((t,o)=>{this.pipelineCache[t]=e[o]})}async getBufferData(e){if(A().getBool(\"WEBGPU_ENGINE_COMPILE_ONLY\"))return console.warn(\"The data may be invalid since WEBGPU_ENGINE_COMPILE_ONLY is true, this can only be called when WEBGPU_ENGINE_COMPILE_ONLY is false\"),null;let t=e.size,o=this.bufferManager.acquireBuffer(t,GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ);this.ensureCommandEncoderReady(),this.endComputePassEncoder(),this.commandEncoder.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),A().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 o.values=t,o.values}readSync(e){let t=this.tensorMap.get(e),{values:o,complexTensorInfos:n}=t;if(o!=null||t.dtype===\"string\")return o;if(t.dtype===\"complex64\"){let h=this.readSync(n.real.dataId),g=this.readSync(n.imag.dataId),x=y.convertBackendValuesAndArrayBuffer(w.mergeRealAndImagArrays(h,g).buffer,\"float32\");return this.convertAndCacheOnCPU(e,x),x}this.hasReadSyncWarned||(this.hasReadSyncWarned=!0,console.warn(\"The performance of synchronously reading data from GPU to CPU is poor on the webgpu backend, please use asynchronous APIs instead.\"));let s=[\"opaque\",\"premultiplied\"],a=t.resource,i=a.size;y.assert(i%4===0,()=>\"Because there is 4 bytes for one pixel, buffer size must be multiple of 4.\");let p=i/4,u=new ArrayBuffer(i),c=256,l=256,m=s.map(h=>new OffscreenCanvas(c,l)),d=new OffscreenCanvas(c,l);this.endComputePassEncoder(),m.map((h,g)=>{let x=h.getContext(\"webgpu\");return x.configure({device:this.device,format:\"bgra8unorm\",usage:GPUTextureUsage.COPY_DST,alphaMode:s[g]}),x.getCurrentTexture()}).map((h,g)=>{let x=c*4,b=(R,D,P)=>{this.ensureCommandEncoderReady(),this.commandEncoder.copyBufferToTexture({buffer:a,bytesPerRow:x,offset:P},{texture:h},{width:R,height:D}),this.submitQueue();let O=d.getContext(\"2d\",{willReadFrequently:!0});O.clearRect(0,0,R,D),O.drawImage(m[g],0,0);let M=O.getImageData(0,0,R,D).data,L=s[g],B=new Uint8ClampedArray(u,P,R*D*4);for(let z=0;z0&&(b(S,k,_),_+=k*(c*4)),S=$%c,S>0&&b(S,1,_)});let f=y.convertBackendValuesAndArrayBuffer(u,t.dtype);return this.convertAndCacheOnCPU(e,f),f}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 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=w.mergeRealAndImagArrays(a,i)}else{let s=await this.getBufferData(t.resource);n=y.convertBackendValuesAndArrayBuffer(s,t.dtype)}return this.convertAndCacheOnCPU(e,n),n}copyBuffer(e){let t=e.size,o=e.usage,n=this.bufferManager.acquireBuffer(t,o);return this.ensureCommandEncoderReady(),this.endComputePassEncoder(),this.commandEncoder.copyBufferToBuffer(e,0,n,0,t),this.submitQueue(),n}createTensorFromGPUData(e,t,o){let n=e.buffer;if(o===\"complex64\")throw new Error(\"Cannot write to a complex64 dtype. \");let s={id:this.nextDataId()};this.tensorMap.set(s,{dtype:o,shape:t,values:null,refCount:1,external:e.zeroCopy});let a=this.tensorMap.get(s),i=jg(a.dtype)*y.sizeFromShape(a.shape);if(e.buffer.sizey.decodeString(n));return me(e.shape,e.dtype,o)}catch(o){throw new Error(\"Failed to decode encoded string bytes into utf-8\")}return me(e.shape,e.dtype,t)}async time(e){!this.supportTimestampQuery&&!this.hasTimestampQueryWarned&&(console.warn(\"This device doesn't support timestamp-query extension. Start Chrome browser with flag --enable-dawn-features=allow_unsafe_apis to try it again. Otherwise, zero will be shown for the kernel time when profiling mode is enabled.\"),this.hasTimestampQueryWarned=!0);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 o=this.tensorMap.get(e.dataId).resource;return o instanceof GPUBuffer?{buffer:o}:o instanceof GPUTexture?o.createView():o}uploadToGPU(e){let t=this.tensorMap.get(e);if(t.resource!=null)return;let o=jg(t.dtype)*y.sizeFromShape(t.shape),n,s=GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC|GPUBufferUsage.COPY_DST;if(t.values){if(n=this.bufferManager.acquireBuffer(o,s,!0),n.mapState===\"unmapped\"){let a=this.bufferManager.acquireBuffer(o,GPUBufferUsage.MAP_WRITE|GPUBufferUsage.COPY_SRC,!0,!1),i=a.getMappedRange();t.dtype===\"int32\"||t.dtype===\"bool\"?new Int32Array(i).set(t.values):new Float32Array(i).set(t.values),a.unmap(),this.ensureCommandEncoderReady(),this.endComputePassEncoder(),this.commandEncoder.copyBufferToBuffer(a,0,n,0,o),this.stagingPendingDisposal.push(a)}else{let a=n.getMappedRange();t.dtype===\"int32\"||t.dtype===\"bool\"?new Int32Array(a).set(t.values):new Float32Array(a).set(t.values),n.unmap()}t.values=null}else n=this.bufferManager.acquireBuffer(o,s);t.resource=n}makeUniforms(e){let t=0,o=0,n=[],s=1;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),u>s&&(s=u),t=Math.ceil(t/u)*u,o=p.data.length,n.push(t),t+=p.data.length*4}),t=Math.ceil(t/s)*s;let a=new ArrayBuffer(t);e.forEach((p,u)=>{let c=n[u];p.type===\"int32\"?new Int32Array(a,c,p.data.length).set(p.data):p.type===\"uint32\"?new Uint32Array(a,c,p.data.length).set(p.data):new Float32Array(a,c,p.data.length).set(p.data)});let i=this.bufferManager.acquireBuffer(t,GPUBufferUsage.COPY_DST|GPUBufferUsage.UNIFORM);return this.queue.writeBuffer(i,0,a,0,t),this.uniformPendingDisposal.push(i),{offset:0,size:t,buffer:i}}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=Sae(this.device,e);let a=t.map((p,u)=>{if(p.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(p.dataId),{dtype:this.tensorMap.get(p.dataId).dtype,shape:p.shape,name:e.variableNames[u]}});e.shaderKey=nz(e,a,s);let i=A().getBool(\"WEBGPU_ENGINE_COMPILE_ONLY\");return e.shaderKey in this.pipelineCache||(this.pipelineCache[e.shaderKey]=oz(this.device,e,a,s,i)),e.pipeline=this.pipelineCache[e.shaderKey],i||this.recordAndSubmit(e,s,t,n),s}recordAndSubmit(e,t,o,n){if(e.pipeline instanceof Promise)throw new Error(\"Please call checkCompileCompletionAsync to ensure parallel compilation is done!\");let s=[],a=[],i=\"int32\";if(e.pixelsOpType==null){s.push({type:\"float32\",data:[NaN]},{type:\"float32\",data:[1/0]}),a=o.concat(t).map(d=>d.shape);let m=\"int32\";a.map(d=>{s.push({type:m,data:d});let f=y.computeStrides(d);s.push({type:m,data:f})})}else{let m=y.computeStrides(t.shape);s.push({type:i,data:m})}if(e.size){let m=y.sizeFromShape(e.outputShape);s.push({type:i,data:[e.outputComponent?m/e.outputComponent:m]})}n&&(s=[...s,...n]);let p=[this.tensorToBinding(t),...o.map(m=>this.tensorToBinding(m)),this.makeUniforms(s)];o.forEach(m=>{this.commandQueueOwnedIds.add(m.dataId)}),this.commandQueueOwnedIds.add(t.dataId);let u=this.device.createBindGroup({layout:e.pipeline.getBindGroupLayout(0),entries:p.map((m,d)=>({binding:d,resource:m}))}),c=this.activeTimers!=null;this.ensureCommandEncoderReady();let l={};c&&this.supportTimestampQuery?(this.endComputePassEncoder(),this.querySet==null&&(this.querySet=this.device.createQuerySet({type:\"timestamp\",count:this.querySetCount})),l.timestampWrites={querySet:this.querySet,beginningOfPassWriteIndex:0,endOfPassWriteIndex:1},this.computePassEncoder=this.commandEncoder.beginComputePass(l)):this.computePassEncoder||(this.computePassEncoder=this.commandEncoder.beginComputePass(l)),this.computePassEncoder.setPipeline(e.pipeline),this.computePassEncoder.setBindGroup(0,u),this.computePassEncoder.dispatchWorkgroups(e.dispatch[0],e.dispatch[1],e.dispatch[2]),this.dispatchCountInPass++,(c||A().get(\"WEBGPU_DEFERRED_SUBMIT_BATCH_SIZE\")<=this.dispatchCountInPass||e.pixelsOpType===wi.DRAW)&&(this.endComputePassEncoder(),c?this.activeTimers.push({name:e.constructor.name,query:this.getQueryTime()}):this.submitQueue())}async getQueryTime(){if(!this.supportTimestampQuery)return 0;this.queryResolveBuffer==null&&(this.queryResolveBuffer=this.bufferManager.acquireBuffer(this.querySetCount*8,GPUBufferUsage.COPY_SRC|GPUBufferUsage.COPY_DST|GPUBufferUsage.QUERY_RESOLVE)),this.commandEncoder.resolveQuerySet(this.querySet,0,this.querySetCount,this.queryResolveBuffer,0);let e=this.bufferManager.acquireBuffer(this.querySetCount*8,GPUBufferUsage.MAP_READ|GPUBufferUsage.COPY_DST);this.commandEncoder.copyBufferToBuffer(this.queryResolveBuffer,0,e,0,this.querySetCount*8),this.submitQueue(),await e.mapAsync(GPUMapMode.READ);let t=new BigUint64Array(e.getMappedRange()),o=Number(t[1]-t[0])/1e6;return e.unmap(),this.bufferManager.releaseBuffer(e),o}shouldExecuteOnCPU(e,t=wae){return A().getBool(\"WEBGPU_CPU_FORWARD\")&&e.every(o=>this.tensorMap.get(o.dataId).resource==null&&y.sizeFromShape(o.shape){let r={powerPreference:A().get(\"WEBGPU_USE_LOW_POWER_GPU\")?\"low-power\":\"high-performance\"},e=await navigator.gpu.requestAdapter(r),t={},o=[];e.features.has(\"timestamp-query\")&&o.push(\"timestamp-query\"),e.features.has(\"bgra8unorm-storage\")&&o.push([\"bgra8unorm-storage\"]),t.requiredFeatures=o;let n=e.limits;t.requiredLimits={maxComputeWorkgroupStorageSize:n.maxComputeWorkgroupStorageSize,maxComputeWorkgroupsPerDimension:n.maxComputeWorkgroupsPerDimension,maxStorageBufferBindingSize:n.maxStorageBufferBindingSize,maxBufferSize:n.maxBufferSize,maxComputeWorkgroupSizeX:n.maxComputeWorkgroupSizeX,maxComputeInvocationsPerWorkgroup:n.maxComputeInvocationsPerWorkgroup};let s=await e.requestDevice(t),a=await e.requestAdapterInfo();return new jc(s,a)},3);var fe;(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.ELU_DER=5]=\"ELU_DER\",r[r.EQUAL=6]=\"EQUAL\",r[r.FLOOR_DIV=7]=\"FLOOR_DIV\",r[r.GREATER=8]=\"GREATER\",r[r.GREATER_EQUAL=9]=\"GREATER_EQUAL\",r[r.LESS=10]=\"LESS\",r[r.LESS_EQUAL=11]=\"LESS_EQUAL\",r[r.LOGICAL_AND=12]=\"LOGICAL_AND\",r[r.LOGICAL_OR=13]=\"LOGICAL_OR\",r[r.MAX=14]=\"MAX\",r[r.MIN=15]=\"MIN\",r[r.MOD=16]=\"MOD\",r[r.MUL=17]=\"MUL\",r[r.NOT_EQUAL=18]=\"NOT_EQUAL\",r[r.POW=19]=\"POW\",r[r.PRELU=20]=\"PRELU\",r[r.SQUARED_DIFFERENCE=21]=\"SQUARED_DIFFERENCE\",r[r.SUB=22]=\"SUB\"})(fe||(fe={}));var Iae=\"let resultTemp = a + b;\",vae=\"let resultTemp = atan2(a, b);\",kae=\"let resultTemp = areal * breal - aimag * bimag;\",Nae=\"let resultTemp = areal * bimag + aimag * breal;\",Tae=\"let resultTemp = a / b;\",_ae=\"let resultTemp = select(a * (b + 1.0), a, b >= b - b);\",Eae=`\n let zero = sign(a) * 0 + 0;\n let one = sign(b) * 0 + 1;\n let resultTemp = select(zero, one, a == b);\n`,$ae=`\n let remainder =\n select(a % b, round(a % b), (round(a) == a) & (round(b) == b));\n let quotient = (a - remainder) / b;\n let resultTemp =\n round(select(quotient, quotient - 1, sign(remainder) == -sign(b)));\n`,Rae=`\n let zero = sign(a) * 0 + 0;\n let one = sign(b) * 0 + 1;\n let resultTemp = select(zero, one, a > b);\n`,Dae=`\n let zero = sign(a) * 0 + 0;\n let one = sign(b) * 0 + 1;\n let resultTemp = select(zero, one, a >= b);\n`,Aae=`\n let zero = sign(a) * 0 + 0;\n let one = sign(b) * 0 + 1;\n let resultTemp = select(zero, one, a < b);\n`,Fae=`\n let zero = sign(a) * 0 + 0;\n let one = sign(b) * 0 + 1;\n let resultTemp = select(zero, one, a <= b);\n`,Pae=\"return f32(a >= 1.0 && b >= 1.0);\",Oae=`return (vec4(a >= vec4(1.0)) *\n vec4(b >= vec4(1.0)));`,Mae=\"return f32(a >= 1.0 || b >= 1.0);\",Lae=`return min(vec4(a >= vec4(1.0)) +\n vec4(b >= vec4(1.0)), vec4(1.0));`,Bae=\"let resultTemp = max(a, b);\",zae=\"let resultTemp = min(a, b);\",Vae=`\n let isNaN = b == 0.;\n var resultTemp = a % b;\n resultTemp = select((resultTemp + b) % b, resultTemp,\n (a < 0. && b < 0.) || (a >= 0. && b > 0.));\n`,Wae=`\n let isNaN = !vec4(b);\n var resultTemp = vec4(a % b);\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`,Uae=\"let resultTemp = a * b;\",Gae=`\n var resultTemp = f32(a != b);\n let valueForNaN = 1.0;\n`,Hae=`\n var resultTemp = vec4(a != b);\n let valueForNaN = 1.0;\n`,Kae=`\n let isNaN = a < 0.0 && floor(b) < b;\n if (b == 0.0) {\n return 1.0;\n }\n var resultTemp = select(sign(a) * pow(abs(a), b), pow(abs(a), b),\n round(abs(b) % 2.0) != 1.0);\n`,qae=`\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`,jae=\"if (a < 0.0) { return b * a; } return a;\",Xae=`\n let aLessThanZero = vec4(a < vec4(0.0));\n return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a);\n`,Yae=\"let resultTemp = (a - b) * (a - b);\",Qae=\"let resultTemp = a - b;\";function Xc(r,e){let t;do{switch(r){case fe.ATAN2:t=vae;break;case fe.MAX:t=Bae;break;case fe.MIN:t=zae;break;case fe.MOD:t=e?Wae:Vae;break;case fe.NOT_EQUAL:t=e?Hae:Gae;break;case fe.POW:t=e?qae:Kae;break;default:continue}let o,n,s;return e?(o=\"isnanVec4\",n=\"vec4\",s=\"vec4\"):(o=\"isnan\",n=\"f32\",s=\"bool\"),`\n let aIsNaN = ${o}(a);\n let aPostLegalization = select(a, ${n}(42), aIsNaN);\n let bIsNaN = ${o}(b);\n let bPostLegalization = select(b, ${n}(42), bIsNaN);\n let isNaN = false;\n let valueForNaN = uniforms.NAN;\n {\n let a = aPostLegalization;\n let b = bPostLegalization;\n ${t}\n return select(\n resultTemp, ${n}(valueForNaN),\n ${s}(isNaN) | aIsNaN | bIsNaN);\n }\n `}while(!1);switch(r){case fe.ADD:t=Iae;break;case fe.COMPLEX_MULTIPLY_IMAG:t=Nae;break;case fe.COMPLEX_MULTIPLY_REAL:t=kae;break;case fe.DIV:t=Tae;break;case fe.ELU_DER:t=_ae;break;case fe.EQUAL:t=Eae;break;case fe.FLOOR_DIV:t=$ae;break;case fe.GREATER:t=Rae;break;case fe.GREATER_EQUAL:t=Dae;break;case fe.LESS:t=Aae;break;case fe.LESS_EQUAL:t=Fae;break;case fe.LOGICAL_AND:return e?Oae:Pae;case fe.LOGICAL_OR:return e?Lae:Mae;case fe.MUL:t=Uae;break;case fe.PRELU:return e?Xae:jae;case fe.SQUARED_DIFFERENCE:t=Yae;break;case fe.SUB:t=Qae;break;default:}return`\n ${t}\n return resultTemp;\n `}var Z;(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.ROUND=27]=\"ROUND\",r[r.RSQRT=28]=\"RSQRT\",r[r.SELU=29]=\"SELU\",r[r.SIGMOID=30]=\"SIGMOID\",r[r.SIGN=31]=\"SIGN\",r[r.SIN=32]=\"SIN\",r[r.SINH=33]=\"SINH\",r[r.SOFTPLUS=34]=\"SOFTPLUS\",r[r.SQRT=35]=\"SQRT\",r[r.SQUARE=36]=\"SQUARE\",r[r.STEP=37]=\"STEP\",r[r.TAN=38]=\"TAN\",r[r.TANH=39]=\"TANH\",r[r.TO_INT=40]=\"TO_INT\"})(Z||(Z={}));var Zae=\"return abs(a);\",Jae=`\n if (abs(a) > 1.) {\n return uniforms.NAN;\n }\n return acos(a);\n`,eie=`\n if (a < 1.) {\n return uniforms.NAN;\n }\n return acosh(a);\n`,tie=`\n if (abs(a) > 1.) {\n return uniforms.NAN;\n }\n return asin(a);\n`,rie=\"return asinh(a);\",oie=`\n if (isnan(a)) {\n return uniforms.NAN;\n }\n return atan(a);\n`,nie=`\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`,sie=\"return ceil(a);\",aie=\"return cos(a);\",iie=`\n let e2x = exp(-a);\n return (e2x + 1.0 / e2x) / 2.0;\n`,uie=\"return exp(a) - 1.0;\",pie=\"if (a >= 0.0) { return a; } return (exp(a) - 1.0);\",cie=`\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`,lie=`\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 = ${w.ERF_P};\n let a1 = ${w.ERF_A1};\n let a2 = ${w.ERF_A2};\n let a3 = ${w.ERF_A3};\n let a4 = ${w.ERF_A4};\n let a5 = ${w.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`,mie=\"return exp(a);\",die=\"return floor(a);\",fie=\"return f32(!isnan(a) && !isinf(a));\",hie=\"return f32(isinf(a));\",gie=\"return f32(isnan(a));\",xie=\"return a;\",yie=`if (a < 0.0) { return uniforms.NAN; }\n return log(a);`,bie=`\n if (isnan(a)) { return a; }\n return log(1.0 + a);\n`,Cie=\"return f32(!(a >= 1.0));\",wie=\"return -a;\",Sie=\"if (a < 0.0) { return uniforms.alpha * a; } return a;\",Iie=`\n let aLessThanZero = vec4(a < vec4(0.0));\n return (aLessThanZero * (uniforms.alpha * a)) + ((vec4(1.0) - aLessThanZero) * a);\n`,vie=\"return 1.0 / a;\",kie=\"return select(a, 0.0, a < 0.0);\",Nie=\"return clamp(a, 0.0, 6.0);\",Tie=\"return clamp(a, vec4(0.0, 0.0, 0.0, 0.0), vec4(6.0, 6.0, 6.0, 6.0));\",_ie=`\n return select(a, vec4(0.0), a < vec4(0.0));\n`,Eie=\"return round(a);\",$ie=\"return inverseSqrt(a);\",Rie=`\n if (a >= 0.0) {\n return ${w.SELU_SCALE} * a;\n } else {\n return ${w.SELU_SCALEALPHA} * (exp(a) - 1.0);\n }\n`,Die=\"return 1.0 / (1.0 + exp(-1.0 * a));\",Aie=\"return sign(a);\",Fie=\"return sin(a);\",Pie=`\n let e2x = exp(a);\n return (e2x - 1.0 / e2x) / 2.0;\n`,Oie=`\n let epsilon = 1.1920928955078125e-7;\n let threshold = log(epsilon) + 2.0;\n\n let too_large = a > -threshold;\n let too_small = a < threshold;\n let exp_a = exp(a);\n\n if (too_large) {\n return a;\n } else if (too_small) {\n return exp_a;\n } else {\n return log(exp_a + 1.0);\n }\n`,Mie=\"return sqrt(a);\",Lie=\"return a * a;\",Bie=`\n if (isnan(a)) {\n return a;\n }\n\n return select(uniforms.stepAlpha, 1.0, a > 0.0);\n`,zie=\"return tan(a);\",Vie=`\n let e2x = exp(-2.0 * abs(a));\n return sign(a) * (1.0 - e2x) / (1.0 + e2x);\n`,Wie=\"return f32(i32((a)));\";function Si(r,e){switch(r){case Z.ABS:return Zae;case Z.ACOS:return Jae;case Z.ACOSH:return eie;case Z.ASIN:return tie;case Z.ASINH:return rie;case Z.ATAN:return oie;case Z.ATANH:return nie;case Z.COS:return aie;case Z.COSH:return iie;case Z.CEIL:return sie;case Z.ELU:return e?cie:pie;case Z.ERF:return lie;case Z.EXP:return mie;case Z.EXPM1:return uie;case Z.FLOOR:return die;case Z.IS_FINITE:return fie;case Z.IS_INF:return hie;case Z.IS_NAN:return gie;case Z.LINEAR:return xie;case Z.LOG:return yie;case Z.LOG1P:return bie;case Z.LOGICAL_NOT:return Cie;case Z.NEG:return wie;case Z.LEAKYRELU:return e?Iie:Sie;case Z.RECIPROCAL:return vie;case Z.RELU:return e?_ie:kie;case Z.RELU6:return e?Tie:Nie;case Z.ROUND:return Eie;case Z.RSQRT:return $ie;case Z.SELU:return Rie;case Z.SIGMOID:return Die;case Z.SIGN:return Aie;case Z.SIN:return Fie;case Z.SINH:return Pie;case Z.SOFTPLUS:return Oie;case Z.SQRT:return Mie;case Z.SQUARE:return Lie;case Z.STEP:return Bie;case Z.TAN:return zie;case Z.TANH:return Vie;case Z.TO_INT:return Wie;default:throw new Error(`BinaryType ${r} is not implemented!`)}}function dr(r,e=!1,t=!1,o=3){if(r===null)return\"\";let n=\"\";if(r===\"linear\")n=Si(Z.LINEAR);else if(r===\"relu\")n=Si(Z.RELU,t);else if(r===\"elu\")n=Si(Z.ELU,t);else if(r===\"relu6\")n=Si(Z.RELU6,t);else if(r===\"prelu\")n=Xc(fe.PRELU,t);else if(r===\"sigmoid\")n=Si(Z.SIGMOID,t);else if(r===\"leakyrelu\")n=Si(Z.LEAKYRELU,t);else throw new Error(`Activation ${r} has not been implemented for the WebGPU backend.`);let a=Ae(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 Zr(r,e){return`\n ${r?\"value = value + getBiasByOutputCoords(coords);\":\"\"}\n ${e?\"value = activation(value, coords);\":\"\"}\n `}function Jv(r,e,t=!1,o=!1,n=!1,s=1){y.assert(r&&s===1||!r,()=>`transposeA ${r} is not compatible with component size ${s}`);let a=`\n ${r?\"value = getA(batch, col, row);\":\"value = getA(batch, row, col);\"}\n\n `,i=e?\"value = getB(batch, col, row);\":\"value = getB(batch, row, col);\";return`\n fn mm_readA(batch: i32, row: i32, col: i32) -> ${Ae(s)} {\n var value = ${Ae(s)}(0.0);\n ${t&&n?a:`\n ${r?\"if(row < uniforms.dimAOuter && col < uniforms.dimInner)\":\"if(row < uniforms.aShape[1] && col < uniforms.aShape[2])\"}\n {\n ${a}\n }\n `}\n return value;\n }\n\n fn mm_readB(batch: i32, row: i32, col: i32) -> ${Ae(s)} {\n var value = ${Ae(s)}(0.0);\n ${i}\n return value;\n }\n `}function hm(r,e,t,o,n=!1,s=!1,a=!1,i=1){return`\n ${Jv(t,o,n,s,a,i)}\n fn mm_write(batch: i32, row: i32, col: i32, valueIn: ${Ae(i)}) {\n ${n&&s?\"\":\"if (row < uniforms.dimAOuter && col < uniforms.dimBOuter)\"}\n {\n var value = valueIn;\n let coords = vec3(batch, row, col);\n ${Zr(r,e)}\n setOutputAtCoords(coords[0], coords[1], coords[2], value);\n }\n }\n `}var Uie=(r,e)=>r?`\n mm_Asub[inputRow][inputCol] = mm_readA(batchA,\n kStart + inputRow,\n globalRowStart + inputCol * ${e});\n `:`\n mm_Asub[inputRow][inputCol] = mm_readA(batchA,\n globalRow + innerRow,\n kStart + inputCol * ${e});\n `,Gie=(r,e,t,o)=>{if(r)return`\n for (var k = 0; k < ${o}; k++) {\n let BCached0 = mm_Bsub[k][tileCol];\n let ACached0 = mm_Asub[k][localRow];\n for (var i = 0; i < ${t}; i++) {\n acc[i] = fma(BCached0, vec4(ACached0[i]), acc[i]);\n }\n }`;{let n=\"\",s=\"\";for(let a=0;a(ACached[${a}]), acc[i]);`;return`\n for (var k = 0; k < ${o/e}; k++) {\n ${n}\n for (var i = 0; i < ${t}; i++) {\n let ACached = mm_Asub[tileRow + i][k];\n ${s}\n }\n }`}};function _p(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],d=r[1],f=r[0];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 ${G()} {\n let localRow = i32(localId.y);\n let tileRow = localRow * ${d};\n let tileCol = i32(localId.x);\n\n let globalRow = i32(globalId.y) * ${d};\n let globalCol = i32(globalId.x) * ${f};\n let batch = ${n?\"0\":\"i32(globalId.z)\"};\n let batchA = ${n||!a?\"batch\":\"batch % uniforms.aShape[0]\"};\n let batchB = ${n||!a?\"batch\":\"batch % uniforms.bShape[0]\"};\n let globalRowStart = i32(workgroupId.y) * ${i};\n\n let numTiles = ${n?`${Math.ceil(s/o)}`:`(uniforms.dimInner - 1) / ${o} + 1`};\n var kStart = ${n?`i32(globalId.z) * ${s}`:\"0\"};\n\n var acc: array, ${d}>;\n\n // Loop over shared dimension.\n let tileRowB = localRow * ${m};\n for (var t = 0; t < numTiles; t++) {\n // Load one tile of A into local memory.\n for (var innerRow = 0; innerRow < ${d}; innerRow++) {\n let inputRow = tileRow + innerRow;\n let inputCol = tileCol;\n ${Uie(t,l)}\n }\n\n // Load one tile of B into local memory.\n for (var innerRow = 0; innerRow < ${m}; innerRow++) {\n let inputRow = tileRowB + innerRow;\n let inputCol = tileCol;\n mm_Bsub[inputRow][inputCol] = mm_readB(batchB, kStart + inputRow, globalCol);\n }\n kStart = kStart + ${o};\n workgroupBarrier();\n\n // Compute acc values for a single thread.\n ${Gie(t,l,d,o)}\n workgroupBarrier();\n }\n\n for (var innerRow = 0; innerRow < ${d}; innerRow++) {\n mm_write(batch, globalRow + innerRow, globalCol, acc[innerRow]);\n }\n }`}var az=r=>r?`\n mm_Asub[inputRow][inputCol] = mm_readA(batchA,\n kStart + inputRow,\n globalRowStart + inputCol);\n `:`\n mm_Asub[inputRow][inputCol] = mm_readA(batchA,\n globalRowStart + inputRow,\n kStart + inputCol);\n `,Hie=r=>r?\"let ACached = mm_Asub[k][tileRow + innerRow];\":\"let ACached = mm_Asub[tileRow + innerRow][k];\";function Ep(r,e,t=!1,o=32,n=!1,s=32,a=!1,i=!1){let p=r[1]*e[1],u=r[0]*e[0],c=t?p:o,l=t?o:p;y.assert(l%e[1]===0&&c%e[0]===0&&o%e[1]===0,()=>`tileAHight ${l} must be divisible by workgroupSize[1]${e[1]}, tileAWidth ${c} must be divisible by workgroupSize[0]${e[0]}, tileInner ${o} must be divisible by workgroupSize[1]${e[1]}`);let m=l/e[1],d=c/e[0],f=o/e[1],h=r[1],g=r[0],x=a?`\n let localRow = i32(localId.y);\n let localCol = i32(localId.x);\n let globalRowStart = i32(workgroupId.y) * ${p};\n let globalColStart = i32(workgroupId.x) * ${u};\n\n // Loop over shared dimension.\n for (var t = 0; t < numTiles; t++) {\n // Load one tile of A into local memory.\n for (var inputRow = localRow; inputRow < ${l}; inputRow = inputRow + ${e[1]}) {\n for (var inputCol = localCol; inputCol < ${c}; inputCol = inputCol + ${e[0]}) {\n ${az(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 < ${u}; inputCol = inputCol + ${e[0]}) {\n mm_Bsub[inputRow][inputCol] = mm_readB(batchB,\n kStart + inputRow,\n globalColStart + inputCol);\n }\n }\n kStart = kStart + ${o};\n workgroupBarrier();\n\n // Compute acc values for a single thread.\n var BCached : array;\n for (var k = 0; k < ${o}; k++) {\n for (var inner = 0; inner < ${g}; inner++) {\n BCached[inner] = mm_Bsub[k][localCol + inner * ${e[0]}];\n }\n for (var innerRow = 0; innerRow < ${h}; innerRow++) {\n let ACached = ${t?`mm_Asub[k][localRow + innerRow * ${e[1]}];`:`mm_Asub[localRow + innerRow * ${e[1]}][k];`}\n for (var innerCol = 0; innerCol < ${g}; innerCol++) {\n acc[innerRow][innerCol] =\n fma(ACached, BCached[innerCol], acc[innerRow][innerCol]);\n }\n }\n }\n workgroupBarrier();\n }\n for (var innerRow = 0; innerRow < ${h}; innerRow++) {\n let gRow = globalRowStart + localRow + innerRow * ${e[1]};\n for (var innerCol = 0; innerCol < ${g}; innerCol++) {\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) * ${h};\n let tileCol = i32(localId.x) * ${g};\n\n let globalRow = i32(globalId.y) * ${h};\n let globalCol = i32(globalId.x) * ${g};\n let globalRowStart = i32(workgroupId.y) * ${p};\n\n let tileRowA = i32(localId.y) * ${m};\n let tileColA = i32(localId.x) * ${d};\n let tileRowB = i32(localId.y) * ${f};\n // Loop over shared dimension.\n for (var t = 0; t < numTiles; t++) {\n // Load one tile of A into local memory.\n for (var innerRow = 0; innerRow < ${m}; innerRow++) {\n for (var innerCol = 0; innerCol < ${d}; innerCol++) {\n let inputRow = tileRowA + innerRow;\n let inputCol = tileColA + innerCol;\n ${az(t)}\n }\n }\n\n // Load one tile of B into local memory.\n for (var innerRow = 0; innerRow < ${f}; innerRow++) {\n for (var innerCol = 0; innerCol < ${g}; innerCol++) {\n let inputRow = tileRowB + innerRow;\n let inputCol = tileCol + innerCol;\n mm_Bsub[inputRow][inputCol] = mm_readB(batchB,\n kStart + inputRow,\n globalCol + innerCol);\n }\n }\n kStart = kStart + ${o};\n workgroupBarrier();\n\n // Compute acc values for a single thread.\n var BCached : array;\n for (var k = 0; k < ${o}; k++) {\n for (var inner = 0; inner < ${g}; inner++) {\n BCached[inner] = mm_Bsub[k][tileCol + inner];\n }\n\n for (var innerRow = 0; innerRow < ${h}; innerRow++) {\n ${Hie(t)}\n for (var innerCol = 0; innerCol < ${g}; innerCol++) {\n acc[innerRow][innerCol] =\n fma(ACached, BCached[innerCol], acc[innerRow][innerCol]);\n }\n }\n }\n\n workgroupBarrier();\n }\n\n for (var innerRow = 0; innerRow < ${h}; innerRow++) {\n for (var innerCol = 0; innerCol < ${g}; innerCol++) {\n mm_write(batch, globalRow + innerRow, globalCol + innerCol,\n acc[innerRow][innerCol]);\n }\n }\n `;return`\n var mm_Asub : array, ${l}>;\n var mm_Bsub : array, ${o}>;\n\n ${G()} {\n let batch = ${n?\"0\":\"i32(globalId.z)\"};\n let batchA = ${n||!i?\"batch\":\"batch % uniforms.aShape[0]\"};\n let batchB = ${n||!i?\"batch\":\"batch % uniforms.bShape[0]\"};\n let numTiles = ${n?`${Math.ceil(s/o)}`:`(uniforms.dimInner - 1) / ${o} + 1`};\n var kStart = ${n?`i32(globalId.z) * ${s}`:\"0\"};\n\n var acc : array, ${h}>;\n\n // Without this initialization strange values show up in acc.\n for (var innerRow = 0; innerRow < ${h}; innerRow++) {\n for (var innerCol = 0; innerCol < ${g}; innerCol++) {\n acc[innerRow][innerCol] = 0.0;\n }\n }\n ${x}\n }\n `}var Kie=r=>r?`\n mm_readA(batchA, colA, globalRow),\n mm_readA(batchA, colA + 1, globalRow),\n mm_readA(batchA, colA + 2, globalRow),\n mm_readA(batchA, colA + 3, globalRow)\n `:`\n mm_readA(batchA, globalRow, colA),\n mm_readA(batchA, globalRow, colA + 1),\n mm_readA(batchA, globalRow, colA + 2),\n mm_readA(batchA, globalRow, colA + 3)\n `;function qie(r,e=!1){y.assert(r[1]===1&&r[2]===1,()=>`A linear work group size is required. But got ${r}.`);let t=r[0]*4;return`\n var mm_Asub : array, ${r[0]}>;\n\n ${G()} {\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) / ${t} + 1;\n let batch = i32(globalId.z);\n let batchA = batch % uniforms.aShape[0];\n let batchB = batch % uniforms.bShape[0];\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++) {\n // Load one tile of A into local memory.\n let colA = t * ${t} + tileCol * 4;\n mm_Asub[tileCol] = vec4(${Kie(e)});\n workgroupBarrier();\n\n // Compute acc values for a single thread.\n for (var k = 0; k < ${t/4}; k++) {\n let rowB = t * ${t} + k * 4;\n let BCached = vec4(mm_readB(batchB, rowB, globalCol),\n mm_readB(batchB, rowB + 1, globalCol),\n mm_readB(batchB, rowB + 2, globalCol),\n mm_readB(batchB, 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 Xg=class{constructor(e,t,o=!1,n=!1,s=null,a=null,i=null,p=!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 u=o?e[1]:e[2];if(this.isVec4=(u%4===0&&!o||t[1]%4===0&&o)&&t[2]%4===0&&!n,this.outputComponent=this.isVec4?4:1,this.isVectorA=t[1]===1&&!o,!this.isVec4&&this.isVectorA)this.elementsPerThread=[1,1,1],this.workgroupSize=[32,1,1];else{let m=Qv(t[1],u,t[2],o);this.workgroupSize=m.workgroupSize,this.elementsPerThread=m.elementsPerThread}this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize,this.elementsPerThread);let c=s!=null,l=i!=null;c&&this.variableNames.push(\"bias\"),l&&this.variableNames.push(\"preluActivationWeights\"),this.sequentialAccessByThreads=p,this.transposeA=o,this.transposeB=n,this.addBias=c,this.activation=a,this.hasPreluActivationWeights=l,[this.fitAOuter,this.fitBOuter,this.fitInner]=this.getShapeFit(t[1],t[2],u),this.shaderKey=`matMulPacked_${this.elementsPerThread}_${o}_${n}_${this.activation}_${this.fitAOuter}_${this.fitBOuter}_${this.fitInner}_${this.isVec4}_${this.isVectorA}_${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 ${dr(this.activation,this.hasPreluActivationWeights,this.isVec4)}\n ${hm(this.addBias,this.activation,!1,this.transposeB,this.fitAOuter,this.fitBOuter,this.fitInner,this.isVec4?4:1)}\n ${this.isVec4?_p(this.elementsPerThread,this.workgroupSize,this.transposeA,this.tileInner,!1,null,!0):this.isVectorA?qie(this.workgroupSize,this.transposeA):Ep(this.elementsPerThread,this.workgroupSize,this.transposeA,this.tileInner,!1,null,this.sequentialAccessByThreads,!0)}\n `}};function jie(r){return`\n var sumValues : array;\n ${G()} {\n let coords = getOutputCoords();\n let batch = coords[0];\n let batchA = batch % uniforms.aShape[0];\n let batchB = batch % uniforms.bShape[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 + ${r}) {\n let dataA = mm_readA(batchA, row, k);\n let dataB = mm_readB(batchB, k, col);\n sum = sum + dataA * dataB;\n }\n sumValues[localId.x] = sum;\n workgroupBarrier();\n\n for(var currentSize = ${r/2}u; 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 Yg=class{constructor(e,t=!1,o=!1,n=null,s=null,a=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=H(this.dispatchLayout,this.outputShape,this.workgroupSize);let i=n!=null,p=a!=null;i&&this.variableNames.push(\"bias\"),p&&this.variableNames.push(\"preluActivationWeights\"),this.transposeA=t,this.transposeB=o,this.addBias=i,this.activation=s,this.hasPreluActivationWeights=p,this.shaderKey=`matMulReduce_${this.activation}_${t}_${o}`}getUserCode(){return`\n ${dr(this.activation,this.hasPreluActivationWeights)}\n ${hm(this.addBias,this.activation,this.transposeA,this.transposeB)}\n ${jie(this.workgroupSize[0])}\n `}};function Xie(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 ${G()} {\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 let batchA = batch % uniforms.aShape[0];\n let batchB = batch % uniforms.bShape[0];\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(batchA, globalRow, globalColA);\n var regB0 = mm_readB(batchB, globalRowB + 2 * tileRow, globalCol);\n var regB1 = mm_readB(batchB, 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(batchA, globalRow, globalColA);\n regB0 = mm_readB(batchB, globalRowB + 2 * tileRow, globalCol);\n regB1 = mm_readB(batchB, 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 Qg=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.shaderKey=`matMulSmallOutputSize_${this.activation}_${n}_${s}`}getUserCode(){return`\n ${dr(this.activation,this.hasPreluActivationWeights)}\n ${hm(this.addBias,this.activation,this.transposeA,this.transposeB)}\n ${Xie(this.workgroupSize)}\n `}};var Zg=class{constructor(e,t,o=!1,n=!1){this.variableNames=[\"A\",\"B\"],this.uniforms=\"dimAOuter : i32, dimBOuter : i32, dimInner : i32,\",this.workgroupSize=[8,8,1],this.atomic=!0,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]};let s=(o&&this.outputShape[1]%4===0||!o&&t%4===0)&&this.outputShape[2]%4===0;this.elementsPerThread=[4,4,this.splitedDimInner],this.outputComponent=s?4:1,s||(this.outputShape[1]<16&&(this.elementsPerThread[1]=1),this.outputShape[2]<16&&(this.elementsPerThread[0]=1)),this.dispatch=H(this.dispatchLayout,[this.outputShape[0],this.outputShape[1],this.outputShape[2],t],this.workgroupSize,this.elementsPerThread),this.transposeA=o,this.transposeB=n,this.shaderKey=`matMulSplitK_${o}_${n}_${this.elementsPerThread}_${this.outputComponent}`}getUserCode(){let e=this.outputComponent;return`\n ${Jv(!1,this.transposeB,!1,!1,!1,e)}\n fn mm_write(batch: i32, row : i32, col : i32, value : ${Ae(e)}) {\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 for (var i = 0; i < ${e}; i = i + 1) {\n ${Qr(\"&result[flatIndex + i]\",`${e>1?\"value[i]\":\"value\"}`,\"float32\")}\n }\n }\n }\n ${e===4?_p(this.elementsPerThread,this.workgroupSize,this.transposeA,32,!0,this.splitedDimInner):Ep(this.elementsPerThread,this.workgroupSize,this.transposeA,32,!0,this.splitedDimInner)}\n `}},Jg=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=X(this.outputShape),this.dispatch=H(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 ${dr(this.activation,this.hasPreluActivationWeights)}\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n var value = getXByOutputIndex(index);\n ${Zr(this.addBias,this.activation)}\n setOutputAtIndex(index, value);\n }\n }\n `}};var ex=class{constructor(e){this.variableNames=[],this.outputShape=[],this.uniforms=\"value : f32,\",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"fill\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n setOutputAtIndex(index, uniforms.value);\n }\n }\n `}};function vt(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 ex(o),i=[{type:\"float32\",data:[n]}];return e.runWebGPUProgram(a,[],s,i)}}var iz={kernelName:sa,backendName:\"webgpu\",kernelFunc:vt};function pe(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 uz={kernelName:da,backendName:\"webgpu\",kernelFunc:pe};function $p({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),S=Sr.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],$=pe({inputs:{x:r},backend:n,attrs:{shape:k}}),R=pe({inputs:{x:e},backend:n,attrs:{shape:_}}),D=[$,R],P=Math.max(x,b),O=[$,R],M=[{type:\"int32\",data:[d]},{type:\"int32\",data:[f]},{type:\"int32\",data:[l]}],L,B,z=[P,d,f],U=A().get(\"WEBGPU_MATMUL_PROGRAM_TYPE\");if(U<0){let q=A().getNumber(\"WEBGPU_THRESHOLD_TO_INCREASE_WORKGROUPS_FOR_MATMUL\"),Y=q>0?q:n.thresholdToIncreaseWorkgroups,J=P*Math.ceil(d/32)*Math.ceil(f/32);J<=Y||d<=8&&J<=Y*2?P*d*f<=128?U=Mo.MatMulReduceProgram:P===1&&m>=2e3?U=Mo.MatMulSplitKProgram:U=Mo.MatMulSmallOutputSizeProgram:U=Mo.MatMulPackedProgram}switch(U){case Mo.MatMulReduceProgram:L=new Yg(z,t,o,s,p,a);break;case Mo.MatMulSplitKProgram:{if(B=vt({backend:n,attrs:{shape:z,value:0,dtype:r.dtype}}),L=new Zg(z,m,t,o),s||p){B=n.runWebGPUProgram(L,O,r.dtype,M,B);let Y=new Jg(B.shape,s,p,a),J=null,re=[B];s&&re.push(s),a&&re.push(a),p===\"leakyrelu\"&&(J=[{type:\"float32\",data:[i]}],Y.uniforms+=\" alpha : f32,\");let ne=n.runWebGPUProgram(Y,re,B.dtype,J);D.push(B);let ee=pe({inputs:{x:ne},backend:n,attrs:{shape:S}});D.push(ne);for(let oe of D)n.disposeData(oe.dataId);return ee}break}case Mo.MatMulSmallOutputSizeProgram:L=new Qg(k,_,z,t,o,s,p,a);break;case Mo.MatMulPackedProgram:let q=n.adapterInfo.isIntel();L=new Xg(k,z,t,o,s,p,a,q);break;default:throw new Error(`Unsupported MatMulProgramType ${U}.`)}s&&O.push(s),a&&O.push(a),p===\"leakyrelu\"&&(M.push({type:\"float32\",data:[i]}),L.uniforms+=\" alpha : f32,\"),B=n.runWebGPUProgram(L,O,r.dtype,M,B);let j=pe({inputs:{x:B},backend:n,attrs:{shape:S}});D.push(B);for(let q of D)n.disposeData(q.dataId);return j}function Yie(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 $p({a:n,b:s,transposeA:p,transposeB:u,backend:t,bias:a,preluActivationWeights:i,leakyreluAlpha:l,activation:c})}var pz={kernelName:So,backendName:\"webgpu\",kernelFunc:Yie};var gm=class{constructor(e,t,o){this.variableNames=[\"AReal\",\"AImag\",\"BReal\",\"BImag\"],this.workgroupSize=[128,1,1],this.size=!0,this.outputShape=w.assertAndGetBroadcastShape(t,o),this.dispatchLayout=X(this.outputShape),this.dispatch=H(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 ${Xc(this.op,!1)}\n }\n\n ${G(\"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 Ii=class{constructor(e,t,o){if(this.size=!0,this.variableNames=[\"A\",\"B\"],this.outputShape=w.assertAndGetBroadcastShape(t,o),this.dispatchLayout=X(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.outputComponent=1,this.variableComponents=[1,1],this.lastDimensionSize=this.useSharedMemoryWithB?o[0]:t[0],this.shaderKey=`binary_${e}_${this.lastDimensionSize}`,this.type=\"shared\",this.workgroupSize=[256,1,1];else{let n=t.length>0&&t[t.length-1]%4===0,s=o.length>0&&o[o.length-1]%4===0;n&&s?(this.outputComponent=4,this.variableComponents=[4,4]):n&&(y.isScalarShape(o)||o[o.length-1]===1)||s&&(y.isScalarShape(t)||t[t.length-1]===1)?(this.outputComponent=4,this.variableComponents=n?[4,1]:[1,4]):(this.outputComponent=1,this.variableComponents=[1,1]),this.type=\"nonshared\",this.shaderKey=`binary_${e}_${this.variableComponents}`,this.workgroupSize=[128,1,1]}this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize,[this.outputComponent,1,1])}getUserCode(){let e,t=this.outputComponent===4?\"vec4\":\"f32\",o=`\n fn binaryOperation(a : ${t}, b : ${t}) -> ${t} {\n ${Xc(this.op,this.outputComponent===4)}\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 ${G(\"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 ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index * ${this.outputComponent});\n let a = ${t}(getAByOutputCoords(coords));\n let b = ${t}(getBByOutputCoords(coords));\n setOutputAtIndex(index, binaryOperation(a, b));\n }\n }\n `;return e}};function At(r){let{inputs:e}=r,{x:t}=e;return r.backend.incRef(t.dataId),{dataId:t.dataId,shape:t.shape,dtype:t.dtype}}var cz={kernelName:Co,backendName:\"webgpu\",kernelFunc:At};function xo(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=At({inputs:{x:o},backend:t}),p=At({inputs:{x:n},backend:t});return a.complexTensorInfos={real:i,imag:p},s}var lz={kernelName:Di,backendName:\"webgpu\",kernelFunc:xo};var Jr=class{constructor(e,t,o=\"\"){this.variableNames=[\"A\"],this.size=!0;let n=128;this.workgroupSize=[n,1,1],this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.op=t,o!==\"\"&&(this.uniforms=o),this.shaderKey=`unary_${t}`}getUserCode(){return`\n fn unaryOperation(a : f32) -> f32 {\n ${Si(this.op,!1)}\n }\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let a = getAByOutputIndex(index);\n setOutputAtIndex(index, unaryOperation(a));\n }\n }\n `}};function ye({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 Jr(s.shape,r);return a.runWebGPUProgram(p,[s],i)}}function et({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!==fe.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},S={dataId:b.dataId,dtype:b.dtype,shape:i.shape},k=new Ii(r,a.shape,i.shape);return p.runWebGPUProgram(k,[C,S],dt(x.dtype,b.dtype))});else{let g=new gm(fe.COMPLEX_MULTIPLY_REAL,a.shape,i.shape),x=new gm(fe.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=xo({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\"?w.fromUint8ToStringArray(l):l,f=a.dtype===\"string\"?w.fromUint8ToStringArray(m):m,[h,g]=e(a.shape,i.shape,d,f,u);return p.makeTensorInfo(g,u,h)}let c=new Ii(r,a.shape,i.shape);return p.runWebGPUProgram(c,[a,i],u)}}var{addImpl:mz,castImpl:dz,ceilImpl:fz,concatImpl:hz,equalImpl:gz,expImpl:xz,expm1Impl:yz,floorImpl:bz,floorDivImpl:Cz,gatherNdImpl:wz,gatherV2Impl:Sz,greaterEqualImpl:Iz,greaterImpl:vz,lessEqualImpl:kz,lessImpl:Nz,logImpl:Tz,maxImpl:_z,maximumImpl:Ez,minimumImpl:$z,multiplyImpl:Rz,negImpl:Dz,notEqualImpl:Az,prodImpl:Fz,rangeImpl:Pz,rsqrtImpl:Oz,scatterImpl:Mz,simpleAbsImpl:Lz,sliceImpl:Bz,stridedSliceImpl:zz,stringNGramsImpl:Vz,subImpl:Wz,tileImpl:Uz,topKImpl:Gz,transposeImpl:Hz,uniqueImpl:rOt}=Ic;var Qie=ye({opType:Z.ABS,cpuKernelImpl:Lz}),Kz={kernelName:Xs,backendName:\"webgpu\",kernelFunc:Qie};var Zie=ye({opType:Z.ACOS}),qz={kernelName:Vo,backendName:\"webgpu\",kernelFunc:Zie};var Jie=ye({opType:Z.ACOSH}),jz={kernelName:Wo,backendName:\"webgpu\",kernelFunc:Jie};var eue=et({opType:fe.ADD,cpuKernelImpl:mz,supportsComplex:!0}),Xz={kernelName:uo,backendName:\"webgpu\",kernelFunc:eue};var tx=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=X(this.outputShape),this.dispatch=H(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 ${G(\"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 tue(r){let{inputs:e,backend:t}=r,o=e;if(o.length===1)return At({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 tx(s);return t.runWebGPUProgram(a,o,n)}var Yz={kernelName:Uo,backendName:\"webgpu\",kernelFunc:tue};var rx=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]}`);let e=this.workgroupSize[0];return`\n var tile : array, ${this.workgroupSize[0]}>;\n ${G()} {\n var x = i32(workgroupId.x) * ${e} + i32(localId.x);\n var y = i32(workgroupId.y) * ${e} + 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) * ${e} + i32(localId.x);\n y = i32(workgroupId.x) * ${e} + i32(localId.y);\n if (x < height && y < width) {\n setOutputAtIndex((y * height + x), tile[localId.x]\n [localId.y]);\n }\n }\n `}};var ox=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=32768&&o>=512?this.workgroupSize=[512,1,1]:e.inSize>=4096?this.workgroupSize=[256,1,1]:this.workgroupSize=[64,1,1],this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,[1,1,1]),this.reduceType=t,this.shaderKey=`reduce_${t}`}getUserCode(){let e=\"\",t=\"0.0\",o=this.workgroupSize[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\"):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 n=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 ${G(\"index\")} {\n let outputIndex = index / ${o};\n let offset = getOffset(outputIndex);\n var bestValue = ${t};\n let Length = uniforms.reduceSize;\n let WorkPerThread = DIV_CEIL(u32(Length), ${o}u);\n for (var k = i32(localId.x); k < Length && outputIndex < uniforms.size;\n k = k + ${o}) {\n let candidate = f32(x[offset + k]);\n ${e}\n }\n xBestValues[localId.x] = bestValue;\n workgroupBarrier();\n\n var reduceSize = min(u32(Length), ${o}u);\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 ${n}\n }\n }\n `}};var rue={mean:\"float32\",all:\"bool\",any:\"bool\"};function eo(r,e,t,o,n){let s=r.shape.length,a=[],i=y.parseAxisParam(e,r.shape),p=i,u=w.getAxesPermutation(p,s),c=r;u!=null&&(c=xr({inputs:{x:r},attrs:{perm:u},backend:n}),p=w.getInnerMostAxes(p.length,s),a.push(c)),w.assertAxesAreInnerMostDims(o,p,s);let[l,m]=w.computeOutAndReduceShapes(c.shape,p),d=l;t&&(d=w.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=_z(h,y.sizeFromShape(m),d,r.dtype);f=n.makeTensorInfo(d,r.dtype,g);break;case\"prod\":let{outVals:x,outShape:b,outDtype:C}=Fz(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=rue[o]||oi(r.dtype),S=[{type:\"int32\",data:[h]}],k=new nx(b,o,n.device.limits.maxComputeWorkgroupSizeX),_=n.runWebGPUProgram(k,[c],C,S);a.push(_),f=pe({inputs:{x:_},attrs:{shape:d},backend:n})}return a.forEach(h=>n.disposeData(h.dataId)),f}function oue(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{keepDims:s,axis:a}=o;return eo(n,a,s,\"all\",t)}var Zz={kernelName:Go,backendName:\"webgpu\",kernelFunc:oue};function nue(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{keepDims:s,axis:a}=o;return eo(n,a,s,\"any\",t)}var Jz={kernelName:Ho,backendName:\"webgpu\",kernelFunc:nue};var Yc=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]=w.computeOutAndReduceShapes(e,n);this.outputShape=s.length===0?[1]:s,this.dispatchLayout=X(this.outputShape),y.sizeFromShape(a)<32?(this.type=\"plain\",this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize)):(this.type=\"shared\",this.dispatch=H(this.dispatchLayout,this.outputShape,[1,1,1])),this.inputShape=e,this.shaderKey=`argMinMax_${this.op}_${this.type}`}getUserCode(){let e=this.workgroupSize[0],t=()=>this.inputShape.length===1?\"uniforms.xShape\":`uniforms.xShape.${Oo(this.inputShape.length-1)}`,o=()=>{let n=\"\";if(this.outputShape.length===1)this.inputShape.length!==1&&(n+=\"outputCoords,\");else for(let s=0;s u32 {\n return ((a - 1u) / b + 1u);\n }\n\n ${`\n var xBestIndices : array;\n var xBestValues : array;\n `}\n\n ${G(\"index\")} {\n let outputIndex = index / ${e};\n let reduceLength = ${t()};\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 + ${e}) {\n let candidate = getX(${o()} 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), ${e}u);\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 ${G(\"index\")} {\n if (index < uniforms.size) {\n let outputCoords = getCoordsFromIndex(index);\n var bestIndex = 0;\n var bestValue = getX(${o()} 0);\n let reduceLength = ${t()};\n for (var i = 1; i < reduceLength; i++) {\n let candidate = getX(${o()} i);\n if (candidate ${this.op} bestValue) {\n bestValue = candidate;\n bestIndex = i;\n }\n }\n setOutputAtIndexI32(index, bestIndex);\n }\n }\n `}};function sue(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s}=o,a=y.parseAxisParam(s,n.shape),i=w.getAxesPermutation(a,n.shape.length),p=n,u=[];i!=null&&(p=xr({inputs:{x:n},backend:t,attrs:{perm:i}}),u.push(p),a=w.getInnerMostAxes(a.length,p.shape.length)),w.assertAxesAreInnerMostDims(\"argMax\",[a[0]],p.shape.length);let c=new Yc(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 eV={kernelName:Ys,backendName:\"webgpu\",kernelFunc:sue};function aue(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s}=o,a=y.parseAxisParam(s,n.shape),i=w.getAxesPermutation(a,n.shape.length),p=n,u=[];i!=null&&(p=xr({inputs:{x:n},backend:t,attrs:{perm:i}}),u.push(p),a=w.getInnerMostAxes(a.length,p.shape.length)),w.assertAxesAreInnerMostDims(\"argMin\",[a[0]],p.shape.length);let c=new Yc(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 tV={kernelName:Qs,backendName:\"webgpu\",kernelFunc:aue};var iue=ye({opType:Z.ASIN}),rV={kernelName:Ko,backendName:\"webgpu\",kernelFunc:iue};var uue=ye({opType:Z.ASINH}),oV={kernelName:qo,backendName:\"webgpu\",kernelFunc:uue};var pue=ye({opType:Z.ATAN}),nV={kernelName:jo,backendName:\"webgpu\",kernelFunc:pue};var cue=et({opType:fe.ATAN2}),sV={kernelName:Yo,backendName:\"webgpu\",kernelFunc:cue};var lue=ye({opType:Z.ATANH}),aV={kernelName:Xo,backendName:\"webgpu\",kernelFunc:lue};var sx=class{constructor(e){this.variableNames=[\"x\"],this.uniforms=\"strides : vec2,\",this.workgroupSize=[256,1,1],this.size=!0,this.outputShape=e.outShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"poolWithFilterSizeEqualsOne\"}getUserCode(){return`\n ${G(\"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.strides;\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 Ba=class{constructor(e,t,o=!1,n=!1,s=!1){if(this.variableNames=[\"x\"],this.uniforms=\"strides : vec2, pads : vec2, dilations : vec2, convDims : vec2, filterDims : vec2,\",this.workgroupSize=[128,1,1],this.size=!0,t===\"avg\"&&o)throw new Error(\"Cannot compute positions for average pool.\");this.outputShape=e.outShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.poolType=t,this.computePositions=o,this.flattenPositions=n,this.includeBatchIndex=s,this.shaderKey=`pool2D_${t}_${o}_${n}_${s}`}getUserCode(){let e;this.poolType===\"avg\"?e=\"resultValue = resultValue + value; count = count + 1.0;\":this.computePositions?e=`let currMaxValue = mix(value, maxValue, maxValueFound);\n if (value >= currMaxValue) {\n maxValue = value;\n maxValueFound = 1.0;\n maxPosition = ${this.flattenPositions?this.includeBatchIndex?\"((batch * uniforms.xShape[1] + xR) * uniforms.xShape[2] + xC) * uniforms.xShape[3] + d\":\"(xR * uniforms.xShape[2] + xC) * uniforms.xShape[3] + d\":\"wR * uniforms.filterDims.y + wC\"};\n }`:e=\"resultValue = max(value, resultValue);\";let t=\"resultValue\";return this.poolType===\"avg\"&&(t=\"resultValue / max(count, 1.0)\"),`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n let batch = coords[0];\n let d = coords[3];\n let xRCCorner = vec2(coords.yz) * uniforms.strides - uniforms.pads;\n let xRCorner = xRCCorner.x;\n let xCCorner = xRCCorner.y;\n\n ${this.computePositions?`var maxValue = 0.0;\n var maxValueFound = 0.0;\n var maxPosition = 0;`:`var resultValue = ${this.poolType===\"avg\"?\"0.0\":\"-1.0 / pow(10.0, -20.0)\"};`}\n\n var count = 0.0;\n for (var wR = 0; wR < uniforms.filterDims.x; wR = wR + uniforms.dilations.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.dilations.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, d);\n ${e}\n }\n }\n\n ${this.computePositions?\"setOutputAtIndexI32(index, maxPosition);\":`setOutputAtIndex(index, ${t});`}\n }\n }\n `}},Iu=class{constructor(e,t,o=!1,n=!1,s=!1){if(this.variableNames=[\"x\"],this.uniforms=\"strides : vec3, pads : vec3, convDims : vec3, filterDims : vec3,\",this.workgroupSize=[128,1,1],this.size=!0,t===\"avg\"&&o)throw new Error(\"Cannot compute positions for average pool.\");this.outputShape=e.outShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.poolType=t,this.computePositions=o,this.flattenPositions=n,this.includeBatchIndex=s,this.shaderKey=`pool3D_${t}_${o}_${n}_${s}`}getUserCode(){let e;this.poolType===\"avg\"?e=\"resultValue += value; count += 1.0;\":this.computePositions?e=`let currMaxValue = mix(value, maxValue, maxValueFound);\n if (value >= currMaxValue) {\n maxValue = value;\n maxValueFound = 1.0;\n maxPosition = ${this.flattenPositions?this.includeBatchIndex?\"(((batch * uniforms.xShape.y + xD) * uniforms.xShape.z + xR) * uniforms.xShape.w + xC) * uniforms.xShape.u + ch\":\"((xD * uniforms.xShape.z + xR) * uniforms.xShape.w + xC) * uniforms.xShape.u + ch\":\"wD * uniforms.filterDims.y * uniforms.filterDims.y + wR * uniforms.filterDims.z + wC\"};\n }`:e=\"resultValue = max(value, resultValue);\";let t=\"resultValue\";return this.poolType===\"avg\"&&(t=\"resultValue / max(count, 1.0)\"),`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n let batch = coords.x;\n let ch = coords.u;\n\n let xCorner = vec3(coords.y, coords.z, coords.w) * uniforms.strides - uniforms.pads;\n let xDCorner = xCorner.x;\n let xRCorner = xCorner.y;\n let xCCorner = xCorner.z;\n\n ${this.computePositions?`var maxValue = 0.0;\n var maxValueFound = 0.0;\n var maxPosition = 0;`:`var resultValue = ${this.poolType===\"avg\"?\"0.0\":\"-1.0 / pow(10.0, -20.0)\"};`}\n\n var count = 0.0;\n for (var wD = 0; wD < uniforms.filterDims.x; wD++) {\n let xD = xDCorner + wD;\n if (xD < 0 || xD >= uniforms.convDims.x) {\n continue;\n }\n\n for (var wR = 0; wR < uniforms.filterDims.y; wR++) {\n let xR = xRCorner + wR;\n if (xR < 0 || xR >= uniforms.convDims.y) {\n continue;\n }\n\n for (var wC = 0; wC < uniforms.filterDims.z; wC++) {\n let xC = xCCorner + wC;\n if (xC < 0 || xC >= uniforms.convDims.z) {\n continue;\n }\n\n let value = getX(batch, xD, xR, xC, ch);\n ${e}\n }\n }\n }\n\n ${this.computePositions?\"setOutputAtIndexI32(index, maxPosition);\":`setOutputAtIndex(index, ${t});`}\n }\n }\n `}};function t0(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{reductionIndices:s,keepDims:a}=o;return eo(n,s,a,\"max\",t)}var iV={kernelName:zn,backendName:\"webgpu\",kernelFunc:t0};function r0(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{keepDims:s,axis:a}=o;return eo(n,a,s,\"mean\",t)}var uV={kernelName:Un,backendName:\"webgpu\",kernelFunc:r0};function ax(r,e,t,o){if(e.filterWidth===1&&e.filterHeight===1&&y.arraysEqual(e.inShape,e.outShape))return At({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=pe({inputs:{x:r},backend:o,attrs:{shape:[r.shape[a-3]*r.shape[a-2],r.shape[a-1]]}}),p;t===\"avg\"?p=r0({inputs:{x:i},backend:o,attrs:{axis:0,keepDims:!1}}):(y.assert(t===\"max\",()=>`Invalid pool type ${t}`),p=t0({inputs:{x:i},backend:o,attrs:{reductionIndices:0,keepDims:!1}}));let u=pe({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 sx(e):(t===\"avg\"?n=new Ba(e,\"avg\"):(y.assert(t===\"max\",()=>`Invalid pool type ${t}`),n=new Ba(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 mue(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{filterSize:s,strides:a,pad:i,dimRoundingMode:p}=o,c=w.computePool2DInfo(n.shape,s,a,1,i,p);return ax(n,c,\"avg\",t)}var pV={kernelName:Qo,backendName:\"webgpu\",kernelFunc:mue};function due(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=w.computePool3DInfo(n.shape,s,a,c,i,u,p),m=new Iu(l,\"avg\"),d=[{type:\"int32\",data:[l.strideDepth,l.strideHeight,l.strideWidth]},{type:\"int32\",data:[l.padInfo.front,l.padInfo.top,l.padInfo.left]},{type:\"int32\",data:[l.inDepth,l.inHeight,l.inWidth]},{type:\"int32\",data:[l.effectiveFilterDepth,l.effectiveFilterHeight,l.effectiveFilterWidth]}];return t.runWebGPUProgram(m,[n],n.dtype,d)}var cV={kernelName:Zs,backendName:\"webgpu\",kernelFunc:due};var ix=class{constructor(e){this.variableNames=[\"dy\"],this.uniforms=`strides : vec2, pads : vec2, dilations : vec2, filterDims : vec2,\n outHeight : i32, outWidth : i32, avgMultiplier : f32,`,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.inShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"avgPool2DBackprop\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n let batch = coords[0];\n let d = coords[3];\n\n let dyRCCorner = vec2(coords.yz) - uniforms.pads;\n let dyRCorner = dyRCCorner.x;\n let 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 var dotProd = 0.0;\n for (var wR = 0; wR < uniforms.filterDims[0]; wR = wR + uniforms.dilations[0]) {\n let dyR = f32(dyRCorner + wR) / f32(uniforms.strides[0]);\n\n if (dyR < 0.0 || dyR >= f32(uniforms.outHeight) || fract(dyR) > 0.0) {\n continue;\n }\n let idyR = i32(dyR);\n\n for (var wC = 0; wC < uniforms.filterDims[1]; wC = wC + uniforms.dilations[1]) {\n let dyC = f32(dyCCorner + wC) / f32(uniforms.strides[1]);\n\n if (dyC < 0.0 || dyC >= f32(uniforms.outWidth) || fract(dyC) > 0.0) {\n continue;\n }\n let idyC = i32(dyC);\n\n let dyValue = getDy(batch, idyR, idyC, d);\n\n dotProd = dotProd + dyValue * uniforms.avgMultiplier;\n }\n }\n setOutputAtIndex(index, dotProd);\n }\n }\n `}},ux=class{constructor(e){this.variableNames=[\"dy\"],this.uniforms=`strides : vec3, pads : vec3, filterDims : vec3,\n outDepth : i32, outHeight : i32, outWidth : i32, avgMultiplier : f32,`,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.inShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"avgPool3DBackprop\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n let batch = coords.x;\n let ch = coords.u;\n\n let dyCorner = vec3(coords.y, coords.z, coords.w) - uniforms.pads;\n let dyDCorner = dyCorner.x;\n let dyRCorner = dyCorner.y;\n let 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 var dotProd = 0.0;\n for (var wD = 0; wD < uniforms.filterDims[0]; wD++) {\n let dyD = f32(dyDCorner + wD) / f32(uniforms.strides[0]);\n\n if (dyD < 0.0 || dyD >= f32(uniforms.outDepth) || fract(dyD) > 0.0) {\n continue;\n }\n let idyD = i32(dyD);\n\n for (var wR = 0; wR < uniforms.filterDims[1]; wR++) {\n let dyR = f32(dyRCorner + wR) / f32(uniforms.strides[1]);\n\n if (dyR < 0.0 || dyR >= f32(uniforms.outHeight) || fract(dyR) > 0.0) {\n continue;\n }\n let idyR = i32(dyR);\n\n for (var wC = 0; wC < uniforms.filterDims[2]; wC++) {\n let dyC = f32(dyCCorner + wC) / f32(uniforms.strides[2]);\n\n if (dyC < 0.0 || dyC >= f32(uniforms.outWidth) || fract(dyC) > 0.0) {\n continue;\n }\n let idyC = i32(dyC);\n\n let dyValue = getDy(batch, idyD, idyR, idyC, ch);\n dotProd += dyValue * uniforms.avgMultiplier;\n }\n }\n }\n setOutputAtIndex(index, dotProd);\n }\n }\n `}};function fue(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=w.computePool3DInfo(a.shape,i,p,1,u,c),m=new ux(l),d=1/(l.filterDepth*l.filterHeight*l.filterWidth),f=[{type:\"int32\",data:[l.strideDepth,l.strideHeight,l.strideWidth]},{type:\"int32\",data:[l.effectiveFilterDepth-1-l.padInfo.front,l.effectiveFilterHeight-1-l.padInfo.top,l.effectiveFilterWidth-1-l.padInfo.left]},{type:\"int32\",data:[l.effectiveFilterDepth,l.effectiveFilterHeight,l.effectiveFilterWidth]},{type:\"int32\",data:[l.outDepth]},{type:\"int32\",data:[l.outHeight]},{type:\"int32\",data:[l.outWidth]},{type:\"float32\",data:[d]}];return t.runWebGPUProgram(m,[n],a.dtype,f)}var lV={kernelName:Ri,backendName:\"webgpu\",kernelFunc:fue};function hue(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s}=e,a=s;fm([n,s],\"avgPoolGrad\");let{filterSize:i,strides:p,pad:u}=o,c=w.computePool2DInfo(a.shape,i,p,1,u),l=new ix(c),m=1/(c.filterHeight*c.filterWidth),d=[{type:\"int32\",data:[c.strideHeight,c.strideWidth]},{type:\"int32\",data:[c.effectiveFilterHeight-1-c.padInfo.top,c.effectiveFilterWidth-1-c.padInfo.left]},{type:\"int32\",data:[c.dilationHeight,c.dilationWidth]},{type:\"int32\",data:[c.effectiveFilterHeight,c.effectiveFilterWidth]},{type:\"int32\",data:[c.outHeight]},{type:\"int32\",data:[c.outWidth]},{type:\"float32\",data:[m]}];return t.runWebGPUProgram(l,[n],a.dtype,d)}var mV={kernelName:$i,backendName:\"webgpu\",kernelFunc:hue};function gue(r){let{inputs:e,backend:t,attrs:o}=r,{a:n,b:s}=e,{transposeA:a,transposeB:i}=o;return $p({a:n,b:s,transposeA:a,transposeB:i,backend:t})}var dV={kernelName:Zo,backendName:\"webgpu\",kernelFunc:gue};var px=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=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize,[this.workPerThread,1,1]),this.start=e,this.uniforms=`start : ${ft(e.length)}, `,this.shaderKey=\"slice\"}getUserCode(){let e=ft(this.rank),t=xue(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.${o0[a]} = uniforms.start.${Oo(a)} + coords.${o0[a]};`),`\n ${G(\"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 `}},o0=[\"x\",\"y\",\"z\",\"w\",\"u\",\"v\"];function xue(r){if(r===1)return\"sourceLoc\";if(r<=6)return o0.slice(0,r).map(e=>`sourceLoc.${e}`).join(\",\");throw Error(`Slicing for rank ${r} is not yet supported`)}function Hs(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{begin:s,size:a}=o,[i,p]=pt.parseSliceParams(n,s,a);if(pt.assertParamsValid(n,i,p),t.shouldExecuteOnCPU([n])||n.dtype===\"string\"){let l=t.tensorMap.get(n.dataId),m=Bz(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 px(i,p),c=[{type:\"int32\",data:i}];return t.runWebGPUProgram(u,[n],n.dtype,c)}var fV={kernelName:ha,backendName:\"webgpu\",kernelFunc:Hs};var yue=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=w.getReshaped(n.shape,s,i),u=w.getPermuted(p.length,s.length),c=w.getReshapedPermuted(n.shape,s,i),l=w.getSliceBeginCoords(a,s.length),m=w.getSliceSize(c,a,s.length),d=[],f=pe({inputs:{x:n},backend:t,attrs:{shape:p}}),h=xr({inputs:{x:f},backend:t,attrs:{perm:u}}),g=pe({inputs:{x:h},backend:t,attrs:{shape:c}}),x=Hs({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},hV={kernelName:Js,backendName:\"webgpu\",kernelFunc:yue};var bue=`\n fn bincount_write(index: i32, value: f32) {\n ${Qr(\"&result[index]\",\"value\",\"float32\")}\n }\n`,Cue=`\n fn bincount_write(index: i32, value: f32) {\n atomicStore(&result[index], bitcast(value));\n }\n`,Qc=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=X(this.outputShape),this.dispatch=H(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?Cue:bue}\n ${G(\"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?\"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?\"getW(coord[0], coord[1])\":\"1.\"};\n bincount_write(coord.x * uniforms.binCountSize + indexVal, value);\n }\n }`}\n }\n `}};function wue(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=vt({backend:t,attrs:{shape:c,value:0,dtype:l}}),d=new Qc([i],u),f=[{type:\"int32\",data:[a]}],h=u?[n,s]:[n];return t.runWebGPUProgram(d,h,l,f,m)}var gV={kernelName:Jo,backendName:\"webgpu\",kernelFunc:wue};var cx=class{constructor(e){this.outputShape=[],this.variableNames=[\"s0\",\"s1\"],this.uniforms=\"s0Size : i32, s1Size : i32, \",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=[e],this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"broadcastArgs\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n var s0 = 1.0;\n var s1 = 1.0;\n let indexS0 = index - uniforms.size + uniforms.s0Size;\n let indexS1 = index - uniforms.size + uniforms.s1Size;\n if (indexS0 >= 0) {\n s0 = getS0(indexS0);\n }\n if (indexS1 >= 0) {\n s1 = getS1(indexS1);\n }\n\n if (s0 == 1.0) {\n setOutputAtIndex(index, s1);\n } else if (s1 == 1.0) {\n setOutputAtIndex(index, s0);\n } else if (s0 != s1) {\n setOutputAtIndex(index, uniforms.NAN);\n } else {\n setOutputAtIndex(index, s0);\n }\n }\n }\n `}};function Sue(r){let{inputs:e,backend:t}=r,{s0:o,s1:n}=e;if(t.shouldExecuteOnCPU([o,n])){let c=t.tensorMap.get(o.dataId),l=t.tensorMap.get(n.dataId),m=c.values,d=l.values,f=w.assertAndGetBroadcastShape(Array.from(m),Array.from(d));return t.makeTensorInfo([f.length],\"int32\",Int32Array.from(f))}let s=y.sizeFromShape(o.shape),a=y.sizeFromShape(n.shape),i=Math.max(s,a),p=new cx(i),u=[{type:\"int32\",data:[s]},{type:\"int32\",data:[a]}];return t.runWebGPUProgram(p,[o,n],\"int32\",u)}var xV={kernelName:ea,backendName:\"webgpu\",kernelFunc:Sue};var n0=et({opType:fe.NOT_EQUAL,dtype:\"bool\",cpuKernelImpl:Az}),yV={kernelName:Yn,backendName:\"webgpu\",kernelFunc:n0};function vi(r){let{inputs:e,backend:t}=r,{input:o}=e,n=t.tensorMap.get(o.dataId);return At({inputs:{x:n.complexTensorInfos.real},backend:t})}var bV={kernelName:Hi,backendName:\"webgpu\",kernelFunc:vi};function CV(r,e){let t=new Jr(r.shape,Z.TO_INT),o=e.runWebGPUProgram(t,[r],\"int32\");return{dataId:o.dataId,shape:o.shape,dtype:o.dtype}}function s0(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=Gr(n.shape),i=s0({inputs:{x:n},backend:t,attrs:{dtype:\"float32\"}}),p=xo({inputs:{real:i,imag:a},backend:t});return a.dispose(),t.disposeData(i.dataId),p}if(n.dtype===\"complex64\"){let a=vi({inputs:{input:n},backend:t}),i=s0({inputs:{x:a},backend:t,attrs:{dtype:s}});return t.disposeData(a.dataId),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.tensorMap.get(n.dataId).values,[i,p,u]=dz(a,n.shape,n.dtype,s);return t.makeTensorInfo(i,p,u)}if(s===\"int32\")return CV(n,t);if(s===\"bool\"){let a=t.makeTensorInfo([],\"bool\",y.getTypedArrayFromDType(\"bool\",1)),p=n0({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 wV={kernelName:yo,backendName:\"webgpu\",kernelFunc:s0};var Iue=ye({opType:Z.CEIL,cpuKernelImpl:fz}),SV={kernelName:en,backendName:\"webgpu\",kernelFunc:Iue};var lx=class{constructor(e){this.variableNames=[\"A\"],this.uniforms=\"minVal : f32, maxVal : f32,\",this.workPerThread=4,this.workgroupSize=[64,1,1],this.outputComponent=4,this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize,[this.workPerThread,1,1]),this.shaderKey=\"clipVec4\"}getUserCode(){return`\n ${G(\"index\")} {\n if(index < uniforms.size) {\n let value = getAByOutputIndex(index);\n var clampedValue = clamp(\n value, vec4(uniforms.minVal), vec4(uniforms.maxVal));\n clampedValue = select(clampedValue, value, isnanVec4(value));\n setOutputAtIndex(index, clampedValue);\n }\n }\n `}};var mx=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=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"clip\"}getUserCode(){return`\n ${G(\"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 vue(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 lx(n.shape):i=new mx(n.shape),t.runWebGPUProgram(i,[n],n.dtype,p)}var IV={kernelName:bo,backendName:\"webgpu\",kernelFunc:vue};var dx=class{constructor(e){this.outputShape=[],this.variableNames=[\"real\",\"imag\"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"complexAbs\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let re = abs(getRealByOutputIndex(index));\n let im = abs(getImagByOutputIndex(index));\n let mx = max(re, im);\n\n // The length function in wgsl may be not underflow-safe on some GPUs.\n // So the safe solution is to ensure underflow-safety in all cases.\n setOutputAtIndex(index, select(mx * length(vec2(1, min(re, im)/mx)), 0.0, mx == 0.0));\n }\n }\n `}};function vV(r,e){return{dataId:e.dataId,dtype:e.dtype,shape:r.shape}}function kue(r){let{inputs:e,backend:t}=r,{x:o}=e,n=t.tensorMap.get(o.dataId),s=new dx(o.shape),a=[vV(o,n.complexTensorInfos.real),vV(o,n.complexTensorInfos.imag)];return t.runWebGPUProgram(s,a,a[0].dtype)}var kV={kernelName:Ai,backendName:\"webgpu\",kernelFunc:kue};var fx=class{constructor(e){this.uniforms=\"\",this.workPerThread=1,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=w.computeOutShape(e,1),this.variableNames=e.map((t,o)=>`T${o}`),this.dispatchLayout=X(this.outputShape),this.dispatch=H(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;svi({inputs:{input:C},backend:t})),h=r.map(C=>Rp({inputs:{input:C},backend:t})),g=Zc(f,e,t),x=Zc(h,e,t),b=xo({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 pe({inputs:{x:k},backend:t,attrs:{shape:$}})}),h=f.map(k=>({vals:t.readSync(k.dataId),shape:k.shape})),g=w.computeOutShape(f.map(k=>k.shape),1),x=f[0].shape[0]===1,b=hz(h,g,o,x),C=w.computeOutShape(r.map(k=>k.shape),e),S=t.makeTensorInfo(C,o,b);return f.forEach(k=>t.disposeData(k.dataId)),S}let s=t.device.limits.maxStorageBuffersPerShaderStage-1;if(r.length>s){let f=[];for(let g=0;gf.shape),u=new fx(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=pe({inputs:{x:m},backend:t,attrs:{shape:i}});return t.disposeData(m.dataId),d}function Nue(r,e,t){let o=w.computeOutShape(r.map(s=>s.shape),e);return{tensors2D:r.map(s=>pe({inputs:{x:s},backend:t,attrs:{shape:[y.sizeFromShape(s.shape.slice(0,e)),y.sizeFromShape(s.shape.slice(e))]}})),outShape:o}}function a0(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);w.assertParamsConsistent(a,s);let i=w.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}):Zc(p,s,t)}var TV={kernelName:ta,backendName:\"webgpu\",kernelFunc:a0};function Tue(r,e,t,o,n=!1,s=null,a=!1,i=4,p=4,u=4){let c=D=>{switch(D){case 1:return\"resData = f32(x[xIndex]);\";case 3:return\"resData = vec3(x[xIndex], x[xIndex + 1], x[xIndex + 2]);\";case 4:return\"resData = vec4(x[xIndex / 4]);\";default:throw new Error(`innerElementSize ${D} is not supported.`)}},l=D=>{switch(D){case 1:return\"return f32(W[row * uniforms.wShape[3] + col]);\";case 4:return\"return vec4(W[(row * uniforms.wShape[3] + col) / 4]);\";default:throw new Error(`innerElementSize ${D} 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.strides[0] + uniforms.dilations[0] * WRow - uniforms.pads[0];\n let xCol = outCol * uniforms.strides[1] + uniforms.dilations[1] * WCol - uniforms.pads[1];\n let xCh = ${x} % inChannels;\n var resData = ${Ae(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 ${b}`:`\n if (row < uniforms.dimAOuter && col < uniforms.dimInner) {\n ${b}\n }\n return ${Ae(i)}(0.0);`:o&&t?`\n ${b}`:`\n if (row < uniforms.dimInner && col < uniforms.dimBOuter) {\n ${b}\n }\n return ${Ae(i)}(0.0);`,S=`${l(p)}`,k=Ae(u),_=r?Ae(i):Ae(p),$=r?Ae(p):Ae(i);return`\n ${dr(s,a,u===4,4)}\n fn mm_readA(batch: i32, row : i32, col : i32) -> ${_} {\n ${r?C:S}\n }\n\n fn mm_readB(batch: i32, row : i32, col : i32) -> ${$} {\n ${r?S:C}\n }\n\n fn mm_write(batch: i32, row : i32, col : i32, valueIn : ${k}) {\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 ${Zr(n,s)}\n setOutputAtCoords(coords[0], coords[1], coords[2], coords[3], value);\n }\n }`}var hx=class{constructor(e,t,o,n,s=!1,a=null,i=!1,p=!1){this.variableNames=[\"x\",\"W\"],this.uniforms=\"filterDims : vec2, pads : vec2, strides : vec2, dilations : 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=lm(this.dispatchLayout,this.outputShape,this.isVec4),this.elementsPerThread=mm(this.dispatchLayout,this.outputShape,this.isVec4),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize,this.elementsPerThread),this.isVec4?(this.outputComponent=4,this.isChannelsLast&&e.inChannels%4!==0?(this.innerElementSize=3,this.variableComponents=[1,4]):(this.innerElementSize=4,this.variableComponents=[4,4]),s&&(this.variableNames.push(\"bias\"),this.variableComponents.push(4)),i&&(this.variableNames.push(\"preluActivationWeights\"),this.variableComponents.push(4))):(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?_p(this.elementsPerThread,this.workgroupSize,!this.isChannelsLast,this.tileInner):Ep(this.elementsPerThread,this.workgroupSize,!this.isChannelsLast,this.tileInner,!1,null,this.sequentialAccessByThreads),t=this.isVec4?[this.innerElementSize,4,4]:[1,1,1];return`\n ${Tue(this.isChannelsLast,this.fitAOuter,this.fitBOuter,this.fitInner,this.addBias,this.activation,this.hasPreluActivationWeights,t[0],t[1],t[2])}\n ${e}\n `}};var gx=class{constructor(e,t=!1,o=null,n=!1){this.variableNames=[\"x\",\"W\"],this.uniforms=\"filterDims: vec2, pads: vec2, strides: vec2, dilations: 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=H(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 ${dr(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 ${Zr(this.addBias,this.activation)}\n setOutputAtCoords(coords.x, coords.y, coords.z, coords.w, value);\n }\n }\n ${G(\"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.strides[0] + uniforms.dilations[0] * row - uniforms.pads[0];\n let xCol = outCol * uniforms.strides[1] + uniforms.dilations[1] * col - uniforms.pads[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 xx=class{constructor(e,t){this.variableNames=[\"x\"],this.uniforms=`pads : vec2, strides : vec2, dilations : vec2, outWidth : i32, itemsPerBlockRow : i32,\n inChannels : i32,`,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(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 ${G(\"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.strides[0] - uniforms.pads[0];\n let xRow = offsetY + uniforms.dilations[0] * (col / uniforms.itemsPerBlockRow);\n var value = 0.0;\n if(xRow < uniforms.xShape[${e}] && xRow >= 0) {\n let offsetX = (row % uniforms.outWidth) * uniforms.strides[1] -\n uniforms.pads[1];\n let xCol = offsetX + uniforms.dilations[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 yx(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 _ue({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=pe({inputs:{x:r},backend:o,attrs:{shape:[1,t.batchSize,x]}}),f=pe({inputs:{x:e},backend:o,attrs:{shape:[1,x,t.outChannels]}})}else d=pe({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=pe({inputs:{x:e},backend:o,attrs:{shape:[1,t.inChannels,t.outChannels]}});if(m.push(d),m.push(f),s!=null){let x=yx(s.shape,p);x!=null&&(s=pe({inputs:{x:s},backend:o,attrs:{shape:x}}),m.push(s))}if(n!=null){let x=yx(n.shape,p);x!=null&&(n=pe({inputs:{x:n},backend:o,attrs:{shape:x}}),m.push(n))}let h=$p({a:p?d:f,b:p?f:d,transposeA:u,transposeB:c,backend:o,bias:n,activation:i,preluActivationWeights:s,leakyreluAlpha:a}),g=pe({inputs:{x:h},backend:o,attrs:{shape:t.outShape}});m.push(h);for(let x of m)o.disposeData(x.dataId);return g}function Eue({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\",S=p*u*c,k=h*f,_=C?[t.batchSize,k,S]:[t.batchSize,S,k],$=new xx(_,C),R=[{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]}],D=o.runWebGPUProgram($,[r],r.dtype,R),P=[];P.push(D);let O=pe({inputs:{x:e},backend:o,attrs:{shape:[1,S,-1]}});if(P.push(O),s!=null){let U=yx(s.shape,C);U!=null&&(s=pe({inputs:{x:s},backend:o,attrs:{shape:U}}),P.push(s))}if(n!=null){let U=yx(n.shape,C);U!=null&&(n=pe({inputs:{x:n},backend:o,attrs:{shape:U}}),P.push(n))}let B=$p({a:C?D:O,b:C?O:D,transposeA:!C,transposeB:!1,backend:o,bias:n,activation:i,preluActivationWeights:s,leakyreluAlpha:a}),z=pe({inputs:{x:B},backend:o,attrs:{shape:t.outShape}});P.push(B);for(let U of P)o.disposeData(U.dataId);return z}function bx({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=A().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 _ue({x:r,filter:e,convInfo:t,backend:o,bias:n,activation:i,preluActivationWeights:s,leakyreluAlpha:a});let d=A().getNumber(\"WEBGPU_THRESHOLD_TO_INCREASE_WORKGROUPS_FOR_MATMUL\"),f=d>-1?d:o.thresholdToIncreaseWorkgroups,h=t.batchSize*Math.ceil(t.outHeight*t.outWidth/32)*Math.ceil(t.outChannels/32);if(A().getBool(\"WEBGPU_CONV_SEPARATE_IM2COL_SHADER\")||h<=f)return Eue({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 gx(t,p,i,u);else{let _=c?t.outHeight*t.outWidth:t.outChannels,$=c?t.outChannels:t.outHeight*t.outWidth,R=t.filterHeight*t.filterWidth*t.inChannels;b.push({type:\"int32\",data:[_]},{type:\"int32\",data:[$]},{type:\"int32\",data:[R]});let D=o.adapterInfo.isIntel();g=new hx(t,_,$,R,p,i,u,D)}let C=[],S=[r,e];p&&(!c&&n.shape.length===1&&(n=pe({inputs:{x:n},backend:o,attrs:{shape:[n.shape[0],1,1]}}),C.push(n)),S.push(n)),u&&(!c&&s.shape.length===1&&(s=pe({inputs:{x:s},backend:o,attrs:{shape:[s.shape[0],1,1]}}),C.push(s)),S.push(s)),i===\"leakyrelu\"&&(b.push({type:\"float32\",data:[a]}),g.uniforms+=\" alpha : f32,\");let k=o.runWebGPUProgram(g,S,r.dtype,b);for(let _ of C)o.disposeData(_.dataId);return k}function $ue(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=w.convertConv2DDataFormat(p),m=w.computeConv2DInfo(n.shape,s.shape,a,u,i,c,!1,l);return bx({x:n,filter:s,convInfo:m,backend:o})}var _V={kernelName:tn,backendName:\"webgpu\",kernelFunc:$ue};var Cx=class{constructor(e){this.variableNames=[\"dy\",\"W\"],this.uniforms=\"filterDims : vec2, pads : vec2, strides : vec2, outBackprop : vec4,\",this.workgroupSize=[64,1,1],this.size=!1,this.isVec4=!1,this.workPerThread=1,this.outputShape=e.inShape,this.isChannelsLast=e.dataFormat===\"channelsLast\",this.isVec4=this.isChannelsLast&&e.outChannels%4===0&&e.inChannels%4===0,this.isVec4?(this.workPerThread=2,this.outputComponent=4,this.workgroupSize=[4,4,4],this.dispatchLayout={x:[3],y:[2],z:[0,1]},this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize,[4,this.workPerThread,1])):(this.size=!0,this.workPerThread=1,this.workgroupSize=[64,1,1],this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize)),this.shaderKey=`conv2DDerInput_${this.isChannelsLast}_${this.isVec4}_${this.workPerThread}`}getUserCode(){let e=this.isChannelsLast?1:2,t=this.isChannelsLast?2:3,o=this.isChannelsLast?3:1,n=`\n ${G()} {\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\n let dyCorner = vec2(r, c) - uniforms.pads;\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: array, ${this.workPerThread}>;\n for (var i = 0; i < ${this.workPerThread}; i++) {\n dotProd[i] = vec4(0.0);\n }\n for (var wR = 0; wR < uniforms.filterDims.x; wR = wR + 1) {\n let dyR = f32(dyCorner.x + wR) / f32(uniforms.strides.x);\n let wRPerm = uniforms.filterDims.x - 1 - wR;\n if (dyR < 0.0 || dyR >= f32(uniforms.outBackprop[1]) ||\n fract(dyR) > 0.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(dyCorner.y + wC) / f32(uniforms.strides.y);\n let dyC2 = f32(dyCorner.y + 1 + wC) / f32(uniforms.strides.y);\n let wCPerm = uniforms.filterDims.y - 1 - wC;\n var bDyCVal = true;\n var bDyCVal2 = true;\n if (dyC < 0.0 || dyC >= f32(uniforms.outBackprop[2]) ||\n fract(dyC) > 0.0) {\n bDyCVal = false;\n }\n if (dyC2 < 0.0 || dyC2 >= f32(uniforms.outBackprop[2]) ||\n fract(dyC2) > 0.0) {\n bDyCVal2 = false;\n }\n\n let idyC = i32(dyC);\n let idyC2 = i32(dyC2);\n if (bDyCVal && bDyCVal2) {\n let d2Length = uniforms.outBackprop[3];\n for (var d2 = 0; d2 < d2Length; d2 = d2 + 4) {\n let wValue0 = getW(wRPerm, wCPerm, d1, d2);\n let wValue1 = getW(wRPerm, wCPerm, d1 + 1, d2);\n let wValue2 = getW(wRPerm, wCPerm, d1 + 2, d2);\n let wValue3 = getW(wRPerm, wCPerm, d1 + 3, d2);\n var xValue = getDy(batch, idyR, idyC, d2);\n let tmpval = vec4(dot(xValue, wValue0),\n dot(xValue, wValue1),\n dot(xValue, wValue2),\n dot(xValue, wValue3));\n dotProd[0] = dotProd[0] + tmpval;\n xValue = getDy(batch, idyR, idyC2, d2);\n dotProd[1] = dotProd[1] + vec4(dot(xValue, wValue0),\n dot(xValue, wValue1),\n dot(xValue, wValue2),\n dot(xValue, wValue3));\n }\n } else if (bDyCVal) {\n let d2Length = uniforms.outBackprop[3];\n for (var d2 = 0; d2 < d2Length; d2 = d2 + 4) {\n let wValue0 = getW(wRPerm, wCPerm, d1, d2);\n let wValue1 = getW(wRPerm, wCPerm, d1 + 1, d2);\n let wValue2 = getW(wRPerm, wCPerm, d1 + 2, d2);\n let wValue3 = getW(wRPerm, wCPerm, d1 + 3, d2);\n var xValue = getDy(batch, idyR, idyC, d2);\n let tmpval = vec4(dot(xValue, wValue0),\n dot(xValue, wValue1),\n dot(xValue, wValue2),\n dot(xValue, wValue3));\n dotProd[0] = dotProd[0] + tmpval;\n }\n } else if (bDyCVal2) {\n let d2Length = uniforms.outBackprop[3];\n for (var d2 = 0; d2 < d2Length; d2 = d2 + 4) {\n let wValue0 = getW(wRPerm, wCPerm, d1, d2);\n let wValue1 = getW(wRPerm, wCPerm, d1 + 1, d2);\n let wValue2 = getW(wRPerm, wCPerm, d1 + 2, d2);\n let wValue3 = getW(wRPerm, wCPerm, d1 + 3, d2);\n var xValue = getDy(batch, idyR, idyC2, d2);\n let tmpval = vec4(dot(xValue, wValue0),\n dot(xValue, wValue1),\n dot(xValue, wValue2),\n dot(xValue, wValue3));\n dotProd[1] = dotProd[1] + tmpval;\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 setOutputAtCoords(coords[0], coords[1], coords[2], coords[3], dotProd[i]);\n }\n }\n }\n `;return this.isVec4?`\n ${n}\n `:`\n ${G(\"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.strides.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.strides.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 let xValue = ${this.isChannelsLast?\"getDy(batch, idyR, idyC, d2)\":\"getDy(batch, d2, idyR, idyC)\"};\n let wValue = getW(wRPerm, wCPerm, d1, d2);\n dotProd = dotProd + xValue * wValue;\n }\n }\n }\n setOutputAtIndex(index, dotProd);\n }\n }\n `}},wx=class{constructor(e){this.variableNames=[\"x\",\"dy\"],this.uniforms=\"pads : vec2, strides : vec2, batchSize : i32, outHeight : i32, outWidth : i32, inHeight : i32, inWidth : i32,\",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.filterShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.isChannelsLast=e.dataFormat===\"channelsLast\",this.shaderKey=`conv2DDerFilter_${this.isChannelsLast}`}getUserCode(){return`\n ${G(\"index\")} {\n if(index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n let wR = coords[0];\n let wC = coords[1];\n let d1 = coords[2];\n let d2 = coords[3];\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 var dotProd = 0.0;\n for (var b = 0; b < uniforms.batchSize; b = b + 1) {\n for (var yR = 0; yR < uniforms.outHeight; yR = yR + 1) {\n let xR = wR + yR * uniforms.strides[0] - uniforms.pads[0];\n if (xR < 0 || xR >= uniforms.inHeight) {\n continue;\n }\n\n for (var yC = 0; yC < uniforms.outWidth; yC = yC + 1) {\n let xC = wC + yC * uniforms.strides[1] - uniforms.pads[1];\n\n if (xC < 0 || xC >= uniforms.inWidth) {\n continue;\n }\n\n if (${this.isChannelsLast}) {\n let dyValue = getDy(b, yR, yC, d2);\n let xValue = getX(b, xR, xC, d1);\n dotProd = dotProd + xValue * dyValue;\n } else {\n let dyValue = getDy(b, d2, yR, yC);\n let xValue = getX(b, d1, xR, xC);\n dotProd = dotProd + xValue * dyValue;\n }\n }\n }\n }\n setOutputAtIndex(index, dotProd);\n }\n }\n `}},Sx=class{constructor(e){this.variableNames=[\"x\",\"dy\"],this.uniforms=`pads : vec3, strides : vec3, batchSize : i32, outDepth : i32,\n outHeight : i32, outWidth : i32, inDepth : i32, inHeight : i32, inWidth : i32,`,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.filterShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"conv3DDerFilter\"}getUserCode(){return`\n ${G(\"index\")} {\n if(index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n let wF = coords.x;\n let wR = coords.y;\n let wC = coords.z;\n let d1 = coords.w;\n let d2 = coords.u;\n\n var dotProd = 0.0;\n for (var b = 0; b < uniforms.batchSize; b++) {\n for (var yF = 0; yF < uniforms.outDepth; yF++) {\n let xF = wF + yF * uniforms.strides[0] - uniforms.pads[0];\n if (xF < 0 || xF >= uniforms.inDepth) {\n continue;\n }\n\n for (var yR = 0; yR < uniforms.outHeight; yR++) {\n let xR = wR + yR * uniforms.strides[1] - uniforms.pads[1];\n if (xR < 0 || xR >= uniforms.inHeight) {\n continue;\n }\n\n for (var yC = 0; yC < uniforms.outWidth; yC++) {\n let xC = wC + yC * uniforms.strides[2] - uniforms.pads[2];\n if (xC < 0 || xC >= uniforms.inWidth) {\n continue;\n }\n\n let dyValue = getDy(b, yF, yR, yC, d2);\n let xValue = getX(b, xF, xR, xC, d1);\n dotProd += xValue * dyValue;\n }\n }\n }\n }\n setOutputAtIndex(index, dotProd);\n }\n }\n `}},Ix=class{constructor(e){this.variableNames=[\"dy\",\"W\"],this.uniforms=`filterDims : vec3, pads : vec3, strides : vec3,\n outDepth : i32, outHeight : i32, outWidth : i32, outChannels : i32,`,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.inShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"conv3DDerInput\"}getUserCode(){return`\n ${G(\"index\")} {\n if(index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n let batch = coords.x;\n let d1 = coords.u;\n\n let dyCorner = vec3(coords.y, coords.z, coords.w) - uniforms.pads;\n let dyFCorner = dyCorner.x;\n let dyRCorner = dyCorner.y;\n let dyCCorner = dyCorner.z;\n\n var dotProd = 0.0;\n for (var wF = 0; wF < uniforms.filterDims[0]; wF++) {\n let dyF = f32(dyFCorner + wF) / f32(uniforms.strides[0]);\n if (dyF < 0.0 || dyF >= f32(uniforms.outDepth) || fract(dyF) > 0.0) {\n continue;\n }\n let idyF = i32(dyF);\n\n let wFPerm = uniforms.filterDims[0] - 1 - wF;\n\n for (var wR = 0; wR < uniforms.filterDims[1]; wR++) {\n let dyR = f32(dyRCorner + wR) / f32(uniforms.strides[1]);\n\n if (dyR < 0.0 || dyR >= f32(uniforms.outHeight) || fract(dyR) > 0.0) {\n continue;\n }\n let idyR = i32(dyR);\n\n let wRPerm = uniforms.filterDims[1] - 1 - wR;\n\n for (var wC = 0; wC < uniforms.filterDims[2]; wC++) {\n let dyC = f32(dyCCorner + wC) / f32(uniforms.strides[2]);\n\n if (dyC < 0.0 || dyC >= f32(uniforms.outWidth) || fract(dyC) > 0.0) {\n continue;\n }\n let idyC = i32(dyC);\n\n let wCPerm = uniforms.filterDims[2] - 1 - wC;\n\n for (var d2 = 0; d2 < uniforms.outChannels; d2++) {\n let xValue = getDy(batch, idyF, idyR, idyC, d2);\n let wValue = getW(wFPerm, wRPerm, wCPerm, d1, d2);\n dotProd += xValue * wValue;\n }\n }\n }\n }\n setOutputAtIndex(index, dotProd);\n }\n }\n `}};function Rue(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=w.convertConv2DDataFormat(p),m=w.computeConv2DInfo(n.shape,c,a,1,i,u,!1,l),d=new wx(m),f=[{type:\"int32\",data:[m.padInfo.top,m.padInfo.left]},{type:\"int32\",data:[m.strideHeight,m.strideWidth]},{type:\"int32\",data:[m.batchSize]},{type:\"int32\",data:[m.outHeight]},{type:\"int32\",data:[m.outWidth]},{type:\"int32\",data:[m.inHeight]},{type:\"int32\",data:[m.inWidth]}];return t.runWebGPUProgram(d,[n,s],n.dtype,f)}var EV={kernelName:Fi,backendName:\"webgpu\",kernelFunc:Rue};function Due(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.strides[0]);\n let xC = f32(outCol - uniforms.pads[1] + WCol) / f32(uniforms.strides[1]);\n if (xR < 0.0 || xR >= f32(uniforms.outBackprop[1]) || fract(xR) > 0.0) {\n return ${Ae(r)}(0.0);\n }\n if (xC < 0.0 || xC >= f32(uniforms.outBackprop[2]) || fract(xC) > 0.0) {\n return ${Ae(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 ${Ae(r)}(0.0);`;return`\n fn mm_readA(batch: i32, row : i32, col : i32) -> ${Ae(r)} {\n ${o}\n }\n\n fn mm_readB(batch: i32, row : i32, col : i32) -> ${Ae(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 ${Ae(r)}(0.0);\n }\n\n fn mm_write(batch: i32, row : i32, col : i32, valueInput : ${Ae(r)}) {\n if (row < uniforms.dimAOuter && col < 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 vx=class{constructor(e){this.variableNames=[\"x\",\"W\"],this.uniforms=\"filterDims : vec2, pads : vec2, strides : 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=lm(this.dispatchLayout,this.outputShape,this.isVec4),this.elementsPerThread=mm(this.dispatchLayout,this.outputShape,this.isVec4),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize,this.elementsPerThread),this.isVec4&&(this.outputComponent=4,this.variableComponents=[4,1]),this.shaderKey=`conv2DDerInputMM_${this.isVec4}_${this.elementsPerThread}`}getUserCode(){let e=this.isVec4?_p(this.elementsPerThread,this.workgroupSize):Ep(this.elementsPerThread,this.workgroupSize);return`\n ${Due(this.isVec4?4:1)}\n ${e}\n `}};function Aue(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=w.convertConv2DDataFormat(u),m=w.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(A().getBool(\"WEBGPU_USE_NAIVE_CONV2D_TRANSPOSE\")||m.dataFormat!==\"channelsLast\")f=new Cx(m);else{f=new vx(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 $V={kernelName:rn,backendName:\"webgpu\",kernelFunc:Aue};var kx=class{constructor(e){this.variableNames=[\"x\",\"W\"],this.uniforms=\"filterDims: vec3, pads: vec3, strides: vec3, dilations: vec3,\",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.outShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"conv3dnaive\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getOutputCoords();\n let batch = coords.x;\n let d2 = coords.u;\n\n let xFRCCorner = vec3(coords.y, coords.z, coords.w) * uniforms.strides - uniforms.pads;\n let xFCorner = xFRCCorner.x;\n let xRCorner = xFRCCorner.y;\n let xCCorner = xFRCCorner.z;\n\n let inputDepthNearestVec4 = (uniforms.xShape.u / 4) * 4;\n let inputDepthVec4Remainder = uniforms.xShape.u % 4;\n\n var dotProd = 0.0;\n for (var wF = 0; wF < uniforms.filterDims[0]; wF++) {\n let xF = xFCorner + wF * uniforms.dilations[0];\n if (xF < 0 || xF >= uniforms.xShape.y) {\n continue;\n }\n\n for (var wR = 0; wR < uniforms.filterDims[1]; wR++) {\n let xR = xRCorner + wR * uniforms.dilations[1];\n if (xR < 0 || xR >= uniforms.xShape.z) {\n continue;\n }\n\n for (var wC = 0; wC < uniforms.filterDims[2]; wC++) {\n let xC = xCCorner + wC * uniforms.dilations[2];\n if (xC < 0 || xC >= uniforms.xShape.w) {\n continue;\n }\n\n for (var d1 = 0; d1 < inputDepthNearestVec4; d1 += 4) {\n let 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 let 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 (inputDepthVec4Remainder == 1) {\n dotProd += getX(batch, xF, xR, xC, inputDepthNearestVec4) *\n getW(wF, wR, wC, inputDepthNearestVec4, d2);\n } else if (inputDepthVec4Remainder == 2) {\n let xValues = vec2(\n getX(batch, xF, xR, xC, inputDepthNearestVec4),\n getX(batch, xF, xR, xC, inputDepthNearestVec4 + 1)\n );\n let wValues = vec2(\n getW(wF, wR, wC, inputDepthNearestVec4, d2),\n getW(wF, wR, wC, inputDepthNearestVec4 + 1, d2)\n );\n dotProd += dot(xValues, wValues);\n } else if (inputDepthVec4Remainder == 3) {\n let xValues = vec3(\n getX(batch, xF, xR, xC, inputDepthNearestVec4),\n getX(batch, xF, xR, xC, inputDepthNearestVec4 + 1),\n getX(batch, xF, xR, xC, inputDepthNearestVec4 + 2)\n );\n let wValues = vec3(\n getW(wF, wR, wC, inputDepthNearestVec4, d2),\n getW(wF, wR, wC, inputDepthNearestVec4 + 1, d2),\n getW(wF, wR, wC, inputDepthNearestVec4 + 2, d2)\n );\n dotProd += dot(xValues, wValues);\n }\n }\n }\n }\n setOutputAtIndex(index, dotProd);\n }\n }`}};function Fue(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s}=e,{strides:a,pad:i,dilations:p}=o,u=w.computeConv3DInfo(n.shape,s.shape,a,p,i),c=[u.padInfo.front,u.padInfo.top,u.padInfo.left],l=[{type:\"int32\",data:[u.filterDepth,u.filterHeight,u.filterWidth]},{type:\"int32\",data:[...c]},{type:\"int32\",data:[u.strideDepth,u.strideHeight,u.strideWidth]},{type:\"int32\",data:[u.dilationDepth,u.dilationHeight,u.dilationWidth]}],m=new kx(u),d=dt(n.dtype,s.dtype);return t.runWebGPUProgram(m,[n,s],d,l)}var RV={kernelName:on,backendName:\"webgpu\",kernelFunc:Fue};function Pue(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,dy:s}=e,{strides:a,pad:i,filterShape:p}=o,u=w.computeConv3DInfo(n.shape,p,a,1,i),c=new Sx(u),l=[{type:\"int32\",data:[u.padInfo.front,u.padInfo.top,u.padInfo.left]},{type:\"int32\",data:[u.strideDepth,u.strideHeight,u.strideWidth]},{type:\"int32\",data:[u.batchSize]},{type:\"int32\",data:[u.outDepth]},{type:\"int32\",data:[u.outHeight]},{type:\"int32\",data:[u.outWidth]},{type:\"int32\",data:[u.inDepth]},{type:\"int32\",data:[u.inHeight]},{type:\"int32\",data:[u.inWidth]}];return t.runWebGPUProgram(c,[n,s],s.dtype,l)}var DV={kernelName:ja,backendName:\"webgpu\",kernelFunc:Pue};function Oue(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,filter:s}=e,{strides:a,pad:i,inputShape:p}=o,u=w.computeConv3DInfo(p,s.shape,a,1,i),c=new Ix(u),l=[{type:\"int32\",data:[u.filterDepth,u.filterHeight,u.filterWidth]},{type:\"int32\",data:[u.filterDepth-1-u.padInfo.front,u.filterHeight-1-u.padInfo.top,u.filterWidth-1-u.padInfo.left]},{type:\"int32\",data:[u.strideDepth,u.strideHeight,u.strideWidth]},{type:\"int32\",data:[u.outDepth]},{type:\"int32\",data:[u.outHeight]},{type:\"int32\",data:[u.outWidth]},{type:\"int32\",data:[u.outChannels]}];return t.runWebGPUProgram(c,[n,s],n.dtype,l)}var AV={kernelName:nn,backendName:\"webgpu\",kernelFunc:Oue};var Mue=ye({opType:Z.COS}),FV={kernelName:sn,backendName:\"webgpu\",kernelFunc:Mue};var Lue=ye({opType:Z.COSH}),PV={kernelName:an,backendName:\"webgpu\",kernelFunc:Lue};var Nx=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=X(this.outputShape),this.dispatch=H(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 ${G(\"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 Bue=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 Nx(n.shape[3],s.shape,i,p),l=[{type:\"float32\",data:[u]}];return t.runWebGPUProgram(c,[n,s,a],\"float32\",l)},OV={kernelName:cn,backendName:\"webgpu\",kernelFunc:Bue};var Dp;(function(r){r.Prod=\"*\",r.Sum=\"+\"})(Dp||(Dp={}));var xm=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=X(this.outputShape),this.dispatch=H(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===Dp.Prod?\"1.0\":\"0.0\",o=this.exclusive?t:`getX(${MV(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 ${G(\"index\")} {\n if (index < uniforms.size) {\n var coords = getCoordsFromIndex(index);\n\n let end = ${LV(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 ${LV(e,\"coords\",this.op)} = idx;\n val ${this.op}= getX(${MV(e,\"coords\",this.op)});\n }\n setOutputAtIndex(index, val);\n }\n }\n `}};function MV(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 LV(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 Tx(r,e,t,o,n,s){let a=e.shape.length,i=w.getAxesPermutation([o],a),p=e;i!=null&&(p=xr({inputs:{x:e},backend:t,attrs:{perm:i}}));let u=w.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=At({inputs:{x:p},backend:t});for(let m=0;m<=Math.ceil(Math.log2(c))-1;m++){let d=new xm(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 xm(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=w.getUndoAxesPermutation(i),d=xr({inputs:{x:l},backend:t,attrs:{perm:m}});return t.disposeData(l.dataId),t.disposeData(p.dataId),d}return l}function zue(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,exclusive:a,reverse:i}=o;return Tx(Dp.Prod,n,t,s,a,i)}var BV={kernelName:un,backendName:\"webgpu\",kernelFunc:zue};function Vue(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,exclusive:a,reverse:i}=o;return Tx(Dp.Sum,n,t,s,a,i)}var zV={kernelName:pn,backendName:\"webgpu\",kernelFunc:Vue};function Wue(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=vt({backend:t,attrs:{shape:d,value:0,dtype:l}}),h=new Qc(m,c,i),g=[{type:\"int32\",data:[a]}],x=c?[n,s]:[n];return t.runWebGPUProgram(h,x,l,g,f)}var VV={kernelName:ra,backendName:\"webgpu\",kernelFunc:Wue};var _x=class{constructor(e,t){this.variableNames=[\"x\"],this.workgroupSize=[64,1,1],this.size=!0,this.uniforms=\"blockSize : i32,\",this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=`depthToSpace_${t}`,this.dataFormat=t}getUserCode(){return`\n ${G(\"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 Uue(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 _x(f,a);return t.runWebGPUProgram(g,[n],n.dtype,h)}var WV={kernelName:ln,backendName:\"webgpu\",kernelFunc:Uue};var Ex=class{constructor(e,t,o,n=!1,s=null,a=!1){this.variableNames=[\"x\",\"W\"],this.uniforms=\"pads : vec2, inDims : vec2,\",this.workgroupSize=[16,16,1],this.outputShape=e,this.dispatchLayout={x:[3],y:[2],z:[0,1]},this.dispatch=H(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 ${dr(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 ${G()} {\n let coords = getOutputCoords();\n let batch = coords[0];\n let xRCCorner = vec2(coords.zw) - uniforms.pads;\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, virtualWidth : i32,\",this.workgroupSize=[64,1,1],this.workPerThread=4,this.outputComponent=4,this.outputShape=e.outShape,this.virtualWidth=Math.ceil(this.outputShape[2]/this.workPerThread)*this.workPerThread;let s=[this.outputShape[0],this.outputShape[1],this.virtualWidth,this.outputShape[3]];this.dispatchLayout=X(s),this.dispatch=H(this.dispatchLayout,s,this.workgroupSize,[this.outputComponent*this.workPerThread,1,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,t=this.convInfo.strideHeight,o=this.convInfo.strideWidth;return`\n ${dr(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 ${G(\"index\")} {\n let width0 = uniforms.outShape[3] / ${this.outputComponent};\n let d1 = (index % width0) * ${this.outputComponent};\n var index1 = index / width0;\n let width1 = uniforms.virtualWidth / ${this.workPerThread};\n let c = (index1 % width1) * ${this.workPerThread};\n index1 = index1 / width1;\n let r = index1 % uniforms.outShape[1];\n let batch = index1 / uniforms.outShape[1];\n\n let xRCCorner = vec2(r, c) * vec2(${t}, ${o}) - uniforms.pads;\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 * ${o} + 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 ${Zr(this.addBias,this.activation)}\n setOutputAtCoords(coords[0], coords[1], coords[2], coords[3], value);\n }\n }\n }\n `}};var el=class{constructor(e,t=!1,o=null,n=!1){this.variableNames=[\"x\",\"W\"],this.uniforms=`pads : vec2, inDims : vec2, filterHeight : i32,\n filterWidth : i32, strides : vec2, dilations : vec2,`,this.workgroupSize=[256,1,1],this.size=!0,this.outputShape=e.outShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(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 ${dr(this.activation,this.hasPreluActivation,!1,4)}\n\n ${G(\"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.strides - uniforms.pads;\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.dilations[0];\n let inputColEnd = inputColStart + uniforms.filterWidth *\n uniforms.dilations[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.dilations[0];\n\n for (var wC = 0; wC < uniforms.filterWidth; wC = wC + 1) {\n let xC = inputColStart + wC * uniforms.dilations[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.dilations[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.dilations[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 ${Zr(this.addBias,this.activation)}\n setOutputAtCoords(coords[0], coords[1], coords[2], coords[3], value);\n }\n }\n `}};function Gue(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=w.convertConv2DDataFormat(p),m=u;m==null&&(m=[1,1]);let d=w.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 Jc(d),f.push({type:\"int32\",data:[g.virtualWidth]})):(g=new el(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 UV={kernelName:mn,backendName:\"webgpu\",kernelFunc:Gue};var $x=class{constructor(e){this.variableNames=[\"x\",\"dy\"],this.uniforms=`strides : vec2, pads : vec2, filterDims : vec2, outHeight : i32,\n outWidth : i32, inHeight : i32, inWidth : i32, batchSize : i32, channelMul : i32,`,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.filterShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"depthwise_conv2d_backprop_filter\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n let wR = coords[0];\n let wC = coords[1];\n let d1 = coords[2];\n let dm = coords[3];\n let d2 = d1 * uniforms.channelMul + dm;\n\n var dotProd = 0.0;\n for (var b = 0; b < uniforms.batchSize; b++) {\n for (var yR = 0; yR < uniforms.outHeight; yR++) {\n let xR = wR + yR * uniforms.strides[0] - uniforms.pads[0];\n\n if (xR < 0 || xR >= uniforms.inHeight) {\n continue;\n }\n\n for (var yC = 0; yC < uniforms.outWidth; yC++) {\n let xC = wC + yC * uniforms.strides[1] - uniforms.pads[1];\n\n if (xC < 0 || xC >= uniforms.inWidth) {\n continue;\n }\n\n let dyValue = getDy(b, yR, yC, d2);\n let xValue = getX(b, xR, xC, d1);\n dotProd += xValue * dyValue;\n }\n }\n }\n setOutputAtIndex(index, dotProd);\n }\n }\n `}},Rx=class{constructor(e){this.variableNames=[\"dy\",\"W\"],this.uniforms=`strides : vec2, pads : vec2, filterDims : vec2,\n outHeight : i32, outWidth : i32, channelMul : i32,`,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.inShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"depthwise_conv2d_backprop_input\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n let batch = coords[0];\n let d1 = coords[3];\n let dyCorner = coords.yz - uniforms.pads;\n let dyRCorner = dyCorner.x;\n let dyCCorner = dyCorner.y;\n\n var dotProd = 0.0;\n for (var wR = 0; wR < uniforms.filterDims[0]; wR++) {\n let dyR = f32(dyRCorner + wR) / f32(uniforms.strides[0]);\n\n if (dyR < 0.0 || dyR >= f32(uniforms.outHeight) || fract(dyR) > 0.0) {\n continue;\n }\n\n let idyR = i32(dyR);\n let wRPerm = uniforms.filterDims[0] - 1 - wR;\n\n for (var wC = 0; wC < uniforms.filterDims[1]; wC++) {\n let dyC = f32(dyCCorner + wC) / f32(uniforms.strides[1]);\n\n if (dyC < 0.0 || dyC >= f32(uniforms.outWidth) || fract(dyC) > 0.0) {\n continue;\n }\n\n let idyC = i32(dyC);\n let wCPerm = uniforms.filterDims[1] - 1 - wC;\n\n for (var dm = 0; dm < uniforms.channelMul; dm++) {\n let d2 = d1 * uniforms.channelMul + dm;\n let xValue = getDy(batch, idyR, idyC, d2);\n let wValue = getW(wRPerm, wCPerm, d1, dm);\n dotProd += xValue * wValue;\n }\n }\n }\n setOutputAtIndex(index, dotProd);\n }\n }\n `}};function Hue(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=w.computeConv2DInfo(n.shape,c,a,i,p,u,!0),m=new $x(l),d=[{type:\"int32\",data:[l.strideHeight,l.strideWidth]},{type:\"int32\",data:[l.padInfo.top,l.padInfo.left]},{type:\"int32\",data:[l.filterHeight,l.filterWidth]},{type:\"int32\",data:[l.outHeight]},{type:\"int32\",data:[l.outWidth]},{type:\"int32\",data:[l.inHeight]},{type:\"int32\",data:[l.inWidth]},{type:\"int32\",data:[l.batchSize]},{type:\"int32\",data:[l.outChannels/l.inChannels]}];return t.runWebGPUProgram(m,[n,s],\"float32\",d)}var GV={kernelName:Pi,backendName:\"webgpu\",kernelFunc:Hue};function Kue(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=w.computeConv2DInfo(c,s.shape,a,i,p,u,!0),m=new Rx(l),d=[{type:\"int32\",data:[l.strideHeight,l.strideWidth]},{type:\"int32\",data:[l.filterHeight-1-l.padInfo.top,l.filterWidth-1-l.padInfo.left]},{type:\"int32\",data:[l.filterHeight,l.filterWidth]},{type:\"int32\",data:[l.outHeight]},{type:\"int32\",data:[l.outWidth]},{type:\"int32\",data:[l.outChannels/l.inChannels]}];return t.runWebGPUProgram(m,[n,s],n.dtype,d)}var HV={kernelName:Oi,backendName:\"webgpu\",kernelFunc:Kue};var Dx=class{constructor(e){this.variableNames=[\"x\"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=[e,e],this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"diag\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getOutputCoords();\n let value = select(0.0, getX(coords[0]), coords[0] == coords[1]);\n setOutputAtIndex(index, value);\n }\n }\n `}};function que(r){let{inputs:e,backend:t}=r,{x:o}=e,n=[...o.shape,...o.shape],s=y.sizeFromShape(o.shape),a=pe({inputs:{x:o},backend:t,attrs:{shape:[s]}}),i=new Dx(s),p=t.runWebGPUProgram(i,[a],a.dtype),u=pe({inputs:{x:p},backend:t,attrs:{shape:n}});return t.disposeData(a.dataId),t.disposeData(p.dataId),u}var KV={kernelName:oa,backendName:\"webgpu\",kernelFunc:que};var Ax=class{constructor(e){this.variableNames=[\"x\",\"w\"],this.uniforms=\"filterDims: vec2, pads: vec2, strides: vec2, dilations: vec2\",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.outShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"dilation2d\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let neg_infinity = -3.4e38;\n let coords = getOutputCoords();\n let batch = coords.x;\n let d1 = coords.w;\n let outTopLeftCorner = coords.yz * uniforms.strides - uniforms.pads;\n let hBeg = outTopLeftCorner.x;\n let wBeg = outTopLeftCorner.y;\n\n var curVal = neg_infinity;\n for (var h = 0; h < uniforms.filterDims[0]; h = h + 1) {\n let hIn = hBeg + h * uniforms.dilations[0];\n\n if (hIn >= 0 && hIn < uniforms.xShape[1]) {\n for (var w = 0; w < uniforms.filterDims[1]; w = w + 1) {\n let wIn = wBeg + w * uniforms.dilations[1];\n\n if (wIn >= 0 && wIn < uniforms.xShape[2]) {\n let val = getX(batch, hIn, wIn, d1) + getW(h, w, d1);\n if (val > curVal) {\n curVal = val;\n }\n }\n }\n }\n }\n\n setOutputAtIndex(index, curVal);\n }\n }\n `}};function jue(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s}=e,{strides:a,pad:i,dilations:p}=o,u=w.computeDilation2DInfo(n.shape,s.shape,a,i,\"NHWC\",p),c=[u.padInfo.top,u.padInfo.left],l=[{type:\"int32\",data:[u.filterHeight,u.filterWidth]},{type:\"int32\",data:[...c]},{type:\"int32\",data:[u.strideHeight,u.strideWidth]},{type:\"int32\",data:[u.dilationHeight,u.dilationWidth]}],m=new Ax(u);return t.runWebGPUProgram(m,[n,s],n.dtype,l)}var qV={kernelName:dn,backendName:\"webgpu\",kernelFunc:jue};var Fx=class{constructor(e,t){if(this.variableNames=[\"x\",\"w\",\"dy\"],this.uniforms=\"filterDims: vec2, pads: vec2, strides: vec2, dilations: vec2, dySize: i32,\",this.workgroupSize=[64,1,1],this.atomic=!0,this.outputShape=e.inShape,this.dispatchLayout=X(e.outShape),this.dispatch=H(this.dispatchLayout,e.outShape,this.workgroupSize),t!==\"float32\"&&t!==\"int32\")throw new Error(`Dilation2DBackpropInput only supports float32 and int32\n types, does not support ${t} type.`);this.type=t,this.shaderKey=\"dilation2DBackpropInput\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.dySize) {\n let coords = getDyCoordsFromIndex(index);\n let b = coords[0];\n let r = coords[1];\n let c = coords[2];\n let d = coords[3];\n\n let dyCorner = vec2(r, c) * uniforms.strides - uniforms.pads;\n var curVal = -3.4e38; // neg_infinity\n var xRMax = 0;\n var xCMax = 0;\n\n // In the case of multiple argmax branches, we only back-propagate\n // along the last branch, i.e., the one with largest value of\n // 'wR * uniforms.filterDims[1] + wC', similarly to the max-pooling\n // backward routines.\n for (var wR = 0; wR < uniforms.filterDims[0]; wR++) {\n let xR = dyCorner.x + wR * uniforms.dilations[0];\n\n if (xR >= 0 && xR < uniforms.xShape[1]) {\n for (var wC = 0; wC < uniforms.filterDims[1]; wC++) {\n let xC = dyCorner.y + wC * uniforms.dilations[1];\n\n if (xC >= 0 && xC < uniforms.xShape[2]) {\n let val = getX(b, xR, xC, d) + getW(wR, wC, d);\n if (val > curVal) {\n curVal = val;\n xRMax = xR;\n xCMax = xC;\n }\n }\n }\n }\n }\n\n let flatIndexIn = d + uniforms.xShape[3] *\n (xCMax + uniforms.xShape[2] * (xRMax + uniforms.xShape[1] * b));\n let value = getDy(b, r, c, d);\n ${Qr(\"&result[flatIndexIn]\",\"value\",this.type)}\n }\n }\n `}},Px=class{constructor(e,t,o){if(this.variableNames=[\"x\",\"w\",\"dy\"],this.uniforms=\"filterDims: vec2, pads: vec2, strides: vec2, dilations: vec2, dySize: i32,\",this.workgroupSize=[64,1,1],this.atomic=!0,this.outputShape=e.filterShape,this.dispatchLayout=X(e.outShape),this.dispatch=H(this.dispatchLayout,e.outShape,this.workgroupSize),o!==\"float32\"&&o!==\"int32\")throw new Error(`Dilation2DBackpropFilter only supports float32 and int32\n types, does not support ${o} type.`);this.type=o,this.shaderKey=\"dilation2DBackpropFilter\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.dySize) {\n let coords = getDyCoordsFromIndex(index);\n let b = coords[0];\n let r = coords[1];\n let c = coords[2];\n let d = coords[3];\n\n let dyCorner = vec2(r, c) * uniforms.strides - uniforms.pads;\n var curVal = -3.4e38; // neg_infinity\n var wRMax = 0;\n var wCMax = 0;\n\n // In the case of multiple argmax branches, we only back-propagate\n // along the last branch, i.e., the one with largest value of\n // 'wR * uniforms.filterDims[1] + wC', similarly to the max-pooling\n // backward routines.\n for (var wR = 0; wR < uniforms.filterDims[0]; wR++) {\n let xR = dyCorner.x + wR * uniforms.dilations[0];\n\n if (xR >= 0 && xR < uniforms.xShape[1]) {\n for (var wC = 0; wC < uniforms.filterDims[1]; wC++) {\n let xC = dyCorner.y + wC * uniforms.dilations[1];\n\n if (xC >= 0 && xC < uniforms.xShape[2]) {\n let val = getX(b, xR, xC, d) + getW(wR, wC, d);\n if (val > curVal) {\n curVal = val;\n wRMax = wR;\n wCMax = wC;\n }\n }\n }\n }\n }\n\n let flatIndexIn = d + uniforms.wShape[2] * (wCMax + wRMax * uniforms.wShape[1]);\n let value = getDy(b, r, c, d);\n ${Qr(\"&result[flatIndexIn]\",\"value\",this.type)}\n }\n }\n `}};function Xue(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s,dy:a}=e,{strides:i,pad:p,dilations:u}=o,c=w.computeDilation2DInfo(n.shape,s.shape,i,p,\"NHWC\",u),l=s.dtype,m=new Px(c,s.shape,l),d=[{type:\"int32\",data:[c.filterHeight,c.filterWidth]},{type:\"int32\",data:[c.padInfo.top,c.padInfo.left]},{type:\"int32\",data:[c.strideHeight,c.strideWidth]},{type:\"int32\",data:[c.dilationHeight,c.dilationWidth]},{type:\"int32\",data:[y.sizeFromShape(c.outShape)]}],f=vt({backend:t,attrs:{shape:s.shape,value:0,dtype:l}});return t.runWebGPUProgram(m,[n,s,a],l,d,f)}var jV={kernelName:Li,backendName:\"webgpu\",kernelFunc:Xue};function Yue(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s,dy:a}=e,{strides:i,pad:p,dilations:u}=o,c=w.computeDilation2DInfo(n.shape,s.shape,i,p,\"NHWC\",u),l=n.dtype,m=new Fx(c,l),d=[{type:\"int32\",data:[c.filterHeight,c.filterWidth]},{type:\"int32\",data:[c.padInfo.top,c.padInfo.left]},{type:\"int32\",data:[c.strideHeight,c.strideWidth]},{type:\"int32\",data:[c.dilationHeight,c.dilationWidth]},{type:\"int32\",data:[y.sizeFromShape(c.outShape)]}],f=vt({backend:t,attrs:{shape:c.inShape,value:0,dtype:l}});return t.runWebGPUProgram(m,[n,s,a],l,d,f)}var XV={kernelName:Mi,backendName:\"webgpu\",kernelFunc:Yue};var Ox=class{constructor(e,t,o){this.variableNames=[\"Image\"],this.uniforms=\"alpha: f32,\",this.workgroupSize=[64,1,1],this.pixelsOpType=wi.DRAW,this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.type=t,this.textureFormat=o,this.shaderKey=`draw_${t}_${o}`}getUserCode(){let e,t=this.type===\"float32\"?\"value\":\"value / 255.0\";return e=`\n if (uniforms.numChannels == 1) {\n rgba[0] = ${t};\n rgba[1] = ${t};\n rgba[2] = ${t};\n } else {\n rgba[d] = ${t};\n }`,`\n @group(0) @binding(0) var outImage : texture_storage_2d<${this.textureFormat}, write>;\n ${G(\"index\")} {\n if (index < uniforms.size) {\n var rgba = vec4(0.0, 0.0, 0.0, uniforms.alpha);\n for (var d = 0; d < uniforms.numChannels; d = d + 1) {\n let value = f32(inBuf[index * uniforms.numChannels + d]);\n ${e}\n }\n rgba.x = rgba.x * rgba.w;\n rgba.y = rgba.y * rgba.w;\n rgba.z = rgba.z * rgba.w;\n let coords = getCoordsFromIndex(index);\n textureStore(outImage, vec2(coords.yx), rgba);\n }\n }\n `}};function Que(r){let{inputs:e,backend:t,attrs:o}=r,{image:n}=e,{canvas:s,options:a}=o,[i,p]=n.shape.slice(0,2),{imageOptions:u}=a||{},c=(u==null?void 0:u.alpha)||1,l=t.device.features.has(\"bgra8unorm-storage\")?\"bgra8unorm\":\"rgba8unorm\",m=[i,p],d=new Ox(m,n.dtype,l);s.width=p,s.height=i;let f=\"webgpu\",h=s.getContext(f),g;h||(g=new OffscreenCanvas(p,i),h=g.getContext(f));let x=n.shape.length===3?n.shape[2]:1;h.configure({device:t.device,format:l,usage:GPUTextureUsage.STORAGE_BINDING,alphaMode:\"premultiplied\"});let b=\"int32\",C=t.makeTensorInfo(m,b),S=t.tensorMap.get(C.dataId);S.resource=h.getCurrentTexture(),S.external=!0;let k=[{type:\"uint32\",data:[x]},{type:\"float32\",data:[c]}];if(t.runWebGPUProgram(d,[n],b,k,C),g){let _=s.getContext(\"2d\");if(!_)throw new Error(\"Please make sure this canvas has only been used for 2d or webgpu context!\");_.drawImage(g,0,0)}return t.disposeData(C.dataId),n}var YV={kernelName:$u,backendName:\"webgpu\",kernelFunc:Que};var i0=et({opType:fe.MUL,cpuKernelImpl:Rz,supportsComplex:!0}),QV={kernelName:Xn,backendName:\"webgpu\",kernelFunc:i0};function u0(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o;return eo(n,s,a,\"sum\",t)}var ZV={kernelName:Ss,backendName:\"webgpu\",kernelFunc:u0};function Zue(r){let{inputs:e,backend:t,attrs:o}=r,{equation:n}=o,s=e,{allDims:a,summedDims:i,idDims:p}=w.decodeEinsumEquation(n,s.length);w.checkEinsumDimSizes(a.length,p,s);let{path:u,steps:c}=w.getEinsumComputePath(i,p),l=c.length,m=null,d=a.length,f=[];for(let h=0;h=0&&(m=u0({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 JV={kernelName:Bi,backendName:\"webgpu\",kernelFunc:Zue};var Jue=ye({opType:Z.ELU}),eW={kernelName:hn,backendName:\"webgpu\",kernelFunc:Jue};var epe=r=>{let{inputs:e,backend:t}=r,{dy:o,y:n}=e,s=new Ii(fe.ELU_DER,o.shape,n.shape);return t.runWebGPUProgram(s,[o,n],o.dtype)},tW={kernelName:Xa,backendName:\"webgpu\",kernelFunc:epe};var tpe=et({opType:fe.EQUAL,dtype:\"bool\",cpuKernelImpl:gz}),rW={kernelName:xn,backendName:\"webgpu\",kernelFunc:tpe};var rpe=ye({opType:Z.ERF}),oW={kernelName:gn,backendName:\"webgpu\",kernelFunc:rpe};var ope=ye({opType:Z.EXP,cpuKernelImpl:xz,dtype:\"float32\"}),nW={kernelName:yn,backendName:\"webgpu\",kernelFunc:ope};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&&(y.assert(-(a+1)<=n,()=>`Axis must be in the interval [${-(a+1)}, ${a}]`),p=a+n+1),i.splice(p,0,1),pe({inputs:{x:s},backend:o,attrs:{shape:i}})}var sW={kernelName:na,backendName:\"webgpu\",kernelFunc:Mx};var npe=ye({opType:Z.EXPM1,cpuKernelImpl:yz}),aW={kernelName:bn,backendName:\"webgpu\",kernelFunc:npe};var ym=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=X(this.outputShape),this.dispatch=H(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 ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getOutputCoords();\n setOutputAtIndex(index, mulMatDFT(coords[0], coords[1]));\n }\n }\n `}};function Lx(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=pe({inputs:{x:r},backend:t,attrs:{shape:[a,s]}});i.push(p);let u=p.shape,c=new ym(\"real\",u),l=new ym(\"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=xo({inputs:{real:g,imag:x},backend:t});i.push(b);let C=pe({inputs:{x:b},backend:t,attrs:{shape:r.shape}});return i.forEach(S=>t.disposeData(S.dataId)),C}function spe(r){let{inputs:e,backend:t}=r,{input:o}=e;return Lx(o,!1,t)}var iW={kernelName:zi,backendName:\"webgpu\",kernelFunc:spe};var Bx=class{constructor(e){this.outputShape=[],this.variableNames=[\"x\"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"flipLeftRight\"}getUserCode(){return`\n ${G(\"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 uW={kernelName:Cn,backendName:\"webgpu\",kernelFunc:({inputs:r,backend:e})=>{let{image:t}=r,o=e,n=new Bx(t.shape);return o.runWebGPUProgram(n,[t],t.dtype)}};var ape=ye({opType:Z.FLOOR,cpuKernelImpl:bz}),pW={kernelName:wn,backendName:\"webgpu\",kernelFunc:ape};var ipe=et({opType:fe.FLOOR_DIV,cpuKernelImpl:Cz,dtype:\"int32\"}),cW={kernelName:Sn,backendName:\"webgpu\",kernelFunc:ipe};var zx=class{constructor(e,t,o=!1){this.pixelsOpType=wi.FROM_PIXELS,this.outputShape=[0],this.variableNames=[],this.workgroupSize=[256,1,1],this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(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 ${G(\"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 lW={kernelName:Du,backendName:\"webgpu\",kernelFunc:upe},tl,p0=A().getBool(\"CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU\");function upe(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=A().getBool(\"WEBGPU_IMPORT_EXTERNAL_TEXTURE\")&&a,f=a||i;if(u||p||f){let b;if(d)b=t.device.importExternalTexture({source:n});else{if(f){let L=A().getBool(\"CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU\");(tl==null||L!==p0)&&(p0=L,tl=document.createElement(\"canvas\").getContext(\"2d\",{willReadFrequently:p0})),tl.canvas.width=c,tl.canvas.height=l,tl.drawImage(n,0,0,c,l),n=tl.canvas}let P=GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.TEXTURE_BINDING,M=t.textureManager.acquireTexture(m[1],m[0],\"rgba8unorm\",P);t.queue.copyExternalImageToTexture({source:n},{texture:M},[m[1],m[0]]),b=M}let C=y.sizeFromShape(m),S=y.computeStrides(m),k=new zx(m,s,d),_=[{type:\"uint32\",data:[C]},{type:\"uint32\",data:[s]},{type:\"uint32\",data:[...S]}],$=t.makeTensorInfo([l,c],\"int32\"),R=t.tensorMap.get($.dataId);R.resource=b;let D=t.runWebGPUProgram(k,[$],\"int32\",_);return t.disposeData($.dataId),D}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 S=0;S(xValue, -meanValue, offsetValue), vec3(inv, inv, 1.0)));\n }\n }\n `}};var mW={kernelName:In,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 Vx(o.shape,a.shape,i.shape,l,m),f=[{type:\"float32\",data:[p]}];return u.runWebGPUProgram(d,c,o.dtype,f)}};function ppe(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=w.convertConv2DDataFormat(c),g=w.computeConv2DInfo(n.shape,s.shape,p,l,u,m,!1,h);return bx({x:n,filter:s,convInfo:g,backend:t,bias:a,preluActivationWeights:i,leakyreluAlpha:f,activation:d})}var dW={kernelName:Io,backendName:\"webgpu\",kernelFunc:ppe};function cpe(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(w.eitherStridesOrDilationsAreOne(p,f),()=>`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${p} and dilations '${f}'`);let h=w.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]}],S;return h.outHeight>4&&h.outWidth>4&&h.strideWidth<=2&&h.inChannels===h.outChannels&&h.dilationHeight===1&&h.dilationWidth===1&&h.inChannels%4===0?(S=new Jc(h,x,m,b),C.push({type:\"int32\",data:[S.virtualWidth]})):(S=new el(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]}),S.uniforms+=\" alpha : f32,\"),t.runWebGPUProgram(S,g,\"float32\",C)}var fW={kernelName:vo,backendName:\"webgpu\",kernelFunc:cpe};var Wx=class{constructor(e,t){this.variableNames=[\"A\",\"indices\"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=t,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=`gathernd_${e}`,this.sliceDim=e,this.uniforms=`sliceDim : i32, strides : ${ft(e)},`}getUserCode(){let e;return this.sliceDim>1?e=\"uniforms.strides[j]\":e=\"uniforms.strides\",`\n ${G(\"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 lpe(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]=w.prepareAndValidate(o,n),m=pe({inputs:{x:n},backend:t,attrs:{shape:[u,a]}}),d=pe({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),S=wz(b,C,o.dtype,u,a,c,l,o.shape,i);return t.makeTensorInfo(p,o.dtype,S.values)}let f=new Wx(a,[u,c]),h=[{type:\"int32\",data:[a]},{type:\"int32\",data:l}],g=t.runWebGPUProgram(f,[d,m],d.dtype,h),x=pe({inputs:{x:g},backend:t,attrs:{shape:p}});return t.disposeData(m.dataId),t.disposeData(d.dataId),t.disposeData(g.dataId),x}var hW={kernelName:vn,backendName:\"webgpu\",kernelFunc:lpe};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=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"gather\"}getUserCode(){let e=mpe(this.aShape);return`\n ${G(\"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 mpe(r){let e=[\"resRC.x\",\"resRC.y\",\"resRC.z\",\"resRC.w\"],t=[];for(let o=0;ot.disposeData(D.dataId)),t.makeTensorInfo(u.outputShape,R.dtype,R.values)}let h=new Ux(m.shape,f),g=t.runWebGPUProgram(h,[m,d],m.dtype);l.push(g);let x=pe({inputs:{x:g},backend:t,attrs:{shape:u.outputShape}});return l.forEach(b=>t.disposeData(b.dataId)),x}var gW={kernelName:aa,backendName:\"webgpu\",kernelFunc:c0};var dpe=et({opType:fe.GREATER,cpuKernelImpl:vz,dtype:\"bool\"}),xW={kernelName:kn,backendName:\"webgpu\",kernelFunc:dpe};var fpe=et({opType:fe.GREATER_EQUAL,dtype:\"bool\",cpuKernelImpl:Iz}),yW={kernelName:Nn,backendName:\"webgpu\",kernelFunc:fpe};function hpe(r){let{inputs:e,backend:t}=r,{input:o}=e;return Lx(o,!0,t)}var bW={kernelName:Vi,backendName:\"webgpu\",kernelFunc:hpe};var gpe=ye({opType:Z.IS_FINITE,dtype:\"bool\"}),CW={kernelName:Tn,backendName:\"webgpu\",kernelFunc:gpe};var xpe=ye({opType:Z.IS_INF,dtype:\"bool\"}),wW={kernelName:_n,backendName:\"webgpu\",kernelFunc:xpe};var ype=ye({opType:Z.IS_NAN,dtype:\"bool\"}),SW={kernelName:En,backendName:\"webgpu\",kernelFunc:ype};function bpe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{alpha:s}=o,a=[{type:\"float32\",data:[s]}],i=new Jr(n.shape,Z.LEAKYRELU,\"alpha : f32,\");return t.runWebGPUProgram(i,[n],\"float32\",a)}var IW={kernelName:$n,backendName:\"webgpu\",kernelFunc:bpe};var Cpe=et({opType:fe.LESS,dtype:\"bool\",cpuKernelImpl:Nz}),vW={kernelName:Rn,backendName:\"webgpu\",kernelFunc:Cpe};var wpe=et({opType:fe.LESS_EQUAL,dtype:\"bool\",cpuKernelImpl:kz}),kW={kernelName:Dn,backendName:\"webgpu\",kernelFunc:wpe};var Gx=class{constructor(e){this.variableNames=[],this.outputShape=[],this.uniforms=\"start : f32, step : f32,\",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=[e],this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"linSpace\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n setOutputAtIndex(index, uniforms.start + f32(index) * uniforms.step);\n }\n }\n `}};function Spe(r){let{backend:e,attrs:t}=r,{start:o,stop:n,num:s}=t,a=(n-o)/(s-1),i=new Gx(s),p=[{type:\"float32\",data:[o]},{type:\"float32\",data:[a]}];return e.runWebGPUProgram(i,[],\"float32\",p)}var NW={kernelName:An,backendName:\"webgpu\",kernelFunc:Spe};var Ipe=ye({opType:Z.LOG,cpuKernelImpl:Tz}),TW={kernelName:Fn,backendName:\"webgpu\",kernelFunc:Ipe};var vpe=ye({opType:Z.LOG1P}),_W={kernelName:Pn,backendName:\"webgpu\",kernelFunc:vpe};var kpe=et({opType:fe.LOGICAL_AND,dtype:\"bool\"}),EW={kernelName:On,backendName:\"webgpu\",kernelFunc:kpe};var Npe=ye({opType:Z.LOGICAL_NOT}),$W={kernelName:Mn,backendName:\"webgpu\",kernelFunc:Npe};var Tpe=et({opType:fe.LOGICAL_OR}),RW={kernelName:Ln,backendName:\"webgpu\",kernelFunc:Tpe};var DW=`\n var powValue = 0.0;\n let basis = uniforms.bias + uniforms.alpha * sum;\n if (uniforms.beta == 0.5) {\n powValue = inverseSqrt(basis);\n } else if (uniforms.beta == 1.0) {\n powValue = 1.0 / basis;\n } else {\n powValue = exp(log(basis) * (-uniforms.beta));\n }\n`,Hx=class{constructor(e){this.outputShape=[],this.variableNames=[\"x\"],this.uniforms=\"radius : i32, bias : f32, alpha : f32, beta : f32,\",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"lrn\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getOutputCoords();\n let b = coords[0];\n let r = coords[1];\n let c = coords[2];\n let d = coords[3];\n\n let x = getX(b, r, c, d);\n var sum = 0.0;\n for (var i = -uniforms.radius; i <= uniforms.radius; i = i + 1) {\n let idx = d + i;\n if (idx >= 0 && idx < uniforms.xShape[3]) {\n let z = getX(b, r, c, idx);\n sum = sum + z * z;\n }\n }\n ${DW}\n\n setOutputAtIndex(index, x * powValue);\n }\n }\n `}},Kx=class{constructor(e,t){this.outputShape=[],this.variableNames=[\"x\"],this.uniforms=\"radius : i32, bias : f32, alpha : f32, beta : f32,\",this.workgroupSize=[256,1,1],this.maxAllowRadius=16,y.assert(t<=this.maxAllowRadius,()=>`Radius must be less than or equal to ${this.maxAllowRadius}, current radius is ${t}`),this.outputShape=e,this.elementsPerWorkgroup=this.workgroupSize[0]-2*this.maxAllowRadius,this.dispatchLayout={x:[3],y:[2],z:[0,1]},this.dispatch=H(this.dispatchLayout,this.outputShape,[this.elementsPerWorkgroup,this.workgroupSize[1],this.workgroupSize[2]]),this.shaderKey=\"lrn_shared\"}getUserCode(){return`\n var lrnSub: array;\n const elementsPerWorkgroup = ${this.elementsPerWorkgroup};\n const maxAllowRadius = ${this.maxAllowRadius};\n\n ${G()} {\n let localDepth = i32(localId.x);\n let workgroupDepth = i32(workgroupId.x) * elementsPerWorkgroup;\n let xDepth = workgroupDepth + localDepth - maxAllowRadius;\n let b = i32(globalId.z) / uniforms.xShape[1];\n let r = i32(globalId.z) - b * uniforms.xShape[1];\n let c = i32(globalId.y);\n let d = workgroupDepth + localDepth;\n\n var x = 0.0;\n if (xDepth >= 0 && xDepth < uniforms.xShape[3]) {\n x = getX(b, r, c, xDepth);\n }\n lrnSub[localDepth] = x;\n workgroupBarrier();\n\n if (localDepth < elementsPerWorkgroup && d < uniforms.outShape[3]) {\n var sum = 0.0;\n let index = localDepth + maxAllowRadius;\n for (var i = -uniforms.radius; i <= uniforms.radius; i = i + 1) {\n let z = lrnSub[index + i];\n sum = sum + z * z;\n }\n ${DW}\n\n setOutputAtCoords(b, r, c, d, lrnSub[index] * powValue);\n }\n } `}};function _pe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{depthRadius:s,bias:a,alpha:i,beta:p}=o,u;s>16?u=new Hx(n.shape):u=new Kx(n.shape,s);let c=[{type:\"int32\",data:[s]},{type:\"float32\",data:[a]},{type:\"float32\",data:[i]},{type:\"float32\",data:[p]}];return t.runWebGPUProgram(u,[n],n.dtype,c)}var AW={kernelName:Bn,backendName:\"webgpu\",kernelFunc:_pe};var qx=class{constructor(e){this.outputShape=[],this.variableNames=[\"inputImage\",\"outputImage\",\"dy\"],this.uniforms=\"depthRadius : i32, bias : f32, alpha : f32, beta : f32,\",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"lrn_grad\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getOutputCoords();\n let b = coords[0];\n let r = coords[1];\n let c = coords[2];\n\n let MIN_DEPTH_BEGIN = 0;\n let MAX_DEPTH_END = uniforms.outShape[3];\n var result = 0.0;\n for (var d = MIN_DEPTH_BEGIN; d < MAX_DEPTH_END; d++) {\n let depthBegin = max(MIN_DEPTH_BEGIN, d - uniforms.depthRadius);\n let depthEnd = min(MAX_DEPTH_END, d + uniforms.depthRadius + 1);\n\n var norm = 0.0;\n for (var k = MIN_DEPTH_BEGIN; k < MAX_DEPTH_END; k++) {\n if (k < depthBegin) {\n continue;\n } else if (k >= depthBegin && k < depthEnd) {\n norm += getInputImage(b, r, c, k) * getInputImage(b, r, c, k);\n } else {\n break;\n }\n }\n\n norm = uniforms.alpha * norm + uniforms.bias;\n\n for (var k = MIN_DEPTH_BEGIN; k < MAX_DEPTH_END; k++) {\n if (k < depthBegin) {\n continue;\n } else if (k >= depthBegin && k < depthEnd) {\n var dyi = -2.0 * uniforms.alpha * uniforms.beta\n * getInputImage(b, r, c, k) * getOutputImage(b, r, c, d) / norm;\n if (k == d) {\n dyi += pow(norm, -1.0 * uniforms.beta);\n }\n if (k == coords[3]) {\n dyi *= getDy(b, r, c, d);\n result += dyi;\n }\n } else {\n break;\n }\n }\n }\n\n setOutputAtIndex(index, result);\n }\n }\n `}};function Epe(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 qx(n.shape),m=[{type:\"int32\",data:[i]},{type:\"float32\",data:[p]},{type:\"float32\",data:[u]},{type:\"float32\",data:[c]}];return t.runWebGPUProgram(l,[n,s,a],n.dtype,m)}var FW={kernelName:Ya,backendName:\"webgpu\",kernelFunc:Epe};var $pe=et({opType:fe.MAX,cpuKernelImpl:Ez}),PW={kernelName:Vn,backendName:\"webgpu\",kernelFunc:$pe};function Rpe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{filterSize:s,strides:a,pad:i,dimRoundingMode:p}=o,c=w.computePool2DInfo(n.shape,s,a,1,i,p);return ax(n,c,\"max\",t)}var OW={kernelName:Wn,backendName:\"webgpu\",kernelFunc:Rpe};function Dpe(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=w.computePool3DInfo(n.shape,s,a,c,i,u,p),m=new Iu(l,\"max\"),d=[{type:\"int32\",data:[l.strideDepth,l.strideHeight,l.strideWidth]},{type:\"int32\",data:[l.padInfo.front,l.padInfo.top,l.padInfo.left]},{type:\"int32\",data:[l.inDepth,l.inHeight,l.inWidth]},{type:\"int32\",data:[l.effectiveFilterDepth,l.effectiveFilterHeight,l.effectiveFilterWidth]}];return t.runWebGPUProgram(m,[n],n.dtype,d)}var MW={kernelName:ia,backendName:\"webgpu\",kernelFunc:Dpe};var jx=class{constructor(e){this.variableNames=[\"dy\",\"maxPos\"],this.uniforms=`strides : vec2, pads : vec2, dilations : vec2, filterDims : vec2,\n outHeight : i32, outWidth : i32`,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.inShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"maxPool2DBackprop\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n let batch = coords[0];\n let d = coords[3];\n\n let dyRCCorner = vec2(coords.yz) - uniforms.pads;\n let dyRCorner = dyRCCorner.x;\n let 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 var dotProd = 0.0;\n let lastIndex = uniforms.filterDims[0] * uniforms.filterDims[1] - 1;\n for (var wR = 0; wR < uniforms.filterDims[0]; wR += uniforms.dilations[0]) {\n let dyR = f32(dyRCorner + wR) / f32(uniforms.strides[0]);\n\n if (dyR < 0.0 || dyR >= f32(uniforms.outHeight) || fract(dyR) > 0.0) {\n continue;\n }\n let idyR = i32(dyR);\n\n for (var wC = 0; wC < uniforms.filterDims[1]; wC += uniforms.dilations[1]) {\n let dyC = f32(dyCCorner + wC) / f32(uniforms.strides[1]);\n\n if (dyC < 0.0 || dyC >= f32(uniforms.outWidth) || fract(dyC) > 0.0) {\n continue;\n }\n let idyC = i32(dyC);\n\n let dyValue = getDy(batch, idyR, idyC, d);\n let maxPosValue = lastIndex - i32(getMaxPos(batch, idyR, idyC, d));\n\n // Get the current value, check it against the value from the\n // position matrix.\n let curPosValue = wR * uniforms.filterDims[1] + wC;\n let mask = select(0.0, 1.0, maxPosValue == curPosValue);\n dotProd += dyValue * mask;\n }\n }\n setOutputAtIndex(index, dotProd);\n }\n }\n `}},Xx=class{constructor(e){this.variableNames=[\"dy\",\"maxPos\"],this.uniforms=`strides : vec3, pads : vec3, filterDims : vec3,\n outDepth : i32, outHeight : i32, outWidth : i32`,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.inShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"maxPool3DBackprop\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n let batch = coords.x;\n let ch = coords.u;\n\n let dyCorner = vec3(coords.y, coords.z, coords.w) - uniforms.pads;\n let dyDCorner = dyCorner.x;\n let dyRCorner = dyCorner.y;\n let 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 var dotProd = 0.0;\n let lastIndex = uniforms.filterDims[0] * uniforms.filterDims[1] * uniforms.filterDims[2] - 1;\n\n for (var wD = 0; wD < uniforms.filterDims[0]; wD++) {\n let dyD = f32(dyDCorner + wD) / f32(uniforms.strides[0]);\n\n if (dyD < 0.0 || dyD >= f32(uniforms.outDepth) || fract(dyD) > 0.0) {\n continue;\n }\n let idyD = i32(dyD);\n\n for (var wR = 0; wR < uniforms.filterDims[1]; wR++) {\n let dyR = f32(dyRCorner + wR) / f32(uniforms.strides[1]);\n\n if (dyR < 0.0 || dyR >= f32(uniforms.outHeight) || fract(dyR) > 0.0) {\n continue;\n }\n let idyR = i32(dyR);\n\n for (var wC = 0; wC < uniforms.filterDims[2]; wC++) {\n let dyC = f32(dyCCorner + wC) / f32(uniforms.strides[2]);\n\n if (dyC < 0.0 || dyC >= f32(uniforms.outWidth) || fract(dyC) > 0.0) {\n continue;\n }\n let idyC = i32(dyC);\n\n let dyValue = getDy(batch, idyD, idyR, idyC, ch);\n let maxPosValue = lastIndex - i32(getMaxPos(batch, idyD, idyR, idyC, ch));\n\n // Get the current value, check it against the value from the\n // position matrix.\n let curPosValue = wD * uniforms.filterDims[1] * uniforms.filterDims[2] + wR * uniforms.filterDims[2] + wC;\n let mask = select(0.0, 1.0, maxPosValue == curPosValue);\n dotProd += dyValue * mask;\n }\n }\n }\n\n setOutputAtIndex(index, dotProd);\n }\n }\n `}};function Ape(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=w.computePool3DInfo(a.shape,i,p,l,u,c),d=new Iu(m,\"max\",!0),f=[{type:\"int32\",data:[m.strideDepth,m.strideHeight,m.strideWidth]},{type:\"int32\",data:[m.padInfo.front,m.padInfo.top,m.padInfo.left]},{type:\"int32\",data:[m.inDepth,m.inHeight,m.inWidth]},{type:\"int32\",data:[m.effectiveFilterDepth,m.effectiveFilterHeight,m.effectiveFilterWidth]}],h=t.runWebGPUProgram(d,[a],\"int32\",f),g=new Xx(m);f=[{type:\"int32\",data:[m.strideDepth,m.strideHeight,m.strideWidth]},{type:\"int32\",data:[m.effectiveFilterDepth-1-m.padInfo.front,m.effectiveFilterHeight-1-m.padInfo.top,m.effectiveFilterWidth-1-m.padInfo.left]},{type:\"int32\",data:[m.effectiveFilterDepth,m.effectiveFilterHeight,m.effectiveFilterWidth]},{type:\"int32\",data:[m.outDepth]},{type:\"int32\",data:[m.outHeight]},{type:\"int32\",data:[m.outWidth]}];let x=t.runWebGPUProgram(g,[n,h],a.dtype,f);return t.disposeData(h.dataId),x}var LW={kernelName:Gi,backendName:\"webgpu\",kernelFunc:Ape};function Fpe(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s,output:a}=e,i=s;fm([s,a],\"maxPoolGrad\");let{filterSize:p,strides:u,pad:c,dimRoundingMode:l}=o,m=w.computePool2DInfo(i.shape,p,u,1,c,l),d=new Ba(m,\"max\",!0),f=[{type:\"int32\",data:[m.strideHeight,m.strideWidth]},{type:\"int32\",data:[m.padInfo.top,m.padInfo.left]},{type:\"int32\",data:[m.dilationHeight,m.dilationWidth]},{type:\"int32\",data:[m.inHeight,m.inWidth]},{type:\"int32\",data:[m.effectiveFilterHeight,m.effectiveFilterWidth]}],h=t.runWebGPUProgram(d,[i],\"int32\",f),g=new jx(m);f=[{type:\"int32\",data:[m.strideHeight,m.strideWidth]},{type:\"int32\",data:[m.effectiveFilterHeight-1-m.padInfo.top,m.effectiveFilterWidth-1-m.padInfo.left]},{type:\"int32\",data:[m.dilationHeight,m.dilationWidth]},{type:\"int32\",data:[m.effectiveFilterHeight,m.effectiveFilterWidth]},{type:\"int32\",data:[m.outHeight]},{type:\"int32\",data:[m.outWidth]}];let x=t.runWebGPUProgram(g,[n,h],i.dtype,f);return t.disposeData(h.dataId),x}var BW={kernelName:Ui,backendName:\"webgpu\",kernelFunc:Fpe};function Ppe(r){let{inputs:e,backend:t,attrs:o}=r,{filterSize:n,strides:s,pad:a,includeBatchInIndex:i}=o,{x:p}=e;y.assert(p.shape.length===4,()=>`Error in maxPool: input must be rank 4 but got rank ${p.shape.length}.`);let u=[1,1];y.assert(w.eitherStridesOrDilationsAreOne(s,u),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${s} and dilations '${u}'`);let c=w.computePool2DInfo(p.shape,n,s,u,a),l=[{type:\"int32\",data:[c.strideHeight,c.strideWidth]},{type:\"int32\",data:[c.padInfo.top,c.padInfo.left]},{type:\"int32\",data:[c.dilationHeight,c.dilationWidth]},{type:\"int32\",data:[c.inHeight,c.inWidth]},{type:\"int32\",data:[c.effectiveFilterHeight,c.effectiveFilterWidth]}],m=new Ba(c,\"max\",!1),d=t.runWebGPUProgram(m,[p],p.dtype,l);m=new Ba(c,\"max\",!0,!0,i);let f=t.runWebGPUProgram(m,[p],\"int32\",l);return[d,f]}var zW={kernelName:ua,backendName:\"webgpu\",kernelFunc:Ppe};function Ope(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o;return eo(n,s,a,\"min\",t)}var VW={kernelName:Gn,backendName:\"webgpu\",kernelFunc:Ope};var Mpe=et({opType:fe.MIN,cpuKernelImpl:$z}),WW={kernelName:Hn,backendName:\"webgpu\",kernelFunc:Mpe};var Yx=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=X(this.outputShape),this.dispatch=H(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=ft(e),p=e>1?[\"coords[0]\",\"coords[1]\",\"coords[2]\",\"coords[3]\"].slice(0,e):\"coords\";return`\n ${G(\"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 UW={kernelName:Kn,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 Yx(o.shape,n,s);return a.runWebGPUProgram(p,[o],o.dtype,i)}};var Lpe=et({opType:fe.MOD}),GW={kernelName:qn,backendName:\"webgpu\",kernelFunc:Lpe};var Qx=class{constructor(e,t){this.variableNames=[\"probs\"],this.outputShape=[],this.uniforms=\"seed : f32, numOutcomes: i32,\",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=[e,t],this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"multinomial\"}getUserCode(){return`\n //Based on the work of Dave Hoskins\n //https://www.shadertoy.com/view/4djSRW\n fn random (seed : f32, resultUV : vec2) -> f32 {\n let HASHSCALE1 = 443.8975;\n let p = resultUV * seed;\n var p3 = fract(vec3(p.xyx) * HASHSCALE1);\n p3 = p3 + dot(p3, p3.yzx + 19.19);\n return fract((p3.x + p3.y) * p3.z);\n }\n\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getOutputCoords();\n let batch = coords[0];\n\n let resUV = vec2(f32(coords[1]) / f32(uniforms.outShape[1]),\n f32(coords[0]) / f32(uniforms.outShape[0]));\n let r = random(uniforms.seed, resUV);\n var cdf = 0.0;\n for (var i = 0; i < uniforms.numOutcomes - 1; i = i + 1) {\n cdf = cdf + getProbs(batch, i);\n\n if (r < cdf) {\n setOutputAtIndexI32(index, i);\n return;\n }\n }\n\n // If no other event happened, last event happened.\n setOutputAtIndexI32(index, uniforms.numOutcomes - 1);\n }\n }\n `}};var Zx=class{constructor(e){this.variableNames=[\"logits\"],this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=[this.outputShape[0],1,1],this.outputShape[1]>=4096?this.workgroupSize=[256,1,1]:this.workgroupSize=[64,1,1],this.shaderKey=\"softmax\"}getUserCode(){return`\n var buf : array;\n var rowMaxShared : f32;\n var rowSumShared : f32;\n const blockSize = ${this.workgroupSize[0]};\n ${G(\"index\")} {\n let row = index / blockSize;\n let tid = i32(localId.x);\n let cols = uniforms.outShape[1];\n\n var threadMax = -3.402823e+38f;\n for (var col = tid; col < cols; col += blockSize) {\n let value = getLogits(row, col);\n threadMax = max(threadMax, value);\n }\n if (tid < cols) {\n buf[tid] = threadMax;\n }\n workgroupBarrier();\n\n var reduceSize = min(cols, blockSize);\n for (var currSize = reduceSize >> 1; currSize > 0; currSize = reduceSize >> 1) {\n reduceSize = currSize + (reduceSize & 1);\n if (tid < currSize) {\n buf[tid] = max(buf[tid], buf[tid + reduceSize]);\n }\n workgroupBarrier();\n }\n\n if (tid == 0) {\n rowMaxShared = buf[0];\n }\n workgroupBarrier();\n\n var threadSum = 0.0;\n for (var col = tid; col < cols; col += blockSize) {\n let subExp = exp(getLogits(row, col) - rowMaxShared);\n threadSum += subExp;\n }\n buf[tid] = threadSum;\n workgroupBarrier();\n\n for (var currSize = blockSize >> 1; currSize > 0; currSize = currSize >> 1) {\n if (tid < currSize) {\n buf[tid] = buf[tid] + buf[tid + currSize];\n }\n workgroupBarrier();\n }\n\n if (tid == 0) {\n rowSumShared = buf[0];\n }\n workgroupBarrier();\n\n for (var col = tid; col < cols; col += blockSize) {\n let value = exp(getLogits(row, col) - rowMaxShared) / rowSumShared;\n setOutputAtCoords(row, col, value);\n }\n }\n `}};function l0(r){let{inputs:e,backend:t,attrs:o}=r,{logits:n}=e,{dim:s}=o,a=pe({inputs:{x:n},backend:t,attrs:{shape:[y.sizeFromShape(n.shape)/n.shape[s],n.shape[s]]}}),i=new Zx(a.shape),p=t.runWebGPUProgram(i,[a],n.dtype),u=pe({inputs:{x:p},backend:t,attrs:{shape:n.shape}});return t.disposeData(a.dataId),t.disposeData(p.dataId),u}var HW={kernelName:Is,backendName:\"webgpu\",kernelFunc:l0};function Bpe(r){let{inputs:e,backend:t,attrs:o}=r,{logits:n}=e,{numSamples:s,seed:a,normalized:i}=o,p=i?n:l0({inputs:{logits:n},backend:t,attrs:{dim:n.shape.length-1}}),u=p.shape[0],c=p.shape[1],l=new Qx(u,s),m=[{type:\"float32\",data:[a]},{type:\"int32\",data:[c]}],d=t.runWebGPUProgram(l,[p],\"int32\",m);return i||t.disposeData(p.dataId),d}var KW={kernelName:jn,backendName:\"webgpu\",kernelFunc:Bpe};function zpe(r){let{inputs:e,backend:t}=r,{x:o}=e;if(t.shouldExecuteOnCPU([o])){let s=t.tensorMap.get(o.dataId),[a,i]=Dz(s.values,o.shape,o.dtype);return t.makeTensorInfo(i,o.dtype,a)}let n=new Jr(o.shape,Z.NEG);return t.runWebGPUProgram(n,[o],o.dtype)}var qW={kernelName:pa,backendName:\"webgpu\",kernelFunc:zpe};function Vpe(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}=Vt.nonMaxSuppressionV3Impl(u,c,a,i,p);return t.makeTensorInfo([l.length],\"int32\",new Int32Array(l))}var jW={kernelName:Qn,backendName:\"webgpu\",kernelFunc:Vpe};function Wpe(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}=Vt.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 XW={kernelName:Zn,backendName:\"webgpu\",kernelFunc:Wpe};var Jx=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=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"onehot\"}getUserCode(){return`\n ${G(\"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 Upe(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 Jx(u,a),l=pe({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=pe({inputs:{x:d},backend:t,attrs:{shape:f}});return t.disposeData(d.dataId),h}var YW={kernelName:Jn,backendName:\"webgpu\",kernelFunc:Upe};function bm(r){let{inputs:e,backend:t}=r,{x:o}=e;if(o.dtype===\"complex64\"){let n=vi({inputs:{input:o},backend:t}),s=bm({inputs:{x:n},backend:t}),a=Rp({inputs:{input:o},backend:t}),i=bm({inputs:{x:a},backend:t}),p=xo({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 vt({attrs:{shape:o.shape,dtype:o.dtype,value:o.dtype===\"string\"?\"\":0},backend:t})}var QW={kernelName:Sa,backendName:\"webgpu\",kernelFunc:bm};function ZW(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=vi({inputs:{input:o},backend:t}),s=ZW({inputs:{x:n},backend:t}),a=Rp({inputs:{input:o},backend:t}),i=bm({inputs:{x:a},backend:t}),p=xo({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 vt({attrs:{shape:o.shape,dtype:o.dtype,value:1},backend:t})}var JW={kernelName:ca,backendName:\"webgpu\",kernelFunc:ZW};function Gpe(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=>{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:t,attrs:{dim:n}});return i.push(l),l}),u=a0({inputs:p,backend:t,attrs:{axis:n}});return i.forEach(c=>t.disposeData(c.dataId)),u}var eU={kernelName:la,backendName:\"webgpu\",kernelFunc:Gpe};function m0(r,e=!1){let t=r.length,o=ft(t),n=r.map((l,m)=>`uniforms.pad${m}[0]`).join(\",\"),s=r.map((l,m)=>`uniforms.pad${m}[0] + uniforms.xShape${t>1?`[${m}]`:\"\"}`).join(\",\"),a=t>1?`${o}(${n})`:`${n}`,i=t>1?`${o}(${s})`:`${s}`,p=t>1?\"any(paddedCoords < start)\":\"paddedCoords < start\",u=t>1?\"any(paddedCoords >= end)\":\"paddedCoords >= end\",c=t>1?[\"coords[0]\",\"coords[1]\",\"coords[2]\",\"coords[3]\"].slice(0,t):\"coords\";return`\n let start = ${a};\n let end = ${i};\n if (${p} || ${u}) {\n setOutputAtIndex(index, ${e?0:\"uniforms.constantValue\"});\n } else {\n let coords = paddedCoords - start;\n setOutputAtIndex(index, getX(${c}));\n }\n `}var ey=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=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),t.map((o,n)=>{this.uniforms+=` pad${n} : vec2,`}),this.xShape=e,this.shaderKey=\"pad\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let paddedCoords = getCoordsFromIndex(index);\n ${m0(this.xShape)}\n }\n }\n `}};var Hpe=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 At({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 vt({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 ey(n.shape,s);return t.runWebGPUProgram(p,[n],n.dtype,i)},tU={kernelName:es,backendName:\"webgpu\",kernelFunc:Hpe};var Kpe=et({opType:fe.POW}),rU={kernelName:ts,backendName:\"webgpu\",kernelFunc:Kpe};function qpe(r){let{inputs:e,backend:t}=r,{x:o,alpha:n}=e,s=new Ii(fe.PRELU,o.shape,n.shape);return t.runWebGPUProgram(s,[o,n],\"float32\")}var oU={kernelName:rs,backendName:\"webgpu\",kernelFunc:qpe};function jpe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o;return eo(n,s,a,\"prod\",t)}var nU={kernelName:os,backendName:\"webgpu\",kernelFunc:jpe};var Xpe=r=>{let{backend:e,attrs:t}=r,{start:o,stop:n,step:s,dtype:a}=t,i=Pz(o,n,s,a);return e.makeTensorInfo([i.length],a,i)},sU={kernelName:ma,backendName:\"webgpu\",kernelFunc:Xpe};var Ype=et({opType:fe.DIV}),aU={kernelName:fn,backendName:\"webgpu\",kernelFunc:Ype};var Qpe=ye({opType:Z.RECIPROCAL}),iU={kernelName:ns,backendName:\"webgpu\",kernelFunc:Qpe};var Zpe=ye({opType:Z.RELU}),uU={kernelName:ss,backendName:\"webgpu\",kernelFunc:Zpe};var Jpe=ye({opType:Z.RELU6}),pU={kernelName:us,backendName:\"webgpu\",kernelFunc:Jpe};var ty=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=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"resizeBilinear\"}getUserCode(){return`\n ${G(\"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 ece(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 ty(n.shape,p,u);return t.runWebGPUProgram(f,[n],\"float32\",d)}var cU={kernelName:is,backendName:\"webgpu\",kernelFunc:ece};var ry=class{constructor(e,t){this.variableNames=[\"dy\"],this.uniforms=`effectiveXSize : vec2, effectiveYSize : vec2, heightScale : f32, widthScale : f32,\n invHeightScale : f32, invWidthScale : f32, winHeight : i32, winWidth : i32,`,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.alignCorners=t,this.shaderKey=`resizeBilinearBackprop_${t}`}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getOutputCoords();\n let b = coords[0];\n let d = coords[3];\n let r = coords[1];\n let c = coords[2];\n\n var accumulator = 0.0;\n\n // Compute bounds for where in dy we will look\n let startRLerp = floor(f32(r) * uniforms.invHeightScale);\n let startDyR = i32(startRLerp - f32(uniforms.winHeight / 2));\n\n let startCLerp = floor(f32(c) * uniforms.invWidthScale);\n let startDyC = i32(startCLerp - f32(uniforms.winWidth / 2));\n\n // Loop over dy\n for (var dyROffset = 0; dyROffset < uniforms.winHeight; dyROffset++) {\n let dyR = startDyR + dyROffset;\n\n // Guard against the window exceeding the bounds of dy\n if (dyR < 0 || dyR >= uniforms.dyShape[1]) {\n continue;\n }\n\n for (var dyCOffset = 0; dyCOffset < uniforms.winWidth; dyCOffset++) {\n let dyC = startDyC + dyCOffset;\n\n // Guard against the window exceeding the bounds of dy\n if (dyC < 0 || dyC >= uniforms.dyShape[2]) {\n continue;\n }\n\n let dxR = f32(dyR) * uniforms.heightScale;\n let topDxRIndex = i32(floor(dxR));\n let bottomDxRIndex = i32(min(ceil(dxR), f32(uniforms.outShape[1] - 1)));\n let dxRLerp = dxR - f32(topDxRIndex);\n let inverseDxRLerp = 1.0 - dxRLerp;\n\n let dxC = f32(dyC) * uniforms.widthScale;\n let leftDxCIndex = i32(floor(dxC));\n let rightDxCIndex = i32(min(ceil(dxC), f32(uniforms.outShape[2] - 1)));\n let dxCLerp = dxC - f32(leftDxCIndex);\n let 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 setOutputAtIndex(index, accumulator);\n }\n }\n `}};function tce(r){let{inputs:e,backend:t,attrs:o}=r,{images:n,dy:s}=e,{alignCorners:a}=o,[,i,p]=n.shape,[,u,c]=s.shape,l=[a&&u>1?i-1:i,a&&c>1?p-1:p],m=[a&&u>1?u-1:u,a&&c>1?c-1:c],d=l[0]/m[0],f=l[1]/m[1],h=1/d,g=1/f,x=Math.ceil(h)*2+2,b=Math.ceil(g)*2+2,C=new ry(n.shape,a),S=[{type:\"int32\",data:l},{type:\"int32\",data:m},{type:\"float32\",data:[d]},{type:\"float32\",data:[f]},{type:\"float32\",data:[h]},{type:\"float32\",data:[g]},{type:\"int32\",data:[x]},{type:\"int32\",data:[b]}];return t.runWebGPUProgram(C,[s],s.dtype,S)}var lU={kernelName:Ja,backendName:\"webgpu\",kernelFunc:tce};var oy=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=X(this.outputShape),this.dispatch=H(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 ${G(\"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 rce(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 oy(n.shape,p,u,a);return t.runWebGPUProgram(f,[n],n.dtype,d)}var mU={kernelName:as,backendName:\"webgpu\",kernelFunc:rce};var ny=class{constructor(e,t){this.variableNames=[\"dy\"],this.uniforms=`effectiveXSize : vec2, effectiveYSize : vec2, invHeightScale : f32, invWidthScale : f32,\n winHeight : i32, winWidth : i32,`,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.alignCorners=t,this.shaderKey=`resizeNearestNeigborBackprop_${t}`}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getOutputCoords();\n let b = coords[0];\n let d = coords[3];\n let r = coords[1];\n let c = coords[2];\n\n var accumulator = 0.0;\n\n // Compute bounds for where in dy we will look\n let startRLerp = floor(f32(r) * uniforms.invHeightScale);\n let startDyR = i32(floor(startRLerp - f32(uniforms.winHeight / 2)));\n\n let startCLerp = floor(f32(c) * uniforms.invWidthScale);\n let startDyC = i32(floor(startCLerp - f32(uniforms.winWidth / 2)));\n\n // Loop over dy\n for (var dyROffset = 0; dyROffset < uniforms.winHeight; dyROffset++) {\n let dyR = startDyR + dyROffset;\n\n // Guard against the window exceeding the bounds of dy\n if (dyR < 0 || dyR >= uniforms.dyShape[1]) {\n continue;\n }\n\n for (var dyCOffset = 0; dyCOffset < uniforms.winWidth; dyCOffset++) {\n let dyC = startDyC + dyCOffset;\n\n // Guard against the window exceeding the bounds of dy\n if (dyC < 0 || dyC >= uniforms.dyShape[2]) {\n continue;\n }\n\n let sourceFracRow = f32(uniforms.effectiveXSize[0]) *\n (f32(dyR) / f32(uniforms.effectiveYSize[0]));\n\n let sourceFracCol = f32(uniforms.effectiveXSize[1]) *\n (f32(dyC) / f32(uniforms.effectiveYSize[1]));\n\n let sourceNearestRow =\n i32(min(f32(uniforms.outShape[1] - 1),\n ${this.alignCorners?\"floor(sourceFracRow + 0.5)\":\"floor(sourceFracRow)\"}));\n\n let sourceNearestCol =\n i32(min(f32(uniforms.outShape[2] - 1),\n ${this.alignCorners?\"floor(sourceFracCol + 0.5)\":\"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 setOutputAtIndex(index, accumulator);\n }\n }\n `}};function oce(r){let{inputs:e,backend:t,attrs:o}=r,{images:n,dy:s}=e,{alignCorners:a}=o,[,i,p]=n.shape,[,u,c]=s.shape,l=[a&&u>1?i-1:i,a&&c>1?p-1:p],m=[a&&u>1?u-1:u,a&&c>1?c-1:c],d=l[0]/m[0],f=l[1]/m[1],h=1/d,g=1/f,x=Math.ceil(h)*2+2,b=Math.ceil(g)*2+2,C=new ny(n.shape,a),S=[{type:\"int32\",data:l},{type:\"int32\",data:m},{type:\"float32\",data:[h]},{type:\"float32\",data:[g]},{type:\"int32\",data:[x]},{type:\"int32\",data:[b]}];return t.runWebGPUProgram(C,[s],s.dtype,S)}var dU={kernelName:Za,backendName:\"webgpu\",kernelFunc:oce};var sy=class{constructor(e){this.variableNames=[\"x\"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(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 ${G(\"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 nce(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{dims:s}=o,a=n.shape.length;if(a===0)return At({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=pe({inputs:{x:n},backend:t,attrs:{shape:p}}),d=new sy(p),f=t.runWebGPUProgram(d,[m],m.dtype,l);t.disposeData(m.dataId);let h=pe({inputs:{x:f},backend:t,attrs:{shape:i}});return t.disposeData(f.dataId),h}var fU={kernelName:ps,backendName:\"webgpu\",kernelFunc:nce};var ay=class{constructor(e,t){this.outputShape=[],this.variableNames=[\"x\"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(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 ${G(\"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 hU={kernelName:Ds,backendName:\"webgpu\",kernelFunc:({inputs:r,attrs:e,backend:t})=>{let{image:o}=r,{radians:n,fillValue:s,center:a}=e,i=t,p=new ay(o.shape,s),[u,c]=w.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 sce=ye({opType:Z.ROUND}),gU={kernelName:cs,backendName:\"webgpu\",kernelFunc:sce};var ace=ye({opType:Z.RSQRT,cpuKernelImpl:Oz}),xU={kernelName:ls,backendName:\"webgpu\",kernelFunc:ace};var za=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=X(e),this.dispatch=H(this.dispatchLayout,e,this.workgroupSize),this.sliceDimGreaterThanOne=t>1,this.shaderKey=`scatter_${o}_${n}_${this.sliceDimGreaterThanOne}_${i}_${p}_${s.length}`;let u=ft(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},(u,c)=>`coords[${c}]`).join(\", \")})`;return`\n ${s}\n ${G(\"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 ${Su(this.type)}(${i});\n let flatIndex = getOutputIndexFromCoords(${n});\n\n ${this.sumDupeIndices?Qr(\"&result[flatIndex]\",\"updateValue\",this.type):\"atomicStore(&result[flatIndex], bitcast(updateValue));\"}\n }\n }`}};function ice(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}=w.calculateShapes(s,n,a),m=[l/u,u];if(l===0)return t.makeTensorInfo(a,n.dtype);let d=pe({inputs:{x:n},backend:t,attrs:{shape:[p,i]}}),f=pe({inputs:{x:s},backend:t,attrs:{shape:[p,u]}}),h=f.dtype,g=vt({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 za(f.shape,i,d.shape.length,f.shape.length,c,m,h),S=t.runWebGPUProgram(C,[f,d],h,b,g),k=pe({inputs:{x:S},backend:t,attrs:{shape:a}});return t.disposeData(d.dataId),t.disposeData(f.dataId),t.disposeData(S.dataId),k}var yU={kernelName:ms,backendName:\"webgpu\",kernelFunc:ice};var iy=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=X(this.outputShape),this.dispatch=H(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 ${G(\"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 uce(r){let{inputs:e,backend:t,attrs:o}=r,{sortedSequence:n,values:s}=e,{side:a}=o,i=new iy([s.shape[0],s.shape[1]],a),p=[{type:\"int32\",data:[n.shape[1]]}];return t.runWebGPUProgram(i,[n,s],\"int32\",p)}var bU={kernelName:fs,backendName:\"webgpu\",kernelFunc:uce};var uy=class{constructor(e,t,o){this.variableNames=[\"c\",\"a\",\"b\"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=t,this.dispatchLayout=X(this.outputShape),this.dispatch=H(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 pce(r){let{inputs:e,backend:t}=r,{condition:o,t:n,e:s}=e,a=new uy(o.shape.length,n.shape,n.shape.length);return t.runWebGPUProgram(a,[o,n,s],dt(n.dtype,s.dtype))}var CU={kernelName:fa,backendName:\"webgpu\",kernelFunc:pce};var cce=ye({opType:Z.SELU}),wU={kernelName:hs,backendName:\"webgpu\",kernelFunc:cce};var lce=ye({opType:Z.SIGMOID}),SU={kernelName:bs,backendName:\"webgpu\",kernelFunc:lce};var mce=ye({opType:Z.SIGN}),IU={kernelName:ys,backendName:\"webgpu\",kernelFunc:mce};var dce=ye({opType:Z.SIN}),vU={kernelName:gs,backendName:\"webgpu\",kernelFunc:dce};var fce=ye({opType:Z.SINH}),kU={kernelName:xs,backendName:\"webgpu\",kernelFunc:fce};var hce=ye({opType:Z.SOFTPLUS}),NU={kernelName:Cs,backendName:\"webgpu\",kernelFunc:hce};var py=class{constructor(e,t,o,n,s,a){this.variableNames=[\"x\"],this.outputShape=[],this.uniforms=\"\",this.workgroupSize=[64,1,1],this.size=!0;let i=new Array(n.length);for(let p=0;p{this.uniforms+=` pad${u} : vec2,`}),this.shaderKey=`spaceToBatchND_${s}`}getUserCode(){let e=ft(this.outputShape.length),t=e0(this.newDim);return`\n ${cm(this.paddedXShape,\"PaddedX\")}\n ${G(\"index\")} {\n if(index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n let switchedIndex = getIndexFromCoords${this.outputShape.length}D(${e}(${t}), uniforms.reshapedPaddedXShape);\n let paddedCoords = getPaddedXCoordsFromIndex(switchedIndex);\n ${m0(this.xShape,!0)}\n }\n }\n `}};var gce=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((b,C)=>b*C),p=[[0,0]];p.push(...a);for(let b=1+s.length;bb[0]+n.shape[C]+b[1]),c=w.getReshaped(u,s,i,!1),l=w.getPermuted(c.length,s.length,!1),m=w.getReshapedPermuted(u,s,i,!1),d=y.computeStrides(u),f=new py(n.shape,u,p,c,l,d.length),h=[{type:\"int32\",data:c},{type:\"int32\",data:d}];p.map(b=>h.push({type:\"int32\",data:[b[0],b[1]]}));let g=t.runWebGPUProgram(f,[n],n.dtype,h),x=pe({inputs:{x:g},backend:t,attrs:{shape:m}});return t.disposeData(g.dataId),x},TU={kernelName:ga,backendName:\"webgpu\",kernelFunc:gce};var cy=class{constructor(e,t,o){this.variableNames=[\"input\",\"indices\",\"segmentIds\"],this.outputShape=[],this.uniforms=\"segmentSize : i32, sparseSize : i32,\",this.workgroupSize=[64,1,1],this.atomic=!0,this.outputShape=e,this.type=o,this.dispatchLayout=X([t]),this.dispatch=H(this.dispatchLayout,[t],this.workgroupSize),this.shaderKey=\"sparseSegmentSum\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.sparseSize) {\n let indexInSegmentIds = index / uniforms.segmentSize;\n let indexInSegment = index % uniforms.segmentSize;\n let indexInInput = indices[indexInSegmentIds];\n let segmentId = segmentIds[indexInSegmentIds];\n\n let value = input[indexInInput * uniforms.segmentSize + indexInSegment];\n let outIndex = segmentId * uniforms.segmentSize + indexInSegment;\n ${Qr(\"&result[outIndex]\",\"value\",this.type)}\n }\n }\n `}},ly=class{constructor(e,t){this.variableNames=[\"segmentIds\"],this.outputShape=[],this.workgroupSize=[64,1,1],this.atomic=!0,this.outputShape=[e],this.dispatchLayout=X(t),this.dispatch=H(this.dispatchLayout,t,this.workgroupSize),this.shaderKey=\"sparseSegmentIdCountProgram\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.segmentIdsShape) {\n let segmentId = segmentIds[index];\n ${Qr(\"&result[segmentId]\",\"1\",\"int32\")}\n }\n }\n `}},my=class{constructor(e,t){this.variableNames=[\"segmentSum\",\"sameSegmentIdCount\"],this.outputShape=[],this.uniforms=\"segmentSize : i32\",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.type=t,this.dispatchLayout=X(e),this.dispatch=H(this.dispatchLayout,e,this.workgroupSize),this.shaderKey=\"sparseSegmentMean\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let segmentId = index / uniforms.segmentSize;\n let count = sameSegmentIdCount[segmentId];\n if (count != 0) {\n ${this.type===\"float32\"?\"setOutputAtIndex(index, segmentSum[index] / f32(count));\":\"setOutputAtIndexI32(index, segmentSum[index] / count);\"}\n }\n }\n }\n `}};function dy(r,e,t,o=!1,n){let a=y.sizeFromShape(r.shape)/r.shape[0],i=r.dtype,p=y.sizeFromShape(e.shape),u=n.readSync(t.dataId),l=p>0?u[p-1]+1:0,m,d=r.shape.slice();d[0]=l;let f=p*a,h=vt({backend:n,attrs:{shape:d,value:0,dtype:i}});m=new cy(d,f,i);let g=[{type:\"int32\",data:[a]},{type:\"int32\",data:[f]}],x=n.runWebGPUProgram(m,[r,e,t],i,g,h);if(o)return x;let b=vt({backend:n,attrs:{shape:[l],value:0,dtype:\"int32\"}});m=new ly(l,t.shape);let C=n.runWebGPUProgram(m,[t],\"int32\",null,b),S=vt({backend:n,attrs:{shape:d,value:0,dtype:i}});m=new my(d,i),g=[{type:\"int32\",data:[a]}];let k=n.runWebGPUProgram(m,[x,C],i,g,S);return n.disposeData(x.dataId),n.disposeData(C.dataId),k}function xce(r){let{inputs:e,backend:t}=r,{data:o,indices:n,segmentIds:s}=e;return dy(o,n,s,!1,t)}var _U={kernelName:ya,backendName:\"webgpu\",kernelFunc:xce};function yce(r){let{inputs:e,backend:t}=r,{data:o,indices:n,segmentIds:s}=e;return dy(o,n,s,!0,t)}var EU={kernelName:ba,backendName:\"webgpu\",kernelFunc:yce};var fy=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=me(n.shape,n.dtype,u),l=Uz(c,s);return t.makeTensorInfo(l.shape,l.dtype,l.values)}let a=new fy(n.shape,s);return t.runWebGPUProgram(a,[n],n.dtype)}var $U={kernelName:po,backendName:\"webgpu\",kernelFunc:Cm};function Cce(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}=w.calculateShapes(s,n,i),d=!1;if(s.dtype===\"string\"){let R=t.bufferSync(n),D=t.bufferSync(s),P=y.decodeString(t.readSync(a.dataId)[0]),O=Mz(R,D,i,m,c,u,p,l,P,d);return t.makeTensorInfo(i,O.dtype,O.values)}let f=[m/c,c],h=pe({inputs:{x:n},backend:t,attrs:{shape:[u,p]}}),g=s.shape.length?pe({inputs:{x:s},backend:t,attrs:{shape:[u,c]}}):At({inputs:{x:s},backend:t}),x=g.dtype,b=t.makeTensorInfo([],x,y.makeZerosTypedArray(1,x)),C=pe({inputs:{x:a},backend:t,attrs:{shape:Array(f.length).fill(1)}}),S=Cm({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 R=new za([u,c],p,h.shape.length,g.shape.length,l,f,x,d);t.runWebGPUProgram(R,[g,h],x,_,S)}break;default:{let R=new za([u,c],p,h.shape.length,b.shape.length,l,f,x,d);t.runWebGPUProgram(R,[b,h],x,_,S)}{let R=new za([u,c],p,h.shape.length,g.shape.length,l,f,x);t.runWebGPUProgram(R,[g,h],x,_,S)}}let $=pe({inputs:{x:S},backend:t,attrs:{shape:i}});return t.disposeData(h.dataId),t.disposeData(g.dataId),t.disposeData(C.dataId),t.disposeData(b.dataId),t.disposeData(S.dataId),$}var RU={kernelName:vs,backendName:\"webgpu\",kernelFunc:Cce};function wce(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=w.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=Hs({inputs:{x:n},backend:t,attrs:{begin:c,size:d}});return c[i]+=m,f})}var DU={kernelName:xa,backendName:\"webgpu\",kernelFunc:wce};var Sce=ye({opType:Z.SQRT}),AU={kernelName:ws,backendName:\"webgpu\",kernelFunc:Sce};var FU={kernelName:qi,backendName:\"webgpu\",kernelFunc:({inputs:r,backend:e})=>{let{x:t}=r,o=e,n=new Jr(t.shape,Z.SQUARE);return o.runWebGPUProgram(n,[t],t.dtype)}};var Ice=et({opType:fe.SQUARED_DIFFERENCE}),PU={kernelName:ks,backendName:\"webgpu\",kernelFunc:Ice};function vce({inputs:r,attrs:e,backend:t}){let{x:o}=r,n=new Jr(o.shape,Z.STEP,\"stepAlpha : f32,\"),s=[{type:\"float32\",data:[e.alpha]}];return t.runWebGPUProgram(n,[o],o.dtype,s)}var OU={kernelName:wo,backendName:\"webgpu\",kernelFunc:vce};var hy=class{constructor(e){this.variableNames=[\"x\"],this.workPerThread=1,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize,[this.workPerThread,1,1]);let t=ft(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 ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n setOutputAtIndex(index, getX(${t}));\n }\n }\n `}};function kce(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:S}=pt.sliceInfo(n.shape,s,a,i,p,u,c,l,m),k;if(h)k=pe({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 _=pt.computeOutShape(b,C,S),$=Hs({inputs:{x:n},backend:t,attrs:{begin:b,size:_}});k=pe({inputs:{x:$},backend:t,attrs:{shape:f}}),t.disposeData($.dataId)}else if(t.shouldExecuteOnCPU([n])){let $=t.readSync(n.dataId),R=me(n.shape,n.dtype,$),D=zz(d,R,S,b);k=t.makeTensorInfo(f,n.dtype,D.values)}else{let $=new hy(d),R=[{type:\"int32\",data:b},{type:\"int32\",data:S}],D=t.runWebGPUProgram($,[n],n.dtype,R);k=pe({inputs:{x:D},backend:t,attrs:{shape:f}}),t.disposeData(D.dataId)}return k}var MU={kernelName:Ns,backendName:\"webgpu\",kernelFunc:kce};function Nce(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]=Vz(m,d,n,s,a,i,p,u);return[t.makeTensorInfo([f.length],\"string\",f),t.makeTensorInfo(l.shape,\"int32\",h)]}var LU={kernelName:Ca,backendName:\"webgpu\",kernelFunc:Nce};var Tce=et({opType:fe.SUB,cpuKernelImpl:Wz,supportsComplex:!0}),BU={kernelName:Ts,backendName:\"webgpu\",kernelFunc:Tce};var _ce=ye({opType:Z.TAN}),zU={kernelName:_s,backendName:\"webgpu\",kernelFunc:_ce};var Ece=ye({opType:Z.TANH}),VU={kernelName:Es,backendName:\"webgpu\",kernelFunc:Ece};function $ce(r){let{inputs:e,backend:t,attrs:o}=r,{tensor:n,indices:s,updates:a}=e,{}=o,{sliceRank:i,numUpdates:p,sliceSize:u,strides:c,outputSize:l}=w.calculateShapes(a,s,n.shape),m=[l/u,u];if(l===0)return t.makeTensorInfo(n.shape,s.dtype);let d=[],f=pe({inputs:{x:s},backend:t,attrs:{shape:[p,i]}});d.push(f);let h=pe({inputs:{x:a},backend:t,attrs:{shape:[p,u]}});d.push(h);let g=pe({inputs:{x:n},backend:t,attrs:{shape:m}});d.push(g);let x=Cm({inputs:{x:g},backend:t,attrs:{reps:Array(m.length).fill(1)}}),b=new za([p,u],i,f.shape.length,h.shape.length,c,m,n.dtype,!1),C=y.sizeFromShape([p,u]),S=[{type:\"int32\",data:[i]},{type:\"int32\",data:c},{type:\"int32\",data:[C]}],k=t.runWebGPUProgram(b,[h,f],g.dtype,S,x);d.push(k);let _=pe({inputs:{x:k},backend:t,attrs:{shape:n.shape}});return d.forEach($=>t.disposeData($.dataId)),_}var WU={kernelName:ds,backendName:\"webgpu\",kernelFunc:$ce};var gy=class{constructor(e){this.variableNames=[\"x\",\"indices\"],this.workgroupSize=[256,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(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 ${G(\"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 `}},xy=class{constructor(e){this.variableNames=[\"x\",\"indices\"],this.workgroupSize=[256,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.uniforms=\"inputSize : i32, firstPass : i32, k : i32,\",this.shaderKey=\"merge\"}getUserCode(){return`\n ${G(\"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 rl(r,e){e!==null&&r.disposeData(e.dataId)}function UU(r){let e=1;for(;ef===null?[l,l]:[l,f],g=(k,_,$)=>{let R=h(),D=new gy($),O=[{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(D,R,\"int32\",O),rl(t,M)};for(let k=1;k=1;$/=2)g(_,$,[c,d])}for(let k=d;k>m;k/=2){let _=h(),$=new xy([c,k/2]),D=[{type:\"int32\",data:[p]},{type:\"int32\",data:[f===null?1:0]},{type:\"int32\",data:[m]}],P=f;f=t.runWebGPUProgram($,_,\"int32\",D),rl(t,P);let O=m/2,M=O*2;for(let L=O;L>=1;L/=2)g(M,L,f.shape)}let x=f;f=Hs({inputs:{x:f},backend:t,attrs:{begin:0,size:[c,s]}}),rl(t,x);let b=c0({inputs:{x:l,indices:f},backend:t,attrs:{axis:1,batchDims:1}});rl(t,l);let C=i.slice(0,-1);C.push(s),x=f,f=pe({inputs:{x:f},attrs:{shape:C},backend:t}),rl(t,x);let S=b;return b=pe({inputs:{x:b},attrs:{shape:C},backend:t}),rl(t,S),[b,f]}var GU={kernelName:$s,backendName:\"webgpu\",kernelFunc:Rce};var yy=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=X(this.outputShape),this.dispatch=H(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 ${G(\"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 Dce(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 yy(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 S=[{type:\"int32\",data:[b]},{type:\"int32\",data:[C]},{type:\"float32\",data:[p]}];return t.runWebGPUProgram(x,[n,s],\"float32\",S)}var HU={kernelName:Rs,backendName:\"webgpu\",kernelFunc:Dce};function Ace(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 KU={kernelName:wa,backendName:\"webgpu\",kernelFunc:Ace};var by=class{constructor(e,t,o){if(this.outputShape=[],this.variableNames=[\"x\",\"segmentIds\"],this.uniforms=\"numSegments : i32, xSize: i32,\",this.workgroupSize=[64,1,1],this.atomic=!0,this.outputShape=t,this.dispatchLayout=X(e),this.dispatch=H(this.dispatchLayout,e,this.workgroupSize),o!==\"float32\"&&o!==\"int32\")throw new Error(`UnsortedSegmentSum only supports float32 and int32\n types, does not support ${o} type.`);this.type=o,this.shaderKey=\"unsortedSegmentSum\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.xSize) {\n let coords = getXCoordsFromIndex(index);\n let b = coords[0];\n let inCol = coords[1];\n\n let segmentId = i32(getSegmentIds(inCol));\n if (segmentId >= 0) {\n let flatIndex = b * uniforms.numSegments + segmentId % uniforms.numSegments;\n let value = getX(b, inCol);\n\n ${Qr(\"&result[flatIndex]\",\"value\",this.type)}\n }\n }\n }\n `}};function Fce(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=w.getAxesPermutation([u],i),l=n;c!=null&&(l=xr({inputs:{x:n},backend:t,attrs:{perm:c}}),p.push(l),u=w.getInnerMostAxes(1,i)[0]);let m=w.segment_util.computeOutShape(l.shape,u,a),d=y.sizeFromShape([l.shape[u]]),f=pe({inputs:{x:l},backend:t,attrs:{shape:[-1,d]}});p.push(f);let h=n.dtype,g=[f.shape[0],a],x=vt({backend:t,attrs:{shape:g,value:0,dtype:h}}),b=new by(f.shape,g,h),C=[{type:\"int32\",data:[a]},{type:\"int32\",data:[y.sizeFromShape(f.shape)]}],S=t.runWebGPUProgram(b,[f,s],h,C,x),k=pe({inputs:{x:S},backend:t,attrs:{shape:m}});p.push(S);let _=k;if(c!=null){p.push(k);let $=w.getUndoAxesPermutation(c);_=xr({inputs:{x:_},backend:t,attrs:{perm:$}})}return p.forEach($=>t.disposeData($.dataId)),_}var qU={kernelName:Qi,backendName:\"webgpu\",kernelFunc:Fce};var Pce=[pz,Kz,qz,jz,Xz,Yz,Zz,Jz,eV,tV,rV,oV,nV,sV,aV,pV,cV,lV,mV,dV,hV,gV,xV,wV,SV,IV,lz,kV,TV,_V,EV,$V,RV,DV,AV,FV,PV,OV,BV,zV,VV,WV,GV,HV,UV,KV,qV,jV,XV,YV,JV,eW,tW,rW,oW,nW,sW,aW,iW,iz,uW,lW,pW,cW,mW,dW,fW,hW,gW,xW,yW,cz,bW,NV,CW,wW,SW,IW,vW,kW,NW,_W,TW,EW,$W,RW,AW,FW,iV,PW,OW,BW,MW,LW,zW,uV,VW,WW,UW,GW,KW,QV,qW,jW,XW,yV,YW,JW,eU,tU,rU,oU,nU,sU,bV,aU,iU,uU,pU,uz,cU,lU,mU,dU,fU,hU,gU,xU,yU,bU,CU,wU,SU,IU,vU,kU,fV,OU,MU,LU,HW,NU,TU,_U,EU,RU,DU,AU,FU,PU,BU,ZV,zU,VU,WU,$U,GU,HU,Qz,KU,qU,QW];for(let r of Pce)ti(r);var jU=\"4.21.0\",Oce=\"4.21.0\",Mce=\"4.21.0\",Lce=\"4.21.0\",Bce=\"4.21.0\",zce=\"4.21.0\",Vce={tfjs:jU,\"tfjs-core\":jU,\"tfjs-converter\":Oce,\"tfjs-backend-cpu\":Mce,\"tfjs-backend-webgl\":Lce,\"tfjs-backend-wasm\":Bce,\"tfjs-backend-webgpu\":zce};var EQt=void 0;export{Xs as Abs,Vo as Acos,Wo as Acosh,Ju as AdadeltaOptimizer,ep as AdagradOptimizer,tp as AdamOptimizer,rp as AdamaxOptimizer,uo as Add,Uo as AddN,Go as All,Ho as Any,Ys as ArgMax,Qs as ArgMin,Ko as Asin,qo as Asinh,jo as Atan,Yo as Atan2,Xo as Atanh,Qo as AvgPool,Zs as AvgPool3D,Ri as AvgPool3DGrad,$i as AvgPoolGrad,pm as BackendWasm,Zo as BatchMatMul,Js as BatchToSpaceND,Jo as Bincount,qa as BitwiseAnd,ea as BroadcastArgs,qce as BroadcastTo,yo as Cast,en as Ceil,bo as ClipByValue,Di as Complex,Ai as ComplexAbs,ta as Concat,tn as Conv2D,Fi as Conv2DBackpropFilter,rn as Conv2DBackpropInput,on as Conv3D,ja as Conv3DBackpropFilterV2,nn as Conv3DBackpropInputV2,sn as Cos,an as Cosh,cn as CropAndResize,un as Cumprod,pn as Cumsum,Bo as DataStorage,ra as DenseBincount,ln as DepthToSpace,mn as DepthwiseConv2dNative,Pi as DepthwiseConv2dNativeBackpropFilter,Oi as DepthwiseConv2dNativeBackpropInput,oa as Diag,dn as Dilation2D,Li as Dilation2DBackpropFilter,Mi as Dilation2DBackpropInput,$u as Draw,nw as ENV,Bi as Einsum,hn as Elu,Xa as EluGrad,dl as Environment,xn as Equal,gn as Erf,yn as Exp,na as ExpandDims,bn as Expm1,zi as FFT,sa as Fill,Cn as FlipLeftRight,wn as Floor,Sn as FloorDiv,Du as FromPixels,In as FusedBatchNorm,Io as FusedConv2D,vo as FusedDepthwiseConv2D,bp as GPGPUContext,vn as GatherNd,aa as GatherV2,Bl as GraphModel,kn as Greater,Nn as GreaterEqual,Vi as IFFT,Co as Identity,Wi as Imag,Tn as IsFinite,_n as IsInf,En as IsNan,ao as KernelBackend,Bn as LRN,Ya as LRNGrad,$n as LeakyRelu,Rn as Less,Dn as LessEqual,An as LinSpace,Fn as Log,Pn as Log1p,jce as LogSoftmax,On as LogicalAnd,Mn as LogicalNot,Ln as LogicalOr,R0 as LogicalXor,Xce as LowerBound,xc as MathBackendCPU,Lc as MathBackendWebGL,Yce as MatrixBandPart,zn as Max,Wn as MaxPool,ia as MaxPool3D,Gi as MaxPool3DGrad,Ui as MaxPoolGrad,ua as MaxPoolWithArgmax,Vn as Maximum,Un as Mean,Gn as Min,Hn as Minimum,Kn as MirrorPad,qn as Mod,op as MomentumOptimizer,jn as Multinomial,Xn as Multiply,pa as Neg,Qn as NonMaxSuppressionV3,Qa as NonMaxSuppressionV4,Zn as NonMaxSuppressionV5,Yn as NotEqual,Nw as OP_SCOPE_SUFFIX,Jn as OneHot,ca as OnesLike,kr as Optimizer,Fl as OptimizerConstructors,la as Pack,es as PadV2,Qce as Pool,ts as Pow,rs as Prelu,os as Prod,np as RMSPropOptimizer,Hp as RaggedGather,Kp as RaggedRange,qp as RaggedTensorToTensor,ma as Range,gw as Rank,Hi as Real,fn as RealDiv,ns as Reciprocal,$t as Reduction,ss as Relu,us as Relu6,da as Reshape,is as ResizeBilinear,Ja as ResizeBilinearGrad,as as ResizeNearestNeighbor,Za as ResizeNearestNeighborGrad,ps as Reverse,Ds as RotateWithOffset,cs as Round,ls as Rsqrt,mi as SGDOptimizer,ms as ScatterNd,fs as SearchSorted,fa as Select,hs as Selu,bs as Sigmoid,ys as Sign,gs as Sin,xs as Sinh,ha as Slice,Is as Softmax,Cs as Softplus,ga as SpaceToBatchND,Ki as SparseFillEmptyRows,ei as SparseReshape,ya as SparseSegmentMean,ba as SparseSegmentSum,vs as SparseToDense,xa as SplitV,ws as Sqrt,qi as Square,ks as SquaredDifference,Ru as StaticRegexReplace,wo as Step,Ns as StridedSlice,Ca as StringNGrams,ji as StringSplit,Xi as StringToHashBucketFast,Ts as Sub,Ss as Sum,_s as Tan,Es as Tanh,mt as Tensor,tt as TensorBuffer,ds as TensorScatterUpdate,po as Tile,$s as TopK,Rs as Transform,co as Transpose,Yi as Unique,wa as Unpack,Qi as UnsortedSegmentSum,Zce as UpperBound,ri as Variable,jc as WebGPUBackend,Sa as ZerosLike,So as _FusedMatMul,Qt as abs,Rk as acos,Dk as acosh,Ce as add,Ak as addN,Fk as all,Pk as any,Ok as argMax,Mk as argMin,Lk as asin,Bk as asinh,zk as atan,Vk as atan2,Wk as atanh,dd as avgPool,Hk as avgPool3d,ak as backend,w as backend_util,Kk as basicLSTMCell,nu as batchNorm,jk as batchNorm2d,Xk as batchNorm3d,Yk as batchNorm4d,fd as batchToSpaceND,hd as bincount,Qk as bitwiseAnd,L6 as booleanMaskAsync,Zk as broadcastArgs,su as broadcastTo,Sr as broadcast_util,cT as browser,me as buffer,Ue as cast,Jk as ceil,e2 as clipByValue,Ur as clone,Er as complex,yt as concat,t2 as concat1d,r2 as concat2d,o2 as concat3d,n2 as concat4d,s2 as conv1d,au as conv2d,a2 as conv2dTranspose,i2 as conv3d,p2 as conv3dTranspose,ale as copyRegisteredKernels,c2 as cos,l2 as cosh,$l as cosineWindow,m2 as cumprod,d2 as cumsum,Ir as customGrad,f2 as denseBincount,Tw as deprecationWarn,h2 as depthToSpace,sc as depthwiseConv2d,V5 as deregisterOp,eu as device_util,g2 as diag,x2 as dilation2d,xme as disableDeprecationWarnings,Ot as dispose,yme as disposeVariables,je as div,b2 as divNoNan,C2 as dot,Y6 as dropout,iu as einsum,bd as elu,gme as enableDebugMode,hme as enableProdMode,Zw as enclosingPowerOfTwo,ur as engine,w2 as ensureShape,A as env,yd as equal,S2 as erf,k2 as euclideanNorm,_o as exp,Ms as expandDims,N2 as expm1,Cd as eye,uc as fft,$a as fill,kme as findBackend,Nme as findBackendFactory,wd as floor,md as floorDiv,GD as forceHalfFloat,Jw as fused,Sd as gather,j6 as gatherND,af as gather_util,sk as getBackend,iw as getGradient,Xp as getKernel,Ym as getKernelsForBackend,aae as getThreadsCount,mv as gpgpu_util,VK as grad,WK as grads,Wu as greater,Id as greaterEqual,ju as ifft,pu as imag,eX as image,Z6 as inTopKAsync,di as io,Hd as irfft,T2 as isFinite,_2 as isInf,E2 as isNaN,$r as keep,Vt as kernel_impls,vd as leakyRelu,Tl as less,ac as lessEqual,tX as linalg,$2 as linspace,M8 as loadGraphModel,L8 as loadGraphModelSync,R2 as localResponseNormalization,pi as log,kd as log1p,D2 as logSigmoid,A2 as logSoftmax,_d as logSumExp,Uu as logicalAnd,Ed as logicalNot,$d as logicalOr,F2 as logicalXor,rX as losses,P2 as lowerBound,Ze as matMul,aT as math,Ra as max,Dd as maxPool,O2 as maxPool3d,M2 as maxPoolWithArgmax,Ad as maximum,Gu as mean,bme as memory,L2 as meshgrid,Nl as min,Hu as minimum,B2 as mirrorPad,z2 as mod,V2 as moments,V6 as movingAverage,se as mul,W2 as multiRNNCell,U2 as multinomial,pr as neg,cS as nextFrame,EQt as node,Vu as norm,Fd as notEqual,El as oneHot,Da as ones,G2 as onesLike,N as op,H2 as outerProduct,Aa as pad,K2 as pad1d,q2 as pad2d,j2 as pad3d,X2 as pad4d,Y2 as pool,ui as pow,Od as prelu,ld as print,Q2 as prod,Cme as profile,Z2 as raggedGather,J2 as raggedRange,e1 as raggedTensorToTensor,t1 as rand,S1 as randomGamma,Wd as randomNormal,I1 as randomStandardNormal,ic as randomUniform,v1 as randomUniformInt,cu as range,Ime as ready,ci as real,k1 as reciprocal,tu as registerBackend,ole as registerGradient,ti as registerKernel,z5 as registerOp,lu as relu,Ud as relu6,vme as removeBackend,W as reshape,mo as reverse,N1 as reverse1d,T1 as reverse2d,_1 as reverse3d,E1 as reverse4d,pc as rfft,Gd as round,$1 as rsqrt,ke as scalar,U6 as scatterND,du as scatter_util,_l as searchSorted,R1 as selu,D1 as separableConv2d,jN as serialization,Sme as setBackend,Tme as setPlatform,sae as setThreadsCount,oae as setWasmPath,nae as setWasmPaths,NI as setWebGLContext,A1 as setdiff1dAsync,Ic as shared,Ea as sigmoid,F1 as sign,Jj as signal,P1 as sin,O1 as sinh,Xe as slice,M1 as slice1d,L1 as slice2d,B1 as slice3d,z1 as slice4d,pt as slice_util,V1 as softmax,Td as softplus,Pd as spaceToBatchND,oX as sparse,K6 as sparseToDense,Zj as spectral,li as split,Rr as sqrt,Zt as square,Kd as squaredDifference,cc as squeeze,vr as stack,qd as step,W1 as stridedSlice,nX as string,Te as sub,ot as sum,oi as sumOutType,U1 as tan,kl as tanh,ar as tensor,Jt as tensor1d,mu as tensor2d,jd as tensor3d,G1 as tensor4d,H1 as tensor5d,K1 as tensor6d,j1 as tensorScatterUpdate,rk as tensor_util,w1 as test_util,De as tidy,uu as tile,wme as time,X1 as topk,OGe as train,mc as transpose,Y1 as truncatedNormal,Q1 as unique,sle as unregisterGradient,nle as unregisterKernel,Z1 as unsortedSegmentSum,fo as unstack,dt as upcastType,J1 as upperBound,y as util,UK as valueAndGrad,GK as valueAndGrads,eN as variable,Vw as variableGrads,Vce as version,z8 as version_converter,OX as version_core,yY as version_cpu,iae as version_wasm,d9 as version_webgl,$at as webgl,Ec as webgl_util,Zv as webgpu_util,lo as where,Yd as whereAsync,Gr 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' | 'none';\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 size in pixels of a detected face box before resutls are discared */\n minSize: number,\n /** minimum overlap between two detected faces before one is discarded */\n iouThreshold: number,\n /** how much should face box be enlarged over the min/max facial coordinates */\n scale: 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 /** how much should iris box be enlarged over the min/max iris coordinates */\n scale: number,\n}\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: false,\n maxDetected: 1,\n skipFrames: 99,\n skipTime: 2500,\n minConfidence: 0.2,\n minSize: 0,\n iouThreshold: 0.1,\n scale: 1.4,\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 scale: 2.3,\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-lite.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 '../tfjs/types';\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, stack]);\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; // eslint-disable-line @typescript-eslint/no-redundant-type-constituents\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') {\n c = document.createElement('canvas');\n c.width = width;\n c.height = height;\n } else if (typeof navigator !== 'undefined' && navigator.product === 'ReactNative') {\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 react-native without canvas support installed');\n } else {\n throw new Error('canvas error: attempted to run in browser but DOM is not defined');\n }\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 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 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\n /** MonkeyPatch for Canvas/Image/ImageData */\n #canvas: undefined;\n #image: undefined;\n #imageData: undefined;\n\n get Canvas() { return this.#canvas; }\n set Canvas(val) { this.#canvas = val; globalThis.Canvas = val; }\n get Image() { return this.#image; }\n // @ts-ignore monkey-patch;\n set Image(val) { this.#image = val; globalThis.Image = val; }\n get ImageData() { return this.#imageData; }\n // @ts-ignore monkey-patch;\n set ImageData(val) { this.#imageData = val; globalThis.ImageData = val; }\n\n constructor() {\n this.browser = (typeof navigator !== 'undefined') && (typeof navigator.appVersion !== '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') && (typeof navigator.userAgent !== 'undefined')) { // TBD replace with navigator.userAgentData once in mainline\n const agent = navigator.userAgent || '';\n const raw = agent.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 = agent.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 !== 'undefined' && 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 `webcam error: cannot get dom element: ${webcamConfig.element}`;\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 `webcam error: unknown dom element: ${webcamConfig.element}`;\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 },\n };\n if (this.config?.width > 0) (requestedConstraints.video as MediaTrackConstraints).width = { ideal: this.config.width };\n if (this.config?.height > 0) (requestedConstraints.video as MediaTrackConstraints).height = { ideal: this.config.height };\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 error', 'no devices');\n return 'webcam error: no devices';\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 `webcam error: ${err}`;\n }\n if (!this.stream) {\n if (this.config.debug) log('webcam error', 'no stream');\n return 'webcam error no stream';\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 return `webcam: ${this.label}`;\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", "{\n \"antispoof\": 853098,\n \"blazeface\": 538928,\n \"centernet\": 4030290,\n \"emotion\": 820516,\n \"facemesh\": 1477958,\n \"faceres\": 6978814,\n \"handlandmark-lite\": 2023432,\n \"handtrack\": 2964837,\n \"iris\": 2599092,\n \"liveness\": 592976,\n \"models\": 0,\n \"movenet-lightning\": 4650216,\n \"affectnet-mobilenet\": 6920630,\n \"age\": 161240,\n \"blazeface-back\": 538928,\n \"blazeface-front\": 402048,\n \"blazepose-detector\": 5928856,\n \"blazepose-full\": 6339202,\n \"blazepose-heavy\": 27502466,\n \"blazepose-lite\": 2726402,\n \"efficientpose\": 5651240,\n \"faceboxes\": 2013002,\n \"facemesh-attention-pinto\": 2387598,\n \"facemesh-attention\": 2382414,\n \"facemesh-detection-full\": 1026192,\n \"facemesh-detection-short\": 201268,\n \"faceres-deep\": 13957620,\n \"gear-e1\": 112438,\n \"gear-e2\": 112438,\n \"gear\": 1498916,\n \"gender-ssrnet-imdb\": 161236,\n \"gender\": 201808,\n \"handdetect\": 3515612,\n \"handlandmark-full\": 5431368,\n \"handlandmark-sparse\": 5286322,\n \"handskeleton\": 5502280,\n \"meet\": 372228,\n \"mobileface\": 2183192,\n \"mobilefacenet\": 5171976,\n \"movenet-multipose\": 9448838,\n \"movenet-thunder\": 12477112,\n \"nanodet\": 7574558,\n \"posenet\": 5032780,\n \"rvm\": 3739355,\n \"selfie\": 212886,\n \"anti-spoofing\": 853098,\n \"efficientpose-i-lite\": 2269064,\n \"efficientpose-ii-lite\": 5651240,\n \"efficientpose-iv\": 25643252,\n \"insightface-efficientnet-b0\": 13013224,\n \"insightface-ghostnet-strides1\": 8093408,\n \"insightface-ghostnet-strides2\": 8049584,\n \"insightface-mobilenet-emore\": 6938536,\n \"insightface-mobilenet-swish\": 12168584,\n \"nanodet-e\": 12319156,\n \"nanodet-g\": 7574558,\n \"nanodet-m\": 1887474,\n \"nanodet-t\": 5294216\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", "{\n \"name\": \"@vladmandic/human\",\n \"version\": \"3.3.0\",\n \"description\": \"Human: AI-powered 3D Face Detection & Rotation Tracking, Face Description & Recognition, Body Pose Tracking, 3D Hand & Finger Tracking, Iris Analysis, Age & Gender & Emotion Prediction, Gesture Recognition\",\n \"sideEffects\": false,\n \"main\": \"dist/human.node.js\",\n \"module\": \"dist/human.esm.js\",\n \"browser\": \"dist/human.esm.js\",\n \"types\": \"types/human.d.ts\",\n \"exports\": {\n \"node\": \"./dist/human.node.js\",\n \"script\": \"./dist/human.js\",\n \"module\": \"./dist/human.esm.js\",\n \"types\": \"./types/human.d.ts\",\n \"dist/human\": \"./dist/human.js\",\n \"dist/human.js\": \"./dist/human.js\",\n \"dist/human.esm\": \"./dist/human.esm.js\",\n \"dist/human.esm.js\": \"./dist/human.esm.js\",\n \"dist/human.esm-nobundle\": \"./dist/human.esm-nobundle.js\",\n \"dist/human.esm-nobundle.js\": \"./dist/human.esm-nobundle.js\",\n \"dist/human.node\": \"./dist/human.node.js\",\n \"dist/human.node.js\": \"./dist/human.node.js\",\n \"dist/human.node-wasm\": \"./dist/human.node-wasm.js\",\n \"dist/human.node-wasm.js\": \"./dist/human.node-wasm.js\",\n \"dist/human.node-gpu\": \"./dist/human.node-gpu.js\",\n \"dist/human.node-gpu.js\": \"./dist/human.node-gpu.js\",\n \"require\": \"./dist/human.node.js\",\n \"import\": \"./dist/human.esm.js\"\n },\n \"author\": \"Vladimir Mandic \",\n \"bugs\": {\n \"url\": \"https://github.com/vladmandic/human/issues\"\n },\n \"homepage\": \"https://vladmandic.github.io/human/demo/index.html\",\n \"license\": \"MIT\",\n \"engines\": {\n \"node\": \">=14.0.0\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/vladmandic/human.git\"\n },\n \"scripts\": {\n \"start\": \"node --no-warnings demo/nodejs/node.js\",\n \"dev\": \"build --profile development\",\n \"clean\": \"build --profile clean\",\n \"build\": \"rimraf test/build.log && node build.js\",\n \"test\": \"node --no-warnings --unhandled-rejections=strict --trace-uncaught test/node.js\",\n \"lint\": \"eslint *.json *.js src demo test models wiki\",\n \"scan\": \"npx auditjs@latest ossi --dev --quiet\"\n },\n \"keywords\": [\n \"human\",\n \"human-library\",\n \"face-detection\",\n \"faceid\",\n \"face-geometry\",\n \"face-embedding\",\n \"face-recognition\",\n \"face-description\",\n \"face-matching\",\n \"body-tracking\",\n \"body-segmentation\",\n \"hand-tracking\",\n \"iris-tracking\",\n \"age-estimation\",\n \"emotion-detection\",\n \"gender-prediction\",\n \"gesture-recognition\",\n \"gaze-tracking\",\n \"age-gender\",\n \"tensorflowjs\",\n \"tfjs\",\n \"tensorflow\"\n ],\n \"devDependencies\": {\n \"@html-eslint/eslint-plugin\": \"^0.26.0\",\n \"@html-eslint/parser\": \"^0.26.0\",\n \"@microsoft/api-extractor\": \"^7.47.7\",\n \"@tensorflow/tfjs-backend-cpu\": \"^4.21.0\",\n \"@tensorflow/tfjs-backend-wasm\": \"^4.21.0\",\n \"@tensorflow/tfjs-backend-webgl\": \"^4.21.0\",\n \"@tensorflow/tfjs-backend-webgpu\": \"4.21.0\",\n \"@tensorflow/tfjs-converter\": \"^4.21.0\",\n \"@tensorflow/tfjs-core\": \"^4.21.0\",\n \"@tensorflow/tfjs-data\": \"^4.21.0\",\n \"@tensorflow/tfjs-layers\": \"^4.21.0\",\n \"@tensorflow/tfjs-node\": \"^4.21.0\",\n \"@tensorflow/tfjs-node-gpu\": \"^4.21.0\",\n \"@types/emscripten\": \"^1.39.13\",\n \"@types/node\": \"^22.5.4\",\n \"@types/offscreencanvas\": \"^2019.7.3\",\n \"@typescript-eslint/eslint-plugin\": \"^8.5.0\",\n \"@typescript-eslint/parser\": \"^8.5.0\",\n \"@vladmandic/build\": \"^0.10.1\",\n \"@vladmandic/pilogger\": \"^0.5.1\",\n \"@vladmandic/tfjs\": \"github:vladmandic/tfjs\",\n \"canvas\": \"^2.11.2\",\n \"esbuild\": \"^0.23.1\",\n \"eslint\": \"8.57.0\",\n \"eslint-config-airbnb-base\": \"^15.0.0\",\n \"eslint-plugin-html\": \"^8.1.1\",\n \"eslint-plugin-import\": \"^2.30.0\",\n \"eslint-plugin-json\": \"^4.0.1\",\n \"eslint-plugin-markdown\": \"^5.1.0\",\n \"eslint-plugin-node\": \"^11.1.0\",\n \"eslint-plugin-promise\": \"^7.1.0\",\n \"rimraf\": \"^6.0.1\",\n \"tslib\": \"^2.7.0\",\n \"typedoc\": \"0.26.7\",\n \"typescript\": \"5.5.4\"\n }\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.tensorflow?.version) 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 if (typeof navigator !== 'undefined' && navigator?.userAgent?.toLowerCase().includes('electron')) {\n if (instance.config.debug) log('running inside electron');\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 // force browser vs node backend\n if (env.browser && !env.node && (instance.config.backend === 'tensorflow') && available.includes('webgl')) {\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 && !env.browser && (instance.config.backend === 'webgl' || instance.config.backend === 'humangl') && available.includes('tensorflow')) {\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 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', { willReadFrequently: true });\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 l = replace(l, '[id]', f.id.toFixed(0));\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) {\n if (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 } else {\n for (const [k, v] of Object.entries(f?.annotations || {})) {\n if (!v?.[0]) continue;\n const pt = v[0];\n point(ctx, pt[0], pt[1], 0, localOptions);\n if (localOptions.drawLabels) labels(ctx, k, pt[0], pt[1], 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, '[id]', result[i].id.toFixed(0));\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, '[id]', h.id.toFixed(0));\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, '[id]', h.id.toFixed(0));\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 // @ts-ignore model signature properties are not typed and inputs are unreliable for this model\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 // @ts-ignore model signature properties are not typed and inputs are unreliable for this model\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 // @ts-ignore model signature properties are not typed and inputs are unreliable for this model\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, anchor) => {\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 // const centerPoint = [(startPoint[0] + endPoint[0]) / 2, (startPoint[1] + endPoint[1]) / 2];\n const landmarks = box.landmarks.map((pt) => [(pt[0] + anchor[0]) * factor[0], (pt[1] + anchor[1]) * factor[1]]);\n /**\n face.mesh = box.landmarks.map((pt) => [\n ((box.startPoint[0] + box.endPoint[0]) / 2) + (pt[0] * input.shape[2] / blazeface.size()),\n ((box.startPoint[1] + box.endPoint[1]) / 2) + (pt[1] * input.shape[1] / blazeface.size()),\n ]);\n */\n\n return { startPoint, endPoint, 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 {\n startPoint: [center[0] - halfSize[0], center[1] - halfSize[1]] as Point,\n endPoint: [center[0] + halfSize[0], center[1] + halfSize[1]] as Point,\n landmarks: box.landmarks,\n confidence: box.confidence,\n size,\n };\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 {\n startPoint: [Math.round(centers[0] - halfSize), Math.round(centers[1] - halfSize)] as Point,\n endPoint: [Math.round(centers[0] + halfSize), Math.round(centers[1] + halfSize)] as Point,\n landmarks: box.landmarks,\n confidence: box.confidence,\n size: [Math.round(size[0]), Math.round(size[1])] as [number, number],\n };\n};\n\nexport const calculateLandmarksBoundingBox = (landmarks) => {\n const x = landmarks.map((d) => d[0]);\n const y = landmarks.map((d) => d[1]);\n return {\n startPoint: [Math.min(...x), Math.min(...y)] as Point,\n endPoint: [Math.max(...x), Math.max(...y)] as Point,\n landmarks,\n };\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;\nlet model: GraphModel | null;\nlet anchors: Tensor | null = null;\nlet inputSize = 0;\nlet inputSizeT: Tensor | null = null;\n\nexport interface DetectBox { startPoint: Point, endPoint: Point, landmarks: Point[], confidence: number, size: [number, 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): Promise {\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.tf1);\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\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 b.anchor = tf.slice(anchors as Tensor, [nms[i], 0], [1, 2]);\n const anchor = await b.anchor.data();\n const scaledBox = util.scaleBoxCoordinates(rawBox, [(inputImage.shape[2] || 0) / inputSize, (inputImage.shape[1] || 0) / inputSize], anchor);\n const enlargedBox = util.enlargeBox(scaledBox, config.face.detector?.scale || 1.4);\n const squaredBox = util.squarifyBox(enlargedBox);\n if (squaredBox.size[0] > (config.face.detector?.['minSize'] || 0) && squaredBox.size[1] > (config.face.detector?.['minSize'] || 0)) 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 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, scale = 2.3) => {\n const box = util.squarifyBox(util.enlargeBox(util.calculateLandmarksBoundingBox([rawCoords[eyeInnerCornerIndex], rawCoords[eyeOuterCornerIndex]]), scale));\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, config: Config) {\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, config.face.iris?.scale || 2.3);\n const { box: rightEyeBox, boxSize: rightEyeBoxSize, crop: rightEyeCrop } = getEyeBox(rawCoords, face, eyeLandmarks.rightBounds[0], eyeLandmarks.rightBounds[1], meshSize, true, config.face.iris?.scale || 2.3);\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';\nimport type { DetectBox } from './blazeface';\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 // 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 size: [0, 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 || !model?.['executor']) { // mesh not enabled or not loaded, 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.size = box.size;\n face.mesh = box.landmarks;\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)) face.annotations[key] = [face.mesh[coords.blazeFaceLandmarks[key] as number]]; // add annotations\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.size = box.size;\n face.score = face.boxScore;\n face.mesh = box.landmarks;\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, config); // 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 = {\n ...util.calculateFaceBox(face.mesh, box),\n confidence: box.confidence,\n landmarks: box.landmarks,\n size: box.size,\n };\n face.box = util.clampBox(calculatedBox, input);\n face.boxRaw = util.getRawBox(calculatedBox, input);\n face.size = calculatedBox.size;\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\nlet annotations: string[] = [];\nlet model: GraphModel | null;\nconst last: { score: number, emotion: Emotion }[][] = [];\nlet lastCount = 0;\nlet lastTime = 0;\nlet skipped = Number.MAX_SAFE_INTEGER;\nlet rgb = false;\n\nexport async function load(config: Config): Promise {\n if (env.initial) model = null;\n if (!model) {\n model = await loadModel(config.face.emotion?.modelPath);\n rgb = model?.inputs?.[0].shape?.[3] === 3;\n if (!rgb) annotations = ['angry', 'disgust', 'fear', 'happy', 'sad', 'surprise', 'neutral']; // oarriaga and gear\n else annotations = ['angry', 'disgust', 'fear', 'happy', 'neutral', 'sad', 'surprise']; // affectnet\n } else if (config.debug) {\n log('cached model:', model['modelUrl']);\n }\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 if (config.face.emotion?.['crop'] > 0) { // optional crop\n const crop = config.face.emotion?.['crop'];\n const box = [[crop, crop, 1 - crop, 1 - crop]];\n t.resize = tf.image.cropAndResize(image, box, [0], [inputSize, inputSize]);\n } else {\n t.resize = tf.image.resizeBilinear(image, [inputSize, inputSize], false);\n }\n if (rgb) {\n t.mul = tf.mul(t.resize, 255);\n t.normalize = tf.sub(t.mul, [103.939, 116.779, 123.68]); // affectnet uses specific norm values\n t.emotion = model?.execute(t.normalize) as Tensor; // result is already in range 0..1, no need for additional activation\n } else {\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 }\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, config: Config): 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 let crop: Tensor;\n if (config.face.description?.['crop'] > 0) { // optional crop\n const cropval = config.face.description?.['crop'];\n const box = [[cropval, cropval, 1 - cropval, 1 - cropval]];\n crop = tf.image.cropAndResize(tensor, box, [0], [model.inputs[0].shape[2], model.inputs[0].shape[1]]);\n } else {\n crop = tf.image.resizeBilinear(tensor, [model.inputs[0].shape[2], model.inputs[0].shape[1]], false);\n }\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, config);\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 let box = [[0.0, 0.10, 0.90, 0.90]]; // empyrical values for top, left, bottom, right\n if (config.face.gear?.['crop'] > 0) { // optional crop config value\n const crop = config.face.gear?.['crop'];\n box = [[crop, crop, 1 - crop, 1 - crop]];\n }\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 if (config.face['ssrnet']?.['crop'] > 0) { // optional crop\n const crop = config.face['ssrnet']?.['crop'];\n const box = [[crop, crop, 1 - crop, 1 - crop]];\n t.resize = tf.image.cropAndResize(image, box, [0], [model.inputs[0].shape[2], model.inputs[0].shape[1]]);\n } else {\n t.resize = tf.image.resizeBilinear(image, [model.inputs[0].shape[2], model.inputs[0].shape[1]], false);\n }\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 if (config.face['ssrnet']?.['crop'] > 0) { // optional crop\n const crop = config.face['ssrnet']?.['crop'];\n const box = [[crop, crop, 1 - crop, 1 - crop]];\n t.resize = tf.image.cropAndResize(image, box, [0], [model.inputs[0].shape[2], model.inputs[0].shape[1]]);\n } else {\n t.resize = tf.image.resizeBilinear(image, [model.inputs[0].shape[2], model.inputs[0].shape[1]], false);\n }\n t.enhance = tf.tidy(() => {\n let normalize: Tensor;\n if (model?.inputs?.[0].shape?.[3] === 1) {\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 normalize = tf.mul(tf.sub(grayscale, constants.tf05), 2); // range grayscale:-1..1\n } else {\n normalize = tf.mul(tf.sub(t.resize, constants.tf05), 2); // range rgb:-1..1\n }\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?.leftEyeIris || !f?.rightEyeIris) 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?.leftEyeIris || !f?.rightEyeIris) 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 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 (rightIrisCenterX > 0.04) gestures.push({ iris: i, gesture: 'looking right' });\n } else {\n if (leftIrisCenterX > 0.04) 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 this.skipped++;\n } else {\n boxes = await this.handDetector.predict(image, config);\n this.skipped = 0;\n }\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 function initPipeline() {\n const handDetector = handDetectorModel ? new handdetector.HandDetector(handDetectorModel) : undefined;\n if (handDetector && handPoseModel) handPipeline = new handpipeline.HandPipeline(handDetector, handPoseModel);\n}\n\nexport async function predict(input: Tensor, config: Config): Promise {\n if (!handPipeline) initPipeline();\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 loadDetect(config: Config): Promise {\n if (env.initial) handDetectorModel = null;\n if (!handDetectorModel) handDetectorModel = await loadModel(config.hand.detector?.modelPath);\n else if (config.debug) log('cached model:', handDetectorModel['modelUrl']);\n return handDetectorModel;\n}\n\nexport async function loadSkeleton(config: Config): Promise {\n if (env.initial) handPoseModel = null;\n if (!handPoseModel) handPoseModel = await loadModel(config.hand.skeleton?.modelPath);\n else if (config.debug) log('cached model:', handPoseModel['modelUrl']);\n return 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 // @ts-ignore model signature properties are not typed and inputs are unreliable for this model\n inputSize[0][0] = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[1].size) : 0;\n // @ts-ignore model signature properties are not typed and inputs are unreliable for this model\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 // @ts-ignore model signature properties are not typed and inputs are unreliable for this model\n inputSize[1][0] = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[1].size) : 0;\n // @ts-ignore model signature properties are not typed and inputs are unreliable for this model\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 box size */\n size: [number, number],\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, FaceLandmark } 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 let annotations: Record = newResult.face[i].annotations;\n if (Object.keys(bufferedResult.face[i].annotations).length !== Object.keys(newResult.face[i].annotations).length) {\n bufferedResult.face[i].annotations = newResult.face[i].annotations; // reset annotations as previous frame did not have them\n annotations = bufferedResult.face[i].annotations;\n } else if (newResult.face[i].annotations) {\n for (const key of Object.keys(newResult.face[i].annotations)) { // update annotations\n annotations[key] = newResult.face[i]?.annotations?.[key]?.[0]\n ? newResult.face[i].annotations[key]\n .map((val, j: number) => val\n .map((coord: number, k: number) => ((bufferedFactor - 1) * bufferedResult.face[i].annotations[key][j][k] + coord) / bufferedFactor))\n : null;\n }\n }\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, annotations }; // shallow clone plus updated values\n } else {\n bufferedResult.face[i] = { ...newResult.face[i], box, boxRaw, annotations }; // 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 if (this.instance.config.hand.enabled && !this.models.handdetect && this.instance.config.hand.detector?.modelPath?.includes('handdetect')) {\n m.handdetect = handpose.loadDetect(this.instance.config);\n m.handskeleton = handpose.loadSkeleton(this.instance.config);\n }\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 for (const [model, promise] of Object.entries(m)) {\n if (promise?.['then']) promise['then']((val) => this.models[model] = val);\n }\n await Promise.all(Object.values(m)); // wait so this function does not resolve prematurely\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(): string[] {\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 // @ts-ignore private property\n if (tf.env().flagRegistry.WEBGL_USE_SHAPES_UNIFORMS) tf.env().set('WEBGL_USE_SHAPES_UNIFORMS', false); // default=false \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 boxScore = Math.round(100 * kpt[51 + 4]) / 100;\n if (boxScore > 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 boxNorm: 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 const body: BodyResult = { id, score: boxScore, box: boxNorm, 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 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 // @ts-ignore model signature properties are not typed and inputs are unreliable for this model\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: string = `\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 {\n resolve(undefined);\n return;\n }\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.models)) {\n if (!model) continue;\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 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,kBAAAA;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,IAAI,KAAG,OAAO;AAAO,IAAI,KAAG,OAAO;AAAe,IAAI,KAAG,OAAO;AAAyB,IAAI,KAAG,OAAO;AAAoB,IAAI,KAAG,OAAO;AAAd,IAA6B,KAAG,OAAO,UAAU;AAAe,IAAI,KAAG,CAACC,KAAE,MAAI,OAAK,KAAGA,KAAG,IAAE,EAAC,SAAQ,CAAC,EAAC,GAAG,SAAQ,CAAC,GAAE,EAAE;AAAtD,IAA+D,KAAG,CAACA,KAAE,MAAI;AAAC,WAAQC,OAAK,EAAE,IAAGD,KAAEC,KAAE,EAAC,KAAI,EAAEA,GAAC,GAAE,YAAW,KAAE,CAAC;AAAC;AAAzH,IAA2H,KAAG,CAACD,KAAE,GAAEC,KAAE,MAAI;AAAC,MAAG,KAAG,OAAO,KAAG,YAAU,OAAO,KAAG,WAAW,UAAQ,KAAK,GAAG,CAAC,EAAE,EAAC,GAAG,KAAKD,KAAE,CAAC,KAAG,MAAIC,OAAG,GAAGD,KAAE,GAAE,EAAC,KAAI,MAAI,EAAE,CAAC,GAAE,YAAW,EAAE,IAAE,GAAG,GAAE,CAAC,MAAI,EAAE,WAAU,CAAC;AAAE,SAAOA;AAAC;AAAE,IAAI,KAAG,CAACA,KAAE,GAAEC,SAAKA,MAAED,OAAG,OAAK,GAAG,GAAGA,GAAC,CAAC,IAAE,CAAC,GAAE,GAAG,KAAG,CAACA,OAAG,CAACA,IAAE,aAAW,GAAGC,KAAE,WAAU,EAAC,OAAMD,KAAE,YAAW,KAAE,CAAC,IAAEC,KAAED,GAAC;AAAG,IAAI,KAAG,GAAG,CAAC,KAAI,OAAK;AAAC;AAAa,KAAG,UAAQ;AAAG,MAAI,KAAG;AAAK,MAAG;AAAC,SAAG,IAAI,YAAY,SAAS,IAAI,YAAY,OAAO,IAAI,WAAW,CAAC,GAAE,IAAG,KAAI,KAAI,GAAE,GAAE,GAAE,GAAE,GAAE,IAAG,GAAE,IAAG,GAAE,GAAE,KAAI,IAAG,GAAE,KAAI,KAAI,KAAI,KAAI,GAAE,KAAI,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,KAAI,GAAE,IAAG,GAAE,IAAG,GAAE,IAAG,GAAE,GAAE,KAAI,KAAI,KAAI,GAAE,GAAE,GAAE,KAAI,KAAI,KAAI,IAAG,KAAI,GAAE,GAAE,GAAE,KAAI,KAAI,KAAI,IAAG,KAAI,GAAE,GAAE,GAAE,KAAI,KAAI,KAAI,IAAG,KAAI,GAAE,GAAE,GAAE,KAAI,KAAI,KAAI,IAAG,KAAI,GAAE,GAAE,GAAE,KAAI,KAAI,KAAI,IAAG,KAAI,KAAI,KAAI,KAAI,GAAE,GAAE,IAAG,KAAI,GAAE,GAAE,GAAE,GAAE,IAAG,GAAE,IAAG,IAAG,GAAE,GAAE,KAAI,IAAG,GAAE,KAAI,IAAG,GAAE,KAAI,IAAG,IAAG,KAAI,KAAI,IAAG,GAAE,KAAI,IAAG,GAAE,KAAI,IAAG,IAAG,KAAI,KAAI,KAAI,IAAG,GAAE,IAAG,IAAG,KAAI,KAAI,IAAG,GAAE,IAAG,GAAE,KAAI,IAAG,IAAG,GAAE,GAAE,KAAI,IAAG,GAAE,KAAI,IAAG,GAAE,KAAI,IAAG,IAAG,KAAI,KAAI,IAAG,GAAE,KAAI,IAAG,GAAE,KAAI,IAAG,IAAG,KAAI,KAAI,KAAI,IAAG,GAAE,IAAG,IAAG,KAAI,KAAI,IAAG,GAAE,IAAG,GAAE,KAAI,IAAG,IAAG,GAAE,GAAE,KAAI,IAAG,GAAE,KAAI,IAAG,GAAE,KAAI,IAAG,IAAG,KAAI,KAAI,IAAG,GAAE,KAAI,IAAG,GAAE,KAAI,IAAG,IAAG,KAAI,KAAI,KAAI,IAAG,GAAE,IAAG,IAAG,KAAI,KAAI,IAAG,GAAE,IAAG,GAAE,KAAI,IAAG,IAAG,GAAE,GAAE,KAAI,IAAG,GAAE,KAAI,IAAG,GAAE,KAAI,IAAG,IAAG,KAAI,KAAI,IAAG,GAAE,KAAI,IAAG,GAAE,KAAI,IAAG,IAAG,KAAI,KAAI,KAAI,IAAG,GAAE,IAAG,IAAG,KAAI,KAAI,IAAG,GAAE,IAAG,GAAE,KAAI,IAAG,IAAG,GAAE,GAAE,KAAI,IAAG,GAAE,KAAI,IAAG,GAAE,KAAI,IAAG,IAAG,KAAI,KAAI,IAAG,GAAE,KAAI,IAAG,GAAE,KAAI,IAAG,IAAG,KAAI,KAAI,KAAI,IAAG,GAAE,IAAG,IAAG,KAAI,KAAI,IAAG,GAAE,IAAG,GAAE,KAAI,EAAE,CAAC,CAAC,GAAE,CAAC,CAAC,EAAE;AAAA,EAAO,SAAOA,KAAE;AAAA,EAAC;AAAC,WAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,SAAK,MAAID,MAAE,GAAE,KAAK,OAAK,IAAE,GAAE,KAAK,WAAS,CAAC,CAACC;AAAA,EAAC;AAAC,KAAG,UAAU;AAAW,SAAO,eAAe,GAAG,WAAU,cAAa,EAAC,OAAM,KAAE,CAAC;AAAE,WAAS,GAAGD,KAAE;AAAC,YAAOA,OAAGA,IAAE,gBAAc;AAAA,EAAE;AAAC,KAAG,SAAO;AAAG,MAAI,KAAG,CAAC,GAAE,KAAG,CAAC;AAAE,WAAS,GAAGA,KAAE,GAAE;AAAC,QAAIC,KAAE,GAAE;AAAE,WAAO,KAAGD,SAAK,IAAG,IAAE,KAAGA,OAAGA,MAAE,SAAO,IAAE,GAAGA,GAAC,GAAE,KAAG,KAAGC,MAAE,GAAGD,MAAGA,MAAE,KAAG,IAAE,KAAG,GAAE,IAAE,GAAE,MAAI,GAAGA,GAAC,IAAEC,MAAGA,SAAKD,OAAG,IAAG,IAAE,QAAMA,OAAGA,MAAE,SAAO,IAAE,GAAGA,GAAC,GAAE,KAAG,KAAGC,MAAE,GAAGD,KAAEA,MAAE,IAAE,KAAG,GAAE,KAAE,GAAE,MAAI,GAAGA,GAAC,IAAEC,MAAGA;AAAA,EAAG;AAAC,KAAG,UAAQ;AAAG,WAAS,GAAGD,KAAE,GAAE;AAAC,QAAG,MAAMA,GAAC,EAAE,QAAO,IAAE,KAAG;AAAG,QAAG,GAAE;AAAC,UAAGA,MAAE,EAAE,QAAO;AAAG,UAAGA,OAAG,GAAG,QAAO;AAAA,IAAE,OAAK;AAAC,UAAGA,OAAG,CAAC,GAAG,QAAO;AAAG,UAAGA,MAAE,KAAG,GAAG,QAAO;AAAA,IAAE;AAAC,WAAOA,MAAE,IAAE,GAAG,CAACA,KAAE,CAAC,EAAE,IAAI,IAAE,GAAGA,MAAE,KAAG,GAAEA,MAAE,KAAG,GAAE,CAAC;AAAA,EAAC;AAAC,KAAG,aAAW;AAAG,WAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,WAAO,IAAI,GAAGD,KAAE,GAAEC,GAAC;AAAA,EAAC;AAAC,KAAG,WAAS;AAAG,MAAI,KAAG,KAAK;AAAI,WAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,QAAGD,IAAE,WAAS,EAAE,OAAM,MAAM,cAAc;AAAE,QAAGA,QAAI,SAAOA,QAAI,cAAYA,QAAI,eAAaA,QAAI,YAAY,QAAO;AAAG,QAAG,OAAO,KAAG,YAAUC,MAAE,GAAE,IAAE,SAAI,IAAE,CAAC,CAAC,GAAEA,MAAEA,OAAG,IAAGA,MAAE,KAAG,KAAGA,IAAE,OAAM,WAAW,OAAO;AAAE,QAAI;AAAE,SAAI,IAAED,IAAE,QAAQ,GAAG,KAAG,EAAE,OAAM,MAAM,iBAAiB;AAAE,QAAG,MAAI,EAAE,QAAO,GAAGA,IAAE,UAAU,CAAC,GAAE,GAAEC,GAAC,EAAE,IAAI;AAAE,aAAQ,IAAE,GAAG,GAAGA,KAAE,CAAC,CAAC,GAAE,IAAE,IAAG,IAAE,GAAE,IAAED,IAAE,QAAO,KAAG,GAAE;AAAC,UAAI,IAAE,KAAK,IAAI,GAAEA,IAAE,SAAO,CAAC,GAAE,IAAE,SAASA,IAAE,UAAU,GAAE,IAAE,CAAC,GAAEC,GAAC;AAAE,UAAG,IAAE,GAAE;AAAC,YAAI,IAAE,GAAG,GAAGA,KAAE,CAAC,CAAC;AAAE,YAAE,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC;AAAA,MAAC,MAAM,KAAE,EAAE,IAAI,CAAC,GAAE,IAAE,EAAE,IAAI,GAAG,CAAC,CAAC;AAAA,IAAC;AAAC,WAAO,EAAE,WAAS,GAAE;AAAA,EAAC;AAAC,KAAG,aAAW;AAAG,WAAS,GAAGD,KAAE,GAAE;AAAC,WAAO,OAAOA,OAAG,WAAS,GAAGA,KAAE,CAAC,IAAE,OAAOA,OAAG,WAAS,GAAGA,KAAE,CAAC,IAAE,GAAGA,IAAE,KAAIA,IAAE,MAAK,OAAO,KAAG,YAAU,IAAEA,IAAE,QAAQ;AAAA,EAAC;AAAC,KAAG,YAAU;AAAG,MAAI,KAAG,OAAME,MAAG,KAAG,IAAG,KAAG,KAAG,IAAG,KAAG,KAAG,IAAG,KAAG,KAAG,GAAE,KAAG,GAAGA,GAAE,GAAE,KAAG,GAAG,CAAC;AAAE,KAAG,OAAK;AAAG,MAAI,KAAG,GAAG,GAAE,IAAE;AAAE,KAAG,QAAM;AAAG,MAAI,KAAG,GAAG,CAAC;AAAE,KAAG,MAAI;AAAG,MAAI,KAAG,GAAG,GAAE,IAAE;AAAE,KAAG,OAAK;AAAG,MAAI,KAAG,GAAG,EAAE;AAAE,KAAG,UAAQ;AAAG,MAAI,KAAG,GAAG,IAAG,YAAW,KAAE;AAAE,KAAG,YAAU;AAAG,MAAI,KAAG,GAAG,IAAG,IAAG,IAAE;AAAE,KAAG,qBAAmB;AAAG,MAAI,KAAG,GAAG,GAAE,aAAY,KAAE;AAAE,KAAG,YAAU;AAAG,MAAI,KAAG,GAAG;AAAU,KAAG,QAAM,WAAU;AAAC,WAAO,KAAK,WAAS,KAAK,QAAM,IAAE,KAAK;AAAA,EAAG;AAAE,KAAG,WAAS,WAAU;AAAC,WAAO,KAAK,YAAU,KAAK,SAAO,KAAG,MAAI,KAAK,QAAM,KAAG,KAAK,OAAK,MAAI,KAAK,QAAM;AAAA,EAAE;AAAE,KAAG,WAAS,SAAS,GAAE;AAAC,QAAG,IAAE,KAAG,IAAG,IAAE,KAAG,KAAG,EAAE,OAAM,WAAW,OAAO;AAAE,QAAG,KAAK,OAAO,EAAE,QAAM;AAAI,QAAG,KAAK,WAAW,EAAE,KAAG,KAAK,GAAG,EAAE,GAAE;AAAC,UAAID,MAAE,GAAG,CAAC,GAAE,IAAE,KAAK,IAAIA,GAAC,GAAE,IAAE,EAAE,IAAIA,GAAC,EAAE,IAAI,IAAI;AAAE,aAAO,EAAE,SAAS,CAAC,IAAE,EAAE,MAAM,EAAE,SAAS,CAAC;AAAA,IAAC,MAAM,QAAM,MAAI,KAAK,IAAI,EAAE,SAAS,CAAC;AAAE,aAAQ,IAAE,GAAG,GAAG,GAAE,CAAC,GAAE,KAAK,QAAQ,GAAE,IAAE,MAAK,IAAE,QAAK;AAAC,UAAI,IAAE,EAAE,IAAI,CAAC,GAAE,IAAE,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,EAAE,MAAM,MAAI,GAAE,IAAE,EAAE,SAAS,CAAC;AAAE,UAAG,IAAE,GAAE,EAAE,OAAO,EAAE,QAAO,IAAE;AAAE,aAAK,EAAE,SAAO,IAAG,KAAE,MAAI;AAAE,UAAE,KAAG,IAAE;AAAA,IAAC;AAAA,EAAC;AAAE,KAAG,cAAY,WAAU;AAAC,WAAO,KAAK;AAAA,EAAI;AAAE,KAAG,sBAAoB,WAAU;AAAC,WAAO,KAAK,SAAO;AAAA,EAAC;AAAE,KAAG,aAAW,WAAU;AAAC,WAAO,KAAK;AAAA,EAAG;AAAE,KAAG,qBAAmB,WAAU;AAAC,WAAO,KAAK,QAAM;AAAA,EAAC;AAAE,KAAG,gBAAc,WAAU;AAAC,QAAG,KAAK,WAAW,EAAE,QAAO,KAAK,GAAG,EAAE,IAAE,KAAG,KAAK,IAAI,EAAE,cAAc;AAAE,aAAQ,IAAE,KAAK,QAAM,IAAE,KAAK,OAAK,KAAK,KAAIA,MAAE,IAAGA,MAAE,KAAG,EAAE,IAAE,KAAGA,MAAGA,MAAI;AAAC,WAAO,KAAK,QAAM,IAAEA,MAAE,KAAGA,MAAE;AAAA,EAAC;AAAE,KAAG,SAAO,WAAU;AAAC,WAAO,KAAK,SAAO,KAAG,KAAK,QAAM;AAAA,EAAC;AAAE,KAAG,MAAI,GAAG;AAAO,KAAG,aAAW,WAAU;AAAC,WAAM,CAAC,KAAK,YAAU,KAAK,OAAK;AAAA,EAAC;AAAE,KAAG,aAAW,WAAU;AAAC,WAAO,KAAK,YAAU,KAAK,QAAM;AAAA,EAAC;AAAE,KAAG,QAAM,WAAU;AAAC,YAAO,KAAK,MAAI,OAAK;AAAA,EAAC;AAAE,KAAG,SAAO,WAAU;AAAC,YAAO,KAAK,MAAI,OAAK;AAAA,EAAC;AAAE,KAAG,SAAO,SAAS,GAAE;AAAC,WAAO,GAAG,CAAC,MAAI,IAAE,GAAG,CAAC,IAAG,KAAK,aAAW,EAAE,YAAU,KAAK,SAAO,OAAK,KAAG,EAAE,SAAO,OAAK,IAAE,QAAG,KAAK,SAAO,EAAE,QAAM,KAAK,QAAM,EAAE;AAAA,EAAG;AAAE,KAAG,KAAG,GAAG;AAAO,KAAG,YAAU,SAAS,GAAE;AAAC,WAAM,CAAC,KAAK,GAAG,CAAC;AAAA,EAAC;AAAE,KAAG,MAAI,GAAG;AAAU,KAAG,KAAG,GAAG;AAAU,KAAG,WAAS,SAAS,GAAE;AAAC,WAAO,KAAK,KAAK,CAAC,IAAE;AAAA,EAAC;AAAE,KAAG,KAAG,GAAG;AAAS,KAAG,kBAAgB,SAAS,GAAE;AAAC,WAAO,KAAK,KAAK,CAAC,KAAG;AAAA,EAAC;AAAE,KAAG,MAAI,GAAG;AAAgB,KAAG,KAAG,GAAG;AAAgB,KAAG,cAAY,SAAS,GAAE;AAAC,WAAO,KAAK,KAAK,CAAC,IAAE;AAAA,EAAC;AAAE,KAAG,KAAG,GAAG;AAAY,KAAG,qBAAmB,SAAS,GAAE;AAAC,WAAO,KAAK,KAAK,CAAC,KAAG;AAAA,EAAC;AAAE,KAAG,MAAI,GAAG;AAAmB,KAAG,KAAG,GAAG;AAAmB,KAAG,UAAQ,SAAS,GAAE;AAAC,QAAG,GAAG,CAAC,MAAI,IAAE,GAAG,CAAC,IAAG,KAAK,GAAG,CAAC,EAAE,QAAO;AAAE,QAAIA,MAAE,KAAK,WAAW,GAAE,IAAE,EAAE,WAAW;AAAE,WAAOA,OAAG,CAAC,IAAE,KAAG,CAACA,OAAG,IAAE,IAAE,KAAK,WAAS,EAAE,SAAO,IAAE,KAAK,SAAO,KAAG,EAAE,SAAO,KAAK,QAAM,EAAE,QAAM,IAAE,KAAK,QAAM,IAAE,KAAG,IAAE,KAAK,IAAI,CAAC,EAAE,WAAW,IAAE,KAAG;AAAA,EAAC;AAAE,KAAG,OAAK,GAAG;AAAQ,KAAG,SAAO,WAAU;AAAC,WAAM,CAAC,KAAK,YAAU,KAAK,GAAG,EAAE,IAAE,KAAG,KAAK,IAAI,EAAE,IAAI,EAAE;AAAA,EAAC;AAAE,KAAG,MAAI,GAAG;AAAO,KAAG,MAAI,SAAS,GAAE;AAAC,OAAG,CAAC,MAAI,IAAE,GAAG,CAAC;AAAG,QAAIA,MAAE,KAAK,SAAO,IAAG,IAAE,KAAK,OAAK,OAAM,IAAE,KAAK,QAAM,IAAG,IAAE,KAAK,MAAI,OAAM,IAAE,EAAE,SAAO,IAAG,IAAE,EAAE,OAAK,OAAM,IAAE,EAAE,QAAM,IAAG,IAAE,EAAE,MAAI,OAAM,IAAE,GAAE,IAAE,GAAE,IAAE,GAAE,IAAE;AAAE,WAAO,KAAG,IAAE,GAAE,KAAG,MAAI,IAAG,KAAG,OAAM,KAAG,IAAE,GAAE,KAAG,MAAI,IAAG,KAAG,OAAM,KAAG,IAAE,GAAE,KAAG,MAAI,IAAG,KAAG,OAAM,KAAGA,MAAE,GAAE,KAAG,OAAM,GAAG,KAAG,KAAG,GAAE,KAAG,KAAG,GAAE,KAAK,QAAQ;AAAA,EAAC;AAAE,KAAG,WAAS,SAAS,GAAE;AAAC,WAAO,GAAG,CAAC,MAAI,IAAE,GAAG,CAAC,IAAG,KAAK,IAAI,EAAE,IAAI,CAAC;AAAA,EAAC;AAAE,KAAG,MAAI,GAAG;AAAS,KAAG,WAAS,SAAS,GAAE;AAAC,QAAG,KAAK,OAAO,EAAE,QAAO;AAAG,QAAG,GAAG,CAAC,MAAI,IAAE,GAAG,CAAC,IAAG,IAAG;AAAC,UAAIA,MAAE,GAAG,IAAI,KAAK,KAAI,KAAK,MAAK,EAAE,KAAI,EAAE,IAAI;AAAE,aAAO,GAAGA,KAAE,GAAG,SAAS,GAAE,KAAK,QAAQ;AAAA,IAAC;AAAC,QAAG,EAAE,OAAO,EAAE,QAAO;AAAG,QAAG,KAAK,GAAG,EAAE,EAAE,QAAO,EAAE,MAAM,IAAE,KAAG;AAAG,QAAG,EAAE,GAAG,EAAE,EAAE,QAAO,KAAK,MAAM,IAAE,KAAG;AAAG,QAAG,KAAK,WAAW,EAAE,QAAO,EAAE,WAAW,IAAE,KAAK,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAE,KAAK,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI;AAAE,QAAG,EAAE,WAAW,EAAE,QAAO,KAAK,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI;AAAE,QAAG,KAAK,GAAG,EAAE,KAAG,EAAE,GAAG,EAAE,EAAE,QAAO,GAAG,KAAK,SAAS,IAAE,EAAE,SAAS,GAAE,KAAK,QAAQ;AAAE,QAAI,IAAE,KAAK,SAAO,IAAG,IAAE,KAAK,OAAK,OAAM,IAAE,KAAK,QAAM,IAAG,IAAE,KAAK,MAAI,OAAM,IAAE,EAAE,SAAO,IAAG,IAAE,EAAE,OAAK,OAAM,IAAE,EAAE,QAAM,IAAG,IAAE,EAAE,MAAI,OAAM,IAAE,GAAE,IAAE,GAAE,IAAE,GAAE,IAAE;AAAE,WAAO,KAAG,IAAE,GAAE,KAAG,MAAI,IAAG,KAAG,OAAM,KAAG,IAAE,GAAE,KAAG,MAAI,IAAG,KAAG,OAAM,KAAG,IAAE,GAAE,KAAG,MAAI,IAAG,KAAG,OAAM,KAAG,IAAE,GAAE,KAAG,MAAI,IAAG,KAAG,OAAM,KAAG,IAAE,GAAE,KAAG,MAAI,IAAG,KAAG,OAAM,KAAG,IAAE,GAAE,KAAG,MAAI,IAAG,KAAG,OAAM,KAAG,IAAE,IAAE,IAAE,IAAE,IAAE,IAAE,IAAE,GAAE,KAAG,OAAM,GAAG,KAAG,KAAG,GAAE,KAAG,KAAG,GAAE,KAAK,QAAQ;AAAA,EAAC;AAAE,KAAG,MAAI,GAAG;AAAS,KAAG,SAAO,SAAS,GAAE;AAAC,QAAG,GAAG,CAAC,MAAI,IAAE,GAAG,CAAC,IAAG,EAAE,OAAO,EAAE,OAAM,MAAM,kBAAkB;AAAE,QAAG,IAAG;AAAC,UAAG,CAAC,KAAK,YAAU,KAAK,SAAO,eAAa,EAAE,QAAM,MAAI,EAAE,SAAO,GAAG,QAAO;AAAK,UAAIA,OAAG,KAAK,WAAS,GAAG,QAAM,GAAG,OAAO,KAAK,KAAI,KAAK,MAAK,EAAE,KAAI,EAAE,IAAI;AAAE,aAAO,GAAGA,KAAE,GAAG,SAAS,GAAE,KAAK,QAAQ;AAAA,IAAC;AAAC,QAAG,KAAK,OAAO,EAAE,QAAO,KAAK,WAAS,KAAG;AAAG,QAAI,GAAE,GAAE;AAAE,QAAG,KAAK,UAAS;AAAC,UAAG,EAAE,aAAW,IAAE,EAAE,WAAW,IAAG,EAAE,GAAG,IAAI,EAAE,QAAO;AAAG,UAAG,EAAE,GAAG,KAAK,KAAK,CAAC,CAAC,EAAE,QAAO;AAAG,UAAE;AAAA,IAAE,OAAK;AAAC,UAAG,KAAK,GAAG,EAAE,GAAE;AAAC,YAAG,EAAE,GAAG,EAAE,KAAG,EAAE,GAAG,EAAE,EAAE,QAAO;AAAG,YAAG,EAAE,GAAG,EAAE,EAAE,QAAO;AAAG,YAAI,IAAE,KAAK,IAAI,CAAC;AAAE,eAAO,IAAE,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,GAAE,EAAE,GAAG,EAAE,IAAE,EAAE,WAAW,IAAE,KAAG,MAAI,IAAE,KAAK,IAAI,EAAE,IAAI,CAAC,CAAC,GAAE,IAAE,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,GAAE;AAAA,MAAE,WAAS,EAAE,GAAG,EAAE,EAAE,QAAO,KAAK,WAAS,KAAG;AAAG,UAAG,KAAK,WAAW,EAAE,QAAO,EAAE,WAAW,IAAE,KAAK,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAE,KAAK,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI;AAAE,UAAG,EAAE,WAAW,EAAE,QAAO,KAAK,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI;AAAE,UAAE;AAAA,IAAE;AAAC,SAAI,IAAE,MAAK,EAAE,IAAI,CAAC,KAAG;AAAC,UAAE,KAAK,IAAI,GAAE,KAAK,MAAM,EAAE,SAAS,IAAE,EAAE,SAAS,CAAC,CAAC;AAAE,eAAQ,IAAE,KAAK,KAAK,KAAK,IAAI,CAAC,IAAE,KAAK,GAAG,GAAE,IAAE,KAAG,KAAG,IAAE,GAAG,GAAE,IAAE,EAAE,GAAE,IAAE,GAAG,CAAC,GAAE,IAAE,EAAE,IAAI,CAAC,GAAE,EAAE,WAAW,KAAG,EAAE,GAAG,CAAC,IAAG,MAAG,GAAE,IAAE,GAAG,GAAE,KAAK,QAAQ,GAAE,IAAE,EAAE,IAAI,CAAC;AAAE,QAAE,OAAO,MAAI,IAAE,KAAI,IAAE,EAAE,IAAI,CAAC,GAAE,IAAE,EAAE,IAAI,CAAC;AAAA,IAAC;AAAC,WAAO;AAAA,EAAC;AAAE,KAAG,MAAI,GAAG;AAAO,KAAG,SAAO,SAAS,GAAE;AAAC,QAAG,GAAG,CAAC,MAAI,IAAE,GAAG,CAAC,IAAG,IAAG;AAAC,UAAIA,OAAG,KAAK,WAAS,GAAG,QAAM,GAAG,OAAO,KAAK,KAAI,KAAK,MAAK,EAAE,KAAI,EAAE,IAAI;AAAE,aAAO,GAAGA,KAAE,GAAG,SAAS,GAAE,KAAK,QAAQ;AAAA,IAAC;AAAC,WAAO,KAAK,IAAI,KAAK,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;AAAA,EAAC;AAAE,KAAG,MAAI,GAAG;AAAO,KAAG,MAAI,GAAG;AAAO,KAAG,MAAI,WAAU;AAAC,WAAO,GAAG,CAAC,KAAK,KAAI,CAAC,KAAK,MAAK,KAAK,QAAQ;AAAA,EAAC;AAAE,KAAG,MAAI,SAAS,GAAE;AAAC,WAAO,GAAG,CAAC,MAAI,IAAE,GAAG,CAAC,IAAG,GAAG,KAAK,MAAI,EAAE,KAAI,KAAK,OAAK,EAAE,MAAK,KAAK,QAAQ;AAAA,EAAC;AAAE,KAAG,KAAG,SAAS,GAAE;AAAC,WAAO,GAAG,CAAC,MAAI,IAAE,GAAG,CAAC,IAAG,GAAG,KAAK,MAAI,EAAE,KAAI,KAAK,OAAK,EAAE,MAAK,KAAK,QAAQ;AAAA,EAAC;AAAE,KAAG,MAAI,SAAS,GAAE;AAAC,WAAO,GAAG,CAAC,MAAI,IAAE,GAAG,CAAC,IAAG,GAAG,KAAK,MAAI,EAAE,KAAI,KAAK,OAAK,EAAE,MAAK,KAAK,QAAQ;AAAA,EAAC;AAAE,KAAG,YAAU,SAAS,GAAE;AAAC,WAAO,GAAG,CAAC,MAAI,IAAE,EAAE,MAAM,KAAI,KAAG,QAAM,IAAE,OAAK,IAAE,KAAG,GAAG,KAAK,OAAK,GAAE,KAAK,QAAM,IAAE,KAAK,QAAM,KAAG,GAAE,KAAK,QAAQ,IAAE,GAAG,GAAE,KAAK,OAAK,IAAE,IAAG,KAAK,QAAQ;AAAA,EAAC;AAAE,KAAG,MAAI,GAAG;AAAU,KAAG,aAAW,SAAS,GAAE;AAAC,WAAO,GAAG,CAAC,MAAI,IAAE,EAAE,MAAM,KAAI,KAAG,QAAM,IAAE,OAAK,IAAE,KAAG,GAAG,KAAK,QAAM,IAAE,KAAK,QAAM,KAAG,GAAE,KAAK,QAAM,GAAE,KAAK,QAAQ,IAAE,GAAG,KAAK,QAAM,IAAE,IAAG,KAAK,QAAM,IAAE,IAAE,IAAG,KAAK,QAAQ;AAAA,EAAC;AAAE,KAAG,MAAI,GAAG;AAAW,KAAG,qBAAmB,SAAS,GAAE;AAAC,QAAG,GAAG,CAAC,MAAI,IAAE,EAAE,MAAM,IAAG,KAAG,IAAG,MAAI,EAAE,QAAO;AAAK,QAAIA,MAAE,KAAK;AAAK,QAAG,IAAE,IAAG;AAAC,UAAI,IAAE,KAAK;AAAI,aAAO,GAAG,MAAI,IAAEA,OAAG,KAAG,GAAEA,QAAI,GAAE,KAAK,QAAQ;AAAA,IAAC,MAAM,QAAO,MAAI,KAAG,GAAGA,KAAE,GAAE,KAAK,QAAQ,IAAE,GAAGA,QAAI,IAAE,IAAG,GAAE,KAAK,QAAQ;AAAA,EAAC;AAAE,KAAG,OAAK,GAAG;AAAmB,KAAG,QAAM,GAAG;AAAmB,KAAG,WAAS,WAAU;AAAC,WAAO,KAAK,WAAS,GAAG,KAAK,KAAI,KAAK,MAAK,KAAE,IAAE;AAAA,EAAI;AAAE,KAAG,aAAW,WAAU;AAAC,WAAO,KAAK,WAAS,OAAK,GAAG,KAAK,KAAI,KAAK,MAAK,IAAE;AAAA,EAAC;AAAE,KAAG,UAAQ,SAAS,GAAE;AAAC,WAAO,IAAE,KAAK,UAAU,IAAE,KAAK,UAAU;AAAA,EAAC;AAAE,KAAG,YAAU,WAAU;AAAC,QAAI,IAAE,KAAK,MAAKA,MAAE,KAAK;AAAI,WAAM,CAACA,MAAE,KAAIA,QAAI,IAAE,KAAIA,QAAI,KAAG,KAAIA,QAAI,IAAG,IAAE,KAAI,MAAI,IAAE,KAAI,MAAI,KAAG,KAAI,MAAI,EAAE;AAAA,EAAC;AAAE,KAAG,YAAU,WAAU;AAAC,QAAI,IAAE,KAAK,MAAKA,MAAE,KAAK;AAAI,WAAM,CAAC,MAAI,IAAG,MAAI,KAAG,KAAI,MAAI,IAAE,KAAI,IAAE,KAAIA,QAAI,IAAGA,QAAI,KAAG,KAAIA,QAAI,IAAE,KAAIA,MAAE,GAAG;AAAA,EAAC;AAAE,KAAG,YAAU,SAAS,GAAEA,KAAE,GAAE;AAAC,WAAO,IAAE,GAAG,YAAY,GAAEA,GAAC,IAAE,GAAG,YAAY,GAAEA,GAAC;AAAA,EAAC;AAAE,KAAG,cAAY,SAAS,GAAEA,KAAE;AAAC,WAAO,IAAI,GAAG,EAAE,CAAC,IAAE,EAAE,CAAC,KAAG,IAAE,EAAE,CAAC,KAAG,KAAG,EAAE,CAAC,KAAG,IAAG,EAAE,CAAC,IAAE,EAAE,CAAC,KAAG,IAAE,EAAE,CAAC,KAAG,KAAG,EAAE,CAAC,KAAG,IAAGA,GAAC;AAAA,EAAC;AAAE,KAAG,cAAY,SAAS,GAAEA,KAAE;AAAC,WAAO,IAAI,GAAG,EAAE,CAAC,KAAG,KAAG,EAAE,CAAC,KAAG,KAAG,EAAE,CAAC,KAAG,IAAE,EAAE,CAAC,GAAE,EAAE,CAAC,KAAG,KAAG,EAAE,CAAC,KAAG,KAAG,EAAE,CAAC,KAAG,IAAE,EAAE,CAAC,GAAEA,GAAC;AAAA,EAAC;AAAC,CAAC;AAAE,IAAI,KAAG,GAAG,MAAI;AAAC;AAAY,CAAC;AAAE,IAAI,KAAG,GAAG,MAAI;AAAC;AAAY,CAAC;AAAE,IAAI,KAAG,GAAG,CAAC,IAAG,OAAK;AAAC;AAAa,GAAC,SAASD,KAAE,GAAEC,KAAE;AAAC,aAAS,EAAE,GAAE;AAAC,UAAI,IAAE,MAAK,IAAE,EAAE;AAAE,QAAE,OAAK,WAAU;AAAC,YAAI,IAAE,UAAQ,EAAE,KAAG,EAAE,IAAE;AAAsB,eAAO,EAAE,KAAG,EAAE,IAAG,EAAE,KAAG,EAAE,IAAG,EAAE,KAAG,KAAG,EAAE,IAAE,IAAE;AAAA,MAAE,GAAE,EAAE,IAAE,GAAE,EAAE,KAAG,EAAE,GAAG,GAAE,EAAE,KAAG,EAAE,GAAG,GAAE,EAAE,KAAG,EAAE,GAAG,GAAE,EAAE,MAAI,EAAE,CAAC,GAAE,EAAE,KAAG,MAAI,EAAE,MAAI,IAAG,EAAE,MAAI,EAAE,CAAC,GAAE,EAAE,KAAG,MAAI,EAAE,MAAI,IAAG,EAAE,MAAI,EAAE,CAAC,GAAE,EAAE,KAAG,MAAI,EAAE,MAAI,IAAG,IAAE;AAAA,IAAI;AAAC,aAAS,EAAE,GAAE,GAAE;AAAC,aAAO,EAAE,IAAE,EAAE,GAAE,EAAE,KAAG,EAAE,IAAG,EAAE,KAAG,EAAE,IAAG,EAAE,KAAG,EAAE,IAAG;AAAA,IAAC;AAAC,aAAS,EAAE,GAAE,GAAE;AAAC,UAAI,IAAE,IAAI,EAAE,CAAC,GAAE,IAAE,KAAG,EAAE,OAAM,IAAE,EAAE;AAAK,aAAO,EAAE,QAAM,WAAU;AAAC,eAAO,EAAE,KAAK,IAAE,aAAW;AAAA,MAAC,GAAE,EAAE,SAAO,WAAU;AAAC,eAAO,EAAE,KAAG,EAAE,IAAE,UAAQ,KAAG;AAAA,MAAqB,GAAE,EAAE,QAAM,GAAE,MAAI,OAAO,KAAG,YAAU,EAAE,GAAE,CAAC,GAAE,EAAE,QAAM,WAAU;AAAC,eAAO,EAAE,GAAE,CAAC,CAAC;AAAA,MAAC,IAAG;AAAA,IAAC;AAAC,aAAS,IAAG;AAAC,UAAI,IAAE,YAAW,IAAE,SAAS,GAAE;AAAC,YAAE,OAAO,CAAC;AAAE,iBAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,KAAI;AAAC,eAAG,EAAE,WAAW,CAAC;AAAE,cAAI,IAAE,sBAAmB;AAAE,cAAE,MAAI,GAAE,KAAG,GAAE,KAAG,GAAE,IAAE,MAAI,GAAE,KAAG,GAAE,KAAG,IAAE;AAAA,QAAU;AAAC,gBAAO,MAAI,KAAG;AAAA,MAAqB;AAAE,aAAO;AAAA,IAAC;AAAC,SAAG,EAAE,UAAQ,EAAE,UAAQ,IAAEA,OAAGA,IAAE,MAAIA,IAAE,WAAU;AAAC,aAAO;AAAA,IAAC,CAAC,IAAE,KAAK,OAAK;AAAA,EAAC,GAAG,IAAG,OAAO,MAAI,YAAU,IAAG,OAAO,UAAQ,cAAY,MAAM;AAAC,CAAC;AAAE,IAAI,KAAG,GAAG,CAAC,IAAG,OAAK;AAAC;AAAa,GAAC,SAASD,KAAE,GAAEC,KAAE;AAAC,aAAS,EAAE,GAAE;AAAC,UAAI,IAAE,MAAK,IAAE;AAAG,QAAE,IAAE,GAAE,EAAE,IAAE,GAAE,EAAE,IAAE,GAAE,EAAE,IAAE,GAAE,EAAE,OAAK,WAAU;AAAC,YAAI,IAAE,EAAE,IAAE,EAAE,KAAG;AAAG,eAAO,EAAE,IAAE,EAAE,GAAE,EAAE,IAAE,EAAE,GAAE,EAAE,IAAE,EAAE,GAAE,EAAE,KAAG,EAAE,MAAI,KAAG,IAAE,MAAI;AAAA,MAAC,GAAE,OAAK,IAAE,KAAG,EAAE,IAAE,IAAE,KAAG;AAAE,eAAQ,IAAE,GAAE,IAAE,EAAE,SAAO,IAAG,IAAI,GAAE,KAAG,EAAE,WAAW,CAAC,IAAE,GAAE,EAAE,KAAK;AAAA,IAAC;AAAC,aAAS,EAAE,GAAE,GAAE;AAAC,aAAO,EAAE,IAAE,EAAE,GAAE,EAAE,IAAE,EAAE,GAAE,EAAE,IAAE,EAAE,GAAE,EAAE,IAAE,EAAE,GAAE;AAAA,IAAC;AAAC,aAAS,EAAE,GAAE,GAAE;AAAC,UAAI,IAAE,IAAI,EAAE,CAAC,GAAE,IAAE,KAAG,EAAE,OAAM,IAAE,WAAU;AAAC,gBAAO,EAAE,KAAK,MAAI,KAAG;AAAA,MAAU;AAAE,aAAO,EAAE,SAAO,WAAU;AAAC;AAAG,cAAI,IAAE,EAAE,KAAK,MAAI,IAAG,KAAG,EAAE,KAAK,MAAI,KAAG,YAAW,KAAG,IAAE,MAAI,KAAG;AAAA,eAAU,MAAI;AAAG,eAAO;AAAA,MAAC,GAAE,EAAE,QAAM,EAAE,MAAK,EAAE,QAAM,GAAE,MAAI,OAAO,KAAG,YAAU,EAAE,GAAE,CAAC,GAAE,EAAE,QAAM,WAAU;AAAC,eAAO,EAAE,GAAE,CAAC,CAAC;AAAA,MAAC,IAAG;AAAA,IAAC;AAAC,SAAG,EAAE,UAAQ,EAAE,UAAQ,IAAEA,OAAGA,IAAE,MAAIA,IAAE,WAAU;AAAC,aAAO;AAAA,IAAC,CAAC,IAAE,KAAK,SAAO;AAAA,EAAC,GAAG,IAAG,OAAO,MAAI,YAAU,IAAG,OAAO,UAAQ,cAAY,MAAM;AAAC,CAAC;AAAE,IAAI,KAAG,GAAG,CAAC,IAAG,OAAK;AAAC;AAAa,GAAC,SAASD,KAAE,GAAEC,KAAE;AAAC,aAAS,EAAE,GAAE;AAAC,UAAI,IAAE,MAAK,IAAE;AAAG,QAAE,OAAK,WAAU;AAAC,YAAI,IAAE,EAAE,IAAE,EAAE,MAAI;AAAE,eAAO,EAAE,IAAE,EAAE,GAAE,EAAE,IAAE,EAAE,GAAE,EAAE,IAAE,EAAE,GAAE,EAAE,IAAE,EAAE,IAAG,EAAE,IAAE,EAAE,IAAE,SAAO,MAAI,EAAE,IAAE,EAAE,IAAE,EAAE,KAAG,KAAG,IAAE,KAAG,MAAI;AAAA,MAAC,GAAE,EAAE,IAAE,GAAE,EAAE,IAAE,GAAE,EAAE,IAAE,GAAE,EAAE,IAAE,GAAE,EAAE,IAAE,GAAE,OAAK,IAAE,KAAG,EAAE,IAAE,IAAE,KAAG;AAAE,eAAQ,IAAE,GAAE,IAAE,EAAE,SAAO,IAAG,IAAI,GAAE,KAAG,EAAE,WAAW,CAAC,IAAE,GAAE,KAAG,EAAE,WAAS,EAAE,IAAE,EAAE,KAAG,KAAG,EAAE,MAAI,IAAG,EAAE,KAAK;AAAA,IAAC;AAAC,aAAS,EAAE,GAAE,GAAE;AAAC,aAAO,EAAE,IAAE,EAAE,GAAE,EAAE,IAAE,EAAE,GAAE,EAAE,IAAE,EAAE,GAAE,EAAE,IAAE,EAAE,GAAE,EAAE,IAAE,EAAE,GAAE,EAAE,IAAE,EAAE,GAAE;AAAA,IAAC;AAAC,aAAS,EAAE,GAAE,GAAE;AAAC,UAAI,IAAE,IAAI,EAAE,CAAC,GAAE,IAAE,KAAG,EAAE,OAAM,IAAE,WAAU;AAAC,gBAAO,EAAE,KAAK,MAAI,KAAG;AAAA,MAAU;AAAE,aAAO,EAAE,SAAO,WAAU;AAAC;AAAG,cAAI,IAAE,EAAE,KAAK,MAAI,IAAG,KAAG,EAAE,KAAK,MAAI,KAAG,YAAW,KAAG,IAAE,MAAI,KAAG;AAAA,eAAU,MAAI;AAAG,eAAO;AAAA,MAAC,GAAE,EAAE,QAAM,EAAE,MAAK,EAAE,QAAM,GAAE,MAAI,OAAO,KAAG,YAAU,EAAE,GAAE,CAAC,GAAE,EAAE,QAAM,WAAU;AAAC,eAAO,EAAE,GAAE,CAAC,CAAC;AAAA,MAAC,IAAG;AAAA,IAAC;AAAC,SAAG,EAAE,UAAQ,EAAE,UAAQ,IAAEA,OAAGA,IAAE,MAAIA,IAAE,WAAU;AAAC,aAAO;AAAA,IAAC,CAAC,IAAE,KAAK,SAAO;AAAA,EAAC,GAAG,IAAG,OAAO,MAAI,YAAU,IAAG,OAAO,UAAQ,cAAY,MAAM;AAAC,CAAC;AAAE,IAAI,KAAG,GAAG,CAAC,IAAG,OAAK;AAAC;AAAa,GAAC,SAASD,KAAE,GAAEC,KAAE;AAAC,aAAS,EAAE,GAAE;AAAC,UAAI,IAAE;AAAK,QAAE,OAAK,WAAU;AAAC,YAAI,IAAE,EAAE,GAAE,IAAE,EAAE,GAAE,GAAE,GAAE;AAAE,eAAO,IAAE,EAAE,CAAC,GAAE,KAAG,MAAI,GAAE,IAAE,IAAE,KAAG,IAAG,IAAE,EAAE,IAAE,IAAE,CAAC,GAAE,KAAG,IAAE,MAAI,IAAG,IAAE,EAAE,IAAE,IAAE,CAAC,GAAE,KAAG,IAAE,MAAI,GAAE,IAAE,EAAE,IAAE,IAAE,CAAC,GAAE,KAAG,IAAE,KAAG,GAAE,IAAE,EAAE,IAAE,IAAE,CAAC,GAAE,IAAE,IAAE,KAAG,IAAG,KAAG,IAAE,KAAG,GAAE,EAAE,CAAC,IAAE,GAAE,EAAE,IAAE,IAAE,IAAE,GAAE;AAAA,MAAC;AAAE,eAAS,EAAE,GAAE,GAAE;AAAC,YAAI,GAAE,GAAE,IAAE,CAAC;AAAE,YAAG,OAAK,IAAE,GAAG,KAAE,EAAE,CAAC,IAAE;AAAA,YAAO,MAAI,IAAE,KAAG,GAAE,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE,EAAE,GAAE,IAAE,CAAC,IAAE,EAAE,IAAE,CAAC,KAAG,KAAG,EAAE,WAAW,CAAC,IAAE,EAAE,IAAE,IAAE,CAAC,KAAG;AAAG,eAAK,EAAE,SAAO,IAAG,GAAE,KAAK,CAAC;AAAE,aAAI,IAAE,GAAE,IAAE,KAAG,EAAE,CAAC,MAAI,GAAE,EAAE,EAAE;AAAC,aAAI,KAAG,IAAE,IAAE,EAAE,CAAC,IAAE,KAAG,IAAE,EAAE,CAAC,GAAE,EAAE,IAAE,GAAE,EAAE,IAAE,GAAE,IAAE,KAAI,IAAE,GAAE,EAAE,EAAE,GAAE,KAAK;AAAA,MAAC;AAAC,QAAE,GAAE,CAAC;AAAA,IAAC;AAAC,aAAS,EAAE,GAAE,GAAE;AAAC,aAAO,EAAE,IAAE,EAAE,EAAE,MAAM,GAAE,EAAE,IAAE,EAAE,GAAE;AAAA,IAAC;AAAC,aAAS,EAAE,GAAE,GAAE;AAAC,WAAG,SAAO,IAAE,CAAC,oBAAI;AAAM,UAAI,IAAE,IAAI,EAAE,CAAC,GAAE,IAAE,KAAG,EAAE,OAAM,IAAE,WAAU;AAAC,gBAAO,EAAE,KAAK,MAAI,KAAG;AAAA,MAAU;AAAE,aAAO,EAAE,SAAO,WAAU;AAAC;AAAG,cAAI,IAAE,EAAE,KAAK,MAAI,IAAG,KAAG,EAAE,KAAK,MAAI,KAAG,YAAW,KAAG,IAAE,MAAI,KAAG;AAAA,eAAU,MAAI;AAAG,eAAO;AAAA,MAAC,GAAE,EAAE,QAAM,EAAE,MAAK,EAAE,QAAM,GAAE,MAAI,EAAE,KAAG,EAAE,GAAE,CAAC,GAAE,EAAE,QAAM,WAAU;AAAC,eAAO,EAAE,GAAE,CAAC,CAAC;AAAA,MAAC,IAAG;AAAA,IAAC;AAAC,SAAG,EAAE,UAAQ,EAAE,UAAQ,IAAEA,OAAGA,IAAE,MAAIA,IAAE,WAAU;AAAC,aAAO;AAAA,IAAC,CAAC,IAAE,KAAK,YAAU;AAAA,EAAC,GAAG,IAAG,OAAO,MAAI,YAAU,IAAG,OAAO,UAAQ,cAAY,MAAM;AAAC,CAAC;AAAE,IAAI,KAAG,GAAG,CAAC,IAAG,OAAK;AAAC;AAAa,GAAC,SAASD,KAAE,GAAEC,KAAE;AAAC,aAAS,EAAE,GAAE;AAAC,UAAI,IAAE;AAAK,QAAE,OAAK,WAAU;AAAC,YAAI,IAAE,EAAE,GAAE,IAAE,EAAE,GAAE,IAAE,EAAE,GAAE,GAAE;AAAE,eAAO,EAAE,IAAE,IAAE,IAAE,aAAW,GAAE,IAAE,EAAE,IAAE,KAAG,GAAG,GAAE,IAAE,EAAE,IAAE,IAAE,IAAE,GAAG,GAAE,KAAG,KAAG,IAAG,KAAG,KAAG,IAAG,KAAG,MAAI,IAAG,KAAG,MAAI,IAAG,IAAE,EAAE,CAAC,IAAE,IAAE,GAAE,EAAE,IAAE,GAAE,KAAG,IAAE,MAAI,MAAI;AAAA,MAAC;AAAE,eAAS,EAAE,GAAE,GAAE;AAAC,YAAI,GAAE,GAAE,GAAE,GAAE,GAAE,IAAE,CAAC,GAAE,IAAE;AAAI,aAAI,OAAK,IAAE,MAAI,IAAE,GAAE,IAAE,SAAO,IAAE,IAAE,MAAK,IAAE,GAAE,IAAE,KAAK,IAAI,GAAE,EAAE,MAAM,IAAG,IAAE,GAAE,IAAE,KAAI,IAAE,GAAE,EAAE,EAAE,OAAI,KAAG,EAAE,YAAY,IAAE,MAAI,EAAE,MAAM,IAAG,MAAI,MAAI,IAAE,IAAG,KAAG,KAAG,IAAG,KAAG,MAAI,IAAG,KAAG,KAAG,GAAE,KAAG,MAAI,IAAG,KAAG,MAAI,IAAE,IAAE,aAAW,GAAE,IAAE,EAAE,IAAE,GAAG,KAAG,IAAE,GAAE,IAAE,KAAG,IAAE,IAAE,IAAE;AAAG,aAAI,KAAG,QAAM,GAAG,KAAG,EAAE,UAAQ,KAAG,GAAG,IAAE,KAAI,IAAE,KAAI,IAAE,IAAE,KAAI,IAAE,GAAE,EAAE,EAAE,KAAE,EAAE,IAAE,KAAG,GAAG,GAAE,IAAE,EAAE,IAAE,IAAE,IAAE,GAAG,GAAE,KAAG,KAAG,IAAG,KAAG,KAAG,IAAG,KAAG,MAAI,IAAG,KAAG,MAAI,IAAG,EAAE,CAAC,IAAE,IAAE;AAAE,UAAE,IAAE,GAAE,EAAE,IAAE,GAAE,EAAE,IAAE;AAAA,MAAC;AAAC,QAAE,GAAE,CAAC;AAAA,IAAC;AAAC,aAAS,EAAE,GAAE,GAAE;AAAC,aAAO,EAAE,IAAE,EAAE,GAAE,EAAE,IAAE,EAAE,GAAE,EAAE,IAAE,EAAE,EAAE,MAAM,GAAE;AAAA,IAAC;AAAC,aAAS,EAAE,GAAE,GAAE;AAAC,WAAG,SAAO,IAAE,CAAC,oBAAI;AAAM,UAAI,IAAE,IAAI,EAAE,CAAC,GAAE,IAAE,KAAG,EAAE,OAAM,IAAE,WAAU;AAAC,gBAAO,EAAE,KAAK,MAAI,KAAG;AAAA,MAAU;AAAE,aAAO,EAAE,SAAO,WAAU;AAAC;AAAG,cAAI,IAAE,EAAE,KAAK,MAAI,IAAG,KAAG,EAAE,KAAK,MAAI,KAAG,YAAW,KAAG,IAAE,MAAI,KAAG;AAAA,eAAU,MAAI;AAAG,eAAO;AAAA,MAAC,GAAE,EAAE,QAAM,EAAE,MAAK,EAAE,QAAM,GAAE,MAAI,EAAE,KAAG,EAAE,GAAE,CAAC,GAAE,EAAE,QAAM,WAAU;AAAC,eAAO,EAAE,GAAE,CAAC,CAAC;AAAA,MAAC,IAAG;AAAA,IAAC;AAAC,SAAG,EAAE,UAAQ,EAAE,UAAQ,IAAEA,OAAGA,IAAE,MAAIA,IAAE,WAAU;AAAC,aAAO;AAAA,IAAC,CAAC,IAAE,KAAK,UAAQ;AAAA,EAAC,GAAG,IAAG,OAAO,MAAI,YAAU,IAAG,OAAO,UAAQ,cAAY,MAAM;AAAC,CAAC;AAAE,IAAI,KAAG,GAAG,CAAC,IAAG,OAAK;AAAC;AAAa,GAAC,SAASD,KAAE,GAAEC,KAAE;AAAC,aAAS,EAAE,GAAE;AAAC,UAAI,IAAE,MAAK,IAAE;AAAG,QAAE,OAAK,WAAU;AAAC,YAAI,IAAE,EAAE,GAAE,IAAE,EAAE,GAAE,IAAE,EAAE,GAAE,IAAE,EAAE;AAAE,eAAO,IAAE,KAAG,KAAG,MAAI,IAAE,GAAE,IAAE,IAAE,IAAE,GAAE,IAAE,KAAG,KAAG,MAAI,IAAE,GAAE,IAAE,IAAE,IAAE,GAAE,EAAE,IAAE,IAAE,KAAG,KAAG,MAAI,KAAG,GAAE,EAAE,IAAE,IAAE,IAAE,IAAE,GAAE,EAAE,IAAE,KAAG,KAAG,MAAI,KAAG,GAAE,EAAE,IAAE,IAAE,IAAE;AAAA,MAAC,GAAE,EAAE,IAAE,GAAE,EAAE,IAAE,GAAE,EAAE,IAAE,aAAY,EAAE,IAAE,YAAW,MAAI,KAAK,MAAM,CAAC,KAAG,EAAE,IAAE,IAAE,aAAW,GAAE,EAAE,IAAE,IAAE,KAAG,KAAG;AAAE,eAAQ,IAAE,GAAE,IAAE,EAAE,SAAO,IAAG,IAAI,GAAE,KAAG,EAAE,WAAW,CAAC,IAAE,GAAE,EAAE,KAAK;AAAA,IAAC;AAAC,aAAS,EAAE,GAAE,GAAE;AAAC,aAAO,EAAE,IAAE,EAAE,GAAE,EAAE,IAAE,EAAE,GAAE,EAAE,IAAE,EAAE,GAAE,EAAE,IAAE,EAAE,GAAE;AAAA,IAAC;AAAC,aAAS,EAAE,GAAE,GAAE;AAAC,UAAI,IAAE,IAAI,EAAE,CAAC,GAAE,IAAE,KAAG,EAAE,OAAM,IAAE,WAAU;AAAC,gBAAO,EAAE,KAAK,MAAI,KAAG;AAAA,MAAU;AAAE,aAAO,EAAE,SAAO,WAAU;AAAC;AAAG,cAAI,IAAE,EAAE,KAAK,MAAI,IAAG,KAAG,EAAE,KAAK,MAAI,KAAG,YAAW,KAAG,IAAE,MAAI,KAAG;AAAA,eAAU,MAAI;AAAG,eAAO;AAAA,MAAC,GAAE,EAAE,QAAM,EAAE,MAAK,EAAE,QAAM,GAAE,MAAI,OAAO,KAAG,YAAU,EAAE,GAAE,CAAC,GAAE,EAAE,QAAM,WAAU;AAAC,eAAO,EAAE,GAAE,CAAC,CAAC;AAAA,MAAC,IAAG;AAAA,IAAC;AAAC,SAAG,EAAE,UAAQ,EAAE,UAAQ,IAAEA,OAAGA,IAAE,MAAIA,IAAE,WAAU;AAAC,aAAO;AAAA,IAAC,CAAC,IAAE,KAAK,SAAO;AAAA,EAAC,GAAG,IAAG,OAAO,MAAI,YAAU,IAAG,OAAO,UAAQ,cAAY,MAAM;AAAC,CAAC;AAAE,IAAI,KAAG,GAAG,MAAI;AAAC;AAAY,CAAC;AAAE,IAAI,KAAG,GAAG,CAAC,IAAG,OAAK;AAAC;AAAa,GAAC,SAASD,KAAE,GAAEC,KAAE;AAAC,QAAI,IAAE,KAAI,IAAE,GAAE,IAAE,IAAG,IAAE,UAAS,IAAEA,IAAE,IAAI,GAAE,CAAC,GAAE,IAAEA,IAAE,IAAI,GAAE,CAAC,GAAE,IAAE,IAAE,GAAE,IAAE,IAAE,GAAE;AAAE,aAAS,EAAE,GAAE,GAAE,GAAE;AAAC,UAAI,IAAE,CAAC;AAAE,UAAE,KAAG,OAAG,EAAC,SAAQ,KAAE,IAAE,KAAG,CAAC;AAAE,UAAI,IAAE,EAAE,EAAE,EAAE,UAAQ,CAAC,GAAE,EAAE,CAAC,CAAC,IAAE,KAAG,OAAK,EAAE,IAAE,GAAE,CAAC,GAAE,CAAC,GAAE,IAAE,IAAI,EAAE,CAAC,GAAE,IAAE,WAAU;AAAC,iBAAQ,IAAE,EAAE,EAAE,CAAC,GAAE,IAAE,GAAE,IAAE,GAAE,IAAE,IAAG,MAAG,IAAE,KAAG,GAAE,KAAG,GAAE,IAAE,EAAE,EAAE,CAAC;AAAE,eAAK,KAAG,IAAG,MAAG,GAAE,KAAG,GAAE,OAAK;AAAE,gBAAO,IAAE,KAAG;AAAA,MAAC;AAAE,aAAO,EAAE,QAAM,WAAU;AAAC,eAAO,EAAE,EAAE,CAAC,IAAE;AAAA,MAAC,GAAE,EAAE,QAAM,WAAU;AAAC,eAAO,EAAE,EAAE,CAAC,IAAE;AAAA,MAAU,GAAE,EAAE,SAAO,GAAE,EAAE,EAAE,EAAE,CAAC,GAAE,CAAC,IAAG,EAAE,QAAM,KAAG,SAAS,GAAE,GAAE,GAAE,GAAE;AAAC,eAAO,MAAI,EAAE,KAAG,EAAE,GAAE,CAAC,GAAE,EAAE,QAAM,WAAU;AAAC,iBAAO,EAAE,GAAE,CAAC,CAAC;AAAA,QAAC,IAAG,KAAGA,IAAE,CAAC,IAAE,GAAE,KAAG;AAAA,MAAC,GAAG,GAAE,GAAE,YAAW,IAAE,EAAE,SAAO,QAAMA,KAAE,EAAE,KAAK;AAAA,IAAC;AAAC,aAAS,EAAE,GAAE;AAAC,UAAI,GAAE,IAAE,EAAE,QAAO,IAAE,MAAK,IAAE,GAAE,IAAE,EAAE,IAAE,EAAE,IAAE,GAAE,IAAE,EAAE,IAAE,CAAC;AAAE,WAAI,MAAI,IAAE,CAAC,GAAG,IAAG,IAAE,IAAG,GAAE,CAAC,IAAE;AAAI,WAAI,IAAE,GAAE,IAAE,GAAE,IAAI,GAAE,CAAC,IAAE,EAAE,IAAE,IAAE,IAAE,EAAE,IAAE,CAAC,KAAG,IAAE,EAAE,CAAC,EAAE,GAAE,EAAE,CAAC,IAAE;AAAE,OAAC,EAAE,IAAE,SAAS,GAAE;AAAC,iBAAQ,GAAE,IAAE,GAAE,IAAE,EAAE,GAAE,IAAE,EAAE,GAAE,IAAE,EAAE,GAAE,MAAK,KAAE,EAAE,IAAE,IAAE,IAAE,CAAC,GAAE,IAAE,IAAE,IAAE,EAAE,KAAG,EAAE,CAAC,IAAE,EAAE,IAAE,IAAE,IAAE,CAAC,MAAI,EAAE,CAAC,IAAE,EAAE;AAAE,eAAO,EAAE,IAAE,GAAE,EAAE,IAAE,GAAE;AAAA,MAAC,GAAG,CAAC;AAAA,IAAC;AAAC,aAAS,EAAE,GAAE,GAAE;AAAC,aAAO,EAAE,IAAE,EAAE,GAAE,EAAE,IAAE,EAAE,GAAE,EAAE,IAAE,EAAE,EAAE,MAAM,GAAE;AAAA,IAAC;AAAC,aAAS,EAAE,GAAE,GAAE;AAAC,UAAI,IAAE,CAAC,GAAE,IAAE,OAAO,GAAE;AAAE,UAAG,KAAG,KAAG,SAAS,MAAI,KAAK,EAAE,KAAG;AAAC,UAAE,KAAK,EAAE,EAAE,CAAC,GAAE,IAAE,CAAC,CAAC;AAAA,MAAC,SAAO,GAAE;AAAA,MAAC;AAAC,aAAO,EAAE,SAAO,IAAE,KAAG,WAAS,IAAE,IAAE;AAAA,IAAI;AAAC,aAAS,EAAE,GAAE,GAAE;AAAC,eAAQ,IAAE,IAAE,IAAG,GAAE,IAAE,GAAE,IAAE,EAAE,SAAQ,GAAE,IAAE,CAAC,IAAE,KAAG,KAAG,EAAE,IAAE,CAAC,IAAE,MAAI,EAAE,WAAW,GAAG;AAAE,aAAO,EAAE,CAAC;AAAA,IAAC;AAAC,aAAS,IAAG;AAAC,UAAG;AAAC,YAAI;AAAE,eAAO,MAAI,IAAE,EAAE,eAAa,IAAE,EAAE,CAAC,KAAG,IAAE,IAAI,WAAW,CAAC,IAAGD,IAAE,UAAQA,IAAE,UAAU,gBAAgB,CAAC,IAAG,EAAE,CAAC;AAAA,MAAC,SAAO,GAAE;AAAC,YAAI,IAAEA,IAAE,WAAU,IAAE,KAAG,EAAE;AAAQ,eAAM,CAAC,CAAC,oBAAI,QAAKA,KAAE,GAAEA,IAAE,QAAO,EAAE,CAAC,CAAC;AAAA,MAAC;AAAA,IAAC;AAAC,aAAS,EAAE,GAAE;AAAC,aAAO,OAAO,aAAa,MAAM,GAAE,CAAC;AAAA,IAAC;AAAC,QAAG,EAAEC,IAAE,OAAO,GAAE,CAAC,GAAE,OAAO,MAAI,YAAU,GAAG,SAAQ;AAAC,SAAG,UAAQ;AAAE,UAAG;AAAC,YAAE,GAAG;AAAA,MAAC,SAAO,GAAE;AAAA,MAAC;AAAA,IAAC,MAAM,QAAO,UAAQ,cAAY,OAAO,MAAI,OAAO,WAAU;AAAC,aAAO;AAAA,IAAC,CAAC,IAAEA,IAAE,SAAO,CAAC,IAAE;AAAA,EAAC,GAAG,OAAO,QAAM,cAAY,OAAK,IAAG,CAAC,GAAE,IAAI;AAAC,CAAC;AAAE,IAAI,KAAG,GAAG,CAAC,KAAI,OAAK;AAAC;AAAa,MAAI,KAAG,GAAG,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG;AAAE,KAAG,OAAK;AAAG,KAAG,SAAO;AAAG,KAAG,SAAO;AAAG,KAAG,YAAU;AAAG,KAAG,UAAQ;AAAG,KAAG,SAAO;AAAG,KAAG,UAAQ;AAAE,CAAC;AAAE,IAAI,KAAG,GAAG,MAAI;AAAC;AAAY,CAAC;AAAE,IAAI,KAAG,GAAG,MAAI;AAAC;AAAY,CAAC;AAAE,IAAI,KAAG,GAAG,MAAI;AAAC;AAAY,CAAC;AAAE,IAAI,KAAG,GAAG,MAAI;AAAC;AAAY,CAAC;AAAE,IAAI,KAAG,GAAG,MAAI;AAAC;AAAY,CAAC;AAAE,IAAI,KAAG,GAAG,CAAC,IAAG,OAAK;AAAC;AAAa,MAAI,MAAI,MAAI;AAAC,QAAID,MAAE,OAAO,YAAU,eAAa,SAAS,gBAAc,SAAS,cAAc,MAAI;AAAO,WAAO,OAAO,cAAY,gBAAcA,MAAEA,OAAG,aAAY,SAAS,GAAE;AAAC,UAAE,KAAG,CAAC;AAAE,eAASC,MAAG;AAAC,eAAO,GAAG,UAAQ,MAAI,GAAG,GAAG,MAAM,GAAE;AAAA,MAAE;AAAC,eAAS,IAAG;AAAC,eAAO,GAAG,UAAQ,MAAI,GAAG,GAAG,MAAM,GAAE;AAAA,MAAE;AAAC,eAAS,IAAG;AAAC,eAAO,GAAG,UAAQ,MAAI,GAAG,GAAG,MAAM,GAAE;AAAA,MAAE;AAAC,eAAS,IAAG;AAAC,eAAO,GAAG,UAAQ,MAAI,GAAG,GAAG,MAAM,GAAE;AAAA,MAAE;AAAC,eAAS,IAAG;AAAC,eAAO,GAAG,UAAQ,MAAI,GAAG,GAAG,MAAM,GAAE;AAAA,MAAE;AAAC,eAAS,IAAG;AAAC,eAAO,GAAG,UAAQ,MAAI,GAAG,GAAG,MAAM,GAAE;AAAA,MAAE;AAAC,eAAS,IAAG;AAAC,eAAO,GAAG,UAAQ,MAAI,GAAG,GAAG,MAAM,GAAE;AAAA,MAAE;AAAC,UAAI,IAAE,OAAO,KAAG,cAAY,IAAE,CAAC,GAAE,GAAE;AAAE,QAAE,QAAM,IAAI,QAAQ,SAAS,GAAE,GAAE;AAAC,YAAE,GAAE,IAAE;AAAA,MAAC,CAAC;AAAE,UAAI;AAAE,aAAO,WAAS,eAAa,QAAQ,cAAY,IAAE,EAAC,mBAAkB,QAAQ,UAAU,mBAAmB,GAAE,oBAAmB,QAAQ,UAAU,oBAAoB,EAAC;AAAG,UAAI,IAAE,OAAO,OAAO,CAAC,GAAE,CAAC,GAAE,IAAE,CAAC,GAAE,IAAE,kBAAiB,IAAE,CAAC,GAAE,MAAI;AAAC,cAAM;AAAA,MAAC,GAAE,IAAE,OAAO,UAAQ,UAAS,IAAE,OAAO,iBAAe,YAAW,IAAE,OAAO,WAAS,YAAU,OAAO,QAAQ,YAAU,YAAU,OAAO,QAAQ,SAAS,QAAM,UAAS,IAAE,EAAE,0BAAwB,OAAG,IAAE;AAAG,eAAS,EAAE,GAAE;AAAC,eAAO,EAAE,aAAW,EAAE,WAAW,GAAE,CAAC,IAAE,IAAE;AAAA,MAAC;AAAC,UAAI,GAAE,GAAE,GAAE;AAAE,eAAS,EAAE,GAAE;AAAC,YAAG,aAAa,GAAG;AAAO,UAAE,+BAA6B,CAAC;AAAA,MAAC;AAAC,UAAG,GAAE;AAAC,YAAI,IAAE,GAAG,GAAE,IAAE,GAAG;AAAE,YAAE,IAAE,EAAE,QAAQ,CAAC,IAAE,MAAI,IAAE,YAAU,KAAI,IAAE,CAAC,GAAE,QAAM,IAAE,GAAG,CAAC,IAAE,IAAI,IAAI,CAAC,IAAE,EAAE,UAAU,CAAC,GAAE,EAAE,aAAa,GAAE,KAAG,SAAO,MAAM,IAAG,IAAE,OAAG;AAAC,cAAI,KAAG,EAAE,GAAE,IAAE;AAAE,iBAAO,GAAG,WAAS,KAAG,IAAI,WAAW,EAAE,IAAG;AAAA,QAAE,GAAE,IAAE,CAAC,GAAE,IAAG,OAAK;AAAC,cAAE,GAAG,CAAC,IAAE,IAAI,IAAI,CAAC,IAAE,EAAE,UAAU,CAAC,GAAE,EAAE,SAAS,GAAE,SAAS,IAAG,IAAG;AAAC,iBAAG,GAAG,EAAE,IAAE,GAAG,GAAG,MAAM;AAAA,UAAC,CAAC;AAAA,QAAC,GAAE,QAAQ,KAAK,SAAO,MAAI,IAAE,QAAQ,KAAK,CAAC,EAAE,QAAQ,OAAM,GAAG,IAAG,IAAE,QAAQ,KAAK,MAAM,CAAC,GAAE,QAAQ,GAAG,qBAAoB,SAAS,GAAE;AAAC,cAAG,EAAE,aAAa,IAAI,OAAM;AAAA,QAAC,CAAC,GAAE,QAAQ,GAAG,sBAAqB,SAAS,GAAE;AAAC,gBAAM;AAAA,QAAC,CAAC,GAAE,IAAE,CAAC,GAAE,OAAK;AAAC,cAAG,GAAG,EAAE,OAAM,QAAQ,WAAS,GAAE;AAAG,YAAE,EAAE,GAAE,QAAQ,KAAK,CAAC;AAAA,QAAC,GAAE,EAAE,UAAQ,WAAU;AAAC,iBAAM;AAAA,QAA4B;AAAE,YAAI;AAAE,YAAG;AAAC,cAAE,GAAG;AAAA,QAAC,SAAO,GAAE;AAAC,gBAAM,QAAQ,MAAM,yGAAyG,GAAE;AAAA,QAAC;AAAC,eAAO,SAAO,EAAE;AAAA,MAAM,MAAK,EAAC,KAAG,OAAK,IAAE,IAAE,KAAK,SAAS,OAAK,OAAO,YAAU,eAAa,SAAS,kBAAgB,IAAE,SAAS,cAAc,MAAK,OAAOD,OAAG,eAAaA,QAAI,IAAEA,MAAG,EAAE,QAAQ,OAAO,MAAI,IAAE,IAAE,EAAE,OAAO,GAAE,EAAE,QAAQ,UAAS,EAAE,EAAE,YAAY,GAAG,IAAE,CAAC,IAAE,IAAE,IAAG,MAAI,IAAE,OAAG;AAAC,YAAI,IAAE,IAAI;AAAe,eAAO,EAAE,KAAK,OAAM,GAAE,KAAE,GAAE,EAAE,KAAK,IAAI,GAAE,EAAE;AAAA,MAAY,GAAE,MAAI,IAAE,OAAG;AAAC,YAAI,IAAE,IAAI;AAAe,eAAO,EAAE,KAAK,OAAM,GAAE,KAAE,GAAE,EAAE,eAAa,eAAc,EAAE,KAAK,IAAI,GAAE,IAAI,WAAW,EAAE,QAAQ;AAAA,MAAC,IAAG,IAAE,CAAC,GAAE,GAAE,OAAK;AAAC,YAAI,KAAG,IAAI;AAAe,WAAG,KAAK,OAAM,GAAE,IAAE,GAAE,GAAG,eAAa,eAAc,GAAG,SAAO,MAAI;AAAC,cAAG,GAAG,UAAQ,OAAK,GAAG,UAAQ,KAAG,GAAG,UAAS;AAAC,cAAE,GAAG,QAAQ;AAAE;AAAA,UAAM;AAAC,aAAG;AAAA,QAAC,GAAE,GAAG,UAAQ,IAAG,GAAG,KAAK,IAAI;AAAA,MAAC,IAAG,IAAE,OAAG,SAAS,QAAM;AAAG,WAAG,OAAO,eAAa,gBAAc,OAAO,cAAY,GAAG,EAAE;AAAa,UAAI,IAAE,QAAQ,IAAI,KAAK,OAAO,GAAE,IAAE,QAAQ,KAAK,KAAK,OAAO;AAAE,YAAI,IAAE,OAAG,EAAE,UAAU,GAAE,IAAE;AAAA,CAC5zoB,GAAE,IAAE,OAAG,EAAE,UAAU,GAAE,IAAE;AAAA,CACvB;AAAG,UAAI,IAAE,EAAE,SAAO,GAAE,IAAE,EAAE,YAAU;AAAE,aAAO,OAAO,GAAE,CAAC,GAAE,IAAE,MAAK,EAAE,cAAY,IAAE,EAAE,YAAW,EAAE,gBAAc,IAAE,EAAE,cAAa,EAAE,SAAO,IAAE,EAAE;AAAM,UAAI,IAAE,GAAE,IAAE,QAAQ,MAAK,IAAE,QAAQ,OAAM,KAAG,QAAQ,iBAAgB;AAAG,QAAE,eAAa,KAAG,EAAE;AAAY,UAAI,KAAG,EAAE,iBAAe;AAAG,aAAO,eAAa,YAAU,GAAG,iCAAiC;AAAE,UAAI,IAAG,IAAG,KAAG,OAAG;AAAG,eAAS,GAAG,GAAE,GAAE;AAAC,aAAG,GAAG,CAAC;AAAA,MAAC;AAAC,UAAI,KAAG,OAAO,eAAa,cAAY,IAAI,YAAY,MAAM,IAAE;AAAO,eAAS,GAAG,GAAE,GAAE,IAAG;AAAC,eAAK;AAAE,iBAAQ,KAAG,IAAE,IAAG,KAAG,GAAE,EAAE,EAAE,KAAG,EAAE,MAAI,MAAK,GAAE;AAAG,YAAG,KAAG,IAAE,MAAI,EAAE,UAAQ,GAAG,QAAO,GAAG,OAAO,EAAE,kBAAkB,oBAAkB,EAAE,MAAM,GAAE,EAAE,IAAE,EAAE,SAAS,GAAE,EAAE,CAAC;AAAE,iBAAQ,KAAG,IAAG,IAAE,MAAI;AAAC,cAAI,KAAG,EAAE,GAAG;AAAE,cAAG,EAAE,KAAG,MAAK;AAAC,kBAAI,OAAO,aAAa,EAAE;AAAE;AAAA,UAAQ;AAAC,cAAI,KAAG,EAAE,GAAG,IAAE;AAAG,eAAI,KAAG,QAAM,KAAI;AAAC,kBAAI,OAAO,cAAc,KAAG,OAAK,IAAE,EAAE;AAAE;AAAA,UAAQ;AAAC,cAAI,KAAG,EAAE,GAAG,IAAE;AAAG,eAAI,KAAG,QAAM,MAAI,MAAI,KAAG,OAAK,KAAG,MAAI,IAAE,KAAG,MAAI,KAAG,MAAI,KAAG,MAAI,KAAG,MAAI,IAAE,EAAE,GAAG,IAAE,IAAG,KAAG,MAAM,OAAI,OAAO,aAAa,EAAE;AAAA,eAAM;AAAC,gBAAI,KAAG,KAAG;AAAM,kBAAI,OAAO,aAAa,QAAM,MAAI,IAAG,QAAM,KAAG,IAAI;AAAA,UAAC;AAAA,QAAC;AAAC,eAAO;AAAA,MAAE;AAAC,eAAS,GAAG,GAAE,GAAE;AAAC,eAAO,OAAK,GAAE,IAAE,GAAG,EAAE,GAAE,GAAE,CAAC,IAAE;AAAA,MAAE;AAAC,eAAS,GAAG,GAAE,GAAE,IAAG,IAAG;AAAC,YAAG,QAAM,GAAE,EAAE,KAAG,GAAG,QAAO;AAAE,iBAAQ,KAAG,IAAG,KAAG,KAAG,KAAG,GAAE,KAAG,GAAE,KAAG,EAAE,QAAO,EAAE,IAAG;AAAC,cAAI,KAAG,EAAE,WAAW,EAAE;AAAE,cAAG,MAAI,SAAO,MAAI,OAAM;AAAC,gBAAI,KAAG,EAAE,WAAW,EAAE,EAAE;AAAE,iBAAG,UAAQ,KAAG,SAAO,MAAI,KAAG;AAAA,UAAI;AAAC,cAAG,MAAI,KAAI;AAAC,gBAAG,MAAI,GAAG;AAAM,cAAE,SAAO,CAAC,IAAE;AAAA,UAAE,WAAS,MAAI,MAAK;AAAC,gBAAG,KAAG,KAAG,GAAG;AAAM,cAAE,SAAO,CAAC,IAAE,MAAI,MAAI,GAAE,EAAE,SAAO,CAAC,IAAE,MAAI,KAAG;AAAA,UAAE,WAAS,MAAI,OAAM;AAAC,gBAAG,KAAG,KAAG,GAAG;AAAM,cAAE,SAAO,CAAC,IAAE,MAAI,MAAI,IAAG,EAAE,SAAO,CAAC,IAAE,MAAI,MAAI,IAAE,IAAG,EAAE,SAAO,CAAC,IAAE,MAAI,KAAG;AAAA,UAAE,OAAK;AAAC,gBAAG,KAAG,KAAG,GAAG;AAAM,cAAE,SAAO,CAAC,IAAE,MAAI,MAAI,IAAG,EAAE,SAAO,CAAC,IAAE,MAAI,MAAI,KAAG,IAAG,EAAE,SAAO,CAAC,IAAE,MAAI,MAAI,IAAE,IAAG,EAAE,SAAO,CAAC,IAAE,MAAI,KAAG;AAAA,UAAE;AAAA,QAAC;AAAC,eAAO,EAAE,OAAK,CAAC,IAAE,GAAE,KAAG;AAAA,MAAE;AAAC,eAAS,GAAG,GAAE,GAAE,IAAG;AAAC,eAAO,GAAG,GAAE,EAAE,GAAE,GAAE,EAAE;AAAA,MAAC;AAAC,UAAI,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG;AAAG,YAAI,KAAG,EAAE;AAAQ,eAAS,GAAG,GAAE;AAAC,aAAG,GAAE,EAAE,QAAM,KAAG,IAAI,UAAU,CAAC,GAAE,EAAE,SAAO,KAAG,IAAI,WAAW,CAAC,GAAE,EAAE,SAAO,KAAG,IAAI,WAAW,CAAC,GAAE,EAAE,SAAO,KAAG,IAAI,WAAW,CAAC,GAAE,EAAE,UAAQ,KAAG,IAAI,YAAY,CAAC,GAAE,EAAE,UAAQ,KAAG,IAAI,YAAY,CAAC,GAAE,EAAE,UAAQ,KAAG,IAAI,aAAa,CAAC,GAAE,EAAE,UAAQ,KAAG,IAAI,aAAa,CAAC;AAAA,MAAC;AAAC,UAAI,KAAG,EAAE,kBAAgB;AAAS,UAAG,EAAE,MAAG,EAAE,YAAW,KAAG,EAAE;AAAA,eAAe,EAAE,WAAW,MAAG,EAAE;AAAA,eAAmB,KAAG,IAAI,YAAY,OAAO,EAAC,SAAQ,KAAG,OAAM,SAAQ,OAAM,QAAO,KAAE,CAAC,GAAE,EAAE,GAAG,kBAAkB,mBAAmB,OAAM,EAAE,6NAA6N,GAAE,KAAG,EAAE,2GAA2G,GAAE,MAAM,YAAY;AAAE,aAAK,KAAG,GAAG,SAAQ,KAAG,GAAG,YAAW,GAAG,EAAE;AAAE,UAAI,IAAG,KAAG,CAAC,GAAE,KAAG,CAAC,GAAE,KAAG,CAAC,GAAE,KAAG;AAAG,eAAS,KAAI;AAAC,eAAO;AAAA,MAAE;AAAC,eAAS,KAAI;AAAC,YAAG,EAAE,OAAO,MAAI,OAAO,EAAE,UAAQ,eAAa,EAAE,SAAO,CAAC,EAAE,MAAM,IAAG,EAAE,OAAO,SAAQ,IAAG,EAAE,OAAO,MAAM,CAAC;AAAE,WAAG,EAAE;AAAA,MAAC;AAAC,eAAS,KAAI;AAAC,aAAG,MAAG,CAAC,KAAG,GAAG,EAAE;AAAA,MAAC;AAAC,eAAS,KAAI;AAAC,YAAG,CAAC,GAAE;AAAC,cAAG,EAAE,QAAQ,MAAI,OAAO,EAAE,WAAS,eAAa,EAAE,UAAQ,CAAC,EAAE,OAAO,IAAG,EAAE,QAAQ,SAAQ,IAAG,EAAE,QAAQ,MAAM,CAAC;AAAE,aAAG,EAAE;AAAA,QAAC;AAAA,MAAC;AAAC,eAAS,GAAG,GAAE;AAAC,WAAG,QAAQ,CAAC;AAAA,MAAC;AAAC,eAAS,GAAG,GAAE;AAAC,WAAG,QAAQ,CAAC;AAAA,MAAC;AAAC,eAAS,GAAG,GAAE;AAAC,WAAG,QAAQ,CAAC;AAAA,MAAC;AAAC,UAAI,KAAG,GAAE,KAAG,MAAK,KAAG;AAAK,eAAS,GAAG,GAAE;AAAC,cAAK,EAAE,0BAAwB,EAAE,uBAAuB,EAAE;AAAA,MAAC;AAAC,eAAS,GAAG,GAAE;AAAC,YAAG,MAAK,EAAE,0BAAwB,EAAE,uBAAuB,EAAE,GAAE,MAAI,MAAI,OAAK,SAAO,cAAc,EAAE,GAAE,KAAG,OAAM,KAAI;AAAC,cAAI,IAAE;AAAG,eAAG,MAAK,EAAE;AAAA,QAAC;AAAA,MAAC;AAAC,eAAS,GAAG,GAAE;AAAC,UAAE,WAAS,EAAE,QAAQ,CAAC,GAAE,IAAE,aAAW,IAAE,KAAI,EAAE,CAAC,GAAE,KAAG,MAAG,KAAG,GAAE,KAAG;AAA2C,YAAI,IAAE,IAAI,YAAY,aAAa,CAAC;AAAE,cAAM,EAAE,CAAC,GAAE;AAAA,MAAC;AAAC,UAAI,KAAG;AAAwC,eAAS,GAAG,GAAE;AAAC,eAAO,EAAE,WAAW,EAAE;AAAA,MAAC;AAAC,eAAS,GAAG,GAAE;AAAC,eAAO,EAAE,WAAW,SAAS;AAAA,MAAC;AAAC,UAAI;AAAG,WAAG,wCAAuC,GAAG,EAAE,MAAI,KAAG,EAAE,EAAE;AAAG,eAAS,GAAG,GAAE;AAAC,YAAG;AAAC,cAAG,KAAG,MAAI,GAAG,QAAO,IAAI,WAAW,EAAE;AAAE,cAAG,EAAE,QAAO,EAAE,CAAC;AAAE,gBAAK;AAAA,QAAiD,SAAO,GAAE;AAAC,aAAG,CAAC;AAAA,QAAC;AAAA,MAAC;AAAC,eAAS,KAAI;AAAC,YAAG,CAAC,OAAK,KAAG,IAAG;AAAC,cAAG,OAAO,SAAO,cAAY,CAAC,GAAG,EAAE,EAAE,QAAO,MAAM,IAAG,EAAC,aAAY,cAAa,CAAC,EAAE,KAAK,SAAS,GAAE;AAAC,gBAAG,CAAC,EAAE,GAAG,OAAK,yCAAuC,KAAG;AAAI,mBAAO,EAAE,YAAY;AAAA,UAAC,CAAC,EAAE,MAAM,WAAU;AAAC,mBAAO,GAAG,EAAE;AAAA,UAAC,CAAC;AAAE,cAAG,EAAE,QAAO,IAAI,QAAQ,SAAS,GAAE,GAAE;AAAC,cAAE,IAAG,SAAS,IAAG;AAAC,gBAAE,IAAI,WAAW,EAAE,CAAC;AAAA,YAAC,GAAE,CAAC;AAAA,UAAC,CAAC;AAAA,QAAC;AAAC,eAAO,QAAQ,QAAQ,EAAE,KAAK,WAAU;AAAC,iBAAO,GAAG,EAAE;AAAA,QAAC,CAAC;AAAA,MAAC;AAAC,eAAS,KAAI;AAAC,YAAI,IAAE,EAAC,KAAI,IAAG,wBAAuB,GAAE;AAAE,iBAAS,EAAE,IAAG,IAAG;AAAC,cAAI,KAAG,GAAG;AAAQ,cAAG,EAAE,MAAI,IAAG,GAAG,EAAE,IAAI,oBAAoB,GAAE,KAAG,EAAE,IAAI,2BAA0B,GAAG,EAAE,IAAI,iBAAiB,GAAE,KAAG,IAAG,CAAC,GAAE;AAAC,gBAAI,KAAG,GAAG,cAAc;AAAO,eAAG,cAAc,QAAQ,SAAS,IAAG;AAAC,iBAAG,uBAAuB,IAAG,WAAU;AAAC,kBAAE,MAAI,GAAG,kBAAkB;AAAA,cAAC,CAAC;AAAA,YAAC,CAAC;AAAA,UAAC;AAAA,QAAC;AAAC,aAAG,GAAG,kBAAkB;AAAE,iBAAS,GAAG,IAAG;AAAC,YAAE,GAAG,UAAS,GAAG,MAAM;AAAA,QAAC;AAAC,iBAAS,GAAG,IAAG;AAAC,iBAAO,GAAG,EAAE,KAAK,SAAS,IAAG;AAAC,mBAAO,YAAY,YAAY,IAAG,CAAC;AAAA,UAAC,CAAC,EAAE,KAAK,SAAS,IAAG;AAAC,mBAAO;AAAA,UAAE,CAAC,EAAE,KAAK,IAAG,SAAS,IAAG;AAAC,cAAE,4CAA0C,EAAE,GAAE,GAAG,EAAE;AAAA,UAAC,CAAC;AAAA,QAAC;AAAC,iBAAS,KAAI;AAAC,iBAAM,CAAC,MAAI,OAAO,YAAY,wBAAsB,cAAY,CAAC,GAAG,EAAE,KAAG,CAAC,GAAG,EAAE,KAAG,CAAC,KAAG,OAAO,SAAO,aAAW,MAAM,IAAG,EAAC,aAAY,cAAa,CAAC,EAAE,KAAK,SAAS,IAAG;AAAC,gBAAI,KAAG,YAAY,qBAAqB,IAAG,CAAC;AAAE,mBAAO,GAAG,KAAK,IAAG,SAAS,IAAG;AAAC,qBAAO,EAAE,oCAAkC,EAAE,GAAE,EAAE,2CAA2C,GAAE,GAAG,EAAE;AAAA,YAAC,CAAC;AAAA,UAAC,CAAC,IAAE,GAAG,EAAE;AAAA,QAAC;AAAC,YAAG,EAAE,gBAAgB,KAAG;AAAC,cAAI,KAAG,EAAE,gBAAgB,GAAE,CAAC;AAAE,iBAAO;AAAA,QAAE,SAAO,IAAG;AAAC,YAAE,wDAAsD,EAAE,GAAE,EAAE,EAAE;AAAA,QAAC;AAAC,eAAO,GAAG,EAAE,MAAM,CAAC,GAAE,CAAC;AAAA,MAAC;AAAC,UAAI,IAAG,IAAG,KAAG,CAAC;AAAE,eAAS,GAAG,GAAE;AAAC,aAAK,OAAK,cAAa,KAAK,UAAQ,kCAAgC,IAAE,KAAI,KAAK,SAAO;AAAA,MAAC;AAAC,eAAS,GAAG,GAAE;AAAC,YAAI,IAAE,GAAG,SAAS,CAAC;AAAE,eAAO,GAAG,SAAS,CAAC,GAAE,EAAE,UAAU,GAAE,GAAG,CAAC,GAAE,GAAG,eAAe,OAAO,GAAG,eAAe,QAAQ,CAAC,GAAE,CAAC,GAAE,EAAE,cAAY;AAAA,MAAC;AAAC,eAAS,GAAG,GAAE;AAAC,YAAI,IAAE,GAAG,SAAS,CAAC;AAAE,UAAE,YAAY,EAAC,KAAI,SAAQ,CAAC;AAAA,MAAC;AAAC,eAAS,GAAG,GAAE;AAAC,YAAI,IAAE,GAAG,SAAS,CAAC;AAAE,WAAG,CAAC,GAAE,GAAG,mBAAmB,CAAC;AAAA,MAAC;AAAC,eAAS,GAAG,GAAE;AAAC,YAAI,IAAE,GAAG,aAAa;AAAE,YAAG,CAAC,EAAE,QAAO;AAAE,WAAG,eAAe,KAAK,CAAC,GAAE,GAAG,SAAS,EAAE,WAAW,IAAE,GAAE,EAAE,cAAY,EAAE;AAAY,YAAI,KAAG,EAAC,KAAI,OAAM,eAAc,EAAE,cAAa,KAAI,EAAE,KAAI,aAAY,EAAE,YAAW;AAAE,eAAO,EAAE,aAAW,MAAI;AAAC,eAAG,EAAE,IAAI,GAAE,EAAE,YAAY,IAAG,EAAE,YAAY,GAAE,OAAO,EAAE;AAAA,QAAU,GAAE,EAAE,UAAQ,EAAE,WAAW,GAAE;AAAA,MAAC;AAAC,UAAI,KAAG,EAAC,SAAQ,QAAO,KAAI,WAAU;AAAC,WAAG,WAAS;AAAE,YAAI,IAAE,EAAE,EAAE,GAAG,UAAQ,MAAI,CAAC;AAAE,eAAO;AAAA,MAAC,GAAE,QAAO,SAAS,GAAE;AAAC,YAAI,IAAE,GAAG,CAAC;AAAE,eAAO;AAAA,MAAC,EAAC;AAAE,eAAS,GAAG,GAAE;AAAC,YAAG,EAAE,QAAO,GAAG,GAAE,GAAE,CAAC;AAAE,aAAG,GAAE,GAAG,MAAI,GAAG,oBAAoB,GAAE,EAAE,UAAQ,EAAE,OAAO,CAAC,GAAE,KAAG,OAAI,EAAE,GAAE,IAAI,GAAG,CAAC,CAAC;AAAA,MAAC;AAAC,eAAS,GAAG,GAAE,GAAE;AAAC,YAAG,KAAG,GAAE,CAAC,KAAG,EAAE,OAAM,GAAG,CAAC,GAAE;AAAS,WAAG,CAAC;AAAA,MAAC;AAAC,UAAI,KAAG;AAAG,eAAS,GAAG,GAAE;AAAC,YAAG,aAAa,MAAI,KAAG,SAAS,QAAO;AAAG,UAAE,GAAE,CAAC;AAAA,MAAC;AAAC,UAAI,KAAG,EAAC,eAAc,CAAC,GAAE,gBAAe,CAAC,GAAE,kBAAiB,CAAC,GAAE,UAAS,CAAC,GAAE,MAAK,WAAU;AAAC,YAAE,GAAG,WAAW,IAAE,GAAG,eAAe;AAAA,MAAC,GAAE,gBAAe,WAAU;AAAC,iBAAQ,IAAE,GAAE,MAAK,IAAG,qBAAqB;AAAA,MAAC,GAAE,YAAW,WAAU;AAAC,aAAG;AAAA,MAAE,GAAE,eAAc,SAAS,GAAE;AAAC,aAAG;AAAA,MAAC,GAAE,qBAAoB,WAAU;AAAC,iBAAQ,KAAK,OAAO,OAAO,GAAG,QAAQ,EAAE,IAAG,mBAAmB,CAAC;AAAE,iBAAQ,KAAK,GAAG,cAAc,GAAE,UAAU;AAAE,WAAG,gBAAc,CAAC;AAAA,MAAC,GAAE,oBAAmB,SAAS,GAAE;AAAC,YAAI,IAAE,EAAE;AAAY,eAAO,GAAG,SAAS,CAAC,GAAE,GAAG,cAAc,KAAK,CAAC,GAAE,GAAG,eAAe,OAAO,GAAG,eAAe,QAAQ,CAAC,GAAE,CAAC,GAAE,EAAE,cAAY,GAAE,KAAG,EAAE,MAAM,GAAE,GAAG,CAAC;AAAA,MAAC,GAAE,uBAAsB,SAAS,GAAE;AAAA,MAAC,GAAE,eAAc,WAAU;AAAC,WAAG,iBAAiB,QAAQ,OAAG,EAAE,CAAC;AAAA,MAAC,GAAE,wBAAuB,SAAS,GAAE,GAAE;AAAC,UAAE,YAAU,QAAI;AAAC,cAAI,KAAG,GAAG,MAAK,KAAG,GAAG;AAAI,cAAG,EAAE,gBAAc,GAAG,sCAAoC,EAAE,cAAa,GAAG,gBAAc,GAAG,gBAAc,GAAG,GAAE;AAAC,gBAAI,KAAG,GAAG,SAAS,GAAG,YAAY;AAAE,iBAAG,GAAG,YAAY,IAAG,GAAG,YAAY,IAAE,EAAE,4CAA0C,KAAG,yBAAuB,GAAG,eAAa,qCAAqC,GAAE,GAAG,sCAAoC;AAAO;AAAA,UAAM;AAAC,iBAAK,yBAAuB,GAAG,GAAG,KAAK,IAAE,OAAK,gBAAc,GAAG,EAAE,IAAE,OAAK,kBAAgB,GAAG,GAAG,MAAM,IAAE,OAAK,eAAa,GAAG,GAAG,MAAM,IAAE,OAAK,iBAAe,GAAG,GAAG,MAAM,IAAE,OAAK,YAAU,EAAE,SAAO,MAAG,KAAG,EAAE,MAAM,GAAE,KAAG,EAAE,CAAC,GAAE,EAAE,cAAY,EAAE,WAAW,KAAG,OAAK,UAAQ,EAAE,YAAU,GAAG,WAAS,OAAK,GAAG,IAAI,IAAE,OAAK,aAAW,EAAE,YAAU,GAAG,WAAS,OAAK,GAAG,IAAI,IAAE,OAAK,UAAQ,MAAM,YAAU,GAAG,WAAS,OAAK,GAAG,IAAI,IAAE,GAAG,WAAS,iBAAe,EAAE,YAAY,EAAE,IAAE,OAAK,gBAAc,EAAE,GAAG,OAAO,EAAE,GAAG,GAAG,IAAI,IAAE,MAAI,EAAE,oCAAkC,EAAE,GAAE,GAAG,sCAAoC;AAAA,QAAM,GAAE,EAAE,UAAQ,QAAI;AAAC,cAAI,KAAG;AAAwB,gBAAM,EAAE,KAAG,MAAI,GAAG,WAAS,MAAI,GAAG,SAAO,OAAK,GAAG,OAAO,GAAE;AAAA,QAAE,GAAE,MAAI,EAAE,GAAG,WAAU,SAAS,IAAG;AAAC,YAAE,UAAU,EAAC,MAAK,GAAE,CAAC;AAAA,QAAC,CAAC,GAAE,EAAE,GAAG,SAAQ,SAAS,IAAG;AAAC,YAAE,QAAQ,EAAE;AAAA,QAAC,CAAC,GAAE,EAAE,GAAG,gBAAe,WAAU;AAAA,QAAC,CAAC;AAAG,YAAI,KAAG,CAAC,GAAE,KAAG,CAAC,UAAS,WAAU,SAAQ,UAAU;AAAE,iBAAQ,MAAM,GAAG,GAAE,eAAe,EAAE,KAAG,GAAG,KAAK,EAAE;AAAE,UAAE,YAAY,EAAC,KAAI,QAAO,UAAS,IAAG,WAAU,EAAE,uBAAqBA,KAAE,YAAW,IAAG,YAAW,GAAE,CAAC;AAAA,MAAC,GAAE,sBAAqB,WAAU;AAAC,YAAI,GAAE,IAAE,EAAE,2CAA2C;AAAE,YAAE,IAAI,OAAO,CAAC,GAAE,GAAG,cAAc,KAAK,CAAC;AAAA,MAAC,GAAE,cAAa,WAAU;AAAC,eAAO,GAAG,cAAc,UAAQ,MAAI,GAAG,qBAAqB,GAAE,GAAG,uBAAuB,GAAG,cAAc,CAAC,CAAC,IAAG,GAAG,cAAc,IAAI;AAAA,MAAC,EAAC;AAAE,QAAE,UAAQ;AAAG,eAAS,GAAG,GAAE;AAAC,eAAK,EAAE,SAAO,IAAG,GAAE,MAAM,EAAE,CAAC;AAAA,MAAC;AAAC,eAAS,KAAI;AAAC,YAAI,IAAE,GAAG,GAAE,IAAE,EAAE,EAAE,IAAE,OAAK,CAAC,GAAE,KAAG,EAAE,EAAE,IAAE,OAAK,CAAC,GAAE,KAAG,IAAE;AAAG,WAAG,GAAE,EAAE,GAAE,GAAG,CAAC;AAAA,MAAC;AAAC,QAAE,sBAAoB;AAAG,eAAS,GAAG,GAAE;AAAC,YAAG,EAAE,QAAO,GAAG,GAAE,GAAE,CAAC;AAAE,YAAG;AAAC,aAAG,CAAC;AAAA,QAAC,SAAO,GAAE;AAAC,aAAG,CAAC;AAAA,QAAC;AAAA,MAAC;AAAC,UAAI,KAAG,CAAC;AAAE,eAAS,GAAG,GAAE;AAAC,YAAI,IAAE,GAAG,CAAC;AAAE,eAAO,MAAI,KAAG,GAAG,WAAS,GAAG,SAAO,IAAE,IAAG,GAAG,CAAC,IAAE,IAAE,GAAG,IAAI,CAAC,IAAG;AAAA,MAAC;AAAC,eAAS,GAAG,GAAE,GAAE;AAAC,YAAI,KAAG,GAAG,CAAC,EAAE,CAAC;AAAE,WAAG,IAAE,GAAG,cAAc,EAAE,IAAE,GAAG,EAAE;AAAA,MAAC;AAAC,QAAE,mBAAiB;AAAG,eAAS,GAAG,GAAE;AAAC,WAAG,iBAAiB,KAAK,CAAC;AAAA,MAAC;AAAC,eAAS,GAAG,GAAE;AAAC,WAAG,GAAE,CAAC,GAAE,GAAE,CAAC,CAAC,GAAE,GAAG,cAAc;AAAA,MAAC;AAAC,eAAS,GAAG,GAAE;AAAC,YAAE,YAAY,EAAC,KAAI,iBAAgB,QAAO,EAAC,CAAC,IAAE,GAAG,CAAC;AAAA,MAAC;AAAC,eAAS,GAAG,GAAE,GAAE,IAAG,IAAG;AAAC,eAAO,IAAE,GAAG,GAAE,GAAE,GAAE,GAAE,IAAG,EAAE,IAAE,GAAG,GAAE,GAAE,IAAG,EAAE;AAAA,MAAC;AAAC,eAAS,GAAG,GAAE,GAAE,IAAG,IAAG;AAAC,YAAG,OAAO,qBAAmB,YAAY,QAAO,EAAE,qFAAqF,GAAE;AAAE,YAAI,KAAG,CAAC,GAAE,KAAG;AAAE,YAAG,MAAI,GAAG,WAAS,KAAG,IAAI,QAAO,GAAG,GAAE,GAAE,IAAG,EAAE;AAAE,YAAG,GAAG,QAAO;AAAG,YAAI,KAAG,EAAC,cAAa,IAAG,aAAY,GAAE,KAAI,IAAG,cAAa,GAAE;AAAE,eAAO,KAAG,GAAG,MAAI,eAAc,YAAY,IAAG,EAAE,GAAE,KAAG,GAAG,EAAE;AAAA,MAAC;AAAC,eAAS,KAAI;AAAC,eAAO;AAAA,MAAK;AAAC,UAAI,KAAG;AAAG,eAAS,KAAI;AAAC,eAAO;AAAA,MAAE;AAAC,eAAS,GAAG,GAAE;AAAC,gBAAQ,MAAM,EAAE,GAAE,KAAG,GAAE,CAAC,GAAE,GAAG,KAAG,GAAG,CAAC,GAAE,QAAQ,gBAAgB,EAAE,GAAE,KAAG,GAAE,GAAE,CAAC;AAAA,MAAC;AAAC,QAAE,+BAA6B;AAAG,eAAS,GAAG,GAAE,GAAE,IAAG,IAAG;AAAC,YAAG,KAAG,EAAE,YAAW,MAAI,GAAG,EAAE,CAAC;AAAA,iBAAU,EAAE,aAAY,EAAC,cAAa,GAAE,KAAI,wBAAuB,OAAM,GAAE,CAAC;AAAA,aAAM;AAAC,cAAI,KAAG,GAAG,SAAS,CAAC;AAAE,cAAG,CAAC,GAAG;AAAO,aAAG,YAAY,EAAC,KAAI,wBAAuB,OAAM,GAAE,CAAC;AAAA,QAAC;AAAC,eAAO;AAAA,MAAC;AAAC,eAAS,GAAG,GAAE,GAAE,IAAG;AAAC,eAAM;AAAA,MAAE;AAAC,eAAS,KAAI;AAAC,WAAG,EAAE;AAAA,MAAC;AAAC,eAAS,GAAG,GAAE;AAAC,WAAG,UAAQ,GAAG,QAAM,CAAC,IAAG,GAAG,MAAM,CAAC,MAAI,GAAG,MAAM,CAAC,IAAE,GAAE,MAAI,IAAE,cAAY,IAAG,EAAE,CAAC;AAAA,MAAE;AAAC,eAAS,KAAI;AAAC,aAAG,KAAG,GAAG,0IAA0I;AAAA,MAAC;AAAC,eAAS,KAAI;AAAC,eAAO,KAAK,IAAI;AAAA,MAAC;AAAC,eAAS,KAAI;AAAC,eAAO;AAAA,MAAU;AAAC,eAAS,KAAI;AAAC,eAAO,GAAG;AAAA,MAAC;AAAC,UAAI;AAAG,UAAE,KAAG,MAAI;AAAC,YAAI,IAAE,QAAQ,OAAO;AAAE,eAAO,EAAE,CAAC,IAAE,MAAI,EAAE,CAAC,IAAE;AAAA,MAAG,IAAE,KAAG,MAAI,YAAY,aAAW,YAAY,IAAI;AAAE,eAAS,GAAG,GAAE,GAAE,IAAG;AAAC,UAAE,EAAE,WAAW,MAAI,GAAE,MAAI,GAAE,IAAE,OAAK,CAAC;AAAA,MAAC;AAAC,eAAS,KAAI;AAAC,eAAO,IAAE,GAAG,EAAE,KAAK,EAAE,SAAO,UAAU;AAAA,MAAmB;AAAC,eAAS,GAAG,GAAE;AAAC,YAAI,IAAE,GAAG,GAAE,KAAG,EAAE;AAAE,eAAO,GAAG,CAAC,GAAE;AAAA,MAAE;AAAC,eAAS,GAAG,GAAE,GAAE;AAAC,YAAI,KAAG,UAAU,SAAO,GAAE,KAAG;AAAU,eAAO,GAAG,MAAI;AAAC,mBAAQ,KAAG,IAAG,KAAG,GAAG,KAAG,CAAC,GAAE,KAAG,MAAI,GAAE,KAAG,GAAE,KAAG,IAAG,MAAK;AAAC,gBAAI,KAAG,GAAG,IAAE,EAAE;AAAE,cAAE,EAAE,KAAG,OAAK,CAAC,IAAE;AAAA,UAAE;AAAC,iBAAO,GAAG,GAAE,IAAG,IAAG,CAAC;AAAA,QAAC,CAAC;AAAA,MAAC;AAAC,UAAI,KAAG,CAAC;AAAE,eAAS,GAAG,GAAE,GAAE,IAAG;AAAC,WAAG,SAAO;AAAE,iBAAQ,KAAG,MAAI,GAAE,KAAG,GAAE,KAAG,GAAE,KAAK,IAAG,EAAE,IAAE,EAAE,EAAE,KAAG,OAAK,CAAC;AAAE,YAAI,KAAG,IAAE,GAAE,KAAG,KAAG,GAAG,CAAC,IAAE,CAAC,IAAE,GAAG,CAAC;AAAE,eAAO,GAAG,MAAM,MAAK,EAAE;AAAA,MAAC;AAAC,eAAS,GAAG,GAAE;AAAC,YAAG;AAAC,iBAAO,GAAG,KAAK,IAAE,GAAG,aAAW,UAAQ,EAAE,GAAE,GAAG,GAAG,MAAM,GAAE;AAAA,QAAC,SAAO,GAAE;AAAA,QAAC;AAAA,MAAC;AAAC,eAAS,GAAG,GAAE;AAAC,YAAI,IAAE,EAAE,EAAE;AAAO,YAAG,IAAE,MAAI,GAAE,KAAG,EAAE,QAAM;AAAG,YAAI,KAAG,GAAG;AAAE,YAAG,IAAE,GAAG,QAAM;AAAG,YAAI,KAAG,CAAC,IAAG,OAAK,MAAI,KAAG,KAAG,MAAI;AAAG,iBAAQ,KAAG,GAAE,MAAI,GAAE,MAAI,GAAE;AAAC,cAAI,KAAG,KAAG,IAAE,MAAG;AAAI,eAAG,KAAK,IAAI,IAAG,IAAE,SAAS;AAAE,cAAI,KAAG,KAAK,IAAI,IAAG,GAAG,KAAK,IAAI,GAAE,EAAE,GAAE,KAAK,CAAC,GAAE,KAAG,GAAG,EAAE;AAAE,cAAG,GAAG,QAAM;AAAA,QAAE;AAAC,eAAM;AAAA,MAAE;AAAC,eAAS,KAAI;AAAC,cAAK;AAAA,MAAQ;AAAC,eAAS,GAAG,GAAE;AAAC,eAAO,IAAE,GAAG,GAAE,GAAE,CAAC,IAAE;AAAA,MAAE;AAAC,eAAS,GAAG,GAAE,GAAE,IAAG,IAAG,IAAG;AAAC,eAAO,IAAE,GAAG,GAAE,GAAE,GAAE,GAAE,IAAG,IAAG,EAAE,IAAE;AAAA,MAAE;AAAC,UAAI,KAAG,CAAC,MAAK,CAAC,GAAE,CAAC,CAAC;AAAE,eAAS,GAAG,GAAE,GAAE;AAAC,YAAI,KAAG,GAAG,CAAC;AAAE,cAAI,KAAG,MAAI,OAAK,MAAI,IAAE,IAAE,GAAG,GAAG,IAAG,CAAC,CAAC,GAAE,GAAG,SAAO,KAAG,GAAG,KAAK,CAAC;AAAA,MAAC;AAAC,eAAS,GAAG,GAAE,GAAE,IAAG,IAAG;AAAC,YAAG,EAAE,QAAO,GAAG,GAAE,GAAE,GAAE,GAAE,IAAG,EAAE;AAAE,iBAAQ,KAAG,GAAE,KAAG,GAAE,KAAG,IAAG,MAAK;AAAC,cAAI,KAAG,EAAE,EAAE,MAAI,CAAC,GAAE,KAAG,EAAE,EAAE,IAAE,MAAI,CAAC;AAAE,eAAG;AAAE,mBAAQ,KAAG,GAAE,KAAG,IAAG,KAAK,IAAG,GAAE,EAAE,EAAE,KAAG,OAAK,CAAC,CAAC;AAAE,gBAAI;AAAA,QAAE;AAAC,eAAO,EAAE,EAAE,OAAK,CAAC,IAAE,IAAG;AAAA,MAAC;AAAC,eAAS,GAAG,GAAE;AAAC,YAAI,IAAE,EAAE,MAAI,CAAC;AAAE,eAAO;AAAA,MAAC;AAAC,eAAS,GAAG,GAAE,GAAE;AAAC,QAAAC,IAAE,EAAE,IAAI,GAAE,MAAI,CAAC;AAAA,MAAC;AAAC,eAAS,GAAG,GAAE,GAAE,IAAG,IAAG,IAAG;AAAC,YAAI,KAAG,EAAC,QAAO,QAAI;AAAC,cAAI,KAAG;AAAE,cAAG,MAAI,QAAM,OAAK,GAAE;AAAC,gBAAI,MAAI,GAAG,UAAQ,KAAG;AAAE,iBAAG,GAAG,EAAE,GAAE,GAAG,IAAG,IAAG,EAAE;AAAA,UAAC;AAAC,iBAAO;AAAA,QAAE,GAAE,OAAM,QAAI;AAAC,cAAI,KAAG,GAAG,GAAG,MAAM;AAAE,iBAAO,GAAG,IAAG,EAAE,GAAE;AAAA,QAAE,EAAC;AAAE,iBAAS,GAAG,IAAG;AAAC,iBAAO,MAAI,WAAS,GAAG,EAAE,IAAE,MAAI,YAAU,CAAC,CAAC,KAAG;AAAA,QAAE;AAAC,YAAI,KAAG,GAAG,CAAC,GAAE,KAAG,CAAC,GAAE,KAAG;AAAE,YAAG,GAAG,UAAQ,KAAG,GAAE,KAAG,GAAG,QAAO,MAAK;AAAC,cAAI,KAAG,GAAG,GAAG,EAAE,CAAC;AAAE,gBAAI,OAAK,MAAI,KAAG,GAAG,IAAG,GAAG,EAAE,IAAE,GAAG,GAAG,EAAE,CAAC,KAAG,GAAG,EAAE,IAAE,GAAG,EAAE;AAAA,QAAC;AAAC,YAAI,KAAG,GAAG,MAAM,MAAK,EAAE;AAAE,iBAAS,GAAG,IAAG;AAAC,iBAAO,OAAK,KAAG,GAAG,EAAE,GAAE,GAAG,EAAE;AAAA,QAAC;AAAC,eAAO,KAAG,GAAG,EAAE,GAAE;AAAA,MAAE;AAAC,eAAS,GAAG,GAAE,GAAE,IAAG,IAAG;AAAC,aAAG,MAAI,CAAC;AAAE,YAAI,KAAG,GAAG,MAAM,QAAI,OAAK,YAAU,OAAK,SAAS,GAAE,KAAG,MAAI;AAAS,eAAO,MAAI,MAAI,CAAC,KAAG,GAAG,CAAC,IAAE,WAAU;AAAC,iBAAO,GAAG,GAAE,GAAE,IAAG,WAAU,EAAE;AAAA,QAAC;AAAA,MAAC;AAAC,SAAG,KAAK;AAAE,UAAI,KAAG,CAAC,MAAK,IAAG,IAAG,IAAG,IAAG,IAAG,EAAE,GAAE,KAAG,EAAC,kCAAiC,IAAG,6BAA4B,IAAG,qBAAoB,IAAG,wCAAuC,IAAG,kCAAiC,IAAG,+BAA8B,IAAG,sCAAqC,IAAG,OAAM,IAAG,mCAAkC,IAAG,qBAAoB,IAAG,yBAAwB,IAAG,oBAAmB,IAAG,uBAAsB,IAAG,8BAA6B,IAAG,sCAAqC,IAAG,wBAAuB,IAAG,oCAAmC,IAAG,MAAK,IAAG,UAAS,IAAG,SAAQ,IAAG,UAAS,IAAG,QAAO,MAAI,EAAE,WAAU,GAAE,KAAG,GAAG,GAAE,KAAG,EAAE,qBAAmB,WAAU;AAAC,gBAAO,KAAG,EAAE,qBAAmB,EAAE,IAAI,mBAAmB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,QAAM,WAAU;AAAC,gBAAO,KAAG,EAAE,QAAM,EAAE,IAAI,MAAM,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,2BAAyB,WAAU;AAAC,gBAAO,KAAG,EAAE,2BAAyB,EAAE,IAAI,yBAAyB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,qBAAmB,WAAU;AAAC,gBAAO,KAAG,EAAE,qBAAmB,EAAE,IAAI,mBAAmB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,mBAAiB,WAAU;AAAC,gBAAO,KAAG,EAAE,mBAAiB,EAAE,IAAI,iBAAiB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,gBAAc,WAAU;AAAC,gBAAO,KAAG,EAAE,gBAAc,EAAE,IAAI,cAAc,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,WAAS,WAAU;AAAC,gBAAO,KAAG,EAAE,WAAS,EAAE,IAAI,SAAS,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,OAAK,WAAU;AAAC,gBAAO,KAAG,EAAE,OAAK,EAAE,IAAI,KAAK,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,QAAM,WAAU;AAAC,gBAAO,KAAG,EAAE,QAAM,EAAE,IAAI,MAAM,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,SAAO,WAAU;AAAC,gBAAO,KAAG,EAAE,SAAO,EAAE,IAAI,OAAO,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,OAAK,WAAU;AAAC,gBAAO,KAAG,EAAE,OAAK,EAAE,IAAI,KAAK,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,QAAM,WAAU;AAAC,gBAAO,KAAG,EAAE,QAAM,EAAE,IAAI,MAAM,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,OAAK,WAAU;AAAC,gBAAO,KAAG,EAAE,OAAK,EAAE,IAAI,KAAK,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,OAAK,WAAU;AAAC,gBAAO,KAAG,EAAE,OAAK,EAAE,IAAI,KAAK,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,UAAQ,WAAU;AAAC,gBAAO,KAAG,EAAE,UAAQ,EAAE,IAAI,QAAQ,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,UAAQ,WAAU;AAAC,gBAAO,KAAG,EAAE,UAAQ,EAAE,IAAI,QAAQ,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,QAAM,WAAU;AAAC,gBAAO,KAAG,EAAE,QAAM,EAAE,IAAI,MAAM,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,SAAO,WAAU;AAAC,gBAAO,KAAG,EAAE,SAAO,EAAE,IAAI,OAAO,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,QAAM,WAAU;AAAC,gBAAO,KAAG,EAAE,QAAM,EAAE,IAAI,MAAM,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,SAAO,WAAU;AAAC,gBAAO,KAAG,EAAE,SAAO,EAAE,IAAI,OAAO,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,SAAO,WAAU;AAAC,gBAAO,KAAG,EAAE,SAAO,EAAE,IAAI,OAAO,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,WAAS,WAAU;AAAC,gBAAO,KAAG,EAAE,WAAS,EAAE,IAAI,SAAS,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,aAAW,WAAU;AAAC,gBAAO,KAAG,EAAE,aAAW,EAAE,IAAI,WAAW,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,iBAAe,WAAU;AAAC,gBAAO,KAAG,EAAE,iBAAe,EAAE,IAAI,eAAe,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,eAAa,WAAU;AAAC,gBAAO,KAAG,EAAE,eAAa,EAAE,IAAI,aAAa,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,eAAa,WAAU;AAAC,gBAAO,KAAG,EAAE,eAAa,EAAE,IAAI,aAAa,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,YAAU,WAAU;AAAC,gBAAO,KAAG,EAAE,YAAU,EAAE,IAAI,UAAU,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,cAAY,WAAU;AAAC,gBAAO,KAAG,EAAE,cAAY,EAAE,IAAI,YAAY,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,QAAM,WAAU;AAAC,gBAAO,KAAG,EAAE,QAAM,EAAE,IAAI,MAAM,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,eAAa,WAAU;AAAC,gBAAO,KAAG,EAAE,eAAa,EAAE,IAAI,aAAa,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,UAAQ,WAAU;AAAC,gBAAO,KAAG,EAAE,UAAQ,EAAE,IAAI,QAAQ,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,uBAAqB,WAAU;AAAC,gBAAO,KAAG,EAAE,uBAAqB,EAAE,IAAI,qBAAqB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,UAAQ,WAAU;AAAC,gBAAO,KAAG,EAAE,UAAQ,EAAE,IAAI,QAAQ,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,0BAAwB,WAAU;AAAC,gBAAO,KAAG,EAAE,0BAAwB,EAAE,IAAI,wBAAwB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,yBAAuB,WAAU;AAAC,gBAAO,KAAG,EAAE,yBAAuB,EAAE,IAAI,uBAAuB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,OAAK,WAAU;AAAC,gBAAO,KAAG,EAAE,OAAK,EAAE,IAAI,KAAK,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,QAAM,WAAU;AAAC,gBAAO,KAAG,EAAE,QAAM,EAAE,IAAI,MAAM,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,iBAAe,WAAU;AAAC,gBAAO,KAAG,EAAE,iBAAe,EAAE,IAAI,eAAe,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,WAAS,WAAU;AAAC,gBAAO,KAAG,EAAE,WAAS,EAAE,IAAI,SAAS,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,UAAQ,WAAU;AAAC,gBAAO,KAAG,EAAE,UAAQ,EAAE,IAAI,QAAQ,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,iBAAe,WAAU;AAAC,gBAAO,KAAG,EAAE,iBAAe,EAAE,IAAI,eAAe,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,gBAAc,WAAU;AAAC,gBAAO,KAAG,EAAE,gBAAc,EAAE,IAAI,cAAc,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,yBAAuB,WAAU;AAAC,gBAAO,KAAG,EAAE,yBAAuB,EAAE,IAAI,uBAAuB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,QAAM,WAAU;AAAC,gBAAO,KAAG,EAAE,QAAM,EAAE,IAAI,MAAM,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,cAAY,WAAU;AAAC,gBAAO,KAAG,EAAE,cAAY,EAAE,IAAI,YAAY,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,4BAA0B,WAAU;AAAC,gBAAO,KAAG,EAAE,4BAA0B,EAAE,IAAI,0BAA0B,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,2BAAyB,WAAU;AAAC,gBAAO,KAAG,EAAE,2BAAyB,EAAE,IAAI,yBAAyB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,OAAK,WAAU;AAAC,gBAAO,KAAG,EAAE,OAAK,EAAE,IAAI,KAAK,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,WAAS,WAAU;AAAC,gBAAO,KAAG,EAAE,WAAS,EAAE,IAAI,SAAS,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,SAAO,WAAU;AAAC,gBAAO,KAAG,EAAE,SAAO,EAAE,IAAI,OAAO,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,OAAK,WAAU;AAAC,gBAAO,KAAG,EAAE,OAAK,EAAE,IAAI,KAAK,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,OAAK,WAAU;AAAC,gBAAO,KAAG,EAAE,OAAK,EAAE,IAAI,KAAK,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,SAAO,WAAU;AAAC,gBAAO,KAAG,EAAE,SAAO,EAAE,IAAI,OAAO,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,iBAAe,WAAU;AAAC,gBAAO,KAAG,EAAE,iBAAe,EAAE,IAAI,eAAe,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,SAAO,WAAU;AAAC,gBAAO,KAAG,EAAE,SAAO,EAAE,IAAI,OAAO,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,YAAU,WAAU;AAAC,gBAAO,KAAG,EAAE,YAAU,EAAE,IAAI,UAAU,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,kBAAgB,WAAU;AAAC,gBAAO,KAAG,EAAE,kBAAgB,EAAE,IAAI,gBAAgB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,eAAa,WAAU;AAAC,gBAAO,KAAG,EAAE,eAAa,EAAE,IAAI,aAAa,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,wBAAsB,WAAU;AAAC,gBAAO,KAAG,EAAE,wBAAsB,EAAE,IAAI,sBAAsB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,UAAQ,WAAU;AAAC,gBAAO,KAAG,EAAE,UAAQ,EAAE,IAAI,QAAQ,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,YAAU,WAAU;AAAC,gBAAO,KAAG,EAAE,YAAU,EAAE,IAAI,UAAU,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,WAAS,WAAU;AAAC,gBAAO,KAAG,EAAE,WAAS,EAAE,IAAI,SAAS,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,gBAAc,WAAU;AAAC,gBAAO,KAAG,EAAE,gBAAc,EAAE,IAAI,cAAc,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,YAAU,WAAU;AAAC,gBAAO,KAAG,EAAE,YAAU,EAAE,IAAI,UAAU,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,SAAO,WAAU;AAAC,gBAAO,KAAG,EAAE,SAAO,EAAE,IAAI,OAAO,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,SAAO,WAAU;AAAC,gBAAO,KAAG,EAAE,SAAO,EAAE,IAAI,OAAO,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,OAAK,WAAU;AAAC,gBAAO,KAAG,EAAE,OAAK,EAAE,IAAI,KAAK,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,WAAS,WAAU;AAAC,gBAAO,KAAG,EAAE,WAAS,EAAE,IAAI,SAAS,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,aAAW,WAAU;AAAC,gBAAO,KAAG,EAAE,aAAW,EAAE,IAAI,WAAW,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,QAAM,WAAU;AAAC,gBAAO,KAAG,EAAE,QAAM,EAAE,IAAI,MAAM,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,aAAW,WAAU;AAAC,gBAAO,KAAG,EAAE,aAAW,EAAE,IAAI,WAAW,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,YAAU,WAAU;AAAC,gBAAO,KAAG,EAAE,YAAU,EAAE,IAAI,UAAU,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,OAAK,WAAU;AAAC,gBAAO,KAAG,EAAE,OAAK,EAAE,IAAI,KAAK,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,SAAO,WAAU;AAAC,gBAAO,KAAG,EAAE,SAAO,EAAE,IAAI,OAAO,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,cAAY,WAAU;AAAC,gBAAO,KAAG,EAAE,cAAY,EAAE,IAAI,YAAY,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,cAAY,WAAU;AAAC,gBAAO,KAAG,EAAE,cAAY,EAAE,IAAI,YAAY,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,aAAW,WAAU;AAAC,gBAAO,KAAG,EAAE,aAAW,EAAE,IAAI,WAAW,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,cAAY,WAAU;AAAC,gBAAO,KAAG,EAAE,cAAY,EAAE,IAAI,YAAY,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,OAAK,WAAU;AAAC,gBAAO,KAAG,EAAE,OAAK,EAAE,IAAI,KAAK,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,WAAS,WAAU;AAAC,gBAAO,KAAG,EAAE,WAAS,EAAE,IAAI,SAAS,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,aAAW,WAAU;AAAC,gBAAO,KAAG,EAAE,aAAW,EAAE,IAAI,WAAW,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,iBAAe,WAAU;AAAC,gBAAO,KAAG,EAAE,iBAAe,EAAE,IAAI,eAAe,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,eAAa,WAAU;AAAC,gBAAO,KAAG,EAAE,eAAa,EAAE,IAAI,aAAa,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,qBAAmB,WAAU;AAAC,gBAAO,KAAG,EAAE,qBAAmB,EAAE,IAAI,mBAAmB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,WAAS,WAAU;AAAC,gBAAO,KAAG,EAAE,WAAS,EAAE,IAAI,SAAS,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,QAAM,WAAU;AAAC,gBAAO,KAAG,EAAE,QAAM,EAAE,IAAI,MAAM,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,OAAK,WAAU;AAAC,gBAAO,KAAG,EAAE,OAAK,EAAE,IAAI,KAAK,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,WAAS,WAAU;AAAC,gBAAO,KAAG,EAAE,WAAS,EAAE,IAAI,SAAS,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,aAAW,WAAU;AAAC,gBAAO,KAAG,EAAE,aAAW,EAAE,IAAI,WAAW,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,OAAK,WAAU;AAAC,gBAAO,KAAG,EAAE,OAAK,EAAE,IAAI,KAAK,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,eAAa,WAAU;AAAC,gBAAO,KAAG,EAAE,eAAa,EAAE,IAAI,aAAa,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,YAAU,WAAU;AAAC,gBAAO,KAAG,EAAE,YAAU,EAAE,IAAI,UAAU,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,OAAK,WAAU;AAAC,gBAAO,KAAG,EAAE,OAAK,EAAE,IAAI,KAAK,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,uBAAqB,WAAU;AAAC,gBAAO,KAAG,EAAE,uBAAqB,EAAE,IAAI,qBAAqB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,uBAAqB,WAAU;AAAC,gBAAO,KAAG,EAAE,uBAAqB,EAAE,IAAI,qBAAqB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,uBAAqB,WAAU;AAAC,gBAAO,KAAG,EAAE,uBAAqB,EAAE,IAAI,qBAAqB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,YAAU,WAAU;AAAC,gBAAO,KAAG,EAAE,YAAU,EAAE,IAAI,UAAU,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,UAAQ,WAAU;AAAC,gBAAO,KAAG,EAAE,UAAQ,EAAE,IAAI,QAAQ,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,SAAO,WAAU;AAAC,gBAAO,KAAG,EAAE,SAAO,EAAE,IAAI,OAAO,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,OAAK,WAAU;AAAC,gBAAO,KAAG,EAAE,OAAK,EAAE,IAAI,KAAK,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,SAAO,WAAU;AAAC,gBAAO,KAAG,EAAE,SAAO,EAAE,IAAI,OAAO,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,QAAM,WAAU;AAAC,gBAAO,KAAG,EAAE,QAAM,EAAE,IAAI,MAAM,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,WAAS,WAAU;AAAC,gBAAO,KAAG,EAAE,WAAS,EAAE,IAAI,SAAS,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,cAAY,WAAU;AAAC,gBAAO,KAAG,EAAE,cAAY,EAAE,IAAI,YAAY,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,QAAM,WAAU;AAAC,gBAAO,KAAG,EAAE,QAAM,EAAE,IAAI,MAAM,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,IAAE,EAAE,SAAO,WAAU;AAAC,gBAAO,IAAE,EAAE,SAAO,EAAE,IAAI,OAAO,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,kBAAgB,WAAU;AAAC,gBAAO,KAAG,EAAE,kBAAgB,EAAE,IAAI,gBAAgB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,sBAAoB,WAAU;AAAC,gBAAO,KAAG,EAAE,sBAAoB,EAAE,IAAI,oBAAoB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,yBAAuB,WAAU;AAAC,gBAAO,KAAG,EAAE,yBAAuB,EAAE,IAAI,uBAAuB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,6BAA2B,WAAU;AAAC,gBAAO,KAAG,EAAE,6BAA2B,EAAE,IAAI,2BAA2B,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,WAAS,WAAU;AAAC,gBAAO,KAAG,EAAE,WAAS,EAAE,IAAI,SAAS,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,oBAAkB,WAAU;AAAC,gBAAO,KAAG,EAAE,oBAAkB,EAAE,IAAI,kBAAkB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,SAAO,WAAU;AAAC,gBAAO,KAAG,EAAE,SAAO,EAAE,IAAI,OAAO,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,SAAO,WAAU;AAAC,gBAAO,KAAG,EAAE,SAAO,EAAE,IAAI,OAAO,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,aAAW,WAAU;AAAC,gBAAO,KAAG,EAAE,aAAW,EAAE,IAAI,WAAW,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,gBAAc,WAAU;AAAC,gBAAO,KAAG,EAAE,gBAAc,EAAE,IAAI,cAAc,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,YAAU,WAAU;AAAC,gBAAO,KAAG,EAAE,YAAU,EAAE,IAAI,UAAU,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,QAAM,WAAU;AAAC,gBAAO,KAAG,EAAE,QAAM,EAAE,IAAI,MAAM,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,WAAS,WAAU;AAAC,gBAAO,KAAG,EAAE,WAAS,EAAE,IAAI,SAAS,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,QAAM,WAAU;AAAC,gBAAO,KAAG,EAAE,QAAM,EAAE,IAAI,MAAM,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,OAAK,WAAU;AAAC,gBAAO,KAAG,EAAE,OAAK,EAAE,IAAI,KAAK,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,QAAM,WAAU;AAAC,gBAAO,KAAG,EAAE,QAAM,EAAE,IAAI,MAAM,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,WAAS,WAAU;AAAC,gBAAO,KAAG,EAAE,WAAS,EAAE,IAAI,SAAS,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,YAAU,WAAU;AAAC,gBAAO,KAAG,EAAE,YAAU,EAAE,IAAI,UAAU,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,uBAAqB,WAAU;AAAC,gBAAO,KAAG,EAAE,uBAAqB,EAAE,IAAI,qBAAqB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,iBAAe,WAAU;AAAC,gBAAO,KAAG,EAAE,iBAAe,EAAE,IAAI,eAAe,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,0BAAwB,WAAU;AAAC,gBAAO,KAAG,EAAE,0BAAwB,EAAE,IAAI,wBAAwB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,iBAAe,WAAU;AAAC,gBAAO,KAAG,EAAE,iBAAe,EAAE,IAAI,eAAe,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,QAAM,WAAU;AAAC,gBAAO,KAAG,EAAE,QAAM,EAAE,IAAI,MAAM,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,UAAQ,WAAU;AAAC,gBAAO,KAAG,EAAE,UAAQ,EAAE,IAAI,QAAQ,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,qBAAmB,WAAU;AAAC,gBAAO,KAAG,EAAE,qBAAmB,EAAE,IAAI,mBAAmB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,QAAM,WAAU;AAAC,gBAAO,KAAG,EAAE,QAAM,EAAE,IAAI,MAAM,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,gBAAc,WAAU;AAAC,gBAAO,KAAG,EAAE,gBAAc,EAAE,IAAI,cAAc,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,OAAK,WAAU;AAAC,gBAAO,KAAG,EAAE,OAAK,EAAE,IAAI,KAAK,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,OAAK,WAAU;AAAC,gBAAO,KAAG,EAAE,OAAK,EAAE,IAAI,KAAK,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,OAAK,WAAU;AAAC,gBAAO,KAAG,EAAE,OAAK,EAAE,IAAI,KAAK,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,QAAM,WAAU;AAAC,gBAAO,KAAG,EAAE,QAAM,EAAE,IAAI,MAAM,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,uBAAqB,WAAU;AAAC,gBAAO,KAAG,EAAE,uBAAqB,EAAE,IAAI,qBAAqB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,QAAM,WAAU;AAAC,gBAAO,KAAG,EAAE,QAAM,EAAE,IAAI,MAAM,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,QAAM,WAAU;AAAC,gBAAO,KAAG,EAAE,QAAM,EAAE,IAAI,MAAM,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,aAAW,WAAU;AAAC,gBAAO,KAAG,EAAE,aAAW,EAAE,IAAI,WAAW,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,aAAW,WAAU;AAAC,gBAAO,KAAG,EAAE,aAAW,EAAE,IAAI,WAAW,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,gBAAc,WAAU;AAAC,gBAAO,KAAG,EAAE,gBAAc,EAAE,IAAI,cAAc,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,UAAQ,WAAU;AAAC,gBAAO,KAAG,EAAE,UAAQ,EAAE,IAAI,QAAQ,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,QAAM,WAAU;AAAC,gBAAO,KAAG,EAAE,QAAM,EAAE,IAAI,MAAM,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,wBAAsB,WAAU;AAAC,gBAAO,KAAG,EAAE,wBAAsB,EAAE,IAAI,sBAAsB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,gBAAc,WAAU;AAAC,gBAAO,KAAG,EAAE,gBAAc,EAAE,IAAI,cAAc,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,oBAAkB,WAAU;AAAC,gBAAO,KAAG,EAAE,oBAAkB,EAAE,IAAI,kBAAkB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,2BAAyB,WAAU;AAAC,gBAAO,KAAG,EAAE,2BAAyB,EAAE,IAAI,yBAAyB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,8BAA4B,WAAU;AAAC,gBAAO,KAAG,EAAE,8BAA4B,EAAE,IAAI,4BAA4B,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,+CAA6C,WAAU;AAAC,gBAAO,KAAG,EAAE,+CAA6C,EAAE,IAAI,6CAA6C,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,qCAAmC,WAAU;AAAC,gBAAO,KAAG,EAAE,qCAAmC,EAAE,IAAI,mCAAmC,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,4CAA0C,WAAU;AAAC,gBAAO,KAAG,EAAE,4CAA0C,EAAE,IAAI,0CAA0C,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,kCAAgC,WAAU;AAAC,gBAAO,KAAG,EAAE,kCAAgC,EAAE,IAAI,gCAAgC,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,wCAAsC,WAAU;AAAC,gBAAO,KAAG,EAAE,wCAAsC,EAAE,IAAI,sCAAsC,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,gCAA8B,WAAU;AAAC,gBAAO,KAAG,EAAE,gCAA8B,EAAE,IAAI,8BAA8B,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,2BAAyB,WAAU;AAAC,gBAAO,KAAG,EAAE,2BAAyB,EAAE,IAAI,yBAAyB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,+BAA6B,WAAU;AAAC,gBAAO,KAAG,EAAE,+BAA6B,EAAE,IAAI,6BAA6B,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,YAAU,WAAU;AAAC,gBAAO,KAAG,EAAE,YAAU,EAAE,IAAI,WAAW,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,eAAa,WAAU;AAAC,gBAAO,KAAG,EAAE,eAAa,EAAE,IAAI,cAAc,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,aAAW,WAAU;AAAC,gBAAO,KAAG,EAAE,aAAW,EAAE,IAAI,YAAY,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,mBAAiB,WAAU;AAAC,gBAAO,KAAG,EAAE,mBAAiB,EAAE,IAAI,kBAAkB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,eAAa,WAAU;AAAC,gBAAO,KAAG,EAAE,eAAa,EAAE,IAAI,cAAc,MAAM,MAAK,SAAS;AAAA,MAAC;AAAE,QAAE,mBAAiB,IAAG,EAAE,aAAW,IAAG,EAAE,QAAM,IAAG,EAAE,aAAW,IAAG,EAAE,UAAQ;AAAG,UAAI;AAAG,WAAG,SAAS,IAAG;AAAC,cAAI,GAAG,GAAE,OAAK,KAAG;AAAA,MAAE;AAAE,eAAS,GAAG,GAAE;AAAC,YAAG,IAAE,KAAG,GAAE,KAAG,EAAE;AAAO,YAAG,GAAE;AAAC,YAAE,CAAC,GAAE,GAAG,GAAE,YAAY,CAAC;AAAE;AAAA,QAAM;AAAC,YAAG,GAAG,GAAE,KAAG,EAAE;AAAO,iBAAS,IAAG;AAAC,iBAAK,KAAG,MAAG,EAAE,YAAU,MAAG,CAAC,OAAK,GAAG,GAAE,EAAE,CAAC,GAAE,EAAE,wBAAsB,EAAE,qBAAqB,GAAE,GAAG;AAAA,QAAG;AAAC,UAAE,aAAW,EAAE,UAAU,YAAY,GAAE,WAAW,WAAU;AAAC,qBAAW,WAAU;AAAC,cAAE,UAAU,EAAE;AAAA,UAAC,GAAE,CAAC,GAAE,EAAE;AAAA,QAAC,GAAE,CAAC,KAAG,EAAE;AAAA,MAAC;AAAC,UAAG,EAAE,QAAQ,MAAI,OAAO,EAAE,WAAS,eAAa,EAAE,UAAQ,CAAC,EAAE,OAAO,IAAG,EAAE,QAAQ,SAAO,IAAG,GAAE,QAAQ,IAAI,EAAE;AAAE,SAAG;AAAE,UAAI;AAAG,YAAI,KAAG,EAAC,mBAAkB,QAAQ,UAAU,mBAAmB,EAAE,OAAO,SAAS,GAAE;AAAC,eAAM,CAAC,EAAE,kBAAkB,QAAQ,CAAC,IAAE;AAAA,MAAE,CAAC,GAAE,oBAAmB,QAAQ,UAAU,oBAAoB,EAAE,OAAO,SAAS,GAAE;AAAC,eAAM,CAAC,EAAE,mBAAmB,QAAQ,CAAC,IAAE;AAAA,MAAE,CAAC,EAAC;AAAG,UAAI;AAAG,UAAG,OAAO,qBAAmB,YAAY,MAAG;AAAA,eAA0B,OAAO,KAAG,YAAY,MAAG;AAAA,UAAO,OAAM,IAAI,MAAM,uCAAuC;AAAE,UAAG,IAAG;AAAC,YAAI,KAAG,GAAG;AAAS,WAAG,WAAS,WAAU;AAAC,aAAG,GAAE,GAAG,kBAAkB,QAAQ,SAAS,GAAE;AAAC,oBAAQ,eAAe,qBAAoB,CAAC;AAAA,UAAC,CAAC,GAAE,GAAG,mBAAmB,QAAQ,SAAS,GAAE;AAAC,oBAAQ,eAAe,sBAAqB,CAAC;AAAA,UAAC,CAAC;AAAA,QAAC;AAAA,MAAC;AAAC,aAAO,EAAE;AAAA,IAAK;AAAA,EAAC,GAAG;AAAE,SAAO,MAAI,YAAU,OAAO,MAAI,WAAS,GAAG,UAAQ,KAAG,OAAO,UAAQ,cAAY,OAAO,MAAI,OAAO,CAAC,GAAE,WAAU;AAAC,WAAO;AAAA,EAAE,CAAC,IAAE,OAAO,MAAI,aAAW,GAAG,gCAA8B;AAAG,CAAC;AAAE,IAAI,KAAG,GAAG,CAAC,KAAI,OAAK;AAAC;AAAa,KAAG,QAAQ,qBAAmB;AAAA;AACpj3B,CAAC;AAAE,IAAI,KAAG,GAAG,CAAC,IAAG,OAAK;AAAC;AAAa,MAAI,MAAI,MAAI;AAAC,QAAID,MAAE,OAAO,YAAU,eAAa,SAAS,gBAAc,SAAS,cAAc,MAAI;AAAO,WAAO,OAAO,cAAY,gBAAcA,MAAEA,OAAG,aAAY,SAAS,GAAE;AAAC,UAAE,KAAG,CAAC;AAAE,UAAIC,MAAE,OAAO,KAAG,cAAY,IAAE,CAAC,GAAE,GAAE;AAAE,MAAAA,IAAE,QAAM,IAAI,QAAQ,SAAS,GAAE,IAAG;AAAC,YAAE,GAAE,IAAE;AAAA,MAAE,CAAC;AAAE,UAAI;AAAE,aAAO,WAAS,eAAa,QAAQ,cAAY,IAAE,EAAC,mBAAkB,QAAQ,UAAU,mBAAmB,GAAE,oBAAmB,QAAQ,UAAU,oBAAoB,EAAC;AAAG,UAAI,IAAE,OAAO,OAAO,CAAC,GAAEA,GAAC,GAAE,IAAE,CAAC,GAAE,IAAE,kBAAiB,IAAE,CAAC,GAAE,OAAK;AAAC,cAAM;AAAA,MAAE,GAAE,IAAE,OAAO,UAAQ,UAAS,IAAE,OAAO,iBAAe,YAAW,IAAE,OAAO,WAAS,YAAU,OAAO,QAAQ,YAAU,YAAU,OAAO,QAAQ,SAAS,QAAM,UAAS,IAAE;AAAG,eAAS,EAAE,GAAE;AAAC,eAAOA,IAAE,aAAWA,IAAE,WAAW,GAAE,CAAC,IAAE,IAAE;AAAA,MAAC;AAAC,UAAI,GAAE,GAAE,GAAE;AAAE,eAAS,EAAE,GAAE;AAAC,YAAG,aAAa,GAAG;AAAO,UAAE,+BAA6B,CAAC;AAAA,MAAC;AAAC,UAAG,GAAE;AAAC,YAAI,IAAE,GAAG,GAAE,IAAE,GAAG;AAAE,YAAE,IAAE,EAAE,QAAQ,CAAC,IAAE,MAAI,IAAE,YAAU,KAAI,IAAE,CAAC,GAAE,QAAM,IAAE,GAAG,CAAC,IAAE,IAAI,IAAI,CAAC,IAAE,EAAE,UAAU,CAAC,GAAE,EAAE,aAAa,GAAE,KAAG,SAAO,MAAM,IAAG,IAAE,OAAG;AAAC,cAAI,KAAG,EAAE,GAAE,IAAE;AAAE,iBAAO,GAAG,WAAS,KAAG,IAAI,WAAW,EAAE,IAAG;AAAA,QAAE,GAAE,IAAE,CAAC,GAAE,IAAG,OAAK;AAAC,cAAE,GAAG,CAAC,IAAE,IAAI,IAAI,CAAC,IAAE,EAAE,UAAU,CAAC,GAAE,EAAE,SAAS,GAAE,SAAS,IAAG,IAAG;AAAC,iBAAG,GAAG,EAAE,IAAE,GAAG,GAAG,MAAM;AAAA,UAAC,CAAC;AAAA,QAAC,GAAE,QAAQ,KAAK,SAAO,MAAI,IAAE,QAAQ,KAAK,CAAC,EAAE,QAAQ,OAAM,GAAG,IAAG,IAAE,QAAQ,KAAK,MAAM,CAAC,GAAE,QAAQ,GAAG,qBAAoB,SAAS,GAAE;AAAC,cAAG,EAAE,aAAa,IAAI,OAAM;AAAA,QAAC,CAAC,GAAE,QAAQ,GAAG,sBAAqB,SAAS,GAAE;AAAC,gBAAM;AAAA,QAAC,CAAC,GAAE,IAAE,CAAC,GAAE,OAAK;AAAC,cAAG,GAAG,EAAE,OAAM,QAAQ,WAAS,GAAE;AAAG,YAAE,EAAE,GAAE,QAAQ,KAAK,CAAC;AAAA,QAAC,GAAEA,IAAE,UAAQ,WAAU;AAAC,iBAAM;AAAA,QAA4B;AAAA,MAAC,MAAK,EAAC,KAAG,OAAK,IAAE,IAAE,KAAK,SAAS,OAAK,OAAO,YAAU,eAAa,SAAS,kBAAgB,IAAE,SAAS,cAAc,MAAKD,QAAI,IAAEA,MAAG,EAAE,QAAQ,OAAO,MAAI,IAAE,IAAE,EAAE,OAAO,GAAE,EAAE,QAAQ,UAAS,EAAE,EAAE,YAAY,GAAG,IAAE,CAAC,IAAE,IAAE,IAAG,IAAE,OAAG;AAAC,YAAI,KAAG,IAAI;AAAe,eAAO,GAAG,KAAK,OAAM,GAAE,KAAE,GAAE,GAAG,KAAK,IAAI,GAAE,GAAG;AAAA,MAAY,GAAE,MAAI,IAAE,OAAG;AAAC,YAAI,KAAG,IAAI;AAAe,eAAO,GAAG,KAAK,OAAM,GAAE,KAAE,GAAE,GAAG,eAAa,eAAc,GAAG,KAAK,IAAI,GAAE,IAAI,WAAW,GAAG,QAAQ;AAAA,MAAC,IAAG,IAAE,CAAC,GAAE,IAAG,OAAK;AAAC,YAAI,KAAG,IAAI;AAAe,WAAG,KAAK,OAAM,GAAE,IAAE,GAAE,GAAG,eAAa,eAAc,GAAG,SAAO,MAAI;AAAC,cAAG,GAAG,UAAQ,OAAK,GAAG,UAAQ,KAAG,GAAG,UAAS;AAAC,eAAG,GAAG,QAAQ;AAAE;AAAA,UAAM;AAAC,aAAG;AAAA,QAAC,GAAE,GAAG,UAAQ,IAAG,GAAG,KAAK,IAAI;AAAA,MAAC,GAAE,IAAE,OAAG,SAAS,QAAM;AAAG,UAAI,IAAEC,IAAE,SAAO,QAAQ,IAAI,KAAK,OAAO,GAAE,IAAEA,IAAE,YAAU,QAAQ,KAAK,KAAK,OAAO;AAAE,aAAO,OAAOA,KAAE,CAAC,GAAE,IAAE,MAAKA,IAAE,cAAY,IAAEA,IAAE,YAAWA,IAAE,gBAAc,IAAEA,IAAE,cAAaA,IAAE,SAAO,IAAEA,IAAE;AAAM,UAAI,IAAE,GAAE;AAAE,MAAAA,IAAE,eAAa,IAAEA,IAAE;AAAY,UAAI,IAAEA,IAAE,iBAAe;AAAG,aAAO,eAAa,YAAU,GAAG,iCAAiC;AAAE,UAAI,GAAE,IAAE,OAAG;AAAE,eAAS,EAAE,GAAE,IAAG;AAAC,aAAG,GAAG,EAAE;AAAA,MAAC;AAAC,UAAI,IAAE,OAAO,eAAa,cAAY,IAAI,YAAY,MAAM,IAAE;AAAO,eAAS,EAAE,GAAE,IAAG,IAAG;AAAC,gBAAM;AAAE,iBAAQ,KAAG,KAAG,IAAG,KAAG,IAAG,EAAE,EAAE,KAAG,EAAE,MAAI,MAAK,GAAE;AAAG,YAAG,KAAG,KAAG,MAAI,EAAE,UAAQ,EAAE,QAAO,EAAE,OAAO,EAAE,SAAS,IAAG,EAAE,CAAC;AAAE,iBAAQ,KAAG,IAAG,KAAG,MAAI;AAAC,cAAI,KAAG,EAAE,IAAI;AAAE,cAAG,EAAE,KAAG,MAAK;AAAC,kBAAI,OAAO,aAAa,EAAE;AAAE;AAAA,UAAQ;AAAC,cAAI,KAAG,EAAE,IAAI,IAAE;AAAG,eAAI,KAAG,QAAM,KAAI;AAAC,kBAAI,OAAO,cAAc,KAAG,OAAK,IAAE,EAAE;AAAE;AAAA,UAAQ;AAAC,cAAI,KAAG,EAAE,IAAI,IAAE;AAAG,eAAI,KAAG,QAAM,MAAI,MAAI,KAAG,OAAK,KAAG,MAAI,IAAE,KAAG,MAAI,KAAG,MAAI,KAAG,MAAI,KAAG,MAAI,IAAE,EAAE,IAAI,IAAE,IAAG,KAAG,MAAM,OAAI,OAAO,aAAa,EAAE;AAAA,eAAM;AAAC,gBAAI,KAAG,KAAG;AAAM,kBAAI,OAAO,aAAa,QAAM,MAAI,IAAG,QAAM,KAAG,IAAI;AAAA,UAAC;AAAA,QAAC;AAAC,eAAO;AAAA,MAAE;AAAC,eAAS,EAAE,GAAE,IAAG;AAAC,eAAO,OAAK,GAAE,IAAE,EAAE,IAAG,GAAE,EAAE,IAAE;AAAA,MAAE;AAAC,eAAS,EAAE,GAAE,IAAG,IAAG,IAAG;AAAC,YAAG,QAAM,GAAE,EAAE,KAAG,GAAG,QAAO;AAAE,iBAAQ,KAAG,IAAG,KAAG,KAAG,KAAG,GAAE,KAAG,GAAE,KAAG,EAAE,QAAO,EAAE,IAAG;AAAC,cAAI,KAAG,EAAE,WAAW,EAAE;AAAE,cAAG,MAAI,SAAO,MAAI,OAAM;AAAC,gBAAI,KAAG,EAAE,WAAW,EAAE,EAAE;AAAE,iBAAG,UAAQ,KAAG,SAAO,MAAI,KAAG;AAAA,UAAI;AAAC,cAAG,MAAI,KAAI;AAAC,gBAAG,MAAI,GAAG;AAAM,eAAG,SAAO,CAAC,IAAE;AAAA,UAAE,WAAS,MAAI,MAAK;AAAC,gBAAG,KAAG,KAAG,GAAG;AAAM,eAAG,SAAO,CAAC,IAAE,MAAI,MAAI,GAAE,GAAG,SAAO,CAAC,IAAE,MAAI,KAAG;AAAA,UAAE,WAAS,MAAI,OAAM;AAAC,gBAAG,KAAG,KAAG,GAAG;AAAM,eAAG,SAAO,CAAC,IAAE,MAAI,MAAI,IAAG,GAAG,SAAO,CAAC,IAAE,MAAI,MAAI,IAAE,IAAG,GAAG,SAAO,CAAC,IAAE,MAAI,KAAG;AAAA,UAAE,OAAK;AAAC,gBAAG,KAAG,KAAG,GAAG;AAAM,eAAG,SAAO,CAAC,IAAE,MAAI,MAAI,IAAG,GAAG,SAAO,CAAC,IAAE,MAAI,MAAI,KAAG,IAAG,GAAG,SAAO,CAAC,IAAE,MAAI,MAAI,IAAE,IAAG,GAAG,SAAO,CAAC,IAAE,MAAI,KAAG;AAAA,UAAE;AAAA,QAAC;AAAC,eAAO,GAAG,OAAK,CAAC,IAAE,GAAE,KAAG;AAAA,MAAE;AAAC,eAAS,EAAE,GAAE,IAAG,IAAG;AAAC,eAAO,EAAE,GAAE,IAAG,IAAG,EAAE;AAAA,MAAC;AAAC,UAAI,GAAE,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG;AAAG,eAAS,GAAG,GAAE;AAAC,YAAE,GAAEA,IAAE,QAAM,KAAG,IAAI,UAAU,CAAC,GAAEA,IAAE,SAAO,KAAG,IAAI,WAAW,CAAC,GAAEA,IAAE,SAAO,KAAG,IAAI,WAAW,CAAC,GAAEA,IAAE,SAAO,KAAG,IAAI,WAAW,CAAC,GAAEA,IAAE,UAAQ,KAAG,IAAI,YAAY,CAAC,GAAEA,IAAE,UAAQ,KAAG,IAAI,YAAY,CAAC,GAAEA,IAAE,UAAQ,KAAG,IAAI,aAAa,CAAC,GAAEA,IAAE,UAAQ,KAAG,IAAI,aAAa,CAAC;AAAA,MAAC;AAAC,UAAI,KAAGA,IAAE,kBAAgB,UAAS,IAAG,KAAG,CAAC,GAAE,KAAG,CAAC,GAAE,KAAG,CAAC,GAAE,KAAG;AAAG,eAAS,KAAI;AAAC,eAAO;AAAA,MAAC;AAAC,eAAS,KAAI;AAAC,YAAGA,IAAE,OAAO,MAAI,OAAOA,IAAE,UAAQ,eAAaA,IAAE,SAAO,CAACA,IAAE,MAAM,IAAGA,IAAE,OAAO,SAAQ,IAAGA,IAAE,OAAO,MAAM,CAAC;AAAE,WAAG,EAAE;AAAA,MAAC;AAAC,eAAS,KAAI;AAAC,aAAG,MAAG,GAAG,EAAE;AAAA,MAAC;AAAC,eAAS,KAAI;AAAC,YAAGA,IAAE,QAAQ,MAAI,OAAOA,IAAE,WAAS,eAAaA,IAAE,UAAQ,CAACA,IAAE,OAAO,IAAGA,IAAE,QAAQ,SAAQ,IAAGA,IAAE,QAAQ,MAAM,CAAC;AAAE,WAAG,EAAE;AAAA,MAAC;AAAC,eAAS,GAAG,GAAE;AAAC,WAAG,QAAQ,CAAC;AAAA,MAAC;AAAC,eAAS,GAAG,GAAE;AAAC,WAAG,QAAQ,CAAC;AAAA,MAAC;AAAC,eAAS,GAAG,GAAE;AAAC,WAAG,QAAQ,CAAC;AAAA,MAAC;AAAC,UAAI,KAAG,GAAE,KAAG,MAAK,KAAG;AAAK,eAAS,GAAG,GAAE;AAAC,cAAKA,IAAE,0BAAwBA,IAAE,uBAAuB,EAAE;AAAA,MAAC;AAAC,eAAS,GAAG,GAAE;AAAC,YAAG,MAAKA,IAAE,0BAAwBA,IAAE,uBAAuB,EAAE,GAAE,MAAI,MAAI,OAAK,SAAO,cAAc,EAAE,GAAE,KAAG,OAAM,KAAI;AAAC,cAAI,KAAG;AAAG,eAAG,MAAK,GAAG;AAAA,QAAC;AAAA,MAAC;AAAC,eAAS,GAAG,GAAE;AAAC,QAAAA,IAAE,WAASA,IAAE,QAAQ,CAAC,GAAE,IAAE,aAAW,IAAE,KAAI,EAAE,CAAC,GAAE,IAAE,MAAG,IAAE,GAAE,KAAG;AAA2C,YAAI,KAAG,IAAI,YAAY,aAAa,CAAC;AAAE,cAAM,EAAE,EAAE,GAAE;AAAA,MAAE;AAAC,UAAI,KAAG;AAAwC,eAAS,GAAG,GAAE;AAAC,eAAO,EAAE,WAAW,EAAE;AAAA,MAAC;AAAC,eAAS,GAAG,GAAE;AAAC,eAAO,EAAE,WAAW,SAAS;AAAA,MAAC;AAAC,UAAI;AAAG,WAAG,0BAAyB,GAAG,EAAE,MAAI,KAAG,EAAE,EAAE;AAAG,eAAS,GAAG,GAAE;AAAC,YAAG;AAAC,cAAG,KAAG,MAAI,EAAE,QAAO,IAAI,WAAW,CAAC;AAAE,cAAG,EAAE,QAAO,EAAE,CAAC;AAAE,gBAAK;AAAA,QAAiD,SAAO,IAAG;AAAC,aAAG,EAAE;AAAA,QAAC;AAAA,MAAC;AAAC,eAAS,KAAI;AAAC,YAAG,CAAC,MAAI,KAAG,IAAG;AAAC,cAAG,OAAO,SAAO,cAAY,CAAC,GAAG,EAAE,EAAE,QAAO,MAAM,IAAG,EAAC,aAAY,cAAa,CAAC,EAAE,KAAK,SAAS,GAAE;AAAC,gBAAG,CAAC,EAAE,GAAG,OAAK,yCAAuC,KAAG;AAAI,mBAAO,EAAE,YAAY;AAAA,UAAC,CAAC,EAAE,MAAM,WAAU;AAAC,mBAAO,GAAG,EAAE;AAAA,UAAC,CAAC;AAAE,cAAG,EAAE,QAAO,IAAI,QAAQ,SAAS,GAAE,IAAG;AAAC,cAAE,IAAG,SAAS,IAAG;AAAC,gBAAE,IAAI,WAAW,EAAE,CAAC;AAAA,YAAC,GAAE,EAAE;AAAA,UAAC,CAAC;AAAA,QAAC;AAAC,eAAO,QAAQ,QAAQ,EAAE,KAAK,WAAU;AAAC,iBAAO,GAAG,EAAE;AAAA,QAAC,CAAC;AAAA,MAAC;AAAC,eAAS,KAAI;AAAC,YAAI,IAAE,EAAC,KAAI,IAAG,wBAAuB,GAAE;AAAE,iBAAS,GAAG,IAAG,IAAG;AAAC,cAAI,KAAG,GAAG;AAAQ,UAAAA,IAAE,MAAI,IAAG,IAAEA,IAAE,IAAI,QAAO,GAAG,EAAE,MAAM,GAAE,KAAGA,IAAE,IAAI,2BAA0B,GAAGA,IAAE,IAAI,iBAAiB,GAAE,GAAG,kBAAkB;AAAA,QAAC;AAAC,WAAG,kBAAkB;AAAE,iBAAS,GAAG,IAAG;AAAC,aAAG,GAAG,QAAQ;AAAA,QAAC;AAAC,iBAAS,GAAG,IAAG;AAAC,iBAAO,GAAG,EAAE,KAAK,SAAS,IAAG;AAAC,mBAAO,YAAY,YAAY,IAAG,CAAC;AAAA,UAAC,CAAC,EAAE,KAAK,SAAS,IAAG;AAAC,mBAAO;AAAA,UAAE,CAAC,EAAE,KAAK,IAAG,SAAS,IAAG;AAAC,cAAE,4CAA0C,EAAE,GAAE,GAAG,EAAE;AAAA,UAAC,CAAC;AAAA,QAAC;AAAC,iBAAS,KAAI;AAAC,iBAAM,CAAC,KAAG,OAAO,YAAY,wBAAsB,cAAY,CAAC,GAAG,EAAE,KAAG,CAAC,GAAG,EAAE,KAAG,CAAC,KAAG,OAAO,SAAO,aAAW,MAAM,IAAG,EAAC,aAAY,cAAa,CAAC,EAAE,KAAK,SAAS,IAAG;AAAC,gBAAI,KAAG,YAAY,qBAAqB,IAAG,CAAC;AAAE,mBAAO,GAAG,KAAK,IAAG,SAAS,IAAG;AAAC,qBAAO,EAAE,oCAAkC,EAAE,GAAE,EAAE,2CAA2C,GAAE,GAAG,EAAE;AAAA,YAAC,CAAC;AAAA,UAAC,CAAC,IAAE,GAAG,EAAE;AAAA,QAAC;AAAC,YAAGA,IAAE,gBAAgB,KAAG;AAAC,cAAI,KAAGA,IAAE,gBAAgB,GAAE,EAAE;AAAE,iBAAO;AAAA,QAAE,SAAO,IAAG;AAAC,YAAE,wDAAsD,EAAE,GAAE,EAAE,EAAE;AAAA,QAAC;AAAC,eAAO,GAAG,EAAE,MAAM,CAAC,GAAE,CAAC;AAAA,MAAC;AAAC,UAAI,IAAG;AAAG,eAAS,GAAG,GAAE;AAAC,aAAK,OAAK,cAAa,KAAK,UAAQ,kCAAgC,IAAE,KAAI,KAAK,SAAO;AAAA,MAAC;AAAC,eAAS,GAAG,GAAE;AAAC,eAAK,EAAE,SAAO,IAAG,GAAE,MAAM,EAAEA,GAAC;AAAA,MAAC;AAAC,eAAS,KAAI;AAAC,WAAG,EAAE;AAAA,MAAC;AAAC,eAAS,KAAI;AAAC,eAAO;AAAA,MAAU;AAAC,eAAS,KAAI;AAAC,eAAO,GAAG;AAAA,MAAC;AAAC,eAAS,GAAG,GAAE,IAAG,IAAG;AAAC,WAAG,WAAW,MAAI,GAAE,OAAK,GAAE,KAAG,OAAK,CAAC;AAAA,MAAC;AAAC,eAAS,GAAG,GAAE;AAAC,YAAG;AAAC,iBAAO,EAAE,KAAK,IAAE,EAAE,aAAW,UAAQ,EAAE,GAAE,GAAG,EAAE,MAAM,GAAE;AAAA,QAAC,SAAO,IAAG;AAAA,QAAC;AAAA,MAAC;AAAC,eAAS,GAAG,GAAE;AAAC,YAAI,KAAG,GAAG;AAAO,YAAE,MAAI;AAAE,YAAI,KAAG,GAAG;AAAE,YAAG,IAAE,GAAG,QAAM;AAAG,YAAI,KAAG,CAAC,IAAG,OAAK,MAAI,KAAG,KAAG,MAAI;AAAG,iBAAQ,KAAG,GAAE,MAAI,GAAE,MAAI,GAAE;AAAC,cAAI,KAAG,MAAI,IAAE,MAAG;AAAI,eAAG,KAAK,IAAI,IAAG,IAAE,SAAS;AAAE,cAAI,KAAG,KAAK,IAAI,IAAG,GAAG,KAAK,IAAI,GAAE,EAAE,GAAE,KAAK,CAAC,GAAE,KAAG,GAAG,EAAE;AAAE,cAAG,GAAG,QAAM;AAAA,QAAE;AAAC,eAAM;AAAA,MAAE;AAAC,UAAI,KAAG,EAAC,SAAQ,QAAO,KAAI,WAAU;AAAC,WAAG,WAAS;AAAE,YAAI,IAAE,GAAG,GAAG,UAAQ,MAAI,CAAC;AAAE,eAAO;AAAA,MAAC,GAAE,QAAO,SAAS,GAAE;AAAC,YAAI,KAAG,EAAE,CAAC;AAAE,eAAO;AAAA,MAAE,EAAC;AAAE,eAAS,GAAG,GAAE;AAAC,eAAO;AAAA,MAAE;AAAC,eAAS,GAAG,GAAE,IAAG,IAAG,IAAG,IAAG;AAAC,eAAO;AAAA,MAAE;AAAC,UAAI,KAAG,CAAC,MAAK,CAAC,GAAE,CAAC,CAAC;AAAE,eAAS,GAAG,GAAE,IAAG;AAAC,YAAI,KAAG,GAAG,CAAC;AAAE,eAAK,KAAG,OAAK,OAAK,MAAI,IAAE,IAAE,GAAG,EAAE,IAAG,CAAC,CAAC,GAAE,GAAG,SAAO,KAAG,GAAG,KAAK,EAAE;AAAA,MAAC;AAAC,eAAS,GAAG,GAAE,IAAG,IAAG,IAAG;AAAC,iBAAQ,KAAG,GAAE,KAAG,GAAE,KAAG,IAAG,MAAK;AAAC,cAAI,KAAG,GAAG,OAAK,CAAC,GAAE,KAAG,GAAG,KAAG,MAAI,CAAC;AAAE,gBAAI;AAAE,mBAAQ,KAAG,GAAE,KAAG,IAAG,KAAK,IAAG,GAAE,GAAG,KAAG,OAAK,CAAC,CAAC;AAAE,gBAAI;AAAA,QAAE;AAAC,eAAO,GAAG,OAAK,CAAC,IAAE,IAAG;AAAA,MAAC;AAAC,eAAS,GAAG,GAAE;AAAC,YAAI,KAAGA,IAAE,MAAI,CAAC;AAAE,eAAO;AAAA,MAAE;AAAC,eAAS,GAAG,GAAE,IAAG;AAAC,WAAG,IAAI,GAAE,OAAK,CAAC;AAAA,MAAC;AAAC,eAAS,GAAG,GAAE,IAAG,IAAG,IAAG,IAAG;AAAC,YAAI,KAAG,EAAC,QAAO,QAAI;AAAC,cAAI,KAAG;AAAE,cAAG,MAAI,QAAM,OAAK,GAAE;AAAC,gBAAI,MAAI,GAAG,UAAQ,KAAG;AAAE,iBAAG,GAAG,EAAE,GAAE,EAAE,IAAG,IAAG,EAAE;AAAA,UAAC;AAAC,iBAAO;AAAA,QAAE,GAAE,OAAM,QAAI;AAAC,cAAI,KAAG,GAAG,GAAG,MAAM;AAAE,iBAAO,GAAG,IAAG,EAAE,GAAE;AAAA,QAAE,EAAC;AAAE,iBAAS,GAAG,IAAG;AAAC,iBAAO,OAAK,WAAS,EAAE,EAAE,IAAE,OAAK,YAAU,CAAC,CAAC,KAAG;AAAA,QAAE;AAAC,YAAI,KAAG,GAAG,CAAC,GAAE,KAAG,CAAC,GAAE,KAAG;AAAE,YAAG,GAAG,UAAQ,KAAG,GAAE,KAAG,GAAG,QAAO,MAAK;AAAC,cAAI,KAAG,GAAG,GAAG,EAAE,CAAC;AAAE,gBAAI,OAAK,MAAI,KAAG,GAAG,IAAG,GAAG,EAAE,IAAE,GAAG,GAAG,EAAE,CAAC,KAAG,GAAG,EAAE,IAAE,GAAG,EAAE;AAAA,QAAC;AAAC,YAAI,KAAG,GAAG,MAAM,MAAK,EAAE;AAAE,iBAAS,GAAG,IAAG;AAAC,iBAAO,OAAK,KAAG,GAAG,EAAE,GAAE,GAAG,EAAE;AAAA,QAAC;AAAC,eAAO,KAAG,GAAG,EAAE,GAAE;AAAA,MAAE;AAAC,eAAS,GAAG,GAAE,IAAG,IAAG,IAAG;AAAC,aAAG,MAAI,CAAC;AAAE,YAAI,KAAG,GAAG,MAAM,QAAI,OAAK,YAAU,OAAK,SAAS,GAAE,KAAG,OAAK;AAAS,eAAO,MAAI,MAAI,CAAC,KAAG,GAAG,CAAC,IAAE,WAAU;AAAC,iBAAO,GAAG,GAAE,IAAG,IAAG,WAAU,EAAE;AAAA,QAAC;AAAA,MAAC;AAAC,UAAI,KAAG,EAAC,OAAM,IAAG,yBAAwB,IAAG,uBAAsB,IAAG,wBAAuB,IAAG,UAAS,IAAG,SAAQ,IAAG,UAAS,GAAE,GAAE,KAAG,GAAG,GAAE,KAAGA,IAAE,qBAAmB,WAAU;AAAC,gBAAO,KAAGA,IAAE,qBAAmBA,IAAE,IAAI,mBAAmB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,QAAM,WAAU;AAAC,gBAAO,KAAGA,IAAE,QAAMA,IAAE,IAAI,MAAM,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,2BAAyB,WAAU;AAAC,gBAAO,KAAGA,IAAE,2BAAyBA,IAAE,IAAI,yBAAyB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,qBAAmB,WAAU;AAAC,gBAAO,KAAGA,IAAE,qBAAmBA,IAAE,IAAI,mBAAmB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,mBAAiB,WAAU;AAAC,gBAAO,KAAGA,IAAE,mBAAiBA,IAAE,IAAI,iBAAiB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,gBAAc,WAAU;AAAC,gBAAO,KAAGA,IAAE,gBAAcA,IAAE,IAAI,cAAc,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,WAAS,WAAU;AAAC,gBAAO,KAAGA,IAAE,WAASA,IAAE,IAAI,SAAS,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,OAAK,WAAU;AAAC,gBAAO,KAAGA,IAAE,OAAKA,IAAE,IAAI,KAAK,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,QAAM,WAAU;AAAC,gBAAO,KAAGA,IAAE,QAAMA,IAAE,IAAI,MAAM,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,SAAO,WAAU;AAAC,gBAAO,KAAGA,IAAE,SAAOA,IAAE,IAAI,OAAO,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,OAAK,WAAU;AAAC,gBAAO,KAAGA,IAAE,OAAKA,IAAE,IAAI,KAAK,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,QAAM,WAAU;AAAC,gBAAO,KAAGA,IAAE,QAAMA,IAAE,IAAI,MAAM,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,OAAK,WAAU;AAAC,gBAAO,KAAGA,IAAE,OAAKA,IAAE,IAAI,KAAK,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,OAAK,WAAU;AAAC,gBAAO,KAAGA,IAAE,OAAKA,IAAE,IAAI,KAAK,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,UAAQ,WAAU;AAAC,gBAAO,KAAGA,IAAE,UAAQA,IAAE,IAAI,QAAQ,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,UAAQ,WAAU;AAAC,gBAAO,KAAGA,IAAE,UAAQA,IAAE,IAAI,QAAQ,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,QAAM,WAAU;AAAC,gBAAO,KAAGA,IAAE,QAAMA,IAAE,IAAI,MAAM,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,SAAO,WAAU;AAAC,gBAAO,KAAGA,IAAE,SAAOA,IAAE,IAAI,OAAO,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,QAAM,WAAU;AAAC,gBAAO,KAAGA,IAAE,QAAMA,IAAE,IAAI,MAAM,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,SAAO,WAAU;AAAC,gBAAO,KAAGA,IAAE,SAAOA,IAAE,IAAI,OAAO,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,SAAO,WAAU;AAAC,gBAAO,KAAGA,IAAE,SAAOA,IAAE,IAAI,OAAO,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,WAAS,WAAU;AAAC,gBAAO,KAAGA,IAAE,WAASA,IAAE,IAAI,SAAS,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,aAAW,WAAU;AAAC,gBAAO,KAAGA,IAAE,aAAWA,IAAE,IAAI,WAAW,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,iBAAe,WAAU;AAAC,gBAAO,KAAGA,IAAE,iBAAeA,IAAE,IAAI,eAAe,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,eAAa,WAAU;AAAC,gBAAO,KAAGA,IAAE,eAAaA,IAAE,IAAI,aAAa,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,eAAa,WAAU;AAAC,gBAAO,KAAGA,IAAE,eAAaA,IAAE,IAAI,aAAa,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,YAAU,WAAU;AAAC,gBAAO,KAAGA,IAAE,YAAUA,IAAE,IAAI,UAAU,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,cAAY,WAAU;AAAC,gBAAO,KAAGA,IAAE,cAAYA,IAAE,IAAI,YAAY,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,QAAM,WAAU;AAAC,gBAAO,KAAGA,IAAE,QAAMA,IAAE,IAAI,MAAM,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,eAAa,WAAU;AAAC,gBAAO,KAAGA,IAAE,eAAaA,IAAE,IAAI,aAAa,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,UAAQ,WAAU;AAAC,gBAAO,KAAGA,IAAE,UAAQA,IAAE,IAAI,QAAQ,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,uBAAqB,WAAU;AAAC,gBAAO,KAAGA,IAAE,uBAAqBA,IAAE,IAAI,qBAAqB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,UAAQ,WAAU;AAAC,gBAAO,KAAGA,IAAE,UAAQA,IAAE,IAAI,QAAQ,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,0BAAwB,WAAU;AAAC,gBAAO,KAAGA,IAAE,0BAAwBA,IAAE,IAAI,wBAAwB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,yBAAuB,WAAU;AAAC,gBAAO,KAAGA,IAAE,yBAAuBA,IAAE,IAAI,uBAAuB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,OAAK,WAAU;AAAC,gBAAO,KAAGA,IAAE,OAAKA,IAAE,IAAI,KAAK,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,QAAM,WAAU;AAAC,gBAAO,KAAGA,IAAE,QAAMA,IAAE,IAAI,MAAM,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,iBAAe,WAAU;AAAC,gBAAO,KAAGA,IAAE,iBAAeA,IAAE,IAAI,eAAe,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,WAAS,WAAU;AAAC,gBAAO,KAAGA,IAAE,WAASA,IAAE,IAAI,SAAS,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,UAAQ,WAAU;AAAC,gBAAO,KAAGA,IAAE,UAAQA,IAAE,IAAI,QAAQ,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,iBAAe,WAAU;AAAC,gBAAO,KAAGA,IAAE,iBAAeA,IAAE,IAAI,eAAe,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,gBAAc,WAAU;AAAC,gBAAO,KAAGA,IAAE,gBAAcA,IAAE,IAAI,cAAc,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,yBAAuB,WAAU;AAAC,gBAAO,KAAGA,IAAE,yBAAuBA,IAAE,IAAI,uBAAuB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,QAAM,WAAU;AAAC,gBAAO,KAAGA,IAAE,QAAMA,IAAE,IAAI,MAAM,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,cAAY,WAAU;AAAC,gBAAO,KAAGA,IAAE,cAAYA,IAAE,IAAI,YAAY,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,4BAA0B,WAAU;AAAC,gBAAO,KAAGA,IAAE,4BAA0BA,IAAE,IAAI,0BAA0B,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,2BAAyB,WAAU;AAAC,gBAAO,KAAGA,IAAE,2BAAyBA,IAAE,IAAI,yBAAyB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,OAAK,WAAU;AAAC,gBAAO,KAAGA,IAAE,OAAKA,IAAE,IAAI,KAAK,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,WAAS,WAAU;AAAC,gBAAO,KAAGA,IAAE,WAASA,IAAE,IAAI,SAAS,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,SAAO,WAAU;AAAC,gBAAO,KAAGA,IAAE,SAAOA,IAAE,IAAI,OAAO,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,OAAK,WAAU;AAAC,gBAAO,KAAGA,IAAE,OAAKA,IAAE,IAAI,KAAK,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,OAAK,WAAU;AAAC,gBAAO,KAAGA,IAAE,OAAKA,IAAE,IAAI,KAAK,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,SAAO,WAAU;AAAC,gBAAO,KAAGA,IAAE,SAAOA,IAAE,IAAI,OAAO,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,iBAAe,WAAU;AAAC,gBAAO,KAAGA,IAAE,iBAAeA,IAAE,IAAI,eAAe,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,SAAO,WAAU;AAAC,gBAAO,KAAGA,IAAE,SAAOA,IAAE,IAAI,OAAO,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,YAAU,WAAU;AAAC,gBAAO,KAAGA,IAAE,YAAUA,IAAE,IAAI,UAAU,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,kBAAgB,WAAU;AAAC,gBAAO,KAAGA,IAAE,kBAAgBA,IAAE,IAAI,gBAAgB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,eAAa,WAAU;AAAC,gBAAO,KAAGA,IAAE,eAAaA,IAAE,IAAI,aAAa,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,wBAAsB,WAAU;AAAC,gBAAO,KAAGA,IAAE,wBAAsBA,IAAE,IAAI,sBAAsB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,UAAQ,WAAU;AAAC,gBAAO,KAAGA,IAAE,UAAQA,IAAE,IAAI,QAAQ,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,YAAU,WAAU;AAAC,gBAAO,KAAGA,IAAE,YAAUA,IAAE,IAAI,UAAU,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,WAAS,WAAU;AAAC,gBAAO,KAAGA,IAAE,WAASA,IAAE,IAAI,SAAS,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,gBAAc,WAAU;AAAC,gBAAO,KAAGA,IAAE,gBAAcA,IAAE,IAAI,cAAc,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,YAAU,WAAU;AAAC,gBAAO,KAAGA,IAAE,YAAUA,IAAE,IAAI,UAAU,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,SAAO,WAAU;AAAC,gBAAO,KAAGA,IAAE,SAAOA,IAAE,IAAI,OAAO,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,SAAO,WAAU;AAAC,gBAAO,KAAGA,IAAE,SAAOA,IAAE,IAAI,OAAO,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,OAAK,WAAU;AAAC,gBAAO,KAAGA,IAAE,OAAKA,IAAE,IAAI,KAAK,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,WAAS,WAAU;AAAC,gBAAO,KAAGA,IAAE,WAASA,IAAE,IAAI,SAAS,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,aAAW,WAAU;AAAC,gBAAO,KAAGA,IAAE,aAAWA,IAAE,IAAI,WAAW,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,QAAM,WAAU;AAAC,gBAAO,KAAGA,IAAE,QAAMA,IAAE,IAAI,MAAM,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,aAAW,WAAU;AAAC,gBAAO,KAAGA,IAAE,aAAWA,IAAE,IAAI,WAAW,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,YAAU,WAAU;AAAC,gBAAO,KAAGA,IAAE,YAAUA,IAAE,IAAI,UAAU,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,OAAK,WAAU;AAAC,gBAAO,KAAGA,IAAE,OAAKA,IAAE,IAAI,KAAK,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,SAAO,WAAU;AAAC,gBAAO,KAAGA,IAAE,SAAOA,IAAE,IAAI,OAAO,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,cAAY,WAAU;AAAC,gBAAO,KAAGA,IAAE,cAAYA,IAAE,IAAI,YAAY,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,cAAY,WAAU;AAAC,gBAAO,KAAGA,IAAE,cAAYA,IAAE,IAAI,YAAY,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,aAAW,WAAU;AAAC,gBAAO,KAAGA,IAAE,aAAWA,IAAE,IAAI,WAAW,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,cAAY,WAAU;AAAC,gBAAO,KAAGA,IAAE,cAAYA,IAAE,IAAI,YAAY,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,OAAK,WAAU;AAAC,gBAAO,KAAGA,IAAE,OAAKA,IAAE,IAAI,KAAK,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,WAAS,WAAU;AAAC,gBAAO,KAAGA,IAAE,WAASA,IAAE,IAAI,SAAS,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,aAAW,WAAU;AAAC,gBAAO,KAAGA,IAAE,aAAWA,IAAE,IAAI,WAAW,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,iBAAe,WAAU;AAAC,gBAAO,KAAGA,IAAE,iBAAeA,IAAE,IAAI,eAAe,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,eAAa,WAAU;AAAC,gBAAO,KAAGA,IAAE,eAAaA,IAAE,IAAI,aAAa,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,qBAAmB,WAAU;AAAC,gBAAO,KAAGA,IAAE,qBAAmBA,IAAE,IAAI,mBAAmB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,WAAS,WAAU;AAAC,gBAAO,KAAGA,IAAE,WAASA,IAAE,IAAI,SAAS,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,QAAM,WAAU;AAAC,gBAAO,KAAGA,IAAE,QAAMA,IAAE,IAAI,MAAM,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,OAAK,WAAU;AAAC,gBAAO,KAAGA,IAAE,OAAKA,IAAE,IAAI,KAAK,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,WAAS,WAAU;AAAC,gBAAO,KAAGA,IAAE,WAASA,IAAE,IAAI,SAAS,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,aAAW,WAAU;AAAC,gBAAO,KAAGA,IAAE,aAAWA,IAAE,IAAI,WAAW,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,OAAK,WAAU;AAAC,gBAAO,KAAGA,IAAE,OAAKA,IAAE,IAAI,KAAK,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,eAAa,WAAU;AAAC,gBAAO,KAAGA,IAAE,eAAaA,IAAE,IAAI,aAAa,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,YAAU,WAAU;AAAC,gBAAO,KAAGA,IAAE,YAAUA,IAAE,IAAI,UAAU,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,OAAK,WAAU;AAAC,gBAAO,KAAGA,IAAE,OAAKA,IAAE,IAAI,KAAK,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,uBAAqB,WAAU;AAAC,gBAAO,KAAGA,IAAE,uBAAqBA,IAAE,IAAI,qBAAqB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,uBAAqB,WAAU;AAAC,gBAAO,KAAGA,IAAE,uBAAqBA,IAAE,IAAI,qBAAqB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,uBAAqB,WAAU;AAAC,gBAAO,KAAGA,IAAE,uBAAqBA,IAAE,IAAI,qBAAqB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,YAAU,WAAU;AAAC,gBAAO,KAAGA,IAAE,YAAUA,IAAE,IAAI,UAAU,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,UAAQ,WAAU;AAAC,gBAAO,KAAGA,IAAE,UAAQA,IAAE,IAAI,QAAQ,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,SAAO,WAAU;AAAC,gBAAO,KAAGA,IAAE,SAAOA,IAAE,IAAI,OAAO,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,OAAK,WAAU;AAAC,gBAAO,KAAGA,IAAE,OAAKA,IAAE,IAAI,KAAK,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,SAAO,WAAU;AAAC,gBAAO,KAAGA,IAAE,SAAOA,IAAE,IAAI,OAAO,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,QAAM,WAAU;AAAC,gBAAO,KAAGA,IAAE,QAAMA,IAAE,IAAI,MAAM,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,WAAS,WAAU;AAAC,gBAAO,KAAGA,IAAE,WAASA,IAAE,IAAI,SAAS,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,cAAY,WAAU;AAAC,gBAAO,KAAGA,IAAE,cAAYA,IAAE,IAAI,YAAY,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,QAAM,WAAU;AAAC,gBAAO,KAAGA,IAAE,QAAMA,IAAE,IAAI,MAAM,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,SAAO,WAAU;AAAC,gBAAO,KAAGA,IAAE,SAAOA,IAAE,IAAI,OAAO,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,kBAAgB,WAAU;AAAC,gBAAO,KAAGA,IAAE,kBAAgBA,IAAE,IAAI,gBAAgB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,sBAAoB,WAAU;AAAC,gBAAO,KAAGA,IAAE,sBAAoBA,IAAE,IAAI,oBAAoB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,yBAAuB,WAAU;AAAC,gBAAO,KAAGA,IAAE,yBAAuBA,IAAE,IAAI,uBAAuB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,6BAA2B,WAAU;AAAC,gBAAO,KAAGA,IAAE,6BAA2BA,IAAE,IAAI,2BAA2B,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,WAAS,WAAU;AAAC,gBAAO,KAAGA,IAAE,WAASA,IAAE,IAAI,SAAS,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,oBAAkB,WAAU;AAAC,gBAAO,KAAGA,IAAE,oBAAkBA,IAAE,IAAI,kBAAkB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,SAAO,WAAU;AAAC,gBAAO,KAAGA,IAAE,SAAOA,IAAE,IAAI,OAAO,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,SAAO,WAAU;AAAC,gBAAO,KAAGA,IAAE,SAAOA,IAAE,IAAI,OAAO,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,aAAW,WAAU;AAAC,gBAAO,KAAGA,IAAE,aAAWA,IAAE,IAAI,WAAW,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,gBAAc,WAAU;AAAC,gBAAO,KAAGA,IAAE,gBAAcA,IAAE,IAAI,cAAc,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,YAAU,WAAU;AAAC,gBAAO,KAAGA,IAAE,YAAUA,IAAE,IAAI,UAAU,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,QAAM,WAAU;AAAC,gBAAO,KAAGA,IAAE,QAAMA,IAAE,IAAI,MAAM,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,WAAS,WAAU;AAAC,gBAAO,KAAGA,IAAE,WAASA,IAAE,IAAI,SAAS,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,QAAM,WAAU;AAAC,gBAAO,KAAGA,IAAE,QAAMA,IAAE,IAAI,MAAM,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,OAAK,WAAU;AAAC,gBAAO,KAAGA,IAAE,OAAKA,IAAE,IAAI,KAAK,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,QAAM,WAAU;AAAC,gBAAO,KAAGA,IAAE,QAAMA,IAAE,IAAI,MAAM,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,WAAS,WAAU;AAAC,gBAAO,KAAGA,IAAE,WAASA,IAAE,IAAI,SAAS,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,YAAU,WAAU;AAAC,gBAAO,KAAGA,IAAE,YAAUA,IAAE,IAAI,UAAU,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,uBAAqB,WAAU;AAAC,gBAAO,KAAGA,IAAE,uBAAqBA,IAAE,IAAI,qBAAqB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,iBAAe,WAAU;AAAC,gBAAO,KAAGA,IAAE,iBAAeA,IAAE,IAAI,eAAe,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,0BAAwB,WAAU;AAAC,gBAAO,KAAGA,IAAE,0BAAwBA,IAAE,IAAI,wBAAwB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,iBAAe,WAAU;AAAC,gBAAO,KAAGA,IAAE,iBAAeA,IAAE,IAAI,eAAe,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,QAAM,WAAU;AAAC,gBAAO,KAAGA,IAAE,QAAMA,IAAE,IAAI,MAAM,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,UAAQ,WAAU;AAAC,gBAAO,KAAGA,IAAE,UAAQA,IAAE,IAAI,QAAQ,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,qBAAmB,WAAU;AAAC,gBAAO,KAAGA,IAAE,qBAAmBA,IAAE,IAAI,mBAAmB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,QAAM,WAAU;AAAC,gBAAO,KAAGA,IAAE,QAAMA,IAAE,IAAI,MAAM,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,gBAAc,WAAU;AAAC,gBAAO,KAAGA,IAAE,gBAAcA,IAAE,IAAI,cAAc,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,OAAK,WAAU;AAAC,gBAAO,KAAGA,IAAE,OAAKA,IAAE,IAAI,KAAK,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,OAAK,WAAU;AAAC,gBAAO,KAAGA,IAAE,OAAKA,IAAE,IAAI,KAAK,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,OAAK,WAAU;AAAC,gBAAO,KAAGA,IAAE,OAAKA,IAAE,IAAI,KAAK,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,QAAM,WAAU;AAAC,gBAAO,KAAGA,IAAE,QAAMA,IAAE,IAAI,MAAM,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,uBAAqB,WAAU;AAAC,gBAAO,KAAGA,IAAE,uBAAqBA,IAAE,IAAI,qBAAqB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,QAAM,WAAU;AAAC,gBAAO,KAAGA,IAAE,QAAMA,IAAE,IAAI,MAAM,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,QAAM,WAAU;AAAC,gBAAO,KAAGA,IAAE,QAAMA,IAAE,IAAI,MAAM,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,aAAW,WAAU;AAAC,gBAAO,KAAGA,IAAE,aAAWA,IAAE,IAAI,WAAW,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,aAAW,WAAU;AAAC,gBAAO,KAAGA,IAAE,aAAWA,IAAE,IAAI,WAAW,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,gBAAc,WAAU;AAAC,gBAAO,KAAGA,IAAE,gBAAcA,IAAE,IAAI,cAAc,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,UAAQ,WAAU;AAAC,gBAAO,KAAGA,IAAE,UAAQA,IAAE,IAAI,QAAQ,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,QAAM,WAAU;AAAC,gBAAO,KAAGA,IAAE,QAAMA,IAAE,IAAI,MAAM,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,oBAAkB,WAAU;AAAC,gBAAO,KAAGA,IAAE,oBAAkBA,IAAE,IAAI,kBAAkB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,YAAU,WAAU;AAAC,gBAAO,KAAGA,IAAE,YAAUA,IAAE,IAAI,WAAW,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,eAAa,WAAU;AAAC,gBAAO,KAAGA,IAAE,eAAaA,IAAE,IAAI,cAAc,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,aAAW,WAAU;AAAC,gBAAO,KAAGA,IAAE,aAAWA,IAAE,IAAI,YAAY,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,mBAAiB,WAAU;AAAC,gBAAO,KAAGA,IAAE,mBAAiBA,IAAE,IAAI,kBAAkB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,eAAa,WAAU;AAAC,gBAAO,KAAGA,IAAE,eAAaA,IAAE,IAAI,cAAc,MAAM,MAAK,SAAS;AAAA,MAAC;AAAE,MAAAA,IAAE,QAAM;AAAG,UAAI;AAAG,WAAG,SAAS,IAAG;AAAC,cAAI,GAAG,GAAE,OAAK,KAAG;AAAA,MAAE;AAAE,eAAS,GAAG,GAAE;AAAC,YAAG,IAAE,KAAG,GAAE,KAAG,MAAI,GAAG,GAAE,KAAG,GAAG;AAAO,iBAAS,KAAI;AAAC,iBAAK,KAAG,MAAGA,IAAE,YAAU,MAAG,CAAC,MAAI,GAAG,GAAE,EAAEA,GAAC,GAAEA,IAAE,wBAAsBA,IAAE,qBAAqB,GAAE,GAAG;AAAA,QAAG;AAAC,QAAAA,IAAE,aAAWA,IAAE,UAAU,YAAY,GAAE,WAAW,WAAU;AAAC,qBAAW,WAAU;AAAC,YAAAA,IAAE,UAAU,EAAE;AAAA,UAAC,GAAE,CAAC,GAAE,GAAG;AAAA,QAAC,GAAE,CAAC,KAAG,GAAG;AAAA,MAAC;AAAC,UAAGA,IAAE,QAAQ,MAAI,OAAOA,IAAE,WAAS,eAAaA,IAAE,UAAQ,CAACA,IAAE,OAAO,IAAGA,IAAE,QAAQ,SAAO,IAAG,CAAAA,IAAE,QAAQ,IAAI,EAAE;AAAE,SAAG;AAAE,UAAI;AAAG,YAAI,KAAG,EAAC,mBAAkB,QAAQ,UAAU,mBAAmB,EAAE,OAAO,SAAS,GAAE;AAAC,eAAM,CAAC,EAAE,kBAAkB,QAAQ,CAAC,IAAE;AAAA,MAAE,CAAC,GAAE,oBAAmB,QAAQ,UAAU,oBAAoB,EAAE,OAAO,SAAS,GAAE;AAAC,eAAM,CAAC,EAAE,mBAAmB,QAAQ,CAAC,IAAE;AAAA,MAAE,CAAC,EAAC;AAAG,UAAI;AAAG,UAAG,OAAO,KAAG,YAAY,MAAG;AAAA,eAAU,OAAO,iCAA+B,YAAY,MAAG;AAAA,UAAmC,OAAM,IAAI,MAAM,uCAAuC;AAAE,UAAG,IAAG;AAAC,YAAI,KAAG,GAAG;AAAS,WAAG,WAAS,WAAU;AAAC,aAAG,GAAE,GAAG,kBAAkB,QAAQ,SAAS,GAAE;AAAC,oBAAQ,eAAe,qBAAoB,CAAC;AAAA,UAAC,CAAC,GAAE,GAAG,mBAAmB,QAAQ,SAAS,GAAE;AAAC,oBAAQ,eAAe,sBAAqB,CAAC;AAAA,UAAC,CAAC;AAAA,QAAC;AAAA,MAAC;AAAC,aAAO,EAAE;AAAA,IAAK;AAAA,EAAC,GAAG;AAAE,SAAO,MAAI,YAAU,OAAO,MAAI,WAAS,GAAG,UAAQ,KAAG,OAAO,UAAQ,cAAY,OAAO,MAAI,OAAO,CAAC,GAAE,WAAU;AAAC,WAAO;AAAA,EAAE,CAAC,IAAE,OAAO,MAAI,aAAW,GAAG,oBAAkB;AAAG,CAAC;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE;AAAC,SAAK,UAAQ,GAAE,KAAK,YAAUA,KAAE,KAAK,OAAK,oBAAI,WAAQ,KAAK,eAAa;AAAA,EAAC;AAAA,EAAC,IAAI,GAAE;AAAC,WAAO,KAAK,KAAK,IAAI,CAAC,KAAG,KAAK,UAAU,SAAS,KAAK,SAAQ,CAAC,GAAE,KAAK,KAAK,IAAI,CAAC;AAAA,EAAC;AAAA,EAAC,IAAI,GAAEA,KAAE;AAAC,SAAK,gBAAe,KAAK,KAAK,IAAI,GAAEA,GAAC;AAAA,EAAC;AAAA,EAAC,IAAI,GAAE;AAAC,WAAO,KAAK,KAAK,IAAI,CAAC;AAAA,EAAC;AAAA,EAAC,OAAO,GAAE;AAAC,WAAO,KAAK,gBAAe,KAAK,KAAK,OAAO,CAAC;AAAA,EAAC;AAAA,EAAC,aAAY;AAAC,WAAO,KAAK;AAAA,EAAY;AAAC;AAA/W,IAAiX,KAAG,MAAK;AAAA,EAAC,SAAS,GAAE;AAAC,WAAO,GAAG,UAAU;AAAA,EAAC;AAAA,EAAC,OAAO,GAAE;AAAC,WAAO,GAAG,QAAQ;AAAA,EAAC;AAAA,EAAC,iBAAgB;AAAC,WAAM;AAAA,EAAE;AAAA,EAAC,KAAK,GAAE;AAAC,WAAO,GAAG,MAAM;AAAA,EAAC;AAAA,EAAC,KAAK,GAAE;AAAC,WAAO,GAAG,MAAM;AAAA,EAAC;AAAA,EAAC,SAAS,GAAE;AAAC,WAAO,GAAG,UAAU;AAAA,EAAC;AAAA,EAAC,UAAU,GAAEA,KAAE;AAAC,WAAO,GAAG,WAAW;AAAA,EAAC;AAAA,EAAC,aAAY;AAAC,WAAO,GAAG,YAAY;AAAA,EAAC;AAAA,EAAC,YAAY,GAAEA,KAAE;AAAC,WAAO,GAAG,aAAa;AAAA,EAAC;AAAA,EAAC,MAAM,GAAEA,KAAE,GAAE;AAAC,WAAO,GAAG,OAAO;AAAA,EAAC;AAAA,EAAC,KAAK,GAAEA,KAAE,GAAE,GAAE,GAAE;AAAC,WAAO,GAAG,MAAM;AAAA,EAAC;AAAA,EAAC,wBAAwB,GAAEA,KAAE,GAAE;AAAC,WAAO,GAAG,yBAAyB;AAAA,EAAC;AAAA,EAAC,SAAQ;AAAC,WAAO,GAAG,QAAQ;AAAA,EAAC;AAAA,EAAC,iBAAgB;AAAC,WAAO,GAAG,gBAAgB;AAAA,EAAC;AAAA,EAAC,UAAS;AAAC,WAAO,KAAK,eAAe,MAAI,KAAG,OAAK;AAAA,EAAI;AAAA,EAAC,UAAS;AAAC,WAAO,GAAG,SAAS;AAAA,EAAC;AAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,QAAM,IAAI,MAAM,IAAIA,GAAC,0HAA0H;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAI,IAAEA,IAAE,QAAOC,MAAE;AAAE,SAAK,IAAE,IAAG,CAAAA,MAAE,KAAK,OAAO,IAAE,IAAE,GAAE,KAAI,GAAGD,KAAE,GAAEC,GAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAGA,IAAE,WAAS,EAAE,OAAO,OAAM,IAAI,MAAM,yEAAyEA,IAAE,MAAM,2BAA2B,EAAE,MAAM,EAAE;AAAE,MAAIC,MAAED,IAAE,QAAO,IAAE;AAAE,SAAKC,MAAE,IAAG,KAAE,KAAK,OAAO,IAAEA,MAAE,GAAEA,OAAI,GAAGD,KAAEC,KAAE,CAAC,GAAE,GAAG,GAAEA,KAAE,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,SAAO,KAAK,IAAID,KAAE,KAAK,IAAI,GAAEC,GAAC,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,SAAOA,MAAE,MAAI,IAAEA,MAAEA,MAAE;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAED,IAAE,CAAC;AAAE,EAAAA,IAAE,CAAC,IAAEA,IAAEC,GAAC,GAAED,IAAEC,GAAC,IAAE;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAI,IAAE;AAAE,WAAQC,MAAE,GAAEA,MAAED,IAAE,QAAOC,MAAI,MAAGD,IAAEC,GAAC;AAAE,SAAO;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,KAAK,OAAO;AAAE,SAAO,IAAEA,OAAG,IAAEA,OAAGD;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAIC,MAAE;AAAE,WAAQ,IAAE,GAAE,IAAED,IAAE,QAAO,KAAI;AAAC,QAAI,IAAE,OAAOA,IAAE,CAAC,CAAC,IAAE,OAAO,EAAE,CAAC,CAAC;AAAE,IAAAC,OAAG,IAAE;AAAA,EAAC;AAAC,SAAOA;AAAC;AAAC,SAAS,EAAED,KAAE,GAAE;AAAC,MAAG,CAACA,IAAE,OAAM,IAAI,MAAM,OAAO,KAAG,WAAS,IAAE,EAAE,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,MAAE,IAAG;AAAC,IAAE,GAAGD,KAAE,CAAC,GAAE,MAAIC,MAAE,WAAWD,GAAC,QAAQ,CAAC,aAAa;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,IAAEA,OAAG,MAAK,MAAI,+DAA+D;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAGA,IAAE,WAAS,EAAE,QAAO;AAAE,MAAI,IAAEA,IAAE,CAAC;AAAE,WAAQC,MAAE,GAAEA,MAAED,IAAE,QAAOC,MAAI,MAAGD,IAAEC,GAAC;AAAE,SAAO;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,SAAOA,IAAE,WAAS;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAGA,QAAI,EAAE,QAAM;AAAG,MAAGA,OAAG,QAAM,KAAG,QAAMA,IAAE,WAAS,EAAE,OAAO,QAAM;AAAG,WAAQC,MAAE,GAAEA,MAAED,IAAE,QAAOC,MAAI,KAAGD,IAAEC,GAAC,MAAI,QAAM,EAAEA,GAAC,MAAI,QAAMD,IAAEC,GAAC,MAAI,EAAEA,GAAC,EAAE,QAAM;AAAG,SAAM;AAAE;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAGA,QAAI,EAAE,QAAM;AAAG,MAAGA,OAAG,QAAM,KAAG,QAAMA,IAAE,WAAS,EAAE,OAAO,QAAM;AAAG,WAAQC,MAAE,GAAEA,MAAED,IAAE,QAAOC,MAAI,KAAGD,IAAEC,GAAC,MAAI,EAAEA,GAAC,EAAE,QAAM;AAAG,SAAM;AAAE;AAAC,SAAS,GAAGD,KAAE;AAAC,SAAOA,MAAE,MAAI;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAG,KAAK,QAAM,KAAK,QAAO,KAAK,KAAKA,GAAC;AAAE,MAAGA,QAAI,IAAE,EAAE,QAAO;AAAE,MAAGA,QAAI,KAAG,EAAE,QAAM;AAAG;AAAC,QAAI,IAAE,KAAK,IAAI,IAAEA,GAAC;AAAE,YAAO,IAAE,MAAI,IAAE;AAAA,EAAE;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAI,IAAE,KAAK,KAAK,KAAK,KAAKA,GAAC,CAAC;AAAE,SAAM,CAAC,GAAE,KAAK,KAAKA,MAAE,CAAC,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAI,IAAE,IAAI,YAAYA,GAAC;AAAE,WAAQC,MAAE,GAAEA,MAAED,KAAE,EAAEC,IAAE,GAAEA,GAAC,IAAEA;AAAE,SAAO,GAAG,CAAC,GAAE;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,SAAO,KAAGA,IAAE,SAAOA,MAAEA,MAAE,IAAI,OAAO,IAAEA,IAAE,MAAM;AAAC;AAAC,SAAS,GAAGA,KAAE,IAAE,OAAG,GAAEC,KAAE,GAAE;AAAC,SAAO,IAAI,QAAQ,CAAC,GAAE,MAAI;AAAC,QAAI,IAAE,GAAE,IAAE,MAAI;AAAC,UAAGD,IAAE,GAAE;AAAC,UAAE;AAAE;AAAA,MAAM;AAAC;AAAI,UAAI,IAAE,EAAE,CAAC;AAAE,UAAGC,OAAG,QAAM,KAAGA,KAAE;AAAC,UAAE;AAAE;AAAA,MAAM;AAAC,WAAG,OAAK,EAAE,GAAE,CAAC,IAAE,WAAW,GAAE,CAAC;AAAA,IAAC;AAAE,MAAE;AAAA,EAAC,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,GAAE,IAAE;AAAG,WAAQ,IAAE,GAAE,IAAED,IAAE,QAAO,EAAE,EAAE,KAAGA,IAAE,CAAC,KAAG,EAAE,CAAAC,OAAGD,IAAE,CAAC;AAAA,WAAUA,IAAE,CAAC,MAAI,IAAG;AAAC,QAAG,MAAI,GAAG,OAAM,MAAM,yDAAyD,CAAC,YAAY,CAAC,EAAE;AAAE,QAAE;AAAA,EAAC,WAASA,IAAE,CAAC,IAAE,EAAE,OAAM,MAAM,gCAAgCA,IAAE,CAAC,CAAC,WAAW,CAAC,EAAE;AAAE,MAAG,MAAI,IAAG;AAAC,QAAG,IAAE,KAAG,MAAIC,IAAE,OAAM,MAAM,QAAQ,CAAC,qCAAqCD,GAAC,EAAE;AAAE,WAAOA;AAAA,EAAC;AAAC,MAAGC,QAAI,EAAE,OAAM,MAAM,qCAAqCD,GAAC,6BAA6B;AAAE,MAAG,IAAEC,QAAI,EAAE,OAAM,MAAM,wDAAwD,CAAC,MAAMA,GAAC,EAAE;AAAE,MAAI,IAAED,IAAE,MAAM;AAAE,SAAO,EAAE,CAAC,IAAE,IAAEC,KAAE;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAE;AAAO,SAAOD,MAAEA,OAAG,OAAK,EAAE,IAAI,CAAC,GAAE,MAAI,CAAC,IAAE,CAAC,EAAE,OAAOA,GAAC,GAAE,EAAEA,IAAE,MAAM,OAAG,KAAG,CAACC,OAAG,IAAEA,GAAC,GAAE,MAAI,+CAA+CA,GAAC,KAAKA,GAAC,kBAAkBD,GAAC,EAAE,GAAE,EAAEA,IAAE,MAAM,OAAG,GAAG,CAAC,CAAC,GAAE,MAAI,0DAA0DA,GAAC,EAAE,GAAEA,IAAE,IAAI,OAAG,IAAE,IAAEC,MAAE,IAAE,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,CAAC,GAAE,IAAE,CAAC,GAAE,IAAE,KAAG,QAAM,MAAM,QAAQ,CAAC,KAAG,EAAE,WAAS,GAAE,IAAE,KAAG,QAAM,IAAE,OAAK,GAAG,GAAED,GAAC,EAAE,KAAK,GAAE,IAAE;AAAE,WAAQ,IAAE,GAAE,IAAEA,IAAE,QAAO,EAAE,GAAE;AAAC,QAAG,KAAG,MAAK;AAAC,UAAG,EAAE,CAAC,MAAI,KAAGA,IAAE,CAAC,MAAI,EAAE,OAAM,IAAI,MAAM,sBAAsB,CAAC,mBAAmBA,IAAE,CAAC,CAAC,YAAY;AAAE,OAAC,EAAE,CAAC,KAAG,QAAM,EAAE,CAAC,IAAE,MAAIA,IAAE,CAAC,MAAI,MAAIC,IAAE,KAAKD,IAAE,CAAC,CAAC,GAAE,EAAE,KAAK,CAAC,IAAG,EAAE,CAAC,KAAG,KAAG;AAAA,IAAG;AAAC,IAAAA,IAAE,CAAC,MAAI,MAAIC,IAAE,KAAKD,IAAE,CAAC,CAAC,GAAE,EAAE,KAAK,CAAC;AAAA,EAAE;AAAC,SAAM,EAAC,UAASC,KAAE,UAAS,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,SAAO,GAAGA,KAAE,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAIC,MAAE;AAAK,MAAGD,OAAG,QAAMA,QAAI,UAAU,CAAAC,MAAE,IAAI,aAAa,CAAC;AAAA,WAAUD,QAAI,QAAQ,CAAAC,MAAE,IAAI,WAAW,CAAC;AAAA,WAAUD,QAAI,OAAO,CAAAC,MAAE,IAAI,WAAW,CAAC;AAAA,WAAUD,QAAI,SAAS,CAAAC,MAAE,IAAI,MAAM,CAAC;AAAA,MAAO,OAAM,IAAI,MAAM,qBAAqBD,GAAC,EAAE;AAAE,SAAOC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,WAAQC,MAAE,GAAEA,MAAED,IAAE,QAAOC,OAAI;AAAC,QAAI,IAAED,IAAEC,GAAC;AAAE,QAAG,MAAM,CAAC,KAAG,CAAC,SAAS,CAAC,EAAE,OAAM,MAAM,oBAAoB,CAAC,4BAA4B,CAAC,GAAG;AAAA,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,SAAOA,QAAI,UAAQA,QAAI,eAAaA,QAAI,aAAWA,QAAI,WAASA,QAAI;AAAQ;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,SAAM,EAAE,MAAI,eAAa,MAAI,aAAWA,QAAI,eAAa,MAAI,WAASA,QAAI,aAAWA,QAAI,eAAa,MAAI,UAAQA,QAAI;AAAO;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAGA,QAAI,aAAWA,QAAI,QAAQ,QAAO;AAAE,MAAGA,QAAI,YAAY,QAAO;AAAE,MAAGA,QAAI,OAAO,QAAO;AAAE,QAAM,IAAI,MAAM,iBAAiBA,GAAC,EAAE;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAGA,OAAG,KAAK,QAAO;AAAE,MAAI,IAAE;AAAE,SAAOA,IAAE,QAAQ,CAAAC,QAAG,KAAGA,IAAE,MAAM,GAAE;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,SAAO,OAAOA,OAAG,YAAUA,eAAa;AAAM;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAO,OAAOA,OAAG;AAAS;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAO,OAAOA,OAAG;AAAQ;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAO,MAAM,QAAQA,GAAC,IAAE,GAAGA,IAAE,CAAC,CAAC,IAAEA,eAAa,eAAa,YAAUA,eAAa,cAAYA,eAAa,cAAYA,eAAa,oBAAkB,UAAQ,GAAGA,GAAC,IAAE,YAAU,GAAGA,GAAC,IAAE,WAAS,GAAGA,GAAC,IAAE,SAAO;AAAS;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAM,CAAC,EAAEA,OAAGA,IAAE,eAAaA,IAAE,QAAMA,IAAE;AAAM;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,WAAQC,MAAE,GAAEA,MAAED,KAAE,EAAEC,IAAE,KAAGD,MAAEC,QAAI,EAAE,QAAOA;AAAE,SAAOD;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAI,IAAEA,IAAE;AAAO,MAAG,IAAE,EAAE,QAAM,CAAC;AAAE,MAAIC,MAAE,IAAI,MAAM,IAAE,CAAC;AAAE,EAAAA,IAAE,IAAE,CAAC,IAAED,IAAE,IAAE,CAAC;AAAE,WAAQ,IAAE,IAAE,GAAE,KAAG,GAAE,EAAE,EAAE,CAAAC,IAAE,CAAC,IAAEA,IAAE,IAAE,CAAC,IAAED,IAAE,IAAE,CAAC;AAAE,SAAOC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE,IAAE,OAAG;AAAC,MAAI,IAAE,IAAI;AAAM,MAAG,EAAE,WAAS,GAAE;AAAC,QAAI,IAAE,EAAE,CAAC,KAAG,IAAE,IAAE;AAAG,aAAQ,IAAE,GAAE,IAAE,GAAE,IAAI,GAAE,CAAC,IAAEA,IAAED,MAAE,CAAC;AAAA,EAAC,OAAK;AAAC,QAAI,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,EAAE,OAAO,CAAC,GAAE,MAAI,IAAE,CAAC,KAAG,IAAE,IAAE;AAAG,aAAQ,IAAE,GAAE,IAAE,GAAE,IAAI,GAAE,CAAC,IAAE,GAAGA,MAAE,IAAE,GAAE,GAAEC,KAAE,CAAC;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,MAAE,OAAG;AAAC,MAAGD,IAAE,WAAS,EAAE,QAAO,EAAE,CAAC;AAAE,MAAI,IAAEA,IAAE,OAAO,CAAC,GAAE,MAAI,IAAE,CAAC,KAAGC,MAAE,IAAE;AAAG,MAAG,MAAI,EAAE,QAAM,CAAC;AAAE,MAAG,MAAI,EAAE,OAAO,OAAM,IAAI,MAAM,IAAID,GAAC,mCAAmC,EAAE,MAAM,GAAGC,MAAE,0BAAwB,EAAE,GAAG;AAAE,SAAO,GAAG,GAAED,KAAE,GAAEC,GAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAG,MAAM,QAAQA,GAAC,EAAE,QAAOA;AAAE,MAAG,MAAI,UAAU,QAAOA,eAAa,eAAaA,MAAE,IAAI,aAAaA,GAAC;AAAE,MAAG,MAAI,QAAQ,QAAOA,eAAa,aAAWA,MAAE,IAAI,WAAWA,GAAC;AAAE,MAAG,MAAI,UAAQ,MAAI,SAAS,QAAO,WAAW,KAAK,IAAI,WAAWA,GAAC,CAAC;AAAE,QAAM,IAAI,MAAM,iBAAiB,CAAC,EAAE;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAIC,MAAE,GAAGD,KAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAEC,IAAE,QAAO,IAAI,CAAAA,IAAE,CAAC,IAAE;AAAE,SAAOA;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAG,KAAG,QAAM,MAAI,aAAW,MAAI,YAAY,QAAO,IAAI,aAAaA,GAAC;AAAE,MAAG,MAAI,QAAQ,QAAO,IAAI,WAAWA,GAAC;AAAE,MAAG,MAAI,OAAO,QAAO,IAAI,WAAWA,GAAC;AAAE,QAAM,IAAI,MAAM,qBAAqB,CAAC,EAAE;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAIC,MAAED,IAAE,OAAO,CAAC,GAAE,MAAI,IAAE,GAAE,CAAC;AAAE,MAAG,KAAG,QAAM,MAAI,UAAU,QAAO,GAAGA,KAAE,IAAI,aAAaC,GAAC,CAAC;AAAE,MAAG,MAAI,QAAQ,QAAO,GAAGD,KAAE,IAAI,WAAWC,GAAC,CAAC;AAAE,MAAG,MAAI,OAAO,QAAO,GAAGD,KAAE,IAAI,WAAWC,GAAC,CAAC;AAAE,QAAM,IAAI,MAAM,qBAAqB,CAAC,EAAE;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,EAAAA,IAAE,QAAQ,OAAG;AAAC,MAAE,OAAO,UAAU,CAAC,KAAG,KAAG,GAAE,MAAI,0EAA0EA,GAAC,IAAI;AAAA,EAAC,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAG,MAAI,EAAE,QAAO;AAAE,MAAG,MAAI,EAAE,QAAOD,IAAE,CAAC;AAAE,MAAI,IAAEA,IAAEA,IAAE,SAAO,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAEA,IAAE,SAAO,GAAE,EAAE,EAAE,MAAGC,IAAE,CAAC,IAAED,IAAE,CAAC;AAAE,SAAO;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAG,MAAI,EAAE,QAAM,CAAC;AAAE,MAAG,MAAI,EAAE,QAAM,CAACD,GAAC;AAAE,MAAI,IAAE,IAAI,MAAM,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,SAAO,GAAE,EAAE,EAAE,GAAE,CAAC,IAAE,KAAK,MAAMA,MAAEC,IAAE,CAAC,CAAC,GAAED,OAAG,EAAE,CAAC,IAAEC,IAAE,CAAC;AAAE,SAAO,EAAE,EAAE,SAAO,CAAC,IAAED,KAAE;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAOA,OAAGA,IAAE,QAAM,OAAOA,IAAE,QAAM;AAAU;AAAC,IAAI,KAAG;AAAP,IAAmB,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,SAAO,GAAE,KAAK,QAAM,CAAC,GAAE,KAAK,eAAa,CAAC,GAAE,KAAK,WAAS,CAAC,GAAE,KAAK,iBAAe,IAAG,KAAK,iBAAiB;AAAA,EAAC;AAAA,EAAC,YAAY,GAAEC,KAAE;AAAC,SAAK,YAAU,SAAO,EAAE,EAAE,QAAQ,SAAS,KAAG,EAAE,EAAE,QAAQ,MAAM,KAAG,QAAQ,KAAK,YAAY,KAAK,YAAY,wDAAwD,CAAC,GAAG,IAAG,KAAK,eAAa,GAAE,KAAK,WAASA;AAAA,EAAC;AAAA,EAAC,aAAa,GAAEA,KAAE,GAAE;AAAC,QAAG,KAAK,aAAa,CAAC,IAAE,EAAC,cAAaA,KAAE,SAAQ,EAAC,GAAE,KAAK,SAAS,CAAC,KAAG,MAAK;AAAC,UAAI,IAAE,KAAK,SAAS,CAAC;AAAE,QAAE,EAAE,QAAQ,SAAS,KAAG,EAAE,EAAE,QAAQ,MAAM,KAAG,QAAQ,KAAK,qCAAqC,CAAC,KAAK,CAAC,GAAG,GAAE,KAAK,IAAI,GAAE,CAAC;AAAA,IAAC;AAAA,EAAC;AAAA,EAAC,MAAM,SAAS,GAAE;AAAC,WAAO,KAAK,KAAK,QAAM,KAAK,MAAM,CAAC,KAAG,KAAK,MAAM,CAAC,IAAE,MAAM,KAAK,aAAa,CAAC,GAAE,KAAK,MAAM,CAAC;AAAA,EAAE;AAAA,EAAC,IAAI,GAAE;AAAC,QAAG,KAAK,KAAK,MAAM,QAAO,KAAK,MAAM,CAAC;AAAE,QAAIA,MAAE,KAAK,aAAa,CAAC;AAAE,QAAG,GAAGA,GAAC,EAAE,OAAM,IAAI,MAAM,QAAQ,CAAC,oEAAoE;AAAE,WAAO,KAAK,MAAM,CAAC,IAAEA,KAAE,KAAK,MAAM,CAAC;AAAA,EAAC;AAAA,EAAC,UAAU,GAAE;AAAC,WAAO,KAAK,IAAI,CAAC;AAAA,EAAC;AAAA,EAAC,QAAQ,GAAE;AAAC,WAAO,KAAK,IAAI,CAAC;AAAA,EAAC;AAAA,EAAC,UAAU,GAAE;AAAC,WAAO,KAAK,IAAI,CAAC;AAAA,EAAC;AAAA,EAAC,WAAU;AAAC,WAAO,KAAK;AAAA,EAAK;AAAA,EAAC,IAAI,WAAU;AAAC,WAAO,KAAK;AAAA,EAAK;AAAA,EAAC,IAAI,GAAEA,KAAE;AAAC,QAAG,KAAK,aAAa,CAAC,KAAG,KAAK,OAAM,IAAI,MAAM,mBAAmB,CAAC,iCAAiC;AAAE,SAAK,MAAM,CAAC,IAAEA,KAAE,KAAK,aAAa,CAAC,EAAE,WAAS,QAAM,KAAK,aAAa,CAAC,EAAE,QAAQA,GAAC;AAAA,EAAC;AAAA,EAAC,aAAa,GAAE;AAAC,QAAG,KAAK,aAAa,CAAC,KAAG,KAAK,OAAM,IAAI,MAAM,yBAAyB,CAAC,kCAAkC;AAAE,WAAO,KAAK,aAAa,CAAC,EAAE,aAAa;AAAA,EAAC;AAAA,EAAC,SAAS,GAAE;AAAC,SAAK,QAAM,OAAO,OAAO,CAAC,GAAE,CAAC;AAAA,EAAC;AAAA,EAAC,QAAO;AAAC,SAAK,QAAM,CAAC,GAAE,KAAK,WAAS,CAAC,GAAE,KAAK,iBAAiB;AAAA,EAAC;AAAA,EAAC,mBAAkB;AAAC,QAAG,OAAO,KAAK,UAAQ,eAAa,OAAO,KAAK,OAAO,YAAU,eAAa,OAAO,KAAK,OAAO,SAAS,UAAQ,YAAY;AAAO,QAAI,IAAE,KAAK,eAAe,KAAK,OAAO,SAAS,MAAM;AAAE,UAAM,KAAG,EAAE,EAAE,EAAE,MAAM,GAAG,EAAE,QAAQ,OAAG;AAAC,UAAG,CAAC,GAAE,CAAC,IAAE,EAAE,MAAM,GAAG;AAAE,WAAK,SAAS,CAAC,IAAE,GAAG,GAAE,CAAC;AAAA,IAAC,CAAC;AAAA,EAAC;AAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAI,IAAE,CAAC;AAAE,SAAOA,IAAE,QAAQ,+BAA8B,CAACC,QAAK,OAAK,GAAG,GAAE,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,GAAE,EAAE,KAAK,GAAG,EAAE,GAAE;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,EAAAD,IAAE,mBAAmB,CAAC,CAAC,IAAE,mBAAmBC,OAAG,EAAE;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAE,YAAY;AAAE,SAAOA,QAAI,UAAQA,QAAI,UAAQA,QAAI,SAAO,GAAG,CAACA,GAAC,OAAKA,MAAE,CAACA,MAAE;AAAC;AAAC,SAAS,IAAG;AAAC,SAAO;AAAE;AAAC,IAAI,KAAG;AAAK,SAAS,GAAGD,KAAE;AAAC,OAAGA;AAAC;AAAC,IAAI;AAAG,SAAS,KAAI;AAAC,MAAG,MAAI,MAAK;AAAC,QAAIA;AAAE,QAAG,OAAO,UAAQ,YAAY,CAAAA,MAAE;AAAA,aAAe,OAAO,UAAQ,YAAY,CAAAA,MAAE;AAAA,aAAe,OAAO,WAAS,YAAY,CAAAA,MAAE;AAAA,aAAgB,OAAO,QAAM,YAAY,CAAAA,MAAE;AAAA,QAAU,OAAM,IAAI,MAAM,gCAAgC;AAAE,SAAGA;AAAA,EAAC;AAAC,SAAO;AAAE;AAAC,SAAS,KAAI;AAAC,MAAIA,MAAE,GAAG;AAAE,SAAOA,IAAE,cAAY,SAAOA,IAAE,aAAW,oBAAI,QAAKA,IAAE;AAAU;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAIC,MAAE,GAAG;AAAE,MAAGA,IAAE,IAAID,GAAC,EAAE,QAAOC,IAAE,IAAID,GAAC;AAAE;AAAC,QAAI,IAAE,EAAE;AAAE,WAAOC,IAAE,IAAID,KAAE,CAAC,GAAEC,IAAE,IAAID,GAAC;AAAA,EAAC;AAAC;AAAC,IAAI,KAAG;AAAP,IAAa,KAAG;AAAhB,IAAuB,KAAG;AAA1B,IAAkC,KAAG;AAArC,IAA2C,KAAG;AAA9C,IAAqD,KAAG;AAAxD,IAA8D,KAAG;AAAjE,IAAuE,KAAG;AAA1E,IAAmF,KAAG;AAAtF,IAA+F,KAAG;AAAlG,IAAyG,KAAG;AAA5G,IAAoH,KAAG;AAAvH,IAA8H,KAAG;AAAjI,IAAyI,KAAG;AAA5I,IAAoJ,KAAG;AAAvJ,IAAiK,KAAG;AAApK,IAAkL,KAAG;AAArL,IAAiM,KAAG;AAApM,IAAoN,KAAG;AAAvN,IAAqO,KAAG;AAAxO,IAAyP,KAAG;AAA5P,IAAuQ,KAAG;AAA1Q,IAAuR,MAAI;AAA3R,IAAyS,KAAG;AAA5S,IAA4T,KAAG;AAA/T,IAAsU,KAAG;AAAzU,IAAgV,KAAG;AAAnV,IAAiW,KAAG;AAApW,IAA8W,KAAG;AAAjX,IAA8X,KAAG;AAAjY,IAA0Y,KAAG;AAA7Y,IAAsZ,KAAG;AAAzZ,IAAgb,KAAG;AAAnb,IAAyc,KAAG;AAA5c,IAAqd,KAAG;AAAxd,IAAif,KAAG;AAApf,IAA4gB,KAAG;AAA/gB,IAAqhB,KAAG;AAAxhB,IAA+hB,KAAG;AAAliB,IAA4iB,KAAG;AAA/iB,IAAwjB,KAAG;AAA3jB,IAA2kB,KAAG;AAA9kB,IAA8lB,KAAG;AAAjmB,IAAgnB,KAAG;AAAnnB,IAA2oB,KAAG;AAA9oB,IAAorB,KAAG;AAAvrB,IAA4tB,KAAG;AAA/tB,IAAsuB,KAAG;AAAzuB,IAAsvB,KAAG;AAAzvB,IAAmxB,KAAG;AAAtxB,IAAizB,KAAG;AAApzB,IAA2zB,KAAG;AAA9zB,IAAw0B,KAAG;AAA30B,IAAo1B,KAAG;AAAv1B,IAA61B,KAAG;AAAh2B,IAA02B,KAAG;AAA72B,IAAm3B,KAAG;AAAt3B,IAA83B,KAAG;AAAj4B,IAAu4B,KAAG;AAA14B,IAAu5B,KAAG;AAA15B,IAAk6B,KAAG;AAAr6B,IAA26B,KAAG;AAA96B,IAAq7B,KAAG;AAAx7B,IAAw8B,KAAG;AAA38B,IAAm9B,KAAG;AAAt9B,IAAi+B,KAAG;AAAp+B,IAAq/B,KAAG;AAAx/B,IAAmgC,KAAG;AAAtgC,IAAihC,KAAG;AAAphC,IAA8hC,KAAG;AAAjiC,IAAgjC,KAAG;AAAnjC,IAA8jC,KAAG;AAAjkC,IAAwkC,KAAG;AAA3kC,IAAklC,KAAG;AAArlC,IAAgmC,KAAG;AAAnmC,IAA2mC,KAAG;AAA9mC,IAAsnC,KAAG;AAAznC,IAAqoC,KAAG;AAAxoC,IAA+oC,KAAG;AAAlpC,IAA8pC,KAAG;AAAjqC,IAA4qC,KAAG;AAA/qC,IAAqrC,KAAG;AAAxrC,IAAgsC,KAAG;AAAnsC,IAAgtC,KAAG;AAAntC,IAAguC,KAAG;AAAnuC,IAA+uC,KAAG;AAAlvC,IAA+vC,MAAI;AAAnwC,IAAgxC,MAAI;AAApxC,IAAiyC,KAAG;AAApyC,IAA0yC,KAAG;AAA7yC,IAAuzC,MAAI;AAA3zC,IAA40C,KAAG;AAA/0C,IAAq1C,KAAG;AAAx1C,IAAk2C,KAAG;AAAr2C,IAA+2C,KAAG;AAAl3C,IAAg4C,KAAG;AAAn4C,IAA+4C,KAAG;AAAl5C,IAAk6C,KAAG;AAAr6C,IAAy7C,KAAG;AAA57C,IAAm8C,KAAG;AAAt8C,IAA48C,KAAG;AAA/8C,IAAy9C,KAAG;AAA59C,IAAw+C,KAAG;AAA3+C,IAAi/C,KAAG;AAAp/C,IAAkgD,KAAG;AAArgD,IAAghD,KAAG;AAAnhD,IAAyhD,KAAG;AAA5hD,IAAuiD,KAAG;AAA1iD,IAAgkD,KAAG;AAAnkD,IAAylD,KAAG;AAA5lD,IAAknD,KAAG;AAArnD,IAAgoD,KAAG;AAAnoD,IAA4oD,KAAG;AAA/oD,IAAspD,KAAG;AAAzpD,IAAiqD,MAAI;AAArqD,IAA4qD,KAAG;AAA/qD,IAAqrD,KAAG;AAAxrD,IAAgsD,KAAG;AAAnsD,IAA0sD,KAAG;AAA7sD,IAA4tD,KAAG;AAA/tD,IAA6uD,KAAG;AAAhvD,IAAuwD,KAAG;AAA1wD,IAAkxD,KAAG;AAArxD,IAA4xD,KAAG;AAA/xD,IAA4yD,KAAG;AAA/yD,IAAszD,KAAG;AAAzzD,IAAm0D,KAAG;AAAt0D,IAA81D,KAAG;AAAj2D,IAA63D,KAAG;AAAh4D,IAAi5D,KAAG;AAAp5D,IAAy6D,KAAG;AAA56D,IAAo7D,KAAG;AAAv7D,IAAi8D,KAAG;AAAp8D,IAA48D,KAAG;AAA/8D,IAAu9D,KAAG;AAA19D,IAAs+D,KAAG;AAAz+D,IAA+/D,KAAG;AAAlgE,IAAihE,KAAG;AAAphE,IAA6hE,KAAG;AAAhiE,IAAuiE,KAAG;AAA1iE,IAAkjE,KAAG;AAArjE,IAA2jE,KAAG;AAA9jE,IAAqkE,KAAG;AAAxkE,IAA+kE,KAAG;AAAllE,IAA4lE,KAAG;AAA/lE,IAA0mE,KAAG;AAA7mE,IAAonE,KAAG;AAAvnE,IAA6nE,KAAG;AAAhoE,IAAipE,KAAG;AAAppE,IAA6pE,KAAG;AAAhqE,IAA0qE,KAAG;AAA7qE,IAAmsE,KAAG;AAAtsE,IAAstE,KAAG;AAAztE,IAA6uE,KAAG;AAAhvE,IAAmwE,KAAG;AAAtwE,IAAsxE,KAAG;AAAzxE,IAA6yE,KAAG;AAAhzE,IAAyzE,KAAG;AAA5zE,IAAi1E,KAAG;AAAp1E,IAAm2E,KAAG;AAAt2E,IAAq3E,KAAG;AAAx3E,IAAs4E,KAAG;AAAz4E,IAAk6E,KAAG;AAAr6E,IAA26E,KAAG;AAA96E,IAAo7E,KAAG;AAAv7E,IAA87E,KAAG;AAAj8E,IAAw8E,KAAG;AAA38E,IAAk9E,KAAG;AAAr9E,IAAi+E,KAAG;AAAp+E,IAAg/E,KAAG;AAAn/E,IAA4/E,KAAG;AAA//E,IAAwgF,KAAG;AAA3gF,IAAgiF,MAAI;AAApiF,IAAijF,KAAG;AAApjF,IAAgkF,KAAG;AAAnkF,IAA0kF,KAAG;AAA7kF,IAA0lF,KAAG;AAA7lF,IAAgnF,KAAG;AAAnnF,IAAkoF,KAAG;AAAroF,IAAmpF,KAAG;AAAuB,SAAS,MAAMA,KAAE;AAAC,IAAE,EAAE,QAAQ,SAAS,KAAG,EAAE,EAAE,QAAQ,MAAM,KAAG,QAAQ,KAAK,GAAGA,GAAC;AAAC;AAAC,SAAS,MAAMA,KAAE;AAAC,IAAE,EAAE,QAAQ,SAAS,KAAG,EAAE,EAAE,QAAQ,MAAM,KAAG,QAAQ,IAAI,GAAGA,GAAC;AAAC;AAAC,IAAI,KAAG,GAAG,kBAAiB,MAAI,oBAAI,KAAG;AAAtC,IAAwC,KAAG,GAAG,gBAAe,MAAI,oBAAI,KAAG;AAAE,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAIC,MAAE,GAAGD,KAAE,CAAC;AAAE,SAAO,GAAG,IAAIC,GAAC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,SAAO,GAAG,IAAIA,GAAC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAI,IAAE,GAAG,QAAQ,GAAEC,MAAE,CAAC;AAAE,aAAO;AAAC,QAAG,EAAC,MAAK,GAAE,OAAM,EAAC,IAAE,EAAE,KAAK;AAAE,QAAG,EAAE;AAAM,QAAG,CAAC,GAAE,CAAC,IAAE,GAAE,CAAC,CAAC,IAAE,EAAE,MAAM,GAAG;AAAE,UAAID,OAAGC,IAAE,KAAK,CAAC;AAAA,EAAC;AAAC,SAAOA;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,YAAW,GAAE,aAAYC,IAAC,IAAED,KAAE,IAAE,GAAG,GAAEC,GAAC;AAAE,KAAG,IAAI,CAAC,KAAG,GAAG,eAAe,CAAC,kBAAkBA,GAAC,yBAAyB,GAAE,GAAG,IAAI,GAAED,GAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,YAAW,EAAC,IAAEA;AAAE,KAAG,IAAI,CAAC,KAAG,EAAE,EAAE,QAAQ,OAAO,KAAG,GAAG,gCAAgC,CAAC,GAAG,GAAE,GAAG,IAAI,GAAEA,GAAC;AAAC;AAAC,SAAS,IAAIA,KAAE,GAAE;AAAC,MAAIC,MAAE,GAAGD,KAAE,CAAC;AAAE,MAAG,CAAC,GAAG,IAAIC,GAAC,EAAE,OAAM,IAAI,MAAM,eAAeD,GAAC,kBAAkB,CAAC,qBAAqB;AAAE,KAAG,OAAOC,GAAC;AAAC;AAAC,SAAS,IAAID,KAAE;AAAC,MAAG,CAAC,GAAG,IAAIA,GAAC,EAAE,OAAM,IAAI,MAAM,iBAAiBA,GAAC,iCAAiC;AAAE,KAAG,OAAOA,GAAC;AAAC;AAAC,SAAS,IAAIA,KAAE,GAAE;AAAC,KAAGA,GAAC,EAAE,QAAQ,OAAG;AAAC,QAAI,IAAE,OAAO,OAAO,CAAC,GAAE,GAAE,EAAC,aAAY,EAAC,CAAC;AAAE,OAAG,CAAC;AAAA,EAAC,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,SAAM,GAAG,CAAC,IAAIA,GAAC;AAAE;AAAC,IAAI,IAAE,CAAC;AAAE,GAAG,GAAE,EAAC,aAAY,MAAI,IAAG,qBAAoB,MAAI,IAAG,QAAO,MAAI,GAAE,oCAAmC,MAAI,IAAG,eAAc,MAAI,IAAG,mBAAkB,MAAI,IAAG,sBAAqB,MAAI,IAAG,iBAAgB,MAAI,IAAG,0BAAyB,MAAI,IAAG,OAAM,MAAI,IAAG,gBAAe,MAAI,IAAG,oCAAmC,MAAI,IAAG,mBAAkB,MAAI,IAAG,uBAAsB,MAAI,IAAG,cAAa,MAAI,IAAG,aAAY,MAAI,IAAG,cAAa,MAAI,IAAG,OAAM,MAAI,IAAG,eAAc,MAAI,IAAG,SAAQ,MAAI,IAAG,mBAAkB,MAAI,IAAG,wBAAuB,MAAI,IAAG,iBAAgB,MAAI,IAAG,WAAU,MAAI,IAAG,YAAW,MAAI,IAAG,YAAW,MAAI,IAAG,wBAAuB,MAAI,IAAG,WAAU,MAAI,IAAG,YAAW,MAAI,IAAG,OAAM,MAAI,IAAG,UAAS,MAAI,IAAG,WAAU,MAAI,IAAG,eAAc,MAAI,IAAG,UAAS,MAAI,IAAG,cAAa,MAAI,IAAG,cAAa,MAAI,IAAG,YAAW,MAAI,IAAG,oBAAmB,MAAI,IAAG,2BAA0B,MAAI,IAAG,qBAAoB,MAAI,IAAG,gBAAe,MAAI,IAAG,mBAAkB,MAAI,IAAG,KAAI,MAAI,IAAG,gBAAe,MAAI,IAAG,aAAY,MAAI,IAAG,aAAY,MAAI,IAAG,UAAS,MAAI,IAAG,SAAQ,MAAI,IAAG,cAAa,MAAI,IAAG,eAAc,MAAI,IAAG,qBAAoB,MAAI,IAAG,cAAa,MAAI,IAAG,KAAI,MAAI,IAAG,MAAK,MAAI,IAAG,MAAK,MAAI,IAAG,eAAc,MAAI,IAAG,cAAa,MAAI,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAE;AAAC,SAAOA,eAAa,gBAAcA,eAAa,cAAYA,eAAa,cAAYA,eAAa;AAAiB;AAAC,IAAI,KAAG,GAAG,GAAG,CAAC;AAAE,IAAI,KAAG,GAAG,WAAS;AAAG,SAAS,GAAGA,KAAE;AAAC,SAAO,GAAG,WAAWA,KAAE,MAAG,EAAE;AAAC;AAAC,IAAI,KAAG,GAAG,kBAAkB;AAA5B,IAA8B,KAAG,GAAG,kBAAkB;AAAtD,IAAwD,KAAG,GAAG,kBAAkB;AAAE,SAAS,GAAGA,KAAE;AAAC,SAAOA,IAAE,IAAIA,IAAE,KAAK,EAAE,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAED,IAAE,MAAM,GAAE,IAAEC,GAAC;AAAE,SAAO,GAAG,UAAU,MAAM,KAAK,CAAC,GAAE,MAAG,IAAE;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,SAAO,GAAGA,KAAE,GAAE,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,SAAO,GAAGA,KAAE,GAAE,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,SAAO,MAAI,IAAEA,MAAEA,IAAE,KAAK,CAAC,EAAE,GAAGA,IAAE,IAAI,KAAG,CAAC,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,MAAE,GAAG,kBAAkB,GAAE;AAAC,MAAI,IAAED,IAAE,IAAI,CAAC,EAAE,IAAIC,GAAC;AAAE,MAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AAAE,MAAI,IAAE,EAAE,IAAI,CAAC,EAAE,IAAIA,GAAC;AAAE,SAAO,IAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,GAAE,IAAE,EAAE,IAAIA,GAAC,GAAE;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE;AAAC,MAAE,EAAE,IAAID,GAAC,GAAE,IAAE,GAAG,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,GAAE,EAAE;AAAE,MAAI,IAAE;AAAE,SAAO,IAAE,EAAE,IAAI,CAAC,GAAE,IAAE,EAAE,IAAIC,GAAC,GAAE,IAAE,EAAE,IAAI,GAAG,GAAE,EAAE,CAAC,GAAE,CAAC,EAAE,IAAI,CAAC,GAAE,EAAE,IAAI,CAAC,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE;AAAC,SAAO,GAAG,GAAGD,KAAE,CAAC,GAAE,GAAGA,KAAE,IAAE,CAAC,GAAE,GAAGA,KAAE,IAAE,EAAE,GAAE,GAAGA,KAAE,IAAE,EAAE,GAAEC,KAAE,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,IAAEA,IAAE,QAAO;AAAC,MAAG,KAAG,GAAE;AAAC,QAAIC,MAAE,GAAG,IAAI,IAAE,CAAC,GAAE,IAAE,GAAGD,KAAE,CAAC,EAAE,IAAI,EAAE,GAAE,IAAE,GAAGA,KAAE,IAAE,CAAC,GAAE,IAAE,GAAG,GAAE,EAAE,EAAE,IAAIC,GAAC,EAAE,IAAI,CAAC,GAAE,IAAE,GAAG,GAAE,EAAE,EAAE,IAAI,CAAC,EAAE,IAAIA,GAAC;AAAE,WAAO,GAAG,GAAE,GAAEA,GAAC;AAAA,EAAC;AAAC,MAAG,KAAG,GAAE;AAAC,QAAIA,MAAE,GAAG,IAAI,IAAE,CAAC,GAAE,IAAE,GAAGD,KAAE,CAAC;AAAE,WAAO,GAAG,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,GAAE,GAAGA,KAAE,IAAE,CAAC,GAAEC,GAAC;AAAA,EAAC;AAAC,MAAG,IAAE,GAAE;AAAC,QAAIA,MAAED,IAAE,CAAC,GAAE,IAAEA,IAAE,KAAG,CAAC,GAAE,IAAEA,IAAE,IAAE,CAAC,GAAE,IAAEC,OAAG,KAAG,IAAG,IAAE,KAAG,KAAG;AAAG,WAAO,GAAG,GAAG,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE;AAAA,EAAC;AAAC,SAAO;AAAE;AAAC,SAAS,GAAGD,KAAE,IAAEA,IAAE,QAAO;AAAC,MAAIC,MAAE,GAAG,IAAI,IAAE,CAAC,GAAE,IAAE,GAAGD,KAAE,CAAC,EAAE,IAAI,EAAE,GAAE,IAAE,GAAGA,KAAE,CAAC,GAAE,IAAE,GAAGA,KAAE,IAAE,CAAC,EAAE,IAAIC,GAAC,GAAE,IAAE,GAAGD,KAAE,IAAE,EAAE,EAAE,IAAI,EAAE;AAAE,SAAO,GAAG,GAAG,EAAE,IAAI,CAAC,GAAE,EAAE,EAAE,IAAI,GAAG,GAAE,EAAE,CAAC,EAAE,IAAI,CAAC,GAAE,EAAE,IAAI,GAAG,EAAE,IAAI,EAAE,GAAE,EAAE,CAAC,EAAE,IAAI,CAAC,GAAEC,GAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,IAAEA,IAAE,QAAO;AAAC,MAAIC,MAAE,GAAG,IAAI,IAAE,CAAC,GAAE,IAAE,GAAGD,KAAE,CAAC,EAAE,IAAI,EAAE,GAAE,IAAE,GAAGA,KAAE,CAAC,GAAE,IAAE,GAAGA,KAAE,IAAE,CAAC,EAAE,IAAIC,GAAC,GAAE,IAAE,GAAGD,KAAE,IAAE,EAAE,EAAE,IAAI,EAAE,GAAE,IAAE,GAAG,EAAE,IAAI,CAAC,GAAE,EAAE,EAAE,IAAI,GAAG,GAAE,EAAE,CAAC,EAAE,IAAI,CAAC,GAAE,IAAE,GAAG,GAAE,EAAE,IAAI,GAAG,EAAE,IAAI,EAAE,GAAE,EAAE,CAAC,EAAE,IAAI,CAAC,GAAEC,GAAC,GAAE,IAAE,GAAGD,KAAE,EAAE,EAAE,IAAIC,GAAC,GAAE,IAAE,GAAGD,KAAE,EAAE,GAAE,IAAE,EAAE,IAAI,GAAGA,KAAE,IAAE,EAAE,CAAC,EAAE,IAAIC,GAAC,GAAE,IAAE,EAAE,IAAI,GAAGD,KAAE,IAAE,EAAE,CAAC,EAAE,IAAIC,GAAC;AAAE,SAAO,GAAG,GAAG,EAAE,IAAI,CAAC,GAAE,EAAE,EAAE,IAAI,GAAG,GAAE,EAAE,CAAC,EAAE,IAAI,CAAC,GAAE,EAAE,IAAI,GAAG,EAAE,IAAI,CAAC,GAAE,EAAE,CAAC,EAAE,IAAI,CAAC,GAAEA,GAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,IAAEA,IAAE,QAAO;AAAC,MAAIC,MAAE,GAAG,WAAW,IAAG,IAAE;AAAE,MAAG,KAAG,GAAG,QAAO,KAAG,KAAG,GAAGD,KAAE,CAAC,IAAE,GAAGA,KAAE,CAAC;AAAE,MAAG,KAAG,GAAG,QAAO,GAAGA,KAAE,CAAC;AAAE,MAAI,IAAEC,KAAE,IAAEA,IAAE,IAAI,EAAE,EAAE,IAAI,GAAG,GAAE,IAAE,GAAG,EAAE,IAAI,EAAE,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,EAAE,GAAE,IAAE,CAAC,GAAG,OAAM,GAAG,KAAK,GAAE,IAAE,CAAC,GAAG,OAAM,GAAG,KAAK;AAAE,MAAE,EAAE,IAAI,EAAE,EAAE,IAAI,GAAGD,KAAE,CAAC,CAAC;AAAE,MAAI,IAAE,GAAE,KAAG,IAAE,KAAG,KAAG,IAAG,IAAE,KAAG,IAAE,IAAE,MAAI;AAAG;AAAG,QAAE,GAAG,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,GAAGA,KAAE,IAAE,CAAC,CAAC,GAAE,EAAE,EAAE,IAAI,EAAE,GAAE,IAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,GAAGA,KAAE,IAAE,EAAE,CAAC,GAAE,EAAE,EAAE,IAAI,EAAE,GAAE,IAAE,EAAE,IAAI,EAAE,CAAC,CAAC,GAAE,IAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,GAAGA,KAAE,IAAE,EAAE,CAAC,GAAE,IAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,GAAE,EAAE,EAAE,IAAI,EAAE,GAAE,IAAE,GAAGA,KAAE,GAAE,EAAE,CAAC,EAAE,IAAI,EAAE,GAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,GAAE,IAAE,GAAGA,KAAE,IAAE,IAAG,EAAE,IAAI,EAAE,CAAC,CAAC,GAAE,EAAE,IAAI,GAAGA,KAAE,IAAE,EAAE,CAAC,CAAC,GAAE,CAAC,GAAE,CAAC,IAAE,CAAC,GAAE,CAAC,GAAE,KAAG;AAAA,SAAS,MAAI;AAAG,MAAI,IAAE,GAAG,IAAI,EAAE,IAAI,GAAG,EAAE,IAAI,CAAC,CAAC;AAAE,SAAO,IAAE,GAAE,EAAE,CAAC,IAAE,EAAE,CAAC,EAAE,IAAI,IAAE,IAAE,EAAE,GAAE,EAAE,CAAC,IAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,GAAE,EAAE,CAAC,IAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,GAAE,IAAE,GAAG,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,GAAGA,KAAE,IAAE,CAAC,CAAC,GAAE,EAAE,EAAE,IAAI,CAAC,GAAE,IAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,GAAGA,KAAE,IAAE,EAAE,CAAC,GAAE,EAAE,EAAE,IAAI,CAAC,GAAE,IAAE,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,GAAE,IAAE,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,IAAI,GAAGA,KAAE,IAAE,EAAE,CAAC,CAAC,GAAE,IAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,GAAE,EAAE,EAAE,IAAI,CAAC,GAAE,IAAE,GAAGA,KAAE,GAAE,EAAE,CAAC,EAAE,IAAI,CAAC,GAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,GAAE,IAAE,GAAGA,KAAE,IAAE,IAAG,EAAE,IAAI,EAAE,CAAC,CAAC,GAAE,EAAE,IAAI,GAAGA,KAAE,IAAE,EAAE,CAAC,CAAC,GAAE,CAAC,GAAE,CAAC,IAAE,CAAC,GAAE,CAAC,GAAE,GAAG,GAAG,EAAE,CAAC,GAAE,EAAE,CAAC,GAAE,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,GAAE,GAAG,EAAE,CAAC,GAAE,EAAE,CAAC,GAAE,CAAC,EAAE,IAAI,CAAC,GAAE,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,SAAO,MAAI,WAAS,GAAGA,GAAC,IAAE,GAAG,CAACA,GAAC,GAAE,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,SAAOA,eAAa,gBAAc,MAAI,aAAWA,eAAa,cAAY,MAAI,WAASA,eAAa,cAAY,MAAI;AAAM;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAG,MAAI,SAAS,OAAM,IAAI,MAAM,2CAA2C;AAAE,MAAG,MAAM,QAAQA,GAAC,MAAIA,MAAE,GAAGA,GAAC,IAAG,EAAE,EAAE,QAAQ,OAAO,KAAG,GAAGA,KAAE,CAAC,GAAE,GAAGA,KAAE,CAAC,EAAE,QAAOA;AAAE,MAAG,KAAG,QAAM,MAAI,aAAW,MAAI,YAAY,QAAO,IAAI,aAAaA,GAAC;AAAE,MAAG,MAAI,QAAQ,QAAO,IAAI,WAAWA,GAAC;AAAE,MAAG,MAAI,QAAO;AAAC,QAAIC,MAAE,IAAI,WAAWD,IAAE,MAAM;AAAE,aAAQ,IAAE,GAAE,IAAEC,IAAE,QAAO,EAAE,EAAE,MAAK,MAAMD,IAAE,CAAC,CAAC,MAAI,MAAIC,IAAE,CAAC,IAAE;AAAG,WAAOA;AAAA,EAAC,MAAM,OAAM,IAAI,MAAM,qBAAqB,CAAC,EAAE;AAAC;AAAC,SAAS,KAAI;AAAC,SAAO,EAAE,EAAE,SAAS,IAAI;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,SAAO,EAAE,EAAE,SAAS,MAAMA,KAAE,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,IAAE,SAAQ;AAAC,SAAO,IAAE,KAAG,SAAQ,EAAE,EAAE,SAAS,OAAOA,KAAE,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,IAAE,SAAQ;AAAC,SAAO,IAAE,KAAG,SAAQ,EAAE,EAAE,SAAS,OAAOA,KAAE,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAO,EAAE,EAAE,SAAS,gBAAc,OAAK,EAAE,EAAE,SAAS,aAAaA,GAAC,IAAE,GAAGA,GAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,IAAE,CAAC,GAAEC,MAAE,OAAG;AAAC,MAAG,KAAG,SAAO,IAAE,CAAC,IAAG,OAAOD,OAAG,aAAW,OAAOA,OAAG,YAAU,OAAOA,OAAG,YAAU,GAAGA,GAAC,KAAGA,OAAG,QAAM,GAAGA,GAAC,KAAGC,IAAE,GAAE,KAAKD,GAAC;AAAA,WAAU,MAAM,QAAQA,GAAC,KAAG,GAAGA,GAAC,EAAE,UAAQ,IAAE,GAAE,IAAEA,IAAE,QAAO,EAAE,EAAE,IAAGA,IAAE,CAAC,GAAE,GAAEC,GAAC;AAAA,OAAM;AAAC,QAAI,IAAE;AAAG,aAAQ,KAAK,OAAO,KAAKD,GAAC,EAAE,sBAAqB,KAAK,CAAC,MAAI,IAAE,KAAK,IAAI,GAAE,OAAO,CAAC,CAAC;AAAG,aAAQ,IAAE,GAAE,KAAG,GAAE,IAAI,IAAGA,IAAE,CAAC,GAAE,GAAEC,GAAC;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE;AAAC,SAAK,eAAa,GAAE,KAAK,SAAOA,KAAEA,OAAG,SAAO,KAAK,SAAO,IAAI;AAAA,EAAG;AAAA,EAAC,cAAc,GAAEA,KAAE,GAAE;AAAC,QAAI,GAAE,IAAE,MAAI;AAAC,UAAE,EAAE;AAAA,IAAC,GAAE,GAAE,IAAE,GAAG;AAAE,QAAG,KAAK,aAAa,eAAe,EAAE,KAAE,KAAK,aAAa,KAAK,CAAC;AAAA,SAAM;AAAC,QAAE;AAAE,eAAQ,KAAK,EAAE,GAAE,SAAS;AAAE,UAAE,QAAQ,QAAQ,EAAC,UAAS,GAAG,IAAE,EAAC,CAAC;AAAA,IAAC;AAAC,QAAG,EAAE,EAAE,QAAQ,8BAA8B,EAAE,UAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,KAAI;AAAC,UAAI,IAAE,EAAE,CAAC;AAAE,QAAE,KAAK,EAAE,KAAK,OAAG;AAAC,WAAG,GAAE,EAAE,OAAM,CAAC;AAAA,MAAC,CAAC;AAAA,IAAC;AAAC,WAAM,EAAC,YAAW,GAAE,SAAQ,GAAE,QAAOA,KAAE,QAAO,EAAE,KAAK,OAAG,EAAE,QAAQ,GAAE,WAAU,EAAE,KAAK,OAAG,EAAE,uBAAqB,OAAK,EAAE,oBAAoB,IAAE,EAAE,EAAC;AAAA,EAAC;AAAA,EAAC,iBAAiB,GAAE;AAAC,QAAG,EAAC,YAAWA,KAAE,SAAQ,GAAE,QAAO,GAAE,QAAO,GAAE,WAAU,EAAC,IAAE;AAAE,MAAE,QAAQ,OAAG;AAAC,cAAQ,IAAI,CAAC,EAAE,KAAK,GAAE,GAAE,CAAC,CAAC,EAAE,KAAK,OAAG;AAAC,aAAK,OAAO,iBAAiBA,KAAE,GAAE,EAAE,CAAC,GAAE,EAAE,CAAC,GAAE,GAAE,EAAE,CAAC,CAAC;AAAA,MAAC,CAAC;AAAA,IAAC,CAAC;AAAA,EAAC;AAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAG,MAAI,UAAU,QAAM;AAAG,WAAQ,IAAE,GAAE,IAAED,IAAE,QAAO,KAAI;AAAC,QAAI,IAAEA,IAAE,CAAC;AAAE,QAAG,MAAM,CAAC,KAAG,CAAC,SAAS,CAAC,EAAE,QAAO,QAAQ,KAAK,SAAS,CAAC,sBAAsBC,GAAC,GAAG,GAAE;AAAA,EAAE;AAAC,SAAM;AAAE;AAAC,IAAI,KAAG,MAAK;AAAA,EAAC,iBAAiB,GAAEA,KAAE,GAAE,GAAE,GAAE,GAAE;AAAC,QAAI,IAAE,OAAO,KAAG,WAAS,GAAG,GAAG,CAAC,MAAK,CAAC,IAAE,EAAE,OAAM,IAAE,GAAG,GAAE,EAAE,GAAE,IAAEA,IAAE,MAAK,IAAEA,IAAE,MAAK,IAAE,GAAGA,IAAE,MAAM,SAAS,GAAE,EAAE,GAAE,IAAE;AAAG,aAAQ,KAAK,GAAE;AAAC,UAAI,IAAE,EAAE,CAAC;AAAE,UAAG,KAAG,MAAK;AAAC,YAAI,IAAE,EAAE,SAAOA,IAAE,OAAM,IAAE,EAAE;AAAO,aAAG,GAAG,CAAC,KAAK,CAAC,KAAK,IAAE,IAAE,IAAE,EAAE;AAAA,MAAG;AAAA,IAAC;AAAC,YAAQ,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAG,oBAAmB,aAAY,cAAa,iBAAgB,gBAAe,kBAAkB;AAAA,EAAC;AAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,CAAC,GAAE,IAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,IAAI,GAAE,EAAE,CAAC,EAAE,EAAE,IAAE;AAAG,WAAQ,IAAE,GAAE,IAAED,IAAE,QAAO,KAAI;AAAC,QAAI,IAAEA,IAAE,CAAC,GAAE,IAAE,EAAE;AAAO,aAAQ,KAAK,GAAE;AAAC,UAAI,IAAE,EAAE,CAAC,GAAE,IAAE;AAAG,eAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,IAAI,KAAG,EAAE,EAAE,EAAE,GAAE;AAAC,UAAE,QAAQ,QAAQ,OAAG,EAAE,EAAE,EAAE,IAAE,IAAE,GAAE,IAAE,MAAG,EAAE,EAAE,EAAE,IAAE;AAAG;AAAA,MAAK;AAAC,UAAG,EAAE;AAAA,IAAK;AAAA,EAAC;AAAC,MAAI,IAAE,CAAC;AAAE,IAAEC,IAAE,EAAE,IAAE;AAAG,MAAI,IAAE,CAAC;AAAE,WAAQ,IAAED,IAAE,SAAO,GAAE,KAAG,GAAE,KAAI;AAAC,QAAI,IAAEA,IAAE,CAAC,GAAE,IAAE,EAAE;AAAO,aAAQ,IAAE,GAAE,IAAE,EAAE,QAAQ,QAAO,IAAI,KAAG,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,GAAE;AAAC,eAAQ,KAAK,EAAE,GAAE,EAAE,CAAC,EAAE,EAAE,IAAE,MAAG,EAAE,EAAE,EAAE,IAAE;AAAG;AAAA,IAAK;AAAA,EAAC;AAAC,MAAI,IAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAEA,IAAE,QAAO,KAAI;AAAC,QAAI,IAAEA,IAAE,CAAC;AAAE,QAAG,EAAE,EAAE,EAAE,KAAG,EAAE,EAAE,EAAE,GAAE;AAAC,UAAI,IAAE,CAAC;AAAE,eAAQ,KAAK,EAAE,QAAO;AAAC,YAAI,IAAE,EAAE,OAAO,CAAC;AAAE,UAAE,EAAE,EAAE,MAAI,EAAE,CAAC,IAAE;AAAA,MAAE;AAAC,UAAI,IAAE,OAAO,OAAO,CAAC,GAAE,CAAC;AAAE,QAAE,SAAO,GAAE,EAAE,UAAQ,EAAE,SAAQ,EAAE,KAAK,CAAC;AAAA,IAAC;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE;AAAC,WAAQ,IAAE,EAAE,SAAO,GAAE,KAAG,GAAE,KAAI;AAAC,QAAI,IAAE,EAAE,CAAC,GAAE,IAAE,CAAC;AAAE,QAAG,EAAE,QAAQ,QAAQ,OAAG;AAAC,UAAI,IAAED,IAAE,EAAE,EAAE;AAAE,WAAG,OAAK,EAAE,KAAK,CAAC,IAAE,EAAE,KAAK,IAAI;AAAA,IAAC,CAAC,GAAE,EAAE,YAAU,KAAK,OAAM,IAAI,MAAM,4DAA4D,EAAE,UAAU,GAAG;AAAE,QAAI,IAAE,EAAE,SAAS,CAAC;AAAE,aAAQ,KAAK,EAAE,QAAO;AAAC,UAAG,EAAE,KAAK,GAAG,OAAM,IAAI,MAAM,iCAAiC,CAAC,gCAAgC,OAAO,KAAK,CAAC,CAAC,GAAG;AAAE,UAAI,IAAEC,IAAE,MAAI,EAAE,CAAC,EAAE,CAAC;AAAE,UAAG,EAAE,UAAQ,UAAU,OAAM,IAAI,MAAM,4BAA4B,EAAE,UAAU,2BAA2B,CAAC,wCAAwC,EAAE,KAAK,GAAG;AAAE,UAAI,IAAE,EAAE,OAAO,CAAC;AAAE,UAAG,CAAC,GAAG,EAAE,OAAM,EAAE,KAAK,EAAE,OAAM,IAAI,MAAM,4BAA4B,EAAE,UAAU,4BAA4B,CAAC,gBAAgB,EAAE,KAAK,mDAAmD,EAAE,KAAK,GAAG;AAAE,UAAGD,IAAE,EAAE,EAAE,KAAG,KAAK,CAAAA,IAAE,EAAE,EAAE,IAAE;AAAA,WAAM;AAAC,YAAI,IAAEA,IAAE,EAAE,EAAE;AAAE,QAAAA,IAAE,EAAE,EAAE,IAAE,EAAE,GAAE,CAAC,GAAE,EAAE,QAAQ;AAAA,MAAC;AAAA,IAAC;AAAA,EAAC;AAAC;AAAC,IAAI,KAAG;AAAP,IAAU,KAAG;AAAb,IAAe,KAAG;AAAE,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE;AAAC,MAAI,IAAE,GAAG,CAAC,GAAE,IAAE,GAAGD,KAAE,GAAEC,KAAE,CAAC,GAAE,IAAE,EAAE,QAAO,IAAE,GAAGD,KAAE,GAAEC,KAAE,GAAE,CAAC,GAAE,IAAE,CAAC,QAAQ;AAAE,SAAO,MAAI,EAAE,KAAK,YAAYA,GAAC,EAAE,GAAE,EAAE,KAAK,WAAW,CAAC,EAAE,GAAE,EAAE,KAAK,aAAa,CAAC,GAAG,GAAE,EAAE,KAAK,WAAW,IAAG,EAAE,KAAK,EAAE,IAAI,OAAG,SAAO,CAAC,EAAE,KAAK;AAAA,CAC9s+C,CAAC,GAAE,EAAE,KAAK;AAAA,CACV;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE;AAAC,MAAI,IAAE,GAAG,CAAC,GAAE,IAAE,EAAE,EAAE,SAAO,CAAC,GAAE,IAAE,IAAI,MAAM,CAAC,EAAE,KAAK,CAAC,GAAE,IAAE,EAAE,QAAO,IAAEA,QAAI,cAAY,GAAGD,GAAC,IAAEA;AAAE,MAAG,IAAE,EAAE,UAAQ,IAAE,GAAE,IAAE,IAAE,GAAE,KAAI;AAAC,QAAI,IAAE,IAAE;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,IAAI,GAAE,CAAC,IAAE,KAAK,IAAI,EAAE,CAAC,GAAE,GAAG,EAAE,IAAE,CAAC,GAAE,GAAEC,GAAC,EAAE,MAAM;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI;AAAE,SAAO,MAAM,QAAQD,GAAC,IAAE,IAAE,GAAG,WAAWA,IAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,MAAM,WAAWA,IAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,MAAI,GAAGA,GAAC,IAAE,IAAE,IAAIA,GAAC,MAAIC,QAAI,SAAO,IAAE,GAAGD,GAAC,IAAE,IAAE,WAAWA,IAAE,QAAQ,EAAE,CAAC,EAAE,SAAS,GAAE,GAAG,GAAE,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAOA,QAAI,IAAE,UAAQ;AAAM;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE,GAAE,IAAE,MAAG;AAAC,MAAI,IAAEA,QAAI,cAAY,IAAE,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE;AAAO,MAAG,MAAI,GAAE;AAAC,QAAGA,QAAI,aAAY;AAAC,UAAI,IAAE,GAAGD,GAAC;AAAE,aAAM,CAAC,GAAG,EAAE,CAAC,GAAE,GAAEC,GAAC,CAAC;AAAA,IAAC;AAAC,WAAOA,QAAI,SAAO,CAAC,GAAGD,IAAE,CAAC,CAAC,CAAC,IAAE,CAACA,IAAE,CAAC,EAAE,SAAS,CAAC;AAAA,EAAC;AAAC,MAAG,MAAI,GAAE;AAAC,QAAG,IAAE,IAAG;AAAC,UAAI,IAAE,KAAG,GAAE,IAAE,MAAM,KAAKA,IAAE,MAAM,GAAE,CAAC,CAAC,GAAE,IAAE,MAAM,KAAKA,IAAE,OAAO,IAAE,MAAI,GAAE,IAAE,CAAC,CAAC;AAAE,aAAOC,QAAI,gBAAc,IAAE,GAAG,CAAC,GAAE,IAAE,GAAG,CAAC,IAAG,CAAC,MAAI,EAAE,IAAI,CAAC,GAAE,MAAI,GAAG,GAAE,EAAE,CAAC,GAAEA,GAAC,CAAC,EAAE,KAAK,IAAI,IAAE,YAAU,EAAE,IAAI,CAAC,GAAE,MAAI,GAAG,GAAE,EAAE,IAAE,KAAG,CAAC,GAAEA,GAAC,CAAC,EAAE,KAAK,IAAI,IAAE,GAAG;AAAA,IAAC;AAAC,WAAM,CAAC,OAAKA,QAAI,cAAY,GAAGD,GAAC,IAAE,MAAM,KAAKA,GAAC,GAAG,IAAI,CAAC,GAAE,MAAI,GAAG,GAAE,EAAE,CAAC,GAAEC,GAAC,CAAC,EAAE,KAAK,IAAI,IAAE,GAAG;AAAA,EAAC;AAAC,MAAI,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,EAAE,CAAC,IAAE,GAAE,IAAE,CAAC;AAAE,MAAG,IAAE,IAAG;AAAC,aAAQ,IAAE,GAAE,IAAE,IAAG,KAAI;AAAC,UAAI,IAAE,IAAE,GAAE,IAAE,IAAE;AAAE,QAAE,KAAK,GAAG,GAAGD,IAAE,MAAM,GAAE,CAAC,GAAE,GAAEC,KAAE,GAAE,GAAE,KAAE,CAAC;AAAA,IAAC;AAAC,MAAE,KAAK,KAAK;AAAE,aAAQ,IAAE,IAAE,IAAG,IAAE,GAAE,KAAI;AAAC,UAAI,IAAE,IAAE,GAAE,IAAE,IAAE;AAAE,QAAE,KAAK,GAAG,GAAGD,IAAE,MAAM,GAAE,CAAC,GAAE,GAAEC,KAAE,GAAE,GAAE,MAAI,IAAE,CAAC,CAAC;AAAA,IAAC;AAAA,EAAC,MAAM,UAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,QAAI,IAAE,IAAE,GAAE,IAAE,IAAE;AAAE,MAAE,KAAK,GAAG,GAAGD,IAAE,MAAM,GAAE,CAAC,GAAE,GAAEC,KAAE,GAAE,GAAE,MAAI,IAAE,CAAC,CAAC;AAAA,EAAC;AAAC,MAAI,IAAE,MAAI,IAAE,MAAI;AAAG,IAAE,CAAC,IAAE,OAAK,IAAE,IAAE,EAAE,CAAC,IAAE,IAAE;AAAI,WAAQ,IAAE,GAAE,IAAE,EAAE,SAAO,GAAE,IAAI,GAAE,CAAC,IAAE,MAAI,EAAE,CAAC,IAAE;AAAE,MAAI,IAAE;AAAA;AACz2C,WAAQ,IAAE,GAAE,IAAE,GAAE,IAAI,MAAG;AAAA;AACvB,SAAO,EAAE,EAAE,SAAO,CAAC,IAAE,MAAI,EAAE,EAAE,SAAO,CAAC,IAAE,OAAK,IAAE,KAAG,IAAG;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAI,IAAE,CAAC;AAAE,WAAQC,MAAE,GAAEA,MAAED,IAAE,QAAOC,OAAG,EAAE,GAAE,KAAK,CAACD,IAAEC,GAAC,GAAED,IAAEC,MAAE,CAAC,CAAC,CAAC;AAAE,SAAO;AAAC;AAAC,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE;AAAC,QAAG,KAAK,QAAMA,KAAE,KAAK,QAAM,EAAE,MAAM,GAAE,KAAK,OAAK,GAAG,CAAC,GAAE,KAAG,MAAK;AAAC,UAAI,IAAE,EAAE;AAAO,QAAE,MAAI,KAAK,MAAK,MAAI,qBAAqB,CAAC,oDAAoD,KAAK,IAAI,IAAI;AAAA,IAAC;AAAC,QAAGA,QAAI,YAAY,OAAM,IAAI,MAAM,4JAA4J;AAAE,SAAK,SAAO,KAAG,GAAGA,KAAE,KAAK,IAAI,GAAE,KAAK,UAAQ,GAAG,CAAC;AAAA,EAAC;AAAA,EAAC,IAAI,MAAKA,KAAE;AAAC,IAAAA,IAAE,WAAS,MAAIA,MAAE,CAAC,CAAC,IAAG,EAAEA,IAAE,WAAS,KAAK,MAAK,MAAI,uCAAuCA,IAAE,MAAM,0BAA0B,KAAK,IAAI,GAAG;AAAE,QAAI,IAAE,KAAK,WAAWA,GAAC;AAAE,SAAK,OAAO,CAAC,IAAE;AAAA,EAAC;AAAA,EAAC,OAAO,GAAE;AAAC,MAAE,WAAS,MAAI,IAAE,CAAC,CAAC;AAAG,QAAIA,MAAE;AAAE,aAAQ,KAAK,GAAE;AAAC,UAAG,IAAE,KAAG,KAAG,KAAK,MAAMA,GAAC,GAAE;AAAC,YAAI,IAAE,qCAAqC,CAAC,oBAAoB,KAAK,KAAK;AAAG,cAAM,IAAI,MAAM,CAAC;AAAA,MAAC;AAAC,MAAAA;AAAA,IAAG;AAAC,QAAI,IAAE,EAAE,EAAE,SAAO,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,SAAO,GAAE,EAAE,EAAE,MAAG,KAAK,QAAQ,CAAC,IAAE,EAAE,CAAC;AAAE,WAAO,KAAK,OAAO,CAAC;AAAA,EAAC;AAAA,EAAC,WAAW,GAAE;AAAC,QAAG,KAAK,SAAO,EAAE,QAAO;AAAE,QAAG,KAAK,SAAO,EAAE,QAAO,EAAE,CAAC;AAAE,QAAIA,MAAE,EAAE,EAAE,SAAO,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,SAAO,GAAE,EAAE,EAAE,CAAAA,OAAG,KAAK,QAAQ,CAAC,IAAE,EAAE,CAAC;AAAE,WAAOA;AAAA,EAAC;AAAA,EAAC,WAAW,GAAE;AAAC,QAAG,KAAK,SAAO,EAAE,QAAM,CAAC;AAAE,QAAG,KAAK,SAAO,EAAE,QAAM,CAAC,CAAC;AAAE,QAAIA,MAAE,IAAI,MAAM,KAAK,MAAM,MAAM;AAAE,aAAQ,IAAE,GAAE,IAAEA,IAAE,SAAO,GAAE,EAAE,EAAE,CAAAA,IAAE,CAAC,IAAE,KAAK,MAAM,IAAE,KAAK,QAAQ,CAAC,CAAC,GAAE,KAAGA,IAAE,CAAC,IAAE,KAAK,QAAQ,CAAC;AAAE,WAAOA,IAAEA,IAAE,SAAO,CAAC,IAAE,GAAEA;AAAA,EAAC;AAAA,EAAC,IAAI,OAAM;AAAC,WAAO,KAAK,MAAM;AAAA,EAAM;AAAA,EAAC,WAAU;AAAC,WAAO,GAAG,EAAE,WAAW,KAAK,QAAO,KAAK,OAAM,KAAK,KAAK;AAAA,EAAC;AAAC;AAAv3C,IAAy3C,KAAG;AAA53C,IAAi4C,KAAG;AAAp4C,IAAy4C,KAAG;AAAK,SAAS,GAAGD,KAAE;AAAC,OAAGA;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,OAAGA;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,OAAGA;AAAC;AAAC,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEC,KAAE,GAAE,GAAE;AAAC,SAAK,OAAK,OAAG,KAAK,qBAAmB,OAAG,KAAK,QAAM,EAAE,MAAM,GAAE,KAAK,QAAMA,OAAG,WAAU,KAAK,OAAK,GAAG,CAAC,GAAE,KAAK,UAAQ,GAAG,CAAC,GAAE,KAAK,SAAO,GAAE,KAAK,KAAG,GAAE,KAAK,WAAS,KAAK,OAAK,IAAE,KAAK,KAAK,SAAS,IAAE;AAAA,EAAQ;AAAA,EAAC,IAAI,OAAM;AAAC,WAAO,KAAK,MAAM;AAAA,EAAM;AAAA,EAAC,MAAM,SAAQ;AAAC,QAAI,IAAE,MAAM,KAAK,KAAK;AAAE,WAAO,GAAG,OAAO,KAAK,OAAM,KAAK,OAAM,CAAC;AAAA,EAAC;AAAA,EAAC,aAAY;AAAC,WAAO,GAAG,OAAO,KAAK,OAAM,KAAK,OAAM,KAAK,SAAS,CAAC;AAAA,EAAC;AAAA,EAAC,MAAM,QAAO;AAAC,QAAI,IAAE,MAAM,KAAK,KAAK;AAAE,WAAO,GAAG,KAAK,OAAM,GAAE,KAAK,UAAQ,WAAW;AAAA,EAAC;AAAA,EAAC,YAAW;AAAC,WAAO,GAAG,KAAK,OAAM,KAAK,SAAS,GAAE,KAAK,UAAQ,WAAW;AAAA,EAAC;AAAA,EAAC,MAAM,OAAM;AAAC,SAAK,gBAAgB;AAAE,QAAI,IAAE,GAAG,EAAE,KAAK,KAAK,MAAM;AAAE,QAAG,KAAK,UAAQ,UAAS;AAAC,UAAIA,MAAE,MAAM;AAAE,UAAG;AAAC,eAAOA,IAAE,IAAI,OAAG,GAAG,CAAC,CAAC;AAAA,MAAC,SAAO,GAAE;AAAC,cAAM,IAAI,MAAM,+FAA+F;AAAA,MAAC;AAAA,IAAC;AAAC,WAAO;AAAA,EAAC;AAAA,EAAC,UAAU,GAAE;AAAC,WAAO,KAAK,gBAAgB,GAAE,GAAG,EAAE,UAAU,KAAK,QAAO,CAAC;AAAA,EAAC;AAAA,EAAC,WAAU;AAAC,SAAK,gBAAgB;AAAE,QAAI,IAAE,GAAG,EAAE,SAAS,KAAK,MAAM;AAAE,QAAG,KAAK,UAAQ,SAAS,KAAG;AAAC,aAAO,EAAE,IAAI,CAAAA,QAAG,GAAGA,GAAC,CAAC;AAAA,IAAC,SAAOA,KAAE;AAAC,YAAM,IAAI,MAAM,+FAA+F;AAAA,IAAC;AAAC,WAAO;AAAA,EAAC;AAAA,EAAC,MAAM,QAAO;AAAC,SAAK,gBAAgB;AAAE,QAAI,IAAE,MAAM,GAAG,EAAE,KAAK,KAAK,MAAM;AAAE,WAAO,KAAK,UAAQ,WAAS,IAAE,IAAI,WAAW,EAAE,MAAM;AAAA,EAAC;AAAA,EAAC,UAAS;AAAC,SAAK,eAAa,KAAK,aAAW,KAAK,UAAU,QAAQ,GAAE,GAAG,EAAE,cAAc,IAAI,GAAE,KAAK,qBAAmB;AAAA,EAAG;AAAA,EAAC,IAAI,aAAY;AAAC,WAAO,KAAK;AAAA,EAAkB;AAAA,EAAC,kBAAiB;AAAC,QAAG,KAAK,WAAW,OAAM,IAAI,MAAM,qBAAqB;AAAA,EAAC;AAAA,EAAC,MAAM,IAAE,OAAG;AAAC,WAAO,GAAG,MAAM,MAAK,CAAC;AAAA,EAAC;AAAA,EAAC,QAAO;AAAC,WAAO,KAAK,gBAAgB,GAAE,GAAG,MAAM,IAAI;AAAA,EAAC;AAAA,EAAC,SAAS,IAAE,OAAG;AAAC,QAAIA,MAAE,KAAK,SAAS;AAAE,WAAO,GAAGA,KAAE,KAAK,OAAM,KAAK,OAAM,CAAC;AAAA,EAAC;AAAA,EAAC,KAAK,GAAE;AAAC,WAAO,KAAK,gBAAgB,GAAE,GAAG,KAAK,MAAK,CAAC;AAAA,EAAC;AAAA,EAAC,SAAS,IAAE,MAAGA,KAAE,GAAE;AAAC,WAAO,KAAK,gBAAgB,GAAE,GAAG,EAAE,aAAa,MAAK,GAAEA,KAAE,CAAC;AAAA,EAAC;AAAC;AAAE,OAAO,eAAe,IAAG,OAAO,aAAY,EAAC,OAAM,CAAAD,QAAG,CAAC,CAACA,OAAGA,IAAE,QAAM,QAAMA,IAAE,YAAU,QAAMA,IAAE,mBAAiB,KAAI,CAAC;AAAE,SAAS,KAAI;AAAC,SAAO,GAAG,UAAS,MAAI,EAAE;AAAC;AAAC,GAAG;AAAE,IAAI,KAAG,cAAc,GAAE;AAAA,EAAC,YAAY,GAAEC,KAAE,GAAE,GAAE;AAAC,UAAM,EAAE,OAAM,EAAE,OAAM,EAAE,QAAO,CAAC,GAAE,KAAK,YAAUA,KAAE,KAAK,OAAK;AAAA,EAAC;AAAA,EAAC,OAAO,GAAE;AAAC,QAAG,EAAE,UAAQ,KAAK,MAAM,OAAM,IAAI,MAAM,2BAA2B,EAAE,KAAK,yBAAyB,KAAK,KAAK,cAAc;AAAE,QAAG,CAAC,GAAG,EAAE,OAAM,KAAK,KAAK,EAAE,OAAM,IAAI,MAAM,2BAA2B,EAAE,KAAK,yBAAyB,KAAK,KAAK,cAAc;AAAE,OAAG,EAAE,cAAc,IAAI,GAAE,KAAK,SAAO,EAAE,QAAO,GAAG,EAAE,OAAO,MAAK,IAAI;AAAA,EAAC;AAAA,EAAC,UAAS;AAAC,OAAG,EAAE,gBAAgB,IAAI,GAAE,KAAK,qBAAmB;AAAA,EAAE;AAAC;AAAE,OAAO,eAAe,IAAG,OAAO,aAAY,EAAC,OAAM,CAAAD,QAAGA,eAAa,MAAIA,IAAE,UAAQ,QAAMA,IAAE,kBAAkB,SAAQ,CAAC;AAAE,IAAI,KAAG,CAAC;AAAE,GAAG,IAAG,EAAC,kBAAiB,MAAI,IAAG,uBAAsB,MAAI,IAAG,gBAAe,MAAI,IAAG,gBAAe,MAAI,GAAE,CAAC;AAAE,IAAI;AAAA,CAAI,SAASA,KAAE;AAAC,EAAAA,IAAE,KAAG,MAAKA,IAAE,KAAG,MAAKA,IAAE,KAAG,MAAKA,IAAE,KAAG,MAAKA,IAAE,KAAG,MAAKA,IAAE,KAAG,MAAKA,IAAE,KAAG;AAAI,GAAG,OAAK,KAAG,CAAC,EAAE;AAAE,IAAI;AAAA,CAAI,SAASA,KAAE;AAAC,EAAAA,IAAE,UAAQ,WAAUA,IAAE,QAAM,SAAQA,IAAE,OAAK,SAAQA,IAAE,YAAU;AAAW,GAAG,OAAK,KAAG,CAAC,EAAE;AAAE,IAAI;AAAA,CAAI,SAASA,KAAE;AAAC,EAAAA,IAAE,UAAQ,WAAUA,IAAE,QAAM,SAAQA,IAAE,OAAK,QAAOA,IAAE,YAAU;AAAW,GAAG,OAAK,KAAG,CAAC,EAAE;AAAE,IAAI;AAAA,CAAI,SAASA,KAAE;AAAC,EAAAA,IAAE,UAAQ,WAAUA,IAAE,QAAM,WAAUA,IAAE,OAAK,WAAUA,IAAE,YAAU;AAAW,GAAG,OAAK,KAAG,CAAC,EAAE;AAAE,IAAI;AAAA,CAAI,SAASA,KAAE;AAAC,EAAAA,IAAE,UAAQ,aAAYA,IAAE,QAAM,aAAYA,IAAE,OAAK,aAAYA,IAAE,YAAU;AAAW,GAAG,OAAK,KAAG,CAAC,EAAE;AAAE,IAAI,KAAG,EAAC,SAAQ,IAAG,OAAM,IAAG,MAAK,IAAG,WAAU,GAAE;AAAE,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAGA,QAAI,YAAU,MAAI,UAAS;AAAC,QAAGA,QAAI,YAAU,MAAI,SAAS,QAAM;AAAS,UAAM,IAAI,MAAM,kBAAkBA,GAAC,SAAS,CAAC,EAAE;AAAA,EAAC;AAAC,SAAO,GAAGA,GAAC,EAAE,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAO,GAAGA,KAAE,OAAO;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAOA,OAAG,QAAM,OAAOA,OAAG,YAAU,aAAYA,OAAGA,IAAE,mBAAmB;AAAY;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAO,OAAO,aAAW,eAAaA,OAAG,QAAM,OAAOA,OAAG,YAAU,YAAWA,OAAGA,IAAE,kBAAkB;AAAS;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAGA,IAAE,UAAQ,EAAE,MAAM,QAAM,CAACA,KAAE,CAAC;AAAE,MAAIC,MAAE,GAAGD,IAAE,OAAM,EAAE,KAAK;AAAE,SAAM,CAACA,IAAE,KAAKC,GAAC,GAAE,EAAE,KAAKA,GAAC,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,IAAEA,IAAE,UAAQ,EAAE,OAAM,MAAI,2BAA2BA,IAAE,KAAK,gBAAgB,EAAE,KAAK,oBAAoB;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,SAAO,EAAE,KAAK,CAAAC,QAAGA,IAAE,OAAKD,IAAE,EAAE;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAI,IAAE,CAAC;AAAE,SAAO,GAAGA,KAAE,GAAE,oBAAI,KAAG,GAAE;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAGD,OAAG,KAAK;AAAO,MAAGA,eAAa,IAAG;AAAC,MAAE,KAAKA,GAAC;AAAE;AAAA,EAAM;AAAC,MAAG,CAAC,GAAGA,GAAC,EAAE;AAAO,MAAI,IAAEA;AAAE,WAAQ,KAAK,GAAE;AAAC,QAAI,IAAE,EAAE,CAAC;AAAE,IAAAC,IAAE,IAAI,CAAC,MAAIA,IAAE,IAAI,CAAC,GAAE,GAAG,GAAE,GAAEA,GAAC;AAAA,EAAE;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,SAAO,MAAM,QAAQA,GAAC,KAAG,OAAOA,OAAG;AAAQ;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAOA,IAAE,cAAY;AAAI;AAAC,IAAI,KAAG,MAAK;AAAA,EAAC,cAAa;AAAC,SAAK,sBAAoB,CAAC,GAAE,KAAK,iBAAe,GAAE,KAAK,WAAS,GAAE,KAAK,aAAW,GAAE,KAAK,mBAAiB,GAAE,KAAK,iBAAe,GAAE,KAAK,gBAAc,GAAE,KAAK,cAAY,GAAE,KAAK,aAAW,CAAC,GAAE,KAAK,oBAAkB,CAAC,GAAE,KAAK,cAAY,GAAE,KAAK,aAAW,oBAAI,WAAQ,KAAK,YAAU,OAAG,KAAK,gBAAc,EAAC,UAAS,GAAE,YAAW,GAAE,WAAU,GAAE,SAAQ,CAAC,GAAE,QAAO,MAAK,IAAI,cAAa;AAAC,aAAO,MAAM,KAAK,IAAI,IAAI,KAAK,QAAQ,IAAI,OAAG,EAAE,IAAI,CAAC,CAAC;AAAA,IAAC,EAAC;AAAA,EAAC;AAAA,EAAC,UAAS;AAAC,aAAQ,KAAK,KAAK,oBAAoB,MAAK,oBAAoB,CAAC,EAAE,QAAQ;AAAA,EAAC;AAAC;AAApiB,IAAsiB,KAAG,MAAM,EAAC;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,MAAI,GAAE,KAAK,WAAS,CAAC,GAAE,KAAK,kBAAgB,CAAC,GAAE,KAAK,uBAAqB,GAAE,KAAK,QAAM,IAAI;AAAA,EAAE;AAAA,EAAC,MAAM,QAAO;AAAC,QAAG,KAAK,sBAAoB,KAAK,QAAO,KAAK,mBAAmB,KAAK,MAAI;AAAA,IAAC,CAAC;AAAE,QAAG,KAAK,mBAAiB,KAAK;AAAO,QAAI,IAAE,KAAK,kBAAkB;AAAE,aAAQC,MAAE,GAAEA,MAAE,EAAE,QAAOA,OAAI;AAAC,UAAI,IAAE,EAAEA,GAAC;AAAE,UAAG,MAAM,KAAK,kBAAkB,CAAC,EAAE,SAAQ;AAAC,cAAM,KAAK,WAAW,CAAC;AAAE;AAAA,MAAM;AAAA,IAAC;AAAC,UAAM,IAAI,MAAM,wEAAwE;AAAA,EAAC;AAAA,EAAC,IAAI,UAAS;AAAC,QAAG,KAAK,sBAAoB,KAAK,OAAM,IAAI,MAAM,YAAY,KAAK,WAAW,qHAAqH;AAAE,QAAG,KAAK,mBAAiB,MAAK;AAAC,UAAG,EAAC,MAAK,GAAE,WAAUA,IAAC,IAAE,KAAK,gCAAgC;AAAE,UAAGA,IAAE,OAAM,IAAI,MAAM,iCAAiC,CAAC,qHAAqH;AAAE,WAAK,WAAW,CAAC;AAAA,IAAC;AAAC,WAAO,KAAK;AAAA,EAAe;AAAA,EAAC,eAAc;AAAC,WAAO,OAAO,KAAK,KAAK,eAAe;AAAA,EAAC;AAAA,EAAC,YAAY,GAAE;AAAC,QAAG,EAAE,KAAK,KAAK,UAAU,KAAG,KAAK,KAAK,iBAAgB;AAAC,UAAG,EAAC,WAAUA,IAAC,IAAE,KAAK,kBAAkB,CAAC;AAAE,UAAGA,IAAE,QAAO;AAAA,IAAI,MAAM,QAAO;AAAK,WAAO,KAAK,SAAS,CAAC;AAAA,EAAC;AAAA,EAAC,mBAAmB,GAAE;AAAC,WAAO,KAAK,KAAK,kBAAgB,KAAK,gBAAgB,CAAC,EAAE,UAAQ;AAAA,EAAI;AAAA,EAAC,gBAAgB,GAAEA,KAAE,IAAE,GAAE;AAAC,WAAO,KAAK,KAAK,mBAAiB,GAAG,GAAG,CAAC,oEAAoE,GAAE,UAAK,KAAK,gBAAgB,CAAC,IAAE,EAAC,SAAQA,KAAE,UAAS,EAAC,GAAE;AAAA,EAAG;AAAA,EAAC,MAAM,WAAW,GAAE;AAAC,QAAG,KAAK,gBAAgB,CAAC,KAAG,KAAK,OAAM,IAAI,MAAM,iBAAiB,CAAC,yBAAyB;AAAE,QAAG,KAAK,cAAY,GAAE,KAAK,SAAS,CAAC,KAAG,MAAK;AAAC,WAAK,kBAAgB;AAAK,UAAG,EAAC,SAAQA,KAAE,WAAU,EAAC,IAAE,KAAK,kBAAkB,CAAC;AAAE,UAAG,EAAE,IAAE,MAAMA,MAAEA,KAAG,QAAM;AAAA,IAAE;AAAC,WAAO,KAAK,kBAAgB,KAAK,SAAS,CAAC,GAAE,KAAK,uBAAuB,GAAE,KAAK,WAAS,IAAI,GAAG,KAAK,eAAe,GAAE;AAAA,EAAE;AAAA,EAAC,yBAAwB;AAAC,OAAG,KAAK,WAAW,EAAE,QAAQ,CAAAA,QAAG;AAAC,MAAAA,IAAE,aAAW,QAAMA,IAAE,UAAU,KAAK,eAAe;AAAA,IAAC,CAAC;AAAA,EAAC;AAAA,EAAC,yBAAyB,GAAE;AAAC,OAAG,CAAC,EAAE,QAAQ,OAAG;AAAC,QAAE,eAAa,QAAM,EAAE,YAAY,KAAK,SAAS,CAAC,CAAC;AAAA,IAAC,CAAC;AAAA,EAAC;AAAA,EAAC,kBAAkB,GAAE;AAAC,QAAIA,MAAE,KAAK,gBAAgB,CAAC;AAAE,QAAGA,OAAG,KAAK,OAAM,IAAI,MAAM,6BAA6B,CAAC,0BAA0B;AAAE,QAAG;AAAC,UAAI,IAAEA,IAAE,QAAQ;AAAE,UAAG,KAAG,EAAE,aAAa,OAAK,OAAO,EAAE,QAAM,YAAW;AAAC,YAAI,IAAE,EAAE,KAAK,sBAAqB,IAAE,EAAE,KAAK,OAAG,IAAE,KAAK,uBAAqB,SAAI,KAAK,SAAS,CAAC,IAAE,GAAE,KAAK,qBAAmB,MAAK,KAAG,EAAE,MAAM,QAAI,IAAE,KAAK,yBAAuB,KAAK,qBAAmB,MAAK,GAAG,6BAA6B,CAAC,SAAS,GAAE,GAAG,EAAE,SAAO,EAAE,OAAO,IAAG,MAAG;AAAE,eAAO,KAAK,qBAAmB,GAAE,EAAC,SAAQ,GAAE,WAAU,KAAE;AAAA,MAAC,MAAM,QAAO,KAAK,SAAS,CAAC,IAAE,GAAE,EAAC,SAAQ,MAAG,WAAU,MAAE;AAAA,IAAC,SAAO,GAAE;AAAC,aAAO,GAAG,6BAA6B,CAAC,SAAS,GAAE,GAAG,EAAE,SAAO,EAAE,OAAO,GAAE,EAAC,SAAQ,OAAG,WAAU,MAAE;AAAA,IAAC;AAAA,EAAC;AAAA,EAAC,cAAc,GAAE;AAAC,QAAG,EAAE,KAAK,KAAK,iBAAiB,OAAM,IAAI,MAAM,GAAG,CAAC,gCAAgC;AAAE,SAAK,gBAAc,KAAG,KAAK,sBAAoB,QAAM,KAAK,wBAAuB,KAAK,KAAK,aAAW,KAAK,yBAAyB,CAAC,GAAE,KAAK,SAAS,CAAC,EAAE,QAAQ,GAAE,OAAO,KAAK,SAAS,CAAC,IAAG,OAAO,KAAK,gBAAgB,CAAC,GAAE,KAAK,gBAAc,MAAI,KAAK,qBAAmB,MAAK,KAAK,cAAY,MAAK,KAAK,kBAAgB;AAAA,EAAK;AAAA,EAAC,oBAAmB;AAAC,QAAG,OAAO,KAAK,KAAK,eAAe,EAAE,WAAS,EAAE,OAAM,IAAI,MAAM,+BAA+B;AAAE,WAAO,OAAO,KAAK,KAAK,eAAe,EAAE,KAAK,CAAC,GAAEA,QAAI,KAAK,gBAAgBA,GAAC,EAAE,WAAS,KAAK,gBAAgB,CAAC,EAAE,QAAQ;AAAA,EAAC;AAAA,EAAC,kCAAiC;AAAC,QAAI,IAAE,KAAK,kBAAkB;AAAE,aAAQA,MAAE,GAAEA,MAAE,EAAE,QAAOA,OAAI;AAAC,UAAI,IAAE,EAAEA,GAAC,GAAE,EAAC,SAAQ,GAAE,WAAU,EAAC,IAAE,KAAK,kBAAkB,CAAC;AAAE,UAAG,KAAG,EAAE,QAAM,EAAC,MAAK,GAAE,WAAU,EAAC;AAAA,IAAC;AAAC,UAAM,IAAI,MAAM,wEAAwE;AAAA,EAAC;AAAA,EAAC,SAAS,GAAEA,KAAE;AAAC,QAAI,IAAE,KAAK,MAAM,WAAW,IAAIA,GAAC,GAAE,IAAE,EAAE,SAAQ,IAAE,KAAK,SAASA,GAAC,GAAE,IAAE,EAAE,SAASA,GAAC;AAAE,MAAE,YAAYA,KAAE,IAAE,GAAE,EAAE,UAAQ,GAAE,EAAE,KAAKA,KAAE,GAAE,EAAE,OAAM,EAAE,OAAM,CAAC,GAAE,KAAK,uBAAuB,KAAG,KAAK,MAAM,kBAAkB,KAAK,MAAM,kBAAkB,SAAO,CAAC;AAAA,EAAG;AAAA,EAAC,KAAK,GAAEA,KAAE;AAAC,QAAI,IAAE;AAAK,QAAGA,OAAG,MAAK;AAAC,UAAG,OAAO,KAAG,WAAW,OAAM,IAAI,MAAM,qCAAqC;AAAE,MAAAA,MAAE;AAAA,IAAC,OAAK;AAAC,UAAG,OAAO,KAAG,YAAU,EAAE,aAAa,QAAQ,OAAM,IAAI,MAAM,gFAAgF;AAAE,UAAG,OAAOA,OAAG,WAAW,OAAM,IAAI,MAAM,gFAAgF;AAAE,UAAE;AAAA,IAAC;AAAC,QAAI;AAAE,WAAO,KAAK,UAAU,MAAI,KAAK,WAAW,CAAC,GAAE,MAAI,KAAK,SAAS,CAAC,GAAE,OAAK,IAAEA,IAAE,GAAE,aAAa,WAAS,QAAQ,MAAM,yCAAyC,GAAE,EAAE;AAAA,EAAC;AAAA,EAAC,UAAU,GAAEA,KAAE,GAAE;AAAC,MAAE;AAAE,QAAG;AAAC,UAAI,IAAE,EAAE;AAAE,aAAOA,IAAE,GAAE;AAAA,IAAC,SAAO,GAAE;AAAC,YAAMA,IAAE,GAAE;AAAA,IAAC;AAAA,EAAC;AAAA,EAAC,eAAc;AAAC,WAAO,EAAE;AAAA,EAAc;AAAA,EAAC,iBAAgB;AAAC,WAAO,EAAE;AAAA,EAAgB;AAAA,EAAC,MAAM,GAAE;AAAC,QAAIA,MAAE,EAAE,UAAU,IAAG,EAAC,GAAE,EAAC,CAAC,GAAE,IAAE,EAAC,GAAE,EAAC,GAAE,IAAE,QAAI,EAAC,GAAE,MAAI;AAAC,UAAI,IAAE,WAAU,IAAE,EAAC,GAAE,EAAC,GAAE,IAAE,EAAC,OAAM,EAAC;AAAE,aAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAA,IAAC,EAAC,IAAG,IAAE,CAAC;AAAE,WAAO,KAAK,YAAY,KAAK,MAAM,YAAY,MAAK,GAAE,CAACA,GAAC,GAAE,GAAE,GAAE,CAAC,CAAC,GAAEA;AAAA,EAAC;AAAA,EAAC,UAAU,GAAEA,KAAE,GAAE;AAAC,QAAG,KAAK,eAAa,QAAM,KAAK,SAAQ,EAAE,GAAG,GAAE,KAAK,WAAW,KAAG,MAAM,OAAM,IAAI,MAAM,WAAW,CAAC,iCAAiC,KAAK,WAAW,GAAG;AAAE,WAAO,KAAK,cAAc,EAAC,YAAW,GAAE,QAAOA,KAAE,OAAM,EAAC,CAAC;AAAA,EAAC;AAAA,EAAC,yBAAwB;AAAC,WAAO,KAAK,IAAI,QAAQ,SAAS;AAAA,EAAC;AAAA,EAAC,sBAAsB,GAAEA,KAAE,GAAE;AAAC,QAAI,IAAE,KAAK,QAAQ,WAAW,GAAE,IAAE;AAAE,MAAE,QAAQ,OAAG;AAAC,WAAG,EAAE,UAAQ,cAAY,IAAE;AAAA,IAAC,CAAC;AAAE,QAAI,IAAE,KAAK,MAAM,kBAAkB,KAAK,MAAM,kBAAkB,SAAO,CAAC,GAAE,IAAE,IAAEA,MAAE,IAAE;AAAE,QAAG,IAAE,EAAE,OAAM,IAAI,MAAM,YAAY,KAAK,WAAW,kCAAkC,CAAC,6BAA6B,CAAC,GAAG;AAAA,EAAC;AAAA,EAAC,cAAc,GAAE;AAAC,QAAIA,KAAE,IAAE,CAAC,GAAE,IAAE,KAAK,SAAS,GAAE,IAAE,KAAK,MAAM,UAAS,IAAE,KAAK,MAAM;AAAW,SAAK,uBAAuB,KAAG,KAAK,MAAM,kBAAkB,KAAK,CAAC;AAAE,QAAI;AAAE,SAAK,eAAa,QAAM,KAAK;AAAQ,QAAI,GAAE,IAAE,GAAG,CAAC,IAAE,EAAE,aAAW,KAAK,MAAM,eAAa,OAAK,KAAK,MAAM,YAAY,OAAK;AAAG,QAAG,GAAG,CAAC,GAAE;AAAC,UAAG,EAAC,YAAW,GAAE,QAAO,GAAE,OAAM,EAAC,IAAE;AAAE,WAAK,eAAa,QAAM,KAAK;AAAQ,UAAI,IAAE,GAAG,GAAE,KAAK,WAAW;AAAE,QAAE,KAAG,MAAK,MAAI,kCAAkC,CAAC,kBAAkB,KAAK,WAAW,GAAG,GAAE,IAAE,MAAI;AAAC,YAAI,IAAE,KAAK,QAAQ,WAAW;AAAE,YAAE,EAAE,WAAW,EAAC,QAAO,GAAE,OAAM,GAAE,SAAQ,KAAK,QAAO,CAAC;AAAE,YAAI,IAAE,MAAM,QAAQ,CAAC,IAAE,IAAE,CAAC,CAAC;AAAE,aAAK,uBAAuB,KAAG,KAAK,sBAAsB,GAAE,GAAE,CAAC;AAAE,YAAI,IAAE,EAAE,IAAI,OAAG,EAAE,QAAM,OAAK,IAAE,KAAK,yBAAyB,CAAC,CAAC;AAAE,YAAG,GAAE;AAAC,cAAI,IAAE,KAAK,sBAAsB,GAAE,GAAE,CAAC;AAAE,cAAE,KAAK,2BAA2B,CAAC;AAAA,QAAC;AAAC,eAAO;AAAA,MAAC;AAAA,IAAC,OAAK;AAAC,UAAG,EAAC,aAAY,EAAC,IAAE,GAAE,IAAE,OAAG;AAAC,cAAI,IAAE,EAAE,IAAI,OAAG,KAAK,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC;AAAA,MAAE;AAAE,UAAE,MAAI;AAAC,YAAI,IAAE,KAAK,QAAQ,WAAW;AAAE,YAAE,KAAK,KAAK,MAAI,EAAE,KAAK,SAAQ,CAAC,CAAC;AAAE,YAAI,IAAE,MAAM,QAAQ,CAAC,IAAE,IAAE,CAAC,CAAC;AAAE,eAAO,KAAK,uBAAuB,KAAG,KAAK,sBAAsB,GAAE,GAAE,CAAC,GAAE;AAAA,MAAC;AAAA,IAAC;AAAC,QAAG,EAAC,QAAO,GAAE,OAAM,EAAC,IAAE,GAAE,IAAE,GAAG,CAAC,IAAE,OAAK,EAAE,eAAc;AAAE,WAAO,KAAK,UAAU,MAAI,KAAK,MAAM,eAAc,MAAI,KAAK,MAAM,eAAc,MAAI;AAAC,OAAC,KAAK,IAAI,QAAQ,OAAO,KAAG,CAAC,KAAK,MAAM,YAAUA,MAAE,EAAE,KAAG,IAAE,KAAK,SAAS,cAAc,GAAE,GAAE,MAAI,EAAE,CAAC,GAAE,KAAK,IAAI,QAAQ,OAAO,KAAG,KAAK,SAAS,iBAAiB,CAAC,GAAEA,MAAE,EAAE;AAAA,IAAQ,CAAC,GAAE,KAAG,KAAK,YAAY,GAAE,GAAEA,KAAE,GAAE,GAAE,CAAC,GAAE,KAAK,MAAM,aAAW,KAAK,MAAM,cAAc,QAAQ,KAAK,EAAC,MAAK,GAAE,YAAW,KAAK,MAAM,WAAS,GAAE,oBAAmB,KAAK,MAAM,UAAS,cAAa,KAAK,MAAM,aAAW,GAAE,sBAAqB,KAAK,MAAM,YAAW,aAAY,OAAO,KAAK,CAAC,EAAE,IAAI,OAAG,EAAE,CAAC,KAAG,OAAK,EAAE,CAAC,EAAE,QAAM,IAAI,GAAE,cAAaA,IAAE,IAAI,OAAG,EAAE,KAAK,GAAE,cAAa,EAAE,QAAO,WAAU,EAAE,UAAS,CAAC,GAAE,MAAM,QAAQ,CAAC,IAAEA,MAAEA,IAAE,CAAC;AAAA,EAAC;AAAA,EAAC,2BAA2B,GAAE;AAAC,WAAO,EAAE,IAAI,OAAG,KAAK,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC;AAAA,EAAC;AAAA,EAAC,sBAAsB,GAAEA,KAAE,GAAE;AAAC,QAAI,IAAE,GAAG,CAAC;AAAE,QAAG,KAAG,MAAK;AAAC,UAAI,IAAE,EAAE,gBAAc,CAAC,GAAE,IAAE,EAAE,iBAAe,CAAC,GAAE;AAAE,QAAE,iBAAe,EAAE,MAAM,QAAQA,GAAC,GAAE,MAAI,wDAAwD,GAAE,IAAE,OAAO,KAAKA,GAAC,EAAE,IAAI,OAAGA,IAAE,CAAC,CAAC,KAAG,IAAE,EAAE,IAAI,OAAGA,IAAE,CAAC,CAAC;AAAE,UAAI,IAAE,EAAE,OAAO,CAAC,GAAE,MAAI,EAAE,CAAC,CAAC;AAAE,aAAO,EAAE,OAAO,CAAC;AAAA,IAAC;AAAC,WAAM,CAAC;AAAA,EAAC;AAAA,EAAC,WAAW,GAAEA,KAAE,GAAE,GAAE;AAAC,QAAG,KAAG,KAAK,OAAM,IAAI,MAAM,+CAA+C;AAAE,QAAE,KAAG,WAAU,IAAE,KAAG,KAAK;AAAQ,QAAI,IAAE;AAAE,UAAI,YAAU,GAAG,EAAE,CAAC,CAAC,MAAI,IAAE,EAAE,IAAI,OAAG,GAAG,CAAC,CAAC;AAAG,QAAI,IAAE,EAAE,MAAM,GAAEA,KAAE,CAAC,GAAE,IAAE,IAAI,GAAGA,KAAE,GAAE,GAAE,KAAK,aAAa,CAAC;AAAE,QAAG,KAAK,YAAY,GAAE,CAAC,GAAE,MAAI,UAAS;AAAC,UAAI,IAAE,KAAK,MAAM,WAAW,IAAI,CAAC,GAAE,IAAE,GAAG,CAAC;AAAE,WAAK,MAAM,YAAU,IAAE,EAAE,OAAM,EAAE,QAAM;AAAA,IAAC;AAAC,WAAO;AAAA,EAAC;AAAA,EAAC,qBAAqB,GAAEA,KAAE,GAAE,GAAE;AAAC,QAAE,KAAG;AAAU,QAAI,IAAE,EAAC,QAAO,GAAE,OAAMA,KAAE,OAAM,EAAC;AAAE,WAAO,KAAK,yBAAyB,GAAE,CAAC;AAAA,EAAC;AAAA,EAAC,yBAAyB,GAAEA,KAAE;AAAC,QAAG,EAAC,QAAO,GAAE,OAAM,GAAE,OAAM,EAAC,IAAE,GAAE,IAAE,IAAI,GAAG,GAAE,GAAE,GAAE,KAAK,aAAa,CAAC;AAAE,WAAO,KAAK,YAAY,GAAEA,GAAC,GAAE;AAAA,EAAC;AAAA,EAAC,aAAa,GAAEA,MAAE,MAAG,GAAE,GAAE;AAAC,QAAE,KAAG,KAAK,eAAe,EAAE,SAAS,GAAE,KAAG,QAAM,MAAI,EAAE,UAAQ,IAAE,EAAE,KAAK,CAAC;AAAG,QAAI,IAAE,IAAI,GAAG,GAAEA,KAAE,GAAE,KAAK,aAAa,CAAC;AAAE,QAAG,KAAK,MAAM,oBAAoB,EAAE,IAAI,KAAG,KAAK,OAAM,IAAI,MAAM,sBAAsB,EAAE,IAAI,yBAAyB;AAAE,WAAO,KAAK,MAAM,oBAAoB,EAAE,IAAI,IAAE,GAAE,KAAK,OAAO,GAAE,KAAK,OAAO,GAAE;AAAA,EAAC;AAAA,EAAC,YAAY,GAAEA,KAAE;AAAC,SAAK,MAAM,cAAa,EAAE,UAAQ,YAAU,KAAK,MAAM;AAAmB,QAAI,IAAE;AAAE,MAAE,UAAQ,eAAa,EAAE,UAAQ,aAAW,IAAE,EAAE,OAAK,GAAG,EAAE,KAAK,IAAG,KAAK,MAAM,YAAU,GAAE,KAAK,MAAM,WAAW,IAAI,EAAE,MAAM,MAAI,KAAK,MAAM,kBAAiB,KAAK,MAAM,WAAW,IAAI,EAAE,QAAO,EAAC,SAAQA,OAAG,KAAK,SAAQ,OAAM,EAAE,OAAM,OAAM,EAAE,OAAM,OAAM,EAAC,CAAC,IAAG,aAAa,MAAI,KAAK,MAAM,CAAC;AAAA,EAAC;AAAA,EAAC,OAAO,GAAEA,KAAE;AAAC,SAAK,YAAY,GAAEA,GAAC,GAAE,KAAK,QAAQ,OAAO,EAAE,MAAM;AAAA,EAAC;AAAA,EAAC,aAAa,GAAEA,KAAE;AAAC,SAAK,MAAM,WAAW,IAAI,CAAC,KAAG,KAAK,MAAM,WAAW,IAAI,CAAC,EAAE,YAAUA,QAAI,KAAK,MAAM,WAAW,OAAO,CAAC,GAAE,KAAK,MAAM;AAAA,EAAiB;AAAA,EAAC,cAAc,GAAE;AAAC,QAAG,CAAC,KAAK,MAAM,WAAW,IAAI,EAAE,MAAM,EAAE;AAAO,QAAIA,MAAE,KAAK,MAAM,WAAW,IAAI,EAAE,MAAM;AAAE,QAAG,KAAK,MAAM,cAAa,EAAE,UAAQ,aAAW,KAAK,MAAM,oBAAmB,KAAK,MAAM,YAAUA,IAAE,QAAO,EAAE,UAAQ,eAAa,EAAE,UAAQ,UAAS;AAAC,UAAI,IAAE,EAAE,OAAK,GAAG,EAAE,KAAK;AAAE,WAAK,MAAM,YAAU;AAAA,IAAC;AAAC,IAAAA,IAAE,QAAQ,YAAY,EAAE,MAAM,KAAG,KAAK,aAAa,EAAE,QAAOA,IAAE,OAAO;AAAA,EAAC;AAAA,EAAC,mBAAkB;AAAC,aAAQ,KAAK,KAAK,MAAM,qBAAoB;AAAC,UAAIA,MAAE,KAAK,MAAM,oBAAoB,CAAC;AAAE,WAAK,gBAAgBA,GAAC;AAAA,IAAC;AAAA,EAAC;AAAA,EAAC,gBAAgB,GAAE;AAAC,SAAK,cAAc,CAAC,GAAE,KAAK,MAAM,oBAAoB,EAAE,IAAI,KAAG,QAAM,OAAO,KAAK,MAAM,oBAAoB,EAAE,IAAI;AAAA,EAAC;AAAA,EAAC,SAAQ;AAAC,QAAI,IAAE,KAAK,QAAQ,OAAO;AAAE,WAAO,EAAE,aAAW,KAAK,MAAM,YAAW,EAAE,iBAAe,KAAK,MAAM,gBAAe,EAAE,WAAS,KAAK,MAAM,UAAS,KAAK,MAAM,mBAAiB,MAAI,EAAE,aAAW,MAAG,EAAE,WAAS,SAAO,EAAE,UAAQ,CAAC,IAAG,EAAE,QAAQ,KAAK,uEAAuE,IAAG;AAAA,EAAC;AAAA,EAAC,MAAM,QAAQ,GAAE;AAAC,SAAK,MAAM,YAAU;AAAG,QAAIA,MAAE,KAAK,MAAM,UAAS,IAAE,KAAK,MAAM;AAAW,SAAK,MAAM,cAAc,UAAQ,CAAC,GAAE,KAAK,MAAM,cAAc,SAAO,MAAM,EAAE,GAAE,KAAK,MAAM,YAAU,OAAG,KAAK,MAAM,cAAc,YAAU,KAAK,IAAI,GAAG,KAAK,MAAM,cAAc,QAAQ,IAAI,OAAG,EAAE,kBAAkB,CAAC,GAAE,KAAK,MAAM,cAAc,WAAS,KAAK,MAAM,WAASA,KAAE,KAAK,MAAM,cAAc,aAAW,KAAK,MAAM,aAAW;AAAE,aAAQ,KAAK,KAAK,MAAM,cAAc,QAAQ,GAAE,eAAa,MAAM,EAAE,cAAa,EAAE,YAAU,MAAM,EAAE;AAAU,WAAO,KAAK,MAAM;AAAA,EAAa;AAAA,EAAC,WAAU;AAAC,WAAO,KAAK,MAAM,gBAAc,KAAG,KAAK,MAAM,gBAAc;AAAA,EAAC;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE,GAAE,GAAE,GAAE;AAAC,QAAI,IAAE,EAAC,IAAG,KAAK,MAAM,kBAAiB,YAAW,GAAE,QAAOA,KAAE,SAAQ,GAAE,OAAM,EAAC,GAAE,IAAE,GAAG,CAAC;AAAE,SAAG,SAAO,IAAE,EAAE,WAAU,KAAG,SAAO,EAAE,WAAS,QAAI,IAAE,EAAE,IAAI,CAAC,GAAE,MAAI;AAAC,UAAG,KAAG,MAAK;AAAC,YAAI,IAAE,EAAE,CAAC,GAAE,IAAE,GAAG,EAAE,MAAK,EAAE,KAAK;AAAE,eAAO,KAAK,WAAW,GAAE,EAAE,OAAM,EAAE,KAAK;AAAA,MAAC;AAAC,aAAO;AAAA,IAAC,CAAC,GAAE,EAAE,EAAE,SAAO,IAAE,IAAE,EAAE,CAAC,GAAE,GAAE,CAAC,KAAI,KAAK,MAAM,WAAW,KAAK,CAAC;AAAA,EAAC;AAAA,EAAC,KAAK,GAAE;AAAC,WAAO,EAAE,OAAK,MAAG;AAAA,EAAC;AAAA,EAAC,YAAW;AAAC,SAAK,MAAM,kBAAgB,MAAI,KAAK,MAAM,aAAW,CAAC,IAAG,KAAK,MAAM;AAAA,EAAe;AAAA,EAAC,UAAS;AAAC,SAAK,MAAM;AAAA,EAAe;AAAA,EAAC,WAAW,GAAE;AAAC,QAAIA,MAAE,EAAC,OAAM,CAAC,GAAE,MAAK,iBAAgB,IAAG,KAAK,MAAM,cAAa;AAAE,UAAIA,IAAE,OAAK,IAAG,KAAK,MAAM,WAAW,KAAKA,GAAC,GAAE,KAAK,MAAM,cAAYA;AAAA,EAAC;AAAA,EAAC,SAAS,GAAE;AAAC,QAAIA,MAAE,GAAG,CAAC,GAAE,IAAE,IAAI,IAAIA,IAAE,IAAI,OAAG,EAAE,EAAE,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,KAAK,MAAM,YAAY,MAAM,QAAO,KAAI;AAAC,UAAI,IAAE,KAAK,MAAM,YAAY,MAAM,CAAC;AAAE,OAAC,EAAE,QAAM,CAAC,EAAE,IAAI,EAAE,EAAE,KAAG,EAAE,QAAQ;AAAA,IAAC;AAAC,QAAI,IAAE,KAAK,MAAM,WAAW,IAAI;AAAE,SAAK,MAAM,cAAY,KAAK,MAAM,WAAW,WAAS,IAAE,OAAK,KAAK,MAAM,WAAW,KAAK,MAAM,WAAW,SAAO,CAAC,GAAEA,IAAE,QAAQ,OAAG;AAAC,OAAC,EAAE,QAAM,EAAE,YAAU,EAAE,MAAI,KAAK,MAAM,CAAC;AAAA,IAAC,CAAC;AAAA,EAAC;AAAA,EAAC,UAAU,GAAEA,KAAE,GAAE,IAAE,OAAG;AAAC,QAAG,EAAEA,IAAE,SAAO,GAAE,MAAI,2CAA2C,GAAE,KAAG,QAAM,EAAE,UAAQ,UAAU,OAAM,IAAI,MAAM,0CAA0C,EAAE,KAAK,GAAG;AAAE,QAAI,IAAE,KAAK,UAAU,MAAI,KAAK,UAAU,GAAE,MAAI,KAAK,QAAQ,GAAE,MAAI,KAAK,KAAK,WAAU,CAAC,CAAC;AAAE,MAAE,aAAa,IAAG,MAAI,gDAAgD;AAAE,QAAI,IAAE,GAAG,KAAK,MAAM,YAAWA,KAAE,CAAC;AAAE,QAAG,CAAC,KAAG,EAAE,WAAS,KAAGA,IAAE,SAAO,EAAE,OAAM,IAAI,MAAM,qIAAqI;AAAE,WAAO,KAAK,KAAK,YAAW,MAAI;AAAC,UAAI,IAAE,CAAC;AAAE,QAAE,EAAE,EAAE,IAAE,KAAG,OAAK,GAAG,EAAE,KAAK,IAAE,GAAE,GAAG,GAAE,GAAE,OAAG,KAAK,KAAK,CAAC,GAAE,EAAE;AAAE,UAAI,IAAEA,IAAE,IAAI,OAAG,EAAE,EAAE,EAAE,CAAC;AAAE,aAAO,KAAK,MAAM,kBAAgB,MAAI,KAAK,MAAM,WAAW,QAAQ,OAAG;AAAC,iBAAQ,KAAK,EAAE,MAAM,GAAE,QAAQ;AAAA,MAAC,CAAC,GAAE,KAAK,MAAM,aAAW,OAAM,EAAC,OAAM,GAAE,OAAM,EAAC;AAAA,IAAC,CAAC;AAAA,EAAC;AAAA,EAAC,WAAW,GAAE;AAAC,WAAO,EAAE,GAAG,CAAC,GAAE,MAAI,mDAAmD,GAAE,IAAIA,QAAI;AAAC,QAAEA,IAAE,MAAM,OAAG,aAAa,EAAE,GAAE,MAAI,kEAAkE;AAAE,UAAI,GAAE,IAAE,CAAC;AAAE,MAAAA,IAAE,QAAQ,CAAC,GAAE,MAAI;AAAC,UAAE,CAAC,IAAE;AAAA,MAAC,CAAC;AAAE,UAAI,IAAE,CAAC,GAAE,OAAK,IAAE,EAAE,GAAGA,KAAE,CAAC,GAAE,EAAE,EAAE,iBAAiB,IAAG,MAAI,4FAA4F,GAAE,EAAE,GAAG,EAAE,QAAQ,GAAE,MAAI,kGAAkG,GAAE,EAAE,QAAO,IAAE,CAAC,GAAE,MAAI;AAAC,YAAI,IAAE,EAAE,SAAS,GAAE,CAAC,GAAE,IAAE,MAAM,QAAQ,CAAC,IAAE,IAAE,CAAC,CAAC;AAAE,UAAE,EAAE,WAASA,IAAE,QAAO,MAAI,qKAAqK,GAAE,EAAE,EAAE,MAAM,OAAG,aAAa,EAAE,GAAE,MAAI,sIAAsI;AAAE,YAAI,IAAE,CAAC;AAAE,eAAO,EAAE,QAAQ,CAAC,GAAE,MAAI;AAAC,YAAE,CAAC,IAAE,MAAI;AAAA,QAAC,CAAC,GAAE;AAAA,MAAC;AAAE,aAAO,KAAK,cAAc,EAAC,aAAY,GAAE,eAAc,GAAE,QAAO,EAAC,CAAC;AAAA,IAAC;AAAA,EAAC;AAAA,EAAC,SAAS,GAAE;AAAC,WAAO,KAAK,MAAM,WAAW,IAAI,CAAC,EAAE,QAAQ,SAAS,CAAC;AAAA,EAAC;AAAA,EAAC,KAAK,GAAE;AAAC,WAAO,KAAK,MAAM,WAAW,IAAI,CAAC,EAAE,QAAQ,KAAK,CAAC;AAAA,EAAC;AAAA,EAAC,UAAU,GAAEA,KAAE;AAAC,WAAO,KAAK,MAAM,WAAW,IAAI,CAAC,EAAE,QAAQ,UAAU,GAAEA,GAAC;AAAA,EAAC;AAAA,EAAC,MAAM,KAAK,GAAE;AAAC,QAAIA,MAAE,GAAG,GAAE,IAAE,MAAM,KAAK,QAAQ,KAAK,CAAC;AAAE,WAAO,EAAE,SAAO,GAAG,IAAEA,KAAE;AAAA,EAAC;AAAA,EAAC,MAAM,GAAE;AAAC,WAAO,KAAK,MAAM,eAAa,SAAO,EAAE,UAAQ,KAAK,MAAM,YAAY,IAAG,KAAK,MAAM,YAAY,MAAM,KAAK,CAAC,IAAG;AAAA,EAAC;AAAA,EAAC,IAAI,sBAAqB;AAAC,WAAO,KAAK,MAAM;AAAA,EAAmB;AAAA,EAAC,QAAO;AAAC,SAAK,wBAAuB,KAAK,MAAM,QAAQ,GAAE,KAAK,IAAI,MAAM,GAAE,KAAK,QAAM,IAAI;AAAG,aAAQ,KAAK,KAAK,SAAS,MAAK,yBAAyB,CAAC,GAAE,KAAK,SAAS,CAAC,EAAE,QAAQ,GAAE,OAAO,KAAK,SAAS,CAAC;AAAE,SAAK,cAAY,MAAK,KAAK,kBAAgB,MAAK,KAAK,qBAAmB;AAAA,EAAI;AAAC;AAAE,GAAG,eAAa;AAAE,GAAG,iBAAe;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAI,IAAE,GAAG,GAAGA,GAAC,GAAE,SAAS;AAAE,SAAO,EAAE,WAAW,GAAEA,KAAE,SAAS;AAAC;AAAC,SAAS,KAAI;AAAC,MAAIA,MAAE,GAAG;AAAE,MAAGA,IAAE,aAAW,MAAK;AAAC,QAAI,IAAE,IAAI,GAAGA,GAAC;AAAE,IAAAA,IAAE,YAAU,IAAI,GAAG,CAAC;AAAA,EAAC;AAAC,SAAO,GAAGA,IAAE,UAAU,GAAG,GAAE,GAAG,MAAIA,IAAE,SAAS,GAAEA,IAAE;AAAS;AAAC,IAAI,IAAE,GAAG;AAAE,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAC,GAAED,KAAE,GAAE,EAAC;AAAE,SAAO,EAAE,UAAU,IAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,CAAC;AAAE,GAAG,IAAG,EAAC,WAAU,MAAI,IAAG,UAAS,MAAI,IAAG,cAAa,MAAI,GAAE,CAAC;AAAE,SAAS,KAAI;AAAC,SAAO,OAAO,aAAW,eAAa,aAAW;AAAI;AAAC,IAAI;AAAG,SAAS,GAAGD,KAAE;AAAC,OAAGA;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAG,OAAK,OAAO,QAAO;AAAG,MAAGA,OAAG,GAAG,GAAE;AAAC,QAAGA,QAAIA,MAAE,YAAWA,IAAE,YAAU,cAAc,QAAM;AAAG,QAAI,IAAEA,IAAE,aAAWA,IAAE,WAAS,OAAO,UAAQ,cAAY,OAAO,QAAM;AAAI,QAAG,CAAC,GAAE;AAAC,UAAIC,MAAED;AAAE,aAAOC,IAAE,iBAAeA,IAAE,cAAc;AAAA,IAAM;AAAC,WAAM,2TAA2T,KAAK,CAAC,KAAG,0kDAA0kD,KAAK,EAAE,OAAO,GAAE,CAAC,CAAC;AAAA,EAAC;AAAC,SAAM;AAAE;AAAC,SAAS,KAAI;AAAC,SAAO,OAAO,UAAQ,eAAa,OAAO,YAAU,QAAM,OAAO,qBAAmB;AAAW;AAAC,IAAI,KAAG,EAAE;AAAE,GAAG,aAAa,SAAQ,MAAI,OAAG,CAAAD,QAAG;AAAC,EAAAA,OAAG,QAAQ,KAAK,6IAA6I;AAAC,CAAC;AAAE,GAAG,aAAa,cAAa,MAAI,GAAG,CAAC;AAAE,GAAG,aAAa,WAAU,MAAI,OAAO,WAAS,eAAa,OAAO,QAAQ,YAAU,eAAa,OAAO,QAAQ,SAAS,QAAM,WAAW;AAAE,GAAG,aAAa,aAAY,MAAI,OAAO,aAAW,eAAa,aAAW,QAAM,UAAU,aAAW,QAAM,SAAS,KAAK,UAAU,SAAS,KAAG,aAAa,KAAK,UAAU,MAAM,CAAC;AAAE,GAAG,aAAa,aAAY,MAAI,OAAO,aAAW,eAAa,aAAW,QAAM,UAAU,aAAW,QAAM,SAAS,KAAK,UAAU,SAAS,KAAG,QAAQ,KAAK,UAAU,MAAM,CAAC;AAAE,GAAG,aAAa,QAAO,MAAI,KAAE;AAAE,GAAG,aAAa,sCAAqC,MAAI,GAAG,QAAQ,OAAO,CAAC;AAAE,GAAG,aAAa,gCAA+B,MAAI,IAAE;AAAE,GAAG,aAAa,WAAU,MAAI,KAAE;AAAE,GAAG,aAAa,gCAA+B,MAAI,GAAG,QAAQ,OAAO,CAAC;AAAE,GAAG,aAAa,uBAAsB,MAAI,KAAE;AAAE,GAAG,aAAa,yCAAwC,MAAI,KAAE;AAAE,GAAG,aAAa,wBAAuB,MAAI,KAAE;AAAE,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAIC,MAAED;AAAE,MAAG,GAAGA,GAAC,EAAE,QAAO,MAAI,WAAS,CAAC,IAAE,CAACA,IAAE,MAAM;AAAE,MAAG,GAAGA,GAAC,GAAE;AAAC,QAAI,IAAEA,IAAE,YAAU;AAAO,WAAM,CAACA,IAAE,QAAOA,IAAE,QAAM,EAAE,MAAM;AAAA,EAAC,WAAS,GAAGA,GAAC,EAAE,QAAM,CAACA,IAAE,OAAO,QAAM,KAAG,OAAK,IAAE,GAAG,CAAC,EAAE;AAAE,MAAG,CAAC,MAAM,QAAQA,GAAC,EAAE,QAAM,CAAC;AAAE,MAAI,IAAE,CAAC;AAAE,SAAK,MAAM,QAAQC,GAAC,KAAG,GAAGA,GAAC,KAAG,MAAI,WAAU,GAAE,KAAKA,IAAE,MAAM,GAAEA,MAAEA,IAAE,CAAC;AAAE,SAAO,MAAM,QAAQD,GAAC,KAAG,EAAE,EAAE,QAAQ,oCAAoC,KAAG,GAAGA,KAAE,GAAE,CAAC,CAAC,GAAE;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAGA,MAAEA,OAAG,CAAC,GAAE,CAAC,MAAM,QAAQD,GAAC,KAAG,CAAC,GAAGA,GAAC,GAAE;AAAC,MAAE,EAAE,WAAS,GAAE,MAAI,eAAeC,IAAE,KAAK,IAAI,CAAC,0DAA0D,EAAE,CAAC,CAAC,WAAW;AAAE;AAAA,EAAM;AAAC,IAAE,EAAE,SAAO,GAAE,MAAI,eAAeA,IAAE,KAAK,IAAI,CAAC,+CAA+CD,IAAE,MAAM,WAAW,GAAE,EAAEA,IAAE,WAAS,EAAE,CAAC,GAAE,MAAI,eAAeC,IAAE,KAAK,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC,sBAAsBD,IAAE,MAAM,WAAW;AAAE,MAAI,IAAE,EAAE,MAAM,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAEA,IAAE,QAAO,EAAE,EAAE,IAAGA,IAAE,CAAC,GAAE,GAAEC,IAAE,OAAO,CAAC,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE;AAAC,MAAGD,QAAI,qBAAoB;AAAC,QAAGA,OAAG,KAAK,OAAM,IAAI,MAAM,gCAAgC;AAAE,QAAGA,QAAI,aAAWA,QAAI,KAAGA,QAAI,aAAW,MAAI,SAAS,OAAM,IAAI,MAAM,aAAaC,GAAC,gBAAgB,CAAC,aAAaD,GAAC,oBAAoB,CAAC,SAAS;AAAA,EAAC;AAAC;AAAC,SAAS,EAAEA,KAAE,GAAEC,KAAE,IAAE,WAAU;AAAC,MAAGD,eAAa,GAAG,EAAE,QAAO,GAAG,GAAEA,IAAE,OAAM,GAAEC,GAAC,GAAED;AAAE,MAAI,IAAE,GAAGA,GAAC;AAAE,MAAG,MAAI,YAAU,CAAC,QAAO,SAAQ,SAAS,EAAE,QAAQ,CAAC,KAAG,MAAI,IAAE,IAAG,GAAG,GAAE,GAAE,GAAEC,GAAC,GAAED,OAAG,QAAM,CAAC,GAAGA,GAAC,KAAG,CAAC,MAAM,QAAQA,GAAC,KAAG,OAAOA,OAAG,YAAU,OAAOA,OAAG,aAAW,OAAOA,OAAG,UAAS;AAAC,QAAI,IAAEA,OAAG,OAAK,SAAOA,IAAE,YAAY;AAAK,UAAM,IAAI,MAAM,aAAa,CAAC,gBAAgBC,GAAC,8CAA8C,CAAC,GAAG;AAAA,EAAC;AAAC,MAAI,IAAE,GAAGD,KAAE,CAAC;AAAE,GAAC,GAAGA,GAAC,KAAG,CAAC,MAAM,QAAQA,GAAC,MAAIA,MAAE,CAACA,GAAC;AAAG,MAAI,IAAE,MAAI,WAAS,GAAGA,KAAE,CAAC,IAAE,GAAGA,KAAE,CAAC,GAAE,IAAE;AAAE,SAAO,EAAE,WAAW,GAAE,GAAE,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,IAAE,WAAU;AAAC,MAAG,CAAC,MAAM,QAAQD,GAAC,EAAE,OAAM,IAAI,MAAM,YAAY,CAAC,cAAcC,GAAC,6CAA6C;AAAE,SAAOD,IAAE,IAAI,CAAC,GAAE,MAAI,EAAE,GAAE,GAAG,CAAC,IAAI,CAAC,KAAIC,KAAE,CAAC,CAAC;AAAC;AAAC,IAAI,KAAG;AAAO,SAAS,EAAED,KAAE;AAAC,MAAI,IAAE,OAAO,KAAKA,GAAC;AAAE,MAAG,EAAE,WAAS,EAAE,OAAM,IAAI,MAAM,yGAAyG,EAAE,MAAM,QAAQ;AAAE,MAAIC,MAAE,EAAE,CAAC,GAAE,IAAED,IAAEC,GAAC;AAAE,EAAAA,IAAE,SAAS,GAAG,MAAIA,MAAEA,IAAE,UAAU,GAAEA,IAAE,SAAO,CAAC,IAAGA,MAAEA,MAAE;AAAG,MAAI,IAAE,IAAI,MAAI;AAAC,MAAE,WAAWA,GAAC;AAAE,QAAG;AAAC,UAAI,IAAE,EAAE,GAAG,CAAC;AAAE,aAAO,GAAG,CAAC,KAAG,QAAQ,MAAM,yCAAyC,GAAE,EAAE,SAAS,CAAC,GAAE;AAAA,IAAC,SAAO,GAAE;AAAC,YAAM,EAAE,SAAS,IAAI,GAAE;AAAA,IAAC;AAAA,EAAC;AAAE,SAAO,OAAO,eAAe,GAAE,QAAO,EAAC,OAAMA,KAAE,cAAa,KAAE,CAAC,GAAE;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAED,KAAE,QAAO,SAAS,GAAE,IAAE,EAAE,GAAE,QAAO,SAAS;AAAE,KAAGC,IAAE,OAAM,EAAE,OAAM,yBAAyBA,IAAE,KAAK,QAAQ,EAAE,KAAK,uCAAuC;AAAE,MAAI,IAAE,EAAC,MAAKA,KAAE,MAAK,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,UAAS,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE;AAAC,MAAG,KAAG,KAAK,KAAE,GAAGD,GAAC;AAAA,WAAU,MAAI,YAAY,OAAM,IAAI,MAAM,kFAAkF;AAAE,MAAG,GAAGA,GAAC,KAAG,GAAGA,GAAC,GAAE;AAAC,QAAG,MAAI,aAAW,MAAI,QAAQ,OAAM,IAAI,MAAM,2FAA2F,CAAC,GAAG;AAAE,WAAO,EAAE,QAAQ,wBAAwBA,KAAE,KAAGC,KAAE,CAAC;AAAA,EAAC;AAAC,MAAG,CAAC,GAAGD,GAAC,KAAG,CAAC,MAAM,QAAQA,GAAC,KAAG,OAAOA,OAAG,YAAU,OAAOA,OAAG,aAAW,OAAOA,OAAG,SAAS,OAAM,IAAI,MAAM,0HAA0H;AAAE,MAAG,KAAG,MAAK;AAAC,OAAG,CAAC;AAAE,QAAI,IAAE,GAAG,CAAC,GAAE,IAAE,GAAGC,GAAC;AAAE,MAAE,MAAI,GAAE,MAAI,iCAAiC,CAAC,6BAA6B,CAAC,mBAAmB,CAAC,EAAE;AAAE,aAAQ,IAAE,GAAE,IAAEA,IAAE,QAAO,EAAE,GAAE;AAAC,UAAI,IAAEA,IAAE,CAAC,GAAE,IAAE,MAAIA,IAAE,SAAO,IAAE,MAAI,GAAG,EAAE,MAAM,CAAC,CAAC,IAAE;AAAG,QAAEA,IAAE,CAAC,MAAI,EAAE,CAAC,KAAG,CAAC,GAAE,MAAI,gDAAgDA,GAAC,wCAAwC,CAAC,KAAK;AAAA,IAAC;AAAA,EAAC;AAAC,SAAM,CAAC,GAAGD,GAAC,KAAG,CAAC,MAAM,QAAQA,GAAC,MAAIA,MAAE,CAACA,GAAC,IAAG,IAAE,KAAGC,KAAED,MAAE,MAAI,WAAS,GAAGA,KAAE,CAAC,IAAE,GAAGA,KAAE,CAAC,GAAE,IAAE,GAAE,EAAE,WAAWA,KAAE,GAAE,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,GAAGD,KAAEC,GAAC;AAAE,SAAO,GAAGD,KAAE,GAAE,GAAEC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAC,SAAQ,GAAE,SAAQ,GAAE,OAAM,GAAE,QAAO,GAAE,OAAM,GAAE,MAAK,GAAE,WAAU,EAAC;AAAE,IAAI,KAAG,MAAMD,GAAC;AAAA,EAAC,OAAO,KAAK,GAAE;AAAC,WAAO,IAAIA,GAAE,CAAC,EAAE,MAAM;AAAA,EAAC;AAAA,EAAC,YAAY,GAAE;AAAC,QAAG,KAAK,SAAO,CAAC,GAAE,KAAK,qBAAmB,GAAE,KAAG,SAAO,aAAa,UAAQ,IAAE,CAAC,CAAC,IAAG,IAAE,EAAE,IAAI,OAAG,GAAG,CAAC,IAAE,EAAE,SAAO,CAAC,GAAE,EAAE,WAAS,GAAG;AAAO,SAAK,oBAAkB,EAAE,CAAC,EAAE;AAAW,QAAIC,MAAE;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,KAAI;AAAC,UAAI,IAAE,EAAE,CAAC;AAAE,YAAI,EAAE,SAAO,KAAG,EAAE,eAAa,KAAK,sBAAoB,KAAK,oBAAkB;AAAQ,UAAI,IAAEA,MAAE,EAAE;AAAW,WAAK,OAAO,KAAK,EAAC,QAAO,GAAE,OAAMA,KAAE,KAAI,EAAC,CAAC,GAAEA,MAAE;AAAA,IAAC;AAAC,SAAK,OAAO,WAAS,MAAI,KAAK,aAAW,IAAG,KAAK,aAAW,KAAK,OAAO,KAAK,OAAO,SAAO,CAAC,EAAE;AAAA,EAAG;AAAA,EAAC,MAAM,IAAE,GAAEA,MAAE,KAAK,YAAW;AAAC,QAAG,KAAK,OAAO,WAAS,EAAE,QAAO,IAAI,YAAY,CAAC;AAAE,QAAG,IAAE,MAAM,OAAO,CAAC,CAAC,IAAE,IAAE,GAAEA,MAAE,MAAM,OAAOA,GAAC,CAAC,IAAE,IAAEA,KAAE,IAAE,KAAK,IAAI,GAAE,CAAC,GAAEA,MAAE,KAAK,IAAI,KAAK,YAAWA,GAAC,GAAEA,OAAG,EAAE,QAAO,IAAI,YAAY,CAAC;AAAE,QAAI,IAAE,KAAK,iBAAiB,CAAC;AAAE,QAAG,MAAI,GAAG,OAAM,IAAI,MAAM,uCAAuC,CAAC,EAAE;AAAE,QAAI,IAAEA,MAAE,GAAE,IAAE,IAAI,YAAY,CAAC,GAAE,IAAE,IAAI,WAAW,CAAC,GAAE,IAAE;AAAE,aAAQ,IAAE,GAAE,IAAE,KAAK,OAAO,QAAO,KAAI;AAAC,UAAI,IAAE,KAAK,OAAO,CAAC,GAAE,IAAE,IAAE,IAAE,EAAE,OAAM,IAAE,GAAE,IAAE,KAAK,IAAIA,KAAE,EAAE,GAAG,IAAE,EAAE,OAAM,IAAE,IAAI,WAAW,EAAE,QAAO,GAAE,IAAE,CAAC;AAAE,UAAG,EAAE,IAAI,GAAE,CAAC,GAAE,KAAG,EAAE,QAAOA,MAAE,EAAE,IAAI;AAAA,IAAK;AAAC,WAAO;AAAA,EAAC;AAAA,EAAC,iBAAiB,GAAE;AAAC,QAAG,KAAK,OAAO,WAAS,KAAG,IAAE,KAAG,KAAG,KAAK,WAAW,QAAM;AAAG,QAAG,KAAK,qBAAmB,KAAK,QAAO,KAAK,qBAAmB,KAAK,MAAM,IAAE,KAAK,iBAAiB,GAAE,KAAK;AAAmB,aAASA,IAAE,GAAE;AAAC,aAAO,IAAE,EAAE,QAAM,KAAG,KAAG,EAAE,MAAI,IAAE;AAAA,IAAC;AAAC,QAAGA,IAAE,KAAK,OAAO,KAAK,kBAAkB,CAAC,MAAI,EAAE,QAAO,KAAK;AAAmB,QAAI,IAAE,GAAG,KAAK,QAAOA,GAAC;AAAE,WAAO,MAAI,KAAG,MAAI,KAAK,qBAAmB,GAAE,KAAK;AAAA,EAAmB;AAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,GAAE,IAAED,IAAE;AAAO,SAAKC,OAAG,KAAG;AAAC,QAAI,IAAE,KAAK,OAAO,IAAEA,OAAG,CAAC,IAAEA,KAAE,IAAE,EAAED,IAAE,CAAC,CAAC;AAAE,QAAG,MAAI,EAAE,QAAO;AAAE,QAAE,IAAE,IAAE,IAAEC,MAAE,IAAE;AAAA,EAAC;AAAC,SAAM;AAAE;AAAC,SAAS,MAAK;AAAC,IAAE,EAAE,IAAI,QAAO,IAAE;AAAC;AAAC,SAAS,MAAK;AAAC,IAAE,EAAE,IAAI,SAAQ,IAAE;AAAC;AAAC,SAAS,MAAK;AAAC,IAAE,EAAE,IAAI,gCAA+B,KAAE,GAAE,QAAQ,KAAK,wDAAwD;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,IAAE,EAAE,QAAQ,8BAA8B,KAAG,QAAQ,KAAKA,MAAE,6EAA6E;AAAC;AAAC,GAAG,EAAE;AAAE,SAAS,MAAK;AAAC,IAAE,iBAAiB;AAAC;AAAC,SAAS,KAAI;AAAC,SAAO;AAAC;AAAC,SAAS,MAAK;AAAC,SAAO,EAAE,OAAO;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,SAAO,EAAE,QAAQA,GAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,SAAO,EAAE,KAAKA,KAAE,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,KAAGA,GAAC,EAAE,QAAQ,CAAAC,QAAGA,IAAE,QAAQ,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,SAAO,EAAE,KAAKA,GAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,SAAO,EAAE,KAAKA,GAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,SAAO,EAAE,WAAWA,GAAC;AAAC;AAAC,SAAS,MAAK;AAAC,SAAO,EAAE,MAAM;AAAC;AAAC,SAAS,KAAI;AAAC,SAAO,EAAE;AAAW;AAAC,SAAS,IAAIA,KAAE;AAAC,IAAE,cAAcA,GAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,SAAO,EAAE,YAAYA,GAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,SAAO,EAAE,mBAAmBA,GAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,MAAE,GAAE;AAAC,SAAO,EAAE,gBAAgBD,KAAE,GAAEC,GAAC;AAAC;AAAC,SAAS,KAAI;AAAC,SAAO,EAAE;AAAO;AAAC,SAAS,IAAID,KAAE,GAAE;AAAC,IAAE,EAAE,YAAYA,KAAE,CAAC;AAAC;AAAC,IAAI,KAAG;AAAE,eAAe,GAAGA,KAAE,GAAE;AAAC,MAAIC,MAAE,CAAC,GAAE,IAAE,CAAC,GAAE,IAAE,MAAM,QAAQD,GAAC,IAAEA,IAAE,IAAI,OAAG,EAAE,IAAI,IAAE,OAAO,KAAKA,GAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE,GAAE;AAAC,QAAI,IAAE,EAAE,CAAC,GAAE,IAAE,MAAM,QAAQA,GAAC,IAAEA,IAAE,CAAC,EAAE,SAAOA,IAAE,CAAC;AAAE,QAAG,EAAE,UAAQ,aAAW,EAAE,UAAQ,WAAS,EAAE,UAAQ,UAAQ,EAAE,UAAQ,YAAU,EAAE,UAAQ,YAAY,OAAM,IAAI,MAAM,gCAAgC,CAAC,MAAM,EAAE,KAAK,EAAE;AAAE,QAAI,IAAE,EAAC,MAAK,GAAE,OAAM,EAAE,OAAM,OAAM,EAAE,MAAK;AAAE,QAAG,EAAE,UAAQ,UAAS;AAAC,UAAI,IAAE,IAAI,QAAQ,OAAM,MAAG;AAAC,YAAI,IAAE,MAAM,EAAE,MAAM,GAAE,IAAE,EAAE,OAAO,CAAC,GAAE,MAAI,IAAE,EAAE,QAAO,CAAC,IAAE,KAAG,EAAE,QAAO,IAAE,IAAI,WAAW,CAAC,GAAE,IAAE;AAAE,iBAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,KAAI;AAAC,cAAI,IAAE,EAAE,CAAC,GAAE,IAAE,IAAI,WAAW,IAAI,YAAY,CAAC,EAAE,MAAM,CAAC,EAAE,MAAM;AAAE,YAAE,IAAI,GAAE,CAAC,GAAE,KAAG,IAAG,EAAE,IAAI,GAAE,CAAC,GAAE,KAAG,EAAE;AAAA,QAAM;AAAC,UAAE,CAAC;AAAA,MAAC,CAAC;AAAE,QAAE,KAAK,CAAC;AAAA,IAAC,MAAM,GAAE,KAAK,EAAE,KAAK,CAAC;AAAE,SAAG,SAAO,EAAE,QAAM,IAAGC,IAAE,KAAK,CAAC;AAAA,EAAC;AAAC,MAAI,IAAE,MAAM,QAAQ,IAAI,CAAC;AAAE,SAAM,EAAC,MAAK,GAAG,CAAC,GAAE,OAAMA,IAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,IAAI,GAAGD,GAAC,GAAE,IAAE,CAAC,GAAE,IAAE;AAAE,WAAQ,KAAK,GAAE;AAAC,QAAI,IAAE,GAAG,GAAE,CAAC,GAAE,MAAIC,IAAE,MAAM,IAAE,GAAE,IAAE,CAAC,CAAC;AAAE,MAAE,EAAE,IAAI,IAAE,GAAG,GAAEA,IAAE,MAAM,GAAE,IAAE,CAAC,CAAC,GAAE,KAAG;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,GAAGD,IAAE,KAAK,GAAE;AAAE,MAAG,kBAAiBA,KAAE;AAAC,QAAI,IAAEA,IAAE;AAAa,QAAE,GAAG,EAAE,KAAK;AAAA,EAAC,WAASA,IAAE,UAAQ,UAAS;AAAC,QAAI,IAAE;AAAE,aAAQ,IAAE,GAAE,IAAEC,KAAE,IAAI,MAAG,KAAG,IAAI,YAAY,EAAE,GAAE,IAAE,EAAE,CAAC,EAAE,CAAC;AAAE,WAAO;AAAA,EAAC,MAAM,KAAE,GAAGD,IAAE,KAAK;AAAE,SAAOC,MAAE;AAAC;AAAC,eAAe,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,GAAGD,IAAE,KAAK,GAAE;AAAE,MAAG,kBAAiBA,KAAE;AAAC,QAAI,IAAEA,IAAE;AAAa,QAAE,GAAG,EAAE,KAAK;AAAA,EAAC,WAASA,IAAE,UAAQ,UAAS;AAAC,QAAI,IAAE;AAAE,aAAQ,IAAE,GAAE,IAAEC,KAAE,IAAI,MAAG,KAAG,IAAI,YAAY,MAAM,EAAE,GAAE,IAAE,EAAE,CAAC,EAAE,CAAC;AAAE,WAAO;AAAA,EAAC,MAAM,KAAE,GAAGD,IAAE,KAAK;AAAE,SAAOC,MAAE;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAED,IAAE,MAAK,IAAEA,IAAE,OAAM,IAAEA,IAAE,OAAM,IAAE,GAAG,CAAC,GAAE,GAAE,IAAE;AAAE,MAAG,kBAAiBA,KAAE;AAAC,QAAI,IAAEA,IAAE;AAAa,QAAG,EAAE,UAAQ,WAAS,EAAE,UAAQ,UAAS;AAAC,UAAG,EAAE,SAAQ,KAAG,WAAU,GAAG,OAAM,IAAI,MAAM,UAAUA,IAAE,IAAI,sBAAsB,EAAE,KAAK,qDAAqD;AAAA,IAAC,WAAS,EAAE,UAAQ,WAAU;AAAC,UAAG,MAAI,UAAU,OAAM,IAAI,MAAM,UAAUA,IAAE,IAAI,sBAAsB,EAAE,KAAK,oDAAoD,CAAC,GAAG;AAAA,IAAC,MAAM,OAAM,IAAI,MAAM,UAAUA,IAAE,IAAI,mCAAmC,EAAE,KAAK,wEAAwE;AAAE,QAAI,IAAE,GAAG,EAAE,KAAK,GAAE,IAAE,EAAE,UAAQ,UAAQ,IAAI,WAAW,CAAC,IAAE,IAAI,YAAY,CAAC;AAAE,QAAG,MAAI,UAAU,KAAG,EAAE,UAAQ,WAAS,EAAE,UAAQ,UAAS;AAAC,UAAE,IAAI,aAAa,EAAE,MAAM;AAAE,eAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,KAAI;AAAC,YAAI,IAAE,EAAE,CAAC;AAAE,UAAE,CAAC,IAAE,IAAE,EAAE,QAAM,EAAE;AAAA,MAAG;AAAA,IAAC,WAAS,EAAE,UAAQ,UAAU,KAAE,GAAG,EAAE,CAAC;AAAA,QAAO,OAAM,IAAI,MAAM,iCAAiC,EAAE,KAAK,2BAA2B;AAAA,aAAU,MAAI,SAAQ;AAAC,UAAG,EAAE,UAAQ,WAAS,EAAE,UAAQ,SAAS,OAAM,IAAI,MAAM,iCAAiC,EAAE,KAAK,yBAAyB;AAAE,UAAE,IAAI,WAAW,EAAE,MAAM;AAAE,eAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,KAAI;AAAC,YAAI,IAAE,EAAE,CAAC;AAAE,UAAE,CAAC,IAAE,KAAK,MAAM,IAAE,EAAE,QAAM,EAAE,GAAG;AAAA,MAAC;AAAA,IAAC,MAAM,OAAM,IAAI,MAAM,gCAAgCC,GAAC,MAAM,CAAC,EAAE;AAAE,SAAG,IAAE;AAAA,EAAC,WAAS,MAAI,UAAS;AAAC,QAAI,IAAE,GAAGD,IAAE,KAAK;AAAE,QAAE,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,UAAI,IAAE,IAAI,YAAY,EAAE,MAAM,GAAE,IAAE,EAAE,CAAC,EAAE,CAAC;AAAE,WAAG;AAAG,UAAI,IAAE,IAAI,WAAW,EAAE,MAAM,GAAE,IAAE,CAAC,CAAC;AAAE,QAAE,KAAK,CAAC,GAAE,KAAG;AAAA,IAAC;AAAA,EAAC,OAAK;AAAC,QAAI,IAAE,GAAG,CAAC;AAAE,QAAG,MAAI,UAAU,KAAE,IAAI,aAAa,CAAC;AAAA,aAAU,MAAI,QAAQ,KAAE,IAAI,WAAW,CAAC;AAAA,aAAU,MAAI,OAAO,KAAE,IAAI,WAAW,CAAC;AAAA,aAAU,MAAI,aAAY;AAAC,UAAE,IAAI,aAAa,CAAC;AAAE,UAAI,IAAE,IAAI,aAAa,EAAE,SAAO,CAAC,GAAE,IAAE,IAAI,aAAa,EAAE,SAAO,CAAC;AAAE,eAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,IAAI,GAAE,CAAC,IAAE,EAAE,IAAE,CAAC,GAAE,EAAE,CAAC,IAAE,EAAE,IAAE,IAAE,CAAC;AAAE,UAAI,IAAE,GAAG,GAAE,GAAE,SAAS,GAAE,IAAE,GAAG,GAAE,GAAE,SAAS,GAAE,IAAE,GAAG,GAAE,CAAC;AAAE,aAAO,EAAE,QAAQ,GAAE,EAAE,QAAQ,GAAE;AAAA,IAAC,MAAM,OAAM,IAAI,MAAM,gCAAgCC,GAAC,MAAM,CAAC,EAAE;AAAE,SAAG,IAAE;AAAA,EAAC;AAAC,SAAO,GAAG,GAAE,GAAE,CAAC;AAAC;AAAC,eAAe,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,IAAI,WAAW,CAAC;AAAE,SAAK,EAAE,aAAWA,OAAG;AAAC,QAAG,EAAC,MAAK,GAAE,OAAM,EAAC,IAAE,MAAMD,IAAE,KAAK;AAAE,QAAG,KAAG,KAAG,MAAK;AAAC,UAAI,IAAEC,MAAE,EAAE;AAAW,YAAM,IAAI,MAAM,sBAAsB,CAAC,2BAA2B;AAAA,IAAC;AAAC,QAAI,IAAE,IAAI,WAAW,EAAE,SAAO,EAAE,UAAU;AAAE,MAAE,IAAI,GAAE,CAAC,GAAE,EAAE,IAAI,IAAI,WAAW,CAAC,GAAE,EAAE,MAAM,GAAE,IAAE;AAAA,EAAC;AAAC,SAAO,EAAE;AAAM;AAAC,eAAe,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,CAAC,GAAE,IAAED,IAAE,UAAU,GAAE,IAAE,IAAI,YAAY,CAAC;AAAE,WAAQ,KAAK,GAAE;AAAC,QAAI,IAAE,MAAM,GAAG,GAAE,OAAM,GAAE,OAAK,IAAE,MAAM,GAAG,GAAE,GAAE,CAAC,GAAE,EAAE,MAAM,GAAE,CAAC,EAAE;AAAE,QAAE,MAAM,GAAG,GAAE,GAAE,CAAC;AAAE,QAAI,IAAE,EAAE,MAAM,GAAE,CAAC;AAAE,QAAE,EAAE,MAAM,CAAC;AAAE,QAAI,IAAE,GAAG,GAAE,CAAC;AAAE,QAAGC,IAAE,EAAE,IAAI,IAAE,GAAE,GAAG,MAAI,UAAS;AAAC,UAAI,IAAE,GAAG;AAAE,uBAAgB,KAAG,GAAG,EAAE,KAAK,KAAG,EAAE,EAAE,IAAI,mCAAmC,KAAG,EAAE,YAAY,EAAE,MAAM;AAAA,IAAC;AAAA,EAAC;AAAC,SAAOA;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAGA,QAAI,KAAK,OAAM,IAAI,MAAM,wBAAwB,KAAK,UAAUA,GAAC,CAAC,EAAE;AAAE,MAAI,IAAE,GAAEC,MAAE,CAAC;AAAE,EAAAD,IAAE,QAAQ,OAAG;AAAC,QAAG,KAAG,EAAE,YAAWC,IAAE,KAAK,EAAE,eAAa,EAAE,OAAO,aAAW,IAAE,IAAI,EAAE,YAAY,CAAC,CAAC,GAAE,EAAE,aAAa,gBAAc,aAAa,cAAY,aAAa,YAAY,OAAM,IAAI,MAAM,mCAAmC,EAAE,YAAY,IAAI,EAAE;AAAA,EAAC,CAAC;AAAE,MAAI,IAAE,IAAI,WAAW,CAAC,GAAE,IAAE;AAAE,SAAOA,IAAE,QAAQ,OAAG;AAAC,MAAE,IAAI,IAAI,WAAW,EAAE,MAAM,GAAE,CAAC,GAAE,KAAG,EAAE;AAAA,EAAU,CAAC,GAAE,EAAE;AAAM;AAAC,IAAI,KAAG,OAAO,UAAQ,gBAAc,OAAO,QAAM,eAAa,OAAO,QAAM,eAAa,OAAO,QAAM;AAAa,SAAS,GAAGD,KAAE;AAAC,SAAO,KAAG,OAAO,WAAWA,KAAE,MAAM,IAAE,IAAI,KAAK,CAACA,GAAC,CAAC,EAAE;AAAI;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAG,GAAG,QAAO,OAAO,KAAKA,GAAC,EAAE,SAAS,QAAQ;AAAE,MAAI,IAAE,IAAI,WAAWA,GAAC,GAAEC,MAAE;AAAG,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,IAAE,GAAE,IAAI,CAAAA,OAAG,OAAO,aAAa,EAAE,CAAC,CAAC;AAAE,SAAO,KAAKA,GAAC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAG,IAAG;AAAC,QAAI,IAAE,OAAO,KAAKA,KAAE,QAAQ;AAAE,WAAO,EAAE,OAAO,MAAM,EAAE,YAAW,EAAE,aAAW,EAAE,UAAU;AAAA,EAAC;AAAC,MAAI,IAAE,KAAKA,GAAC,GAAEC,MAAE,IAAI,WAAW,EAAE,MAAM;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE,EAAE,CAAAA,IAAE,IAAI,CAAC,EAAE,WAAW,CAAC,CAAC,GAAE,CAAC;AAAE,SAAOA,IAAE;AAAM;AAAC,SAAS,GAAGD,KAAE;AAAC,SAAO,GAAG,KAAKA,GAAC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAI,IAAE;AAAI,OAAIA,MAAEA,IAAE,KAAK,GAAEA,IAAE,SAAS,CAAC,IAAG,CAAAA,MAAEA,IAAE,MAAM,GAAEA,IAAE,SAAO,CAAC;AAAE,MAAIC,MAAED,IAAE,MAAM,CAAC;AAAE,SAAOC,IAAEA,IAAE,SAAO,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAC,eAAcD,IAAE,eAAc,QAAOA,IAAE,QAAO,aAAYA,IAAE,aAAY,aAAYA,IAAE,aAAY,iBAAgB,EAAC;AAAE,SAAOA,IAAE,aAAW,SAAOC,IAAE,YAAUD,IAAE,YAAWA,IAAE,uBAAqB,SAAOC,IAAE,sBAAoBD,IAAE,sBAAqBA,IAAE,oBAAkB,SAAOC,IAAE,mBAAiBD,IAAE,mBAAkBA,IAAE,wBAAsB,SAAOC,IAAE,uBAAqBD,IAAE,uBAAsBA,IAAE,kBAAgB,SAAOC,IAAE,iBAAeD,IAAE,iBAAgBC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,EAAC,eAAcD,IAAE,eAAc,QAAOA,IAAE,QAAO,aAAYA,IAAE,aAAY,aAAYA,IAAE,YAAW;AAAE,MAAGA,IAAE,kBAAgB,SAAO,EAAE,iBAAeA,IAAE,iBAAgBA,IAAE,mBAAiB,MAAK;AAAC,QAAG,CAAC,EAAE,OAAM,IAAI,MAAM,uDAAuD;AAAE,QAAG,CAACC,IAAE,OAAM,IAAI,MAAM,sDAAsD;AAAE,MAAE,cAAY,GAAE,EAAE,aAAWA;AAAA,EAAC;AAAC,SAAOD,IAAE,aAAW,SAAO,EAAE,YAAUA,IAAE,YAAWA,IAAE,uBAAqB,SAAO,EAAE,sBAAoBA,IAAE,sBAAqBA,IAAE,oBAAkB,SAAO,EAAE,mBAAiBA,IAAE,mBAAkBA,IAAE,wBAAsB,SAAO,EAAE,uBAAqBA,IAAE,uBAAsB;AAAC;AAAC,eAAe,GAAGA,KAAE,GAAE;AAAC,MAAIC,KAAE;AAAE,SAAOD,IAAE,mBAAiB,SAAO,CAACC,KAAE,CAAC,IAAE,MAAM,EAAED,IAAE,eAAe,IAAG,GAAGA,KAAEC,KAAE,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAGA,IAAE,yBAAyB,YAAY,OAAM,IAAI,MAAM,qDAAqD;AAAE,SAAM,EAAC,WAAU,oBAAI,QAAK,mBAAkB,QAAO,oBAAmBA,IAAE,iBAAe,OAAK,IAAE,GAAG,KAAK,UAAUA,IAAE,aAAa,CAAC,GAAE,kBAAiBA,IAAE,eAAa,OAAK,IAAE,GAAG,KAAK,UAAUA,IAAE,WAAW,CAAC,GAAE,iBAAgBA,IAAE,cAAY,OAAK,IAAE,IAAI,GAAGA,IAAE,UAAU,EAAE,WAAU;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAI,IAAE,CAAC;AAAE,WAAQC,OAAKD,IAAE,GAAE,KAAK,GAAGC,IAAE,OAAO;AAAE,SAAO;AAAC;AAAC,SAAS,KAAI;AAAC,MAAID,MAAE,CAAAC,QAAG;AAAC,QAAI,IAAEA,OAAG,IAAG,IAAE;AAAE,WAAK,EAAE,IAAE,WAAU,MAAG,SAAQ,MAAI;AAAE,WAAO,KAAG,UAAS,KAAG,WAAU,IAAE;AAAA,EAAC,GAAE,IAAE,IAAI,YAAY,IAAI;AAAE,IAAE,CAAC,IAAE;AAAE,WAAQA,MAAE,GAAEA,MAAE,MAAKA,MAAI,GAAEA,GAAC,IAAED,IAAEC,GAAC;AAAE,WAAQA,MAAE,MAAKA,MAAE,MAAKA,MAAI,GAAEA,GAAC,IAAE,aAAWA,MAAE,QAAM;AAAI,SAAO;AAAC;AAAC,SAAS,KAAI;AAAC,MAAID,MAAE,IAAI,YAAY,EAAE;AAAE,EAAAA,IAAE,CAAC,IAAE,GAAEA,IAAE,EAAE,IAAE,YAAWA,IAAE,EAAE,IAAE,YAAWA,IAAE,EAAE,IAAE;AAAW,WAAQ,IAAE,GAAE,IAAE,IAAG,IAAI,CAAAA,IAAE,CAAC,IAAE,KAAG;AAAG,WAAQ,IAAE,IAAG,IAAE,IAAG,IAAI,CAAAA,IAAE,CAAC,IAAE,cAAY,IAAE,MAAI;AAAI,SAAOA;AAAC;AAAC,SAAS,KAAI;AAAC,MAAIA,MAAE,IAAI,YAAY,EAAE;AAAE,WAAQ,IAAE,GAAE,IAAE,IAAG,IAAI,CAAAA,IAAE,CAAC,IAAE;AAAK,SAAOA,IAAE,CAAC,IAAEA,IAAE,EAAE,IAAE,GAAEA;AAAC;AAAC,SAAS,KAAI;AAAC,MAAIA,MAAE,GAAG,GAAE,IAAE,GAAG,GAAEC,MAAE,GAAG;AAAE,SAAO,OAAG;AAAC,QAAI,IAAE,IAAI,YAAY,IAAE,EAAE,MAAM,GAAE,IAAE,IAAI,YAAY,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,KAAI;AAAC,UAAI,IAAE,EAAE,CAAC,GAAE,IAAED,IAAEC,IAAE,KAAG,EAAE,KAAG,IAAE,KAAK,IAAE,EAAE,KAAG,EAAE;AAAE,QAAE,CAAC,IAAE;AAAA,IAAC;AAAC,WAAO,IAAI,aAAa,CAAC;AAAA,EAAC;AAAC;AAAC,IAAI,KAAG,MAAMD,GAAC;AAAA,EAAC,cAAa;AAAC,SAAK,cAAY,CAAC,GAAE,KAAK,cAAY,CAAC;AAAA,EAAC;AAAA,EAAC,OAAO,cAAa;AAAC,WAAOA,GAAE,YAAU,SAAOA,GAAE,WAAS,IAAIA,OAAGA,GAAE;AAAA,EAAQ;AAAA,EAAC,OAAO,mBAAmB,GAAE;AAAC,IAAAA,GAAE,YAAY,EAAE,YAAY,KAAK,CAAC;AAAA,EAAC;AAAA,EAAC,OAAO,mBAAmB,GAAE;AAAC,IAAAA,GAAE,YAAY,EAAE,YAAY,KAAK,CAAC;AAAA,EAAC;AAAA,EAAC,OAAO,gBAAgB,GAAE;AAAC,WAAOA,GAAE,YAAY,GAAE,MAAM;AAAA,EAAC;AAAA,EAAC,OAAO,gBAAgB,GAAEC,KAAE;AAAC,WAAOD,GAAE,YAAY,GAAE,QAAOC,GAAC;AAAA,EAAC;AAAA,EAAC,OAAO,YAAY,GAAEA,KAAE,GAAE;AAAC,QAAI,IAAE,CAAC;AAAE,YAAOA,QAAI,SAAOD,GAAE,YAAY,EAAE,cAAYA,GAAE,YAAY,EAAE,aAAa,QAAQ,OAAG;AAAC,UAAI,IAAE,EAAE,GAAE,CAAC;AAAE,YAAI,QAAM,EAAE,KAAK,CAAC;AAAA,IAAC,CAAC,GAAE;AAAA,EAAC;AAAC;AAAxiB,IAA0iB,KAAG,CAAAA,QAAG,GAAG,mBAAmBA,GAAC;AAAvkB,IAAykB,KAAG,CAAAA,QAAG,GAAG,mBAAmBA,GAAC;AAAtmB,IAAwmB,KAAG,CAAAA,QAAG,GAAG,gBAAgBA,GAAC;AAAloB,IAAooB,KAAG,CAACA,KAAE,MAAI,GAAG,gBAAgBA,KAAE,CAAC;AAAE,IAAI,KAAG;AAAP,IAAsB,KAAG;AAAzB,IAA2B,KAAG;AAA9B,IAA6C,KAAG;AAAmB,SAAS,KAAI;AAAC,MAAG,CAAC,EAAE,EAAE,QAAQ,YAAY,EAAE,OAAM,IAAI,MAAM,yFAAyF;AAAE,MAAIA,MAAE,OAAO,UAAQ,cAAY,OAAK,QAAO,IAAEA,IAAE,aAAWA,IAAE,gBAAcA,IAAE,mBAAiBA,IAAE,eAAaA,IAAE;AAAc,MAAG,KAAG,KAAK,OAAM,IAAI,MAAM,2DAA2D;AAAE,SAAO;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAI,IAAEA,IAAE;AAAO,IAAE,kBAAkB,IAAG,EAAC,SAAQ,YAAW,CAAC,GAAE,EAAE,kBAAkB,IAAG,EAAC,SAAQ,YAAW,CAAC;AAAC;AAAC,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,QAAG,KAAK,YAAU,GAAG,GAAE,KAAG,QAAM,CAAC,EAAE,OAAM,IAAI,MAAM,gEAAgE;AAAE,SAAK,YAAU;AAAA,EAAC;AAAA,EAAC,MAAM,KAAK,GAAE;AAAC,QAAG,EAAE,yBAAyB,YAAY,OAAM,IAAI,MAAM,0FAA0F;AAAE,WAAO,KAAK,eAAe,KAAK,WAAU,CAAC;AAAA,EAAC;AAAA,EAAC,MAAM,OAAM;AAAC,WAAO,KAAK,eAAe,KAAK,SAAS;AAAA,EAAC;AAAA,EAAC,eAAe,GAAEC,KAAE;AAAC,WAAO,IAAI,QAAQ,CAAC,GAAE,MAAI;AAAC,UAAI,IAAE,KAAK,UAAU,KAAK,IAAG,EAAE;AAAE,QAAE,kBAAgB,MAAI,GAAG,CAAC,GAAE,EAAE,YAAU,MAAI;AAAC,YAAI,IAAE,EAAE;AAAO,YAAGA,OAAG,MAAK;AAAC,cAAI,IAAE,EAAE,YAAY,IAAG,UAAU,GAAE,IAAE,EAAE,YAAY,EAAE,EAAE,IAAI,KAAK,SAAS;AAAE,YAAE,YAAU,MAAI;AAAC,gBAAG,EAAE,UAAQ,KAAK,QAAO,EAAE,MAAM,GAAE,EAAE,IAAI,MAAM,gCAAgC,KAAK,SAAS,iBAAiB,CAAC;AAAE,cAAE,EAAE,OAAO,cAAc;AAAA,UAAC,GAAE,EAAE,UAAQ,QAAI,EAAE,MAAM,GAAE,EAAE,EAAE,KAAK,IAAG,EAAE,aAAW,MAAI,EAAE,MAAM;AAAA,QAAC,OAAK;AAAC,UAAAA,IAAE,aAAW,GAAG,KAAKA,IAAE,UAAU;AAAE,cAAI,IAAE,GAAGA,GAAC,GAAE,IAAE,EAAE,YAAY,IAAG,WAAW,GAAE,IAAE,EAAE,YAAY,EAAE,GAAE;AAAE,cAAG;AAAC,gBAAE,EAAE,IAAI,EAAC,WAAU,KAAK,WAAU,oBAAmB,EAAC,CAAC;AAAA,UAAC,SAAO,GAAE;AAAC,mBAAO,EAAE,CAAC;AAAA,UAAC;AAAC,cAAI;AAAE,YAAE,YAAU,MAAI;AAAC,gBAAE,EAAE,YAAY,IAAG,WAAW;AAAE,gBAAI,IAAE,EAAE,YAAY,EAAE,GAAE;AAAE,gBAAG;AAAC,kBAAE,EAAE,IAAI,EAAC,WAAU,KAAK,WAAU,gBAAeA,KAAE,oBAAmB,EAAC,CAAC;AAAA,YAAC,SAAO,GAAE;AAAC,qBAAO,EAAE,CAAC;AAAA,YAAC;AAAC,cAAE,YAAU,MAAI,EAAE,EAAC,oBAAmB,EAAC,CAAC,GAAE,EAAE,UAAQ,OAAG;AAAC,kBAAE,EAAE,YAAY,EAAE;AAAE,kBAAI,IAAE,EAAE,OAAO,KAAK,SAAS;AAAE,gBAAE,YAAU,OAAK,EAAE,MAAM,GAAE,EAAE,EAAE,KAAK,IAAG,EAAE,UAAQ,QAAI,EAAE,MAAM,GAAE,EAAE,EAAE,KAAK;AAAA,YAAE;AAAA,UAAC,GAAE,EAAE,UAAQ,QAAI,EAAE,MAAM,GAAE,EAAE,EAAE,KAAK,IAAG,EAAE,aAAW,MAAI;AAAC,iBAAG,OAAK,EAAE,MAAM,IAAE,EAAE,aAAW,MAAI,EAAE,MAAM;AAAA,UAAC;AAAA,QAAC;AAAA,MAAC,GAAE,EAAE,UAAQ,OAAG,EAAE,EAAE,KAAK;AAAA,IAAC,CAAC;AAAA,EAAC;AAAC;AAAE,GAAG,aAAW;AAAe,IAAI,KAAG,CAAAD,QAAG,EAAE,EAAE,QAAQ,YAAY,KAAG,CAAC,MAAM,QAAQA,GAAC,KAAGA,IAAE,WAAW,GAAG,UAAU,IAAE,GAAGA,IAAE,MAAM,GAAG,WAAW,MAAM,CAAC,IAAE;AAAK,GAAG,mBAAmB,EAAE;AAAE,GAAG,mBAAmB,EAAE;AAAE,SAAS,GAAGA,KAAE;AAAC,SAAO,IAAI,GAAGA,GAAC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAOA,IAAE,WAAW,GAAG,UAAU,IAAEA,IAAE,MAAM,GAAG,WAAW,MAAM,IAAEA;AAAC;AAAC,IAAI,KAAG,MAAK;AAAA,EAAC,cAAa;AAAC,SAAK,YAAU,GAAG;AAAA,EAAC;AAAA,EAAC,MAAM,aAAY;AAAC,WAAO,IAAI,QAAQ,CAAC,GAAEC,QAAI;AAAC,UAAI,IAAE,KAAK,UAAU,KAAK,IAAG,EAAE;AAAE,QAAE,kBAAgB,MAAI,GAAG,CAAC,GAAE,EAAE,YAAU,MAAI;AAAC,YAAI,IAAE,EAAE,QAAO,IAAE,EAAE,YAAY,IAAG,UAAU,GAAE,IAAE,EAAE,YAAY,EAAE,EAAE,OAAO;AAAE,UAAE,YAAU,MAAI;AAAC,cAAI,IAAE,CAAC;AAAE,mBAAQ,KAAK,EAAE,OAAO,GAAE,EAAE,SAAS,IAAE,EAAE;AAAmB,YAAE,CAAC;AAAA,QAAC,GAAE,EAAE,UAAQ,QAAI,EAAE,MAAM,GAAEA,IAAE,EAAE,KAAK,IAAG,EAAE,aAAW,MAAI,EAAE,MAAM;AAAA,MAAC,GAAE,EAAE,UAAQ,OAAGA,IAAE,EAAE,KAAK;AAAA,IAAC,CAAC;AAAA,EAAC;AAAA,EAAC,MAAM,YAAY,GAAE;AAAC,WAAO,IAAE,GAAG,CAAC,GAAE,IAAI,QAAQ,CAACA,KAAE,MAAI;AAAC,UAAI,IAAE,KAAK,UAAU,KAAK,IAAG,EAAE;AAAE,QAAE,kBAAgB,MAAI,GAAG,CAAC,GAAE,EAAE,YAAU,MAAI;AAAC,YAAI,IAAE,EAAE,QAAO,IAAE,EAAE,YAAY,IAAG,WAAW,GAAE,IAAE,EAAE,YAAY,EAAE,GAAE,IAAE,EAAE,IAAI,CAAC,GAAE;AAAE,UAAE,YAAU,MAAI;AAAC,cAAG,EAAE,UAAQ,KAAK,QAAO,EAAE,MAAM,GAAE,EAAE,IAAI,MAAM,gCAAgC,CAAC,iBAAiB,CAAC;AAAE;AAAC,gBAAI,IAAE,EAAE,OAAO,CAAC,GAAE,IAAE,MAAI;AAAC,kBAAE,EAAE,YAAY,IAAG,WAAW;AAAE,kBAAI,IAAE,EAAE,YAAY,EAAE,EAAE,OAAO,CAAC;AAAE,gBAAE,YAAU,MAAIA,IAAE,EAAE,OAAO,kBAAkB,GAAE,EAAE,UAAQ,OAAG,EAAE,EAAE,KAAK;AAAA,YAAC;AAAE,cAAE,YAAU,GAAE,EAAE,UAAQ,QAAI,EAAE,GAAE,EAAE,MAAM,GAAE,EAAE,EAAE,KAAK;AAAA,UAAE;AAAA,QAAC,GAAE,EAAE,UAAQ,QAAI,EAAE,MAAM,GAAE,EAAE,EAAE,KAAK,IAAG,EAAE,aAAW,MAAI;AAAC,eAAG,OAAK,EAAE,MAAM,IAAE,EAAE,aAAW,MAAI,EAAE,MAAM;AAAA,QAAC;AAAA,MAAC,GAAE,EAAE,UAAQ,OAAG,EAAE,EAAE,KAAK;AAAA,IAAC,CAAC;AAAA,EAAC;AAAC;AAAE,IAAI,KAAG;AAAP,IAAW,KAAG;AAAd,IAAoC,KAAG;AAAvC,IAA8C,KAAG;AAAjD,IAAkE,KAAG;AAArE,IAAoF,KAAG;AAAvF,IAAqG,KAAG;AAAiB,SAAS,GAAGD,KAAE;AAAC,SAAM,EAAC,MAAK,CAAC,IAAGA,KAAE,EAAE,EAAE,KAAK,EAAE,GAAE,UAAS,CAAC,IAAGA,KAAE,EAAE,EAAE,KAAK,EAAE,GAAE,aAAY,CAAC,IAAGA,KAAE,EAAE,EAAE,KAAK,EAAE,GAAE,YAAW,CAAC,IAAGA,KAAE,EAAE,EAAE,KAAK,EAAE,GAAE,eAAc,CAAC,IAAGA,KAAE,EAAE,EAAE,KAAK,EAAE,EAAC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,WAAQ,KAAK,OAAO,OAAOA,GAAC,EAAE,QAAO,aAAa,WAAW,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAI,IAAEA,IAAE,MAAM,EAAE;AAAE,MAAG,EAAE,SAAO,EAAE,OAAM,IAAI,MAAM,uBAAuBA,GAAC,EAAE;AAAE,SAAO,EAAE,MAAM,GAAE,EAAE,SAAO,CAAC,EAAE,KAAK,EAAE;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAOA,IAAE,WAAW,GAAG,UAAU,IAAEA,IAAE,MAAM,GAAG,WAAW,MAAM,IAAEA;AAAC;AAAC,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,QAAG,CAAC,EAAE,EAAE,QAAQ,YAAY,KAAG,OAAO,UAAQ,eAAa,OAAO,OAAO,gBAAc,YAAY,OAAM,IAAI,MAAM,yDAAyD;AAAE,QAAG,KAAK,KAAG,OAAO,cAAa,KAAG,QAAM,CAAC,EAAE,OAAM,IAAI,MAAM,oEAAoE;AAAE,SAAK,YAAU,GAAE,KAAK,OAAK,GAAG,KAAK,SAAS;AAAA,EAAC;AAAA,EAAC,MAAM,KAAK,GAAE;AAAC,QAAG,EAAE,yBAAyB,YAAY,OAAM,IAAI,MAAM,0FAA0F;AAAE;AAAC,UAAIC,MAAE,KAAK,UAAU,EAAE,aAAa,GAAE,IAAE,KAAK,UAAU,EAAE,WAAW,GAAE,IAAE,GAAG,CAAC,GAAE,IAAE,GAAG,KAAK,EAAE,UAAU;AAAE,UAAG;AAAC,aAAK,GAAG,QAAQ,KAAK,KAAK,MAAK,KAAK,UAAU,CAAC,CAAC,GAAE,KAAK,GAAG,QAAQ,KAAK,KAAK,UAASA,GAAC,GAAE,KAAK,GAAG,QAAQ,KAAK,KAAK,aAAY,CAAC,GAAE,KAAK,GAAG,QAAQ,KAAK,KAAK,YAAW,GAAG,CAAC,CAAC;AAAE,YAAI,IAAE,EAAC,QAAO,EAAE,QAAO,aAAY,EAAE,aAAY,aAAY,EAAE,aAAY,WAAU,EAAE,aAAW,OAAK,EAAE,YAAU,QAAO,qBAAoB,EAAE,uBAAqB,OAAK,EAAE,sBAAoB,QAAO,kBAAiB,EAAE,oBAAkB,OAAK,EAAE,mBAAiB,QAAO,sBAAqB,EAAE,wBAAsB,OAAK,EAAE,uBAAqB,QAAO,gBAAe,EAAE,kBAAgB,OAAK,EAAE,iBAAe,OAAM;AAAE,eAAO,KAAK,GAAG,QAAQ,KAAK,KAAK,eAAc,KAAK,UAAU,CAAC,CAAC,GAAE,EAAC,oBAAmB,EAAC;AAAA,MAAC,SAAO,GAAE;AAAC,cAAM,GAAG,KAAK,IAAI,GAAE,IAAI,MAAM,yBAAyB,KAAK,SAAS,yGAAyG,EAAE,kBAAkB,sBAAsB,EAAE,gBAAgB,qBAAqB,EAAE,eAAe,GAAG;AAAA,MAAC;AAAA,IAAC;AAAA,EAAC;AAAA,EAAC,MAAM,OAAM;AAAC,QAAI,IAAE,KAAK,MAAM,KAAK,GAAG,QAAQ,KAAK,KAAK,IAAI,CAAC;AAAE,QAAG,KAAG,KAAK,OAAM,IAAI,MAAM,kDAAkD,KAAK,SAAS,GAAG;AAAE,QAAG,EAAE,sBAAoB,OAAO,OAAM,IAAI,MAAM,2EAA2E;AAAE,QAAIA,MAAE,CAAC,GAAE,IAAE,KAAK,MAAM,KAAK,GAAG,QAAQ,KAAK,KAAK,QAAQ,CAAC;AAAE,QAAG,KAAG,KAAK,OAAM,IAAI,MAAM,4CAA4C,KAAK,SAAS,eAAe;AAAE,IAAAA,IAAE,gBAAc;AAAE,QAAI,IAAE,KAAK,MAAM,KAAK,GAAG,QAAQ,KAAK,KAAK,WAAW,CAAC;AAAE,QAAG,KAAG,KAAK,OAAM,IAAI,MAAM,gDAAgD,KAAK,SAAS,gBAAgB;AAAE,IAAAA,IAAE,cAAY;AAAE,QAAI,IAAE,KAAK,GAAG,QAAQ,KAAK,KAAK,aAAa;AAAE,QAAG,KAAG,MAAK;AAAC,UAAI,IAAE,KAAK,MAAM,CAAC;AAAE,MAAAA,IAAE,SAAO,EAAE,QAAOA,IAAE,cAAY,EAAE,aAAYA,IAAE,cAAY,EAAE,aAAY,EAAE,aAAW,SAAOA,IAAE,YAAU,EAAE,YAAW,EAAE,uBAAqB,SAAOA,IAAE,sBAAoB,EAAE,sBAAqB,EAAE,oBAAkB,SAAOA,IAAE,mBAAiB,EAAE,mBAAkB,EAAE,wBAAsB,SAAOA,IAAE,uBAAqB,EAAE,uBAAsB,EAAE,kBAAgB,SAAOA,IAAE,iBAAe,EAAE;AAAA,IAAe;AAAC,QAAI,IAAE,KAAK,GAAG,QAAQ,KAAK,KAAK,UAAU;AAAE,QAAG,KAAG,KAAK,OAAM,IAAI,MAAM,wDAAwD,KAAK,SAAS,gBAAgB;AAAE,WAAOA,IAAE,aAAW,GAAG,CAAC,GAAEA;AAAA,EAAC;AAAC;AAAE,GAAG,aAAW;AAAkB,IAAI,KAAG,CAAAD,QAAG,EAAE,EAAE,QAAQ,YAAY,KAAG,CAAC,MAAM,QAAQA,GAAC,KAAGA,IAAE,WAAW,GAAG,UAAU,IAAE,GAAGA,IAAE,MAAM,GAAG,WAAW,MAAM,CAAC,IAAE;AAAK,GAAG,mBAAmB,EAAE;AAAE,GAAG,mBAAmB,EAAE;AAAE,SAAS,GAAGA,KAAE;AAAC,SAAO,IAAI,GAAGA,GAAC;AAAC;AAAC,IAAI,KAAG,MAAK;AAAA,EAAC,cAAa;AAAC,MAAE,EAAE,EAAE,QAAQ,YAAY,GAAE,MAAI,0CAA0C,GAAE,EAAE,OAAO,UAAQ,eAAa,OAAO,OAAO,gBAAc,aAAY,MAAI,yDAAyD,GAAE,KAAK,KAAG,OAAO;AAAA,EAAY;AAAA,EAAC,MAAM,aAAY;AAAC,QAAI,IAAE,CAAC,GAAEC,MAAE,KAAG,IAAG,IAAE,KAAG;AAAG,aAAQ,IAAE,GAAE,IAAE,KAAK,GAAG,QAAO,EAAE,GAAE;AAAC,UAAI,IAAE,KAAK,GAAG,IAAI,CAAC;AAAE,UAAG,EAAE,WAAWA,GAAC,KAAG,EAAE,SAAS,CAAC,GAAE;AAAC,YAAI,IAAE,GAAG,CAAC;AAAE,UAAE,CAAC,IAAE,KAAK,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC;AAAA,MAAC;AAAA,IAAC;AAAC,WAAO;AAAA,EAAC;AAAA,EAAC,MAAM,YAAY,GAAE;AAAC,QAAE,GAAG,CAAC;AAAE,QAAIA,MAAE,GAAG,CAAC;AAAE,QAAG,KAAK,GAAG,QAAQA,IAAE,IAAI,KAAG,KAAK,OAAM,IAAI,MAAM,8BAA8B,CAAC,GAAG;AAAE,QAAI,IAAE,KAAK,MAAM,KAAK,GAAG,QAAQA,IAAE,IAAI,CAAC;AAAE,WAAO,GAAGA,GAAC,GAAE;AAAA,EAAC;AAAC;AAAE,IAAI,KAAG;AAAP,IAAa,KAAG,MAAMD,GAAC;AAAA,EAAC,cAAa;AAAC,SAAK,WAAS,CAAC;AAAA,EAAC;AAAA,EAAC,OAAO,cAAa;AAAC,WAAOA,GAAE,YAAU,SAAOA,GAAE,WAAS,IAAIA,OAAGA,GAAE;AAAA,EAAQ;AAAA,EAAC,OAAO,gBAAgB,GAAEC,KAAE;AAAC,MAAE,KAAG,MAAK,MAAI,uCAAuC,GAAE,EAAE,SAAS,EAAE,MAAI,IAAE,EAAE,MAAM,GAAE,EAAE,QAAQ,EAAE,CAAC,IAAG,EAAE,EAAE,SAAO,GAAE,MAAI,qCAAqC;AAAE,QAAI,IAAED,GAAE,YAAY;AAAE,MAAE,EAAE,SAAS,CAAC,KAAG,MAAK,MAAI,2DAA2D,CAAC,IAAI,GAAE,EAAE,SAAS,CAAC,IAAEC;AAAA,EAAC;AAAA,EAAC,OAAO,WAAW,GAAE;AAAC,QAAIA,MAAED,GAAE,YAAY,EAAE,SAAS,CAAC;AAAE,QAAGC,OAAG,KAAK,OAAM,IAAI,MAAM,yCAAyC,CAAC,GAAG;AAAE,WAAOA;AAAA,EAAC;AAAA,EAAC,OAAO,aAAY;AAAC,WAAO,OAAO,KAAKD,GAAE,YAAY,EAAE,QAAQ;AAAA,EAAC;AAAC;AAAE,SAAS,GAAGA,KAAE;AAAC,MAAGA,IAAE,QAAQ,EAAE,MAAI,GAAG,OAAM,IAAI,MAAM,6EAA6E,GAAG,WAAW,EAAE,KAAK,GAAG,CAAC,EAAE;AAAE,SAAM,EAAC,QAAOA,IAAE,MAAM,EAAE,EAAE,CAAC,GAAE,MAAKA,IAAE,MAAM,EAAE,EAAE,CAAC,EAAC;AAAC;AAAC,eAAe,GAAGA,KAAE,GAAEC,MAAE,OAAG;AAAC,IAAED,QAAI,GAAE,MAAI,wCAAwCA,GAAC,GAAG;AAAE,MAAI,IAAE,GAAG,gBAAgBA,GAAC;AAAE,IAAE,EAAE,SAAO,GAAE,MAAI,kEAAkEA,GAAC,GAAG,GAAE,EAAE,EAAE,SAAO,GAAE,MAAI,yCAAyC,EAAE,MAAM,kCAAkCA,GAAC,GAAG;AAAE,MAAI,IAAE,EAAE,CAAC,GAAE,IAAE,GAAG,gBAAgB,CAAC;AAAE,IAAE,EAAE,SAAO,GAAE,MAAI,uEAAuE,CAAC,GAAG,GAAE,EAAE,EAAE,SAAO,GAAE,MAAI,yCAAyC,EAAE,MAAM,uCAAuC,CAAC,GAAG;AAAE,MAAI,IAAE,EAAE,CAAC,GAAE,IAAE,GAAGA,GAAC,EAAE,QAAO,IAAE,GAAGA,GAAC,EAAE,MAAK,IAAE,MAAI,GAAGA,GAAC,EAAE,QAAO,IAAE,MAAM,EAAE,KAAK;AAAE,EAAAC,OAAG,KAAG,MAAM,GAAG,WAAW,CAAC,EAAE,YAAY,CAAC;AAAE,MAAI,IAAE,MAAM,EAAE,KAAK,CAAC;AAAE,SAAOA,OAAG,CAAC,KAAG,MAAM,GAAG,WAAW,CAAC,EAAE,YAAY,CAAC,GAAE,EAAE;AAAkB;AAAC,eAAe,KAAI;AAAC,MAAID,MAAE,GAAG,WAAW,GAAE,IAAE,CAAC;AAAE,WAAQC,OAAKD,KAAE;AAAC,QAAI,IAAE,MAAM,GAAG,WAAWC,GAAC,EAAE,WAAW;AAAE,aAAQ,KAAK,GAAE;AAAC,UAAI,IAAEA,MAAE,KAAG;AAAE,QAAE,CAAC,IAAE,EAAE,CAAC;AAAA,IAAC;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,eAAe,GAAGD,KAAE;AAAC,MAAI,IAAE,GAAGA,GAAC;AAAE,SAAO,GAAG,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI;AAAC;AAAC,eAAe,GAAGA,KAAE,GAAE;AAAC,SAAO,GAAGA,KAAE,GAAE,KAAE;AAAC;AAAC,eAAe,GAAGA,KAAE,GAAE;AAAC,SAAO,GAAGA,KAAE,GAAE,IAAE;AAAC;AAAC,IAAI,KAAG,MAAK;AAAA,EAAC,cAAa;AAAC,SAAK,cAAY,oBAAmB,KAAK,eAAa,CAAC,GAAE,KAAK,sBAAoB,GAAE,KAAK,mBAAiB;AAAA,EAAE;AAAA,EAAC,MAAM,GAAEC,KAAE;AAAC,WAAO,MAAM,GAAEA,GAAC;AAAA,EAAC;AAAA,EAAC,MAAK;AAAC,WAAO,YAAY,IAAI;AAAA,EAAC;AAAA,EAAC,OAAO,GAAEA,KAAE;AAAC,QAAGA,QAAI,WAASA,QAAI,OAAO,OAAM,IAAI,MAAM,kDAAkDA,GAAC,EAAE;AAAE,WAAO,KAAK,eAAa,SAAO,KAAK,cAAY,IAAI,gBAAa,KAAK,YAAY,OAAO,CAAC;AAAA,EAAC;AAAA,EAAC,OAAO,GAAEA,KAAE;AAAC,WAAO,IAAI,YAAYA,GAAC,EAAE,OAAO,CAAC;AAAA,EAAC;AAAA,EAAC,iBAAiB,GAAEA,KAAE;AAAC,QAAG,OAAO,UAAQ,eAAa,CAAC,EAAE,EAAE,QAAQ,sBAAsB,GAAE;AAAC,iBAAW,GAAEA,GAAC;AAAE;AAAA,IAAM;AAAC,SAAK,aAAa,KAAK,CAAC,GAAE,WAAW,MAAI;AAAC,aAAO,YAAY,EAAC,MAAK,KAAK,aAAY,OAAM,KAAK,aAAa,SAAO,EAAC,GAAE,GAAG;AAAA,IAAC,GAAEA,GAAC,GAAE,KAAK,qBAAmB,KAAK,mBAAiB,MAAG,OAAO,iBAAiB,WAAU,OAAG;AAAC,UAAG,EAAE,WAAS,UAAQ,EAAE,KAAK,SAAO,KAAK,aAAY;AAAC,UAAE,gBAAgB;AAAE,YAAI,IAAE,KAAK,aAAa,EAAE,KAAK,KAAK;AAAE,UAAE,GAAE,KAAK,uBAAsB,KAAK,wBAAsB,KAAK,aAAa,WAAS,KAAK,eAAa,CAAC,GAAE,KAAK,sBAAoB;AAAA,MAAE;AAAA,IAAC,GAAE,IAAE;AAAA,EAAE;AAAA,EAAC,aAAa,GAAE;AAAC,WAAO,GAAG,CAAC;AAAA,EAAC;AAAC;AAAE,IAAG,EAAE,EAAE,IAAI,YAAY,GAAE;AAAC,IAAE,EAAE,YAAY,WAAU,IAAI,IAAE;AAAE,MAAG;AAAC,OAAG,gBAAgB,GAAG,YAAW,IAAI,IAAE;AAAA,EAAC,SAAOD,KAAE;AAAA,EAAC;AAAC,MAAG;AAAC,OAAG,gBAAgB,GAAG,YAAW,IAAI,IAAE;AAAA,EAAC,SAAOA,KAAE;AAAA,EAAC;AAAC;AAAC,IAAI,KAAG,EAAC,aAAY,MAAI,GAAG,EAAC;AAA5B,IAA8B;AAAG,IAAI,KAAG,MAAK;AAAA,EAAC,cAAa;AAAC,SAAK,OAAK,GAAG,GAAE,KAAK,cAAY,IAAI,KAAK,KAAK;AAAA,EAAW;AAAA,EAAC,MAAM,GAAEC,KAAE;AAAC,WAAO,EAAE,EAAE,OAAO,SAAO,OAAK,EAAE,EAAE,OAAO,MAAM,GAAEA,GAAC,KAAG,MAAI,SAAO,KAAG,GAAG,YAAY,IAAG,GAAG,GAAEA,GAAC;AAAA,EAAE;AAAA,EAAC,MAAK;AAAC,QAAI,IAAE,QAAQ,OAAO;AAAE,WAAO,EAAE,CAAC,IAAE,MAAI,EAAE,CAAC,IAAE;AAAA,EAAG;AAAA,EAAC,OAAO,GAAEA,KAAE;AAAC,QAAGA,QAAI,WAASA,QAAI,OAAO,OAAM,IAAI,MAAM,sDAAsDA,GAAC,EAAE;AAAE,WAAO,KAAK,YAAY,OAAO,CAAC;AAAA,EAAC;AAAA,EAAC,OAAO,GAAEA,KAAE;AAAC,WAAO,EAAE,WAAS,IAAE,KAAG,IAAI,KAAK,KAAK,YAAYA,GAAC,EAAE,OAAO,CAAC;AAAA,EAAC;AAAA,EAAC,aAAa,GAAE;AAAC,WAAO,KAAK,KAAK,MAAM,eAAe,CAAC,KAAG,KAAK,KAAK,MAAM,aAAa,CAAC,KAAG,KAAK,KAAK,MAAM,aAAa,CAAC,KAAG,KAAK,KAAK,MAAM,oBAAoB,CAAC;AAAA,EAAC;AAAC;AAAE,EAAE,EAAE,IAAI,SAAS,KAAG,CAAC,EAAE,EAAE,IAAI,YAAY,KAAG,EAAE,EAAE,YAAY,QAAO,IAAI,IAAE;AAAE,SAAS,GAAGD,KAAE,IAAE,WAAUC,KAAE;AAAC,SAAO,IAAE,KAAG,WAAU,GAAGD,GAAC,GAAE,IAAI,GAAGA,KAAE,GAAEC,GAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAED,KAAE,KAAI,MAAM;AAAE,MAAG,CAAC,GAAG,CAAC,EAAE,OAAM,IAAI,MAAM,mCAAmC,CAAC,EAAE;AAAE,MAAG,MAAI,YAAUC,IAAE,UAAQ,YAAU,MAAI,YAAUA,IAAE,UAAQ,SAAS,OAAM,IAAI,MAAM,uCAAuC;AAAE,MAAI,IAAE,EAAC,GAAEA,IAAC,GAAE,IAAE,EAAC,OAAM,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,OAAM,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAIC,MAAE,EAAC,GAAE,EAAED,KAAE,KAAI,SAAQ,mBAAmB,EAAC;AAAE,SAAO,EAAE,UAAU,IAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,QAAO,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,IAAE,OAAG;AAAC,UAAQ,IAAIA,IAAE,SAAS,CAAC,CAAC;AAAC;AAAC,GAAG;AAAE,IAAI,KAAG,EAAC,QAAO,IAAG,MAAK,IAAG,OAAM,IAAG,OAAM,GAAE;AAAE,GAAG,EAAE;AAAE,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAED,KAAE,KAAI,KAAK,GAAE,IAAE,EAAE,GAAE,KAAI,KAAK;AAAE,GAACC,KAAE,CAAC,IAAE,GAAGA,KAAE,CAAC;AAAE,MAAI,IAAE,EAAC,GAAEA,KAAE,GAAE,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,MAAK,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAED,KAAE,KAAI,UAAU,GAAE,IAAE,EAAE,GAAE,KAAI,UAAU;AAAE,GAACC,KAAE,CAAC,IAAE,GAAGA,KAAE,CAAC;AAAE,MAAI,IAAE,EAAC,GAAEA,KAAE,GAAE,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,WAAU,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAED,KAAE,KAAI,KAAK,GAAE,IAAE,EAAE,GAAE,KAAI,KAAK;AAAE,MAAG,CAACC,KAAE,CAAC,IAAE,GAAGA,KAAE,CAAC,GAAEA,IAAE,UAAQ,WAAS,EAAE,UAAQ,QAAQ,QAAO,GAAGA,KAAE,CAAC;AAAE,MAAI,IAAE,EAAC,GAAEA,KAAE,GAAE,EAAC,GAAE,IAAE,CAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,MAAK,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAED,KAAE,KAAI,KAAK,GAAE,IAAE,EAAE,GAAE,KAAI,KAAK;AAAE,GAACC,KAAE,CAAC,IAAE,GAAGA,KAAE,CAAC;AAAE,MAAI,IAAE,EAAC,GAAEA,KAAE,GAAE,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,MAAK,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAI,IAAE,EAAEA,KAAE,KAAI,KAAK;AAAE,MAAG,EAAE,UAAQ,aAAY;AAAC,QAAIC,MAAE,EAAC,GAAE,EAAC;AAAE,WAAO,EAAE,UAAU,IAAGA,GAAC;AAAA,EAAC,OAAK;AAAC,QAAIA,MAAE,EAAC,GAAE,EAAC;AAAE,WAAO,EAAE,UAAU,IAAGA,GAAC;AAAA,EAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,MAAK,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAIC,MAAE,EAAC,GAAE,EAAED,KAAE,KAAI,MAAM,EAAC;AAAE,SAAO,EAAE,UAAU,IAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,OAAM,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAIC,MAAE,EAAC,GAAE,EAAED,KAAE,KAAI,OAAO,EAAC;AAAE,SAAO,EAAE,UAAU,IAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,QAAO,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,IAAE,MAAM,QAAQA,GAAC,GAAE,MAAI,4DAA4D,GAAE,EAAEA,IAAE,UAAQ,GAAE,MAAI,uDAAuDA,IAAE,MAAM,EAAE;AAAE,MAAI,IAAEA,IAAE,IAAI,CAAC,GAAE,MAAI,EAAE,GAAE,UAAU,CAAC,IAAG,MAAM,CAAC,GAAEC,MAAE,EAAE,CAAC;AAAE,IAAE,QAAQ,OAAG;AAAC,QAAG,EAAE,UAAQA,IAAE,MAAM,OAAM,IAAI,MAAM,0DAA0D;AAAA,EAAC,CAAC,GAAE,EAAE,QAAQ,OAAG;AAAC,QAAG,CAAC,GAAG,EAAE,OAAMA,IAAE,KAAK,EAAE,OAAM,IAAI,MAAM,0DAA0D;AAAA,EAAC,CAAC;AAAE,MAAI,IAAE;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,OAAM,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,IAAE,MAAKC,MAAE,OAAG;AAAC,MAAI,IAAE,EAAC,GAAE,EAAED,KAAE,KAAI,OAAM,MAAM,EAAC,GAAE,IAAE,EAAC,MAAK,GAAE,UAASC,IAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,MAAK,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,IAAE,MAAKC,MAAE,OAAG;AAAC,MAAI,IAAE,EAAC,GAAE,EAAED,KAAE,KAAI,OAAM,MAAM,EAAC,GAAE,IAAE,EAAC,MAAK,GAAE,UAASC,IAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,MAAK,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,IAAE,GAAE;AAAC,MAAI,IAAE,EAAC,GAAE,EAAEA,KAAE,KAAI,QAAQ,EAAC,GAAE,IAAE,EAAC,MAAK,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,SAAQ,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAE,IAAE,GAAE;AAAC,MAAI,IAAE,EAAC,GAAE,EAAEA,KAAE,KAAI,QAAQ,EAAC,GAAE,IAAE,EAAC,MAAK,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,SAAQ,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAE;AAAC,MAAIC,MAAE,EAAC,GAAE,EAAED,KAAE,KAAI,MAAM,EAAC;AAAE,SAAO,EAAE,UAAU,IAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,OAAM,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAIC,MAAE,EAAC,GAAE,EAAED,KAAE,KAAI,OAAO,EAAC;AAAE,SAAO,EAAE,UAAU,IAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,QAAO,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAIC,MAAE,EAAC,GAAE,EAAED,KAAE,KAAI,MAAM,EAAC;AAAE,SAAO,EAAE,UAAU,IAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,OAAM,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAED,KAAE,KAAI,OAAO,GAAE,IAAE,EAAE,GAAE,KAAI,OAAO;AAAE,GAACC,KAAE,CAAC,IAAE,GAAGA,KAAE,CAAC;AAAE,MAAI,IAAE,EAAC,GAAEA,KAAE,GAAE,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,QAAO,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAIC,MAAE,EAAC,GAAE,EAAED,KAAE,KAAI,OAAO,EAAC;AAAE,SAAO,EAAE,UAAU,IAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,QAAO,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,IAAE,QAAO,GAAE;AAAC,MAAI,IAAED,IAAE,CAAC,GAAE,IAAE,CAAC,GAAG,GAAE,CAAC,GAAE,IAAE,GAAG,CAAC;AAAE,SAAO,GAAGA,KAAE,GAAEC,KAAE,GAAE,GAAE,MAAK,MAAK,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE,IAAE,gBAAe;AAAC,MAAG,CAAC,GAAE,CAAC,IAAE,GAAG,CAAC,GAAE;AAAE,MAAG,MAAI,eAAe,KAAE,CAAC,GAAE,GAAED,IAAE,CAAC,GAAEA,IAAE,CAAC,CAAC;AAAA,WAAU,MAAI,gBAAgB,KAAE,CAAC,GAAE,GAAEA,IAAE,CAAC,GAAEA,IAAE,CAAC,CAAC;AAAA,MAAO,OAAM,IAAI,MAAM,sBAAsB,CAAC,EAAE;AAAE,SAAO,GAAGA,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE,OAAG,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE,IAAE,SAAQ;AAAC,MAAG,CAAC,GAAE,GAAE,CAAC,IAAE,GAAG,CAAC,GAAE,GAAE;AAAE,MAAG,MAAI,QAAQ,KAAE,gBAAe,IAAE,CAAC,GAAE,GAAE,GAAED,IAAE,CAAC,GAAEA,IAAE,CAAC,CAAC;AAAA,WAAU,MAAI,QAAQ,KAAE,iBAAgB,IAAE,CAAC,GAAE,GAAE,GAAEA,IAAE,CAAC,GAAEA,IAAE,CAAC,CAAC;AAAA,MAAO,OAAM,IAAI,MAAM,sBAAsB,CAAC,EAAE;AAAE,SAAO,GAAGA,KAAE,GAAEC,KAAE,GAAE,GAAE,OAAG,GAAE,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE,IAAE,OAAG,IAAE,gBAAe;AAAC,MAAG,CAAC,GAAE,GAAE,GAAE,CAAC,IAAE,CAAC,IAAG,IAAG,IAAG,EAAE;AAAE,MAAG,MAAI,eAAe,EAAC,GAAE,GAAE,GAAE,CAAC,IAAED;AAAA,WAAU,MAAI,gBAAgB,EAAC,GAAE,GAAE,GAAE,CAAC,IAAEA;AAAA,MAAO,OAAM,IAAI,MAAM,sBAAsB,CAAC,EAAE;AAAE,MAAG,CAAC,GAAE,GAAE,EAAC,CAAC,IAAE,GAAE,CAAC,GAAE,CAAC,IAAE,GAAGC,GAAC,GAAE,CAAC,GAAE,CAAC,IAAE,GAAG,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC,GAAE,EAAC,SAAQ,GAAE,WAAU,GAAE,UAAS,EAAC,IAAE,GAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,IAAE,IAAE,IAAE,GAAE;AAAE,SAAO,MAAI,kBAAgB,IAAE,CAAC,GAAE,GAAE,GAAE,CAAC,IAAE,MAAI,mBAAiB,IAAE,CAAC,GAAE,GAAE,GAAE,CAAC,IAAG,EAAC,WAAU,GAAE,YAAW,GAAE,UAAS,GAAE,SAAQ,GAAE,YAAW,GAAE,WAAU,GAAE,UAAS,GAAE,aAAY,GAAE,SAAQ,GAAE,cAAa,GAAE,aAAY,GAAE,cAAa,GAAE,aAAY,GAAE,uBAAsB,GAAE,sBAAqB,GAAE,gBAAe,GAAE,eAAc,GAAE,SAAQD,KAAE,UAAS,GAAE,aAAY,EAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE,GAAE,IAAE,OAAG,IAAE,gBAAe,GAAE;AAAC,MAAG,CAAC,GAAE,GAAE,GAAE,GAAE,CAAC,IAAE,CAAC,IAAG,IAAG,IAAG,IAAG,EAAE;AAAE,MAAG,MAAI,eAAe,EAAC,GAAE,GAAE,GAAE,GAAE,CAAC,IAAED;AAAA,WAAU,MAAI,gBAAgB,EAAC,GAAE,GAAE,GAAE,GAAE,CAAC,IAAEA;AAAA,MAAO,OAAM,IAAI,MAAM,sBAAsB,CAAC,EAAE;AAAE,MAAG,CAAC,GAAE,GAAE,GAAE,EAAC,CAAC,IAAE,GAAE,CAAC,GAAE,GAAE,CAAC,IAAE,GAAGC,GAAC,GAAE,CAAC,GAAE,GAAE,CAAC,IAAE,GAAG,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC,GAAE,EAAC,SAAQ,GAAE,UAAS,GAAE,WAAU,GAAE,UAAS,EAAC,IAAE,GAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,IAAE,IAAE,IAAE,GAAE;AAAE,SAAO,MAAI,kBAAgB,IAAE,CAAC,GAAE,GAAE,GAAE,GAAE,CAAC,IAAE,MAAI,mBAAiB,IAAE,CAAC,GAAE,GAAE,GAAE,GAAE,CAAC,IAAG,EAAC,WAAU,GAAE,YAAW,GAAE,SAAQ,GAAE,UAAS,GAAE,SAAQ,GAAE,YAAW,GAAE,UAAS,GAAE,WAAU,GAAE,UAAS,GAAE,aAAY,GAAE,SAAQ,GAAE,aAAY,GAAE,cAAa,GAAE,aAAY,GAAE,aAAY,GAAE,cAAa,GAAE,aAAY,GAAE,sBAAqB,GAAE,uBAAsB,GAAE,sBAAqB,GAAE,eAAc,GAAE,gBAAe,GAAE,eAAc,GAAE,SAAQD,KAAE,UAAS,GAAE,aAAY,EAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE,GAAE;AAAC,OAAG,SAAO,IAAE,GAAGD,KAAE,GAAEC,GAAC;AAAG,MAAI,IAAED,IAAE,CAAC,GAAE,IAAEA,IAAE,CAAC,GAAE,IAAE,IAAI,IAAE,IAAE,IAAE,KAAGC,MAAE,GAAE,CAAC,GAAE,IAAE,IAAI,IAAE,IAAE,IAAE,KAAGA,MAAE,GAAE,CAAC;AAAE,SAAM,CAAC,GAAE,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE;AAAC,OAAG,SAAO,IAAE,GAAGD,KAAE,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC;AAAG,MAAI,IAAE,CAAC,GAAE,GAAE,GAAEC,GAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,IAAI,CAAAD,IAAE,CAAC,IAAE,IAAE,KAAG,EAAE,CAAC,MAAI,EAAE,CAAC,IAAE,IAAIA,IAAE,CAAC,IAAE,EAAE,CAAC,IAAE,IAAE,KAAG,EAAE,CAAC,IAAE,GAAE,CAAC;AAAG,SAAO;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,IAAE,GAAE;AAAC,MAAI,IAAE,GAAG,GAAE,CAAC;AAAE,SAAO,KAAK,OAAOD,IAAE,CAAC,KAAGC,MAAE,KAAGA,MAAE,KAAG,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,SAAO,OAAOA,OAAG,WAAS,CAACA,KAAEA,KAAEA,GAAC,IAAEA,IAAE,WAAS,IAAE,CAACA,IAAE,CAAC,GAAEA,IAAE,CAAC,GAAE,CAAC,IAAEA;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAO,OAAOA,OAAG,WAAS,CAACA,KAAEA,KAAEA,GAAC,IAAEA;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,SAAO,KAAG,IAAEA,MAAEA,OAAGA,MAAE,MAAI,IAAE;AAAE;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE;AAAC,MAAI,GAAE,GAAE;AAAE,MAAG,OAAOD,OAAG,UAAS;AAAC,QAAE,EAAC,KAAIA,KAAE,QAAOA,KAAE,MAAKA,KAAE,OAAMA,KAAE,MAAKA,QAAI,IAAE,UAAQ,SAAQ;AAAE,QAAI,IAAE,GAAG,CAAC,GAAEC,GAAC,GAAE,GAAE,GAAED,KAAE,CAAC;AAAE,QAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC;AAAA,EAAC,WAASA,QAAI,QAAO;AAAC,QAAE,KAAK,KAAK,IAAE,CAAC,GAAE,IAAE,KAAK,KAAKC,MAAE,CAAC;AAAE,QAAI,IAAE,KAAK,IAAI,IAAG,IAAE,KAAG,IAAE,IAAE,CAAC,GAAE,IAAE,KAAK,IAAI,IAAG,IAAE,KAAG,IAAE,IAAEA,GAAC,GAAE,IAAE,KAAK,MAAM,IAAE,CAAC,GAAE,IAAE,IAAE,GAAE,IAAE,KAAK,MAAM,IAAE,CAAC,GAAE,IAAE,IAAE;AAAE,QAAE,EAAC,KAAI,GAAE,QAAO,GAAE,MAAK,GAAE,OAAM,GAAE,MAAK,OAAM;AAAA,EAAC,WAASD,QAAI,QAAQ,KAAE,EAAC,KAAI,GAAE,QAAO,GAAE,MAAK,GAAE,OAAM,GAAE,MAAK,QAAO,GAAE,IAAE,KAAK,MAAM,IAAE,IAAE,KAAG,CAAC,GAAE,IAAE,KAAK,MAAMC,MAAE,IAAE,KAAG,CAAC;AAAA,WAAU,OAAOD,OAAG,UAAS;AAAC,QAAI,IAAE,MAAI,iBAAeA,IAAE,CAAC,EAAE,CAAC,IAAEA,IAAE,CAAC,EAAE,CAAC,GAAE,IAAE,MAAI,iBAAeA,IAAE,CAAC,EAAE,CAAC,IAAEA,IAAE,CAAC,EAAE,CAAC,GAAE,IAAE,MAAI,iBAAeA,IAAE,CAAC,EAAE,CAAC,IAAEA,IAAE,CAAC,EAAE,CAAC,GAAE,IAAE,MAAI,iBAAeA,IAAE,CAAC,EAAE,CAAC,IAAEA,IAAE,CAAC,EAAE,CAAC;AAAE,QAAE,EAAC,KAAI,GAAE,QAAO,GAAE,MAAK,GAAE,OAAM,GAAE,MAAK,MAAI,KAAG,MAAI,KAAG,MAAI,KAAG,MAAI,IAAE,UAAQ,WAAU,GAAE,IAAE,IAAI,IAAE,IAAE,IAAE,KAAG,IAAE,GAAE,CAAC,GAAE,IAAE,IAAIC,MAAE,IAAE,IAAE,KAAG,IAAE,GAAE,CAAC;AAAA,EAAC,MAAM,OAAM,MAAM,8BAA8BD,GAAC,EAAE;AAAE,SAAM,EAAC,SAAQ,GAAE,WAAU,GAAE,UAAS,EAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE;AAAC,MAAI,GAAE,GAAE,GAAE;AAAE,MAAGD,QAAI,YAAUA,MAAE,IAAG,OAAOA,OAAG,UAAS;AAAC,QAAE,EAAC,KAAIA,KAAE,QAAOA,KAAE,MAAKA,KAAE,OAAMA,KAAE,OAAMA,KAAE,MAAKA,KAAE,MAAKA,QAAI,IAAE,UAAQ,SAAQ;AAAE,QAAI,IAAE,GAAG,CAAC,GAAEC,KAAE,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,GAAE,CAAC,GAAED,KAAE,CAAC;AAAE,QAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC;AAAA,EAAC,WAASA,QAAI,QAAO;AAAC,QAAE,KAAK,KAAK,IAAE,CAAC,GAAE,IAAE,KAAK,KAAKC,MAAE,CAAC,GAAE,IAAE,KAAK,KAAK,IAAE,CAAC;AAAE,QAAI,KAAG,IAAE,KAAG,IAAE,IAAE,GAAE,KAAG,IAAE,KAAG,IAAE,IAAEA,KAAE,KAAG,IAAE,KAAG,IAAE,IAAE,GAAE,IAAE,KAAK,MAAM,IAAE,CAAC,GAAE,IAAE,IAAE,GAAE,IAAE,KAAK,MAAM,IAAE,CAAC,GAAE,IAAE,IAAE,GAAE,IAAE,KAAK,MAAM,IAAE,CAAC,GAAE,IAAE,IAAE;AAAE,QAAE,EAAC,KAAI,GAAE,QAAO,GAAE,MAAK,GAAE,OAAM,GAAE,OAAM,GAAE,MAAK,GAAE,MAAK,OAAM;AAAA,EAAC,MAAM,OAAM,MAAM,8BAA8BD,GAAC,EAAE;AAAE,SAAM,EAAC,SAAQ,GAAE,UAAS,GAAE,WAAU,GAAE,UAAS,EAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAG,CAAC,EAAE,QAAO,KAAK,MAAMA,GAAC;AAAE,UAAO,GAAE;AAAA,IAAC,KAAI;AAAQ,aAAO,KAAK,MAAMA,GAAC;AAAA,IAAE,KAAI;AAAO,aAAO,KAAK,KAAKA,GAAC;AAAA,IAAE,KAAI;AAAQ,aAAO,KAAK,MAAMA,GAAC;AAAA,IAAE;AAAQ,YAAM,IAAI,MAAM,wBAAwB,CAAC,EAAE;AAAA,EAAC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAG,CAAC,GAAEC,KAAE,CAAC,IAAE,GAAGD,GAAC;AAAE,SAAO,MAAI,KAAGC,QAAI,KAAG,MAAI;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,SAAO,GAAGA,GAAC,KAAG,GAAG,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAO,GAAGA,GAAC,EAAE,MAAM,OAAG,IAAE,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAGA,QAAI,OAAO,QAAM;AAAe,MAAGA,QAAI,OAAO,QAAM;AAAgB,QAAM,IAAI,MAAM,sBAAsBA,GAAC,EAAE;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAGA,OAAG,MAAK;AAAC,QAAG,OAAO,KAAG,SAAS,OAAM,MAAM,YAAYD,GAAC,uDAAuDC,GAAC,gBAAgB,CAAC,GAAG;AAAE,QAAG,OAAO,KAAG,SAAS,GAAE,GAAG,CAAC,GAAE,MAAI,YAAYD,GAAC,uDAAuDC,GAAC,gBAAgB,CAAC,GAAG;AAAA,aAAU,OAAO,KAAG,SAAS,GAAE,QAAQ,OAAG;AAAC,QAAE,QAAQ,OAAG;AAAC,UAAE,GAAG,CAAC,GAAE,MAAI,YAAYD,GAAC,uDAAuDC,GAAC,gBAAgB,CAAC,GAAG;AAAA,MAAC,CAAC;AAAA,IAAC,CAAC;AAAA,QAAO,OAAM,MAAM,YAAYD,GAAC,gCAAgC,CAAC,EAAE;AAAA,EAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAI,IAAE,EAAC,GAAE,EAAEA,KAAE,KAAI,WAAU,mBAAmB,EAAC,GAAE,IAAE,EAAC,OAAM,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,IAAE,EAAE,EAAC,UAAS,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE,GAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,WAAU,SAAS,GAAE,IAAE;AAAE,IAAE,GAAGC,KAAE,CAAC,GAAE,MAAI,wEAAwEA,GAAC,mBAAmB,CAAC,GAAG;AAAE,MAAI,IAAE,GAAE,IAAE;AAAG,IAAE,SAAO,MAAI,IAAE,MAAG,IAAE,EAAE,GAAE,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC,IAAG,EAAE,EAAE,SAAO,GAAE,MAAI,mDAAmD,EAAE,IAAI,GAAG,GAAE,GAAG,WAAU,GAAE,CAAC;AAAE,MAAI,IAAE,EAAC,GAAE,EAAC,GAAE,IAAE,EAAC,YAAW,GAAE,SAAQA,KAAE,KAAI,GAAE,iBAAgB,EAAC,GAAE,IAAE,EAAE,UAAU,IAAG,GAAE,CAAC;AAAE,SAAO,IAAE,GAAG,GAAE,EAAE,KAAK,GAAE,IAAE,EAAE,GAAE,CAAC,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC,IAAE;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,UAAS,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE,IAAE,SAAQ;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,aAAY,SAAS,GAAE,IAAE,GAAE,IAAE;AAAG,IAAE,SAAO,MAAI,IAAE,MAAG,IAAE,EAAE,GAAE,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC,IAAG,EAAE,EAAE,SAAO,GAAE,MAAI,qDAAqD,EAAE,IAAI,GAAG,GAAE,EAAE,MAAI,SAAQ,MAAI,gFAAgF,CAAC,EAAE,GAAE,EAAE,OAAOC,OAAG,YAAUA,MAAE,KAAG,MAAM,QAAQA,GAAC,KAAGA,IAAE,CAAC,IAAE,KAAGA,IAAE,CAAC,IAAE,KAAGA,IAAE,CAAC,IAAE,GAAE,MAAI,oDAAoDA,GAAC,GAAG,GAAE,GAAG,aAAY,GAAE,CAAC;AAAE,MAAI,IAAE,EAAC,GAAE,EAAC,GAAE,IAAE,EAAC,YAAW,GAAE,SAAQA,KAAE,KAAI,GAAE,iBAAgB,GAAE,YAAW,EAAC,GAAE,IAAE,EAAE,UAAU,IAAG,GAAE,CAAC;AAAE,SAAO,IAAE,GAAG,GAAE,EAAE,KAAK,GAAE,IAAE,EAAE,GAAE,CAAC,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC,IAAE;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,YAAW,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,IAAE,GAAE;AAAC,IAAEA,IAAE,UAAQ,GAAE,MAAI,oCAAoC;AAAE,MAAIC,MAAE,GAAGD,KAAE,WAAU,UAAS,mBAAmB;AAAE,MAAGC,IAAE,CAAC,EAAE,UAAQ,eAAaA,IAAE,QAAQ,OAAG;AAAC,QAAG,EAAE,UAAQ,YAAY,OAAM,IAAI,MAAM;AAAA,uBACju3D,EAAE,KAAK,IAAI;AAAA,EAAC,CAAC,GAAEA,IAAE,WAAS,EAAE,QAAO,GAAGA,IAAE,CAAC,CAAC;AAAE,MAAI,IAAEA,KAAE,IAAE,EAAC,MAAK,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,SAAQ,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,MAAE,OAAG,IAAE,OAAG;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,QAAQ,GAAE,IAAE,EAAE,GAAE,KAAI,QAAQ;AAAE,GAAC,GAAE,CAAC,IAAE,GAAG,GAAE,CAAC;AAAE,MAAI,IAAE,EAAC,GAAE,GAAE,GAAE,EAAC,GAAE,IAAE,EAAC,YAAWC,KAAE,YAAW,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,SAAQ,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAIC,MAAE,EAAC,GAAE,EAAED,KAAE,KAAI,WAAU,SAAS,EAAC;AAAE,SAAO,EAAE,UAAU,IAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,UAAS,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,SAAQ,mBAAmB;AAAE,MAAG,EAAE,SAAO,EAAE,OAAM,IAAI,MAAM,gCAAgC;AAAE,MAAI,IAAE,EAAC,GAAE,EAAC,GAAE,IAAE,EAAC,OAAM,GAAE,MAAKC,IAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,QAAO,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAIC,MAAE,EAAC,GAAE,EAAED,KAAE,KAAI,QAAO,SAAS,EAAC;AAAE,SAAO,EAAE,UAAU,IAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,OAAM,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE;AAAC,MAAI,IAAE,EAAED,KAAE,cAAa,eAAe,GAAE,IAAE,EAAE,GAAE,cAAa,eAAe,GAAE,IAAE,EAAEC,KAAE,YAAW,eAAe,GAAE,IAAE,EAAE,GAAE,QAAO,eAAe,GAAE,IAAE,EAAE,GAAE,KAAI,eAAe,GAAE,IAAE,EAAE,GAAE,KAAI,eAAe,GAAE,IAAE,GAAG,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC,GAAE,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,EAAE,MAAM,CAAC,IAAE,GAAE,IAAE,CAAC,GAAE,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC,GAAE,IAAE,CAAC,GAAE,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC,GAAE,IAAE,CAAC,GAAE,CAAC,GAAE,IAAE,GAAG,GAAG,GAAG,CAAC,GAAE,GAAG,CAAC,CAAC,GAAE,GAAG,GAAE,GAAG,GAAG,GAAE,CAAC,CAAC,CAAC,CAAC,GAAE,IAAE,GAAG,GAAG,CAAC,GAAE,GAAG,CAAC,CAAC;AAAE,SAAM,CAAC,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,gBAAe,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,gBAAgB,GAAE,IAAE,EAAE,OAAO,CAAC,GAAE,MAAI,IAAE,CAAC;AAAE,IAAE,EAAE,QAAM,IAAE,EAAE,QAAO,MAAI,iBAAiB,EAAE,IAAI,2CAA2C,EAAE,MAAM,EAAE,GAAE,EAAEC,IAAE,WAAS,EAAE,QAAO,MAAI,mBAAmBA,IAAE,MAAM,8CAA8C,EAAE,MAAM,EAAE,GAAE,EAAE,EAAE,MAAM,CAAC,IAAE,MAAI,GAAE,MAAI,yBAAyB,EAAE,MAAM,CAAC,CAAC,sEAAsE,EAAE,KAAK,KAAK,CAAC,QAAQ,CAAC,EAAE;AAAE,MAAI,IAAE,EAAC,GAAE,EAAC,GAAE,IAAE,EAAC,YAAW,GAAE,OAAMA,IAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,iBAAgB,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAI;AAAE,SAAOA,IAAE,SAAO,KAAGA,IAAE,SAAO,IAAE,IAAE,EAAEA,KAAE,CAAC,GAAE,GAAE,GAAEA,IAAE,IAAI,CAAC,IAAEA,IAAE,SAAO,IAAE,IAAE,EAAEA,KAAE,CAAC,GAAE,GAAEA,IAAE,MAAM,CAAC,GAAEA,IAAE,MAAM,CAAC,CAAC,CAAC,IAAEA,IAAE,SAAO,IAAE,IAAE,EAAEA,KAAE,CAAC,GAAEA,IAAE,MAAM,CAAC,GAAEA,IAAE,MAAM,CAAC,GAAEA,IAAE,MAAM,CAAC,CAAC,CAAC,IAAE,IAAEA,KAAE;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE;AAAC,OAAG,SAAO,IAAE;AAAM,MAAI,IAAE,EAAED,KAAE,KAAI,WAAW,GAAE,IAAE,EAAE,GAAE,QAAO,WAAW,GAAE,IAAE,EAAEC,KAAE,YAAW,WAAW,GAAE;AAAE,OAAG,SAAO,IAAE,EAAE,GAAE,SAAQ,WAAW;AAAG,MAAI;AAAE,OAAG,SAAO,IAAE,EAAE,GAAE,UAAS,WAAW,IAAG,EAAE,EAAE,SAAO,EAAE,MAAK,MAAI,8EAA8E,GAAE,EAAE,KAAG,QAAM,EAAE,SAAO,EAAE,MAAK,MAAI,4EAA4E,GAAE,EAAE,KAAG,QAAM,EAAE,SAAO,EAAE,MAAK,MAAI,2EAA2E;AAAE,MAAI,IAAE,EAAC,GAAE,GAAG,CAAC,GAAE,OAAM,GAAE,QAAO,GAAE,MAAK,GAAE,UAAS,EAAC,GAAE,IAAE,EAAC,iBAAgB,EAAC,GAAE,IAAE,EAAE,UAAU,IAAG,GAAE,CAAC;AAAE,SAAO,EAAE,GAAE,EAAE,KAAK;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,YAAW,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,WAAW,GAAE,IAAE,EAAE,GAAE,QAAO,WAAW,GAAE,IAAE,EAAEC,KAAE,YAAW,WAAW,GAAE;AAAE,OAAG,SAAO,IAAE,EAAE,GAAE,SAAQ,WAAW;AAAG,MAAI;AAAE,SAAO,KAAG,SAAO,IAAE,EAAE,GAAE,UAAS,WAAW,IAAG,EAAE,EAAE,SAAO,GAAE,MAAI,uDAAuD,EAAE,IAAI,GAAG,GAAE,EAAE,EAAE,SAAO,KAAG,EAAE,SAAO,GAAE,MAAI,oEAAoE,EAAE,IAAI,GAAG,GAAE,EAAE,EAAE,SAAO,KAAG,EAAE,SAAO,GAAE,MAAI,wEAAwE,EAAE,IAAI,GAAG,GAAE,KAAG,QAAM,EAAE,EAAE,SAAO,KAAG,EAAE,SAAO,GAAE,MAAI,qEAAqE,EAAE,IAAI,GAAG,GAAE,KAAG,QAAM,EAAE,EAAE,SAAO,KAAG,EAAE,SAAO,GAAE,MAAI,sEAAsE,EAAE,IAAI,GAAG,GAAE,GAAG,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,cAAa,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,WAAW,GAAE,IAAE,EAAE,GAAE,QAAO,WAAW,GAAE,IAAE,EAAEC,KAAE,YAAW,WAAW,GAAE;AAAE,OAAG,SAAO,IAAE,EAAE,GAAE,SAAQ,WAAW;AAAG,MAAI;AAAE,SAAO,KAAG,SAAO,IAAE,EAAE,GAAE,UAAS,WAAW,IAAG,EAAE,EAAE,SAAO,GAAE,MAAI,uDAAuD,EAAE,IAAI,GAAG,GAAE,EAAE,EAAE,SAAO,KAAG,EAAE,SAAO,GAAE,MAAI,oEAAoE,EAAE,IAAI,GAAG,GAAE,EAAE,EAAE,SAAO,KAAG,EAAE,SAAO,GAAE,MAAI,wEAAwE,EAAE,IAAI,GAAG,GAAE,KAAG,QAAM,EAAE,EAAE,SAAO,KAAG,EAAE,SAAO,GAAE,MAAI,qEAAqE,EAAE,IAAI,GAAG,GAAE,KAAG,QAAM,EAAE,EAAE,SAAO,KAAG,EAAE,SAAO,GAAE,MAAI,sEAAsE,EAAE,IAAI,GAAG,GAAE,GAAG,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,cAAa,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,WAAW,GAAE,IAAE,EAAE,GAAE,QAAO,WAAW,GAAE,IAAE,EAAEC,KAAE,YAAW,WAAW,GAAE;AAAE,OAAG,SAAO,IAAE,EAAE,GAAE,SAAQ,WAAW;AAAG,MAAI;AAAE,SAAO,KAAG,SAAO,IAAE,EAAE,GAAE,UAAS,WAAW,IAAG,EAAE,EAAE,SAAO,GAAE,MAAI,uDAAuD,EAAE,IAAI,GAAG,GAAE,EAAE,EAAE,SAAO,KAAG,EAAE,SAAO,GAAE,MAAI,oEAAoE,EAAE,IAAI,GAAG,GAAE,EAAE,EAAE,SAAO,KAAG,EAAE,SAAO,GAAE,MAAI,wEAAwE,EAAE,IAAI,GAAG,GAAE,KAAG,QAAM,EAAE,EAAE,SAAO,KAAG,EAAE,SAAO,GAAE,MAAI,qEAAqE,EAAE,IAAI,GAAG,GAAE,KAAG,QAAM,EAAE,EAAE,SAAO,KAAG,EAAE,SAAO,GAAE,MAAI,sEAAsE,EAAE,IAAI,GAAG,GAAE,GAAG,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,cAAa,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,UAAU,GAAE,IAAE,EAAE,GAAE,WAAU,UAAU;AAAE,IAAE,EAAE,UAAQ,SAAQ,MAAI,yDAAyD,EAAE,KAAK,EAAE,GAAE,EAAEC,OAAG,GAAE,MAAI,sCAAsCA,GAAC,GAAG,GAAE,EAAE,EAAE,SAAO,EAAE,QAAM,EAAE,SAAO,GAAE,MAAI,gGAAgG,EAAE,KAAK,oBAAoB,EAAE,KAAK,GAAG;AAAE,MAAI,IAAE,EAAC,GAAE,GAAE,SAAQ,EAAC,GAAE,IAAE,EAAC,MAAKA,IAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,WAAU,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAED,KAAE,KAAI,YAAY,GAAE,IAAE,EAAE,GAAE,KAAI,YAAY;AAAE,MAAG,CAAC,GAAGC,IAAE,OAAM,EAAE,KAAK,EAAE,OAAM,IAAI,MAAM,oDAAoDA,IAAE,KAAK,QAAQ,EAAE,KAAK,EAAE;AAAE,MAAGA,IAAE,UAAQ,WAAS,EAAE,UAAQ,QAAQ,OAAM,IAAI,MAAM,wEAAwEA,IAAE,KAAK,mBAAmB,EAAE,KAAK,EAAE;AAAE,MAAI,IAAE,EAAC,GAAEA,KAAE,GAAE,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,aAAY,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAED,KAAE,MAAK,iBAAgB,OAAO,GAAE,IAAE,EAAE,GAAE,MAAK,iBAAgB,OAAO;AAAE,MAAGC,IAAE,SAAO,EAAE,OAAM,IAAI,MAAM,oEAAoEA,IAAE,IAAI,EAAE;AAAE,MAAG,EAAE,SAAO,EAAE,OAAM,IAAI,MAAM,qEAAqE,EAAE,IAAI,EAAE;AAAE,MAAI,IAAE,EAAC,IAAGA,KAAE,IAAG,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,gBAAe,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAED,KAAE,eAAc,GAAG,GAAE,IAAEC,IAAE;AAAM,MAAG,GAAG,CAAC,GAAE,EAAE,SAAOA,IAAE,KAAK,OAAM,IAAI,MAAM,+BAA+B,EAAE,MAAM,iBAAiBA,IAAE,IAAI,GAAG;AAAE,MAAG,EAAE,SAAOA,IAAE,MAAK;AAAC,QAAI,IAAEA,IAAE,MAAM,MAAM;AAAE,WAAK,EAAE,SAAO,EAAE,SAAQ,GAAE,QAAQ,CAAC;AAAE,IAAAA,MAAE,EAAEA,KAAE,CAAC;AAAA,EAAC;AAAC,MAAI,IAAEA,IAAE,OAAM,IAAE,MAAM,KAAK,CAAC;AAAE,WAAQ,IAAE,EAAE,SAAO,GAAE,KAAG,GAAE,IAAI,KAAG,EAAE,CAAC,MAAI,EAAE,CAAC,EAAE,GAAE,CAAC,IAAE;AAAA,WAAUA,IAAE,MAAM,CAAC,MAAI,EAAE,OAAM,IAAI,MAAM,mBAAmB,CAAC,6BAA6B,CAAC,IAAI;AAAE,MAAG,EAAE,IAAI,CAAC,GAAE,MAAI,IAAE,IAAE,IAAE,EAAE,EAAE,OAAO,OAAG,KAAG,CAAC,EAAE,WAAS,EAAE,QAAO,GAAGA,GAAC;AAAE,MAAI,IAAE,EAAC,GAAEA,IAAC,GAAE,IAAE,EAAC,MAAK,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,cAAa,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAIC,MAAE,EAAC,GAAE,EAAED,KAAE,KAAI,QAAO,SAAS,EAAC;AAAE,SAAO,EAAE,UAAU,IAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,OAAM,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,KAAGD,GAAC,GAAEC,MAAEA,OAAG,GAAG,CAAC;AAAE,MAAI,IAAE,EAAC,OAAMD,KAAE,OAAM,GAAE,OAAMC,IAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC,GAAE,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,aAAa;AAAE,MAAG,EAAE,KAAGC,KAAE,MAAI,uBAAuB,CAAC,wCAAwCA,GAAC,IAAI,GAAE,MAAIA,IAAE,QAAO,GAAG,EAAE,OAAM,GAAE,EAAE,KAAK;AAAE,MAAI,IAAE,EAAC,GAAE,EAAC,GAAE,IAAE,EAAC,cAAa,GAAE,cAAaA,IAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,cAAa,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,SAAO,GAAGA,KAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,WAAU,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAE,GAAE;AAAC,SAAO,GAAGA,KAAE,CAAC;AAAC;AAAC,IAAID,MAAG,EAAE,EAAC,WAAU,GAAE,CAAC;AAAE,SAAS,GAAGC,KAAE,GAAE;AAAC,SAAO,GAAGA,KAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,WAAU,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAE,GAAE;AAAC,SAAO,GAAGA,KAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,WAAU,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE,IAAE,QAAO,IAAE,CAAC,GAAE,CAAC,GAAE,GAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,UAAS,SAAS,GAAE,IAAE,EAAE,GAAE,UAAS,UAAS,SAAS,GAAE,IAAE,GAAE,IAAE;AAAG,IAAE,SAAO,MAAI,IAAE,MAAG,IAAE,EAAE,GAAE,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC,IAAG,EAAE,EAAE,SAAO,GAAE,MAAI,uDAAuD,EAAE,IAAI,GAAG,GAAE,EAAE,EAAE,SAAO,GAAE,MAAI,wDAAwD,EAAE,IAAI,GAAG,GAAE,GAAG,UAAS,GAAE,CAAC;AAAE,MAAI,IAAE,MAAI,SAAO,EAAE,MAAM,CAAC,IAAE,EAAE,MAAM,CAAC;AAAE,IAAE,MAAI,EAAE,MAAM,CAAC,GAAE,MAAI,oCAAoC,CAAC,uCAAuC,EAAE,MAAM,CAAC,CAAC,GAAG,GAAE,EAAE,GAAGC,KAAE,CAAC,GAAE,MAAI,uEAAuEA,GAAC,mBAAmB,CAAC,GAAG,GAAE,EAAE,GAAG,CAAC,GAAE,MAAI,yDAAyD,GAAE,EAAE,GAAGA,GAAC,GAAE,MAAI,mDAAmD;AAAE,MAAI,IAAE,EAAC,GAAE,GAAE,QAAO,EAAC,GAAE,IAAE,EAAC,SAAQA,KAAE,KAAI,GAAE,YAAW,GAAE,WAAU,GAAE,iBAAgB,EAAC,GAAE,IAAE,EAAE,UAAU,IAAG,GAAE,CAAC;AAAE,SAAO,IAAE,EAAE,GAAE,CAAC,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC,IAAE;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,SAAQ,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,IAAE,OAAM,IAAE,GAAE,GAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,QAAQ,GAAE,IAAE,EAAE,GAAE,UAAS,QAAQ,GAAE,IAAE,GAAE,IAAE;AAAG,IAAE,SAAO,MAAI,IAAE,MAAG,IAAE,EAAE,GAAE,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC,IAAG,EAAE,EAAE,SAAO,GAAE,MAAI,uDAAuD,EAAE,IAAI,GAAG,GAAE,EAAE,EAAE,SAAO,GAAE,MAAI,wDAAwD,EAAE,IAAI,GAAG,GAAE,GAAG,UAAS,GAAE,CAAC,GAAE,EAAE,EAAE,MAAM,CAAC,MAAI,EAAE,MAAM,CAAC,GAAE,MAAI,oCAAoC,EAAE,MAAM,CAAC,CAAC,uCAAuC,EAAE,MAAM,CAAC,CAAC,GAAG,GAAE,EAAE,GAAGC,KAAE,CAAC,GAAE,MAAI,oEAAoEA,GAAC,kBAAkB,CAAC,GAAG,GAAE,EAAE,GAAG,CAAC,GAAE,MAAI,yDAAyD,GAAE,EAAE,GAAGA,GAAC,GAAE,MAAI,kDAAkD,GAAE,EAAE,MAAI,OAAM,MAAI,sCAAsC,CAAC,uCAAuC;AAAE,MAAI,IAAE,EAAE,GAAE,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC,GAAE,IAAE,EAAE,GAAE,CAAC,EAAE,MAAM,CAAC,GAAE,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC,GAAE,IAAE,GAAG,GAAE,GAAE,CAAC,GAAEA,GAAC,GAAE,GAAE,QAAO,CAAC,GAAE,CAAC,GAAE,CAAC;AAAE,SAAO,IAAE,EAAE,GAAE,CAAC,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC,IAAE,EAAE,GAAE,CAAC,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,SAAQ,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE,IAAE,QAAO,GAAE;AAAC,IAAED,IAAE,WAAS,EAAE,MAAK,MAAI,sBAAsBA,IAAE,MAAM,qBAAqB,EAAE,IAAI,cAAc;AAAE,MAAI,IAAEA,KAAE,IAAE,GAAE,IAAE;AAAG,IAAE,SAAO,MAAI,IAAE,MAAG,IAAE,EAAE,GAAE,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC,GAAE,IAAE,CAAC,GAAEA,IAAE,CAAC,GAAEA,IAAE,CAAC,GAAEA,IAAE,CAAC,CAAC,IAAG,EAAE,EAAE,WAAS,GAAE,MAAI,qEAAqE,EAAE,MAAM,GAAG,GAAE,EAAE,EAAE,SAAO,GAAE,MAAI,4DAA4D,EAAE,IAAI,EAAE,GAAE,EAAEC,IAAE,SAAO,GAAE,MAAI,gEAAgEA,IAAE,IAAI,EAAE;AAAE,MAAI,IAAE,MAAI,SAAO,EAAE,CAAC,IAAE,EAAE,CAAC,GAAE,IAAE,MAAI,SAAO,EAAE,MAAM,CAAC,IAAE,EAAE,MAAM,CAAC;AAAE,IAAE,MAAIA,IAAE,MAAM,CAAC,GAAE,MAAI,4CAA4C,CAAC,uCAAuCA,IAAE,MAAM,CAAC,CAAC,GAAG,GAAE,EAAE,MAAIA,IAAE,MAAM,CAAC,GAAE,MAAI,6CAA6C,CAAC,wCAAwCA,IAAE,MAAM,CAAC,CAAC,GAAG,GAAE,GAAG,kBAAiB,GAAE,CAAC;AAAE,MAAI,IAAE,EAAC,IAAG,GAAE,QAAOA,IAAC,GAAE,IAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,YAAW,GAAE,iBAAgB,GAAE,YAAW,EAAC,GAAE,IAAE,EAAE,UAAU,IAAG,GAAE,CAAC;AAAE,SAAO,IAAE,EAAE,GAAE,CAAC,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC,IAAE;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,sBAAqB,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,iBAAiB,GAAE,IAAE,EAAE,GAAE,UAAS,iBAAiB;AAAE,SAAO,GAAGC,KAAE,GAAE,GAAE,GAAE,GAAE,QAAO,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,kBAAiB,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,IAAE,SAAQ,IAAE,CAAC,GAAE,GAAE,CAAC,GAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,QAAQ,GAAE,IAAE,EAAE,GAAE,UAAS,QAAQ,GAAE,IAAE,GAAE,IAAE;AAAG,IAAE,SAAO,MAAI,IAAE,MAAG,IAAE,EAAE,GAAE,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC,IAAG,EAAE,EAAE,SAAO,GAAE,MAAI,uDAAuD,EAAE,IAAI,GAAG,GAAE,EAAE,EAAE,SAAO,GAAE,MAAI,wDAAwD,EAAE,IAAI,GAAG,GAAE,EAAE,EAAE,MAAM,CAAC,MAAI,EAAE,MAAM,CAAC,GAAE,MAAI,oCAAoC,EAAE,MAAM,CAAC,CAAC,uCAAuC,EAAE,MAAM,CAAC,CAAC,GAAG,GAAE,EAAE,GAAGC,KAAE,CAAC,GAAE,MAAI,uEAAuEA,GAAC,mBAAmB,CAAC,GAAG,GAAE,EAAE,MAAI,SAAQ,MAAI,sCAAsC,CAAC,yCAAyC,GAAE,EAAE,GAAG,CAAC,GAAE,MAAI,yDAAyD,GAAE,EAAE,GAAGA,GAAC,GAAE,MAAI,mDAAmD;AAAE,MAAI,IAAE,EAAC,GAAE,GAAE,QAAO,EAAC,GAAE,IAAE,EAAC,SAAQA,KAAE,KAAI,GAAE,YAAW,GAAE,WAAU,EAAC,GAAE,IAAE,EAAE,UAAU,IAAG,GAAE,CAAC;AAAE,SAAO,IAAE,EAAE,GAAE,CAAC,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC,IAAE;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,SAAQ,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE;AAAC,IAAED,IAAE,WAAS,EAAE,MAAK,MAAI,sBAAsBA,IAAE,MAAM,qBAAqB,EAAE,IAAI,cAAc;AAAE,MAAI,IAAEA,KAAE,IAAE,GAAE,IAAE;AAAG,IAAE,SAAO,MAAI,IAAE,MAAG,IAAE,EAAE,GAAE,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC,GAAE,IAAE,CAAC,GAAEA,IAAE,CAAC,GAAEA,IAAE,CAAC,GAAEA,IAAE,CAAC,GAAEA,IAAE,CAAC,CAAC;AAAG,MAAI,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,MAAM,CAAC;AAAE,IAAE,EAAE,WAAS,GAAE,MAAI,qEAAqE,EAAE,MAAM,GAAG,GAAE,EAAE,EAAE,SAAO,GAAE,MAAI,4DAA4D,EAAE,IAAI,EAAE,GAAE,EAAEC,IAAE,SAAO,GAAE,MAAI,gEAAgEA,IAAE,IAAI,EAAE,GAAE,EAAE,MAAIA,IAAE,MAAM,CAAC,GAAE,MAAI,4CAA4C,CAAC,uCAAuCA,IAAE,MAAM,CAAC,CAAC,GAAG,GAAE,EAAE,MAAIA,IAAE,MAAM,CAAC,GAAE,MAAI,6CAA6C,CAAC,wCAAwCA,IAAE,MAAM,CAAC,CAAC,GAAG;AAAE,MAAI,IAAE,EAAC,IAAG,GAAE,QAAOA,IAAC,GAAE,IAAE,EAAC,KAAI,GAAE,SAAQ,GAAE,YAAW,EAAC,GAAE,IAAE,EAAE,UAAU,IAAG,GAAE,CAAC;AAAE,SAAO,IAAE,EAAE,GAAE,CAAC,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC,IAAE;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,sBAAqB,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,iBAAiB,GAAE,IAAE,EAAE,GAAE,UAAS,iBAAiB;AAAE,SAAO,GAAGC,KAAE,GAAE,GAAE,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,kBAAiB,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAIC,MAAE,EAAC,GAAE,EAAED,KAAE,KAAI,OAAM,SAAS,EAAC;AAAE,SAAO,EAAE,UAAU,IAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,MAAK,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAIC,MAAE,EAAC,GAAE,EAAED,KAAE,KAAI,QAAO,SAAS,EAAC;AAAE,SAAO,EAAE,UAAU,IAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,OAAM,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,IAAE,GAAEC,MAAE,OAAG,IAAE,OAAG;AAAC,MAAI,IAAE,EAAC,GAAE,EAAED,KAAE,KAAI,SAAS,EAAC,GAAE,IAAE,EAAC,MAAK,GAAE,WAAUC,KAAE,SAAQ,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,UAAS,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,IAAE,GAAEC,MAAE,OAAG,IAAE,OAAG;AAAC,MAAI,IAAE,EAAC,GAAE,EAAED,KAAE,KAAI,QAAQ,EAAC,GAAE,IAAE,EAAC,MAAK,GAAE,WAAUC,KAAE,SAAQ,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,SAAQ,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,IAAE,OAAG;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,eAAe,GAAE,IAAE,EAAE,GAAE,WAAU,eAAe;AAAE,IAAE,EAAE,UAAQ,SAAQ,MAAI,8DAA8D,EAAE,KAAK,EAAE,GAAE,EAAE,EAAE,QAAM,GAAE,MAAI,sEAAsE,EAAE,IAAI,GAAG,GAAE,EAAEC,OAAG,GAAE,MAAI,sCAAsCA,GAAC,GAAG,GAAE,EAAE,EAAE,SAAO,EAAE,QAAM,EAAE,SAAO,GAAE,MAAI,+FAA+F,EAAE,KAAK,oBAAoB,EAAE,KAAK,GAAG;AAAE,MAAI,IAAE,EAAC,GAAE,GAAE,SAAQ,EAAC,GAAE,IAAE,EAAC,MAAKA,KAAE,cAAa,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,gBAAe,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,MAAE,QAAO;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,gBAAe,SAAS,GAAE,IAAEC,QAAI,SAAO,EAAE,MAAM,CAAC,IAAE,EAAE,MAAM,CAAC,GAAE,IAAEA,QAAI,SAAO,EAAE,MAAM,CAAC,IAAE,EAAE,MAAM,CAAC,GAAE,IAAEA,QAAI,SAAO,EAAE,MAAM,CAAC,IAAE,EAAE,MAAM,CAAC;AAAE,IAAE,IAAE,GAAE,MAAI,sDAAsD,CAAC,EAAE,GAAE,EAAE,IAAE,KAAG,GAAE,MAAI;AAAA,MACltb,CAAC,QAAQ,CAAC;AAAA,MACV,EAAE,KAAK,EAAE,GAAE,EAAE,IAAE,KAAG,GAAE,MAAI;AAAA,MACxB,CAAC,QAAQ,CAAC;AAAA,UACN,EAAE,KAAK,EAAE,GAAE,EAAE,KAAG,IAAE,OAAK,GAAE,MAAI,8CAA8C,IAAE,CAAC,WAAW,CAAC,sCAAsC,EAAE,KAAK,EAAE;AAAE,MAAI,IAAE,EAAC,GAAE,EAAC,GAAE,IAAE,EAAC,WAAU,GAAE,YAAWA,IAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,eAAc,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,IAAE,QAAO,IAAE,CAAC,GAAE,CAAC,GAAE,GAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,mBAAkB,SAAS,GAAE,IAAE,EAAE,GAAE,UAAS,mBAAkB,SAAS,GAAE,IAAE,GAAE,IAAE;AAAG,IAAE,SAAO,MAAI,IAAE,MAAG,IAAE,EAAE,GAAE,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC,IAAG,EAAE,EAAE,SAAO,GAAE,MAAI,gEAAgE,EAAE,IAAI,GAAG,GAAE,EAAE,EAAE,SAAO,GAAE,MAAI,iEAAiE,EAAE,IAAI,GAAG;AAAE,MAAI,IAAE,MAAI,SAAO,EAAE,MAAM,CAAC,IAAE,EAAE,MAAM,CAAC;AAAE,IAAE,MAAI,EAAE,MAAM,CAAC,GAAE,MAAI,uDAAuD,CAAC,mDAAmD,EAAE,MAAM,CAAC,CAAC,GAAG,GAAE,GAAG,mBAAkB,GAAE,CAAC;AAAE,MAAI,IAAE,EAAC,GAAE,GAAE,QAAO,EAAC,GAAE,IAAE,EAAC,SAAQC,KAAE,KAAI,GAAE,YAAW,GAAE,WAAU,GAAE,iBAAgB,EAAC,GAAE,IAAE,EAAE,UAAU,IAAG,GAAE,CAAC;AAAE,SAAO,IAAE,EAAE,GAAE,CAAC,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC,IAAE;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,kBAAiB,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAIC,MAAE,EAAC,GAAE,EAAED,KAAE,KAAI,MAAM,EAAC;AAAE,SAAO,EAAE,UAAU,IAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,OAAM,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,IAAE,CAAC,GAAE,CAAC,GAAE,IAAE,QAAO;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,YAAY,GAAE,IAAE,EAAE,GAAE,UAAS,YAAY;AAAE,IAAE,EAAE,SAAO,KAAG,EAAE,SAAO,GAAE,MAAI,gEAAgE,EAAE,IAAI,GAAG,GAAE,EAAE,EAAE,SAAO,GAAE,MAAI,4DAA4D,EAAE,IAAI,GAAG,GAAE,EAAE,MAAI,QAAO,MAAI,gFAAgF,CAAC,EAAE;AAAE,MAAI,IAAE,GAAE,IAAE;AAAG,IAAE,SAAO,MAAI,IAAE,EAAE,GAAE,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC,GAAE,IAAE,OAAI,EAAE,EAAE,MAAM,CAAC,MAAI,EAAE,MAAM,CAAC,GAAE,MAAI,oEAAoE,EAAE,MAAM,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,EAAE;AAAE,MAAI,IAAE,EAAC,GAAE,GAAE,QAAO,EAAC,GAAE,IAAE,EAAC,SAAQC,KAAE,KAAI,GAAE,WAAU,EAAC,GAAE,IAAE,EAAE,UAAU,IAAG,GAAE,CAAC;AAAE,SAAO,IAAE,EAAE,GAAE,CAAC,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC,IAAE;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,aAAY,GAAE,CAAC;AAAE,IAAI,KAAG,CAAC;AAAE,GAAG,IAAG,EAAC,4BAA2B,MAAI,IAAG,kBAAiB,MAAI,IAAG,kBAAiB,MAAI,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAED,IAAE,QAAO,IAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAEC,KAAE,KAAI;AAAC,QAAI,IAAEA,MAAE,IAAE,GAAE,IAAED,IAAE,CAAC,KAAG;AAAE,KAAC,EAAE,EAAE,SAAO,IAAE,CAAC,KAAG,KAAG,KAAG,MAAI,KAAG,EAAE,QAAQ,CAAC;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAIC,MAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,KAAI;AAAC,QAAI,IAAED,IAAEA,IAAE,SAAO,IAAE,CAAC,GAAE,IAAE,EAAE,SAAO,IAAE,GAAE,IAAE,EAAE,CAAC;AAAE,KAAC,KAAG,QAAM,MAAI,KAAG,IAAE,MAAIC,IAAE,QAAQ,CAAC;AAAA,EAAC;AAAC,SAAOA;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,KAAK,IAAID,IAAE,QAAO,EAAE,MAAM,GAAE,IAAE,IAAI,MAAMC,GAAC;AAAE,WAAQ,IAAE,GAAE,IAAEA,KAAE,KAAI;AAAC,QAAI,IAAED,IAAEA,IAAE,SAAO,IAAE,CAAC;AAAE,SAAG,SAAO,IAAE;AAAG,QAAI,IAAE,EAAE,EAAE,SAAO,IAAE,CAAC;AAAE,QAAG,KAAG,SAAO,IAAE,IAAG,MAAI,EAAE,GAAEC,MAAE,IAAE,CAAC,IAAE;AAAA,aAAU,MAAI,EAAE,GAAEA,MAAE,IAAE,CAAC,IAAE;AAAA,aAAU,MAAI,GAAE;AAAC,UAAI,IAAE,wDAAwDD,GAAC,QAAQ,CAAC;AAAI,YAAM,MAAM,CAAC;AAAA,IAAC,MAAM,GAAEC,MAAE,IAAE,CAAC,IAAE;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAED,KAAE,KAAI,SAAQ,mBAAmB,GAAE,IAAE,EAAE,GAAE,KAAI,SAAQ,mBAAmB;AAAE,GAACC,KAAE,CAAC,IAAE,GAAGA,KAAE,CAAC,GAAE,GAAGA,IAAE,OAAM,EAAE,KAAK;AAAE,MAAI,IAAE,EAAC,GAAEA,KAAE,GAAE,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,QAAO,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,EAAE,GAAE,KAAI,OAAO,GAAE,IAAE,EAAEA,KAAE,KAAI,OAAO,GAAE,IAAE,EAAED,KAAE,aAAY,SAAQ,MAAM,GAAE,IAAE,GAAG,GAAG,EAAE,OAAM,EAAE,KAAK,GAAE,EAAE,KAAK,GAAE,IAAE,GAAG,GAAE,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC,GAAE,IAAE,EAAC,WAAU,GAAE,GAAE,GAAE,GAAE,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,QAAO,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAE;AAAC,MAAIC,MAAE,EAAC,GAAE,EAAED,KAAE,KAAI,WAAW,EAAC;AAAE,SAAO,EAAE,UAAU,IAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,YAAW,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAED,KAAE,KAAI,KAAK,GAAE,IAAE,EAAE,GAAE,KAAI,KAAK;AAAE,GAACC,KAAE,CAAC,IAAE,GAAGA,KAAE,CAAC;AAAE,MAAI,IAAE,GAAGA,KAAE,CAAC,GAAE,IAAE,GAAG,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC;AAAE,SAAO,GAAG,GAAE,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,WAAU,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAED,KAAE,MAAK,KAAK,GAAE,IAAE,EAAE,GAAE,MAAK,KAAK;AAAE,KAAGC,IAAE,SAAO,KAAGA,IAAE,SAAO,OAAK,EAAE,SAAO,KAAG,EAAE,SAAO,IAAG,MAAI,+DAA+DA,IAAE,IAAI,QAAQ,EAAE,IAAI,GAAG;AAAE,MAAI,IAAEA,IAAE,SAAO,IAAEA,IAAE,OAAKA,IAAE,MAAM,CAAC,GAAE,IAAE,EAAE,SAAO,IAAE,EAAE,OAAK,EAAE,MAAM,CAAC;AAAE,MAAG,EAAE,MAAI,GAAE,MAAI,gEAAgE,CAAC,QAAQ,CAAC,GAAG,GAAEA,IAAE,SAAO,KAAG,EAAE,SAAO,GAAE;AAAC,QAAI,IAAE,EAAEA,KAAE,CAAC,GAAE,EAAE,CAAC,GAAE,IAAE,EAAE,GAAE,CAAC,IAAG,CAAC,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC;AAAE,WAAO,EAAE,GAAE,CAAC,CAAC;AAAA,EAAC,WAASA,IAAE,SAAO,KAAG,EAAE,SAAO,GAAE;AAAC,QAAI,IAAE,EAAEA,KAAE,CAAC,GAAE,EAAE,CAAC,GAAE,IAAE,EAAE,GAAE,CAAC,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC;AAAE,WAAO,EAAE,GAAE,CAAC,EAAE,IAAI,CAAC;AAAA,EAAC,WAASA,IAAE,SAAO,KAAG,EAAE,SAAO,GAAE;AAAC,QAAI,IAAE,EAAE,GAAE,CAAC,IAAG,CAAC,CAAC,GAAE,IAAE,GAAGA,KAAE,CAAC;AAAE,WAAO,EAAE,GAAE,CAAC,EAAE,IAAI,CAAC;AAAA,EAAC,OAAK;AAAC,QAAI,IAAE,EAAE,GAAE,CAAC,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC;AAAE,WAAO,GAAGA,KAAE,CAAC;AAAA,EAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,MAAK,GAAE,CAAC;AAAE,SAAS,GAAGD,QAAK,GAAE;AAAC,MAAIC,MAAE,EAAE,IAAI,CAAC,GAAE,MAAI,EAAE,GAAE,UAAU,CAAC,IAAG,QAAQ,CAAC,GAAE,IAAE,EAAC,UAASD,IAAC;AAAE,SAAO,EAAE,UAAU,IAAGC,KAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,SAAQ,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAIC,MAAE,EAAC,GAAE,EAAED,KAAE,KAAI,OAAM,SAAS,EAAC;AAAE,SAAO,EAAE,UAAU,IAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,MAAK,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAED,KAAE,KAAI,eAAc,mBAAmB;AAAE,MAAG,CAAC,GAAGC,IAAE,OAAM,CAAC,EAAE,OAAM,IAAI,MAAM,gCAAgCA,IAAE,KAAK,0CAA0C,CAAC,EAAE;AAAE,SAAOD;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,cAAa,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAE;AAAC,MAAI,IAAE,EAAEA,KAAE,KAAI,KAAK;AAAE,IAAE,EAAE,UAAQ,WAAS,EAAE,UAAQ,WAAU,MAAI,2CAA2C,GAAE,EAAE,UAAQ,YAAU,IAAE,GAAG,GAAE,SAAS;AAAG,MAAIC,MAAE,EAAC,GAAE,EAAC;AAAE,SAAO,EAAE,UAAU,IAAGA,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,MAAK,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,WAAQC,MAAE,GAAEA,MAAED,IAAE,QAAO,EAAEC,IAAE,KAAGD,IAAEA,IAAE,SAAOC,MAAE,CAAC,MAAI,IAAE,IAAEA,IAAE,QAAM;AAAG,SAAM;AAAE;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAED,IAAE,SAAO,EAAE,QAAO,IAAE,CAAC,GAAE,IAAE,GAAE,IAAE;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,IAAI,CAAAC,IAAE,QAAQ,CAAC,MAAI,KAAG,EAAE,KAAKD,IAAE,GAAG,CAAC,IAAE,EAAE,KAAK,EAAE,GAAG,CAAC;AAAE,SAAO;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAIC,MAAE,CAAC,GAAE,IAAED,IAAE;AAAO,WAAQ,IAAE,GAAE,IAAE,GAAE,IAAI,GAAE,QAAQ,CAAC,MAAI,MAAIC,IAAE,KAAKD,IAAE,CAAC,CAAC;AAAE,MAAI,IAAE,EAAE,IAAI,OAAGA,IAAE,CAAC,CAAC;AAAE,SAAM,CAACC,KAAE,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAE,IAAI,OAAG,CAAC;AAAE,SAAO,GAAGD,KAAEC,KAAE,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,IAAE,GAAG,GAAEA,GAAC,GAAE,MAAI,GAAGD,GAAC,oDAAoD,CAAC,aAAaC,GAAC,SAAS;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAG,GAAGA,KAAE,CAAC,EAAE,QAAO;AAAK,MAAIC,MAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,EAAE,CAAAD,IAAE,QAAQ,CAAC,MAAI,MAAIC,IAAE,KAAK,CAAC;AAAE,SAAOD,IAAE,QAAQ,OAAGC,IAAE,KAAK,CAAC,CAAC,GAAEA;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,SAAOA,IAAE,IAAI,CAAC,GAAEC,QAAI,CAACA,KAAE,CAAC,CAAC,EAAE,KAAK,CAAC,GAAEA,QAAI,EAAE,CAAC,IAAEA,IAAE,CAAC,CAAC,EAAE,IAAI,OAAG,EAAE,CAAC,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,CAAC;AAAE,WAAQ,IAAE,IAAED,KAAE,IAAE,GAAE,EAAE,EAAE,CAAAC,IAAE,KAAK,CAAC;AAAE,SAAOA;AAAC;AAAC,SAAS,GAAGD,KAAE,IAAE,MAAKC,MAAE,OAAG;AAAC,MAAI,IAAE,EAAC,GAAE,EAAED,KAAE,KAAI,KAAK,EAAC,GAAE,IAAE,EAAC,kBAAiB,GAAE,UAASC,IAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,MAAK,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,IAAE,MAAKC,MAAE,OAAG;AAAC,MAAI,IAAE,EAAC,GAAE,EAAED,KAAE,KAAI,KAAK,EAAC,GAAE,IAAE,EAAC,MAAK,GAAE,UAASC,IAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,MAAK,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAED,KAAE,QAAO,KAAK,GAAE,IAAE,EAAE,GAAE,OAAM,KAAK;AAAE,GAACC,KAAE,CAAC,IAAE,GAAGA,KAAE,CAAC;AAAE,MAAI,IAAE,EAAC,GAAEA,KAAE,GAAE,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,MAAK,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,OAAI,GAAGA,GAAC,KAAG,MAAI,YAAU,MAAM,QAAQA,GAAC,MAAI,MAAI,YAAY,OAAM,IAAI,MAAM,gFAAgF;AAAE,MAAG,MAAI,YAAU,GAAGA,GAAC,KAAG,EAAEA,eAAa,YAAY,OAAM,IAAI,MAAM,2EAA2E;AAAE,SAAO,GAAGA,KAAE,CAAC,GAAE,CAAC,GAAE,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAIC,MAAE,EAAC,GAAE,EAAED,KAAE,KAAI,QAAO,SAAS,EAAC;AAAE,SAAO,EAAE,UAAU,IAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,OAAM,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAI,IAAE,EAAEA,KAAE,KAAI,QAAQ,GAAEC,MAAE,CAAC;AAAE,SAAO,EAAE,UAAU,UAAS,EAAC,GAAE,EAAC,GAAEA,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,SAAQ,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,IAAE,MAAKC,MAAE,OAAG;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,KAAK;AAAE,IAAE,UAAQ,WAAS,IAAE,GAAG,GAAE,OAAO;AAAG,MAAI,IAAE,EAAC,GAAE,EAAC,GAAE,IAAE,EAAC,MAAK,GAAE,UAASC,IAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,MAAK,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,IAAE,aAAYC,MAAE,MAAK,IAAE,OAAG;AAAC,EAAAD,MAAE,EAAEA,KAAE,KAAI,MAAM;AAAE,MAAI,IAAE,GAAGA,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE;AAAM,MAAG,GAAE;AAAC,QAAI,IAAE,GAAGA,KAAED,IAAE,KAAK;AAAE,QAAE,GAAG,EAAE,OAAM,CAAC;AAAA,EAAC;AAAC,SAAO,EAAE,GAAE,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,MAAE,MAAK;AAAC,MAAGD,IAAE,SAAO,EAAE,QAAO,GAAGA,GAAC;AAAE,MAAGA,IAAE,SAAO,KAAGC,QAAI,KAAK,QAAO,GAAG,EAAED,KAAE,CAAC,EAAE,CAAC,GAAE,GAAEC,GAAC;AAAE,MAAGD,IAAE,SAAO,KAAG,OAAOC,OAAG,YAAU,MAAM,QAAQA,GAAC,KAAGA,IAAE,WAAS,GAAE;AAAC,QAAG,MAAI,EAAE,QAAO,GAAG,GAAGD,GAAC,GAAEC,GAAC;AAAE,QAAG,MAAI,IAAE,EAAE,QAAO,GAAG,GAAGD,GAAC,GAAEC,GAAC;AAAE,QAAG,MAAI,KAAG,EAAE,QAAO,GAAG,GAAGD,GAAC,GAAEC,GAAC;AAAE,QAAG,MAAI,eAAa,MAAI,EAAE,QAAO,GAAG,GAAG,GAAG,GAAGD,GAAC,GAAE,GAAG,GAAE,OAAO,CAAC,GAAEC,GAAC,CAAC;AAAE,UAAM,IAAI,MAAM,qCAAqC,CAAC,EAAE;AAAA,EAAC;AAAC,MAAG,MAAM,QAAQA,GAAC,KAAGA,IAAE,WAAS,GAAE;AAAC,QAAG,MAAI,EAAE,QAAO,GAAG,GAAG,GAAGD,GAAC,GAAEC,IAAE,CAAC,CAAC,GAAEA,IAAE,CAAC,IAAE,CAAC;AAAE,QAAG,MAAI,IAAE,EAAE,QAAO,GAAG,GAAG,GAAGD,GAAC,GAAEC,IAAE,CAAC,CAAC,GAAEA,IAAE,CAAC,CAAC;AAAE,QAAG,MAAI,KAAG,EAAE,QAAO,GAAG,GAAG,GAAGD,GAAC,GAAEC,IAAE,CAAC,CAAC,GAAEA,IAAE,CAAC,CAAC;AAAE,QAAG,MAAI,SAAO,MAAI,YAAY,QAAO,GAAG,GAAG,GAAGD,GAAC,GAAEC,GAAC,CAAC;AAAE,UAAM,IAAI,MAAM,qCAAqC,CAAC,EAAE;AAAA,EAAC;AAAC,QAAM,IAAI,MAAM,gCAAgCA,GAAC,EAAE;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,OAAM,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,IAAE,MAAKC,MAAE,OAAG;AAAC,SAAO,GAAGD,KAAE,aAAY,GAAEC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,gBAAe,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAIC,MAAE,EAAC,GAAE,EAAED,KAAE,KAAI,KAAK,EAAC;AAAE,SAAO,EAAE,UAAU,IAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,MAAK,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,IAAE,GAAE;AAAC,MAAIC,MAAE,EAAED,KAAE,KAAI,cAAa,mBAAmB;AAAE,IAAE,KAAGC,IAAE,MAAK,MAAI,oCAAoC;AAAE,MAAI,IAAE,EAAC,OAAMA,IAAC,GAAE,IAAE,EAAC,KAAI,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,aAAY,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAIC,MAAE,EAAC,GAAE,EAAED,KAAE,KAAI,OAAO,EAAC;AAAE,SAAO,EAAE,UAAU,IAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,QAAO,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAED,KAAE,KAAI,QAAO,mBAAmB;AAAE,IAAEC,IAAE,SAAO,EAAE,QAAO,MAAI,qCAAqCA,IAAE,IAAI,8BAA8B,CAAC,GAAG;AAAE,MAAI,IAAE,EAAC,GAAEA,IAAC,GAAE,IAAE,EAAC,MAAK,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,OAAM,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,IAAE,WAAU;AAAC,OAAG,SAAO,IAAED;AAAG,MAAI,IAAE,GAAG,CAACA,KAAE,CAAC,GAAE,CAAC,GAAE,IAAEA,OAAG,IAAEA,MAAE;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,EAAE,GAAE,IAAI,GAAE,GAAE,CAAC;AAAE,MAAI,IAAE,EAAE,EAAE,SAAS,GAAE,CAACA,KAAE,CAAC,CAAC;AAAE,MAAGC,OAAG,KAAK,QAAO;AAAE,MAAGA,IAAE,WAAS,EAAE,QAAO,GAAG,GAAG,GAAE,CAAC,GAAE,CAACA,IAAE,CAAC,GAAE,GAAE,CAAC,CAAC;AAAE,MAAGA,IAAE,WAAS,EAAE,QAAO,GAAG,GAAG,GAAG,GAAE,CAAC,GAAE,CAAC,GAAE,CAACA,IAAE,CAAC,GAAEA,IAAE,CAAC,GAAE,GAAE,CAAC,CAAC;AAAE,MAAGA,IAAE,WAAS,EAAE,QAAO,GAAG,GAAG,GAAG,GAAG,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAACA,IAAE,CAAC,GAAEA,IAAE,CAAC,GAAEA,IAAE,CAAC,GAAE,GAAE,CAAC,CAAC;AAAE,QAAM,IAAI,MAAM,qEAAqEA,IAAE,MAAM,IAAI;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,MAAK,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAIC,MAAE,EAAC,GAAE,EAAED,KAAE,KAAI,SAAQ,SAAS,EAAC;AAAE,SAAO,EAAE,UAAU,IAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,QAAO,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,MAAE,GAAE,IAAE,GAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,QAAQ,GAAE,IAAE,EAAE,GAAE,WAAU,UAAS,OAAO,GAAE,IAAE,EAAC,GAAE,GAAE,SAAQ,EAAC,GAAE,IAAE,EAAC,MAAKC,KAAE,WAAU,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,SAAQ,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAED,KAAE,KAAI,WAAU,mBAAmB,GAAE,IAAE,EAAE,GAAE,KAAI,WAAU,mBAAmB;AAAE,GAACC,KAAE,CAAC,IAAE,GAAGA,KAAE,CAAC,GAAE,GAAGA,IAAE,OAAM,EAAE,KAAK;AAAE,MAAI,IAAE,EAAC,GAAEA,KAAE,GAAE,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,UAAS,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAED,KAAE,KAAI,gBAAe,mBAAmB,GAAE,IAAE,EAAE,GAAE,KAAI,gBAAe,mBAAmB;AAAE,GAACC,KAAE,CAAC,IAAE,GAAGA,KAAE,CAAC,GAAE,GAAGA,IAAE,OAAM,EAAE,KAAK;AAAE,MAAI,IAAE,EAAC,GAAEA,KAAE,GAAE,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,eAAc,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAIC,MAAE,EAAC,OAAM,EAAED,KAAE,SAAQ,MAAM,EAAC;AAAE,SAAO,EAAE,UAAU,IAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,OAAM,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAIC,MAAE,EAAC,GAAE,EAAED,KAAE,KAAI,UAAU,EAAC;AAAE,SAAO,EAAE,UAAU,IAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,WAAU,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAIC,MAAE,EAAC,GAAE,EAAED,KAAE,KAAI,OAAO,EAAC;AAAE,SAAO,EAAE,UAAU,IAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,QAAO,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAIC,MAAE,EAAC,GAAE,EAAED,KAAE,KAAI,OAAO,EAAC;AAAE,SAAO,EAAE,UAAU,IAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,QAAO,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,IAAE,KAAG;AAAC,MAAI,IAAE,EAAC,GAAE,EAAEA,KAAE,KAAI,WAAW,EAAC,GAAE,IAAE,EAAC,OAAM,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,YAAW,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAED,KAAE,KAAI,QAAO,mBAAmB,GAAE,IAAE,EAAE,GAAE,KAAI,QAAO,mBAAmB;AAAE,GAACC,KAAE,CAAC,IAAE,GAAGA,KAAE,CAAC,GAAE,GAAGA,IAAE,OAAM,EAAE,KAAK;AAAE,MAAI,IAAE,EAAC,GAAEA,KAAE,GAAE,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,OAAM,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAED,KAAE,KAAI,aAAY,mBAAmB,GAAE,IAAE,EAAE,GAAE,KAAI,aAAY,mBAAmB;AAAE,GAACC,KAAE,CAAC,IAAE,GAAGA,KAAE,CAAC,GAAE,GAAGA,IAAE,OAAM,EAAE,KAAK;AAAE,MAAI,IAAE,EAAC,GAAEA,KAAE,GAAE,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,YAAW,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAGA,OAAG,EAAE,OAAM,IAAI,MAAM,0CAA0C;AAAE,MAAI,IAAE,EAAC,OAAMD,KAAE,MAAK,GAAE,KAAIC,IAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC,GAAE,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,IAAE,GAAEC,MAAE,GAAE,IAAE,GAAE,IAAE,KAAG;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,4BAA4B;AAAE,IAAE,EAAE,SAAO,KAAG,EAAE,SAAO,GAAE,MAAI;AAAA,sBACjlU,EAAE,IAAI,GAAG,GAAE,EAAE,GAAG,CAAC,GAAE,MAAI,2FAA2F,CAAC,GAAG;AAAE,MAAI,IAAE,GAAE,IAAE;AAAG,IAAE,SAAO,MAAI,IAAE,MAAG,IAAE,EAAE,GAAE,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC;AAAG,MAAI,IAAE,EAAC,GAAE,EAAC,GAAE,IAAE,EAAC,aAAY,GAAE,MAAKC,KAAE,OAAM,GAAE,MAAK,EAAC,GAAE,IAAE,EAAE,UAAU,IAAG,GAAE,CAAC;AAAE,SAAO,IAAE,EAAE,GAAE,CAAC,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC,IAAE;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,6BAA4B,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAIC,MAAE,EAAC,GAAE,EAAED,KAAE,KAAI,OAAM,SAAS,EAAC;AAAE,SAAO,EAAE,UAAU,IAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,MAAK,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAIC,MAAE,EAAC,GAAE,EAAED,KAAE,KAAI,OAAO,EAAC;AAAE,SAAO,EAAE,UAAU,IAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,QAAO,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,SAAO,EAAE,GAAGA,GAAC,GAAE,MAAI,4CAA4C,GAAE,CAAC,GAAEC,QAAI;AAAC,QAAI,IAAE,EAAE,GAAE,KAAI,WAAU,mBAAmB,GAAE,IAAEA,OAAG,OAAK,EAAEA,KAAE,MAAK,SAAS,IAAE;AAAK,WAAO,EAAE,KAAK,MAAI;AAAC,UAAG,EAAC,OAAM,GAAE,OAAM,EAAC,IAAE,EAAE,UAAU,MAAID,IAAE,CAAC,GAAE,CAAC,CAAC,GAAE,CAAC;AAAE,aAAO,KAAG,QAAM,GAAG,EAAE,OAAM,EAAE,OAAM,gFAAgF,GAAE,GAAG,CAAC,GAAE,EAAE,CAAC;AAAA,IAAC,CAAC;AAAA,EAAC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAO,EAAE,GAAGA,GAAC,GAAE,MAAI,6CAA6C,GAAE,CAAC,GAAEC,QAAI;AAAC,MAAE,MAAM,QAAQ,CAAC,GAAE,MAAI,kFAAkF;AAAE,QAAI,IAAE,GAAG,GAAE,QAAO,YAAW,mBAAmB,GAAE,IAAEA,OAAG,OAAK,EAAEA,KAAE,MAAK,UAAU,IAAE;AAAK,WAAO,EAAE,KAAK,MAAI;AAAC,UAAG,EAAC,OAAM,GAAE,OAAM,EAAC,IAAE,EAAE,UAAU,MAAID,IAAE,GAAG,CAAC,GAAE,GAAE,CAAC;AAAE,aAAO,KAAG,QAAM,GAAG,EAAE,OAAM,EAAE,OAAM,+FAA+F,GAAE,GAAG,CAAC,GAAE;AAAA,IAAC,CAAC;AAAA,EAAC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAO,EAAE,GAAGA,GAAC,GAAE,MAAI,oDAAoD,GAAE,CAAC,GAAEC,QAAI;AAAC,MAAE,aAAa,IAAG,MAAI,qDAAqD,GAAE,EAAEA,OAAG,QAAMA,eAAa,IAAG,MAAI,0DAA0D;AAAE,QAAG,EAAC,OAAM,GAAE,OAAM,EAAC,IAAE,EAAE,UAAU,MAAID,IAAE,CAAC,GAAE,CAAC,CAAC,GAAEC,GAAC;AAAE,WAAO,GAAG,CAAC,GAAE,EAAC,MAAK,EAAE,CAAC,GAAE,OAAM,EAAC;AAAA,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,SAAO,EAAE,GAAGA,GAAC,GAAE,MAAI,qDAAqD,GAAE,CAAC,GAAEC,QAAI;AAAC,MAAE,MAAM,QAAQ,CAAC,KAAG,EAAE,MAAM,OAAG,aAAa,EAAE,GAAE,MAAI,oEAAoE,GAAE,EAAEA,OAAG,QAAMA,eAAa,IAAG,MAAI,8DAA8D;AAAE,QAAI,IAAE,EAAE,UAAU,MAAID,IAAE,GAAG,CAAC,GAAE,GAAEC,GAAC;AAAE,WAAOA,OAAG,QAAM,GAAG,EAAE,MAAM,OAAMA,IAAE,OAAM,uGAAuG,GAAE,GAAG,EAAE,KAAK,GAAE;AAAA,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,IAAE,GAAGA,GAAC,GAAE,MAAI,qDAAqD,GAAE,EAAE,KAAG,QAAM,MAAM,QAAQ,CAAC,KAAG,EAAE,MAAM,OAAG,aAAa,EAAE,GAAE,MAAI,+EAA+E;AAAE,MAAIC,MAAE,KAAG;AAAK,MAAG,CAACA,KAAE;AAAC,QAAE,CAAC;AAAE,aAAQ,KAAK,EAAE,oBAAoB,GAAE,KAAK,EAAE,oBAAoB,CAAC,CAAC;AAAA,EAAC;AAAC,MAAI,IAAEA,MAAE,EAAE,OAAO,OAAG,CAAC,EAAE,SAAS,IAAE,MAAK,IAAE,EAAE;AAAO,MAAE,EAAE,OAAO,OAAG,EAAE,SAAS,GAAE,EAAE,EAAE,SAAO,GAAE,MAAI,gGAAgG,CAAC,0BAA0B;AAAE,MAAI,IAAE,MAAG,EAAC,OAAM,GAAE,OAAM,EAAC,IAAE,EAAE,UAAUD,KAAE,GAAE,MAAK,CAAC;AAAE,IAAE,EAAE,KAAK,OAAG,KAAG,IAAI,GAAE,MAAI,8LAA8L,GAAE,EAAE,EAAE,SAAO,GAAE,MAAI,iFAAiF,EAAE,IAAI,SAAS;AAAE,MAAI,IAAE,CAAC;AAAE,SAAO,EAAE,QAAQ,CAAC,GAAE,MAAI;AAAC,MAAE,CAAC,KAAG,SAAO,EAAE,EAAE,IAAI,IAAE,EAAE,CAAC;AAAA,EAAE,CAAC,GAAE,KAAG,QAAM,EAAE,QAAQ,OAAG,EAAE,EAAE,IAAI,IAAE,IAAI,GAAE,EAAC,OAAM,GAAE,OAAM,EAAC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAO,EAAE,WAAWA,GAAC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAGA,IAAE,OAAO,CAAAC,QAAGA,OAAG,IAAI,EAAE,SAAO,EAAE,OAAM,IAAI,MAAM;AAAA,oEACryG;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAIC,MAAE,EAAC,GAAE,EAAED,KAAE,KAAI,KAAK,EAAC;AAAE,SAAO,EAAE,UAAU,IAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,MAAK,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAIC,MAAE,EAAC,GAAE,EAAED,KAAE,KAAI,UAAU,EAAC;AAAE,SAAO,EAAE,UAAU,IAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,WAAU,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAI,IAAE,EAAEA,KAAE,KAAI,YAAY;AAAE,SAAO,GAAG,QAAI,EAAC,OAAM,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,GAAE,UAAS,OAAG,GAAG,GAAE,GAAG,GAAG,CAAC,CAAC,CAAC,EAAC,EAAE,EAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,aAAY,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAED,KAAE,KAAI,KAAK,GAAE,IAAE,EAAE,GAAE,KAAI,KAAK;AAAE,GAACC,KAAE,CAAC,IAAE,GAAGA,KAAE,CAAC;AAAE,MAAI,IAAE,EAAC,GAAEA,KAAE,GAAE,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,MAAK,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,IAAE,IAAG;AAAC,MAAIC,MAAE,EAAED,KAAE,UAAS,YAAY;AAAE,MAAG,MAAI,OAAK,IAAEC,IAAE,OAAK,IAAG,MAAIA,IAAE,OAAK,EAAE,OAAM,MAAM,gFAAgFA,IAAE,IAAI,iBAAiB,CAAC,EAAE;AAAE,SAAO,GAAG,CAAC,GAAE,MAAI;AAAC,QAAI,IAAE,GAAG,GAAE,GAAE,IAAE,GAAE,IAAE,GAAG,GAAE,CAAC,GAAE,IAAE,GAAG,GAAG,GAAE,SAAS,GAAE,GAAG,GAAG,GAAG,CAAC,GAAE,GAAE,IAAE,CAAC,CAAC;AAAE,WAAO,EAAE,CAAC,CAAC,CAAC,GAAE,EAAC,OAAM,GAAE,UAAS,CAAC,GAAE,MAAI;AAAC,UAAG,CAAC,CAAC,IAAE,GAAE,IAAE,MAAG,IAAE,GAAG,CAAC;AAAE,aAAO,GAAG,GAAE,GAAG,GAAG,GAAE,GAAE,CAAC,GAAE,CAAC,CAAC;AAAA,IAAC,EAAC;AAAA,EAAC,CAAC,EAAEA,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,aAAY,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,IAAE,MAAKC,MAAE,OAAG;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,WAAW,GAAE,IAAE,GAAG,GAAE,EAAE,KAAK,GAAE,IAAE,GAAG,GAAE,GAAE,IAAE,GAAE,IAAE,GAAG,GAAE,CAAC,GAAE,IAAE,GAAG,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC,GAAE,IAAE,GAAG,CAAC,GAAE,IAAE,GAAG,EAAE,GAAE,EAAE,KAAK,GAAE,CAAC;AAAE,MAAGC,KAAE;AAAC,QAAI,IAAE,GAAG,EAAE,OAAM,CAAC;AAAE,WAAO,EAAE,GAAE,CAAC;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,YAAW,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAED,KAAE,KAAI,cAAa,MAAM,GAAE,IAAE,EAAE,GAAE,KAAI,cAAa,MAAM;AAAE,KAAGC,IAAE,OAAM,EAAE,KAAK;AAAE,MAAI,IAAE,EAAC,GAAEA,KAAE,GAAE,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,aAAY,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAIC,MAAE,EAAC,GAAE,EAAED,KAAE,KAAI,cAAa,MAAM,EAAC;AAAE,SAAO,EAAE,UAAU,IAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,aAAY,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAED,KAAE,KAAI,aAAY,MAAM,GAAE,IAAE,EAAE,GAAE,KAAI,aAAY,MAAM;AAAE,KAAGC,IAAE,OAAM,EAAE,KAAK;AAAE,MAAI,IAAE,EAAC,GAAEA,KAAE,GAAE,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,YAAW,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAED,KAAE,KAAI,cAAa,MAAM,GAAE,IAAE,EAAE,GAAE,KAAI,cAAa,MAAM;AAAE,SAAO,GAAGC,IAAE,OAAM,EAAE,KAAK,GAAE,GAAG,GAAGD,KAAE,CAAC,GAAE,GAAG,GAAGA,KAAE,CAAC,CAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,aAAY,GAAE,CAAC;AAAE,IAAI,KAAG;AAAW,SAAS,GAAGA,KAAE,GAAEC,MAAE,QAAO;AAAC,MAAI,IAAE,EAAED,KAAE,kBAAiB,cAAc,GAAE,IAAE,EAAE,GAAE,UAAS,cAAc,GAAE,IAAE,EAAE,MAAM,EAAE,MAAM,SAAO,CAAC,GAAE,IAAE,EAAE,MAAM,EAAE,MAAM,SAAO,CAAC,GAAE,IAAE,EAAE,GAAE,CAAC,IAAG,CAAC,CAAC,GAAE,IAAE,EAAE,GAAE,CAAC,IAAG,CAAC,CAAC;AAAE,MAAG,EAAE,OAAK,EAAE,OAAM,IAAI,MAAM,sDAAsD;AAAE,MAAG,EAAE,MAAM,CAAC,MAAI,EAAE,MAAM,CAAC,EAAE,OAAM,IAAI,MAAM,gEAAgE;AAAE,MAAG,GAAG,EAAE,KAAK,KAAG,GAAG,OAAM,IAAI,MAAM,qCAAqC,EAAE,EAAE;AAAE,MAAG,EAAE,MAAM,CAAC,KAAG,GAAG,OAAM,IAAI,MAAM,oCAAoC,EAAE,+BAA+B,EAAE,MAAM,CAAC,CAAC,EAAE;AAAE,MAAI,IAAE,EAAC,gBAAe,GAAE,QAAO,EAAC,GAAE,IAAE,EAAC,MAAKC,IAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,eAAc,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,SAAO,GAAGA,KAAE,GAAE,MAAM;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE,GAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,SAAS,GAAE,IAAE,GAAE,IAAE,GAAE,IAAE;AAAG,IAAE,SAAO,MAAI,IAAE,MAAG,IAAE,EAAE,GAAE,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC,IAAG,EAAE,EAAE,SAAO,GAAE,MAAI,uDAAuD,EAAE,IAAI,GAAG,GAAE,EAAE,GAAGC,KAAE,CAAC,GAAE,MAAI,wEAAwEA,GAAC,mBAAmB,CAAC,GAAG,GAAE,GAAG,WAAU,GAAE,CAAC;AAAE,MAAI,IAAE,EAAC,GAAE,EAAC,GAAE,IAAE,EAAC,YAAW,GAAE,SAAQA,KAAE,KAAI,GAAE,iBAAgB,EAAC,GAAE,IAAE,EAAE,UAAU,IAAG,GAAE,CAAC;AAAE,SAAO,IAAE,EAAE,GAAE,CAAC,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC,IAAE;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,UAAS,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,IAAE,CAAC,GAAE,GAAE,CAAC,GAAEC,KAAE,GAAE,GAAE,IAAE,SAAQ;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,WAAW,GAAE,IAAE,GAAE,IAAE;AAAG,IAAE,SAAO,MAAI,IAAE,MAAG,IAAE,EAAE,GAAE,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC,IAAG,EAAE,EAAE,SAAO,GAAE,MAAI,qDAAqD,EAAE,IAAI,GAAG,GAAE,EAAE,MAAI,SAAQ,MAAI,gFAAgF,CAAC,EAAE,GAAE,GAAG,aAAY,GAAE,CAAC;AAAE,MAAI,IAAE,EAAC,GAAE,EAAC,GAAE,IAAE,EAAC,YAAW,GAAE,SAAQC,KAAE,KAAI,GAAE,iBAAgB,GAAE,YAAW,EAAC,GAAE,IAAE,EAAE,UAAU,IAAG,GAAE,CAAC;AAAE,SAAO,IAAE,EAAE,GAAE,CAAC,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC,IAAE;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,YAAW,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,IAAE,OAAG;AAAC,MAAI,IAAE,EAAC,GAAE,EAAED,KAAE,KAAI,mBAAmB,EAAC,GAAE,IAAE,EAAC,YAAW,GAAE,SAAQC,KAAE,KAAI,GAAE,qBAAoB,EAAC,GAAE,IAAE,EAAE,UAAU,IAAG,GAAE,CAAC;AAAE,SAAM,EAAC,QAAO,EAAE,CAAC,GAAE,SAAQ,EAAE,CAAC,EAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,oBAAmB,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAED,KAAE,KAAI,SAAS,GAAE,IAAE,EAAE,GAAE,KAAI,SAAS;AAAE,GAACC,KAAE,CAAC,IAAE,GAAGA,KAAE,CAAC,GAAEA,IAAE,UAAQ,WAASA,MAAE,GAAGA,KAAE,OAAO,GAAE,IAAE,GAAG,GAAE,OAAO,IAAG,GAAGA,IAAE,OAAM,EAAE,KAAK;AAAE,MAAI,IAAE,EAAC,GAAEA,KAAE,GAAE,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,UAAS,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,IAAE,MAAKC,MAAE,OAAG;AAAC,MAAI,IAAE,EAAC,GAAE,EAAED,KAAE,KAAI,MAAM,EAAC,GAAE,IAAE,EAAC,MAAK,GAAE,UAASC,IAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,OAAM,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,IAAE,WAAU;AAAC,MAAG,GAAGA,GAAC,GAAE,MAAI,aAAY;AAAC,QAAI,IAAE,GAAGA,KAAE,SAAS,GAAE,IAAE,GAAGA,KAAE,SAAS;AAAE,WAAO,GAAG,GAAE,CAAC;AAAA,EAAC;AAAC,MAAIC,MAAE,GAAG,GAAGD,GAAC,GAAE,CAAC;AAAE,SAAO,EAAE,WAAWC,KAAED,KAAE,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,IAAE,WAAU;AAAC,MAAG,GAAGA,GAAC,GAAE,MAAI,aAAY;AAAC,QAAI,IAAE,GAAGA,KAAE,SAAS,GAAE,IAAE,GAAGA,KAAE,SAAS;AAAE,WAAO,GAAG,GAAE,CAAC;AAAA,EAAC;AAAC,MAAIC,MAAE,GAAG,GAAGD,GAAC,GAAE,CAAC;AAAE,SAAO,EAAE,WAAWC,KAAED,KAAE,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE,EAAC,UAASC,MAAE,KAAI,IAAE,CAAC,GAAE;AAAC,MAAGA,QAAI,QAAMA,QAAI,KAAK,OAAM,IAAI,UAAU,GAAGA,GAAC,4CAA4C;AAAE,MAAGD,QAAI,OAAO,QAAM,CAAC;AAAE,MAAI,IAAE,EAAEA,KAAE,KAAI,YAAWA,eAAa,KAAGA,IAAE,QAAM,SAAS;AAAE,MAAG,MAAI,OAAO,QAAM,CAAC,CAAC;AAAE,MAAI,IAAE,EAAE,GAAE,KAAI,YAAW,aAAa,KAAG,EAAE,QAAM,SAAS,GAAE,IAAE,GAAG,EAAE,KAAK,GAAE,IAAE,GAAG,EAAE,KAAK;AAAE,SAAOC,QAAI,QAAM,IAAE,EAAE,GAAE,CAAC,GAAE,EAAE,CAAC,GAAE,IAAE,EAAE,GAAE,CAAC,IAAG,CAAC,CAAC,GAAE,CAAC,GAAG,GAAG,CAAC,GAAE,CAAC,GAAE,EAAE,KAAK,GAAE,CAAC,GAAE,GAAG,GAAE,GAAG,CAAC,GAAE,CAAC,GAAE,EAAE,KAAK,CAAC,CAAC,MAAI,IAAE,EAAE,GAAE,CAAC,IAAG,CAAC,CAAC,GAAE,IAAE,EAAE,GAAE,CAAC,GAAE,EAAE,CAAC,GAAE,CAAC,GAAG,GAAE,GAAG,CAAC,GAAE,CAAC,GAAE,EAAE,KAAK,CAAC,GAAE,GAAG,GAAG,CAAC,GAAE,CAAC,GAAE,EAAE,KAAK,GAAE,CAAC,CAAC;AAAE;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAED,KAAE,KAAI,SAAS,GAAE,IAAE,EAAE,GAAE,KAAI,SAAS;AAAE,GAACC,KAAE,CAAC,IAAE,GAAGA,KAAE,CAAC,GAAEA,IAAE,UAAQ,WAASA,MAAE,GAAGA,KAAE,OAAO,GAAE,IAAE,GAAG,GAAE,OAAO,IAAG,GAAGA,IAAE,OAAM,EAAE,KAAK;AAAE,MAAI,IAAE,EAAC,GAAEA,KAAE,GAAE,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,UAAS,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,IAAEA,QAAI,aAAWA,QAAI,aAAY,MAAI,+DAA+DA,GAAC,GAAG;AAAE,MAAI,IAAE,EAAED,KAAE,KAAI,WAAW;AAAE,MAAG,EAAE,SAAO,EAAE,OAAM,IAAI,MAAM,gEAAgE;AAAE,IAAE,EAAE,WAAS,EAAE,MAAK,MAAI,wCAAwC,EAAE,IAAI,SAAS,EAAE,MAAM,GAAG;AAAE,MAAI,IAAEC,QAAI,YAAU,IAAE;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,MAAK,IAAI,GAAE,EAAE,CAAC,EAAE,WAAS,GAAE,MAAI,uDAAuD,GAAE,EAAE,EAAE,CAAC,EAAE,CAAC,KAAG,KAAG,EAAE,CAAC,EAAE,CAAC,KAAG,EAAE,MAAM,CAAC,IAAE,KAAG,EAAE,CAAC,EAAE,CAAC,KAAG,KAAG,EAAE,CAAC,EAAE,CAAC,KAAG,EAAE,MAAM,CAAC,IAAE,GAAE,MAAI,wBAAwB,CAAC,uCAAuC,EAAE,MAAM,CAAC,IAAE,CAAC,sCAAsC,EAAE,KAAK,EAAE;AAAE,MAAI,IAAE,EAAC,UAAS,GAAE,MAAKA,IAAC,GAAE,IAAE,EAAC,GAAE,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,YAAW,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAED,KAAE,KAAI,KAAK,GAAE,IAAE,EAAE,GAAE,KAAI,KAAK;AAAE,GAACC,KAAE,CAAC,IAAE,GAAGA,KAAE,CAAC;AAAE,MAAI,IAAE,EAAC,GAAEA,KAAE,GAAE,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,MAAK,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,IAAE,MAAKC,MAAE,OAAG;AAAC,EAAAD,MAAE,EAAEA,KAAE,KAAI,SAAS;AAAE,MAAI,IAAE,GAAG,GAAEA,IAAE,KAAK,GAAE,IAAE,GAAGA,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE;AAAM,EAAAA,QAAI,IAAE,GAAG,EAAE,OAAM,CAAC;AAAG,MAAI,IAAE,GAAG,GAAG,GAAGD,KAAE,SAAS,GAAE,EAAE,GAAE,CAAC,CAAC,CAAC,GAAE,IAAE,GAAG,GAAE,GAAEC,GAAC;AAAE,SAAM,EAAC,MAAK,GAAE,UAAS,EAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,UAAS,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE;AAAC,MAAI,IAAE,EAAE,GAAE,QAAO,cAAc,GAAE,IAAE,GAAGA,KAAE,KAAI,cAAc,GAAE,IAAE,GAAG,GAAE,KAAI,cAAc,GAAE,IAAE,GAAE,IAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAED,IAAE,QAAO,KAAI;AAAC,QAAI,IAAEA,IAAE,CAAC,EAAE,GAAE,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC;AAAE,MAAE,KAAK,EAAE,CAAC,CAAC,GAAE,EAAE,KAAK,EAAE,CAAC,CAAC,GAAE,IAAE,EAAE,CAAC;AAAA,EAAC;AAAC,MAAI,IAAE,CAAC,GAAE,IAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,KAAG,EAAE,GAAE,KAAK,EAAE,CAAC,CAAC,GAAE,EAAE,KAAK,EAAE,IAAE,CAAC,CAAC;AAAE,SAAM,CAAC,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,eAAc,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAE,GAAEC,KAAE,IAAE,OAAG;AAAC,MAAI,IAAE,EAAED,KAAE,UAAS,aAAa,GAAE,IAAE,EAAE,MAAK,IAAE,EAAE;AAAK,MAAG,IAAE,EAAE,OAAM,IAAI,MAAM,+DAA+D,CAAC,GAAG;AAAE,MAAG,IAAE,EAAE,OAAM,IAAI,MAAM,gDAAgD,CAAC,EAAE;AAAE,EAAAC,MAAEA,OAAG,KAAK,OAAO;AAAE,MAAI,IAAE,EAAC,QAAO,MAAI,IAAE,EAAE,GAAE,CAAC,GAAE,EAAE,CAAC,IAAE,EAAC,GAAE,IAAE,EAAC,YAAW,GAAE,MAAKA,KAAE,YAAW,EAAC,GAAE,IAAE,EAAE,UAAU,IAAG,GAAE,CAAC;AAAE,SAAO,MAAI,IAAE,EAAE,GAAE,CAAC,EAAE,IAAI,CAAC,IAAE;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,cAAa,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAED,KAAE,KAAI,YAAW,mBAAmB,GAAE,IAAE,EAAE,GAAE,KAAI,YAAW,mBAAmB;AAAE,GAACC,KAAE,CAAC,IAAE,GAAGA,KAAE,CAAC,GAAE,GAAGA,IAAE,OAAM,EAAE,KAAK;AAAE,MAAI,IAAE,EAAC,GAAEA,KAAE,GAAE,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,WAAU,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,MAAE,GAAE,IAAE,GAAE,IAAE,SAAQ;AAAC,MAAG,IAAE,EAAE,OAAM,IAAI,MAAM,iDAAiD,CAAC,EAAE;AAAE,MAAI,IAAE,EAAC,SAAQ,EAAED,KAAE,WAAU,UAAS,OAAO,EAAC,GAAE,IAAE,EAAC,OAAM,GAAE,OAAM,GAAE,SAAQC,KAAE,UAAS,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,SAAQ,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAIC,MAAE,EAAC,GAAE,EAAED,KAAE,KAAI,UAAU,EAAC;AAAE,SAAO,EAAE,UAAU,IAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,WAAU,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAED,KAAE,MAAK,cAAc,GAAE,IAAE,EAAE,GAAE,MAAK,cAAc;AAAE,IAAEC,IAAE,SAAO,KAAG,EAAE,SAAO,GAAE,MAAI,+DAA+DA,IAAE,IAAI,QAAQ,EAAE,IAAI,GAAG;AAAE,MAAI,IAAE,EAAEA,KAAE,CAAC,IAAG,CAAC,CAAC,GAAE,IAAE,EAAE,GAAE,CAAC,GAAE,EAAE,CAAC;AAAE,SAAO,GAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,eAAc,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,MAAE,GAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,KAAK;AAAE,MAAG,EAAE,SAAO,EAAE,OAAM,IAAI,MAAM,oDAAoD;AAAE,MAAI,IAAE,EAAC,UAAS,GAAE,eAAcC,IAAC,GAAE,IAAE,EAAC,GAAE,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,MAAK,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,MAAE,GAAE;AAAC,SAAO,EAAE,EAAE,WAAS,GAAE,MAAI,kDAAkD,GAAE,GAAGD,KAAE,CAAC,CAAC,GAAEC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,QAAO,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,MAAE,GAAE;AAAC,SAAO,EAAE,EAAE,WAAS,KAAG,EAAE,CAAC,EAAE,WAAS,KAAG,EAAE,CAAC,EAAE,WAAS,GAAE,MAAI,uDAAuD,GAAE,GAAGD,KAAE,GAAEC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,QAAO,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,MAAE,GAAE;AAAC,SAAO,EAAE,EAAE,WAAS,KAAG,EAAE,CAAC,EAAE,WAAS,KAAG,EAAE,CAAC,EAAE,WAAS,KAAG,EAAE,CAAC,EAAE,WAAS,GAAE,MAAI,uDAAuD,GAAE,GAAGD,KAAE,GAAEC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,QAAO,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,MAAE,GAAE;AAAC,SAAO,EAAE,EAAE,WAAS,KAAG,EAAE,CAAC,EAAE,WAAS,KAAG,EAAE,CAAC,EAAE,WAAS,KAAG,EAAE,CAAC,EAAE,WAAS,KAAG,EAAE,CAAC,EAAE,WAAS,GAAE,MAAI,uDAAuD,GAAE,GAAGD,KAAE,GAAEC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,QAAO,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,gBAAgB;AAAE,IAAE,EAAE,QAAM,IAAE,EAAE,QAAO,MAAI,cAAc,EAAE,IAAI,kCAAkC,EAAE,MAAM,EAAE,GAAE,EAAEC,IAAE,WAAS,EAAE,QAAO,MAAI,qBAAqBA,IAAE,MAAM,kCAAkC,EAAE,MAAM,EAAE,GAAE,EAAE,EAAE,MAAM,OAAO,CAAC,GAAE,GAAE,MAAI,IAAE,KAAG,KAAG,EAAE,SAAO,MAAI,IAAEA,IAAE,IAAE,CAAC,EAAE,CAAC,IAAEA,IAAE,IAAE,CAAC,EAAE,CAAC,KAAG,EAAE,IAAE,CAAC,MAAI,IAAE,GAAE,IAAE,GAAE,MAAI,4BAA4B,EAAE,MAAM,MAAM,CAAC,CAAC,kBAAkBA,IAAE,SAAS,CAAC,qCAAqC,EAAE,SAAS,CAAC,EAAE;AAAE,MAAI,IAAE,EAAC,GAAE,EAAC,GAAE,IAAE,EAAC,YAAW,GAAE,UAASA,IAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,iBAAgB,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE,GAAE;AAAC,OAAG,SAAO,IAAE,CAAC,GAAE,CAAC,IAAG,KAAG,SAAO,IAAE,IAAG,MAAI,MAAI,IAAE;AAAS,MAAI,IAAE,EAAED,KAAE,KAAI,SAAS,GAAE,IAAE,GAAE,IAAE;AAAG,IAAE,SAAO,MAAI,IAAE,MAAG,IAAE,EAAE,GAAE,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC,IAAG,EAAE,GAAG,GAAE,CAAC,GAAE,MAAI,qEAAqE,CAAC,mBAAmB,CAAC,GAAG;AAAE,MAAI,IAAE,GAAG,EAAE,OAAM,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,CAAC,EAAE,gBAAe,EAAE,aAAa,GAAE;AAAE,QAAI,SAAO,IAAE,GAAG,CAAC,EAAE,cAAa,EAAE,WAAW,GAAE,CAAC,IAAE,IAAE,CAAC,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,CAAC;AAAE,MAAI,IAAE,EAAE,CAAC,MAAI,KAAG,EAAE,CAAC,MAAI,GAAE,CAAC,GAAE,CAAC,IAAE,GAAG,CAAC,EAAE,UAAS,EAAE,OAAO,GAAE,GAAE,CAAC,GAAE,IAAE,IAAE,IAAE,SAAQ,IAAE,IAAE,IAAE,GAAG,GAAE,GAAE,CAAC,GAAE,KAAGC,QAAI,QAAM,MAAI,GAAG,GAAE,GAAE,GAAE,GAAE,CAAC,IAAE,MAAI,GAAG,GAAE,GAAE,GAAE,GAAE,CAAC,GAAG,GAAE,IAAE,IAAE,IAAE,GAAG,GAAE,GAAE,CAAC;AAAE,SAAO,IAAE,EAAE,GAAE,CAAC,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC,IAAE;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAEA,IAAE,IAAI,OAAG,EAAE,CAAC,CAAC,GAAE,IAAEA,IAAE,IAAI,OAAG,EAAE,CAAC,CAAC,GAAE,IAAED,IAAE,OAAO,GAAE,CAAC,GAAE,IAAE,EAAE,IAAI,CAAC,GAAE,OAAK,IAAE,EAAE,CAAC,IAAE,KAAG,CAAC,GAAE,IAAE,EAAE,IAAI,CAAC,GAAE,MAAI,IAAE,EAAE,CAAC,CAAC,GAAE,IAAE,EAAE,IAAI,CAAC,GAAE,MAAI,CAAC,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,CAAC,GAAE,IAAE,EAAE,IAAI,CAAC,GAAE,MAAI,CAAC,GAAE,EAAE,CAAC,CAAC,CAAC;AAAE,SAAM,CAAC,GAAE,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAI,IAAEA,IAAE,IAAI,CAAC,GAAE,MAAI,KAAG,IAAE,MAAI,EAAE,CAAC,IAAE,EAAE,EAAE,IAAI,OAAG,IAAE,CAAC,GAAE,IAAE,EAAE,IAAI,OAAG,KAAK,MAAM,IAAE,CAAC,CAAC,GAAE,IAAE,EAAE,IAAI,CAAC,GAAE,MAAI,IAAE,EAAE,CAAC,CAAC;AAAE,SAAO,EAAE,IAAI,CAAC,GAAE,MAAI,CAAC,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,OAAM,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAED,KAAE,KAAI,OAAO,GAAE,IAAE,EAAE,GAAE,SAAQ,OAAO,GAAE,IAAE,EAAC,GAAEC,KAAE,OAAM,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,QAAO,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,IAAE,MAAKC,MAAE,OAAG;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,MAAM;AAAE,IAAE,UAAQ,WAAS,IAAE,GAAG,GAAE,OAAO;AAAG,MAAI,IAAE,EAAC,GAAE,EAAC,GAAE,IAAE,EAAC,MAAK,GAAE,UAASC,IAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,OAAM,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE;AAAC,MAAI,IAAED,IAAE,IAAI,CAAC,GAAE,MAAI,EAAE,GAAE,UAAU,CAAC,IAAG,gBAAe,OAAO,CAAC,GAAE,IAAE,EAAE,GAAE,qBAAoB,cAAc,GAAE,IAAE,EAAEC,KAAE,WAAU,gBAAe,OAAO,GAAE,IAAE,EAAC,oBAAmB,GAAE,mBAAkB,GAAE,SAAQ,EAAC,GAAE,IAAE,EAAC,kBAAiB,EAAC,GAAE,IAAE,EAAE,UAAU,IAAG,GAAE,CAAC;AAAE,SAAM,EAAC,oBAAmB,EAAE,MAAM,GAAE,EAAE,SAAO,CAAC,GAAE,mBAAkB,EAAE,EAAE,SAAO,CAAC,EAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,eAAc,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,EAAED,KAAE,UAAS,aAAa,GAAE,IAAE,EAAE,GAAE,UAAS,eAAc,EAAE,KAAK,GAAE,IAAE,EAAEC,KAAE,UAAS,eAAc,EAAE,KAAK,GAAE,IAAE,EAAC,QAAO,GAAE,QAAO,GAAE,QAAO,EAAC,GAAE,IAAE,EAAE,UAAU,IAAG,CAAC;AAAE,SAAM,EAAC,gBAAe,EAAE,CAAC,GAAE,eAAc,EAAE,CAAC,EAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,cAAa,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE;AAAC,MAAI,IAAE,EAAED,KAAE,SAAQ,wBAAuB,OAAO,GAAE,IAAE,EAAE,GAAE,UAAS,sBAAsB,GAAE,IAAE,EAAEC,KAAE,gBAAe,wBAAuB,EAAE,KAAK,GAAE,IAAE,EAAE,IAAI,CAAC,GAAE,MAAI,EAAE,GAAE,UAAU,CAAC,IAAG,wBAAuB,OAAO,CAAC,GAAE,IAAE,EAAC,OAAM,GAAE,QAAO,GAAE,cAAa,GAAE,qBAAoB,EAAC,GAAE,IAAE,EAAC,mBAAkB,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,uBAAsB,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,KAAGD,GAAC;AAAE,MAAI,IAAE,GAAGA,GAAC,GAAE,IAAE;AAAK,MAAGC,OAAG,QAAMA,QAAI,UAAU,KAAE,IAAI,aAAa,CAAC;AAAA,WAAUA,QAAI,QAAQ,KAAE,IAAI,WAAW,CAAC;AAAA,WAAUA,QAAI,OAAO,KAAE,IAAI,WAAW,CAAC;AAAA,MAAO,OAAM,IAAI,MAAM,qBAAqBA,GAAC,EAAE;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,IAAI,GAAE,CAAC,IAAE,EAAE;AAAE,SAAO,EAAE,WAAW,GAAED,KAAEC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,OAAM,GAAE,CAAC;AAAE,IAAI,KAAG,GAAG,GAAG,CAAC;AAAE,IAAI,KAAG,CAAC;AAAE,GAAG,IAAG,EAAC,sBAAqB,MAAI,IAAG,oBAAmB,MAAI,IAAG,eAAc,MAAI,IAAG,yBAAwB,MAAI,IAAG,mBAAkB,MAAI,IAAG,mBAAkB,MAAI,IAAG,oBAAmB,MAAI,IAAG,qBAAoB,MAAI,IAAG,qBAAoB,MAAI,IAAG,MAAK,MAAI,IAAG,aAAY,MAAI,GAAE,CAAC;AAAE,IAAI,KAAG;AAAP,IAAY,KAAG;AAAG,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,SAAOA,OAAG,SAAOA,MAAE,GAAG,IAAG,GAAGD,KAAE,GAAE,CAAC,GAAE,MAAI,GAAG,GAAE,GAAEC,GAAC,CAAC;AAAC;AAAC,SAAS,KAAI;AAAC,SAAO,EAAE,QAAQ,eAAe,MAAI,KAAG,KAAG;AAAE;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE;AAAG,OAAI,GAAGD,GAAC,KAAG,GAAG,CAAC,OAAK,IAAE,QAAI,GAAGA,GAAC,KAAG,GAAG,CAAC,MAAI,IAAE,OAAI,GAAE;AAAC,QAAI,IAAEA,IAAE,YAAY,MAAK,IAAE,EAAE,YAAY;AAAK,QAAG,MAAI,EAAE,OAAM,IAAI,MAAM,yCAAyC,CAAC,eAAe,CAAC,EAAE;AAAA,EAAC;AAAC,MAAG,MAAM,QAAQA,GAAC,KAAG,MAAM,QAAQ,CAAC,GAAE;AAAC,QAAI,IAAE,GAAGA,GAAC,GAAE,IAAE,GAAG,CAAC;AAAE,QAAG,CAAC,GAAG,GAAE,CAAC,EAAE,OAAM,IAAI,MAAM,0CAA0C,CAAC,iBAAiB,CAAC,GAAG;AAAA,EAAC;AAAC,MAAI,IAAE,GAAGA,GAAC,IAAEA,MAAE,GAAGA,GAAC,GAAE,IAAE,GAAG,CAAC,IAAE,IAAE,GAAG,CAAC;AAAE,MAAG,EAAE,WAAS,EAAE,OAAO,OAAM,IAAI,MAAM,yCAAyC,EAAE,MAAM,iBAAiB,EAAE,MAAM;AAAA,YACn8Y,CAAC;AAAA,YACD,CAAC,GAAG;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE,GAAE;AAAC,QAAI,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC;AAAE,QAAG,CAACC,IAAE,GAAE,CAAC,EAAE,OAAM,IAAI,MAAM,yBAAyB,CAAC,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC;AAAA,YACxI,CAAC;AAAA,YACD,CAAC,GAAG;AAAA,EAAC;AAAC,SAAO,UAAQ,eAAa,OAAO,EAAE,QAAQ;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,EAAAA,IAAE,EAAE,KAAK,MAAI,EAAE,KAAK,GAAE,MAAI,EAAE,CAAC,GAAE,OAAO,UAAQ,eAAa,OAAO,EAAE,QAAQ;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAIC,MAAE,OAAO,KAAG,YAAU,OAAO,KAAG,YAAU,OAAO,KAAG,YAAU,CAAC,CAAC,IAAE;AAAE,SAAO,GAAGD,GAAC,KAAG,GAAGA,IAAE,CAAC,CAAC,KAAG,GAAG,CAAC,KAAG,GAAG,EAAE,CAAC,CAAC,IAAE,GAAGA,KAAEC,KAAE,CAAC,GAAE,MAAI,KAAG,CAAC,IAAE,GAAGD,KAAE,GAAE,CAAC,GAAE,MAAI,GAAG,GAAE,GAAE,CAAC,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAGA,OAAG,SAAOA,MAAE,GAAG,IAAG,CAAC,GAAGD,KAAE,GAAEC,GAAC,EAAE,OAAM,IAAI,MAAM,8BAA8BD,GAAC,kBAAkB,CAAC,EAAE;AAAE,SAAO,UAAQ,eAAa,OAAO,EAAE,QAAQ;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,SAAM,CAAC,SAASD,GAAC,KAAG,CAAC,SAAS,CAAC,IAAE,OAAG,EAAE,MAAMA,GAAC,KAAG,MAAM,CAAC,KAAG,KAAK,IAAIA,MAAE,CAAC,IAAEC;AAAE;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,WAAQ,IAAE,GAAE,IAAED,IAAE,QAAO,IAAI,KAAGA,IAAE,CAAC,IAAE,KAAGA,IAAE,CAAC,IAAEC,IAAE,OAAM,IAAI,MAAM,sBAAsBD,IAAE,CAAC,CAAC,SAAS,CAAC,WAAWC,GAAC,EAAE;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,IAAI,aAAaD,GAAC,GAAE,IAAE,IAAI,aAAa,CAAC;AAAE,MAAGC,IAAE,WAAS,EAAE,OAAO,OAAM,IAAI,MAAM,wCAAwC,EAAE,MAAM,gBAAgBA,IAAE,MAAM,EAAE;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,IAAI,KAAGA,IAAE,CAAC,MAAI,EAAE,CAAC,EAAE,OAAM,IAAI,MAAM,iCAAiC,CAAC,UAAU,EAAE,CAAC,CAAC,YAAYA,IAAE,CAAC,CAAC,UAAU;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,WAAQ,IAAE,GAAE,IAAEA,IAAE,QAAO,KAAI;AAAC,QAAIC,MAAED,IAAE,CAAC;AAAE,UAAM,QAAQC,GAAC,IAAE,GAAGA,GAAC,IAAED,IAAE,CAAC,IAAE,GAAGC,GAAC;AAAA,EAAC;AAAC,SAAOD;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAI,IAAE,SAAS,cAAc,OAAO;AAAE,SAAM,iBAAgB,MAAI,EAAE,cAAY,OAAI,EAAE,QAAM,MAAG,EAAE,OAAK,MAAG,EAAE,MAAM,WAAS,SAAQ,EAAE,MAAM,OAAK,OAAM,EAAE,MAAM,MAAI,OAAM,EAAE,UAAQ,QAAO,EAAE,YAAYA,GAAC,GAAE,IAAI,QAAQ,CAAAC,QAAG;AAAC,MAAE,iBAAiB,cAAa,OAAGA,IAAE,CAAC,CAAC,GAAE,EAAE,KAAK;AAAA,EAAC,CAAC;AAAC;AAAC,eAAe,GAAGD,KAAE;AAAC,QAAMA,IAAE,KAAK,GAAE,+BAA8BA,OAAG,MAAM,IAAI,QAAQ,OAAG;AAAC,IAAAA,IAAE,0BAA0B,CAAC;AAAA,EAAC,CAAC;AAAC;AAAC,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEC,KAAE,GAAE,GAAE,GAAE;AAAC,SAAK,OAAK,GAAE,KAAK,SAAOA,KAAE,KAAK,QAAM,GAAE,KAAK,UAAQ,KAAI,KAAK,YAAU,GAAE,KAAK,cAAY,KAAK,QAAM,KAAK,OAAK,KAAK,SAAO,GAAE,KAAK,QAAM,KAAK,OAAK,KAAK,SAAO;AAAG,QAAI,IAAE,KAAG,KAAK,OAAO;AAAE,SAAK,SAAO,GAAG,KAAK,EAAE,SAAS,CAAC;AAAA,EAAC;AAAA,EAAC,YAAW;AAAC,QAAG,CAAC,MAAM,KAAK,OAAO,GAAE;AAAC,UAAI,IAAE,KAAK;AAAQ,aAAO,KAAK,UAAQ,KAAI;AAAA,IAAC;AAAC,QAAI,GAAEA,KAAE,IAAE;AAAG,WAAK,CAAC,KAAG;AAAC,UAAI,GAAE,GAAE;AAAE;AAAG,YAAE,IAAE,KAAK,OAAO,IAAE,GAAE,IAAE,IAAE,KAAK,OAAO,IAAE,GAAE,IAAE,IAAE,IAAE,IAAE;AAAA,aAAQ,KAAG,KAAG,MAAI;AAAG,UAAI,IAAE,KAAK,KAAK,KAAG,KAAK,IAAI,CAAC,IAAE,CAAC;AAAE,UAAE,KAAK,OAAK,KAAK,SAAO,IAAE,GAAEA,MAAE,KAAK,OAAK,KAAK,SAAO,IAAE,IAAG,CAAC,KAAK,aAAW,KAAK,iBAAiB,CAAC,OAAK,IAAE;AAAA,IAAG;AAAC,YAAO,CAAC,KAAK,aAAW,KAAK,iBAAiBA,GAAC,OAAK,KAAK,UAAQ,KAAK,aAAaA,GAAC,IAAG,KAAK,aAAa,CAAC;AAAA,EAAC;AAAA,EAAC,aAAa,GAAE;AAAC,WAAO,KAAK,SAAO,QAAM,KAAK,UAAQ,YAAU,IAAE,KAAK,MAAM,CAAC;AAAA,EAAC;AAAA,EAAC,iBAAiB,GAAE;AAAC,WAAO,KAAG,KAAK,SAAO,KAAG,KAAK;AAAA,EAAK;AAAC;AAA3zB,IAA6zB,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE,GAAE;AAAC,SAAK,QAAM,GAAE,KAAK,OAAK,IAAEA,KAAE,KAAK,QAAM;AAAE,QAAI,IAAE,KAAG,KAAK,OAAO;AAAE,SAAK,QAAM,GAAG,KAAK,EAAE,SAAS,CAAC,GAAE,KAAK,QAAM,IAAI,GAAG,GAAE,GAAE,GAAE,OAAG,KAAK,MAAM,CAAC,GAAE,IAAE,IAAE,KAAK,IAAE,IAAE,IAAE,IAAE,KAAK,IAAE,IAAE,IAAE,GAAE,KAAK,IAAE,IAAE,KAAK,KAAK,IAAE,KAAK,CAAC;AAAA,EAAC;AAAA,EAAC,YAAW;AAAC,QAAI,GAAEA,KAAE,GAAE,GAAE,GAAE;AAAE,eAAO;AAAC;AAAG,YAAE,KAAK,MAAM,UAAU,GAAE,IAAE,IAAE,KAAK,IAAE;AAAA,aAAQ,KAAG;AAAG,UAAG,KAAG,IAAE,GAAE,IAAE,IAAE,GAAEA,MAAE,IAAE,QAAK,IAAE,GAAE,IAAE,MAAG,IAAE,KAAK,KAAG,IAAE,IAAE,KAAK,IAAI,CAAC,IAAG,IAAE,KAAK,MAAM,GAAE,IAAEA,OAAG,KAAK,IAAI,CAAC,IAAE,EAAE;AAAA,IAAK;AAAC,WAAO,IAAE,IAAE,KAAK,OAAK,KAAK,IAAE,GAAE,KAAK,QAAM,MAAI,KAAG,KAAK,IAAI,KAAK,MAAM,GAAE,IAAE,KAAK,KAAK,IAAG,KAAK,aAAa,CAAC;AAAA,EAAC;AAAA,EAAC,aAAa,GAAE;AAAC,WAAO,KAAK,UAAQ,YAAU,IAAE,KAAK,MAAM,CAAC;AAAA,EAAC;AAAC;AAAr4C,IAAu4C,KAAG,MAAK;AAAA,EAAC,YAAY,IAAE,GAAEA,MAAE,GAAE,GAAE,GAAE;AAAC,QAAG,KAAK,iBAAe,MAAI,KAAK,SAAO,QAAM,KAAK,UAAQ,WAAU,KAAK,MAAI,GAAE,KAAK,QAAMA,MAAE,GAAE,KAAK,QAAM,GAAE,KAAG,SAAO,IAAE,KAAK,OAAO,IAAG,OAAO,KAAG,aAAW,IAAE,EAAE,SAAS,IAAG,CAAC,KAAK,eAAe,KAAG,KAAK,SAAO,EAAE,OAAM,IAAI,MAAM,0BAA0B,CAAC,MAAMA,GAAC,8BAA8B;AAAE,SAAK,SAAO,GAAG,KAAK,CAAC;AAAA,EAAC;AAAA,EAAC,aAAa,GAAE;AAAC,WAAO,KAAK,eAAe,IAAE,IAAE,KAAK,MAAM,CAAC;AAAA,EAAC;AAAA,EAAC,YAAW;AAAC,WAAO,KAAK,aAAa,KAAK,MAAI,KAAK,QAAM,KAAK,OAAO,CAAC;AAAA,EAAC;AAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,MAAE,GAAE,IAAE,WAAU,GAAE;AAAC,MAAG,GAAGD,GAAC,GAAEC,OAAG,SAAOA,MAAE,IAAG,KAAG,SAAO,IAAE,YAAW,MAAI,aAAW,MAAI,QAAQ,OAAM,IAAI,MAAM,yBAAyB,CAAC,EAAE;AAAE,MAAI,IAAE,IAAI,GAAG,GAAEA,KAAE,GAAE,CAAC,GAAE,IAAE,GAAGD,KAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,OAAO,QAAO,IAAI,GAAE,OAAO,CAAC,IAAE,EAAE,UAAU;AAAE,SAAO,EAAE,SAAS;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,cAAa,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAE,IAAE,GAAEC,MAAE,GAAE,GAAE,GAAE;AAAC,MAAG,GAAGD,GAAC,GAAE,KAAG,QAAM,MAAI,OAAO,OAAM,IAAI,MAAM,yBAAyB,CAAC,EAAE;AAAE,MAAI,IAAE,IAAI,GAAG,GAAEC,KAAE,GAAE,OAAG,CAAC,GAAE,IAAE,GAAGD,KAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,OAAO,QAAO,IAAI,GAAE,OAAO,CAAC,IAAE,EAAE,UAAU;AAAE,SAAO,EAAE,SAAS;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,eAAc,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAG,KAAG,QAAM,MAAI,OAAO,OAAM,IAAI,MAAM,yBAAyB,CAAC,EAAE;AAAE,SAAO,GAAGD,KAAE,GAAE,GAAE,GAAEC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,uBAAsB,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,IAAE,GAAEC,MAAE,GAAE,IAAE,WAAU,GAAE;AAAC,KAAGD,GAAC;AAAE,MAAI,IAAE,GAAGA,KAAE,CAAC,GAAE,IAAE,IAAI,GAAG,GAAEC,KAAE,MAAK,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,OAAO,QAAO,IAAI,GAAE,OAAO,CAAC,IAAE,EAAE,UAAU;AAAE,SAAO,EAAE,SAAS;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,gBAAe,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE;AAAC,SAAO,GAAGD,KAAE,GAAEC,KAAE,SAAQ,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,mBAAkB,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,MAAE,GAAE,IAAE,WAAU;AAAC,MAAGA,QAAI,EAAE,OAAM,IAAI,MAAM,4BAA4B;AAAE,MAAI,IAAE,EAAC,OAAMD,KAAE,MAAK,GAAE,MAAKC,KAAE,OAAM,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC,GAAE,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAIC,MAAE,EAAC,OAAM,EAAED,KAAE,SAAQ,MAAM,EAAC;AAAE,SAAO,EAAE,UAAU,IAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,OAAM,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAIC,MAAE,EAAC,GAAE,EAAED,KAAE,KAAI,YAAY,EAAC;AAAE,SAAO,EAAE,UAAU,IAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,aAAY,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAIC,MAAE,EAAC,GAAE,EAAED,KAAE,KAAI,MAAM,EAAC;AAAE,SAAO,EAAE,UAAU,IAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,OAAM,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAIC,MAAE,EAAC,GAAE,EAAED,KAAE,KAAI,OAAO,EAAC;AAAE,SAAO,EAAE,UAAU,IAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,QAAO,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAI,IAAE,EAAC,GAAE,EAAEA,KAAE,KAAI,SAAS,EAAC,GAAE,IAAE,EAAC,MAAK,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,UAAS,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAE;AAAC,MAAI,IAAE,EAAEA,KAAE,KAAI,SAAS;AAAE,SAAO,EAAE,EAAE,SAAO,GAAE,MAAI,qDAAqD,EAAE,IAAI,GAAG,GAAE,GAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,YAAW,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAED,KAAE,KAAI,SAAS;AAAE,SAAO,EAAEC,IAAE,SAAO,GAAE,MAAI,qDAAqDA,IAAE,IAAI,GAAG,GAAE,GAAGA,KAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,YAAW,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAED,KAAE,KAAI,SAAS;AAAE,SAAO,EAAEC,IAAE,SAAO,GAAE,MAAI,qDAAqDA,IAAE,IAAI,GAAG,GAAE,GAAGA,KAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,YAAW,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAED,KAAE,KAAI,SAAS;AAAE,SAAO,EAAEC,IAAE,SAAO,GAAE,MAAI,qDAAqDA,IAAE,IAAI,GAAG,GAAE,GAAGA,KAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,YAAW,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAIC,MAAE,EAAC,GAAE,EAAED,KAAE,KAAI,OAAO,EAAC;AAAE,SAAO,EAAE,UAAU,IAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,QAAO,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAIC,MAAE,EAAC,GAAE,EAAED,KAAE,KAAI,SAAQ,SAAS,EAAC;AAAE,SAAO,EAAE,UAAU,IAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,QAAO,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAIC,MAAE,EAAC,GAAE,EAAED,KAAE,KAAI,MAAM,EAAC;AAAE,SAAO,EAAE,UAAU,IAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,OAAM,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE,IAAE,CAAC,GAAE,CAAC,GAAE,IAAE,QAAO;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,iBAAiB,GAAE,IAAE,EAAE,GAAE,mBAAkB,iBAAiB,GAAE,IAAE,EAAEC,KAAE,mBAAkB,iBAAiB,GAAE,IAAE,GAAE,IAAE;AAAG,MAAG,EAAE,SAAO,MAAI,IAAE,MAAG,IAAE,EAAE,GAAE,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC,IAAG,MAAI,OAAO,OAAM,IAAI,MAAM,oFAAoF;AAAE,IAAE,EAAE,SAAO,GAAE,MAAI,gEAAgE,EAAE,IAAI,GAAG,GAAE,EAAE,EAAE,SAAO,GAAE,MAAI,2EAA2E,EAAE,IAAI,GAAG,GAAE,EAAE,EAAE,SAAO,GAAE,MAAI,2EAA2E,EAAE,IAAI,GAAG,GAAE,EAAE,EAAE,MAAM,CAAC,MAAI,GAAE,MAAI,yFAAyF,EAAE,MAAM,CAAC,CAAC,GAAG,GAAE,EAAE,EAAE,MAAM,CAAC,MAAI,GAAE,MAAI,yFAAyF,EAAE,MAAM,CAAC,CAAC,GAAG;AAAE,MAAI,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,EAAE,MAAM,CAAC;AAAE,IAAE,EAAE,MAAM,CAAC,MAAI,IAAE,GAAE,MAAI,6EAA6E,IAAE,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,GAAG;AAAE,MAAI,IAAE,GAAG,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,GAAG,GAAE,GAAE,GAAE,SAAQ,CAAC;AAAE,SAAO,IAAE,EAAE,GAAE,CAAC,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC,IAAE;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,kBAAiB,GAAE,CAAC;AAAE,eAAe,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAED,KAAE,KAAI,WAAW,GAAE,IAAE,EAAE,GAAE,KAAI,WAAW;AAAE,IAAEC,IAAE,UAAQ,EAAE,OAAM,MAAI,kDAAkDA,IAAE,KAAK,YAAY,EAAE,KAAK,IAAI,GAAE,EAAEA,IAAE,SAAO,GAAE,MAAI,qCAAqCA,IAAE,KAAK,IAAI,GAAE,EAAE,EAAE,SAAO,GAAE,MAAI,qCAAqC,EAAE,KAAK,IAAI;AAAE,MAAI,IAAE,MAAMA,IAAE,KAAK,GAAE,IAAE,MAAM,EAAE,KAAK,GAAE,IAAE,IAAI,IAAI,CAAC,GAAE,IAAE;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,IAAI,GAAE,IAAI,EAAE,CAAC,CAAC,KAAG;AAAI,MAAI,IAAE,IAAI,GAAG,CAAC,CAAC,GAAEA,IAAE,KAAK,GAAE,IAAE,IAAI,GAAG,CAAC,CAAC,GAAE,OAAO;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,IAAE,EAAE,QAAO,IAAI,GAAE,IAAI,EAAE,CAAC,CAAC,MAAI,EAAE,OAAO,CAAC,IAAE,EAAE,CAAC,GAAE,EAAE,OAAO,CAAC,IAAE,GAAE;AAAK,SAAM,CAAC,EAAE,SAAS,GAAE,EAAE,SAAS,CAAC;AAAC;AAAC,IAAI,KAAG;AAAG,SAAS,GAAGD,KAAE;AAAC,MAAIC,MAAE,EAAC,GAAE,EAAED,KAAE,KAAI,MAAM,EAAC;AAAE,SAAO,EAAE,UAAU,IAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,OAAM,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAIC,MAAE,EAAC,GAAE,EAAED,KAAE,KAAI,OAAM,SAAS,EAAC;AAAE,SAAO,EAAE,UAAU,IAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,MAAK,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAIC,MAAE,EAAC,GAAE,EAAED,KAAE,KAAI,MAAM,EAAC;AAAE,SAAO,EAAE,UAAU,IAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,OAAM,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,SAAS;AAAE,SAAO,EAAE,EAAE,SAAO,GAAE,MAAI,mDAAmD,EAAE,IAAI,SAAS,GAAE,GAAG,GAAE,CAAC,CAAC,GAAE,CAACC,GAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,UAAS,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,SAAS;AAAE,SAAO,EAAE,EAAE,SAAO,GAAE,MAAI,mDAAmD,EAAE,IAAI,SAAS,GAAE,GAAG,GAAE,GAAEC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,UAAS,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,SAAS;AAAE,SAAO,EAAE,EAAE,SAAO,GAAE,MAAI,mDAAmD,EAAE,IAAI,SAAS,GAAE,GAAG,GAAE,GAAEC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,UAAS,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,SAAS;AAAE,SAAO,EAAE,EAAE,SAAO,GAAE,MAAI,mDAAmD,EAAE,IAAI,SAAS,GAAE,GAAG,GAAE,GAAEC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,UAAS,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,IAAE,IAAG;AAAC,MAAIC,MAAE,EAAED,KAAE,UAAS,WAAU,SAAS;AAAE,MAAG,MAAI,OAAK,IAAEC,IAAE,OAAK,IAAG,MAAIA,IAAE,OAAK,EAAE,OAAM,MAAM,4EAA4EA,IAAE,IAAI,gBAAgB,CAAC,EAAE;AAAE,MAAI,IAAE,EAAC,QAAOA,IAAC,GAAE,IAAE,EAAC,KAAI,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,UAAS,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,IAAEA,IAAE,UAAQ,aAAY,MAAI,6DAA6DA,IAAE,KAAK,GAAG;AAAE,MAAI,IAAE,EAAC,OAAMA,IAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,MAAK,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAE;AAAC,IAAEA,IAAE,UAAQ,aAAY,MAAI,8DAA8DA,IAAE,KAAK,GAAG;AAAE,MAAI,IAAE,EAAC,OAAMA,IAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,OAAM,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAE;AAAC,MAAI,IAAEA,IAAE,MAAMA,IAAE,MAAM,SAAO,CAAC,GAAEC,MAAED,IAAE,OAAK,GAAE;AAAE,MAAG,KAAG,GAAE;AAAC,QAAI,IAAE,EAAEA,KAAE,CAACC,KAAE,CAAC,CAAC;AAAE,QAAE,GAAG,CAAC;AAAA,EAAC,OAAK;AAAC,QAAI,IAAE,CAACA,KAAE,KAAG,IAAE,EAAE,GAAE,IAAE,EAAE,GAAGD,GAAC,GAAE,CAACC,KAAE,CAAC,CAAC,GAAE,IAAE,EAAE,GAAGD,GAAC,GAAE,CAACC,KAAE,CAAC,CAAC,GAAE,IAAE,GAAG,GAAG,GAAE,CAAC,GAAE,CAAC,GAAE,CAACA,KAAE,IAAE,CAAC,CAAC,GAAE,CAAC,GAAE,IAAE,GAAG,GAAG,GAAG,GAAE,CAAC,GAAE,CAAC,GAAE,CAACA,KAAE,IAAE,CAAC,CAAC,GAAE,CAAC,GAAE,GAAG,EAAE,CAAC,GAAE,IAAE,GAAG,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,IAAE,GAAG,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,IAAE,EAAE,GAAG,GAAE,CAAC,GAAE,CAAC,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,CAAC;AAAE,QAAE,GAAG,CAAC;AAAA,EAAC;AAAC,MAAG,IAAE,GAAG,CAAC,GAAED,IAAE,SAAO,KAAGA,IAAE,MAAM,CAAC,MAAI,GAAE;AAAC,QAAI,IAAE,GAAE,IAAEA,IAAE,MAAM,CAAC;AAAE,QAAE,EAAE,GAAE,CAAC,GAAE,EAAE,MAAM,CAAC,IAAE,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC,GAAE,EAAE,QAAQ;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,QAAO,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAE,GAAEC,MAAE,GAAE;AAAC,MAAI,IAAE,EAAC,GAAE,EAAED,KAAE,KAAI,OAAO,EAAC,GAAE,IAAE,EAAC,iBAAgB,GAAE,MAAKC,IAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,QAAO,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,IAAEA,IAAE,UAAQ,WAAU,MAAI,mDAAmDA,IAAE,KAAK,EAAE;AAAE,MAAIC,MAAED,IAAE,MAAMA,IAAE,MAAM,SAAO,CAAC,GAAE,IAAEA,IAAE,OAAKC,KAAE;AAAE,MAAG,KAAG,QAAM,IAAEA,KAAE;AAAC,QAAI,IAAED,IAAE,MAAM,IAAI,OAAG,CAAC,GAAE,IAAEA,IAAE,MAAM,IAAI,OAAG,CAAC;AAAE,MAAEA,IAAE,MAAM,SAAO,CAAC,IAAE,GAAE,IAAE,GAAGA,KAAE,GAAE,CAAC,GAAEC,MAAE;AAAA,EAAC,WAAS,KAAG,QAAM,IAAEA,KAAE;AAAC,QAAI,IAAED,IAAE,MAAM,IAAI,OAAG,CAAC;AAAE,MAAEA,IAAE,MAAM,SAAO,CAAC,IAAE,IAAEC,KAAE,IAAE,GAAG,CAACD,KAAE,GAAG,CAAC,CAAC,GAAEA,IAAE,MAAM,SAAO,CAAC,GAAEC,MAAE;AAAA,EAAC,MAAM,KAAED;AAAE,MAAI,IAAE,GAAG,CAAC,GAAE,IAAE,EAAE,GAAG,GAAE,CAAC,GAAE,CAAC,GAAEC,GAAC,CAAC,GAAE,IAAE,GAAG,CAAC,GAAE,IAAE,KAAK,MAAMA,MAAE,CAAC,IAAE,GAAE,IAAE,GAAG,CAAC,GAAE,IAAE,GAAG,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC,GAAEA,MAAE,CAAC,GAAE,EAAE,MAAM,SAAO,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC,GAAEA,MAAE,CAAC,GAAE,EAAE,MAAM,SAAO,CAAC,GAAE,IAAE,EAAE,MAAM,MAAM;AAAE,SAAO,EAAE,EAAE,MAAM,SAAO,CAAC,IAAE,GAAE,EAAE,GAAG,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,OAAM,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAED,KAAE,KAAI,mBAAmB,GAAE,IAAE,EAAE,GAAE,KAAI,mBAAmB;AAAE,GAACC,KAAE,CAAC,IAAE,GAAGA,KAAE,CAAC,GAAE,GAAGA,IAAE,OAAM,EAAE,KAAK;AAAE,MAAI,IAAE,EAAC,GAAEA,KAAE,GAAE,EAAC,GAAE,IAAE,CAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,oBAAmB,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAED,KAAE,KAAI,WAAU,mBAAmB;AAAE,SAAO,EAAEC,KAAE,GAAGA,IAAE,OAAM,CAAC,EAAE,QAAQ;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,UAAS,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,IAAE,GAAE;AAAC,MAAIC,MAAE,GAAGD,KAAE,WAAU,SAAQ,mBAAmB;AAAE,IAAEC,IAAE,UAAQ,GAAE,MAAI,sCAAsC,GAAEA,IAAE,SAAO,KAAG,EAAE,KAAGA,IAAE,CAAC,EAAE,MAAK,MAAI,oCAAoC;AAAE,MAAI,IAAEA,KAAE,IAAE,EAAC,MAAK,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,QAAO,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,IAAE,GAAE;AAAC,MAAI,IAAE,EAAC,GAAE,EAAEA,KAAE,KAAI,MAAM,EAAC,GAAE,IAAE,EAAC,OAAM,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,OAAM,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE,IAAE,GAAE,IAAE,GAAE,IAAE,GAAE,IAAE,GAAE,IAAE,GAAE;AAAC,MAAI,IAAE,EAAC,GAAE,EAAED,KAAE,KAAI,gBAAe,mBAAmB,EAAC,GAAE,IAAE,EAAC,OAAM,GAAE,KAAIC,KAAE,SAAQ,GAAE,WAAU,GAAE,SAAQ,GAAE,cAAa,GAAE,aAAY,GAAE,gBAAe,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,eAAc,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAIC,MAAE,EAAC,GAAE,EAAED,KAAE,KAAI,OAAM,SAAS,EAAC;AAAE,SAAO,EAAE,UAAU,IAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,MAAK,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,KAAGA,GAAC;AAAE,MAAIC,MAAE,GAAGD,KAAE,CAAC;AAAE,MAAGC,IAAE,WAAS,EAAE,OAAM,IAAI,MAAM,oDAAoD;AAAE,SAAO,GAAGD,KAAE,MAAKC,KAAE,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAG,GAAGD,GAAC,GAAE,KAAG,QAAM,EAAE,WAAS,EAAE,OAAM,IAAI,MAAM,+CAA+C;AAAE,MAAI,IAAE,GAAGA,KAAEC,GAAC;AAAE,MAAG,EAAE,WAAS,KAAG,EAAE,WAAS,EAAE,OAAM,IAAI,MAAM,gEAAgE;AAAE,MAAG,EAAE,WAAS,KAAG,KAAG,KAAK,OAAM,IAAI,MAAM,8EAA8E;AAAE,SAAO,GAAGD,KAAE,GAAE,GAAEC,GAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAG,GAAGD,GAAC,GAAE,KAAG,QAAM,EAAE,WAAS,EAAE,OAAM,IAAI,MAAM,iDAAiD;AAAE,MAAI,IAAE,GAAGA,KAAEC,GAAC;AAAE,MAAG,EAAE,WAAS,KAAG,EAAE,WAAS,EAAE,OAAM,IAAI,MAAM,kEAAkE;AAAE,MAAG,EAAE,WAAS,KAAG,KAAG,KAAK,OAAM,IAAI,MAAM,yEAAyE;AAAE,SAAO,GAAGD,KAAE,GAAE,GAAEC,GAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAG,GAAGD,GAAC,GAAE,KAAG,QAAM,EAAE,WAAS,EAAE,OAAM,IAAI,MAAM,gDAAgD;AAAE,MAAI,IAAE,GAAGA,KAAEC,GAAC;AAAE,MAAG,EAAE,WAAS,KAAG,EAAE,WAAS,EAAE,OAAM,IAAI,MAAM,oEAAoE;AAAE,MAAG,EAAE,WAAS,KAAG,KAAG,KAAK,OAAM,IAAI,MAAM,yEAAyE;AAAE,SAAO,GAAGD,KAAE,GAAE,GAAEC,GAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAG,GAAGD,GAAC,GAAE,KAAG,QAAM,EAAE,WAAS,EAAE,OAAM,IAAI,MAAM,gDAAgD;AAAE,MAAI,IAAE,GAAGA,KAAEC,GAAC;AAAE,MAAG,EAAE,WAAS,KAAG,EAAE,WAAS,EAAE,OAAM,IAAI,MAAM,sEAAsE;AAAE,MAAG,EAAE,WAAS,KAAG,KAAG,KAAK,OAAM,IAAI,MAAM,yEAAyE;AAAE,SAAO,GAAGD,KAAE,GAAE,GAAEC,GAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAG,GAAGD,GAAC,GAAE,KAAG,QAAM,EAAE,WAAS,EAAE,OAAM,IAAI,MAAM,+CAA+C;AAAE,MAAI,IAAE,GAAGA,KAAEC,GAAC;AAAE,MAAG,EAAE,WAAS,KAAG,EAAE,WAAS,EAAE,OAAM,IAAI,MAAM,wEAAwE;AAAE,MAAG,EAAE,WAAS,KAAG,KAAG,KAAK,OAAM,IAAI,MAAM,yEAAyE;AAAE,SAAO,IAAE,KAAG,GAAE,GAAGD,KAAE,GAAE,GAAEC,GAAC;AAAC;AAAC,IAAI,KAAG,CAAC;AAAE,GAAG,IAAG,EAAC,iBAAgB,MAAI,IAAG,eAAc,MAAI,IAAG,qBAAoB,MAAI,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,EAAE,OAAK,IAAE,EAAE,MAAM,EAAE,OAAK,CAAC,IAAE,GAAE,IAAE,EAAE,OAAK,IAAE,EAAE,OAAK,IAAE,GAAE,IAAE,6FAA6FA,IAAE,KAAK,oBAAoB,EAAE,KAAK,YAAYD,GAAC,eAAe,CAAC,mBAAmB,CAAC;AAAI,MAAGC,IAAE,OAAK,EAAE,OAAM,IAAI,MAAM,IAAE,kBAAkB,CAAC,IAAI;AAAE,MAAGD,IAAE,SAAO,KAAGC,IAAE,OAAK,GAAG,OAAM,IAAI,MAAM,IAAE,0BAA0B,KAAGA,IAAE,OAAK,EAAE,EAAE;AAAE,MAAGA,IAAE,SAAO,IAAED,IAAE,SAAO,EAAE,OAAM,IAAI,MAAM,IAAE,mBAAmB,IAAEA,IAAE,SAAO,CAAC,EAAE;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,EAAE,KAAGC,IAAE,MAAM,CAAC,MAAI,EAAE,MAAM,CAAC,EAAE,OAAM,IAAI,MAAM,IAAE,kBAAkB,CAAC,MAAMA,IAAE,MAAM,CAAC,CAAC,sBAAsB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,IAAI;AAAE,WAAQ,IAAE,GAAE,IAAEA,IAAE,OAAK,GAAE,EAAE,EAAE,KAAGA,IAAE,MAAM,IAAE,CAAC,MAAID,IAAE,IAAE,CAAC,EAAE,OAAM,IAAI,MAAM,IAAE,kBAAkB,IAAE,CAAC,MAAMC,IAAE,MAAM,IAAE,CAAC,CAAC,cAAc,IAAE,CAAC,MAAMD,IAAE,IAAE,CAAC,CAAC,GAAG;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAG,EAAE,OAAK,EAAE,OAAM,IAAI,MAAM,+EAA+E,EAAE,IAAI,GAAG;AAAE,MAAGD,IAAE,OAAK,EAAE,OAAM,IAAI,MAAM,+EAA+EA,IAAE,IAAI,GAAG;AAAE,MAAG,EAAE,UAAQ,QAAQ,OAAM,IAAI,MAAM,0DAA0D,EAAE,KAAK,EAAE;AAAE,MAAGC,IAAE,SAAO,EAAE,OAAM,IAAI,MAAM,6DAA6DA,GAAC,EAAE;AAAE,MAAGA,IAAE,WAAS,GAAE;AAAC,QAAG,EAAE,SAAO,EAAE,OAAM,IAAI,MAAM,sDAAsD,EAAE,KAAK,EAAE;AAAE,QAAGD,IAAE,SAAO,EAAE,OAAM,IAAI,MAAM,sDAAsDA,IAAE,KAAK,EAAE;AAAA,EAAC;AAAC,KAAGC,KAAE,GAAED,GAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,EAAE,MAAM,QAAO,IAAE,IAAE,IAAE,EAAE,MAAM,IAAE,CAAC,IAAE,GAAE,IAAEA,IAAE,QAAO,IAAE;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,EAAE,MAAGA,IAAE,CAAC;AAAE,MAAI,IAAE,IAAE,IAAE,IAAE,GAAE,IAAE,GAAG,EAAE,KAAK,IAAE,GAAE,IAAE,CAAC,GAAG,GAAGA,IAAE,MAAM,GAAE,CAAC,CAAC,GAAE,CAAC,GAAE,IAAE,GAAGA,GAAC;AAAE,SAAM,EAAC,WAAU,GAAE,YAAW,GAAE,WAAU,GAAE,SAAQ,GAAE,YAAW,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,EAAED,KAAE,UAAS,qBAAqB,GAAE,IAAE,EAAE,GAAE,WAAU,uBAAsB,OAAO,GAAE,IAAE,EAAEC,KAAE,WAAU,qBAAqB;AAAE,MAAG,GAAG,GAAE,GAAE,EAAE,KAAK,GAAE,EAAE,UAAQ,EAAE,MAAM,OAAM,IAAI,MAAM,iEAAiE,EAAE,KAAK,QAAQ,EAAE,KAAK,GAAG;AAAE,MAAI,IAAE,EAAC,QAAO,GAAE,SAAQ,GAAE,SAAQ,EAAC,GAAE,IAAE,CAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,sBAAqB,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,IAAE,GAAEC,MAAE,MAAG;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,MAAM;AAAE,MAAG,EAAE,SAAO,EAAE,OAAM,IAAI,MAAM,oDAAoD;AAAE,MAAI,IAAE,EAAE,MAAM,EAAE,MAAM,SAAO,CAAC;AAAE,MAAG,IAAE,EAAE,OAAM,IAAI,MAAM,6CAA6C,CAAC,EAAE;AAAE,MAAG,IAAE,EAAE,OAAM,IAAI,MAAM,uDAAuD,CAAC,aAAa,CAAC,EAAE;AAAE,MAAI,IAAE,EAAC,GAAE,EAAC,GAAE,IAAE,EAAC,GAAE,GAAE,QAAOC,IAAC,GAAE,CAAC,GAAE,CAAC,IAAE,EAAE,UAAU,IAAG,GAAE,CAAC;AAAE,SAAM,EAAC,QAAO,GAAE,SAAQ,EAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,OAAM,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,IAAE,GAAEC,MAAE,GAAE,GAAE,GAAE;AAAC,MAAG,GAAGD,GAAC,GAAE,KAAG,QAAM,MAAI,OAAO,OAAM,IAAI,MAAM,mCAAmC;AAAE,MAAI,IAAE,IAAI,GAAG,GAAEC,KAAE,GAAE,MAAG,CAAC,GAAE,IAAE,GAAGD,KAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,OAAO,QAAO,IAAI,GAAE,OAAO,CAAC,IAAE,EAAE,UAAU;AAAE,SAAO,EAAE,SAAS;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,kBAAiB,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAE,IAAE,GAAE;AAAC,MAAIC,MAAE,EAAED,KAAE,KAAI,UAAS,mBAAmB;AAAE,IAAEC,IAAE,OAAK,GAAE,MAAI,sCAAsC;AAAE,MAAI,IAAE,EAAC,GAAEA,IAAC,GAAE,IAAE,EAAC,MAAK,EAAC,GAAE,CAAC,GAAE,CAAC,IAAE,EAAE,UAAU,IAAG,GAAE,CAAC;AAAE,SAAM,EAAC,QAAO,GAAE,SAAQ,EAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,SAAQ,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,oBAAoB,GAAE,IAAE,EAAE,GAAE,cAAa,sBAAqB,OAAO;AAAE,IAAE,GAAGC,GAAC,GAAE,MAAI,kCAAkC;AAAE,MAAI,IAAE,EAAC,GAAE,GAAE,YAAW,EAAC,GAAE,IAAE,EAAC,aAAYA,IAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,qBAAoB,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,IAAE,GAAE;AAAC,MAAIC,MAAE,EAAED,KAAE,KAAI,WAAU,mBAAmB;AAAE,IAAE,KAAG,CAACC,IAAE,MAAM,UAAQ,IAAEA,IAAE,MAAM,QAAO,MAAI,UAAU,CAAC,gBAAgBA,IAAE,MAAM,MAAM,KAAKA,IAAE,MAAM,MAAM,GAAG;AAAE,MAAI,IAAE,EAAC,OAAMA,IAAC,GAAE,IAAE,EAAC,MAAK,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,UAAS,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,SAAO,GAAGA,KAAE,GAAE,OAAO;AAAC;AAAC,SAAS,GAAGA,KAAE,IAAE,MAAGC,KAAE,GAAE;AAAC,SAAO,EAAE,aAAaD,KAAE,GAAEC,KAAE,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,IAAI,GAAE,CAAC,KAAGA,IAAE,KAAK,CAAC;AAAE,MAAI,IAAE,GAAGD,KAAE,OAAO,GAAE,IAAE,GAAG,CAACC,IAAE,QAAOD,IAAE,MAAM,GAAE,OAAO;AAAE,WAAQ,IAAE,GAAE,IAAEC,IAAE,QAAO,KAAI;AAAC,QAAI,IAAE,EAAE,WAAWA,IAAE,CAAC,CAAC,GAAE,IAAE,IAAED,IAAE;AAAO,MAAE,OAAO,IAAI,GAAE,CAAC;AAAA,EAAC;AAAC,SAAO,EAAE,SAAS;AAAC;AAAC,eAAe,GAAGA,KAAE;AAAC,MAAI,IAAE,EAAEA,KAAE,aAAY,cAAa,MAAM,GAAEC,MAAE,MAAM,EAAE,KAAK,GAAE,IAAE,GAAG,EAAE,OAAMA,GAAC;AAAE,SAAOD,QAAI,KAAG,EAAE,QAAQ,GAAE;AAAC;AAAC,IAAI,KAAG;AAAG,eAAe,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,EAAED,KAAE,UAAS,UAAU,GAAE,IAAE,EAAE,GAAE,QAAO,YAAW,MAAM,GAAE,IAAEC,OAAG,OAAK,IAAEA,KAAE,IAAE,EAAE,MAAK,IAAE,EAAE;AAAM,IAAE,IAAE,GAAE,MAAI,uBAAuB,GAAE,GAAG,EAAE,MAAM,GAAE,IAAE,CAAC,GAAE,EAAE,OAAM,mEAAmE;AAAE,MAAI,IAAE;AAAE,WAAQ,IAAE,GAAE,IAAE,IAAE,GAAE,IAAI,MAAG,EAAE,CAAC;AAAE,MAAI,IAAE,EAAE,MAAM,GAAE,CAAC,EAAE,OAAO,CAAC,CAAC,GAAE,EAAE,MAAM,IAAE,CAAC,CAAC,GAAE,IAAE,EAAE,GAAE,CAAC,GAAE,IAAE,EAAE,GAAE,CAAC,EAAE,CAAC,GAAE,IAAE,MAAM,GAAG,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC,CAAC,CAAC,GAAE,IAAE,GAAG,GAAE,GAAE,CAAC;AAAE,SAAOD,QAAI,KAAG,EAAE,QAAQ,GAAE,MAAI,KAAG,EAAE,QAAQ,GAAE,EAAE,QAAQ,GAAE,EAAE,QAAQ,GAAE,EAAE,QAAQ,GAAE,EAAE,QAAQ,GAAE;AAAC;AAAC,IAAI,KAAG;AAAG,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,WAAW;AAAE,MAAG,KAAG,SAAO,IAAE,EAAE,MAAM,IAAI,CAAC,GAAE,MAAI,CAAC,EAAE,QAAQ,IAAG,EAAE,EAAE,SAAO,EAAE,QAAO,MAAI,qCAAqC,EAAE,IAAI,8BAA8B,CAAC,GAAG,GAAE,EAAE,QAAQ,OAAG;AAAC,MAAE,KAAG,KAAG,IAAE,EAAE,MAAK,MAAI,+CAA+C,EAAE,OAAK,CAAC,YAAY,CAAC,EAAE;AAAA,EAAC,CAAC,GAAE,EAAE,QAAM,EAAE,QAAO,EAAE,MAAM;AAAE,MAAI,IAAE,EAAC,GAAE,EAAC,GAAE,IAAE,EAAC,MAAK,EAAC;AAAE,SAAO,EAAE,UAAQ,cAAY,GAAG,MAAI;AAAC,QAAI,IAAE,GAAG,CAAC,GAAE,IAAE,GAAG,CAAC;AAAE,WAAO,IAAE,EAAE,UAAU,IAAG,EAAC,GAAE,EAAC,GAAE,CAAC,GAAE,IAAE,EAAE,UAAU,IAAG,EAAC,GAAE,EAAC,GAAE,CAAC,GAAEC,QAAI,IAAE,GAAG,CAAC,IAAG,GAAG,GAAE,CAAC;AAAA,EAAC,CAAC,IAAE,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,YAAW,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,IAAE,MAAG;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,eAAe,GAAE,IAAE,EAAE,GAAE,KAAI,eAAe,GAAE,IAAE,EAAEC,KAAE,SAAQ,eAAe;AAAE,KAAG,GAAE,CAAC,GAAE,EAAE,GAAG,EAAE,OAAM,EAAE,KAAK,GAAE,MAAI,2BAA2B;AAAE,MAAI,IAAE,GAAG,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC,GAAE,IAAE,GAAG,GAAG,GAAE,CAAC,GAAE,CAAC;AAAE,MAAG,GAAE;AAAC,MAAE,KAAG,MAAK,MAAI,gDAAgD;AAAE,QAAI,IAAE,EAAE,GAAE,QAAO,eAAe;AAAE,QAAE,GAAG,GAAE,GAAG,GAAE,GAAG,GAAE,CAAC,CAAC,CAAC;AAAA,EAAC;AAAC,SAAO,GAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,gBAAe,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,KAAGA,GAAC;AAAE,MAAI,IAAE,EAAED,KAAE,WAAU,aAAY,OAAO,GAAE,IAAE,EAAE,GAAE,WAAU,WAAW;AAAE,KAAG,GAAE,GAAEC,GAAC;AAAE,MAAI,IAAE,EAAC,SAAQ,GAAE,SAAQ,EAAC,GAAE,IAAE,EAAC,OAAMA,IAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,YAAW,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE;AAAC,MAAGD,IAAE,UAAQ,QAAQ,OAAM,IAAI,MAAM,8EAA8EA,IAAE,KAAK,GAAG;AAAE,MAAGA,IAAE,OAAK,EAAE,OAAM,IAAI,MAAM,sEAAsEA,IAAE,KAAK,GAAG;AAAE,MAAI,IAAEA,IAAE,OAAK,IAAEA,IAAE,MAAM,CAAC,IAAE,GAAE,IAAEA,IAAE,OAAK,IAAEA,IAAE,MAAM,CAAC,IAAE;AAAE,MAAGC,IAAE,WAAS,EAAE,OAAM,IAAI,MAAM,kDAAkDA,IAAE,MAAM,gBAAgB,CAAC,GAAG;AAAE,MAAI,IAAE,EAAE;AAAK,MAAG,EAAE,EAAE,SAAO,KAAG,EAAE,SAAO,KAAG,MAAI,GAAG,OAAM,IAAI,MAAM,oCAAoC,EAAE,KAAK,sBAAsB,CAAC,GAAG;AAAE,MAAG,EAAE,UAAQ,EAAE,MAAM,OAAM,IAAI,MAAM,mDAAmD;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE,IAAE,GAAE;AAAC,KAAGA,GAAC;AAAE,MAAI,IAAE,EAAED,KAAE,iBAAgB,iBAAgB,OAAO,GAAE,IAAE,EAAE,GAAE,gBAAe,iBAAgB,mBAAmB,GAAE,IAAE,EAAE,GAAE,gBAAe,iBAAgB,EAAE,KAAK;AAAE,KAAG,GAAE,GAAEC,KAAE,CAAC;AAAE,MAAI,IAAE,EAAC,eAAc,GAAE,cAAa,GAAE,cAAa,EAAC,GAAE,IAAE,EAAC,aAAYA,IAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,gBAAe,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAE,GAAE,WAAU,YAAW,OAAO,GAAE,IAAE,EAAC,QAAO,EAAED,KAAE,KAAI,YAAW,mBAAmB,GAAE,SAAQC,IAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,WAAU,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAG,KAAG,KAAK,QAAOA,IAAE,MAAM,MAAM;AAAE,MAAG,GAAGA,IAAE,OAAM,CAAC,EAAE,QAAO;AAAE,MAAGA,IAAE,MAAM,WAAS,EAAE,QAAO;AAAC,QAAIC,MAAE,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAED,IAAE,MAAM,QAAO,IAAI,GAAE,CAAC,KAAG,QAAMA,IAAE,MAAM,CAAC,KAAG,OAAKC,IAAE,KAAKD,IAAE,MAAM,CAAC,CAAC,IAAEC,IAAE,KAAK,EAAE,CAAC,CAAC;AAAE,WAAOA;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,SAAS;AAAE,MAAG,EAAE,EAAE,UAAQ,WAAU,MAAI,gFAAgF,EAAE,KAAK,kBAAkB,GAAE,EAAE,KAAG,KAAG,IAAE,GAAE,MAAI,qDAAqD,CAAC,GAAG,GAAE,MAAI,EAAE,QAAOA,eAAa,KAAG,EAAE,MAAM,IAAE;AAAE,MAAI,IAAE,GAAG,GAAEC,GAAC,GAAE,IAAE,IAAE,GAAE,IAAE,GAAG,GAAG,GAAG,GAAG,GAAE,GAAE,GAAE,WAAU,CAAC,GAAE,CAAC,CAAC,GAAE,CAAC;AAAE,SAAO,GAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,UAAS,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,SAAO,KAAK,MAAM,KAAK,IAAI,GAAE,KAAK,KAAK,KAAK,IAAIA,GAAC,IAAE,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,IAAED,MAAE,GAAE,IAAE,IAAI,aAAaA,GAAC;AAAE,WAAQ,IAAE,GAAE,IAAEA,KAAE,EAAE,GAAE;AAAC,QAAI,IAAE,IAAE,KAAK,KAAG,KAAGA,MAAE,IAAE;AAAG,MAAE,CAAC,IAAE,IAAEC,MAAE,KAAK,IAAI,CAAC;AAAA,EAAC;AAAC,SAAO,GAAG,GAAE,SAAS;AAAC;AAAC,eAAe,GAAGD,KAAE,GAAEC,MAAE,GAAE;AAAC,MAAI,IAAE,EAAED,KAAE,eAAc,QAAQ,GAAE,IAAE,EAAE,GAAE,WAAU,QAAQ;AAAE,IAAE,EAAE,OAAK,GAAE,MAAI,uEAAuE,EAAE,IAAI,EAAE,GAAE,EAAE,EAAE,OAAK,MAAI,EAAE,MAAK,MAAI,mFAAmF,EAAE,IAAI,qBAAqB,EAAE,IAAI,EAAE,GAAE,GAAG,EAAE,MAAM,MAAM,GAAE,EAAE,MAAM,SAAO,CAAC,GAAE,EAAE,OAAM,yFAAyF;AAAE,MAAI,IAAE,EAAE,MAAM,EAAE,MAAM,SAAO,CAAC;AAAE,IAAEC,MAAE,KAAGA,OAAG,GAAE,MAAI,4EAA4E,CAAC,cAAcA,GAAC,EAAE;AAAE,MAAI,IAAE,MAAM,EAAE,KAAK,GAAE,IAAE,MAAM,EAAE,KAAK,GAAE,CAAC,GAAE,CAAC,IAAE,CAAC,EAAE,SAAO,GAAE,CAAC,GAAE,IAAE,GAAG,QAAO,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,QAAI,IAAE,IAAE,GAAE,IAAE,EAAE,SAAS,GAAE,IAAE,CAAC,GAAE,IAAE,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,IAAI,GAAE,KAAK,EAAC,OAAM,EAAE,CAAC,GAAE,OAAM,EAAC,CAAC;AAAE,MAAE,KAAK,CAAC,GAAE,MAAI,EAAE,QAAM,EAAE,KAAK,GAAE,EAAE,CAAC,IAAE;AAAE,aAAQ,IAAE,GAAE,IAAEA,KAAE,IAAI,KAAG,EAAE,CAAC,EAAE,UAAQ,EAAE,CAAC,GAAE;AAAC,QAAE,CAAC,IAAE;AAAE;AAAA,IAAK;AAAA,EAAC;AAAC,SAAOD,QAAI,KAAG,EAAE,QAAQ,GAAE,MAAI,KAAG,EAAE,QAAQ,GAAE,GAAG,GAAE,EAAE,OAAM,MAAM;AAAC;AAAC,IAAI,KAAG;AAAG,IAAI,KAAG,CAAC;AAAE,GAAG,IAAG,EAAC,QAAO,MAAI,IAAG,iBAAgB,MAAI,IAAG,QAAO,MAAI,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE,GAAE,IAAE,QAAO,GAAE;AAAC,MAAI,IAAED;AAAE,EAAAA,IAAE,SAAO,MAAI,IAAE,EAAEA,KAAE,CAAC,GAAEA,IAAE,MAAM,CAAC,GAAEA,IAAE,MAAM,CAAC,GAAEA,IAAE,MAAM,CAAC,CAAC,CAAC;AAAG,MAAI,IAAE;AAAE,IAAE,SAAO,MAAI,IAAE,EAAE,GAAE,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC,IAAG,EAAE,EAAE,SAAO,GAAE,MAAI,iEAAiE,EAAE,KAAK,GAAG,GAAE,EAAE,EAAE,SAAO,GAAE,MAAI,8DAA8D,EAAE,KAAK,GAAG,GAAE,EAAEC,IAAE,WAAS,GAAE,MAAI,mEAAmEA,GAAC,GAAG;AAAE,MAAI,IAAE,MAAI,SAAO,EAAE,MAAM,CAAC,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,MAAI,SAAO,EAAE,MAAM,CAAC,IAAE,EAAE,MAAM,CAAC;AAAE,IAAE,MAAIA,IAAE,CAAC,GAAE,MAAI,4CAA4C,CAAC,uCAAuCA,IAAE,CAAC,CAAC,GAAG,GAAE,EAAE,MAAIA,IAAE,CAAC,GAAE,MAAI,0CAA0C,CAAC,yCAAyCA,IAAE,CAAC,CAAC,IAAI,GAAE,GAAG,mBAAkB,GAAE,CAAC;AAAE,MAAI,IAAE,EAAC,GAAE,GAAE,IAAG,EAAC,GAAE,IAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,YAAW,GAAE,iBAAgB,GAAE,aAAYA,IAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,uBAAsB,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAGA,OAAG,QAAMA,QAAI,SAAS,QAAOD;AAAE,MAAGC,QAAI,OAAO,QAAO,GAAGD,KAAE,GAAG,CAAC,CAAC;AAAE,QAAM,IAAI,MAAM,gDAAgDC,GAAC,GAAG;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,GAAE,IAAE,GAAGD,IAAE,OAAM,EAAE,KAAK;AAAE,SAAO,EAAE,SAAO,MAAIC,MAAE,GAAGA,KAAE,CAAC,IAAG,EAAEA,KAAED,IAAE,KAAK;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE;AAAC,MAAG,MAAI,SAAS,QAAOD;AAAE,MAAG,MAAI,OAAO,QAAO,GAAGA,GAAC;AAAE,MAAG,MAAI,MAAM,QAAO,GAAGA,GAAC;AAAE,MAAG,MAAI,QAAQ,QAAO,GAAGA,GAAC;AAAE,MAAG,MAAI,QAAQ,QAAO,GAAGA,KAAEC,GAAC;AAAE,MAAG,MAAI,YAAY,QAAO,GAAGD,KAAE,CAAC;AAAE,MAAG,MAAI,UAAU,QAAO,GAAGA,GAAC;AAAE,QAAM,IAAI,MAAM,4BAA4B,CAAC,GAAG;AAAC;AAAC,IAAI,KAAG,CAACA,KAAE,MAAI,EAAEA,MAAE,MAAI,MAAI;AAAS,SAAS,GAAG,EAAC,GAAEA,KAAE,QAAO,GAAE,SAAQC,KAAE,KAAI,GAAE,YAAW,IAAE,QAAO,WAAU,IAAE,CAAC,GAAE,CAAC,GAAE,iBAAgB,GAAE,MAAK,GAAE,YAAW,IAAE,UAAS,wBAAuB,GAAE,gBAAe,EAAC,GAAE;AAAC,MAAG,IAAE,KAAG,UAAS,GAAG,EAAE,MAAM,eAAc,CAAC,MAAI,OAAG;AAAC,MAAE,MAAI,QAAO,MAAI,4CAA4C,CAAC,6GAA6G;AAAE,QAAI,IAAE,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE,CAAC;AAAE,WAAO,KAAG,SAAO,IAAE,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,GAAE,GAAE,CAAC;AAAA,EAAC;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,UAAS,SAAS,GAAE,IAAE,EAAE,GAAE,UAAS,UAAS,SAAS,GAAE,IAAE,GAAE,IAAE;AAAG,IAAE,SAAO,MAAI,IAAE,MAAG,IAAE,EAAE,GAAE,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC,IAAG,EAAE,EAAE,SAAO,GAAE,MAAI,6DAA6D,EAAE,IAAI,GAAG,GAAE,EAAE,EAAE,SAAO,GAAE,MAAI,8DAA8D,EAAE,IAAI,GAAG,GAAE,GAAG,gBAAe,GAAE,CAAC;AAAE,MAAI,IAAE,MAAI,SAAO,EAAE,MAAM,CAAC,IAAE,EAAE,MAAM,CAAC;AAAE,IAAE,EAAE,MAAM,CAAC,MAAI,GAAE,MAAI,oCAAoC,CAAC,uCAAuC,EAAE,MAAM,CAAC,CAAC,GAAG,GAAE,EAAE,GAAGC,KAAE,CAAC,GAAE,MAAI,uEAAuEA,GAAC,mBAAmB,CAAC,GAAG;AAAE,MAAI,IAAE,GAAG,EAAE,OAAM,EAAE,OAAMA,KAAE,GAAE,GAAE,CAAC,GAAE;AAAE,OAAG,SAAO,IAAE,EAAE,GAAE,QAAO,cAAc,GAAE,CAAC,CAAC,IAAE,GAAG,GAAE,CAAC,GAAE,MAAI,SAAO,GAAG,EAAE,UAAS,EAAE,KAAK,KAAG,EAAE,EAAE,MAAM,UAAQ,GAAE,MAAI,2GAA2G,EAAE,MAAM,MAAM,GAAG,GAAE,EAAE,EAAE,MAAM,WAAS,KAAG,EAAE,MAAM,CAAC,MAAI,EAAE,eAAa,EAAE,MAAM,CAAC,MAAI,GAAE,MAAI,sCAAsC,EAAE,KAAK,2DAA2D,EAAE,WAAW,GAAG;AAAI,MAAI;AAAE,MAAG,KAAG,MAAK;AAAC,QAAI,IAAE,EAAE;AAAM,QAAG,EAAE,EAAE,UAAQ,KAAG,EAAE,WAAS,GAAE,MAAI,2HAA2H,EAAE,MAAM,GAAG,GAAE,EAAE,WAAS,EAAE,GAAE,EAAE,CAAC,MAAI,KAAG,EAAE,CAAC,MAAI,EAAE,aAAY,MAAI,oDAAoD,CAAC,2DAA2D,EAAE,WAAW,IAAI;AAAA,aAAU,EAAE,WAAS,EAAE,KAAG;AAAC,SAAG,GAAE,EAAE,QAAQ;AAAA,IAAC,SAAO,GAAE;AAAC,UAAI,IAAE,oDAAoD,CAAC,4DAA4D,EAAE,QAAQ;AAAK,YAAM,MAAM,CAAC;AAAA,IAAC;AAAC,QAAE,EAAE,GAAE,iBAAgB,cAAc;AAAA,EAAC;AAAC,MAAI,IAAE,CAAC,GAAE,MAAI;AAAC,MAAE,MAAI,QAAO,MAAI,wDAAwD,CAAC,wCAAwC;AAAE,QAAG,CAAC,GAAE,GAAE,GAAE,CAAC,IAAE,GAAE,IAAE,GAAG,GAAE,GAAE,CAAC;AAAE,MAAE,GAAG,CAAC,GAAE,MAAI,uHAAuH,CAAC,GAAG;AAAE,QAAI,IAAE,GAAG,EAAE,OAAM,GAAE,GAAEA,KAAE,CAAC,GAAE,IAAE,GAAG,GAAE,GAAE,EAAE,OAAMA,KAAE,CAAC,GAAE,IAAE,CAAC,GAAE,CAAC;AAAE,QAAG,KAAG,MAAK;AAAC,UAAI,IAAE,GAAG,GAAE,CAAC;AAAE,QAAE,KAAK,CAAC;AAAA,IAAC;AAAC,WAAO;AAAA,EAAC,GAAE,IAAE,EAAC,GAAE,GAAE,QAAO,GAAE,MAAK,GAAE,wBAAuB,EAAC,GAAE,IAAE,EAAC,SAAQA,KAAE,KAAI,GAAE,YAAW,GAAE,WAAU,GAAE,iBAAgB,GAAE,YAAW,GAAE,gBAAe,EAAC;AAAE,SAAO,KAAG,OAAK,GAAG,CAAC,GAAE,GAAE,MAAI;AAAC,QAAI,IAAE,EAAE,UAAU,IAAG,GAAE,CAAC;AAAE,WAAO,EAAE,CAAC,GAAE,GAAE,CAAC,CAAC,GAAE,MAAI,IAAE,EAAE,GAAE,CAAC,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC,IAAG,EAAC,OAAM,GAAE,UAAS,EAAC;AAAA,EAAC,CAAC,EAAE,GAAE,CAAC,IAAE,GAAG,CAAC,GAAE,GAAE,GAAE,MAAI;AAAC,QAAI,IAAE,EAAE,UAAU,IAAG,GAAE,CAAC;AAAE,WAAO,EAAE,CAAC,GAAE,GAAE,GAAE,CAAC,CAAC,GAAE,MAAI,IAAE,EAAE,GAAE,CAAC,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC,IAAG,EAAC,OAAM,GAAE,UAAS,EAAC;AAAA,EAAC,CAAC,EAAE,GAAE,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,cAAa,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE,IAAE,CAAC,GAAE,CAAC,GAAE,GAAE;AAAC,MAAI,IAAED;AAAE,EAAAA,IAAE,SAAO,MAAI,IAAE,EAAEA,KAAE,CAAC,GAAEA,IAAE,MAAM,CAAC,GAAEA,IAAE,MAAM,CAAC,GAAEA,IAAE,MAAM,CAAC,CAAC,CAAC;AAAG,MAAI,IAAE;AAAE,IAAE,SAAO,MAAI,IAAE,EAAE,GAAE,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC;AAAG,MAAI,IAAE,EAAC,GAAE,GAAE,IAAG,EAAC,GAAE,IAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,iBAAgB,GAAE,WAAU,GAAE,aAAYC,IAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,sCAAqC,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE,IAAE,CAAC,GAAE,CAAC,GAAE,GAAE;AAAC,MAAI,IAAE,GAAE,IAAE;AAAG,IAAE,SAAO,MAAI,IAAE,MAAG,IAAE,EAAE,GAAE,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC;AAAG,MAAI,IAAE,EAAC,IAAG,GAAE,QAAOA,IAAC,GAAE,IAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,iBAAgB,GAAE,WAAU,GAAE,YAAWD,IAAC,GAAE,IAAE,EAAE,UAAU,IAAG,GAAE,CAAC;AAAE,SAAO,IAAE,EAAE,GAAE,CAAC,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC,IAAE;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,qCAAoC,GAAE,CAAC;AAAE,SAAS,GAAG,EAAC,GAAEA,KAAE,QAAO,GAAE,SAAQC,KAAE,KAAI,GAAE,YAAW,IAAE,QAAO,WAAU,IAAE,CAAC,GAAE,CAAC,GAAE,iBAAgB,GAAE,MAAK,GAAE,YAAW,IAAE,UAAS,wBAAuB,GAAE,gBAAe,EAAC,GAAE;AAAC,MAAG,GAAG,EAAE,MAAM,eAAc,CAAC,MAAI,OAAG;AAAC,QAAI,IAAE,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE,CAAC;AAAE,WAAO,KAAG,SAAO,IAAE,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,GAAE,GAAE,CAAC;AAAA,EAAC;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,mBAAkB,SAAS,GAAE,IAAE,EAAE,GAAE,UAAS,mBAAkB,SAAS,GAAE,IAAE,GAAE,IAAE;AAAG,IAAE,SAAO,MAAI,IAAE,MAAG,IAAE,EAAE,GAAE,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC,IAAG,EAAE,EAAE,SAAO,GAAE,MAAI,sEAAsE,EAAE,IAAI,GAAG,GAAE,EAAE,EAAE,SAAO,GAAE,MAAI,uEAAuE,EAAE,IAAI,GAAG,GAAE,EAAE,EAAE,MAAM,CAAC,MAAI,EAAE,MAAM,CAAC,GAAE,MAAI,6DAA6D,EAAE,MAAM,CAAC,CAAC,mDAAmD,EAAE,MAAM,CAAC,CAAC,GAAG,GAAE,KAAG,SAAO,IAAE,CAAC,GAAE,CAAC,IAAG,EAAE,GAAGC,KAAE,CAAC,GAAE,MAAI,sFAAsFA,GAAC,mBAAmB,CAAC,GAAG,GAAE,GAAG,yBAAwB,GAAE,CAAC;AAAE,MAAI,IAAE,GAAG,EAAE,OAAM,EAAE,OAAMA,KAAE,GAAE,GAAE,GAAE,IAAE,GAAE;AAAE,OAAG,SAAO,IAAE,EAAE,GAAE,QAAO,cAAc,GAAE,CAAC,CAAC,IAAE,GAAG,GAAE,CAAC,GAAE,GAAG,EAAE,UAAS,EAAE,KAAK;AAAG,MAAI;AAAE,OAAG,SAAO,IAAE,EAAE,GAAE,iBAAgB,uBAAuB;AAAG,MAAI,IAAE,CAAC,GAAE,MAAI;AAAC,MAAE,GAAG,CAAC,GAAE,MAAI,mHAAmH,CAAC,GAAG;AAAE,QAAG,CAAC,GAAE,GAAE,GAAE,CAAC,IAAE,GAAE,IAAE,GAAG,GAAE,GAAE,CAAC,GAAE,IAAE,GAAG,EAAE,OAAM,GAAE,GAAEA,KAAE,GAAE,GAAE,CAAC,GAAE,IAAE,GAAG,GAAE,GAAE,EAAE,OAAMA,KAAE,GAAE,GAAE,CAAC;AAAE,QAAG,KAAG,MAAK;AAAC,UAAI,IAAE,GAAG,GAAE,CAAC;AAAE,aAAM,CAAC,GAAE,GAAE,CAAC;AAAA,IAAC;AAAC,WAAM,CAAC,GAAE,CAAC;AAAA,EAAC,GAAE,IAAE,EAAC,GAAE,GAAE,QAAO,GAAE,MAAK,GAAE,wBAAuB,EAAC,GAAE,IAAE,EAAC,SAAQA,KAAE,KAAI,GAAE,YAAW,GAAE,WAAU,GAAE,iBAAgB,GAAE,YAAW,GAAE,gBAAe,EAAC;AAAE,SAAO,KAAG,OAAK,GAAG,CAAC,GAAE,GAAE,MAAI;AAAC,QAAI,IAAE,EAAE,UAAU,IAAG,GAAE,CAAC;AAAE,WAAO,EAAE,CAAC,GAAE,GAAE,CAAC,CAAC,GAAE,MAAI,IAAE,EAAE,GAAE,CAAC,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC,IAAG,EAAC,OAAM,GAAE,UAAS,EAAC;AAAA,EAAC,CAAC,EAAE,GAAE,CAAC,IAAE,GAAG,CAAC,GAAE,GAAE,GAAE,MAAI;AAAC,QAAI,IAAE,EAAE,UAAU,IAAG,GAAE,CAAC;AAAE,WAAO,EAAE,CAAC,GAAE,GAAE,GAAE,CAAC,CAAC,GAAE,MAAI,IAAE,EAAE,GAAE,CAAC,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC,IAAG,EAAC,OAAM,GAAE,UAAS,EAAC;AAAA,EAAC,CAAC,EAAE,GAAE,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,uBAAsB,GAAE,CAAC;AAAE,SAAS,GAAG,EAAC,GAAED,KAAE,GAAE,GAAE,YAAWC,MAAE,OAAG,YAAW,IAAE,OAAG,MAAK,GAAE,YAAW,IAAE,UAAS,wBAAuB,GAAE,gBAAe,IAAE,IAAE,GAAE;AAAC,MAAG,GAAG,EAAE,MAAM,eAAc,CAAC,MAAI,OAAG;AAAC,QAAI,IAAE,GAAGD,KAAE,GAAEC,KAAE,CAAC;AAAE,WAAO,KAAG,SAAO,IAAE,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,GAAE,GAAE,CAAC;AAAA,EAAC;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,cAAc,GAAE,IAAE,EAAE,GAAE,KAAI,cAAc;AAAE,GAAC,GAAE,CAAC,IAAE,GAAG,GAAE,CAAC;AAAE,MAAI,IAAEC,MAAE,EAAE,MAAM,EAAE,OAAK,CAAC,IAAE,EAAE,MAAM,EAAE,OAAK,CAAC,GAAE,IAAE,IAAE,EAAE,MAAM,EAAE,OAAK,CAAC,IAAE,EAAE,MAAM,EAAE,OAAK,CAAC,GAAE,IAAEA,MAAE,EAAE,MAAM,EAAE,OAAK,CAAC,IAAE,EAAE,MAAM,EAAE,OAAK,CAAC,GAAE,IAAE,IAAE,EAAE,MAAM,EAAE,OAAK,CAAC,IAAE,EAAE,MAAM,EAAE,OAAK,CAAC,GAAE,IAAE,EAAE,MAAM,MAAM,GAAE,EAAE,GAAE,IAAE,EAAE,MAAM,MAAM,GAAE,EAAE,GAAE,IAAE,GAAG,CAAC,GAAE,IAAE,GAAG,CAAC;AAAE,IAAE,MAAI,GAAE,MAAI,wCAAwC,CAAC,UAAU,CAAC,4BAA4B,EAAE,KAAK,QAAQ,EAAE,KAAK,mBAAmBA,GAAC,mBAAmB,CAAC,cAAc;AAAE,MAAI,IAAE,GAAG,EAAE,MAAM,MAAM,GAAE,EAAE,GAAE,EAAE,MAAM,MAAM,GAAE,EAAE,CAAC,EAAE,OAAO,CAAC,GAAE,CAAC,CAAC,GAAE,IAAEA,MAAE,EAAE,GAAE,CAAC,GAAE,GAAE,CAAC,CAAC,IAAE,EAAE,GAAE,CAAC,GAAE,GAAE,CAAC,CAAC,GAAE,IAAE,IAAE,EAAE,GAAE,CAAC,GAAE,GAAE,CAAC,CAAC,IAAE,EAAE,GAAE,CAAC,GAAE,GAAE,CAAC,CAAC,GAAE;AAAE,OAAG,SAAO,IAAE,EAAE,GAAE,QAAO,cAAc,GAAE,CAAC,CAAC,IAAE,GAAG,GAAE,CAAC,GAAE,GAAG,GAAE,EAAE,KAAK;AAAG,MAAI;AAAE,OAAG,SAAO,IAAE,EAAE,GAAE,iBAAgB,cAAc;AAAG,MAAI,IAAE,CAAC,GAAE,MAAI;AAAC,QAAG,CAAC,GAAE,GAAE,GAAE,CAAC,IAAE,GAAE,IAAE,GAAG,EAAE,GAAE,EAAE,KAAK,GAAE,GAAE,CAAC,GAAE,GAAE;AAAE,QAAG,CAACA,OAAG,CAAC,KAAG,IAAE,GAAG,GAAE,GAAE,OAAG,IAAE,GAAE,IAAE,GAAG,GAAE,GAAE,MAAG,KAAE,KAAG,CAACA,OAAG,KAAG,IAAE,GAAG,GAAE,GAAE,OAAG,KAAE,GAAE,IAAE,GAAG,GAAE,GAAE,MAAG,KAAE,KAAGA,OAAG,CAAC,KAAG,IAAE,GAAG,GAAE,GAAE,OAAG,IAAE,GAAE,IAAE,GAAG,GAAE,GAAE,OAAG,KAAE,MAAI,IAAE,GAAG,GAAE,GAAE,MAAG,IAAE,GAAE,IAAE,GAAG,GAAE,GAAE,MAAG,IAAE,IAAG,KAAG,MAAK;AAAC,UAAI,IAAE,GAAG,GAAE,CAAC;AAAE,aAAM,CAAC,GAAE,GAAE,CAAC;AAAA,IAAC,MAAM,QAAM,CAAC,GAAE,CAAC;AAAA,EAAC,GAAE,IAAE,EAAC,GAAE,GAAE,GAAE,GAAE,MAAK,GAAE,wBAAuB,EAAC,GAAE,IAAE,EAAC,YAAWA,KAAE,YAAW,GAAE,YAAW,GAAE,gBAAe,EAAC;AAAE,SAAO,KAAG,OAAK,GAAG,CAAC,GAAE,GAAE,MAAI;AAAC,QAAI,IAAE,EAAE,UAAU,IAAG,GAAE,CAAC;AAAE,WAAO,EAAE,CAAC,GAAE,GAAE,CAAC,CAAC,GAAE,EAAC,OAAM,EAAE,GAAE,CAAC,GAAE,UAAS,EAAC;AAAA,EAAC,CAAC,EAAE,GAAE,CAAC,IAAE,GAAG,CAAC,GAAE,GAAE,GAAE,MAAI;AAAC,QAAI,IAAE,EAAE,UAAU,IAAG,GAAE,CAAC;AAAE,WAAO,EAAE,CAAC,GAAE,GAAE,GAAE,CAAC,CAAC,GAAE,EAAC,OAAM,EAAE,GAAE,CAAC,GAAE,UAAS,EAAC;AAAA,EAAC,CAAC,EAAE,GAAE,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,cAAa,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,SAAO,GAAGA,KAAE,MAAI,IAAG;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,gBAAe,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAE;AAAC,SAAO,GAAGA,KAAE,KAAG,GAAE;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,aAAY,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAE,GAAEC,KAAE,IAAE,OAAG,IAAE,GAAE;AAAC,MAAI,IAAE,GAAE,IAAE,CAAC;AAAE,SAAK,IAAE,KAAGD,IAAE,OAAM,GAAE,KAAK,GAAGA,KAAE,GAAE,CAAC,CAAC,GAAE,KAAGC;AAAE,MAAG,EAAE,QAAK,IAAED,IAAE,QAAM;AAAC,QAAI,IAAE,IAAE,IAAEA,IAAE,MAAK,IAAE,GAAG,CAAC,GAAGA,KAAE,GAAE,IAAE,CAAC,GAAE,GAAG,CAAC,CAAC,GAAE,CAAC,CAAC,CAAC;AAAE,MAAE,KAAK,CAAC,GAAE,KAAGC;AAAA,EAAC;AAAC,SAAO,EAAE,WAAS,IAAE,GAAG,CAAC,GAAE,CAAC,GAAE,CAAC,CAAC,IAAE,EAAE,GAAG,CAAC,GAAE,CAAC,EAAE,QAAO,CAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,QAAO,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,IAAE,IAAG;AAAC,OAAG,SAAO,IAAE,GAAG,CAAC;AAAG,MAAI,IAAE,GAAGD,KAAE,GAAEC,GAAC,GAAE,IAAE,GAAG,GAAE,EAAE,CAAC,CAAC;AAAE,SAAO,GAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,OAAM,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,IAAE,YAAW,IAAE,GAAE;AAAC,MAAI,IAAE,EAAED,KAAE,SAAQ,eAAe,GAAE,IAAE,EAAE,GAAE,SAAQ,iBAAgB,SAAS,GAAE,IAAE,EAAEC,KAAE,UAAS,iBAAgB,OAAO,GAAE,IAAE,EAAE,MAAM,CAAC;AAAE,IAAE,EAAE,SAAO,GAAE,MAAI,6DAA6D,EAAE,IAAI,GAAG,GAAE,EAAE,EAAE,SAAO,KAAG,EAAE,MAAM,CAAC,MAAI,GAAE,MAAI,oDAAoD,CAAC,qBAAqB,EAAE,KAAK,GAAG,GAAE,EAAE,EAAE,SAAO,KAAG,EAAE,MAAM,CAAC,MAAI,GAAE,MAAI,qDAAqD,CAAC,mBAAmB,EAAE,KAAK,GAAG,GAAE,EAAE,EAAE,WAAS,GAAE,MAAI,wEAAwE,EAAE,MAAM,GAAG,GAAE,EAAE,EAAE,CAAC,KAAG,KAAG,EAAE,CAAC,KAAG,GAAE,MAAI,2CAA2C,CAAC,EAAE,GAAE,EAAE,MAAI,cAAY,MAAI,WAAU,MAAI,+CAA+C,CAAC,EAAE;AAAE,MAAI,IAAE,EAAC,OAAM,GAAE,OAAM,GAAE,QAAO,EAAC,GAAE,IAAE,EAAC,QAAO,GAAE,oBAAmB,GAAE,UAAS,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,gBAAe,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAI,IAAE,EAAEA,KAAE,SAAQ,iBAAgB,SAAS;AAAE,IAAE,EAAE,SAAO,GAAE,MAAI,6DAA6D,EAAE,IAAI,GAAG;AAAE,MAAIC,MAAE,EAAC,OAAM,EAAC;AAAE,SAAO,EAAE,UAAU,IAAGA,KAAE,CAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,gBAAe,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAI,IAAE,EAAEA,KAAE,SAAQ,gBAAgB,GAAEC,MAAE,EAAE,OAAK,GAAE,IAAE,EAAE,MAAMA,GAAC;AAAE,IAAE,EAAE,QAAM,GAAE,MAAI,yEAAyE,EAAE,IAAI,GAAG,GAAE,EAAE,MAAI,GAAE,MAAI,+FAA+F,CAAC,GAAG;AAAE,MAAI,IAAE,IAAI,MAAM,EAAE,IAAI;AAAE,SAAO,EAAE,KAAK,GAAE,GAAEA,GAAC,GAAE,EAAEA,GAAC,IAAE,GAAE,GAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,iBAAgB,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAI,IAAE,EAAEA,KAAE,SAAQ,gBAAgB,GAAEC,MAAE,EAAE,OAAK,GAAE,IAAE,EAAE,MAAMA,GAAC;AAAE,IAAE,EAAE,QAAM,GAAE,MAAI,yEAAyE,EAAE,IAAI,GAAG,GAAE,EAAE,MAAI,GAAE,MAAI,0FAA0F,CAAC,GAAG;AAAE,MAAI,IAAE,EAAE,OAAM,IAAE,GAAG,GAAE,SAAS,GAAE,IAAE,GAAG,CAAC,QAAM,OAAK,KAAI,CAAC,GAAE;AAAE,UAAO,EAAE,MAAK;AAAA,IAAC,KAAK;AAAE,UAAE,GAAG,WAAU,GAAE,CAAC;AAAE;AAAA,IAAM,KAAK;AAAE,UAAE,GAAG,aAAY,GAAE,CAAC;AAAE;AAAA,IAAM,KAAK;AAAE,UAAE,GAAG,eAAc,GAAE,CAAC;AAAE;AAAA,IAAM,KAAK;AAAE,UAAE,GAAG,iBAAgB,GAAE,CAAC;AAAE;AAAA,IAAM,KAAK;AAAE,UAAE,GAAG,mBAAkB,GAAE,CAAC;AAAE;AAAA,IAAM;AAAQ,YAAM,IAAI,MAAM,0BAA0B;AAAA,EAAC;AAAC,SAAO,IAAE,GAAG,GAAE,EAAE,GAAE,GAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,iBAAgB,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,MAAE,GAAE,IAAE,KAAG;AAAC,MAAI,IAAE,EAAED,KAAE,SAAQ,oBAAmB,SAAS;AAAE,IAAE,EAAE,SAAO,GAAE,MAAI,gEAAgE,EAAE,IAAI,GAAG;AAAE,MAAI,IAAE,EAAC,OAAM,EAAC,GAAE,IAAE,EAAC,SAAQ,GAAE,WAAUC,KAAE,QAAO,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,mBAAkB,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE;AAAC,OAAG,SAAO,IAAE,MAAI,KAAG,SAAO,IAAE,OAAO,oBAAmB,KAAG,SAAO,IAAE;AAAG,MAAI,IAAED,IAAE,MAAM,CAAC;AAAE,SAAOC,MAAE,KAAK,IAAIA,KAAE,CAAC,GAAE,EAAE,KAAG,KAAG,KAAG,GAAE,MAAI,4CAA4C,CAAC,GAAG,GAAE,EAAED,IAAE,SAAO,GAAE,MAAI,+CAA+CA,IAAE,IAAI,GAAG,GAAE,EAAEA,IAAE,MAAM,CAAC,MAAI,GAAE,MAAI,oDAAoDA,IAAE,MAAM,CAAC,CAAC,EAAE,GAAE,EAAE,EAAE,SAAO,GAAE,MAAI,4BAA4B,GAAE,EAAE,EAAE,MAAM,CAAC,MAAI,GAAE,MAAI,sDAAsD,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,EAAE,GAAE,EAAE,KAAG,KAAG,KAAG,GAAE,MAAI,4CAA4C,CAAC,GAAG,GAAE,EAAC,eAAcC,KAAE,cAAa,GAAE,gBAAe,GAAE,cAAa,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE,IAAE,KAAG,IAAE,OAAO,mBAAkB;AAAC,MAAI,IAAE,EAAED,KAAE,SAAQ,qBAAoB,SAAS,GAAE,IAAE,EAAE,GAAE,UAAS,qBAAoB,SAAS,GAAE,IAAE,GAAG,GAAE,GAAEC,KAAE,GAAE,CAAC;AAAE,EAAAA,MAAE,EAAE,eAAc,IAAE,EAAE,cAAa,IAAE,EAAE;AAAe,MAAI,IAAE,EAAC,eAAcA,KAAE,cAAa,GAAE,gBAAe,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,EAAC,OAAM,GAAE,QAAO,EAAC,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,oBAAmB,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,GAAGD,KAAE,GAAEC,GAAC,GAAE,IAAE,IAAE,IAAE,EAAE,IAAE,KAAG;AAAE,EAAAD,IAAE,OAAO,GAAE,GAAE,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,SAAO,GAAGD,KAAE,GAAEC,OAAG,EAAE;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,SAAOA,MAAE,IAAE,IAAEA,MAAE,IAAE,KAAG;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,GAAE,IAAED,IAAE,QAAO,IAAE,GAAE,IAAE;AAAG,SAAK,IAAE,KAAG;AAAC,QAAE,KAAG,IAAE,MAAI;AAAG,QAAI,IAAEC,IAAE,GAAED,IAAE,CAAC,CAAC;AAAE,QAAE,IAAE,IAAE,IAAE,KAAG,IAAE,GAAE,IAAE,CAAC;AAAA,EAAE;AAAC,SAAO,IAAE,IAAE,CAAC,IAAE;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE,GAAE;AAAC,SAAO,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE;AAAC,SAAO,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE,OAAG,GAAE,IAAE;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE;AAAC,SAAO,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE,IAAE;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE,IAAE,OAAG,IAAE,OAAG,IAAE,OAAG;AAAC,MAAI,IAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,IAAI,GAAE,CAAC,IAAE,KAAG,EAAE,KAAK,EAAC,OAAM,EAAE,CAAC,GAAE,UAAS,GAAE,oBAAmB,EAAC,CAAC;AAAE,IAAE,KAAK,EAAE;AAAE,MAAI,IAAE,IAAE,IAAE,OAAI,IAAE,GAAE,IAAE,CAAC,GAAE,IAAE,CAAC;AAAE,SAAK,EAAE,SAAOA,OAAG,EAAE,SAAO,KAAG;AAAC,QAAI,IAAE,EAAE,IAAI,GAAE,EAAC,OAAM,GAAE,UAAS,GAAE,oBAAmB,EAAC,IAAE;AAAE,QAAG,IAAE,EAAE;AAAM,QAAI,IAAE;AAAG,aAAQ,IAAE,EAAE,SAAO,GAAE,KAAG,GAAE,EAAE,GAAE;AAAC,UAAI,IAAE,GAAGD,KAAE,GAAE,EAAE,CAAC,CAAC;AAAE,UAAG,KAAG,GAAE;AAAC,YAAE;AAAG;AAAA,MAAK;AAAC,UAAG,EAAE,QAAM,EAAE,QAAM,GAAG,GAAE,GAAE,CAAC,GAAE,EAAE,SAAO,EAAE;AAAA,IAAK;AAAC,MAAE,qBAAmB,EAAE,QAAO,MAAI,EAAE,UAAQ,KAAG,EAAE,KAAK,CAAC,GAAE,EAAE,KAAK,EAAE,KAAK,KAAG,EAAE,QAAM,KAAG,GAAG,GAAE,GAAE,EAAE;AAAA,EAAE;AAAC,MAAI,IAAE,EAAE,QAAO,IAAEC,MAAE;AAAE,OAAG,IAAE,MAAI,EAAE,KAAK,GAAG,IAAI,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC,GAAE,EAAE,KAAK,GAAG,IAAI,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC;AAAG,MAAI,IAAE,EAAC,iBAAgB,EAAC;AAAE,SAAO,MAAI,EAAE,iBAAe,IAAG,MAAI,EAAE,eAAa,IAAG;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAED,IAAE,SAAS,IAAE,GAAE,IAAE,IAAE,CAAC,GAAE,IAAEA,IAAE,SAASC,MAAE,GAAEA,MAAE,IAAE,CAAC,GAAE,IAAE,KAAK,IAAI,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,GAAE,IAAE,KAAK,IAAI,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,GAAE,IAAE,KAAK,IAAI,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,GAAE,IAAE,KAAK,IAAI,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,GAAE,IAAE,KAAK,IAAI,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,GAAE,IAAE,KAAK,IAAI,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,GAAE,IAAE,KAAK,IAAI,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,GAAE,IAAE,KAAK,IAAI,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,GAAE,KAAG,IAAE,MAAI,IAAE,IAAG,KAAG,IAAE,MAAI,IAAE;AAAG,MAAG,KAAG,KAAG,KAAG,EAAE,QAAO;AAAE,MAAI,IAAE,KAAK,IAAI,GAAE,CAAC,GAAE,IAAE,KAAK,IAAI,GAAE,CAAC,GAAE,IAAE,KAAK,IAAI,GAAE,CAAC,GAAE,IAAE,KAAK,IAAI,GAAE,CAAC,GAAE,IAAE,KAAK,IAAI,IAAE,GAAE,CAAC,IAAE,KAAK,IAAI,IAAE,GAAE,CAAC;AAAE,SAAO,KAAG,IAAE,IAAE;AAAE;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,KAAK,IAAI,IAAEA,MAAEA,GAAC;AAAE,SAAOA,OAAGD,MAAE,IAAE;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,SAAOA,IAAE,QAAM,EAAE,SAAOA,IAAE,UAAQ,EAAE,SAAO,EAAE,WAASA,IAAE;AAAQ;AAAC,eAAe,GAAGA,KAAE,GAAEC,KAAE,IAAE,KAAG,IAAE,OAAO,mBAAkB;AAAC,MAAI,IAAE,EAAED,KAAE,SAAQ,wBAAwB,GAAE,IAAE,EAAE,GAAE,UAAS,wBAAwB,GAAE,IAAE,GAAG,GAAE,GAAEC,KAAE,GAAE,CAAC;AAAE,EAAAA,MAAE,EAAE,eAAc,IAAE,EAAE,cAAa,IAAE,EAAE;AAAe,MAAI,IAAE,MAAM,QAAQ,IAAI,CAAC,EAAE,KAAK,GAAE,EAAE,KAAK,CAAC,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,EAAC,iBAAgB,EAAC,IAAE,GAAG,GAAE,GAAEA,KAAE,GAAE,CAAC;AAAE,SAAO,MAAID,OAAG,EAAE,QAAQ,GAAE,MAAI,KAAG,EAAE,QAAQ,GAAE,GAAG,GAAE,OAAO;AAAC;AAAC,IAAI,KAAG;AAAG,SAAS,GAAGA,KAAE,GAAEC,KAAE,IAAE,KAAG,IAAE,OAAO,mBAAkB,IAAE,GAAE;AAAC,MAAI,IAAE,EAAED,KAAE,SAAQ,mBAAmB,GAAE,IAAE,EAAE,GAAE,UAAS,mBAAmB,GAAE,IAAE,GAAG,GAAE,GAAEC,KAAE,GAAE,GAAE,CAAC;AAAE,EAAAA,MAAE,EAAE,eAAc,IAAE,EAAE,cAAa,IAAE,EAAE,gBAAe,IAAE,EAAE;AAAa,MAAI,IAAE,EAAC,OAAM,GAAE,QAAO,EAAC,GAAE,IAAE,EAAC,eAAcA,KAAE,cAAa,GAAE,gBAAe,GAAE,cAAa,EAAC,GAAE,IAAE,EAAE,UAAU,IAAG,GAAE,CAAC;AAAE,SAAM,EAAC,iBAAgB,EAAE,CAAC,GAAE,gBAAe,EAAE,CAAC,EAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,6BAA4B,GAAE,CAAC;AAAE,eAAe,GAAGD,KAAE,GAAEC,KAAE,IAAE,KAAG,IAAE,OAAO,mBAAkB,IAAE,GAAE;AAAC,MAAI,IAAE,EAAED,KAAE,SAAQ,wBAAwB,GAAE,IAAE,EAAE,GAAE,UAAS,wBAAwB,GAAE,IAAE,GAAG,GAAE,GAAEC,KAAE,GAAE,GAAE,CAAC;AAAE,EAAAA,MAAE,EAAE,eAAc,IAAE,EAAE,cAAa,IAAE,EAAE,gBAAe,IAAE,EAAE;AAAa,MAAI,IAAE,MAAM,QAAQ,IAAI,CAAC,EAAE,KAAK,GAAE,EAAE,KAAK,CAAC,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,EAAC,iBAAgB,GAAE,gBAAe,EAAC,IAAE,GAAG,GAAE,GAAEA,KAAE,GAAE,GAAE,CAAC;AAAE,SAAO,MAAID,OAAG,EAAE,QAAQ,GAAE,MAAI,KAAG,EAAE,QAAQ,GAAE,EAAC,iBAAgB,GAAG,GAAE,OAAO,GAAE,gBAAe,GAAG,CAAC,EAAC;AAAC;AAAC,IAAI,KAAG;AAAG,SAAS,GAAGA,KAAE,GAAEC,KAAE,IAAE,KAAG,IAAE,OAAO,mBAAkB,IAAE,OAAG;AAAC,MAAI,IAAE,EAAED,KAAE,SAAQ,mBAAmB,GAAE,IAAE,EAAE,GAAE,UAAS,mBAAmB,GAAE,IAAE,GAAG,GAAE,GAAEC,KAAE,GAAE,GAAE,IAAI,GAAE,IAAE,EAAE,eAAc,IAAE,EAAE,cAAa,IAAE,EAAE,gBAAe,IAAE,EAAC,OAAM,GAAE,QAAO,EAAC,GAAE,IAAE,EAAC,eAAc,GAAE,cAAa,GAAE,gBAAe,GAAE,oBAAmB,EAAC,GAAE,IAAE,EAAE,UAAU,IAAG,GAAE,CAAC;AAAE,SAAM,EAAC,iBAAgB,EAAE,CAAC,GAAE,cAAa,EAAE,CAAC,EAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,0BAAyB,GAAE,CAAC;AAAE,eAAe,GAAGD,KAAE,GAAEC,KAAE,IAAE,KAAG,IAAE,OAAO,mBAAkB,IAAE,OAAG;AAAC,MAAI,IAAE,EAAED,KAAE,SAAQ,wBAAwB,GAAE,IAAE,EAAE,GAAE,UAAS,wBAAwB,GAAE,IAAE,GAAG,GAAE,GAAEC,KAAE,GAAE,GAAE,IAAI,GAAE,IAAE,EAAE,eAAc,IAAE,EAAE,cAAa,IAAE,EAAE,gBAAe,CAAC,GAAE,CAAC,IAAE,MAAM,QAAQ,IAAI,CAAC,EAAE,KAAK,GAAE,EAAE,KAAK,CAAC,CAAC,GAAE,EAAC,iBAAgB,GAAE,cAAa,EAAC,IAAE,GAAG,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,SAAO,MAAID,OAAG,EAAE,QAAQ,GAAE,MAAI,KAAG,EAAE,QAAQ,GAAE,EAAC,iBAAgB,GAAG,GAAE,OAAO,GAAE,cAAa,GAAG,GAAE,OAAO,EAAC;AAAC;AAAC,IAAI,KAAG;AAAG,SAAS,GAAGA,KAAE,GAAEC,MAAE,OAAG,IAAE,OAAG;AAAC,MAAI,IAAE,EAAED,KAAE,UAAS,gBAAgB;AAAE,IAAE,EAAE,SAAO,KAAG,EAAE,SAAO,GAAE,MAAI,gEAAgE,EAAE,IAAI,GAAG,GAAE,EAAE,EAAE,WAAS,GAAE,MAAI,6DAA6D,CAAC,GAAG,GAAE,EAAE,MAAI,SAAIC,QAAI,OAAG,MAAI,mFAAmF;AAAE,MAAI,IAAE,GAAE,IAAE;AAAG,IAAE,SAAO,MAAI,IAAE,MAAG,IAAE,EAAE,GAAE,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC;AAAG,MAAG,CAAC,IAAE,GAAE,IAAE,EAAC,QAAO,EAAC,GAAE,IAAE,EAAC,cAAaA,KAAE,kBAAiB,GAAE,MAAK,EAAC,GAAE,IAAE,EAAE,UAAU,IAAG,GAAE,CAAC;AAAE,SAAO,IAAE,EAAE,GAAE,CAAC,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC,IAAE;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,iBAAgB,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,MAAE,OAAG,IAAE,OAAG;AAAC,MAAI,IAAE,EAAED,KAAE,UAAS,uBAAuB;AAAE,IAAE,EAAE,SAAO,KAAG,EAAE,SAAO,GAAE,MAAI,uEAAuE,EAAE,IAAI,GAAG,GAAE,EAAE,EAAE,WAAS,GAAE,MAAI,oEAAoE,CAAC,GAAG,GAAE,EAAE,EAAE,UAAQ,aAAW,EAAE,UAAQ,SAAQ,MAAI,kDAAkD,GAAE,EAAE,MAAI,SAAIC,QAAI,OAAG,MAAI,0FAA0F;AAAE,MAAI,IAAE,GAAE,IAAE;AAAG,IAAE,SAAO,MAAI,IAAE,MAAG,IAAE,EAAE,GAAE,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC;AAAG,MAAG,CAAC,IAAE,GAAE,IAAE,EAAC,QAAO,EAAC,GAAE,IAAE,EAAC,cAAaA,KAAE,kBAAiB,GAAE,MAAK,EAAC,GAAE,IAAE,EAAE,UAAU,IAAG,GAAE,CAAC;AAAE,SAAO,IAAE,EAAE,GAAE,CAAC,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC,IAAE;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,wBAAuB,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,IAAE,UAASC,MAAE,OAAG,IAAE,KAAG;AAAC,MAAI,IAAE,EAAED,KAAE,SAAQ,WAAW,GAAE,IAAE,QAAM,IAAE,OAAK,IAAE,OAAK,IAAE,EAAE,MAAM,CAAC,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,GAAG,GAAG,CAAC,CAAC,CAAC,GAAE,GAAG,GAAE,GAAE,GAAE,GAAE;AAAE,MAAG,EAAE,EAAE,SAAO,GAAE,MAAI,yDAAyD,EAAE,IAAI,GAAG,GAAE,EAAE,EAAE,MAAM,CAAC,MAAI,KAAG,EAAE,MAAM,CAAC,MAAI,GAAE,MAAI,0EAA0E,EAAE,MAAM,CAAC,CAAC,GAAG,GAAE,EAAE,EAAE,UAAQ,WAAS,EAAE,UAAQ,WAAU,MAAI,sEAAsE,EAAE,KAAK,GAAG,GAAE,EAAE,MAAI,UAAQ,MAAI,UAAS,MAAI,0CAA0C,CAAC,EAAE,GAAE,EAAE,MAAM,CAAC,MAAI,GAAE;AAAC,KAAC,GAAE,GAAE,CAAC,IAAE,GAAG,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,EAAE;AAAE,QAAI,IAAE,GAAG,GAAE,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC;AAAE,QAAE,GAAG,GAAG,GAAE,CAAC,GAAE,CAAC;AAAA,EAAC,MAAM,KAAEA;AAAE,MAAG,MAAI,QAAO;AAAC,QAAI,IAAE,GAAG,GAAG,GAAG,CAAC,GAAE,OAAO,GAAE,GAAG,CAAC,CAAC,GAAE,GAAG;AAAE,QAAE,GAAG,GAAE,CAAC;AAAA,EAAC;AAAC,MAAI,IAAEC,MAAE,GAAG,GAAE,CAAC,IAAE,GAAG,GAAE,CAAC;AAAE,SAAO,GAAG,GAAG,GAAE,GAAG,GAAE,OAAO;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,GAAG,CAAC,EAAE,CAAC,GAAE,IAAE,GAAG,CAAC,CAAC,CAAC,GAAE,IAAE,GAAG,CAAC,CAAC,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE;AAAE,WAAQ,IAAE,GAAE,IAAED,IAAE,OAAK,GAAE,KAAI;AAAC,QAAE,GAAGA,KAAE,GAAE,IAAE,CAAC,GAAE,IAAE,GAAGA,KAAE,IAAE,CAAC,GAAE,IAAE,GAAG,GAAG,CAAC,GAAE,CAAC,GAAE,IAAE,GAAG,GAAG,CAAC,GAAE,CAAC;AAAE,QAAI,IAAE,GAAG,GAAG,GAAE,GAAG,GAAE,EAAE,IAAI,CAAC,CAAC;AAAE,QAAE,GAAG,GAAE,GAAG,CAAC,CAAC;AAAE,QAAI,IAAE,GAAG,EAAE,OAAM,EAAE,IAAI,GAAE,IAAE,GAAG,GAAG,GAAE,EAAE,IAAI,GAAE,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC;AAAE,QAAE,GAAG,GAAG,CAAC,GAAE,GAAG,CAAC,CAAC;AAAE,QAAI,IAAE,GAAG,GAAE,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC;AAAE,QAAE,GAAG,GAAG,GAAE,CAAC,GAAE,CAAC;AAAE,QAAI,IAAE,GAAG,GAAE,CAAC;AAAE,QAAE,GAAG,GAAE,GAAE,CAAC,GAAEC,MAAE,GAAG,GAAE,GAAG,CAAC,CAAC,CAAC,GAAEA,GAAC;AAAA,EAAC;AAAC,SAAOA;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,YAAW,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,MAAE,WAAU,IAAE,YAAW,IAAE,GAAE,GAAE;AAAC,MAAI,IAAE,EAAED,KAAE,SAAQ,aAAY,SAAS,GAAE,IAAE,EAAE,GAAE,cAAa,aAAY,SAAS;AAAE,IAAE,EAAE,SAAO,GAAE,MAAI,yDAAyD,EAAE,IAAI,GAAG,GAAE,EAAE,EAAE,SAAO,MAAI,EAAE,MAAM,CAAC,MAAI,EAAE,MAAM,CAAC,KAAG,EAAE,MAAM,CAAC,MAAI,MAAI,EAAE,MAAM,CAAC,MAAI,GAAE,MAAI,kEAAkE,GAAE,EAAE,KAAG,QAAM,EAAE,WAAS,GAAE,MAAI,4EAA4E,CAAC,GAAG;AAAE,MAAI,IAAE,EAAC,OAAM,GAAE,YAAW,EAAC,GAAE,IAAE,EAAC,eAAcC,KAAE,UAAS,GAAE,WAAU,GAAE,aAAY,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,YAAW,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,UAAU;AAAE,IAAE,EAAE,QAAM,GAAE,MAAI,4CAA4C,EAAE,IAAI,GAAG;AAAE,MAAI,IAAE,EAAE,OAAM,CAAC,GAAE,CAAC,IAAE,EAAE,MAAM,MAAM,EAAE,GAAE,GAAE;AAAE,SAAO,KAAG,YAAU,EAAE,IAAE,MAAI,GAAE,MAAI,gDAAgD,CAAC,GAAG,GAAE,EAAE,KAAG,GAAE,MAAI,yBAAyB,CAAC,kDAAkD,CAAC,IAAI,GAAE,IAAE,EAAE,IAAE,IAAE,IAAE,GAAE,YAAW,UAAU,MAAI,EAAE,EAAE,UAAQ,SAAQ,MAAI,gDAAgD,GAAE,IAAE,GAAG,GAAG,GAAE,CAAC,GAAE,GAAE,GAAG,GAAE,CAAC,CAAC,IAAG,OAAOC,OAAG,YAAU,EAAEA,MAAE,MAAI,GAAE,MAAI,gDAAgDA,GAAC,GAAG,GAAE,EAAEA,OAAG,GAAE,MAAI,yBAAyBA,GAAC,qDAAqD,CAAC,IAAI,GAAE,IAAE,EAAEA,MAAE,IAAE,IAAEA,KAAE,YAAW,UAAU,MAAI,EAAEA,IAAE,UAAQ,SAAQ,MAAI,gDAAgD,GAAE,IAAE,GAAG,GAAGA,KAAE,CAAC,GAAE,GAAE,GAAGA,KAAE,CAAC,CAAC;AAAG,MAAI,IAAE,EAAE,GAAG,GAAE,GAAE,GAAE,OAAO,GAAE,CAAC,IAAG,CAAC,CAAC,GAAE,IAAE,GAAG,GAAE,GAAE,GAAE,OAAO,GAAE,IAAE,GAAG,GAAE,CAAC,GAAE,IAAE,GAAG,GAAG,GAAE,CAAC,GAAE,GAAG,GAAE,GAAG,CAAC,CAAC,CAAC,GAAE,IAAE,GAAG,CAAC,GAAE,CAAC,GAAE,EAAE,KAAK;AAAE,SAAO,EAAE,GAAG,GAAG,EAAE,GAAE,CAAC,IAAG,GAAE,CAAC,CAAC,CAAC,EAAE,IAAI,OAAG,GAAG,GAAE,GAAE,CAAC,CAAC,CAAC,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,WAAU,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAI;AAAE,MAAG,MAAM,QAAQA,GAAC,GAAE;AAAC,QAAE,OAAG,EAAEA,OAAG,QAAMA,IAAE,SAAO,GAAE,MAAI,mEAAmE;AAAE,QAAI,IAAEA,IAAE,CAAC,EAAE,MAAM,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAEA,IAAE,QAAO,EAAE,EAAE,GAAEA,IAAE,CAAC,EAAE,MAAM,CAAC,MAAI,GAAE,MAAI,iEAAiEA,IAAE,CAAC,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,GAAG;AAAA,EAAC,MAAM,KAAE,MAAGA,MAAE,GAAGA,KAAEA,IAAE,MAAM,CAAC,GAAE,CAAC,EAAE,IAAI,OAAG,GAAG,GAAE,CAAC,CAAC,CAAC,CAAC;AAAE,IAAEA,IAAE,UAAQA,IAAE,CAAC,EAAE,MAAM,CAAC,GAAE,MAAI,oCAAoCA,IAAE,MAAM,mCAAmCA,IAAE,CAAC,EAAE,MAAM,CAAC,CAAC,IAAI;AAAE,MAAIC,MAAE,CAAC,GAAE,IAAED;AAAE,WAAQ,IAAE,GAAE,IAAEA,IAAE,QAAO,EAAE,EAAE,CAAAC,IAAE,KAAK,EAAE,KAAK,MAAI;AAAC,QAAI,IAAE,EAAE,CAAC;AAAE,QAAG,IAAE,EAAE,UAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,UAAI,IAAE,GAAG,GAAG,GAAGA,IAAE,CAAC,GAAE,CAAC,CAAC,GAAEA,IAAE,CAAC,CAAC;AAAE,UAAE,GAAG,GAAE,CAAC;AAAA,IAAC;AAAC,WAAO,GAAG,GAAE,GAAG,GAAE,WAAW,CAAC;AAAA,EAAC,CAAC,CAAC;AAAE,SAAO,IAAE,GAAGA,KAAE,CAAC,IAAEA;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,cAAa,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,IAAE,OAAG;AAAC,MAAG,EAAEA,IAAE,QAAM,GAAE,MAAI,gEAAgEA,IAAE,IAAI,EAAE,GAAEA,IAAE,SAAO,EAAE,QAAO,GAAGA,KAAE,CAAC;AAAE;AAAC,QAAIC,MAAED,IAAE,MAAM,MAAM,GAAEA,IAAE,MAAM,SAAO,CAAC,EAAE,OAAO,CAAC,GAAE,MAAI,IAAE,CAAC,GAAE,IAAE,GAAG,EAAEA,KAAE,CAACC,KAAED,IAAE,MAAMA,IAAE,MAAM,SAAO,CAAC,GAAEA,IAAE,MAAMA,IAAE,MAAM,SAAO,CAAC,CAAC,CAAC,GAAE,CAAC,GAAE,IAAE,CAAC,GAAE,IAAE,CAAC;AAAE,MAAE,QAAQ,OAAG;AAAC,UAAG,CAAC,GAAE,CAAC,IAAE,GAAG,GAAE,CAAC;AAAE,QAAE,KAAK,CAAC,GAAE,EAAE,KAAK,CAAC;AAAA,IAAC,CAAC;AAAE,QAAI,IAAE,EAAE,GAAG,GAAE,CAAC,GAAEA,IAAE,KAAK,GAAE,IAAE,EAAE,GAAG,GAAE,CAAC,GAAEA,IAAE,KAAK;AAAE,WAAM,CAAC,GAAE,CAAC;AAAA,EAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,IAAE,OAAG;AAAC,SAAO,EAAE,KAAK,MAAI;AAAC,MAAEA,IAAE,MAAM,WAAS,GAAE,MAAI,0CAA0CA,IAAE,MAAM,MAAM,WAAW;AAAE,QAAIC,MAAED,IAAE,MAAM,CAAC,GAAE,IAAEA,IAAE,MAAM,CAAC,GAAE,IAAE,GAAGC,GAAC,GAAE,IAAE,GAAGD,GAAC,GAAE,IAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAE,CAAC,GAAE,CAAC,CAAC,GAAE,IAAE,GAAG,CAAC,GAAE,IAAEC,OAAG,IAAE,IAAEA;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,UAAI,IAAE,GAAE,IAAE,GAAE,IAAE;AAAE,OAAC,GAAE,GAAE,CAAC,IAAE,EAAE,KAAK,MAAI;AAAC,YAAI,IAAE,GAAG,GAAE,CAAC,GAAE,CAAC,GAAE,CAACA,MAAE,GAAE,CAAC,CAAC,GAAE,IAAE,GAAG,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,CAAC,GAAE,IAAE,GAAG,GAAG,GAAE,CAAC,GAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAE,IAAE,GAAG,GAAE,GAAG,GAAE,CAAC,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC;AAAE,UAAE,MAAM,CAAC,MAAI,IAAE,IAAE,GAAG,CAAC,IAAE,IAAE,GAAG,CAAC,GAAE,GAAG,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,EAAE,MAAM,CAAC,IAAE,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,GAAE,CAAC;AAAE,YAAI,IAAE,GAAG,GAAG,GAAG,GAAE,CAAC,GAAE,CAAC,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC,GAAE,CAAC,GAAE,CAACA,MAAE,GAAE,CAAC,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC,GAAE,IAAE,GAAG,CAAC;AAAE,YAAG,MAAI,EAAE,KAAE,GAAG,GAAE,GAAG,GAAE,GAAG,GAAE,CAAC,CAAC,CAAC;AAAA,aAAM;AAAC,cAAI,IAAE,GAAG,GAAE,GAAG,GAAE,GAAG,GAAE,CAAC,CAAC,CAAC;AAAE,cAAE,GAAG,CAAC,GAAG,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,CAAC,GAAE,CAAC,GAAE,CAAC;AAAA,QAAC;AAAC,YAAI,IAAE,GAAG,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC,GAAE,CAAC,GAAE,CAACA,KAAE,EAAE,MAAM,CAAC,IAAE,CAAC,CAAC;AAAE,YAAG,MAAI,EAAE,KAAE,GAAG,GAAE,GAAG,GAAG,GAAE,CAAC,GAAE,CAAC,CAAC;AAAA,aAAM;AAAC,cAAI,IAAE,GAAG,GAAE,GAAG,GAAG,GAAE,CAAC,GAAE,CAAC,CAAC;AAAE,cAAE,GAAG,CAAC,GAAG,GAAE,CAAC,GAAE,CAAC,GAAE,CAACA,KAAE,CAAC,CAAC,GAAE,CAAC,GAAE,CAAC;AAAA,QAAC;AAAC,eAAM,CAAC,GAAE,GAAE,CAAC;AAAA,MAAC,CAAC,GAAE,GAAG,CAAC,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAC,WAAM,CAAC,KAAGA,MAAE,MAAI,IAAE,GAAG,GAAE,CAAC,GAAE,CAAC,GAAE,CAACA,KAAE,CAAC,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,CAAC,IAAG,CAAC,GAAE,CAAC;AAAA,EAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,KAAI,GAAE,CAAC;AAAE,IAAI;AAAA,CAAI,SAASD,KAAE;AAAC,EAAAA,IAAEA,IAAE,OAAK,CAAC,IAAE,QAAOA,IAAEA,IAAE,OAAK,CAAC,IAAE,QAAOA,IAAEA,IAAE,MAAI,CAAC,IAAE,OAAMA,IAAEA,IAAE,yBAAuB,CAAC,IAAE;AAAwB,GAAG,OAAK,KAAG,CAAC,EAAE;AAAE,SAAS,GAAGA,KAAE,GAAEC,MAAE,GAAG,wBAAuB;AAAC,MAAI,IAAE,EAAED,KAAE,UAAS,qBAAqB,GAAE,IAAE;AAAK,OAAG,SAAO,IAAE,EAAE,GAAE,WAAU,qBAAqB;AAAG,MAAI,IAAE,KAAG,OAAK,IAAE,GAAG,GAAE,CAAC;AAAE,MAAGC,QAAI,GAAG,KAAK,QAAO;AAAE,MAAGA,QAAI,GAAG,IAAI,QAAO,GAAG,CAAC;AAAE,MAAGA,QAAI,GAAG,MAAK;AAAC,QAAG,KAAG,KAAK,QAAO,GAAG,CAAC;AAAE;AAAC,UAAI,IAAE,EAAE,OAAK,EAAE,MAAK,IAAE,GAAG,GAAG,CAAC,GAAE,GAAG,CAAC,CAAC;AAAE,aAAO,IAAE,IAAE,GAAG,GAAE,GAAG,CAAC,CAAC,IAAE;AAAA,IAAC;AAAA,EAAC;AAAC,MAAGA,QAAI,GAAG,wBAAuB;AAAC,QAAG,KAAG,KAAK,QAAO,GAAG,GAAG,CAAC,GAAE,GAAG,EAAE,IAAI,CAAC;AAAE;AAAC,UAAI,IAAE,GAAG,GAAE,GAAG,EAAE,KAAK,CAAC,GAAE,IAAE,GAAG,GAAG,GAAG,GAAE,GAAG,CAAC,CAAC,CAAC,GAAE,SAAS;AAAE,aAAO,GAAG,GAAG,CAAC,GAAE,CAAC;AAAA,IAAC;AAAA,EAAC;AAAC,QAAM,MAAM,sBAAsBA,GAAC,EAAE;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,sBAAqB,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,IAAE,GAAG,wBAAuB;AAAC,MAAI,IAAE,EAAED,KAAE,UAAS,oBAAoB,GAAE,IAAE,EAAE,GAAE,eAAc,oBAAoB,GAAE,IAAE;AAAK,EAAAC,OAAG,SAAO,IAAE,EAAEA,KAAE,WAAU,oBAAoB,IAAG,GAAG,EAAE,OAAM,EAAE,OAAM,+BAA+B;AAAE,MAAI,IAAE,GAAG,GAAG,GAAE,CAAC,CAAC;AAAE,SAAO,GAAG,GAAE,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,qBAAoB,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,IAAE,GAAG,wBAAuB;AAAC,MAAI,IAAE,EAAED,KAAE,UAAS,gBAAgB,GAAE,IAAE,EAAE,GAAE,eAAc,gBAAgB,GAAE,IAAE;AAAK,OAAG,SAAO,IAAE,EAAE,GAAE,WAAU,gBAAgB,IAAG,GAAG,EAAE,OAAM,EAAE,OAAM,2BAA2B;AAAE,MAAI,IAAE,GAAG,CAAC,GAAE,IAAE,GAAG,GAAE,GAAG,GAAG,GAAE,CAAC,GAAEC,KAAE,IAAE,CAAC;AAAE,SAAO,GAAG,GAAE,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,iBAAgB,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,IAAE,GAAG,wBAAuB;AAAC,MAAI,IAAE,EAAED,KAAE,UAAS,WAAW,GAAE,IAAE,EAAE,GAAE,eAAc,WAAW,GAAE,IAAE;AAAK,EAAAC,OAAG,SAAO,IAAE,EAAEA,KAAE,WAAU,WAAW,IAAG,GAAG,EAAE,OAAM,EAAE,OAAM,sBAAsB;AAAE,MAAI,IAAE,GAAG,CAAC;AAAE,MAAE,GAAG,GAAG,GAAG,CAAC,GAAE,CAAC,GAAE,CAAC;AAAE,MAAI,IAAE,GAAG,GAAG,GAAE,GAAG,GAAE,CAAC,CAAC,CAAC;AAAE,SAAO,GAAG,GAAE,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,YAAW,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,IAAE,GAAE,IAAE,GAAG,wBAAuB;AAAC,MAAI,IAAE,EAAED,KAAE,UAAS,WAAW,GAAE,IAAE,EAAE,GAAE,eAAc,WAAW,GAAE,IAAE;AAAK,EAAAC,OAAG,SAAO,IAAE,EAAEA,KAAE,WAAU,WAAW,IAAG,GAAG,EAAE,OAAM,EAAE,OAAM,sBAAsB;AAAE,MAAI,IAAE,GAAG,CAAC,GAAE,IAAE,GAAG,GAAG,GAAE,CAAC,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC,GAAE,IAAE,GAAG,GAAG,GAAG,GAAE,GAAE,GAAG,CAAC,CAAC,GAAE,GAAG,GAAE,CAAC,CAAC;AAAE,SAAO,GAAG,GAAE,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,YAAW,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,IAAE,MAAK,IAAE,GAAG,wBAAuB;AAAC,MAAI,IAAE,EAAED,KAAE,UAAS,SAAS,GAAE,IAAE,EAAE,GAAE,eAAc,SAAS,GAAE,IAAE;AAAK,EAAAC,OAAG,SAAO,IAAE,EAAEA,KAAE,WAAU,SAAS,IAAG,GAAG,EAAE,OAAM,EAAE,OAAM,oBAAoB;AAAE,MAAI,IAAE,GAAG,CAAC,GAAE,IAAE,GAAG,CAAC,GAAE,IAAE,GAAG,GAAG,GAAE,GAAG,GAAG,GAAE,CAAC,CAAC,CAAC,CAAC,GAAE,IAAE,GAAG,GAAG,GAAE,CAAC,GAAE,GAAG,GAAG,GAAG,GAAE,CAAC,GAAE,CAAC,CAAC,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC;AAAE,SAAO,GAAG,GAAE,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,UAAS,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,IAAE,GAAG,wBAAuB;AAAC,MAAI,IAAE,EAAED,KAAE,UAAS,kBAAkB,GAAE,IAAE,EAAE,GAAE,eAAc,kBAAkB,GAAE,IAAE;AAAK,EAAAC,OAAG,SAAO,IAAE,EAAEA,KAAE,WAAU,kBAAkB,IAAG,GAAG,EAAE,OAAM,EAAE,OAAM,6BAA6B;AAAE,MAAI,IAAE,GAAG,GAAE,CAAC;AAAE,SAAO,GAAG,GAAE,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,mBAAkB,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAED,KAAE,UAAS,+BAA+B,GAAE,IAAE,EAAE,GAAE,UAAS,+BAA+B;AAAE,KAAGC,IAAE,OAAM,EAAE,OAAM,0CAA0C;AAAE,MAAI,IAAE,GAAG,CAAC,GAAE,IAAE,GAAG,GAAEA,GAAC,GAAE,IAAE,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AAAE,SAAO,GAAG,GAAG,GAAE,CAAC,GAAE,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE,IAAE,GAAE,IAAE,GAAG,wBAAuB;AAAC,MAAI,IAAE,EAAED,KAAE,oBAAmB,qBAAqB,GAAE,IAAE,EAAE,GAAE,UAAS,qBAAqB,GAAE,IAAE;AAAK,MAAGC,OAAG,SAAO,IAAE,EAAEA,KAAE,WAAU,qBAAqB,IAAG,GAAG,EAAE,OAAM,EAAE,OAAM,gCAAgC,GAAE,IAAE,GAAE;AAAC,QAAI,IAAE,GAAG,CAAC,GAAE,IAAE,GAAG,CAAC,GAAE,IAAE,GAAG,GAAE;AAAE,QAAE,GAAG,GAAG,GAAE,GAAG,GAAE,CAAC,CAAC,GAAE,GAAG,GAAE,CAAC,CAAC;AAAA,EAAC;AAAC,MAAI,IAAE,GAAG,GAAE,CAAC;AAAE,SAAO,GAAG,GAAE,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,sBAAqB,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,MAAE,IAAG;AAAC,MAAGA,QAAI,OAAKA,MAAE,EAAE,OAAK,IAAGA,QAAI,EAAE,OAAK,EAAE,OAAM,MAAM,mGAAmG,EAAE,IAAI,gBAAgBA,GAAC,EAAE;AAAE,SAAO,GAAG,CAAC,GAAE,GAAE,MAAI;AAAC,QAAI,IAAE,GAAG,GAAE,CAACA,GAAC,GAAE,IAAE,GAAE,IAAE,GAAG,GAAG,GAAE,SAAS,GAAE,CAAC;AAAE,MAAE,CAAC,GAAE,CAAC,CAAC;AAAE,QAAI,IAAE,GAAG,GAAG,GAAE,CAAC,CAAC;AAAE,WAAM,EAAC,OAAM,GAAG,GAAE,CAACA,GAAC,CAAC,GAAE,UAAS,CAAC,GAAE,MAAI;AAAC,UAAG,CAAC,GAAE,CAAC,IAAE,GAAE,IAAE,GAAG,EAAE,OAAM,CAACA,GAAC,CAAC;AAAE,aAAM,CAAC,GAAG,EAAE,GAAE,CAAC,GAAE,GAAG,GAAG,GAAE,SAAS,GAAE,GAAG,CAAC,CAAC,CAAC,GAAE,GAAG,EAAE,GAAE,CAAC,GAAE,GAAG,GAAG,CAAC,GAAE,GAAG,GAAE,SAAS,CAAC,CAAC,CAAC;AAAA,IAAC,EAAC;AAAA,EAAC,CAAC,EAAED,KAAE,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,IAAE,GAAE,IAAE,GAAG,wBAAuB;AAAC,MAAI,IAAE,EAAED,KAAE,gBAAe,qBAAqB,GAAE,IAAE,EAAE,GAAE,UAAS,qBAAqB,GAAE,IAAE;AAAK,MAAGC,OAAG,SAAO,IAAE,EAAEA,KAAE,WAAU,qBAAqB,IAAG,GAAG,EAAE,OAAM,EAAE,OAAM,gCAAgC,GAAE,IAAE,GAAE;AAAC,QAAI,IAAE,GAAG,CAAC,GAAE,IAAE,GAAG,CAAC,GAAE,IAAE,GAAG,EAAE,MAAM,CAAC,CAAC;AAAE,QAAE,GAAG,GAAG,GAAE,GAAG,GAAE,CAAC,CAAC,GAAE,GAAG,GAAE,CAAC,CAAC;AAAA,EAAC;AAAC,MAAI,IAAE,GAAG,GAAE,CAAC;AAAE,SAAO,GAAG,GAAE,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,sBAAqB,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE;AAAC,MAAI,IAAE,EAAED,KAAE,WAAU,uBAAsB,OAAO,GAAE,IAAE,EAAE,GAAE,UAAS,qBAAqB,GAAE,IAAE,EAAEC,KAAE,cAAa,uBAAsB,OAAO,GAAE,IAAE,EAAE,GAAE,gBAAe,uBAAsB,EAAE,KAAK;AAAE,MAAG,EAAE,SAAO,EAAE,OAAM,IAAI,MAAM;AAAA,UACnl/C,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,SAAO,EAAE,OAAM,IAAI,MAAM,gDAAgD,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,SAAO,EAAE,OAAM,IAAI,MAAM,qDAAqD,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,SAAO,EAAE,OAAM,IAAI,MAAM,uDAAuD,EAAE,KAAK,EAAE;AAAE,MAAI,IAAE,EAAC,SAAQ,GAAE,QAAO,GAAE,YAAW,GAAE,cAAa,EAAC,GAAE,IAAE,EAAE,UAAU,IAAG,CAAC;AAAE,SAAM,EAAC,eAAc,EAAE,CAAC,GAAE,cAAa,EAAE,CAAC,GAAE,mBAAkB,EAAE,CAAC,GAAE,iBAAgB,EAAE,CAAC,EAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,sBAAqB,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,EAAED,KAAE,gBAAe,iBAAgB,OAAO,GAAE,IAAE,EAAE,GAAE,cAAa,iBAAgB,OAAO,GAAE,IAAE,EAAEC,KAAE,YAAW,iBAAgB,OAAO;AAAE,MAAG,EAAE,SAAO,EAAE,OAAM,IAAI,MAAM;AAAA,UACnqB,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,SAAO,EAAE,OAAM,IAAI,MAAM,qDAAqD,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,SAAO,EAAE,OAAM,IAAI,MAAM,mDAAmD,EAAE,KAAK,EAAE;AAAE,MAAI,IAAE,EAAC,cAAa,GAAE,YAAW,GAAE,UAAS,EAAC,GAAE,IAAE,EAAE,UAAU,IAAG,CAAC;AAAE,SAAM,EAAC,eAAc,EAAE,CAAC,GAAE,aAAY,EAAE,CAAC,EAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,gBAAe,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,EAAED,KAAE,QAAO,mBAAmB,GAAE,IAAE,EAAE,GAAE,WAAU,qBAAoB,OAAO,GAAE,IAAE,EAAEC,KAAE,cAAa,qBAAoB,OAAO;AAAE,MAAG,EAAE,OAAK,EAAE,OAAM,IAAI,MAAM,2DAA2D;AAAE,MAAG,EAAE,SAAO,EAAE,OAAM,IAAI,MAAM;AAAA,YAC7lB,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,SAAO,EAAE,OAAM,IAAI,MAAM;AAAA,YACzC,EAAE,KAAK,EAAE;AAAE,MAAI,IAAE,EAAC,MAAK,GAAE,SAAQ,GAAE,YAAW,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,oBAAmB,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,EAAED,KAAE,QAAO,kBAAkB,GAAE,IAAE,EAAE,GAAE,WAAU,oBAAmB,OAAO,GAAE,IAAE,EAAEC,KAAE,cAAa,oBAAmB,OAAO;AAAE,MAAG,EAAE,OAAK,EAAE,OAAM,IAAI,MAAM,2DAA2D;AAAE,MAAG,EAAE,SAAO,EAAE,OAAM,IAAI,MAAM;AAAA,WACvX,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,SAAO,EAAE,OAAM,IAAI,MAAM;AAAA,WACzC,EAAE,KAAK,EAAE;AAAE,MAAI,IAAE,EAAC,MAAK,GAAE,SAAQ,GAAE,YAAW,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,mBAAkB,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE,GAAE,GAAE;AAAC,MAAI,IAAE,EAAED,KAAE,QAAO,gBAAe,QAAQ;AAAE,MAAG,EAAE,UAAQ,SAAS,OAAM,IAAI,MAAM,iCAAiC;AAAE,MAAG,EAAE,MAAM,WAAS,EAAE,OAAM,IAAI,MAAM,+BAA+B,EAAE,KAAK,EAAE;AAAE,MAAI,IAAE,EAAE,GAAE,cAAa,cAAc;AAAE,MAAG,EAAE,UAAQ,QAAQ,OAAM,IAAI,MAAM,uCAAuC;AAAE,MAAI,IAAE,EAAC,WAAUC,KAAE,aAAY,GAAE,SAAQ,GAAE,UAAS,GAAE,UAAS,GAAE,wBAAuB,EAAC,GAAE,IAAE,EAAC,MAAK,GAAE,YAAW,EAAC,GAAE,IAAE,EAAE,UAAU,IAAG,GAAE,CAAC;AAAE,SAAM,EAAC,QAAO,EAAE,CAAC,GAAE,cAAa,EAAE,CAAC,EAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,eAAc,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,MAAE,MAAG;AAAC,MAAI,IAAE,EAAED,KAAE,SAAQ,eAAc,QAAQ,GAAE,IAAE,EAAE,GAAE,aAAY,eAAc,QAAQ;AAAE,MAAG,EAAE,SAAO,EAAE,OAAM,IAAI,MAAM,+CAA+C,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,SAAO,EAAE,OAAM,IAAI,MAAM,mDAAmD,EAAE,KAAK,EAAE;AAAE,MAAI,IAAE,EAAC,WAAUC,IAAC,GAAE,IAAE,EAAC,OAAM,GAAE,WAAU,EAAC,GAAE,IAAE,EAAE,UAAU,IAAG,GAAE,CAAC;AAAE,SAAM,EAAC,SAAQ,EAAE,CAAC,GAAE,QAAO,EAAE,CAAC,GAAE,OAAM,EAAE,CAAC,EAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,cAAa,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAED,KAAE,SAAQ,0BAAyB,QAAQ,GAAE,IAAE,EAAC,YAAW,EAAC;AAAE,MAAG,KAAG,EAAE,OAAM,IAAI,MAAM,sCAAsC;AAAE,MAAI,IAAE,EAAC,OAAMC,IAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,yBAAwB,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,IAAE,MAAG;AAAC,MAAI,IAAE,EAAED,KAAE,SAAQ,sBAAqB,QAAQ,GAAE,IAAE,EAAC,SAAQ,GAAE,SAAQC,KAAE,eAAc,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,EAAC,GAAE,EAAC,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,qBAAoB,GAAE,CAAC;AAAE,IAAI,KAAG,EAAC,KAAI,IAAG,MAAK,IAAG,MAAK,IAAG,OAAM,GAAE;AAAvC,IAAyC,KAAG,EAAC,eAAc,IAAG,YAAW,IAAG,OAAM,IAAG,MAAK,GAAE;AAA5F,IAA8F,KAAG,EAAC,eAAc,IAAG,gBAAe,IAAG,uBAAsB,IAAG,gBAAe,IAAG,gBAAe,IAAG,kBAAiB,IAAG,eAAc,IAAG,mBAAkB,IAAG,wBAAuB,IAAG,4BAA2B,IAAG,iCAAgC,IAAG,yBAAwB,IAAG,8BAA6B,IAAG,WAAU,IAAG,WAAU,GAAE;AAA3a,IAA6a,KAAG,EAAC,UAAS,IAAG,aAAY,IAAG,IAAG,GAAE;AAAjd,IAAmd,KAAG,EAAC,oBAAmB,IAAG,qBAAoB,IAAG,gBAAe,IAAG,WAAU,IAAG,WAAU,IAAG,SAAQ,IAAG,kBAAiB,IAAG,qBAAoB,IAAG,qBAAoB,GAAE;AAA5nB,IAA8nB,KAAG,EAAC,qBAAoB,IAAG,eAAc,IAAG,mBAAkB,IAAG,kBAAiB,GAAE;AAAltB,IAAotB,KAAG,EAAC,cAAa,IAAG,aAAY,IAAG,wBAAuB,IAAG,oBAAmB,GAAE;AAAE,IAAI,KAAG,CAAC;AAAE,GAAG,IAAG,EAAC,cAAa,MAAI,IAAG,kBAAiB,MAAI,IAAG,mBAAkB,MAAI,IAAG,eAAc,MAAI,GAAE,CAAC;AAAE,IAAI,KAAG,oBAAI;AAAX,IAAe,KAAG,oBAAI;AAAtB,IAA0B,KAAG,MAAK;AAAA,EAAC,eAAc;AAAC,WAAO,KAAK,YAAY;AAAA,EAAS;AAAA,EAAC,OAAO,WAAW,GAAEA,KAAE;AAAC,WAAO,IAAI,EAAEA,GAAC;AAAA,EAAC;AAAC;AAA3H,IAA6H,KAAG,MAAMD,GAAC;AAAA,EAAC,cAAa;AAAC,SAAK,eAAa,CAAC;AAAA,EAAC;AAAA,EAAC,OAAO,SAAQ;AAAC,WAAOA,GAAE,YAAU,SAAOA,GAAE,WAAS,IAAIA,OAAGA,GAAE;AAAA,EAAQ;AAAA,EAAC,OAAO,SAAS,GAAE;AAAC,IAAAA,GAAE,OAAO,EAAE,aAAa,EAAE,SAAS,IAAE,CAAC,GAAE,EAAE,UAAU;AAAA,EAAC;AAAC;AAAE,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,IAAED,IAAE,aAAW,MAAK,MAAI,6EAA6E,GAAE,EAAE,OAAOA,IAAE,aAAW,UAAS,MAAI,wDAAsD,OAAOA,IAAE,SAAS,GAAE,EAAEA,IAAE,UAAU,SAAO,GAAE,MAAI,mFAAmF,GAAE,OAAO,KAAG,gBAAc,IAAE,WAAU,OAAOC,OAAG,gBAAcA,MAAED,IAAE;AAAW,MAAI,IAAEC,KAAE,IAAE,IAAE,MAAI;AAAE,SAAO,GAAG,SAASD,GAAC,GAAE,GAAG,IAAI,GAAEA,GAAC,GAAE,GAAG,IAAIA,KAAE,CAAC,GAAEA;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAO,GAAG,IAAIA,GAAC,IAAE,GAAG,IAAIA,GAAC,IAAEA,IAAE;AAAS;AAAC,IAAI,KAAG,cAAc,GAAE;AAAA,EAAC,SAAS,GAAEC,MAAE,OAAG,GAAE;AAAC,QAAG,EAAC,OAAM,GAAE,OAAM,EAAC,IAAE,KAAK,iBAAiB,GAAE,CAAC;AAAE,QAAG,KAAG,MAAK;AAAC,UAAI,IAAE,EAAE,IAAI,QAAI,EAAC,MAAK,EAAE,MAAK,QAAO,EAAE,EAAE,IAAI,EAAC,EAAE;AAAE,WAAK,eAAe,CAAC;AAAA,IAAC,MAAM,MAAK,eAAe,CAAC;AAAE,WAAO,GAAG,CAAC,GAAEA,MAAE,KAAG,EAAE,QAAQ,GAAE;AAAA,EAAK;AAAA,EAAC,IAAI,aAAY;AAAC,WAAO,KAAK,eAAa,SAAO,KAAK,cAAY,IAAG,KAAK;AAAA,EAAW;AAAA,EAAC,sBAAqB;AAAC,SAAK,cAAY,KAAK,aAAW;AAAA,EAAC;AAAA,EAAC,iBAAiB,GAAEA,KAAE;AAAC,WAAO,GAAG,GAAEA,GAAC;AAAA,EAAC;AAAA,EAAC,UAAS;AAAC,SAAK,eAAa,QAAM,GAAG,KAAK,WAAW;AAAA,EAAC;AAAA,EAAC,MAAM,iBAAgB;AAAC,WAAO,KAAK,eAAa,SAAO,KAAK,cAAY,IAAG,EAAC,MAAK,QAAO,QAAO,GAAG,KAAK,aAAY,OAAO,EAAC;AAAA,EAAC;AAAA,EAAC,MAAM,aAAY;AAAC,UAAM,IAAI,MAAM,yDAAyD;AAAA,EAAC;AAAA,EAAC,MAAM,WAAW,GAAE;AAAC,UAAM,IAAI,MAAM,4DAA4D,KAAK,aAAa,CAAC,EAAE;AAAA,EAAC;AAAA,EAAC,MAAM,kBAAkB,GAAE;AAAC,WAAO,KAAK,eAAa,MAAM,EAAE,CAAC,EAAE,OAAO,KAAK,GAAG,CAAC,GAAE,EAAE,MAAM,CAAC;AAAA,EAAC;AAAC;AAAE,OAAO,eAAe,IAAG,OAAO,aAAY,EAAC,OAAM,CAAAD,QAAGA,IAAE,YAAU,QAAMA,IAAE,oBAAkB,QAAMA,IAAE,kBAAgB,KAAI,CAAC;AAAE,IAAI,KAAG,cAAc,GAAE;AAAA,EAAC,WAAW,YAAW;AAAC,WAAM;AAAA,EAAU;AAAA,EAAC,YAAY,GAAEC,KAAE,IAAE,MAAK;AAAC,UAAM,GAAE,KAAK,eAAa,GAAE,KAAK,MAAIA,KAAE,KAAK,UAAQ,GAAE,KAAK,mBAAiB,CAAC,GAAE,KAAK,qBAAmB,CAAC,GAAE,KAAG,SAAO,KAAK,UAAQ,EAAE,QAAQ,QAAQ;AAAA,EAAE;AAAA,EAAC,eAAe,GAAE;AAAC,KAAC,MAAM,QAAQ,CAAC,IAAE,EAAE,IAAI,OAAG,EAAE,IAAI,IAAE,OAAO,KAAK,CAAC,GAAG,QAAQ,CAAC,GAAE,MAAI;AAAC,UAAI,IAAE,EAAE,oBAAoB,CAAC,GAAE,IAAE;AAAG,WAAK,iBAAiB,CAAC,KAAG,SAAO,KAAK,iBAAiB,CAAC,IAAE,EAAC,cAAa,GAAG,CAAC,eAAc,UAAS,GAAG,MAAI,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC,EAAC,IAAG,KAAK,mBAAmB,CAAC,KAAG,SAAO,KAAK,mBAAmB,CAAC,IAAE,EAAC,cAAa,GAAG,CAAC,cAAa,UAAS,GAAG,MAAI,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC,EAAC;AAAG,UAAI,IAAE,MAAM,QAAQ,CAAC,IAAE,EAAE,CAAC,EAAE,SAAO,EAAE,CAAC;AAAE,UAAG,KAAG,KAAK;AAAO,UAAI,IAAE,KAAK,iBAAiB,CAAC,EAAE,UAAS,IAAE,KAAK,mBAAmB,CAAC,EAAE;AAAS,SAAG,MAAI;AAAC,YAAI,IAAE,GAAG,GAAG,GAAE,KAAK,GAAG,GAAE,GAAG,GAAG,CAAC,GAAE,IAAE,KAAK,GAAG,CAAC,GAAE,IAAE,GAAG,GAAG,GAAG,GAAG,GAAE,KAAK,OAAO,CAAC,GAAE,GAAG,GAAG,GAAE,KAAK,OAAO,CAAC,CAAC,GAAE,CAAC,GAAE,IAAE,GAAG,GAAG,GAAE,KAAK,GAAG,GAAE,GAAG,GAAG,CAAC,GAAE,IAAE,KAAK,GAAG,CAAC;AAAE,UAAE,OAAO,CAAC,GAAE,EAAE,OAAO,CAAC;AAAE,YAAI,IAAE,GAAG,GAAG,GAAE,CAAC,KAAK,YAAY,GAAE,CAAC;AAAE,UAAE,OAAO,CAAC;AAAA,MAAC,CAAC;AAAA,IAAC,CAAC,GAAE,KAAK,oBAAoB;AAAA,EAAC;AAAA,EAAC,UAAS;AAAC,SAAK,sBAAoB,SAAO,GAAG,KAAK,iBAAiB,IAAI,OAAG,EAAE,QAAQ,CAAC,GAAE,GAAG,KAAK,mBAAmB,IAAI,OAAG,EAAE,QAAQ,CAAC;AAAA,EAAE;AAAA,EAAC,MAAM,aAAY;AAAC,QAAI,IAAE,CAAC,GAAG,KAAK,kBAAiB,GAAG,KAAK,kBAAkB;AAAE,WAAM,CAAC,MAAM,KAAK,eAAe,CAAC,EAAE,OAAO,EAAE,IAAI,CAAAA,SAAI,EAAC,MAAKA,IAAE,cAAa,QAAOA,IAAE,SAAQ,EAAE,CAAC;AAAA,EAAC;AAAA,EAAC,MAAM,WAAW,GAAE;AAAC,QAAE,MAAM,KAAK,kBAAkB,CAAC;AAAE,QAAIA,MAAE,EAAE,SAAO,GAAE,IAAE;AAAG,SAAK,mBAAiB,EAAE,MAAM,GAAEA,GAAC,EAAE,IAAI,QAAI,EAAC,cAAa,EAAE,MAAK,UAAS,EAAE,OAAO,SAAS,CAAC,EAAC,EAAE,GAAE,KAAK,qBAAmB,EAAE,MAAMA,KAAEA,MAAE,CAAC,EAAE,IAAI,QAAI,EAAC,cAAa,EAAE,MAAK,UAAS,EAAE,OAAO,SAAS,CAAC,EAAC,EAAE;AAAA,EAAC;AAAA,EAAC,YAAW;AAAC,WAAM,EAAC,cAAa,KAAK,cAAa,KAAI,KAAK,KAAI,SAAQ,KAAK,QAAO;AAAA,EAAC;AAAA,EAAC,OAAO,WAAW,GAAEA,KAAE;AAAC,WAAO,IAAI,EAAEA,IAAE,cAAaA,IAAE,KAAIA,IAAE,OAAO;AAAA,EAAC;AAAC;AAAE,IAAI,KAAG,cAAc,GAAE;AAAA,EAAC,WAAW,YAAW;AAAC,WAAM;AAAA,EAAS;AAAA,EAAC,YAAY,GAAEA,MAAE,KAAG;AAAC,UAAM,GAAE,KAAK,eAAa,GAAE,KAAK,0BAAwBA,KAAE,KAAK,mBAAiB,CAAC;AAAA,EAAC;AAAA,EAAC,eAAe,GAAE;AAAC,KAAC,MAAM,QAAQ,CAAC,IAAE,EAAE,IAAI,OAAG,EAAE,IAAI,IAAE,OAAO,KAAK,CAAC,GAAG,QAAQ,CAAC,GAAE,MAAI;AAAC,UAAI,IAAE,EAAE,oBAAoB,CAAC;AAAE,WAAK,iBAAiB,CAAC,KAAG,SAAO,KAAK,iBAAiB,CAAC,IAAE,EAAC,cAAa,GAAG,CAAC,gBAAe,UAAS,GAAG,MAAI,GAAG,EAAE,OAAM,KAAK,uBAAuB,EAAE,SAAS,KAAE,CAAC,EAAC;AAAG,UAAI,IAAE,MAAM,QAAQ,CAAC,IAAE,EAAE,CAAC,EAAE,SAAO,EAAE,CAAC;AAAE,UAAG,KAAG,KAAK;AAAO,UAAI,IAAE,KAAK,iBAAiB,CAAC,EAAE;AAAS,SAAG,MAAI;AAAC,YAAI,IAAE,GAAG,GAAE,GAAG,CAAC,CAAC;AAAE,UAAE,OAAO,CAAC;AAAE,YAAI,IAAE,GAAG,GAAG,GAAG,GAAE,GAAG,GAAG,GAAE,EAAE,QAAQ,QAAQ,CAAC,CAAC,CAAC,GAAE,CAAC,KAAK,YAAY,GAAE,CAAC;AAAE,UAAE,OAAO,CAAC;AAAA,MAAC,CAAC;AAAA,IAAC,CAAC,GAAE,KAAK,oBAAoB;AAAA,EAAC;AAAA,EAAC,UAAS;AAAC,SAAK,oBAAkB,QAAM,GAAG,KAAK,iBAAiB,IAAI,OAAG,EAAE,QAAQ,CAAC;AAAA,EAAC;AAAA,EAAC,MAAM,aAAY;AAAC,WAAM,CAAC,MAAM,KAAK,eAAe,CAAC,EAAE,OAAO,KAAK,iBAAiB,IAAI,QAAI,EAAC,MAAK,EAAE,cAAa,QAAO,EAAE,SAAQ,EAAE,CAAC;AAAA,EAAC;AAAA,EAAC,MAAM,WAAW,GAAE;AAAC,QAAE,MAAM,KAAK,kBAAkB,CAAC;AAAE,QAAIA,MAAE;AAAG,SAAK,mBAAiB,EAAE,IAAI,QAAI,EAAC,cAAa,EAAE,MAAK,UAAS,EAAE,OAAO,SAASA,GAAC,EAAC,EAAE;AAAA,EAAC;AAAA,EAAC,YAAW;AAAC,WAAM,EAAC,cAAa,KAAK,cAAa,yBAAwB,KAAK,wBAAuB;AAAA,EAAC;AAAA,EAAC,OAAO,WAAW,GAAEA,KAAE;AAAC,WAAO,IAAI,EAAEA,IAAE,cAAaA,IAAE,uBAAuB;AAAA,EAAC;AAAC;AAAE,IAAI,KAAG,cAAc,GAAE;AAAA,EAAC,WAAW,YAAW;AAAC,WAAM;AAAA,EAAM;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE,IAAE,MAAK;AAAC,UAAM,GAAE,KAAK,eAAa,GAAE,KAAK,QAAMA,KAAE,KAAK,QAAM,GAAE,KAAK,UAAQ,GAAE,KAAK,yBAAuB,CAAC,GAAE,KAAK,0BAAwB,CAAC,GAAE,GAAG,MAAI;AAAC,WAAK,WAAS,GAAGA,GAAC,EAAE,SAAS,GAAE,KAAK,WAAS,GAAG,CAAC,EAAE,SAAS;AAAA,IAAC,CAAC,GAAE,KAAG,SAAO,KAAK,UAAQ,EAAE,QAAQ,QAAQ;AAAA,EAAE;AAAA,EAAC,eAAe,GAAE;AAAC,QAAIA,MAAE,MAAM,QAAQ,CAAC,IAAE,EAAE,IAAI,OAAG,EAAE,IAAI,IAAE,OAAO,KAAK,CAAC;AAAE,OAAG,MAAI;AAAC,UAAI,IAAE,GAAG,GAAE,KAAK,QAAQ,GAAE,IAAE,GAAG,GAAE,KAAK,QAAQ;AAAE,MAAAA,IAAE,QAAQ,CAAC,GAAE,MAAI;AAAC,YAAI,IAAE,EAAE,oBAAoB,CAAC,GAAE,IAAE;AAAG,aAAK,uBAAuB,CAAC,KAAG,SAAO,KAAK,uBAAuB,CAAC,IAAE,EAAC,cAAa,GAAG,CAAC,MAAK,UAAS,GAAG,MAAI,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC,EAAC,IAAG,KAAK,wBAAwB,CAAC,KAAG,SAAO,KAAK,wBAAwB,CAAC,IAAE,EAAC,cAAa,GAAG,CAAC,MAAK,UAAS,GAAG,MAAI,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC,EAAC;AAAG,YAAI,IAAE,MAAM,QAAQ,CAAC,IAAE,EAAE,CAAC,EAAE,SAAO,EAAE,CAAC;AAAE,YAAG,KAAG,KAAK;AAAO,YAAI,IAAE,KAAK,uBAAuB,CAAC,EAAE,UAAS,IAAE,KAAK,wBAAwB,CAAC,EAAE,UAAS,IAAE,GAAG,GAAG,GAAE,KAAK,KAAK,GAAE,GAAG,GAAE,IAAE,KAAK,KAAK,CAAC,GAAE,IAAE,GAAG,GAAG,GAAE,KAAK,KAAK,GAAE,GAAG,GAAG,CAAC,GAAE,IAAE,KAAK,KAAK,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC;AAAE,UAAE,OAAO,CAAC,GAAE,EAAE,OAAO,CAAC;AAAE,YAAI,IAAE,GAAG,GAAG,GAAG,GAAE,GAAG,GAAG,CAAC,GAAE,KAAK,OAAO,CAAC,GAAE,CAAC,KAAK,YAAY,GAAE,CAAC;AAAE,UAAE,OAAO,CAAC;AAAA,MAAC,CAAC,GAAE,KAAK,SAAS,OAAO,GAAG,KAAK,UAAS,KAAK,KAAK,CAAC,GAAE,KAAK,SAAS,OAAO,GAAG,KAAK,UAAS,KAAK,KAAK,CAAC;AAAA,IAAC,CAAC,GAAE,KAAK,oBAAoB;AAAA,EAAC;AAAA,EAAC,UAAS;AAAC,SAAK,SAAS,QAAQ,GAAE,KAAK,SAAS,QAAQ,GAAE,KAAK,0BAAwB,QAAM,GAAG,KAAK,uBAAuB,IAAI,OAAG,EAAE,QAAQ,CAAC,GAAE,KAAK,2BAAyB,QAAM,GAAG,KAAK,wBAAwB,IAAI,OAAG,EAAE,QAAQ,CAAC;AAAA,EAAC;AAAA,EAAC,MAAM,aAAY;AAAC,QAAI,IAAE,CAAC,GAAG,KAAK,wBAAuB,GAAG,KAAK,uBAAuB;AAAE,WAAM,CAAC,MAAM,KAAK,eAAe,CAAC,EAAE,OAAO,EAAE,IAAI,CAAAA,SAAI,EAAC,MAAKA,IAAE,cAAa,QAAOA,IAAE,SAAQ,EAAE,CAAC;AAAA,EAAC;AAAA,EAAC,MAAM,WAAW,GAAE;AAAC,QAAE,MAAM,KAAK,kBAAkB,CAAC,GAAE,GAAG,MAAI;AAAC,WAAK,SAAS,OAAO,GAAG,KAAK,OAAM,KAAK,cAAY,CAAC,CAAC,GAAE,KAAK,SAAS,OAAO,GAAG,KAAK,OAAM,KAAK,cAAY,CAAC,CAAC;AAAA,IAAC,CAAC;AAAE,QAAIA,MAAE,EAAE,SAAO,GAAE,IAAE;AAAG,SAAK,yBAAuB,EAAE,MAAM,GAAEA,GAAC,EAAE,IAAI,QAAI,EAAC,cAAa,EAAE,MAAK,UAAS,EAAE,OAAO,SAAS,CAAC,EAAC,EAAE,GAAE,KAAK,0BAAwB,EAAE,MAAMA,KAAEA,MAAE,CAAC,EAAE,IAAI,QAAI,EAAC,cAAa,EAAE,MAAK,UAAS,EAAE,OAAO,SAAS,CAAC,EAAC,EAAE;AAAA,EAAC;AAAA,EAAC,YAAW;AAAC,WAAM,EAAC,cAAa,KAAK,cAAa,OAAM,KAAK,OAAM,OAAM,KAAK,OAAM,SAAQ,KAAK,QAAO;AAAA,EAAC;AAAA,EAAC,OAAO,WAAW,GAAEA,KAAE;AAAC,WAAO,IAAI,EAAEA,IAAE,cAAaA,IAAE,OAAMA,IAAE,OAAMA,IAAE,OAAO;AAAA,EAAC;AAAC;AAAE,IAAI,KAAG,cAAc,GAAE;AAAA,EAAC,WAAW,YAAW;AAAC,WAAM;AAAA,EAAQ;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE,IAAE,MAAK,IAAE,GAAE;AAAC,UAAM,GAAE,KAAK,eAAa,GAAE,KAAK,QAAMA,KAAE,KAAK,QAAM,GAAE,KAAK,UAAQ,GAAE,KAAK,QAAM,GAAE,KAAK,yBAAuB,CAAC,GAAE,KAAK,6BAA2B,CAAC,GAAE,GAAG,MAAI;AAAC,WAAK,YAAU,GAAG,CAAC,EAAE,SAAS,GAAE,KAAK,WAAS,GAAGA,GAAC,EAAE,SAAS;AAAA,IAAC,CAAC,GAAE,KAAG,SAAO,KAAK,UAAQ,EAAE,QAAQ,QAAQ;AAAA,EAAE;AAAA,EAAC,eAAe,GAAE;AAAC,QAAIA,MAAE,MAAM,QAAQ,CAAC,IAAE,EAAE,IAAI,OAAG,EAAE,IAAI,IAAE,OAAO,KAAK,CAAC;AAAE,OAAG,MAAI;AAAC,UAAI,IAAE,GAAG,GAAE,KAAK,QAAQ,GAAE,IAAE,GAAG,CAAC,KAAK,cAAa,GAAG,GAAG,KAAK,WAAU,KAAK,KAAK,GAAE,CAAC,CAAC;AAAE,MAAAA,IAAE,QAAQ,CAAC,GAAE,MAAI;AAAC,YAAI,IAAE,EAAE,oBAAoB,CAAC,GAAE,IAAE;AAAG,aAAK,uBAAuB,CAAC,KAAG,SAAO,KAAK,uBAAuB,CAAC,IAAE,EAAC,cAAa,GAAG,CAAC,MAAK,UAAS,GAAG,CAAC,EAAE,SAAS,CAAC,EAAC,IAAG,KAAK,2BAA2B,CAAC,KAAG,SAAO,KAAK,2BAA2B,CAAC,IAAE,EAAC,cAAa,GAAG,CAAC,MAAK,UAAS,GAAG,CAAC,EAAE,SAAS,CAAC,EAAC;AAAG,YAAI,IAAE,MAAM,QAAQ,CAAC,IAAE,EAAE,CAAC,EAAE,SAAO,EAAE,CAAC;AAAE,YAAG,KAAG,KAAK;AAAO,YAAI,IAAE,KAAK,uBAAuB,CAAC,EAAE,UAAS,IAAE,KAAK,2BAA2B,CAAC,EAAE,UAAS,IAAE,GAAG,GAAG,GAAE,KAAK,KAAK,GAAE,GAAG,GAAE,IAAE,KAAK,KAAK,CAAC,GAAE,IAAE,GAAG,GAAE,KAAK,KAAK,GAAE,IAAE,GAAG,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC;AAAE,UAAE,OAAO,CAAC,GAAE,EAAE,OAAO,CAAC;AAAE,YAAI,IAAE,GAAG,GAAG,GAAG,GAAE,CAAC,GAAE,GAAG,GAAE,GAAG,GAAE,KAAK,OAAO,CAAC,CAAC,GAAE,CAAC;AAAE,UAAE,OAAO,CAAC;AAAA,MAAC,CAAC,GAAE,KAAK,UAAU,OAAO,GAAG,KAAK,WAAU,CAAC,CAAC,GAAE,KAAK,SAAS,OAAO,GAAG,KAAK,UAAS,KAAK,KAAK,CAAC;AAAA,IAAC,CAAC,GAAE,KAAK,oBAAoB;AAAA,EAAC;AAAA,EAAC,UAAS;AAAC,SAAK,SAAS,QAAQ,GAAE,KAAK,UAAU,QAAQ,GAAE,KAAK,0BAAwB,QAAM,GAAG,KAAK,uBAAuB,IAAI,OAAG,EAAE,QAAQ,CAAC,GAAE,KAAK,8BAA4B,QAAM,GAAG,KAAK,2BAA2B,IAAI,OAAG,EAAE,QAAQ,CAAC;AAAA,EAAC;AAAA,EAAC,MAAM,aAAY;AAAC,UAAM,IAAI,MAAM,iDAAiD;AAAA,EAAC;AAAA,EAAC,MAAM,WAAW,GAAE;AAAC,UAAM,IAAI,MAAM,iDAAiD;AAAA,EAAC;AAAA,EAAC,YAAW;AAAC,WAAM,EAAC,cAAa,KAAK,cAAa,OAAM,KAAK,OAAM,OAAM,KAAK,OAAM,SAAQ,KAAK,SAAQ,OAAM,KAAK,MAAK;AAAA,EAAC;AAAA,EAAC,OAAO,WAAW,GAAEA,KAAE;AAAC,WAAO,IAAI,EAAEA,IAAE,cAAaA,IAAE,OAAMA,IAAE,OAAMA,IAAE,SAAQA,IAAE,KAAK;AAAA,EAAC;AAAC;AAAE,IAAI,KAAG,cAAc,GAAE;AAAA,EAAC,WAAW,YAAW;AAAC,WAAM;AAAA,EAAK;AAAA,EAAC,YAAY,GAAE;AAAC,UAAM,GAAE,KAAK,eAAa,GAAE,KAAK,gBAAgB,CAAC;AAAA,EAAC;AAAA,EAAC,eAAe,GAAE;AAAC,KAAC,MAAM,QAAQ,CAAC,IAAE,EAAE,IAAI,OAAG,EAAE,IAAI,IAAE,OAAO,KAAK,CAAC,GAAG,QAAQ,CAAC,GAAE,MAAI;AAAC,UAAI,IAAE,MAAM,QAAQ,CAAC,IAAE,EAAE,CAAC,EAAE,SAAO,EAAE,CAAC;AAAE,UAAG,KAAG,KAAK;AAAO,UAAI,IAAE,EAAE,oBAAoB,CAAC;AAAE,SAAG,MAAI;AAAC,YAAI,IAAE,GAAG,GAAG,KAAK,GAAE,CAAC,GAAE,CAAC;AAAE,UAAE,OAAO,CAAC;AAAA,MAAC,CAAC;AAAA,IAAC,CAAC,GAAE,KAAK,oBAAoB;AAAA,EAAC;AAAA,EAAC,gBAAgB,GAAE;AAAC,SAAK,eAAa,GAAE,KAAK,KAAG,QAAM,KAAK,EAAE,QAAQ,GAAE,KAAK,IAAE,GAAG,GAAG,CAAC,CAAC,CAAC;AAAA,EAAC;AAAA,EAAC,UAAS;AAAC,SAAK,EAAE,QAAQ;AAAA,EAAC;AAAA,EAAC,MAAM,aAAY;AAAC,WAAM,CAAC,MAAM,KAAK,eAAe,CAAC;AAAA,EAAC;AAAA,EAAC,MAAM,WAAW,GAAE;AAAC,QAAG,IAAE,MAAM,KAAK,kBAAkB,CAAC,GAAE,EAAE,WAAS,EAAE,OAAM,IAAI,MAAM,+CAA+C;AAAA,EAAC;AAAA,EAAC,YAAW;AAAC,WAAM,EAAC,cAAa,KAAK,aAAY;AAAA,EAAC;AAAA,EAAC,OAAO,WAAW,GAAEA,KAAE;AAAC,WAAO,IAAI,EAAEA,IAAE,YAAY;AAAA,EAAC;AAAC;AAAE,IAAI,KAAG,cAAc,GAAE;AAAA,EAAC,WAAW,YAAW;AAAC,WAAM;AAAA,EAAU;AAAA,EAAC,YAAY,GAAEA,KAAE,IAAE,OAAG;AAAC,UAAM,CAAC,GAAE,KAAK,eAAa,GAAE,KAAK,WAASA,KAAE,KAAK,cAAY,GAAE,KAAK,gBAAc,CAAC,GAAE,KAAK,IAAE,GAAG,KAAK,QAAQ;AAAA,EAAC;AAAA,EAAC,eAAe,GAAE;AAAC,KAAC,MAAM,QAAQ,CAAC,IAAE,EAAE,IAAI,OAAG,EAAE,IAAI,IAAE,OAAO,KAAK,CAAC,GAAG,QAAQ,CAAC,GAAE,MAAI;AAAC,UAAI,IAAE,EAAE,oBAAoB,CAAC;AAAE,WAAK,cAAc,CAAC,KAAG,SAAO,KAAK,cAAc,CAAC,IAAE,EAAC,cAAa,GAAG,CAAC,aAAY,UAAS,GAAG,MAAI,GAAG,CAAC,EAAE,SAAS,KAAE,CAAC,EAAC;AAAG,UAAI,IAAE,KAAK,cAAc,CAAC,EAAE,UAAS,IAAE,MAAM,QAAQ,CAAC,IAAE,EAAE,CAAC,EAAE,SAAO,EAAE,CAAC;AAAE,WAAG,QAAM,GAAG,MAAI;AAAC,YAAI,GAAE,IAAE,GAAG,GAAG,KAAK,GAAE,CAAC,GAAE,CAAC;AAAE,aAAK,cAAY,IAAE,GAAG,GAAG,KAAK,GAAE,GAAG,GAAE,GAAG,GAAE,KAAK,CAAC,CAAC,CAAC,GAAE,CAAC,IAAE,IAAE,GAAG,GAAG,KAAK,GAAE,CAAC,GAAE,CAAC,GAAE,EAAE,OAAO,CAAC,GAAE,EAAE,OAAO,CAAC;AAAA,MAAC,CAAC;AAAA,IAAC,CAAC,GAAE,KAAK,oBAAoB;AAAA,EAAC;AAAA,EAAC,UAAS;AAAC,SAAK,EAAE,QAAQ,GAAE,KAAK,iBAAe,QAAM,GAAG,KAAK,cAAc,IAAI,OAAG,EAAE,QAAQ,CAAC;AAAA,EAAC;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,WAAS;AAAA,EAAC;AAAA,EAAC,MAAM,aAAY;AAAC,WAAM,CAAC,MAAM,KAAK,eAAe,CAAC,EAAE,OAAO,KAAK,cAAc,IAAI,QAAI,EAAC,MAAK,EAAE,cAAa,QAAO,EAAE,SAAQ,EAAE,CAAC;AAAA,EAAC;AAAA,EAAC,MAAM,WAAW,GAAE;AAAC,QAAE,MAAM,KAAK,kBAAkB,CAAC;AAAE,QAAIA,MAAE;AAAG,SAAK,gBAAc,EAAE,IAAI,QAAI,EAAC,cAAa,EAAE,MAAK,UAAS,EAAE,OAAO,SAASA,GAAC,EAAC,EAAE;AAAA,EAAC;AAAA,EAAC,YAAW;AAAC,WAAM,EAAC,cAAa,KAAK,cAAa,UAAS,KAAK,UAAS,aAAY,KAAK,YAAW;AAAA,EAAC;AAAA,EAAC,OAAO,WAAW,GAAEA,KAAE;AAAC,WAAO,IAAI,EAAEA,IAAE,cAAaA,IAAE,UAASA,IAAE,WAAW;AAAA,EAAC;AAAC;AAAE,IAAI,KAAG,cAAc,GAAE;AAAA,EAAC,WAAW,YAAW;AAAC,WAAM;AAAA,EAAS;AAAA,EAAC,YAAY,GAAEA,MAAE,KAAG,IAAE,GAAE,IAAE,MAAK,IAAE,OAAG;AAAC,QAAG,MAAM,GAAE,KAAK,eAAa,GAAE,KAAK,QAAMA,KAAE,KAAK,WAAS,GAAE,KAAK,UAAQ,GAAE,KAAK,yBAAuB,CAAC,GAAE,KAAK,qBAAmB,CAAC,GAAE,KAAK,uBAAqB,CAAC,GAAE,KAAK,WAAS,GAAE,KAAG,SAAO,KAAK,UAAQ,EAAE,QAAQ,QAAQ,IAAG,KAAG,KAAK,OAAM,IAAI,MAAM,oDAAoD;AAAA,EAAC;AAAA,EAAC,eAAe,GAAE;AAAC,KAAC,MAAM,QAAQ,CAAC,IAAE,EAAE,IAAI,OAAG,EAAE,IAAI,IAAE,OAAO,KAAK,CAAC,GAAG,QAAQ,CAAC,GAAE,MAAI;AAAC,UAAI,IAAE,EAAE,oBAAoB,CAAC,GAAE,IAAE;AAAG,WAAK,uBAAuB,CAAC,KAAG,SAAO,KAAK,uBAAuB,CAAC,IAAE,EAAC,cAAa,GAAG,CAAC,QAAO,UAAS,GAAG,MAAI,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC,EAAC,IAAG,KAAK,mBAAmB,CAAC,KAAG,SAAO,KAAK,mBAAmB,CAAC,IAAE,EAAC,cAAa,GAAG,CAAC,aAAY,UAAS,GAAG,MAAI,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC,EAAC,IAAG,KAAK,qBAAqB,CAAC,KAAG,QAAM,KAAK,aAAW,KAAK,qBAAqB,CAAC,IAAE,EAAC,cAAa,GAAG,CAAC,OAAM,UAAS,GAAG,MAAI,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC,EAAC;AAAG,UAAI,IAAE,MAAM,QAAQ,CAAC,IAAE,EAAE,CAAC,EAAE,SAAO,EAAE,CAAC;AAAE,UAAG,KAAG,KAAK;AAAO,UAAI,IAAE,KAAK,uBAAuB,CAAC,EAAE,UAAS,IAAE,KAAK,mBAAmB,CAAC,EAAE;AAAS,SAAG,MAAI;AAAC,YAAI,IAAE,GAAG,GAAG,GAAE,KAAK,KAAK,GAAE,GAAG,GAAG,CAAC,GAAE,IAAE,KAAK,KAAK,CAAC;AAAE,YAAG,KAAK,UAAS;AAAC,cAAI,IAAE,KAAK,qBAAqB,CAAC,EAAE,UAAS,IAAE,GAAG,GAAG,GAAE,KAAK,KAAK,GAAE,GAAG,GAAE,IAAE,KAAK,KAAK,CAAC,GAAE,IAAE,GAAG,GAAG,GAAE,KAAK,YAAY,GAAE,GAAG,GAAG,GAAE,GAAG,GAAG,CAAC,GAAE,KAAK,OAAO,CAAC,CAAC,CAAC,GAAE,IAAE,GAAG,GAAG,GAAE,KAAK,QAAQ,GAAE,CAAC;AAAE,YAAE,OAAO,CAAC,GAAE,EAAE,OAAO,CAAC,GAAE,EAAE,OAAO,CAAC;AAAE,cAAI,IAAE,GAAG,GAAE,CAAC;AAAE,YAAE,OAAO,CAAC;AAAA,QAAC,OAAK;AAAC,cAAI,IAAE,GAAG,GAAG,GAAE,KAAK,KAAK,GAAE,GAAG,GAAG,CAAC,GAAE,IAAE,KAAK,KAAK,CAAC,GAAE,IAAE,GAAG,GAAG,GAAE,KAAK,QAAQ,GAAE,GAAG,GAAG,GAAE,KAAK,YAAY,GAAE,GAAG,GAAG,GAAE,KAAK,OAAO,CAAC,CAAC,CAAC;AAAE,YAAE,OAAO,CAAC,GAAE,EAAE,OAAO,CAAC;AAAE,cAAI,IAAE,GAAG,GAAE,CAAC;AAAE,YAAE,OAAO,CAAC;AAAA,QAAC;AAAA,MAAC,CAAC;AAAA,IAAC,CAAC,GAAE,KAAK,oBAAoB;AAAA,EAAC;AAAA,EAAC,UAAS;AAAC,SAAK,0BAAwB,QAAM,GAAG,KAAK,uBAAuB,IAAI,OAAG,EAAE,QAAQ,CAAC,GAAE,KAAK,wBAAsB,QAAM,KAAK,YAAU,GAAG,KAAK,qBAAqB,IAAI,OAAG,EAAE,QAAQ,CAAC,GAAE,KAAK,sBAAoB,QAAM,GAAG,KAAK,mBAAmB,IAAI,OAAG,EAAE,QAAQ,CAAC;AAAA,EAAC;AAAA,EAAC,MAAM,aAAY;AAAC,QAAI,IAAE,CAAC,GAAG,KAAK,wBAAuB,GAAG,KAAK,kBAAkB;AAAE,WAAO,KAAK,YAAU,EAAE,KAAK,GAAG,KAAK,oBAAoB,GAAE,CAAC,MAAM,KAAK,eAAe,CAAC,EAAE,OAAO,EAAE,IAAI,CAAAA,SAAI,EAAC,MAAKA,IAAE,cAAa,QAAOA,IAAE,SAAQ,EAAE,CAAC;AAAA,EAAC;AAAA,EAAC,MAAM,WAAW,GAAE;AAAC,QAAE,MAAM,KAAK,kBAAkB,CAAC;AAAE,QAAIA,MAAE,KAAK,WAAS,EAAE,SAAO,IAAE,EAAE,SAAO,GAAE,IAAE;AAAG,SAAK,yBAAuB,EAAE,MAAM,GAAEA,GAAC,EAAE,IAAI,QAAI,EAAC,cAAa,EAAE,MAAK,UAAS,EAAE,OAAO,SAAS,CAAC,EAAC,EAAE,GAAE,KAAK,qBAAmB,EAAE,MAAMA,KAAEA,MAAE,CAAC,EAAE,IAAI,QAAI,EAAC,cAAa,EAAE,MAAK,UAAS,EAAE,OAAO,SAAS,CAAC,EAAC,EAAE,GAAE,KAAK,aAAW,KAAK,uBAAqB,EAAE,MAAMA,MAAE,GAAEA,MAAE,CAAC,EAAE,IAAI,QAAI,EAAC,cAAa,EAAE,MAAK,UAAS,EAAE,OAAO,SAAS,CAAC,EAAC,EAAE;AAAA,EAAE;AAAA,EAAC,YAAW;AAAC,WAAM,EAAC,cAAa,KAAK,cAAa,OAAM,KAAK,OAAM,UAAS,KAAK,UAAS,SAAQ,KAAK,SAAQ,UAAS,KAAK,SAAQ;AAAA,EAAC;AAAA,EAAC,OAAO,WAAW,GAAEA,KAAE;AAAC,WAAO,IAAI,EAAEA,IAAE,cAAaA,IAAE,OAAMA,IAAE,UAASA,IAAE,SAAQA,IAAE,QAAQ;AAAA,EAAC;AAAC;AAAE,IAAI,KAAG,CAAC,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,EAAE;AAAE,SAAS,KAAI;AAAC,WAAQD,OAAK,GAAG,IAAGA,GAAC;AAAC;AAAC,IAAI,KAAG,CAAC;AAAE,GAAG,IAAG,EAAC,sBAAqB,MAAI,IAAG,cAAa,MAAI,IAAG,oBAAmB,MAAI,IAAG,yBAAwB,MAAI,IAAG,WAAU,MAAI,IAAG,eAAc,MAAI,IAAG,qBAAoB,MAAI,IAAG,eAAc,MAAI,IAAG,YAAW,MAAI,IAAG,gBAAe,MAAI,IAAG,iBAAgB,MAAI,IAAG,0BAAyB,MAAI,IAAG,8BAA6B,MAAI,IAAG,8BAA6B,MAAI,IAAG,iBAAgB,MAAI,IAAG,gBAAe,MAAI,IAAG,MAAK,MAAI,IAAG,cAAa,MAAI,IAAG,YAAW,MAAI,IAAG,aAAY,MAAI,IAAG,WAAU,MAAI,IAAG,oBAAmB,MAAI,IAAG,oBAAmB,MAAI,IAAG,aAAY,MAAI,IAAG,sBAAqB,MAAI,IAAG,iBAAgB,MAAI,IAAG,qBAAoB,MAAI,GAAE,CAAC;AAAE,IAAI,KAAG;AAAP,IAAe,KAAG;AAAlB,IAA0B,KAAG;AAAe,SAAS,GAAGA,KAAE;AAAC,SAAO,IAAI,QAAQ,OAAG,WAAW,CAAC,CAAC,EAAE,KAAKA,GAAC;AAAC;AAAC,IAAI,KAAG,MAAMA,GAAC;AAAA,EAAC,YAAY,GAAE;AAAC,QAAG,CAAC,EAAE,EAAE,QAAQ,YAAY,EAAE,OAAM,IAAI,MAAM,qFAAqF;AAAE,MAAE,WAAWA,GAAE,UAAU,MAAI,IAAE,EAAE,MAAMA,GAAE,WAAW,MAAM,KAAI,KAAG,QAAM,EAAE,WAAS,OAAK,IAAE,KAAI,KAAK,oBAAkB,IAAE,IAAG,KAAK,qBAAmB,IAAE;AAAA,EAAE;AAAA,EAAC,MAAM,KAAK,GAAE;AAAC,QAAG,OAAO,YAAU,YAAY,OAAM,IAAI,MAAM,yFAAyF;AAAE,QAAIC,MAAE,GAAG,KAAK,EAAE,UAAU,GAAE,IAAE,OAAO,IAAI,gBAAgB,IAAI,KAAK,CAACA,GAAC,GAAE,EAAC,MAAK,2BAA0B,CAAC,CAAC;AAAE,QAAG,EAAE,yBAAyB,YAAY,OAAM,IAAI,MAAM,uFAAuF;AAAE;AAAC,UAAI,IAAE,CAAC,EAAC,OAAM,CAAC,OAAK,KAAK,kBAAkB,GAAE,SAAQ,EAAE,YAAW,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC,GAAE,IAAE,OAAO,IAAI,gBAAgB,IAAI,KAAK,CAAC,KAAK,UAAU,CAAC,CAAC,GAAE,EAAC,MAAK,mBAAkB,CAAC,CAAC,GAAE,IAAE,KAAK,mBAAiB,OAAK,SAAS,cAAc,GAAG,IAAE,KAAK;AAAgB,UAAG,EAAE,WAAS,KAAK,mBAAkB,EAAE,OAAK,GAAE,MAAM,GAAG,MAAI,EAAE,cAAc,IAAI,WAAW,OAAO,CAAC,CAAC,GAAE,EAAE,cAAY,MAAK;AAAC,YAAI,IAAE,KAAK,oBAAkB,OAAK,SAAS,cAAc,GAAG,IAAE,KAAK;AAAiB,UAAE,WAAS,KAAK,oBAAmB,EAAE,OAAK,GAAE,MAAM,GAAG,MAAI,EAAE,cAAc,IAAI,WAAW,OAAO,CAAC,CAAC;AAAA,MAAC;AAAC,aAAM,EAAC,oBAAmB,GAAG,CAAC,EAAC;AAAA,IAAC;AAAA,EAAC;AAAC;AAAE,GAAG,aAAW;AAAe,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,QAAG,KAAG,QAAM,EAAE,SAAO,EAAE,OAAM,IAAI,MAAM,wEAAwE,CAAC,EAAE;AAAE,SAAK,WAAS,EAAE,CAAC,GAAE,KAAK,eAAa,EAAE,MAAM,CAAC;AAAA,EAAC;AAAA,EAAC,MAAM,OAAM;AAAC,WAAO,IAAI,QAAQ,CAAC,GAAEA,QAAI;AAAC,UAAI,IAAE,IAAI;AAAW,QAAE,SAAO,OAAG;AAAC,YAAI,IAAE,KAAK,MAAM,EAAE,OAAO,MAAM,GAAE,IAAE,EAAE;AAAc,YAAG,KAAG,MAAK;AAAC,UAAAA,IAAE,IAAI,MAAM,4CAA4C,KAAK,SAAS,IAAI,EAAE,CAAC;AAAE;AAAA,QAAM;AAAC,YAAG,EAAE,mBAAiB,MAAK;AAAC,UAAAA,IAAE,IAAI,MAAM,6CAA6C,KAAK,SAAS,IAAI,EAAE,CAAC;AAAE;AAAA,QAAM;AAAC,YAAG,KAAK,aAAa,WAAS,GAAE;AAAC,YAAE,EAAC,eAAc,EAAC,CAAC;AAAE;AAAA,QAAM;AAAC,YAAI,IAAE,GAAG,GAAE,OAAG,KAAK,YAAY,CAAC,CAAC;AAAE,UAAE,CAAC;AAAA,MAAC,GAAE,EAAE,UAAQ,OAAGA,IAAE,sEAAsE,KAAK,SAAS,IAAI,uEAAuE,GAAE,EAAE,WAAW,KAAK,QAAQ;AAAA,IAAC,CAAC;AAAA,EAAC;AAAA,EAAC,YAAY,GAAE;AAAC,QAAIA,MAAE,CAAC,GAAE,IAAE,CAAC;AAAE,aAAQ,KAAK,EAAE,CAAAA,IAAE,KAAK,GAAG,EAAE,OAAO,GAAE,EAAE,KAAK,GAAG,EAAE,KAAK;AAAE,QAAI,IAAE,KAAK,4BAA4B,CAAC,GAAE,IAAE,EAAE,IAAI,OAAG,KAAK,gBAAgB,GAAE,EAAE,CAAC,CAAC,CAAC;AAAE,WAAO,QAAQ,IAAI,CAAC,EAAE,KAAK,OAAG,CAACA,KAAE,CAAC,CAAC;AAAA,EAAC;AAAA,EAAC,gBAAgB,GAAEA,KAAE;AAAC,WAAO,IAAI,QAAQ,CAAC,GAAE,MAAI;AAAC,UAAI,IAAE,IAAI;AAAW,QAAE,SAAO,OAAG;AAAC,YAAI,IAAE,EAAE,OAAO;AAAO,UAAE,CAAC;AAAA,MAAC,GAAE,EAAE,UAAQ,OAAG,EAAE,6CAA6C,CAAC,IAAI,GAAE,EAAE,kBAAkBA,GAAC;AAAA,IAAC,CAAC;AAAA,EAAC;AAAA,EAAC,4BAA4B,GAAE;AAAC,QAAIA,MAAE,CAAC,GAAE,IAAE,KAAK,aAAa,IAAI,OAAG,GAAG,EAAE,IAAI,CAAC,GAAE,IAAE,CAAC;AAAE,aAAQ,KAAK,EAAE,GAAE,MAAM,QAAQ,OAAG;AAAC,UAAI,IAAE,GAAG,CAAC;AAAE,UAAGA,IAAE,QAAQ,CAAC,MAAI,GAAG,OAAM,IAAI,MAAM,uDAAuD,CAAC,GAAG;AAAE,UAAGA,IAAE,KAAK,CAAC,GAAE,EAAE,QAAQ,CAAC,MAAI,GAAG,OAAM,IAAI,MAAM,8BAA8B,CAAC,oBAAoB;AAAE,QAAE,CAAC,IAAE,KAAK,aAAa,EAAE,QAAQ,CAAC,CAAC;AAAA,IAAC,CAAC;AAAE,QAAGA,IAAE,WAAS,KAAK,aAAa,OAAO,OAAM,IAAI,MAAM,wDAAwDA,IAAE,MAAM,8CAA8C,KAAK,aAAa,MAAM,IAAI;AAAE,WAAO;AAAA,EAAC;AAAC;AAAzxD,IAA2xD,KAAG,CAAAD,QAAG,EAAE,EAAE,QAAQ,YAAY,KAAG,CAAC,MAAM,QAAQA,GAAC,KAAGA,IAAE,WAAW,GAAG,UAAU,IAAE,GAAGA,IAAE,MAAM,GAAG,WAAW,MAAM,CAAC,IAAE;AAAK,GAAG,mBAAmB,EAAE;AAAE,SAAS,GAAGA,MAAE,SAAQ;AAAC,SAAO,IAAI,GAAGA,GAAC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAO,IAAI,GAAGA,GAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE;AAAC,IAAED,GAAC,GAAEC,MAAEA,OAAG,OAAK,IAAEA,KAAE,IAAE,KAAG,OAAK,IAAE,GAAE,EAAEA,KAAE,CAAC;AAAE,MAAI,IAAE,GAAE,IAAE,QAAI,EAAE,KAAK,OAAG;AAAC,QAAI,IAAEA,MAAG,EAAE,IAAED,IAAE,UAAQ,IAAEC;AAAG,WAAO,EAAE,CAAC,GAAE;AAAA,EAAC,CAAC,GAAE;AAAG,WAAS,EAAE,GAAE;AAAC,MAAE,KAAG,QAAM,MAAM,QAAQ,CAAC,KAAG,EAAE,SAAO,GAAE,MAAI,qCAAqC;AAAA,EAAC;AAAC,WAAS,EAAE,GAAE,GAAE;AAAC,MAAE,KAAG,KAAG,KAAG,GAAE,MAAI,oEAAoE,CAAC,EAAE,GAAE,EAAE,KAAG,KAAG,KAAG,GAAE,MAAI,kEAAkE,CAAC,EAAE,GAAE,EAAE,KAAG,GAAE,MAAI,yEAAyE,CAAC,oBAAoB,CAAC,EAAE;AAAA,EAAC;AAAC,SAAO,QAAQ,IAAID,IAAE,IAAI,CAAC,CAAC;AAAC;AAAC,eAAe,GAAGA,KAAE,GAAE;AAAC,OAAG,SAAO,IAAE,CAAC;AAAG,MAAIC,MAAE,EAAE,aAAW,OAAK,EAAE,EAAE,SAAS,QAAM,EAAE,WAAU,IAAED,IAAE,IAAI,OAAGC,IAAE,GAAE,EAAE,aAAY,EAAC,UAAS,KAAE,CAAC,CAAC,GAAE,KAAG,EAAE,cAAY,OAAK,MAAM,QAAQ,IAAI,CAAC,IAAE,MAAM,GAAG,GAAE,EAAE,YAAW,GAAE,GAAE,GAAG,IAAI,OAAG,EAAE,YAAY,CAAC;AAAE,SAAO,EAAE,cAAY,OAAK,MAAM,QAAQ,IAAI,CAAC,IAAE,MAAM,GAAG,GAAE,EAAE,YAAW,KAAG,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC;AAAE,MAAI,IAAE,EAAE,aAAW,OAAK,EAAE,EAAE,SAAS,QAAM,EAAE,WAAU,IAAE,GAAE;AAAE,UAAOA,MAAE,EAAE,gBAAc,QAAMA,QAAI,UAAQA,IAAE,KAAK,GAAE,CAAC,GAAE,IAAI,eAAe,EAAC,MAAK,OAAM,MAAG;AAAC,aAAQ,GAAE,IAAED,IAAE,UAAQ;AAAC,YAAI,KAAG,MAAM,EAAEA,IAAE,CAAC,GAAE,EAAE,aAAY,EAAC,UAAS,KAAE,CAAC,GAAG,KAAK,UAAU;AAAG,UAAG,EAAC,MAAK,GAAE,OAAM,EAAC,IAAE,MAAM,EAAE,KAAK;AAAE,UAAG,GAAE;AAAC,aAAI,IAAE,SAAQ,IAAE,EAAE,gBAAc,QAAM,MAAI,UAAQ,EAAE,KAAK,GAAE,IAAEA,IAAE,MAAM;AAAE;AAAA,MAAQ;AAAC,QAAE,QAAQ,CAAC;AAAE;AAAA,IAAM;AAAC,MAAE,MAAM;AAAA,EAAC,EAAC,CAAC;AAAC;AAAC,eAAe,GAAGA,KAAE,IAAE,IAAGC,KAAE,GAAE;AAAC,SAAO,GAAG,OAAG,GAAG,GAAE,EAAC,aAAY,EAAC,CAAC,CAAC,EAAED,KAAE,GAAEC,GAAC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,SAAO,OAAM,GAAEC,MAAE,IAAG,MAAI;AAAC,QAAI,IAAE,EAAE,IAAI,MAAI,KAAE,GAAE,IAAE,CAAC,GAAE,IAAE,KAAG,OAAK,EAAE,IAAI,MAAI,KAAE,IAAE,CAAC,GAAE,IAAE,CAAC;AAAE,QAAG,EAAE,QAAQ,CAAC,GAAE,MAAI;AAAC,UAAI,IAAE;AAAE,QAAE,QAAQ,QAAQ,OAAG;AAAC,YAAI,IAAE,kBAAiB,IAAE,EAAE,aAAa,QAAM,EAAE,OAAM,IAAE,GAAG,CAAC,IAAE,GAAG,EAAE,KAAK,GAAE,IAAE,MAAI;AAAC,YAAE,CAAC,IAAE,MAAG,EAAE,CAAC,KAAG,SAAO,EAAE,CAAC,IAAE,CAAC,IAAG,EAAE,CAAC,EAAE,KAAK,EAAC,eAAc,GAAE,aAAY,GAAE,WAAU,EAAC,CAAC;AAAA,QAAC;AAAE,aAAG,OAAK,EAAE,QAAQ,CAAC,GAAE,MAAI;AAAC,gBAAI,EAAE,SAAO,EAAE,GAAE,EAAE,CAAC,IAAE;AAAA,QAAG,CAAC,IAAE,EAAE,GAAE,EAAE,KAAK,EAAE,IAAI,GAAE,KAAG;AAAA,MAAC,CAAC;AAAA,IAAC,CAAC,GAAE,CAAC,EAAE,MAAM,OAAG,CAAC,GAAE;AAAC,UAAI,IAAE,EAAE,OAAO,CAAC,GAAE,MAAI,CAAC,EAAE,CAAC,CAAC;AAAE,YAAM,IAAI,MAAM,kDAAkD,EAAE,KAAK,IAAI,CAAC;AAAA,wCAClzrB,EAAE,KAAK,IAAI,CAAC,GAAG;AAAA,IAAC;AAAC,QAAI,IAAE,EAAE,OAAO,CAAC,GAAE,GAAE,OAAK,KAAG,EAAE,KAAK,CAAC,GAAE,IAAG,CAAC,CAAC,GAAE,IAAE,CAAC;AAAE,MAAE,QAAQ,OAAG;AAAC,QAAE,CAAC,EAAE,MAAM,QAAQ,OAAG;AAAC,YAAI,IAAEA,OAAGA,IAAE,SAAS,GAAG,IAAE,KAAG,OAAK;AAAE,UAAE,KAAK,CAAC;AAAA,MAAC,CAAC;AAAA,IAAC,CAAC;AAAE,QAAI,IAAE,MAAMD,IAAE,CAAC,GAAE,IAAE,CAAC,GAAE,IAAE;AAAE,WAAO,EAAE,QAAQ,OAAG;AAAC,UAAI,IAAE,EAAE,CAAC,EAAE,MAAM,QAAO,IAAE,IAAI,GAAG,EAAE,MAAM,GAAE,IAAE,CAAC,CAAC;AAAE,QAAE,CAAC,EAAE,QAAQ,OAAG;AAAC,YAAI,IAAE,EAAE,MAAM,EAAE,aAAY,EAAE,cAAY,EAAE,SAAS,GAAE,IAAE,GAAG,GAAE,CAAC,EAAE,aAAa,CAAC;AAAE,iBAAQ,KAAK,EAAE,GAAE,CAAC,IAAE,EAAE,CAAC;AAAA,MAAC,CAAC,GAAE,KAAG;AAAA,IAAC,CAAC,GAAE;AAAA,EAAC;AAAC;AAAC,IAAI,KAAG;AAAP,IAAkC,KAAG;AAArC,IAAwD,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEC,KAAE;AAAC,QAAG,KAAK,iBAAe,QAAOA,OAAG,SAAOA,MAAE,CAAC,IAAG,KAAK,mBAAiBA,IAAE,kBAAiB,KAAK,qBAAmBA,IAAE,oBAAmBA,IAAE,aAAW,QAAM,EAAE,OAAOA,IAAE,aAAW,YAAW,MAAI,6HAA6H,GAAE,KAAK,QAAMA,IAAE,aAAW,KAAK,QAAM,EAAE,EAAE,SAAS,OAAM,EAAE,KAAG,QAAM,EAAE,SAAO,GAAE,MAAI,yDAAyD,GAAE,MAAM,QAAQ,CAAC,KAAG,EAAE,EAAE,WAAS,GAAE,MAAI,iEAAiE,EAAE,MAAM,IAAI,GAAE,KAAK,OAAK,GAAEA,IAAE,eAAa,QAAMA,IAAE,YAAY,QAAM,KAAK,OAAM,IAAI,MAAM,oEAAoE;AAAE,SAAK,cAAYA,IAAE,eAAa,CAAC,GAAE,KAAK,cAAYA;AAAA,EAAC;AAAA,EAAC,MAAM,KAAK,GAAE;AAAC,QAAG,EAAE,yBAAyB,YAAY,OAAM,IAAI,MAAM,yFAAyF;AAAE,QAAIA,MAAE,OAAO,OAAO,EAAC,QAAO,KAAK,eAAc,GAAE,KAAK,WAAW;AAAE,IAAAA,IAAE,OAAK,IAAI;AAAS,QAAI,IAAE,CAAC,EAAC,OAAM,CAAC,qBAAqB,GAAE,SAAQ,EAAE,YAAW,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC;AAAE,QAAGA,IAAE,KAAK,OAAO,cAAa,IAAI,KAAK,CAAC,KAAK,UAAU,CAAC,CAAC,GAAE,EAAC,MAAK,GAAE,CAAC,GAAE,YAAY,GAAE,EAAE,cAAY,MAAK;AAAC,UAAI,IAAE,GAAG,KAAK,EAAE,UAAU;AAAE,MAAAA,IAAE,KAAK,OAAO,qBAAoB,IAAI,KAAK,CAAC,CAAC,GAAE,EAAC,MAAK,GAAE,CAAC,GAAE,mBAAmB;AAAA,IAAC;AAAC,QAAI,IAAE,MAAM,KAAK,MAAM,KAAK,MAAKA,GAAC;AAAE,QAAG,EAAE,GAAG,QAAM,EAAC,oBAAmB,GAAG,CAAC,GAAE,WAAU,CAAC,CAAC,EAAC;AAAE,UAAM,IAAI,MAAM,gEAAgE,EAAE,MAAM,GAAG;AAAA,EAAC;AAAA,EAAC,MAAM,gBAAe;AAAC,QAAI,IAAE,MAAM,KAAK,MAAM,KAAK,MAAK,KAAK,WAAW;AAAE,QAAG,CAAC,EAAE,GAAG,OAAM,IAAI,MAAM,cAAc,KAAK,IAAI,4BAA4B,EAAE,MAAM,yEAAyE;AAAE,QAAIA;AAAE,QAAG;AAAC,MAAAA,MAAE,MAAM,EAAE,KAAK;AAAA,IAAC,SAAO,GAAE;AAAC,UAAI,IAAE,+CAA+C,KAAK,IAAI;AAAI,YAAM,KAAK,KAAK,SAAS,KAAK,IAAE,KAAG,iVAA+U,KAAG,wEAAuE,IAAI,MAAM,CAAC;AAAA,IAAC;AAAC,QAAI,IAAEA,IAAE,eAAc,IAAEA,IAAE;AAAgB,QAAG,KAAG,QAAM,KAAG,KAAK,OAAM,IAAI,MAAM,2BAA2B,KAAK,IAAI,2DAA2D;AAAE,WAAOA;AAAA,EAAC;AAAA,EAAC,MAAM,OAAM;AAAC,QAAG,KAAK,YAAY,cAAc,QAAO,KAAK,WAAW;AAAE,QAAI,IAAE,MAAM,KAAK,cAAc;AAAE,WAAO,GAAG,GAAE,CAAAA,QAAG,KAAK,YAAYA,GAAC,CAAC;AAAA,EAAC;AAAA,EAAC,MAAM,aAAY;AAAC,QAAI,IAAE,MAAM,KAAK,cAAc,GAAEA,MAAE,MAAM,KAAK,cAAc,EAAE,eAAe,GAAE,IAAE,GAAG,EAAE,eAAe,GAAE,IAAE,MAAI,GAAGA,KAAE,KAAK,WAAW;AAAE,WAAO,OAAO,OAAO,OAAO,OAAO,CAAC,GAAE,CAAC,GAAE,EAAC,aAAY,GAAE,iBAAgB,EAAC,CAAC;AAAA,EAAC;AAAA,EAAC,MAAM,cAAc,GAAE;AAAC,QAAIA,MAAE,MAAM,QAAQ,KAAK,IAAI,IAAE,KAAK,KAAK,CAAC,IAAE,KAAK,MAAK,CAAC,GAAE,CAAC,IAAE,GAAGA,GAAC,GAAE,IAAE,KAAK,oBAAkB,GAAE,IAAE,CAAC,GAAE,IAAE,CAAC;AAAE,aAAQ,KAAK,EAAE,UAAQ,KAAK,EAAE,MAAM,MAAK,sBAAoB,OAAK,EAAE,KAAK,KAAK,mBAAmB,CAAC,CAAC,IAAE,EAAE,KAAK,IAAE,IAAE,CAAC;AAAE,WAAO,KAAK,sBAAoB,EAAE,KAAK,GAAG,MAAM,QAAQ,IAAI,CAAC,CAAC,GAAE;AAAA,EAAC;AAAA,EAAC,MAAM,YAAY,GAAE;AAAC,QAAIA,MAAE,MAAM,KAAK,cAAc,CAAC,GAAE,IAAE,GAAG,CAAC,GAAE,IAAE,MAAM,GAAGA,KAAE,KAAK,WAAW;AAAE,WAAM,CAAC,GAAE,CAAC;AAAA,EAAC;AAAC;AAAE,GAAG,mBAAiB;AAAe,SAAS,GAAGD,KAAE;AAAC,MAAI,IAAEA,IAAE,YAAY,GAAG,GAAEC,MAAED,IAAE,YAAY,GAAG,GAAE,IAAEA,IAAE,UAAU,GAAE,CAAC,GAAE,IAAEC,MAAE,IAAED,IAAE,UAAUC,GAAC,IAAE;AAAG,SAAM,CAAC,IAAE,KAAI,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,SAAOA,IAAE,MAAM,GAAG,gBAAgB,KAAG;AAAI;AAAC,IAAI,KAAG,CAACA,KAAE,MAAI;AAAC,MAAG,OAAO,SAAO,gBAAc,KAAG,QAAM,EAAE,aAAW,MAAM,QAAO;AAAK;AAAC,QAAIC,MAAE;AAAG,QAAG,MAAM,QAAQD,GAAC,IAAEC,MAAED,IAAE,MAAM,OAAG,GAAG,CAAC,CAAC,IAAEC,MAAE,GAAGD,GAAC,GAAEC,IAAE,QAAO,GAAGD,KAAE,CAAC;AAAA,EAAC;AAAC,SAAO;AAAI;AAAE,GAAG,mBAAmB,EAAE;AAAE,GAAG,mBAAmB,EAAE;AAAE,SAAS,GAAGA,KAAE,GAAE;AAAC,SAAO,IAAI,GAAGA,KAAE,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,SAAO,GAAGA,KAAE,CAAC;AAAC;AAAC,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,iBAAe;AAAA,EAAC;AAAA,EAAC,OAAM;AAAC,WAAO,KAAK;AAAA,EAAc;AAAC;AAApF,IAAsF,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,cAAY;AAAA,EAAC;AAAA,EAAC,KAAK,GAAE;AAAC,WAAO,KAAK,YAAY,CAAC;AAAA,EAAC;AAAC;AAApK,IAAsK,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,MAAE,SAAO,KAAK,OAAK,MAAI,QAAQ,QAAQ,EAAE,KAAK,CAAC,IAAG,EAAE,SAAO,KAAK,OAAK,CAAAC,QAAG,QAAQ,QAAQ,EAAE,KAAKA,GAAC,CAAC;AAAA,EAAE;AAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE;AAAC,MAAI,IAAE;AAAU,SAAO,IAAI,GAAG,GAAG,GAAG,CAAC,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE;AAAC,SAAO,UAAU,WAAS,IAAED,IAAE,iBAAe,QAAMA,IAAE,eAAa,OAAK,IAAI,GAAGA,GAAC,KAAG,QAAQ,KAAK,uNAAuN,GAAE,IAAI,GAAG,EAAC,eAAcA,IAAC,CAAC,MAAI,QAAQ,KAAK,uNAAuN,GAAE,IAAI,GAAG,EAAC,eAAcA,KAAE,aAAY,GAAE,YAAWC,KAAE,gBAAe,EAAC,CAAC;AAAE;AAAC,SAAS,GAAGD,KAAE;AAAC,SAAO,IAAI,GAAGA,GAAC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAO,IAAI,GAAGA,GAAC;AAAC;AAAC,IAAI,KAAG,CAAC;AAAE,GAAG,IAAG,EAAC,iBAAgB,MAAI,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,EAAED,KAAE,UAAS,iBAAiB,GAAE,IAAE,EAAE,GAAE,eAAc,iBAAiB;AAAE,IAAEC,OAAG,QAAMA,MAAE,KAAG,OAAO,UAAUA,GAAC,GAAE,MAAI,+DAA+DA,GAAC,EAAE,GAAE,EAAE,EAAE,SAAO,GAAE,MAAI,gDAAgD,EAAE,IAAI,EAAE,GAAE,EAAE,EAAE,SAAO,GAAE,MAAI,qDAAqD,EAAE,IAAI,EAAE,GAAE,EAAE,EAAE,MAAM,CAAC,MAAI,EAAE,MAAM,CAAC,GAAE,MAAI,uCAAuC,EAAE,MAAM,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,mEAAmE,GAAE,EAAEA,MAAE,KAAG,OAAO,UAAUA,GAAC,GAAE,MAAI,4DAA4DA,GAAC,EAAE;AAAE,MAAI,IAAE,GAAG,GAAG,GAAE,OAAO,GAAEA,GAAC,GAAE,IAAE,GAAG,GAAG,GAAE,OAAO,GAAEA,GAAC,GAAE,IAAE,GAAG,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC;AAAE,SAAO,GAAG,GAAE,OAAO;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,kBAAiB,GAAE,CAAC;AAAE,IAAI,KAAG,CAAC;AAAE,GAAG,IAAG,EAAC,MAAK,MAAI,IAAG,YAAW,MAAI,IAAG,iBAAgB,MAAI,IAAG,UAAS,MAAI,GAAE,CAAC;AAAE,IAAI;AAAJ,IAAO,KAAG;AAAG,SAAS,GAAGD,KAAE,IAAE,GAAE;AAAC,MAAG,IAAE,EAAE,OAAM,IAAI,MAAM,gEAAgE;AAAE,MAAGA,OAAG,KAAK,OAAM,IAAI,MAAM,0DAA0D;AAAE,MAAIC,MAAE,OAAG,IAAE,OAAG,IAAE,OAAG,IAAE,OAAG,IAAE,OAAG,IAAE;AAAG,MAAGD,IAAE,gBAAgB,WAAW,CAAAC,MAAE;AAAA,WAAW,OAAO,aAAW,eAAaD,eAAa,UAAU,KAAE;AAAA,WAAW,OAAO,oBAAkB,eAAaA,eAAa,iBAAiB,KAAE;AAAA,WAAW,OAAO,oBAAkB,eAAaA,eAAa,iBAAiB,KAAE;AAAA,WAAWA,IAAE,cAAY,KAAK,KAAE;AAAA,WAAW,OAAO,eAAa,eAAaA,eAAa,YAAY,KAAE;AAAA,MAAQ,OAAM,IAAI,MAAM,qPAAqPA,IAAE,YAAY,IAAI,EAAE;AAAE,MAAG,GAAG,IAAG,EAAE,WAAW,KAAG,MAAK;AAAC,QAAI,IAAE,EAAC,QAAOA,IAAC,GAAE,IAAE,EAAC,aAAY,EAAC;AAAE,WAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAA,EAAC;AAAC,MAAG,CAAC,GAAE,CAAC,IAAE,IAAE,CAACA,IAAE,YAAWA,IAAE,WAAW,IAAE,CAACA,IAAE,OAAMA,IAAE,MAAM,GAAE;AAAE,MAAG,EAAE,KAAEA,IAAE,WAAW,IAAI,EAAE,aAAa,GAAE,GAAE,GAAE,CAAC,EAAE;AAAA,WAAa,KAAGC,IAAE,KAAED,IAAE;AAAA,WAAa,KAAG,KAAG,GAAE;AAAC,QAAG,MAAI,KAAK,KAAG,OAAO,YAAU,YAAY,KAAG,OAAO,mBAAiB,eAAa,OAAO,qCAAmC,YAAY,MAAG,IAAI,gBAAgB,GAAE,CAAC,EAAE,WAAW,IAAI;AAAA,QAAO,OAAM,IAAI,MAAM,sGAAsG;AAAA,QAAO,MAAG,SAAS,cAAc,QAAQ,EAAE,WAAW,MAAK,EAAC,oBAAmB,KAAE,CAAC;AAAE,OAAG,OAAO,QAAM,GAAE,GAAG,OAAO,SAAO,GAAE,GAAG,UAAUA,KAAE,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,GAAG,aAAa,GAAE,GAAE,GAAE,CAAC,EAAE;AAAA,EAAI;AAAC,MAAI;AAAE,MAAG,MAAI,EAAE,KAAE,IAAI,WAAW,CAAC;AAAA,OAAM;AAAC,QAAI,IAAE,IAAE;AAAE,QAAE,IAAI,WAAW,IAAE,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,IAAI,UAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,EAAE,GAAE,IAAE,IAAE,CAAC,IAAE,EAAE,IAAE,IAAE,CAAC;AAAA,EAAC;AAAC,SAAO,GAAG,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,OAAO;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAOA,OAAG,QAAMA,IAAE,gBAAgB;AAAU;AAAC,SAAS,KAAI;AAAC,SAAO,OAAO,UAAQ,eAAa,OAAO,eAAa,eAAa,OAAO,eAAe,mBAAmB;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAOA,OAAG,QAAMA,IAAE,UAAQ,KAAGA,IAAE,WAAS;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAO,GAAG,KAAG,EAAEA,eAAa,gBAAc,GAAGA,GAAC,KAAG,CAAC,GAAGA,GAAC;AAAC;AAAC,eAAe,GAAGA,KAAE,IAAE,GAAE;AAAC,MAAIC,MAAE;AAAK,MAAG,EAAE,EAAE,QAAQ,qBAAqB,KAAG,GAAGD,GAAC,GAAE;AAAC,QAAI;AAAE,QAAG;AAAC,UAAE,MAAM,kBAAkBA,KAAE,EAAC,kBAAiB,OAAM,CAAC;AAAA,IAAC,SAAO,GAAE;AAAC,UAAE;AAAA,IAAI;AAAC,SAAG,QAAM,EAAE,UAAQA,IAAE,SAAO,EAAE,WAASA,IAAE,SAAOC,MAAE,IAAEA,MAAED;AAAA,EAAC,MAAM,CAAAC,MAAED;AAAE,SAAO,GAAGC,KAAE,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAGA,IAAE,SAAO,KAAGA,IAAE,SAAO,EAAE,OAAM,IAAI,MAAM,wDAAwDA,IAAE,IAAI,GAAG;AAAE,MAAI,IAAEA,IAAE,SAAO,IAAE,IAAEA,IAAE,MAAM,CAAC;AAAE,MAAG,IAAE,KAAG,MAAI,EAAE,OAAM,IAAI,MAAM,0DAA0D,CAAC,EAAE;AAAE,MAAGA,IAAE,UAAQ,aAAWA,IAAE,UAAQ,QAAQ,OAAM,IAAI,MAAM,kCAAkCA,IAAE,KAAK,wCAAwC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAI,KAAGA,OAAG,OAAK,SAAOA,IAAE,UAAQ;AAAE,MAAG,IAAE,KAAG,IAAE,EAAE,OAAM,IAAI,MAAM,eAAe,CAAC,qCAAqC;AAAC;AAAC,eAAe,GAAGA,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAED,KAAE,OAAM,UAAU;AAAE,MAAG,EAAEA,eAAa,KAAI;AAAC,QAAI,IAAEC;AAAE,IAAAA,MAAE,GAAG,GAAE,OAAO,GAAE,EAAE,QAAQ;AAAA,EAAC;AAAC,KAAGA,GAAC;AAAE,MAAG,CAAC,GAAE,CAAC,IAAEA,IAAE,MAAM,MAAM,GAAE,CAAC,GAAE,IAAEA,IAAE,SAAO,IAAE,IAAEA,IAAE,MAAM,CAAC,GAAE,IAAE,MAAMA,IAAE,KAAK,GAAE,IAAEA,IAAE,UAAQ,YAAU,MAAI,GAAE,IAAE,IAAI,kBAAkB,IAAE,IAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,IAAE,GAAE,EAAE,GAAE;AAAC,QAAI,IAAE,CAAC,GAAE,GAAE,GAAE,GAAG;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,UAAI,IAAE,EAAE,IAAE,IAAE,CAAC;AAAE,UAAGA,IAAE,UAAQ,WAAU;AAAC,YAAG,IAAE,KAAG,IAAE,EAAE,OAAM,IAAI,MAAM,mFAAmF,CAAC,GAAG;AAAA,MAAC,WAASA,IAAE,UAAQ,YAAU,IAAE,KAAG,IAAE,KAAK,OAAM,IAAI,MAAM,mFAAmF,CAAC,GAAG;AAAE,YAAI,KAAG,EAAE,CAAC,IAAE,IAAE,GAAE,EAAE,CAAC,IAAE,IAAE,GAAE,EAAE,CAAC,IAAE,IAAE,KAAG,EAAE,CAAC,IAAE,IAAE;AAAA,IAAC;AAAC,QAAI,IAAE,IAAE;AAAE,MAAE,IAAE,CAAC,IAAE,KAAK,MAAM,EAAE,CAAC,CAAC,GAAE,EAAE,IAAE,CAAC,IAAE,KAAK,MAAM,EAAE,CAAC,CAAC,GAAE,EAAE,IAAE,CAAC,IAAE,KAAK,MAAM,EAAE,CAAC,CAAC,GAAE,EAAE,IAAE,CAAC,IAAE,KAAK,MAAM,EAAE,CAAC,CAAC;AAAA,EAAC;AAAC,MAAG,KAAG,MAAK;AAAC,UAAI,GAAG,IAAG,EAAE,WAAW,KAAG,SAAO,QAAQ,KAAK,oGAAoG,GAAE,KAAG,OAAI,EAAE,QAAM,GAAE,EAAE,SAAO;AAAE,QAAI,IAAE,EAAE,WAAW,IAAI,GAAE,IAAE,IAAI,UAAU,GAAE,GAAE,CAAC;AAAE,MAAE,aAAa,GAAE,GAAE,CAAC;AAAA,EAAC;AAAC,SAAOA,QAAID,OAAGC,IAAE,QAAQ,GAAE;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,EAAED,KAAE,OAAM,MAAM;AAAE,MAAG,EAAEA,eAAa,KAAI;AAAC,QAAI,IAAE;AAAE,QAAE,GAAG,GAAE,OAAO,GAAE,EAAE,QAAQ;AAAA,EAAC;AAAC,KAAG,CAAC,GAAE,GAAGC,OAAG,OAAK,SAAOA,IAAE,YAAY;AAAE,MAAI,IAAE,EAAC,OAAM,EAAC,GAAE,IAAE,EAAC,QAAO,GAAE,SAAQA,IAAC;AAAE,IAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,aAAY,GAAE,CAAC;AAAE,IAAI,KAAG,CAAC;AAAE,GAAG,IAAG,EAAC,oBAAmB,MAAI,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAED,IAAE,MAAM,QAAO,IAAE,EAAE,MAAM;AAAO,MAAGC,MAAE,EAAE,OAAM,IAAI,MAAM,4EAA4EA,GAAC,GAAG;AAAE,MAAG,IAAE,EAAE,OAAM,IAAI,MAAM,8EAA8E,CAAC,GAAG;AAAE,MAAG,EAAE,UAAQ,QAAQ,OAAM,IAAI,MAAM,yEAAyE,EAAE,KAAK,GAAG;AAAE,MAAG,EAAE,MAAM,IAAE,CAAC,IAAEA,IAAE,OAAM,IAAI,MAAM,iEAAiE,EAAE,MAAM,IAAE,CAAC,CAAC,QAAQA,GAAC,EAAE;AAAE,MAAG,GAAGD,IAAE,KAAK,MAAI,EAAE,OAAM,IAAI,MAAM,mEAAmEA,IAAE,KAAK,GAAG;AAAE,MAAI,IAAE,EAAE,OAAM,IAAE,EAAE,EAAE,SAAO,CAAC,GAAE,IAAE;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,SAAO,GAAE,EAAE,EAAE,MAAG,EAAE,CAAC;AAAE,MAAI,IAAEA,IAAE,OAAM,IAAE,EAAE,MAAM;AAAE,IAAE,IAAI;AAAE,MAAI,IAAE;AAAE,WAAQ,IAAE,GAAE,IAAEC,KAAE,EAAE,EAAE,MAAG,EAAE,CAAC,GAAE,EAAE,KAAK,EAAE,CAAC,CAAC;AAAE,MAAI,IAAE,CAAC,GAAG,GAAGD,IAAE,KAAK,EAAE,IAAI,OAAG,IAAE,CAAC,GAAE,CAAC,EAAE,MAAM,GAAE,CAAC;AAAE,SAAM,CAAC,GAAE,GAAE,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,CAAC;AAAE,GAAG,IAAG,EAAC,mBAAkB,MAAI,IAAG,mBAAkB,MAAI,IAAG,iBAAgB,MAAI,IAAG,mBAAkB,MAAI,IAAG,kBAAiB,MAAI,IAAG,YAAW,MAAI,IAAG,kBAAiB,MAAI,IAAG,WAAU,MAAI,IAAG,cAAa,MAAI,IAAG,4BAA2B,MAAI,IAAG,aAAY,MAAI,IAAG,2BAA0B,MAAI,IAAG,gBAAe,MAAI,IAAG,uBAAsB,MAAI,GAAE,CAAC;AAAE,IAAI,KAAG;AAAP,IAAU,KAAG;AAAG,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAED,IAAE,MAAM;AAAO,IAAE,MAAI,EAAE,QAAO,MAAI,iBAAiB,CAAC,sBAAsB,CAAC,sCAAsC,CAAC,IAAI,GAAE,EAAE,MAAIC,IAAE,QAAO,MAAI,iBAAiB,CAAC,qBAAqBA,GAAC,sCAAsC,CAAC,IAAI;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,EAAE,GAAE,EAAE,CAAC,IAAEA,IAAE,CAAC,KAAGD,IAAE,MAAM,CAAC,GAAE,MAAI,iBAAiB,CAAC,YAAY,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,IAAEC,IAAE,CAAC,CAAC,gCAAgC,CAAC,MAAMD,IAAE,MAAM,CAAC,CAAC,GAAG;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAI,IAAE,CAAC,GAAEC,MAAE;AAAE,SAAKD,MAAE,IAAG,CAAAA,MAAE,KAAG,EAAE,KAAKC,GAAC,GAAED,OAAG,GAAEC;AAAI,SAAO;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAED,IAAE,QAAO,IAAI,GAAE,CAAC,IAAE,KAAK,MAAM,EAAE,CAAC,IAAEA,IAAE,CAAC,KAAGC,IAAE,CAAC,CAAC;AAAE,SAAO;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE;AAAC,MAAI,IAAE,CAAC,GAAGD,GAAC;AAAE,WAAQ,IAAE,EAAE,QAAO,IAAE,EAAE,QAAO,IAAI,GAAE,KAAK,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAEC,KAAE,IAAI,OAAI,IAAE,EAAE,CAAC,IAAE,KAAG,EAAE,OAAO,GAAE,GAAE,CAAC,GAAE,EAAE,IAAI;AAAG,SAAO;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,SAAOA,OAAGD,MAAEC,MAAEA,OAAG,IAAE;AAAE;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAED,KAAE,IAAI,CAAAC,IAAE,KAAK,IAAE,CAAC;AAAE,SAAOA;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE;AAAC,MAAI,IAAED,IAAE,QAAO,IAAE,IAAI,MAAM,CAAC,GAAE,IAAE,IAAI,MAAM,CAAC,GAAE,IAAE,IAAI,MAAM,CAAC;AAAE,MAAG,EAAE,UAAQC,MAAE,GAAE;AAAC,QAAI,IAAE,EAAE,CAAC,GAAE,IAAEA,MAAE;AAAE,QAAE,GAAG,GAAE,GAAE,GAAE,GAAED,GAAC,GAAE,IAAE,GAAG,GAAE,GAAE,GAAE,GAAEA,GAAC,GAAE,IAAE,GAAG,GAAE,GAAE,GAAEA,GAAC;AAAA,EAAC,MAAM,UAAQ,IAAE,GAAE,IAAE,GAAE,IAAI,GAAE,CAAC,IAAE,GAAG,GAAE,GAAE,GAAEA,KAAE,GAAE,CAAC,GAAE,EAAE,CAAC,IAAE,GAAG,GAAE,GAAE,GAAEA,KAAE,GAAE,CAAC,GAAE,EAAE,CAAC,IAAE,GAAG,GAAE,GAAE,CAAC;AAAE,SAAM,EAAC,OAAM,GAAE,KAAI,GAAE,SAAQ,EAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE,GAAE;AAAC,MAAI,IAAE,CAAC,GAAG,CAAC,GAAE,IAAE,GAAGA,KAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,IAAI,KAAG,EAAE,QAAQ,CAAC,IAAE,GAAG,GAAE,CAAC,IAAE;AAAA,OAAM;AAAC,QAAI,IAAE,GAAG,GAAEA,KAAE,CAAC,GAAE,IAAE,EAAE,CAAC;AAAE,IAAAD,MAAE,KAAG,MAAI,IAAE,IAAG,EAAE,CAAC,IAAE;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE,GAAE;AAAC,MAAI,IAAE,CAAC,GAAG,CAAC,GAAE,IAAE,GAAGA,KAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,IAAI,KAAG,EAAE,QAAQ,CAAC,IAAE,GAAG,GAAE,CAAC,IAAE,OAAO;AAAA,OAAqB;AAAC,QAAI,IAAE,GAAG,GAAEA,KAAE,CAAC,GAAE,IAAE,EAAE,CAAC;AAAE,IAAAD,MAAE,KAAG,MAAI,IAAE,OAAO,mBAAkB,EAAE,CAAC,IAAE;AAAA,EAAC;AAAC,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,KAAI;AAAC,QAAI,IAAE,EAAE,CAAC;AAAE,MAAE,CAAC,IAAE,MAAI,EAAE,CAAC,KAAG,IAAG,EAAE,CAAC,IAAE,GAAG,GAAE,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAED,IAAE,CAAC;AAAE,UAAOC,MAAE,KAAG,KAAG,KAAG,UAAQ,IAAE,IAAG;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE;AAAC,MAAI,IAAE,EAAE,CAAC,GAAE,IAAEA,IAAE,CAAC,KAAG;AAAE,GAACD,MAAE,KAAG,KAAG,IAAE,KAAG,KAAG,KAAG,UAAQ,IAAE,IAAE,IAAE,OAAO,mBAAiB,IAAE,OAAO;AAAkB,MAAI,IAAE,EAAE,CAAC;AAAE,SAAO,IAAE,MAAI,KAAG,IAAG,IAAE,GAAG,GAAE,GAAE,IAAE,CAAC,GAAE;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE;AAAC,MAAI,IAAE,EAAE,CAAC,GAAE,IAAEA,IAAE,CAAC,KAAG;AAAE,GAACD,MAAE,KAAG,KAAG,IAAE,KAAG,KAAG,KAAG,UAAQ,IAAE,IAAE,IAAE,OAAO,mBAAiB,IAAE,OAAO;AAAkB,MAAI,IAAE,EAAE,CAAC;AAAE,SAAO,IAAE,MAAI,KAAG,IAAG,IAAE,IAAE,IAAE,GAAG,GAAE,GAAE,CAAC,IAAE,IAAE,GAAG,IAAG,GAAE,IAAE,CAAC,GAAE;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAEA,IAAE;AAAO,WAAQ,IAAE,GAAE,IAAEA,IAAE,QAAO,IAAI,KAAGA,IAAE,CAAC,IAAE,GAAE;AAAC,QAAE;AAAE;AAAA,EAAK;AAAC,WAAQ,IAAE,IAAE,GAAE,IAAEA,IAAE,QAAO,IAAI,KAAG,EAAE,CAAC,IAAE,KAAGA,IAAE,CAAC,MAAID,IAAE,CAAC,EAAE,QAAM;AAAG,SAAM;AAAE;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAIC,MAAED,IAAE,SAAO,IAAEA,IAAEA,IAAE,SAAO,CAAC,IAAE;AAAE,WAAQ,IAAE,GAAE,IAAEA,IAAE,SAAO,GAAE,IAAI,CAAAC,OAAGD,IAAE,CAAC,IAAE,EAAE,CAAC;AAAE,SAAOC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,GAAE,IAAED,IAAE,MAAM;AAAO,SAAO,KAAG,WAAS,IAAE,CAAC,GAAE,GAAG,IAAI,MAAM,IAAE,CAAC,EAAE,KAAK,CAAC,CAAC,IAAE,EAAE,SAAO,IAAE,IAAE,EAAE,OAAO,IAAI,MAAM,IAAE,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,IAAE,IAAE,EAAE,MAAM,GAAE,EAAE,QAAQ,OAAG;AAAC,MAAE,MAAI,IAAG,MAAI,mDAAmD;AAAA,EAAC,CAAC;AAAE,MAAI;AAAE,SAAOC,OAAG,OAAK,IAAE,IAAI,MAAM,CAAC,EAAE,KAAK,EAAE,IAAE,OAAOA,OAAG,WAAS,IAAE,CAACA,KAAE,GAAG,IAAI,MAAM,IAAE,CAAC,EAAE,KAAK,EAAE,CAAC,IAAEA,IAAE,SAAO,IAAE,IAAEA,IAAE,OAAO,IAAI,MAAM,IAAEA,IAAE,MAAM,EAAE,KAAK,EAAE,CAAC,IAAE,IAAEA,KAAE,IAAE,EAAE,IAAI,CAAC,GAAE,MAAI,KAAG,IAAE,KAAG,EAAE,MAAI,IAAG,MAAI,qDAAqD,CAAC,kCAAkC,CAAC,GAAG,GAAED,IAAE,MAAM,CAAC,IAAE,EAAE,CAAC,EAAE,GAAE,CAAC,GAAE,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE;AAAC,MAAI;AAAE,MAAG,KAAG,QAAM,IAAE,IAAI,MAAM,EAAE,MAAM,GAAE,EAAE,KAAK,CAAC,KAAG,IAAE,GAAE,KAAG,QAAM,IAAE,IAAE,EAAE,OAAM,IAAI,MAAM,4CAA4C;AAAE,MAAI,IAAE,OAAG,IAAE,EAAC,MAAK,EAAE,QAAO,yBAAwB,GAAE,OAAM,EAAE,MAAM,GAAE,KAAIA,IAAE,MAAM,GAAE,SAAQ,EAAE,MAAM,GAAE,WAAU,GAAE,SAAQ,GAAE,cAAa,GAAE,aAAY,GAAE,gBAAe,EAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,MAAK,IAAI,MAAG,KAAG,IAAE,KAAG,EAAE,2BAA0B,KAAG,IAAE,MAAI,IAAE;AAAI,QAAI,EAAE,gBAAc,KAAG,EAAE,MAAK,EAAE;AAAQ,MAAI,IAAE,EAAC,MAAKD,IAAE,QAAO,WAAU,GAAE,SAAQ,GAAE,YAAW,OAAG,UAAS,MAAE;AAAE,KAAG,GAAE,CAAC;AAAE,MAAI,IAAE,MAAG,IAAE,MAAG,IAAE,MAAG,IAAE,CAAC,GAAE,IAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAEA,IAAE,QAAO,EAAE,GAAE;AAAC,QAAG,EAAE,QAAQ,CAAC,MAAI,EAAE,OAAM,MAAM,WAAW,CAAC,oBAAoB;AAAE,QAAI,IAAE,CAAC,EAAE,EAAE,iBAAe,KAAG,IAAG,IAAEA,IAAE,CAAC;AAAE,QAAG,MAAI,IAAG;AAAC,QAAE,KAAK,IAAE,IAAE,EAAE;AAAE;AAAA,IAAQ;AAAC,QAAI,IAAE,CAAC,EAAE,YAAU,KAAG,GAAE,EAAE,UAAQ,KAAG,CAAC,GAAE,IAAE,CAAC,EAAE,QAAQ,CAAC,IAAE,IAAE,IAAE,IAAG,EAAE,QAAQ,CAAC,IAAE,IAAE,IAAE,IAAE,CAAC;AAAE,QAAG,KAAG,EAAE,QAAQ,CAAC,KAAG,EAAE,OAAM,MAAM,8CAA8C;AAAE,QAAE,KAAG,EAAE,QAAQ,CAAC,MAAI;AAAE,QAAI,IAAE,CAAC,EAAE,EAAE,YAAU,KAAG,KAAG,EAAE,UAAQ,KAAG;AAAG,QAAG,EAAE,cAAY,EAAE,UAAS;AAAC,UAAG,GAAE;AAAC,YAAI,IAAE,EAAE,MAAM,CAAC,IAAE,IAAE,IAAE,EAAE,MAAM,CAAC,IAAE,EAAE,MAAM,CAAC;AAAE,YAAG,EAAE,MAAM,CAAC,IAAE,GAAE,EAAE,IAAI,CAAC,IAAE,EAAE,MAAM,CAAC,IAAE,GAAE,IAAE,KAAG,KAAG,EAAE,OAAM,MAAM,eAAe,EAAE,MAAM,CAAC,CAAC,iBAAiB,CAAC,iBAAiB;AAAA,MAAC,MAAM,GAAE,MAAM,CAAC,IAAE,GAAG,EAAE,MAAM,CAAC,GAAE,GAAE,EAAE,QAAQ,CAAC,GAAE,GAAE,GAAE,CAAC,GAAE,EAAE,IAAI,CAAC,IAAE,GAAG,EAAE,IAAI,CAAC,GAAE,GAAE,EAAE,QAAQ,CAAC,GAAE,GAAE,GAAE,CAAC;AAAE,UAAI,IAAE,EAAE,QAAQ,CAAC,MAAI,KAAG,EAAE,MAAM,CAAC,MAAI,KAAG,EAAE,IAAI,CAAC,MAAI;AAAE,UAAE,KAAG,GAAE,IAAE,MAAI,MAAI,KAAG,EAAE,QAAQ,CAAC,MAAI,KAAG;AAAA,IAAE,MAAM,KAAE,KAAG,EAAE,QAAQ,CAAC,MAAI,KAAG,GAAE,IAAE,MAAI,MAAI,KAAG,EAAE,QAAQ,CAAC,MAAI,KAAG;AAAG,QAAI,GAAE,IAAE;AAAG,QAAG,EAAE,cAAY,EAAE,YAAU,IAAE,EAAE,IAAI,CAAC,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,QAAI,KAAG,IAAE,GAAE,IAAE,QAAI,KAAG,KAAG,MAAI,EAAE,QAAQ,CAAC,IAAE,IAAE,IAAE,CAAC,IAAE,IAAE,GAAE,IAAE,OAAI,GAAE;AAAC,UAAI;AAAE,YAAI,KAAG,IAAE,KAAG,EAAE,QAAQ,CAAC,IAAE,IAAE,IAAE,IAAE,IAAE,KAAK,MAAM,IAAE,EAAE,QAAQ,CAAC,CAAC,KAAG,IAAE,EAAE,QAAQ,CAAC,MAAI,IAAE,IAAE,IAAG,EAAE,KAAK,CAAC;AAAA,IAAC,MAAM,GAAE,KAAK,EAAE;AAAA,EAAC;AAAC,WAAQ,IAAE,GAAE,IAAE,EAAE,wBAAwB,QAAO,EAAE,GAAE;AAAC,QAAI,IAAE,EAAE,wBAAwB,CAAC;AAAE,SAAG,IAAE,EAAE,KAAK,EAAE,CAAC,CAAC,IAAE,MAAI,MAAI,EAAE,KAAK,CAAC;AAAA,EAAC;AAAC,SAAM,EAAC,kBAAiB,EAAE,OAAO,CAAC,GAAE,MAAI,EAAE,wBAAwB,CAAC,MAAI,EAAE,GAAE,YAAW,GAAE,YAAW,GAAE,WAAU,GAAE,eAAc,GAAE,OAAM,EAAE,OAAM,KAAI,EAAE,KAAI,SAAQ,EAAE,QAAO;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,IAAE,YAAU,GAAE,EAAE,UAAQ,GAAE,EAAE,iBAAe;AAAE,MAAIC,MAAE;AAAE,IAAE,aAAWD,IAAE,SAAO,MAAK,EAAE,WAASA,IAAE,OAAK,MAAK,EAAE,QAAM,IAAI,MAAM,EAAE,IAAI,GAAE,EAAE,MAAI,IAAI,MAAM,EAAE,IAAI,GAAE,EAAE,UAAQ,IAAI,MAAM,EAAE,IAAI,GAAE,EAAE,0BAAwB,CAAC,GAAE,EAAE,gCAA8B,CAAC,GAAE,EAAE,gCAA8B,IAAI,MAAM,EAAE,IAAI;AAAE,WAAQ,IAAE,GAAE,IAAEA,IAAE,MAAK,IAAI,KAAG,KAAG,IAAEA,IAAE,cAAa;AAAC,QAAI,IAAE,KAAK,IAAI,EAAE,QAAMA,IAAE,OAAK,KAAG,IAAEA,IAAE,yBAAwB,EAAE,IAAI;AAAE,WAAKC,MAAE,GAAEA,MAAI,GAAE,MAAMA,GAAC,IAAE,GAAE,EAAE,IAAIA,GAAC,IAAE,GAAE,EAAE,QAAQA,GAAC,IAAE,GAAE,EAAE,aAAW,KAAGA,KAAE,EAAE,WAAS,KAAGA,KAAE,EAAE,wBAAwB,KAAKA,GAAC,GAAE,EAAE,8BAA8B,KAAK,EAAE,GAAE,EAAE,8BAA8BA,GAAC,IAAE;AAAA,EAAC,WAAS,KAAG,IAAED,IAAE,YAAY,GAAE,wBAAwB,KAAK,EAAE,GAAE,EAAE,8BAA8B,KAAK,EAAE;AAAA,OAAM;AAAC,QAAGC,QAAI,EAAE,MAAM,OAAO,OAAM,MAAM,sCAAsCA,GAAC,oBAAoB,EAAE,IAAI,UAAU,EAAE,MAAM,MAAM,GAAG;AAAE,IAAAD,IAAE,SAAO,SAAO,EAAE,MAAMC,GAAC,IAAED,IAAE,MAAM,CAAC,IAAGA,IAAE,OAAK,SAAO,EAAE,IAAIC,GAAC,IAAED,IAAE,IAAI,CAAC,IAAG,EAAE,QAAQC,GAAC,IAAED,IAAE,QAAQ,CAAC,GAAEA,IAAE,YAAU,KAAG,MAAI,EAAE,aAAW,KAAGC,MAAGD,IAAE,UAAQ,KAAG,MAAI,EAAE,WAAS,KAAGC,MAAGD,IAAE,iBAAe,KAAG,KAAG,EAAE,wBAAwB,KAAK,EAAE,GAAE,EAAE,8BAA8B,KAAK,EAAE,GAAE,EAAE,kBAAgB,KAAGC,QAAI,EAAE,wBAAwB,KAAKA,GAAC,GAAE,EAAE,8BAA8B,KAAK,CAAC,IAAG,EAAE,8BAA8BA,GAAC,IAAE,GAAEA;AAAA,EAAG;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE;AAAC,MAAG,EAAE,CAAC,EAAE,QAAOA,MAAE,IAAE,EAAE,CAAC,IAAE,EAAE,IAAE,IAAE,CAAC;AAAE;AAAC,QAAI,IAAED,MAAE,IAAE,IAAEA,MAAEA;AAAE,WAAO,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,IAAE,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,IAAE;AAAA,EAAC;AAAC;AAAC,IAAI,KAAG;AAAS,IAAI,KAAG,MAAK;AAAA,EAAC,OAAO,IAAI,GAAE;AAAC,WAAO,IAAI,GAAG,CAAC;AAAA,EAAC;AAAA,EAAC,OAAO,SAAS,GAAEC,KAAE,IAAE,OAAG;AAAC,WAAO,IAAI,GAAG,GAAEA,KAAE,CAAC;AAAA,EAAC;AAAA,EAAC,OAAO,QAAQ,GAAEA,MAAE,KAAG,IAAE,GAAE,IAAE,MAAK,IAAE,OAAG;AAAC,WAAO,IAAI,GAAG,GAAEA,KAAE,GAAE,GAAE,CAAC;AAAA,EAAC;AAAA,EAAC,OAAO,KAAK,IAAE,MAAKA,MAAE,KAAG,IAAE,OAAK,IAAE,MAAK;AAAC,WAAO,IAAI,GAAG,GAAEA,KAAE,GAAE,CAAC;AAAA,EAAC;AAAA,EAAC,OAAO,SAAS,IAAE,MAAKA,MAAE,MAAI,IAAE,MAAK;AAAC,WAAO,IAAI,GAAG,GAAEA,KAAE,CAAC;AAAA,EAAC;AAAA,EAAC,OAAO,OAAO,IAAE,MAAKA,MAAE,KAAG,IAAE,OAAK,IAAE,MAAK,IAAE,GAAE;AAAC,WAAO,IAAI,GAAG,GAAEA,KAAE,GAAE,GAAE,CAAC;AAAA,EAAC;AAAA,EAAC,OAAO,QAAQ,GAAEA,MAAE,KAAG;AAAC,WAAO,IAAI,GAAG,GAAEA,GAAC;AAAA,EAAC;AAAC;AAAE,IAAI,MAAI;AAAG,IAAI,KAAG,OAAO,yBAAuB,cAAY,wBAAsB,OAAO,gBAAc,cAAY,eAAa,CAAAD,QAAGA,IAAE;AAAE,SAAS,KAAI;AAAC,SAAO,IAAI,QAAQ,CAAAA,QAAG,GAAG,MAAIA,IAAE,CAAC,CAAC;AAAC;AAAC,IAAI,IAAE,CAAC;AAAE,GAAG,GAAE,EAAC,QAAO,MAAI,IAAG,QAAO,MAAI,IAAG,QAAO,MAAIG,KAAG,QAAO,MAAI,IAAG,QAAO,MAAI,IAAG,OAAM,MAAI,IAAG,uBAAsB,MAAI,IAAG,kBAAiB,MAAI,IAAG,YAAW,MAAI,IAAG,iBAAgB,MAAI,IAAG,iBAAgB,MAAI,IAAG,4BAA2B,MAAI,IAAG,4BAA2B,MAAI,IAAG,wBAAuB,MAAI,IAAG,oBAAmB,MAAI,IAAG,sBAAqB,MAAI,IAAG,iBAAgB,MAAI,IAAG,qBAAoB,MAAI,IAAG,2BAA0B,MAAI,IAAG,kBAAiB,MAAI,IAAG,mCAAkC,MAAI,IAAG,sBAAqB,MAAI,IAAG,qBAAoB,MAAI,IAAG,mBAAkB,MAAI,IAAG,mBAAkB,MAAI,IAAG,mBAAkB,MAAI,IAAG,uBAAsB,MAAI,IAAG,0BAAyB,MAAI,IAAG,2BAA0B,MAAI,IAAG,iBAAgB,MAAI,IAAG,mBAAkB,MAAI,IAAG,mBAAkB,MAAI,IAAG,yBAAwB,MAAI,IAAG,sBAAqB,MAAI,IAAG,gCAA+B,MAAI,IAAG,sBAAqB,MAAI,IAAG,UAAS,MAAI,IAAG,WAAU,MAAI,IAAG,wBAAuB,MAAI,IAAG,wBAAuB,MAAI,IAAG,oBAAmB,MAAI,IAAG,kBAAiB,MAAI,IAAG,qBAAoB,MAAI,IAAG,sBAAqB,MAAI,IAAG,sBAAqB,MAAI,IAAG,sBAAqB,MAAI,IAAG,sBAAqB,MAAI,IAAG,gBAAe,MAAI,IAAG,kBAAiB,MAAI,IAAG,aAAY,MAAI,IAAG,eAAc,MAAI,IAAG,kBAAiB,MAAI,IAAG,aAAY,MAAI,IAAG,qBAAoB,MAAI,IAAG,4BAA2B,MAAI,IAAG,qBAAoB,MAAI,IAAG,cAAa,MAAI,IAAG,iDAAgD,MAAI,IAAG,iDAAgD,MAAI,IAAG,mDAAkD,MAAI,IAAG,sDAAqD,MAAI,IAAG,iDAAgD,MAAI,IAAG,iDAAgD,MAAI,IAAG,0DAAyD,MAAI,IAAG,+CAA8C,MAAI,IAAG,wDAAuD,MAAI,IAAG,yDAAwD,MAAI,IAAG,8DAA6D,MAAI,IAAG,0DAAyD,MAAI,IAAG,wBAAuB,MAAI,IAAG,uBAAsB,MAAI,IAAG,KAAI,MAAI,IAAG,wBAAuB,MAAI,IAAG,oBAAmB,MAAI,IAAG,kBAAiB,MAAI,IAAG,cAAa,MAAI,IAAG,YAAW,MAAI,IAAG,YAAW,MAAI,IAAG,wBAAuB,MAAI,IAAG,+BAA8B,MAAI,IAAG,mBAAkB,MAAI,IAAG,YAAW,MAAI,IAAG,2BAA0B,MAAI,IAAG,eAAc,MAAI,IAAG,qBAAoB,MAAI,IAAG,MAAK,MAAI,GAAE,CAAC;AAAE,SAAS,GAAGH,KAAE,GAAE;AAAC,MAAIC,MAAED,IAAE,CAAC,EAAE;AAAO,EAAAA,IAAE,QAAQ,CAAC,GAAE,MAAI;AAAC,MAAE,EAAE,WAASC,KAAE,MAAI,kBAAkBA,GAAC,sBAAsB,CAAC,+CAA+CA,GAAC,GAAG;AAAA,EAAC,CAAC,GAAE,EAAE,KAAG,KAAG,IAAEA,KAAE,MAAI,kBAAkBA,GAAC,iCAAiCA,MAAE,CAAC,GAAG;AAAE,MAAI,IAAED,IAAE,CAAC;AAAE,EAAAA,IAAE,QAAQ,CAAC,GAAE,MAAI;AAAC,aAAQ,IAAE,GAAE,IAAEC,KAAE,IAAI,GAAE,MAAI,KAAG,EAAE,CAAC,MAAI,EAAE,CAAC,GAAE,MAAI,kBAAkBA,GAAC,uBAAuB,CAAC,MAAM,CAAC,2CAA2C,CAAC,qCAAqC,CAAC,GAAG;AAAA,EAAC,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAED,IAAE,CAAC,EAAE,MAAM;AAAE,WAAQ,IAAE,GAAE,IAAEA,IAAE,QAAO,IAAI,CAAAC,IAAE,CAAC,KAAGD,IAAE,CAAC,EAAE,CAAC;AAAE,SAAOC;AAAC;AAAC,IAAI;AAAA,CAAI,SAASD,KAAE;AAAC,EAAAA,IAAEA,IAAE,iBAAe,CAAC,IAAE,kBAAiBA,IAAEA,IAAE,eAAa,CAAC,IAAE,gBAAeA,IAAEA,IAAE,cAAY,CAAC,IAAE,eAAcA,IAAEA,IAAE,aAAW,CAAC,IAAE,cAAaA,IAAEA,IAAE,aAAW,CAAC,IAAE,cAAaA,IAAEA,IAAE,aAAW,CAAC,IAAE;AAAY,GAAG,OAAK,KAAG,CAAC,EAAE;AAAE,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,IAAI;AAAM,MAAGA,OAAG,QAAM,KAAG,KAAK,QAAO;AAAE,MAAG,KAAG,KAAK,QAAK,EAAE,SAAOD,MAAEC,IAAE,SAAQ,GAAE,KAAK,EAAE;AAAA,MAAO,KAAE,EAAE,MAAM;AAAE,MAAGA,OAAG,KAAK,QAAO;AAAE,MAAGD,MAAEC,IAAE,WAAS,EAAE,OAAO,OAAM,IAAI,MAAM,4BAA4B,CAAC,sCAAsCD,MAAEC,IAAE,MAAM,sBAAsB,EAAE,MAAM,EAAE;AAAE,WAAQ,IAAE,GAAE,IAAEA,IAAE,QAAO,EAAE,GAAE;AAAC,QAAI,IAAEA,IAAE,CAAC,GAAE,IAAE,EAAE,EAAE,SAAOA,IAAE,SAAO,CAAC,GAAE,IAAE,EAAE,CAAC;AAAE,QAAG,KAAG,EAAE,KAAG,KAAG,GAAE;AAAC,UAAG,MAAI,EAAE,OAAM,IAAI,MAAM,4BAA4B,CAAC,qCAAqC,IAAED,GAAC,OAAO,CAAC,cAAc,IAAEA,GAAC,OAAO,CAAC,EAAE;AAAA,IAAC,MAAM,GAAE,CAAC,IAAE;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAI,IAAE,EAAC,gBAAe,GAAG,gBAAe,cAAa,GAAG,cAAa,aAAY,GAAG,aAAY,YAAW,GAAG,YAAW,YAAW,GAAG,YAAW,YAAW,GAAG,WAAU,GAAEC,MAAE,CAAC;AAAE,WAAQ,KAAKD,IAAE,KAAG,KAAK,EAAE,CAAAC,IAAE,KAAK,EAAE,CAAC,CAAC;AAAA,MAAO;AAAM,SAAOA;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,SAAOA,IAAE,WAAS,IAAE,IAAEA,IAAE,CAAC,MAAI,GAAG,iBAAeA,IAAE,SAAO,IAAEA,IAAE;AAAM;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAGA,OAAG,QAAM,KAAG,KAAK;AAAO,MAAIC,MAAED,IAAE,QAAO,IAAE,EAAE;AAAO,MAAGC,OAAG,EAAE,OAAM,IAAI,MAAM,sBAAsBD,GAAC,uCAAuC,CAAC,2CAA2CC,GAAC,4DAA4D,CAAC,GAAG;AAAE,WAAQ,IAAE,GAAE,IAAE,KAAK,IAAIA,KAAE,IAAE,CAAC,GAAE,EAAE,GAAE;AAAC,QAAI,IAAED,IAAE,CAAC,GAAE,IAAE,EAAE,IAAE,CAAC;AAAE,QAAG,KAAG,KAAG,KAAG,KAAG,MAAI,KAAG,MAAI,EAAE,OAAM,IAAI,MAAM,sBAAsBA,GAAC,8CAA8C,CAAC,yCAAyC,IAAEA,IAAE,MAAM,OAAO,CAAC,6CAA6C,IAAEA,IAAE,MAAM,OAAO,CAAC,EAAE;AAAA,EAAC;AAAC;AAAC,IAAI,KAAG;AAAG,SAAS,GAAGA,KAAE;AAAC,SAAOA,OAAG,KAAGA,MAAE,GAAGA,KAAE,KAAK,MAAM,KAAK,KAAKA,GAAC,CAAC,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAEA,OAAG,OAAOD,OAAG,WAASA,MAAEA,IAAE,CAAC,IAAG,IAAE,KAAG,OAAOA,OAAG,WAASA,MAAEA,IAAE,CAAC;AAAG,SAAM,CAAC,GAAE,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,IAAE,MAAG;AAAC,MAAI,IAAE,CAAC;AAAE,MAAG,EAAE,KAAE,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,GAAE,EAAE,KAAKD,IAAE,CAAC,IAAEC,GAAC,GAAE,IAAE,EAAE,OAAOD,IAAE,MAAM,CAAC,CAAC;AAAA,OAAM;AAAC,QAAE,EAAE,OAAOA,IAAE,CAAC,CAAC;AAAE,QAAI,IAAE,EAAE;AAAO,aAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,EAAE,KAAE,EAAE,OAAO,CAACA,IAAE,IAAE,CAAC,IAAE,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,CAAC;AAAE,QAAE,EAAE,OAAOA,IAAE,MAAM,IAAE,CAAC,CAAC;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,MAAE,MAAG;AAAC,MAAI,IAAE,CAAC;AAAE,MAAGA,KAAE;AAAC,MAAE,KAAK,CAAC;AAAE,aAAQ,IAAE,IAAE,GAAE,IAAED,KAAE,EAAE,EAAE,MAAG,IAAE,KAAG,EAAE,KAAK,CAAC,GAAE,EAAE,KAAK,KAAG,IAAE,EAAE,KAAG,EAAE,KAAK,CAAC;AAAA,EAAC,OAAK;AAAC,QAAI,IAAE,CAAC,GAAE,IAAE,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAEA,KAAE,EAAE,EAAE,MAAG,IAAE,IAAE,KAAG,IAAE,MAAI,IAAE,EAAE,KAAK,CAAC,IAAE,EAAE,KAAK,CAAC;AAAE,MAAE,KAAK,GAAG,CAAC,GAAE,EAAE,KAAK,CAAC,GAAE,EAAE,KAAK,GAAG,CAAC;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,IAAE,MAAG;AAAC,MAAI,IAAE,CAAC;AAAE,MAAE,EAAE,KAAKD,IAAE,CAAC,IAAEC,GAAC,IAAE,EAAE,KAAKD,IAAE,CAAC,IAAEC,GAAC;AAAE,WAAQ,IAAE,GAAE,IAAED,IAAE,QAAO,EAAE,EAAE,MAAG,EAAE,SAAO,IAAE,EAAE,KAAK,EAAE,IAAE,CAAC,IAAEA,IAAE,CAAC,CAAC,IAAE,EAAE,KAAKA,IAAE,CAAC,IAAE,EAAE,IAAE,CAAC,CAAC,IAAE,EAAE,KAAKA,IAAE,CAAC,CAAC;AAAE,SAAO;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAIC,MAAE,CAAC,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,EAAE,CAAAA,IAAE,KAAKD,IAAE,CAAC,EAAE,CAAC,CAAC;AAAE,SAAOC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAED,IAAE,MAAM,GAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAEC,KAAE,EAAE,EAAE,GAAE,KAAKD,IAAE,IAAE,CAAC,IAAE,EAAE,CAAC,EAAE,CAAC,IAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAE,SAAO;AAAC;AAAC,IAAI,KAAG;AAAP,IAA0B,KAAG;AAAmB,IAAI,KAAG;AAAP,IAAgB,KAAG;AAAnB,IAA8B,KAAG;AAAjC,IAA6CG,MAAG;AAAhD,IAA4D,KAAG;AAA/D,IAA4E,KAAG;AAAY,SAAS,GAAGH,KAAE,GAAE;AAAC,MAAGA,IAAE,WAAS,EAAE,OAAO,OAAM,IAAI,MAAM,gEAAgEA,IAAE,MAAM,WAAW,EAAE,MAAM,GAAG;AAAE,MAAIC,MAAE,IAAI,aAAaD,IAAE,SAAO,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAEC,IAAE,QAAO,KAAG,EAAE,CAAAA,IAAE,CAAC,IAAED,IAAE,IAAE,CAAC,GAAEC,IAAE,IAAE,CAAC,IAAE,EAAE,IAAE,CAAC;AAAE,SAAOA;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAI,IAAE,IAAI,aAAaA,IAAE,SAAO,CAAC,GAAEC,MAAE,IAAI,aAAaD,IAAE,SAAO,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAEA,IAAE,QAAO,KAAG,EAAE,GAAE,IAAE,CAAC,IAAEA,IAAE,CAAC,GAAEC,IAAE,IAAE,CAAC,IAAED,IAAE,IAAE,CAAC;AAAE,SAAM,EAAC,MAAK,GAAE,MAAKC,IAAC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAI,IAAE,KAAK,KAAKA,IAAE,SAAO,CAAC,GAAEC,MAAE,IAAI,aAAa,CAAC,GAAE,IAAE,IAAI,aAAa,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAED,IAAE,QAAO,KAAG,EAAE,CAAAC,IAAE,KAAK,MAAM,IAAE,CAAC,CAAC,IAAED,IAAE,CAAC,GAAE,EAAE,KAAK,MAAM,IAAE,CAAC,CAAC,IAAEA,IAAE,IAAE,CAAC;AAAE,SAAM,EAAC,MAAKC,KAAE,MAAK,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAI,IAAE,KAAK,MAAMA,IAAE,SAAO,CAAC,GAAEC,MAAE,IAAI,aAAa,CAAC,GAAE,IAAE,IAAI,aAAa,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAED,IAAE,QAAO,KAAG,EAAE,CAAAC,IAAE,KAAK,MAAM,IAAE,CAAC,CAAC,IAAED,IAAE,CAAC,GAAE,EAAE,KAAK,MAAM,IAAE,CAAC,CAAC,IAAEA,IAAE,IAAE,CAAC;AAAE,SAAM,EAAC,MAAKC,KAAE,MAAK,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAED,IAAE,IAAE,CAAC,GAAE,IAAEA,IAAE,IAAE,IAAE,CAAC;AAAE,SAAM,EAAC,MAAKC,KAAE,MAAK,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE;AAAC,EAAAD,IAAE,IAAE,CAAC,IAAE,GAAEA,IAAE,IAAE,IAAE,CAAC,IAAEC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,IAAI,aAAaD,MAAE,CAAC,GAAE,IAAE,IAAI,aAAaA,MAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,KAAK,KAAKA,MAAE,CAAC,GAAE,KAAI;AAAC,QAAI,KAAG,IAAE,IAAE,MAAI,KAAK,MAAI,IAAEA;AAAG,IAAAC,IAAE,CAAC,IAAE,KAAK,IAAI,CAAC,GAAE,EAAE,CAAC,IAAE,KAAK,IAAI,CAAC;AAAA,EAAC;AAAC,SAAM,EAAC,MAAKA,KAAE,MAAK,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,KAAGA,MAAE,IAAE,MAAI,KAAK,MAAID,MAAE,IAAG,IAAE,KAAK,IAAI,CAAC,GAAE,IAAE,KAAK,IAAI,CAAC;AAAE,SAAM,EAAC,MAAK,GAAE,MAAK,EAAC;AAAC;AAAC,IAAI,KAAG;AAAP,IAAY,KAAG;AAAf,IAAqB,KAAG;AAAxB,IAA4B,KAAG;AAAM,SAAS,GAAGA,KAAE,GAAE;AAAC,EAAAA,MAAEA,IAAE,QAAQ,OAAM,EAAE;AAAE,MAAIC,OAAGD,IAAE,SAAOA,IAAE,QAAQ,IAAG,EAAE,EAAE,UAAQ,GAAG;AAAO,MAAGC,MAAE,EAAE,OAAM,IAAI,MAAM,+CAA+C;AAAE,MAAGA,MAAE,EAAE,OAAM,IAAI,MAAM,6CAA6C,EAAE,KAAK;AAAE,MAAG,CAAC,GAAE,CAAC,IAAED,IAAE,MAAM,EAAE;AAAE,IAAE,EAAE,QAAQ,EAAE,MAAI,IAAG,MAAI,2BAA2B,EAAE,0BAA0B;AAAE,MAAI,IAAE,EAAE,MAAM,EAAE,GAAE,IAAE,EAAE;AAAO,MAAG,MAAI,EAAE,OAAM,IAAI,MAAM,YAAY,CAAC,4BAA4B,CAAC,EAAE;AAAE,MAAG,IAAE,EAAE,OAAM,IAAI,MAAM,+DAA+D;AAAE,MAAI,IAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE,GAAE;AAAC,QAAI,IAAE,EAAE,CAAC;AAAE,QAAG,CAAC,EAAE,KAAK,OAAG,EAAE,QAAQ,CAAC,MAAI,EAAE,EAAE,OAAM,IAAI,MAAM,uCAAuC,CAAC,uCAAuC;AAAE,MAAE,QAAQ,CAAC,MAAI,MAAI,EAAE,KAAK,CAAC;AAAA,EAAC;AAAC,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE,GAAE;AAAC,QAAI,IAAE,EAAE,CAAC;AAAE,MAAE,QAAQ,CAAC,MAAI,MAAI,MAAI,MAAI,EAAE,KAAK,CAAC;AAAA,EAAC;AAAC,MAAI,IAAE,IAAI,MAAM,EAAE,MAAM;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,QAAG,IAAI,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,SAAO,EAAE,CAAC,EAAE,OAAO,OAAM,IAAI,MAAM,2CAA2C,EAAE,CAAC,CAAC,+DAA+D;AAAE,MAAE,CAAC,IAAE,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,CAAC,EAAE,QAAO,EAAE,EAAE,GAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAAA,EAAC;AAAC,MAAI,IAAE,EAAE,QAAO,IAAE,EAAE,QAAO,IAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,EAAE,GAAE,KAAK,CAAC;AAAE,SAAM,EAAC,SAAQ,GAAE,YAAW,GAAE,QAAO,EAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAIC,MAAE,IAAI,MAAMD,GAAC;AAAE,EAAAC,IAAE,KAAK,EAAE;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE,EAAE,CAAAA,IAAE,EAAE,CAAC,CAAC,IAAE;AAAE,MAAI,IAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAED,KAAE,EAAE,EAAE,CAAAC,IAAE,CAAC,MAAI,MAAI,EAAE,KAAK,CAAC;AAAE,SAAOA,MAAEA,IAAE,OAAO,OAAG,MAAI,EAAE,GAAE,EAAC,oBAAmBA,KAAE,YAAW,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,IAAI,MAAMD,GAAC;AAAE,WAAQ,IAAE,GAAE,IAAEC,IAAE,QAAO,EAAE,GAAE;AAAC,QAAI,IAAEA,IAAE,CAAC,EAAE;AAAM,aAAQ,IAAE,GAAE,IAAE,EAAE,CAAC,EAAE,QAAO,EAAE,EAAE,GAAE,EAAE,CAAC,EAAE,CAAC,CAAC,MAAI,SAAO,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,IAAE,EAAE,CAAC,IAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,MAAI,EAAE,CAAC,GAAE,MAAI,sBAAsB,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,oBAAoB,KAAK,UAAU,CAAC,CAAC,uBAAuB,EAAE,CAAC,CAAC,EAAE;AAAA,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAED,KAAE,IAAE,CAAC,GAAE,IAAE;AAAE,EAAAA,IAAE,WAAS,KAAGC,IAAE,KAAK,EAAE,GAAE,IAAED,IAAE,SAAO;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,EAAE,GAAE,KAAK,CAAC,CAAC;AAAE,MAAI,IAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAEC,IAAE,QAAO,EAAE,GAAE;AAAC,QAAI,IAAEA,IAAE,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC;AAAE,aAAQ,KAAK,EAAE,GAAE,QAAQ,CAAC,MAAI,OAAK,EAAE,CAAC,EAAE,KAAK,CAAC,GAAE,EAAE,KAAK,CAAC;AAAA,EAAE;AAAC,SAAM,EAAC,MAAKA,KAAE,OAAM,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,SAAOA,IAAE,MAAM,CAAC,GAAEC,QAAI,MAAIA,GAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAED,IAAE,QAAO,EAAE,EAAE,EAACA,IAAE,CAAC,EAAE,WAAS,KAAGA,IAAE,CAAC,EAAE,QAAQ,CAAC,MAAI,MAAI,MAAI,OAAKC,IAAE,KAAK,CAAC;AAAE,SAAOA;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,MAAE,GAAE;AAAC,MAAI,IAAE,CAAC;AAAE,MAAG,OAAO,KAAG,SAAS,GAAED,IAAE,MAAMC,GAAC,IAAE,MAAI,GAAE,MAAI,+CAA+C,GAAE,IAAE,IAAI,MAAM,CAAC,EAAE,KAAKD,IAAE,MAAMC,GAAC,IAAE,CAAC;AAAA,OAAM;AAAC,QAAI,IAAE,EAAE,OAAO,CAAC,GAAE,OAAK,MAAI,OAAK,KAAG,IAAG,IAAG,CAAC;AAAE,MAAE,KAAG,GAAE,MAAI,yDAAyD;AAAE,QAAI,IAAE,EAAE,QAAQ,EAAE;AAAE,QAAG,MAAI,IAAG;AAAC,UAAI,IAAE,EAAE,OAAO,CAAC,GAAE,MAAI,IAAE,IAAE,IAAE,IAAE,CAAC;AAAE,QAAE,CAAC,IAAED,IAAE,MAAMC,GAAC,IAAE;AAAA,IAAC;AAAC,MAAED,IAAE,MAAMC,GAAC,MAAI,EAAE,OAAO,CAAC,GAAE,MAAI,IAAE,CAAC,GAAE,MAAI,6DAA6D,GAAE,IAAE;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,SAAM;AAAA,uBACr12BA,GAAC;AAAE;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,SAAM,WAAWA,GAAC,oBAAoB,CAAC;AAAM;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,SAAM,WAAWD,GAAC,oBAAoB,CAAC,OAAOC,GAAC;AAAE;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,SAAM,iDAAiDA,GAAC,QAAQ,CAAC;AAAE;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,SAAM,QAAQA,GAAC,8BAA8B,CAAC;AAAE;AAAC,SAAS,KAAI;AAAC,SAAM;AAA+G;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAIC,MAAE,GAAGD,GAAC,GAAE,IAAE,GAAG,CAAC;AAAE,SAAM,2CAA2CC,GAAC;AAAA,iEAChd,CAAC,gBAAgBD,GAAC,iBAAiB,CAAC;AAAE;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAIC,MAAE,GAAGD,GAAC,GAAE,IAAE,GAAG,CAAC;AAAE,SAAM,qCAAqCC,GAAC,8CAA8C,CAAC,gBAAgBD,GAAC,gBAAgB,CAAC;AAAE;AAAC,SAAS,KAAI;AAAC,SAAM;AAA0B;AAAC,SAAS,KAAI;AAAC,SAAM;AAAgC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,SAAM,cAAcA,GAAC,qBAAqB,CAAC;AAAqD;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,SAAM,gBAAgBD,GAAC,QAAQ,CAAC,qBAAqBC,GAAC;AAAG;AAAC,IAAI,KAAG,CAAC;AAAE,GAAG,IAAG,EAAC,0BAAyB,MAAI,IAAG,iBAAgB,MAAI,IAAG,+BAA8B,MAAI,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,OAAG;AAAE,OAAID,OAAG,MAAI,IAAEA,KAAEC,MAAE,QAAI,IAAE,GAAGD,KAAE,KAAK,MAAM,KAAK,KAAKA,GAAC,CAAC,CAAC,GAAE,CAACC,MAAG,KAAE,KAAG,MAAID,MAAEC,MAAE,OAAG,IAAE,GAAGD,KAAE,IAAE,CAAC;AAAE,SAAO;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,CAAC,GAAE,IAAED,IAAE;AAAO,WAAQ,IAAE,GAAE,IAAE,GAAE,IAAI,OAAI,IAAE,EAAE,KAAKA,IAAE,CAAC,CAAC,IAAE,EAAE,KAAKC,GAAC;AAAE,SAAO;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE;AAAC,MAAI,IAAE,EAAE,MAAM,QAAO,IAAED,IAAE,MAAM;AAAO,MAAG,MAAI,MAAI,IAAE,CAAC,KAAG,IAAE,GAAG,OAAM,IAAI,MAAM,sCAAsC,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE;AAAE,MAAG,IAAE,MAAI,KAAG,IAAG,IAAE,EAAE,OAAM,IAAI,MAAM,cAAc,CAAC;AAAA,MACxkC,CAAC,IAAI;AAAE,MAAGC,MAAE,EAAE,OAAM,IAAI,MAAM,cAAc,CAAC,yCAAyCA,GAAC,IAAI;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,EAAE,KAAGD,IAAE,MAAM,CAAC,MAAI,EAAE,MAAM,CAAC,EAAE,OAAM,IAAI,MAAM,WAAW,CAAC,MAAMA,IAAE,MAAM,CAAC,CAAC,qCAAqC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG;AAAE,MAAI,IAAEA,IAAE,MAAMC,GAAC,GAAE,IAAE,CAAC,GAAE,IAAE,GAAE,IAAE,GAAE,IAAE;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,EAAE,GAAE,KAAKD,IAAE,MAAM,CAAC,CAAC,GAAE,KAAGA,IAAE,MAAM,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAEC,KAAE,IAAI,GAAE,KAAKD,IAAE,MAAM,CAAC,CAAC,GAAE,KAAGA,IAAE,MAAM,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,IAAI,GAAE,KAAK,EAAE,MAAM,CAAC,CAAC;AAAE,WAAQ,IAAEC,MAAE,GAAE,IAAE,GAAE,IAAI,GAAE,KAAKD,IAAE,MAAM,CAAC,CAAC,GAAE,KAAGA,IAAE,MAAM,CAAC;AAAE,SAAM,EAAC,WAAU,GAAE,WAAU,GAAE,WAAU,GAAE,SAAQ,GAAE,aAAY,EAAC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAG;AAAC,WAAOA,IAAE,IAAI,OAAG,GAAG,CAAC,CAAC;AAAA,EAAC,SAAO,GAAE;AAAC,UAAM,IAAI,MAAM,4DAA4D,CAAC,EAAE;AAAA,EAAC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAOA,IAAE,IAAI,OAAG,GAAG,CAAC,CAAC;AAAC;AAAC,IAAI,KAAG,CAAC;AAAE,GAAG,IAAG,EAAC,yBAAwB,MAAI,IAAG,yBAAwB,MAAI,IAAG,yBAAwB,MAAI,IAAG,WAAU,MAAI,GAAE,CAAC;AAAE,GAAG;AAAE,IAAI,KAAG,EAAE;AAAE,GAAG,aAAa,6BAA4B,MAAI,OAAG,CAAAA,QAAG;AAAC,EAAAA,OAAG,QAAQ,KAAK,+OAA+O;AAAC,CAAC;AAAE,IAAI;AAAA,CAAI,SAASA,KAAE;AAAC,EAAAA,IAAEA,IAAE,aAAW,CAAC,IAAE,cAAaA,IAAEA,IAAE,WAAS,CAAC,IAAE,YAAWA,IAAEA,IAAE,YAAU,CAAC,IAAE,aAAYA,IAAEA,IAAE,WAAS,CAAC,IAAE,YAAWA,IAAEA,IAAE,WAAS,CAAC,IAAE,YAAWA,IAAEA,IAAE,WAAS,CAAC,IAAE,YAAWA,IAAEA,IAAE,UAAQ,CAAC,IAAE,WAAUA,IAAEA,IAAE,YAAU,CAAC,IAAE,aAAYA,IAAEA,IAAE,eAAa,CAAC,IAAE,gBAAeA,IAAEA,IAAE,WAAS,CAAC,IAAE,YAAWA,IAAEA,IAAE,UAAQ,EAAE,IAAE,WAAUA,IAAEA,IAAE,WAAS,EAAE,IAAE,YAAWA,IAAEA,IAAE,YAAU,EAAE,IAAE,aAAYA,IAAEA,IAAE,YAAU,EAAE,IAAE,aAAYA,IAAEA,IAAE,cAAY,EAAE,IAAE,eAAcA,IAAEA,IAAE,YAAU,EAAE,IAAE,aAAYA,IAAEA,IAAE,aAAW,EAAE,IAAE,cAAaA,IAAEA,IAAE,YAAU,EAAE,IAAE,aAAYA,IAAEA,IAAE,gBAAc,EAAE,IAAE,iBAAgBA,IAAEA,IAAE,UAAQ,EAAE,IAAE,WAAUA,IAAEA,IAAE,cAAY,EAAE,IAAE,eAAcA,IAAEA,IAAE,aAAW,EAAE,IAAE,cAAaA,IAAEA,IAAE,YAAU,EAAE,IAAE,aAAYA,IAAEA,IAAE,YAAU,EAAE,IAAE,aAAYA,IAAEA,IAAE,eAAa,GAAG,IAAE,gBAAeA,IAAEA,IAAE,gBAAc,GAAG,IAAE,iBAAgBA,IAAEA,IAAE,eAAa,GAAG,IAAE,gBAAeA,IAAEA,IAAE,eAAa,GAAG,IAAE,gBAAeA,IAAEA,IAAE,eAAa,GAAG,IAAE,gBAAeA,IAAEA,IAAE,cAAY,GAAG,IAAE,eAAcA,IAAEA,IAAE,gBAAc,GAAG,IAAE,iBAAgBA,IAAEA,IAAE,mBAAiB,GAAG,IAAE,oBAAmBA,IAAEA,IAAE,eAAa,GAAG,IAAE,gBAAeA,IAAEA,IAAE,cAAY,GAAG,IAAE,eAAcA,IAAEA,IAAE,eAAa,GAAG,IAAE,gBAAeA,IAAEA,IAAE,gBAAc,GAAG,IAAE,iBAAgBA,IAAEA,IAAE,gBAAc,GAAG,IAAE,iBAAgBA,IAAEA,IAAE,kBAAgB,GAAG,IAAE,mBAAkBA,IAAEA,IAAE,gBAAc,GAAG,IAAE,iBAAgBA,IAAEA,IAAE,iBAAe,GAAG,IAAE,kBAAiBA,IAAEA,IAAE,gBAAc,GAAG,IAAE,iBAAgBA,IAAEA,IAAE,oBAAkB,GAAG,IAAE,qBAAoBA,IAAEA,IAAE,cAAY,GAAG,IAAE,eAAcA,IAAEA,IAAE,kBAAgB,GAAG,IAAE,mBAAkBA,IAAEA,IAAE,iBAAe,GAAG,IAAE,kBAAiBA,IAAEA,IAAE,gBAAc,GAAG,IAAE,iBAAgBA,IAAEA,IAAE,gBAAc,GAAG,IAAE;AAAe,GAAG,OAAK,KAAG,CAAC,EAAE;AAAE,IAAI;AAAA,CAAI,SAASA,KAAE;AAAC,MAAI;AAAE,GAAC,SAASC,KAAE;AAAC,IAAAA,IAAEA,IAAE,SAAO,CAAC,IAAE,UAASA,IAAEA,IAAE,KAAG,CAAC,IAAE,MAAKA,IAAEA,IAAE,KAAG,CAAC,IAAE;AAAA,EAAI,GAAG,IAAED,IAAE,4BAA0BA,IAAE,0BAAwB,CAAC,EAAE;AAAC,GAAG,OAAK,KAAG,CAAC,EAAE;AAAE,IAAI,KAAG,CAAC;AAAE,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAC,UAASD,KAAE,UAAS,UAAS,QAAO,CAAC,GAAE,OAAM,CAAC,GAAE,gBAAe,EAAC;AAAE,KAAGA,GAAC,IAAEC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,SAAO,GAAGA,GAAC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAO,GAAGA,GAAC;AAAC;AAAC,SAAS,EAAEA,KAAE,GAAEC,KAAE,GAAE,GAAE;AAAC,MAAI,IAAE,EAAE,YAAYD,GAAC;AAAE,MAAG,KAAG,EAAE,oBAAkB,QAAO;AAAC,QAAI,IAAE,EAAE,iBAAgB,IAAE,EAAE,kBAAgB,IAAE,SAAO,EAAE,kBAAgB,SAAO,IAAE,IAAE,EAAE,eAAc,IAAE,IAAE,IAAE,EAAE,WAAW,SAAO,IAAE;AAAE,QAAG,EAAE,SAAO,SAAS,QAAO,GAAG,EAAE,WAAW,CAAC,GAAEC,KAAE,GAAE,CAAC;AAAE,QAAG,EAAE,SAAO,WAAU;AAAC,UAAI,IAAE,EAAE,OAAO,MAAM,GAAE,CAAC;AAAE,aAAO,EAAE,WAAW,MAAM,GAAE,CAAC,EAAE,OAAO,CAAC,GAAE,MAAI;AAAC,YAAI;AAAE,iBAAQ,IAAE,EAAE,CAAC,OAAK,QAAM,MAAI,SAAO,SAAO,EAAE,QAAM;AAAA,MAAM,CAAC,EAAE,IAAI,OAAG,GAAG,GAAEA,KAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAC,QAAI,IAAE,GAAG,EAAE,WAAW,CAAC,GAAEA,KAAE,GAAE,CAAC,GAAE,IAAE,EAAE,SAAS;AAAE,WAAO,EAAE,SAAO,WAAS,EAAE,CAAC,IAAE,EAAE,cAAc,EAAE,OAAM,CAAC;AAAA,EAAC;AAAC,MAAI,IAAE,EAAE,WAAWD,GAAC;AAAE,SAAO,KAAG,EAAE;AAAK;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE;AAAC,MAAG,CAAC,GAAE,CAAC,IAAE,GAAGD,KAAEC,GAAC;AAAE,MAAG,KAAG,MAAK;AAAC,QAAI,IAAE,EAAE,yBAAyB,CAAC;AAAE,QAAG,KAAG,KAAK,QAAO;AAAA,EAAC;AAAC,MAAI,IAAEA,IAAE,kBAAkB,KAAK,OAAG,CAAC,CAAC,EAAE,GAAG,GAAE,CAAC,CAAC,CAAC;AAAE,SAAO,MAAI,SAAO,EAAE,GAAG,GAAE,CAAC,CAAC,EAAE,CAAC,IAAE;AAAM;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,SAAO,EAAE,GAAGD,KAAEC,IAAE,gBAAgB,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAG,CAACC,KAAE,GAAE,CAAC,IAAE,GAAGD,KAAE,CAAC;AAAE,SAAM,CAAC,GAAGC,KAAE,KAAG,EAAE,gBAAgB,GAAE,GAAE,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,SAAO,IAAE,GAAGA,GAAC,IAAI,CAAC,KAAGA;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAGA,QAAI,GAAG,QAAM,CAAC,IAAG,GAAE,MAAM;AAAE,MAAIC,MAAE,KAAG,QAAM,EAAE,sBAAoB;AAAK,MAAGA,KAAE;AAAC,QAAI,IAAE,EAAE,mBAAmB,IAAID,GAAC;AAAE,QAAG,KAAG,KAAK,QAAO;AAAA,EAAC;AAAC,MAAI,IAAEA,IAAE,MAAM,GAAG,GAAE;AAAE,MAAG,EAAE,WAAS,EAAE,KAAE,CAACA,KAAE,GAAE,MAAM;AAAA,OAAM;AAAC,QAAI,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,WAAS,IAAE,EAAE,CAAC,IAAE,QAAO,IAAE,OAAO,EAAE,EAAE,SAAO,CAAC,CAAC;AAAE,QAAE,CAAC,GAAE,GAAE,CAAC;AAAA,EAAC;AAAC,SAAOC,OAAG,EAAE,mBAAmB,IAAID,KAAE,CAAC,GAAE;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,EAAE,OAAMD,KAAE,GAAEC,GAAC;AAAE,MAAG,MAAI,YAAW;AAAC,QAAE,EAAE,oBAAmBD,KAAE,GAAEC,GAAC;AAAE,QAAI,IAAE,CAAC,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,IAAI,GAAE,CAAC,EAAE,CAAC,IAAE,EAAE,IAAE,CAAC,GAAE,EAAE,CAAC,EAAE,CAAC,IAAE,EAAE,IAAE,IAAE,CAAC;AAAE,WAAO;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,SAAOA,IAAE,OAAKA,MAAE,GAAGA,GAAC;AAAC;AAAC,IAAI,KAAG,CAAC;AAAE,GAAG,IAAG,EAAC,MAAK,MAAI,GAAE,CAAC;AAAE,IAAI,KAAG,CAAC,EAAC,UAAS,OAAM,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,SAAQ,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,QAAO,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,KAAI,GAAE,MAAK,WAAU,MAAK,UAAS,CAAC,EAAC,GAAE,EAAC,UAAS,WAAU,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,GAAE,EAAC,QAAO,eAAc,MAAK,cAAa,MAAK,UAAS,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,OAAM,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,WAAU,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,OAAM,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,YAAW,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,YAAW,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,OAAM,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,WAAU,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,WAAU,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,OAAM,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,qBAAoB,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,OAAM,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,YAAW,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,CAAC;AAAE,IAAI,KAAG,CAAC;AAAE,GAAG,IAAG,EAAC,MAAK,MAAI,GAAE,CAAC;AAAE,IAAI,KAAG,CAAC,EAAC,UAAS,OAAM,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,QAAO,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,QAAO,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,QAAO,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,SAAQ,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,QAAO,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,eAAc,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,gBAAe,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,gBAAe,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,WAAU,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,cAAa,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,OAAM,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,QAAO,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,OAAM,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,OAAM,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,SAAQ,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,OAAM,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,QAAO,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,GAAE,EAAC,QAAO,QAAO,MAAK,cAAa,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,OAAM,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,QAAO,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,GAAE,EAAC,QAAO,QAAO,MAAK,cAAa,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,SAAQ,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,SAAQ,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,QAAO,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,SAAQ,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,QAAO,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,WAAU,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,OAAM,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,QAAO,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,QAAO,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,SAAQ,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,UAAS,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,OAAM,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,QAAO,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,QAAO,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,SAAQ,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,SAAQ,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,SAAQ,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,cAAa,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,YAAW,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,SAAQ,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,SAAQ,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,SAAQ,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,OAAM,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,aAAY,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,SAAQ,MAAK,SAAQ,MAAK,UAAS,cAAa,IAAE,GAAE,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,SAAQ,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,YAAW,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,SAAQ,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,CAAC;AAAE,IAAI,KAAG,CAAC;AAAE,GAAG,IAAG,EAAC,MAAK,MAAI,GAAE,CAAC;AAAE,IAAI,KAAG,CAAC,EAAC,UAAS,mBAAkB,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,gBAAe,MAAK,QAAO,GAAE,EAAC,OAAM,GAAE,MAAK,kBAAiB,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,iBAAgB,MAAK,gBAAe,MAAK,QAAO,CAAC,EAAC,GAAE,EAAC,UAAS,YAAW,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,SAAQ,CAAC,EAAC,GAAE,EAAC,UAAS,UAAS,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,SAAQ,CAAC,EAAC,GAAE,EAAC,UAAS,SAAQ,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,KAAI,GAAE,MAAK,WAAU,MAAK,UAAS,CAAC,EAAC,GAAE,EAAC,UAAS,SAAQ,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,GAAE,EAAC,QAAO,cAAa,MAAK,aAAY,MAAK,SAAQ,GAAE,EAAC,QAAO,eAAc,MAAK,cAAa,MAAK,OAAM,CAAC,EAAC,GAAE,EAAC,UAAS,QAAO,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,iBAAgB,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,iBAAgB,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,SAAQ,MAAK,SAAQ,MAAK,QAAO,GAAE,EAAC,QAAO,iBAAgB,MAAK,gBAAe,MAAK,QAAO,GAAE,EAAC,QAAO,gBAAe,MAAK,eAAc,MAAK,OAAM,GAAE,EAAC,QAAO,oBAAmB,MAAK,kBAAiB,MAAK,OAAM,GAAE,EAAC,QAAO,4BAA2B,MAAK,0BAAyB,MAAK,OAAM,GAAE,EAAC,QAAO,qBAAoB,MAAK,QAAO,MAAK,SAAQ,CAAC,EAAC,GAAE,EAAC,UAAS,sBAAqB,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,iBAAgB,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,SAAQ,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,qBAAoB,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,iBAAgB,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,SAAQ,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,SAAQ,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,uBAAsB,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,iBAAgB,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,WAAU,MAAK,WAAU,GAAE,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,SAAQ,MAAK,SAAQ,MAAK,QAAO,GAAE,EAAC,QAAO,iBAAgB,MAAK,gBAAe,MAAK,QAAO,CAAC,EAAC,GAAE,EAAC,UAAS,wBAAuB,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,iBAAgB,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,WAAU,MAAK,WAAU,GAAE,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,QAAO,CAAC,EAAC,GAAE,EAAC,UAAS,uBAAsB,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,iBAAgB,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,SAAQ,MAAK,SAAQ,MAAK,QAAO,GAAE,EAAC,QAAO,yBAAwB,MAAK,uBAAsB,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,sBAAqB,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,iBAAgB,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,WAAU,MAAK,WAAU,GAAE,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,QAAO,CAAC,EAAC,GAAE,EAAC,UAAS,qBAAoB,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,iBAAgB,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,CAAC,EAAC,GAAE,EAAC,UAAS,sBAAqB,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,iBAAgB,MAAK,SAAQ,CAAC,EAAC,GAAE,EAAC,UAAS,eAAc,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,KAAI,GAAE,MAAK,QAAO,MAAK,UAAS,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,eAAc,MAAK,cAAa,MAAK,OAAM,GAAE,EAAC,QAAO,eAAc,MAAK,cAAa,MAAK,OAAM,CAAC,EAAC,GAAE,EAAC,UAAS,MAAK,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,KAAI,GAAE,MAAK,QAAO,MAAK,UAAS,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,eAAc,MAAK,cAAa,MAAK,OAAM,GAAE,EAAC,QAAO,eAAc,MAAK,cAAa,MAAK,OAAM,CAAC,EAAC,GAAE,EAAC,UAAS,kBAAiB,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,KAAI,GAAE,MAAK,QAAO,MAAK,UAAS,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,QAAO,MAAK,QAAO,MAAK,OAAM,GAAE,EAAC,QAAO,QAAO,MAAK,QAAO,MAAK,OAAM,CAAC,EAAC,GAAE,EAAC,UAAS,SAAQ,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,KAAI,GAAE,MAAK,QAAO,MAAK,UAAS,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,QAAO,MAAK,QAAO,MAAK,OAAM,GAAE,EAAC,QAAO,QAAO,MAAK,QAAO,MAAK,OAAM,CAAC,EAAC,GAAE,EAAC,UAAS,qBAAoB,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,WAAU,MAAK,WAAU,GAAE,EAAC,OAAM,GAAE,MAAK,gBAAe,MAAK,QAAO,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,iBAAgB,MAAK,gBAAe,MAAK,QAAO,CAAC,EAAC,GAAE,EAAC,UAAS,uBAAsB,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,WAAU,MAAK,WAAU,GAAE,EAAC,OAAM,GAAE,MAAK,gBAAe,MAAK,QAAO,GAAE,EAAC,OAAM,GAAE,MAAK,eAAc,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,iBAAgB,MAAK,gBAAe,MAAK,QAAO,CAAC,EAAC,GAAE,EAAC,UAAS,oBAAmB,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,gBAAe,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,WAAU,MAAK,WAAU,GAAE,EAAC,OAAM,GAAE,MAAK,gBAAe,MAAK,QAAO,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,iBAAgB,MAAK,gBAAe,MAAK,QAAO,CAAC,EAAC,GAAE,EAAC,UAAS,qBAAoB,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,gBAAe,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,SAAQ,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,gBAAe,MAAK,QAAO,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,iBAAgB,MAAK,gBAAe,MAAK,QAAO,CAAC,EAAC,GAAE,EAAC,UAAS,qBAAoB,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,gBAAe,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,SAAQ,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,iBAAgB,MAAK,gBAAe,MAAK,QAAO,CAAC,EAAC,GAAE,EAAC,UAAS,qBAAoB,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,gBAAe,MAAK,QAAO,GAAE,EAAC,OAAM,GAAE,MAAK,eAAc,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,iBAAgB,MAAK,gBAAe,MAAK,QAAO,CAAC,EAAC,GAAE,EAAC,UAAS,wBAAuB,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,gBAAe,MAAK,QAAO,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,iBAAgB,MAAK,gBAAe,MAAK,QAAO,CAAC,EAAC,GAAE,EAAC,UAAS,mBAAkB,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,gBAAe,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,gBAAe,MAAK,QAAO,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,iBAAgB,MAAK,gBAAe,MAAK,QAAO,GAAE,EAAC,QAAO,gBAAe,MAAK,eAAc,MAAK,QAAO,CAAC,EAAC,GAAE,EAAC,UAAS,mBAAkB,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,gBAAe,MAAK,QAAO,GAAE,EAAC,OAAM,GAAE,MAAK,WAAU,MAAK,WAAU,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,iBAAgB,MAAK,gBAAe,MAAK,QAAO,CAAC,EAAC,GAAE,EAAC,UAAS,oBAAmB,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,gBAAe,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,iBAAgB,MAAK,gBAAe,MAAK,QAAO,GAAE,EAAC,QAAO,iBAAgB,MAAK,gBAAe,MAAK,QAAO,CAAC,EAAC,GAAE,EAAC,UAAS,sBAAqB,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,gBAAe,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,iBAAgB,MAAK,gBAAe,MAAK,QAAO,GAAE,EAAC,QAAO,iBAAgB,MAAK,gBAAe,MAAK,QAAO,CAAC,EAAC,GAAE,EAAC,UAAS,qBAAoB,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,gBAAe,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,gBAAe,MAAK,QAAO,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,iBAAgB,MAAK,gBAAe,MAAK,QAAO,CAAC,EAAC,GAAE,EAAC,UAAS,sBAAqB,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,gBAAe,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,iBAAgB,MAAK,gBAAe,MAAK,QAAO,CAAC,EAAC,GAAE,EAAC,UAAS,oBAAmB,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,gBAAe,MAAK,SAAQ,CAAC,EAAC,GAAE,EAAC,UAAS,oBAAmB,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,gBAAe,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,SAAQ,CAAC,EAAC,CAAC;AAAE,IAAI,KAAG,CAAC;AAAE,GAAG,IAAG,EAAC,MAAK,MAAI,GAAE,CAAC;AAAE,IAAI,KAAG,CAAC,EAAC,UAAS,WAAU,UAAS,eAAc,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,WAAU,MAAK,WAAU,MAAK,WAAU,GAAE,EAAC,QAAO,WAAU,MAAK,OAAM,MAAK,SAAQ,GAAE,EAAC,QAAO,eAAc,MAAK,cAAa,MAAK,UAAS,cAAa,KAAE,GAAE,EAAC,QAAO,SAAQ,MAAK,cAAa,MAAK,WAAU,GAAE,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,WAAU,UAAS,eAAc,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,WAAU,MAAK,WAAU,MAAK,WAAU,GAAE,EAAC,QAAO,WAAU,MAAK,OAAM,MAAK,SAAQ,GAAE,EAAC,QAAO,eAAc,MAAK,cAAa,MAAK,UAAS,cAAa,KAAE,GAAE,EAAC,QAAO,SAAQ,MAAK,cAAa,MAAK,WAAU,GAAE,EAAC,QAAO,qBAAoB,MAAK,oBAAmB,MAAK,YAAW,cAAa,CAAC,GAAE,cAAa,KAAE,GAAE,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,qBAAoB,UAAS,eAAc,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,WAAU,MAAK,WAAU,MAAK,WAAU,GAAE,EAAC,QAAO,WAAU,MAAK,OAAM,MAAK,SAAQ,GAAE,EAAC,QAAO,SAAQ,MAAK,cAAa,MAAK,WAAU,GAAE,EAAC,QAAO,0BAAyB,MAAK,uBAAsB,MAAK,OAAM,GAAE,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,aAAY,UAAS,eAAc,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,WAAU,MAAK,WAAU,MAAK,WAAU,GAAE,EAAC,QAAO,WAAU,MAAK,OAAM,MAAK,SAAQ,GAAE,EAAC,QAAO,eAAc,MAAK,cAAa,MAAK,UAAS,cAAa,KAAE,GAAE,EAAC,QAAO,SAAQ,MAAK,cAAa,MAAK,WAAU,GAAE,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,aAAY,UAAS,eAAc,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,WAAU,MAAK,WAAU,MAAK,WAAU,GAAE,EAAC,QAAO,WAAU,MAAK,OAAM,MAAK,SAAQ,GAAE,EAAC,QAAO,eAAc,MAAK,cAAa,MAAK,UAAS,cAAa,KAAE,GAAE,EAAC,QAAO,SAAQ,MAAK,cAAa,MAAK,WAAU,GAAE,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,UAAS,UAAS,eAAc,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,UAAS,MAAK,UAAS,MAAK,SAAQ,GAAE,EAAC,QAAO,WAAU,MAAK,OAAM,MAAK,SAAQ,GAAE,EAAC,QAAO,eAAc,MAAK,cAAa,MAAK,UAAS,cAAa,MAAK,GAAE,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,GAAE,EAAC,QAAO,YAAW,MAAK,YAAW,MAAK,UAAS,cAAa,EAAC,CAAC,EAAC,GAAE,EAAC,UAAS,UAAS,UAAS,eAAc,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,GAAE,EAAC,QAAO,WAAU,MAAK,WAAU,MAAK,WAAU,GAAE,EAAC,QAAO,WAAU,MAAK,OAAM,MAAK,SAAQ,GAAE,EAAC,QAAO,iBAAgB,MAAK,iBAAgB,MAAK,OAAM,GAAE,EAAC,QAAO,eAAc,MAAK,cAAa,MAAK,UAAS,cAAa,OAAM,GAAE,EAAC,QAAO,qBAAoB,MAAK,oBAAmB,MAAK,YAAW,cAAa,CAAC,EAAC,GAAE,EAAC,QAAO,aAAY,MAAK,aAAY,MAAK,WAAU,CAAC,EAAC,GAAE,EAAC,UAAS,gBAAe,UAAS,eAAc,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,KAAI,GAAE,MAAK,QAAO,MAAK,UAAS,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,YAAW,MAAK,WAAU,MAAK,SAAQ,GAAE,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,GAAE,EAAC,QAAO,WAAU,MAAK,WAAU,MAAK,WAAU,GAAE,EAAC,QAAO,WAAU,MAAK,OAAM,MAAK,SAAQ,GAAE,EAAC,QAAO,qBAAoB,MAAK,oBAAmB,MAAK,YAAW,cAAa,CAAC,EAAC,GAAE,EAAC,QAAO,oBAAmB,MAAK,iBAAgB,MAAK,QAAO,cAAa,KAAE,GAAE,EAAC,QAAO,eAAc,MAAK,cAAa,MAAK,UAAS,cAAa,OAAM,GAAE,EAAC,QAAO,aAAY,MAAK,aAAY,MAAK,YAAW,cAAa,CAAC,GAAE,GAAE,GAAE,CAAC,EAAC,GAAE,EAAC,QAAO,aAAY,MAAK,YAAW,MAAK,YAAW,cAAa,CAAC,EAAC,GAAE,EAAC,QAAO,WAAU,MAAK,WAAU,MAAK,UAAS,cAAa,KAAI,GAAE,EAAC,QAAO,mBAAkB,MAAK,kBAAiB,MAAK,UAAS,cAAa,IAAE,CAAC,EAAC,GAAE,EAAC,UAAS,uBAAsB,UAAS,eAAc,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,eAAc,MAAK,WAAU,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,WAAU,MAAK,WAAU,MAAK,WAAU,GAAE,EAAC,QAAO,WAAU,MAAK,OAAM,MAAK,SAAQ,GAAE,EAAC,QAAO,eAAc,MAAK,cAAa,MAAK,UAAS,cAAa,KAAE,GAAE,EAAC,QAAO,qBAAoB,MAAK,oBAAmB,MAAK,YAAW,cAAa,CAAC,EAAC,GAAE,EAAC,QAAO,aAAY,MAAK,aAAY,MAAK,YAAW,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,mBAAkB,UAAS,eAAc,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,SAAQ,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,WAAU,MAAK,WAAU,MAAK,WAAU,GAAE,EAAC,QAAO,WAAU,MAAK,OAAM,MAAK,SAAQ,GAAE,EAAC,QAAO,eAAc,MAAK,cAAa,MAAK,UAAS,cAAa,OAAM,GAAE,EAAC,QAAO,qBAAoB,MAAK,oBAAmB,MAAK,YAAW,cAAa,CAAC,EAAC,GAAE,EAAC,QAAO,aAAY,MAAK,aAAY,MAAK,WAAU,CAAC,EAAC,GAAE,EAAC,UAAS,yBAAwB,UAAS,eAAc,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,SAAQ,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,WAAU,MAAK,WAAU,MAAK,WAAU,GAAE,EAAC,QAAO,WAAU,MAAK,OAAM,MAAK,SAAQ,GAAE,EAAC,QAAO,eAAc,MAAK,cAAa,MAAK,UAAS,cAAa,OAAM,GAAE,EAAC,QAAO,qBAAoB,MAAK,oBAAmB,MAAK,YAAW,cAAa,CAAC,EAAC,GAAE,EAAC,QAAO,aAAY,MAAK,aAAY,MAAK,WAAU,CAAC,EAAC,GAAE,EAAC,UAAS,8BAA6B,UAAS,eAAc,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,KAAI,GAAE,MAAK,QAAO,MAAK,UAAS,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,YAAW,MAAK,WAAU,MAAK,SAAQ,GAAE,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,GAAE,EAAC,QAAO,WAAU,MAAK,WAAU,MAAK,WAAU,GAAE,EAAC,QAAO,WAAU,MAAK,OAAM,MAAK,SAAQ,GAAE,EAAC,QAAO,eAAc,MAAK,cAAa,MAAK,UAAS,cAAa,OAAM,GAAE,EAAC,QAAO,aAAY,MAAK,aAAY,MAAK,YAAW,cAAa,CAAC,GAAE,GAAE,GAAE,CAAC,EAAC,GAAE,EAAC,QAAO,aAAY,MAAK,YAAW,MAAK,YAAW,cAAa,CAAC,EAAC,GAAE,EAAC,QAAO,qBAAoB,MAAK,oBAAmB,MAAK,YAAW,cAAa,CAAC,EAAC,CAAC,EAAC,GAAE,EAAC,UAAS,UAAS,UAAS,eAAc,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,WAAU,MAAK,WAAU,MAAK,WAAU,GAAE,EAAC,QAAO,WAAU,MAAK,OAAM,MAAK,SAAQ,GAAE,EAAC,QAAO,eAAc,MAAK,cAAa,MAAK,UAAS,cAAa,OAAM,GAAE,EAAC,QAAO,aAAY,MAAK,aAAY,MAAK,WAAU,CAAC,EAAC,GAAE,EAAC,UAAS,cAAa,UAAS,eAAc,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,WAAU,MAAK,WAAU,MAAK,WAAU,GAAE,EAAC,QAAO,SAAQ,MAAK,aAAY,MAAK,WAAU,GAAE,EAAC,QAAO,WAAU,MAAK,OAAM,MAAK,SAAQ,CAAC,EAAC,CAAC;AAAE,IAAI,KAAG,CAAC;AAAE,GAAG,IAAG,EAAC,MAAK,MAAI,GAAE,CAAC;AAAE,IAAI,KAAG,CAAC,EAAC,UAAS,QAAO,UAAS,YAAW,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,SAAQ,MAAK,WAAU,GAAE,EAAC,OAAM,GAAE,MAAK,SAAQ,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,QAAO,CAAC,EAAC,GAAE,EAAC,UAAS,YAAW,UAAS,YAAW,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,SAAQ,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,OAAM,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,UAAS,UAAS,YAAW,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,WAAU,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,SAAQ,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,WAAU,MAAK,UAAS,cAAa,EAAC,GAAE,EAAC,OAAM,GAAE,MAAK,YAAW,MAAK,UAAS,cAAa,EAAC,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,QAAO,MAAK,QAAO,MAAK,UAAS,cAAa,KAAE,GAAE,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,QAAO,CAAC,EAAC,GAAE,EAAC,UAAS,QAAO,UAAS,YAAW,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,SAAQ,MAAK,WAAU,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,QAAO,CAAC,EAAC,GAAE,EAAC,UAAS,YAAW,UAAS,YAAW,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,SAAQ,MAAK,SAAQ,MAAK,QAAO,CAAC,EAAC,GAAE,EAAC,UAAS,wBAAuB,UAAS,YAAW,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,SAAQ,MAAK,WAAU,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,QAAO,MAAK,QAAO,MAAK,UAAS,cAAa,EAAC,GAAE,EAAC,QAAO,SAAQ,MAAK,SAAQ,MAAK,UAAS,cAAa,GAAE,cAAa,KAAE,GAAE,EAAC,QAAO,SAAQ,MAAK,SAAQ,MAAK,QAAO,GAAE,EAAC,QAAO,KAAI,MAAK,KAAI,MAAK,UAAS,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,iBAAgB,UAAS,YAAW,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,SAAQ,MAAK,WAAU,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,UAAS,MAAK,UAAS,MAAK,UAAS,cAAa,EAAC,GAAE,EAAC,QAAO,UAAS,MAAK,UAAS,MAAK,UAAS,cAAa,EAAC,GAAE,EAAC,QAAO,SAAQ,MAAK,SAAQ,MAAK,QAAO,GAAE,EAAC,QAAO,QAAO,MAAK,QAAO,MAAK,UAAS,cAAa,EAAC,GAAE,EAAC,QAAO,SAAQ,MAAK,SAAQ,MAAK,UAAS,cAAa,GAAE,cAAa,KAAE,GAAE,EAAC,QAAO,KAAI,MAAK,KAAI,MAAK,UAAS,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,oBAAmB,UAAS,YAAW,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,SAAQ,MAAK,WAAU,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,UAAS,MAAK,UAAS,MAAK,SAAQ,GAAE,EAAC,QAAO,UAAS,MAAK,UAAS,MAAK,SAAQ,GAAE,EAAC,QAAO,QAAO,MAAK,QAAO,MAAK,UAAS,cAAa,EAAC,GAAE,EAAC,QAAO,SAAQ,MAAK,SAAQ,MAAK,UAAS,cAAa,GAAE,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,SAAQ,UAAS,YAAW,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,SAAQ,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,UAAS,cAAa,EAAC,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,QAAO,MAAK,SAAQ,MAAK,QAAO,CAAC,EAAC,GAAE,EAAC,UAAS,mBAAkB,UAAS,YAAW,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,SAAQ,MAAK,WAAU,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,SAAQ,MAAK,QAAO,MAAK,UAAS,cAAa,EAAC,GAAE,EAAC,QAAO,UAAS,MAAK,UAAS,MAAK,UAAS,cAAa,EAAC,GAAE,EAAC,QAAO,QAAO,MAAK,QAAO,MAAK,SAAQ,GAAE,EAAC,QAAO,SAAQ,MAAK,SAAQ,MAAK,UAAS,cAAa,GAAE,cAAa,KAAE,GAAE,EAAC,QAAO,SAAQ,MAAK,SAAQ,MAAK,QAAO,GAAE,EAAC,QAAO,KAAI,MAAK,KAAI,MAAK,UAAS,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,SAAQ,UAAS,YAAW,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,SAAQ,MAAK,WAAU,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,QAAO,CAAC,EAAC,GAAE,EAAC,UAAS,aAAY,UAAS,YAAW,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,QAAO,CAAC,EAAC,GAAE,EAAC,UAAS,eAAc,UAAS,YAAW,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,cAAa,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,QAAO,MAAK,QAAO,MAAK,SAAQ,GAAE,EAAC,QAAO,SAAQ,MAAK,SAAQ,MAAK,SAAQ,GAAE,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,QAAO,GAAE,EAAC,QAAO,gBAAe,MAAK,gBAAe,MAAK,QAAO,CAAC,EAAC,CAAC;AAAE,IAAI,KAAG,CAAC;AAAE,GAAG,IAAG,EAAC,MAAK,MAAI,GAAE,CAAC;AAAE,IAAI,KAAG,CAAC,EAAC,UAAS,uBAAsB,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,SAAQ,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,iBAAgB,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,gBAAe,MAAK,SAAQ,CAAC,EAAC,GAAE,EAAC,UAAS,uBAAsB,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,SAAQ,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,iBAAgB,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,gBAAe,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,kBAAiB,MAAK,SAAQ,CAAC,EAAC,GAAE,EAAC,UAAS,uBAAsB,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,SAAQ,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,iBAAgB,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,gBAAe,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,kBAAiB,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,GAAE,EAAC,QAAO,eAAc,MAAK,aAAY,MAAK,SAAQ,cAAa,KAAE,GAAE,EAAC,QAAO,0BAAyB,MAAK,sBAAqB,MAAK,OAAM,CAAC,EAAC,GAAE,EAAC,UAAS,uBAAsB,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,SAAQ,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,iBAAgB,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,gBAAe,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,kBAAiB,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,gBAAe,MAAK,SAAQ,CAAC,EAAC,GAAE,EAAC,UAAS,SAAQ,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,aAAY,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,YAAW,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,CAAC;AAAE,IAAI,KAAG,CAAC;AAAE,GAAG,IAAG,EAAC,MAAK,MAAI,GAAE,CAAC;AAAE,IAAI,KAAG,CAAC,EAAC,UAAS,cAAa,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,kBAAiB,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,CAAC,EAAC,GAAE,EAAC,UAAS,UAAS,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,UAAS,MAAK,UAAS,MAAK,OAAM,CAAC,EAAC,GAAE,EAAC,UAAS,cAAa,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,kBAAiB,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,CAAC,EAAC,GAAE,EAAC,UAAS,UAAS,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,EAAC,GAAE,EAAC,UAAS,YAAW,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,SAAQ,CAAC,EAAC,CAAC;AAAE,IAAI,KAAG,CAAC;AAAE,GAAG,IAAG,EAAC,MAAK,MAAI,GAAE,CAAC;AAAE,IAAI,KAAG,CAAC,EAAC,UAAS,0BAAyB,UAAS,SAAQ,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,WAAU,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,SAAQ,MAAK,SAAQ,MAAK,QAAO,GAAE,EAAC,QAAO,SAAQ,MAAK,SAAQ,MAAK,QAAO,CAAC,EAAC,GAAE,EAAC,UAAS,eAAc,UAAS,SAAQ,OAAM,CAAC,EAAC,QAAO,SAAQ,MAAK,SAAQ,MAAK,QAAO,GAAE,EAAC,QAAO,SAAQ,MAAK,SAAQ,MAAK,QAAO,CAAC,EAAC,GAAE,EAAC,UAAS,SAAQ,UAAS,QAAO,GAAE,EAAC,UAAS,YAAW,UAAS,SAAQ,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,EAAC,GAAE,EAAC,UAAS,aAAY,UAAS,SAAQ,QAAO,CAAC,EAAC,OAAM,GAAE,KAAI,GAAE,MAAK,KAAI,MAAK,UAAS,CAAC,EAAC,GAAE,EAAC,UAAS,YAAW,UAAS,SAAQ,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,EAAC,GAAE,EAAC,UAAS,QAAO,UAAS,SAAQ,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,EAAC,GAAE,EAAC,UAAS,QAAO,UAAS,SAAQ,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,EAAC,GAAE,EAAC,UAAS,SAAQ,UAAS,SAAQ,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,EAAC,GAAE,EAAC,UAAS,UAAS,UAAS,SAAQ,QAAO,CAAC,EAAC,OAAM,GAAE,KAAI,GAAE,MAAK,KAAI,MAAK,UAAS,CAAC,EAAC,GAAE,EAAC,UAAS,SAAQ,UAAS,SAAQ,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,UAAS,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,WAAU,MAAK,WAAU,MAAK,SAAQ,GAAE,EAAC,QAAO,WAAU,MAAK,UAAS,MAAK,UAAS,cAAa,KAAE,GAAE,EAAC,QAAO,aAAY,MAAK,aAAY,MAAK,UAAS,cAAa,EAAC,CAAC,EAAC,GAAE,EAAC,UAAS,QAAO,UAAS,SAAQ,QAAO,CAAC,EAAC,GAAE,EAAC,UAAS,gBAAe,UAAS,SAAQ,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,EAAC,GAAE,EAAC,UAAS,2BAA0B,UAAS,SAAQ,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,OAAM,MAAK,OAAM,MAAK,SAAQ,GAAE,EAAC,QAAO,OAAM,MAAK,OAAM,MAAK,SAAQ,CAAC,EAAC,CAAC;AAAE,IAAI,KAAG,CAAC;AAAE,GAAG,IAAG,EAAC,MAAK,MAAI,GAAE,CAAC;AAAE,IAAI,KAAG,CAAC,EAAC,UAAS,aAAY,UAAS,cAAa,QAAO,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,eAAc,MAAK,cAAa,MAAK,SAAQ,GAAE,EAAC,QAAO,yBAAwB,MAAK,sBAAqB,MAAK,OAAM,GAAE,EAAC,QAAO,aAAY,MAAK,YAAW,MAAK,QAAO,GAAE,EAAC,QAAO,eAAc,MAAK,cAAa,MAAK,QAAO,CAAC,EAAC,GAAE,EAAC,UAAS,eAAc,UAAS,cAAa,QAAO,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,eAAc,MAAK,cAAa,MAAK,SAAQ,GAAE,EAAC,QAAO,yBAAwB,MAAK,sBAAqB,MAAK,OAAM,GAAE,EAAC,QAAO,aAAY,MAAK,YAAW,MAAK,QAAO,GAAE,EAAC,QAAO,eAAc,MAAK,cAAa,MAAK,QAAO,CAAC,EAAC,GAAE,EAAC,UAAS,qBAAoB,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,eAAc,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,OAAM,MAAK,OAAM,MAAK,SAAQ,cAAa,KAAE,GAAE,EAAC,QAAO,QAAO,MAAK,QAAO,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,uBAAsB,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,eAAc,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,OAAM,MAAK,OAAM,MAAK,SAAQ,cAAa,KAAE,GAAE,EAAC,QAAO,QAAO,MAAK,QAAO,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,mBAAkB,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,eAAc,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,gBAAe,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,OAAM,MAAK,OAAM,MAAK,SAAQ,cAAa,KAAE,GAAE,EAAC,QAAO,QAAO,MAAK,QAAO,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,qBAAoB,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,eAAc,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,gBAAe,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,OAAM,MAAK,OAAM,MAAK,SAAQ,cAAa,KAAE,GAAE,EAAC,QAAO,QAAO,MAAK,QAAO,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,mBAAkB,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,eAAc,MAAK,SAAQ,CAAC,EAAC,GAAE,EAAC,UAAS,qBAAoB,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,eAAc,MAAK,SAAQ,CAAC,EAAC,GAAE,EAAC,UAAS,mBAAkB,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,eAAc,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,CAAC,EAAC,GAAE,EAAC,UAAS,qBAAoB,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,eAAc,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,CAAC,EAAC,CAAC;AAAE,IAAI,KAAG,CAAC;AAAE,GAAG,IAAG,EAAC,MAAK,MAAI,GAAE,CAAC;AAAE,IAAI,KAAG,CAAC,EAAC,UAAS,kBAAiB,UAAS,SAAQ,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,WAAU,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,iBAAgB,MAAK,gBAAe,MAAK,OAAM,GAAE,EAAC,QAAO,sBAAqB,MAAK,oBAAmB,MAAK,OAAM,GAAE,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,yBAAwB,UAAS,SAAQ,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,WAAU,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,iBAAgB,MAAK,gBAAe,MAAK,OAAM,GAAE,EAAC,QAAO,sBAAqB,MAAK,oBAAmB,MAAK,OAAM,GAAE,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,iBAAgB,UAAS,SAAQ,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,SAAQ,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,SAAQ,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,YAAW,MAAK,WAAU,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,UAAS,MAAK,UAAS,MAAK,SAAQ,GAAE,EAAC,QAAO,uBAAsB,MAAK,sBAAqB,MAAK,SAAQ,CAAC,EAAC,GAAE,EAAC,UAAS,8BAA6B,UAAS,SAAQ,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,cAAa,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,eAAc,MAAK,WAAU,GAAE,EAAC,OAAM,GAAE,MAAK,aAAY,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,iBAAgB,MAAK,iBAAgB,MAAK,SAAQ,GAAE,EAAC,QAAO,aAAY,MAAK,YAAW,MAAK,SAAQ,CAAC,EAAC,CAAC;AAAE,IAAI,KAAG,CAAC;AAAE,GAAG,IAAG,EAAC,MAAK,MAAI,GAAE,CAAC;AAAE,IAAI,KAAG,CAAC,EAAC,UAAS,SAAQ,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,YAAW,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,WAAU,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,gBAAe,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,QAAO,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,aAAY,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,cAAa,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,cAAa,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,aAAY,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,UAAS,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,aAAY,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,YAAW,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,aAAY,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,cAAa,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,EAAC,CAAC;AAAE,IAAI,KAAG,CAAC;AAAE,GAAG,IAAG,EAAC,MAAK,MAAI,GAAE,CAAC;AAAE,IAAI,KAAG,CAAC,EAAC,UAAS,gBAAe,UAAS,YAAW,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,KAAI,GAAE,MAAK,QAAO,MAAK,UAAS,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,YAAW,MAAK,WAAU,MAAK,SAAQ,GAAE,EAAC,QAAO,aAAY,MAAK,YAAW,MAAK,YAAW,cAAa,CAAC,EAAC,GAAE,EAAC,QAAO,WAAU,MAAK,WAAU,MAAK,UAAS,cAAa,KAAI,GAAE,EAAC,QAAO,eAAc,MAAK,cAAa,MAAK,QAAO,cAAa,MAAE,GAAE,EAAC,QAAO,eAAc,MAAK,cAAa,MAAK,QAAO,cAAa,MAAE,GAAE,EAAC,QAAO,mBAAkB,MAAK,kBAAiB,MAAK,UAAS,cAAa,IAAE,GAAE,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,UAAS,UAAS,YAAW,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,eAAc,MAAK,cAAa,MAAK,QAAO,cAAa,MAAE,GAAE,EAAC,QAAO,eAAc,MAAK,cAAa,MAAK,QAAO,cAAa,MAAE,GAAE,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,eAAc,UAAS,YAAW,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,SAAQ,MAAK,cAAa,MAAK,QAAO,cAAa,MAAE,GAAE,EAAC,QAAO,SAAQ,MAAK,cAAa,MAAK,QAAO,cAAa,MAAE,GAAE,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,iBAAgB,UAAS,YAAW,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,SAAQ,MAAK,cAAa,MAAK,QAAO,cAAa,MAAE,GAAE,EAAC,QAAO,SAAQ,MAAK,cAAa,MAAK,QAAO,cAAa,MAAE,GAAE,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,aAAY,UAAS,YAAW,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,WAAU,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,UAAS,UAAS,YAAW,QAAO,CAAC,EAAC,OAAM,GAAE,KAAI,GAAE,MAAK,WAAU,MAAK,UAAS,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,YAAW,MAAK,YAAW,MAAK,SAAQ,GAAE,EAAC,QAAO,KAAI,MAAK,KAAI,MAAK,UAAS,cAAa,EAAC,GAAE,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,QAAO,CAAC,EAAC,GAAE,EAAC,UAAS,kBAAiB,UAAS,YAAW,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,YAAW,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,YAAW,MAAK,SAAQ,CAAC,EAAC,CAAC;AAAE,IAAI,KAAG,CAAC;AAAE,GAAG,IAAG,EAAC,MAAK,MAAI,GAAE,CAAC;AAAE,IAAI,KAAG,CAAC,EAAC,UAAS,iBAAgB,UAAS,iBAAgB,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,WAAU,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,aAAY,MAAK,YAAW,MAAK,QAAO,cAAa,MAAE,CAAC,EAAC,GAAE,EAAC,UAAS,kBAAiB,UAAS,iBAAgB,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,SAAQ,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,YAAW,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,WAAU,MAAK,WAAU,MAAK,UAAS,cAAa,KAAI,GAAE,EAAC,QAAO,eAAc,MAAK,cAAa,MAAK,UAAS,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,oBAAmB,UAAS,iBAAgB,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,SAAQ,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,YAAW,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,WAAU,MAAK,WAAU,MAAK,UAAS,cAAa,KAAI,GAAE,EAAC,QAAO,eAAc,MAAK,cAAa,MAAK,UAAS,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,oBAAmB,UAAS,iBAAgB,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,SAAQ,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,YAAW,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,WAAU,MAAK,WAAU,MAAK,UAAS,cAAa,KAAI,GAAE,EAAC,QAAO,eAAc,MAAK,cAAa,MAAK,UAAS,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,OAAM,UAAS,iBAAgB,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,gBAAe,MAAK,UAAS,MAAK,UAAS,cAAa,EAAC,GAAE,EAAC,QAAO,QAAO,MAAK,QAAO,MAAK,UAAS,cAAa,EAAC,GAAE,EAAC,QAAO,SAAQ,MAAK,SAAQ,MAAK,UAAS,cAAa,EAAC,GAAE,EAAC,QAAO,QAAO,MAAK,QAAO,MAAK,UAAS,cAAa,IAAE,CAAC,EAAC,GAAE,EAAC,UAAS,WAAU,UAAS,iBAAgB,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,EAAC,GAAE,EAAC,UAAS,cAAa,UAAS,iBAAgB,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,EAAC,CAAC;AAAE,IAAI,KAAG,CAAC;AAAE,GAAG,IAAG,EAAC,MAAK,MAAI,GAAE,CAAC;AAAE,IAAI,KAAG,CAAC,EAAC,UAAS,YAAW,UAAS,aAAY,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,WAAU,MAAK,SAAQ,CAAC,EAAC,GAAE,EAAC,UAAS,iBAAgB,UAAS,aAAY,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,WAAU,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,iBAAgB,MAAK,gBAAe,MAAK,OAAM,CAAC,EAAC,GAAE,EAAC,UAAS,OAAM,UAAS,aAAY,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,WAAU,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,aAAY,MAAK,YAAW,MAAK,OAAM,CAAC,EAAC,GAAE,EAAC,UAAS,QAAO,UAAS,aAAY,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,WAAU,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,aAAY,MAAK,YAAW,MAAK,OAAM,CAAC,EAAC,GAAE,EAAC,UAAS,OAAM,UAAS,aAAY,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,WAAU,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,aAAY,MAAK,YAAW,MAAK,OAAM,CAAC,EAAC,GAAE,EAAC,UAAS,OAAM,UAAS,aAAY,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,WAAU,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,aAAY,MAAK,YAAW,MAAK,OAAM,CAAC,EAAC,GAAE,EAAC,UAAS,OAAM,UAAS,aAAY,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,WAAU,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,aAAY,MAAK,YAAW,MAAK,OAAM,CAAC,EAAC,GAAE,EAAC,UAAS,OAAM,UAAS,aAAY,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,WAAU,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,aAAY,MAAK,YAAW,MAAK,OAAM,CAAC,EAAC,GAAE,EAAC,UAAS,UAAS,UAAS,aAAY,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,SAAQ,CAAC,EAAC,GAAE,EAAC,UAAS,UAAS,UAAS,aAAY,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,SAAQ,CAAC,EAAC,GAAE,EAAC,UAAS,QAAO,UAAS,aAAY,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,WAAU,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,aAAY,MAAK,YAAW,MAAK,OAAM,GAAE,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,WAAU,UAAS,aAAY,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,aAAY,MAAK,aAAY,MAAK,OAAM,GAAE,EAAC,QAAO,WAAU,MAAK,WAAU,MAAK,OAAM,CAAC,EAAC,GAAE,EAAC,UAAS,UAAS,UAAS,aAAY,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,aAAY,MAAK,aAAY,MAAK,OAAM,GAAE,EAAC,QAAO,WAAU,MAAK,WAAU,MAAK,OAAM,CAAC,EAAC,CAAC;AAAE,IAAI,KAAG,CAAC;AAAE,GAAG,IAAG,EAAC,MAAK,MAAI,GAAE,CAAC;AAAE,IAAI,KAAG,CAAC,EAAC,UAAS,YAAW,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,KAAI,IAAG,MAAK,WAAU,MAAK,UAAS,GAAE,EAAC,OAAM,IAAG,MAAK,QAAO,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,KAAI,MAAK,UAAS,cAAa,EAAC,CAAC,EAAC,GAAE,EAAC,UAAS,UAAS,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,KAAI,GAAE,MAAK,WAAU,MAAK,UAAS,GAAE,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,KAAI,MAAK,UAAS,cAAa,EAAC,CAAC,EAAC,GAAE,EAAC,UAAS,YAAW,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,WAAU,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,UAAS,cAAa,EAAC,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,cAAa,MAAK,aAAY,MAAK,UAAS,cAAa,EAAC,CAAC,EAAC,GAAE,EAAC,UAAS,UAAS,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,WAAU,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,oBAAmB,MAAK,mBAAkB,MAAK,QAAO,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,WAAU,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,SAAQ,CAAC,EAAC,GAAE,EAAC,UAAS,aAAY,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,WAAU,CAAC,EAAC,GAAE,EAAC,UAAS,SAAQ,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,SAAQ,MAAK,WAAU,GAAE,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,WAAU,CAAC,EAAC,GAAE,EAAC,UAAS,gBAAe,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,SAAQ,MAAK,WAAU,GAAE,EAAC,OAAM,GAAE,MAAK,OAAM,MAAK,WAAU,GAAE,EAAC,OAAM,GAAE,MAAK,WAAU,MAAK,WAAU,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,cAAa,MAAK,aAAY,MAAK,UAAS,cAAa,EAAC,GAAE,EAAC,QAAO,YAAW,MAAK,WAAU,MAAK,UAAS,cAAa,EAAC,GAAE,EAAC,QAAO,iBAAgB,MAAK,eAAc,MAAK,UAAS,cAAa,EAAC,GAAE,EAAC,QAAO,iBAAgB,MAAK,gBAAe,MAAK,UAAS,cAAa,EAAC,GAAE,EAAC,QAAO,oBAAmB,MAAK,kBAAiB,MAAK,UAAS,cAAa,EAAC,CAAC,EAAC,GAAE,EAAC,UAAS,QAAO,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,KAAI,GAAE,MAAK,WAAU,MAAK,UAAS,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,QAAO,MAAK,QAAO,MAAK,UAAS,cAAa,EAAC,CAAC,EAAC,GAAE,EAAC,UAAS,UAAS,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,QAAO,MAAK,QAAO,MAAK,UAAS,cAAa,EAAC,GAAE,EAAC,QAAO,OAAM,MAAK,OAAM,MAAK,UAAS,cAAa,GAAE,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,QAAO,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,WAAU,CAAC,EAAC,GAAE,EAAC,UAAS,SAAQ,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,UAAS,cAAa,EAAC,GAAE,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,aAAY,MAAK,mBAAkB,MAAK,UAAS,cAAa,EAAC,CAAC,EAAC,GAAE,EAAC,UAAS,UAAS,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,mBAAkB,MAAK,WAAU,GAAE,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,UAAS,cAAa,EAAC,CAAC,EAAC,GAAE,EAAC,UAAS,aAAY,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,WAAU,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,SAAQ,MAAK,WAAU,CAAC,EAAC,GAAE,EAAC,UAAS,YAAW,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,WAAU,MAAK,SAAQ,CAAC,EAAC,GAAE,EAAC,UAAS,iBAAgB,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,iBAAgB,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,eAAc,MAAK,WAAU,GAAE,EAAC,OAAM,GAAE,MAAK,gBAAe,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,gBAAe,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,oBAAmB,MAAK,mBAAkB,MAAK,QAAO,cAAa,OAAG,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,uBAAsB,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,WAAU,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,CAAC,EAAC,CAAC;AAAE,IAAI,KAAG,CAAC;AAAE,GAAG,IAAG,EAAC,MAAK,MAAI,GAAE,CAAC;AAAE,IAAI,KAAG,CAAC,EAAC,UAAS,uBAAsB,UAAS,UAAS,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,WAAU,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,cAAa,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,gBAAe,MAAK,SAAQ,CAAC,EAAC,GAAE,EAAC,UAAS,iBAAgB,UAAS,UAAS,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,gBAAe,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,cAAa,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,YAAW,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,qBAAoB,UAAS,UAAS,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,WAAU,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,cAAa,MAAK,SAAQ,CAAC,EAAC,GAAE,EAAC,UAAS,oBAAmB,UAAS,UAAS,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,WAAU,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,cAAa,MAAK,SAAQ,CAAC,EAAC,CAAC;AAAE,IAAI,KAAG,CAAC;AAAE,GAAG,IAAG,EAAC,MAAK,MAAI,GAAE,CAAC;AAAE,IAAI,KAAG,CAAC,EAAC,UAAS,OAAM,UAAS,YAAW,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,EAAC,GAAE,EAAC,UAAS,QAAO,UAAS,YAAW,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,EAAC,GAAE,EAAC,UAAS,QAAO,UAAS,YAAW,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,cAAa,MAAK,UAAS,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,SAAQ,UAAS,YAAW,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,cAAa,MAAK,UAAS,cAAa,KAAE,CAAC,EAAC,CAAC;AAAE,IAAI,KAAG,CAAC;AAAE,GAAG,IAAG,EAAC,MAAK,MAAI,GAAE,CAAC;AAAE,IAAI,KAAG,CAAC,EAAC,UAAS,sBAAqB,UAAS,UAAS,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,SAAQ,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,WAAU,MAAK,WAAU,MAAK,SAAQ,GAAE,EAAC,QAAO,WAAU,MAAK,WAAU,MAAK,SAAQ,GAAE,EAAC,QAAO,kBAAiB,MAAK,iBAAgB,MAAK,OAAM,CAAC,EAAC,GAAE,EAAC,UAAS,gBAAe,UAAS,UAAS,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,cAAa,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,aAAY,MAAK,aAAY,MAAK,SAAQ,GAAE,EAAC,QAAO,gBAAe,MAAK,eAAc,MAAK,WAAU,GAAE,EAAC,QAAO,YAAW,MAAK,WAAU,MAAK,SAAQ,GAAE,EAAC,QAAO,aAAY,MAAK,YAAW,MAAK,SAAQ,GAAE,EAAC,QAAO,aAAY,MAAK,YAAW,MAAK,SAAQ,GAAE,EAAC,QAAO,4BAA2B,MAAK,0BAAyB,MAAK,OAAM,CAAC,GAAE,SAAQ,CAAC,UAAS,eAAe,EAAC,GAAE,EAAC,UAAS,eAAc,UAAS,UAAS,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,SAAQ,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,aAAY,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,cAAa,MAAK,aAAY,MAAK,OAAM,CAAC,GAAE,SAAQ,CAAC,WAAU,UAAS,OAAO,EAAC,GAAE,EAAC,UAAS,0BAAyB,UAAS,UAAS,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,SAAQ,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,eAAc,MAAK,cAAa,MAAK,SAAQ,CAAC,EAAC,CAAC;AAAE,IAAI,KAAG,CAAC;AAAE,GAAG,IAAG,EAAC,MAAK,MAAI,GAAE,CAAC;AAAE,IAAI,KAAG,CAAC,EAAC,UAAS,QAAO,UAAS,kBAAiB,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,QAAO,MAAK,UAAS,MAAK,SAAQ,cAAa,KAAE,GAAE,EAAC,QAAO,QAAO,MAAK,SAAQ,MAAK,QAAO,CAAC,EAAC,GAAE,EAAC,UAAS,cAAa,UAAS,kBAAiB,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,SAAQ,CAAC,EAAC,GAAE,EAAC,UAAS,aAAY,UAAS,kBAAiB,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,WAAU,MAAK,WAAU,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,QAAO,MAAK,QAAO,MAAK,SAAQ,CAAC,EAAC,GAAE,EAAC,UAAS,OAAM,UAAS,kBAAiB,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,WAAU,MAAK,WAAU,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,kBAAiB,MAAK,iBAAgB,MAAK,UAAS,cAAa,EAAC,CAAC,EAAC,GAAE,EAAC,UAAS,SAAQ,UAAS,kBAAiB,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,WAAU,MAAK,WAAU,GAAE,EAAC,OAAM,GAAE,MAAK,iBAAgB,MAAK,UAAS,cAAa,EAAC,CAAC,EAAC,GAAE,EAAC,UAAS,WAAU,UAAS,kBAAiB,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,SAAQ,MAAK,WAAU,CAAC,EAAC,GAAE,EAAC,UAAS,eAAc,UAAS,kBAAiB,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,SAAQ,MAAK,WAAU,CAAC,EAAC,GAAE,EAAC,UAAS,WAAU,UAAS,kBAAiB,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,QAAO,kBAAiB,gBAAe,MAAK,QAAO,MAAK,WAAU,CAAC,EAAC,GAAE,EAAC,UAAS,kBAAiB,UAAS,kBAAiB,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,cAAa,MAAK,WAAU,GAAE,EAAC,OAAM,GAAE,MAAK,YAAW,MAAK,WAAU,CAAC,EAAC,GAAE,EAAC,UAAS,kBAAiB,UAAS,kBAAiB,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,cAAa,MAAK,WAAU,GAAE,EAAC,OAAM,GAAE,MAAK,SAAQ,MAAK,WAAU,CAAC,EAAC,GAAE,EAAC,UAAS,gBAAe,UAAS,kBAAiB,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,cAAa,MAAK,aAAY,MAAK,SAAQ,GAAE,EAAC,QAAO,eAAc,MAAK,cAAa,MAAK,SAAQ,CAAC,EAAC,GAAE,EAAC,UAAS,eAAc,UAAS,kBAAiB,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,SAAQ,MAAK,WAAU,CAAC,GAAE,OAAM,CAAC,EAAC,GAAE,EAAC,UAAS,iBAAgB,UAAS,kBAAiB,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,MAAK,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,MAAK,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,CAAC;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,WAAW,WAAU;AAAC,WAAO,KAAK,cAAY,KAAK,YAAU,IAAI;AAAA,EAAK;AAAA,EAAC,cAAa;AAAC,QAAI,IAAE,CAAC,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,EAAE,GAAEC,MAAE,CAAC,EAAE,OAAO,GAAG,EAAE,IAAI,OAAG,EAAE,IAAI,CAAC;AAAE,SAAK,YAAUA,IAAE,OAAO,CAAC,GAAE,OAAK,EAAE,EAAE,QAAQ,IAAE,GAAE,IAAG,CAAC,CAAC;AAAA,EAAC;AAAA,EAAC,eAAe,GAAEA,MAAE,CAAC,GAAE;AAAC,QAAI,IAAE,EAAE,MAAK,IAAE,CAAC,GAAE,IAAE,CAAC,GAAE,IAAE,CAAC,GAAE,IAAE,EAAE,OAAO,CAAC,GAAE,OAAK,EAAE,EAAE,IAAI,IAAE,KAAK,QAAQ,CAAC,GAAE,EAAE,GAAG,WAAW,aAAa,IAAE,EAAE,KAAK,EAAE,EAAE,IAAI,CAAC,IAAE,EAAE,OAAK,UAAQ,EAAE,KAAK,EAAE,EAAE,IAAI,CAAC,KAAG,EAAE,SAAO,QAAM,EAAE,MAAM,WAAS,MAAI,EAAE,KAAK,EAAE,EAAE,IAAI,CAAC,GAAE,IAAG,CAAC,CAAC,GAAE,IAAE,CAAC,GAAE,IAAE,CAAC,GAAE,IAAE,CAAC,GAAE,IAAE,CAAC;AAAE,IAAAA,OAAG,SAAO,IAAE,KAAK,oBAAoBA,IAAE,MAAM,GAAE,IAAE,KAAK,oBAAoBA,IAAE,OAAO;AAAG,QAAI,IAAE,OAAO,KAAK,CAAC;AAAE,MAAE,QAAQ,OAAG;AAAC,UAAI,IAAE,EAAE,CAAC;AAAE,QAAE,WAAW,QAAQ,CAAC,GAAE,MAAI;AAAC,YAAG,CAAC,GAAE,EAAC,CAAC,IAAE,GAAG,CAAC,GAAE,IAAE,EAAE,CAAC;AAAE,YAAG,EAAE,WAAS,MAAK;AAAC,cAAI,IAAE,EAAE,QAAQ,QAAQ,CAAC;AAAE,cAAG,MAAI,IAAG;AAAC,gBAAI,IAAE,GAAG,CAAC,IAAI,CAAC;AAAG,cAAE,WAAW,CAAC,IAAE;AAAA,UAAC;AAAA,QAAC;AAAC,UAAE,OAAO,KAAK,CAAC,GAAE,EAAE,SAAS,KAAK,CAAC;AAAA,MAAC,CAAC;AAAA,IAAC,CAAC,GAAE,OAAO,KAAK,CAAC,EAAE,WAAS,IAAE,EAAE,QAAQ,OAAG;AAAC,UAAI,IAAE,EAAE,CAAC;AAAE,QAAE,SAAS,WAAS,KAAG,EAAE,KAAK,CAAC;AAAA,IAAC,CAAC,IAAE,OAAO,KAAK,CAAC,EAAE,QAAQ,OAAG;AAAC,UAAG,CAAC,CAAC,IAAE,GAAG,CAAC,GAAE,IAAE,EAAE,CAAC;AAAE,WAAG,SAAO,EAAE,eAAa,EAAE,CAAC,GAAE,EAAE,KAAK,CAAC;AAAA,IAAE,CAAC,GAAE,OAAO,KAAK,CAAC,EAAE,SAAO,IAAE,OAAO,KAAK,CAAC,EAAE,QAAQ,OAAG;AAAC,UAAG,CAAC,CAAC,IAAE,GAAG,CAAC,GAAE,IAAE,EAAE,CAAC;AAAE,YAAI,EAAE,eAAa,EAAE,CAAC,GAAE,EAAE,KAAK,CAAC;AAAA,IAAE,CAAC,IAAE,IAAE;AAAE,QAAI,IAAE,CAAC;AAAE,MAAE,WAAS,QAAM,EAAE,QAAQ,YAAU,SAAO,IAAE,EAAE,QAAQ,SAAS,OAAO,CAAC,GAAE,OAAK,EAAE,EAAE,UAAU,IAAI,IAAE,KAAK,YAAY,CAAC,GAAE,IAAG,CAAC,CAAC;AAAG,QAAI,IAAE,EAAC,OAAM,GAAE,QAAO,GAAE,SAAQ,GAAE,SAAQ,GAAE,cAAa,GAAE,WAAUA,KAAE,WAAU,EAAC;AAAE,WAAO,EAAE,SAAO,MAAI,EAAE,YAAU,IAAG;AAAA,EAAC;AAAA,EAAC,oBAAoB,GAAE;AAAC,WAAO,OAAO,KAAK,KAAG,CAAC,CAAC,EAAE,OAAO,CAACA,KAAE,OAAKA,IAAE,EAAE,CAAC,EAAE,IAAI,IAAE,GAAEA,MAAG,CAAC,CAAC;AAAA,EAAC;AAAA,EAAC,QAAQ,GAAE;AAAC,QAAIA,MAAE,GAAG,EAAE,EAAE,KAAG,KAAK,UAAU,EAAE,EAAE,KAAG,CAAC;AAAE,MAAE,QAAM,SAAO,EAAE,OAAK,CAAC;AAAG,QAAI,IAAE,EAAC,MAAK,EAAE,MAAK,IAAG,EAAE,IAAG,UAASA,IAAE,UAAS,aAAY,EAAE,SAAO,CAAC,GAAG,IAAI,OAAG,EAAE,WAAW,GAAG,IAAE,EAAE,MAAM,CAAC,IAAE,CAAC,GAAE,QAAO,CAAC,GAAE,UAAS,CAAC,GAAE,aAAY,CAAC,GAAE,YAAW,CAAC,GAAE,UAAS,EAAE,MAAK,SAAQA,IAAE,QAAO;AAAE,WAAOA,IAAE,UAAQ,SAAO,EAAE,cAAYA,IAAE,OAAO,OAAO,CAAC,GAAE,OAAK,EAAE,EAAE,IAAI,IAAE,EAAC,MAAK,EAAE,MAAK,iBAAgB,EAAE,OAAM,eAAc,EAAE,IAAG,GAAE,IAAG,CAAC,CAAC,IAAGA,IAAE,SAAO,SAAO,EAAE,aAAWA,IAAE,MAAM,OAAO,CAAC,GAAE,MAAI;AAAC,UAAI,IAAE,EAAE,MAAK;AAAE,cAAO,EAAE,MAAK;AAAA,QAAC,KAAI;AAAS,cAAE,GAAG,EAAE,MAAK,EAAE,QAAO,EAAE,YAAY,GAAE,MAAI,UAAQ,EAAE,qBAAmB,IAAE,GAAG,EAAE,MAAK,EAAE,kBAAiB,EAAE,YAAY;AAAG;AAAA,QAAM,KAAI;AAAW,cAAE,GAAG,EAAE,MAAK,EAAE,QAAO,EAAE,YAAY,GAAE,MAAI,UAAQ,EAAE,qBAAmB,IAAE,GAAG,EAAE,MAAK,EAAE,kBAAiB,EAAE,YAAY;AAAG;AAAA,QAAM,KAAI;AAAS,cAAE,GAAG,EAAE,MAAK,EAAE,QAAO,EAAE,gBAAc,CAAC,GAAE,MAAI,UAAQ,EAAE,qBAAmB,IAAE,GAAG,EAAE,MAAK,EAAE,kBAAiB,EAAE,YAAY;AAAG;AAAA,QAAM,KAAI;AAAW,cAAE,GAAG,EAAE,MAAK,EAAE,QAAO,EAAE,YAAY,GAAE,MAAI,UAAQ,EAAE,qBAAmB,IAAE,GAAG,EAAE,MAAK,EAAE,kBAAiB,EAAE,YAAY;AAAG;AAAA,QAAM,KAAI;AAAO,cAAE,GAAG,EAAE,MAAK,EAAE,QAAO,EAAE,YAAY,GAAE,MAAI,UAAQ,EAAE,qBAAmB,IAAE,GAAG,EAAE,MAAK,EAAE,kBAAiB,EAAE,YAAY;AAAG;AAAA,QAAM,KAAI;AAAS,cAAE,GAAG,EAAE,MAAK,EAAE,QAAO,EAAE,YAAY,GAAE,MAAI,UAAQ,EAAE,qBAAmB,IAAE,GAAG,EAAE,MAAK,EAAE,kBAAiB,EAAE,YAAY;AAAG;AAAA,QAAM,KAAI;AAAQ,cAAE,GAAG,EAAE,MAAK,EAAE,QAAO,EAAE,YAAY,GAAE,MAAI,UAAQ,EAAE,qBAAmB,IAAE,GAAG,EAAE,MAAK,EAAE,kBAAiB,EAAE,YAAY;AAAG;AAAA,QAAM,KAAI;AAAU,cAAE,GAAG,EAAE,MAAK,EAAE,QAAO,EAAE,YAAY,GAAE,MAAI,UAAQ,EAAE,qBAAmB,IAAE,GAAG,EAAE,MAAK,EAAE,kBAAiB,EAAE,YAAY;AAAG;AAAA,QAAM,KAAI;AAAQ,cAAE,GAAG,EAAE,MAAK,EAAE,QAAO,EAAE,YAAY,GAAE,MAAI,UAAQ,EAAE,qBAAmB,IAAE,GAAG,EAAE,MAAK,EAAE,kBAAiB,EAAE,YAAY;AAAG;AAAA,QAAM,KAAI;AAAU,cAAE,GAAG,EAAE,MAAK,EAAE,QAAO,EAAE,YAAY,GAAE,MAAI,UAAQ,EAAE,qBAAmB,IAAE,GAAG,EAAE,MAAK,EAAE,kBAAiB,EAAE,YAAY;AAAG;AAAA,QAAM,KAAI;AAAO,cAAE,GAAG,EAAE,MAAK,EAAE,QAAO,EAAE,YAAY,GAAE,MAAI,UAAQ,EAAE,qBAAmB,IAAE,GAAG,EAAE,MAAK,EAAE,kBAAiB,EAAE,YAAY;AAAG;AAAA,QAAM,KAAI;AAAA,QAAS,KAAI;AAAU;AAAA,QAAM;AAAQ,gBAAM,IAAI,MAAM,2BAA2B,EAAE,IAAI,YAAY,EAAE,EAAE,EAAE;AAAA,MAAC;AAAC,aAAO,EAAE,EAAE,IAAI,IAAE,EAAC,OAAM,GAAE,MAAK,EAAC,GAAE;AAAA,IAAC,GAAE,CAAC,CAAC,IAAG;AAAA,EAAC;AAAA,EAAC,YAAY,GAAE;AAAC,QAAIA,MAAE,EAAE,SAAQ,IAAE,CAAC,GAAE,IAAE,CAAC,GAAE,IAAE,CAAC;AAAE,IAAAA,OAAG,SAAO,IAAEA,IAAE,OAAO,CAAC,GAAE,OAAK,EAAE,EAAE,IAAI,IAAE,KAAK,QAAQ,CAAC,GAAE,EAAE,OAAK,WAAS,EAAE,KAAK,EAAE,EAAE,IAAI,CAAC,GAAE,IAAG,CAAC,CAAC;AAAG,QAAI,IAAE,CAAC,GAAE,IAAE,CAAC;AAAE,MAAE,UAAU,SAAS,QAAQ,OAAG;AAAC,UAAG,CAAC,CAAC,IAAE,GAAG,EAAE,IAAI,GAAE,IAAE,EAAC,MAAK,GAAE,IAAG,eAAc,QAAO,CAAC,GAAE,YAAW,CAAC,GAAE,UAAS,SAAQ,aAAY,CAAC,GAAE,YAAW,EAAC,OAAM,EAAC,OAAM,GAAG,EAAE,IAAI,GAAE,MAAK,QAAO,EAAC,GAAE,UAAS,CAAC,EAAC;AAAE,QAAE,eAAa,EAAE,MAAK,EAAE,KAAK,CAAC,GAAE,EAAE,CAAC,IAAE;AAAA,IAAC,CAAC,GAAE,OAAO,KAAK,CAAC,EAAE,QAAQ,OAAG;AAAC,UAAI,IAAE,EAAE,CAAC;AAAE,QAAE,WAAW,QAAQ,CAAC,GAAE,MAAI;AAAC,YAAG,CAAC,GAAE,EAAC,CAAC,IAAE,GAAG,CAAC,GAAE,IAAE,EAAE,CAAC;AAAE,YAAG,EAAE,WAAS,MAAK;AAAC,cAAI,IAAE,EAAE,QAAQ,QAAQ,CAAC;AAAE,cAAG,MAAI,IAAG;AAAC,gBAAI,IAAE,GAAG,CAAC,IAAI,CAAC;AAAG,cAAE,WAAW,CAAC,IAAE;AAAA,UAAC;AAAA,QAAC;AAAC,UAAE,OAAO,KAAK,CAAC,GAAE,EAAE,SAAS,KAAK,CAAC;AAAA,MAAC,CAAC;AAAA,IAAC,CAAC;AAAE,QAAI,IAAE,EAAE;AAAI,MAAE,UAAU,UAAU,QAAQ,OAAG;AAAC,UAAG,CAAC,GAAE,CAAC,IAAE,GAAG,EAAE,EAAE,IAAI,CAAC,GAAE,IAAE,EAAE,CAAC;AAAE,WAAG,SAAO,EAAE,gBAAc,GAAE,EAAE,KAAK,CAAC;AAAA,IAAE,CAAC;AAAE,QAAI,IAAE,KAAK,mBAAmB,CAAC;AAAE,WAAM,EAAC,OAAM,GAAE,QAAO,GAAE,SAAQ,GAAE,SAAQ,GAAE,cAAa,GAAE,WAAU,EAAC;AAAA,EAAC;AAAA,EAAC,mBAAmB,GAAE;AAAC,WAAM,EAAC,YAAW,EAAE,UAAU,MAAK,QAAO,EAAE,UAAU,SAAS,OAAO,CAACA,KAAE,OAAKA,IAAE,EAAE,IAAI,IAAE,KAAK,mBAAmB,CAAC,GAAEA,MAAG,CAAC,CAAC,GAAE,SAAQ,EAAE,UAAU,UAAU,OAAO,CAACA,KAAE,OAAKA,IAAE,EAAE,IAAI,IAAE,KAAK,mBAAmB,GAAE,EAAE,GAAG,GAAEA,MAAG,CAAC,CAAC,EAAC;AAAA,EAAC;AAAA,EAAC,mBAAmB,GAAEA,KAAE;AAAC,QAAI,IAAE,EAAE;AAAK,WAAOA,OAAG,SAAO,IAAEA,IAAE,CAAC,IAAG,EAAC,MAAK,GAAE,OAAM,EAAE,KAAI;AAAA,EAAC;AAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAI,IAAE,EAAE,EAAE;AAAO,MAAG,OAAO,EAAE,QAAM,YAAY,QAAO,EAAE,KAAKA,GAAC;AAAE,MAAG,OAAO,UAAQ,YAAY,QAAO,IAAI,OAAOA,KAAE,QAAQ,EAAE,SAAS;AAAE,QAAM,IAAI,MAAM,kFAAkF;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAIC,MAAE,MAAM,QAAQD,GAAC,IAAE,OAAO,aAAa,MAAM,MAAKA,GAAC,IAAE,GAAGA,GAAC;AAAE,SAAO,IAAEC,MAAEA,IAAE,YAAY;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE,IAAE,OAAG;AAAC,MAAI,IAAED,IAAE,CAAC;AAAE,SAAO,KAAG,OAAK,GAAG,EAAE,GAAE,CAAC,IAAEC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAED,IAAE,CAAC;AAAE,SAAO,IAAE,EAAE,IAAEC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAED,IAAE,CAAC,KAAG,CAAC,GAAE,IAAE,EAAE,KAAG,OAAK,EAAE,IAAE,EAAE,KAAG,OAAK,EAAE,IAAEC;AAAE,SAAO,OAAO,KAAG,WAAS,IAAE,SAAS,GAAE,EAAE;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,UAAO,OAAOA,OAAG,aAAWA,MAAE,GAAGA,GAAC,IAAGA,KAAE;AAAA,IAAC,KAAK,GAAG;AAAA,IAAS,KAAK,GAAG;AAAQ,aAAM;AAAA,IAAU,KAAK,GAAG;AAAA,IAAS,KAAK,GAAG;AAAA,IAAS,KAAK,GAAG;AAAA,IAAQ,KAAK,GAAG;AAAS,aAAM;AAAA,IAAQ,KAAK,GAAG;AAAQ,aAAM;AAAA,IAAO,KAAK,GAAG;AAAU,aAAM;AAAA,IAAU,KAAK,GAAG;AAAU,aAAM;AAAA,IAAS,KAAK,GAAG;AAAA,IAAa,KAAK,GAAG;AAAc,aAAM;AAAA,IAAY;AAAQ,aAAO;AAAA,EAAI;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAED,IAAE,CAAC;AAAE,SAAO,KAAG,EAAE,OAAK,EAAE,KAAK,OAAKC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAED,IAAE,CAAC;AAAE,SAAO,KAAG,EAAE,OAAK,GAAG,EAAE,IAAI,IAAEC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAED,IAAE,CAAC;AAAE,SAAO,KAAG,EAAE,QAAM,EAAE,KAAK,OAAK,EAAE,KAAK,KAAK,IAAI,OAAG,GAAG,CAAC,CAAC,IAAEC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAG,CAACA,IAAE,YAAY,QAAOA,IAAE,OAAK,OAAKA,IAAE,IAAI,IAAI,OAAG,OAAO,EAAE,QAAM,WAAS,EAAE,OAAK,SAAS,EAAE,MAAK,EAAE,CAAC,IAAE,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAED,IAAE,CAAC;AAAE,SAAO,KAAG,EAAE,QAAM,GAAG,EAAE,KAAK,IAAEC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAED,IAAE,CAAC;AAAE,SAAO,MAAI,EAAE,KAAK,KAAG,EAAE,KAAK,EAAE,SAAO,EAAE,KAAK,IAAE,EAAE,KAAK,MAAI,CAAC,GAAG,IAAI,OAAG,OAAO,KAAG,WAAS,IAAE,SAAS,GAAE,EAAE,CAAC,IAAEC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE,IAAE,OAAG;AAAC,MAAI,IAAED,IAAE,CAAC;AAAE,SAAO,KAAG,EAAE,QAAM,EAAE,KAAK,IAAE,EAAE,KAAK,EAAE,IAAI,OAAG,GAAG,GAAE,CAAC,CAAC,IAAEC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAED,IAAE,CAAC;AAAE,SAAO,KAAG,EAAE,QAAM,EAAE,KAAK,QAAM,EAAE,KAAK,MAAM,IAAI,OAAG,GAAG,CAAC,CAAC,IAAEC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAED,IAAE,CAAC;AAAE,SAAO,KAAG,EAAE,QAAM,EAAE,KAAK,IAAE,EAAE,KAAK,IAAEC;AAAC;AAAC,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE;AAAC,SAAK,OAAK,GAAE,KAAK,YAAUA,KAAE,KAAK,UAAQ,GAAE,KAAK,SAAO,CAAC,GAAE,KAAK,QAAM,CAAC,GAAE,KAAK,SAAO,EAAE,WAAW,IAAI,OAAG,KAAK,SAAS,CAAC,CAAC,GAAE,EAAE,YAAU,SAAO,KAAK,QAAM,OAAO,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,GAAE,OAAK,EAAE,CAAC,IAAE,KAAK,QAAQ,CAAC,GAAE,IAAG,CAAC,CAAC;AAAA,EAAE;AAAA,EAAC,SAAS,GAAE;AAAC,WAAO,GAAG,GAAE,KAAK,WAAU,KAAK,OAAO;AAAA,EAAC;AAAA,EAAC,QAAQ,GAAEA,KAAE;AAAC,QAAI,IAAE,KAAK,KAAK,SAAS,CAAC;AAAE,QAAG,EAAE,UAAQ,KAAK,QAAO,GAAG,GAAE,KAAK,WAAU,KAAK,OAAO;AAAE,QAAG,EAAE,KAAG,QAAM,EAAE,KAAG,KAAK,QAAO,GAAG,KAAK,KAAK,UAAS,GAAEA,GAAC;AAAE,QAAG,EAAE,KAAG,KAAK,QAAO,GAAG,KAAK,KAAK,UAAS,GAAEA,GAAC;AAAE,QAAG,EAAE,KAAG,KAAK,QAAO,GAAG,KAAK,KAAK,UAAS,GAAEA,GAAC;AAAE,QAAG,EAAE,SAAO,KAAK,QAAO,GAAG,KAAK,KAAK,UAAS,GAAEA,GAAC;AAAE,QAAG,EAAE,QAAM,KAAK,QAAO,GAAG,KAAK,KAAK,UAAS,GAAEA,GAAC;AAAE,QAAG,EAAE,QAAM,MAAK;AAAC,UAAG,EAAE,KAAK,KAAG,QAAM,EAAE,KAAK,KAAG,KAAK,QAAO,GAAG,KAAK,KAAK,UAAS,GAAEA,GAAC;AAAE,UAAG,EAAE,KAAK,KAAG,KAAK,QAAO,GAAG,KAAK,KAAK,UAAS,GAAEA,GAAC;AAAE,UAAG,EAAE,KAAK,SAAO,KAAK,QAAO,GAAG,KAAK,KAAK,UAAS,GAAEA,GAAC;AAAE,UAAG,EAAE,KAAK,KAAG,KAAK,QAAO,GAAG,KAAK,KAAK,UAAS,GAAEA,GAAC;AAAE,UAAG,EAAE,KAAK,QAAM,KAAK,QAAO,GAAG,KAAK,KAAK,UAAS,GAAEA,GAAC;AAAA,IAAC;AAAC,WAAOA;AAAA,EAAC;AAAC;AAAE,IAAI,KAAG,CAAC;AAAE,GAAG,IAAG,EAAC,iBAAgB,MAAI,IAAG,KAAI,MAAI,IAAG,MAAK,MAAI,IAAG,OAAM,MAAI,IAAG,KAAI,MAAI,IAAG,MAAK,MAAI,IAAG,KAAI,MAAI,IAAG,KAAI,MAAI,IAAG,QAAO,MAAI,IAAG,QAAO,MAAI,IAAG,MAAK,MAAI,IAAG,OAAM,MAAI,IAAG,MAAK,MAAI,IAAG,OAAM,MAAI,IAAG,OAAM,MAAI,IAAG,SAAQ,MAAI,IAAG,WAAU,MAAI,IAAG,eAAc,MAAI,IAAG,WAAU,MAAI,IAAG,aAAY,MAAI,IAAG,aAAY,MAAI,IAAG,aAAY,MAAI,IAAG,gBAAe,MAAI,IAAG,UAAS,MAAI,IAAG,YAAW,MAAI,IAAG,kBAAiB,MAAI,IAAG,eAAc,MAAI,IAAG,aAAY,MAAI,IAAG,QAAO,MAAI,IAAG,MAAK,MAAI,IAAG,MAAK,MAAI,IAAG,aAAY,MAAI,IAAG,OAAM,MAAI,IAAG,SAAQ,MAAI,IAAG,QAAO,MAAI,IAAG,UAAS,MAAI,IAAG,UAAS,MAAIF,KAAG,UAAS,MAAI,IAAG,UAAS,MAAI,IAAG,QAAO,MAAI,IAAG,QAAO,MAAI,IAAG,iBAAgB,MAAI,IAAG,QAAO,MAAI,IAAG,iBAAgB,MAAI,IAAG,KAAI,MAAI,IAAG,MAAK,MAAI,IAAG,cAAa,MAAI,IAAG,SAAQ,MAAI,IAAG,QAAO,MAAI,IAAG,eAAc,MAAI,IAAG,cAAa,MAAI,IAAG,iBAAgB,MAAI,IAAG,MAAK,MAAI,IAAG,YAAW,MAAI,IAAG,KAAI,MAAI,IAAG,UAAS,MAAI,IAAG,KAAI,MAAI,IAAG,SAAQ,MAAI,IAAG,QAAO,MAAI,IAAG,KAAI,MAAI,IAAG,qBAAoB,MAAI,IAAG,aAAY,MAAI,IAAG,OAAM,MAAI,IAAG,KAAI,MAAI,IAAG,eAAc,MAAI,IAAG,KAAI,MAAI,IAAG,YAAW,MAAI,IAAG,OAAM,MAAI,IAAG,KAAI,MAAI,IAAG,KAAI,MAAI,IAAG,MAAK,MAAI,IAAG,OAAM,MAAI,IAAG,UAAS,MAAI,IAAG,OAAM,MAAI,IAAG,QAAO,MAAI,IAAG,UAAS,MAAI,IAAG,SAAQ,MAAI,IAAG,cAAa,MAAI,IAAG,MAAK,MAAI,IAAG,MAAK,MAAI,IAAG,OAAM,MAAI,IAAG,aAAY,MAAI,IAAG,OAAM,MAAI,IAAG,UAAS,MAAI,IAAG,OAAM,MAAI,IAAG,OAAM,MAAI,IAAG,WAAU,MAAI,IAAG,MAAK,MAAI,IAAG,WAAU,MAAI,IAAG,QAAO,MAAI,IAAG,UAAS,MAAI,IAAG,4BAA2B,MAAI,IAAG,KAAI,MAAI,IAAG,OAAM,MAAI,IAAG,YAAW,MAAI,IAAG,YAAW,MAAI,IAAG,WAAU,MAAI,IAAG,YAAW,MAAI,IAAG,YAAW,MAAI,IAAG,WAAU,MAAI,IAAG,YAAW,MAAI,IAAG,QAAO,MAAI,IAAG,YAAW,MAAI,IAAG,QAAO,MAAI,IAAG,KAAI,MAAI,IAAG,SAAQ,MAAI,IAAG,WAAU,MAAI,IAAG,mBAAkB,MAAI,IAAG,SAAQ,MAAI,IAAG,MAAK,MAAI,IAAG,UAAS,MAAI,IAAG,KAAI,MAAI,IAAG,SAAQ,MAAI,IAAG,WAAU,MAAI,IAAG,KAAI,MAAI,IAAG,SAAQ,MAAI,IAAG,eAAc,MAAI,IAAG,KAAI,MAAI,IAAG,cAAa,MAAI,IAAG,aAAY,MAAI,IAAG,KAAI,MAAI,IAAG,MAAK,MAAI,IAAG,UAAS,MAAI,IAAG,QAAO,MAAI,IAAG,MAAK,MAAI,IAAG,UAAS,MAAI,IAAG,IAAG,MAAI,GAAE,cAAa,MAAI,IAAG,KAAI,MAAI,IAAG,OAAM,MAAI,IAAG,OAAM,MAAI,IAAG,OAAM,MAAI,IAAG,OAAM,MAAI,IAAG,MAAK,MAAI,IAAG,KAAI,MAAI,IAAG,OAAM,MAAI,IAAG,OAAM,MAAI,IAAG,MAAK,MAAI,IAAG,cAAa,MAAI,IAAG,aAAY,MAAI,IAAG,sBAAqB,MAAI,IAAG,MAAK,MAAI,IAAG,aAAY,MAAI,IAAG,cAAa,MAAI,IAAG,sBAAqB,MAAI,IAAG,eAAc,MAAI,IAAG,kBAAiB,MAAI,IAAG,OAAM,MAAI,IAAG,MAAK,MAAI,IAAG,YAAW,MAAI,IAAG,MAAK,MAAI,IAAG,OAAM,MAAI,IAAG,SAAQ,MAAI,GAAE,SAAQ,MAAI,IAAG,WAAU,MAAI,IAAG,WAAU,MAAI,IAAG,WAAU,MAAI,IAAG,WAAU,MAAI,IAAG,MAAK,MAAI,IAAG,OAAM,MAAI,IAAG,OAAM,MAAI,IAAG,QAAO,MAAI,IAAG,WAAU,MAAI,IAAG,cAAa,MAAI,IAAG,MAAK,MAAI,IAAG,iBAAgB,MAAI,IAAG,gBAAe,MAAI,IAAG,SAAQ,MAAI,IAAG,MAAK,MAAI,IAAG,QAAO,MAAI,IAAG,KAAI,MAAI,IAAG,MAAK,MAAI,IAAG,OAAM,MAAI,IAAG,SAAQ,MAAI,IAAG,SAAQ,MAAI,IAAG,SAAQ,MAAI,IAAG,SAAQ,MAAI,IAAG,SAAQ,MAAI,IAAG,UAAS,MAAI,IAAG,gBAAe,MAAI,IAAG,QAAO,MAAI,IAAG,eAAc,MAAI,IAAG,UAAS,MAAI,IAAG,OAAM,MAAI,IAAG,MAAK,MAAI,IAAG,QAAO,MAAI,IAAG,mBAAkB,MAAI,IAAG,SAAQ,MAAI,IAAG,OAAM,MAAI,IAAG,MAAK,MAAI,IAAG,cAAa,MAAI,IAAG,QAAO,MAAI,IAAG,KAAI,MAAI,IAAG,KAAI,MAAI,IAAG,KAAI,MAAI,IAAG,MAAK,MAAI,IAAG,QAAO,MAAI,IAAG,UAAS,MAAI,IAAG,UAAS,MAAI,IAAG,UAAS,MAAI,IAAG,UAAS,MAAI,IAAG,UAAS,MAAI,IAAG,UAAS,MAAI,IAAG,qBAAoB,MAAI,IAAG,MAAK,MAAI,IAAG,MAAK,MAAI,IAAG,WAAU,MAAI,IAAG,iBAAgB,MAAI,IAAG,QAAO,MAAI,IAAG,oBAAmB,MAAI,IAAG,SAAQ,MAAI,IAAG,YAAW,MAAI,IAAG,UAAS,MAAI,IAAG,OAAM,MAAI,IAAG,YAAW,MAAI,IAAG,OAAM,MAAI,IAAG,WAAU,MAAI,GAAE,CAAC;AAAE,IAAI,KAAG,CAACC,KAAE,GAAEC,KAAE,IAAE,OAAK;AAAC,UAAOD,IAAE,IAAG;AAAA,IAAC,KAAI;AAAA,IAAU,KAAI;AAAA,IAAQ,KAAI;AAAM,aAAM,CAAC,EAAE,IAAI,EAAE,KAAIA,KAAE,GAAEC,GAAC,GAAE,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAO,aAAM,CAAC,EAAE,KAAK,EAAE,WAAUD,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAA,IAAW,KAAI;AAAM,aAAM,CAAC,EAAE,IAAI,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAM,aAAM,CAAC,EAAE,IAAI,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAA,IAAU,KAAI;AAAM,aAAM,CAAC,EAAE,IAAI,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAW,aAAM,CAAC,EAAE,SAAS,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAW,aAAM,CAAC,EAAE,SAAS,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAM,aAAM,CAAC,EAAE,IAAI,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAU,aAAM,CAAC,EAAE,QAAQ,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAU,aAAM,CAAC,EAAE,QAAQ,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAM,aAAM,CAAC,EAAE,IAAI,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAoB,aAAM,CAAC,EAAE,kBAAkB,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE;AAAQ,YAAM,UAAU,aAAaD,IAAE,EAAE,qBAAqB;AAAA,EAAC;AAAC;AAAE,IAAI,KAAG,CAACA,KAAE,GAAEC,KAAE,IAAE,OAAK;AAAC,UAAOD,IAAE,IAAG;AAAA,IAAC,KAAI;AAAA,IAAM,KAAI;AAAa,aAAM,CAAC,EAAE,IAAI,EAAE,KAAIA,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAO,aAAM,CAAC,EAAE,KAAK,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAQ,aAAM,CAAC,EAAE,MAAM,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAO,aAAM,CAAC,EAAE,KAAK,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAQ,aAAM,CAAC,EAAE,MAAM,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAO,aAAM,CAAC,EAAE,KAAK,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAQ,aAAM,CAAC,EAAE,MAAM,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAQ,aAAM,CAAC,EAAE,MAAM,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAO,aAAM,CAAC,EAAE,KAAK,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAU,aAAM,CAAC,EAAE,QAAQ,EAAE,QAAOD,KAAE,GAAEC,GAAC,GAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAM,aAAM,CAAC,EAAE,IAAI,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAO,aAAM,CAAC,EAAE,KAAK,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAM,aAAM,CAAC,EAAE,IAAI,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAM,aAAM,CAAC,EAAE,IAAI,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAM,aAAM,CAAC,EAAE,IAAI,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAQ,aAAM,CAAC,EAAE,MAAM,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAQ,aAAM,CAAC,EAAE,MAAM,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAM,aAAM,CAAC,EAAE,IAAI,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAQ,aAAM,CAAC,EAAE,MAAM,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAO,aAAM,CAAC,EAAE,KAAK,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAM,aAAM,CAAC,EAAE,IAAI,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAa,aAAM,CAAC,EAAE,WAAW,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAO,aAAM,CAAC,EAAE,KAAK,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAO,aAAM,CAAC,EAAE,KAAK,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAQ,aAAM,CAAC,EAAE,MAAM,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAO,aAAM,CAAC,EAAE,KAAK,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAU,aAAM,CAAC,EAAE,QAAQ,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAM,aAAM,CAAC,EAAE,IAAI,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAO,aAAM,CAAC,EAAE,KAAK,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAO,aAAM,CAAC,EAAE,KAAK,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAW,aAAM,CAAC,EAAE,SAAS,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAO,aAAM,CAAC,EAAE,KAAK,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAS,aAAM,CAAC,EAAE,OAAO,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAO,aAAM,CAAC,EAAE,KAAK,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAM,aAAM,CAAC,EAAE,IAAI,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAc,aAAM,CAAC,EAAE,YAAY,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,EAAE,gBAAeD,KAAE,GAAEC,GAAC,GAAE,EAAE,gBAAeD,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAQ,aAAM,CAAC,EAAE,MAAM,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAQ,aAAM,CAAC,EAAE,MAAM,GAAGD,IAAE,WAAW,CAAC,GAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAY,aAAM,CAAC,EAAE,UAAU,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,EAAE,SAAQD,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAQ,aAAM,CAAC,EAAE,MAAM,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,EAAE,SAAQD,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAQ,aAAM,CAAC,EAAE,MAAM,GAAGD,IAAE,WAAW,CAAC,GAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAQ,aAAM,CAAC,EAAE,MAAM,GAAGD,IAAE,WAAW,CAAC,GAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAW,aAAM,CAAC,EAAE,SAAS,GAAGD,IAAE,WAAW,CAAC,GAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE;AAAQ,YAAM,UAAU,aAAaD,IAAE,EAAE,qBAAqB;AAAA,EAAC;AAAC;AAAE,SAAS,GAAGA,KAAE,GAAEC,MAAE,IAAG;AAAC,MAAG,EAAE,OAAOD,OAAG,YAAU,OAAO,KAAG,WAAU;AAAC,MAAE,OAAOA,IAAE,WAAS,EAAE,QAAO,MAAIC,MAAE,WAAWD,GAAC,QAAQ,CAAC,aAAa;AAAE,aAAQ,IAAE,GAAE,IAAEA,IAAE,QAAO,KAAI;AAAC,UAAI,IAAEA,IAAE,CAAC,GAAE,IAAE,EAAE,CAAC;AAAE,QAAE,OAAO,IAAE,KAAG,IAAE,KAAG,MAAI,GAAE,MAAIC,MAAE,WAAWD,GAAC,QAAQ,CAAC,aAAa;AAAA,IAAC;AAAA,EAAC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAM,EAAE,OAAOA,OAAG,YAAUA,IAAE,KAAK,OAAG,IAAE,CAAC;AAAE;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,GAAGD,KAAEC,GAAC,GAAE,IAAE,CAAC,GAAG,CAAC;AAAE,MAAG,KAAG,EAAE,WAAS,EAAE,OAAM,IAAI,MAAM,qFAAqF,CAAC,EAAE;AAAE,MAAG,KAAG,EAAE,QAAQ,OAAG;AAAC,QAAE,GAAG,EAAE,OAAM,CAAC;AAAA,EAAC,CAAC,GAAE,CAAC,GAAG,CAAC,EAAE,OAAM,IAAI,MAAM,mCAAmC,CAAC,EAAE;AAAE,SAAO;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAG,OAAOA,OAAG,SAAS,QAAO;AAAE,MAAG,OAAO,KAAG,SAAS,QAAOA;AAAE,MAAGA,IAAE,WAAS,EAAE,OAAO,OAAM,IAAI,MAAM,oCAAoCA,GAAC,QAAQ,CAAC,EAAE;AAAE,MAAIC,MAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAED,IAAE,QAAO,EAAE,GAAE;AAAC,QAAI,IAAEA,IAAE,CAAC,GAAE,IAAE,EAAE,CAAC;AAAE,QAAG,KAAG,KAAG,KAAG,KAAG,MAAI,EAAE,OAAM,IAAI,MAAM,oCAAoCA,GAAC,QAAQ,CAAC,EAAE;AAAE,IAAAC,IAAE,CAAC,IAAE,KAAG,IAAE,IAAE;AAAA,EAAC;AAAC,SAAOA;AAAC;AAAC,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE,GAAE,GAAE,GAAE,GAAE;AAAC,SAAK,OAAK,GAAE,KAAK,QAAMA,KAAE,KAAK,UAAQ,GAAE,KAAK,eAAa,GAAE,KAAK,yBAAuB,GAAE,KAAK,cAAY,GAAE,KAAK,iBAAe,GAAE,KAAK,UAAQ,CAAC,GAAE,KAAK,UAAQ,OAAG,KAAK,WAAS,GAAG,CAAC,GAAE,GAAG,KAAK,QAAQ;AAAA,EAAC;AAAA,EAAC,IAAI,KAAI;AAAC,WAAO,KAAK,SAAS;AAAA,EAAE;AAAA,EAAC,IAAI,SAAQ;AAAC,WAAO,KAAK;AAAA,EAAO;AAAA,EAAC,cAAc,GAAE;AAAC,SAAK,QAAQ,QAAQ,CAAAA,QAAG;AAAC,OAAC,KAAG,QAAM,CAAC,EAAE,IAAIA,IAAE,OAAO,EAAE,MAAIA,IAAE,OAAO,QAAQ;AAAA,IAAC,CAAC,GAAE,KAAK,UAAQ,CAAC,GAAE,KAAK,UAAQ,MAAG,KAAK,SAAS,QAAQ;AAAA,EAAC;AAAA,EAAC,OAAM;AAAC,WAAO,KAAK,QAAQ;AAAA,EAAM;AAAA,EAAC,KAAK,GAAE;AAAC,QAAG,KAAK,QAAQ,OAAM,IAAI,MAAM,eAAe,KAAK,IAAI,2BAA2B;AAAE,QAAG,IAAE,KAAG,KAAG,KAAK,KAAK,EAAE,OAAM,IAAI,MAAM,4BAA4B,CAAC,wBAAwB,KAAK,KAAK,CAAC,EAAE;AAAE,QAAIA,MAAE,KAAK,QAAQ,CAAC;AAAE,QAAGA,IAAE,QAAQ,OAAM,IAAI,MAAM,eAAe,KAAK,IAAI,0BAA0B,CAAC,sGAAsG;AAAE,WAAO,KAAK,mBAAiBA,IAAE,UAAQ,OAAIA,IAAE,OAAK,MAAGA,IAAE;AAAA,EAAM;AAAA,EAAC,SAAS,GAAE;AAAC,WAAO,EAAE,IAAI,CAAAA,QAAG,KAAK,KAAKA,GAAC,CAAC;AAAA,EAAC;AAAA,EAAC,MAAM,GAAEA,KAAE;AAAC,QAAG,KAAK,QAAQ,OAAM,IAAI,MAAM,eAAe,KAAK,IAAI,2BAA2B;AAAE,QAAG,IAAE,KAAG,CAAC,KAAK,eAAa,KAAG,KAAK,QAAQ,OAAM,IAAI,MAAM,2BAA2B,CAAC,8CAA8C,KAAK,OAAO,EAAE;AAAE,QAAI,IAAE,KAAK,QAAQ,CAAC,KAAG,CAAC;AAAE,QAAGA,IAAE,UAAQ,KAAK,MAAM,OAAM,IAAI,MAAM,eAAe,KAAK,IAAI,0CAA0C,CAAC;AAAA,uCACnpuEA,IAAE,KAAK,8BAA8B,KAAK,KAAK,GAAG;AAAE,QAAG,KAAK,KAAK,MAAI,MAAI,KAAK,gBAAc,QAAM,KAAK,aAAa,WAAS,OAAK,KAAK,eAAaA,IAAE,QAAO,GAAG,KAAK,cAAaA,IAAE,OAAM,eAAe,KAAK,IAAI,0CAA0C,CAAC,GAAG,GAAE,EAAE,KAAK,OAAM,IAAI,MAAM,eAAe,KAAK,IAAI,0CAA0C,CAAC,qCAAqC;AAAE,QAAG,EAAE,QAAQ,OAAM,IAAI,MAAM,eAAe,KAAK,IAAI,0CAA0C,CAAC,wCAAwC;AAAE,MAAE,SAAOA,KAAE,GAAGA,GAAC,GAAE,EAAE,UAAQ,MAAG,KAAK,QAAQ,CAAC,IAAE;AAAA,EAAC;AAAA,EAAC,UAAU,GAAEA,KAAE;AAAC,QAAG,EAAE,WAASA,IAAE,OAAO,OAAM,IAAI,MAAM,eAAe,KAAK,IAAI,8DAA8D,EAAE,MAAM,qCAAqCA,IAAE,MAAM,GAAG;AAAE,MAAE,QAAQ,CAAC,GAAE,MAAI,KAAK,MAAM,GAAEA,IAAE,CAAC,CAAC,CAAC;AAAA,EAAC;AAAA,EAAC,OAAO,GAAEA,KAAE;AAAC,QAAGA,OAAGA,QAAI,KAAK,MAAM,OAAM,IAAI,MAAM,wBAAwB,KAAK,KAAK,+BAA+BA,GAAC,EAAE;AAAE,QAAG,EAAE,KAAE,EAAE,MAAM,GAAE,KAAK,KAAK,CAAC;AAAA,SAAM;AAAC,UAAE,CAAC;AAAE,eAAQ,IAAE,GAAE,IAAE,KAAK,KAAK,GAAE,IAAI,GAAE,KAAK,CAAC;AAAA,IAAC;AAAC,QAAG,EAAE,WAAS,EAAE,QAAO,GAAG,CAAC,GAAE,CAAC,CAAC,EAAE,OAAO,KAAK,YAAY,CAAC;AAAE,QAAI,IAAE,KAAK,SAAS,CAAC;AAAE,WAAO,GAAG,KAAK,cAAa,EAAE,CAAC,EAAE,OAAM,8BAA8B,GAAE,GAAG,GAAE,CAAC;AAAA,EAAC;AAAA,EAAC,OAAO,GAAE;AAAC,QAAG,KAAG,MAAI,KAAK,MAAM,OAAM,IAAI,MAAM,wBAAwB,KAAK,KAAK,+BAA+B,CAAC,EAAE;AAAE,QAAG,KAAK,KAAK,MAAI,EAAE,QAAO,GAAG,CAAC,GAAE,CAAC,CAAC,EAAE,OAAO,KAAK,YAAY,CAAC;AAAE,QAAIA,MAAE,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,KAAK,KAAK,GAAE,IAAI,CAAAA,IAAE,KAAK,CAAC;AAAE,QAAI,IAAE,KAAK,SAASA,GAAC;AAAE,WAAO,GAAG,KAAK,cAAa,EAAE,CAAC,EAAE,OAAM,mDAAmD,KAAK,YAAY,4BAA4B,EAAE,CAAC,EAAE,KAAK,GAAG,GAAE,GAAG,GAAE,CAAC;AAAA,EAAC;AAAA,EAAC,QAAQ,GAAEA,KAAE;AAAC,QAAGA,IAAE,UAAQ,KAAK,MAAM,OAAM,IAAI,MAAM,wBAAwB,KAAK,KAAK,yBAAyBA,IAAE,KAAK,EAAE;AAAE,QAAG,EAAE,WAASA,IAAE,MAAM,CAAC,EAAE,OAAM,IAAI,MAAM,sDAAsD,EAAE,MAAM,QAAQA,IAAE,MAAM,CAAC,CAAC,EAAE;AAAE,QAAI,IAAE,KAAK,IAAI,GAAG,CAAC;AAAE,QAAG,CAAC,KAAK,eAAa,KAAG,KAAK,QAAQ,OAAM,IAAI,MAAM,mCAAmC,CAAC,SAAS,KAAK,OAAO,GAAG;AAAE,SAAK,UAAU,GAAE,GAAGA,KAAE,CAAC,CAAC;AAAA,EAAC;AAAA,EAAC,MAAM,GAAEA,KAAE;AAAC,QAAGA,IAAE,UAAQ,KAAK,MAAM,OAAM,IAAI,MAAM,wBAAwB,KAAK,KAAK,yBAAyBA,IAAE,KAAK,EAAE;AAAE,QAAI,IAAE,GAAE,IAAE,EAAE,IAAI,QAAI,KAAG,GAAE,EAAE;AAAE,QAAG,MAAIA,IAAE,MAAM,CAAC,EAAE,OAAM,IAAI,MAAM;AAAA;AAAA,UAE3pE,CAAC,4BAA4BA,IAAE,KAAK,EAAE;AAAE,QAAG,CAAC,KAAK,eAAa,EAAE,WAAS,KAAK,QAAQ,OAAM,IAAI,MAAM,2DAA2D,KAAK,OAAO,QAAQ,EAAE,MAAM,gEAAgE;AAAE,QAAI,IAAE,MAAI,IAAE,IAAEA,IAAE,OAAK,GAAE,IAAE,CAAC;AAAE,OAAG,MAAI;AAAC,MAAAA,MAAE,EAAEA,KAAE,CAAC,GAAE,GAAE,CAAC,CAAC;AAAE,eAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE,GAAE;AAAC,YAAI,IAAE,CAAC,GAAE,MAAI,IAAE,IAAE,EAAE,IAAE,CAAC,GAAE,CAAC,GAAE,IAAE,CAAC,GAAE,EAAE,CAAC,GAAE,CAAC;AAAE,UAAE,CAAC,IAAE,EAAE,GAAGA,KAAE,GAAE,CAAC,GAAE,KAAK,YAAY;AAAA,MAAC;AAAC,aAAO;AAAA,IAAC,CAAC;AAAE,QAAI,IAAE,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,IAAI,GAAE,CAAC,IAAE;AAAE,SAAK,UAAU,GAAE,CAAC;AAAA,EAAC;AAAC;AAAE,IAAI,KAAG,MAAMD,GAAC;AAAA,EAAC,IAAI,KAAI;AAAC,WAAO,KAAK,SAAS;AAAA,EAAE;AAAA,EAAC,YAAY,GAAEC,KAAE,GAAE,IAAE,IAAG;AAAC,SAAK,UAAQ,GAAE,KAAK,eAAaA,KAAE,KAAK,eAAa,GAAE,KAAG,QAAM,EAAE,QAAQ,OAAG;AAAC,UAAG,MAAI,EAAE,MAAM,OAAM,IAAI,MAAM,mCAAmC,CAAC,uBAAuB,EAAE,KAAK,EAAE;AAAE,SAAGA,KAAE,EAAE,OAAM,6BAA6B,GAAE,GAAG,CAAC;AAAA,IAAC,CAAC,GAAE,KAAK,WAAS,GAAG,CAAC,GAAE,KAAK,iBAAe,GAAE,GAAG,KAAK,QAAQ;AAAA,EAAC;AAAA,EAAC,OAAM;AAAC,WAAO,IAAID,GAAE,CAAC,GAAG,KAAK,OAAO,GAAE,KAAK,cAAa,KAAK,YAAY;AAAA,EAAC;AAAA,EAAC,cAAc,GAAE;AAAC,SAAK,QAAQ,QAAQ,CAAAC,QAAG;AAAC,OAAC,KAAG,QAAM,CAAC,EAAE,IAAIA,IAAE,EAAE,MAAIA,IAAE,QAAQ;AAAA,IAAC,CAAC,GAAE,KAAK,QAAQ,SAAO,GAAE,KAAK,SAAS,QAAQ;AAAA,EAAC;AAAA,EAAC,OAAM;AAAC,WAAO,KAAK,QAAQ;AAAA,EAAM;AAAA,EAAC,MAAM,GAAEA,KAAE,IAAE,IAAG;AAAC,QAAGA,QAAI,KAAK,aAAa,OAAM,IAAI,MAAM,mCAAmCA,GAAC,uBAAuB,KAAK,YAAY,EAAE;AAAE,QAAG,MAAI,MAAI,KAAK,QAAQ,WAAS,EAAE,OAAM,IAAI,MAAM,kCAAkC,CAAC,iCAAiC,KAAK,QAAQ,MAAM,YAAY;AAAE,OAAG,GAAE,KAAK,cAAa,6BAA6B;AAAE,QAAI,IAAE,GAAG,KAAK,cAAa,KAAK,SAAQ,CAAC;AAAE,WAAO,GAAG,MAAI;AAAC,UAAI,IAAE,KAAK,QAAQ,IAAI,OAAG,EAAE,GAAE,CAAC,CAAC;AAAE,aAAO,GAAG,GAAE,CAAC;AAAA,IAAC,CAAC;AAAA,EAAC;AAAA,EAAC,QAAQ,GAAEA,KAAE;AAAC,QAAGA,QAAI,KAAK,aAAa,OAAM,IAAI,MAAM,mCAAmCA,GAAC,uBAAuB,KAAK,YAAY,EAAE;AAAE,QAAG,KAAK,KAAK,MAAI,EAAE,OAAM,IAAI,MAAM,mCAAmC;AAAE,QAAI,IAAE,GAAG,KAAK,cAAa,KAAK,SAAQ,CAAC,GAAE,IAAE,KAAK,QAAQ,IAAI;AAAE,WAAO,EAAE,OAAK,OAAG,GAAG,EAAE,OAAM,GAAE,6BAA6B,GAAE,EAAE,GAAE,CAAC;AAAA,EAAC;AAAA,EAAC,SAAS,GAAE;AAAC,QAAG,EAAE,UAAQ,KAAK,aAAa,OAAM,IAAI,MAAM,mCAAmC,EAAE,KAAK,uBAAuB,KAAK,YAAY,EAAE;AAAE,QAAG,GAAG,EAAE,OAAM,KAAK,cAAa,6BAA6B,GAAE,KAAK,mBAAiB,KAAK,KAAK,EAAE,OAAM,IAAI,MAAM,0CAA0C;AAAE,OAAG,CAAC,GAAE,KAAK,QAAQ,KAAK,CAAC;AAAA,EAAC;AAAA,EAAC,OAAO,GAAE;AAAC,QAAG,IAAE,EAAE,OAAM,IAAI,MAAM,0DAA0D,CAAC,EAAE;AAAE,QAAG,KAAK,mBAAiB,MAAI,IAAE,KAAK,eAAe,OAAM,IAAI,MAAM,+BAA+B,CAAC,6BAA6B,KAAK,cAAc,GAAG;AAAE,QAAIA,MAAE,IAAID,GAAE,CAAC,GAAE,KAAK,cAAa,KAAK,cAAa,KAAK,cAAc;AAAE,IAAAC,IAAE,QAAQ,SAAO;AAAE,aAAQ,IAAE,GAAE,IAAE,KAAK,IAAI,KAAK,QAAQ,QAAO,CAAC,GAAE,EAAE,EAAE,CAAAA,IAAE,QAAQ,CAAC,IAAE,KAAK,QAAQ,CAAC;AAAE,WAAOA;AAAA,EAAC;AAAA,EAAC,QAAQ,GAAEA,KAAE,GAAE;AAAC,QAAG,MAAI,KAAK,aAAa,OAAM,IAAI,MAAM,mCAAmC,CAAC,uBAAuB,KAAK,YAAY,EAAE;AAAE,QAAG,IAAE,KAAG,IAAE,KAAK,QAAQ,OAAO,OAAM,IAAI,MAAM,4BAA4B,CAAC,mBAAmB,KAAK,QAAQ,MAAM,YAAY;AAAE,QAAG,KAAK,QAAQ,CAAC,KAAG,KAAK,OAAM,IAAI,MAAM,oBAAoB,CAAC,WAAW;AAAE,OAAG,KAAK,QAAQ,CAAC,EAAE,OAAMA,KAAE,6BAA6B;AAAE,QAAI,IAAE,GAAG,KAAK,cAAa,KAAK,SAAQA,GAAC;AAAE,WAAO,EAAE,KAAK,QAAQ,CAAC,GAAE,CAAC;AAAA,EAAC;AAAA,EAAC,QAAQ,GAAEA,KAAE;AAAC,QAAGA,IAAE,UAAQ,KAAK,aAAa,OAAM,IAAI,MAAM,mCAAmCA,IAAE,KAAK,uBAAuB,KAAK,YAAY,EAAE;AAAE,QAAG,IAAE,KAAG,KAAK,mBAAiB,MAAI,KAAG,KAAK,eAAe,OAAM,IAAI,MAAM,yBAAyB,CAAC,uBAAuB,KAAK,cAAc,YAAY;AAAE,OAAG,KAAK,cAAaA,IAAE,OAAM,6BAA6B,GAAE,GAAGA,GAAC,GAAE,KAAK,QAAQ,CAAC,KAAG,SAAO,KAAK,QAAQ,CAAC,EAAE,OAAK,QAAI,KAAK,QAAQ,CAAC,IAAEA;AAAA,EAAC;AAAA,EAAC,OAAO,GAAEA,KAAE,GAAE;AAAC,QAAGA,QAAI,KAAK,aAAa,OAAM,IAAI,MAAM,mCAAmCA,GAAC,uBAAuB,KAAK,YAAY,EAAE;AAAE,OAAG,KAAK,cAAa,GAAE,6BAA6B,GAAE,IAAE,EAAE,MAAM,GAAE,KAAK,KAAK,CAAC;AAAE,QAAI,IAAE,GAAG,KAAK,cAAa,KAAK,SAAQ,CAAC;AAAE,WAAO,EAAE,WAAS,IAAE,GAAG,CAAC,GAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,IAAE,GAAG,MAAI;AAAC,UAAI,IAAE,EAAE,IAAI,OAAG,EAAE,KAAK,QAAQ,CAAC,GAAE,CAAC,CAAC;AAAE,aAAO,GAAG,GAAE,CAAC;AAAA,IAAC,CAAC;AAAA,EAAC;AAAA,EAAC,OAAO,GAAEA,KAAE;AAAC,QAAG,KAAG,MAAI,KAAK,aAAa,OAAM,IAAI,MAAM,uBAAuB,KAAK,YAAY,+BAA+B,CAAC,EAAE;AAAE,OAAG,KAAK,cAAaA,KAAE,6BAA6B;AAAE,QAAI,IAAE,GAAG,KAAK,cAAa,KAAK,SAAQA,GAAC;AAAE,WAAO,KAAK,KAAK,MAAI,IAAE,GAAG,CAAC,GAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,IAAE,GAAG,MAAI;AAAC,UAAI,IAAE,KAAK,QAAQ,IAAI,OAAG,EAAE,GAAE,CAAC,CAAC;AAAE,aAAO,GAAG,GAAE,CAAC;AAAA,IAAC,CAAC;AAAA,EAAC;AAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAED,IAAE;AAAM,MAAGA,IAAE,MAAM,SAAO,EAAE,OAAM,IAAI,MAAM,oDAAoDA,IAAE,KAAK,EAAE;AAAE,MAAGA,IAAE,UAAQC,IAAE,OAAM,IAAI,MAAM,mCAAmCD,IAAE,KAAK,uBAAuBC,GAAC,EAAE;AAAE,MAAI,IAAED,IAAE,MAAM,MAAM,CAAC;AAAE,KAAG,GAAE,GAAE,6BAA6B;AAAE,MAAI,IAAE,GAAGA,GAAC;AAAE,SAAO,IAAI,GAAG,GAAE,GAAE,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE;AAAC,SAAO,IAAI,GAAG,CAAC,GAAED,KAAE,GAAE,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE;AAAC,MAAG,EAAE,WAASD,IAAE,MAAM,CAAC,EAAE,OAAM,IAAI,MAAM,sDAAsD,EAAE,MAAM,QAAQA,IAAE,MAAM,CAAC,CAAC,EAAE;AAAE,MAAI,IAAE,KAAK,IAAI,GAAG,CAAC;AAAE,MAAG,KAAG,QAAM,MAAI,MAAI,KAAG,EAAE,OAAM,IAAI,MAAM,mCAAmC,CAAC,SAAS,CAAC,GAAG;AAAE,MAAI,IAAE,IAAI,GAAG,CAAC,GAAEC,KAAED,IAAE,OAAM,CAAC,GAAE,IAAE,GAAGA,KAAE,CAAC;AAAE,SAAO,EAAE,QAAQ,CAAC,GAAE,MAAI;AAAC,MAAE,QAAQ,GAAE,EAAE,CAAC,CAAC;AAAA,EAAC,CAAC,GAAE;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,GAAE,IAAE,EAAE,IAAI,QAAI,KAAG,GAAE,EAAE;AAAE,MAAG,MAAID,IAAE,MAAM,CAAC,EAAE,OAAM,IAAI,MAAM;AAAA;AAAA,UAEj6J,CAAC,4BAA4BA,IAAE,KAAK,EAAE;AAAE,MAAI,IAAEA,IAAE,MAAM,MAAM,CAAC,GAAE,IAAE,GAAG,GAAEC,GAAC,GAAE,IAAE,MAAI,IAAE,IAAED,IAAE,OAAK,GAAE,IAAE,GAAG,MAAI;AAAC,QAAI,IAAE,CAAC;AAAE,IAAAA,MAAE,EAAEA,KAAE,CAAC,GAAE,GAAE,CAAC,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE,GAAE;AAAC,UAAI,IAAE,CAAC,GAAE,MAAI,IAAE,IAAE,EAAE,IAAE,CAAC,GAAE,CAAC,GAAE,IAAE,CAAC,GAAE,EAAE,CAAC,GAAE,CAAC;AAAE,QAAE,CAAC,IAAE,EAAE,GAAGA,KAAE,GAAE,CAAC,GAAE,CAAC;AAAA,IAAC;AAAC,WAAOA,IAAE,QAAQ,GAAE;AAAA,EAAC,CAAC,GAAE,IAAE,IAAI,GAAG,CAAC,GAAEC,KAAED,IAAE,OAAM,EAAE,MAAM;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,IAAI,GAAE,QAAQ,GAAE,EAAE,CAAC,CAAC;AAAE,SAAO;AAAC;AAAC,IAAI,KAAG,OAAMA,KAAE,GAAEC,QAAI;AAAC,UAAOD,IAAE,IAAG;AAAA,IAAC,KAAI;AAAA,IAAK,KAAI,eAAc;AAAC,UAAI,IAAE,EAAE,cAAaA,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,cAAaD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC;AAAE,cAAO,MAAM,EAAE,KAAK,GAAG,CAAC,IAAEA,IAAE,YAAY,CAAC,EAAE,qBAAqB,GAAEA,IAAE,gBAAeA,IAAE,aAAa,IAAEA,IAAE,YAAY,CAAC,EAAE,qBAAqB,GAAEA,IAAE,gBAAeA,IAAE,aAAa;AAAA,IAAC;AAAA,IAAC,KAAI;AAAA,IAAQ,KAAI,kBAAiB;AAAC,UAAI,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC,GAAE,IAAE,MAAMA,IAAE,YAAY,CAAC,EAAE,qBAAqB,GAAEA,IAAE,gBAAeA,IAAE,aAAa,GAAE,IAAE,EAAE,IAAI,OAAG,EAAE,EAAE,GAAE,IAAE,MAAM,EAAE,CAAC,EAAE,KAAK;AAAE,QAAE,QAAQ,OAAG;AAAC,SAAC,EAAE,QAAM,EAAE,QAAQ,EAAE,EAAE,MAAI,MAAI,EAAE,QAAQ;AAAA,MAAC,CAAC;AAAE,UAAI,IAAE;AAAE,aAAK,EAAE,CAAC,KAAG;AAAC,YAAI,IAAE;AAAE,YAAE,MAAMA,IAAE,YAAY,CAAC,EAAE,qBAAqB,GAAEA,IAAE,gBAAeA,IAAE,aAAa;AAAE,YAAI,IAAE,EAAE,IAAI,OAAG,EAAE,EAAE;AAAE,UAAE,QAAQ,OAAG;AAAC,WAAC,EAAE,QAAM,EAAE,QAAQ,EAAE,EAAE,MAAI,MAAI,EAAE,QAAQ,EAAE,EAAE,MAAI,MAAI,EAAE,QAAQ;AAAA,QAAC,CAAC;AAAE,YAAI,IAAE,MAAMA,IAAE,YAAY,CAAC,EAAE,qBAAqB,GAAEA,IAAE,gBAAeA,IAAE,aAAa;AAAE,YAAE,MAAM,EAAE,CAAC,EAAE,KAAK,GAAE,EAAE,QAAQ,OAAG;AAAC,WAAC,EAAE,QAAM,EAAE,QAAQ,EAAE,EAAE,MAAI,MAAI,EAAE,QAAQ,EAAE,EAAE,MAAI,MAAI,EAAE,QAAQ;AAAA,QAAC,CAAC;AAAA,MAAC;AAAC,aAAO;AAAA,IAAC;AAAA,IAAC,KAAI,YAAW;AAAC,UAAI,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,GAAG,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,UAAS;AAAC,UAAI,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC;AAAE,aAAO,EAAE,SAAO,IAAE,GAAG,CAAC,KAAI,MAAM,EAAE,KAAK,GAAG,CAAC,IAAE,CAAC,QAAO,CAAC,IAAE,CAAC,GAAE,MAAM;AAAA,IAAC;AAAA,IAAC,KAAI,SAAQ;AAAC,UAAI,IAAED,IAAE,WAAW,KAAK,OAAG,GAAG,GAAE,GAAEC,GAAC,MAAI,MAAM;AAAE,UAAG,GAAE;AAAC,YAAI,IAAE,GAAG,GAAE,GAAEA,GAAC;AAAE,eAAM,CAAC,GAAG,CAAC,CAAC;AAAA,MAAC;AAAC;AAAA,IAAM;AAAA,IAAC,KAAI,SAAQ;AAAC,UAAI,IAAE,EAAE,aAAYD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,UAASD,KAAE,GAAEC,GAAC;AAAE,aAAOA,IAAE,WAAW,CAAC,GAAE,CAAC,GAAG,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,QAAO;AAAC,UAAI,IAAE,EAAE,UAASD,KAAE,GAAEC,GAAC;AAAE,aAAOA,IAAE,UAAU,GAAE,CAAC,GAAG,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,iBAAgB;AAAC,UAAI,IAAE,EAAE,UAASD,KAAE,GAAEC,GAAC;AAAE,aAAOA,IAAE,cAAc,GAAE,CAAC,GAAG,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,iBAAgB;AAAC,UAAI,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,SAAQD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,gBAAeD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,eAAcD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,kBAAiBD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,0BAAyBD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC,GAAE,IAAE,IAAI,GAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,aAAOA,IAAE,eAAe,CAAC,GAAE,CAAC,EAAE,UAAS,GAAG,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,sBAAqB;AAAC,UAAI,IAAE,EAAE,iBAAgBD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,SAAQD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,UAASD,KAAE,GAAEC,GAAC,GAAE,IAAEA,IAAE,eAAe,EAAE,EAAE;AAAE,aAAO,EAAE,MAAM,GAAE,CAAC,GAAE,CAAC,EAAE,QAAQ;AAAA,IAAC;AAAA,IAAC,KAAI,qBAAoB;AAAC,UAAI,IAAE,EAAE,iBAAgBD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,SAAQD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAACA,IAAE,eAAe,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,uBAAsB;AAAC,UAAI,IAAE,EAAE,iBAAgBD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,SAAQD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAACA,IAAE,eAAe,EAAE,EAAE,EAAE,OAAO,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,wBAAuB;AAAC,UAAI,IAAE,EAAE,iBAAgBD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,UAASD,KAAE,GAAEC,GAAC,GAAE,IAAEA,IAAE,eAAe,EAAE,EAAE;AAAE,aAAO,EAAE,QAAQ,GAAE,CAAC,GAAE,CAAC,EAAE,QAAQ;AAAA,IAAC;AAAA,IAAC,KAAI,uBAAsB;AAAC,UAAI,IAAE,EAAE,iBAAgBD,KAAE,GAAEC,GAAC,GAAE,IAAEA,IAAE,eAAe,EAAE,EAAE,GAAE,IAAE,EAAE,SAAQD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,OAAO,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,sBAAqB;AAAC,UAAI,IAAE,EAAE,iBAAgBD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,UAASD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC,GAAE,IAAEA,IAAE,eAAe,EAAE,EAAE;AAAE,aAAO,EAAE,MAAM,GAAE,CAAC,GAAE,CAAC,EAAE,QAAQ;AAAA,IAAC;AAAA,IAAC,KAAI,qBAAoB;AAAC,UAAI,IAAE,EAAE,iBAAgBD,KAAE,GAAEC,GAAC,GAAE,IAAEA,IAAE,eAAe,EAAE,EAAE;AAAE,aAAM,CAAC,GAAG,EAAE,KAAK,GAAE,OAAO,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,sBAAqB;AAAC,UAAI,IAAE,EAAE,iBAAgBD,KAAE,GAAEC,GAAC,GAAE,IAAEA,IAAE,eAAe,EAAE,EAAE;AAAE,aAAO,EAAE,cAAc,GAAE,CAAC,EAAE,QAAQ;AAAA,IAAC;AAAA,IAAC,KAAI,qBAAoB;AAAC,UAAI,IAAE,EAAE,gBAAeD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,SAAQD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,UAASD,KAAE,GAAEC,GAAC,GAAE,IAAEA,IAAE,cAAc,EAAE,EAAE;AAAE,aAAO,EAAE,QAAQ,GAAE,CAAC,GAAE,CAAC,EAAE,QAAQ;AAAA,IAAC;AAAA,IAAC,KAAI,qBAAoB;AAAC,UAAI,IAAE,EAAE,gBAAeD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,SAAQD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,gBAAeD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,gBAAeD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAACA,IAAE,cAAc,EAAE,EAAE,EAAE,QAAQ,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI;AAAA,IAAsB,KAAI,qBAAoB;AAAC,UAAI,IAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,UAASD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,gBAAeD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,eAAcD,KAAE,GAAEC,GAAC,GAAE,IAAE,GAAG,GAAE,GAAE,GAAE,CAAC;AAAE,aAAOA,IAAE,cAAc,CAAC,GAAE,CAAC,EAAE,QAAQ;AAAA,IAAC;AAAA,IAAC,KAAI;AAAA,IAAoB,KAAI,mBAAkB;AAAC,UAAI,IAAE,EAAE,gBAAeD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,gBAAeD,KAAE,GAAEC,GAAC,GAAE;AAAE,MAAAD,IAAE,OAAK,sBAAoB,IAAE,gBAAc,IAAE;AAAiB,UAAI,IAAE,EAAE,GAAEA,KAAE,GAAEC,GAAC,GAAE,IAAED,IAAE,OAAK,sBAAoB,KAAG,GAAE,IAAE,GAAG,GAAE,GAAE,GAAE,CAAC;AAAE,aAAOC,IAAE,cAAc,CAAC,GAAE,CAAC,EAAE,QAAQ;AAAA,IAAC;AAAA,IAAC,KAAI,oBAAmB;AAAC,UAAI,IAAE,EAAE,gBAAeD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,gBAAeD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,gBAAeD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAACA,IAAE,cAAc,EAAE,EAAE,EAAE,OAAO,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,mBAAkB;AAAC,UAAI,IAAE,EAAE,gBAAeD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,gBAAeD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,gBAAeD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,eAAcD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAACA,IAAE,cAAc,EAAE,EAAE,EAAE,MAAM,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,wBAAuB;AAAC,UAAI,IAAE,EAAE,UAASD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,gBAAeD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,gBAAeD,KAAE,GAAEC,GAAC,GAAE,IAAE,GAAG,GAAE,GAAE,CAAC;AAAE,aAAOA,IAAE,cAAc,CAAC,GAAE,CAAC,EAAE,QAAQ;AAAA,IAAC;AAAA,IAAC,KAAI;AAAA,IAAmB,KAAI,sBAAqB;AAAC,UAAI,IAAE,EAAE,gBAAeD,KAAE,GAAEC,GAAC,GAAE,IAAEA,IAAE,cAAc,EAAE,EAAE,GAAE,IAAE,EAAE,SAAQD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,gBAAeD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,OAAO,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,sBAAqB;AAAC,UAAI,IAAE,EAAE,gBAAeD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,UAASD,KAAE,GAAEC,GAAC,GAAE,IAAEA,IAAE,cAAc,EAAE,EAAE;AAAE,aAAO,EAAE,SAAS,CAAC,GAAE,CAAC,EAAE,QAAQ;AAAA,IAAC;AAAA,IAAC,KAAI,qBAAoB;AAAC,UAAI,IAAE,EAAE,gBAAeD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,gBAAeD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,gBAAeD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAACA,IAAE,cAAc,EAAE,EAAE,EAAE,QAAQ,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,mBAAkB;AAAC,UAAI,IAAE,EAAE,UAASD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,gBAAeD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC,GAAE,IAAE,GAAG,GAAE,GAAE,CAAC;AAAE,aAAOA,IAAE,cAAc,CAAC,GAAE,CAAC,EAAE,QAAQ;AAAA,IAAC;AAAA,IAAC,KAAI,oBAAmB;AAAC,UAAI,IAAE,EAAE,gBAAeD,KAAE,GAAEC,GAAC,GAAE,IAAEA,IAAE,cAAc,EAAE,EAAE;AAAE,aAAM,CAAC,GAAG,EAAE,KAAK,GAAE,OAAO,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,oBAAmB;AAAC,UAAI,IAAE,EAAE,gBAAeD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC,GAAE,IAAEA,IAAE,cAAc,EAAE,EAAE,EAAE,OAAO,CAAC;AAAE,aAAOA,IAAE,cAAc,CAAC,GAAE,CAAC,EAAE,QAAQ;AAAA,IAAC;AAAA,IAAC;AAAQ,YAAM,UAAU,aAAaD,IAAE,EAAE,qBAAqB;AAAA,EAAC;AAAC;AAAE,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAG,CAAC,GAAE,CAAC,IAAE,EAAE,YAAWD,KAAE,GAAEC,GAAC,GAAE,IAAE,MAAI,WAAU,IAAE,CAAC,GAAE,IAAE,MAAI,SAAQ,IAAE,MAAI,kBAAiB,IAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC;AAAE,MAAG,GAAE;AAAC,QAAG,KAAG,MAAI,EAAE,OAAM,IAAI,MAAM,uGAAuG;AAAE,QAAG,CAAC,KAAG,KAAG,MAAI,EAAE,OAAM,IAAI,MAAM,kFAAkF;AAAA,EAAC;AAAC,MAAG,EAAE,OAAM,IAAI,MAAM,sEAAsE;AAAE,MAAI,IAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC,GAAE,IAAE,GAAGD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,cAAaD,KAAE,GAAEC,GAAC,EAAE,YAAY,GAAE,IAAE,EAAE,aAAYD,KAAE,GAAEC,GAAC,GAAE,CAAC,GAAE,CAAC,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC;AAAE,QAAI,IAAE,GAAE,IAAE;AAAQ,MAAI,IAAE,EAAE,kBAAiBD,KAAE,GAAEC,GAAC;AAAE,SAAM,EAAC,QAAO,GAAE,KAAI,GAAE,YAAW,GAAE,WAAU,GAAE,SAAQ,GAAE,UAAS,GAAE,gBAAe,GAAE,gBAAe,EAAC;AAAC;AAAC,IAAI,KAAG,CAACD,KAAE,GAAEC,KAAE,IAAE,OAAK;AAAC,UAAOD,IAAE,IAAG;AAAA,IAAC,KAAI,UAAS;AAAC,UAAI,IAAE,EAAE,UAASA,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,OAAMD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,cAAaD,KAAE,GAAEC,GAAC,EAAE,YAAY,GAAE,IAAE,EAAE,YAAWD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,OAAO,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,EAAE,UAASD,KAAE,GAAEC,GAAC,GAAE,GAAE,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,UAAS;AAAC,UAAI,IAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC,GAAE,IAAE,GAAGD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,cAAaD,KAAE,GAAEC,GAAC,EAAE,YAAY,GAAE,IAAE,EAAE,aAAYD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,OAAO,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,EAAE,UAASD,KAAE,GAAEC,GAAC,GAAE,CAAC,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,GAAE,GAAE,GAAE,CAAC,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,gBAAe;AAAC,UAAG,EAAC,QAAO,GAAE,KAAI,GAAE,YAAW,GAAE,WAAU,GAAE,SAAQ,GAAE,UAAS,GAAE,gBAAe,GAAE,gBAAe,EAAC,IAAE,GAAGD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,MAAM,OAAO,EAAC,GAAE,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,QAAO,EAAE,UAASD,KAAE,GAAEC,GAAC,GAAE,SAAQ,CAAC,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,GAAE,KAAI,GAAE,YAAW,GAAE,WAAU,CAAC,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,GAAE,MAAK,GAAE,YAAW,GAAE,wBAAuB,GAAE,gBAAe,EAAC,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,8BAA6B;AAAC,UAAG,EAAC,QAAO,GAAE,KAAI,GAAE,YAAW,GAAE,WAAU,GAAE,SAAQ,GAAE,UAAS,GAAE,gBAAe,GAAE,gBAAe,EAAC,IAAE,GAAGD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,MAAM,gBAAgB,EAAC,GAAE,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,QAAO,EAAE,UAASD,KAAE,GAAEC,GAAC,GAAE,SAAQ,CAAC,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,GAAE,KAAI,GAAE,YAAW,GAAE,WAAU,CAAC,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,GAAE,MAAK,GAAE,YAAW,GAAE,wBAAuB,GAAE,gBAAe,EAAC,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI;AAAA,IAAsB,KAAI,mBAAkB;AAAC,UAAI,IAAE,EAAE,eAAcD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC,GAAE,IAAE,GAAGD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,gBAAgB,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,EAAE,UAASD,KAAE,GAAEC,GAAC,GAAE,GAAE,CAAC,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI;AAAA,IAAwB,KAAI,mBAAkB;AAAC,UAAI,IAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC,GAAE,IAAE,GAAGD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,aAAYD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,cAAaD,KAAE,GAAEC,GAAC,EAAE,YAAY;AAAE,aAAM,CAAC,EAAE,gBAAgB,EAAE,SAAQD,KAAE,GAAEC,GAAC,GAAE,EAAE,UAASD,KAAE,GAAEC,GAAC,GAAE,CAAC,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,GAAE,GAAE,GAAE,CAAC,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,UAAS;AAAC,UAAI,IAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,OAAMD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,cAAaD,KAAE,GAAEC,GAAC,EAAE,YAAY,GAAE,IAAE,EAAE,aAAYD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,OAAO,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,EAAE,UAASD,KAAE,GAAEC,GAAC,GAAE,CAAC,EAAE,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,GAAE,GAAE,GAAE,CAAC,EAAE,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,WAAU;AAAC,UAAI,IAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,OAAMD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,cAAaD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,QAAQ,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,CAAC,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,GAAE,CAAC,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,WAAU;AAAC,UAAI,IAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,OAAMD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,cAAaD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,QAAQ,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,CAAC,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,GAAE,CAAC,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,qBAAoB;AAAC,UAAI,IAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,OAAMD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,cAAaD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,uBAAsBD,KAAE,GAAEC,GAAC,GAAE,EAAC,QAAO,GAAE,SAAQ,EAAC,IAAE,EAAE,kBAAkB,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,CAAC,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,GAAE,CAAC,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,GAAE,GAAE,CAAC;AAAE,aAAM,CAAC,GAAE,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,aAAY;AAAC,UAAI,IAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,OAAMD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,cAAaD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,UAAU,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,CAAC,EAAE,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,GAAE,CAAC,EAAE,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,aAAY;AAAC,UAAI,IAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,OAAMD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,cAAaD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,UAAU,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,CAAC,EAAE,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,GAAE,CAAC,EAAE,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,cAAa;AAAC,UAAI,IAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,OAAMD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,aAAYD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC;AAAE,aAAM,CAAC,EAAE,WAAW,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,EAAE,UAASD,KAAE,GAAEC,GAAC,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,MAAM,CAAC;AAAA,IAAC;AAAA,IAAC;AAAQ,YAAM,UAAU,aAAaD,IAAE,EAAE,qBAAqB;AAAA,EAAC;AAAC;AAAE,IAAI,KAAG,CAACA,KAAE,GAAEC,KAAE,IAAE,OAAK;AAAC,UAAOD,IAAE,IAAG;AAAA,IAAC,KAAI,QAAO;AAAC,UAAI,IAAE,EAAE,SAAQA,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,SAAQD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,SAAQD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,KAAK,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,YAAW;AAAC,UAAI,IAAE,EAAE,SAAQD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,OAAMD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,SAAS,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,eAAc;AAAC,UAAI,IAAE,EAAE,UAASD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,cAAaD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,YAAY,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,UAAS;AAAC,UAAI,IAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,SAAQD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,YAAWD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,SAAQD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,OAAO,GAAE,GAAE,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI;AAAO,aAAM,CAAC,EAAE,KAAK,EAAE,SAAQD,KAAE,GAAEC,GAAC,GAAE,EAAE,SAAQD,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAW,aAAM,CAAC,EAAE,SAAS,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAuB,aAAM,CAAC,EAAE,qBAAqB,EAAE,SAAQD,KAAE,GAAEC,GAAC,GAAE,EAAE,SAAQD,KAAE,GAAEC,GAAC,GAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAgB,aAAM,CAAC,EAAE,cAAc,EAAE,SAAQD,KAAE,GAAEC,GAAC,GAAE,EAAE,UAASD,KAAE,GAAEC,GAAC,GAAE,EAAE,UAASD,KAAE,GAAEC,GAAC,GAAE,EAAE,SAAQD,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAmB,aAAM,CAAC,EAAE,iBAAiB,EAAE,SAAQD,KAAE,GAAEC,GAAC,GAAE,EAAE,UAASD,KAAE,GAAEC,GAAC,GAAE,EAAE,UAASD,KAAE,GAAEC,GAAC,GAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI,SAAQ;AAAC,UAAI,IAAE,EAAE,SAAQD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,MAAM,GAAE,GAAE,GAAE,EAAE,SAAQD,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,mBAAkB;AAAC,UAAI,IAAE,EAAE,SAAQD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,UAASD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,gBAAgB,GAAE,GAAE,GAAE,EAAE,SAAQD,KAAE,GAAEC,GAAC,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI;AAAQ,aAAM,CAAC,EAAE,MAAM,EAAE,SAAQD,KAAE,GAAEC,GAAC,GAAE,EAAE,SAAQD,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAY,aAAM,CAAC,EAAE,UAAU,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE;AAAQ,YAAM,UAAU,aAAaD,IAAE,EAAE,qBAAqB;AAAA,EAAC;AAAC;AAAE,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,EAAE,SAAQD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,UAASD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,iBAAgBD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,gBAAeD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,kBAAiBD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,gBAAeD,KAAE,GAAEC,GAAC;AAAE,SAAM,EAAC,OAAM,GAAE,QAAO,GAAE,eAAc,GAAE,cAAa,GAAE,gBAAe,GAAE,cAAa,EAAC;AAAC;AAAC,IAAI,KAAG,OAAMD,KAAE,GAAEC,KAAE,GAAE,IAAE,OAAK;AAAC,UAAOD,IAAE,IAAG;AAAA,IAAC,KAAI,uBAAsB;AAAC,UAAG,EAAC,OAAM,GAAE,QAAO,GAAE,eAAc,GAAE,cAAa,GAAE,gBAAe,GAAE,cAAa,EAAC,IAAE,GAAGA,KAAE,GAAEC,GAAC,GAAE,IAAE,MAAM,EAAE,MAAM,gCAAgC,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,aAAM,CAAC,EAAE,iBAAgB,EAAE,cAAc;AAAA,IAAC;AAAA,IAAC,KAAI,uBAAsB;AAAC,UAAG,EAAC,OAAM,GAAE,QAAO,GAAE,eAAc,GAAE,cAAa,GAAE,gBAAe,EAAC,IAAE,GAAGD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,sBAAqBD,KAAE,GAAEC,GAAC,GAAE,IAAE,MAAM,EAAE,MAAM,6BAA6B,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,aAAM,CAAC,EAAE,iBAAgB,EAAE,YAAY;AAAA,IAAC;AAAA,IAAC,KAAI;AAAA,IAAsB,KAAI,uBAAsB;AAAC,UAAG,EAAC,OAAM,GAAE,QAAO,GAAE,eAAc,GAAE,cAAa,GAAE,gBAAe,EAAC,IAAE,GAAGD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,MAAM,EAAE,MAAM,uBAAuB,GAAE,GAAE,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,SAAQ;AAAC,UAAI,IAAE,EAAE,KAAK,EAAE,aAAYD,KAAE,GAAEC,GAAC,GAAE,MAAM,GAAE,IAAE,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AAAE,aAAO,EAAE,QAAQ,GAAE;AAAA,IAAC;AAAA,IAAC,KAAI;AAAW,aAAO,EAAE,eAAe,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC;AAAA,IAAE;AAAQ,YAAM,UAAU,aAAaD,IAAE,EAAE,qBAAqB;AAAA,EAAC;AAAC;AAAE,IAAI,KAAG,CAACA,KAAE,GAAEC,KAAE,IAAE,OAAK;AAAC,UAAOD,IAAE,IAAG;AAAA,IAAC,KAAI,cAAa;AAAC,UAAI,IAAE,EAAE,kBAAiBA,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,UAASD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,WAAW,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,UAAS;AAAC,UAAI,IAAE,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,UAASD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,KAAK,GAAE,GAAE,CAAC;AAAE,aAAM,CAAC,EAAE,QAAO,EAAE,OAAO;AAAA,IAAC;AAAA,IAAC,KAAI,cAAa;AAAC,UAAI,IAAE,EAAE,kBAAiBD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,UAASD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,WAAW,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,UAAS;AAAC,UAAI,IAAE,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,OAAO,CAAC;AAAE,aAAM,CAAC,EAAE,QAAO,EAAE,OAAO;AAAA,IAAC;AAAA,IAAC,KAAI,YAAW;AAAC,UAAI,IAAE,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,OAAO,GAAE,CAAC;AAAE,aAAM,CAAC,EAAE,QAAO,EAAE,OAAO;AAAA,IAAC;AAAA,IAAC;AAAQ,YAAM,UAAU,aAAaD,IAAE,EAAE,qBAAqB;AAAA,EAAC;AAAC;AAAE,IAAI,KAAG,CAACA,KAAE,GAAEC,KAAE,IAAE,OAAK;AAAC,UAAOD,IAAE,IAAG;AAAA,IAAC,KAAI;AAAQ,aAAO,EAAEA,IAAE,IAAI;AAAA,IAAE,KAAI;AAAyB,UAAI,IAAE,EAAE,WAAUA,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,GAAGD,IAAE,MAAK,GAAEC,GAAC,KAAG,CAAC;AAAA,IAAE,KAAI;AAAc,aAAM,CAAC,GAAGD,IAAE,MAAK,GAAEC,GAAC,CAAC;AAAA,IAAE,KAAI;AAAA,IAAW,KAAI;AAAA,IAAe,KAAI,2BAA0B;AAAC,UAAI,IAAE,EAAE,KAAID,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,GAAG,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI;AAAY,aAAO,EAAE,KAAID,KAAE,GAAEC,GAAC,EAAE,IAAI,OAAG,GAAG,CAAC,CAAC;AAAA,IAAE,KAAI;AAAW,UAAI,IAAE,EAAE,KAAID,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,GAAG,CAAC,CAAC;AAAA,IAAE,KAAI;AAAQ,aAAM,CAAC,EAAE,SAAS,EAAE,KAAID,KAAE,GAAEC,GAAC,EAAE,OAAM,OAAO,CAAC;AAAA,IAAE,KAAI;AAAS,aAAO,EAAE,KAAID,KAAE,GAAEC,GAAC,EAAE,IAAI,OAAG,EAAE,SAAS,EAAE,KAAK,CAAC;AAAA,IAAE,KAAI;AAAO,aAAM,CAAC,EAAE,OAAO,EAAE,KAAID,KAAE,GAAEC,GAAC,EAAE,MAAK,OAAO,CAAC;AAAA,IAAE,KAAI;AAAO,aAAM,CAAC,EAAE,OAAO,EAAE,KAAID,KAAE,GAAEC,GAAC,EAAE,MAAK,OAAO,CAAC;AAAA,IAAE,KAAI;AAAO,aAAM,CAAC,EAAE,OAAO,CAAC,CAAC;AAAA,IAAE,KAAI;AAAQ,UAAI,IAAE,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,aAAYD,KAAE,GAAEC,GAAC;AAAE,cAAQ,KAAK,gGAAgG,GAAE,QAAQ,IAAI,CAAC;AAAE,eAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,IAAI,SAAQ,IAAI,MAAM,UAAU,MAAM,KAAK,EAAE,CAAC,EAAE,SAAS,CAAC,EAAE,MAAM,GAAE,CAAC,CAAC;AAAE,aAAM,CAAC,CAAC;AAAA,IAAE;AAAQ,YAAM,UAAU,aAAaD,IAAE,EAAE,qBAAqB;AAAA,EAAC;AAAC;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,IAAI,KAAI;AAAC,WAAO,KAAK,OAAO;AAAA,EAAE;AAAA,EAAC,YAAY,GAAEC,KAAE;AAAC,SAAK,WAAS,GAAE,KAAK,aAAWA,KAAE,KAAK,SAAO,GAAG,CAAC,GAAE,KAAK,YAAU,oBAAI,OAAI,GAAG,KAAK,MAAM;AAAA,EAAC;AAAA,EAAC,gBAAe;AAAC,SAAK,UAAU,QAAQ,OAAG,EAAE,QAAQ,CAAC,GAAE,KAAK,UAAU,MAAM,GAAE,KAAK,OAAO,QAAQ;AAAA,EAAC;AAAA,EAAC,OAAM;AAAC,WAAO,KAAK,UAAU;AAAA,EAAI;AAAA,EAAC,aAAY;AAAC,WAAO,GAAG,KAAK,KAAK,GAAE,OAAO;AAAA,EAAC;AAAA,EAAC,MAAM,OAAO,GAAEA,KAAE;AAAC,SAAK,uBAAuB,GAAEA,GAAC;AAAE,QAAI,IAAE,MAAM,EAAE,KAAK;AAAE,WAAO,KAAK,UAAU,QAAQ,OAAG,EAAE,QAAQ,CAAC,GAAE,KAAK,UAAU,MAAM,GAAE,GAAG,MAAI;AAAC,UAAI,IAAE,GAAGA,GAAC,GAAE,IAAE,EAAE,QAAO,IAAE,EAAE;AAAO,QAAE,OAAO,MAAI,GAAE,MAAI,kDAAkD,CAAC,6BAA6B,CAAC,YAAY;AAAE,eAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,YAAI,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC;AAAE,WAAG,CAAC,GAAE,KAAK,UAAU,IAAI,GAAE,CAAC;AAAA,MAAC;AAAC,aAAO,KAAK;AAAA,IAAM,CAAC;AAAA,EAAC;AAAA,EAAC,MAAM,KAAK,GAAEA,KAAE;AAAC,SAAK,uBAAuB,GAAEA,GAAC;AAAE,QAAI,IAAE,MAAM,EAAE,KAAK;AAAE,WAAO,GAAG,MAAI;AAAC,UAAI,IAAE,CAAC;AAAE,eAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,KAAI;AAAC,YAAI,IAAE,EAAE,CAAC,GAAE,IAAE,KAAK,gBAAgB,GAAEA,GAAC;AAAE,UAAE,KAAK,CAAC;AAAA,MAAC;AAAC,aAAO,GAAG,CAAC;AAAA,IAAC,CAAC;AAAA,EAAC;AAAA,EAAC,gBAAgB,GAAEA,KAAE;AAAC,QAAI,IAAE,KAAK,UAAU,IAAI,CAAC;AAAE,WAAO,KAAG,OAAK,IAAEA;AAAA,EAAC;AAAA,EAAC,uBAAuB,GAAEA,KAAE;AAAC,QAAG,EAAE,UAAQ,KAAK,SAAS,OAAM,IAAI,MAAM,oBAAoB,KAAK,QAAQ,aAAa,EAAE,KAAK,EAAE;AAAE,QAAGA,IAAE,UAAQ,KAAK,WAAW,OAAM,IAAI,MAAM,sBAAsB,KAAK,UAAU,aAAaA,IAAE,KAAK,EAAE;AAAA,EAAC;AAAC;AAAE,IAAI,KAAG,OAAMD,KAAE,GAAEC,KAAE,MAAI;AAAC,UAAOD,IAAE,IAAG;AAAA,IAAC,KAAI;AAAA,IAAY,KAAI,eAAc;AAAC,UAAI,IAAE,EAAE,yBAAyBA,IAAE,IAAI;AAAE,UAAG,KAAG,KAAK,QAAM,CAAC,CAAC;AAAE;AAAC,YAAI,IAAE,EAAE,YAAWA,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,cAAaD,KAAE,GAAEC,GAAC,GAAE,IAAE,IAAI,GAAG,GAAE,CAAC;AAAE,eAAO,EAAE,aAAaD,IAAE,MAAK,CAAC,GAAE,CAAC,EAAE,MAAM;AAAA,MAAC;AAAA,IAAC;AAAA,IAAC,KAAI;AAAA,IAAkB,KAAI;AAAA,IAAoB,KAAI;AAAA,IAAoB,KAAI,uBAAsB;AAAC,UAAI,IAAE,EAAE,eAAcA,KAAE,GAAEC,KAAE,CAAC,GAAE,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,UAASD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,MAAM,EAAE,iBAAiB,EAAE,EAAE,EAAE,OAAO,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI;AAAA,IAAkB,KAAI,qBAAoB;AAAC,UAAI,IAAE,EAAE,eAAcD,KAAE,GAAEC,KAAE,CAAC,GAAE,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,gBAAeD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,MAAM,EAAE,iBAAiB,EAAE,EAAE,EAAE,KAAK,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI;AAAA,IAAkB,KAAI,qBAAoB;AAAC,UAAI,IAAE,EAAE,eAAcD,KAAE,GAAEC,KAAE,CAAC;AAAE,aAAM,CAAC,EAAE,iBAAiB,EAAE,EAAE,EAAE,WAAW,CAAC;AAAA,IAAC;AAAA,IAAC;AAAQ,YAAM,UAAU,aAAaD,IAAE,EAAE,qBAAqB;AAAA,EAAC;AAAC;AAAE,IAAI,KAAG,CAACA,KAAE,GAAEC,KAAE,IAAE,OAAK;AAAC,UAAOD,IAAE,IAAG;AAAA,IAAC,KAAI,kBAAiB;AAAC,UAAI,IAAE,EAAE,UAASA,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,gBAAeD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,oBAAmBD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,MAAM,eAAe,GAAE,CAAC,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,yBAAwB;AAAC,UAAI,IAAE,EAAE,UAASD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,gBAAeD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,oBAAmBD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,MAAM,sBAAsB,GAAE,CAAC,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,iBAAgB;AAAC,UAAI,IAAE,EAAE,SAAQD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,SAAQD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,UAASD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,YAAWD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,UAASD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,sBAAqBD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,MAAM,cAAc,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,8BAA6B;AAAC,UAAI,IAAE,EAAE,UAASD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,cAAaD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,eAAcD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,aAAYD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,iBAAgBD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,YAAWD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,MAAM,UAAU,GAAE,GAAE,EAAE,YAAY,GAAE,EAAE,YAAY,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC;AAAQ,YAAM,UAAU,aAAaD,IAAE,EAAE,qBAAqB;AAAA,EAAC;AAAC;AAAE,IAAI,KAAG,CAACA,KAAE,GAAEC,KAAE,IAAE,OAAK;AAAC,UAAOD,IAAE,IAAG;AAAA,IAAC,KAAI;AAAQ,aAAM,CAAC,EAAE,MAAM,EAAE,KAAIA,KAAE,GAAEC,GAAC,GAAE,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAW,aAAM,CAAC,EAAE,SAAS,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAU,aAAM,CAAC,EAAE,QAAQ,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAe,aAAM,CAAC,EAAE,aAAa,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAO,aAAM,CAAC,EAAE,KAAK,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAY,aAAM,CAAC,EAAE,UAAU,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAa,aAAM,CAAC,EAAE,WAAW,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAa,aAAM,CAAC,EAAE,WAAW,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAY,aAAM,CAAC,EAAE,UAAU,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAA,IAAS,KAAI;AAAW,aAAM,CAAC,EAAE,MAAM,EAAE,aAAYD,KAAE,GAAEC,GAAC,GAAE,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAa,aAAM,CAAC,EAAE,WAAW,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE;AAAQ,YAAM,UAAU,aAAaD,IAAE,EAAE,qBAAqB;AAAA,EAAC;AAAC;AAAE,IAAI,KAAG,CAACA,KAAE,GAAEC,KAAE,IAAE,OAAK;AAAC,UAAOD,IAAE,IAAG;AAAA,IAAC,KAAI;AAAA,IAAc,KAAI;AAAA,IAAgB,KAAI;AAAS,aAAM,CAAC,EAAE,OAAO,EAAE,KAAIA,KAAE,GAAEC,GAAC,GAAE,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,EAAE,cAAaD,KAAE,GAAEC,GAAC,GAAE,EAAE,cAAaD,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAS,aAAM,CAAC,EAAE,OAAO,EAAE,YAAWD,KAAE,GAAEC,GAAC,GAAE,GAAG,EAAE,WAAUD,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAY,aAAM,CAAC,EAAE,UAAU,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAe,UAAG,CAAC,GAAE,CAAC,IAAE,EAAE,YAAWD,KAAE,GAAEC,GAAC,GAAE,IAAE,MAAI,WAAU,IAAE,MAAI,SAAQ,IAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,kBAAiBD,KAAE,GAAEC,GAAC;AAAE,UAAG,GAAE;AAAC,YAAG,KAAG,MAAI,EAAE,OAAM,IAAI,MAAM,oFAAoF;AAAE,YAAG,CAAC,KAAG,MAAI,EAAE,OAAM,IAAI,MAAM,+DAA+D;AAAA,MAAC;AAAC,UAAG,CAAC,GAAE,CAAC,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,MAAM,OAAO,EAAC,GAAE,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,GAAE,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,YAAW,EAAE,cAAaD,KAAE,GAAEC,GAAC,GAAE,YAAW,EAAE,cAAaD,KAAE,GAAEC,GAAC,GAAE,MAAK,GAAE,YAAW,GAAE,wBAAuB,GAAE,gBAAe,EAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAiB,aAAM,CAAC,EAAE,OAAO,SAAS,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,EAAE,YAAWD,KAAE,GAAEC,GAAC,GAAE,EAAE,YAAWD,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE;AAAQ,YAAM,UAAU,aAAaD,IAAE,EAAE,qBAAqB;AAAA,EAAC;AAAC;AAAE,IAAI,KAAG,CAACA,KAAE,GAAEC,KAAE,IAAE,OAAK;AAAC,UAAOD,IAAE,IAAG;AAAA,IAAC,KAAI;AAAgB,aAAM,CAAC,EAAE,cAAc,EAAE,KAAIA,KAAE,GAAEC,GAAC,GAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC,GAAE,EAAE,YAAWD,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAA,IAAiB,KAAI;AAAmB,aAAM,CAAC,EAAE,UAAU,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC,GAAE,EAAE,YAAWD,KAAE,GAAEC,GAAC,GAAE,EAAE,UAASD,KAAE,GAAEC,GAAC,GAAE,EAAE,SAAQD,KAAE,GAAEC,GAAC,GAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAmB,aAAM,CAAC,EAAE,UAAU,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC,GAAE,EAAE,YAAWD,KAAE,GAAEC,GAAC,GAAE,EAAE,UAASD,KAAE,GAAEC,GAAC,GAAE,EAAE,SAAQD,KAAE,GAAEC,GAAC,GAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAM,aAAM,CAAC,EAAE,2BAA2B,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,EAAE,UAASD,KAAE,GAAEC,GAAC,GAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC,GAAE,EAAE,SAAQD,KAAE,GAAEC,GAAC,GAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAU,aAAM,CAAC,EAAE,QAAQ,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAa,aAAM,CAAC,EAAE,WAAW,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE;AAAQ,YAAM,UAAU,aAAaD,IAAE,EAAE,qBAAqB;AAAA,EAAC;AAAC;AAAE,IAAI,KAAG,CAACA,KAAE,GAAEC,KAAE,IAAE,OAAK;AAAC,UAAOD,IAAE,IAAG;AAAA,IAAC,KAAI,gBAAe;AAAC,UAAG,EAAC,oBAAmB,GAAE,mBAAkB,EAAC,IAAE,EAAE,aAAa,EAAE,sBAAqBA,KAAE,GAAEC,GAAC,GAAE,EAAE,qBAAoBD,KAAE,GAAEC,GAAC,GAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC,GAAE,EAAE,oBAAmBD,KAAE,GAAEC,GAAC,CAAC;AAAE,aAAO,EAAE,OAAO,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,eAAc;AAAC,UAAG,EAAC,gBAAe,GAAE,eAAc,EAAC,IAAE,EAAE,YAAY,EAAE,UAASD,KAAE,GAAEC,GAAC,GAAE,EAAE,UAASD,KAAE,GAAEC,GAAC,GAAE,EAAE,UAASD,KAAE,GAAEC,GAAC,CAAC;AAAE,aAAM,CAAC,GAAE,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI;AAAuB,aAAM,CAAC,EAAE,qBAAqB,EAAE,SAAQD,KAAE,GAAEC,GAAC,GAAE,EAAE,UAASD,KAAE,GAAEC,GAAC,GAAE,EAAE,gBAAeD,KAAE,GAAEC,GAAC,GAAE,EAAE,uBAAsBD,KAAE,GAAEC,GAAC,GAAE,EAAE,qBAAoBD,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE;AAAQ,YAAM,UAAU,aAAaD,IAAE,EAAE,qBAAqB;AAAA,EAAC;AAAC;AAAE,IAAI,KAAG,CAACA,KAAE,GAAEC,KAAE,IAAE,OAAK;AAAC,UAAOD,IAAE,IAAG;AAAA,IAAC,KAAI,OAAM;AAAC,UAAI,IAAE,EAAE,QAAOA,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,YAAWD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,IAAI,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,QAAO;AAAC,UAAI,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,YAAWD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,KAAK,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,OAAM;AAAC,UAAI,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,YAAWD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,IAAI,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,OAAM;AAAC,UAAI,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,YAAWD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,IAAI,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,OAAM;AAAC,UAAI,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,YAAWD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,IAAI,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,OAAM;AAAC,UAAI,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,YAAWD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,IAAI,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,UAAS;AAAC,UAAI,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,OAAO,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,UAAS;AAAC,UAAI,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,OAAO,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,QAAO;AAAC,UAAI,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,YAAWD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,KAAK,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,WAAU;AAAC,UAAI,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,aAAYD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,QAAQ,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,UAAS;AAAC,UAAI,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,aAAYD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,OAAO,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI;AAAW,UAAI,IAAE,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,SAAS,GAAE,GAAE,CAAC,CAAC;AAAA,IAAE,KAAI,iBAAgB;AAAC,UAAI,IAAE,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,gBAAeD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,cAAc,GAAE,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC;AAAQ,YAAM,UAAU,aAAaD,IAAE,EAAE,qBAAqB;AAAA,EAAC;AAAC;AAAE,IAAI,KAAG,CAACA,KAAE,GAAEC,KAAE,IAAE,OAAK;AAAC,UAAOD,IAAE,IAAG;AAAA,IAAC,KAAI;AAAA,IAAW,KAAI,UAAS;AAAC,UAAI,IAAE,EAAE,KAAIA,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC;AAAE,aAAO,IAAE,EAAE,MAAM,GAAE,CAAC,GAAE,CAAC,EAAE,OAAO,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,UAAS;AAAC,UAAI,IAAE,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,OAAO,GAAE,EAAE,KAAK,GAAE,OAAO,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,YAAW;AAAC,UAAI,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,aAAYD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,OAAO,GAAE,EAAE,KAAK,GAAE,OAAO,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,WAAU;AAAC,UAAI,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC,GAAE,IAAE,CAAC;AAAE,eAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,IAAI,GAAE,CAAC,KAAG,EAAE,KAAK,CAAC;AAAE,UAAI,IAAE,EAAE,KAAID,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,QAAQ,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,aAAY;AAAC,UAAI,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,KAAID,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,QAAQ,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,SAAQ;AAAC,UAAI,IAAE,EAAE,SAAQD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,MAAM,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,gBAAe;AAAC,UAAI,IAAE,EAAE,SAAQD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,OAAMD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,aAAYD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,gBAAeD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,eAAcD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,kBAAiBD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,KAAID,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,aAAa,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI;AAAO,aAAO,GAAG,MAAI;AAAC,YAAI,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,CAAC,EAAE,OAAM,IAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,OAAM,IAAE,EAAE,IAAI,OAAG;AAAC,cAAI,IAAE,EAAE,YAAY,EAAE,OAAM,CAAC;AAAE,cAAG,CAAC,KAAG,CAAC,EAAE,YAAY,EAAE,QAAQ,CAAC,EAAE,OAAM,CAAC,EAAE,OAAM,IAAI,MAAM,wCAAwC;AAAE,iBAAO,IAAE,IAAE,EAAE,QAAQ,GAAE,CAAC;AAAA,QAAC,CAAC;AAAE,eAAM,CAAC,EAAE,MAAM,GAAE,CAAC,CAAC;AAAA,MAAC,CAAC;AAAA,IAAE,KAAI,UAAS;AAAC,UAAI,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,UAASD,KAAE,GAAEC,GAAC;AAAE,aAAO,EAAE,QAAQ,GAAE,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,QAAO;AAAC,UAAI,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,KAAK,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI;AAAA,IAAQ,KAAI,UAAS;AAAC,UAAI,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,mBAAkBD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,KAAID,KAAE,GAAEC,GAAC;AAAE,aAAO,EAAE,MAAM,GAAE,GAAE,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,aAAY;AAAC,UAAI,IAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,UAASD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,SAAQD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,UAAU,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,YAAW;AAAC,UAAI,IAAE,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,SAAS,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,iBAAgB;AAAC,UAAI,IAAE,EAAE,iBAAgBD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,eAAcD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,gBAAeD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,gBAAeD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,cAAc,GAAE,GAAE,GAAE,EAAE,UAAQ,EAAE,QAAM,IAAE,EAAE,KAAK,GAAE,EAAE,KAAK,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,uBAAsB;AAAC,UAAI,IAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,UAASD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,UAASD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,oBAAoB,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC;AAAQ,YAAM,UAAU,aAAaD,IAAE,EAAE,qBAAqB;AAAA,EAAC;AAAC;AAAE,IAAI,KAAG,CAACA,KAAE,GAAEC,KAAE,IAAE,OAAK;AAAC,UAAOD,IAAE,IAAG;AAAA,IAAC,KAAI,uBAAsB;AAAC,UAAG,EAAC,eAAc,GAAE,cAAa,GAAE,mBAAkB,GAAE,iBAAgB,EAAC,IAAE,EAAE,OAAO,oBAAoB,EAAE,WAAUA,KAAE,GAAEC,GAAC,GAAE,EAAE,UAASD,KAAE,GAAEC,GAAC,GAAE,EAAE,cAAaD,KAAE,GAAEC,GAAC,GAAE,EAAE,gBAAeD,KAAE,GAAEC,GAAC,CAAC;AAAE,aAAM,CAAC,GAAE,GAAE,GAAE,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,iBAAgB;AAAC,UAAG,EAAC,eAAc,GAAE,aAAY,EAAC,IAAE,EAAE,OAAO,cAAc,EAAE,gBAAeD,KAAE,GAAEC,GAAC,GAAE,EAAE,cAAaD,KAAE,GAAEC,GAAC,GAAE,EAAE,YAAWD,KAAE,GAAEC,GAAC,CAAC;AAAE,aAAM,CAAC,GAAE,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI;AAAoB,aAAM,CAAC,EAAE,OAAO,kBAAkB,EAAE,QAAOD,KAAE,GAAEC,GAAC,GAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC,GAAE,EAAE,cAAaD,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAmB,aAAM,CAAC,EAAE,OAAO,iBAAiB,EAAE,QAAOD,KAAE,GAAEC,GAAC,GAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC,GAAE,EAAE,cAAaD,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE;AAAQ,YAAM,UAAU,aAAaD,IAAE,EAAE,qBAAqB;AAAA,EAAC;AAAC;AAAE,IAAI,KAAG,CAACA,KAAE,GAAEC,KAAE,IAAE,OAAK;AAAC,UAAOD,IAAE,IAAG;AAAA,IAAC,KAAI;AAAM,aAAM,CAAC,EAAE,IAAI,EAAE,KAAIA,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAO,aAAM,CAAC,EAAE,KAAK,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAO,aAAM,CAAC,EAAE,KAAK,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAQ,aAAM,CAAC,EAAE,MAAM,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE;AAAQ,YAAM,UAAU,aAAaD,IAAE,EAAE,qBAAqB;AAAA,EAAC;AAAC;AAAE,IAAI,KAAG,CAACA,KAAE,GAAEC,KAAE,IAAE,OAAK;AAAC,UAAOD,IAAE,IAAG;AAAA,IAAC,KAAI;AAAqB,aAAM,CAAC,EAAE,OAAO,mBAAmB,EAAE,SAAQA,KAAE,GAAEC,GAAC,GAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC,GAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC,GAAE,EAAE,iBAAgBD,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI,gBAAe;AAAC,UAAG,EAAC,QAAO,GAAE,cAAa,EAAC,IAAE,EAAE,OAAO,aAAa,EAAE,QAAOD,KAAE,GAAEC,GAAC,GAAE,EAAE,cAAaD,KAAE,GAAEC,GAAC,GAAE,EAAE,aAAYD,KAAE,GAAEC,GAAC,GAAE,EAAE,eAAcD,KAAE,GAAEC,GAAC,GAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC,GAAE,EAAE,YAAWD,KAAE,GAAEC,GAAC,GAAE,EAAE,YAAWD,KAAE,GAAEC,GAAC,GAAE,EAAE,0BAAyBD,KAAE,GAAEC,GAAC,CAAC;AAAE,aAAM,CAAC,GAAE,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,eAAc;AAAC,UAAG,EAAC,SAAQ,GAAE,QAAO,GAAE,OAAM,EAAC,IAAE,EAAE,OAAO,YAAY,EAAE,SAAQD,KAAE,GAAEC,GAAC,GAAE,EAAE,aAAYD,KAAE,GAAEC,GAAC,GAAE,EAAE,aAAYD,KAAE,GAAEC,GAAC,CAAC;AAAE,aAAM,CAAC,GAAE,GAAE,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI;AAAyB,aAAM,CAAC,EAAE,OAAO,uBAAuB,EAAE,SAAQD,KAAE,GAAEC,GAAC,GAAE,EAAE,cAAaD,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE;AAAQ,YAAM,UAAU,aAAaD,IAAE,EAAE,qBAAqB;AAAA,EAAC;AAAC;AAAE,IAAI,KAAG,CAACA,KAAE,GAAEC,KAAE,IAAE,OAAK;AAAC,UAAOD,IAAE,IAAG;AAAA,IAAC,KAAI;AAAO,aAAM,CAAC,EAAE,KAAK,EAAE,KAAIA,KAAE,GAAEC,GAAC,GAAE,EAAE,SAAQD,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI,cAAa;AAAC,UAAI,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,WAAW,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,WAAU;AAAC,UAAI,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,QAAQ,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI;AAAU,aAAM,CAAC,EAAE,QAAQ,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,EAAE,SAAQD,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAc,aAAM,CAAC,EAAE,YAAY,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,EAAE,SAAQD,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAY,aAAM,CAAC,EAAE,UAAU,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC,GAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAA,IAAQ,KAAI;AAAM,aAAM,CAAC,EAAE,IAAI,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC,GAAE,EAAE,iBAAgBD,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI,kBAAiB;AAAC,UAAI,IAAE,EAAE,cAAaD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,YAAWD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,eAAe,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,kBAAiB;AAAC,UAAI,IAAE,EAAE,cAAaD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,SAAQD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,eAAe,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,gBAAe;AAAC,UAAI,IAAE,EAAE,aAAYD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,cAAaD,KAAE,GAAEC,GAAC,EAAE,YAAY;AAAE,aAAM,CAAC,EAAE,aAAa,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI;AAAc,aAAM,CAAC,EAAE,YAAY,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,EAAE,SAAQD,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAgB,aAAM,CAAC,EAAE,cAAc,EAAE,MAAKD,KAAE,GAAEC,GAAC,GAAE,EAAE,MAAKD,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE;AAAQ,YAAM,UAAU,aAAaD,IAAE,EAAE,qBAAqB;AAAA,EAAC;AAAC;AAAE,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE,IAAE,IAAG;AAAC,MAAI,KAAG,CAAC,GAAE,GAAE,MAAI;AAAC,YAAO,EAAE,UAAS;AAAA,MAAC,KAAI;AAAa,eAAO,EAAE,MAAI,GAAG,GAAE,GAAE,CAAC,CAAC;AAAA,MAAE,KAAI;AAAa,eAAO,EAAE,MAAI,GAAG,GAAE,GAAE,CAAC,CAAC;AAAA,MAAE,KAAI;AAAU,eAAO,GAAG,GAAE,GAAE,CAAC;AAAA,MAAE,KAAI;AAAc,eAAO,EAAE,MAAI,GAAG,GAAE,GAAE,CAAC,CAAC;AAAA,MAAE,KAAI;AAAW,eAAO,EAAE,MAAI,GAAG,GAAE,GAAE,CAAC,CAAC;AAAA,MAAE,KAAI;AAAU,eAAO,GAAG,GAAE,GAAE,CAAC;AAAA,MAAE,KAAI;AAAa,eAAO,EAAE,MAAI,GAAG,GAAE,GAAE,CAAC,CAAC;AAAA,MAAE,KAAI;AAAQ,eAAO,EAAE,MAAI,GAAG,GAAE,GAAE,CAAC,CAAC;AAAA,MAAE,KAAI;AAAQ,eAAO,EAAE,MAAI,GAAG,GAAE,GAAE,CAAC,CAAC;AAAA,MAAE,KAAI;AAAU,eAAO,EAAE,MAAI,GAAG,GAAE,GAAE,CAAC,CAAC;AAAA,MAAE,KAAI;AAAW,eAAO,EAAE,MAAI,GAAG,GAAE,GAAE,CAAC,CAAC;AAAA,MAAE,KAAI;AAAgB,eAAO,EAAE,MAAI,GAAG,GAAE,GAAE,CAAC,CAAC;AAAA,MAAE,KAAI;AAAS,eAAO,EAAE,MAAI,GAAG,GAAE,GAAE,CAAC,CAAC;AAAA,MAAE,KAAI;AAAY,eAAO,EAAE,MAAI,GAAG,GAAE,GAAE,CAAC,CAAC;AAAA,MAAE,KAAI;AAAa,eAAO,EAAE,MAAI,GAAG,GAAE,GAAE,CAAC,CAAC;AAAA,MAAE,KAAI;AAAS,eAAO,EAAE,MAAI,GAAG,GAAE,GAAE,CAAC,CAAC;AAAA,MAAE,KAAI;AAAW,eAAO,EAAE,MAAI,GAAG,GAAE,GAAE,CAAC,CAAC;AAAA,MAAE,KAAI;AAAS,eAAO,EAAE,MAAI,GAAG,GAAE,GAAE,CAAC,CAAC;AAAA,MAAE,KAAI;AAAiB,eAAO,EAAE,MAAI,GAAG,GAAE,GAAE,CAAC,CAAC;AAAA,MAAE,KAAI;AAAa,eAAO,GAAG,GAAE,GAAE,GAAE,CAAC;AAAA,MAAE,KAAI;AAAS,YAAI,IAAE,GAAG,EAAE,EAAE;AAAE,YAAG,KAAG,EAAE,eAAe,QAAO,EAAE,eAAe,IAAI,GAAG,GAAE,GAAE,CAAC,CAAC;AAAE,cAAM,UAAU,aAAa,EAAE,EAAE,qBAAqB;AAAA,MAAE;AAAQ,cAAM,UAAU,eAAe,EAAE,EAAE,qIAAqI;AAAA,IAAC;AAAA,EAAC,GAAGD,KAAE,GAAEC,GAAC;AAAE,SAAO,EAAE,UAAU,CAAC,IAAE,EAAE,KAAK,OAAG,CAAC,EAAE,OAAO,CAAC,CAAC,IAAE,CAAC,EAAE,OAAO,CAAC;AAAC;AAAC,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,IAAE,CAAC,GAAEA,MAAE,CAAC,GAAE,IAAE,CAAC,GAAE,IAAE,CAAC,GAAE,GAAE;AAAC,SAAK,YAAU,GAAE,KAAK,iBAAeA,KAAE,KAAK,gBAAc,GAAE,KAAK,cAAY,GAAE,KAAK,qBAAmB,GAAE,KAAK,cAAY,EAAC,IAAG,GAAE,WAAU,IAAG,aAAY,EAAC,GAAE,KAAK,WAAS,CAAC,KAAK,WAAW,GAAE,KAAK,SAAO,GAAE,KAAK,0BAA0B;AAAA,EAAC;AAAA,EAAC,SAAS,GAAEA,KAAE;AAAC,WAAM,EAAC,IAAG,GAAE,WAAUA,KAAE,aAAY,EAAC;AAAA,EAAC;AAAA,EAAC,IAAI,eAAe,GAAE;AAAC,SAAK,aAAW,MAAI,KAAK,WAAS,GAAE,KAAK,0BAA0B;AAAA,EAAE;AAAA,EAAC,IAAI,iBAAgB;AAAC,WAAO,KAAK;AAAA,EAAQ;AAAA,EAAC,IAAI,mBAAkB;AAAC,WAAO,KAAK,mBAAmB,CAAC;AAAA,EAAC;AAAA,EAAC,IAAI,oBAAmB;AAAC,WAAO,KAAK;AAAA,EAAkB;AAAA,EAAC,4BAA2B;AAAC,QAAI,IAAE,CAAC;AAAE,aAAQA,MAAE,GAAEA,MAAE,KAAK,SAAS,SAAO,GAAEA,OAAI;AAAC,UAAI,IAAE,KAAK,SAAS,MAAM,GAAE,KAAK,SAAS,SAAOA,GAAC;AAAE,QAAE,KAAK,KAAK,qBAAqB,CAAC,CAAC;AAAA,IAAC;AAAC,MAAE,KAAK,EAAE,GAAE,KAAK,qBAAmB;AAAA,EAAC;AAAA,EAAC,qBAAqB,GAAE;AAAC,WAAO,IAAE,EAAE,IAAI,CAAAA,QAAGA,IAAE,OAAK,KAAGA,IAAE,gBAAc,IAAE,KAAG,GAAGA,IAAE,SAAS,IAAIA,IAAE,WAAW,EAAE,EAAE,KAAK,GAAG,IAAE;AAAA,EAAE;AAAA,EAAC,WAAW,GAAE;AAAC,SAAK,aAAW,KAAK,UAAS,KAAK,WAAS,KAAK,SAAS,MAAM,GAAE,KAAK,SAAS,KAAK,KAAK,SAAS,KAAK,QAAO,CAAC,CAAC,GAAE,KAAK,mBAAmB,QAAQ,KAAK,qBAAqB,KAAK,QAAQ,CAAC;AAAA,EAAE;AAAA,EAAC,YAAW;AAAC,QAAG,KAAK,YAAU,KAAK,SAAS,SAAO,EAAE,MAAK,WAAS,KAAK,SAAS,MAAM,GAAE,KAAK,SAAS,OAAO,EAAE,GAAE,KAAK,kBAAkB,MAAM;AAAA,QAAO,OAAM,IAAI,MAAM,yCAAyC;AAAA,EAAC;AAAA,EAAC,gBAAe;AAAC,QAAG,KAAK,YAAU,KAAK,SAAS,SAAO,GAAE;AAAC,WAAK,WAAS,KAAK,SAAS,MAAM,GAAE,KAAK;AAAS,UAAI,IAAE,OAAO,OAAO,CAAC,GAAE,KAAK,SAAS,KAAK,SAAS,SAAO,CAAC,CAAC;AAAE,QAAE,eAAa,GAAE,EAAE,KAAG,KAAK,QAAO,KAAK,SAAS,OAAO,IAAG,GAAE,CAAC,GAAE,KAAK,mBAAmB,OAAO,GAAE,GAAE,KAAK,qBAAqB,KAAK,QAAQ,CAAC;AAAA,IAAC,MAAM,OAAM,IAAI,MAAM,uDAAuD;AAAA,EAAC;AAAA,EAAC,UAAU,GAAE;AAAC,WAAO,KAAK,UAAU,CAAC;AAAA,EAAC;AAAA,EAAC,eAAe,GAAE;AAAC,SAAK,eAAe,EAAE,EAAE,IAAE;AAAA,EAAC;AAAA,EAAC,eAAe,GAAE;AAAC,WAAO,KAAK,eAAe,CAAC;AAAA,EAAC;AAAA,EAAC,cAAc,GAAE;AAAC,SAAK,cAAc,EAAE,EAAE,IAAE;AAAA,EAAC;AAAA,EAAC,cAAc,GAAE;AAAC,WAAO,KAAK,cAAc,CAAC;AAAA,EAAC;AAAA,EAAC,QAAQ,GAAE;AAAC,aAAQA,OAAK,KAAK,eAAe,MAAK,eAAeA,GAAC,EAAE,cAAc,CAAC;AAAE,aAAQA,OAAK,KAAK,cAAc,MAAK,cAAcA,GAAC,EAAE,cAAc,CAAC;AAAA,EAAC;AAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE;AAAC,MAAI,IAAE,oBAAI,OAAI,IAAE,CAAC,GAAE,IAAE,MAAK,IAAE,MAAK,IAAE,oBAAI,OAAI,IAAE,IAAI,IAAI,OAAO,KAAKD,GAAC,EAAE,IAAI,OAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AAAE,MAAE,KAAG,CAAC;AAAE,MAAI,IAAE,IAAI,IAAI,EAAE,IAAI,OAAG,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,GAAE,IAAE,CAAC,GAAG,CAAC;AAAE,SAAK,EAAE,SAAO,KAAG;AAAC,QAAI,IAAE,EAAE,IAAI;AAAE,SAAI,GAAG,CAAC,KAAG,GAAG,CAAC,KAAG,GAAG,CAAC,MAAI,KAAG,SAAO,IAAE,GAAE,IAAE,EAAE,SAAS,IAAI,OAAG,EAAE,IAAI,EAAE,OAAO,OAAG,EAAE,IAAI,CAAC,CAAC,IAAG,EAAE,IAAI,EAAE,IAAI,GAAEC,IAAE,EAAE,IAAI,KAAG,QAAM,CAAC,EAAE,IAAI,EAAE,IAAI,KAAG,CAAC,EAAE,IAAI,EAAE,IAAI,GAAE;AAAC,UAAG,EAAE,OAAO,WAAS,GAAE;AAAC,UAAE,KAAK,EAAE,IAAI;AAAE;AAAA,MAAQ;AAAC,QAAE,OAAO,QAAQ,OAAG;AAAC,UAAE,IAAI,EAAE,IAAI,MAAI,EAAE,IAAI,EAAE,IAAI,GAAE,EAAE,KAAK,CAAC;AAAA,MAAE,CAAC;AAAA,IAAC;AAAA,EAAC;AAAC,SAAM,EAAC,QAAOD,KAAE,SAAQ,GAAE,WAAU,GAAE,eAAc,GAAE,aAAY,GAAE,YAAW,EAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAG,EAAC,WAAUC,KAAE,QAAO,EAAC,IAAE,GAAE,IAAE,OAAO,KAAK,CAAC,EAAE,IAAI,OAAG,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,OAAGD,IAAE,MAAM,CAAC,CAAC,GAAE,IAAEA,IAAE,aAAW,CAAC,GAAE,IAAE,OAAGC,IAAE,IAAI,OAAO,KAAG,WAAS,IAAE,EAAE,IAAI;AAAE,WAAS,EAAE,GAAE;AAAC,WAAM,CAAC,GAAG,IAAI,IAAI,EAAE,IAAI,OAAG,CAAC,EAAE,MAAK,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC;AAAA,EAAC;AAAC,MAAI,IAAE,EAAE,CAAC,GAAG,GAAE,GAAGD,IAAE,SAAQ,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,GAAE,IAAE,EAAE,CAAC,GAAG,GAAE,GAAG,OAAO,OAAOA,IAAE,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,GAAE,IAAE,IAAI,IAAI,EAAE,IAAI,OAAG,CAAC,EAAE,MAAK,CAAC,CAAC,CAAC,GAAE,IAAE,CAAC;AAAE,WAAQ,KAAK,GAAE;AAAC,MAAE,EAAE,IAAI,IAAE,EAAE,EAAE,IAAI,KAAG;AAAE,aAAQ,KAAK,EAAE,SAAS,GAAE,CAAC,MAAI,EAAE,EAAE,IAAI,IAAE,OAAO,oBAAmB,EAAE,EAAE,IAAI,KAAG,EAAE,EAAE,IAAI,KAAG,KAAG;AAAA,EAAC;AAAC,MAAI,IAAE,OAAO,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC,EAAC,CAAC,MAAI,MAAI,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,MAAI,CAAC,GAAE,IAAE,CAAC,GAAG,CAAC;AAAE,SAAK,EAAE,SAAO,KAAG;AAAC,QAAI,IAAE,EAAE,IAAI,GAAE,IAAE,EAAE,IAAI,CAAC;AAAE,aAAQ,KAAK,EAAE,SAAS,OAAO,CAAC,EAAE,GAAE,EAAE,EAAE,IAAI,MAAI,MAAI,EAAE,KAAK,EAAE,IAAI,GAAE,EAAE,KAAK,EAAE,IAAI;AAAA,EAAE;AAAC,MAAI,IAAE,EAAE,IAAI,OAAG,EAAE,IAAI,CAAC,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC;AAAE,SAAO,GAAG,GAAE,CAAC,GAAE;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAIC,MAAE,IAAI,IAAID,IAAE,IAAI,OAAG,CAAC,EAAE,MAAK,CAAC,CAAC,CAAC,GAAE,IAAE,EAAE,IAAI,OAAG,EAAE,IAAI,GAAE,IAAE,IAAI,IAAI,CAAC;AAAE,SAAK,EAAE,SAAO,KAAG;AAAC,QAAI,IAAE,EAAE,IAAI,GAAE,IAAEC,IAAE,IAAI,CAAC;AAAE,aAAQ,KAAK,EAAE,SAAS,EAACA,IAAE,IAAI,EAAE,IAAI,KAAG,EAAE,IAAI,EAAE,IAAI,MAAI,EAAE,IAAI,EAAE,IAAI,GAAE,EAAE,KAAK,EAAE,IAAI;AAAA,EAAE;AAAC,SAAOD,IAAE,OAAO,OAAG,EAAE,IAAI,EAAE,IAAI,CAAC;AAAC;AAAC,IAAI,KAAG,cAAc,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,UAAM,6BAA6B,CAAC,EAAE;AAAA,EAAC;AAAC;AAAE,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAIC,MAAE,IAAI,IAAID,IAAE,IAAI,CAAC,GAAE,MAAI,CAAC,EAAE,MAAK,CAAC,CAAC,CAAC,GAAE,IAAE,IAAI,IAAI,EAAE,IAAI,OAAG,EAAE,IAAI,CAAC,GAAE,IAAE,OAAG,EAAE,IAAI,OAAO,KAAG,WAAS,IAAE,EAAE,IAAI,GAAE,IAAE,IAAI,IAAIA,IAAE,IAAI,OAAG,EAAE,IAAI,CAAC,GAAE,IAAE,OAAG,EAAE,IAAI,OAAO,KAAG,WAAS,IAAE,EAAE,IAAI;AAAE,WAAQ,KAAKA,KAAE;AAAC,aAAQ,KAAK,EAAE,SAAS,OAAO,CAAC,GAAE;AAAC,UAAG,CAACC,IAAE,IAAI,EAAE,IAAI,EAAE,OAAM,IAAI,GAAG,SAAS,EAAE,IAAI,YAAY,EAAE,IAAI,kBAAkB;AAAE,UAAGA,IAAE,IAAI,EAAE,IAAI,IAAEA,IAAE,IAAI,EAAE,IAAI,EAAE,OAAM,IAAI,GAAG,QAAQ,EAAE,IAAI,wCAAwC,EAAE,IAAI,GAAG;AAAA,IAAC;AAAC,QAAG,CAAC,EAAE,CAAC,EAAE,UAAQ,KAAK,EAAE,QAAO;AAAC,UAAG,CAACA,IAAE,IAAI,EAAE,IAAI,EAAE,OAAM,IAAI,GAAG,SAAS,EAAE,IAAI,YAAY,EAAE,IAAI,kBAAkB;AAAE,UAAGA,IAAE,IAAI,EAAE,IAAI,IAAEA,IAAE,IAAI,EAAE,IAAI,EAAE,OAAM,IAAI,GAAG,QAAQ,EAAE,IAAI,yCAAyC,EAAE,IAAI,GAAG;AAAA,IAAC;AAAA,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAI,IAAE,IAAI,IAAIA,IAAE,IAAI,CAAC,GAAE,MAAI,CAAC,EAAE,MAAK,CAAC,CAAC,CAAC,GAAEC,MAAE,OAAO,kBAAiB,IAAED,IAAE,IAAI,CAAC,GAAE,MAAI,GAAG,CAAC,IAAEC,MAAE,CAAC,GAAE,IAAE,OAAG;AAAC,QAAI,IAAE,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC;AAAE,WAAO,KAAG,OAAK,KAAG;AAAA,EAAC,GAAE,IAAED,IAAE,IAAI,CAAC,GAAE,MAAI,EAAE,SAAS,IAAI,CAAC,EAAE,OAAO,CAAC,GAAE,MAAI,KAAK,IAAI,GAAE,CAAC,GAAE,EAAE,CAAC,CAAC,CAAC,GAAE,IAAE,oBAAI;AAAI,WAAQ,IAAE,GAAE,IAAEA,IAAE,QAAO,EAAE,GAAE;AAAC,QAAI,IAAE,EAAE,CAAC;AAAE,QAAG,MAAIC,IAAE;AAAS,QAAI,IAAED,IAAE,CAAC,GAAE,IAAEA,IAAE,CAAC;AAAE,MAAE,IAAI,EAAE,IAAI,KAAG,EAAE,IAAI,EAAE,MAAK,CAAC,CAAC,GAAE,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,IAAI,KAAG,oBAAI,IAAI,CAAC,UAAS,SAAQ,SAAQ,QAAO,iBAAgB,eAAc,kBAAiB,MAAK,OAAO,CAAC;AAA5G,IAA8G,KAAG,oBAAI,IAAI,CAAC,uBAAsB,uBAAsB,uBAAsB,OAAO,CAAC;AAApM,IAAsM,KAAG,oBAAI,IAAI,CAAC,aAAY,eAAc,qBAAoB,uBAAsB,mBAAkB,qBAAoB,mBAAkB,mBAAmB,CAAC;AAAE,SAAS,GAAGA,KAAE;AAAC,SAAO,GAAG,IAAIA,IAAE,EAAE;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAO,GAAG,IAAIA,IAAE,EAAE;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAO,GAAG,IAAIA,IAAE,EAAE;AAAC;AAAC,IAAI,KAAG,MAAMA,IAAC;AAAA,EAAC,IAAI,YAAW;AAAC,WAAO,KAAK,SAAO,KAAK,OAAO,YAAU,KAAK;AAAA,EAAU;AAAA,EAAC,IAAI,sBAAqB;AAAC,WAAO,KAAK,SAAO,KAAK,OAAO,sBAAoB,KAAK;AAAA,EAAoB;AAAA,EAAC,IAAI,YAAW;AAAC,WAAO,KAAK,SAAO,KAAK,OAAO,YAAU,KAAK;AAAA,EAAU;AAAA,EAAC,IAAI,UAAU,GAAE;AAAC,QAAIC,MAAE,OAAO,KAAK,CAAC,EAAE,IAAI,OAAG,EAAE,CAAC,EAAE,IAAI,OAAG,EAAE,EAAE,CAAC;AAAE,SAAK,aAAW,CAAC,EAAE,OAAO,GAAGA,GAAC,GAAE,KAAK,aAAW;AAAA,EAAC;AAAA,EAAC,IAAI,gBAAgB,GAAE;AAAC,SAAK,mBAAiB;AAAA,EAAC;AAAA,EAAC,IAAI,SAAQ;AAAC,WAAO,KAAK,QAAQ,IAAI,QAAI,EAAC,MAAK,EAAE,MAAK,OAAM,EAAE,WAAW,QAAM,EAAE,WAAW,MAAM,QAAM,QAAO,OAAM,EAAE,WAAW,QAAM,EAAE,WAAW,MAAM,QAAM,OAAM,EAAE;AAAA,EAAC;AAAA,EAAC,IAAI,UAAS;AAAC,WAAO,KAAK,SAAS,IAAI,QAAI,EAAC,MAAK,EAAE,MAAK,OAAM,EAAE,WAAW,QAAM,EAAE,WAAW,MAAM,QAAM,QAAO,OAAM,EAAE,WAAW,QAAM,EAAE,WAAW,MAAM,QAAM,OAAM,EAAE;AAAA,EAAC;AAAA,EAAC,IAAI,aAAY;AAAC,WAAO,KAAK,QAAQ,IAAI,OAAG,EAAE,gBAAc,EAAE,IAAI;AAAA,EAAC;AAAA,EAAC,IAAI,cAAa;AAAC,WAAO,KAAK,SAAS,IAAI,OAAG;AAAC,UAAIA,MAAE,EAAE,gBAAc,EAAE;AAAK,aAAO,EAAE,gBAAc,GAAGA,GAAC,IAAI,EAAE,aAAa,KAAGA;AAAA,IAAC,CAAC;AAAA,EAAC;AAAA,EAAC,IAAI,YAAW;AAAC,WAAO,OAAO,KAAK,KAAK,UAAU,EAAE,OAAO,CAAC,GAAEA,SAAK,EAAEA,GAAC,IAAE,KAAK,WAAWA,GAAC,EAAE,WAAU,IAAG,CAAC,CAAC;AAAA,EAAC;AAAA,EAAC,YAAY,GAAEA,KAAE;AAAC,SAAK,QAAM,GAAE,KAAK,SAAOA,KAAE,KAAK,cAAY,oBAAI,OAAI,KAAK,qBAAmB,oBAAI,OAAI,KAAK,aAAW,CAAC,GAAE,KAAK,YAAU,KAAI,KAAK,aAAW,CAAC,GAAE,KAAK,uBAAqB,CAAC,GAAE,KAAK,0BAAwB,OAAG,KAAK,WAAS,EAAE,SAAQ,KAAK,UAAQ,EAAE,QAAO,KAAK,aAAW,EAAE,WAAU,KAAK,aAAW,EAAE,WAAU,KAAK,aAAW,EAAE,WAAU,EAAE,aAAW,QAAM,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,OAAG;AAAC,WAAK,qBAAqB,CAAC,IAAE,IAAID,IAAE,EAAE,UAAU,CAAC,GAAE,IAAI;AAAA,IAAC,CAAC;AAAA,EAAC;AAAA,EAAC,kBAAkB,GAAEC,KAAE;AAAC,QAAI,IAAE,EAAE,IAAI,OAAG,EAAE,IAAI,EAAE,KAAK,GAAE,IAAEA,IAAE,IAAI,OAAG,EAAE,IAAI,EAAE,KAAK;AAAE,WAAO,EAAE,KAAK,KAAK,SAAS,IAAE,OAAK,EAAE,KAAK,KAAK,SAAS;AAAA,EAAC;AAAA,EAAC,QAAQ,GAAEA,KAAE;AAAC,QAAI,IAAE,GAAG,GAAEA,KAAE,KAAK,WAAU,KAAK,UAAU,GAAE,EAAC,eAAc,GAAE,aAAY,GAAE,YAAW,EAAC,IAAE;AAAE,QAAG,KAAG,KAAK,OAAM,IAAI,MAAM,qCAAqC,EAAE,IAAI,gCAAgC,EAAE,EAAE,4GAA4G,CAAC,GAAG;AAAE,QAAG,EAAE,SAAO,GAAE;AAAC,UAAI,IAAEA,IAAE,IAAI,OAAG,EAAE,IAAI,GAAE,IAAE,OAAO,KAAK,CAAC;AAAE,YAAM,IAAI,MAAM,+BAA+B,CAAC,+BAA+B,CAAC,qCAAqC,CAAC,GAAG;AAAA,IAAC;AAAC,QAAI,IAAE,GAAG,KAAK,OAAM,CAAC,GAAE,IAAE,GAAG,CAAC;AAAE,WAAM,EAAC,cAAa,GAAE,kBAAiB,EAAC;AAAA,EAAC;AAAA,EAAC,mBAAmB,GAAE;AAAC,QAAG,KAAG,KAAK,QAAO;AAAK,QAAIA,MAAE,EAAE,MAAM;AAAE,WAAO,GAAGA,GAAC,GAAEA;AAAA,EAAC;AAAA,EAAC,gBAAgB,GAAE;AAAC,WAAO,IAAE,EAAE,IAAI,OAAG,KAAK,mBAAmB,CAAC,CAAC,IAAE;AAAA,EAAI;AAAA,EAAC,eAAe,GAAE;AAAC,WAAO,OAAO,YAAY,OAAO,QAAQ,CAAC,EAAE,IAAI,CAAC,CAACA,KAAE,CAAC,MAAI,CAACA,KAAE,KAAK,gBAAgB,CAAC,CAAC,CAAC,CAAC;AAAA,EAAC;AAAA,EAAC,QAAQ,GAAEA,KAAE;AAAC,SAAK,2BAA2B,GAAE,IAAE,KAAK,UAAU,CAAC;AAAE,QAAI,IAAE,OAAO,KAAK,CAAC,EAAE,KAAK;AAAE,SAAK,YAAY,CAAC,GAAE,KAAK,uBAAuB,CAAC,GAAEA,MAAE,KAAK,WAAWA,GAAC,GAAE,KAAK,aAAaA,GAAC;AAAE,QAAI,IAAE,EAAE,IAAI,OAAG,KAAK,MAAM,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAE,IAAEA,IAAE,IAAI,OAAG,GAAG,CAAC,EAAE,CAAC,CAAC,GAAE,IAAE,IAAI,IAAI,CAAC,GAAE,IAAE,EAAE,IAAI,OAAG,KAAK,MAAM,MAAM,CAAC,CAAC;AAAE,MAAE,WAAS,MAAI,IAAE,KAAK;AAAU,QAAI,IAAE,KAAK,kBAAkB,GAAE,CAAC,GAAE,IAAE,KAAK,YAAY,IAAI,CAAC;AAAE,SAAG,SAAO,IAAE,KAAK,QAAQ,GAAE,CAAC,GAAE,KAAK,YAAY,IAAI,GAAE,CAAC;AAAG,QAAG;AAAC,WAAK,0BAAwB,EAAE,EAAE,QAAQ,2BAA2B;AAAA,IAAC,SAAO,GAAE;AAAC,WAAK,0BAAwB,OAAG,QAAQ,KAAK,EAAE,OAAO;AAAA,IAAC;AAAC,QAAI,IAAE,CAAC,GAAE,IAAE,CAAC;AAAE,WAAO,GAAG,MAAI;AAAC,UAAI,IAAE,IAAI,GAAG,KAAK,WAAU,GAAE,GAAE,KAAK,qBAAoB,KAAK,kBAAkB,GAAE,IAAE,OAAO,OAAO,CAAC,GAAE,KAAK,SAAS;AAAE,WAAK,4BAA0B,KAAK,mBAAiB,KAAK,eAAe,KAAK,SAAS,IAAG,OAAO,KAAK,CAAC,EAAE,QAAQ,OAAG;AAAC,YAAG,CAAC,GAAE,CAAC,IAAE,GAAG,GAAE,CAAC,GAAE,IAAE,CAAC;AAAE,UAAE,CAAC,IAAE,EAAE,CAAC,GAAE,EAAE,CAAC,IAAE,GAAE,KAAK,4BAA0B,KAAK,iBAAiB,CAAC,IAAE,KAAK,gBAAgB,CAAC;AAAA,MAAE,CAAC;AAAE,UAAI,IAAE,KAAK,mBAAmB,CAAC,GAAE,EAAC,cAAa,GAAE,kBAAiB,EAAC,IAAE;AAAE,eAAQ,KAAK,GAAE;AAAC,YAAG,EAAE,EAAE,IAAI,EAAE;AAAS,YAAI,IAAE,GAAG,GAAE,GAAE,GAAE,KAAK,gBAAgB;AAAE,YAAG,EAAE,UAAU,CAAC,EAAE,OAAM,IAAI,MAAM,4BAA4B,EAAE,EAAE,gEAAgE;AAAE,UAAE,EAAE,IAAI,IAAE,GAAE,KAAK,4BAA0B,KAAK,iBAAiB,EAAE,IAAI,IAAE,KAAK,gBAAgB,CAAC,IAAG,KAAK,4CAA4C,GAAE,GAAE,GAAE,GAAE,GAAE,EAAE,IAAI,EAAE,IAAI,CAAC;AAAA,MAAC;AAAC,aAAO,KAAK,UAAQ,QAAM,EAAE,QAAQ,CAAC,GAAEA,IAAE,IAAI,OAAG,GAAG,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC,CAAC;AAAA,EAAC;AAAA,EAAC,mBAAmB,GAAE;AAAC,QAAIA,MAAE,CAAC,EAAE,OAAO,MAAM,CAAC,GAAE,OAAO,KAAK,CAAC,EAAE,IAAI,OAAG,EAAE,CAAC,CAAC,EAAE,IAAI,OAAG,EAAE,IAAI,OAAG,EAAE,EAAE,CAAC,CAAC;AAAE,WAAO,IAAI,IAAIA,GAAC;AAAA,EAAC;AAAA,EAAC,uBAAuB,GAAEA,KAAE,GAAE,GAAE,GAAE,GAAE,GAAE;AAAC,QAAG,EAAE,GAAGA,GAAC,KAAG,EAAE,IAAI,CAAC,IAAG;AAAC,eAAQ,KAAK,EAAE,CAAC,EAAE,MAAG,SAAO,EAAE,EAAE,EAAE,KAAG,EAAE,EAAE,EAAE,KAAG,KAAGA,IAAE,SAAS;AAAQ,eAAQ,KAAKA,IAAE,QAAO;AAAC,YAAG,GAAG,CAAC,EAAE;AAAS,YAAI,IAAE,GAAG,EAAE,MAAK,GAAE,CAAC;AAAE,YAAG,KAAG,KAAK,UAAQ,KAAK,GAAE;AAAC,cAAG,CAAC,KAAG,EAAE,QAAM,EAAE,IAAI,EAAE,EAAE,EAAE;AAAS,cAAI,IAAE,EAAE,EAAE,EAAE;AAAE,gBAAI,KAAG,EAAE,QAAQ,GAAE,OAAO,EAAE,EAAE,EAAE,KAAG,KAAG,QAAM,EAAE,EAAE,EAAE;AAAA,QAAG;AAAA,MAAC;AAAA,IAAC;AAAA,EAAC;AAAA,EAAC,4CAA4C,GAAEA,KAAE,GAAE,GAAE,GAAE,GAAE;AAAC,aAAS,EAAE,GAAE;AAAC,aAAO,GAAG,CAAC,KAAG,EAAE,IAAI,EAAE,IAAI;AAAA,IAAC;AAAC,QAAG,EAAE,GAAG,CAAC,KAAG,KAAG,MAAM,UAAQ,KAAK,GAAE;AAAC,UAAG,EAAE,CAAC,EAAE;AAAS,UAAI,IAAE,GAAG,EAAE,MAAKA,KAAE,CAAC;AAAE,eAAQ,KAAK,EAAE,EAAC,KAAG,EAAE,QAAM,EAAE,IAAI,EAAE,EAAE,KAAG,EAAE,QAAQ;AAAA,IAAC;AAAA,EAAC;AAAA,EAAC,MAAM,aAAa,GAAEA,KAAE;AAAC,WAAO,KAAK,cAAc,GAAEA,GAAC;AAAA,EAAC;AAAA,EAAC,6BAA4B;AAAC,SAAK,qBAAmB,OAAO,OAAO,KAAK,gBAAgB,EAAE,QAAQ,OAAG;AAAC,eAAQA,OAAK,EAAE,CAAAA,OAAG,CAACA,IAAE,cAAYA,IAAE,QAAQ;AAAA,IAAC,CAAC,GAAE,KAAK,mBAAiB;AAAA,EAAK;AAAA,EAAC,yBAAwB;AAAC,WAAO,KAAK;AAAA,EAAgB;AAAA,EAAC,MAAM,cAAc,GAAEA,KAAE,IAAE,OAAG,IAAE,CAAC,GAAE,IAAE,CAAC,GAAE;AAAC,SAAK,2BAA2B,GAAE,MAAI,IAAE,KAAK,UAAU,CAAC,GAAE,KAAK,YAAY,CAAC,GAAE,KAAK,uBAAuB,CAAC,GAAEA,MAAE,KAAK,WAAWA,GAAC,GAAE,KAAK,aAAaA,GAAC;AAAG,QAAG;AAAC,WAAK,0BAAwB,EAAE,EAAE,QAAQ,2BAA2B;AAAA,IAAC,SAAO,GAAE;AAAC,WAAK,0BAAwB,OAAG,QAAQ,KAAK,EAAE,OAAO;AAAA,IAAC;AAAC,QAAI,IAAE,IAAI,GAAG,KAAK,WAAU,GAAE,GAAE,KAAK,qBAAoB,KAAK,kBAAkB;AAAE,SAAK,4BAA0B,KAAK,mBAAiB,KAAK,eAAe,KAAK,SAAS;AAAG,QAAI,IAAE,MAAM,KAAK,uBAAuB,GAAE,GAAEA,KAAE,CAAC,GAAE,IAAEA,IAAE,IAAI,OAAG,GAAG,GAAE,GAAE,CAAC,CAAC,GAAE,IAAE,EAAE,IAAI,OAAG,EAAE,EAAE,GAAE,IAAE,OAAO,KAAK,CAAC,EAAE,IAAI,OAAG,EAAE,CAAC,EAAE,EAAE,GAAE,IAAE,oBAAI,IAAI,CAAC,GAAG,GAAE,GAAG,GAAE,GAAG,KAAK,SAAS,CAAC;AAAE,WAAO,OAAO,OAAO,CAAC,EAAE,QAAQ,OAAG;AAAC,QAAE,QAAQ,OAAG;AAAC,aAAG,CAAC,EAAE,cAAY,CAAC,EAAE,IAAI,EAAE,EAAE,KAAG,EAAE,QAAQ;AAAA,MAAC,CAAC;AAAA,IAAC,CAAC,GAAE,KAAK,UAAQ,QAAM,EAAE,QAAQ,CAAC,GAAE;AAAA,EAAC;AAAA,EAAC,MAAM,qBAAqB,GAAEA,KAAE,GAAE;AAAC,QAAI,IAAE,EAAE,OAAO,CAAC,GAAE,GAAE,OAAK,EAAE,KAAK,OAAO,CAAC,EAAE,IAAI,IAAE,GAAE,IAAG,CAAC,CAAC;AAAE,WAAO,KAAK,cAAc,GAAE,KAAK,aAAY,MAAGA,KAAE,CAAC;AAAA,EAAC;AAAA,EAAC,MAAM,uBAAuB,GAAEA,KAAE,GAAE,GAAE;AAAC,QAAI,IAAE,OAAO,KAAK,CAAC,GAAE,IAAE,EAAE,IAAI,OAAG,KAAK,MAAM,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAE,IAAE,EAAE,IAAI,OAAG,GAAG,CAAC,EAAE,CAAC,CAAC,GAAE,IAAE,IAAI,IAAI,CAAC,GAAE,IAAE,EAAE,IAAI,OAAG,KAAK,MAAM,MAAM,CAAC,CAAC;AAAE,MAAE,WAAS,MAAI,IAAE,KAAK;AAAU,QAAG,EAAC,WAAU,GAAE,eAAc,GAAE,aAAY,GAAE,YAAW,EAAC,IAAE,GAAG,GAAE,GAAE,KAAK,WAAU,KAAK,UAAU,GAAE,IAAE,CAAC,GAAG,GAAE,GAAG,KAAK,MAAM,SAAQ,GAAG,KAAK,cAAY,CAAC,CAAC,EAAE,IAAI,QAAI,EAAC,MAAK,GAAE,UAASA,IAAE,eAAc,EAAE,GAAE,IAAE,OAAO,OAAO,CAAC,GAAE,KAAK,SAAS;AAAE,WAAO,KAAK,CAAC,EAAE,QAAQ,OAAG;AAAC,UAAG,CAAC,GAAE,CAAC,IAAE,GAAG,CAAC,GAAE,IAAE,CAAC;AAAE,QAAE,CAAC,IAAE,EAAE,CAAC,GAAE,EAAE,CAAC,IAAE;AAAA,IAAC,CAAC;AAAE,QAAI,IAAE,CAAC,GAAE,IAAE,KAAK,mBAAmB,CAAC,GAAE,IAAE,CAAC;AAAE,WAAK,EAAE,SAAO,KAAG;AAAC,UAAI,IAAE,KAAK,aAAa,GAAE,GAAEA,KAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,YAAM,QAAQ,IAAI,CAAC;AAAA,IAAC;AAAC,SAAG,QAAM,CAAC,KAAG,QAAQ,KAAK,iIAAiI;AAAE,QAAI,IAAE,EAAE,OAAO,OAAG,CAAC,GAAG,CAAC,KAAG,CAAC,GAAG,EAAE,MAAK,GAAEA,GAAC,CAAC,EAAE,IAAI,OAAG,EAAE,IAAI;AAAE,QAAG,EAAE,SAAO,GAAE;AAAC,UAAI,IAAE;AAAG,YAAM,KAAG,SAAO,IAAE,wFAAwF,CAAC,MAAK,IAAI,MAAM,+BAA+B,CAAC,+BAA+B,CAAC,gDAAgD,CAAC,MAAM,CAAC,EAAE;AAAA,IAAC;AAAC,WAAO;AAAA,EAAC;AAAA,EAAC,aAAa,GAAEA,KAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE;AAAC,QAAI,IAAE,CAAC;AAAE,WAAKA,IAAE,SAAO,KAAG;AAAC,UAAI,IAAEA,IAAE,IAAI;AAAE,QAAE,iBAAe,EAAE;AAAS,UAAI,IAAE;AAAG,UAAG,EAAE,KAAK,OAAK,WAAS,EAAE,cAAa,EAAE,MAAK,GAAE,CAAC,MAAI,CAAC,CAAC,IAAE,GAAG,EAAE,KAAK,MAAK,CAAC,IAAG,EAAE,EAAE,KAAK,IAAI,KAAG,MAAK;AAAC,YAAI,IAAE,GAAG,EAAE,MAAK,GAAE,GAAE,KAAK,gBAAgB;AAAE,cAAI,CAAC,CAAC,IAAE,GAAG,EAAE,KAAK,MAAK,CAAC;AAAG,YAAI,IAAE,EAAE;AAAe,UAAE,UAAU,CAAC,IAAE,EAAE,KAAK,EAAE,KAAK,QAAI,EAAE,CAAC,IAAE,GAAE,KAAK,4BAA0B,KAAK,iBAAiB,CAAC,IAAE,KAAK,gBAAgB,CAAC,IAAG,EAAE,iBAAe,GAAE,KAAK,uBAAuB,GAAE,EAAE,MAAK,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,KAAK,kBAAkB,EAAE,MAAKA,KAAE,GAAE,GAAE,GAAE,CAAC,GAAE,EAAE,CAAC,KAAG,EAAE,CAAC,IAAE,GAAE,KAAK,4BAA0B,KAAK,iBAAiB,CAAC,IAAE,KAAK,gBAAgB,CAAC,IAAG,KAAK,uBAAuB,GAAE,EAAE,MAAK,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,KAAK,kBAAkB,EAAE,MAAKA,KAAE,GAAE,GAAE,GAAE,CAAC;AAAA,MAAE,MAAM,MAAK,kBAAkB,EAAE,MAAKA,KAAE,GAAE,GAAE,GAAE,CAAC;AAAA,IAAC;AAAC,WAAO;AAAA,EAAC;AAAA,EAAC,kBAAkB,GAAEA,KAAE,GAAE,GAAE,GAAE,GAAE;AAAC,MAAE,SAAS,QAAQ,OAAG;AAAC,UAAG,CAAC,CAAC,IAAE,GAAG,EAAE,MAAK,CAAC;AAAE,QAAE,CAAC,KAAG,CAAC,EAAE,IAAI,EAAE,IAAI,MAAI,EAAE,OAAK,UAAQ,EAAE,WAAW,KAAK,OAAG,CAAC,CAAC,GAAG,GAAE,GAAE,CAAC,CAAC,MAAI,EAAE,CAAC,IAAE,MAAGA,IAAE,KAAK,EAAC,UAAS,EAAE,gBAAe,MAAK,EAAC,CAAC,KAAG,EAAE,WAAW,MAAM,OAAG,CAAC,CAAC,GAAG,GAAE,GAAE,CAAC,CAAC,MAAI,EAAE,CAAC,IAAE,MAAGA,IAAE,KAAK,EAAC,UAAS,EAAE,gBAAe,MAAK,EAAC,CAAC;AAAA,IAAG,CAAC;AAAA,EAAC;AAAA,EAAC,UAAS;AAAC,WAAO,KAAK,KAAK,SAAS,EAAE,QAAQ,OAAG,KAAK,UAAU,CAAC,EAAE,QAAQ,CAAAA,QAAGA,IAAE,QAAQ,CAAC,CAAC;AAAA,EAAC;AAAA,EAAC,uBAAuB,GAAE;AAAC,WAAO,KAAK,CAAC,EAAE,QAAQ,CAAAA,QAAG;AAAC,UAAI,IAAE,EAAEA,GAAC,GAAE,CAAC,CAAC,IAAE,GAAGA,GAAC,GAAE,IAAE,KAAK,MAAM,MAAM,CAAC;AAAE,UAAG,EAAE,WAAW,SAAO,EAAE,WAAW,MAAM,OAAM;AAAC,YAAI,IAAE,EAAE,WAAW,MAAM,OAAM,IAAE,EAAE,WAAS,EAAE,MAAM,UAAQ,EAAE,MAAM,MAAM,CAAC,GAAE,MAAI,EAAE,CAAC,MAAI,MAAI,EAAE,CAAC,MAAI,CAAC;AAAE,UAAE,OAAO,GAAE,MAAI,sBAAsB,EAAE,IAAI,+CAA+C,CAAC,eAAe,EAAE,KAAK,GAAG;AAAA,MAAC;AAAC,QAAE,WAAW,SAAO,EAAE,WAAW,MAAM,SAAO,EAAE,OAAO,EAAE,UAAQ,EAAE,WAAW,MAAM,OAAM,MAAI,sBAAsB,EAAE,IAAI,8CAA8C,EAAE,WAAW,MAAM,KAAK,aAAa,EAAE,KAAK,EAAE;AAAA,IAAC,CAAC;AAAA,EAAC;AAAA,EAAC,UAAU,GAAE;AAAC,QAAIA,KAAE;AAAE,QAAI,IAAE,CAAC;AAAE,aAAQ,KAAK,GAAE;AAAC,UAAI,KAAG,KAAGA,MAAE,KAAK,gBAAc,QAAMA,QAAI,SAAO,SAAOA,IAAE,YAAU,QAAM,MAAI,SAAO,SAAO,EAAE,CAAC;AAAE,WAAG,OAAK,EAAE,EAAE,IAAI,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC;AAAA,IAAC;AAAC,WAAO;AAAA,EAAC;AAAA,EAAC,YAAY,GAAE;AAAC,QAAIA,MAAE,OAAO,KAAK,CAAC,EAAE,OAAO,OAAG;AAAC,UAAG,CAAC,CAAC,IAAE,GAAG,CAAC;AAAE,aAAO,KAAK,MAAM,MAAM,CAAC,KAAG;AAAA,IAAI,CAAC;AAAE,QAAGA,IAAE,SAAO,EAAE,OAAM,IAAI,MAAM,uDAAuDA,GAAC,8BAA8B;AAAA,EAAC;AAAA,EAAC,WAAW,GAAE;AAAC,WAAO,EAAE,IAAI,CAAAA,QAAG;AAAC,UAAI,GAAE;AAAE,UAAI,KAAG,KAAG,IAAE,KAAK,gBAAc,QAAM,MAAI,SAAO,SAAO,EAAE,aAAW,QAAM,MAAI,SAAO,SAAO,EAAEA,GAAC;AAAE,aAAO,KAAG,OAAK,EAAE,OAAKA;AAAA,IAAC,GAAE,CAAC,CAAC;AAAA,EAAC;AAAA,EAAC,aAAa,GAAE;AAAC,MAAE,QAAQ,CAAAA,QAAG;AAAC,UAAG,CAAC,CAAC,IAAE,GAAGA,GAAC;AAAE,UAAG,CAAC,KAAK,MAAM,MAAM,CAAC,EAAE,OAAM,IAAI,MAAM,eAAeA,GAAC,6BAA6B;AAAA,IAAC,CAAC;AAAA,EAAC;AAAC;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,IAAE,CAAC,GAAEA,MAAE,CAAC,GAAE;AAAC,SAAK,wBAAsB,GAAE,KAAK,eAAaA;AAAA,EAAC;AAAA,EAAC,aAAa,GAAEA,KAAE;AAAC,SAAK,sBAAsB,CAAC,IAAEA,IAAE,QAAO,KAAK,aAAaA,IAAE,EAAE,IAAEA;AAAA,EAAC;AAAA,EAAC,yBAAyB,GAAE;AAAC,WAAO,KAAK,sBAAsB,CAAC;AAAA,EAAC;AAAA,EAAC,iBAAiB,GAAE;AAAC,WAAO,KAAK,aAAa,CAAC;AAAA,EAAC;AAAA,EAAC,UAAS;AAAC,aAAQ,KAAK,KAAK,aAAa,MAAK,aAAa,CAAC,EAAE,cAAc,GAAE,OAAO,KAAK,aAAa,CAAC;AAAE,aAAQ,KAAK,KAAK,sBAAsB,MAAK,sBAAsB,CAAC,EAAE,QAAQ,GAAE,OAAO,KAAK,sBAAsB,CAAC;AAAA,EAAC;AAAC;AAAE,IAAI,KAAG;AAAP,IAA2B,KAAG;AAA9B,IAA2C,KAAG,MAAK;AAAA,EAAC,IAAI,eAAc;AAAC,WAAO,KAAK;AAAA,EAAO;AAAA,EAAC,IAAI,aAAY;AAAC,WAAO,KAAK,SAAS;AAAA,EAAU;AAAA,EAAC,IAAI,cAAa;AAAC,WAAO,KAAK,SAAS;AAAA,EAAW;AAAA,EAAC,IAAI,SAAQ;AAAC,WAAO,KAAK,SAAS;AAAA,EAAM;AAAA,EAAC,IAAI,UAAS;AAAC,WAAO,KAAK,SAAS;AAAA,EAAO;AAAA,EAAC,IAAI,UAAS;AAAC,WAAO,KAAK,SAAS;AAAA,EAAS;AAAA,EAAC,IAAI,WAAU;AAAC,WAAO,KAAK,UAAU;AAAA,EAAmB;AAAA,EAAC,IAAI,iBAAgB;AAAC,WAAO,KAAK;AAAA,EAAS;AAAA,EAAC,IAAI,4BAA2B;AAAC,WAAO,KAAK;AAAA,EAAoB;AAAA,EAAC,YAAY,GAAEA,MAAE,CAAC,GAAE,IAAE,IAAG;AAAC,SAAK,WAAS,GAAE,KAAK,cAAYA,KAAE,KAAK,UAAQ,OAAM,KAAK,KAAG,GAAEA,OAAG,SAAO,KAAK,cAAY,CAAC,IAAG,KAAK,kBAAgB,IAAI;AAAA,EAAE;AAAA,EAAC,gBAAe;AAAC,QAAI,IAAE,KAAK;AAAS,QAAG,EAAE,QAAM,KAAK,MAAK,UAAQ;AAAA,aAAU,KAAK,YAAY,eAAa,KAAK,MAAK,UAAQ,KAAK,GAAG,mBAAmB,GAAE,KAAK,WAAW;AAAA,SAAM;AAAC,UAAIA,MAAE,KAAK,GAAG,gBAAgB,GAAE,KAAK,WAAW;AAAE,UAAGA,IAAE,WAAS,EAAE,CAAAA,IAAE,KAAK,KAAK,GAAG,mBAAmB,GAAE,KAAK,WAAW,CAAC;AAAA,eAAUA,IAAE,SAAO,EAAE,OAAM,IAAI,MAAM,wBAAwBA,IAAE,MAAM,4BAA4B,CAAC,CAAC,CAAC,GAAG;AAAE,WAAK,UAAQA,IAAE,CAAC;AAAA,IAAC;AAAA,EAAC;AAAA,EAAC,OAAM;AAAC,QAAG,KAAK,cAAc,GAAE,KAAK,QAAQ,QAAM,KAAK,OAAM,IAAI,MAAM,+GAA+G;AAAE,QAAI,IAAE,KAAK,QAAQ,KAAK;AAAE,WAAO,EAAE,UAAU,CAAC,IAAE,EAAE,KAAK,CAAAA,QAAGA,IAAE,mBAAiB,OAAK,KAAK,SAASA,GAAC,IAAE,KAAK,cAAcA,GAAC,CAAC,IAAE,KAAK,SAAS,CAAC;AAAA,EAAC;AAAA,EAAC,SAAS,GAAE;AAAC,QAAIA,MAAE,KAAK,GAAG,cAAc,EAAE,YAAW,EAAE,WAAW;AAAE,WAAO,KAAK,kBAAkB,GAAEA,GAAC;AAAA,EAAC;AAAA,EAAC,MAAM,cAAc,GAAE;AAAC,QAAG,EAAE,mBAAiB,KAAK,OAAM,IAAI,MAAM,gDAAgD;AAAE,QAAIA,MAAE,MAAM,GAAG,EAAE,gBAAgB,GAAE,EAAE,WAAW;AAAE,WAAO,KAAK,kBAAkB,GAAEA,GAAC;AAAA,EAAC;AAAA,EAAC,kBAAkB,GAAEA,KAAE;AAAC,SAAK,YAAU;AAAE,QAAI,IAAE,KAAK,UAAU,eAAc,IAAE,KAAK,UAAU;AAAU,QAAG,KAAK,UAAU,uBAAqB,MAAK;AAAC,UAAI,IAAE,KAAK,UAAU;AAAoB,QAAE,aAAW,SAAO,IAAE,EAAE,YAAW,EAAE,wBAAsB,SAAO,KAAK,uBAAqB,EAAE;AAAA,IAAqB;AAAC,QAAG,KAAK,YAAU,GAAE,KAAK,UAAQ,GAAG,EAAE,SAAS,QAAQ,IAAI,EAAE,SAAS,WAAW,IAAG,KAAK,WAAS,IAAI,GAAG,GAAG,SAAS,eAAe,GAAE,KAAK,SAAS,CAAC,GAAE,KAAK,SAAS,YAAU,KAAK,6BAA6BA,GAAC,GAAE,KAAK,SAAS,kBAAgB,KAAK,iBAAgB,EAAE,oBAAkB,QAAM,EAAE,iBAAiB,QAAM,MAAK;AAAC,UAAI,IAAE,GAAG,SAAS,eAAe,EAAE,gBAAgB;AAAE,WAAK,cAAY,IAAI,GAAG,CAAC,GAAE,KAAK,YAAY,YAAU,KAAK,SAAS,WAAU,KAAK,YAAY,kBAAgB,KAAK,iBAAgB,KAAK,uBAAqB,EAAE;AAAA,IAAoB;AAAC,WAAM;AAAA,EAAE;AAAA,EAAC,MAAM,KAAK,GAAEA,KAAE;AAAC,QAAG,OAAO,KAAG,UAAS;AAAC,UAAI,IAAE,KAAK,GAAG,gBAAgB,CAAC;AAAE,UAAG,EAAE,WAAS,EAAE,OAAM,IAAI,MAAM,0CAA0C,CAAC,GAAG;AAAE,UAAG,EAAE,SAAO,EAAE,OAAM,IAAI,MAAM,wBAAwB,EAAE,MAAM,4BAA4B,CAAC,GAAG;AAAE,UAAE,EAAE,CAAC;AAAA,IAAC;AAAC,QAAG,EAAE,QAAM,KAAK,OAAM,IAAI,MAAM,6GAA6G;AAAE,WAAO,EAAE,KAAK,KAAK,SAAS;AAAA,EAAC;AAAA,EAAC,yBAAyB,GAAE;AAAC,QAAG,KAAK,sBAAqB;AAAC,UAAIA,MAAE,aAAa,KAAG,CAAC,CAAC,IAAE,GAAE,IAAE,CAAC;AAAE,aAAOA,IAAE,QAAQ,CAAC,GAAE,MAAI,EAAE,KAAK,qBAAqB,CAAC,CAAC,IAAE,CAAC,GAAE;AAAA,IAAC;AAAC,WAAO;AAAA,EAAC;AAAA,EAAC,QAAQ,GAAEA,KAAE;AAAC,QAAI,IAAE,KAAK,QAAQ,GAAE,KAAK,WAAW;AAAE,WAAO,KAAK,yBAAyB,CAAC;AAAA,EAAC;AAAA,EAAC,MAAM,aAAa,GAAEA,KAAE;AAAC,QAAI,IAAE,MAAM,KAAK,aAAa,GAAE,KAAK,WAAW;AAAE,WAAO,KAAK,yBAAyB,CAAC;AAAA,EAAC;AAAA,EAAC,gBAAgB,GAAE;AAAC,QAAIA;AAAE,QAAG,EAAE,aAAa,OAAK,CAAC,MAAM,QAAQ,CAAC,GAAE;AAAC,UAAI,KAAGA,MAAE,KAAK,eAAa,QAAMA,QAAI,SAAO,SAAOA,IAAE;AAAO,UAAG,KAAG,KAAK,UAAQ,KAAK,GAAE;AAAC,YAAI,IAAE,EAAE,CAAC;AAAE,UAAE,cAAY,SAAO,EAAE,CAAC,IAAE,KAAK,0BAA0B,EAAE,UAAU;AAAA,MAAE;AAAC,aAAO;AAAA,IAAC;AAAC,QAAE,MAAM,QAAQ,CAAC,IAAE,IAAE,CAAC,CAAC;AAAE,QAAI,IAAE,OAAO,KAAK,KAAK,yBAAyB,EAAE;AAAO,QAAG,EAAE,SAAO,MAAI,KAAK,WAAW,OAAO,OAAM,IAAI,MAAM,oDAAoD,KAAK,WAAW,SAAO,CAAC,+CAA+C,EAAE,MAAM,0BAA0B;AAAE,QAAI,IAAE;AAAE,WAAO,KAAK,WAAW,OAAO,CAAC,GAAE,MAAI;AAAC,UAAI,GAAE,GAAE;AAAE,UAAI,KAAG,KAAG,KAAG,IAAE,KAAK,eAAa,QAAM,MAAI,SAAO,SAAO,EAAE,YAAU,QAAM,MAAI,SAAO,SAAO,EAAE,CAAC,OAAK,QAAM,MAAI,SAAO,SAAO,EAAE;AAAW,aAAO,KAAG,OAAK,EAAE,CAAC,IAAE,KAAK,0BAA0B,CAAC,IAAE,EAAE,CAAC,IAAE,EAAE,GAAG,GAAE;AAAA,IAAC,GAAE,CAAC,CAAC;AAAA,EAAC;AAAA,EAAC,iBAAiB,GAAE;AAAC,WAAO,IAAE,KAAG,KAAK,aAAY,MAAM,QAAQ,CAAC,IAAE,IAAE,CAAC,CAAC;AAAA,EAAC;AAAA,EAAC,0BAAyB;AAAC,WAAO,KAAK,eAAa,OAAK,CAAC,IAAE,KAAK,wBAAsB,OAAK,KAAK,YAAY,QAAQ,CAAC,GAAE,CAAC,CAAC,IAAE,KAAK,YAAY,QAAQ,CAAC,GAAE,OAAO,KAAK,KAAK,qBAAqB,OAAO,CAAC;AAAA,EAAC;AAAA,EAAC,MAAM,+BAA8B;AAAC,WAAO,KAAK,eAAa,OAAK,CAAC,IAAE,KAAK,wBAAsB,OAAK,KAAK,YAAY,aAAa,CAAC,GAAE,CAAC,CAAC,IAAE,KAAK,YAAY,aAAa,CAAC,GAAE,OAAO,KAAK,KAAK,qBAAqB,OAAO,CAAC;AAAA,EAAC;AAAA,EAAC,6BAA6B,GAAE;AAAC,QAAG,KAAK,4BAA0B,CAAC,GAAE,KAAK,sBAAqB;AAAC,UAAIA,MAAE,KAAK,qBAAqB,SAAQ,IAAE,OAAO,KAAKA,GAAC;AAAE,eAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,KAAI;AAAC,YAAI,IAAE,EAAE,CAAC,GAAE,IAAEA,IAAE,CAAC;AAAE,aAAK,0BAA0B,EAAE,UAAU,IAAE,EAAE,CAAC;AAAA,MAAC;AAAA,IAAC;AAAA,EAAC;AAAA,EAAC,QAAQ,GAAEA,KAAE;AAAC,SAAK,6BAA2B,QAAM,KAAK,6BAA6B,KAAK,wBAAwB,CAAC,GAAE,IAAE,KAAK,gBAAgB,CAAC,GAAEA,MAAE,KAAK,iBAAiBA,GAAC;AAAE,QAAI,IAAE,KAAK,SAAS,QAAQ,GAAEA,GAAC;AAAE,WAAO,EAAE,SAAO,IAAE,IAAE,EAAE,CAAC;AAAA,EAAC;AAAA,EAAC,MAAM,aAAa,GAAEA,KAAE;AAAC,SAAK,6BAA2B,QAAM,KAAK,6BAA6B,MAAM,KAAK,6BAA6B,CAAC,GAAE,IAAE,KAAK,gBAAgB,CAAC,GAAEA,MAAE,KAAK,iBAAiBA,GAAC;AAAE,QAAI,IAAE,MAAM,KAAK,SAAS,aAAa,GAAEA,GAAC;AAAE,WAAO,EAAE,SAAO,IAAE,IAAE,EAAE,CAAC;AAAA,EAAC;AAAA,EAAC,yBAAwB;AAAC,WAAO,KAAK,SAAS,uBAAuB;AAAA,EAAC;AAAA,EAAC,6BAA4B;AAAC,SAAK,SAAS,2BAA2B;AAAA,EAAC;AAAA,EAAC,6BAA6B,GAAE;AAAC,WAAO,OAAO,KAAK,CAAC,EAAE,OAAO,CAACA,KAAE,OAAKA,IAAE,CAAC,IAAE,CAAC,EAAE,CAAC,CAAC,GAAEA,MAAG,CAAC,CAAC;AAAA,EAAC;AAAA,EAAC,UAAS;AAAC,SAAK,SAAS,QAAQ,GAAE,KAAK,gBAAc,KAAK,YAAY,QAAQ,GAAE,KAAK,6BAA2B,GAAG,KAAK,yBAAyB,IAAG,KAAK,gBAAgB,QAAQ;AAAA,EAAC;AAAC;AAAE,eAAe,GAAGD,KAAE,IAAE,CAAC,GAAEC,MAAE,IAAG;AAAC,MAAGD,OAAG,KAAK,OAAM,IAAI,MAAM,wGAAwG;AAAE,OAAG,SAAO,IAAE,CAAC,IAAG,EAAE,aAAW,OAAOA,OAAG,aAAWA,MAAE,GAAGA,GAAC;AAAG,MAAI,IAAE,IAAI,GAAGA,KAAE,GAAEC,GAAC;AAAE,SAAO,MAAM,EAAE,KAAK,GAAE;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAGA,OAAG,KAAK,OAAM,IAAI,MAAM,sHAAsH;AAAE,MAAI;AAAE,MAAGA,eAAa,OAAM;AAAC,QAAG,CAAC,GAAE,CAAC,IAAEA;AAAE,QAAG,CAAC,EAAE,OAAM,IAAI,MAAM,kDAAkD;AAAE,QAAG,CAAC,KAAG,EAAE,aAAa,aAAa,OAAM,IAAI,MAAM,mEAAmE;AAAE,QAAG,EAAE,mBAAkB,GAAG,OAAM,IAAI,MAAM,uCAAuC;AAAE,QAAG,EAAE,qBAAoB,GAAG,OAAM,IAAI,MAAM,yCAAyC;AAAE,QAAI,IAAE,GAAG,eAAe,EAAE,eAAe,GAAE,IAAE,GAAG,6BAA6B,GAAE,GAAE,CAAC;AAAE,QAAE,GAAG,eAAe,CAAC;AAAA,EAAC,WAAS,UAASA,IAAE,KAAEA;AAAA,WAAU,mBAAkBA,OAAG,iBAAgBA,OAAG,gBAAeA,IAAE,KAAE,GAAG,eAAeA,GAAC;AAAA,MAAO,OAAM,IAAI,MAAM,sBAAsB;AAAE,MAAIC,MAAE,IAAI,GAAG,CAAC;AAAE,SAAOA,IAAE,KAAK,GAAEA;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,SAAOA,IAAE,SAAS,GAAG,MAAIA,MAAEA,MAAE,MAAK,GAAGA,GAAC,GAAG,EAAE,GAAG,EAAE;AAAE;AAAC,IAAI,KAAG;AAAS,SAAS,EAAEA,KAAE,GAAE;AAAC,QAAM,QAAQA,GAAC,MAAIA,MAAE,CAACA,GAAC,IAAGA,IAAE,QAAQ,CAAAC,QAAG;AAAC,IAAAA,OAAG,QAAM,EAAE,OAAOA,IAAE,UAAQ,aAAY,MAAI,GAAG,CAAC,yDAAyD;AAAA,EAAC,CAAC;AAAC;AAAC,IAAI,KAAG,GAAG;AAAV,IAAoB,KAAG,MAAMD,YAAU,GAAE;AAAA,EAAC,aAAY;AAAC,WAAOA,IAAE;AAAA,EAAY;AAAA,EAAC,cAAa;AAAC,UAAM,GAAE,KAAK,YAAU,IAAG,KAAK,WAAS,MAAG,KAAK,OAAK,IAAI,GAAG,MAAK,GAAG,CAAC;AAAA,EAAC;AAAA,EAAC,MAAM,GAAEC,KAAE,GAAE;AAAC,SAAK,aAAW,KAAK,WAAS,OAAG,EAAE,EAAE,IAAI,SAAS,KAAG,EAAE,KAAK;AAAA;AAAA;AAAA,6BAGthgD;AAAG,QAAI,IAAE,EAAC,IAAG,KAAK,WAAW,EAAC;AAAE,WAAO,KAAK,KAAK,IAAI,GAAE,EAAC,QAAO,GAAE,OAAM,GAAE,UAAS,EAAC,CAAC,GAAE;AAAA,EAAC;AAAA,EAAC,eAAe,GAAEA,KAAE,GAAE;AAAC,QAAI;AAAE,QAAGA,QAAI,YAAU,KAAG,QAAM,EAAE,SAAO,KAAG,EAAE,SAAS,EAAE,CAAC,CAAC,GAAE;AAAC,UAAI,IAAE,EAAE,IAAI,OAAG,EAAE,aAAa,CAAC,CAAC;AAAE,UAAE,KAAK,MAAM,GAAE,GAAEA,GAAC;AAAA,IAAC,MAAM,KAAE,KAAK,MAAM,GAAE,GAAEA,GAAC;AAAE,WAAM,EAAC,QAAO,GAAE,OAAM,GAAE,OAAMA,IAAC;AAAA,EAAC;AAAA,EAAC,SAAS,GAAE;AAAC,WAAO,KAAK,KAAK,IAAI,CAAC,IAAE,KAAK,KAAK,IAAI,CAAC,EAAE,WAAS;AAAA,EAAC;AAAA,EAAC,OAAO,GAAE;AAAC,QAAIA,MAAE,KAAK,KAAK,IAAI,CAAC;AAAE,IAAAA,IAAE;AAAA,EAAU;AAAA,EAAC,OAAO,GAAE;AAAC,QAAG,KAAK,KAAK,IAAI,CAAC,GAAE;AAAC,UAAIA,MAAE,KAAK,KAAK,IAAI,CAAC;AAAE,MAAAA,IAAE;AAAA,IAAU;AAAA,EAAC;AAAA,EAAC,KAAK,GAAEA,KAAE,GAAE,GAAE,GAAE;AAAC,SAAK,KAAK,IAAI,GAAE,EAAC,QAAOA,KAAE,OAAM,GAAE,UAAS,EAAC,CAAC;AAAA,EAAC;AAAA,EAAC,aAAY;AAAC,WAAO,KAAK,KAAK,WAAW;AAAA,EAAC;AAAA,EAAC,MAAM,KAAK,GAAE;AAAC,WAAO,KAAK,SAAS,CAAC;AAAA,EAAC;AAAA,EAAC,SAAS,GAAE;AAAC,QAAG,EAAC,OAAMA,KAAE,oBAAmB,EAAC,IAAE,KAAK,KAAK,IAAI,CAAC;AAAE,QAAGA,QAAI,aAAY;AAAC,UAAI,IAAE,KAAK,SAAS,EAAE,KAAK,MAAM,GAAE,IAAE,KAAK,SAAS,EAAE,KAAK,MAAM;AAAE,aAAO,EAAE,uBAAuB,GAAE,CAAC;AAAA,IAAC;AAAC,WAAO,EAAE,mCAAmC,KAAK,KAAK,IAAI,CAAC,EAAE,QAAOA,GAAC;AAAA,EAAC;AAAA,EAAC,WAAW,GAAE;AAAC,QAAIA,MAAE,KAAK,SAAS,EAAE,MAAM;AAAE,QAAG,EAAE,UAAQ,SAAS,KAAG;AAAC,UAAI,IAAEA,IAAE,IAAI,OAAG,EAAE,aAAa,CAAC,CAAC;AAAE,aAAO,GAAG,EAAE,OAAM,EAAE,OAAM,CAAC;AAAA,IAAC,SAAO,GAAE;AAAC,YAAM,IAAI,MAAM,kDAAkD;AAAA,IAAC;AAAC,WAAO,GAAG,EAAE,OAAM,EAAE,OAAMA,GAAC;AAAA,EAAC;AAAA,EAAC,WAAW,GAAEA,KAAE,GAAE;AAAC,WAAO,GAAG,EAAE,yBAAyB,KAAK,eAAeA,KAAE,GAAE,CAAC,GAAE,IAAI;AAAA,EAAC;AAAA,EAAC,YAAY,GAAEA,MAAE,OAAG;AAAC,QAAG,KAAK,KAAK,IAAI,CAAC,GAAE;AAAC,UAAG,KAAK,KAAK,IAAI,CAAC,EAAE,YAAW,CAACA,OAAG,KAAK,KAAK,IAAI,CAAC,EAAE,WAAS,EAAE,QAAM;AAAG,UAAG,EAAC,oBAAmB,EAAC,IAAE,KAAK,KAAK,IAAI,CAAC;AAAE,WAAG,SAAO,KAAK,YAAY,EAAE,KAAK,QAAO,IAAE,GAAE,KAAK,YAAY,EAAE,KAAK,QAAO,IAAE,IAAG,KAAK,KAAK,OAAO,CAAC;AAAA,IAAC;AAAC,WAAM;AAAA,EAAE;AAAA,EAAC,8BAA8B,GAAE;AAAC,SAAK,YAAY,EAAE,MAAM;AAAA,EAAC;AAAA,EAAC,MAAM,KAAK,GAAE;AAAC,QAAIA,MAAE,EAAE,IAAI;AAAE,WAAO,EAAE,GAAE,EAAC,UAAS,EAAE,IAAI,IAAEA,IAAC;AAAA,EAAC;AAAA,EAAC,SAAQ;AAAC,WAAM,EAAC,YAAW,MAAG,SAAQ,CAAC,oHAAoH,EAAC;AAAA,EAAC;AAAA,EAAC,MAAM,GAAE;AAAC,MAAE,CAAC,CAAC,GAAE,OAAO;AAAE,QAAIA,MAAE,KAAK,SAAS,EAAE,MAAM;AAAE,WAAO,GAAG,EAAE,OAAMA,GAAC;AAAA,EAAC;AAAA,EAAC,UAAS;AAAA,EAAC;AAAA,EAAC,iBAAgB;AAAC,WAAO;AAAA,EAAE;AAAA,EAAC,UAAS;AAAC,WAAO,MAAM,QAAQ;AAAA,EAAC;AAAC;AAAE,GAAG,aAAW;AAAE,IAAI,KAAG,CAAC;AAAE,GAAG,IAAG,EAAC,SAAQ,MAAI,IAAG,cAAa,MAAI,IAAG,oBAAmB,MAAI,IAAG,gBAAe,MAAI,IAAG,UAAS,MAAI,IAAG,UAAS,MAAI,IAAG,YAAW,MAAI,IAAG,WAAU,MAAI,IAAG,SAAQ,MAAI,IAAG,WAAU,MAAI,IAAG,cAAa,MAAI,IAAG,WAAU,MAAI,IAAG,cAAa,MAAI,IAAG,cAAa,MAAI,IAAG,kBAAiB,MAAI,IAAG,aAAY,MAAI,IAAG,eAAc,MAAI,IAAG,UAAS,MAAI,IAAG,cAAa,MAAI,IAAG,SAAQ,MAAI,IAAG,SAAQ,MAAI,IAAG,aAAY,MAAI,IAAG,aAAY,MAAI,IAAG,cAAa,MAAI,IAAG,SAAQ,MAAI,IAAG,cAAa,MAAI,IAAG,UAAS,MAAI,IAAG,kBAAiB,MAAI,IAAG,iBAAgB,MAAI,IAAG,0BAAyB,MAAI,IAAG,WAAU,MAAI,IAAG,WAAU,MAAI,IAAG,aAAY,MAAI,IAAG,aAAY,MAAI,IAAG,eAAc,MAAI,IAAG,WAAU,MAAI,IAAG,yBAAwB,MAAI,IAAG,mBAAkB,MAAI,IAAG,4BAA2B,MAAI,IAAG,UAAS,MAAI,IAAG,uBAAsB,MAAI,IAAG,wBAAuB,MAAI,IAAG,kBAAiB,MAAI,IAAG,kBAAiB,MAAI,IAAG,iBAAgB,MAAI,IAAG,4BAA2B,MAAI,IAAG,SAAQ,MAAI,IAAG,UAAS,MAAI,IAAG,UAAS,MAAI,IAAG,eAAc,MAAI,IAAG,YAAW,MAAI,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAI,IAAE,IAAI,aAAaA,IAAE,MAAM;AAAE,WAAQC,MAAE,GAAEA,MAAED,IAAE,QAAO,EAAEC,IAAE,GAAEA,GAAC,IAAE,KAAK,IAAID,IAAEC,GAAC,CAAC;AAAE,SAAO;AAAC;AAAC,IAAI,KAAG,CAAAD,QAAG;AAAC,MAAG,EAAC,GAAE,EAAC,IAAEA,IAAE,QAAOC,MAAED,IAAE;AAAQ,IAAE,GAAE,KAAK;AAAE,MAAI,IAAE,IAAI,aAAa,EAAE,cAAc,EAAE,KAAK,CAAC,GAAE,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE;AAAO,SAAO,IAAE,GAAG,CAAC,GAAEA,IAAE,WAAW,GAAE,EAAE,OAAM,EAAE,KAAK;AAAC;AAAjL,IAAmL,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,SAAM,CAAC,GAAEC,KAAE,GAAE,GAAE,MAAI;AAAC,QAAI,IAAE,EAAE,2BAA2B,GAAEA,GAAC,GAAE,IAAE,EAAE,QAAO,IAAE,EAAE,eAAe,CAAC,GAAE,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,EAAE,uBAAuB,GAAE,CAAC,GAAE,IAAE,EAAE,QAAO,IAAEA,IAAE,QAAO,IAAE,EAAE,eAAe,CAAC,GAAE,IAAE,EAAE,eAAeA,GAAC,GAAE,IAAE,EAAE,iBAAiB,GAAE,CAAC,GAAE,IAAE,EAAE,iBAAiBA,KAAE,CAAC;AAAE,QAAG,EAAE,SAAO,EAAE,WAAS,EAAE,UAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE,EAAE,GAAE,CAAC,IAAED,IAAE,EAAE,IAAE,EAAE,MAAM,GAAE,EAAE,IAAE,EAAE,MAAM,CAAC;AAAA,QAAO,UAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE,GAAE;AAAC,UAAI,IAAE,EAAE,WAAW,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,MAAM,CAAC,CAAC;AAAE,QAAE,QAAQ,OAAG,EAAE,CAAC,IAAE,CAAC;AAAE,UAAI,IAAE,EAAE,WAAW,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,MAAM,CAAC,CAAC;AAAE,QAAE,QAAQ,OAAG,EAAE,CAAC,IAAE,CAAC;AAAE,UAAI,IAAE,EAAE,WAAW,GAAE,GAAE,CAAC;AAAE,QAAE,CAAC,IAAEA,IAAE,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC;AAAA,IAAC;AAAC,WAAM,CAAC,GAAE,CAAC;AAAA,EAAC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,MAAK,GAAE,MAAK,EAAC,IAAE,GAAE,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAEA,IAAE,eAAe,EAAE,OAAM,WAAW,GAAE,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM;AAAE,SAAO,EAAE,qBAAmB,EAAC,MAAKA,IAAE,eAAe,EAAE,OAAM,WAAU,CAAC,GAAE,MAAKA,IAAE,eAAe,EAAE,OAAM,WAAU,CAAC,EAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE,GAAEC,MAAE,WAAU;AAAC,MAAGA,QAAI,aAAY;AAAC,QAAI,IAAE,GAAGD,KAAE,GAAE,SAAS,GAAE,IAAE,GAAGA,KAAE,GAAE,SAAS;AAAE,WAAO,GAAG,EAAC,QAAO,EAAC,MAAK,GAAE,MAAK,EAAC,GAAE,SAAQA,IAAC,CAAC;AAAA,EAAC;AAAC,MAAI,IAAE,EAAE,oBAAoB,EAAE,cAAc,CAAC,GAAEC,GAAC;AAAE,SAAOD,IAAE,eAAe,GAAEC,KAAE,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE;AAAE,SAAOC,IAAE,OAAO,EAAE,MAAM,GAAE,EAAC,QAAO,EAAE,QAAO,OAAM,EAAE,OAAM,OAAM,EAAE,MAAK;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,OAAM,EAAC,IAAE,GAAE,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,mBAAmB,MAAK,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE;AAAO,SAAOA,IAAE,eAAe,EAAE,OAAM,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE;AAAC,MAAG,MAAI,SAAQ;AAAC,QAAI,IAAE,WAAW,KAAKD,GAAC;AAAE,WAAM,CAAC,GAAE,SAAQ,CAAC;AAAA,EAAC;AAAC,MAAG,MAAI,QAAO;AAAC,QAAI,IAAE,EAAE,aAAa,CAAC,CAAC,GAAEC,GAAC,GAAE,CAAC,GAAE,CAAC,IAAE,GAAG,CAAC,GAAE,MAAI,MAAI,IAAE,IAAE,CAAC,EAAE,GAAE,CAAC,GAAED,KAAE,GAAE,MAAM;AAAE,WAAM,CAAC,GAAE,QAAO,CAAC;AAAA,EAAC;AAAC,QAAM,IAAI,MAAM,iCAAiCC,GAAC,OAAO,CAAC,EAAE;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,OAAM,EAAC,IAAE;AAAE,MAAG,MAAI,aAAY;AAAC,QAAG,EAAE,UAAQ,YAAY,QAAO,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,IAAC,CAAC;AAAE,QAAI,IAAE,GAAGA,KAAE,EAAE,OAAM,EAAE,KAAK,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,UAAS,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,MAAK,GAAE,MAAK,EAAC,GAAE,SAAQA,IAAC,CAAC;AAAE,WAAOA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAE;AAAA,EAAC;AAAC,MAAG,EAAE,UAAQ,aAAY;AAAC,QAAI,IAAE,GAAG,EAAC,QAAO,EAAC,OAAM,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,WAAOA,IAAE,8BAA8B,CAAC,GAAE;AAAA,EAAC;AAAC,MAAG,CAAC,EAAE,gBAAgB,EAAE,OAAM,CAAC,GAAE;AAAC,QAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,IAAC,CAAC;AAAE,WAAM,EAAC,QAAO,EAAE,QAAO,OAAM,EAAE,OAAM,OAAM,EAAC;AAAA,EAAC;AAAC,MAAI,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,CAAC,GAAE,GAAE,CAAC,IAAE,GAAG,GAAE,EAAE,OAAM,EAAE,OAAM,CAAC;AAAE,SAAOA,IAAE,eAAe,GAAE,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE;AAAC,SAAOA,OAAG,OAAK,CAAC,EAAC,QAAO,GAAE,SAAQ,EAAC,MAAI;AAAC,QAAG,EAAC,GAAE,GAAE,EAAC,IAAE,GAAE,IAAE;AAAE,MAAE,CAAC,GAAE,CAAC,GAAED,GAAC;AAAE,QAAI,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,UAAQ,WAAS,EAAE,uBAAuB,CAAC,IAAE,GAAE,IAAE,EAAE,UAAQ,WAAS,EAAE,uBAAuB,CAAC,IAAE,GAAE,IAAE,KAAG,EAAE,OAAM,CAAC,GAAE,CAAC,IAAE,EAAE,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,CAAC;AAAE,WAAO,EAAE,eAAe,GAAE,GAAE,CAAC;AAAA,EAAC,IAAE,CAAC,EAAC,QAAO,GAAE,SAAQ,EAAC,MAAI;AAAC,QAAG,EAAC,GAAE,GAAE,EAAC,IAAE,GAAE,IAAE;AAAE,QAAG,EAAE,UAAQ,eAAa,EAAE,UAAQ,aAAY;AAAC,UAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,YAAW,EAAC,CAAC,GAAE,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,GAAE,IAAE,EAAE,mBAAmB,MAAK,IAAE,EAAE,mBAAmB,MAAK,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,YAAW,EAAC,CAAC,GAAE,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,GAAE,IAAE,EAAE,mBAAmB,MAAK,IAAE,EAAE,mBAAmB,MAAK,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,CAAC,GAAE,GAAE,CAAC,IAAEC,IAAE,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,eAAe,GAAE,WAAU,CAAC,GAAE,IAAE,EAAE,eAAe,GAAE,WAAU,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,MAAK,GAAE,MAAK,EAAC,GAAE,SAAQ,EAAC,CAAC;AAAE,aAAO,EAAE,8BAA8B,CAAC,GAAE,EAAE,8BAA8B,CAAC,GAAE,EAAE,8BAA8B,CAAC,GAAE,EAAE,8BAA8B,CAAC,GAAE;AAAA,IAAC,OAAK;AAAC,UAAI,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,KAAG,EAAE,OAAM,CAAC,GAAE,CAAC,IAAE,EAAE,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,CAAC;AAAE,aAAO,EAAE,eAAe,GAAE,GAAE,CAAC;AAAA,IAAC;AAAA,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,SAAM,CAAC,GAAEC,KAAE,GAAE,GAAE,GAAE,MAAI;AAAC,QAAI,IAAE,EAAE,2BAA2B,GAAEA,GAAC,GAAE,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,EAAE,QAAO,IAAE,EAAE,eAAe,CAAC,GAAE,IAAE,EAAE,uBAAuB,WAAU,CAAC,GAAE,IAAE,EAAE,uBAAuB,WAAU,CAAC,GAAE,IAAE,EAAE,iBAAiB,GAAE,CAAC,GAAE,IAAE,EAAE,iBAAiBA,KAAE,CAAC,GAAE,IAAE,EAAE,uBAAuB,GAAE,CAAC,GAAE,IAAE,EAAE,uBAAuB,GAAE,CAAC,GAAE,IAAE,EAAE,QAAO,IAAE,EAAE,eAAe,CAAC,GAAE,IAAEA,IAAE,QAAO,IAAE,EAAE,eAAeA,GAAC;AAAE,QAAG,EAAE,SAAO,EAAE,WAAS,EAAE,UAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,KAAI;AAAC,UAAI,IAAE,IAAE,EAAE,QAAO,IAAE,IAAE,EAAE,QAAO,IAAED,IAAE,EAAE,IAAE,CAAC,GAAE,EAAE,IAAE,IAAE,CAAC,GAAE,EAAE,IAAE,CAAC,GAAE,EAAE,IAAE,IAAE,CAAC,CAAC;AAAE,QAAE,CAAC,IAAE,EAAE,MAAK,EAAE,CAAC,IAAE,EAAE;AAAA,IAAI;AAAA,QAAM,UAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,KAAI;AAAC,UAAI,IAAE,EAAE,WAAW,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,MAAM,CAAC,CAAC;AAAE,QAAE,QAAQ,OAAG,EAAE,CAAC,IAAE,CAAC;AAAE,UAAI,IAAE,EAAE,WAAW,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,MAAM,CAAC,CAAC;AAAE,QAAE,QAAQ,OAAG,EAAE,CAAC,IAAE,CAAC;AAAE,UAAI,IAAE,EAAE,WAAW,GAAE,GAAE,CAAC,GAAE,IAAEA,IAAE,EAAE,IAAE,CAAC,GAAE,EAAE,IAAE,IAAE,CAAC,GAAE,EAAE,IAAE,CAAC,GAAE,EAAE,IAAE,IAAE,CAAC,CAAC;AAAE,QAAE,CAAC,IAAE,EAAE,MAAK,EAAE,CAAC,IAAE,EAAE;AAAA,IAAI;AAAC,WAAM,CAAC,GAAE,GAAE,CAAC;AAAA,EAAC;AAAC;AAAC,IAAI,KAAG,GAAG,CAACA,KAAE,MAAIA,MAAE,CAAC;AAApB,IAAsB,KAAG,GAAG,CAACA,KAAE,GAAEC,KAAE,OAAK,EAAC,MAAKD,MAAEC,KAAE,MAAK,IAAE,EAAC,EAAE;AAA5D,IAA8D,KAAG,GAAG,IAAG,IAAG,EAAE;AAA5E,IAA8E,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE;AAAC,MAAI,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,EAAE,oBAAoB,GAAEA,GAAC;AAAE,WAAQ,IAAE,GAAE,IAAED,IAAE,QAAO,KAAI;AAAC,QAAI,IAAEA,IAAE,CAAC;AAAE,QAAG,IAAE,EAAE,OAAM,IAAI,MAAM,+BAA+B;AAAE,SAAG,MAAI,IAAE,IAAE,EAAE,CAAC,KAAG,EAAE,CAAC,IAAE,EAAE,CAAC,KAAG;AAAA,EAAE;AAAC,SAAO;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,IAAE,OAAG;AAAC,MAAI,IAAED,IAAE,MAAM,CAAC,GAAE,IAAEA,IAAE,MAAM,CAAC,GAAE,IAAE,GAAG,CAAC,GAAEC,GAAC,GAAE,EAAE,KAAK;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,IAAI,UAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,QAAI,IAAED,IAAE,IAAI,GAAE,CAAC;AAAE,QAAG,IAAE,EAAE,OAAM,IAAI,MAAM,+BAA+B;AAAE,SAAGC,QAAI,IAAE,EAAE,IAAI,GAAE,GAAE,CAAC,IAAE,EAAE,OAAK,IAAE,EAAE,IAAI,EAAE,IAAI,GAAE,CAAC,IAAE,EAAE,IAAI,GAAE,CAAC,GAAE,GAAE,CAAC,IAAE,EAAE,IAAI,EAAE,IAAI,GAAE,CAAC,IAAE,GAAE,GAAE,CAAC;AAAA,EAAE;AAAC,SAAO;AAAC;AAAC,IAAI,KAAG,GAAG,CAACD,KAAE,MAAIA,MAAE,CAAC;AAApB,IAAsB,KAAG,GAAG,IAAG,EAAE;AAAjC,IAAmC,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGA,KAAE;AAAC,SAAM,CAAC,GAAEC,KAAE,MAAI;AAAC,QAAI,IAAE,EAAE,kBAAkBA,KAAE,EAAE,MAAM;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE,EAAE,GAAE,CAAC,IAAED,IAAE,EAAE,CAAC,GAAE,CAAC;AAAE,WAAO;AAAA,EAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,GAAG,CAAC;AAAE,SAAO,GAAGD,KAAE,GAAEC,GAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,SAAM,CAAC,EAAC,QAAO,GAAE,OAAM,GAAE,SAAQ,EAAC,MAAI;AAAC,QAAG,EAAC,GAAE,EAAC,IAAE;AAAE,MAAE,GAAED,GAAC;AAAE,QAAI,IAAE,GAAE,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO;AAAE,QAAG,EAAE,UAAQ,UAAS;AAAC,UAAG,CAAC,MAAM,QAAQ,CAAC,EAAE,OAAM,IAAI,MAAM,oDAAoD;AAAE,UAAE,EAAE,uBAAuB,CAAC;AAAA,IAAC,MAAM,KAAE;AAAE,QAAI,IAAEC,OAAG,EAAE,OAAM,IAAE,EAAE,GAAE,GAAE,CAAC;AAAE,WAAO,EAAE,eAAe,EAAE,OAAM,GAAE,CAAC;AAAA,EAAC;AAAC;AAAC,IAAI,KAAG,GAAG,CAAAD,QAAG,KAAK,KAAKA,GAAC,CAAC;AAAzB,IAA2B,KAAG,GAAG,IAAG,EAAE;AAAtC,IAAwC,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE;AAAC,MAAI,IAAE,EAAE,kBAAkBA,KAAE,EAAE,cAAc,CAAC,CAAC;AAAE,MAAG,KAAGA,QAAI,UAAS;AAAC,QAAI,IAAE;AAAE,IAAAD,IAAE,QAAQ,OAAG;AAAC,UAAI,IAAE,EAAE,cAAc,EAAE,KAAK;AAAE,QAAE,IAAI,EAAE,MAAK,CAAC,GAAE,KAAG;AAAA,IAAC,CAAC;AAAA,EAAC,OAAK;AAAC,QAAI,IAAE;AAAE,IAAAA,IAAE,QAAQ,OAAG;AAAC,UAAI,IAAEC,QAAI,WAAS,EAAE,uBAAuB,EAAE,IAAI,IAAE,EAAE,MAAK,IAAE;AAAE,eAAQ,IAAE,GAAE,IAAE,EAAE,MAAM,CAAC,GAAE,EAAE,GAAE;AAAC,YAAI,IAAE,IAAE,EAAE,CAAC,IAAE;AAAE,iBAAQ,IAAE,GAAE,IAAE,EAAE,MAAM,CAAC,GAAE,EAAE,EAAE,GAAE,IAAE,CAAC,IAAE,EAAE,GAAG;AAAA,MAAC;AAAC,WAAG,EAAE,MAAM,CAAC;AAAA,IAAC,CAAC;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,IAAI,KAAG,GAAG,CAACD,KAAE,MAAIA,QAAI,IAAE,IAAE,CAAC;AAA1B,IAA4B,KAAG,GAAG,IAAG,IAAG,MAAK,MAAM;AAAnD,IAAqD,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,CAAAA,QAAG,KAAK,IAAIA,GAAC,CAAC;AAAxB,IAA0B,KAAG,GAAG,IAAG,IAAG,SAAS;AAA/C,IAAiD,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,CAAAA,QAAG,KAAK,MAAMA,GAAC,CAAC;AAA1B,IAA4B,KAAG,GAAG,IAAG,EAAE;AAAvC,IAAyC,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,CAAAA,QAAG,KAAK,MAAMA,GAAC,CAAC;AAA1B,IAA4B,KAAG,GAAG,IAAG,EAAE;AAAvC,IAAyC,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,CAACA,KAAE,MAAI,KAAK,MAAMA,MAAE,CAAC,CAAC;AAAhC,IAAkC,KAAG,GAAG,IAAG,IAAG,MAAK,OAAO;AAA1D,IAA4D,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE;AAAC,MAAI,IAAE,GAAG,CAAC,GAAE,CAAC,GAAEA,GAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,QAAI,IAAE,CAAC,GAAE,IAAE;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,UAAI,IAAED,IAAE,IAAE,IAAE,CAAC;AAAE,WAAG,IAAE,EAAE,CAAC,GAAE,EAAE,KAAK,CAAC;AAAA,IAAC;AAAC,QAAG,IAAE,KAAG,KAAG,IAAE,EAAE,OAAM,IAAI,MAAM,oBAAoB,CAAC,wBAAwB,CAAC,EAAE;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,IAAI,GAAE,OAAO,IAAE,IAAE,CAAC,IAAE,EAAE,IAAI,GAAG,EAAE,WAAW,IAAE,IAAE,CAAC,CAAC;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,GAAGA,KAAED,IAAE,KAAK;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,MAAK,EAAE,GAAE;AAAC,QAAI,IAAE,EAAE,WAAW,CAAC,EAAE,MAAM,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,WAAW,CAAC,GAAE,CAAC,CAAC;AAAE,MAAE,CAAC,IAAE,EAAE,OAAO,CAAC;AAAE,QAAI,IAAEA,IAAE,WAAW,CAAC;AAAE,SAAG,KAAG,IAAEA,IAAE,OAAO,WAAS,EAAE,OAAO,CAAC,IAAEA,IAAE,OAAO,CAAC;AAAA,EAAE;AAAC,SAAO;AAAC;AAAC,IAAI,KAAG,GAAG,CAACA,KAAE,MAAIA,MAAE,IAAE,IAAE,CAAC;AAAxB,IAA0B,KAAG,GAAG,IAAG,IAAG,MAAK,MAAM;AAAjD,IAAmD,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,CAACA,KAAE,MAAIA,OAAG,IAAE,IAAE,CAAC;AAAzB,IAA2B,KAAG,GAAG,IAAG,IAAG,MAAK,MAAM;AAAlD,IAAoD,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,CAACA,KAAE,MAAIA,MAAE,IAAE,IAAE,CAAC;AAAxB,IAA0B,KAAG,GAAG,IAAG,IAAG,MAAK,MAAM;AAAjD,IAAmD,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,CAACA,KAAE,MAAIA,OAAG,IAAE,IAAE,CAAC;AAAzB,IAA2B,KAAG,GAAG,IAAG,IAAG,MAAK,MAAM;AAAlD,IAAoD,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAI,KAAG,IAAED,QAAIC,MAAE,IAAG,IAAE,EAAE,oBAAoBA,KAAE,SAAS;AAAE,IAAE,CAAC,IAAED;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,IAAI,GAAE,CAAC,IAAE,EAAE,IAAE,CAAC,IAAE;AAAE,SAAO;AAAC;AAAC,IAAI,KAAG,GAAG,CAAAA,QAAG,KAAK,IAAIA,GAAC,CAAC;AAAxB,IAA0B,KAAG,GAAG,IAAG,EAAE;AAArC,IAAuC,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE;AAAC,MAAI,IAAE,EAAE,uBAAuB,GAAE,EAAE,cAAcA,GAAC,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE,GAAE;AAAC,QAAI,IAAE,IAAE,GAAE,IAAED,IAAE,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,UAAI,IAAEA,IAAE,IAAE,CAAC;AAAE,OAAC,OAAO,MAAM,CAAC,KAAG,IAAE,OAAK,IAAE;AAAA,IAAE;AAAC,MAAE,CAAC,IAAE;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,IAAI,KAAG,GAAG,CAACA,KAAE,MAAI,KAAK,IAAIA,KAAE,CAAC,CAAC;AAA9B,IAAgC,KAAG,GAAG,IAAG,EAAE;AAA3C,IAA6C,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,CAACA,KAAE,MAAI,KAAK,IAAIA,KAAE,CAAC,CAAC;AAA9B,IAAgC,KAAG,GAAG,IAAG,EAAE;AAA3C,IAA6C,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,CAACA,KAAE,MAAIA,MAAE,CAAC;AAApB,IAAsB,KAAG,GAAG,CAACA,KAAE,GAAEC,KAAE,OAAK,EAAC,MAAKD,MAAEC,MAAE,IAAE,GAAE,MAAKD,MAAE,IAAE,IAAEC,IAAC,EAAE;AAApE,IAAsE,KAAG,GAAG,IAAG,IAAG,EAAE;AAApF,IAAsF,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,EAAE,kBAAkB,IAAGA,GAAC;AAAE,SAAO,GAAG,CAAC,GAAE,GAAE,GAAED,KAAEC,GAAC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE;AAAE,IAAE,GAAE,KAAK;AAAE,MAAI,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,CAAC,GAAE,CAAC,IAAE,GAAG,GAAE,EAAE,OAAM,EAAE,KAAK;AAAE,SAAOA,IAAE,eAAe,GAAE,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,CAACD,KAAE,MAAIA,QAAI,IAAE,IAAE,CAAC;AAA1B,IAA4B,KAAG,GAAG,IAAG,IAAG,MAAK,MAAM;AAAnD,IAAqD,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE,GAAE;AAAC,MAAI,IAAE,EAAE,QAAO,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,EAAE,eAAe,CAAC,GAAE,IAAE,EAAE,eAAe,CAAC,GAAE,IAAE,EAAE,uBAAuBA,KAAE,EAAE,cAAc,CAAC,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,QAAI,IAAE,EAAE,WAAW,GAAE,GAAE,CAAC,GAAE,IAAE,IAAI,MAAM,EAAE,MAAM;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,IAAI,GAAE,CAAC,IAAE,EAAE,EAAE,CAAC,CAAC;AAAE,QAAI,IAAE,EAAE,WAAW,GAAE,GAAE,CAAC;AAAE,MAAE,CAAC,IAAED,IAAE,CAAC;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,OAAMC,KAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,MAAK,EAAC,IAAEC;AAAE,IAAE,GAAE,WAAW;AAAE,MAAI,IAAE,EAAE,MAAM,QAAO,IAAE,IAAI,MAAM,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,IAAI,GAAE,CAAC,IAAE,EAAE,MAAM,EAAE,CAAC,CAAC;AAAE,MAAI,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,GAAG,GAAE,EAAE,OAAM,EAAE,OAAM,GAAE,CAAC;AAAE,SAAM,EAAC,QAAO,EAAE,MAAM,GAAE,GAAE,EAAE,KAAK,GAAE,OAAM,GAAE,OAAM,EAAE,MAAK;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE;AAAC,MAAG,CAAC,GAAE,CAAC,IAAE,EAAE,0BAA0BD,KAAE,CAAC,GAAE,IAAE,GAAG,GAAE,OAAO,GAAE,IAAE,EAAE,oBAAoB,EAAE,cAAc,CAAC,GAAE,CAAC,GAAE,IAAE,EAAE,cAAc,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE,GAAE;AAAC,QAAI,IAAE,IAAE,GAAE,IAAE;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,EAAE,MAAGC,IAAE,IAAE,CAAC;AAAE,MAAE,CAAC,IAAE;AAAA,EAAC;AAAC,SAAM,EAAC,SAAQ,GAAE,UAAS,GAAE,UAAS,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,MAAK,GAAE,UAAS,EAAC,IAAE;AAAE,IAAE,GAAE,MAAM;AAAE,MAAI,IAAE,EAAE,MAAM,QAAO,IAAE,EAAE,eAAe,GAAE,EAAE,KAAK,GAAE,IAAE,EAAE,mBAAmB,GAAE,CAAC,GAAE,IAAE,GAAE,IAAE,GAAE,IAAE,CAAC;AAAE,OAAG,SAAO,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC,GAAE,EAAE,KAAK,CAAC,GAAE,IAAE,EAAE,iBAAiB,EAAE,QAAO,CAAC;AAAG,MAAI,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,EAAC,SAAQ,GAAE,UAAS,GAAE,UAAS,EAAC,IAAE,GAAG,EAAE,OAAM,EAAE,OAAM,GAAE,CAAC,GAAE,IAAE;AAAE,SAAO,MAAI,IAAE,EAAE,qBAAqB,GAAE,CAAC,IAAG,EAAE,QAAQ,OAAGA,IAAE,8BAA8B,CAAC,CAAC,GAAEA,IAAE,eAAe,GAAE,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,EAAAD,IAAE,QAAQ,CAAC,GAAE,MAAI;AAAC,QAAG,IAAE,KAAG,KAAGC,KAAE;AAAC,UAAI,IAAE,EAAE,WAAW,GAAE,EAAE,QAAO,EAAE,eAAe,CAAC,CAAC,EAAE,KAAK,GAAG;AAAE,YAAM,IAAI,MAAM,WAAW,CAAC,OAAO,CAAC,kBAAkBA,GAAC,GAAG;AAAA,IAAC;AAAA,EAAC,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,WAAQC,MAAE,GAAEA,MAAED,IAAE,QAAO,EAAEC,KAAE;AAAC,QAAI,IAAED,IAAEC,GAAC,GAAE,IAAEA,QAAID,IAAE,SAAO,IAAE,IAAEA,IAAEC,MAAE,CAAC,EAAE;AAAO,QAAG,EAAE,WAAS,EAAE,OAAM,IAAI,MAAM,gCAAgC;AAAE,QAAG,EAAE,CAAC,IAAE,EAAE,OAAM,IAAI,MAAM,oCAAoC;AAAE,QAAG,EAAE,EAAE,SAAO,CAAC,IAAE,EAAE,OAAM,IAAI,MAAM,0CAA0C;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE,EAAE,KAAG,EAAE,IAAE,CAAC,IAAE,EAAE,CAAC,EAAE,OAAM,IAAI,MAAM,iDAAiD;AAAA,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE;AAAC,MAAI,IAAE,CAAC,GAAE,IAAE,GAAE,IAAE,EAAE,SAAO,IAAEA,IAAE,QAAO,IAAE,IAAI,MAAM,CAAC,EAAE,KAAK,IAAI,EAAE,IAAI,MAAI,CAAC,CAAC,CAAC;AAAE,KAAGA,KAAE,CAAC;AAAE,MAAI,IAAE;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,SAAO,GAAE,EAAE,GAAE;AAAC,SAAG,EAAE,CAAC;AAAE,QAAI,IAAE,EAAE,IAAE,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,IAAE,GAAE,EAAE,EAAE,GAAE,CAAC,EAAE,KAAK,IAAE,CAAC;AAAA,EAAC;AAAC,WAAQ,IAAE,GAAE,IAAED,IAAE,QAAO,EAAE,GAAE;AAAC,QAAI,IAAEA,IAAE,CAAC,GAAE,IAAEA,IAAE,CAAC,IAAE;AAAE,aAAQ,IAAE,GAAE,IAAEC,IAAE,QAAO,EAAE,GAAE;AAAC,UAAI,IAAEA,IAAE,CAAC,GAAE,IAAE,IAAE,EAAE,SAAO;AAAE,UAAG,KAAG,GAAE;AAAC,YAAI,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,EAAE,SAAO,CAAC,IAAE,EAAE,CAAC;AAAE,iBAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,EAAE,GAAE,CAAC,EAAE,KAAK,EAAE,IAAE,CAAC,IAAE,CAAC;AAAA,MAAC;AAAC,UAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC;AAAA,IAAC;AAAC,UAAI,MAAI,EAAE,KAAK,CAAC,GAAE,CAAC,CAAC,GAAE,KAAG,IAAE;AAAA,EAAE;AAAC,SAAM,EAAC,WAAU,GAAE,aAAY,GAAE,WAAU,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAI,IAAE,CAAC;AAAE,WAAQC,MAAE,GAAEA,MAAED,IAAE,QAAO,EAAEC,KAAE;AAAC,QAAI,IAAED,IAAEC,GAAC,EAAE,QAAO,IAAE,EAAE,kBAAkB,SAAQ,CAAC;AAAE,MAAE,KAAK,CAAC,GAAED,IAAEC,GAAC,EAAE,QAAQ,CAAC,GAAE,MAAI,EAAE,CAAC,IAAE,CAAC;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAED,IAAE,MAAM,GAAE,CAAC;AAAE,SAAKC,IAAE,SAAO,IAAG,CAAAA,IAAE,KAAK,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAED,IAAE,QAAO,IAAI,CAAAC,IAAE,IAAE,CAAC,KAAGD,IAAE,CAAC;AAAE,SAAOC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE;AAAC,MAAI,IAAE,GAAG,GAAE,CAAC,EAAE,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC,EAAE,CAAC,GAAE,IAAE;AAAE,WAAQ,KAAKA,IAAE,UAAQ,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,EAAE,GAAE;AAAC,aAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,EAAE,GAAE,IAAE,IAAE,CAAC,IAAED,IAAE,IAAE,IAAE,CAAC;AAAE,MAAE;AAAA,EAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE,GAAE;AAAC,MAAI,IAAE,EAAE,MAAM;AAAE,IAAE,CAAC,IAAE;AAAE,MAAI,IAAE,EAAE,kBAAkBA,KAAE,EAAE,cAAc,CAAC,CAAC,GAAE,IAAED,IAAE,QAAO,IAAE,MAAI,IAAE,IAAE,IAAE,EAAE,CAAC;AAAE,SAAO,GAAGA,KAAE,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE,GAAE,GAAE;AAAC,MAAGD,IAAE,WAAS,EAAE,OAAM,IAAI,MAAM,sCAAsC;AAAE,MAAG,EAAE,CAAC,EAAE,WAAS,EAAE,OAAM,IAAI,MAAM,mCAAmC;AAAE,MAAI,IAAE,EAAE,CAAC,EAAE,CAAC,IAAE;AAAE,MAAG,GAAG,GAAE,GAAE,CAAC,GAAE,EAAE,WAAS,EAAE,OAAM,IAAI,MAAM,6BAA6B;AAAE,MAAI,IAAE,EAAE,CAAC,GAAE,EAAC,WAAU,GAAE,aAAY,GAAE,WAAU,EAAC,IAAE,GAAG,GAAE,GAAEA,KAAE,CAAC,GAAE,IAAE,GAAG,CAAC,GAAE,IAAE,GAAGC,KAAE,GAAE,GAAE,GAAE,CAAC;AAAE,SAAM,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC;AAAC;AAAC,IAAI,KAAG;AAAW,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE,GAAE;AAAC,MAAG,EAAE,SAAO,EAAE,OAAM,IAAI,MAAM,mCAAmC;AAAE,MAAG,EAAE,SAAO,EAAE,OAAM,IAAI,MAAM,mCAAmC;AAAE,MAAG,EAAE,SAAO,EAAE,OAAM,IAAI,MAAM,mCAAmC;AAAE,MAAI,IAAE,EAAE,WAAS,GAAE,IAAE,EAAE,WAAS,GAAE,IAAE,EAAE,WAAS,GAAE,IAAE,CAAC;AAAE,OAAG,EAAE,KAAK,EAAE,CAAC,CAAC,GAAE,KAAG,EAAE,KAAK,EAAE,CAAC,CAAC,GAAE,KAAG,EAAE,KAAK,EAAE,CAAC,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE,EAAE,KAAG,EAAE,CAAC,MAAI,EAAE,IAAE,CAAC,EAAE,OAAM,IAAI,MAAM,qDAAqD;AAAE,MAAI,IAAE,EAAE,WAAS,IAAE,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,kBAAkB,SAAQ,IAAE,CAAC;AAAE,IAAE,CAAC,IAAE;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,QAAI,IAAE,IAAED,IAAE,CAAC,IAAEA,IAAE,CAAC,GAAE,IAAE,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,GAAE,IAAE,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC;AAAE,QAAG,MAAI,EAAE,OAAM,IAAI,MAAM,qBAAqB;AAAE,QAAI;AAAE,QAAG,IAAE,KAAG,IAAE,KAAG,IAAE,KAAG,IAAE,EAAE,KAAE;AAAA,aAAU,IAAE,KAAK,KAAK,KAAK,KAAK,IAAE,KAAG,CAAC,CAAC,GAAE,IAAE,GAAG,OAAM,IAAI,MAAM,yCAAyC,EAAE,EAAE;AAAE,MAAE,IAAE,CAAC,IAAE,EAAE,CAAC,IAAE;AAAA,EAAC;AAAC,MAAI,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,kBAAkBC,KAAE,CAAC,GAAE,IAAE;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,QAAI,IAAE,EAAE,IAAE,CAAC,IAAE,EAAE,CAAC,GAAE,IAAE,IAAED,IAAE,CAAC,IAAEA,IAAE,CAAC,GAAE,IAAE,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,EAAE,GAAE,GAAG,IAAE,GAAE,KAAG;AAAA,EAAC;AAAC,SAAM,CAAC,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE;AAAT,IAA0B,KAAG,MAAMA,IAAC;AAAA,EAAC,YAAY,GAAEC,KAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE;AAAC,SAAK,QAAM,GAAE,KAAK,aAAWA,KAAE,KAAK,SAAO,GAAE,KAAK,cAAY,GAAE,KAAK,cAAY,GAAE,KAAK,eAAa,GAAE,KAAK,oBAAkB,GAAE,KAAK,qBAAmB,GAAE,KAAK,2BAAyB,GAAE,KAAK,oBAAkB,EAAE,2BAA2B,CAAC,GAAE,KAAK,aAAW,EAAE,cAAc,KAAK,iBAAiB;AAAA,EAAC;AAAA,EAAC,+BAA+B,GAAE;AAAC,WAAO,KAAK,kBAAkB,CAAC,MAAI,GAAG,iBAAe,KAAK,kBAAkB,IAAE,CAAC,IAAE,KAAK,kBAAkB,CAAC;AAAA,EAAC;AAAA,EAAC,sBAAsB,GAAE;AAAC,WAAO,KAAK,kBAAkB,CAAC,MAAI,GAAG,iBAAe,KAAK,mBAAmB,IAAE,CAAC,IAAE,KAAK,mBAAmB,CAAC;AAAA,EAAC;AAAA,EAAC,YAAY,GAAE;AAAC,QAAIA,MAAE,KAAK,sBAAsB,IAAE,CAAC;AAAE,YAAO,KAAK,+BAA+B,IAAE,CAAC,GAAE;AAAA,MAAC,KAAK,GAAG;AAAa,eAAOD,IAAE,sBAAsBC,GAAC;AAAA,MAAE,KAAK,GAAG;AAAW,eAAOD,IAAE,oBAAoBC,GAAC;AAAA,MAAE;AAAQ,cAAM,IAAI,MAAM,gCAAgC,GAAG,KAAK,+BAA+B,IAAE,CAAC,CAAC,CAAC,EAAE;AAAA,IAAC;AAAA,EAAC;AAAA,EAAC,OAAO,oBAAoB,GAAE;AAAC,QAAIA,MAAE,EAAE;AAAO,QAAGA,QAAI,KAAGA,QAAI,EAAE,QAAO;AAAE,QAAI,IAAE;AAAE,aAAQ,IAAE,GAAE,IAAEA,MAAE,GAAE,EAAE,GAAE;AAAC,UAAI,IAAE,EAAE,IAAE,CAAC,IAAE,EAAE,CAAC;AAAE,UAAE,MAAI,IAAE;AAAA,IAAE;AAAC,WAAO;AAAA,EAAC;AAAA,EAAC,OAAO,sBAAsB,GAAE;AAAC,QAAIA,MAAE,EAAE;AAAO,QAAGA,QAAI,EAAE,QAAO;AAAE,QAAI,IAAE,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE;AAAE,aAAQ,IAAE,GAAE,IAAEA,KAAE,EAAE,GAAE;AAAC,UAAI,IAAE,EAAE,CAAC;AAAE,YAAI,MAAI,IAAE,GAAE,IAAE,KAAK,IAAI,IAAE,GAAE,CAAC,GAAE,IAAE;AAAA,IAAE;AAAC,WAAO,KAAK,IAAIA,MAAE,GAAE,CAAC;AAAA,EAAC;AAAA,EAAC,sBAAsB,GAAEA,KAAE,IAAE,MAAG;AAAC,QAAGA,IAAE,WAAS,GAAE;AAAC,UAAG,EAAE,CAAC,MAAI,GAAG,QAAM,CAAC;AAAE,YAAM,IAAI,MAAM,gFAAgF;AAAA,IAAC;AAAC,WAAO,GAAG,GAAE,CAAC;AAAA,EAAC;AAAA,EAAC,oBAAoB,GAAE;AAAC,QAAIA,MAAE,KAAK,aAAY,IAAE,KAAK;AAAkB,MAAE,0BAA0B,GAAEA,GAAC;AAAE,QAAI,IAAE,KAAK,sBAAsB,KAAK,OAAM,KAAK,UAAU,GAAE,IAAE,EAAE,kCAAkC,KAAK,YAAW,GAAEA,GAAC;AAAE,MAAE,CAAC,IAAE,MAAI,EAAE,CAAC,IAAE;AAAG,aAAQ,IAAE,GAAE,KAAG,KAAK,YAAW,EAAE,EAAE,GAAE,CAAC,IAAE,MAAI,EAAE,CAAC,IAAE,KAAK,YAAY,CAAC;AAAG,WAAO;AAAA,EAAC;AAAA,EAAC,gCAAgC,GAAEA,KAAE,GAAE;AAAC,QAAI,IAAE,KAAK,IAAI,GAAE,CAAC,GAAE,IAAE,CAAC,GAAE,IAAE;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE,KAAGA,IAAE,GAAE,KAAK,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,EAAE,GAAE,KAAK,EAAE;AAAE,WAAO,EAAE,OAAO,EAAE,WAAS,GAAE,MAAI,yDAAyD,GAAE;AAAA,EAAC;AAAA,EAAC,6BAA6B,GAAEA,KAAE,GAAE,GAAE;AAAC,QAAI,IAAE,EAAE,QAAO,IAAE,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,IAAE,GAAE,EAAE,GAAE;AAAC,UAAI,IAAE,EAAE,IAAE,CAAC,IAAE,EAAE,CAAC,GAAE,IAAE,KAAK,IAAI,GAAE,CAAC,GAAE,IAAEA,IAAE,CAAC;AAAE,YAAI,OAAK,IAAE;AAAG,eAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,EAAE,GAAE,KAAK,CAAC,GAAE,KAAG;AAAE,eAAQ,IAAE,GAAE,IAAE,IAAE,GAAE,EAAE,EAAE,GAAE,KAAK,EAAE;AAAA,IAAC;AAAC,QAAG,IAAE,KAAG,EAAE,WAAS,EAAE,IAAE,CAAC,EAAE,OAAM,IAAI,MAAM,yBAAyB;AAAE,WAAO;AAAA,EAAC;AAAA,EAAC,+BAA+B,GAAEA,KAAE,GAAE,GAAE;AAAC,QAAI,IAAE,EAAE,QAAO,IAAE,CAAC;AAAE,QAAG,MAAI,EAAE,QAAM,CAAC;AAAE,QAAI,IAAE,GAAE,IAAE,EAAE,CAAC;AAAE,QAAG,KAAGA,IAAE,OAAO,OAAM,IAAI,MAAM,yBAAyB,CAAC,4BAA4BA,IAAE,MAAM,EAAE;AAAE,QAAI,IAAEA,IAAE,CAAC;AAAE,MAAE,KAAK,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,UAAI,IAAE,EAAE,CAAC;AAAE,UAAG,MAAI,EAAE,MAAG,MAAI,EAAE,GAAE,IAAE,IAAE,KAAG,IAAE,IAAE;AAAA,WAAQ;AAAC,YAAG,IAAE,GAAE,IAAE,GAAE,KAAGA,IAAE,OAAO,OAAM,IAAI,MAAM,sBAAsB,CAAC,2BAA2BA,IAAE,MAAM,EAAE;AAAE,YAAEA,IAAE,CAAC;AAAA,MAAC;AAAC,QAAE,KAAK,CAAC;AAAA,IAAC;AAAC,QAAG,EAAE,WAAS,EAAE,OAAO,OAAM,IAAI,MAAM,kBAAkB;AAAE,WAAO;AAAA,EAAC;AAAA,EAAC,qBAAqB,GAAEA,KAAE,GAAE,GAAE;AAAC,QAAI,IAAE,KAAK,sBAAsB,CAAC,GAAE,IAAE,KAAK,+BAA+B,CAAC;AAAE,YAAO,GAAE;AAAA,MAAC,KAAK,GAAG;AAAa,eAAO,KAAK,+BAA+B,GAAEA,KAAE,GAAE,CAAC;AAAA,MAAE,KAAK,GAAG;AAAW,YAAG,EAAE,SAAO,IAAEA,IAAE,OAAO,OAAM,IAAI,MAAM,mDAAmD,EAAE,SAAO,CAAC,MAAMA,IAAE,MAAM,EAAE;AAAE,eAAO,KAAK,6BAA6B,GAAEA,KAAE,GAAE,CAAC;AAAA,MAAE;AAAQ,cAAM,IAAI,MAAM,+BAA+B,GAAG,CAAC,CAAC,EAAE;AAAA,IAAC;AAAA,EAAC;AAAA,EAAC,wBAAuB;AAAC,QAAI,IAAE,KAAK,mBAAmB,CAAC;AAAE,QAAG,KAAK,kBAAkB,WAAS,EAAE,OAAM,IAAI,MAAM,+BAA+B;AAAE,QAAIA,MAAE,KAAK,kBAAkB,CAAC;AAAE,YAAOA,KAAE;AAAA,MAAC,KAAK,GAAG;AAAe,eAAO,EAAE,CAAC;AAAA,MAAE,KAAK,GAAG;AAAa,cAAM,IAAI,MAAM,gDAAgD;AAAA,MAAE,KAAK,GAAG;AAAW,eAAO,KAAK,yBAAyB,CAAC,EAAE,CAAC,IAAE;AAAA,MAAE;AAAQ,cAAM,IAAI,MAAM,sBAAsB,GAAGA,GAAC,CAAC,EAAE;AAAA,IAAC;AAAA,EAAC;AAAA,EAAC,UAAS;AAAC,QAAG,KAAK,mBAAmB,CAAC,EAAE,UAAQ,EAAE,OAAM,IAAI,MAAM,sEAAsE;AAAE,QAAIA,MAAE,KAAK,sBAAsB,GAAE,IAAE,KAAK,oBAAoBA,GAAC,GAAE,IAAE,IAAI,MAAM,KAAK,aAAW,CAAC;AAAE,MAAE,EAAE,SAAO,CAAC,IAAE;AAAE,aAAQ,IAAE,EAAE,SAAO,GAAE,KAAG,GAAE,EAAE,EAAE,GAAE,CAAC,IAAE,EAAE,IAAE,CAAC,IAAE,EAAE,IAAE,CAAC;AAAE,QAAI,IAAE,GAAG,GAAE,KAAE,GAAE,IAAE,EAAE,kBAAkB,KAAK,aAAY,EAAE,cAAc,CAAC,CAAC;AAAE,QAAG,EAAE,CAAC,IAAE,EAAE,CAAC,IAAE,GAAE;AAAC,UAAI,IAAE,KAAK,gCAAgCA,KAAE,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC;AAAE,eAAQ,IAAE,GAAE,KAAG,KAAK,YAAW,EAAE,EAAE,KAAE,KAAK,qBAAqB,IAAE,GAAE,GAAE,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC;AAAE,WAAK,UAAU,KAAK,YAAW,GAAE,GAAE,CAAC;AAAA,IAAC;AAAC,WAAM,CAAC,GAAE,CAAC;AAAA,EAAC;AAAA,EAAC,UAAU,GAAEA,KAAE,GAAE,GAAE;AAAC,QAAG,EAAE,WAAS,EAAE;AAAO,QAAI,IAAE,KAAK,QAAO,IAAE,GAAE,IAAE,EAAE,MAAM;AAAE,QAAE,EAAE,MAAM,IAAE,CAAC;AAAE,QAAI,IAAE,EAAE,cAAc,CAAC,GAAE,IAAEA,IAAE,QAAO,IAAE,KAAK;AAAa,QAAG,EAAE,WAAS,KAAG,EAAE,WAAS,GAAE;AAAC,UAAI,IAAE,KAAK;AAAkB,SAAG,MAAI;AAAC,YAAI,IAAE,EAAE,GAAE,CAAC;AAAE,YAAE,GAAG,GAAE,CAAC,EAAE,SAAS;AAAA,MAAC,CAAC;AAAA,IAAC;AAAC,QAAI,IAAE,GAAE,IAAE,GAAE,IAAE;AAAE,aAAQ,IAAE,GAAE,KAAG,GAAE,EAAE,GAAE;AAAC,UAAI,IAAE,IAAE,IAAEA,IAAE,CAAC,IAAE;AAAG,UAAG,MAAI,GAAE;AAAC,UAAE;AAAE;AAAA,MAAQ;AAAC,UAAG,IAAE,GAAE;AAAC,YAAI,IAAE,EAAE,SAAS,IAAE,CAAC,GAAE,IAAE,EAAE,SAAS,IAAE,CAAC,GAAE,KAAG,IAAE,KAAG;AAAE,WAAG,GAAE,GAAE,CAAC;AAAA,MAAC;AAAC,UAAG,KAAG,GAAE;AAAC,YAAI,IAAE,EAAE;AAAO,YAAE,KAAK,MAAM,IAAE,CAAC;AAAA,MAAC;AAAC,UAAG,IAAE,EAAE,KAAG,KAAK,aAAa,WAAS,EAAE,GAAE,SAAS,IAAE,GAAE,IAAE,CAAC,EAAE,KAAK,KAAK,aAAa,CAAC,CAAC,GAAE,IAAE;AAAA,UAAO,QAAK,IAAE,KAAG;AAAC,YAAI,IAAE,EAAE,MAAM,IAAE,CAAC;AAAE,WAAG,GAAE,GAAE,CAAC,GAAE,EAAE;AAAA,MAAC;AAAC,UAAE,KAAG,IAAE,IAAE,GAAE,IAAE,MAAI,IAAE,GAAE,IAAE,GAAE,IAAE,IAAE;AAAA,IAAE;AAAA,EAAC;AAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,WAAQ,IAAE,GAAE,IAAEA,KAAE,IAAI,CAAAD,IAAE,CAAC,IAAE,EAAE,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAIC,MAAE,CAAC;AAAE,WAAQ,KAAKD,KAAE;AAAC,QAAG,IAAE,GAAE;AAAC,UAAG,CAAC,EAAE,OAAM,IAAI,MAAM,aAAa,CAAC,eAAe;AAAE,UAAG,IAAE,GAAG,OAAM,IAAI,MAAM,aAAa,CAAC,gBAAgB;AAAE,UAAE;AAAA,IAAE;AAAC,IAAAC,IAAE,KAAK,CAAC;AAAA,EAAC;AAAC,SAAOA;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE;AAAC,SAAO,IAAI,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,EAAE,QAAQ;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE;AAAC,MAAI,IAAED,QAAI,GAAE,IAAEA,MAAE,KAAGC,MAAE,GAAE,IAAE,IAAED,OAAGC,MAAE;AAAE,MAAG,KAAG,KAAG,EAAE,QAAO,EAAE,oBAAoB,GAAE,CAAC;AAAE,MAAI,IAAE,KAAK,IAAI,KAAK,MAAM,IAAED,OAAGC,GAAC,CAAC,GAAE,IAAE,EAAE,oBAAoB,GAAE,CAAC;AAAE,MAAED,OAAGC,QAAI,MAAIA,MAAE,KAAI,EAAE,CAAC,IAAED;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,IAAI,GAAE,CAAC,IAAE,EAAE,IAAE,CAAC,IAAEC;AAAE,SAAO;AAAC;AAAC,IAAI,KAAG,GAAG,CAAAD,QAAG,IAAE,KAAK,KAAKA,GAAC,CAAC;AAA3B,IAA6B,KAAG,GAAG,IAAG,EAAE;AAAxC,IAA0C,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE;AAAC,MAAI,IAAE,CAAC,IAAE,GAAE,CAAC,GAAE,IAAED,IAAE,QAAO,IAAE,EAAE;AAAO,MAAG,MAAI,EAAE,QAAO,GAAGC,KAAE,EAAE,KAAK;AAAE,MAAI,IAAE,aAAa,KAAG,IAAE,GAAG,GAAE,EAAE,KAAK;AAAE,SAAO,KAAG,YAAU,OAAO,KAAG,WAAS,EAAE,OAAO,KAAK,CAAC,IAAE,OAAO,KAAG,aAAW,EAAE,OAAO,KAAK,CAAC,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,QAAI,IAAE,CAAC,GAAE,IAAE;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,UAAI,IAAE,EAAE,IAAE,IAAE,CAAC;AAAE,QAAE,KAAK,CAAC,GAAE,KAAG,IAAE,EAAE,CAAC;AAAA,IAAC;AAAC,QAAG,IAAE,KAAG,KAAG,IAAE,EAAE,OAAM,IAAI,MAAM,oBAAoB,CAAC,wBAAwBA,GAAC,EAAE;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,IAAI,KAAE,EAAE,OAAO,IAAE,IAAE,CAAC,KAAG,EAAE,IAAE,IAAE,CAAC,IAAE,EAAE,OAAO,IAAE,IAAE,CAAC,IAAE,EAAE,SAAO,IAAE,EAAE,CAAC,IAAE,EAAE,IAAE,IAAE,CAAC;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,IAAI,KAAG,GAAG,CAAAD,QAAG,KAAG,IAAE,KAAK,IAAI,CAACA,GAAC,EAAE;AAA/B,IAAiC,KAAG,GAAG,IAAG,CAAAA,QAAG,KAAG,IAAE,KAAK,IAAI,CAACA,GAAC,EAAE;AAA/D,IAAiE,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE,GAAE;AAAC,MAAI,IAAE,GAAG,iBAAiB,GAAE,GAAEA,GAAC,GAAE,IAAE,EAAE,cAAcA,GAAC,GAAE,IAAE,EAAE,eAAe,CAAC;AAAE,MAAG,GAAE;AAAC,QAAI,IAAE,GAAG,kBAAkB,GAAE,CAAC;AAAE,WAAO,MAAI,WAASD,IAAE,MAAM,GAAE,IAAE,CAAC,IAAEA,IAAE,SAAS,GAAE,IAAE,CAAC;AAAA,EAAC;AAAC,MAAI,IAAE,MAAI,WAAS,EAAE,uBAAuBA,GAAC,IAAEA,KAAE,IAAE,GAAG,GAAE,GAAE,CAAC,GAAE,IAAE,GAAGC,KAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,MAAK,EAAE,GAAE;AAAC,QAAI,IAAE,EAAE,WAAW,CAAC,GAAE,IAAE,EAAE,IAAI,CAAC,GAAE,MAAI,IAAE,EAAE,CAAC,CAAC;AAAE,MAAE,IAAI,EAAE,IAAI,GAAG,CAAC,GAAE,GAAG,CAAC;AAAA,EAAC;AAAC,SAAO,MAAI,WAAS,EAAE,uBAAuB,EAAE,MAAM,IAAE,EAAE;AAAM;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,OAAM,GAAE,MAAK,EAAC,IAAE;AAAE,IAAE,GAAE,OAAO;AAAE,MAAG,CAAC,GAAE,CAAC,IAAE,GAAG,iBAAiB,GAAE,GAAE,CAAC;AAAE,KAAG,kBAAkB,GAAE,GAAE,CAAC;AAAE,MAAI,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,GAAG,GAAE,GAAE,GAAE,EAAE,OAAM,EAAE,KAAK;AAAE,SAAOA,IAAE,eAAe,GAAE,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE,GAAE;AAAC,MAAI,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,IAAI,MAAM,CAAC,GAAE,IAAE,IAAI,MAAM,CAAC,GAAE,IAAE,EAAE,CAAC;AAAE,MAAG,MAAI,GAAE;AAAC,QAAG,MAAI,EAAE,OAAM,IAAI,MAAM,EAAE,gDAAgD,CAAC,CAAC;AAAE,QAAI,IAAE,EAAE,kBAAkBA,KAAE,CAAC,GAAE,IAAE,EAAE,kBAAkB,GAAE,CAAC;AAAE,WAAM,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,GAAE,CAAC;AAAA,EAAC;AAAC,MAAI,IAAE,MAAG,IAAE,GAAE,IAAE,IAAI,MAAM,CAAC,EAAE,KAAK,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,QAAI,IAAED,IAAE,IAAE,CAAC;AAAE,QAAG,IAAE,EAAE,OAAM,IAAI,MAAM,EAAE,gDAAgD,GAAE,CAAC,CAAC;AAAE,QAAG,KAAG,EAAE,OAAM,IAAI,MAAM,EAAE,kDAAkD,GAAE,GAAE,CAAC,CAAC;AAAE,MAAE,EAAE,CAAC,GAAE,IAAE,KAAG,KAAG,GAAE,IAAE;AAAA,EAAC;AAAC,MAAI,IAAE;AAAG,WAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,QAAI,IAAE,EAAE,CAAC,MAAI;AAAE,MAAE,CAAC,IAAE,GAAE,IAAE,KAAG,CAAC,GAAE,EAAE,CAAC,IAAE,KAAK,IAAI,EAAE,CAAC,GAAE,CAAC,GAAE,IAAE,MAAI,EAAE,CAAC,KAAG,EAAE,IAAE,CAAC;AAAA,EAAE;AAAC,MAAG,KAAG,GAAE;AAAC,QAAI,IAAEA,KAAE,IAAE;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,EAAE,GAAE,CAAC,IAAE;AAAE,WAAM,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,GAAE,CAAC;AAAA,EAAC,OAAK;AAAC,QAAI,IAAE,EAAE,IAAE,CAAC,GAAE,IAAE,EAAE,kBAAkBC,KAAE,IAAE,CAAC,GAAE,IAAE,EAAE,kBAAkB,GAAE,CAAC,GAAE,IAAE,IAAI,MAAM,CAAC,EAAE,KAAK,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,UAAI,IAAED,IAAE,IAAE,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,KAAG,MAAI,IAAE,IAAE,EAAE,IAAE,CAAC,KAAG;AAAE,QAAE,CAAC;AAAI,eAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,EAAE,GAAE,IAAE,IAAE,CAAC,IAAEA,IAAE,IAAE,IAAE,CAAC;AAAE,QAAE,CAAC,IAAE,EAAE,CAAC,GAAE,EAAE,CAAC,IAAE;AAAA,IAAC;AAAC,aAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,EAAE,KAAG,EAAE,CAAC,MAAI,GAAE;AAAC,UAAI,IAAE,MAAI,IAAE,IAAE,EAAE,IAAE,CAAC;AAAE,QAAE,IAAE,IAAE,CAAC,IAAE;AAAE,eAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,EAAE,GAAE,IAAE,IAAE,CAAC,IAAE;AAAE,QAAE,CAAC,IAAE;AAAA,IAAC;AAAC,WAAM,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,GAAE,CAAC;AAAA,EAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE,GAAE;AAAC,MAAI,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,QAAO,IAAE,CAAC,GAAE,IAAE,GAAE,IAAE;AAAG,WAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,QAAI,IAAE,EAAE,CAAC;AAAE,QAAG,MAAI,IAAG;AAAC,UAAG,MAAI,GAAG,OAAM,IAAI,MAAM,EAAE,yDAAyD,GAAE,CAAC,CAAC;AAAE,UAAE,GAAE,EAAE,KAAK,CAAC;AAAA,IAAC,OAAK;AAAC,UAAG,IAAE,EAAE,OAAM,IAAI,MAAM,EAAE,8CAA8C,GAAE,CAAC,CAAC;AAAE,WAAG,GAAE,EAAE,KAAK,CAAC;AAAA,IAAC;AAAA,EAAC;AAAC,MAAG,MAAI,IAAG;AAAC,QAAG,KAAG,EAAE,OAAM,IAAI,MAAM,EAAE,qDAAqD,CAAC;AAAE,QAAI,IAAE,KAAK,MAAM,IAAE,CAAC;AAAE,QAAG,IAAE,MAAI,EAAE,OAAM,IAAI,MAAM,EAAE,gDAAgD,GAAE,CAAC,CAAC;AAAE,MAAE,CAAC,IAAE;AAAA,EAAC;AAAC,MAAG,EAAE,cAAc,CAAC,MAAI,EAAE,OAAM,IAAI,MAAM,EAAE,gDAAgD,GAAE,CAAC,CAAC;AAAE,MAAI,IAAE,EAAE,QAAO,IAAE,CAAC;AAAE,MAAG,IAAE,GAAE;AAAC,MAAE,IAAE,CAAC,IAAE;AAAE,aAAQ,IAAE,IAAE,GAAE,KAAG,GAAE,EAAE,EAAE,GAAE,CAAC,IAAE,EAAE,IAAE,CAAC,IAAE,EAAE,IAAE,CAAC;AAAA,EAAC;AAAC,MAAI,IAAE,CAAC;AAAE,MAAG,IAAE,GAAE;AAAC,MAAE,IAAE,CAAC,IAAE;AAAE,aAAQ,IAAE,IAAE,GAAE,KAAG,GAAE,EAAE,EAAE,GAAE,CAAC,IAAE,EAAE,IAAE,CAAC,IAAE,EAAE,IAAE,CAAC;AAAA,EAAC;AAAC,MAAI,IAAE,EAAE,kBAAkBA,KAAE,IAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,QAAI,IAAE;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,EAAE,MAAGD,IAAE,IAAE,IAAE,CAAC,IAAE,EAAE,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,EAAE,GAAE,IAAE,IAAE,CAAC,IAAE,KAAK,MAAM,IAAE,EAAE,CAAC,CAAC,GAAE,KAAG,EAAE,CAAC;AAAA,EAAC;AAAC,SAAM,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE,GAAE,IAAE,OAAG,IAAE,GAAE;AAAC,MAAI,IAAE,EAAE,QAAO,IAAE,CAAC,EAAE,CAAC,GAAED,IAAE,SAAO,EAAE,CAAC,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,IAAE,IAAE,EAAE,IAAE,CAAC,IAAE,IAAE;AAAE,MAAG,IAAE,EAAE,OAAM,IAAI,MAAM,EAAE,wDAAwD,CAAC;AAAE,MAAI,IAAE,EAAE,MAAM;AAAE,IAAE,CAAC,IAAE;AAAE,MAAI,IAAE,EAAE,OAAO,CAAC,GAAE,MAAI,IAAE,GAAE,CAAC,GAAE,IAAE,EAAE,kBAAkBC,KAAE,CAAC;AAAE,MAAG,MAAI,EAAE,QAAO,IAAE,KAAG,EAAE,KAAK,CAAC,GAAE,CAAC,GAAE,CAAC;AAAE,MAAG,KAAG,EAAE,OAAM,IAAI,MAAM,EAAE,wDAAwD,CAAC;AAAE,MAAI,IAAE,GAAE,IAAE,GAAE,IAAE,GAAE,IAAE,EAAE,CAAC;AAAE,aAAO;AAAC,QAAI,IAAE;AAAE,QAAG,IAAE,GAAE;AAAC,UAAG,IAAE,EAAE,CAAC,GAAE,MAAI,GAAE;AAAC,UAAE;AAAE;AAAA,MAAQ;AAAC,UAAG,KAAG,EAAE,OAAM,IAAI,MAAM,EAAE,6DAA6D,CAAC;AAAA,IAAC;AAAC,QAAG,IAAE,KAAG,KAAG,EAAE,OAAM,IAAI,MAAM,EAAE,yDAAyD,GAAE,CAAC,CAAC;AAAE,QAAE,KAAG,EAAE,KAAK,GAAE,IAAE,GAAE,IAAE,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,UAAI,IAAE,EAAE,CAAC;AAAE,UAAG,IAAE,KAAG,KAAG,EAAE,CAAC,EAAE,OAAM,IAAI,MAAM,EAAE,uDAAuD,GAAE,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,CAAC;AAAE,eAAQ,IAAE,GAAE,IAAE,GAAE,IAAI,GAAE,IAAE,IAAE,CAAC,KAAGD,IAAE,IAAE,IAAE,CAAC;AAAA,IAAC;AAAC,QAAG,EAAE,UAAQ,IAAE,GAAE,IAAE,GAAE,IAAI,GAAE,IAAE,IAAE,CAAC,KAAG,IAAE;AAAE,QAAG,IAAE,GAAE,EAAE,GAAE,IAAE,IAAE,GAAE,IAAE,GAAE,IAAE,EAAE;AAAA,EAAK;AAAC,SAAO,IAAE,KAAG,EAAE,KAAK,GAAE,IAAE,GAAE,IAAE,CAAC,GAAE,CAAC,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,GAAG,CAAAA,QAAG,KAAK,KAAKA,GAAC,CAAC;AAAzB,IAA2B,KAAG,GAAG,IAAG,CAAAA,QAAG,KAAK,KAAKA,GAAC,CAAC;AAAnD,IAAqD,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,CAACA,KAAE,MAAI;AAAC,MAAIC,MAAED,MAAE;AAAE,SAAOC,MAAEA;AAAC,CAAC;AAAvC,IAAyC,KAAG,GAAG,IAAG,EAAE;AAApD,IAAsD,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,CAACD,KAAE,MAAI;AAAC,MAAG,EAAC,SAAQC,KAAE,eAAc,GAAE,SAAQ,EAAC,IAAE;AAAE,SAAOD,IAAE,QAAQ,IAAI,OAAOC,KAAE,IAAE,MAAI,EAAE,GAAE,CAAC;AAAC,CAAC;AAAxG,IAA0G,KAAG,GAAG,IAAG,EAAE;AAArH,IAAuH,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE;AAAC,MAAI,IAAE,GAAGD,KAAE,EAAE,KAAK;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,MAAK,KAAI;AAAC,QAAI,IAAE,EAAE,WAAW,CAAC,GAAE,IAAE,IAAI,MAAM,EAAE,MAAM;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,IAAI,GAAE,CAAC,IAAE,EAAE,CAAC,IAAEC,IAAE,CAAC,IAAE,EAAE,CAAC;AAAE,MAAE,IAAI,EAAE,IAAI,GAAG,CAAC,GAAE,GAAG,CAAC;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE,GAAE,GAAE,GAAE;AAAC,SAAK,YAAU,EAAE,aAAa,CAAC,GAAE,KAAK,cAAYA,KAAE,KAAK,UAAQ,EAAE,aAAa,CAAC,GAAE,KAAK,WAAS,EAAE,aAAa,CAAC,GAAE,KAAK,WAAS,GAAE,KAAK,gBAAc;AAAA,EAAC;AAAA,EAAC,YAAY,GAAE;AAAC,WAAO,KAAK,IAAI,KAAK,WAAS,IAAE,IAAE,IAAE,KAAK,UAAS,IAAE,CAAC;AAAA,EAAC;AAAA,EAAC,aAAa,GAAEA,KAAE;AAAC,QAAI,IAAE,KAAK,YAAYA,GAAC;AAAE,WAAO,KAAK,IAAI,GAAE,IAAE,IAAE,IAAEA,MAAE,CAAC;AAAA,EAAC;AAAA,EAAC,aAAa,GAAEA,KAAE,GAAE,GAAE,GAAE,GAAE;AAAC,aAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,UAAI,IAAE,KAAK,YAAY,CAAC,GAAE,IAAE,KAAK,IAAI,GAAE,IAAE,CAAC,GAAE,IAAE,KAAK,IAAI,GAAE,KAAG,KAAG,IAAE,GAAG,GAAE,IAAE,KAAG,IAAE,IAAG,IAAEA,OAAG,IAAE,IAAE,IAAE,IAAE,IAAG,IAAE;AAAE,WAAG,IAAE,KAAK,QAAQ;AAAO,eAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,EAAE,MAAG,EAAE,IAAE,CAAC,EAAE;AAAO,WAAG,IAAE,KAAK,SAAS;AAAO,UAAI,IAAE,IAAE,IAAE,IAAE;AAAE,WAAG,IAAE,KAAK,UAAU,QAAO,EAAE,IAAE,CAAC,IAAE,IAAI,WAAW,CAAC;AAAE,UAAI,IAAE,EAAE,IAAE,CAAC,GAAE,IAAE,GAAE,IAAE,OAAG,EAAE,QAAQ,OAAG,EAAE,GAAG,IAAE,CAAC;AAAE,eAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,EAAE,GAAE,KAAK,OAAO,GAAE,EAAE,KAAK,SAAS;AAAE,eAAQ,IAAE,GAAE,IAAE,IAAE,GAAE,EAAE,EAAE,GAAE,EAAE,IAAE,CAAC,CAAC,GAAE,EAAE,KAAK,SAAS;AAAE,UAAG,IAAE,GAAE;AAAC,UAAE,EAAE,IAAE,IAAE,CAAC,CAAC;AAAE,iBAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,EAAE,GAAE,KAAK,SAAS,GAAE,EAAE,KAAK,QAAQ;AAAA,MAAC,OAAK;AAAC,iBAAQ,IAAE,GAAE,IAAE,IAAE,GAAE,EAAE,EAAE,GAAE,KAAK,QAAQ,GAAE,EAAE,KAAK,SAAS;AAAE,UAAE,KAAK,QAAQ;AAAA,MAAC;AAAA,IAAC;AAAA,EAAC;AAAA,EAAC,QAAQ,GAAEA,KAAE;AAAC,QAAI,IAAE,EAAE,QAAO,IAAEA,IAAE;AAAO,QAAG,IAAE,GAAE;AAAC,UAAI,IAAEA,IAAE,CAAC;AAAE,UAAG,MAAI,EAAE,OAAM,IAAI,MAAM,oCAAoC,CAAC,EAAE;AAAE,eAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,YAAI,IAAEA,IAAE,CAAC,KAAG;AAAE,YAAG,IAAE,KAAGA,IAAE,CAAC,KAAG,GAAE,CAAC,EAAE,OAAM,IAAI,MAAM,uBAAuBA,IAAE,CAAC,CAAC,iBAAiB,CAAC,KAAK,CAAC,GAAG;AAAE,YAAEA,IAAE,CAAC;AAAA,MAAC;AAAC,UAAG,MAAI,EAAE,OAAM,IAAI,MAAM,gDAAgD,CAAC,SAAS,CAAC,EAAE;AAAA,IAAC;AAAC,QAAI,IAAE,IAAE,GAAE,IAAE,EAAE,kBAAkB,SAAQ,CAAC;AAAE,QAAG,MAAI,KAAG,MAAI,GAAE;AAAC,UAAI,IAAE,IAAI,MAAM,CAAC;AAAE,eAAQ,IAAE,GAAE,KAAG,GAAE,EAAE,EAAE,GAAE,CAAC,IAAE;AAAE,aAAM,CAAC,GAAE,CAAC;AAAA,IAAC;AAAC,MAAE,CAAC,IAAE;AAAE,aAAQ,IAAE,GAAE,KAAG,GAAE,EAAE,GAAE;AAAC,UAAI,IAAEA,IAAE,CAAC,IAAEA,IAAE,IAAE,CAAC,GAAE,IAAE;AAAE,WAAK,YAAY,QAAQ,OAAG;AAAC,aAAG,KAAK,aAAa,GAAE,CAAC;AAAA,MAAC,CAAC,GAAE,KAAK,iBAAe,IAAE,KAAG,MAAI,MAAI,IAAE,IAAG,EAAE,CAAC,IAAE,EAAE,IAAE,CAAC,IAAE;AAAA,IAAC;AAAC,QAAI,IAAE,IAAI,MAAM,EAAE,CAAC,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,UAAI,IAAEA,IAAE,CAAC,GAAE,IAAE,EAAE,CAAC;AAAE,UAAG,KAAK,YAAY,QAAQ,OAAG;AAAC,YAAI,IAAEA,IAAE,IAAE,CAAC,IAAEA,IAAE,CAAC,GAAE,IAAE,KAAK,aAAa,GAAE,CAAC;AAAE,aAAK,aAAa,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,KAAG;AAAA,MAAC,CAAC,GAAE,KAAK,iBAAe,MAAI,EAAE,CAAC,GAAE;AAAC,YAAI,IAAEA,IAAE,IAAE,CAAC,IAAEA,IAAE,CAAC;AAAE,YAAG,MAAI,EAAE;AAAS,YAAI,IAAE,IAAE,IAAE,KAAK;AAAS,aAAK,aAAa,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,MAAC;AAAA,IAAC;AAAC,WAAM,CAAC,GAAE,CAAC;AAAA,EAAC;AAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE,GAAE,GAAE;AAAC,SAAO,IAAI,GAAGA,KAAE,GAAE,GAAE,GAAE,GAAE,CAAC,EAAE,QAAQD,KAAE,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE;AAAC,MAAG,CAACD,IAAE,OAAO;AAAO,MAAG,EAAE,WAAS,GAAE;AAAC,aAAQ,IAAE,GAAE,IAAEA,IAAE,QAAO,EAAE,EAAE,GAAE,KAAKA,IAAE,SAAS,GAAE,IAAE,CAAC,CAAC;AAAE;AAAA,EAAM;AAAC,MAAG,EAAE,WAAS,GAAE;AAAC,QAAI,IAAE,EAAE,CAAC,GAAE,IAAEA,IAAE,QAAQ,CAAC;AAAE,WAAK,MAAI,MAAI;AAAC,UAAI,IAAEA,IAAE,SAAS,GAAE,CAAC;AAAE,OAAC,CAACC,OAAG,EAAE,WAAS,MAAI,EAAE,KAAK,CAAC,GAAED,MAAEA,IAAE,SAAS,IAAE,CAAC,GAAE,IAAEA,IAAE,QAAQ,CAAC;AAAA,IAAC;AAAC,KAAC,CAACC,OAAGD,IAAE,WAAS,MAAI,EAAE,KAAKA,GAAC;AAAE;AAAA,EAAM;AAAC,MAAI,IAAE;AAAE,WAAQ,IAAE,GAAE,IAAEA,IAAE,SAAO,GAAE,IAAI,KAAG,MAAIA,IAAE,UAAQ,EAAE,QAAQA,IAAE,CAAC,CAAC,MAAI,IAAG;AAAC,QAAI,IAAEA,IAAE,SAAS,GAAE,CAAC;AAAE,KAAC,CAACC,OAAG,EAAE,WAAS,MAAI,EAAE,KAAK,CAAC,GAAE,IAAE,IAAE;AAAA,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAED,IAAE,QAAO,IAAE,CAAC,GAAE,IAAE,GAAE,IAAE,GAAE,IAAE,IAAI,MAAM,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,QAAI,IAAE,EAAE;AAAO,OAAGA,IAAE,CAAC,GAAE,GAAEC,KAAE,CAAC;AAAE,QAAI,IAAE,EAAE,SAAO;AAAE,MAAE,CAAC,IAAE,GAAE,KAAG,GAAE,IAAE,KAAK,IAAI,GAAE,CAAC;AAAA,EAAC;AAAC,MAAI,IAAE,EAAE,kBAAkB,SAAQ,IAAE,CAAC,GAAE,IAAE,IAAI,MAAM,CAAC,GAAE,IAAE,CAAC,GAAE,CAAC,GAAE,IAAE;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,EAAE,UAAQ,IAAE,GAAE,IAAE,EAAE,CAAC,GAAE,EAAE,EAAE,GAAE,IAAE,CAAC,IAAE,GAAE,EAAE,IAAE,IAAE,CAAC,IAAE,GAAE,EAAE,CAAC,IAAE,EAAE,CAAC,GAAE,EAAE;AAAE,SAAM,CAAC,GAAE,GAAE,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAE,kBAAkB,SAAQD,IAAE,MAAM;AAAE,WAAQ,IAAE,GAAE,IAAEA,IAAE,QAAO,EAAE,EAAE,CAAAC,IAAE,CAAC,IAAE,EAAE,cAAcD,IAAE,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,mBAAmB;AAAE,SAAOC;AAAC;AAAC,IAAI,KAAG,GAAG,CAACD,KAAE,MAAIA,MAAE,CAAC;AAApB,IAAsB,KAAG,GAAG,CAACA,KAAE,GAAEC,KAAE,OAAK,EAAC,MAAKD,MAAEC,KAAE,MAAK,IAAE,EAAC,EAAE;AAA5D,IAA8D,KAAG,GAAG,IAAG,IAAG,EAAE;AAA5E,IAA8E,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,IAAI,MAAMD,IAAE,IAAI;AAAE,WAAQ,IAAE,GAAE,IAAEC,IAAE,QAAO,IAAI,CAAAA,IAAE,CAAC,IAAED,IAAE,MAAM,CAAC,IAAE,EAAE,CAAC;AAAE,MAAI,IAAE,GAAGC,KAAED,IAAE,KAAK;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,OAAO,QAAO,EAAE,GAAE;AAAC,QAAI,IAAE,EAAE,WAAW,CAAC,GAAE,IAAE,IAAI,MAAMA,IAAE,IAAI;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,IAAI,GAAE,CAAC,IAAE,EAAE,CAAC,IAAEA,IAAE,MAAM,CAAC;AAAE,QAAI,IAAEA,IAAE,WAAW,CAAC;AAAE,MAAE,OAAO,CAAC,IAAEA,IAAE,OAAO,CAAC;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,IAAI,KAAG,CAACA,KAAE,MAAI;AAAC,MAAIC,MAAE,EAAE,QAAMD,IAAE;AAAM,SAAOC,QAAI,IAAED,IAAE,QAAM,EAAE,QAAMC;AAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,MAAE,GAAE,IAAED,IAAE,SAAO,GAAE;AAAC,SAAK,IAAEC,OAAG;AAAC,QAAG,IAAEA,MAAE,KAAI;AAAC,UAAI,IAAE,IAAEA,MAAE,GAAE,IAAE,IAAEA,MAAE,GAAE,IAAE,KAAK,IAAI,CAAC,GAAE,IAAE,MAAG,KAAK,IAAI,IAAE,IAAE,CAAC,GAAE,IAAE,MAAG,KAAK,KAAK,IAAE,KAAG,IAAE,KAAG,CAAC,IAAE,KAAK,KAAK,IAAE,IAAE,CAAC,GAAE,IAAE,KAAK,IAAIA,KAAE,KAAK,MAAM,IAAE,IAAE,IAAE,IAAE,CAAC,CAAC,GAAE,IAAE,KAAK,IAAI,GAAE,KAAK,MAAM,KAAG,IAAE,KAAG,IAAE,IAAE,CAAC,CAAC;AAAE,SAAGD,KAAE,GAAE,GAAE,CAAC;AAAA,IAAC;AAAC,QAAI,IAAEA,IAAE,CAAC,GAAE,IAAEC,KAAE,IAAE;AAAE,SAAI,EAAE,KAAKD,KAAEC,KAAE,CAAC,GAAE,GAAGD,IAAE,CAAC,GAAE,CAAC,IAAE,KAAG,EAAE,KAAKA,KAAEC,KAAE,CAAC,GAAE,IAAE,KAAG;AAAC,WAAI,EAAE,KAAKD,KAAE,GAAE,CAAC,GAAE,KAAI,KAAI,GAAGA,IAAE,CAAC,GAAE,CAAC,IAAE,IAAG,KAAE,IAAE;AAAE,aAAK,GAAGA,IAAE,CAAC,GAAE,CAAC,IAAE,IAAG,KAAE,IAAE;AAAA,IAAC;AAAC,OAAGA,IAAEC,GAAC,GAAE,CAAC,MAAI,IAAE,EAAE,KAAKD,KAAEC,KAAE,CAAC,KAAG,IAAE,IAAE,GAAE,EAAE,KAAKD,KAAE,GAAE,CAAC,IAAG,KAAG,MAAIC,MAAE,IAAE,IAAG,KAAG,MAAI,IAAE,IAAE;AAAA,EAAE;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE;AAAC,MAAI,IAAE,EAAE,EAAE,SAAO,CAAC,GAAE,CAAC,GAAE,CAAC,IAAE,CAACD,IAAE,SAAO,GAAE,CAAC,GAAE,IAAE,EAAE,uBAAuBC,KAAE,IAAE,CAAC,GAAE,IAAE,EAAE,uBAAuB,SAAQ,IAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,QAAI,IAAE,IAAE,GAAE,IAAED,IAAE,SAAS,GAAE,IAAE,CAAC,GAAE,IAAE,IAAI,MAAM,EAAE,MAAM;AAAE,MAAE,QAAQ,CAAC,GAAE,MAAI,EAAE,CAAC,IAAE,EAAC,OAAM,GAAE,OAAM,EAAC,CAAC,GAAE,IAAE,EAAE,WAAS,GAAG,GAAE,CAAC,GAAE,IAAE,EAAE,MAAM,GAAE,CAAC,IAAG,KAAG,EAAE,KAAK,EAAE;AAAE,QAAI,IAAE,IAAE,GAAE,IAAE,EAAE,SAAS,GAAE,IAAE,CAAC,GAAE,IAAE,EAAE,SAAS,GAAE,IAAE,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,IAAI,GAAE,CAAC,IAAE,EAAE,CAAC,EAAE,OAAM,EAAE,CAAC,IAAE,EAAE,CAAC,EAAE;AAAA,EAAK;AAAC,MAAI,IAAE,EAAE,MAAM;AAAE,SAAO,EAAE,EAAE,SAAO,CAAC,IAAE,GAAE,CAAC,GAAG,GAAEC,KAAE,CAAC,GAAE,GAAG,GAAE,SAAQ,CAAC,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE;AAAC,MAAI,IAAE,EAAE,eAAe,GAAEA,GAAC,EAAE,CAAC,GAAE,IAAE,CAAC,GAAEA,IAAE,CAAC,GAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,IAAI,GAAE,CAAC,KAAGA,IAAE,CAAC;AAAE,IAAE,CAAC,IAAEA,IAAE,CAAC;AAAE,WAAQ,IAAE,IAAE,GAAE,IAAEA,IAAE,QAAO,IAAI,GAAE,CAAC,KAAGA,IAAE,CAAC;AAAE,MAAI,IAAE,oBAAI,OAAI,IAAE,IAAI,WAAWA,IAAE,CAAC,CAAC,GAAE,IAAE,IAAI,GAAG,GAAE,GAAED,GAAC,GAAE,IAAE,CAAC,GAAE,IAAE,EAAE,CAAC,MAAI,KAAG,EAAE,CAAC,MAAI;AAAE,WAAQ,IAAE,GAAE,IAAEC,IAAE,CAAC,GAAE,KAAI;AAAC,QAAI;AAAE,QAAG,EAAE,KAAED,IAAE,CAAC,EAAE,SAAS;AAAA,SAAM;AAAC,UAAI,IAAE,CAAC;AAAE,eAAQ,IAAE,GAAE,IAAE,EAAE,CAAC,GAAE,IAAI,UAAQ,IAAE,GAAE,IAAE,EAAE,CAAC,GAAE,IAAI,GAAE,KAAK,EAAE,IAAI,GAAE,GAAE,CAAC,CAAC;AAAE,UAAE,EAAE,KAAK,GAAG;AAAA,IAAC;AAAC,QAAI,IAAE,EAAE,IAAI,CAAC;AAAE,QAAG,KAAG,KAAK,GAAE,CAAC,IAAE;AAAA,SAAM;AAAC,UAAI,IAAE,EAAE;AAAK,QAAE,IAAI,GAAE,CAAC,GAAE,EAAE,CAAC,IAAE,GAAE,EAAE,KAAK,CAAC;AAAA,IAAC;AAAA,EAAC;AAAC,MAAI,IAAE,EAAE,MAAM;AAAE,IAAE,CAAC,IAAE,EAAE;AAAK,MAAI,IAAE,IAAI,GAAG,GAAE,CAAC;AAAE,IAAE,QAAQ,CAAC,GAAE,MAAI;AAAC,aAAQ,IAAE,GAAE,IAAE,EAAE,CAAC,GAAE,IAAI,UAAQ,IAAE,GAAE,IAAE,EAAE,CAAC,GAAE,IAAI,GAAE,IAAI,EAAE,IAAI,GAAE,GAAE,CAAC,GAAE,GAAE,GAAE,CAAC;AAAA,EAAC,CAAC;AAAE,MAAI,IAAEC,IAAE,MAAM;AAAE,SAAO,EAAE,CAAC,IAAE,EAAE,CAAC,GAAE,EAAC,cAAa,EAAE,QAAO,aAAY,GAAE,SAAQ,EAAC;AAAC;AAAC,IAAI,KAAG;AAAS,GAAG,OAAM,MAAI,IAAI,MAAG,CAAC;AAAE,IAAI,KAAG,GAAG,IAAG,CAAAD,QAAGA,OAAG,IAAEA,MAAE,KAAK,IAAIA,GAAC,IAAE,CAAC;AAApC,IAAsC,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,OAAM,EAAC,IAAE;AAAE,IAAE,CAAC,CAAC,GAAE,WAAW;AAAE,MAAI,IAAE,EAAE,cAAc,EAAE,KAAK,GAAE,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,uBAAuB,WAAU,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,IAAI,GAAE,CAAC,IAAE,EAAE,CAAC,IAAE,IAAE,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC;AAAE,SAAOA,IAAE,eAAe,EAAE,OAAM,WAAU,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,CAACD,KAAE,MAAIA,MAAE,IAAE,IAAEA,MAAEA,GAAC;AAAE,SAAS,GAAGA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,GAAE,GAAE,OAAM,EAAC,IAAE;AAAE,IAAE,CAAC,GAAE,CAAC,GAAE,OAAO;AAAE,MAAI,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,CAAC,GAAE,CAAC,IAAE,GAAG,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,SAAS;AAAE,SAAOA,IAAE,eAAe,GAAE,WAAU,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,IAAG,CAAAD,QAAG,KAAK,IAAI,GAAEA,GAAC,CAAC;AAA7B,IAA+B,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,IAAG,CAAAA,QAAG,KAAK,IAAI,KAAK,IAAI,GAAEA,GAAC,GAAE,CAAC,CAAC;AAAzC,IAA2C,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE,GAAE;AAAC,MAAGA,QAAI,SAAS,QAAO,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQD,IAAC,CAAC;AAAE,MAAGC,QAAI,OAAO,QAAO,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQD,IAAC,CAAC;AAAE,MAAGC,QAAI,MAAM,QAAO,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQD,IAAC,CAAC;AAAE,MAAGC,QAAI,QAAQ,QAAO,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQD,IAAC,CAAC;AAAE,MAAGC,QAAI,QAAQ,QAAO,GAAG,EAAC,QAAO,EAAC,GAAE,GAAE,OAAM,EAAC,GAAE,SAAQD,IAAC,CAAC;AAAE,MAAGC,QAAI,YAAY,QAAO,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQD,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,MAAGC,QAAI,UAAU,QAAO,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQD,IAAC,CAAC;AAAE,QAAM,IAAI,MAAM,cAAcC,GAAC,gDAAgD;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,OAAM,EAAC,IAAE,GAAE,IAAE,EAAE,cAAc,EAAE,KAAK,GAAE,IAAE,EAAE,uBAAuB,GAAE,CAAC,GAAE,IAAE,EAAE,cAAc,CAAC;AAAE,IAAE,OAAO,MAAI,GAAE,MAAI,kBAAkB,CAAC,SAAS,CAAC,gCAAgC,EAAE,KAAK,SAAS,CAAC,+EAA+E,GAAEC,IAAE,OAAO,EAAE,MAAM;AAAE,MAAI,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM;AAAE,MAAG,EAAE,sBAAoB,MAAK;AAAC,QAAI,IAAE,EAAE,mBAAmB,MAAK,IAAE,EAAE,mBAAmB;AAAK,MAAE,QAAM,GAAE,EAAE,QAAM;AAAA,EAAC;AAAC,SAAM,EAAC,QAAO,EAAE,QAAO,OAAM,GAAE,OAAM,EAAE,MAAK;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,GAAE,EAAC,IAAE,GAAE,EAAC,YAAW,GAAE,YAAW,EAAC,IAAE;AAAE,IAAE,CAAC,GAAE,CAAC,GAAE,QAAQ;AAAE,MAAI,IAAE,EAAE,MAAM,QAAO,IAAE,EAAE,MAAM,QAAO,IAAE,IAAE,EAAE,MAAM,IAAE,CAAC,IAAE,EAAE,MAAM,IAAE,CAAC,GAAE,IAAE,IAAE,EAAE,MAAM,IAAE,CAAC,IAAE,EAAE,MAAM,IAAE,CAAC,GAAE,IAAE,IAAE,EAAE,MAAM,IAAE,CAAC,IAAE,EAAE,MAAM,IAAE,CAAC,GAAE,IAAE,IAAE,EAAE,MAAM,IAAE,CAAC,IAAE,EAAE,MAAM,IAAE,CAAC,GAAE,IAAE,EAAE,MAAM,MAAM,GAAE,EAAE,GAAE,IAAE,EAAE,MAAM,MAAM,GAAE,EAAE,GAAE,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,GAAG,2BAA2B,EAAE,MAAM,MAAM,GAAE,EAAE,GAAE,EAAE,MAAM,MAAM,GAAE,EAAE,CAAC,EAAE,OAAO,CAAC,GAAE,CAAC,CAAC;AAAE,IAAE,OAAO,MAAI,GAAE,MAAI,kCAAkC,CAAC,UAAU,CAAC,4BAA4B,EAAE,KAAK,QAAQ,EAAE,KAAK,mBAAmB,CAAC,mBAAmB,CAAC,cAAc;AAAE,MAAI,IAAE,IAAE,CAAC,GAAE,GAAE,CAAC,IAAE,CAAC,GAAE,GAAE,CAAC,GAAE,IAAE,IAAE,CAAC,GAAE,GAAE,CAAC,IAAE,CAAC,GAAE,GAAE,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,IAAE,IAAE,EAAE,MAAM,CAAC,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,IAAE,EAAE,MAAM,CAAC,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,IAAE,EAAE,MAAM,CAAC,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,KAAK,IAAI,GAAE,CAAC,GAAE,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,eAAe,EAAE,KAAK,GAAE,IAAE,EAAE,eAAe,EAAE,KAAK,GAAE,CAAC,GAAE,GAAE,CAAC,IAAE,IAAE,CAAC,EAAE,CAAC,GAAE,GAAE,EAAE,CAAC,CAAC,IAAE,CAAC,EAAE,CAAC,GAAE,EAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,EAAE,IAAE,IAAE,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,IAAE,CAAC,EAAE,CAAC,GAAE,GAAE,EAAE,CAAC,CAAC,GAAE,KAAG,IAAE,GAAE,KAAG,GAAG,CAAC,GAAE,GAAE,CAAC,GAAE,EAAE,KAAK,GAAE,KAAG,GAAG,QAAO,KAAGA,IAAE;AAAU,WAAQ,KAAG,GAAE,KAAG,GAAE,MAAK;AAAC,QAAI,KAAG,KAAG,GAAE,KAAG,KAAG;AAAE,aAAQ,KAAG,GAAE,KAAG,GAAE,MAAI,IAAG;AAAC,UAAI,KAAG,KAAK,IAAI,KAAG,IAAG,CAAC;AAAE,eAAQ,KAAG,GAAE,KAAG,GAAE,MAAI,IAAG;AAAC,YAAI,KAAG,KAAK,IAAI,KAAG,IAAG,CAAC;AAAE,iBAAQ,KAAG,GAAE,KAAG,GAAE,MAAI,IAAG;AAAC,cAAI,KAAG,KAAK,IAAI,KAAG,IAAG,CAAC;AAAE,mBAAQ,KAAG,IAAG,KAAG,IAAG,KAAK,UAAQ,KAAG,IAAG,KAAG,IAAG,MAAK;AAAC,gBAAI,KAAG;AAAE,qBAAQ,KAAG,IAAG,KAAG,IAAG,MAAK;AAAC,kBAAI,KAAG,EAAE,KAAG,IAAE,KAAG,IAAE,KAAG,CAAC,GAAE,KAAG,EAAE,KAAG,IAAE,KAAG,IAAE,KAAG,EAAE;AAAE,oBAAI,KAAG;AAAA,YAAE;AAAC,eAAG,KAAG,MAAI,KAAG,IAAE,GAAG,KAAG;AAAA,UAAE;AAAA,QAAC;AAAA,MAAC;AAAA,IAAC;AAAA,EAAC;AAAC,SAAOA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,eAAe,GAAE,GAAG,OAAM,GAAG,MAAM;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,GAAE,GAAE,MAAK,GAAE,wBAAuB,EAAC,IAAE,GAAE,EAAC,YAAW,GAAE,YAAW,GAAE,YAAW,GAAE,gBAAe,EAAC,IAAE,GAAE,GAAE,GAAE,GAAE,IAAE,CAAC;AAAE,MAAE,GAAG,EAAC,QAAO,EAAC,GAAE,GAAE,GAAE,EAAC,GAAE,OAAM,EAAC,YAAW,GAAE,YAAW,EAAC,GAAE,SAAQC,IAAC,CAAC,GAAE,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,GAAE,GAAE,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAE,EAAE,KAAK,CAAC,GAAE,IAAE,IAAG,MAAI,IAAE,GAAGA,KAAE,GAAE,GAAE,GAAE,CAAC,GAAE,EAAE,KAAK,CAAC,GAAE,IAAE;AAAG,WAAQ,KAAK,EAAE,CAAAA,IAAE,8BAA8B,CAAC;AAAE,SAAO;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,IAAG,CAAAD,QAAG,KAAK,KAAKA,GAAC,CAAC;AAA5B,IAA8B,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,IAAG,CAAAA,QAAG,KAAK,MAAMA,GAAC,CAAC;AAA7B,IAA+B,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,IAAE;AAAE,IAAE,GAAE,MAAM;AAAE,MAAI,IAAE,EAAE,IAAI,OAAGC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,IAAE,GAAG,EAAE,CAAC,EAAE,OAAM,EAAE,CAAC,EAAE,KAAK,GAAE,IAAE,EAAE;AAAO,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,KAAI;AAAC,QAAI,IAAE,EAAE,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,IAAI,GAAE,CAAC,KAAG,EAAE,CAAC;AAAA,EAAC;AAAC,SAAOA,IAAE,eAAe,EAAE,OAAM,EAAE,OAAM,EAAE,MAAM;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,MAAK,GAAE,UAAS,EAAC,IAAE;AAAE,IAAE,GAAE,KAAK;AAAE,MAAI,IAAE,EAAE,eAAe,GAAE,EAAE,KAAK,GAAE,IAAE,GAAE,IAAE,EAAE,mBAAmB,GAAE,EAAE,MAAM,MAAM,GAAE,IAAE;AAAE,OAAG,SAAO,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC,GAAE,IAAE,EAAE,iBAAiB,EAAE,QAAO,EAAE,MAAM,MAAM,IAAG,EAAE,2BAA2B,OAAM,GAAE,EAAE,MAAM,MAAM;AAAE,MAAG,CAAC,GAAE,CAAC,IAAE,EAAE,0BAA0B,EAAE,OAAM,CAAC,GAAE,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,EAAE,oBAAoB,EAAE,cAAc,CAAC,GAAE,EAAE,KAAK,GAAE,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE;AAAO,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE,GAAE;AAAC,QAAI,IAAE,IAAE,GAAE,IAAE,EAAE,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,UAAI,IAAE,EAAE,IAAE,CAAC;AAAE,UAAE,KAAG;AAAA,IAAC;AAAC,MAAE,CAAC,IAAE;AAAA,EAAC;AAAC,OAAG,QAAMA,IAAE,8BAA8B,CAAC;AAAE,MAAI,IAAEA,IAAE,eAAe,GAAE,EAAE,OAAM,CAAC;AAAE,MAAG,GAAE;AAAC,QAAI,IAAE,EAAE,qBAAqB,GAAE,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,WAAOA,IAAE,8BAA8B,CAAC,GAAE;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,MAAK,GAAE,UAAS,EAAC,IAAE;AAAE,IAAE,GAAE,KAAK;AAAE,MAAI,IAAE,EAAE,eAAe,GAAE,EAAE,KAAK,GAAE,IAAE,GAAE,IAAE,EAAE,mBAAmB,GAAE,EAAE,MAAM,MAAM,GAAE,IAAE;AAAE,OAAG,SAAO,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC,GAAE,IAAE,EAAE,iBAAiB,EAAE,QAAO,EAAE,MAAM,MAAM,IAAG,EAAE,2BAA2B,OAAM,GAAE,EAAE,MAAM,MAAM;AAAE,MAAG,CAAC,GAAE,CAAC,IAAE,EAAE,0BAA0B,EAAE,OAAM,CAAC,GAAE,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,EAAE,oBAAoB,EAAE,cAAc,CAAC,GAAE,EAAE,KAAK,GAAE,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE;AAAO,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE,GAAE;AAAC,QAAI,IAAE,IAAE,GAAE,IAAE,EAAE,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,UAAI,IAAE,EAAE,IAAE,CAAC;AAAE,UAAE,KAAG;AAAA,IAAC;AAAC,MAAE,CAAC,IAAE;AAAA,EAAC;AAAC,OAAG,QAAMA,IAAE,8BAA8B,CAAC;AAAE,MAAI,IAAEA,IAAE,eAAe,GAAE,EAAE,OAAM,CAAC;AAAE,MAAG,GAAE;AAAC,QAAI,IAAE,EAAE,qBAAqB,GAAE,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,WAAOA,IAAE,8BAA8B,CAAC,GAAE;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,MAAK,EAAC,IAAE;AAAE,IAAE,GAAE,QAAQ;AAAE,MAAI,IAAE,EAAE,eAAe,GAAE,EAAE,KAAK,GAAE,IAAE,EAAE,mBAAmB,GAAE,EAAE,MAAM,MAAM,GAAE,IAAE,GAAE,IAAE,CAAC;AAAE,OAAG,SAAO,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC,GAAE,EAAE,KAAK,CAAC,GAAE,IAAE,EAAE,iBAAiB,EAAE,QAAO,EAAE,MAAM,MAAM,IAAG,IAAE,CAAC,EAAE,CAAC,CAAC,GAAE,EAAE,2BAA2B,UAAS,GAAE,EAAE,MAAM,MAAM;AAAE,MAAG,CAAC,GAAE,CAAC,IAAE,EAAE,0BAA0B,EAAE,OAAM,CAAC,GAAE,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,EAAE,oBAAoB,GAAE,OAAO,GAAE,IAAE,EAAE,cAAc,CAAC,GAAE,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE;AAAO,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE,GAAE;AAAC,QAAI,IAAE,IAAE,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,UAAI,IAAE,EAAE,IAAE,CAAC;AAAE,UAAE,MAAI,IAAE,GAAE,IAAE;AAAA,IAAE;AAAC,MAAE,CAAC,IAAE;AAAA,EAAC;AAAC,SAAO,EAAE,QAAQ,OAAGA,IAAE,8BAA8B,CAAC,CAAC,GAAEA,IAAE,eAAe,GAAE,SAAQ,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,MAAK,EAAC,IAAE;AAAE,IAAE,GAAE,QAAQ;AAAE,MAAI,IAAE,EAAE,eAAe,GAAE,EAAE,KAAK,GAAE,IAAE,EAAE,mBAAmB,GAAE,EAAE,MAAM,MAAM,GAAE,IAAE,GAAE,IAAE,CAAC;AAAE,OAAG,SAAO,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC,GAAE,EAAE,KAAK,CAAC,GAAE,IAAE,EAAE,iBAAiB,EAAE,QAAO,EAAE,MAAM,MAAM,IAAG,IAAE,CAAC,EAAE,CAAC,CAAC,GAAE,EAAE,2BAA2B,UAAS,GAAE,EAAE,MAAM,MAAM;AAAE,MAAG,CAAC,GAAE,CAAC,IAAE,EAAE,0BAA0B,EAAE,OAAM,CAAC,GAAE,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,EAAE,oBAAoB,GAAE,OAAO,GAAE,IAAE,EAAE,cAAc,CAAC,GAAE,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE;AAAO,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE,GAAE;AAAC,QAAI,IAAE,IAAE,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,UAAI,IAAE,EAAE,IAAE,CAAC;AAAE,UAAE,MAAI,IAAE,GAAE,IAAE;AAAA,IAAE;AAAC,MAAE,CAAC,IAAE;AAAA,EAAC;AAAC,SAAO,EAAE,QAAQ,OAAGA,IAAE,8BAA8B,CAAC,CAAC,GAAEA,IAAE,eAAe,GAAE,SAAQ,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,IAAG,CAAAD,QAAG,KAAK,KAAKA,GAAC,CAAC;AAA5B,IAA8B,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,IAAG,CAAAA,QAAG,KAAK,MAAMA,GAAC,CAAC;AAA7B,IAA+B,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,IAAG,CAAAA,QAAG,KAAK,KAAKA,GAAC,CAAC;AAA5B,IAA8B,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,CAACA,KAAE,MAAI,KAAK,MAAMA,KAAE,CAAC,CAAC;AAAhC,IAAkC,KAAG,GAAG,IAAG,EAAE;AAA7C,IAA+C,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,IAAG,CAAAA,QAAG,KAAK,MAAMA,GAAC,CAAC;AAA7B,IAA+B,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE;AAAC,MAAI,IAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,EAAE,gBAAe,IAAE,EAAE,eAAc,IAAE,EAAE,uBAAsB,IAAE,EAAE,sBAAqB,IAAE,EAAE,QAAQ,KAAI,IAAE,EAAE,QAAQ,MAAK,IAAE,MAAI,QAAM,OAAO,oBAAkB,OAAO,mBAAkB,IAAE,GAAG,EAAE,UAASA,GAAC,GAAE,IAAE,EAAE,QAAO,IAAE,EAAE,SAAS,CAAC,IAAE,EAAE,SAAS,CAAC,IAAE,EAAE,SAAS,CAAC,GAAE,IAAE,EAAE,SAAS,CAAC,IAAE,EAAE,SAAS,CAAC,GAAE,IAAE,EAAE,SAAS,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,WAAU,EAAE,GAAE;AAAC,QAAI,IAAE,IAAE,GAAE,IAAE,IAAE,EAAE,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,YAAW,EAAE,EAAE,UAAQ,IAAE,GAAE,IAAE,EAAE,WAAU,EAAE,GAAE;AAAC,UAAI,IAAE,IAAE,IAAE,GAAE,IAAE,KAAK,IAAI,GAAE,CAAC,GAAE,IAAE,KAAK,IAAI,EAAE,UAAS,IAAE,CAAC,GAAE,IAAE,IAAE,IAAE;AAAE,eAAQ,IAAE,GAAE,IAAE,EAAE,UAAS,EAAE,GAAE;AAAC,YAAI,IAAE,IAAE,IAAE,GAAE,IAAE,KAAK,IAAI,GAAE,CAAC,GAAE,IAAE,KAAK,IAAI,EAAE,SAAQ,IAAE,CAAC,GAAE,IAAE,GAAE,IAAE,GAAE,IAAE;AAAE,iBAAQ,KAAG,GAAE,KAAG,GAAE,MAAI,GAAE;AAAC,cAAI,KAAG,IAAE,KAAG,EAAE,CAAC;AAAE,mBAAQ,KAAG,GAAE,KAAG,GAAE,MAAI,GAAE;AAAC,gBAAI,KAAG,KAAG,KAAG,EAAE,CAAC,GAAE,KAAGD,IAAE,KAAG,CAAC;AAAE,kBAAI,SAAO,KAAG,IAAE,IAAE,KAAG,MAAI,UAAQ,KAAG,IAAG;AAAA,UAAI;AAAC,cAAG,MAAM,CAAC,EAAE;AAAA,QAAK;AAAC,YAAI,IAAE,IAAE,IAAE,IAAE;AAAE,UAAE,CAAC,IAAE,MAAI,QAAM,IAAE,IAAE;AAAA,MAAC;AAAA,IAAC;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE,IAAE,OAAG,IAAE,OAAG;AAAC,MAAI,IAAE,GAAG,EAAE,UAAS,OAAO,GAAE,IAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,EAAE,gBAAe,IAAE,EAAE,eAAc,IAAE,EAAE,uBAAsB,IAAE,EAAE,sBAAqB,IAAE,EAAE,QAAQ,KAAI,IAAE,EAAE,QAAQ,MAAK,IAAE,GAAG,GAAEA,KAAED,GAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,WAAU,EAAE,EAAE,UAAQ,IAAE,GAAE,IAAE,EAAE,YAAW,EAAE,EAAE,UAAQ,IAAE,GAAE,IAAE,EAAE,WAAU,EAAE,GAAE;AAAC,QAAI,IAAE,IAAE,IAAE,GAAE,IAAE;AAAE,WAAK,IAAE,IAAG,MAAG;AAAE,QAAI,IAAE,KAAK,IAAI,EAAE,UAAS,IAAE,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,UAAS,EAAE,GAAE;AAAC,UAAI,IAAE,IAAE,IAAE,GAAE,IAAE;AAAE,aAAK,IAAE,IAAG,MAAG;AAAE,UAAI,IAAE,KAAK,IAAI,EAAE,SAAQ,IAAE,CAAC,GAAE,IAAE,OAAO,mBAAkB,IAAE;AAAG,eAAQ,IAAE,GAAE,IAAE,GAAE,KAAG,GAAE;AAAC,YAAI,IAAE,IAAE;AAAE,iBAAQ,IAAE,GAAE,IAAE,GAAE,KAAG,GAAE;AAAC,cAAI,IAAE,IAAE,GAAE,IAAE,EAAE,IAAI,GAAE,GAAE,GAAE,CAAC;AAAE,cAAE,MAAI,IAAE,GAAE,IAAE,IAAE,MAAI,IAAE,EAAE,WAAS,KAAG,EAAE,UAAQ,KAAG,EAAE,aAAW,KAAG,IAAE,EAAE,UAAQ,KAAG,EAAE,aAAW,IAAE,IAAE,IAAE,IAAE;AAAA,QAAE;AAAA,MAAC;AAAC,QAAE,IAAI,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,IAAC;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE;AAAC,MAAI,IAAE,EAAE,aAAY,IAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,EAAE,eAAc,IAAE,EAAE,gBAAe,IAAE,EAAE,eAAc,IAAE,EAAE,sBAAqB,IAAE,EAAE,uBAAsB,IAAE,EAAE,sBAAqB,IAAE,EAAE,QAAQ,OAAM,IAAE,EAAE,QAAQ,KAAI,IAAE,EAAE,QAAQ,MAAK,IAAE,MAAI,QAAM,OAAO,oBAAkB,OAAO,mBAAkB,IAAE,GAAG,EAAE,UAASA,GAAC,GAAE,IAAE,EAAE,QAAO,IAAE,EAAE,SAAS,CAAC,IAAE,EAAE,SAAS,CAAC,IAAE,EAAE,SAAS,CAAC,IAAE,EAAE,SAAS,CAAC,GAAE,IAAE,EAAE,SAAS,CAAC,IAAE,EAAE,SAAS,CAAC,IAAE,EAAE,SAAS,CAAC,GAAE,IAAE,EAAE,SAAS,CAAC,IAAE,EAAE,SAAS,CAAC,GAAE,IAAE,EAAE,SAAS,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,WAAU,EAAE,GAAE;AAAC,QAAI,IAAE,IAAE,GAAE,IAAE,IAAE,EAAE,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,YAAW,EAAE,EAAE,UAAQ,IAAE,GAAE,IAAE,EAAE,UAAS,EAAE,GAAE;AAAC,UAAI,IAAE,IAAE,IAAE,GAAE,IAAE;AAAE,aAAK,IAAE,IAAG,MAAG;AAAE,UAAI,IAAE,KAAK,IAAI,EAAE,SAAQ,IAAE,CAAC,GAAE,IAAE,IAAE,IAAE;AAAE,eAAQ,IAAE,GAAE,IAAE,EAAE,WAAU,EAAE,GAAE;AAAC,YAAI,IAAE,IAAE,IAAE,GAAE,IAAE;AAAE,eAAK,IAAE,IAAG,MAAG;AAAE,YAAI,KAAG,KAAK,IAAI,EAAE,UAAS,IAAE,CAAC,GAAE,KAAG,IAAE,IAAE;AAAE,iBAAQ,KAAG,GAAE,KAAG,EAAE,UAAS,EAAE,IAAG;AAAC,cAAI,KAAG,KAAG,IAAE,GAAE,KAAG;AAAG,iBAAK,KAAG,IAAG,OAAI;AAAE,cAAI,KAAG,KAAK,IAAI,EAAE,SAAQ,IAAE,EAAE,GAAE,KAAG,KAAG,KAAG,GAAE,KAAG,GAAE,KAAG,GAAE,KAAG;AAAE,mBAAQ,KAAG,GAAE,KAAG,GAAE,MAAI,GAAE;AAAC,gBAAI,KAAG,IAAE,KAAG,EAAE,CAAC;AAAE,qBAAQ,KAAG,GAAE,KAAG,IAAG,MAAI,GAAE;AAAC,kBAAI,KAAG,KAAG,KAAG,EAAE,CAAC;AAAE,uBAAQ,KAAG,IAAG,KAAG,IAAG,MAAI,GAAE;AAAC,oBAAI,KAAG,KAAG,KAAG,EAAE,CAAC,GAAE,KAAGD,IAAE,KAAG,CAAC;AAAE,oBAAG,MAAI,SAAO,KAAG,KAAG,KAAG,KAAG,MAAI,UAAQ,MAAI,IAAG,OAAM,MAAM,EAAE,EAAE;AAAA,cAAK;AAAC,kBAAG,MAAM,EAAE,EAAE;AAAA,YAAK;AAAC,gBAAG,MAAM,EAAE,EAAE;AAAA,UAAK;AAAC,cAAI,KAAG,KAAG;AAAE,YAAE,EAAE,IAAE,MAAI,QAAM,KAAG,KAAK,IAAI,IAAG,CAAC,IAAE;AAAA,QAAE;AAAA,MAAC;AAAA,IAAC;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAIC,MAAE,GAAG,EAAE,UAAS,OAAO,GAAE,IAAE,EAAE,aAAY,IAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,EAAE,eAAc,IAAE,EAAE,gBAAe,IAAE,EAAE,eAAc,IAAE,EAAE,sBAAqB,IAAE,EAAE,uBAAsB,IAAE,EAAE,sBAAqB,IAAE,EAAE,QAAQ,OAAM,IAAE,EAAE,QAAQ,KAAI,IAAE,EAAE,QAAQ;AAAK,WAAQ,IAAE,GAAE,IAAE,EAAE,WAAU,EAAE,EAAE,UAAQ,IAAE,GAAE,IAAE,EAAE,YAAW,EAAE,EAAE,UAAQ,IAAE,GAAE,IAAE,EAAE,UAAS,EAAE,GAAE;AAAC,QAAI,IAAE,IAAE,IAAE,GAAE,IAAE;AAAE,WAAK,IAAE,IAAG,MAAG;AAAE,QAAI,IAAE,KAAK,IAAI,EAAE,SAAQ,IAAE,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,WAAU,EAAE,GAAE;AAAC,UAAI,IAAE,IAAE,IAAE,GAAE,IAAE;AAAE,aAAK,IAAE,IAAG,MAAG;AAAE,UAAI,IAAE,KAAK,IAAI,EAAE,UAAS,IAAE,CAAC;AAAE,eAAQ,IAAE,GAAE,IAAE,EAAE,UAAS,EAAE,GAAE;AAAC,YAAI,IAAE,IAAE,IAAE,GAAE,IAAE;AAAE,eAAK,IAAE,IAAG,MAAG;AAAE,YAAI,IAAE,KAAK,IAAI,EAAE,SAAQ,IAAE,CAAC,GAAE,IAAE,OAAO,mBAAkB,IAAE;AAAG,iBAAQ,IAAE,GAAE,IAAE,GAAE,KAAG,GAAE;AAAC,cAAI,IAAE,IAAE;AAAE,mBAAQ,IAAE,GAAE,IAAE,GAAE,KAAG,GAAE;AAAC,gBAAI,IAAE,IAAE;AAAE,qBAAQ,IAAE,GAAE,IAAE,GAAE,KAAG,GAAE;AAAC,kBAAI,IAAE,IAAE,GAAE,KAAGD,IAAE,IAAI,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,oBAAI,MAAI,IAAE,IAAG,IAAE,IAAE,IAAE,IAAE,IAAE,IAAE;AAAA,YAAE;AAAA,UAAC;AAAA,QAAC;AAAC,QAAAC,IAAE,IAAI,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,MAAC;AAAA,IAAC;AAAA,EAAC;AAAC,SAAOA;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE;AAAE,IAAE,GAAE,SAAS;AAAE,MAAG,EAAC,YAAW,GAAE,SAAQ,GAAE,KAAI,GAAE,iBAAgB,EAAC,IAAE,GAAE,IAAE;AAAE,IAAE,OAAO,EAAE,+BAA+B,GAAE,CAAC,GAAE,MAAI,wEAAwE,CAAC,mBAAmB,CAAC,GAAG;AAAE,MAAI,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE;AAAE,MAAG,EAAE,gBAAc,KAAG,EAAE,iBAAe,KAAG,EAAE,YAAY,EAAE,SAAQ,EAAE,QAAQ,EAAE,KAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,IAAC,CAAC;AAAA,OAAM;AAAC,QAAI,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,eAAe,EAAE,KAAK,GAAE,IAAE,GAAG,GAAE,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,KAAK;AAAE,QAAEA,IAAE,eAAe,EAAE,UAAS,EAAE,OAAM,EAAE,MAAM;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,YAAW,GAAE,SAAQ,GAAE,KAAI,GAAE,iBAAgB,GAAE,YAAW,EAAC,IAAE;AAAE,IAAE,GAAE,WAAW;AAAE,MAAI,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,GAAG,GAAE,EAAE,OAAM,EAAE,OAAM,EAAE,eAAe,EAAE,KAAK,GAAE,GAAE,KAAK;AAAE,SAAOA,IAAE,eAAe,EAAE,OAAM,WAAU,EAAE,MAAM;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,IAAG,GAAE,OAAM,EAAC,IAAE,GAAE,EAAC,YAAW,GAAE,SAAQ,GAAE,KAAI,GAAE,iBAAgB,EAAC,IAAE;AAAE,IAAE,CAAC,GAAE,CAAC,GAAE,eAAe;AAAE,MAAI,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,aAAY,IAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,EAAE,aAAY,IAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,EAAE,eAAc,IAAE,EAAE,gBAAe,IAAE,EAAE,eAAc,IAAE,EAAE,sBAAqB,IAAE,EAAE,uBAAsB,IAAE,EAAE,sBAAqB,IAAE,IAAE,IAAE,EAAE,QAAQ,OAAM,IAAE,IAAE,IAAE,EAAE,QAAQ,MAAK,IAAE,IAAE,IAAE,EAAE,QAAQ,KAAI,IAAE,GAAG,EAAE,OAAM,SAAS,GAAE,IAAE,KAAG,IAAE,IAAE,IAAG,IAAEC,IAAE,WAAW,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,WAAU,EAAE,EAAE,UAAQ,IAAE,GAAE,IAAE,EAAE,YAAW,EAAE,EAAE,UAAQ,IAAE,GAAE,IAAE,EAAE,SAAQ,EAAE,EAAE,UAAQ,IAAE,GAAE,IAAE,EAAE,UAAS,EAAE,EAAE,UAAQ,IAAE,GAAE,IAAE,EAAE,SAAQ,EAAE,GAAE;AAAC,QAAI,IAAE,IAAE,GAAE,IAAE,IAAE,GAAE,IAAE,IAAE,GAAE,KAAG;AAAE,aAAQ,KAAG,GAAE,KAAG,GAAE,MAAI,GAAE;AAAC,UAAI,MAAI,IAAE,MAAI;AAAE,UAAG,EAAE,KAAG,KAAG,MAAI,EAAE,YAAU,KAAK,MAAM,EAAE,MAAI,IAAI,UAAQ,KAAG,GAAE,KAAG,GAAE,MAAI,GAAE;AAAC,YAAI,MAAI,IAAE,MAAI;AAAE,YAAG,EAAE,KAAG,KAAG,MAAI,EAAE,aAAW,KAAK,MAAM,EAAE,MAAI,IAAI,UAAQ,KAAG,GAAE,KAAG,GAAE,MAAI,GAAE;AAAC,cAAI,MAAI,IAAE,MAAI;AAAE,cAAG,KAAG,KAAG,MAAI,EAAE,YAAU,KAAK,MAAM,EAAE,MAAI,GAAG;AAAS,cAAI,KAAG,EAAE,IAAI,GAAE,IAAG,IAAG,IAAG,CAAC;AAAE,gBAAI;AAAA,QAAE;AAAA,MAAC;AAAA,IAAC;AAAC,MAAE,IAAI,KAAG,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAAC;AAAC,SAAOA,IAAE,eAAe,EAAE,OAAM,EAAE,OAAM,EAAE,MAAM;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,IAAG,GAAE,OAAM,EAAC,IAAE,GAAE,IAAE;AAAE,IAAE,CAAC,GAAE,CAAC,GAAE,aAAa;AAAE,MAAG,EAAC,YAAW,GAAE,SAAQ,GAAE,KAAI,EAAC,IAAE,GAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,EAAE,gBAAe,IAAE,EAAE,eAAc,IAAE,EAAE,uBAAsB,IAAE,EAAE,sBAAqB,IAAE,IAAE,IAAE,EAAE,QAAQ,MAAK,IAAE,IAAE,IAAE,EAAE,QAAQ,KAAI,IAAE,GAAG,EAAE,OAAM,SAAS,GAAE,IAAE,KAAG,IAAE,IAAG,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,GAAG,EAAE,OAAM,WAAU,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,WAAU,EAAE,EAAE,UAAQ,IAAE,GAAE,IAAE,EAAE,YAAW,EAAE,EAAE,UAAQ,IAAE,GAAE,IAAE,EAAE,UAAS,EAAE,EAAE,UAAQ,IAAE,GAAE,IAAE,EAAE,SAAQ,EAAE,GAAE;AAAC,QAAI,IAAE,IAAE,GAAE,IAAE,IAAE,GAAE,IAAE;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,KAAG,GAAE;AAAC,UAAI,KAAG,IAAE,KAAG;AAAE,UAAG,EAAE,IAAE,KAAG,KAAG,EAAE,aAAW,KAAK,MAAM,CAAC,MAAI,GAAG,UAAQ,IAAE,GAAE,IAAE,GAAE,KAAG,GAAE;AAAC,YAAI,KAAG,IAAE,KAAG;AAAE,YAAG,IAAE,KAAG,KAAG,EAAE,YAAU,KAAK,MAAM,CAAC,MAAI,EAAE;AAAS,YAAI,IAAE,EAAE,IAAI,GAAE,GAAE,GAAE,CAAC;AAAE,aAAG;AAAA,MAAC;AAAA,IAAC;AAAC,MAAE,IAAI,IAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAAC;AAAC,SAAOA,IAAE,eAAe,EAAE,OAAM,EAAE,OAAM,EAAE,MAAM;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,OAAM,GAAE,QAAO,GAAE,MAAK,GAAE,UAAS,EAAC,IAAE;AAAE,IAAE,OAAO,EAAE,MAAM,WAAS,EAAE,MAAM,QAAO,MAAI,8EAA8E,GAAE,EAAE,OAAO,KAAG,QAAM,EAAE,MAAM,WAAS,EAAE,MAAM,QAAO,MAAI,4EAA4E,GAAE,EAAE,OAAO,KAAG,QAAM,EAAE,MAAM,WAAS,EAAE,MAAM,QAAO,MAAI,2EAA2E,GAAE,EAAE,CAAC,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,WAAW;AAAE,MAAG,EAAC,iBAAgB,EAAC,IAAE;AAAE,OAAG,SAAO,IAAE;AAAM,MAAI,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,SAAO,IAAI,aAAa,CAAC,CAAC,CAAC,GAAE,IAAE,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,SAAO,IAAI,aAAa,CAAC,CAAC,CAAC,GAAE,IAAE,IAAI,aAAa,EAAE,MAAM,GAAE,IAAE,EAAE,QAAO,IAAE,EAAE,QAAO,IAAE,EAAE,QAAO,IAAE,EAAE,QAAO,IAAE,GAAE,IAAE,GAAE,IAAE,GAAE,IAAE;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE,EAAE,GAAE,CAAC,IAAE,EAAE,GAAG,KAAG,EAAE,CAAC,IAAE,EAAE,GAAG,KAAG,EAAE,GAAG,IAAE,KAAK,KAAK,EAAE,GAAG,IAAE,CAAC,GAAE,KAAG,MAAI,IAAE,IAAG,KAAG,MAAI,IAAE,IAAG,KAAG,MAAI,IAAE,IAAG,KAAG,MAAI,IAAE;AAAG,SAAOA,IAAE,eAAe,EAAE,OAAM,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,YAAW,GAAE,OAAM,EAAC,IAAE;AAAE,IAAE,CAAC,CAAC,GAAE,gBAAgB;AAAE,MAAI,IAAE,EAAE,OAAO,CAAC,GAAE,MAAI,IAAE,CAAC,GAAE,IAAE,EAAE,YAAY,EAAE,OAAM,GAAE,CAAC,GAAE,IAAE,EAAE,YAAY,EAAE,QAAO,EAAE,MAAM,GAAE,IAAE,EAAE,oBAAoB,EAAE,OAAM,GAAE,CAAC,GAAE,IAAE,EAAE,oBAAoB,GAAE,EAAE,MAAM,GAAE,IAAE,EAAE,aAAa,GAAE,GAAE,EAAE,MAAM,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,GAAE,MAAK,EAAC,EAAC,CAAC;AAAE,SAAOA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,SAAQ,EAAC,IAAE,GAAE,EAAC,MAAK,EAAC,IAAE,GAAE,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,GAAG,GAAE,GAAE,EAAE,OAAM,EAAE,OAAM,CAAC;AAAE,SAAOA,IAAE,eAAe,CAAC,CAAC,GAAE,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,IAAG,GAAE,IAAG,EAAC,IAAE,GAAE,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,2BAA2B,MAAM,KAAK,CAAC,GAAE,MAAM,KAAK,CAAC,CAAC;AAAE,SAAOA,IAAE,eAAe,CAAC,EAAE,MAAM,GAAE,SAAQ,WAAW,KAAK,CAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,IAAG,CAACD,KAAE,MAAI;AAAC,MAAIC,MAAE;AAAE,SAAOD,MAAEC,IAAE,eAAaA,IAAE,eAAaD,MAAEC,IAAE,eAAaA,IAAE,eAAaD;AAAC,CAAC;AAAtG,IAAwG,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,CAAAA,QAAG;AAAC,MAAG,EAAC,GAAE,EAAC,IAAEA,IAAE,QAAOC,MAAED,IAAE,SAAQ,IAAE,IAAI,aAAa,EAAE,cAAc,EAAE,KAAK,CAAC,GAAE,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,GAAE,IAAE,EAAE,mBAAmB,MAAK,IAAE,EAAE,mBAAmB,MAAK,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE;AAAO,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,KAAI;AAAC,QAAI,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC;AAAE,MAAE,CAAC,IAAE,KAAK,MAAM,GAAE,CAAC;AAAA,EAAC;AAAC,SAAOA,IAAE,WAAW,GAAE,EAAE,OAAM,SAAS;AAAC;AAA5U,IAA8U,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,OAAM,EAAC,IAAE,GAAE,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,mBAAmB,MAAK,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE;AAAO,SAAOA,IAAE,eAAe,EAAE,OAAM,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,MAAK,EAAC,IAAE,GAAE,IAAE,EAAE,eAAe,GAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAE,IAAE,EAAE,IAAI,OAAG,EAAE,KAAK;AAAE,IAAE,uBAAuB,GAAE,CAAC;AAAE,MAAI,IAAE,EAAE,gBAAgB,EAAE,IAAI,OAAG,EAAE,KAAK,GAAE,CAAC;AAAE,MAAG,EAAE,cAAc,CAAC,MAAI,EAAE,QAAOC,IAAE,eAAe,GAAE,EAAE,CAAC,EAAE,OAAM,CAAC,CAAC;AAAE,MAAI,IAAE,EAAE,OAAO,OAAG,EAAE,cAAc,EAAE,KAAK,IAAE,CAAC;AAAE,MAAG,EAAE,WAAS,EAAE,QAAO,GAAG,EAAC,QAAO,EAAC,GAAE,EAAE,CAAC,EAAC,GAAE,SAAQA,IAAC,CAAC;AAAE,MAAG,EAAE,CAAC,EAAE,UAAQ,aAAY;AAAC,QAAI,IAAE,EAAE,IAAI,OAAG,GAAG,EAAC,QAAO,EAAC,OAAM,EAAC,GAAE,SAAQA,IAAC,CAAC,CAAC,GAAE,IAAE,EAAE,IAAI,OAAG,GAAG,EAAC,QAAO,EAAC,OAAM,EAAC,GAAE,SAAQA,IAAC,CAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,GAAE,SAAQA,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,GAAE,SAAQA,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,MAAK,GAAE,MAAK,EAAC,GAAE,SAAQA,IAAC,CAAC;AAAE,WAAO,EAAE,QAAQ,OAAGA,IAAE,8BAA8B,CAAC,CAAC,GAAE,EAAE,QAAQ,OAAGA,IAAE,8BAA8B,CAAC,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAE;AAAA,EAAC;AAAC,MAAI,IAAE,EAAE,IAAI,OAAG;AAAC,QAAI,IAAE,CAAC,IAAG,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC,CAAC,CAAC;AAAE,WAAO,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAA,EAAC,CAAC,GAAE,IAAE,EAAE,IAAI,QAAI,EAAC,MAAKA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,OAAM,EAAE,MAAK,EAAE;AAAE,MAAE,EAAE,gBAAgB,EAAE,IAAI,OAAG,EAAE,KAAK,GAAE,CAAC;AAAE,MAAI,IAAE,EAAE,CAAC,EAAE,MAAM,CAAC,MAAI,GAAE,IAAE,GAAG,GAAE,GAAE,EAAE,CAAC,EAAE,OAAM,CAAC,GAAE,IAAE,EAAE,gBAAgB,EAAE,IAAI,OAAG,EAAE,KAAK,GAAE,CAAC,GAAE,IAAEA,IAAE,eAAe,GAAE,EAAE,CAAC,EAAE,OAAM,CAAC;AAAE,SAAO,EAAE,QAAQ,OAAGA,IAAE,8BAA8B,CAAC,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,QAAO,EAAC,IAAE,GAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,YAAW,GAAE,WAAU,GAAE,iBAAgB,EAAC,IAAE;AAAE,IAAE,CAAC,GAAE,CAAC,GAAE,QAAQ;AAAE,MAAI,IAAE,EAAE,wBAAwB,CAAC,GAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,OAAG,CAAC,GAAE,IAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,EAAE,gBAAe,IAAE,EAAE,eAAc,IAAE,EAAE,QAAQ,MAAK,IAAE,EAAE,QAAQ,KAAI,IAAE,EAAE,eAAa,gBAAe,IAAE,IAAI,GAAG,EAAE,UAAS,EAAE,KAAK,GAAE,IAAE,EAAE,eAAe,EAAE,KAAK,GAAE,IAAE,EAAE,eAAe,EAAE,KAAK,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,GAAE,IAAE,IAAE,EAAE,CAAC,IAAE,GAAE,IAAE,IAAE,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,QAAQ,CAAC,GAAE,IAAE,IAAE,EAAE,QAAQ,CAAC,IAAE,EAAE,QAAQ,CAAC,GAAE,IAAE,IAAE,EAAE,QAAQ,CAAC,IAAE,GAAE,IAAE,IAAE,IAAE,EAAE,QAAQ,CAAC,GAAE,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE;AAAO,WAAQ,IAAE,GAAE,IAAE,EAAE,WAAU,EAAE,GAAE;AAAC,QAAI,IAAE,IAAE,GAAE,IAAE,IAAE;AAAE,aAAQ,KAAG,GAAE,KAAG,EAAE,WAAU,EAAE,IAAG;AAAC,UAAI,KAAG,IAAE,KAAG,GAAE,KAAG,KAAG,EAAE,eAAa;AAAE,eAAQ,KAAG,GAAE,KAAG,GAAE,EAAE,IAAG;AAAC,YAAI,KAAG,KAAG,KAAG;AAAE,YAAG,KAAG,KAAG,MAAI,EAAE,SAAS;AAAS,YAAI,KAAG,KAAG,EAAE,CAAC,GAAE,KAAG,IAAE,KAAG;AAAE,iBAAQ,KAAG,GAAE,KAAG,EAAE,UAAS,EAAE,IAAG;AAAC,cAAI,KAAG,KAAG,KAAG,GAAE,KAAG,KAAG,EAAE,cAAY;AAAE,mBAAQ,KAAG,GAAE,KAAG,GAAE,EAAE,IAAG;AAAC,gBAAI,KAAG,KAAG,KAAG;AAAE,gBAAG,KAAG,KAAG,MAAI,EAAE,QAAQ;AAAS,gBAAI,KAAG,KAAG,KAAG,EAAE,CAAC,GAAE,KAAG,KAAG,KAAG,GAAE,KAAG;AAAG,qBAAQ,KAAG,GAAE,KAAG,EAAE,YAAW,EAAE,IAAG;AAAC,kBAAI,KAAG,EAAE,KAAG,KAAG,CAAC;AAAE,uBAAQ,KAAG,GAAE,KAAG,EAAE,aAAY,EAAE,GAAG,GAAE,KAAG,KAAG,CAAC,KAAG,KAAG,EAAE,KAAG,EAAE;AAAE,oBAAI,EAAE;AAAA,YAAW;AAAA,UAAC;AAAA,QAAC;AAAA,MAAC;AAAA,IAAC;AAAA,EAAC;AAAC,SAAOA,IAAE,eAAe,EAAE,OAAM,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,IAAG,EAAC,IAAE,GAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,YAAW,GAAE,iBAAgB,GAAE,aAAY,EAAC,IAAE;AAAE,IAAE,CAAC,GAAE,CAAC,GAAE,sBAAsB;AAAE,MAAI,IAAE,EAAE,wBAAwB,CAAC,GAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,GAAE,OAAG,CAAC,GAAE,EAAC,cAAa,GAAE,aAAY,GAAE,cAAa,GAAE,aAAY,EAAC,IAAE,GAAE,IAAE,EAAE,eAAa,gBAAe,IAAE,IAAI,GAAG,EAAE,aAAY,SAAS,GAAE,IAAE,EAAE,QAAQ,MAAK,IAAE,EAAE,QAAQ,KAAI,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,IAAI,GAAG,EAAE,OAAM,EAAE,OAAM,CAAC,GAAE,IAAE,IAAI,GAAG,EAAE,OAAM,EAAE,OAAM,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,QAAI,IAAE,KAAK,IAAI,GAAE,KAAK,MAAM,IAAE,KAAG,CAAC,CAAC,GAAE,IAAE,KAAK,IAAI,EAAE,YAAW,EAAE,WAAS,IAAE,KAAG,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,UAAI,IAAE,KAAK,IAAI,GAAE,KAAK,MAAM,IAAE,KAAG,CAAC,CAAC,GAAE,IAAE,KAAK,IAAI,EAAE,WAAU,EAAE,UAAQ,IAAE,KAAG,CAAC;AAAE,eAAQ,IAAE,GAAE,IAAE,EAAE,YAAW,EAAE,EAAE,UAAQ,IAAE,GAAE,IAAE,EAAE,aAAY,EAAE,GAAE;AAAC,YAAI,IAAE;AAAE,iBAAQ,IAAE,GAAE,IAAE,EAAE,WAAU,EAAE,EAAE,UAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,cAAI,IAAE,IAAE,IAAE,IAAE;AAAE,mBAAQ,KAAG,GAAE,KAAG,GAAE,EAAE,IAAG;AAAC,gBAAI,KAAG,IAAE,KAAG,IAAE;AAAE,gBAAE,KAAG,EAAE,IAAI,GAAE,GAAE,IAAG,CAAC,IAAE,EAAE,IAAI,GAAE,GAAE,IAAG,CAAC,IAAE,KAAG,EAAE,IAAI,GAAE,GAAE,GAAE,EAAE,IAAE,EAAE,IAAI,GAAE,GAAE,GAAE,EAAE;AAAA,UAAC;AAAA,QAAC;AAAC,UAAE,IAAI,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,MAAC;AAAA,IAAC;AAAA,EAAC;AAAC,SAAOA,IAAE,eAAe,EAAE,OAAM,EAAE,OAAM,EAAE,MAAM;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,IAAG,GAAE,QAAO,EAAC,IAAE,GAAE,EAAC,YAAW,GAAE,SAAQ,GAAE,KAAI,GAAE,YAAW,GAAE,iBAAgB,EAAC,IAAE;AAAE,IAAE,CAAC,GAAE,CAAC,GAAE,qBAAqB;AAAE,MAAI,IAAE,EAAE,eAAe,EAAE,KAAK,GAAE,IAAE,EAAE,eAAe,EAAE,KAAK,GAAE,IAAE,EAAE,wBAAwB,CAAC,GAAE,IAAE,EAAE,kBAAkB,GAAE,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,OAAG,CAAC,GAAE,IAAE,IAAI,GAAG,EAAE,SAAQ,SAAS,GAAE,IAAE,EAAE,QAAO,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,CAAC,GAAE,GAAE,CAAC,IAAE,GAAE,EAAC,WAAU,GAAE,cAAa,GAAE,aAAY,GAAE,YAAW,GAAE,UAAS,GAAE,SAAQ,GAAE,aAAY,GAAE,WAAU,GAAE,UAAS,GAAE,cAAa,GAAE,aAAY,EAAC,IAAE;AAAE,MAAE,EAAE;AAAW,MAAI,IAAE,IAAE,IAAE,EAAE,QAAQ,KAAI,IAAE,IAAE,IAAE,EAAE,QAAQ,MAAK,IAAE,MAAI,gBAAe,IAAE,EAAE,QAAQ,CAAC,GAAE,KAAG,IAAE,EAAE,QAAQ,CAAC,IAAE,EAAE,QAAQ,CAAC,GAAE,KAAG,IAAE,EAAE,QAAQ,CAAC,IAAE,GAAE,KAAG,IAAE,IAAE,EAAE,QAAQ,CAAC,GAAE,KAAG,EAAE,CAAC,GAAE,KAAG,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,GAAE,KAAG,IAAE,EAAE,CAAC,IAAE,GAAE,KAAG,IAAE,IAAE,EAAE,CAAC;AAAE,WAAQ,KAAG,GAAE,KAAG,GAAE,EAAE,GAAG,UAAQ,KAAG,GAAE,KAAG,GAAE,EAAE,GAAG,UAAQ,KAAG,GAAE,KAAG,GAAE,EAAE,IAAG;AAAC,QAAI,KAAG,KAAG,GAAE,KAAG,KAAK,IAAI,GAAE,KAAK,KAAK,KAAG,CAAC,CAAC,GAAE,KAAG,KAAK,IAAI,IAAG,IAAE,MAAI,CAAC;AAAE,aAAQ,KAAG,GAAE,KAAG,GAAE,EAAE,IAAG;AAAC,UAAI,KAAG,KAAG,GAAE,KAAG,KAAK,IAAI,GAAE,KAAK,KAAK,KAAG,CAAC,CAAC,GAAE,KAAG,KAAK,IAAI,IAAG,IAAE,MAAI,CAAC,GAAE,KAAG;AAAE,eAAQ,KAAG,IAAG,KAAG,IAAG,EAAE,IAAG;AAAC,YAAI,KAAG,KAAG,IAAE;AAAG,iBAAQ,KAAG,IAAG,KAAG,IAAG,EAAE,IAAG;AAAC,cAAI,KAAG,KAAG,IAAE,IAAG,KAAG,KAAG,KAAG,KAAG,KAAG,KAAG,IAAG,KAAG,KAAG,IAAE,IAAE,MAAI,KAAG,IAAE,IAAE,MAAI,IAAE;AAAG,mBAAQ,KAAG,GAAE,KAAG,GAAE,EAAE,IAAG;AAAC,gBAAI,KAAG,EAAE,KAAG,KAAG,EAAE,GAAE,KAAG,EAAE,KAAG,EAAE;AAAE,kBAAI,KAAG;AAAA,UAAE;AAAA,QAAC;AAAA,MAAC;AAAC,UAAI,KAAG,IAAE,KAAG,KAAG,KAAG,KAAG,KAAG,KAAG;AAAG,QAAE,EAAE,IAAE;AAAA,IAAE;AAAA,EAAC;AAAC,SAAOA,IAAE,eAAe,EAAE,OAAM,EAAE,OAAM,EAAE,MAAM;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,QAAO,EAAC,IAAE,GAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,WAAU,EAAC,IAAE;AAAE,IAAE,CAAC,GAAE,CAAC,GAAE,QAAQ;AAAE,MAAI,IAAE,EAAE,kBAAkB,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,CAAC,GAAE,EAAC,aAAY,GAAE,cAAa,GAAE,aAAY,GAAE,eAAc,GAAE,gBAAe,GAAE,eAAc,GAAE,SAAQ,EAAC,IAAE,GAAE,IAAE,EAAE,OAAM,IAAE,EAAE,MAAK,IAAE,EAAE,KAAI,IAAE,IAAI,GAAG,EAAE,UAAS,EAAE,KAAK,GAAE,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,QAAO,IAAE,EAAE,eAAe,EAAE,KAAK,GAAE,IAAE,EAAE,eAAe,EAAE,KAAK;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,WAAU,EAAE,GAAE;AAAC,QAAI,IAAE,IAAE,EAAE,CAAC,GAAE,IAAE,IAAE,EAAE,QAAQ,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,UAAS,EAAE,GAAE;AAAC,UAAI,IAAE,IAAE,IAAE,EAAE,QAAQ,CAAC,GAAE,IAAE,IAAE,EAAE,cAAY;AAAE,eAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,YAAI,IAAE,IAAE,IAAE;AAAE,YAAG,IAAE,KAAG,KAAG,EAAE,QAAQ;AAAS,YAAI,IAAE,IAAE,EAAE,CAAC,GAAE,IAAE,IAAE,IAAE,EAAE,CAAC;AAAE,iBAAQ,IAAE,GAAE,IAAE,EAAE,WAAU,EAAE,GAAE;AAAC,cAAI,KAAG,IAAE,IAAE,EAAE,QAAQ,CAAC,GAAE,KAAG,IAAE,EAAE,eAAa;AAAE,mBAAQ,KAAG,GAAE,KAAG,GAAE,EAAE,IAAG;AAAC,gBAAI,KAAG,KAAG,KAAG;AAAE,gBAAG,KAAG,KAAG,MAAI,EAAE,SAAS;AAAS,gBAAI,KAAG,IAAE,KAAG,EAAE,CAAC,GAAE,KAAG,IAAE,KAAG,EAAE,CAAC;AAAE,qBAAQ,KAAG,GAAE,KAAG,EAAE,UAAS,EAAE,IAAG;AAAC,kBAAI,KAAG,KAAG,KAAG,EAAE,aAAY,KAAG,KAAG,EAAE,cAAY;AAAE,uBAAQ,KAAG,GAAE,KAAG,GAAE,EAAE,IAAG;AAAC,oBAAI,KAAG,KAAG,KAAG;AAAE,oBAAG,KAAG,KAAG,MAAI,EAAE,QAAQ;AAAS,oBAAI,KAAG,KAAG,KAAG,EAAE,CAAC,GAAE,KAAG,KAAG,KAAG,EAAE,YAAW,KAAG;AAAG,yBAAQ,KAAG,GAAE,KAAG,EAAE,YAAW,EAAE,IAAG;AAAC,sBAAI,KAAG,EAAE,KAAG,EAAE;AAAE,2BAAQ,KAAG,GAAE,KAAG,EAAE,aAAY,EAAE,GAAG,GAAE,KAAG,EAAE,KAAG,KAAG,EAAE,KAAG,EAAE;AAAE,wBAAI,EAAE;AAAA,gBAAW;AAAA,cAAC;AAAA,YAAC;AAAA,UAAC;AAAA,QAAC;AAAA,MAAC;AAAA,IAAC;AAAA,EAAC;AAAC,SAAOA,IAAE,eAAe,EAAE,OAAM,EAAE,OAAM,EAAE,MAAM;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,IAAG,EAAC,IAAE,GAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,aAAY,EAAC,IAAE;AAAE,IAAE,CAAC,GAAE,CAAC,GAAE,wBAAwB;AAAE,MAAI,IAAE,EAAE,eAAe,EAAE,KAAK,GAAE,IAAE,EAAE,eAAe,EAAE,KAAK,GAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,aAAY,IAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,EAAE,aAAY,IAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,IAAI,GAAG,EAAE,aAAY,SAAS,GAAE,IAAE,EAAE,QAAO,CAAC,GAAE,GAAE,GAAE,CAAC,IAAE,EAAE,SAAQ,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,CAAC,GAAE,GAAE,GAAE,CAAC,IAAE,GAAE,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,CAAC,GAAE,GAAE,GAAE,CAAC,IAAE,GAAE,IAAE,EAAE,QAAQ,OAAM,IAAE,EAAE,QAAQ,MAAK,IAAE,EAAE,QAAQ;AAAI,WAAQ,KAAG,GAAE,KAAG,GAAE,EAAE,IAAG;AAAC,QAAI,KAAG,KAAK,IAAI,GAAE,KAAK,MAAM,IAAE,MAAI,CAAC,CAAC,GAAE,KAAG,KAAK,IAAI,EAAE,WAAU,EAAE,UAAQ,IAAE,MAAI,CAAC,GAAE,KAAG,KAAG;AAAE,aAAQ,KAAG,GAAE,KAAG,GAAE,EAAE,IAAG;AAAC,UAAI,KAAG,KAAK,IAAI,GAAE,KAAK,MAAM,IAAE,MAAI,CAAC,CAAC,GAAE,KAAG,KAAK,IAAI,EAAE,YAAW,EAAE,WAAS,IAAE,MAAI,CAAC,GAAE,KAAG,KAAG,IAAE;AAAG,eAAQ,KAAG,GAAE,KAAG,GAAE,EAAE,IAAG;AAAC,YAAI,KAAG,KAAK,IAAI,GAAE,KAAK,MAAM,IAAE,MAAI,CAAC,CAAC,GAAE,KAAG,KAAK,IAAI,EAAE,WAAU,EAAE,UAAQ,IAAE,MAAI,CAAC,GAAE,KAAG,KAAG,IAAE;AAAG,iBAAQ,KAAG,GAAE,KAAG,EAAE,YAAW,EAAE,IAAG;AAAC,cAAI,KAAG,KAAG,IAAE;AAAG,mBAAQ,KAAG,GAAE,KAAG,EAAE,aAAY,EAAE,IAAG;AAAC,gBAAI,KAAG;AAAE,qBAAQ,KAAG,GAAE,KAAG,EAAE,WAAU,EAAE,IAAG;AAAC,kBAAI,KAAG,KAAG,GAAE,KAAG,KAAG;AAAE,uBAAQ,KAAG,IAAG,KAAG,IAAG,EAAE,IAAG;AAAC,oBAAI,MAAI,KAAG,KAAG,IAAE,KAAG,IAAE,IAAG,KAAG,KAAG,IAAE;AAAG,yBAAQ,KAAG,IAAG,KAAG,IAAG,EAAE,IAAG;AAAC,sBAAI,MAAI,KAAG,KAAG,IAAE,KAAG,IAAE,IAAG,KAAG,KAAG,IAAE;AAAG,2BAAQ,KAAG,IAAG,KAAG,IAAG,EAAE,IAAG;AAAC,wBAAI,MAAI,KAAG,KAAG,IAAE,KAAG,IAAE,IAAG,KAAG,KAAG,IAAE;AAAG,0BAAI,EAAE,KAAG,EAAE,IAAE,EAAE,KAAG,EAAE;AAAA,kBAAC;AAAA,gBAAC;AAAA,cAAC;AAAA,YAAC;AAAC,cAAE,KAAG,EAAE,IAAE;AAAA,UAAE;AAAA,QAAC;AAAA,MAAC;AAAA,IAAC;AAAA,EAAC;AAAC,SAAOA,IAAE,eAAe,EAAE,OAAM,EAAE,OAAM,EAAE,MAAM;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,IAAG,GAAE,QAAO,EAAC,IAAE,GAAE,EAAC,KAAI,GAAE,SAAQ,GAAE,YAAW,EAAC,IAAE;AAAE,IAAE,CAAC,CAAC,GAAE,uBAAuB;AAAE,MAAI,IAAE,EAAE,eAAe,EAAE,KAAK,GAAE,IAAE,EAAE,eAAe,EAAE,KAAK,GAAE,IAAE,EAAE,kBAAkB,GAAE,EAAE,OAAM,GAAE,GAAE,CAAC,GAAE,IAAE,IAAI,GAAG,EAAE,SAAQ,SAAS,GAAE,IAAE,EAAE,QAAO,CAAC,GAAE,GAAE,GAAE,CAAC,IAAE,EAAE,SAAQ,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,CAAC,GAAE,GAAE,GAAE,CAAC,IAAE,GAAE,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,CAAC,GAAE,GAAE,GAAE,CAAC,IAAE,GAAE,EAAC,WAAU,GAAE,aAAY,GAAE,cAAa,GAAE,aAAY,GAAE,YAAW,GAAE,SAAQ,GAAE,UAAS,GAAE,SAAQ,GAAE,aAAY,GAAE,UAAS,IAAG,WAAU,IAAG,UAAS,IAAG,aAAY,IAAG,cAAa,IAAG,aAAY,GAAE,IAAE,GAAE,KAAG,IAAE,IAAE,EAAE,QAAQ,OAAM,KAAG,IAAE,IAAE,EAAE,QAAQ,KAAI,KAAG,IAAE,IAAE,EAAE,QAAQ;AAAK,WAAQ,KAAG,GAAE,KAAG,GAAE,EAAE,GAAG,UAAQ,KAAG,GAAE,KAAG,GAAE,EAAE,GAAG,UAAQ,KAAG,GAAE,KAAG,GAAE,EAAE,IAAG;AAAC,QAAI,KAAG,KAAG,IAAG,KAAG,KAAK,IAAI,GAAE,KAAK,KAAK,KAAG,EAAE,CAAC,GAAE,KAAG,KAAK,IAAI,KAAI,IAAE,MAAI,EAAE;AAAE,aAAQ,KAAG,GAAE,KAAG,GAAE,EAAE,IAAG;AAAC,UAAI,KAAG,KAAG,IAAG,KAAG,KAAK,IAAI,GAAE,KAAK,KAAK,KAAG,EAAE,CAAC,GAAE,KAAG,KAAK,IAAI,KAAI,IAAE,MAAI,EAAE;AAAE,eAAQ,KAAG,GAAE,KAAG,GAAE,EAAE,IAAG;AAAC,YAAI,KAAG,KAAG,IAAG,KAAG,KAAK,IAAI,GAAE,KAAK,KAAK,KAAG,EAAE,CAAC,GAAE,KAAG,KAAK,IAAI,KAAI,IAAE,MAAI,EAAE,GAAE,KAAG;AAAE,iBAAQ,KAAG,IAAG,KAAG,IAAG,EAAE,IAAG;AAAC,cAAI,KAAG,KAAG,KAAG;AAAG,mBAAQ,KAAG,IAAG,KAAG,IAAG,EAAE,IAAG;AAAC,gBAAI,KAAG,KAAG,KAAG;AAAG,qBAAQ,KAAG,IAAG,KAAG,IAAG,EAAE,IAAG;AAAC,kBAAI,KAAG,KAAG,KAAG,IAAG,KAAG,IAAE,KAAG,IAAE,KAAG,IAAE,KAAG,IAAE,IAAG,KAAG,KAAG,IAAE,IAAE,MAAI,KAAG,IAAE,IAAE,MAAI,KAAG,IAAE,IAAE,MAAI,IAAE;AAAG,uBAAQ,KAAG,GAAE,KAAG,GAAE,EAAE,IAAG;AAAC,oBAAI,KAAG,EAAE,KAAG,EAAE,GAAE,KAAG,EAAE,KAAG,EAAE;AAAE,sBAAI,KAAG;AAAA,cAAE;AAAA,YAAC;AAAA,UAAC;AAAA,QAAC;AAAC,UAAE,IAAE,KAAG,IAAE,KAAG,IAAE,KAAG,IAAE,KAAG,EAAE,IAAE;AAAA,MAAE;AAAA,IAAC;AAAA,EAAC;AAAC,SAAOA,IAAE,eAAe,EAAE,OAAM,EAAE,OAAM,EAAE,MAAM;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,IAAG,CAAAD,QAAG,KAAK,IAAIA,GAAC,CAAC;AAA3B,IAA6B,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,IAAG,CAAAA,QAAG,KAAK,KAAKA,GAAC,CAAC;AAA5B,IAA8B,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,GAAE,OAAM,GAAE,QAAO,EAAC,IAAE,GAAE,EAAC,UAAS,GAAE,QAAO,GAAE,oBAAmB,EAAC,IAAE,GAAE,CAAC,GAAE,GAAE,GAAE,CAAC,IAAE,EAAE,OAAM,IAAE,EAAE,MAAM,CAAC,GAAE,CAAC,GAAE,CAAC,IAAE,GAAE,IAAE,GAAG,CAAC,GAAE,GAAE,GAAE,CAAC,GAAE,SAAS,GAAE,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,eAAe,EAAE,KAAK,GAAE,IAAE,EAAE,eAAe,EAAE,KAAK;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,QAAI,IAAE,IAAE,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,IAAE,CAAC,GAAE,IAAE,EAAE,IAAE,CAAC,GAAE,IAAE,EAAE,IAAE,CAAC,GAAE,IAAE,EAAE,CAAC;AAAE,QAAG,KAAG,EAAE;AAAS,QAAI,IAAE,IAAE,KAAG,IAAE,MAAI,IAAE,MAAI,IAAE,KAAG,GAAE,IAAE,IAAE,KAAG,IAAE,MAAI,IAAE,MAAI,IAAE,KAAG;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,UAAI,IAAE,IAAE,IAAE,KAAG,IAAE,KAAG,IAAE,IAAE,OAAI,IAAE,MAAI,IAAE;AAAG,UAAG,IAAE,KAAG,IAAE,IAAE,GAAE;AAAC,iBAAQ,IAAE,GAAE,IAAE,GAAE,IAAI,UAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,cAAI,IAAE,IAAE,IAAE,EAAE,CAAC,IAAE,IAAE,EAAE,CAAC,IAAE,IAAE,EAAE,CAAC;AAAE,YAAE,OAAO,CAAC,IAAE;AAAA,QAAC;AAAC;AAAA,MAAQ;AAAC,UAAG,MAAI,YAAW;AAAC,YAAI,IAAE,KAAK,MAAM,CAAC,GAAE,IAAE,KAAK,KAAK,CAAC,GAAE,IAAE,IAAE;AAAE,iBAAQ,KAAG,GAAE,KAAG,GAAE,MAAK;AAAC,cAAI,KAAG,IAAE,IAAE,KAAG,IAAE,KAAG,KAAG,IAAE,OAAI,IAAE,MAAI,IAAE;AAAG,cAAG,KAAG,KAAG,KAAG,IAAE,GAAE;AAAC,qBAAQ,KAAG,GAAE,KAAG,GAAE,MAAK;AAAC,kBAAI,KAAG,KAAG,KAAG,EAAE,CAAC,IAAE,IAAE,EAAE,CAAC,IAAE,IAAE,EAAE,CAAC;AAAE,gBAAE,OAAO,EAAE,IAAE;AAAA,YAAC;AAAC;AAAA,UAAQ;AAAC,cAAI,KAAG,KAAK,MAAM,EAAE,GAAE,KAAG,KAAK,KAAK,EAAE,GAAE,KAAG,KAAG;AAAG,mBAAQ,KAAG,GAAE,KAAG,GAAE,MAAK;AAAC,gBAAI,KAAG,KAAG,KAAG,EAAE,CAAC,IAAE,IAAE,EAAE,CAAC,IAAE,IAAE,EAAE,CAAC,GAAE,KAAG,EAAE,EAAE;AAAE,iBAAG,KAAG,KAAG,EAAE,CAAC,IAAE,IAAE,EAAE,CAAC,IAAE,IAAE,EAAE,CAAC;AAAE,gBAAI,KAAG,EAAE,EAAE;AAAE,iBAAG,KAAG,KAAG,EAAE,CAAC,IAAE,IAAE,EAAE,CAAC,IAAE,IAAE,EAAE,CAAC;AAAE,gBAAI,KAAG,EAAE,EAAE;AAAE,iBAAG,KAAG,KAAG,EAAE,CAAC,IAAE,IAAE,EAAE,CAAC,IAAE,IAAE,EAAE,CAAC;AAAE,gBAAI,KAAG,EAAE,EAAE,GAAE,KAAG,MAAI,KAAG,MAAI,IAAG,KAAG,MAAI,KAAG,MAAI;AAAG,iBAAG,KAAG,KAAG,EAAE,CAAC,IAAE,IAAE,EAAE,CAAC,IAAE,IAAE,EAAE,CAAC,GAAE,EAAE,OAAO,EAAE,IAAE,MAAI,KAAG,MAAI;AAAA,UAAC;AAAA,QAAC;AAAA,MAAC,MAAM,UAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,YAAI,IAAE,IAAE,IAAE,KAAG,IAAE,KAAG,IAAE,IAAE,OAAI,IAAE,MAAI,IAAE;AAAG,YAAG,IAAE,KAAG,IAAE,IAAE,GAAE;AAAC,mBAAQ,KAAG,GAAE,KAAG,GAAE,MAAK;AAAC,gBAAI,KAAG,KAAG,IAAE,EAAE,CAAC,IAAE,IAAE,EAAE,CAAC,IAAE,IAAE,EAAE,CAAC;AAAE,cAAE,OAAO,EAAE,IAAE;AAAA,UAAC;AAAC;AAAA,QAAQ;AAAC,YAAI,IAAE,KAAK,MAAM,CAAC,GAAE,KAAG,KAAK,MAAM,CAAC;AAAE,iBAAQ,KAAG,GAAE,KAAG,GAAE,MAAK;AAAC,cAAI,KAAG,KAAG,IAAE,EAAE,CAAC,IAAE,KAAG,EAAE,CAAC,IAAE,IAAE,EAAE,CAAC,GAAE,KAAG,KAAG,IAAE,EAAE,CAAC,IAAE,IAAE,EAAE,CAAC,IAAE,IAAE,EAAE,CAAC;AAAE,YAAE,OAAO,EAAE,IAAE,EAAE,EAAE;AAAA,QAAC;AAAA,MAAC;AAAA,IAAC;AAAA,EAAC;AAAC,SAAOA,IAAE,eAAe,EAAE,OAAM,EAAE,OAAM,EAAE,MAAM;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,MAAK,GAAE,WAAU,GAAE,SAAQ,EAAC,IAAE;AAAE,IAAE,GAAE,SAAS;AAAE,MAAI,IAAE,EAAE,mBAAmB,CAAC,CAAC,GAAE,EAAE,MAAM,MAAM,GAAE,IAAE;AAAE,OAAG,SAAO,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC;AAAG,MAAI,IAAE,EAAE,iBAAiB,GAAE,EAAE,MAAM,MAAM,EAAE,CAAC;AAAE,MAAG,MAAI,EAAE,MAAM,SAAO,EAAE,OAAM,IAAI,MAAM,qDAAqD,EAAE,MAAM,SAAO,CAAC,iBAAiB,CAAC,EAAE;AAAE,MAAI,IAAE,GAAG,EAAE,OAAM,OAAO,GAAE,IAAE,EAAE,mBAAmB,EAAE,cAAc,EAAE,KAAK,GAAE,CAAC,GAAE,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,MAAM,EAAE,MAAM,SAAO,CAAC,GAAE,IAAE,IAAE,CAAC,GAAE,MAAI,IAAE,IAAE,IAAE,IAAE,CAAC,GAAE,MAAI,IAAE;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,KAAG,EAAE,UAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,QAAI,IAAE,EAAE,GAAE,CAAC;AAAE,QAAG,MAAI,EAAE,GAAE,CAAC,IAAE,IAAE,IAAE,EAAE,CAAC;AAAA,SAAM;AAAC,UAAI,IAAE,EAAE,GAAE,IAAE,CAAC;AAAE,QAAE,CAAC,IAAE,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC;AAAA,IAAC;AAAA,EAAC;AAAC,MAAI,IAAEA,IAAE,eAAe,EAAE,OAAM,GAAE,CAAC;AAAE,MAAG,KAAG,MAAK;AAAC,QAAI,IAAE,EAAE,uBAAuB,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC;AAAE,WAAOA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAE;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,MAAK,GAAE,WAAU,GAAE,SAAQ,EAAC,IAAE;AAAE,IAAE,GAAE,QAAQ;AAAE,MAAI,IAAE,EAAE,mBAAmB,CAAC,CAAC,GAAE,EAAE,MAAM,MAAM,GAAE,IAAE;AAAE,OAAG,SAAO,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC;AAAG,MAAI,IAAE,EAAE,iBAAiB,GAAE,EAAE,MAAM,MAAM,EAAE,CAAC;AAAE,MAAG,MAAI,EAAE,MAAM,SAAO,EAAE,OAAM,IAAI,MAAM,oDAAoD,EAAE,MAAM,SAAO,CAAC,iBAAiB,CAAC,EAAE;AAAE,MAAI,IAAE,GAAG,EAAE,OAAM,OAAO,GAAE,IAAE,EAAE,oBAAoB,EAAE,cAAc,EAAE,KAAK,GAAE,CAAC,GAAE,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,MAAM,EAAE,MAAM,SAAO,CAAC,GAAE,IAAE,IAAE,CAAC,GAAE,MAAI,IAAE,IAAE,IAAE,IAAE,CAAC,GAAE,MAAI,IAAE;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,KAAG,EAAE,UAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,QAAI,IAAE,EAAE,GAAE,CAAC;AAAE,QAAG,MAAI,EAAE,GAAE,CAAC,IAAE,IAAE,IAAE,EAAE,CAAC;AAAA,SAAM;AAAC,UAAI,IAAE,EAAE,GAAE,IAAE,CAAC;AAAE,QAAE,CAAC,IAAE,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC;AAAA,IAAC;AAAA,EAAC;AAAC,MAAI,IAAEA,IAAE,eAAe,EAAE,OAAM,GAAE,CAAC;AAAE,MAAG,KAAG,MAAK;AAAC,QAAI,IAAE,EAAE,uBAAuB,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC;AAAE,WAAOA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAE;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,SAAQ,EAAC,IAAE,GAAE,EAAC,MAAK,GAAE,cAAa,EAAC,IAAE;AAAE,MAAG,EAAE,MAAM,WAAS,GAAE;AAAC,QAAI,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,GAAG,GAAE,GAAE,EAAE,OAAM,EAAE,OAAM,CAAC;AAAE,WAAOA,IAAE,eAAe,CAAC,CAAC,GAAE,EAAE,OAAM,CAAC;AAAA,EAAC,WAAS,EAAE,MAAM,WAAS,GAAE;AAAC,QAAI,IAAEA,IAAE,WAAW,CAAC,GAAE,IAAEA,IAAE,WAAW,CAAC,GAAE,IAAE,GAAG,GAAE,GAAE,GAAE,CAAC;AAAE,WAAOA,IAAE,eAAe,EAAE,OAAM,EAAE,OAAM,EAAE,MAAM;AAAA,EAAC;AAAC,QAAM,IAAI,MAAM,qEAAqE,EAAE,MAAM,MAAM,GAAG;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,WAAU,GAAE,YAAW,EAAC,IAAE;AAAE,IAAE,OAAO,MAAI,QAAO,MAAI,+DAA+D,CAAC,EAAE;AAAE,MAAI,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,IAAE,GAAE,IAAE,IAAE,GAAE,IAAE,KAAG,IAAE,IAAG,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,IAAI,aAAa,IAAE,IAAE,IAAE,CAAC,GAAE,IAAE;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,EAAE,UAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,QAAI,IAAE,KAAK,MAAM,IAAE,CAAC,GAAE,IAAE,IAAE;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,UAAI,IAAE,KAAK,MAAM,IAAE,CAAC,GAAE,IAAE,IAAE,GAAE,KAAG,IAAE,IAAE,KAAG;AAAE,eAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,YAAI,IAAE,IAAE,IAAE,KAAG,IAAE,KAAG,IAAE,IAAE;AAAI,UAAE,GAAG,IAAE,EAAE,CAAC;AAAA,MAAC;AAAA,IAAC;AAAA,EAAC;AAAC,SAAOA,IAAE,eAAe,CAAC,GAAE,GAAE,GAAE,CAAC,GAAE,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,QAAO,EAAC,IAAE,GAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,WAAU,GAAE,iBAAgB,EAAC,IAAE;AAAE,IAAE,CAAC,GAAE,CAAC,GAAE,uBAAuB;AAAE,MAAI,IAAE,EAAE,eAAe,EAAE,KAAK,GAAE,IAAE,EAAE,eAAe,EAAE,KAAK,GAAE,IAAE;AAAE,OAAG,SAAO,IAAE,CAAC,GAAE,CAAC,IAAG,EAAE,OAAO,EAAE,+BAA+B,GAAE,CAAC,GAAE,MAAI,gFAAgF,CAAC,mBAAmB,CAAC,GAAG;AAAE,MAAI,IAAE,EAAE,kBAAkB,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,IAAE,GAAE,EAAC,cAAa,GAAE,aAAY,GAAE,gBAAe,GAAE,eAAc,GAAE,SAAQ,EAAC,IAAE,GAAE,IAAE,EAAE,MAAK,IAAE,EAAE,KAAI,IAAE,EAAE,cAAY,EAAE,YAAW,IAAE,IAAI,GAAG,EAAE,UAAS,EAAE,KAAK,GAAE,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE;AAAO,WAAQ,IAAE,GAAE,IAAE,EAAE,WAAU,EAAE,GAAE;AAAC,QAAI,IAAE,IAAE,EAAE,CAAC,GAAE,IAAE,IAAE,EAAE,QAAQ,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,WAAU,EAAE,GAAE;AAAC,UAAI,IAAE,IAAE,IAAE,EAAE,QAAQ,CAAC,GAAE,IAAE,IAAE,EAAE,eAAa;AAAE,eAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,YAAI,IAAE,IAAE,IAAE;AAAE,YAAG,IAAE,KAAG,KAAG,EAAE,SAAS;AAAS,YAAI,IAAE,IAAE,EAAE,CAAC,GAAE,IAAE,IAAE,IAAE,EAAE,CAAC;AAAE,iBAAQ,IAAE,GAAE,IAAE,EAAE,UAAS,EAAE,GAAE;AAAC,cAAI,KAAG,IAAE,IAAE,EAAE,QAAQ,CAAC,GAAE,KAAG,IAAE,EAAE,cAAY;AAAE,mBAAQ,KAAG,GAAE,KAAG,GAAE,EAAE,IAAG;AAAC,gBAAI,KAAG,KAAG,KAAG;AAAE,gBAAG,KAAG,KAAG,MAAI,EAAE,QAAQ;AAAS,gBAAI,KAAG,IAAE,KAAG,EAAE,CAAC,GAAE,KAAG,IAAE,KAAG,EAAE,YAAW,KAAG,IAAG,KAAG;AAAG,qBAAQ,KAAG,GAAE,KAAG,EAAE,YAAW,EAAE,IAAG;AAAC,kBAAI,KAAG,EAAE,KAAG,EAAE;AAAE,uBAAQ,KAAG,GAAE,KAAG,GAAE,EAAE,GAAG,GAAE,KAAG,EAAE,KAAG,KAAG,EAAE,KAAG,EAAE;AAAE,oBAAI,GAAE,MAAI;AAAA,YAAC;AAAA,UAAC;AAAA,QAAC;AAAA,MAAC;AAAA,IAAC;AAAA,EAAC;AAAC,SAAOA,IAAE,eAAe,EAAE,OAAM,EAAE,OAAM,EAAE,MAAM;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,IAAG,EAAC,IAAE,GAAE,EAAC,SAAQ,GAAE,WAAU,GAAE,KAAI,GAAE,iBAAgB,GAAE,aAAY,EAAC,IAAE;AAAE,IAAE,CAAC,GAAE,CAAC,GAAE,qCAAqC;AAAE,MAAI,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,GAAE,IAAE,GAAE,EAAC,cAAa,GAAE,aAAY,GAAE,cAAa,GAAE,aAAY,EAAC,IAAE,GAAE,IAAE,IAAI,GAAG,EAAE,aAAY,SAAS,GAAE,IAAE,EAAE,QAAQ,MAAK,IAAE,EAAE,QAAQ,KAAI,IAAE,EAAE,cAAY,EAAE,YAAW,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,IAAI,GAAG,EAAE,OAAM,EAAE,OAAM,CAAC,GAAE,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,IAAI,GAAG,EAAE,OAAM,EAAE,OAAM,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,QAAI,IAAE,KAAK,IAAI,GAAE,KAAK,MAAM,IAAE,KAAG,CAAC,CAAC,GAAE,IAAE,KAAK,IAAI,EAAE,YAAW,EAAE,WAAS,IAAE,KAAG,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,UAAI,IAAE,KAAK,IAAI,GAAE,KAAK,MAAM,IAAE,KAAG,CAAC,CAAC,GAAE,IAAE,KAAK,IAAI,EAAE,WAAU,EAAE,UAAQ,IAAE,KAAG,CAAC;AAAE,eAAQ,IAAE,GAAE,IAAE,EAAE,aAAY,EAAE,GAAE;AAAC,YAAI,IAAE,KAAK,MAAM,IAAE,CAAC,GAAE,IAAE,IAAE,GAAE,IAAE;AAAE,iBAAQ,IAAE,GAAE,IAAE,EAAE,WAAU,EAAE,EAAE,UAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,cAAI,IAAE,IAAE,IAAE,IAAE;AAAE,mBAAQ,KAAG,GAAE,KAAG,GAAE,EAAE,IAAG;AAAC,gBAAI,KAAG,IAAE,KAAG,IAAE;AAAE,iBAAG,EAAE,IAAI,GAAE,GAAE,IAAG,CAAC,IAAE,EAAE,IAAI,GAAE,GAAE,IAAG,CAAC;AAAA,UAAC;AAAA,QAAC;AAAC,UAAE,IAAI,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,MAAC;AAAA,IAAC;AAAA,EAAC;AAAC,SAAOA,IAAE,eAAe,EAAE,OAAM,EAAE,OAAM,EAAE,MAAM;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,IAAG,GAAE,QAAO,EAAC,IAAE,GAAE,EAAC,SAAQ,GAAE,WAAU,GAAE,KAAI,GAAE,iBAAgB,GAAE,YAAW,EAAC,IAAE;AAAE,IAAE,CAAC,GAAE,CAAC,GAAE,oCAAoC;AAAE,MAAI,IAAE,EAAE,eAAe,EAAE,KAAK,GAAE,IAAE,EAAE,eAAe,EAAE,KAAK,GAAE,IAAE,EAAE,kBAAkB,GAAE,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,IAAE,GAAE,IAAE,IAAI,GAAG,EAAE,SAAQ,SAAS,GAAE,IAAE,EAAE,QAAO,CAAC,GAAE,GAAE,CAAC,IAAE,EAAE,SAAQ,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,CAAC,GAAE,GAAE,CAAC,IAAE,GAAE,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,CAAC,GAAE,GAAE,CAAC,IAAE,GAAE,EAAC,WAAU,GAAE,cAAa,GAAE,aAAY,GAAE,YAAW,GAAE,UAAS,GAAE,SAAQ,GAAE,aAAY,GAAE,WAAU,GAAE,UAAS,GAAE,cAAa,GAAE,aAAY,GAAE,IAAE,GAAE,KAAG,IAAE,IAAE,EAAE,QAAQ,KAAI,KAAG,IAAE,IAAE,EAAE,QAAQ,MAAK,KAAG,IAAE;AAAE,WAAQ,KAAG,GAAE,KAAG,GAAE,EAAE,GAAG,UAAQ,KAAG,GAAE,KAAG,GAAE,EAAE,GAAG,UAAQ,KAAG,GAAE,KAAG,GAAE,EAAE,IAAG;AAAC,QAAI,KAAG,KAAG,IAAG,KAAG,KAAK,IAAI,GAAE,KAAK,KAAK,KAAG,CAAC,CAAC,GAAE,KAAG,KAAK,IAAI,IAAG,IAAE,MAAI,CAAC;AAAE,aAAQ,KAAG,GAAE,KAAG,GAAE,EAAE,IAAG;AAAC,UAAI,KAAG,KAAG,IAAG,KAAG,KAAK,IAAI,GAAE,KAAK,KAAK,KAAG,EAAE,CAAC,GAAE,KAAG,KAAK,IAAI,IAAG,IAAE,MAAI,EAAE,GAAE,KAAG;AAAE,eAAQ,KAAG,IAAG,KAAG,IAAG,EAAE,IAAG;AAAC,YAAI,KAAG,KAAG,IAAE;AAAG,iBAAQ,KAAG,IAAG,KAAG,IAAG,EAAE,IAAG;AAAC,cAAI,KAAG,KAAG,KAAG,IAAG,KAAG,IAAE,KAAG,IAAE,KAAG,IAAE,IAAG,KAAG,KAAG,IAAE,IAAE,MAAI,KAAG,IAAE,IAAE,MAAI,IAAE;AAAG,mBAAQ,KAAG,GAAE,KAAG,IAAG,EAAE,IAAG;AAAC,gBAAI,KAAG,KAAG,KAAG,IAAG,KAAG,EAAE,KAAG,EAAE,GAAE,KAAG,EAAE,KAAG,EAAE;AAAE,kBAAI,KAAG;AAAA,UAAE;AAAA,QAAC;AAAA,MAAC;AAAC,QAAE,IAAE,KAAG,IAAE,KAAG,IAAE,KAAG,EAAE,IAAE;AAAA,IAAE;AAAA,EAAC;AAAC,SAAOA,IAAE,eAAe,EAAE,OAAM,EAAE,OAAM,EAAE,MAAM;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,IAAE,EAAE,cAAc,EAAE,KAAK,GAAE,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,GAAG,CAAC,GAAE,CAAC,GAAE,EAAE,KAAK,GAAE,IAAE,EAAE;AAAO,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,IAAI,GAAE,IAAE,IAAE,CAAC,IAAE,EAAE,CAAC;AAAE,MAAI,IAAE,CAAC,GAAG,EAAE,OAAM,GAAG,EAAE,KAAK;AAAE,SAAOA,IAAE,eAAe,GAAE,EAAE,OAAM,EAAE,MAAM;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,CAAC,EAAC,QAAOD,KAAE,SAAQ,GAAE,OAAMC,IAAC,MAAI;AAAC,MAAG,EAAC,GAAE,GAAE,QAAO,EAAC,IAAED,KAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,WAAU,EAAC,IAAEC,KAAE,IAAE,GAAE,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,MAAM,QAAO,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,MAAM,QAAO,EAAC,WAAU,GAAE,UAAS,GAAE,SAAQ,GAAE,YAAW,GAAE,WAAU,GAAE,UAAS,GAAE,SAAQ,GAAE,cAAa,GAAE,aAAY,GAAE,cAAa,GAAE,aAAY,GAAE,gBAAe,GAAE,eAAc,GAAE,UAAS,EAAC,IAAE,EAAE,sBAAsB,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,QAAO,CAAC,GAAE,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,EAAE,QAAO,IAAE,EAAE,kBAAkB,EAAE,OAAM,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,EAAE,UAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,QAAI,IAAE,IAAE,IAAE,EAAE;AAAI,aAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,UAAI,IAAE,IAAE,IAAE,EAAE;AAAK,eAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,YAAI,KAAG,OAAO;AAAiB,iBAAQ,KAAG,GAAE,KAAG,GAAE,EAAE,IAAG;AAAC,cAAI,KAAG,IAAE,KAAG;AAAE,cAAG,MAAI,KAAG,KAAG,EAAE,UAAQ,KAAG,GAAE,KAAG,GAAE,EAAE,IAAG;AAAC,gBAAI,KAAG,IAAE,KAAG;AAAE,gBAAG,MAAI,KAAG,KAAG,GAAE;AAAC,kBAAI,KAAG,EAAE,WAAW,CAAC,GAAE,IAAG,IAAG,CAAC,GAAE,GAAE,EAAE,eAAe,EAAE,KAAK,CAAC,GAAE,KAAG,EAAE,WAAW,CAAC,IAAG,IAAG,CAAC,GAAE,GAAE,EAAE,eAAe,EAAE,KAAK,CAAC,GAAE,KAAG,EAAE,EAAE,IAAE,EAAE,EAAE;AAAE,mBAAG,OAAK,KAAG;AAAA,YAAG;AAAA,UAAC;AAAA,QAAC;AAAC,YAAI,KAAG,EAAE,WAAW,CAAC,GAAE,GAAE,GAAE,CAAC,GAAE,GAAE,EAAE,eAAe,CAAC,CAAC;AAAE,UAAE,EAAE,IAAE;AAAA,MAAE;AAAA,IAAC;AAAA,EAAC;AAAC,SAAM,EAAC,QAAO,EAAE,MAAM,EAAE,aAAa,GAAE,EAAE,KAAK,GAAE,GAAE,EAAE,KAAK,GAAE,OAAM,GAAE,OAAM,EAAE,MAAK;AAAC,EAAC;AAAE,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,CAAC,EAAC,QAAOD,KAAE,SAAQ,GAAE,OAAMC,IAAC,MAAI;AAAC,MAAG,EAAC,GAAE,GAAE,QAAO,GAAE,IAAG,EAAC,IAAED,KAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,WAAU,EAAC,IAAEC,KAAE,IAAE,GAAE,IAAE,EAAE,cAAc,EAAE,OAAM,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,IAAE,EAAE,cAAc,EAAE,OAAM,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,EAAC,WAAU,GAAE,UAAS,GAAE,SAAQ,GAAE,YAAW,GAAE,WAAU,GAAE,UAAS,GAAE,SAAQ,GAAE,cAAa,GAAE,aAAY,GAAE,cAAa,GAAE,aAAY,GAAE,gBAAe,GAAE,eAAc,GAAE,UAAS,EAAC,IAAE,EAAE,sBAAsB,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,QAAO,CAAC;AAAE,IAAE,OAAO,EAAE,SAAO,EAAE,QAAO,MAAI,YAAY,EAAE,0CAA0C,EAAE,MAAM,aAAa,EAAE,IAAI,EAAE;AAAE,MAAI,IAAE,EAAE,cAAc,GAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,IAAE,EAAE,0BAA0B,EAAE,OAAM,EAAE,KAAK;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,EAAE,UAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,QAAI,IAAE,IAAE,IAAE,EAAE;AAAI,aAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,UAAI,IAAE,IAAE,IAAE,EAAE;AAAK,eAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,YAAI,IAAE,OAAO,kBAAiB,IAAE,GAAE,KAAG;AAAE,iBAAQ,KAAG,GAAE,KAAG,GAAE,EAAE,IAAG;AAAC,cAAI,KAAG,IAAE,KAAG;AAAE,cAAG,MAAI,KAAG,KAAG,EAAE,UAAQ,KAAG,GAAE,KAAG,GAAE,EAAE,IAAG;AAAC,gBAAI,KAAG,IAAE,KAAG;AAAE,gBAAG,MAAI,KAAG,KAAG,GAAE;AAAC,kBAAI,KAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,IAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AAAE,mBAAG,MAAI,IAAE,IAAG,IAAE,IAAG,KAAG;AAAA,YAAG;AAAA,UAAC;AAAA,QAAC;AAAC,UAAE,CAAC,EAAE,EAAE,EAAE,CAAC,KAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAAA,MAAC;AAAA,IAAC;AAAA,EAAC;AAAC,SAAM,EAAC,QAAO,EAAE,MAAM,EAAE,aAAa,GAAE,EAAE,KAAK,GAAE,EAAE,OAAM,EAAE,KAAK,GAAE,OAAM,EAAE,OAAM,OAAM,EAAE,MAAK;AAAC,EAAC;AAAE,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,CAAC,EAAC,QAAOD,KAAE,SAAQ,GAAE,OAAMC,IAAC,MAAI;AAAC,MAAG,EAAC,GAAE,GAAE,QAAO,GAAE,IAAG,EAAC,IAAED,KAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,WAAU,EAAC,IAAEC,KAAE,IAAE,GAAE,IAAE,EAAE,cAAc,EAAE,OAAM,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,IAAE,EAAE,cAAc,EAAE,OAAM,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,EAAC,WAAU,GAAE,UAAS,GAAE,SAAQ,GAAE,YAAW,GAAE,WAAU,GAAE,UAAS,GAAE,SAAQ,GAAE,cAAa,GAAE,aAAY,GAAE,cAAa,GAAE,aAAY,GAAE,gBAAe,GAAE,eAAc,GAAE,UAAS,EAAC,IAAE,EAAE,sBAAsB,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,QAAO,CAAC;AAAE,IAAE,OAAO,EAAE,SAAO,EAAE,QAAO,MAAI,YAAY,EAAE,0CAA0C,EAAE,MAAM,aAAa,EAAE,IAAI,EAAE;AAAE,MAAI,IAAE,EAAE,cAAc,GAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,IAAE,EAAE,0BAA0B,EAAE,OAAM,EAAE,KAAK;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,EAAE,UAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,QAAI,IAAE,IAAE,IAAE,EAAE;AAAI,aAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,UAAI,IAAE,IAAE,IAAE,EAAE;AAAK,eAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,YAAI,IAAE,OAAO,kBAAiB,IAAE,IAAE,IAAE,IAAE,GAAE,KAAG,IAAE,IAAE,IAAE;AAAE,iBAAQ,KAAG,GAAE,KAAG,GAAE,EAAE,IAAG;AAAC,cAAI,KAAG,IAAE,KAAG;AAAE,cAAG,MAAI,KAAG,KAAG,EAAE,UAAQ,KAAG,GAAE,KAAG,GAAE,EAAE,IAAG;AAAC,gBAAI,KAAG,IAAE,KAAG;AAAE,gBAAG,MAAI,KAAG,KAAG,GAAE;AAAC,kBAAI,KAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,IAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AAAE,mBAAG,MAAI,IAAE,IAAG,IAAE,IAAG,KAAG;AAAA,YAAG;AAAA,UAAC;AAAA,QAAC;AAAC,UAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,KAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAAA,MAAC;AAAA,IAAC;AAAA,EAAC;AAAC,SAAM,EAAC,QAAO,EAAE,MAAM,EAAE,aAAa,GAAE,EAAE,KAAK,GAAE,EAAE,OAAM,EAAE,KAAK,GAAE,OAAM,EAAE,OAAM,OAAM,EAAE,MAAK;AAAC,EAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,EAAC,IAAE,GAAE,EAAC,QAAO,GAAE,SAAQ,EAAC,IAAE,GAAE,EAAC,gBAAe,GAAE,cAAa,EAAC,IAAE,KAAG,CAAC,GAAE,KAAG,KAAG,OAAK,SAAO,EAAE,UAAQ,GAAE,KAAG,KAAG,OAAK,SAAO,EAAE,gBAAc;AAAK,MAAG,MAAI,KAAK,OAAM,IAAI,MAAM,gBAAgB,EAAE,WAAW,uCAAuC;AAAE,MAAI,IAAE,EAAE,WAAW,IAAG,KAAG,OAAK,SAAO,EAAE,sBAAoB,CAAC,CAAC;AAAE,MAAG,KAAG,KAAK,OAAM,IAAI,MAAM,kCAAkC,CAAC,QAAQ;AAAE,MAAG,CAAC,GAAE,CAAC,IAAE,EAAE,MAAM,MAAM,GAAE,CAAC,GAAE,IAAE,EAAE,MAAM,WAAS,IAAE,IAAE,EAAE,MAAM,CAAC,GAAE,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,UAAQ,YAAU,MAAI,GAAE,IAAE,IAAI,kBAAkB,IAAE,IAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,IAAE,GAAE,EAAE,GAAE;AAAC,QAAI,IAAE,CAAC,GAAE,GAAE,GAAE,MAAI,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,UAAI,IAAE,EAAE,IAAE,IAAE,CAAC;AAAE,UAAG,EAAE,UAAQ,WAAU;AAAC,YAAG,IAAE,KAAG,IAAE,EAAE,OAAM,IAAI,MAAM,mFAAmF,CAAC,GAAG;AAAA,MAAC,WAAS,EAAE,UAAQ,YAAU,IAAE,KAAG,IAAE,KAAK,OAAM,IAAI,MAAM,mFAAmF,CAAC,GAAG;AAAE,YAAI,KAAG,EAAE,CAAC,IAAE,IAAE,GAAE,EAAE,CAAC,IAAE,IAAE,GAAE,EAAE,CAAC,IAAE,IAAE,KAAG,EAAE,CAAC,IAAE,IAAE;AAAA,IAAC;AAAC,QAAI,IAAE,IAAE;AAAE,MAAE,IAAE,CAAC,IAAE,KAAK,MAAM,EAAE,CAAC,CAAC,GAAE,EAAE,IAAE,CAAC,IAAE,KAAK,MAAM,EAAE,CAAC,CAAC,GAAE,EAAE,IAAE,CAAC,IAAE,KAAK,MAAM,EAAE,CAAC,CAAC,GAAE,EAAE,IAAE,CAAC,IAAE,KAAK,MAAM,EAAE,CAAC,CAAC;AAAA,EAAC;AAAC,IAAE,QAAM,GAAE,EAAE,SAAO;AAAE,MAAI,IAAE,IAAI,UAAU,GAAE,GAAE,CAAC;AAAE,SAAO,EAAE,aAAa,GAAE,GAAE,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,MAAK,GAAE,UAAS,EAAC,IAAE;AAAE,IAAE,GAAE,KAAK;AAAE,MAAI;AAAE,IAAE,UAAQ,SAAO,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,OAAM,QAAO,EAAC,CAAC,IAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,IAAC,CAAC;AAAE,MAAI,IAAE,EAAE,MAAM,QAAO,IAAE,EAAE,eAAe,GAAE,EAAE,KAAK,GAAE,IAAE,EAAE,mBAAmB,GAAE,CAAC,GAAE,IAAE,GAAE,IAAE;AAAE,OAAG,SAAO,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC,GAAE,IAAE,EAAE,iBAAiB,EAAE,QAAO,CAAC,IAAG,EAAE,2BAA2B,OAAM,GAAE,EAAE,MAAM,MAAM;AAAE,MAAG,CAAC,GAAE,CAAC,IAAE,EAAE,0BAA0B,EAAE,OAAM,CAAC,GAAE,IAAE,EAAE,WAAW,EAAE,OAAM,OAAO,GAAE,IAAE,GAAGA,KAAE,GAAE,CAAC,GAAE,IAAE,EAAE,cAAc,CAAC,GAAE,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE;AAAO,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE,GAAE;AAAC,QAAI,IAAE,IAAE,GAAE,IAAE;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,EAAE,MAAG,EAAE,IAAE,CAAC;AAAE,MAAE,CAAC,IAAE;AAAA,EAAC;AAAC,MAAG,GAAE;AAAC,QAAI,IAAE,EAAE,qBAAqB,EAAE,OAAM,CAAC,GAAE,IAAE;AAAE,QAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAEA,IAAE,8BAA8B,CAAC;AAAA,EAAC;AAAC,SAAOA,IAAE,8BAA8B,CAAC,GAAE,KAAG,QAAMA,IAAE,8BAA8B,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,UAAS,EAAC,IAAE,GAAE,IAAE,GAAE,EAAC,SAAQ,GAAE,YAAW,GAAE,QAAO,EAAC,IAAE,EAAE,qBAAqB,GAAE,EAAE,MAAM;AAAE,IAAE,oBAAoB,EAAE,QAAO,GAAE,CAAC;AAAE,MAAG,EAAC,MAAK,GAAE,OAAM,EAAC,IAAE,EAAE,qBAAqB,GAAE,CAAC,GAAE,IAAE,EAAE,QAAO,IAAE,MAAK,IAAE,EAAE,QAAO,IAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,aAAQ,KAAK,EAAE,CAAC,GAAE;AAAC,UAAG,EAAC,oBAAmB,GAAE,YAAW,EAAC,IAAE,EAAE,qBAAqB,GAAE,EAAE,CAAC,CAAC,GAAE;AAAE,QAAE,sBAAsB,CAAC,IAAE,IAAE,EAAE,CAAC,KAAG,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAE,CAAC,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC,GAAE,EAAE,KAAK,CAAC;AAAG,UAAI,IAAE,EAAE,MAAM,MAAM;AAAE,eAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE,EAAE,GAAE,OAAO,EAAE,CAAC,GAAE,GAAE,CAAC;AAAE,QAAE,YAAY,EAAE,OAAM,CAAC,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,EAAE,KAAK,CAAC,IAAG,MAAI,OAAK,IAAE,KAAG,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,GAAE,GAAE,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAE,EAAE,KAAK,CAAC;AAAA,IAAE;AAAC,QAAE,IAAE,MAAI,EAAE,CAAC,KAAG,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,MAAK,EAAE,CAAC,KAAG,EAAE,SAAO,IAAG,UAAS,MAAE,EAAC,CAAC,GAAE,EAAE,KAAK,CAAC,IAAG;AAAA,EAAI;AAAC,WAAQ,KAAK,EAAE,OAAI,KAAGA,IAAE,8BAA8B,CAAC;AAAE,SAAO;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,IAAG,GAAE,GAAE,EAAC,IAAE;AAAE,IAAE,CAAC,GAAE,CAAC,GAAE,SAAS;AAAE,MAAI,IAAE,IAAI,aAAa,EAAE,cAAc,EAAE,KAAK,CAAC,GAAE,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE;AAAO,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE,GAAE;AAAC,QAAI,IAAE,EAAE,CAAC;AAAE,SAAG,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,KAAG,IAAE;AAAA,EAAE;AAAC,SAAOA,IAAE,eAAe,EAAE,OAAM,WAAU,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,EAAE;AAAT,IAAe,KAAG,EAAE;AAApB,IAA2B,KAAG,EAAE;AAAhC,IAAuC,KAAG,EAAE;AAA5C,IAAmD,KAAG,EAAE;AAAxD,IAA+D,KAAG,EAAE;AAApE,IAA2E,KAAG,GAAG,IAAG,CAAAD,QAAG;AAAC,MAAI,IAAE,KAAK,KAAKA,GAAC,GAAEC,MAAE,KAAK,IAAID,GAAC,GAAE,IAAE,KAAG,IAAE,KAAGC;AAAG,SAAO,KAAG,QAAM,KAAG,IAAE,MAAI,IAAE,MAAI,IAAE,MAAI,IAAE,MAAI,IAAE,KAAK,IAAI,CAACA,MAAEA,GAAC;AAAE,CAAC;AAAnM,IAAqM,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,EAAC,IAAE,GAAE,EAAC,KAAI,EAAC,IAAE,GAAE,IAAE,EAAE,MAAM,QAAO,IAAE,EAAE,MAAM,MAAM,GAAE,IAAE;AAAE,SAAO,IAAE,MAAI,EAAE,OAAO,EAAE,IAAE,MAAI,GAAE,MAAI,iCAAiC,EAAE,IAAE,EAAE,KAAK,CAAC,GAAG,GAAE,IAAE,IAAE,IAAE,IAAG,EAAE,OAAO,GAAE,GAAE,CAAC,GAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,CAACD,KAAE,MAAIA,MAAE,CAAC;AAApB,IAAsB,KAAG,GAAG,IAAG,EAAE;AAAjC,IAAmC,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAED,IAAE,OAAM,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,IAAEC,IAAE,KAAK,IAAID,IAAE,MAAM,GAAE,IAAE,EAAE,mBAAmB,MAAK,IAAE,EAAE,mBAAmB,MAAK,IAAE,CAAC,GAAE,CAAC,GAAE,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,EAAE,uBAAuB,WAAU,CAAC,GAAE,IAAE,EAAE,uBAAuB,WAAU,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,QAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,OAAM,CAAC,GAAE,CAAC,GAAE,MAAK,CAAC,GAAE,CAAC,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,CAAC,GAAE,CAAC,GAAE,MAAK,CAAC,GAAE,CAAC,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,MAAK,GAAE,MAAK,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAE,EAAC,MAAK,GAAE,MAAK,EAAC,IAAE,GAAG,GAAE,GAAEA,GAAC,GAAE,IAAE,EAAE,uBAAuB,GAAE,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,UAAI,IAAE,EAAE,oBAAoB,GAAE,CAAC;AAAE,QAAE,IAAE,IAAE,CAAC,IAAE,EAAE,MAAK,EAAE,IAAE,IAAE,CAAC,IAAE,EAAE;AAAA,IAAI;AAAC,IAAAA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC;AAAA,EAAC;AAAC,MAAI,IAAEA,IAAE,eAAe,GAAE,WAAU,CAAC,GAAE,IAAEA,IAAE,eAAe,GAAE,WAAU,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,MAAK,GAAE,MAAK,EAAC,GAAE,SAAQA,IAAC,CAAC;AAAE,SAAOA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAE;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,EAAE,cAAcD,IAAE,KAAK,GAAE,IAAEC,IAAE,KAAK,IAAID,IAAE,MAAM,GAAE,IAAEC,IAAE,KAAK,IAAI,EAAE,mBAAmB,KAAK,MAAM,EAAE,QAAO,IAAEA,IAAE,KAAK,IAAI,EAAE,mBAAmB,KAAK,MAAM,EAAE;AAAO,MAAG,GAAG,CAAC,GAAE;AAAC,QAAI,IAAE,GAAG,GAAE,GAAE,GAAE,GAAEA,GAAC,GAAE,IAAE,CAACD,IAAE,MAAM,CAAC,GAAEA,IAAE,MAAM,CAAC,CAAC;AAAE,QAAG,GAAE;AAAC,UAAI,IAAEC,IAAE,eAAe,GAAE,WAAU,EAAE,IAAI,GAAE,IAAEA,IAAE,eAAe,GAAE,WAAU,EAAE,IAAI,GAAE,IAAEA,IAAE,eAAe,CAAC,GAAE,WAAU,EAAE,kBAAkB,GAAE,SAAS,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAE,IAAE,GAAG,WAAW,EAAC,QAAO,EAAC,GAAE,GAAE,GAAE,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAE,IAAE,GAAG,WAAW,EAAC,QAAO,EAAC,GAAE,GAAE,GAAE,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAE,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE;AAAO,aAAOA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAE,EAAC,MAAK,GAAE,MAAK,EAAC;AAAA,IAAC;AAAC,WAAO;AAAA,EAAC,OAAK;AAAC,QAAI,IAAE,EAAE,uBAAuB,GAAE,CAAC,GAAE,IAAE,GAAG,GAAE,GAAE,CAAC;AAAE,WAAO,EAAE,uBAAuB,CAAC;AAAA,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,UAAOA,MAAEA,MAAE,OAAK;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE,GAAE;AAAC,MAAGA,QAAI,EAAE,QAAM,EAAC,MAAKD,KAAE,MAAK,EAAC;AAAE,MAAI,IAAE,EAAE,uBAAuBA,KAAE,CAAC,GAAE,IAAEC,MAAE,GAAE,IAAE,EAAE,qBAAqB,CAAC,GAAE,IAAE,EAAE,MAAK,IAAE,EAAE,MAAK,IAAE,CAAC,EAAE,MAAM,GAAE,IAAE,EAAE,eAAe,GAAE,WAAU,CAAC,GAAE,IAAE,EAAE,eAAe,GAAE,WAAU,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,MAAK,GAAE,MAAK,EAAC,GAAE,SAAQ,EAAC,CAAC,GAAE,IAAE,EAAE,oBAAoB,CAAC,GAAE,IAAE,EAAE,MAAK,IAAE,EAAE,MAAK,IAAE,CAAC,EAAE,MAAM,GAAE,IAAE,EAAE,eAAe,GAAE,WAAU,CAAC,GAAE,IAAE,EAAE,eAAe,GAAE,WAAU,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,MAAK,GAAE,MAAK,EAAC,GAAE,SAAQ,EAAC,CAAC,GAAE,IAAE,GAAG,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,MAAK,IAAE,EAAE,MAAK,IAAE,CAAC,EAAE,MAAM,GAAE,IAAE,EAAE,eAAe,GAAE,WAAU,CAAC,GAAE,IAAE,EAAE,eAAe,GAAE,WAAU,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,MAAK,GAAE,MAAK,EAAC,GAAE,SAAQ,EAAC,CAAC,GAAE,IAAE,GAAG,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,MAAK,IAAE,EAAE,MAAK,IAAE,CAAC,EAAE,MAAM,GAAE,IAAE,EAAE,eAAe,GAAE,WAAU,CAAC,GAAE,IAAE,EAAE,eAAe,GAAE,WAAU,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,MAAK,GAAE,MAAK,EAAC,GAAE,SAAQ,EAAC,CAAC,GAAE,IAAE,EAAE,UAAUA,KAAE,CAAC,GAAE,IAAE,CAAC,EAAE,KAAK,MAAM,GAAE,KAAG,EAAE,eAAe,GAAE,WAAU,EAAE,IAAI,GAAE,KAAG,EAAE,eAAe,GAAE,WAAU,EAAE,IAAI,GAAE,KAAG,GAAG,EAAC,QAAO,EAAC,MAAK,IAAG,MAAK,GAAE,GAAE,SAAQ,EAAC,CAAC,GAAE,KAAG,GAAG,EAAC,QAAO,EAAC,GAAE,IAAG,GAAE,EAAC,GAAE,SAAQ,EAAC,CAAC,GAAE,KAAG,GAAG,EAAC,QAAO,EAAC,GAAE,GAAE,GAAE,GAAE,GAAE,SAAQ,EAAC,CAAC,GAAE,KAAG,GAAG,EAAC,QAAO,EAAC,GAAE,GAAE,GAAE,GAAE,GAAE,SAAQ,EAAC,CAAC,GAAE,KAAG,GAAG,EAAC,QAAO,EAAC,OAAM,GAAE,GAAE,SAAQ,EAAC,CAAC,GAAE,KAAG,GAAG,EAAC,QAAO,EAAC,OAAM,GAAE,GAAE,SAAQ,EAAC,CAAC,GAAE,KAAG,GAAG,EAAC,QAAO,EAAC,OAAM,GAAE,GAAE,SAAQ,EAAC,CAAC,GAAE,KAAG,GAAG,EAAC,QAAO,EAAC,OAAM,GAAE,GAAE,SAAQ,EAAC,CAAC,GAAE,KAAG,GAAG,EAAC,QAAO,CAAC,IAAG,EAAE,GAAE,SAAQ,GAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC,GAAE,KAAG,GAAG,EAAC,QAAO,CAAC,IAAG,EAAE,GAAE,SAAQ,GAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC,GAAE,KAAG,EAAE,KAAK,IAAI,GAAG,MAAM,EAAE,QAAO,KAAG,EAAE,KAAK,IAAI,GAAG,MAAM,EAAE;AAAO,SAAO,EAAE,8BAA8B,CAAC,GAAE,EAAE,8BAA8B,CAAC,GAAE,EAAE,8BAA8B,CAAC,GAAE,EAAE,8BAA8B,CAAC,GAAE,EAAE,8BAA8B,CAAC,GAAE,EAAE,8BAA8B,CAAC,GAAE,EAAE,8BAA8B,CAAC,GAAE,EAAE,8BAA8B,CAAC,GAAE,EAAE,8BAA8B,CAAC,GAAE,EAAE,8BAA8B,CAAC,GAAE,EAAE,8BAA8B,CAAC,GAAE,EAAE,8BAA8B,CAAC,GAAE,EAAE,8BAA8B,EAAE,GAAE,EAAE,8BAA8B,EAAE,GAAE,EAAE,8BAA8B,EAAE,GAAE,EAAE,8BAA8B,EAAE,GAAE,EAAE,8BAA8B,EAAE,GAAE,EAAE,8BAA8B,EAAE,GAAE,EAAE,8BAA8B,EAAE,GAAE,EAAE,8BAA8B,EAAE,GAAE,EAAE,8BAA8B,EAAE,GAAE,EAAE,8BAA8B,EAAE,GAAE,EAAE,8BAA8B,EAAE,GAAE,EAAE,8BAA8B,EAAE,GAAE,EAAC,MAAK,IAAG,MAAK,GAAE;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,IAAI,aAAa,IAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,QAAI,IAAE,GAAE,IAAE;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,UAAI,IAAE,EAAE,SAAS,IAAE,GAAE,GAAEA,GAAC,GAAE,IAAE,EAAE,oBAAoBD,KAAE,CAAC;AAAE,WAAG,EAAE,OAAK,EAAE,OAAK,EAAE,OAAK,EAAE,MAAK,KAAG,EAAE,OAAK,EAAE,OAAK,EAAE,OAAK,EAAE;AAAA,IAAI;AAAC,IAAAC,QAAI,KAAG,GAAE,KAAG,IAAG,EAAE,mBAAmB,GAAE,GAAE,GAAE,CAAC;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,OAAM,EAAC,IAAE,GAAE,IAAE,EAAE,cAAc,EAAE,KAAK,GAAE,IAAE,EAAE,MAAM,EAAE,MAAM,SAAO,CAAC,GAAE,IAAE,IAAE,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,OAAM,CAAC,GAAE,CAAC,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,GAAE,OAAGA,GAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAE,MAAK,EAAC,CAAC;AAAE,SAAOA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,SAAQ,GAAE,OAAMC,IAAC,IAAED,KAAE,EAAC,OAAM,GAAE,OAAM,GAAE,OAAM,EAAC,IAAEC,KAAE,IAAE,KAAG,EAAE,WAAW,CAAC,GAAE,IAAE,EAAE,kBAAkB,GAAE,EAAE,cAAc,CAAC,CAAC;AAAE,SAAO,GAAG,GAAE,GAAE,CAAC,GAAE,EAAE,eAAe,GAAE,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,EAAAD,IAAE,KAAK,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,CAAC,EAAC,QAAOA,KAAE,OAAM,GAAE,SAAQC,IAAC,MAAI;AAAC,MAAG,EAAC,OAAM,EAAC,IAAED,KAAE,IAAEC,KAAE,IAAE,EAAE,uBAAuB,EAAE,OAAM,EAAE,cAAc,EAAE,KAAK,CAAC,GAAE,CAAC,GAAE,GAAE,GAAE,CAAC,IAAE,EAAE,OAAM,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE;AAAO,WAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,QAAI,IAAE,IAAE,IAAE,IAAE;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,UAAI,IAAE,KAAG,IAAE;AAAG,eAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,YAAI,IAAE,IAAE;AAAE,iBAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,cAAI,IAAE,KAAK,MAAM,IAAE,IAAE,CAAC,GAAE,IAAE,IAAE,IAAE,IAAE,GAAE,IAAE,EAAE,CAAC;AAAE,cAAG,KAAG,KAAG,IAAE,GAAE;AAAC,gBAAI,IAAE,IAAE,GAAE,IAAE,IAAE,IAAE,IAAE;AAAE,gBAAE,EAAE,CAAC;AAAA,UAAC;AAAC,YAAE,CAAC,IAAE;AAAA,QAAC;AAAA,MAAC;AAAA,IAAC;AAAA,EAAC;AAAC,SAAM,EAAC,QAAO,EAAE,MAAM,GAAE,EAAE,OAAM,EAAE,KAAK,GAAE,OAAM,EAAE,OAAM,OAAM,EAAE,MAAK;AAAC,EAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,QAAO,GAAE,MAAK,GAAE,wBAAuB,EAAC,IAAE,GAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,YAAW,GAAE,WAAU,GAAE,iBAAgB,GAAE,YAAW,GAAE,gBAAe,EAAC,IAAE,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,GAAE,QAAO,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,SAAQ,GAAE,KAAI,GAAE,YAAW,GAAE,WAAU,GAAE,iBAAgB,EAAC,EAAC,CAAC;AAAE,MAAG,GAAE;AAAC,QAAI,IAAE;AAAE,QAAG,MAAI,UAAQ,EAAE,MAAM,WAAS,KAAG,EAAE,MAAM,CAAC,MAAI,GAAE;AAAC,UAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,CAAC,EAAE,MAAM,CAAC,GAAE,GAAE,CAAC,EAAC,EAAC,CAAC;AAAE,UAAE,GAAG,EAAC,QAAO,EAAC,GAAE,GAAE,GAAE,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAEA,IAAE,8BAA8B,CAAC;AAAA,IAAC,MAAM,KAAE,GAAG,EAAC,QAAO,EAAC,GAAE,GAAE,GAAE,EAAC,GAAE,SAAQA,IAAC,CAAC;AAAE,IAAAA,IAAE,8BAA8B,CAAC;AAAA,EAAC;AAAC,MAAG,GAAE;AAAC,QAAI,IAAE;AAAE,QAAG,MAAI,UAAQ,MAAI,WAAS,EAAE,MAAM,WAAS,KAAG,EAAE,MAAM,CAAC,MAAI,GAAE;AAAC,UAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,CAAC,EAAE,MAAM,CAAC,GAAE,GAAE,CAAC,EAAC,EAAC,CAAC;AAAE,UAAE,GAAGA,KAAE,GAAE,GAAE,GAAE,CAAC,GAAEA,IAAE,8BAA8B,CAAC;AAAA,IAAC,MAAM,KAAE,GAAGA,KAAE,GAAE,GAAE,GAAE,CAAC;AAAE,IAAAA,IAAE,8BAA8B,CAAC;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,QAAO,GAAE,MAAK,GAAE,wBAAuB,EAAC,IAAE,GAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,YAAW,GAAE,WAAU,GAAE,iBAAgB,GAAE,YAAW,GAAE,gBAAe,EAAC,IAAE,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,GAAE,QAAO,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,SAAQ,GAAE,KAAI,GAAE,YAAW,GAAE,WAAU,GAAE,iBAAgB,EAAC,EAAC,CAAC;AAAE,MAAG,GAAE;AAAC,QAAI,IAAE;AAAE,QAAE,GAAG,EAAC,QAAO,EAAC,GAAE,GAAE,GAAE,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAEA,IAAE,8BAA8B,CAAC;AAAA,EAAC;AAAC,MAAG,GAAE;AAAC,QAAI,IAAE;AAAE,QAAE,GAAGA,KAAE,GAAE,GAAE,GAAE,CAAC,GAAEA,IAAE,8BAA8B,CAAC;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,QAAO,GAAE,SAAQ,EAAC,IAAE,GAAE,IAAE,EAAE,cAAc,EAAE,KAAK,GAAE,IAAE,EAAE,OAAM,IAAE,EAAE,EAAE,SAAO,CAAC,GAAE,CAAC,GAAE,GAAE,GAAE,CAAC,IAAE,EAAE,mBAAmB,GAAE,CAAC;AAAE,MAAG,MAAI,EAAE,QAAOC,IAAE,eAAe,GAAE,EAAE,OAAM,CAAC,CAAC;AAAE,MAAI,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAEA,IAAE,WAAW,CAAC,GAAE,IAAE,GAAG,GAAE,GAAE,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,EAAE,OAAM,CAAC;AAAE,SAAOA,IAAE,eAAe,GAAE,EAAE,OAAM,EAAE,MAAM;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,SAAQ,EAAC,IAAE,GAAE,EAAC,MAAK,GAAE,WAAU,EAAC,IAAE;AAAE,IAAE,CAAC,GAAE,CAAC,GAAE,UAAU;AAAE,MAAI,IAAE,EAAE,eAAe,GAAE,EAAE,KAAK,EAAE,CAAC,GAAE,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,MAAM,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE,GAAE;AAAC,QAAI,IAAE,EAAE,CAAC;AAAE,MAAE,OAAO,KAAG,IAAE,KAAG,KAAG,GAAE,MAAI,6BAA6B,CAAC,kBAAkB,IAAE,CAAC,GAAG;AAAA,EAAC;AAAC,MAAI,IAAE;AAAE,OAAG,SAAO,IAAE;AAAG,MAAI,IAAE,EAAE,cAAc,EAAE,KAAK,GAAE,IAAE,EAAE,aAAa,yBAAyB,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,CAAC,EAAE,WAAU,EAAE,WAAU,EAAE,SAAQ,EAAE,SAAS,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,CAAC,EAAE,WAAU,IAAE,EAAE,SAAS,EAAC,EAAC,CAAC,GAAE,IAAE,CAAC,EAAE,WAAU,EAAE,WAAU,IAAE,EAAE,WAAU,EAAE,SAAS,GAAE,IAAEA,IAAE,WAAW,CAAC,GAAE,IAAEA,IAAE,WAAW,CAAC,GAAE,IAAE,GAAG,GAAE,GAAE,CAAC;AAAE,SAAOA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,eAAe,EAAE,aAAY,EAAE,OAAM,EAAE,MAAM;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,OAAM,EAAC,IAAE,GAAE,IAAE,EAAE,cAAc,EAAE,KAAK,GAAE,IAAE,EAAE,MAAM,EAAE,MAAM,SAAO,CAAC,GAAE,IAAE,IAAE,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,OAAM,CAAC,GAAE,CAAC,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,GAAE,MAAGA,GAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAE,MAAK,EAAC,CAAC;AAAE,SAAOA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,IAAG,CAAAD,QAAG,OAAO,SAASA,GAAC,IAAE,IAAE,GAAE,MAAM;AAA7C,IAA+C,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,IAAG,CAAAA,QAAG,KAAK,IAAIA,GAAC,MAAI,IAAE,IAAE,IAAE,GAAE,MAAM;AAA5C,IAA8C,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,IAAG,CAAAA,QAAG,OAAO,MAAMA,GAAC,IAAE,IAAE,GAAE,MAAM;AAA1C,IAA4C,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGA,KAAE;AAAC,MAAG,EAAC,SAAQ,GAAE,OAAMC,IAAC,IAAED,KAAE,EAAC,OAAM,GAAE,MAAK,GAAE,KAAI,EAAC,IAAEC,KAAE,IAAE,GAAG,GAAE,GAAE,CAAC;AAAE,SAAO,EAAE,eAAe,CAAC,EAAE,MAAM,GAAE,WAAU,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,IAAG,CAAAD,QAAG,KAAK,MAAMA,GAAC,CAAC;AAA7B,IAA+B,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,CAACA,KAAE,MAAIA,OAAG,CAAC;AAArB,IAAuB,KAAG,GAAG,IAAG,IAAG,MAAK,MAAM;AAA9C,IAAgD,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,IAAG,CAAAA,QAAGA,MAAE,IAAE,GAAE,MAAM;AAA5B,IAA8B,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,CAACA,KAAE,MAAIA,OAAG,CAAC;AAArB,IAAuB,KAAG,GAAG,IAAG,IAAG,MAAK,MAAM;AAA9C,IAAgD,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,aAAY,GAAE,MAAK,GAAE,OAAM,GAAE,MAAK,EAAC,IAAE;AAAE,IAAE,GAAE,KAAK;AAAE,MAAI,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,IAAE,GAAE,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,cAAc,EAAE,KAAK,GAAE,IAAE,IAAI,aAAa,CAAC;AAAE,WAAS,EAAE,GAAE;AAAC,QAAI,IAAE,IAAE,GAAE,IAAE,IAAE,IAAE,KAAK,IAAI,GAAE,IAAE,CAAC,GAAE,IAAE,IAAE,IAAE,KAAK,IAAI,IAAE,GAAE,CAAC,GAAE,IAAE;AAAE,WAAK,KAAG,GAAE,KAAI;AAAC,UAAI,IAAE,EAAE,CAAC;AAAE,WAAG,IAAE;AAAA,IAAC;AAAC,WAAO;AAAA,EAAC;AAAC,WAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,QAAI,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC,IAAE,KAAK,IAAI,IAAE,IAAE,GAAE,CAAC,CAAC;AAAE,MAAE,CAAC,IAAE;AAAA,EAAC;AAAC,SAAOA,IAAE,eAAe,EAAE,OAAM,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,GAAE,GAAE,IAAG,EAAC,IAAE,GAAE,EAAC,aAAY,GAAE,MAAK,GAAE,OAAM,GAAE,MAAK,EAAC,IAAE;AAAE,IAAE,GAAE,SAAS;AAAE,MAAI,IAAE,EAAE,cAAc,EAAE,KAAK,GAAE,IAAE,EAAE,MAAM,CAAC,GAAE,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,IAAI,aAAa,CAAC,GAAE,IAAE;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,QAAI,IAAE,IAAE,GAAE,IAAE,IAAE,IAAE,KAAK,IAAI,GAAE,IAAE,CAAC,GAAE,IAAE,IAAE,IAAE,KAAK,IAAI,GAAE,IAAE,IAAE,CAAC,GAAE,IAAE;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,IAAI,MAAG,KAAK,IAAI,EAAE,CAAC,GAAE,CAAC;AAAE,QAAE,IAAE,IAAE;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,UAAI,IAAE,KAAG,IAAE,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,IAAE;AAAE,YAAI,MAAI,KAAG,KAAK,IAAI,GAAE,CAAC,CAAC,IAAG,KAAG,EAAE,CAAC,GAAE,EAAE,CAAC,KAAG;AAAA,IAAC;AAAA,EAAC;AAAC,SAAOA,IAAE,eAAe,EAAE,OAAM,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,kBAAiB,GAAE,UAAS,EAAC,IAAE,GAAE,IAAEC,KAAE,IAAE,EAAE,OAAM,IAAE,EAAE,QAAO,IAAE,EAAE,eAAe,GAAE,CAAC,GAAE,IAAE,GAAE,IAAE,EAAE,mBAAmB,GAAE,CAAC,GAAE,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE;AAAO,MAAG,KAAG,MAAK;AAAC,QAAI,IAAE,IAAI,MAAM,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,IAAI,GAAE,CAAC,IAAE,EAAE,EAAE,CAAC,CAAC;AAAE,QAAE,GAAG,GAAE,GAAE,EAAE,OAAM,GAAE,CAAC,GAAE,IAAE,EAAE,iBAAiB,EAAE,QAAO,CAAC,GAAE,IAAE;AAAA,EAAC;AAAC,IAAE,GAAE,KAAK,GAAE,EAAE,2BAA2B,OAAM,GAAE,CAAC;AAAE,MAAG,CAAC,GAAE,CAAC,IAAE,EAAE,0BAA0B,GAAE,CAAC,GAAE,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,GAAG,GAAE,GAAE,GAAE,EAAE,KAAK,GAAE,IAAE,EAAE,MAAM,GAAE,GAAE,EAAE,KAAK,GAAE,IAAE;AAAE,SAAO,MAAI,IAAE,EAAE,qBAAqB,GAAE,CAAC,IAAG,EAAC,QAAO,GAAE,OAAM,GAAE,OAAM,EAAE,MAAK;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE;AAAE,IAAE,GAAE,SAAS;AAAE,MAAG,EAAC,YAAW,GAAE,SAAQ,GAAE,KAAI,GAAE,iBAAgB,EAAC,IAAE,GAAE,IAAE;AAAE,IAAE,OAAO,EAAE,+BAA+B,GAAE,CAAC,GAAE,MAAI,wEAAwE,CAAC,mBAAmB,CAAC,GAAG;AAAE,MAAI,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE;AAAE,MAAG,EAAE,gBAAc,KAAG,EAAE,iBAAe,KAAG,EAAE,YAAY,EAAE,SAAQ,EAAE,QAAQ,EAAE,KAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,IAAC,CAAC;AAAA,OAAM;AAAC,QAAI,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,eAAe,EAAE,KAAK,GAAE,IAAE,GAAG,GAAE,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,KAAK;AAAE,QAAEA,IAAE,eAAe,EAAE,UAAS,EAAE,OAAM,EAAE,MAAM;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,YAAW,GAAE,SAAQ,GAAE,KAAI,GAAE,iBAAgB,GAAE,YAAW,EAAC,IAAE;AAAE,IAAE,GAAE,WAAW;AAAE,MAAI,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,GAAG,GAAE,EAAE,OAAM,EAAE,OAAM,EAAE,eAAe,EAAE,KAAK,GAAE,GAAE,KAAK;AAAE,SAAOA,IAAE,eAAe,EAAE,OAAM,WAAU,EAAE,MAAM;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,IAAG,GAAE,OAAM,EAAC,IAAE,GAAE,EAAC,YAAW,GAAE,SAAQ,GAAE,KAAI,GAAE,iBAAgB,EAAC,IAAE;AAAE,IAAE,CAAC,GAAE,CAAC,GAAE,eAAe;AAAE,MAAI,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,IAAEC,IAAE,WAAW,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC,GAAE,IAAE,EAAE,aAAY,IAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,EAAE,eAAc,IAAE,EAAE,gBAAe,IAAE,EAAE,eAAc,IAAE,EAAE,sBAAqB,IAAE,EAAE,uBAAsB,IAAE,EAAE,sBAAqB,IAAE,IAAE,IAAE,EAAE,QAAQ,OAAM,IAAE,IAAE,IAAE,EAAE,QAAQ,MAAK,IAAE,IAAE,IAAE,EAAE,QAAQ,KAAI,IAAE,GAAG,EAAE,OAAM,SAAS,GAAE,IAAEA,IAAE,WAAW,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,WAAU,EAAE,EAAE,UAAQ,IAAE,GAAE,IAAE,EAAE,YAAW,EAAE,EAAE,UAAQ,IAAE,GAAE,IAAE,EAAE,SAAQ,EAAE,EAAE,UAAQ,IAAE,GAAE,IAAE,EAAE,UAAS,EAAE,EAAE,UAAQ,IAAE,GAAE,IAAE,EAAE,SAAQ,EAAE,GAAE;AAAC,QAAI,IAAE,IAAE,GAAE,IAAE,IAAE,GAAE,IAAE,IAAE,GAAE,IAAE;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,KAAG,GAAE;AAAC,UAAI,MAAI,IAAE,KAAG;AAAE,UAAG,EAAE,KAAG,KAAG,MAAI,EAAE,YAAU,KAAK,MAAM,EAAE,MAAI,IAAI,UAAQ,KAAG,GAAE,KAAG,GAAE,MAAI,GAAE;AAAC,YAAI,MAAI,IAAE,MAAI;AAAE,YAAG,EAAE,KAAG,KAAG,MAAI,EAAE,aAAW,KAAK,MAAM,EAAE,MAAI,IAAI,UAAQ,KAAG,GAAE,KAAG,GAAE,MAAI,GAAE;AAAC,cAAI,MAAI,IAAE,MAAI;AAAE,cAAG,KAAG,KAAG,MAAI,EAAE,YAAU,KAAK,MAAM,EAAE,MAAI,GAAG;AAAS,cAAI,KAAG,IAAE,IAAE,IAAE,IAAE,EAAE,IAAI,GAAE,IAAG,IAAG,IAAG,CAAC,GAAE,KAAG,IAAE,IAAE,IAAE,KAAG,IAAE,IAAG,KAAG,OAAK,KAAG,IAAE;AAAE,cAAG,OAAK,EAAE;AAAS,cAAI,KAAG,EAAE,IAAI,GAAE,IAAG,IAAG,IAAG,CAAC;AAAE,eAAG,KAAG;AAAA,QAAE;AAAA,MAAC;AAAA,IAAC;AAAC,MAAE,IAAI,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAAC;AAAC,SAAOA,IAAE,eAAe,EAAE,OAAM,EAAE,OAAM,EAAE,MAAM;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,IAAG,GAAE,OAAM,GAAE,QAAO,EAAC,IAAE,GAAE,IAAE;AAAE,IAAE,CAAC,GAAE,CAAC,GAAE,aAAa;AAAE,MAAG,EAAC,YAAW,GAAE,SAAQ,GAAE,KAAI,GAAE,iBAAgB,EAAC,IAAE,GAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,GAAG,EAAE,UAAS,EAAE,OAAM,GAAG,GAAE,EAAE,OAAM,EAAE,OAAM,CAAC,EAAE,MAAM,GAAE,IAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,EAAE,gBAAe,IAAE,EAAE,eAAc,IAAE,EAAE,uBAAsB,IAAE,EAAE,sBAAqB,IAAE,IAAE,IAAE,EAAE,QAAQ,MAAK,IAAE,IAAE,IAAE,EAAE,QAAQ,KAAI,IAAE,GAAG,EAAE,OAAM,SAAS,GAAE,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,GAAG,EAAE,OAAM,WAAU,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,WAAU,EAAE,EAAE,UAAQ,IAAE,GAAE,IAAE,EAAE,YAAW,EAAE,EAAE,UAAQ,IAAE,GAAE,IAAE,EAAE,UAAS,EAAE,EAAE,UAAQ,IAAE,GAAE,IAAE,EAAE,SAAQ,EAAE,GAAE;AAAC,QAAI,IAAE,IAAE,GAAE,IAAE,IAAE,GAAE,IAAE;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,KAAG,GAAE;AAAC,UAAI,KAAG,IAAE,KAAG;AAAE,UAAG,EAAE,IAAE,KAAG,KAAG,EAAE,aAAW,KAAK,MAAM,CAAC,MAAI,GAAG,UAAQ,IAAE,GAAE,IAAE,GAAE,KAAG,GAAE;AAAC,YAAI,KAAG,IAAE,KAAG;AAAE,YAAG,IAAE,KAAG,KAAG,EAAE,YAAU,KAAK,MAAM,CAAC,MAAI,EAAE;AAAS,YAAI,KAAG,IAAE,IAAE,IAAE,EAAE,IAAI,GAAE,GAAE,GAAE,CAAC,GAAE,KAAG,IAAE,IAAE,GAAE,KAAG,OAAK,KAAG,IAAE;AAAE,YAAG,OAAK,EAAE;AAAS,YAAI,KAAG,EAAE,IAAI,GAAE,GAAE,GAAE,CAAC;AAAE,aAAG,KAAG;AAAA,MAAE;AAAA,IAAC;AAAC,MAAE,IAAI,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAAC;AAAC,SAAOA,IAAE,eAAe,EAAE,OAAM,EAAE,OAAM,EAAE,MAAM;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE;AAAC,MAAI,IAAE,EAAE,eAAe,CAAC,GAAE,IAAE,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE,KAAK,GAAE,IAAE,GAAGD,KAAE,GAAEC,KAAE,GAAE,MAAG,CAAC;AAAE,SAAM,CAAC,EAAE,QAAO,EAAE,MAAM;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,CAAC,EAAC,QAAOD,KAAE,OAAM,GAAE,SAAQC,IAAC,MAAI;AAAC,MAAG,EAAC,GAAE,EAAC,IAAED,KAAE,EAAC,YAAW,GAAE,SAAQ,GAAE,KAAI,GAAE,qBAAoB,EAAC,IAAE,GAAE,IAAEC;AAAE,IAAE,GAAE,mBAAmB;AAAE,MAAI,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,IAAE,GAAG,GAAE,EAAE,OAAM,EAAE,OAAM,GAAE,CAAC,GAAE,IAAE,EAAE,MAAM,GAAE,EAAE,UAAS,EAAE,KAAK,GAAE,IAAE,EAAE,MAAM,GAAE,EAAE,UAAS,EAAE,KAAK;AAAE,SAAM,CAAC,EAAC,QAAO,GAAE,OAAM,EAAE,UAAS,OAAM,EAAE,MAAK,GAAE,EAAC,QAAO,GAAE,OAAM,EAAE,UAAS,OAAM,QAAO,CAAC;AAAC,EAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,MAAK,GAAE,UAAS,EAAC,IAAE,GAAE,IAAE,EAAE,eAAe,GAAE,EAAE,KAAK,GAAE,IAAE,EAAE,0BAA0B,EAAE,OAAM,CAAC,EAAE,CAAC,GAAE,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,CAAC,GAAE,IAAEC,IAAE,eAAe,CAAC,GAAE,WAAU,IAAI,aAAa,CAAC,CAAC,CAAC,CAAC;AAAE,IAAE,KAAK,CAAC;AAAE,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,UAAS,EAAC,CAAC;AAAE,IAAE,KAAK,CAAC;AAAE,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,GAAE,GAAE,EAAC,GAAE,SAAQA,IAAC,CAAC;AAAE,IAAE,KAAK,CAAC;AAAE,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,MAAK,GAAE,UAAS,EAAC,EAAC,CAAC;AAAE,SAAO,EAAE,QAAQ,OAAGA,IAAE,8BAA8B,CAAC,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,MAAK,GAAE,UAAS,EAAC,IAAE;AAAE,IAAE,GAAE,KAAK;AAAE,MAAI,IAAE,EAAE,eAAe,GAAE,EAAE,KAAK,GAAE,IAAE,GAAE,IAAE,EAAE,mBAAmB,GAAE,EAAE,MAAM,MAAM,GAAE,IAAE;AAAE,OAAG,SAAO,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC,GAAE,IAAE,EAAE,iBAAiB,EAAE,QAAO,EAAE,MAAM,MAAM,IAAG,EAAE,2BAA2B,OAAM,GAAE,EAAE,MAAM,MAAM;AAAE,MAAG,CAAC,GAAE,CAAC,IAAE,EAAE,0BAA0B,EAAE,OAAM,CAAC,GAAE,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,EAAE,oBAAoB,EAAE,cAAc,CAAC,GAAE,EAAE,KAAK,GAAE,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE;AAAO,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE,GAAE;AAAC,QAAI,IAAE,IAAE,GAAE,IAAE,EAAE,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,UAAI,IAAE,EAAE,IAAE,CAAC;AAAE,OAAC,OAAO,MAAM,CAAC,KAAG,IAAE,OAAK,IAAE;AAAA,IAAE;AAAC,MAAE,CAAC,IAAE;AAAA,EAAC;AAAC,OAAG,QAAMA,IAAE,8BAA8B,CAAC;AAAE,MAAI,IAAEA,IAAE,eAAe,GAAE,EAAE,OAAM,CAAC;AAAE,MAAG,GAAE;AAAC,QAAI,IAAE,EAAE,qBAAqB,GAAE,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,WAAOA,IAAE,8BAA8B,CAAC,GAAE;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,UAAS,GAAE,MAAK,EAAC,IAAE;AAAE,IAAE,GAAE,WAAW;AAAE,MAAI,IAAE,EAAE,IAAI,CAAC,GAAE,MAAI,EAAE,CAAC,IAAE,EAAE,MAAM,CAAC,IAAE,EAAE,CAAC,CAAC,GAAE,IAAE,EAAE,IAAI,OAAG,EAAE,CAAC,CAAC,GAAE,IAAE,EAAE,IAAI,CAAC,GAAE,MAAI,EAAE,CAAC,IAAE,EAAE,MAAM,CAAC,CAAC,GAAE,IAAE,MAAI,YAAU,IAAE,GAAE,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,MAAM,QAAO,IAAE,EAAE,eAAe,EAAE,KAAK,GAAE,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,EAAE,QAAO,IAAE,EAAE,eAAe,CAAC,GAAE,IAAE,EAAE,uBAAuB,EAAE,OAAM,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,QAAI,IAAE,EAAE,WAAW,GAAE,GAAE,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,IAAI,GAAE,CAAC,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,IAAE,IAAE,EAAE,CAAC,IAAE,IAAE,EAAE,CAAC,KAAG,EAAE,CAAC,MAAI,EAAE,CAAC,KAAG,EAAE,CAAC,IAAE,KAAG,IAAE,EAAE,CAAC,IAAE;AAAG,QAAE,EAAE,IAAI,CAAC,GAAE,MAAI,IAAE,EAAE,CAAC,CAAC;AAAE,QAAI,IAAE,EAAE,WAAW,GAAE,GAAE,CAAC;AAAE,MAAE,CAAC,IAAE,EAAE,CAAC;AAAA,EAAC;AAAC,SAAM,EAAC,QAAOA,IAAE,MAAM,GAAE,GAAE,EAAE,KAAK,GAAE,OAAM,GAAE,OAAM,EAAE,MAAK;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,CAACD,KAAE,MAAI;AAAC,MAAIC,MAAED,MAAE;AAAE,SAAOA,MAAE,KAAG,IAAE,KAAGA,OAAG,KAAG,KAAG,IAAEC,OAAGA,MAAE,KAAG;AAAC,CAAC;AAAlE,IAAoE,KAAG,GAAG,IAAG,EAAE;AAA/E,IAAiF,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,GAAG,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,QAAO,EAAC,IAAE,GAAE,EAAC,KAAI,EAAC,IAAE,GAAE,IAAE,EAAE,MAAM,QAAO,IAAE;AAAE,MAAG,MAAI,OAAK,IAAE,IAAE,IAAG,MAAI,IAAE,EAAE,OAAM,MAAM,4EAA4E,CAAC,gBAAgB,CAAC,EAAE;AAAE,MAAI,IAAE,EAAE,eAAe,CAAC,CAAC,GAAE,EAAE,KAAK,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,kBAAiB,GAAE,UAAS,MAAE,EAAC,CAAC,GAAE,IAAE,EAAE,qBAAqB,EAAE,OAAM,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,GAAE,GAAE,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,MAAK,GAAE,UAAS,MAAE,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,GAAE,GAAE,EAAC,GAAE,SAAQA,IAAC,CAAC;AAAE,SAAOA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,QAAO,EAAC,IAAE,GAAE,EAAC,YAAW,GAAE,MAAK,GAAE,YAAW,EAAC,IAAE;AAAE,IAAE,GAAE,aAAa;AAAE,MAAI,IAAE,IAAE,IAAE,GAAG,EAAC,QAAO,EAAC,QAAO,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,KAAI,GAAE,EAAC,CAAC,GAAE,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,EAAE,MAAM,CAAC,GAAE,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,CAAC,GAAE,CAAC,GAAE,IAAE,EAAE,oBAAoB,EAAE,cAAc,CAAC,GAAE,OAAO;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,QAAI,IAAE,IAAE,GAAE,IAAE,IAAI,aAAa,IAAE,CAAC;AAAE,MAAE,CAAC,IAAE,EAAE,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE,EAAE,GAAE,CAAC,IAAE,EAAE,IAAE,CAAC,IAAE,EAAE,IAAE,CAAC;AAAE,QAAI,IAAE,GAAG,KAAK,EAAE,SAAS,CAAC,GAAE,IAAE,IAAE;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,UAAI,IAAE,EAAE;AAAE,QAAE,IAAE,CAAC,IAAE,EAAE;AAAO,eAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,IAAI,KAAG,IAAE,EAAE,CAAC,GAAE;AAAC,UAAE,IAAE,CAAC,IAAE;AAAE;AAAA,MAAK;AAAA,IAAC;AAAA,EAAC;AAAC,SAAO,KAAGA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,eAAe,GAAE,SAAQ,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG;AAAwB,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,GAAE,QAAO,EAAC,IAAE,GAAE,EAAC,eAAc,GAAE,cAAa,GAAE,gBAAe,EAAC,IAAE;AAAE,IAAE,GAAE,mBAAmB;AAAE,MAAI,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,EAAC,iBAAgB,EAAC,IAAE,GAAG,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,SAAOA,IAAE,eAAe,CAAC,EAAE,MAAM,GAAE,SAAQ,IAAI,WAAW,CAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG;AAAwB,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,GAAE,QAAO,EAAC,IAAE,GAAE,EAAC,eAAc,GAAE,cAAa,GAAE,gBAAe,GAAE,oBAAmB,EAAC,IAAE;AAAE,IAAE,GAAE,yBAAyB;AAAE,MAAI,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,EAAC,iBAAgB,GAAE,cAAa,EAAC,IAAE,GAAG,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,SAAM,CAACA,IAAE,eAAe,CAAC,EAAE,MAAM,GAAE,SAAQ,IAAI,WAAW,CAAC,CAAC,GAAEA,IAAE,eAAe,CAAC,GAAE,SAAQ,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG;AAAwB,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,GAAE,QAAO,EAAC,IAAE,GAAE,EAAC,eAAc,GAAE,cAAa,GAAE,gBAAe,GAAE,cAAa,EAAC,IAAE;AAAE,IAAE,GAAE,4BAA4B;AAAE,MAAI,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,GAAE,IAAE,GAAE,IAAE,GAAE,IAAE,GAAE,EAAC,iBAAgB,GAAE,gBAAe,EAAC,IAAE,GAAG,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,SAAM,CAACA,IAAE,eAAe,CAAC,EAAE,MAAM,GAAE,SAAQ,IAAI,WAAW,CAAC,CAAC,GAAEA,IAAE,eAAe,CAAC,EAAE,MAAM,GAAE,WAAU,IAAI,aAAa,CAAC,CAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,SAAQ,EAAC,IAAE,GAAE,EAAC,OAAM,GAAE,OAAM,GAAE,SAAQ,GAAE,UAAS,EAAC,IAAE;AAAE,IAAE,GAAE,QAAQ;AAAE,MAAI,IAAE,EAAE,cAAc,EAAE,KAAK,GAAE,IAAE,IAAI,aAAa,IAAE,CAAC;AAAE,IAAE,KAAK,CAAC;AAAE,MAAI,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE;AAAO,WAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,EAAE,GAAE,CAAC,KAAG,KAAG,EAAE,CAAC,IAAE,MAAI,EAAE,IAAE,IAAE,EAAE,CAAC,CAAC,IAAE;AAAG,SAAOA,IAAE,eAAe,CAAC,GAAG,EAAE,OAAM,CAAC,GAAE,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE;AAAE,MAAG,EAAE,UAAQ,SAAS,OAAM,IAAI,MAAM,+CAA+C;AAAE,MAAG,EAAE,UAAQ,aAAY;AAAC,QAAI,IAAE,GAAG,EAAC,QAAO,EAAC,OAAM,EAAC,GAAE,SAAQC,IAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,OAAM,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,MAAK,GAAE,MAAK,EAAC,GAAE,SAAQA,IAAC,CAAC;AAAE,WAAOA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAE;AAAA,EAAC,MAAM,QAAO,GAAG,EAAC,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAE,OAAM,OAAM,GAAE,OAAM,EAAE,MAAK,EAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE;AAAE,MAAG,EAAE,UAAQ,SAAS,OAAM,IAAI,MAAM,8CAA8C;AAAE,MAAG,EAAE,UAAQ,aAAY;AAAC,QAAI,IAAE,GAAG,EAAC,QAAO,EAAC,OAAM,EAAC,GAAE,SAAQC,IAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,OAAM,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,MAAK,GAAE,MAAK,EAAC,GAAE,SAAQA,IAAC,CAAC;AAAE,WAAOA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAE;AAAA,EAAC,MAAM,QAAO,GAAG,EAAC,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAE,OAAM,OAAM,GAAE,OAAM,EAAE,MAAK,EAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,MAAK,EAAC,IAAE;AAAE,MAAG,EAAE,WAAS,EAAE,QAAO,GAAG,EAAC,QAAO,EAAC,OAAM,EAAE,CAAC,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,KAAI,EAAC,EAAC,CAAC;AAAE,MAAI,IAAE,EAAE,CAAC,EAAE,OAAM,IAAE,EAAE,CAAC,EAAE;AAAM,IAAE,QAAQ,OAAG;AAAC,MAAE,kBAAkB,GAAE,EAAE,OAAM,uDAAuD,GAAE,EAAE,OAAO,MAAI,EAAE,OAAM,MAAI,uDAAuD;AAAA,EAAC,CAAC;AAAE,MAAI,IAAE,CAAC,GAAE,IAAE,EAAE,IAAI,OAAG;AAAC,QAAI,IAAE,GAAG,EAAC,QAAO,EAAC,OAAM,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,KAAI,EAAC,EAAC,CAAC;AAAE,WAAO,EAAE,KAAK,CAAC,GAAE;AAAA,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,GAAE,SAAQA,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC;AAAE,SAAO,EAAE,QAAQ,OAAGA,IAAE,8BAA8B,CAAC,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,UAAS,GAAE,eAAc,EAAC,IAAE;AAAE,IAAE,GAAE,KAAK;AAAE,MAAI,IAAE,EAAE,IAAI,CAAC,GAAE,MAAI,EAAE,CAAC,IAAE,EAAE,MAAM,CAAC,IAAE,EAAE,CAAC,CAAC,GAAE,IAAE,EAAE,IAAI,OAAG,EAAE,CAAC,CAAC,GAAE,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,cAAc,EAAE,KAAK,GAAE,IAAE,EAAE,MAAM,QAAO,IAAE,EAAE,eAAe,EAAE,KAAK,GAAE,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,EAAE,QAAO,IAAE,EAAE,eAAe,CAAC,GAAE,IAAE,EAAE,uBAAuB,EAAE,OAAM,CAAC;AAAE,QAAI,KAAG,EAAE,KAAK,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,QAAI,IAAE,EAAE,WAAW,GAAE,GAAE,CAAC,EAAE,IAAI,CAAC,GAAE,MAAI,IAAE,EAAE,CAAC,CAAC,GAAE,IAAE,EAAE,WAAW,GAAE,GAAE,CAAC;AAAE,MAAE,CAAC,IAAE,EAAE,CAAC;AAAA,EAAC;AAAC,SAAM,EAAC,QAAOA,IAAE,MAAM,GAAE,GAAE,EAAE,KAAK,GAAE,OAAM,GAAE,OAAM,EAAE,MAAK;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAIG,MAAG,GAAG,CAACJ,KAAE,MAAI,KAAK,IAAIA,KAAE,CAAC,CAAC;AAA9B,IAAgC,KAAG,GAAG,IAAGI,GAAE;AAA3C,IAA6C,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGJ,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,oBAAmB,GAAE,mBAAkB,GAAE,SAAQ,EAAC,IAAE,GAAE,EAAC,kBAAiB,EAAC,IAAE,GAAE,IAAE,EAAE,IAAI,OAAGC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,IAAE,EAAE,IAAI,OAAG,EAAE,KAAK,GAAE,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,CAAC,GAAE,GAAE,CAAC,IAAE,GAAG,GAAE,GAAE,GAAE,EAAE,OAAM,EAAE,OAAM,GAAE,EAAE,OAAM,CAAC,GAAE,IAAE,EAAE,IAAI,OAAGA,IAAE,eAAe,CAAC,EAAE,MAAM,GAAE,SAAQ,CAAC,CAAC,GAAE,IAAEA,IAAE,eAAe,GAAE,EAAE,OAAM,CAAC;AAAE,SAAO,EAAE,OAAO,CAAC,CAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,QAAO,GAAE,QAAO,GAAE,QAAO,EAAC,IAAE,GAAE,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,CAAC,GAAE,CAAC,IAAE,GAAG,GAAE,EAAE,OAAM,EAAE,OAAM,GAAE,EAAE,OAAM,GAAE,EAAE,KAAK,GAAE,IAAEA,IAAE,eAAe,CAAC,EAAE,MAAM,GAAE,SAAQ,CAAC,GAAE,IAAEA,IAAE,eAAe,CAAC,EAAE,MAAM,GAAE,EAAE,OAAM,CAAC;AAAE,SAAM,CAAC,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,GAAE,QAAO,GAAE,cAAa,GAAE,qBAAoB,EAAC,IAAE,GAAE,EAAC,mBAAkB,EAAC,IAAE,GAAE,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,IAAI,OAAGA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,IAAE,EAAE,IAAI,OAAG,EAAE,KAAK,GAAE,CAAC,GAAE,CAAC,IAAE,GAAG,GAAE,EAAE,OAAM,GAAE,EAAE,OAAM,EAAE,OAAM,GAAE,EAAE,OAAM,GAAE,GAAE,CAAC;AAAE,SAAOA,IAAE,eAAe,GAAE,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,SAAQ,GAAE,OAAMC,IAAC,IAAED,KAAE,EAAC,OAAM,GAAE,MAAK,GAAE,OAAM,GAAE,MAAK,EAAC,IAAEC,KAAE,IAAE,GAAG,GAAE,GAAE,GAAE,CAAC;AAAE,SAAO,EAAE,eAAe,CAAC,EAAE,MAAM,GAAE,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,IAAG,CAAAD,QAAG,IAAEA,GAAC;AAAnB,IAAqB,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,QAAO,EAAC,IAAE,GAAE,EAAC,cAAa,GAAE,kBAAiB,GAAE,MAAK,EAAC,IAAE;AAAE,IAAE,GAAE,gBAAgB;AAAE,MAAI,IAAE,EAAE,eAAe,EAAE,KAAK,GAAE,CAAC,GAAE,CAAC,IAAE,GAAE,CAAC,GAAE,GAAE,GAAE,CAAC,IAAE,EAAE,OAAM,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,IAAI,aAAa,EAAE,cAAc,CAAC,GAAE,GAAE,GAAE,CAAC,CAAC,CAAC,GAAE,IAAE,CAAC,KAAG,IAAE,IAAE,IAAE,IAAE,GAAE,KAAG,IAAE,IAAE,IAAE,IAAE,CAAC,GAAE,IAAE,CAAC,KAAG,IAAE,IAAE,IAAE,IAAE,GAAE,KAAG,IAAE,IAAE,IAAE,IAAE,CAAC,GAAE,IAAE,GAAE,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,IAAI,UAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,QAAI;AAAE,QAAE,IAAE,KAAG,IAAE,OAAI,MAAG,IAAE,IAAE;AAAE,QAAI,IAAE,KAAK,IAAI,GAAE,KAAK,MAAM,CAAC,CAAC,GAAE,IAAE,IAAE,GAAE,IAAE,KAAK,IAAI,IAAE,GAAE,KAAK,KAAK,CAAC,CAAC,GAAE,IAAE,IAAE,EAAE,CAAC,IAAE,IAAE,EAAE,CAAC,GAAE,IAAE,IAAE,EAAE,CAAC,IAAE,IAAE,EAAE,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,UAAI;AAAE,UAAE,IAAE,KAAG,IAAE,OAAI,MAAG,IAAE,IAAE;AAAE,UAAI,IAAE,KAAK,IAAI,GAAE,KAAK,MAAM,CAAC,CAAC,GAAE,IAAE,IAAE,GAAE,IAAE,KAAK,IAAI,IAAE,GAAE,KAAK,KAAK,CAAC,CAAC,GAAE,IAAE,IAAE,IAAE,EAAE,CAAC,GAAE,IAAE,IAAE,IAAE,EAAE,CAAC,GAAE,KAAG,IAAE,IAAE,EAAE,CAAC,GAAE,KAAG,IAAE,IAAE,EAAE,CAAC;AAAE,eAAQ,KAAG,GAAE,KAAG,GAAE,MAAK;AAAC,YAAI,KAAG,EAAE,IAAE,EAAE,GAAE,KAAG,EAAE,IAAE,EAAE,GAAE,KAAG,EAAE,KAAG,EAAE,GAAE,KAAG,EAAE,KAAG,EAAE,GAAE,KAAG,MAAI,KAAG,MAAI,GAAE,KAAG,MAAI,KAAG,MAAI,GAAE,KAAG,MAAI,KAAG,MAAI;AAAE,UAAE,GAAG,IAAE;AAAA,MAAE;AAAA,IAAC;AAAA,EAAC;AAAC,SAAOA,IAAE,eAAe,CAAC,GAAE,GAAE,GAAE,CAAC,GAAE,WAAU,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,QAAO,GAAE,IAAG,EAAC,IAAE,GAAE,EAAC,cAAa,EAAC,IAAE;AAAE,IAAE,CAAC,GAAE,CAAC,GAAE,oBAAoB;AAAE,MAAI,IAAE,EAAE,eAAe,EAAE,KAAK,GAAE,CAAC,GAAE,GAAE,GAAE,CAAC,IAAE,EAAE,OAAM,CAAC,EAAC,GAAE,CAAC,IAAE,EAAE,OAAM,IAAE,IAAI,aAAa,IAAE,IAAE,IAAE,CAAC,GAAE,IAAE,CAAC,KAAG,IAAE,IAAE,IAAE,IAAE,GAAE,KAAG,IAAE,IAAE,IAAE,IAAE,CAAC,GAAE,IAAE,CAAC,KAAG,IAAE,IAAE,IAAE,IAAE,GAAE,KAAG,IAAE,IAAE,IAAE,IAAE,CAAC,GAAE,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,GAAE,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,QAAI,IAAE,IAAE,EAAE,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,UAAI,IAAE,IAAE,GAAE,IAAE,KAAK,MAAM,CAAC,GAAE,IAAE,KAAK,IAAI,KAAK,KAAK,CAAC,GAAE,IAAE,CAAC,GAAE,IAAE,IAAE,IAAE,EAAE,CAAC,GAAE,IAAE,IAAE,IAAE,EAAE,CAAC,GAAE,IAAE,IAAE,GAAE,IAAE,IAAE;AAAE,eAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,YAAI,IAAE,IAAE,GAAE,IAAE,KAAK,MAAM,CAAC,GAAE,IAAE,KAAK,IAAI,KAAK,KAAK,CAAC,GAAE,IAAE,CAAC,GAAE,IAAE,IAAE,GAAE,IAAE,IAAE,GAAE,KAAG,IAAE,IAAE,EAAE,CAAC,GAAE,KAAG,IAAE,IAAE,EAAE,CAAC,GAAE,KAAG,IAAE,IAAE,EAAE,CAAC,GAAE,KAAG,IAAE,IAAE,EAAE,CAAC,GAAE,KAAG,IAAE,GAAE,KAAG,IAAE,GAAE,KAAG,IAAE,GAAE,KAAG,IAAE;AAAE,iBAAQ,KAAG,GAAE,KAAG,GAAE,MAAK;AAAC,cAAI,KAAG,EAAE,GAAG;AAAE,YAAE,KAAG,EAAE,KAAG,KAAG,IAAG,EAAE,KAAG,EAAE,KAAG,KAAG,IAAG,EAAE,KAAG,EAAE,KAAG,KAAG,IAAG,EAAE,KAAG,EAAE,KAAG,KAAG;AAAA,QAAE;AAAA,MAAC;AAAA,IAAC;AAAA,EAAC;AAAC,SAAOA,IAAE,eAAe,CAAC,GAAE,GAAE,GAAE,CAAC,GAAE,WAAU,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,QAAO,EAAC,IAAE,GAAE,EAAC,cAAa,GAAE,kBAAiB,GAAE,MAAK,EAAC,IAAE;AAAE,IAAE,GAAE,uBAAuB;AAAE,MAAI,IAAE,EAAE,eAAe,EAAE,KAAK,GAAE,CAAC,GAAE,CAAC,IAAE,GAAE,CAAC,GAAE,GAAE,GAAE,CAAC,IAAE,EAAE,OAAM,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,IAAI,aAAa,IAAE,IAAE,IAAE,CAAC,GAAE,IAAE,CAAC,KAAG,IAAE,IAAE,IAAE,IAAE,GAAE,KAAG,IAAE,IAAE,IAAE,IAAE,CAAC,GAAE,IAAE,CAAC,KAAG,IAAE,IAAE,IAAE,IAAE,GAAE,KAAG,IAAE,IAAE,IAAE,IAAE,CAAC,GAAE,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,GAAE,IAAE;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,QAAI,IAAE,IAAE,EAAE,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,UAAI,IAAE,IAAE,KAAG,IAAE,OAAI,IAAE,GAAE,IAAE,KAAK,IAAI,IAAE,GAAE,IAAE,KAAK,MAAM,CAAC,IAAE,KAAK,MAAM,CAAC,CAAC;AAAE,YAAI,IAAE,KAAK,IAAI,GAAE,CAAC;AAAG,UAAI,IAAE,IAAE,IAAE,EAAE,CAAC;AAAE,eAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,YAAI,IAAE,IAAE,KAAG,IAAE,OAAI,IAAE,GAAE,IAAE,KAAK,IAAI,IAAE,GAAE,IAAE,KAAK,MAAM,CAAC,IAAE,KAAK,MAAM,CAAC,CAAC;AAAE,cAAI,IAAE,KAAK,IAAI,GAAE,CAAC;AAAG,YAAI,IAAE,IAAE,IAAE,EAAE,CAAC;AAAE,iBAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,cAAI,IAAE,EAAE,IAAE,CAAC;AAAE,YAAE,GAAG,IAAE;AAAA,QAAC;AAAA,MAAC;AAAA,IAAC;AAAA,EAAC;AAAC,SAAOA,IAAE,eAAe,CAAC,GAAE,GAAE,GAAE,CAAC,GAAE,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,QAAO,GAAE,IAAG,EAAC,IAAE,GAAE,EAAC,cAAa,EAAC,IAAE;AAAE,IAAE,CAAC,GAAE,CAAC,GAAE,2BAA2B;AAAE,MAAI,IAAE,EAAE,eAAe,EAAE,KAAK,GAAE,IAAE,EAAE,eAAe,EAAE,KAAK,GAAE,CAAC,GAAE,GAAE,GAAE,CAAC,IAAE,EAAE,OAAM,CAAC,EAAC,GAAE,CAAC,IAAE,EAAE,OAAM,IAAE,IAAI,aAAa,IAAE,IAAE,IAAE,CAAC,GAAE,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,CAAC,KAAG,IAAE,IAAE,IAAE,IAAE,GAAE,KAAG,IAAE,IAAE,IAAE,IAAE,CAAC,GAAE,IAAE,CAAC,KAAG,IAAE,IAAE,IAAE,IAAE,GAAE,KAAG,IAAE,IAAE,IAAE,IAAE,CAAC,GAAE,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,GAAE,IAAE,IAAE,GAAE,IAAE,IAAE,GAAE,IAAE,KAAK,KAAK,CAAC,IAAE,IAAE,GAAE,IAAE,KAAK,KAAK,CAAC,IAAE,IAAE;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,QAAI,IAAE,IAAE,EAAE,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,UAAI,IAAE,IAAE,IAAE,EAAE,CAAC,GAAE,IAAE,KAAK,MAAM,IAAE,CAAC,GAAE,IAAE,KAAK,MAAM,IAAE,IAAE,CAAC;AAAE,eAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,YAAI,IAAE,IAAE,IAAE,EAAE,CAAC,GAAE,IAAE,KAAK,MAAM,IAAE,CAAC,GAAE,IAAE,KAAK,MAAM,IAAE,IAAE,CAAC;AAAE,iBAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,cAAI,IAAE;AAAE,mBAAQ,KAAG,GAAE,KAAG,GAAE,MAAK;AAAC,gBAAI,KAAG,KAAG;AAAE,gBAAG,KAAG,KAAG,MAAI,EAAE;AAAS,gBAAI,KAAG,IAAE,KAAG,EAAE,CAAC,GAAE,KAAG,KAAG,GAAE,KAAG,KAAK,IAAI,IAAE,GAAE,IAAE,KAAK,MAAM,EAAE,IAAE,KAAK,MAAM,EAAE,CAAC;AAAE,gBAAG,MAAI,GAAG,UAAQ,KAAG,GAAE,KAAG,GAAE,MAAK;AAAC,kBAAI,KAAG,KAAG;AAAE,kBAAG,KAAG,KAAG,MAAI,EAAE;AAAS,kBAAI,KAAG,KAAG,KAAG,EAAE,CAAC,GAAE,KAAG,KAAG,GAAE,KAAG,KAAK,IAAI,IAAE,GAAE,IAAE,KAAK,MAAM,EAAE,IAAE,KAAK,MAAM,EAAE,CAAC;AAAE,oBAAI,OAAK,KAAG,EAAE,KAAG,CAAC;AAAA,YAAE;AAAA,UAAC;AAAC,YAAE,IAAE,CAAC,IAAE;AAAA,QAAC;AAAA,MAAC;AAAA,IAAC;AAAA,EAAC;AAAC,SAAOA,IAAE,eAAe,EAAE,OAAM,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,MAAK,EAAC,IAAE;AAAE,IAAE,GAAE,SAAS;AAAE,MAAI,IAAE,EAAE,MAAM,QAAO,IAAE,EAAE,eAAe,GAAE,EAAE,KAAK;AAAE,MAAG,MAAI,EAAE,QAAO,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,IAAC,CAAC;AAAE,MAAI,IAAE,IAAI,GAAG,EAAE,OAAM,EAAE,KAAK,GAAE,IAAEA,IAAE,WAAW,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,MAAK,KAAI;AAAC,QAAI,IAAE,EAAE,WAAW,CAAC,GAAE,IAAE,EAAE,MAAM;AAAE,MAAE,QAAQ,OAAG,EAAE,CAAC,IAAE,EAAE,MAAM,CAAC,IAAE,IAAE,EAAE,CAAC,CAAC,GAAE,EAAE,IAAI,EAAE,IAAI,GAAG,CAAC,GAAE,GAAG,CAAC;AAAA,EAAC;AAAC,SAAOA,IAAE,eAAe,EAAE,OAAM,EAAE,OAAM,EAAE,MAAM;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,CAAC,EAAC,QAAOD,KAAE,OAAM,GAAE,SAAQC,IAAC,MAAI;AAAC,MAAG,EAAC,OAAM,EAAC,IAAED,KAAE,EAAC,SAAQ,GAAE,WAAU,GAAE,QAAO,EAAC,IAAE,GAAE,IAAEC,KAAE,IAAE,EAAE,uBAAuB,EAAE,OAAM,EAAE,cAAc,EAAE,KAAK,CAAC,GAAE,CAAC,GAAE,GAAE,GAAE,CAAC,IAAE,EAAE,OAAM,CAAC,GAAE,CAAC,IAAE,EAAE,eAAe,GAAE,GAAE,CAAC,GAAE,IAAE,KAAI,IAAE,KAAK,IAAI,CAAC,GAAE,IAAE,KAAK,IAAI,CAAC,GAAE,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE;AAAO,WAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,QAAI,IAAE,IAAE,IAAE,IAAE;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,UAAI,IAAE,KAAG,IAAE;AAAG,eAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,YAAI,IAAE,IAAE;AAAE,iBAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,cAAI,IAAE,CAAC,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,KAAG,IAAE,KAAG,KAAG,IAAE,KAAG,GAAE,KAAG,IAAE,KAAG,KAAG,IAAE,KAAG;AAAE,cAAE,KAAK,MAAM,IAAE,CAAC,GAAE,IAAE,KAAK,MAAM,IAAE,CAAC;AAAE,cAAI,IAAE;AAAE,cAAG,OAAO,KAAG,aAAW,MAAI,IAAE,IAAE,IAAE,IAAE,EAAE,CAAC,IAAG,KAAG,KAAG,IAAE,KAAG,KAAG,KAAG,IAAE,GAAE;AAAC,gBAAI,IAAE,KAAG,IAAE,IAAG,IAAE,IAAE,GAAE,IAAE,IAAE,IAAE,IAAE;AAAE,gBAAE,EAAE,CAAC;AAAA,UAAC;AAAC,cAAI,IAAE,IAAE,IAAE,IAAE;AAAE,YAAE,CAAC,IAAE;AAAA,QAAC;AAAA,MAAC;AAAA,IAAC;AAAA,EAAC;AAAC,SAAM,EAAC,QAAO,EAAE,MAAM,GAAE,EAAE,OAAM,EAAE,KAAK,GAAE,OAAM,EAAE,OAAM,OAAM,EAAE,MAAK;AAAC,EAAC;AAAE,IAAI,KAAG,GAAG,IAAG,CAAAD,QAAG;AAAC,MAAI,IAAE,KAAK,MAAMA,GAAC;AAAE,SAAOA,MAAE,IAAE,MAAG,KAAK,MAAMA,GAAC,IAAEA,MAAE,IAAE,MAAG,KAAK,KAAKA,GAAC,IAAE,IAAE,MAAI,IAAE,IAAE,IAAE;AAAC,CAAC;AAAnG,IAAqG,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,SAAQ,GAAE,SAAQ,EAAC,IAAE,GAAE,EAAC,OAAM,EAAC,IAAE,GAAE,EAAC,WAAU,GAAE,YAAW,GAAE,WAAU,GAAE,SAAQ,GAAE,YAAW,EAAC,IAAE,EAAE,gBAAgB,GAAE,GAAE,CAAC,GAAE,IAAE,MAAG,IAAEC,IAAE,WAAW,CAAC,GAAE,IAAEA,IAAE,WAAW,CAAC,GAAE,IAAE,GAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,SAAOA,IAAE,eAAe,GAAE,EAAE,OAAM,EAAE,MAAM;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,GAAE,IAAED,IAAE,QAAO,IAAE;AAAE,SAAKC,MAAE,IAAG,KAAE,KAAK,OAAOA,MAAE,KAAG,CAAC,GAAED,IAAE,CAAC,IAAE,IAAEC,MAAE,IAAE,IAAE,IAAE;AAAE,SAAO;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,GAAE,IAAED,IAAE,QAAO,IAAE;AAAE,SAAKC,MAAE,IAAG,KAAE,KAAK,OAAOA,MAAE,KAAG,CAAC,GAAED,IAAE,CAAC,KAAG,IAAEC,MAAE,IAAE,IAAE,IAAE;AAAE,SAAO;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE;AAAC,MAAI,IAAE,EAAE,kBAAkB,SAAQA,MAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAEA,KAAE,EAAE,GAAE;AAAC,QAAI,IAAED,IAAE,MAAM,IAAE,IAAG,IAAE,KAAG,CAAC,GAAE,IAAE,IAAE;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,EAAE,GAAE,IAAE,CAAC,IAAE,MAAI,SAAO,GAAG,GAAE,EAAE,IAAE,CAAC,CAAC,IAAE,GAAG,GAAE,EAAE,IAAE,CAAC,CAAC;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,gBAAe,GAAE,QAAO,EAAC,IAAE,GAAE,EAAC,MAAK,EAAC,IAAE,GAAE,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,GAAG,GAAE,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,CAAC;AAAE,SAAOA,IAAE,eAAe,EAAE,OAAM,SAAQ,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,WAAU,GAAE,GAAE,GAAE,GAAE,EAAC,IAAE;AAAE,IAAE,CAAC,GAAE,GAAE,CAAC,GAAE,QAAQ;AAAE,MAAI,IAAE,EAAE,MAAM,QAAO,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,GAAG,EAAE,OAAM,EAAE,KAAK,GAAE,IAAE,EAAE,oBAAoB,EAAE,cAAc,EAAE,KAAK,GAAE,CAAC,GAAE,IAAE,GAAE,IAAE,MAAI,KAAG,IAAE,KAAG,EAAE,MAAM,WAAS,IAAE,IAAE,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,IAAI,UAAQ,IAAE,GAAE,IAAE,GAAE,IAAI,GAAE,CAAC,MAAI,IAAE,EAAE,GAAG,IAAE,EAAE,CAAC,IAAE,EAAE,GAAG,IAAE,EAAE,CAAC;AAAE,SAAOA,IAAE,eAAe,EAAE,OAAM,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,EAAE;AAAT,IAAyB,KAAG,EAAE;AAA9B,IAAyC,KAAG,GAAG,IAAG,CAAAD,QAAGA,OAAG,IAAE,KAAGA,MAAE,MAAI,KAAK,IAAIA,GAAC,IAAE,EAAE;AAAjF,IAAmF,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,IAAG,CAAAA,QAAGA,MAAE,IAAE,KAAGA,MAAE,IAAE,IAAE,CAAC;AAA9B,IAAgC,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,IAAG,CAAAA,QAAG,KAAK,IAAIA,GAAC,CAAC;AAA3B,IAA6B,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,IAAG,CAAAA,QAAG,KAAK,KAAKA,GAAC,CAAC;AAA5B,IAA8B,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG;AAAP,IAA6B,KAAG,KAAK,IAAI,EAAE,IAAE;AAA7C,IAA+C,KAAG,GAAG,IAAG,CAAAA,QAAG;AAAC,MAAI,IAAEA,MAAE,CAAC,IAAGC,MAAED,MAAE,IAAG,IAAE,KAAK,IAAIA,GAAC,GAAE;AAAE,SAAOC,MAAE,IAAE,IAAE,IAAE,IAAED,MAAE,IAAE,KAAK,IAAI,IAAE,CAAC,GAAE;AAAC,CAAC;AAApI,IAAsI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,YAAW,GAAE,UAAS,EAAC,IAAE;AAAE,IAAE,CAAC,CAAC,GAAE,gBAAgB;AAAE,MAAI,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,CAAC,CAAC,GAAE,CAAC,CAAC;AAAE,IAAE,KAAK,GAAG,CAAC;AAAE,WAAQ,IAAE,IAAE,EAAE,QAAO,IAAE,EAAE,MAAM,QAAO,EAAE,EAAE,GAAE,KAAK,CAAC,GAAE,CAAC,CAAC;AAAE,MAAI,IAAE,GAAG,WAAW,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,UAAS,GAAE,eAAc,EAAC,EAAC,CAAC,GAAE,IAAE,EAAE,YAAY,EAAE,OAAM,GAAE,GAAE,KAAE,GAAE,IAAE,EAAE,YAAY,EAAE,QAAO,EAAE,QAAO,KAAE,GAAE,IAAE,EAAE,oBAAoB,EAAE,OAAM,GAAE,GAAE,KAAE,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,SAAOA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,SAAQ,GAAE,QAAO,GAAE,YAAW,GAAE,cAAa,EAAC,IAAE;AAAE,MAAG,EAAE,MAAM,WAAS,EAAE,OAAM,IAAI,MAAM;AAAA,UAC5ixG,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,MAAM,WAAS,EAAE,OAAM,IAAI,MAAM;AAAA,UACjD,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,MAAM,WAAS,EAAE,OAAM,IAAI,MAAM;AAAA,UACjD,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,MAAM,WAAS,EAAE,OAAM,IAAI,MAAM;AAAA,UACjD,EAAE,KAAK,EAAE;AAAE,MAAI,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,GAAE,CAAC,GAAE,GAAE,GAAE,GAAE,CAAC,IAAE,GAAG,GAAE,EAAE,OAAM,EAAE,OAAM,GAAE,EAAE,OAAM,GAAE,CAAC;AAAE,SAAM,CAACA,IAAE,eAAe,GAAE,EAAE,OAAM,CAAC,GAAEA,IAAE,eAAe,CAAC,EAAE,CAAC,CAAC,GAAE,EAAE,OAAM,CAAC,GAAEA,IAAE,eAAe,CAAC,EAAE,MAAM,GAAE,QAAO,IAAI,WAAW,EAAE,IAAI,OAAG,OAAO,CAAC,CAAC,CAAC,CAAC,GAAEA,IAAE,eAAe,CAAC,EAAE,MAAM,GAAE,EAAE,OAAM,IAAI,WAAW,CAAC,CAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,cAAa,GAAE,YAAW,GAAE,UAAS,EAAC,IAAE;AAAE,MAAG,EAAE,MAAM,WAAS,EAAE,OAAM,IAAI,MAAM;AAAA,UACnjB,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,MAAM,WAAS,EAAE,OAAM,IAAI,MAAM;AAAA,UACjD,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,MAAM,WAAS,EAAE,OAAM,IAAI,MAAM,sDAAsD,EAAE,KAAK,EAAE;AAAE,MAAI,IAAE,MAAM,KAAKC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,MAAM,KAAKA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,CAAC,GAAE,GAAE,CAAC,IAAE,GAAG,GAAE,EAAE,OAAM,EAAE,OAAM,GAAE,CAAC;AAAE,SAAM,CAACA,IAAE,eAAe,GAAE,EAAE,OAAM,CAAC,GAAEA,IAAE,eAAe,CAAC,EAAE,MAAM,GAAE,EAAE,OAAM,IAAI,WAAW,CAAC,CAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,MAAK,GAAE,SAAQ,GAAE,YAAW,EAAC,IAAE;AAAE,MAAG,EAAE,MAAM,SAAO,EAAE,OAAM,IAAI,MAAM,2DAA2D;AAAE,MAAG,EAAE,MAAM,WAAS,EAAE,OAAM,IAAI,MAAM;AAAA,YAC9mB,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,MAAM,WAAS,EAAE,OAAM,IAAI,MAAM;AAAA,YACjD,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,MAAM,CAAC,MAAI,EAAE,MAAM,CAAC,EAAE,OAAM,IAAI,MAAM,+CAA+C;AAAE,MAAI,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,CAAC,GAAE,CAAC,IAAE,GAAG,GAAE,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,IAAE;AAAE,SAAOA,IAAE,eAAe,GAAE,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,MAAK,GAAE,SAAQ,GAAE,YAAW,EAAC,IAAE;AAAE,MAAG,EAAE,MAAM,SAAO,EAAE,OAAM,IAAI,MAAM,2DAA2D;AAAE,MAAG,EAAE,MAAM,WAAS,EAAE,OAAM,IAAI,MAAM;AAAA,WACvhB,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,MAAM,WAAS,EAAE,OAAM,IAAI,MAAM;AAAA,WACjD,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,MAAM,CAAC,MAAI,EAAE,MAAM,CAAC,EAAE,OAAM,IAAI,MAAM,+CAA+C;AAAE,MAAI,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,CAAC,GAAE,CAAC,IAAE,GAAG,GAAE,EAAE,OAAM,EAAE,OAAM,GAAE,CAAC;AAAE,SAAOA,IAAE,eAAe,GAAE,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,eAAc,GAAE,cAAa,GAAE,cAAa,EAAC,IAAE,GAAE,EAAC,aAAY,EAAC,IAAE,GAAE,EAAC,WAAU,GAAE,YAAW,GAAE,WAAU,GAAE,SAAQ,GAAE,YAAW,EAAC,IAAE,EAAE,gBAAgB,GAAE,GAAE,CAAC,GAAE,IAAE,OAAG,IAAEC,IAAE,WAAW,CAAC,GAAE;AAAE,UAAO,EAAE,OAAM;AAAA,IAAC,KAAI,QAAO;AAAC,UAAI,IAAEA,IAAE,WAAW,CAAC,GAAE,IAAE,CAAC,CAACA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC;AAAE,UAAE,GAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE;AAAA,IAAK;AAAA,IAAC,KAAI,WAAU;AAAC,UAAI,IAAEA,IAAE,WAAW,CAAC,GAAE,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC;AAAE,UAAE,GAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE;AAAA,IAAK;AAAA,IAAC,KAAI,SAAQ;AAAC,UAAI,IAAEA,IAAE,WAAW,CAAC,GAAE,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC;AAAE,UAAE,GAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE;AAAA,IAAK;AAAA,IAAC,KAAI,UAAS;AAAC,UAAI,IAAEA,IAAE,WAAW,CAAC,GAAE,IAAE,EAAE,aAAaA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;AAAE,UAAE,GAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE;AAAA,IAAK;AAAA,IAAC;AAAQ,YAAM,IAAI,MAAM,oBAAoB,EAAE,KAAK,EAAE;AAAA,EAAC;AAAC,SAAOA,IAAE,eAAe,GAAE,EAAE,OAAM,EAAE,MAAM;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,iBAAgB,GAAE,MAAK,EAAC,IAAE,GAAE,IAAE,EAAE,eAAe,GAAE,EAAE,KAAK,EAAE,CAAC,GAAE,IAAE,EAAE,iBAAiB,GAAE,GAAE,CAAC,GAAE,IAAE,IAAI,MAAM,EAAE,MAAM,MAAM,EAAE,KAAK,CAAC,GAAE,IAAE,EAAE,MAAM,MAAM;AAAE,SAAO,EAAE,IAAI,OAAG;AAAC,QAAI,IAAE,CAAC,GAAG,CAAC;AAAE,MAAE,CAAC,IAAE;AAAE,QAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,OAAM,GAAE,MAAK,EAAC,EAAC,CAAC;AAAE,WAAO,EAAE,CAAC,KAAG,GAAE;AAAA,EAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,CAAC,EAAC,QAAOD,KAAE,SAAQ,EAAC,MAAI;AAAC,MAAG,EAAC,GAAEC,IAAC,IAAED,KAAE,IAAE;AAAE,IAAEC,KAAE,QAAQ;AAAE,MAAI,IAAE,EAAE,KAAK,IAAIA,IAAE,MAAM,EAAE,QAAO,IAAE,IAAI,aAAa,EAAE,MAAM;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE,GAAE;AAAC,QAAI,IAAE,EAAE,CAAC;AAAE,MAAE,CAAC,IAAE,IAAE;AAAA,EAAC;AAAC,SAAM,EAAC,QAAO,EAAE,MAAM,GAAEA,IAAE,OAAMA,IAAE,KAAK,GAAE,OAAMA,IAAE,OAAM,OAAMA,IAAE,MAAK;AAAC,EAAC;AAAE,IAAI,KAAG,GAAG,IAAG,CAACD,KAAE,MAAI;AAAC,MAAIC,MAAE;AAAE,SAAO,MAAMD,GAAC,IAAE,MAAIA,MAAE,IAAE,IAAEC,IAAE;AAAK,CAAC;AAA/D,IAAiE,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,OAAM,GAAE,KAAI,GAAE,SAAQ,GAAE,WAAU,GAAE,SAAQ,GAAE,cAAa,GAAE,aAAY,GAAE,gBAAe,EAAC,IAAE;AAAE,IAAE,GAAE,cAAc;AAAE,MAAG,EAAC,kBAAiB,GAAE,YAAW,GAAE,YAAW,GAAE,WAAU,GAAE,eAAc,GAAE,OAAM,GAAE,KAAI,GAAE,SAAQ,EAAC,IAAE,GAAG,UAAU,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE;AAAE,MAAG,EAAE,KAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAA,WAAU,KAAG,GAAE;AAAC,MAAE,OAAO,EAAE,MAAM,UAAQ,GAAE,MAAI,yCAAyC,EAAE,MAAM,MAAM,EAAE;AAAE,QAAI,IAAE,GAAG,gBAAgB,GAAE,GAAE,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,GAAE,MAAK,EAAC,EAAC,CAAC;AAAE,QAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAEA,IAAE,8BAA8B,CAAC;AAAA,EAAC,OAAK;AAAC,QAAI,IAAEA,IAAE,WAAW,CAAC,GAAE,IAAE,GAAG,GAAE,GAAE,GAAE,CAAC;AAAE,QAAEA,IAAE,eAAe,GAAE,EAAE,OAAM,EAAE,MAAM;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,WAAU,GAAE,aAAY,GAAE,SAAQ,GAAE,UAAS,GAAE,UAAS,GAAE,wBAAuB,EAAC,IAAE,GAAE,EAAC,MAAK,GAAE,YAAW,EAAC,IAAE,GAAE,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,CAAC,GAAE,CAAC,IAAE,GAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,SAAM,CAACA,IAAE,eAAe,CAAC,EAAE,MAAM,GAAE,UAAS,CAAC,GAAEA,IAAE,eAAe,EAAE,OAAM,SAAQ,CAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,WAAU,EAAC,IAAE,GAAE,EAAC,OAAM,GAAE,WAAU,EAAC,IAAE;AAAE,MAAG,EAAE,UAAQ,SAAS,OAAM,IAAI,MAAM,kCAAkC;AAAE,MAAG,EAAE,MAAM,WAAS,EAAE,OAAM,IAAI,MAAM,sCAAsC,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,MAAM,WAAS,EAAE,OAAM,IAAI,MAAM,0CAA0C,EAAE,KAAK,EAAE;AAAE,MAAI,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,IAAE,GAAG,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE;AAAO,SAAM,CAACA,IAAE,eAAe,CAAC,GAAE,CAAC,GAAE,SAAQ,CAAC,GAAEA,IAAE,eAAe,CAAC,CAAC,GAAE,UAAS,CAAC,GAAEA,IAAE,eAAe,CAAC,CAAC,GAAE,SAAQ,IAAI,WAAW,CAAC,CAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,YAAW,EAAC,IAAE,GAAE,EAAC,OAAM,EAAC,IAAE;AAAE,MAAG,EAAE,UAAQ,SAAS,OAAM,IAAI,MAAM,kCAAkC;AAAE,MAAG,KAAG,EAAE,OAAM,IAAI,MAAM,sCAAsC;AAAE,MAAI,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,GAAG,GAAE,CAAC;AAAE,SAAOA,IAAE,eAAe,EAAE,OAAM,SAAQ,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,IAAG,CAAAD,QAAG,KAAK,IAAIA,GAAC,CAAC;AAA3B,IAA6B,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,IAAG,CAAAA,QAAG,KAAK,KAAKA,GAAC,CAAC;AAA5B,IAA8B,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,QAAO,GAAE,SAAQ,GAAE,SAAQ,EAAC,IAAE,GAAE,EAAC,WAAU,GAAE,YAAW,GAAE,WAAU,GAAE,SAAQ,GAAE,YAAW,EAAC,IAAE,EAAE,gBAAgB,GAAE,GAAE,EAAE,KAAK,GAAE,IAAE,OAAG,IAAEC,IAAE,WAAW,CAAC,GAAE,IAAEA,IAAE,WAAW,CAAC,GAAE,IAAEA,IAAE,WAAW,CAAC,GAAE,IAAE,GAAG,GAAE,GAAE,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,SAAOA,IAAE,eAAe,EAAE,OAAM,EAAE,OAAM,EAAE,MAAM;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,MAAK,EAAC,IAAE;AAAE,IAAE,GAAE,MAAM;AAAE,MAAI,IAAE,GAAGC,IAAE,WAAW,CAAC,GAAE,CAAC;AAAE,SAAOA,IAAE,eAAe,EAAE,OAAM,EAAE,OAAM,EAAE,MAAM;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,GAAE,GAAE,QAAO,EAAC,IAAE;AAAE,IAAE,GAAE,MAAM;AAAE,MAAI,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,CAAC,GAAE,CAAC,IAAE,GAAG,GAAE,EAAE,OAAM,EAAE,OAAM,GAAE,CAAC;AAAE,SAAM,CAACA,IAAE,eAAe,EAAE,OAAM,EAAE,OAAM,EAAE,MAAM,GAAEA,IAAE,eAAe,EAAE,OAAM,EAAE,OAAM,EAAE,MAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,OAAMC,KAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,OAAM,GAAE,YAAW,EAAC,IAAE,GAAE,EAAC,eAAc,GAAE,UAAS,GAAE,WAAU,GAAE,aAAY,EAAC,IAAEC,KAAE,CAAC,GAAE,GAAE,GAAE,CAAC,IAAE,EAAE,OAAM,CAAC,GAAE,CAAC,IAAE,KAAG,OAAK,IAAE,CAAC,GAAE,CAAC,GAAE,IAAE,CAAC,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,eAAe,EAAE,KAAK,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,eAAe,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,uBAAuB,EAAE,OAAM,EAAE,cAAc,CAAC,CAAC;AAAE,IAAE,KAAK,CAAC;AAAE,MAAI,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE;AAAO,WAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,QAAI,IAAE,EAAE,MAAM,CAAC,MAAI,IAAE,IAAE,EAAE,SAAS,IAAE,GAAE,IAAE,IAAE,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,EAAE,UAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,EAAE,UAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,UAAI,GAAE,IAAE,EAAE,CAAC,IAAE,IAAE,EAAE,CAAC,IAAE,IAAE;AAAE,UAAG,MAAI,EAAE;AAAS,UAAI,KAAG,EAAE,CAAC,IAAE,IAAE,EAAE,CAAC,IAAE,IAAE,EAAE,CAAC,KAAG,GAAE,MAAI,EAAE,CAAC,IAAE,IAAE,EAAE,CAAC,IAAE,IAAE,EAAE,CAAC,KAAG,GAAE,KAAG,GAAG,GAAE,GAAE,CAAC,GAAE,KAAG,GAAG,IAAG,GAAE,CAAC;AAAE,cAAO,GAAE;AAAA,QAAC,KAAI;AAAU,cAAE,GAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,IAAG,IAAG,GAAE,CAAC;AAAE;AAAA,QAAM,KAAI;AAAW,cAAE,GAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,IAAG,IAAG,GAAE,CAAC;AAAE;AAAA,QAAM;AAAQ,gBAAM,IAAI,MAAM,+DAA+D,CAAC,EAAE;AAAA,MAAC;AAAC,UAAI,KAAG,IAAE,IAAE,IAAE,IAAE,IAAE,IAAE;AAAE,QAAE,EAAE,IAAE;AAAA,IAAC;AAAC,WAAO,EAAE,eAAe,GAAE,EAAE,OAAM,CAAC;AAAA,EAAC;AAAC,SAAM,EAAC,QAAO,EAAE,MAAM,GAAE,GAAE,EAAE,KAAK,GAAE,OAAM,EAAE,OAAM,OAAM,EAAE,MAAK;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,UAAOA,KAAE;AAAA,IAAC,KAAI;AAAU,aAAO,GAAGD,KAAE,CAAC;AAAA,IAAE,KAAI;AAAO,aAAO,GAAGA,KAAE,CAAC;AAAA,IAAE,KAAI;AAAU,aAAO,GAAGA,KAAE,CAAC;AAAA,IAAE,KAAI;AAAA,IAAW;AAAQ,aAAO,GAAGA,KAAE,CAAC;AAAA,EAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAIC,MAAED;AAAE,MAAGC,MAAE,EAAE,KAAG,KAAG,EAAE,CAAAA,MAAE;AAAA,OAAM;AAAC,QAAI,IAAE,IAAE;AAAE,IAAAA,MAAE,MAAIA,MAAE,IAAE,KAAK,MAAM,CAACA,MAAE,CAAC,IAAEA,MAAGA,MAAEA,MAAE,CAAC,IAAEA,MAAE,IAAE,CAACA,MAAE;AAAA,EAAC;AAAA,WAASA,MAAE,IAAE,EAAE,KAAG,KAAG,EAAE,CAAAA,MAAE;AAAA,OAAM;AAAC,QAAI,IAAE,IAAE;AAAE,IAAAA,OAAG,IAAE,KAAK,MAAMA,MAAE,CAAC,GAAEA,OAAG,MAAIA,MAAE,IAAEA,MAAE;AAAA,EAAE;AAAC,SAAO,EAAE,MAAM,GAAEA,KAAE,IAAE,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAED;AAAE,MAAGC,MAAE,EAAE,KAAG,KAAG,EAAE,CAAAA,MAAE;AAAA,OAAM;AAAC,QAAI,IAAE,IAAE;AAAE,IAAAA,OAAG,KAAG,KAAK,MAAM,CAACA,MAAE,CAAC,IAAE;AAAA,EAAE;AAAA,WAASA,MAAE,IAAE,EAAE,KAAG,KAAG,EAAE,CAAAA,MAAE;AAAA,OAAM;AAAC,QAAI,IAAE,IAAE;AAAE,IAAAA,OAAG,IAAE,KAAK,MAAMA,MAAE,CAAC;AAAA,EAAC;AAAC,SAAO,EAAE,MAAM,GAAEA,KAAE,IAAE,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,SAAOA;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,SAAO,EAAE,MAAM,GAAEA,KAAE,IAAE,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE;AAAC,MAAI,IAAE,IAAE,IAAE,IAAE,IAAE,IAAE,IAAE;AAAE,SAAO,KAAG,KAAG,IAAE,KAAG,KAAG,KAAG,IAAEA,MAAED,IAAE,CAAC,IAAE;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE;AAAC,MAAI,IAAE,KAAK,MAAM,CAAC,GAAE,IAAE,KAAK,MAAM,CAAC;AAAE,SAAO,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE;AAAC,MAAI,IAAE,KAAK,MAAM,CAAC,GAAE,IAAE,KAAK,MAAM,CAAC,GAAE,IAAE,IAAE,GAAE,IAAE,IAAE,GAAE,KAAG,IAAE,KAAG,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,KAAG,IAAE,KAAG,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,KAAG,IAAE,KAAG,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,KAAG,IAAE,KAAG,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,UAAO,IAAE,KAAG,KAAG,IAAE,KAAG;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,OAAMC,KAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,MAAK,EAAC,IAAEC,KAAE,EAAC,GAAE,EAAC,IAAE;AAAE,IAAE,GAAE,QAAQ;AAAE,MAAI,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,EAAC,cAAa,GAAE,aAAY,GAAE,SAAQ,EAAC,IAAE,GAAG,GAAE,GAAE,EAAE,OAAM,EAAE,KAAK;AAAE,SAAM,CAAC,EAAE,eAAe,GAAE,EAAE,OAAM,CAAC,GAAE,EAAE,eAAe,CAAC,EAAE,MAAM,GAAE,SAAQ,CAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,EAAC,IAAE,GAAE,EAAC,MAAK,EAAC,IAAE;AAAE,MAAE,MAAI,KAAG,EAAE,MAAM;AAAQ,MAAI,IAAE,EAAE,MAAM,QAAO,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,IAAI,MAAM,IAAE,CAAC,GAAE,IAAE;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,IAAI,OAAI,MAAI,EAAE,GAAG,IAAE,EAAE,MAAM,CAAC;AAAG,MAAI,IAAE,IAAI,MAAM,CAAC,EAAE,KAAK,CAAC,GAAE,IAAE,EAAE,MAAM,MAAM;AAAE,IAAE,CAAC,IAAE;AAAE,MAAI,IAAE,IAAI,MAAM,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,KAAI;AAAC,MAAE,CAAC,IAAE;AAAE,QAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,OAAM,GAAE,MAAK,EAAC,EAAC,CAAC;AAAE,MAAE,CAAC,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAEA,IAAE,8BAA8B,CAAC;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,YAAW,EAAC,IAAE,GAAE,EAAC,aAAY,EAAC,IAAE;AAAE,IAAE,GAAE,oBAAoB;AAAE,MAAI,IAAE,EAAE,MAAM,QAAO,IAAE,EAAE,MAAM,QAAO,IAAE,CAAC,GAAE,IAAE,CAAC,GAAE,IAAE,IAAE,GAAE,IAAE;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,QAAI,IAAE,GAAG,EAAC,QAAO,EAAC,OAAM,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,KAAI,IAAE,EAAC,EAAC,CAAC;AAAE,QAAE,GAAE,EAAE,KAAK,CAAC;AAAA,EAAC;AAAC,WAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,QAAI,IAAE,EAAE,kBAAkB,GAAE,OAAO,GAAE,IAAEA,IAAE,eAAe,CAAC,GAAE,SAAQ,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,GAAE,GAAE,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,UAAS,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,GAAE,GAAE,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,MAAK,GAAE,UAAS,MAAE,EAAC,CAAC;AAAE,MAAE,KAAK,CAAC,GAAE,EAAE,KAAK,CAAC,GAAE,EAAE,KAAK,CAAC,GAAE,EAAE,KAAK,CAAC,GAAE,EAAE,KAAK,CAAC,GAAE,EAAE,KAAK,CAAC;AAAA,EAAC;AAAC,MAAI,IAAE,GAAG,EAAC,QAAO,GAAE,SAAQA,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC;AAAE,SAAO,EAAE,QAAQ,OAAGA,IAAE,8BAA8B,CAAC,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,CAAC,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,EAAE;AAAE,SAAQD,OAAK,GAAG,IAAGA,GAAC;AAAE,IAAI,KAAG,CAAC;AAAE,GAAG,IAAG,EAAC,kBAAiB,MAAI,IAAG,yBAAwB,MAAI,IAAG,+BAA8B,MAAI,IAAG,oCAAmC,MAAI,IAAG,iBAAgB,MAAI,IAAG,oCAAmC,MAAI,IAAG,cAAa,MAAI,IAAG,kBAAiB,MAAI,IAAG,sBAAqB,MAAI,IAAG,mBAAkB,MAAI,IAAG,eAAc,MAAI,IAAG,yBAAwB,MAAI,IAAG,0BAAyB,MAAI,IAAG,eAAc,MAAI,IAAG,oBAAmB,MAAI,IAAG,aAAY,MAAI,IAAG,qBAAoB,MAAI,IAAG,4BAA2B,MAAI,IAAG,wBAAuB,MAAI,IAAG,gBAAe,MAAI,IAAG,2BAA0B,MAAI,IAAG,kCAAiC,MAAI,IAAG,aAAY,MAAI,IAAG,cAAa,MAAI,IAAG,iCAAgC,MAAI,IAAG,mCAAkC,MAAI,IAAG,sBAAqB,MAAI,IAAG,wBAAuB,MAAI,IAAG,cAAa,MAAI,IAAG,oCAAmC,MAAI,IAAG,+BAA8B,MAAI,IAAG,eAAc,MAAI,IAAG,qBAAoB,MAAI,IAAG,uBAAsB,MAAI,IAAG,aAAY,MAAI,IAAG,2BAA0B,MAAI,IAAG,qBAAoB,MAAI,IAAG,0BAAyB,MAAI,IAAG,mCAAkC,MAAI,IAAG,mBAAkB,MAAI,IAAG,qBAAoB,MAAI,IAAG,iBAAgB,MAAI,IAAG,qBAAoB,MAAI,GAAE,CAAC;AAAE,IAAI,KAAG,CAAC;AAAR,IAAU,KAAG,EAAC,OAAM,OAAG,WAAU,OAAG,oBAAmB,OAAG,uBAAsB,OAAG,OAAM,OAAG,SAAQ,OAAG,8BAA6B,KAAE;AAAE,SAAS,GAAGA,KAAE,GAAE;AAAC,KAAGA,GAAC,IAAE;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAG,EAAEA,OAAK,OAAK,KAAG,MAAK;AAAC,QAAI,IAAE,GAAGA,KAAE,CAAC;AAAE,QAAG,MAAI,KAAK,IAAGA,GAAC,IAAE;AAAA,QAAO,QAAO,QAAQ,IAAI,2CAA0CA,GAAC,GAAE;AAAA,EAAI;AAAC,MAAIC,MAAE,GAAGD,GAAC;AAAE,SAAOC,OAAG,QAAMA,IAAE,cAAc,KAAG,OAAO,GAAGD,GAAC,GAAE,GAAGA,GAAC,MAAIC,IAAE,QAAQA,IAAE,UAAU,GAAEA,IAAE,QAAQA,IAAE,YAAY,GAAEA,IAAE,QAAQA,IAAE,KAAK,GAAEA,IAAE,QAAQA,IAAE,MAAM,GAAEA,IAAE,QAAQA,IAAE,mBAAmB,GAAEA,IAAE,QAAQA,IAAE,eAAe,GAAEA,IAAE,OAAOA,IAAE,YAAY,GAAEA,IAAE,OAAOA,IAAE,SAAS,GAAEA,IAAE,SAASA,IAAE,IAAI,GAAE,GAAGD,GAAC;AAAE;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAG,CAAC,EAAE,EAAE,QAAQ,WAAW,KAAG,OAAO,mBAAiB,eAAaA,QAAI,EAAE,QAAO,IAAI,gBAAgB,KAAI,GAAG;AAAE,MAAG,OAAO,YAAU,YAAY,QAAO,SAAS,cAAc,QAAQ;AAAE,QAAM,IAAI,MAAM,wCAAwC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAGA,QAAI,KAAGA,QAAI,EAAE,OAAM,IAAI,MAAM,wDAAwD;AAAE,MAAIC,MAAE,KAAG,OAAK,GAAGD,GAAC,IAAE;AAAE,SAAOC,IAAE,iBAAiB,oBAAmB,OAAG;AAAC,MAAE,eAAe,GAAE,OAAO,GAAGD,GAAC;AAAA,EAAC,GAAE,KAAE,GAAE,EAAE,EAAE,QAAQ,wBAAwB,MAAI,GAAG,+BAA6B,QAAIA,QAAI,IAAEC,IAAE,WAAW,SAAQ,EAAE,KAAGA,IAAE,WAAW,sBAAqB,EAAE,IAAEA,IAAE,WAAW,UAAS,EAAE;AAAC;AAAC,IAAI;AAAA,CAAI,SAASD,KAAE;AAAC,EAAAA,IAAEA,IAAE,QAAM,CAAC,IAAE,SAAQA,IAAEA,IAAE,eAAa,CAAC,IAAE;AAAc,GAAG,OAAK,KAAG,CAAC,EAAE;AAAE,IAAI;AAAA,CAAI,SAASA,KAAE;AAAC,EAAAA,IAAEA,IAAE,SAAO,CAAC,IAAE,UAASA,IAAEA,IAAE,SAAO,CAAC,IAAE,UAASA,IAAEA,IAAE,SAAO,CAAC,IAAE,UAASA,IAAEA,IAAE,WAAS,CAAC,IAAE;AAAU,GAAG,OAAK,KAAG,CAAC,EAAE;AAAE,IAAI;AAAA,CAAI,SAASA,KAAE;AAAC,EAAAA,IAAEA,IAAE,mBAAiB,CAAC,IAAE,oBAAmBA,IAAEA,IAAE,mBAAiB,CAAC,IAAE,oBAAmBA,IAAEA,IAAE,2BAAyB,CAAC,IAAE,4BAA2BA,IAAEA,IAAE,qBAAmB,CAAC,IAAE,sBAAqBA,IAAEA,IAAE,qBAAmB,CAAC,IAAE;AAAoB,GAAG,OAAK,KAAG,CAAC,EAAE;AAAE,SAAS,GAAGA,KAAE,GAAE;AAAC,SAAM,CAAC,GAAEA,GAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,SAAOA,MAAE;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAI,IAAE,EAAE,cAAcA,GAAC,GAAEC,MAAE,KAAK,KAAK,IAAE,CAAC;AAAE,SAAO,EAAE,oBAAoBA,GAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,SAAM,CAAC,KAAK,IAAI,GAAE,KAAK,KAAK,IAAE,CAAC,CAAC,GAAE,KAAK,IAAI,GAAE,KAAK,KAAKA,MAAE,CAAC,CAAC,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAG,CAACC,KAAE,CAAC,IAAE,GAAGD,KAAE,CAAC;AAAE,SAAOC,MAAE,IAAE;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAED,KAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE;AAAE,SAAO,EAAE,EAAE,UAAU,eAAe,MAAI,KAAG,IAAEC,IAAE,MAAK,IAAEA,IAAE,MAAK,IAAEA,IAAE,SAAQ,IAAEA,IAAE,SAAQ,IAAEA,IAAE,KAAI,IAAE,GAAE,IAAE,GAAE,IAAEA,IAAE,YAAW,IAAEA,IAAE,OAAM,IAAEA,IAAE,UAAQ,IAAED,IAAE,MAAK,IAAEA,IAAE,MAAK,IAAEA,IAAE,MAAK,IAAEC,IAAE,MAAK,IAAED,IAAE,MAAK,IAAE,GAAE,IAAE,GAAE,IAAE,KAAG,OAAK,EAAE,iBAAe,MAAK,IAAEA,IAAE,OAAM,IAAEA,IAAE,OAAM,EAAC,qBAAoB,GAAE,yBAAwB,GAAE,+BAA8B,GAAE,2BAA0B,GAAE,oBAAmB,GAAE,uBAAsB,GAAE,2BAA0B,GAAE,oBAAmB,GAAE,sBAAqB,GAAE,kBAAiB,EAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAE;AAAE,SAAO,EAAE,EAAE,QAAQ,OAAO,KAAG,GAAGD,GAAC,GAAEC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAI,IAAEA,IAAE,SAAS;AAAE,MAAG,MAAIA,IAAE,SAAS,OAAM,IAAI,MAAM,kBAAgB,GAAGA,KAAE,CAAC,CAAC;AAAC;AAAC,IAAI,KAAG;AAAP,IAAe,KAAG;AAAM,SAAS,GAAGA,KAAE;AAAC,SAAM,CAAC,EAAE,EAAE,EAAE,QAAQ,8BAA8B,KAAGA,QAAI,KAAG,KAAG,KAAK,IAAIA,GAAC,KAAG,KAAK,IAAIA,GAAC,IAAE;AAAG;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,UAAO,GAAE;AAAA,IAAC,KAAKA,IAAE;AAAS,aAAM;AAAA,IAAW,KAAKA,IAAE;AAAa,aAAM;AAAA,IAAe,KAAKA,IAAE;AAAc,aAAM;AAAA,IAAgB,KAAKA,IAAE;AAAkB,aAAM;AAAA,IAAoB,KAAKA,IAAE;AAA8B,aAAM;AAAA,IAAgC,KAAKA,IAAE;AAAc,aAAM;AAAA,IAAgB,KAAKA,IAAE;AAAmB,aAAM;AAAA,IAAqB;AAAQ,aAAM,sBAAsB,CAAC;AAAA,EAAE;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,SAAO,GAAGA,KAAE,MAAIA,IAAE,aAAa,CAAC,GAAE,gBAAc,IAAE,kCAAkC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAIC,MAAE,GAAGD,KAAE,MAAIA,IAAE,aAAaA,IAAE,aAAa,GAAE,sCAAsC;AAAE,MAAG,GAAGA,KAAE,MAAIA,IAAE,aAAaC,KAAE,CAAC,CAAC,GAAE,GAAGD,KAAE,MAAIA,IAAE,cAAcC,GAAC,CAAC,GAAED,IAAE,mBAAmBC,KAAED,IAAE,cAAc,MAAI,MAAG,OAAM,QAAQ,IAAIA,IAAE,iBAAiBC,GAAC,CAAC,GAAE,IAAI,MAAM,kCAAkC;AAAE,SAAOA;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,GAAGD,KAAE,MAAIA,IAAE,aAAaA,IAAE,eAAe,GAAE,wCAAwC;AAAE,MAAG,GAAGA,KAAE,MAAIA,IAAE,aAAaC,KAAE,CAAC,CAAC,GAAE,GAAGD,KAAE,MAAIA,IAAE,cAAcC,GAAC,CAAC,GAAE,EAAE,EAAE,IAAI,qBAAqB,EAAE,QAAOA;AAAE,MAAGD,IAAE,mBAAmBC,KAAED,IAAE,cAAc,MAAI,MAAG,OAAM,GAAG,GAAEA,IAAE,iBAAiBC,GAAC,CAAC,GAAE,IAAI,MAAM,oCAAoC;AAAE,SAAOA;AAAC;AAAC,IAAI,KAAG;AAA2B,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,GAAG,KAAK,CAAC;AAAE,MAAGA,OAAG,MAAK;AAAC,YAAQ,IAAI,wCAAwC,CAAC,EAAE,GAAE,QAAQ,IAAID,GAAC;AAAE;AAAA,EAAM;AAAC,MAAI,IAAE,CAACC,IAAE,CAAC,GAAE,IAAED,IAAE,MAAM;AAAA,CACp5c,GAAE,IAAE,EAAE,OAAO,SAAS,EAAE,SAAO,GAAE,IAAE,EAAE,IAAI,CAAC,GAAE,MAAI,EAAE,UAAU,IAAE,GAAG,SAAS,GAAE,CAAC,IAAE,CAAC,GAAE,IAAE;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,IAAI,KAAE,KAAK,IAAI,EAAE,CAAC,EAAE,QAAO,CAAC;AAAE,MAAI,IAAE,EAAE,MAAM,GAAE,IAAE,CAAC,GAAE,IAAE,EAAE,MAAM,IAAE,GAAE,CAAC,GAAE,IAAE,EAAE,MAAM,CAAC;AAAE,UAAQ,IAAI,EAAE,KAAK;AAAA,CACjN,CAAC,GAAE,QAAQ,IAAI,EAAE,MAAM;AAAA,CACvB,EAAE,CAAC,CAAC,GAAE,QAAQ,IAAI,MAAM,EAAE,SAAS,EAAE,CAAC,GAAE,CAAC,CAAC,IAAG,+DAA+D,GAAE,QAAQ,IAAI,EAAE,KAAK;AAAA,CACjI,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAO,GAAGA,KAAE,MAAIA,IAAE,cAAc,GAAE,gCAAgC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAG,GAAGA,KAAE,MAAIA,IAAE,YAAY,CAAC,CAAC,GAAE,CAAC,EAAE,EAAE,IAAI,qBAAqB,KAAGA,IAAE,oBAAoB,GAAEA,IAAE,WAAW,MAAI,MAAG,OAAM,QAAQ,IAAIA,IAAE,kBAAkB,CAAC,CAAC,GAAE,IAAI,MAAM,6CAA6C;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAG,GAAGA,KAAE,MAAIA,IAAE,gBAAgB,CAAC,CAAC,GAAEA,IAAE,oBAAoB,GAAEA,IAAE,eAAe,MAAI,MAAG,OAAM,QAAQ,IAAIA,IAAE,kBAAkB,CAAC,CAAC,GAAE,IAAI,MAAM,mCAAmC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAIC,MAAE,GAAGD,KAAE,MAAIA,IAAE,aAAa,GAAE,8BAA8B;AAAE,SAAO,GAAGA,KAAE,MAAIA,IAAE,WAAWA,IAAE,cAAaC,GAAC,CAAC,GAAE,GAAGD,KAAE,MAAIA,IAAE,WAAWA,IAAE,cAAa,GAAEA,IAAE,WAAW,CAAC,GAAEC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,GAAGD,KAAE,MAAIA,IAAE,aAAa,GAAE,8BAA8B;AAAE,SAAO,GAAGA,KAAE,MAAIA,IAAE,WAAWA,IAAE,sBAAqBC,GAAC,CAAC,GAAE,GAAGD,KAAE,MAAIA,IAAE,WAAWA,IAAE,sBAAqB,GAAEA,IAAE,WAAW,CAAC,GAAEC;AAAC;AAAC,SAAS,KAAI;AAAC,SAAO,EAAE,EAAE,UAAU,eAAe,MAAI,IAAE,IAAE;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,SAAO,GAAGA,KAAE,MAAIA,IAAE,cAAc,GAAE,gCAAgC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAE,EAAE,UAAU,wBAAwB;AAAE,MAAGD,OAAG,KAAG,KAAG,GAAE;AAAC,QAAI,IAAE,IAAIA,GAAC,IAAI,CAAC;AAAI,UAAM,IAAI,MAAM,4BAA0B,IAAE,cAAc;AAAA,EAAC;AAAC,MAAGA,MAAEC,OAAG,IAAEA,KAAE;AAAC,QAAI,IAAE,IAAID,GAAC,IAAI,CAAC,KAAI,IAAE,IAAIC,GAAC,IAAIA,GAAC;AAAI,UAAM,IAAI,MAAM,4BAA0B,IAAE,uDAAqD,IAAE,GAAG;AAAA,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,SAAO,GAAGA,KAAE,MAAIA,IAAE,kBAAkB,GAAE,oCAAoC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE,GAAE;AAAC,MAAI,IAAED,IAAE,kBAAkB,GAAEC,GAAC;AAAE,SAAO,MAAI,KAAG,SAAI,GAAGD,KAAE,MAAIA,IAAE,WAAWA,IAAE,cAAa,CAAC,CAAC,GAAE,GAAGA,KAAE,MAAIA,IAAE,oBAAoB,GAAE,GAAEA,IAAE,OAAM,OAAG,GAAE,CAAC,CAAC,GAAE,GAAGA,KAAE,MAAIA,IAAE,wBAAwB,CAAC,CAAC,GAAE;AAAG;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,KAAGD,KAAEC,GAAC,GAAE,GAAGD,KAAE,MAAIA,IAAE,cAAcA,IAAE,WAASC,GAAC,CAAC,GAAE,GAAGD,KAAE,MAAIA,IAAE,YAAYA,IAAE,YAAW,CAAC,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,KAAGA,KAAE,CAAC,GAAE,GAAGA,KAAE,MAAIA,IAAE,cAAcA,IAAE,WAAS,CAAC,CAAC,GAAE,GAAGA,KAAE,MAAIA,IAAE,YAAYA,IAAE,YAAW,IAAI,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,SAAO,GAAGD,KAAE,MAAIA,IAAE,mBAAmB,GAAEC,GAAC,GAAE,cAAYA,MAAE,2BAA2B;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,SAAOD,IAAE,mBAAmB,GAAEC,GAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE;AAAC,KAAGD,KAAE,MAAI,GAAGA,KAAE,GAAE,CAAC,CAAC,GAAE,GAAGA,KAAE,MAAIA,IAAE,UAAUC,KAAE,CAAC,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,KAAGA,KAAE,MAAIA,IAAE,gBAAgBA,IAAE,aAAY,IAAI,CAAC,GAAE,GAAGA,KAAE,MAAIA,IAAE,SAAS,GAAE,GAAEA,IAAE,OAAO,OAAMA,IAAE,OAAO,MAAM,CAAC,GAAE,GAAGA,KAAE,MAAIA,IAAE,QAAQ,GAAE,GAAEA,IAAE,OAAO,OAAMA,IAAE,OAAO,MAAM,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,KAAGD,KAAE,MAAIA,IAAE,gBAAgBA,IAAE,aAAYC,GAAC,CAAC,GAAE,GAAGD,KAAE,MAAIA,IAAE,qBAAqBA,IAAE,aAAYA,IAAE,mBAAkBA,IAAE,YAAW,GAAE,CAAC,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,KAAGA,KAAE,MAAIA,IAAE,gBAAgBA,IAAE,aAAY,CAAC,CAAC,GAAE,GAAGA,KAAE,MAAIA,IAAE,qBAAqBA,IAAE,aAAYA,IAAE,mBAAkBA,IAAE,YAAW,MAAK,CAAC,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAI,IAAEA,IAAE,uBAAuBA,IAAE,WAAW;AAAE,MAAG,MAAIA,IAAE,qBAAqB,OAAM,IAAI,MAAM,gCAA8B,GAAGA,KAAE,CAAC,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,UAAO,GAAE;AAAA,IAAC,KAAKA,IAAE;AAAkC,aAAM;AAAA,IAAoC,KAAKA,IAAE;AAA0C,aAAM;AAAA,IAA4C,KAAKA,IAAE;AAAkC,aAAM;AAAA,IAAoC,KAAKA,IAAE;AAAwB,aAAM;AAAA,IAA0B;AAAQ,aAAM,iBAAiB,CAAC;AAAA,EAAE;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,GAAGD,KAAE,MAAI,EAAE,CAAC;AAAE,MAAG,KAAG,KAAK,OAAM,IAAI,MAAMC,GAAC;AAAE,SAAO;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAED,IAAE,mCAAiC,GAAE,IAAE,IAAEA,IAAE;AAAS,MAAG,IAAEA,IAAE,YAAU,IAAEC,KAAE;AAAC,QAAI,IAAE,2BAA2BA,GAAC;AAAI,UAAM,IAAI,MAAM,0BAA0B,CAAC,GAAG;AAAA,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,IAAE,GAAE;AAAC,SAAO,EAAE,cAAcA,IAAE,MAAM,GAAEA,IAAE,SAAO,CAAC,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAGA,IAAE,WAAS,EAAE,OAAM,MAAM,sDAAsD;AAAE,SAAM,CAACA,IAAE,SAAO,IAAEA,IAAEA,IAAE,SAAO,CAAC,IAAE,GAAEA,IAAEA,IAAE,SAAO,CAAC,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAI,IAAE,CAAC,GAAE,GAAE,CAAC;AAAE,SAAOA,IAAE,WAAS,KAAGA,IAAE,WAAS,KAAGA,IAAE,CAAC,MAAI,MAAI,IAAE,CAAC,GAAGA,GAAC,GAAE,GAAG,GAAGA,GAAC,CAAC,IAAG;AAAC;AAAC,SAAS,GAAGA,KAAE,IAAE,OAAG;AAAC,MAAIC,MAAE,EAAE,EAAE,UAAU,wBAAwB,GAAE,IAAE,EAAE,EAAE,UAAU,mCAAmC;AAAE,QAAI,IAAE,KAAG,EAAE,EAAE,QAAQ,0CAA0C,MAAI,IAAEA,MAAE,IAAG,MAAIA,MAAEA,MAAE,GAAE,IAAE,IAAE,GAAED,MAAEA,IAAE,IAAI,CAAC,GAAE,MAAI,KAAGA,IAAE,SAAO,IAAE,EAAE,kBAAkBA,IAAE,CAAC,CAAC,IAAEA,IAAE,CAAC,CAAC,GAAEA,IAAE,WAAS,MAAIA,MAAE,CAAC,GAAEA,IAAE,CAAC,CAAC,KAAIA,IAAE,WAAS,MAAIA,MAAE,EAAE,aAAaA,GAAC,EAAE;AAAU,MAAI,IAAE,EAAE,cAAcA,GAAC,GAAE,IAAE;AAAK,EAAAA,IAAE,UAAQ,KAAG,KAAGC,MAAE,IAAE,CAAC,GAAE,CAAC,IAAED,IAAE,WAAS,KAAGA,IAAE,CAAC,KAAGC,OAAGD,IAAE,CAAC,KAAGC,MAAE,IAAED,MAAEA,IAAE,WAAS,KAAGA,IAAE,CAAC,IAAEA,IAAE,CAAC,KAAGC,OAAGD,IAAE,CAAC,KAAGC,MAAE,IAAE,CAACD,IAAE,CAAC,IAAEA,IAAE,CAAC,GAAEA,IAAE,CAAC,CAAC,IAAEA,IAAE,WAAS,KAAGA,IAAE,CAAC,KAAGC,OAAGD,IAAE,CAAC,IAAEA,IAAE,CAAC,KAAGC,MAAE,IAAE,CAACD,IAAE,CAAC,GAAEA,IAAE,CAAC,IAAEA,IAAE,CAAC,CAAC,IAAEA,IAAE,WAAS,KAAGA,IAAE,CAAC,IAAEA,IAAE,CAAC,IAAEA,IAAE,CAAC,KAAGC,OAAGD,IAAE,CAAC,KAAGC,MAAE,IAAE,CAACD,IAAE,CAAC,IAAEA,IAAE,CAAC,IAAEA,IAAE,CAAC,GAAEA,IAAE,CAAC,CAAC,IAAEA,IAAE,WAAS,KAAGA,IAAE,CAAC,KAAGC,OAAGD,IAAE,CAAC,IAAEA,IAAE,CAAC,IAAEA,IAAE,CAAC,KAAGC,QAAI,IAAE,CAACD,IAAE,CAAC,GAAEA,IAAE,CAAC,IAAEA,IAAE,CAAC,IAAEA,IAAE,CAAC,CAAC;AAAG,MAAI,IAAE,KAAG,QAAM,KAAK,IAAI,GAAG,CAAC,IAAE,KAAG,KAAK,IAAI,GAAG,CAAC,MAAI,IAAE,IAAE,MAAI,KAAK,IAAI,GAAG,CAAC,IAAE;AAAE,MAAG,KAAG,QAAM,EAAE,KAAG,GAAE;AAAC,QAAI,IAAE,GAAGA,GAAC,GAAE,IAAE,GAAE,IAAE;AAAE,IAAAA,IAAE,WAAS,CAAC,GAAE,CAAC,IAAE,GAAGA,GAAC,IAAG,IAAE,KAAG,IAAE,MAAI,IAAE,IAAG,IAAE,EAAE,oBAAoB,CAAC,EAAE,IAAI,OAAG,IAAE,CAAC;AAAA,EAAC,MAAM,KAAE,EAAE,oBAAoB,CAAC;AAAE,SAAO;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAOA,MAAE,MAAI;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAGA,MAAEA,IAAE,MAAM,EAAE,GAAE,IAAE,EAAE,MAAM,EAAE,GAAE,EAAE,YAAYA,KAAE,CAAC,KAAG,CAACA,IAAE,UAAQ,CAAC,EAAE,UAAQA,IAAE,CAAC,MAAI,KAAGA,IAAE,CAAC,MAAI,KAAG,EAAE,CAAC,MAAI,KAAG,EAAE,CAAC,MAAI,EAAE,QAAM;AAAG,MAAGA,IAAE,WAAS,EAAE,QAAO;AAAC,QAAIC,MAAED,IAAEA,IAAE,SAAO,CAAC,GAAE,IAAE,EAAE,EAAE,SAAO,CAAC;AAAE,QAAGC,QAAI,KAAG,GAAGA,GAAC,KAAG,GAAG,CAAC,MAAID,IAAE,CAAC,MAAI,KAAG,EAAE,CAAC,MAAI,GAAG,QAAM;AAAA,EAAE;AAAC,SAAOA,IAAE,CAAC,MAAI,EAAE,CAAC,KAAG,GAAGA,IAAE,CAAC,CAAC,KAAG,GAAG,EAAE,CAAC,CAAC;AAAC;AAAC,IAAI;AAAJ,IAAO;AAAG,SAAS,GAAGA,KAAE;AAAC,MAAG,MAAI,MAAK;AAAC,QAAI,IAAE,GAAGA,GAAC;AAAE,SAAG,EAAE,aAAa,EAAE,gBAAgB;AAAA,EAAC;AAAC,SAAO;AAAE;AAAC,SAAS,KAAI;AAAC,OAAG;AAAI;AAAC,SAAS,KAAI;AAAC,OAAG;AAAI;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAG,MAAI,MAAK;AAAC,QAAI,IAAE,GAAGA,GAAC;AAAE,SAAG,EAAE,aAAa,EAAE,uBAAuB;AAAA,EAAC;AAAC,SAAO,KAAK,IAAI,IAAG,EAAE;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAGA,QAAI,EAAE,QAAO;AAAE,MAAI,GAAEC,MAAE,GAAGD,GAAC;AAAE,SAAO,GAAGC,KAAE,iCAAiC,KAAGD,QAAI,IAAE,IAAE,IAAE,GAAGC,KAAE,0BAA0B,IAAE,IAAE,IAAE,IAAE,GAAE;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,SAAOA,IAAE,aAAa,CAAC,KAAG;AAAI;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAG;AAAC,QAAG,GAAGA,GAAC,KAAG,KAAK,QAAM;AAAA,EAAE,SAAO,GAAE;AAAC,WAAO,QAAQ,IAAI,sCAAqC,CAAC,GAAE;AAAA,EAAE;AAAC,SAAM;AAAE;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAGA,QAAI,EAAE,QAAM;AAAG,MAAI,IAAE,GAAGA,GAAC;AAAE,MAAGA,QAAI,GAAE;AAAC,QAAG,CAAC,GAAG,GAAE,mBAAmB,EAAE,QAAM;AAAA,EAAE,WAAS,CAAC,GAAG,GAAE,wBAAwB,EAAE,QAAM;AAAG,SAAO,GAAG,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAGA,QAAI,EAAE,QAAM;AAAG,MAAI,IAAE,GAAGA,GAAC;AAAE,MAAGA,QAAI,GAAE;AAAC,QAAG,CAAC,GAAG,GAAE,mBAAmB,KAAG,CAAC,GAAG,GAAE,0BAA0B,EAAE,QAAM;AAAA,EAAE,OAAK;AAAC,QAAG,GAAG,GAAE,wBAAwB,EAAE,QAAO,GAAG,CAAC;AAAE,QAAI,IAAE;AAA8B,QAAG,GAAG,GAAE,CAAC,GAAE;AAAC,UAAI,IAAE,EAAE,aAAa,CAAC;AAAE,aAAO,GAAG,GAAE,CAAC;AAAA,IAAC;AAAC,WAAM;AAAA,EAAE;AAAC,SAAO,GAAG,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAI,IAAE,GAAGA,GAAC,GAAEC,MAAED,IAAE,cAAc;AAAE,EAAAA,IAAE,YAAYA,IAAE,YAAWC,GAAC,GAAED,IAAE,WAAWA,IAAE,YAAW,GAAE,EAAE,qBAAoB,GAAE,GAAE,GAAE,EAAE,oBAAmB,EAAE,kBAAiB,IAAI;AAAE,MAAI,IAAEA,IAAE,kBAAkB;AAAE,EAAAA,IAAE,gBAAgBA,IAAE,aAAY,CAAC,GAAEA,IAAE,qBAAqBA,IAAE,aAAYA,IAAE,mBAAkBA,IAAE,YAAWC,KAAE,CAAC;AAAE,MAAI,IAAED,IAAE,uBAAuBA,IAAE,WAAW,MAAIA,IAAE;AAAqB,SAAOA,IAAE,YAAYA,IAAE,YAAW,IAAI,GAAEA,IAAE,gBAAgBA,IAAE,aAAY,IAAI,GAAEA,IAAE,cAAcC,GAAC,GAAED,IAAE,kBAAkB,CAAC,GAAE;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAIC,MAAE,GAAGD,KAAE,CAAC,GAAE,IAAEA,IAAE,cAAc;AAAE,EAAAA,IAAE,YAAYA,IAAE,YAAW,CAAC,GAAEA,IAAE,WAAWA,IAAE,YAAW,GAAEC,IAAE,yBAAwB,GAAE,GAAE,GAAEA,IAAE,oBAAmBA,IAAE,sBAAqB,IAAI;AAAE,MAAI,IAAED,IAAE,kBAAkB;AAAE,EAAAA,IAAE,gBAAgBA,IAAE,aAAY,CAAC,GAAEA,IAAE,qBAAqBA,IAAE,aAAYA,IAAE,mBAAkBA,IAAE,YAAW,GAAE,CAAC;AAAE,MAAI,IAAEA,IAAE,uBAAuBA,IAAE,WAAW,MAAIA,IAAE;AAAqB,SAAOA,IAAE,YAAYA,IAAE,YAAW,IAAI,GAAEA,IAAE,gBAAgBA,IAAE,aAAY,IAAI,GAAEA,IAAE,cAAc,CAAC,GAAEA,IAAE,kBAAkB,CAAC,GAAE;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAOA,QAAI,IAAE,QAAG,GAAGA,GAAC,EAAE,aAAW;AAAI;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,QAAM,QAAQA,GAAC,MAAIA,MAAE,CAACA,GAAC,IAAGA,IAAE,QAAQ,CAAAC,QAAG;AAAC,IAAAA,OAAG,QAAM,EAAE,OAAOA,IAAE,UAAQ,aAAY,MAAI,GAAG,CAAC,2DAA2D;AAAA,EAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE;AAAE,GAAG,aAAa,aAAY,MAAI,GAAG,UAAU,eAAe,IAAE,CAAC;AAAE,GAAG,aAAa,iBAAgB,MAAI,GAAG,CAAC,IAAE,IAAE,GAAG,CAAC,IAAE,IAAE,CAAC;AAAE,GAAG,aAAa,kCAAiC,MAAI,KAAE;AAAE,GAAG,aAAa,0BAAyB,MAAI,GAAG,IAAI,eAAe,MAAI,CAAC;AAAE,GAAG,aAAa,qBAAoB,MAAI,IAAE;AAAE,GAAG,aAAa,4BAA2B,MAAI,KAAE;AAAE,GAAG,aAAa,cAAa,MAAI,GAAG,QAAQ,WAAW,CAAC;AAAE,GAAG,aAAa,4BAA2B,MAAI,GAAG,QAAQ,YAAY,CAAC;AAAE,GAAG,aAAa,mBAAkB,MAAI,GAAG,QAAQ,YAAY,CAAC;AAAE,GAAG,aAAa,4BAA2B,MAAI,GAAG,QAAQ,YAAY,CAAC;AAAE,GAAG,aAAa,gCAA+B,MAAI,GAAG,QAAQ,YAAY,CAAC;AAAE,GAAG,aAAa,+BAA8B,MAAI,GAAG,QAAQ,YAAY,CAAC;AAAE,GAAG,aAAa,+BAA8B,MAAI,GAAG,QAAQ,YAAY,CAAC;AAAE,GAAG,aAAa,+BAA8B,MAAI,GAAG,QAAQ,YAAY,CAAC;AAAE,GAAG,aAAa,qBAAoB,MAAI,GAAG,QAAQ,YAAY,CAAC;AAAE,GAAG,aAAa,uBAAsB,MAAI,GAAG,QAAQ,YAAY,CAAC;AAAE,GAAG,aAAa,qBAAoB,MAAI,GAAG,QAAQ,YAAY,CAAC;AAAE,GAAG,aAAa,8BAA6B,MAAI,GAAG,QAAQ,YAAY,CAAC;AAAE,GAAG,aAAa,0BAAyB,MAAI,GAAG,GAAG,UAAU,eAAe,CAAC,CAAC;AAAE,GAAG,aAAa,gCAA+B,MAAI,GAAG,GAAG,UAAU,eAAe,CAAC,CAAC;AAAE,GAAG,aAAa,gDAA+C,MAAI;AAAC,MAAID,MAAE,GAAG,UAAU,eAAe;AAAE,SAAOA,QAAI,IAAE,IAAE,GAAGA,GAAC;AAAC,CAAC;AAAE,GAAG,aAAa,iDAAgD,MAAI,GAAG,UAAU,8CAA8C,IAAE,KAAG,CAAC,GAAG,SAAS,CAAC;AAAE,GAAG,aAAa,gCAA+B,MAAI,GAAG,GAAG,UAAU,eAAe,CAAC,CAAC;AAAE,GAAG,aAAa,gCAA+B,MAAI,GAAG,QAAQ,0BAA0B,IAAE,QAAG,GAAG,QAAQ,8BAA8B,CAAC;AAAE,GAAG,aAAa,gCAA+B,MAAI,GAAG,GAAG,UAAU,eAAe,CAAC,CAAC;AAAE,GAAG,aAAa,2BAA0B,MAAI,GAAG,GAAG,UAAU,eAAe,CAAC,CAAC;AAAE,GAAG,aAAa,6BAA4B,MAAI,GAAG,QAAQ,8BAA8B,IAAE,IAAE,CAAC;AAAE,GAAG,aAAa,kCAAiC,MAAI,IAAG,CAAAA,QAAG;AAAC,MAAG,OAAOA,OAAG,SAAS,OAAM,IAAI,MAAM,2DAA2DA,GAAC,GAAG;AAAE,MAAGA,MAAE,KAAGA,QAAI,GAAG,OAAM,IAAI,MAAM,8FAA8FA,GAAC,GAAG;AAAC,CAAC;AAAE,GAAG,aAAa,yBAAwB,MAAI,GAAG,SAAS,IAAE,IAAE,IAAG,CAAAA,QAAG;AAAC,MAAG,OAAOA,OAAG,SAAS,OAAM,IAAI,MAAM,kDAAkDA,GAAC,GAAG;AAAE,MAAGA,MAAE,KAAGA,QAAI,GAAG,OAAM,IAAI,MAAM,2FAA2FA,GAAC,GAAG;AAAC,CAAC;AAAE,GAAG,aAAa,8BAA6B,MAAI,GAAG;AAAE,GAAG,aAAa,6BAA4B,MAAI,KAAE;AAAE,GAAG,aAAa,4CAA2C,MAAI,GAAG;AAAE,GAAG,aAAa,gCAA+B,MAAI,GAAG;AAAE,GAAG,aAAa,kBAAiB,MAAI,KAAE;AAAE,GAAG,aAAa,0BAAyB,MAAI,GAAG,QAAQ,SAAS,CAAC;AAAE,GAAG,aAAa,qCAAoC,MAAI,IAAE,CAAC;AAAE,GAAG,aAAa,4CAA2C,MAAI,KAAE;AAAE,GAAG,aAAa,uBAAsB,MAAI,KAAE;AAAE,GAAG,aAAa,uBAAsB,MAAI,KAAE;AAAE,SAAS,KAAI;AAAC,MAAIA,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE;AAAE,SAAO,EAAE,EAAE,UAAU,eAAe,MAAI,KAAGD,MAAE,mBAAkB,IAAE,MAAKC,MAAE,OAAM,IAAE,MAAK,IAAE,WAAU,IAAE,eAAc,IAAE,yBAAwB,IAAE,EAAE,EAAE,QAAQ,qBAAqB,IAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAYh6U,IAAG,IAAE,IAAG,IAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UASRD,MAAE,IAAG,IAAE,aAAYC,MAAE,WAAU,IAAE,WAAU,IAAE,aAAY,IAAE,gBAAe,IAAE,IAAG,IAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAQnF,IAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OASF,IAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAQD,EAAC,SAAQD,KAAE,WAAU,GAAE,WAAUC,KAAE,WAAU,GAAE,WAAU,GAAE,QAAO,GAAE,cAAa,GAAE,kBAAiB,GAAE,kBAAiB,GAAE,aAAY,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,MAAE,SAAQ;AAAC,MAAI,IAAE,EAAE,eAAe,CAAC;AAAE,SAAO,EAAE,IAAI,CAAC,GAAE,MAAI;AAAC,QAAI,IAAE,OAAOD,IAAE,CAAC,CAAC,MAAMC,GAAC,MAAM,CAAC,IAAG,IAAE,MAAI,EAAE,SAAO,IAAE,OAAOD,IAAE,IAAE,CAAC,CAAC,MAAMC,GAAC,MAAMD,IAAE,CAAC,CAAC,MAAM,CAAC,KAAG,YAAYA,IAAE,CAAC,CAAC,MAAM,CAAC;AAAG,WAAM,GAAG,CAAC,KAAK,CAAC;AAAA,EAAG,CAAC,EAAE,KAAK,EAAE;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,MAAE,SAAQ;AAAC,MAAI,IAAE,EAAE,eAAe,CAAC;AAAE,SAAO,EAAE,IAAI,CAAC,GAAE,MAAI;AAAC,QAAI,IAAE,OAAOD,IAAE,CAAC,CAAC,MAAMC,GAAC,sBAAsB,CAAC,KAAI,IAAE,MAAI,EAAE,SAAO,IAAE,OAAOD,IAAE,IAAE,CAAC,CAAC,MAAMC,GAAC,MAAMD,IAAE,CAAC,CAAC,sBAAsB,CAAC,MAAI,YAAYA,IAAE,CAAC,CAAC,sBAAsB,CAAC;AAAI,WAAM,GAAG,CAAC,KAAK,CAAC;AAAA,EAAG,CAAC,EAAE,KAAK,EAAE;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAIC,MAAED,IAAE,QAAO,IAAEA,IAAE,IAAI,OAAG,GAAG,CAAC,IAAI,CAAC,GAAG,GAAE,IAAE,IAAI,MAAMC,MAAE,CAAC;AAAE,IAAEA,MAAE,CAAC,IAAE,EAAEA,MAAE,CAAC;AAAE,WAAQ,IAAEA,MAAE,GAAE,KAAG,GAAE,EAAE,EAAE,GAAE,CAAC,IAAE,IAAI,EAAE,IAAE,CAAC,CAAC,MAAM,EAAE,IAAE,CAAC,CAAC;AAAI,SAAO;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,MAAE,SAAQ;AAAC,MAAI,IAAED,IAAE,IAAI,CAAC,GAAE,MAAI,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC;AAAE,SAAO,EAAE,IAAI,CAAC,GAAE,MAAI;AAAC,QAAI,IAAE,OAAOA,IAAE,CAAC,CAAC,MAAMC,GAAC,MAAM,EAAE,CAAC,CAAC,IAAG,IAAE,MAAI,EAAE,SAAO,IAAE,OAAOD,IAAE,IAAE,CAAC,CAAC,MAAMC,GAAC,MAAMD,IAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,KAAG,YAAYA,IAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;AAAG,WAAM,GAAG,CAAC,KAAK,CAAC;AAAA,EAAG,CAAC,EAAE,KAAK,EAAE;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAI,IAAE,EAAE,eAAeA,GAAC,EAAE,IAAI,CAAAC,QAAGA,IAAE,SAAS,CAAC;AAAE,SAAM;AAAA;AAAA,wBAE9iC,EAAE,CAAC,CAAC,iBAAiB,EAAE,CAAC,CAAC;AAAA;AAAA;AAEhD;AAAC,SAAS,KAAI;AAAC,SAAM;AAAA;AAAA;AAAA;AAAA;AAIrB;AAAC,IAAI,KAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAuCP,IAAG,EAAC,kBAAiB,GAAE,IAAE;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,CAAC;AAAE,MAAGD,IAAE,QAAQ,OAAG;AAAC,QAAI,IAAE,EAAE,cAAc,EAAE,UAAU,YAAY;AAAE,QAAG,EAAE,UAAU,YAAU,EAAE,KAAK,iBAAiB,EAAE,IAAI,GAAG,IAAE,IAAE,IAAI,CAAC,MAAI,EAAE,GAAG,KAAG,EAAE,KAAK,qBAAqB,EAAE,IAAI,GAAG,GAAE,EAAE,KAAK,qBAAqB,EAAE,IAAI,GAAG,IAAGC,IAAE,qBAAoB;AAAC,UAAG,EAAC,cAAa,EAAC,IAAE,GAAGA,IAAE,cAAa,EAAE,UAAU,cAAa,EAAE,UAAU,QAAQ;AAAE,cAAO,EAAE,QAAO;AAAA,QAAC,KAAK;AAAE,YAAE,KAAK,eAAe,EAAE,IAAI,QAAQ;AAAE;AAAA,QAAM,KAAK;AAAE,YAAE,KAAK,iBAAiB,EAAE,IAAI,QAAQ;AAAE;AAAA,QAAM,KAAK;AAAE,YAAE,KAAK,iBAAiB,EAAE,IAAI,QAAQ;AAAE;AAAA,QAAM,KAAK;AAAE,YAAE,KAAK,iBAAiB,EAAE,IAAI,QAAQ;AAAE;AAAA,QAAM;AAAQ;AAAA,MAAK;AAAC,QAAE,KAAK,iBAAiB,EAAE,IAAI,WAAW;AAAA,IAAC;AAAA,EAAC,CAAC,GAAEA,IAAE,qBAAoB;AAAC,YAAO,EAAE,aAAa,QAAO;AAAA,MAAC,KAAK;AAAE,UAAE,KAAK,uBAAuB;AAAE;AAAA,MAAM,KAAK;AAAE,UAAE,KAAK,yBAAyB,GAAE,EAAE,KAAK,8BAA8B;AAAE;AAAA,MAAM,KAAK;AAAE,UAAE,KAAK,yBAAyB,GAAE,EAAE,KAAK,gCAAgC;AAAE;AAAA,MAAM,KAAK;AAAE,UAAE,KAAK,yBAAyB,GAAE,EAAE,KAAK,gCAAgC;AAAE;AAAA,MAAM;AAAQ;AAAA,IAAK;AAAC,MAAE,KAAK,4BAA4B;AAAA,EAAC;AAAC,EAAAA,IAAE,kBAAgBA,IAAE,eAAe,QAAQ,OAAG;AAAC,MAAE,KAAK,WAAW,EAAE,IAAI,IAAI,EAAE,IAAI,GAAG,EAAE,aAAW,IAAI,EAAE,UAAU,MAAI,EAAE,GAAG;AAAA,EAAC,CAAC;AAAE,MAAI,IAAE,EAAE,KAAK;AAAA,CACxsC,GAAE,IAAED,IAAE,IAAI,OAAG,GAAG,GAAE,GAAEC,IAAE,cAAaA,IAAE,mBAAmB,CAAC,EAAE,KAAK;AAAA,CAChE,GAAE,IAAE,EAAE,UAAS,IAAE,GAAG,GAAE,IAAE,GAAG,CAAC,GAAE,GAAE,GAAE,IAAE,GAAG,CAAC;AAAE,SAAO,EAAE,YAAU,IAAE,GAAG,EAAE,cAAa,GAAEA,IAAE,mBAAmB,GAAE,IAAE,GAAG,CAAC,MAAI,IAAE,GAAG,EAAE,cAAa,GAAEA,IAAE,mBAAmB,GAAE,IAAE,GAAG,CAAC,IAAGA,IAAE,iBAAe,KAAG,KAAI,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAEA,IAAE,QAAQ,EAAE,KAAK;AAAA,CAChO;AAAC;AAAC,SAAS,GAAGD,KAAE,IAAE,OAAG;AAAC,MAAIC,MAAED,IAAE,UAAU;AAAa,UAAOC,IAAE,QAAO;AAAA,IAAC,KAAK;AAAE,aAAO,GAAGD,KAAE,CAAC;AAAA,IAAE,KAAK;AAAE,aAAO,GAAGA,KAAE,CAAC;AAAA,IAAE,KAAK;AAAE,aAAO,GAAGA,KAAE,CAAC;AAAA,IAAE,KAAK;AAAE,aAAO,GAAGA,KAAE,CAAC;AAAA,IAAE,KAAK;AAAE,aAAO,GAAGA,KAAE,CAAC;AAAA,IAAE,KAAK;AAAE,aAAO,GAAGA,GAAC;AAAA,IAAE,KAAK;AAAE,aAAO,GAAGA,GAAC;AAAA,IAAE;AAAQ,YAAM,IAAI,MAAM,GAAGC,IAAE,MAAM,wCAAwC;AAAA,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,UAAOA,IAAE,UAAU,aAAa,QAAO;AAAA,IAAC,KAAK;AAAE,aAAO,GAAGA,GAAC;AAAA,IAAE,KAAK;AAAE,aAAO,GAAGA,KAAE,CAAC;AAAA,IAAE,KAAK;AAAE,aAAO,GAAGA,KAAE,CAAC;AAAA,IAAE,KAAK;AAAE,aAAO,GAAGA,KAAE,CAAC;AAAA,IAAE;AAAQ,aAAO,GAAGA,KAAE,CAAC;AAAA,EAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,MAAE,OAAG,GAAE;AAAC,MAAI,IAAE;AAAG,EAAAA,MAAE,KAAG,GAAGD,KAAE,CAAC,IAAE,KAAG,GAAGA,KAAE,CAAC;AAAE,MAAI,IAAEA,IAAE,UAAU,cAAa,IAAE,EAAE;AAAa,SAAO,EAAE,UAAQ,EAAE,WAASC,MAAE,KAAG,GAAGD,KAAE,CAAC,IAAE,KAAG,GAAGA,KAAE,CAAC,IAAG;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,UAAOD,IAAE,QAAO;AAAA,IAAC,KAAK;AAAE,aAAO,GAAG;AAAA,IAAE,KAAK;AAAE,aAAO,GAAGA,KAAE,GAAEC,GAAC;AAAA,IAAE,KAAK;AAAE,aAAO,GAAGD,KAAE,GAAEC,GAAC;AAAA,IAAE,KAAK;AAAE,aAAO,GAAGD,KAAE,GAAEC,GAAC;AAAA,IAAE;AAAQ,aAAO,GAAGD,KAAE,GAAEC,GAAC;AAAA,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,UAAOD,IAAE,QAAO;AAAA,IAAC,KAAK;AAAE,aAAO,GAAG;AAAA,IAAE,KAAK;AAAE,aAAO,GAAGA,KAAE,GAAEC,GAAC;AAAA,IAAE,KAAK;AAAE,aAAO,GAAGD,KAAE,GAAEC,GAAC;AAAA,IAAE,KAAK;AAAE,aAAO,GAAGD,KAAE,GAAEC,GAAC;AAAA,IAAE,KAAK;AAAE,aAAO,GAAGD,KAAE,GAAEC,GAAC;AAAA,IAAE,KAAK;AAAE,aAAO,GAAGD,KAAE,CAAC;AAAA,IAAE,KAAK;AAAE,aAAO,GAAGA,KAAE,CAAC;AAAA,IAAE;AAAQ,YAAM,IAAI,MAAM,GAAGA,IAAE,MAAM,yCAAyC;AAAA,EAAC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAM;AAAA;AAAA,eAEniCA,IAAE,SAAS;AAAA;AAAA;AAEvB;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAM;AAAA;AAAA,QAEjBA,IAAE,MAAM;AAAA;AAAA;AAEb;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAM;AAAA;AAAA,QAEjBA,IAAE,MAAM;AAAA;AAAA;AAEb;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAM,GAAGA,IAAE,OAAO;AAAA;AAAA;AAAA;AAAA,MAI/BA,IAAE,SAAS;AAAA,MACXA,IAAE,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAuBdA,IAAE,gBAAgB;AAAA,MAClBA,IAAE,gBAAgB;AAAA,MAClBA,IAAE,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAyBb,EAAE;AAAA,MACF,EAAE;AAAA,MACF,EAAE;AAAA;AACL;AAAC,IAAI,KAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAP,IAYF,KAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAZD,IAoBF,KAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AApBD,IA6BF,KAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWH,SAAS,KAAI;AAAC,SAAM;AAAA;AAAA;AAAA;AAAA;AAInB;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,CAAC,KAAK,KAAK,EAAE,CAAC,IAAE,CAAC,GAAE,KAAK,KAAK,EAAE,CAAC,IAAE,CAAC,CAAC;AAAE,SAAO,EAAE,CAAC,MAAI,IAAEA,MAAE;AAAA;AAAA;AAAA;AAAA,QAI/E;AAAA;AAAA,sCAEgC,EAAE,CAAC,CAAC;AAAA;AAAA,QAEpC,EAAE,CAAC,MAAI,IAAEA,MAAE;AAAA;AAAA;AAAA;AAAA,QAIX;AAAA;AAAA,sCAEgC,EAAE,CAAC,CAAC;AAAA;AAAA,QAEpCA,MAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOJ;AAAA;AAAA;AAAA,oCAGgC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAAA,iCAChB,EAAE,CAAC,CAAC;AAAA;AAAA;AAElC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,SAAO,EAAE,CAAC,MAAI,IAAEA,MAAE;AAAA;AAAA;AAAA;AAAA,QAInC;AAAA;AAAA,kCAE4B,EAAE,CAAC,CAAC;AAAA;AAAA,QAEhC,EAAE,CAAC,MAAI,IAAEA,MAAE;AAAA;AAAA;AAAA;AAAA,QAIX;AAAA;AAAA,kCAE4B,EAAE,CAAC,CAAC;AAAA;AAAA,QAEhCA,MAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMJ;AAAA;AAAA;AAAA,oCAGgC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAAA,4BACrB,EAAE,CAAC,CAAC;AAAA;AAAA;AAE7B;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAGA,IAAE,QAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiB9B,MAAI,IAAE,CAAC,KAAK,KAAK,EAAE,CAAC,IAAE,CAAC,GAAE,KAAK,KAAK,EAAE,CAAC,IAAE,CAAC,CAAC,GAAE,IAAE,KAAK,KAAKD,IAAE,CAAC,IAAE,CAAC,GAAE,IAAE,IAAE,KAAK,KAAKA,IAAE,CAAC,IAAE,CAAC;AAAE,SAAM;AAAA;AAAA;AAAA,oCAG5D,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAAA,iCAChB,EAAE,CAAC,CAAC;AAAA;AAAA,wBAEb,CAAC;AAAA,qBACJ,CAAC;AAAA;AAAA,6BAEO,CAAC;AAAA,4BACF,CAAC;AAAA;AAAA;AAAA;AAAA;AAI1B;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAGA,IAAE,QAAM;AAAA;AAAA;AAAA;AAAA;AAAA,MAK5B,GAAG,CAAC,KAAI,KAAI,GAAG,GAAED,GAAC,CAAC;AAAA;AAAA;AAAA;AAGvB,MAAI,IAAE,GAAG,CAAC,KAAI,KAAI,GAAG,GAAEA,GAAC;AAAE,SAAM;AAAA;AAAA;AAAA,oCAGE,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAAA,iCAChB,EAAE,CAAC,CAAC;AAAA,QAC7B,CAAC;AAAA;AAAA;AAAA;AAGN;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAGA,IAAE,QAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsB9B,MAAI,IAAE,CAAC,KAAK,KAAK,EAAE,CAAC,IAAE,CAAC,GAAE,KAAK,KAAK,EAAE,CAAC,IAAE,CAAC,CAAC,GAAE,IAAE,KAAK,KAAKD,IAAEA,IAAE,SAAO,CAAC,IAAE,CAAC,GAAE,IAAE,IAAE,KAAK,KAAKA,IAAEA,IAAE,SAAO,CAAC,IAAE,CAAC,GAAE,IAAE,GAAE,IAAE,IAAG,IAAE;AAAU,WAAQ,IAAE,GAAE,IAAEA,IAAE,SAAO,GAAE,IAAI,MAAGA,IAAEA,IAAE,SAAO,IAAE,CAAC,GAAE,IAAE;AAAA,aACtK,CAAC,cAAc,CAAC;AAAA,kBACX,CAAC,MAAM,CAAC;AAAA,QACpB,GAAE,IAAE,IAAI,CAAC,OAAK;AAAE,SAAM;AAAA,UAClBA,IAAE,MAAM;AAAA;AAAA,oCAEkB,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAAA,iCAChB,EAAE,CAAC,CAAC;AAAA;AAAA,QAE7B,CAAC;AAAA;AAAA,wBAEe,CAAC;AAAA,qBACJ,CAAC;AAAA;AAAA,6BAEO,CAAC;AAAA,4BACF,CAAC;AAAA;AAAA,mBAEVA,IAAE,MAAM,IAAI,CAAC;AAAA;AAAA;AAE7B;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAGA,IAAE,QAAM;AAAA;AAAA;AAAA;AAAA;AAAA,QAK1B,GAAG,CAAC,KAAI,KAAI,KAAI,IAAI,GAAED,GAAC,CAAC;AAAA;AAAA;AAAA;AAG5B,MAAI,IAAE,GAAG,CAAC,KAAI,KAAI,KAAI,IAAI,GAAEA,GAAC;AAAE,SAAM;AAAA;AAAA;AAAA,eAG1B,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAAA,iCACK,EAAE,CAAC,CAAC;AAAA,QAC7B,CAAC;AAAA;AAAA;AAAA;AAGN;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAIC,MAAE,GAAG,CAAC,KAAI,KAAI,KAAI,MAAK,IAAI,GAAED,GAAC;AAAE,SAAM;AAAA;AAAA,kDAEb,EAAE,CAAC,CAAC;AAAA,+BACvB,EAAE,CAAC,CAAC;AAAA;AAAA,iCAEF,EAAE,CAAC,CAAC;AAAA;AAAA,QAE7BC,GAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAKN;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,GAAG,CAAC,KAAI,KAAI,KAAI,MAAK,MAAK,IAAI,GAAED,GAAC;AAAE,SAAM;AAAA;AAAA;AAAA,eAGrD,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAAA,iCACK,EAAE,CAAC,CAAC;AAAA;AAAA,QAE7BC,GAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAKN;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,CAAC,KAAK,KAAK,EAAE,CAAC,IAAE,CAAC,GAAE,KAAK,KAAK,EAAE,CAAC,IAAE,CAAC,CAAC;AAAE,MAAG,EAAE,YAAYD,KAAE,CAAC,EAAE,QAAOC,MAAE;AAAA;AAAA;AAAA;AAAA;AAAA,QAK5F;AAAA;AAAA,8CAEwC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAAA;AAAA;AAErD,MAAI,IAAE,KAAK,KAAKD,IAAE,CAAC,IAAE,CAAC;AAAE,SAAOC,MAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAanC;AAAA;AAAA;AAAA,oCAGgC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAAA;AAAA,iCAEhB,EAAE,CAAC,CAAC;AAAA,6BACR,CAAC;AAAA,4BACF,CAAC;AAAA;AAAA;AAAA;AAAA;AAI1B;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,SAAO,EAAE,YAAYD,KAAE,CAAC,IAAEC,MAAE;AAAA;AAAA;AAAA;AAAA,QAI7C;AAAA;AAAA,0CAEoC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAAA;AAAA,QAEjDD,IAAE,CAAC,MAAI,IAAEC,MAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAOX;AAAA;AAAA;AAAA,sCAGgC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAAA,mCAChB,EAAE,CAAC,CAAC;AAAA;AAAA;AAAA,QAGjCD,IAAE,CAAC,MAAI,IAAEC,MAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAOX;AAAA;AAAA;AAAA,sCAGgC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAAA,mCAChB,EAAE,CAAC,CAAC;AAAA;AAAA;AAAA,QAGjCA,MAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASJ;AAAA;AAAA;AAAA,oCAGgC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAAA,iCAChB,EAAE,CAAC,CAAC;AAAA,wBACbD,IAAE,CAAC,CAAC;AAAA,4BACAA,IAAE,CAAC,CAAC;AAAA;AAAA;AAAA;AAG7B;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAM,SAASA,GAAC;AAAE;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAI,IAAEA,IAAE,MAAKC,MAAE,QAAM,EAAE,OAAO,CAAC,EAAE,YAAY,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,GAAG;AAAE,SAAM;AAAA,WACjHA,GAAC;AAAA,eACG,EAAE,SAAS,IAAI,CAAC;AAAA;AAAA;AAE5B;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAED,IAAE,MAAK,IAAE,QAAMC,IAAE,OAAO,CAAC,EAAE,YAAY,IAAEA,IAAE,MAAM,CAAC;AAAE,MAAGD,IAAE,UAAU,UAAU,QAAM,SAAS,CAAC,cAAcC,GAAC;AAAK,MAAG,CAAC,GAAE,CAAC,IAAED,IAAE,UAAU;AAAS,MAAG,MAAI,KAAG,MAAI,EAAE,QAAM;AAAA,cAClL,CAAC;AAAA,+BACgBC,GAAC;AAAA;AAAA;AAE1B,MAAI,IAAE,GAAGA,GAAC;AAAE,MAAG,EAAE,QAAM;AAAA,YACjB,CAAC;AAAA,6BACgBA,GAAC,gBAAgBA,GAAC,gBAAgB,CAAC;AAAA,6BACnCA,GAAC;AAAA;AAAA;AAE1B,MAAG,CAAC,GAAE,CAAC,IAAED,IAAE,UAAU;AAAS,SAAM;AAAA,YAC5B,CAAC;AAAA,6BACgB,CAAC,KAAK,CAAC,KAAK,CAAC;AAAA,6BACbC,GAAC;AAAA;AAAA;AAE3B;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAED,IAAE,MAAK,IAAE,QAAMC,IAAE,OAAO,CAAC,EAAE,YAAY,IAAEA,IAAE,MAAM,CAAC,GAAE,IAAED,IAAE,UAAU,UAAS,IAAE,GAAG;AAAE,MAAG,EAAE,QAAM;AAAA,WAC7G,CAAC;AAAA,gDACoCC,GAAC,mCAAmCA,GAAC;AAAA;AAAA;AAAA,eAGtE,EAAE,SAAS,IAAIA,GAAC;AAAA;AAAA;AAE3B,MAAI,IAAE,CAAC,KAAK,KAAK,EAAE,CAAC,IAAE,CAAC,GAAE,KAAK,KAAK,EAAE,CAAC,IAAE,CAAC,CAAC;AAAE,SAAM;AAAA,WAC3C,CAAC;AAAA;AAAA,UAEF,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAAA,eACR,EAAE,SAAS,IAAIA,GAAC;AAAA;AAAA;AAE5B;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAED,IAAE,MAAK,IAAE,QAAMC,IAAE,OAAO,CAAC,EAAE,YAAY,IAAEA,IAAE,MAAM,CAAC;AAAE,MAAGD,IAAE,UAAU,UAAU,QAAM;AAAA,cAChG,CAAC;AAAA,UACL,GAAGA,GAAC,CAAC;AAAA;AAAA;AAET,MAAI,IAAEA,IAAE,UAAU,UAAS,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC;AAAE,MAAG,MAAI,KAAG,MAAI,EAAE,QAAM;AAAA,cACvD,CAAC;AAAA,+BACgBC,GAAC;AAAA;AAAA;AAE1B,MAAI,IAAE,GAAGA,GAAC;AAAE,SAAO,MAAI,IAAE,IAAE;AAAA,cACnB,CAAC;AAAA,6CAC8B,CAAC,oBAAoBA,GAAC;AAAA,+BACpCA,GAAC;AAAA;AAAA,QAE1B;AAAA,cACQ,CAAC;AAAA,6CAC8B,CAAC,cAAc,CAAC;AAAA,+BAC9BA,GAAC;AAAA;AAAA,QAE1B,MAAI,IAAE,IAAE;AAAA,cACA,CAAC;AAAA,wCACyB,CAAC,oBAAoBA,GAAC;AAAA,+BAC/BA,GAAC;AAAA;AAAA,QAE1B;AAAA,cACQ,CAAC;AAAA,wCACyB,CAAC,cAAc,CAAC;AAAA,+BACzBA,GAAC;AAAA;AAAA,QAE1B,IAAE;AAAA,YACI,CAAC;AAAA,6BACgBA,GAAC,gBAAgBA,GAAC,wBAAwB,CAAC;AAAA,6BAC3CA,GAAC;AAAA;AAAA,MAE1B;AAAA,YACQ,CAAC;AAAA,6BACgB,CAAC,KAAK,CAAC,aAAa,CAAC;AAAA,6BACrBA,GAAC;AAAA;AAAA;AAE3B;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAED,IAAE,UAAU,cAAa,IAAEA,IAAE,MAAK,IAAE,QAAM,EAAE,OAAO,CAAC,EAAE,YAAY,IAAE,EAAE,MAAM,CAAC,GAAE,IAAEA,IAAE,UAAU,UAAS,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,GAAG;AAAE,MAAG,KAAG,QAAM,EAAE,YAAYC,KAAE,CAAC,EAAE,QAAO,IAAE;AAAA,aACjL,CAAC;AAAA,qDACuC,CAAC,gBAAgB,CAAC;AAAA;AAAA,iBAEtD,EAAE,SAAS,IAAI,CAAC;AAAA;AAAA,QAE3B;AAAA,aACO,CAAC;AAAA,qDACuC,CAAC,OAAO,CAAC;AAAA;AAAA,iBAE7C,EAAE,SAAS,IAAI,CAAC;AAAA;AAAA;AAE3B,MAAG,EAAE,QAAM;AAAA,WACN,CAAC;AAAA,gDACoC,CAAC,mCAAmC,CAAC;AAAA,0CAC3C,CAAC;AAAA;AAAA,eAE5B,EAAE,SAAS,IAAI,CAAC;AAAA;AAAA;AAE3B,MAAI,IAAE,CAAC,KAAK,KAAK,EAAE,CAAC,IAAE,CAAC,GAAE,KAAK,KAAK,EAAE,CAAC,IAAE,CAAC,CAAC,GAAE,IAAE,KAAK,KAAKA,IAAE,CAAC,IAAE,CAAC;AAAE,SAAM;AAAA,WAC/D,CAAC;AAAA,iCACqB,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAAA,eACrC,EAAE,SAAS,IAAI,CAAC;AAAA;AAAA;AAE5B;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAED,IAAE,UAAU,cAAa,IAAEA,IAAE,MAAK,IAAE,QAAM,EAAE,OAAO,CAAC,EAAE,YAAY,IAAE,EAAE,MAAM,CAAC,GAAE,IAAEA,IAAE,UAAU;AAAS,MAAG,KAAG,QAAM,EAAE,YAAYC,KAAE,CAAC,GAAE;AAAC,QAAG,EAAE,QAAM;AAAA,cAC9J,CAAC;AAAA,qDACsC,CAAC,gBAAgB,CAAC;AAAA,+BACxC,CAAC;AAAA;AAAA;AAE1B,QAAI,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC;AAAE,WAAM;AAAA,YAClB,CAAC;AAAA,mDACsC,CAAC,OAAO,CAAC;AAAA,6BAC/B,CAAC;AAAA;AAAA;AAAA,EAE3B;AAAC,MAAG,EAAC,UAAS,GAAE,UAAS,EAAC,IAAE,EAAE,aAAaA,GAAC,GAAE,IAAE;AAAE,MAAG,EAAE,SAAOA,IAAE,QAAO;AAAC,QAAI,IAAE,GAAGD,KAAE,CAAC,GAAE,IAAE,CAAC,OAAM,KAAK;AAAE,WAAM;AAAA,QACvG,GAAG,GAAE,CAAC,CAAC;AAAA,cACD,CAAC;AAAA,iBACE,CAAC,IAAI,GAAG,GAAE,CAAC,CAAC;AAAA;AAAA;AAAA,EAExB;AAAC,MAAGA,IAAE,UAAU,UAAU,QAAM;AAAA,cACvB,CAAC;AAAA,qDACsCC,IAAE,CAAC,CAAC;AAAA,UAC/C,GAAGD,GAAC,CAAC;AAAA;AAAA;AAET,MAAI,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,GAAG,CAAC;AAAE,SAAO,MAAI,IAAE,IAAE;AAAA,cACjC,CAAC;AAAA,2CAC4B,CAAC,WAAW,CAAC;AAAA,oDACJ,CAAC;AAAA,+BACtB,CAAC;AAAA;AAAA,QAE1B;AAAA,YACM,CAAC;AAAA,yCAC4B,CAAC,WAAWC,IAAE,CAAC,CAAC;AAAA,4CACb,CAAC;AAAA,6BAChB,CAAC;AAAA;AAAA,MAE1B,MAAI,IAAE,IAAE;AAAA,cACE,CAAC;AAAA,2CAC4B,CAAC,WAAW,CAAC;AAAA,+CACT,CAAC;AAAA,+BACjB,CAAC;AAAA;AAAA,QAE1B;AAAA,YACM,CAAC;AAAA,yCAC4B,CAAC,WAAWA,IAAE,CAAC,CAAC;AAAA,uCAClB,CAAC;AAAA,6BACX,CAAC;AAAA;AAAA,MAE1B,IAAE;AAAA,cACQ,CAAC;AAAA;AAAA,4BAEa,CAAC,oBAAoB,CAAC;AAAA,+BACnB,CAAC,gBAAgB,CAAC;AAAA,+BAClB,CAAC;AAAA;AAAA,QAE1B;AAAA,UACI,CAAC;AAAA;AAAA,wBAEaA,IAAE,CAAC,CAAC,YAAY,CAAC;AAAA,2BACd,CAAC,KAAK,CAAC;AAAA,2BACP,CAAC;AAAA;AAAA;AAE3B;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAED,IAAE,UAAU,cAAa,IAAEA,IAAE,MAAK,IAAE,QAAM,EAAE,OAAO,CAAC,EAAE,YAAY,IAAE,EAAE,MAAM,CAAC,GAAE,IAAEA,IAAE,UAAU,UAAS,IAAE,CAAC,KAAK,KAAK,EAAE,CAAC,IAAE,CAAC,GAAE,KAAK,KAAK,EAAE,CAAC,IAAE,CAAC,CAAC;AAAE,MAAGC,IAAE,CAAC,MAAI,GAAE;AAAC,QAAI,IAAEA,IAAE,MAAM,CAAC,GAAE,IAAE,CAAC,GAAE,CAAC,GAAE,IAAE,GAAGD,KAAE,CAAC,GAAE,IAAE,CAAC,KAAI,OAAM,KAAK;AAAE,WAAM;AAAA,UACvO,GAAG,GAAE,CAAC,CAAC;AAAA,eACF,CAAC;AAAA,mBACG,CAAC,IAAI,GAAG,GAAE,CAAC,CAAC;AAAA;AAAA;AAAA,EAExB;AAAC,MAAI,IAAE,GAAG;AAAE,MAAG,EAAE,QAAM;AAAA,WACnB,CAAC;AAAA,gDACoC,CAAC,mCAAmC,CAAC;AAAA,0CAC3C,CAAC;AAAA,0DACe,CAAC;AAAA;AAAA;AAAA,eAG5C,EAAE,SAAS,IAAI,CAAC;AAAA;AAAA;AAE3B,MAAI,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,KAAK,KAAKC,IAAE,CAAC,IAAE,CAAC,GAAE,IAAE,IAAE,KAAK,KAAKA,IAAE,CAAC,IAAE,CAAC;AAAE,SAAM;AAAA,WAC3D,CAAC;AAAA;AAAA,UAEF,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC;AAAA,eACd,EAAE,SAAS,IAAI,CAAC;AAAA;AAAA;AAE5B;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAED,IAAE,UAAU,cAAa,IAAEA,IAAE,MAAK,IAAE,QAAM,EAAE,OAAO,CAAC,EAAE,YAAY,IAAE,EAAE,MAAM,CAAC,GAAE,IAAEC,IAAE,CAAC,IAAEA,IAAE,CAAC,GAAE,IAAEA,IAAE,CAAC,GAAE,EAAC,UAAS,GAAE,UAAS,EAAC,IAAE,EAAE,aAAaA,GAAC,GAAE,IAAE;AAAE,MAAG,EAAE,SAAOA,IAAE,QAAO;AAAC,QAAI,IAAE,GAAGD,KAAE,CAAC,GAAE,IAAE,CAAC,OAAM,OAAM,OAAO;AAAE,WAAM;AAAA,UACnO,GAAG,GAAE,CAAC,CAAC;AAAA,gBACD,CAAC;AAAA,mBACE,CAAC,IAAI,GAAG,GAAE,CAAC,CAAC;AAAA;AAAA;AAAA,EAExB;AAAC,MAAGA,IAAE,UAAU,UAAU,QAAM;AAAA,cACzB,CAAC;AAAA;AAAA,iCAEkB,CAAC,KAAK,CAAC;AAAA,UAC9B,GAAGA,GAAC,CAAC;AAAA;AAAA;AAET,MAAI,IAAEA,IAAE,UAAU,UAAS,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,IAAEA,IAAE,UAAU;AAAW,MAAG,MAAI,KAAG,KAAG,KAAK,QAAO,IAAE;AAAA,cACrF,CAAC;AAAA,wBACS,CAAC;AAAA;AAAA;AAAA;AAAA,0BAIC,CAAC,gBAAgB,CAAC;AAAA,+BACb,CAAC;AAAA;AAAA,QAE1B;AAAA,gBACU,CAAC;AAAA;AAAA,oDAEmC,CAAC;AAAA;AAAA,4BAEzB,CAAC,OAAO,CAAC;AAAA,iCACJ,CAAC;AAAA;AAAA;AAE1B,MAAG,MAAI,KAAG,KAAG,KAAK,QAAO,IAAE;AAAA,cACrB,CAAC;AAAA,gDACiC,CAAC;AAAA;AAAA,uDAEM,CAAC,gBAAgB,CAAC;AAAA,+BAC1C,CAAC;AAAA;AAAA,QAE1B;AAAA,YACM,CAAC;AAAA,8CACiCC,IAAE,CAAC,CAAC;AAAA;AAAA,qDAEG,CAAC,OAAO,CAAC;AAAA,6BACjC,CAAC;AAAA;AAAA;AAE1B,MAAI,IAAE,GAAG,CAAC;AAAE,SAAO,IAAE;AAAA,YACb,CAAC;AAAA;AAAA,sBAES,CAAC,cAAc,CAAC;AAAA,sBAChB,CAAC;AAAA,4DACqC,CAAC;AAAA,6BAChC,CAAC,gBAAgB,CAAC;AAAA,6BAClB,CAAC;AAAA;AAAA,QAExB;AAAA,cACQ,CAAC;AAAA;AAAA,4BAEa,CAAC,YAAY,CAAC,cAAc,CAAC;AAAA,+BAC1B,CAAC,KAAK,CAAC;AAAA,+BACP,CAAC;AAAA;AAAA;AAE7B;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAED,IAAE,MAAK,IAAE,QAAMC,IAAE,OAAO,CAAC,EAAE,YAAY,IAAEA,IAAE,MAAM,CAAC,GAAE,IAAE,GAAG;AAAE,MAAG,EAAE,QAAM;AAAA,WACtF,CAAC;AAAA,0CAC8BA,GAAC;AAAA,0DACeA,GAAC;AAAA;AAAA,yBAElCA,GAAC;AAAA;AAAA,gDAEsBA,GAAC,mCAAmCA,GAAC;AAAA;AAAA;AAAA,mGAGc,EAAE,SAAS,IAAIA,GAAC;AAAA;AAAA;AAE/G,MAAI,IAAED,IAAE,UAAU,cAAa,IAAE,EAAE,QAAO,IAAEA,IAAE,UAAU,UAAS,IAAE,CAAC,KAAK,KAAK,EAAE,CAAC,IAAE,CAAC,GAAE,KAAK,KAAK,EAAE,CAAC,IAAE,CAAC,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,KAAK,KAAK,EAAE,IAAE,CAAC,IAAE,CAAC,GAAE,IAAE,IAAE,KAAK,KAAK,EAAE,IAAE,CAAC,IAAE,CAAC,GAAE,IAAE,2BAA0B,IAAE,OAAO,CAAC,kBAAkB,CAAC;AAAe,WAAQ,IAAE,GAAE,IAAE,IAAE,GAAE,IAAI,KAAE,QAAQ,CAAC,OAAK,GAAE,KAAG,EAAE,IAAE,IAAE,CAAC,GAAE,IAAE,IAAI,CAAC,MAAM,CAAC,QAAM;AAAE,SAAM;AAAA,WACtT,CAAC,IAAI,CAAC;AAAA,oBACG,CAAC;AAAA,2BACM,CAAC;AAAA,kCACM,CAAC;AAAA,qDACkB,CAAC,KAAK,CAAC;AAAA,eAC7C,EAAE,SAAS,IAAIC,GAAC;AAAA;AAAA;AAE5B;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAED,IAAE,UAAU,cAAa,IAAEA,IAAE,MAAK,IAAE,QAAM,EAAE,OAAO,CAAC,EAAE,YAAY,IAAE,EAAE,MAAM,CAAC,GAAE,IAAEC,IAAE,CAAC,GAAE,IAAEA,IAAE,CAAC,IAAE,GAAE,IAAEA,IAAE,CAAC,IAAE,GAAE,EAAC,UAAS,GAAE,UAAS,EAAC,IAAE,EAAE,aAAaA,GAAC;AAAE,MAAG,EAAE,SAAOA,IAAE,QAAO;AAAC,QAAI,IAAE,GAAGD,KAAE,CAAC,GAAE,IAAE,CAAC,OAAM,OAAM,SAAQ,QAAQ;AAAE,WAAM;AAAA,QAChP,GAAG,GAAE,CAAC,CAAC;AAAA,cACD,CAAC;AAAA,iBACE,CAAC,IAAI,GAAG,GAAE,CAAC,CAAC;AAAA;AAAA;AAAA,EAExB;AAAC,MAAGA,IAAE,UAAU,UAAU,QAAM;AAAA,cACvB,CAAC;AAAA;AAAA,iCAEkB,CAAC,KAAK,CAAC,KAAK,CAAC;AAAA,UACpC,GAAGA,GAAC,CAAC;AAAA;AAAA;AAET,MAAI,IAAEA,IAAE,UAAU,YAAW,IAAEA,IAAE,UAAU,UAAS,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,iBAAiB,CAAC,aAAY,IAAE,iBAAiB,CAAC,uBAAsB,IAAE,iBAAiB,CAAC;AAAsB,MAAG,MAAI,KAAG,KAAG,KAAK,QAAO,IAAE;AAAA,cACzM,CAAC;AAAA,UACL,CAAC;AAAA,UACD,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0BAMe,CAAC,gBAAgB,CAAC;AAAA,+BACb,CAAC;AAAA;AAAA,QAE1B;AAAA,cACQ,CAAC;AAAA;AAAA;AAAA;AAAA,uBAIQ,CAAC,KAAK,CAAC;AAAA;AAAA,0BAEJ,CAAC,OAAO,CAAC;AAAA,+BACJ,CAAC;AAAA;AAAA;AAE1B,MAAG,MAAI,KAAG,KAAG,KAAK,QAAO,IAAE;AAAA,cACnB,CAAC;AAAA;AAAA,gCAEiB,CAAC,cAAc,CAAC,aAAa,CAAC;AAAA;AAAA;AAAA,yBAGrC,CAAC,gBAAgB,CAAC;AAAA,+BACZ,CAAC;AAAA;AAAA,QAE1B;AAAA,cACQ,CAAC;AAAA;AAAA,gCAEiBC,IAAE,CAAC,IAAEA,IAAE,CAAC,CAAC,KAAKA,IAAE,CAAC,CAAC;AAAA;AAAA;AAAA,yBAGzB,CAAC,OAAO,CAAC;AAAA,+BACH,CAAC;AAAA;AAAA;AAE1B,MAAI,IAAE,GAAG,CAAC;AAAE,SAAO,IAAE;AAAA,YACf,CAAC;AAAA;AAAA,QAEL,CAAC;AAAA,QACD,CAAC;AAAA,QACD,CAAC;AAAA;AAAA;AAAA,6BAGoB,CAAC,gBAAgB,CAAC,wBAAwB,CAAC;AAAA,6BAC3C,CAAC;AAAA;AAAA,MAE1B;AAAA,YACQ,CAAC;AAAA;AAAA,0BAEa,CAAC,YAAY,CAAC;AAAA,oBACpB,CAAC;AAAA,6BACQ,CAAC,KAAK,CAAC,aAAa,CAAC;AAAA,6BACrB,CAAC;AAAA;AAAA;AAE3B;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAI,IAAEA,IAAE,UAAU,cAAaC,MAAED,IAAE,MAAK,IAAE,QAAMC,IAAE,OAAO,CAAC,EAAE,YAAY,IAAEA,IAAE,MAAM,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC,IAAE,GAAE,IAAE,EAAE,CAAC,IAAE,GAAE,IAAE,EAAE,CAAC,IAAE,GAAE,EAAC,UAAS,GAAE,UAAS,EAAC,IAAE,EAAE,aAAa,CAAC;AAAE,MAAG,EAAE,SAAO,EAAE,QAAO;AAAC,QAAI,IAAE,GAAGD,KAAE,CAAC,GAAE,IAAE,CAAC,OAAM,OAAM,SAAQ,UAAS,QAAQ;AAAE,WAAM;AAAA,QAChQ,GAAG,CAAC,CAAC;AAAA,cACC,CAAC;AAAA,iBACE,CAAC,IAAI,GAAG,GAAE,CAAC,CAAC;AAAA;AAAA;AAAA,EAExB;AAAC,MAAGA,IAAE,UAAU,UAAU,QAAM;AAAA,cACvB,CAAC;AAAA;AAAA;AAAA,iBAGE,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC;AAAA;AAAA,UAE1B,GAAGA,GAAC,CAAC;AAAA;AAAA;AAET,MAAI,IAAEA,IAAE,UAAU,YAAW,IAAEA,IAAE,UAAU,UAAS,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC;AAAE,MAAG,MAAI,KAAG,KAAG,KAAK,QAAM;AAAA,cAClF,CAAC;AAAA;AAAA;AAAA,gCAGiB,CAAC,KAAK,CAAC,KAAK,CAAC;AAAA;AAAA,0BAEnB,CAAC,OAAO,CAAC;AAAA,+BACJC,GAAC;AAAA;AAAA;AAE1B,MAAG,MAAI,KAAG,KAAG,KAAK,QAAM;AAAA,cAChB,CAAC;AAAA;AAAA;AAAA,iBAGE,EAAE,CAAC,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,CAAC;AAAA,iBACd,EAAE,CAAC,IAAE,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAAA;AAAA;AAAA,yBAGV,CAAC,OAAO,CAAC;AAAA,+BACHA,GAAC;AAAA;AAAA;AAE1B,MAAI,IAAE,GAAGA,GAAC;AAAE,SAAM;AAAA,YACZ,CAAC;AAAA;AAAA,0BAEa,CAAC,YAAY,CAAC,cAAc,CAAC;AAAA,qBAClC,CAAC,eAAe,CAAC;AAAA,6BACT,CAAC,KAAK,CAAC;AAAA,6BACPA,GAAC;AAAA;AAAA;AAE3B;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAI,IAAEA,IAAE,UAAU,cAAaC,MAAED,IAAE,MAAK,IAAE,QAAMC,IAAE,OAAO,CAAC,EAAE,YAAY,IAAEA,IAAE,MAAM,CAAC,GAAE,EAAC,UAAS,GAAE,UAAS,EAAC,IAAE,EAAE,aAAa,CAAC;AAAE,MAAG,EAAE,SAAO,EAAE,QAAO;AAAC,QAAI,IAAE,GAAGD,KAAE,CAAC,GAAE,IAAE,CAAC,OAAM,OAAM,SAAQ,UAAS,UAAS,QAAQ;AAAE,WAAM;AAAA,QACvO,GAAG,CAAC,CAAC;AAAA,cACC,CAAC;AAAA;AAAA,iBAEE,CAAC,IAAI,GAAG,GAAE,CAAC,CAAC;AAAA;AAAA;AAAA,EAExB;AAAC,MAAI,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC,IAAE,GAAE,IAAE,EAAE,CAAC,IAAE,GAAE,IAAE,EAAE,CAAC,IAAE,GAAE,IAAE,EAAE,CAAC,IAAE;AAAE,MAAGA,IAAE,UAAU,UAAU,QAAM;AAAA,cACtE,CAAC;AAAA;AAAA;AAAA;AAAA,iBAIE,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC;AAAA;AAAA;AAAA,mBAGjB,CAAC;AAAA,UACV,GAAGA,GAAC,CAAC;AAAA;AAAA;AAET,MAAI,IAAEA,IAAE,UAAU,YAAW,IAAEA,IAAE,UAAU,UAAS,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC;AAAE,MAAG,MAAI,KAAG,KAAG,KAAK,QAAM;AAAA,cAClF,CAAC;AAAA;AAAA;AAAA;AAAA,iBAIE,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC;AAAA;AAAA;AAAA,0BAGV,CAAC,OAAO,CAAC;AAAA,+BACJC,GAAC;AAAA;AAAA;AAE1B,MAAG,MAAI,KAAG,KAAG,KAAK,QAAM;AAAA,cAChB,CAAC;AAAA;AAAA;AAAA,iBAGE,EAAE,CAAC,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,CAAC;AAAA,iBACnB,EAAE,CAAC,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,CAAC;AAAA,iBACd,EAAE,CAAC,IAAE,EAAE,CAAC,CAAC;AAAA,iBACT,EAAE,CAAC,CAAC;AAAA;AAAA;AAAA,yBAGI,CAAC,OAAO,CAAC;AAAA,+BACHA,GAAC;AAAA;AAAA;AAE1B,MAAI,IAAE,GAAGA,GAAC;AAAE,SAAM;AAAA,YACZ,CAAC;AAAA;AAAA;AAAA,0BAGa,CAAC,YAAY,CAAC,cAAc,CAAC;AAAA,qBAClC,CAAC,eAAe,CAAC,eAAe,CAAC;AAAA,6BACzB,CAAC,KAAK,CAAC;AAAA,6BACPA,GAAC;AAAA;AAAA;AAE3B;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAI,IAAEA,IAAE,MAAKC,MAAE,EAAE,cAAcD,IAAE,UAAU,YAAY;AAAE,SAAOC,MAAE,IAAE,UAAU,CAAC,MAAI;AAAA,0BAC5EA,GAAC;AAAA;AAAA,iBAEV,CAAC;AAAA;AAAA;AAAA;AAGf;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAED,IAAE,MAAK,IAAEC,IAAE,OAAO,CAAC,EAAE,YAAY,IAAEA,IAAE,MAAM,CAAC,GAAE,IAAE,QAAM,IAAE,eAAc,IAAED,IAAE,UAAU,aAAa,QAAO,IAAE,EAAE,aAAa,QAAO,IAAE,GAAGA,IAAE,UAAU,cAAa,EAAE,YAAY,GAAE,IAAE,GAAG,CAAC,GAAE,IAAE,IAAE,GAAE,GAAE,IAAE,CAAC,KAAI,KAAI,KAAI,KAAI,KAAI,GAAG;AAAE,QAAI,IAAE,IAAE,KAAG,IAAE,KAAG,EAAE,UAAQ,IAAE,IAAE,gBAAc,IAAE,EAAE,IAAI,OAAG,UAAU,EAAE,IAAE,CAAC,CAAC,OAAO,EAAE,KAAK;AAAA,CACzU;AAAE,MAAI,IAAE;AAAG,MAAE,KAAG,IAAE,IAAE,IAAE,WAAS,IAAEA,IAAE,UAAU,aAAa,IAAI,CAAC,GAAE,MAAI,UAAU,EAAE,IAAE,CAAC,CAAC,EAAE,EAAE,KAAK,IAAI;AAAE,MAAI,IAAE,uBAAsB,IAAE,EAAE,cAAcA,IAAE,UAAU,YAAY,MAAI,GAAE,IAAE,EAAE,cAAc,EAAE,YAAY,MAAI;AAAE,MAAG,MAAI,KAAG,CAAC,KAAG,CAAC,EAAE,KAAE;AAAA;AAAA;AAAA,WAE5N,KAAG,CAAC,EAAE,OAAI,IAAE,IAAE;AAAA;AAAA,UAEpB,IAAE;AAAA;AAAA;AAAA,WAEM,EAAE,QAAO;AAAC,QAAI,IAAE,IAAE,GAAE,IAAE,IAAE;AAAE,MAAE,QAAQ,CAAC,IAAE,MAAI,EAAE,QAAQ,CAAC,IAAE,KAAG,IAAE,gCAA8B,EAAE,QAAQ,CAAC,IAAE,KAAG,IAAE,6EAA2E,EAAE,QAAQ,CAAC,IAAE,OAAK,IAAE;AAAA,EAA+C;AAAC,SAAM;AAAA,WACvQ,CAAC;AAAA,QACJ,CAAC;AAAA,QACD,CAAC;AAAA,8BACqB,CAAC,IAAI,CAAC;AAAA,QAC5B,CAAC;AAAA;AAAA;AAEN;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAIC,MAAED,IAAE,MAAK,IAAEC,IAAE,OAAO,CAAC,EAAE,YAAY,IAAEA,IAAE,MAAM,CAAC,GAAE,IAAE,QAAM,IAAE,eAAc,IAAE,EAAE,UAAS,IAAED,IAAE,UAAU,UAAS,IAAEA,IAAE,UAAU,aAAa,QAAO,IAAE,EAAE,aAAa;AAAO,MAAG,CAACA,IAAE,UAAU,aAAW,MAAI,KAAGA,IAAE,UAAU,cAAY,QAAM,EAAE,YAAY,GAAE,CAAC,EAAE,QAAM;AAAA,cAC1Q,CAAC;AAAA,+BACgBC,GAAC;AAAA;AAAA;AAE1B,MAAI,IAAE,GAAG,CAAC,GAAE,IAAE,GAAGD,IAAE,UAAU,cAAa,EAAE,YAAY,GAAE,IAAE,IAAE,GAAE,GAAE,IAAE,CAAC,KAAI,KAAI,KAAI,KAAI,KAAI,GAAG;AAAE,QAAI,IAAE,IAAE,KAAG,IAAE,KAAG,EAAE,UAAQ,IAAE,IAAE,gBAAc,IAAE,EAAE,IAAI,OAAG,UAAU,EAAE,IAAE,CAAC,CAAC,OAAO,EAAE,KAAK;AAAA,CACxL;AAAE,MAAI,IAAE;AAAG,SAAO,IAAE,KAAG,IAAE,IAAE,IAAE,WAAS,IAAEA,IAAE,UAAU,aAAa,IAAI,CAAC,GAAE,MAAI,UAAU,EAAE,IAAE,CAAC,CAAC,EAAE,EAAE,KAAK,IAAI,GAAE;AAAA,YAChG,CAAC;AAAA,QACL,CAAC;AAAA,QACD,CAAC;AAAA,kBACS,CAAC,IAAI,CAAC;AAAA;AAAA;AAErB;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAGA,OAAG,EAAE,QAAM;AAAM,MAAGA,QAAI,EAAE,QAAM;AAAQ,MAAGA,QAAI,EAAE,QAAM;AAAQ,MAAGA,QAAI,EAAE,QAAM;AAAQ,MAAGA,QAAI,EAAE,QAAM;AAAQ,MAAGA,QAAI,EAAE,QAAM;AAAQ,QAAM,MAAM,gBAAgBA,GAAC,uBAAuB;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAG,EAAC,UAAS,GAAE,UAAS,EAAC,IAAE,EAAE,aAAa,CAAC,GAAE,IAAE,EAAE,QAAO,IAAED,OAAG,MAAI,KAAG,EAAE,CAAC,MAAI,GAAE,IAAE,IAAE,EAAE,MAAM,CAAC,IAAE,GAAE,IAAE,CAACA,OAAG,IAAE,KAAG,CAAC,EAAE,YAAY,GAAEC,GAAC,KAAG,EAAE,SAAO,KAAG;AAAE,SAAM,EAAC,iBAAgB,GAAE,cAAa,IAAE,IAAE,GAAE,UAAS,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,KAAK,MAAM,KAAK,UAAUD,GAAC,CAAC;AAAE,SAAOC,IAAE,UAAU,eAAa,GAAEA;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,SAAO,EAAE,IAAI,CAAAC,QAAGD,IAAEC,GAAC,CAAC,EAAE,KAAK,IAAI;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE;AAAC,MAAI,IAAEA,IAAE,IAAI,CAAC,GAAE,MAAI;AAAC,QAAI,IAAE,EAAC,cAAa,EAAE,OAAM,UAAS,EAAE,YAAU,OAAK,EAAE,QAAQ,UAAS,WAAU,EAAE,WAAU,UAAS,EAAE,YAAU,QAAG,EAAE,QAAQ,UAAS,YAAW,KAAI;AAAE,WAAO,EAAE,WAAS,QAAM,EAAE,QAAQ,SAAO,QAAM,EAAE,QAAQ,MAAM,aAAW,MAAI,EAAE,aAAW,EAAE,QAAQ,MAAM,aAAY,EAAC,MAAK,EAAE,cAAc,CAAC,GAAE,WAAU,EAAC;AAAA,EAAC,CAAC,GAAE,IAAE,EAAE,IAAI,OAAG,EAAE,SAAS,GAAE,IAAE,EAAC,cAAa,EAAE,OAAM,UAAS,EAAE,QAAQ,UAAS,WAAU,OAAG,UAAS,EAAE,QAAQ,UAAS,YAAW,KAAI,GAAE,IAAE,GAAG,GAAE,GAAE,CAAC,GAAE,IAAE,GAAGD,IAAE,IAAG,CAAC,GAAE,IAAEA,IAAE,cAAc,CAAC;AAAE,SAAO,EAAE,EAAE,IAAI,qBAAqB,IAAE,EAAC,SAAQ,GAAE,gBAAe,GAAE,QAAO,GAAE,cAAa,GAAE,cAAa,GAAE,cAAa,GAAE,oBAAmB,MAAK,wBAAuB,MAAK,QAAO,MAAK,QAAO,MAAK,kBAAiB,MAAK,yBAAwB,MAAK,qBAAoB,KAAI,KAAGA,IAAE,SAAS,CAAC,GAAE,OAAO,OAAO,EAAC,SAAQ,GAAE,gBAAe,GAAE,QAAO,GAAE,cAAa,GAAE,cAAa,GAAE,cAAa,EAAC,GAAE,GAAGA,KAAE,GAAE,CAAC,CAAC;AAAE;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,CAAC,GAAE,IAAE,CAAC,GAAE,GAAE,GAAE,GAAE,IAAE,MAAK,IAAE;AAAK,MAAED,IAAE,mBAAmBC,KAAE,OAAM,KAAE,GAAE,EAAE,EAAE,UAAU,eAAe,MAAI,MAAI,IAAED,IAAE,mBAAmBC,KAAE,YAAW,KAAE;AAAG,MAAI,IAAE;AAAG,WAAQ,KAAK,EAAE,eAAc;AAAC,QAAI,IAAE,EAAC,MAAK,GAAE,SAAQD,IAAE,mBAAmBC,KAAE,GAAE,CAAC,GAAE,QAAOD,IAAE,mBAAmBC,KAAE,SAAS,CAAC,IAAG,CAAC,EAAC;AAAE,MAAE,wBAAsB,EAAE,QAAMD,IAAE,mBAAmBC,KAAE,GAAG,CAAC,SAAQ,CAAC,GAAE,EAAE,WAASD,IAAE,mBAAmBC,KAAE,GAAG,CAAC,YAAW,CAAC,IAAG,EAAE,KAAK,CAAC;AAAA,EAAC;AAAC,MAAG,EAAE,wBAAsB,IAAED,IAAE,mBAAmBC,KAAE,YAAW,CAAC,GAAE,IAAED,IAAE,mBAAmBC,KAAE,mBAAkB,CAAC,GAAE,IAAED,IAAE,mBAAmBC,KAAE,eAAc,CAAC,IAAG,EAAE,eAAe,UAAQ,KAAK,EAAE,eAAe,GAAE,KAAKD,IAAE,mBAAmBC,KAAE,EAAE,MAAK,CAAC,CAAC;AAAE,SAAM,EAAC,oBAAmB,GAAE,wBAAuB,GAAE,QAAO,GAAE,QAAO,GAAE,kBAAiB,GAAE,yBAAwB,GAAE,qBAAoB,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAGA,IAAE,WAAS,EAAE,OAAO,OAAM,MAAM,4BAA4BA,IAAE,MAAM,kCAAkC,EAAE,MAAM,SAAS;AAAE,EAAAA,IAAE,QAAQ,CAACC,KAAE,MAAI;AAAC,QAAI,IAAEA,IAAE,cAAa,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE;AAAM,QAAG,CAAC,EAAE,YAAY,GAAE,CAAC,EAAE,OAAM,MAAM,2EAA2E,CAAC,QAAQ,CAAC,aAAa;AAAE,QAAGA,IAAE,aAAW,EAAE,UAAU;AAAO,QAAI,IAAEA,IAAE,UAAS,IAAE,EAAE,YAAU,OAAK,EAAE,QAAQ;AAAS,QAAG,CAAC,EAAE,YAAY,GAAE,CAAC,EAAE,OAAM,MAAM,kFAAkF,CAAC,QAAQ,CAAC,aAAa;AAAA,EAAC,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE;AAAC,IAAE,QAAQ,wBAAsB,GAAG,EAAE,cAAaA,GAAC,GAAE,GAAG,CAAC,EAAE,YAAY,GAAE,CAAC,CAAC,CAAC;AAAG,MAAI,IAAE,EAAE,QAAQ,SAAQ,IAAE,EAAE,QAAQ;AAAS,IAAE,QAAQ,WAASD,IAAE,6BAA6B,EAAE,SAAQ,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,IAAEA,IAAE,uBAAuB,EAAE,SAAQ,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,GAAEA,IAAE,WAAW,EAAE,YAAY,GAAEA,IAAE,gBAAgB,EAAE,aAAa,GAAG,GAAE,EAAE,EAAE,UAAU,eAAe,MAAI,KAAG,EAAE,WAAS,QAAMA,IAAE,GAAG,UAAU,EAAE,QAAO,IAAE,CAAC,GAAE,EAAE,WAAS,QAAMA,IAAE,GAAG,UAAU,EAAE,QAAO,GAAG;AAAE,WAAQ,IAAE,GAAE,IAAEC,IAAE,QAAO,EAAE,GAAE;AAAC,QAAI,IAAEA,IAAE,CAAC,GAAE,EAAC,SAAQ,GAAE,QAAO,GAAE,OAAM,GAAE,UAAS,EAAC,IAAE,EAAE,mBAAmB,CAAC;AAAE,QAAG,GAAE;AAAC,UAAG,EAAC,cAAa,EAAC,IAAE,GAAG,EAAE,QAAQ,cAAa,EAAE,OAAM,EAAE,QAAQ,QAAQ;AAAE,cAAO,EAAE,QAAO;AAAA,QAAC,KAAK;AAAE,UAAAD,IAAE,GAAG,WAAW,GAAE,IAAI,WAAW,CAAC,CAAC;AAAE;AAAA,QAAM,KAAK;AAAE,UAAAA,IAAE,GAAG,WAAW,GAAE,IAAI,WAAW,CAAC,CAAC;AAAE;AAAA,QAAM,KAAK;AAAE,UAAAA,IAAE,GAAG,WAAW,GAAE,IAAI,WAAW,CAAC,CAAC;AAAE;AAAA,QAAM,KAAK;AAAE,UAAAA,IAAE,GAAG,WAAW,GAAE,IAAI,WAAW,CAAC,CAAC;AAAE;AAAA,QAAM;AAAQ;AAAA,MAAK;AAAA,IAAC;AAAC,QAAG,KAAGA,IAAE,GAAG,UAAU,GAAE,EAAE,QAAQ,SAAS,CAAC,GAAE,EAAE,QAAQ,SAAS,CAAC,CAAC,GAAE,KAAG,MAAK;AAAC,UAAG,EAAE,WAAU;AAAC,YAAG,EAAE,cAAc,EAAE,KAAK,IAAE,EAAE,CAAAA,IAAE,GAAG,UAAU,GAAE,EAAE,cAAc,CAAC,CAAC;AAAA,aAAM;AAAC,cAAI,IAAE,EAAE;AAAc,uBAAa,iBAAe,IAAE,IAAI,aAAa,CAAC,IAAGA,IAAE,GAAG,WAAW,GAAE,CAAC;AAAA,QAAC;AAAC;AAAA,MAAQ;AAAC,QAAE,QAAQ,SAAO,QAAM,KAAG,QAAMA,IAAE,GAAG,UAAU,GAAE,EAAE,QAAQ,MAAM,UAAU,GAAEA,IAAE,sBAAsB,EAAE,QAAQ,QAAQ,SAAQ,GAAE,CAAC;AAAA,IAAC;AAAA,EAAC;AAAC,MAAI,IAAE,EAAE;AAAiB,MAAG,EAAE,SAAO,EAAE,MAAM,QAAO;AAAA,IAAC,KAAK;AAAE,MAAAA,IAAE,GAAG,WAAW,GAAE,IAAI,WAAW,EAAE,KAAK,CAAC;AAAE;AAAA,IAAM,KAAK;AAAE,MAAAA,IAAE,GAAG,WAAW,GAAE,IAAI,WAAW,EAAE,KAAK,CAAC;AAAE;AAAA,IAAM,KAAK;AAAE,MAAAA,IAAE,GAAG,WAAW,GAAE,IAAI,WAAW,EAAE,KAAK,CAAC;AAAE;AAAA,IAAM,KAAK;AAAE,MAAAA,IAAE,GAAG,WAAW,GAAE,IAAI,WAAW,EAAE,KAAK,CAAC;AAAE;AAAA,IAAM;AAAQ;AAAA,EAAK;AAAC,MAAG,EAAE,yBAAwB;AAAC,QAAI,IAAE,EAAE,eAAe,EAAE,KAAK;AAAE,YAAO,EAAE,MAAM,QAAO;AAAA,MAAC,KAAK;AAAE,QAAAA,IAAE,GAAG,WAAW,EAAE,yBAAwB,IAAI,WAAW,CAAC,CAAC;AAAE;AAAA,MAAM,KAAK;AAAE,QAAAA,IAAE,GAAG,WAAW,EAAE,yBAAwB,IAAI,WAAW,CAAC,CAAC;AAAE;AAAA,MAAM,KAAK;AAAE,QAAAA,IAAE,GAAG,WAAW,EAAE,yBAAwB,IAAI,WAAW,CAAC,CAAC;AAAE;AAAA,MAAM;AAAQ;AAAA,IAAK;AAAA,EAAC;AAAC,MAAG,EAAE,uBAAqBA,IAAE,GAAG,UAAU,EAAE,qBAAoB,EAAE,QAAQ,SAAS,CAAC,GAAE,EAAE,QAAQ,SAAS,CAAC,CAAC,GAAE,EAAE,QAAQ,kBAAgB,EAAE,UAAQ,IAAE,GAAE,IAAE,EAAE,QAAQ,eAAe,QAAO,EAAE,GAAE;AAAC,QAAI,IAAE,EAAE,QAAQ,eAAe,CAAC,GAAE,IAAE,EAAE,uBAAuB,CAAC,GAAE,IAAE,EAAE,CAAC;AAAE,QAAG,EAAE,SAAO,QAAQ,CAAAA,IAAE,GAAG,WAAW,GAAE,CAAC;AAAA,aAAU,EAAE,SAAO,OAAO,CAAAA,IAAE,GAAG,WAAW,GAAE,CAAC;AAAA,aAAU,EAAE,SAAO,OAAO,CAAAA,IAAE,GAAG,WAAW,GAAE,CAAC;AAAA,aAAU,EAAE,SAAO,OAAO,CAAAA,IAAE,GAAG,WAAW,GAAE,CAAC;AAAA,aAAU,EAAE,SAAO,MAAM,CAAAA,IAAE,GAAG,WAAW,GAAE,CAAC;AAAA,aAAU,EAAE,SAAO,QAAQ,CAAAA,IAAE,GAAG,WAAW,GAAE,CAAC;AAAA,aAAU,EAAE,SAAO,QAAQ,CAAAA,IAAE,GAAG,WAAW,GAAE,CAAC;AAAA,aAAU,EAAE,SAAO,QAAQ,CAAAA,IAAE,GAAG,WAAW,GAAE,CAAC;AAAA,QAAO,OAAM,MAAM,gBAAgB,EAAE,IAAI,wBAAwB;AAAA,EAAC;AAAC,EAAAA,IAAE,eAAe;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE;AAAG,IAAE,OAAOA,GAAC,EAAE,QAAQ,OAAG;AAAC,QAAI,IAAE,EAAE,WAAS,QAAM,EAAE,QAAQ,SAAO,QAAM,EAAE,QAAQ,MAAM,aAAW;AAAE,QAAGD,IAAE,uBAAqB,CAAC,EAAE,WAAU;AAAC,UAAI,IAAE,EAAE,QAAQ,UAAS,EAAC,iBAAgB,GAAE,cAAa,GAAE,UAAS,EAAC,IAAE,GAAGA,IAAE,cAAa,EAAE,OAAM,CAAC,GAAE,IAAE,IAAG,IAAE,IAAG,IAAE;AAAG,UAAG,EAAE,WAAS,KAAGA,IAAE,cAAa;AAAC,YAAI,IAAE,CAAC,KAAK,KAAK,EAAE,CAAC,IAAE,CAAC,GAAE,KAAK,KAAK,EAAE,CAAC,IAAE,CAAC,CAAC;AAAE,YAAE,GAAG,EAAE,CAAC,IAAE,CAAC,IAAI,EAAE,CAAC,IAAE,CAAC;AAAA,MAAE,WAAS,EAAE,WAAS,KAAG,CAACA,IAAE,aAAa,KAAE,GAAG,EAAE,CAAC,IAAE,CAAC,IAAI,EAAE,CAAC,IAAE,CAAC;AAAA,eAAW,EAAE,SAAO,KAAG,CAACA,IAAE,cAAa;AAAC,YAAI,IAAE,EAAE,eAAe,CAAC;AAAE,YAAE,GAAG,EAAE,CAAC,MAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,SAAO,CAAC,MAAI,EAAE,CAAC,CAAC;AAAA,MAAE;AAAC,UAAI,IAAE,EAAE,MAAM,QAAO,IAAE,EAAE,WAAS,KAAG,EAAE,YAAY,EAAE,OAAM,CAAC,GAAE,IAAE,EAAE,cAAc,EAAE,KAAK,MAAI,GAAE,IAAE,EAAE,iBAAiB,EAAE,OAAMC,IAAE,KAAK,GAAE,IAAE,CAACD,IAAE,gBAAc,MAAIC,IAAE,MAAM,UAAQ,EAAE,YAAY,GAAEA,IAAE,QAAQ,QAAQ,GAAE,IAAED,IAAE,gBAAc,EAAE,SAAO,IAAE,KAAG,GAAG,EAAE,CAAC,IAAE,CAAC,IAAI,EAAE,CAAC,IAAE,CAAC;AAAG,WAAG,GAAG,CAAC,IAAI,CAAC,IAAI,IAAE,IAAE,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AAAA,IAAE,OAAK;AAAC,UAAI,IAAE,EAAE,YAAU,YAAU,EAAE,QAAQ;AAAS,WAAG,GAAG,EAAE,KAAK,IAAI,CAAC,IAAI,CAAC;AAAA,IAAE;AAAA,EAAC,CAAC;AAAE,MAAI,IAAEA,IAAE,UAAS,IAAEA,IAAE,YAAY;AAAK,SAAO,KAAG,MAAI,IAAE,MAAI,IAAE,GAAG,EAAE,EAAE,UAAU,eAAe,CAAC,IAAG;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAO,EAAE,EAAE,QAAQ,2BAA2B,KAAGA,OAAG;AAAC;AAAC,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,eAAa,OAAG,KAAK,eAAa,MAAG,KAAK,mBAAiB,GAAG,OAAM,KAAK,iBAAe,CAAC,EAAC,MAAK,YAAW,MAAK,QAAO,CAAC;AAAE,QAAIC,MAAE,GAAG;AAAE,SAAK,cAAY,GAAE,KAAK,sBAAoB,GAAG,KAAK,YAAY,MAAM,GAAE,KAAK,WAAS;AAAA;AAAA,UAEntN,KAAK,sBAAoB,GAAG,CAAC,KAAI,KAAI,GAAG,GAAE,CAAC,IAAE,GAAG,CAAC,KAAI,KAAI,GAAG,GAAE,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAgBhEA,IAAE,MAAM;AAAA;AAAA;AAAA,EAEb;AAAC;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,eAAa,MAAG,KAAK,eAAa,MAAG,KAAK,mBAAiB,GAAG,OAAM,KAAK,iBAAe,CAAC,EAAC,MAAK,YAAW,MAAK,QAAO,CAAC;AAAE,QAAIA,MAAE,GAAG;AAAE,SAAK,cAAY,GAAE,KAAK,sBAAoB,GAAG,KAAK,YAAY,MAAM,GAAE,KAAK,WAAS;AAAA;AAAA,UAElR,KAAK,sBAAoB,GAAG,CAAC,KAAI,KAAI,GAAG,GAAE,CAAC,IAAE,GAAG,CAAC,KAAI,KAAI,GAAG,GAAE,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAgBhEA,IAAE,MAAM;AAAA;AAAA;AAAA,EAEb;AAAC;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,cAAY,GAAG;AAAS,QAAIA,MAAE,GAAG;AAAE,SAAK,cAAY,GAAE,KAAK,WAAS;AAAA,QAC9H,EAAE;AAAA;AAAA;AAAA;AAAA,UAIAA,IAAE,MAAM;AAAA;AAAA;AAAA,EAEb;AAAC;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,eAAa,MAAG,KAAK,eAAa,OAAG,KAAK,cAAY,GAAG;AAAS,QAAIA,MAAE,GAAG;AAAE,SAAK,cAAY,GAAE,KAAK,WAAS;AAAA,QACxK,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA,UAKAA,IAAE,MAAM;AAAA;AAAA;AAAA,EAEb;AAAC;AAAE,IAAI,KAAG,EAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,EAAC;AAAvB,IAAyB,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,MAAE,OAAG,IAAE,QAAO;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,iBAAe,CAAC,EAAC,MAAK,YAAW,MAAK,QAAO,CAAC;AAAE,QAAI,IAAE,GAAG;AAAE,SAAK,cAAY,GAAE,KAAK,sBAAoB,GAAG,KAAK,YAAY,MAAM;AAAE,QAAI,IAAE;AAAS,IAAAA,QAAI,IAAE;AAA8B,QAAI,IAAE;AAAG,aAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,KAAI;AAAC,UAAI,IAAE,EAAE,CAAC;AAAE,WAAG;AAAA,yBACrT,CAAC;AAAA,8BACI,GAAG,CAAC,CAAC;AAAA;AAAA,IACvB;AAAC,SAAK,WAAS;AAAA,QACnB,KAAK,sBAAoB,GAAG,IAAE,GAAG,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uCAMJ,EAAE,MAAM;AAAA;AAAA,sCAET,EAAE,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0BAMpB,EAAE,SAAS;AAAA,YACzB,CAAC;AAAA;AAAA,UAEH,EAAE,MAAM,WAAW,CAAC;AAAA;AAAA;AAAA,EAEzB;AAAC;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,MAAE,OAAG;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,eAAa,OAAG,KAAK,eAAa,MAAG,KAAK,iBAAe,CAAC,EAAC,MAAK,YAAW,MAAK,QAAO,CAAC;AAAE,QAAI,IAAE,GAAG;AAAE,SAAK,cAAY,GAAE,KAAK,sBAAoB,GAAG,KAAK,YAAY,MAAM;AAAE,QAAI,IAAE,IAAG,IAAE;AAAS,IAAAA,QAAI,IAAE;AAA8B,aAAQ,IAAE,GAAE,KAAG,GAAE,IAAI,UAAQ,IAAE,GAAE,KAAG,GAAE,KAAI;AAAC,UAAI,IAAE,IAAE,IAAE;AAAE,WAAG;AAAA;AAAA,gCAEtU,CAAC,MAAM,KAAK,sBAAoB,gBAAc,GAAG,EAAE,CAAC,CAAC,EAAE;AAAA,8BACzD,CAAC;AAAA,iCACE,CAAC,MAAM,KAAK,sBAAoB,gBAAc,GAAG,EAAE,CAAC,CAAC,EAAE;AAAA,gCACxD,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAUV,EAAE,SAAS;AAAA;AAAA;AAAA,uBAGX,CAAC;AAAA;AAAA,uBAED,CAAC;AAAA;AAAA,uBAED,CAAC;AAAA;AAAA,uBAED,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,IAIf;AAAC,SAAK,WAAS;AAAA,UACd,KAAK,sBAAoB,GAAG,IAAE,GAAG,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAWjC,CAAC;AAAA;AAAA,YAED,EAAE,MAAM,MAAM,CAAC;AAAA;AAAA;AAAA,EAEtB;AAAC;AAAE,IAAI,KAAG,CAAC;AAAE,GAAG,IAAG,EAAC,mCAAkC,MAAI,IAAG,+BAA8B,MAAI,IAAG,4BAA2B,MAAI,IAAG,kCAAiC,MAAI,IAAG,4BAA2B,MAAI,IAAG,mBAAkB,MAAI,IAAG,2BAA0B,MAAI,IAAG,kCAAiC,MAAI,IAAG,oBAAmB,MAAI,IAAG,oBAAmB,MAAI,IAAG,iDAAgD,MAAI,IAAG,iCAAgC,MAAI,IAAG,uCAAsC,MAAI,IAAG,gCAA+B,MAAI,IAAG,0CAAyC,MAAI,IAAG,gDAA+C,MAAI,IAAG,0CAAyC,MAAI,IAAG,yCAAwC,MAAI,IAAG,gDAA+C,MAAI,IAAG,4BAA2B,MAAI,IAAG,0BAAyB,MAAI,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAI,IAAE,GAAG,GAAEC,MAAE,GAAG,EAAE,OAAO;AAAA;AAAA,MAE33B,EAAE,SAAS;AAAA,MACX,EAAE,SAAS;AAAA,MACX,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAKV,SAAO,GAAGD,KAAEC,GAAC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAI,IAAE,IAAI,aAAa,CAAC,IAAG,GAAE,GAAE,GAAE,GAAE,IAAG,IAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,IAAG,GAAE,GAAE,CAAC,CAAC;AAAE,SAAO,GAAGA,KAAE,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAI,IAAE,IAAI,YAAY,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,CAAC;AAAE,SAAO,GAAGA,KAAE,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE;AAAC,KAAG,GAAEA,GAAC;AAAE,MAAI,IAAE,GAAGD,GAAC,GAAE,IAAEA,IAAE;AAAW,SAAO,GAAGA,KAAE,MAAIA,IAAE,YAAY,GAAE,CAAC,CAAC,GAAE,GAAGA,KAAE,MAAIA,IAAE,cAAc,GAAEA,IAAE,gBAAeA,IAAE,aAAa,CAAC,GAAE,GAAGA,KAAE,MAAIA,IAAE,cAAc,GAAEA,IAAE,gBAAeA,IAAE,aAAa,CAAC,GAAE,GAAGA,KAAE,MAAIA,IAAE,cAAc,GAAEA,IAAE,oBAAmBA,IAAE,OAAO,CAAC,GAAE,GAAGA,KAAE,MAAIA,IAAE,cAAc,GAAEA,IAAE,oBAAmBA,IAAE,OAAO,CAAC,GAAE,EAAE,EAAE,UAAU,eAAe,MAAI,IAAE,GAAGA,KAAE,MAAIA,IAAE,WAAW,GAAE,GAAE,GAAE,GAAEC,KAAE,GAAE,GAAE,GAAE,IAAI,CAAC,IAAE,GAAGD,KAAE,MAAIA,IAAE,aAAa,GAAE,GAAE,GAAE,GAAEC,GAAC,CAAC,GAAE,GAAGD,KAAE,MAAIA,IAAE,YAAYA,IAAE,YAAW,IAAI,CAAC,GAAE,EAAC,SAAQ,GAAE,UAAS,CAACC,KAAE,CAAC,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,SAAOA,IAAE;AAAmB;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE;AAAC,MAAG,CAAC,GAAE,CAAC,IAAE,GAAG,GAAEA,GAAC;AAAE,SAAO,GAAGD,KAAE,GAAE,GAAE,GAAG,CAAC,GAAE,EAAE,oBAAmBA,IAAE,KAAK;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAOA,IAAE;AAAuB;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE;AAAC,MAAG,CAAC,GAAE,CAAC,IAAE,GAAG,GAAEA,GAAC;AAAE,SAAO,GAAGD,KAAE,GAAE,GAAE,GAAG,CAAC,GAAE,EAAE,oBAAmB,EAAE,oBAAoB;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAOA,IAAE;AAAqB;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE;AAAC,MAAG,CAAC,GAAE,CAAC,IAAE,GAAG,GAAEA,GAAC;AAAE,SAAO,GAAGD,KAAE,GAAE,GAAE,GAAG,CAAC,GAAEA,IAAE,MAAKA,IAAE,aAAa;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAOA,IAAE;AAAyB;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE;AAAC,MAAG,CAAC,GAAE,CAAC,IAAE,GAAG,GAAEA,GAAC;AAAE,SAAO,GAAGD,KAAE,GAAE,GAAE,GAAG,CAAC,GAAEA,IAAE,MAAKA,IAAE,KAAK;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAOA,IAAE;AAA6B;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE;AAAC,MAAG,CAAC,GAAE,CAAC,IAAE,GAAG,GAAEA,GAAC;AAAE,SAAO,GAAGD,KAAE,GAAE,GAAE,GAAG,CAAC,GAAEA,IAAE,MAAK,EAAE,oBAAoB;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,SAAO,GAAGD,KAAE,MAAIA,IAAE,WAAWA,IAAE,cAAaC,GAAC,CAAC,GAAE,GAAGD,KAAE,GAAE,gBAAeC,KAAE,GAAE,IAAG,CAAC,KAAG,GAAGD,KAAE,GAAE,MAAKC,KAAE,GAAE,IAAG,EAAE;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE;AAAC,KAAGD,KAAE,MAAIA,IAAE,YAAYA,IAAE,YAAW,CAAC,CAAC;AAAE,MAAI,GAAE,GAAE;AAAE,eAAa,cAAY,IAAE,IAAI,WAAWC,MAAE,IAAE,CAAC,GAAE,IAAED,IAAE,eAAc,IAAEA,IAAE,SAAO,IAAE,IAAI,aAAaC,MAAE,IAAE,CAAC,GAAE,IAAED,IAAE,OAAM,IAAE,EAAE,4BAA2B,EAAE,IAAI,CAAC,GAAE,EAAE,EAAE,UAAU,eAAe,MAAI,IAAE,GAAGA,KAAE,MAAIA,IAAE,cAAcA,IAAE,YAAW,GAAE,GAAE,GAAEC,KAAE,GAAED,IAAE,MAAK,GAAE,CAAC,CAAC,IAAE,GAAGA,KAAE,MAAIA,IAAE,WAAWA,IAAE,YAAW,GAAE,GAAEC,KAAE,GAAE,GAAED,IAAE,MAAK,GAAE,CAAC,CAAC,GAAE,GAAGA,KAAE,MAAIA,IAAE,YAAYA,IAAE,YAAW,IAAI,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,KAAGD,KAAE,MAAIA,IAAE,YAAYA,IAAE,YAAW,CAAC,CAAC,GAAEC,IAAE,gBAAgB,aAAW,EAAE,EAAE,UAAU,eAAe,MAAI,IAAE,GAAGD,KAAE,MAAIA,IAAE,cAAcA,IAAE,YAAW,GAAE,GAAE,GAAEC,IAAE,OAAMA,IAAE,QAAOD,IAAE,MAAKA,IAAE,eAAcC,IAAE,IAAI,CAAC,IAAE,GAAGD,KAAE,MAAIA,IAAE,WAAWA,IAAE,YAAW,GAAEA,IAAE,MAAKC,IAAE,OAAMA,IAAE,QAAO,GAAED,IAAE,MAAKA,IAAE,eAAcC,IAAE,IAAI,CAAC,IAAE,EAAE,EAAE,UAAU,eAAe,MAAI,IAAE,GAAGD,KAAE,MAAIA,IAAE,cAAcA,IAAE,YAAW,GAAE,GAAE,GAAEA,IAAE,MAAKA,IAAE,eAAcC,GAAC,CAAC,IAAE,GAAGD,KAAE,MAAIA,IAAE,WAAWA,IAAE,YAAW,GAAEA,IAAE,MAAKA,IAAE,MAAKA,IAAE,eAAcC,GAAC,CAAC,GAAE,GAAGD,KAAE,MAAIA,IAAE,YAAYA,IAAE,YAAW,IAAI,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE;AAAC,MAAI,IAAED,IAAE,aAAa;AAAE,KAAGA,KAAE,MAAIA,IAAE,WAAWA,IAAE,mBAAkB,CAAC,CAAC;AAAE,MAAI,IAAE,IAAE,IAAE,IAAEC;AAAE,SAAO,GAAGD,KAAE,MAAIA,IAAE,WAAWA,IAAE,mBAAkB,GAAEA,IAAE,WAAW,CAAC,GAAE,GAAGA,KAAE,MAAIA,IAAE,WAAW,GAAE,GAAEC,KAAE,GAAED,IAAE,MAAKA,IAAE,OAAM,CAAC,CAAC,GAAE,GAAGA,KAAE,MAAIA,IAAE,WAAWA,IAAE,mBAAkB,IAAI,CAAC,GAAE;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAED,KAAE,IAAE,IAAI,aAAaC,GAAC;AAAE,SAAO,EAAE,WAAW,EAAE,mBAAkB,CAAC,GAAE,EAAE,iBAAiB,EAAE,mBAAkB,GAAE,CAAC,GAAE,EAAE,WAAW,EAAE,mBAAkB,IAAI,GAAE;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE;AAAC,MAAG,CAAC,GAAE,CAAC,IAAE,GAAG,GAAEA,GAAC,GAAE,IAAE,GAAE,IAAE,IAAI,WAAW,GAAG,IAAEA,KAAE,CAAC,CAAC;AAAE,SAAO,GAAGD,KAAE,MAAIA,IAAE,WAAW,GAAE,GAAE,GAAE,GAAE,EAAE,uBAAsBA,IAAE,eAAc,CAAC,CAAC,GAAE,IAAI,aAAa,EAAE,MAAM;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE,GAAE,GAAE;AAAC,MAAI,IAAED,KAAE,IAAE,IAAI,aAAa,GAAG,GAAE,CAAC,CAAC;AAAE,SAAO,EAAE,WAAW,EAAE,mBAAkB,CAAC,GAAE,EAAE,iBAAiB,EAAE,mBAAkB,GAAE,CAAC,GAAE,EAAE,WAAW,EAAE,mBAAkB,IAAI,GAAE;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,IAAI,aAAa,IAAEA,MAAE,CAAC;AAAE,SAAO,GAAGD,KAAE,MAAIA,IAAE,WAAW,GAAE,GAAEC,KAAE,GAAED,IAAE,MAAKA,IAAE,OAAM,CAAC,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,MAAK,KAAK,UAAQ,MAAK,KAAK,WAAS,OAAG,KAAK,cAAY,CAAC;AAAE,QAAIC,MAAE,EAAE,EAAE,UAAU,eAAe;AAAE,QAAG,KAAG,QAAM,KAAK,KAAG,GAAE,GAAGA,KAAE,CAAC,KAAG,KAAK,KAAG,GAAGA,GAAC,GAAE,IAAE,KAAK,IAAG,EAAE,EAAE,UAAU,eAAe,MAAI,GAAE;AAAC,UAAI,IAAE;AAAE,WAAK,oBAAkB,MAAI,GAAG,GAAE,MAAI,EAAE,kBAAkB,CAAC,GAAE,KAAK,kBAAgB,OAAG,GAAG,GAAE,MAAI,EAAE,gBAAgB,CAAC,CAAC,GAAE,KAAK,oBAAkB,OAAG,GAAG,GAAE,MAAI,EAAE,kBAAkB,CAAC,CAAC,GAAE,KAAK,iBAAe,MAAI,GAAG,GAAE,MAAI,EAAE,aAAa,EAAE,oBAAoB,CAAC;AAAA,IAAC,WAAS,KAAG,MAAK;AAAC,UAAI,IAAE,EAAE,aAAa,yBAAyB;AAAE,UAAG,KAAG,KAAK,OAAM,IAAI,MAAM,2EAA2E;AAAE,WAAK,oBAAkB,MAAI,GAAG,GAAE,MAAI,EAAE,qBAAqB,CAAC,GAAE,KAAK,kBAAgB,OAAG,GAAG,GAAE,MAAI,EAAE,mBAAmB,CAAC,CAAC,GAAE,KAAK,oBAAkB,OAAG,GAAG,GAAE,MAAI,EAAE,qBAAqB,CAAC,CAAC,GAAE,KAAK,iBAAe,MAAI,GAAG,GAAE,MAAI,EAAE,aAAa,EAAE,wBAAwB,CAAC;AAAA,IAAC;AAAC,QAAI,IAAE,4BAA2B,IAAE;AAA8B,QAAG,KAAK,+BAA6B,KAAK,GAAG,aAAa,6BAA6B,GAAE,EAAE,EAAE,UAAU,eAAe,MAAI,GAAE;AAAC,UAAI,IAAE,qBAAoB,IAAE;AAAyB,UAAG,KAAK,wBAAsB,GAAG,KAAK,IAAG,CAAC,GAAE,GAAG,KAAK,IAAG,CAAC,EAAE,MAAK,4BAA0B,GAAG,KAAK,IAAG,CAAC;AAAA,eAAU,EAAE,EAAE,IAAI,0BAA0B,EAAE,OAAM,IAAI,MAAM,oHAAoH;AAAE,UAAG,KAAK,4BAA0B,KAAK,GAAG,aAAa,CAAC,GAAE,GAAG,KAAK,IAAG,CAAC,EAAE,MAAK,gCAA8B,GAAG,KAAK,IAAG,CAAC;AAAA,eAAU,EAAE,EAAE,IAAI,0BAA0B,EAAE,OAAM,IAAI,MAAM,6HAA6H;AAAA,IAAC,WAAS,IAAE,0BAAyB,GAAG,KAAK,IAAG,CAAC,EAAE,MAAK,4BAA0B,KAAK,GAAG,aAAa,CAAC;AAAA,aAAU,GAAG,KAAK,IAAG,CAAC,EAAE,MAAK,gCAA8B,KAAK,GAAG,aAAa,CAAC;AAAA,QAAO,OAAM,IAAI,MAAM,qDAAqD;AAAE,SAAK,eAAa,GAAG,KAAK,EAAE,GAAE,KAAK,cAAY,GAAG,KAAK,EAAE,GAAE,KAAK,cAAY,GAAG,KAAK,EAAE,GAAE,KAAK,gBAAc,GAAG,KAAK,IAAG,KAAK,yBAAyB;AAAA,EAAC;AAAA,EAAC,IAAI,QAAO;AAAC,WAAO,EAAE,EAAE,QAAQ,OAAO;AAAA,EAAC;AAAA,EAAC,UAAS;AAAC,QAAG,KAAK,SAAS;AAAO,SAAK,WAAS,QAAM,QAAQ,KAAK,sKAAsK,GAAE,KAAK,iBAAe,QAAM,QAAQ,KAAK,oMAAoM;AAAE,QAAI,IAAE,KAAK;AAAG,OAAG,GAAE,MAAI,EAAE,OAAO,CAAC,GAAE,GAAG,GAAE,MAAI,EAAE,gBAAgB,EAAE,aAAY,IAAI,CAAC,GAAE,GAAG,GAAE,MAAI,EAAE,kBAAkB,KAAK,WAAW,CAAC,GAAE,GAAG,GAAE,MAAI,EAAE,WAAW,EAAE,cAAa,IAAI,CAAC,GAAE,GAAG,GAAE,MAAI,EAAE,WAAW,EAAE,sBAAqB,IAAI,CAAC,GAAE,GAAG,GAAE,MAAI,EAAE,aAAa,KAAK,WAAW,CAAC,GAAE,KAAK,WAAS;AAAA,EAAE;AAAA,EAAC,2BAA2B,GAAEA,KAAE;AAAC,WAAO,KAAK,gBAAgB,GAAE,GAAG,KAAK,IAAG,GAAEA,KAAE,KAAK,aAAa;AAAA,EAAC;AAAA,EAAC,2BAA2B,GAAEA,KAAE;AAAC,WAAO,KAAK,gBAAgB,GAAE,GAAG,KAAK,IAAG,GAAEA,KAAE,KAAK,aAAa;AAAA,EAAC;AAAA,EAAC,iCAAiC,GAAEA,KAAE;AAAC,WAAO,KAAK,gBAAgB,GAAE,GAAG,KAAK,IAAG,GAAEA,KAAE,KAAK,aAAa;AAAA,EAAC;AAAA,EAAC,yBAAyB,GAAEA,KAAE;AAAC,SAAK,gBAAgB,GAAE,GAAG,KAAK,IAAG,GAAEA,GAAC;AAAA,EAAC;AAAA,EAAC,2BAA2B,GAAEA,KAAE,GAAE,GAAE;AAAC,SAAK,gBAAgB,GAAE,GAAG,KAAK,IAAG,GAAEA,KAAE,GAAE,GAAE,KAAK,aAAa;AAAA,EAAC;AAAA,EAAC,iCAAiC,GAAEA,KAAE;AAAC,WAAO,KAAK,gBAAgB,GAAE,GAAG,KAAK,IAAG,GAAEA,KAAE,KAAK,aAAa;AAAA,EAAC;AAAA,EAAC,0BAA0B,GAAEA,KAAE;AAAC,WAAO,KAAK,gBAAgB,GAAE,GAAG,KAAK,IAAG,GAAEA,KAAE,KAAK,aAAa;AAAA,EAAC;AAAA,EAAC,oBAAoB,GAAE;AAAC,SAAK,gBAAgB,GAAE,KAAK,kBAAgB,MAAI,GAAG,KAAK,IAAG,KAAK,WAAW,GAAE,KAAK,gBAAc,OAAM,GAAG,KAAK,IAAG,MAAI,KAAK,GAAG,cAAc,CAAC,CAAC;AAAA,EAAC;AAAA,EAAC,gDAAgD,GAAEA,KAAE,GAAE;AAAC,WAAO,KAAK,qBAAqB,GAAE,MAAI,GAAG,KAAK,IAAGA,KAAE,GAAE,KAAK,aAAa,CAAC;AAAA,EAAC;AAAA,EAAC,+BAA+B,GAAEA,KAAE,GAAE,GAAE,GAAE,GAAE;AAAC,WAAO,GAAG,KAAK,IAAG,GAAEA,KAAE,GAAE,GAAE,GAAE,GAAE,KAAK,aAAa;AAAA,EAAC;AAAA,EAAC,gCAAgC,GAAEA,KAAE;AAAC,WAAO,GAAG,KAAK,IAAG,GAAEA,GAAC;AAAA,EAAC;AAAA,EAAC,wBAAwB,GAAEA,KAAE,GAAE;AAAC,SAAK,yBAAyB,CAAC;AAAE,QAAI,IAAE,GAAG,KAAK,IAAGA,KAAE,GAAE,KAAK,aAAa;AAAE,WAAO,KAAK,2BAA2B,GAAE;AAAA,EAAC;AAAA,EAAC,wBAAuB;AAAC,QAAI,IAAE,KAAK,YAAY,KAAK,EAAE;AAAE,WAAO,KAAK,UAAU,CAAC;AAAA,EAAC;AAAA,EAAC,YAAY,GAAE;AAAC,QAAIA,KAAE;AAAE,QAAG,EAAE,EAAE,QAAQ,yBAAyB,GAAE;AAAC,UAAI,IAAE,GAAE,IAAE,EAAE,UAAU,EAAE,4BAA2B,CAAC;AAAE,QAAE,MAAM,GAAE,IAAE,MAAI;AAAC,YAAI,IAAE,EAAE,eAAe,GAAE,GAAE,CAAC;AAAE,eAAO,MAAI,EAAE,oBAAkB,MAAI,EAAE;AAAA,MAAmB,GAAEA,MAAE;AAAA,IAAC,MAAM,GAAE,EAAE,UAAU,8CAA8C,IAAE,KAAGA,MAAE,KAAK,WAAW,GAAE,KAAK,SAAS,GAAE,IAAE,MAAI,KAAK,iBAAiBA,KAAE,EAAE,EAAE,UAAU,8CAA8C,CAAC,KAAG,IAAE,MAAI;AAAG,WAAM,EAAC,OAAMA,KAAE,eAAc,EAAC;AAAA,EAAC;AAAA,EAAC,gCAAgC,GAAEA,KAAE,GAAE;AAAC,WAAO,KAAK,qBAAqB,GAAE,MAAI,GAAG,KAAK,IAAGA,KAAE,CAAC,CAAC;AAAA,EAAC;AAAA,EAAC,cAAc,GAAE;AAAC,SAAK,gBAAgB;AAAE,QAAIA,MAAE,KAAK;AAAG,SAAK,gBAAc,SAAO,KAAK,eAAa,GAAGA,GAAC;AAAG,QAAI,IAAE,GAAGA,GAAC;AAAE,OAAGA,KAAE,MAAIA,IAAE,aAAa,GAAE,KAAK,YAAY,CAAC,GAAE,GAAGA,KAAE,MAAIA,IAAE,aAAa,GAAE,CAAC,CAAC,GAAE,GAAGA,KAAE,CAAC;AAAE,QAAI,IAAE,OAAO,OAAO,GAAE,EAAC,KAAI,KAAK,kBAAkB,EAAC,CAAC;AAAE,WAAO,KAAK,SAAO,GAAGA,KAAE,CAAC,GAAE;AAAA,EAAC;AAAA,EAAC,SAAS,GAAE;AAAC,SAAK,WAAW,CAAC,GAAE,KAAK,gBAAgB,EAAE,GAAG;AAAE,QAAIA,MAAE,KAAK;AAAG,OAAGA,KAAE,MAAIA,IAAE,WAAWA,IAAE,sBAAqB,KAAK,WAAW,CAAC,GAAE,GAAGA,KAAE,GAAE,KAAK,YAAY;AAAA,EAAC;AAAA,EAAC,cAAc,GAAE;AAAC,SAAK,gBAAgB,GAAE,MAAI,KAAK,YAAU,KAAK,UAAQ,OAAM,KAAG,SAAO,GAAG,KAAK,IAAG,MAAI,KAAK,GAAG,cAAc,CAAC,CAAC,GAAE,KAAK,kBAAkB,EAAE,GAAG;AAAA,EAAE;AAAA,EAAC,WAAW,GAAE;AAAC,SAAK,gBAAgB,GAAE,KAAK,UAAQ,GAAE,KAAK,WAAS,QAAM,KAAK,SAAO,GAAG,KAAK,IAAG,KAAK,OAAO,GAAE,GAAG,KAAK,IAAG,MAAI,KAAK,GAAG,WAAW,CAAC,CAAC;AAAA,EAAC;AAAA,EAAC,mBAAmB,GAAEA,KAAE,IAAE,MAAG;AAAC,WAAO,KAAK,gBAAgB,GAAE,IAAE,GAAG,KAAK,IAAG,GAAEA,GAAC,IAAE,GAAG,KAAK,IAAG,GAAEA,GAAC;AAAA,EAAC;AAAA,EAAC,qBAAqB,GAAEA,KAAE;AAAC,WAAO,KAAK,gBAAgB,GAAE,GAAG,KAAK,IAAG,MAAI,KAAK,GAAG,kBAAkB,GAAEA,GAAC,CAAC;AAAA,EAAC;AAAA,EAAC,0BAA0B,GAAEA,KAAE;AAAC,WAAO,KAAK,gBAAgB,GAAE,KAAK,GAAG,mBAAmB,GAAEA,GAAC;AAAA,EAAC;AAAA,EAAC,sBAAsB,GAAEA,KAAE,GAAE;AAAC,SAAK,gBAAgB,GAAE,KAAK,iBAAiB,GAAE,GAAG,KAAK,IAAG,GAAEA,KAAE,CAAC;AAAA,EAAC;AAAA,EAAC,uBAAuB,GAAEA,KAAE,GAAE;AAAC,SAAK,6BAA6B,GAAE,GAAEA,GAAC;AAAA,EAAC;AAAA,EAAC,6BAA6B,GAAEA,KAAE,GAAE;AAAC,SAAK,gBAAgB;AAAE,QAAG,CAAC,GAAE,CAAC,IAAE,GAAGA,KAAE,CAAC;AAAE,SAAK,6BAA6B,GAAE,GAAE,CAAC;AAAA,EAAC;AAAA,EAAC,2BAA2B,GAAEA,KAAE,GAAE,GAAE;AAAC,SAAK,iCAAiC,GAAE,GAAE,GAAEA,GAAC;AAAA,EAAC;AAAA,EAAC,iCAAiC,GAAEA,KAAE,GAAE,GAAE;AAAC,UAAM,IAAI,MAAM,mDAAmD;AAAA,EAAC;AAAA,EAAC,gBAAe;AAAC,SAAK,WAAS,QAAM,GAAG,KAAK,IAAG,KAAK,OAAO,GAAE,GAAG,KAAK,EAAE;AAAA,EAAC;AAAA,EAAC,iBAAgB;AAAC,SAAK,gBAAgB,GAAE,KAAK,iBAAiB;AAAE,QAAI,IAAE,KAAK;AAAG,QAAG,KAAK,OAAM;AAAC,UAAIA,MAAE,KAAK,eAAe;AAAE,cAAQ,OAAOA,QAAI,KAAK,QAAQ,KAAI,oDAAoD,GAAE,KAAK,cAAc;AAAA,IAAC;AAAC,OAAG,GAAE,MAAI,EAAE,aAAa,EAAE,WAAU,GAAE,EAAE,gBAAe,CAAC,CAAC;AAAA,EAAC;AAAA,EAAC,iCAAgC;AAAC,SAAK,gBAAgB,GAAE,GAAG,KAAK,IAAG,MAAI,KAAK,GAAG,OAAO,CAAC;AAAA,EAAC;AAAA,EAAC,yBAAwB;AAAC,WAAO,KAAK,+BAA6B,SAAO,KAAK,8BAA4B,GAAG,KAAK,IAAG,EAAE,EAAE,UAAU,8CAA8C,MAAI,IAAE,oCAAkC,0BAA0B,IAAG,KAAK;AAAA,EAA2B;AAAA,EAAC,+BAA8B;AAAC,WAAO,KAAK,uBAAuB;AAAA,EAAC;AAAA,EAAC,+BAA8B;AAAC,WAAO,KAAK,uBAAuB;AAAA,EAAC;AAAA,EAAC,aAAY;AAAC,QAAG,EAAE,EAAE,UAAU,8CAA8C,MAAI,GAAE;AAAC,UAAI,IAAE,KAAK,IAAG,IAAE,KAAK,6BAA6B,GAAE,IAAE,EAAE,YAAY;AAAE,aAAO,EAAE,WAAW,EAAE,kBAAiB,CAAC,GAAE;AAAA,IAAC;AAAC,QAAI,IAAE,KAAK,6BAA6B,GAAEA,MAAE,EAAE,eAAe;AAAE,WAAO,EAAE,cAAc,EAAE,kBAAiBA,GAAC,GAAEA;AAAA,EAAC;AAAA,EAAC,WAAU;AAAC,QAAG,EAAE,EAAE,UAAU,8CAA8C,MAAI,GAAE;AAAC,UAAIA,MAAE,KAAK,IAAG,IAAE,KAAK,6BAA6B;AAAE,MAAAA,IAAE,SAAS,EAAE,gBAAgB;AAAE;AAAA,IAAM;AAAC,QAAI,IAAE,KAAK,6BAA6B;AAAE,MAAE,YAAY,EAAE,gBAAgB;AAAA,EAAC;AAAA,EAAC,MAAM,uBAAuB,GAAE;AAAC,WAAO,MAAM,EAAE,YAAY,MAAI,KAAK,YAAU,KAAK,iBAAiB,GAAE,EAAE,EAAE,UAAU,8CAA8C,CAAC,CAAC,GAAE,KAAK,aAAa,GAAE,EAAE,EAAE,UAAU,8CAA8C,CAAC;AAAA,EAAC;AAAA,EAAC,aAAa,GAAEA,KAAE;AAAC,QAAGA,QAAI,EAAE,QAAO;AAAK,QAAGA,QAAI,GAAE;AAAC,UAAI,IAAE,KAAK;AAAG,aAAO,EAAE,kBAAkB,GAAE,EAAE,YAAY,IAAE;AAAA,IAAG,OAAK;AAAC,UAAI,IAAE,KAAK,6BAA6B;AAAE,aAAO,EAAE,kBAAkB,GAAE,EAAE,gBAAgB,IAAE;AAAA,IAAG;AAAA,EAAC;AAAA,EAAC,iBAAiB,GAAEA,KAAE;AAAC,QAAGA,QAAI,EAAE,QAAM;AAAG,QAAGA,QAAI,GAAE;AAAC,UAAI,IAAE,KAAK,IAAG,IAAE,KAAK,6BAA6B,GAAE,IAAE,EAAE,kBAAkB,GAAE,EAAE,sBAAsB;AAAE,aAAO,KAAK,YAAU,SAAO,KAAK,WAAS,KAAK,GAAG,aAAa,EAAE,gBAAgB,IAAG,KAAG,CAAC,KAAK;AAAA,IAAQ,OAAK;AAAC,UAAI,IAAE,KAAK,6BAA6B,GAAE,IAAE,EAAE,kBAAkB,GAAE,EAAE,0BAA0B;AAAE,aAAO,KAAK,YAAU,SAAO,KAAK,WAAS,KAAK,GAAG,aAAa,EAAE,gBAAgB,IAAG,KAAG,CAAC,KAAK;AAAA,IAAQ;AAAA,EAAC;AAAA,EAAC,UAAU,GAAE;AAAC,WAAO,IAAI,QAAQ,CAAAA,QAAG;AAAC,WAAK,cAAc,MAAI,EAAE,cAAc,GAAE,MAAIA,IAAE,CAAC;AAAA,IAAC,CAAC;AAAA,EAAC;AAAA,EAAC,YAAW;AAAC,QAAI,IAAE,GAAG,KAAK,YAAY,IAAI,CAAAA,QAAGA,IAAE,QAAQ,CAAC;AAAE,aAAQA,MAAE,GAAEA,OAAG,GAAE,EAAEA,KAAE;AAAC,UAAG,EAAC,WAAU,EAAC,IAAE,KAAK,YAAYA,GAAC;AAAE,QAAE;AAAA,IAAC;AAAC,SAAK,cAAY,KAAK,YAAY,MAAM,IAAE,CAAC;AAAA,EAAC;AAAA,EAAC,cAAc,GAAEA,KAAE;AAAC,QAAG,KAAK,YAAY,KAAK,EAAC,UAAS,GAAE,WAAUA,IAAC,CAAC,GAAE,KAAK,YAAY,SAAO,EAAE;AAAO,QAAI;AAAE,0BAAqB,EAAE,EAAE,aAAW,IAAE,EAAE,EAAE,SAAS,iBAAiB,KAAK,EAAE,EAAE,QAAQ,IAAG,EAAE,YAAY,OAAK,KAAK,UAAU,GAAE,KAAK,YAAY,WAAS,IAAG,MAAI,GAAE,MAAK,CAAC;AAAA,EAAC;AAAA,EAAC,yBAAyB,GAAE;AAAC,SAAK,gBAAgB,GAAE,GAAG,KAAK,IAAG,GAAE,KAAK,WAAW,GAAE,KAAK,SAAO,GAAG,KAAK,EAAE;AAAA,EAAC;AAAA,EAAC,6BAA4B;AAAC,SAAK,iBAAe,QAAM,GAAG,KAAK,IAAG,KAAK,eAAc,KAAK,WAAW,GAAE,KAAK,SAAO,GAAG,KAAK,EAAE,KAAG,GAAG,KAAK,IAAG,KAAK,WAAW;AAAA,EAAC;AAAA,EAAC,qBAAqB,GAAEA,KAAE;AAAC,SAAK,yBAAyB,CAAC;AAAE,QAAI,IAAEA,IAAE;AAAE,WAAO,KAAK,2BAA2B,GAAE;AAAA,EAAC;AAAA,EAAC,6BAA6B,GAAEA,KAAE,GAAE;AAAC,SAAK,gBAAgB;AAAE,QAAI,IAAE,KAAK;AAAG,OAAG,GAAE,GAAE,KAAK,WAAW,GAAE,KAAK,SAAO,GAAG,CAAC,GAAE,KAAK,gBAAc,GAAE,GAAG,GAAE,MAAI,EAAE,SAAS,GAAE,GAAEA,KAAE,CAAC,CAAC,GAAE,GAAG,GAAE,MAAI,EAAE,QAAQ,GAAE,GAAEA,KAAE,CAAC,CAAC;AAAA,EAAC;AAAA,EAAC,iCAAiC,GAAEA,KAAE,GAAE,GAAE;AAAC,SAAK,gBAAgB,GAAE,GAAG,KAAK,IAAG,MAAI,KAAK,GAAG,QAAQ,GAAEA,KAAE,GAAE,CAAC,CAAC;AAAA,EAAC;AAAA,EAAC,kBAAiB;AAAC,QAAG,KAAK,SAAS,OAAM,IAAI,MAAM,yCAAyC;AAAA,EAAC;AAAA,EAAC,mBAAkB;AAAC,QAAG,KAAK,WAAS,KAAK,OAAM,IAAI,MAAM,kCAAkC;AAAA,EAAC;AAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAI,IAAE;AAAE,SAAK,IAAEA,IAAE,UAAQA,IAAE,CAAC,EAAE,GAAE,EAAE,EAAE;AAAC,SAAO,IAAE;AAAC;AAAC,IAAG,EAAC,SAAQ,IAAG,cAAa,IAAG,oBAAmB,IAAG,gBAAe,IAAG,UAAS,IAAG,UAAS,IAAG,YAAW,IAAG,WAAU,IAAG,SAAQ,IAAG,WAAU,IAAG,WAAU,IAAG,cAAa,IAAG,cAAa,IAAG,aAAY,IAAG,kBAAiB,IAAG,UAAS,IAAG,eAAc,IAAG,cAAa,IAAG,SAAQ,IAAG,SAAQ,IAAG,aAAY,IAAG,aAAY,IAAG,cAAa,IAAG,SAAQ,IAAG,cAAa,IAAG,UAAS,IAAG,kBAAiB,IAAG,iBAAgB,IAAG,0BAAyB,IAAG,WAAU,IAAG,WAAU,IAAG,aAAY,IAAG,aAAY,IAAG,eAAc,IAAG,WAAU,IAAG,yBAAwB,IAAG,mBAAkB,IAAG,4BAA2B,IAAG,UAAS,IAAG,wBAAuB,IAAG,kBAAiB,IAAG,kBAAiB,IAAG,iBAAgB,IAAG,4BAA2B,IAAG,SAAQ,IAAG,UAAS,IAAG,UAAS,IAAG,eAAc,IAAG,YAAW,GAAE,IAAE;AAAG,SAAS,GAAGA,KAAE,GAAE;AAAC,SAAM,CAAC,KAAI,KAAI,KAAI,KAAI,KAAI,GAAG,EAAE,MAAM,GAAE,CAAC,EAAE,IAAI,CAAAC,QAAG,GAAGD,GAAC,IAAIC,GAAC,EAAE;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,SAAO,MAAI,IAAE,CAACA,GAAC,IAAE,GAAGA,KAAE,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAGA,QAAI,EAAE,QAAM;AAAK,MAAIC,MAAE;AAAG,WAAQ,IAAE,GAAE,IAAED,KAAE,IAAI,CAAAC,OAAG,EAAE,CAAC,GAAE,IAAED,MAAE,MAAIC,OAAG;AAAK,SAAOA;AAAC;AAAC,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,QAAG,KAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,eAAa,OAAG,KAAK,eAAa,MAAG,KAAK,cAAY,GAAE,KAAK,OAAK,EAAE,QAAO,KAAK,sBAAoB,GAAG,KAAK,YAAY,MAAM,GAAE,KAAK,SAAO,EAAE,MAAK,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA,SAI7+c;AAAC,UAAIA,MAAE,GAAG,MAAK,KAAK,IAAI,GAAE,IAAE,GAAG,KAAK,IAAI,GAAE,IAAE,KAAK,wBAAwBA,GAAC,GAAE,IAAE,KAAK,SAASA,GAAC,GAAE,IAAE,KAAK,UAAUA,GAAC;AAAE,WAAK,WAAS;AAAA;AAAA,YAEjI,CAAC;AAAA;AAAA,eAEE,CAAC;AAAA;AAAA;AAAA,cAGF,CAAC;AAAA;AAAA,6BAEc,CAAC;AAAA;AAAA;AAAA;AAAA,IAGvB;AAAA,EAAC;AAAA,EAAC,mBAAmB,GAAE;AAAC,QAAIA,MAAE,CAAC;AAAE,aAAQ,IAAE,GAAE,KAAG,GAAE,IAAI,UAAQ,IAAE,GAAE,KAAG,GAAE,KAAI;AAAC,UAAI,IAAE,GAAG,MAAI,IAAE,MAAI,KAAK,KAAK,MAAI,IAAE,MAAI,KAAK;AAAG,eAAQ,IAAE,GAAE,IAAE,KAAK,MAAK,IAAI,KAAE,GAAG,EAAE,EAAE,SAAO,IAAE,CAAC,CAAC,MAAI;AAAE,MAAAA,IAAE,KAAK,CAAC;AAAA,IAAC;AAAC,WAAOA;AAAA,EAAC;AAAA,EAAC,wBAAwB,GAAE;AAAC,QAAG,KAAK,SAAO,EAAE,QAAM,QAAQ,KAAK,sBAAoB,aAAW,KAAK,YAAY,CAAC,CAAC;AAAG,QAAIA,MAAE;AAAG,aAAQ,IAAE,KAAK,OAAK,GAAE,IAAE,KAAK,MAAK,IAAI,CAAAA,OAAG,GAAG,EAAE,CAAC,CAAC,OAAO,KAAK,sBAAoB,YAAY,CAAC,MAAI,KAAK,YAAY,CAAC,CAAC,IAAG,IAAE,KAAK,OAAK,MAAIA,OAAG;AAAM,WAAOA;AAAA,EAAC;AAAA,EAAC,SAAS,GAAE;AAAC,QAAG,KAAK,SAAO,EAAE,QAAM;AAAG,QAAIA,MAAE,EAAE,MAAM,EAAE,GAAE,IAAE,KAAK,sBAAoB,YAAY,KAAK,IAAI,UAAQ,KAAK,YAAY,KAAK,OAAK,CAAC,GAAE,IAAE,KAAK,sBAAoB,YAAY,KAAK,IAAI,UAAQ,KAAK,YAAY,KAAK,OAAK,CAAC;AAAE,WAAM;AAAA,gBAC3rBA,IAAE,CAAC,CAAC;AAAA,gBACJA,IAAE,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA,4BAIQ,CAAC;AAAA,4BACD,CAAC;AAAA;AAAA,EACxB;AAAA,EAAC,UAAU,GAAE;AAAC,QAAIA,MAAE,KAAK,mBAAmB,CAAC;AAAE,WAAO,KAAK,SAAO,IAAE,wBAAwB,KAAK,sBAAoB,aAAW,KAAK,YAAY,CAAC,CAAC,gCAA8B,QAAQA,IAAE,CAAC,CAAC;AAAA,gCAClKA,IAAE,CAAC,CAAC;AAAA,gCACJA,IAAE,CAAC,CAAC;AAAA,yCACKA,IAAE,CAAC,CAAC;AAAA,EAAG;AAAC;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,eAAa,MAAG,KAAK,eAAa,MAAG,KAAK,iBAAe,CAAC,EAAC,MAAK,cAAa,MAAK,QAAO,CAAC,GAAE,KAAK,cAAY,GAAE,KAAK,sBAAoB,GAAG,KAAK,YAAY,MAAM;AAAE,QAAI,IAAE;AAAG,aAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,UAAI,IAAE;AAAe,UAAE,MAAI,MAAI,KAAG,mBAAkB,IAAE,MAAI,KAAG,mBAAkB,KAAG;AAAA,UACzX,CAAC;AAAA,UACD,IAAE,IAAE,4CAA0C,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAMvC,CAAC;AAAA;AAAA,UAEV,IAAE,IAAE,MAAI,EAAE;AAAA;AAAA,IACb;AAAC,SAAK,WAAS;AAAA,QACd,GAAGA,KAAE,KAAK,mBAAmB,CAAC;AAAA,QAC9B,KAAK,sBAAoB,GAAG,IAAE,GAAG,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAQtB,KAAK,sBAAoB,gBAAc,EAAE,CAAC,CAAC;AAAA,qBAC3C,KAAK,sBAAoB,gBAAc,EAAE,CAAC,CAAC;AAAA;AAAA,UAEtD,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,EAIN;AAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,SAAM;AAAA;AAAA,QAEvB,IAAE,GAAG,CAAC,KAAI,KAAI,GAAG,GAAE,YAAY,IAAE,GAAG,CAAC,KAAI,KAAI,GAAG,GAAEA,GAAC,CAAC;AAAA;AAAA;AAAA;AAGzD;AAAC,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,QAAM,GAAE,KAAK,kBAAgB,GAAE,KAAK,kBAAgB,GAAE,KAAK,qBAAmB,GAAE,KAAK,gBAAc,GAAE,KAAK,eAAa,CAAC,GAAE,KAAK,eAAa,CAAC,GAAE,KAAK,aAAW;AAAA,EAAE;AAAA,EAAC,eAAe,GAAEC,KAAE,GAAE;AAAC,QAAI,IAAE,GAAGA,KAAE,CAAC,GAAE,IAAE,GAAG,GAAE,GAAE,CAAC;AAAE,SAAK,KAAK,iBAAe,KAAK,aAAa,CAAC,IAAE,CAAC,IAAG,KAAK,KAAK,iBAAe,KAAK,aAAa,CAAC,IAAE,CAAC;AAAG,QAAI,IAAE,GAAG,GAAE,GAAE,KAAK,MAAM,IAAG,KAAK,MAAM,eAAc,CAAC;AAAE,QAAG,KAAK,aAAa,CAAC,EAAE,SAAO,GAAE;AAAC,WAAK,mBAAkB,KAAK,mBAAkB,KAAK,iBAAe,GAAE,KAAK,IAAI;AAAE,UAAI,IAAE,KAAK,aAAa,CAAC,EAAE,IAAI;AAAE,aAAO,KAAK,aAAa,CAAC,EAAE,KAAK,CAAC,GAAE;AAAA,IAAC;AAAC,QAAI;AAAE,WAAO,MAAI,GAAG,qBAAmB,IAAE,KAAK,MAAM,0BAA0B,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,IAAE,MAAI,GAAG,qBAAmB,IAAE,KAAK,MAAM,iCAAiC,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,IAAE,MAAI,GAAG,mBAAiB,IAAE,KAAK,MAAM,2BAA2B,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,IAAE,MAAI,GAAG,mBAAiB,IAAE,KAAK,MAAM,2BAA2B,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,IAAE,MAAI,GAAG,6BAA2B,IAAE,KAAK,MAAM,iCAAiC,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,IAAG,KAAK,aAAa,CAAC,EAAE,KAAK,CAAC,GAAE,KAAK,mBAAkB,KAAK,sBAAoB,GAAE,KAAK,IAAI,GAAE;AAAA,EAAC;AAAA,EAAC,eAAe,GAAEA,KAAE,GAAE,GAAE;AAAC,QAAG,KAAK,gBAAc,KAAK;AAAO,QAAI,IAAE,GAAG,GAAE,CAAC,GAAE,IAAE,GAAGA,KAAE,GAAE,CAAC;AAAE,SAAK,KAAK,iBAAe,KAAK,aAAa,CAAC,IAAE,CAAC;AAAG,QAAI,IAAE,GAAGA,KAAE,GAAE,KAAK,MAAM,IAAG,KAAK,MAAM,eAAc,CAAC,GAAE,IAAE,EAAE,EAAE,UAAU,gCAAgC;AAAE,UAAI,MAAI,KAAK,qBAAmB,KAAG,KAAK,MAAM,oBAAoB,EAAE,OAAO,GAAE,KAAK,sBAAoB,MAAI,KAAK,aAAa,CAAC,EAAE,KAAK,CAAC,GAAE,KAAK,mBAAkB,KAAK,iBAAe,IAAG,KAAK;AAAkB,QAAI,IAAE,KAAK,aAAa,CAAC,GAAE,IAAE,KAAG,EAAE,QAAQ,CAAC;AAAE,QAAG,KAAG,QAAM,IAAE,EAAE,OAAM,IAAI,MAAM,0EAA0E;AAAE,MAAE,CAAC,IAAE,EAAE,EAAE,SAAO,CAAC,GAAE,EAAE,IAAI,GAAE,KAAK,IAAI;AAAA,EAAC;AAAA,EAAC,MAAK;AAAC,QAAG,CAAC,KAAK,WAAW;AAAO,QAAI,IAAE,KAAK,kBAAgB,KAAK;AAAgB,YAAQ,IAAI,aAAY,GAAG,KAAK,eAAe,MAAM,KAAK,eAAe,IAAG,IAAI,CAAC,GAAG;AAAE,QAAIA,MAAE,KAAK,gBAAc,KAAK;AAAmB,YAAQ,IAAI,oBAAoB,KAAK,kBAAkB,EAAE,GAAE,QAAQ,IAAI,iBAAiB,KAAK,aAAa,KAAK,KAAK,MAAM,MAAIA,GAAC,CAAC,IAAI;AAAA,EAAC;AAAA,EAAC,IAAI,oBAAmB;AAAC,WAAO,KAAK;AAAA,EAAkB;AAAA,EAAC,IAAI,eAAc;AAAC,WAAO,KAAK;AAAA,EAAa;AAAA,EAAC,qBAAoB;AAAC,WAAO,KAAK;AAAA,EAAe;AAAA,EAAC,qBAAoB;AAAC,WAAO,KAAK;AAAA,EAAe;AAAA,EAAC,UAAS;AAAC,QAAG,KAAK,gBAAc,MAAK;AAAC,eAAQ,KAAK,KAAK,aAAa,MAAK,aAAa,CAAC,EAAE,QAAQ,CAAAA,QAAG;AAAC,aAAK,MAAM,oBAAoBA,IAAE,OAAO;AAAA,MAAC,CAAC;AAAE,eAAQ,KAAK,KAAK,aAAa,MAAK,aAAa,CAAC,EAAE,QAAQ,CAAAA,QAAG;AAAC,aAAK,MAAM,oBAAoBA,IAAE,OAAO;AAAA,MAAC,CAAC;AAAE,WAAK,eAAa,MAAK,KAAK,eAAa,MAAK,KAAK,kBAAgB,GAAE,KAAK,kBAAgB,GAAE,KAAK,qBAAmB,GAAE,KAAK,gBAAc;AAAA,IAAC;AAAA,EAAC;AAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAED;AAAE,MAAG,MAAIC,IAAE,KAAK,QAAO;AAAE,MAAG,MAAIA,IAAE,KAAK,QAAO;AAAE,MAAG,MAAIA,IAAE,QAAQ,QAAO;AAAG,MAAG,MAAID,IAAE,KAAK,QAAO;AAAG,MAAG,MAAIC,IAAE,QAAQ,QAAO;AAAE,MAAG,MAAIA,IAAE,MAAM,QAAO;AAAE,QAAM,IAAI,MAAM,2BAA2B,CAAC,EAAE;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE;AAAC,MAAI,IAAEI,IAAG,GAAE,CAAC,GAAE;AAAE,MAAG,GAAE;AAAC,QAAG,CAAC,GAAE,CAAC,IAAE,GAAGL,IAAE,CAAC,GAAEA,IAAE,CAAC,CAAC;AAAE,QAAE,IAAE;AAAA,EAAC,OAAK;AAAC,QAAG,CAAC,GAAE,CAAC,IAAE,GAAGA,IAAE,CAAC,GAAEA,IAAE,CAAC,CAAC;AAAE,QAAE,IAAE;AAAA,EAAC;AAAC,MAAI,IAAE,GAAGC,KAAE,CAAC;AAAE,SAAO,IAAE;AAAC;AAAC,SAASI,IAAGL,KAAE,GAAE;AAAC,UAAOA,KAAE;AAAA,IAAC,KAAK,GAAG;AAAmB,aAAO,GAAG,CAAC;AAAA,IAAE,KAAK,GAAG;AAAmB,aAAO,GAAG,CAAC;AAAA,IAAE,KAAK,GAAG;AAAiB,aAAO,GAAG,CAAC;AAAA,IAAE,KAAK,GAAG;AAAiB,aAAO,GAAG,CAAC;AAAA,IAAE,KAAK,GAAG;AAAyB,aAAO,GAAG,CAAC;AAAA,IAAE;AAAQ,YAAM,IAAI,MAAM,iCAAiCA,GAAC,EAAE;AAAA,EAAC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAO,EAAE,EAAE,QAAQ,8BAA8B,IAAEA,MAAE,GAAG,qBAAmB,GAAG,mBAAiBA,MAAE,GAAG,qBAAmB,GAAG;AAAgB;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAGA,QAAI,GAAG,OAAO,QAAO,GAAG;AAAmB,MAAGA,QAAI,GAAG,UAAQA,OAAG,KAAK,QAAO,GAAG,CAAC;AAAE,MAAGA,QAAI,GAAG,YAAUA,QAAI,GAAG,OAAO,QAAO,GAAG;AAAyB,QAAM,IAAI,MAAM,gCAAgCA,GAAC,EAAE;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,SAAM,GAAGD,IAAE,CAAC,CAAC,IAAIA,IAAE,CAAC,CAAC,IAAI,CAAC,IAAIC,GAAC;AAAE;AAAC,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,cAAY,GAAE,KAAK,sBAAoB,GAAG,KAAK,YAAY,MAAM,GAAE,KAAK,WAAS;AAAA;AAAA,UAEryHA,GAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASN;AAAC;AAX4pH,IAW1pH,KAAG;AAXupH,IAW7nH,KAAG;AAX0nH,IAW9mH,KAAG;AAAiB,IAAI,KAAG;AAAP,IAAiD,KAAG,KAAG;AAAA;AAAA;AAAvD,IAEtE,KAAG,KAAG;AAAA;AAAA;AAFgE,IAItE,KAAG;AAJmE,IAIvD,KAAG;AAAsC,IAAI,KAAG;AAAP,IAAmB,KAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAtB,IASxD,KAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AATqD,IAmBxD,KAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAnBqD,IA6BxD,KAAG;AA7BqD,IA6Bf,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,eAAa,MAAG,KAAK,eAAa,MAAG,KAAK,cAAY,GAAE,KAAK,sBAAoB,GAAG,KAAK,YAAY,MAAM,GAAE,KAAK,WAAS;AAAA;AAAA,UAEpNA,GAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASN;AAAC;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,eAAa,MAAG,KAAK,eAAa,OAAG,KAAK,cAAY,GAAE,KAAK,sBAAoB,GAAG,KAAK,YAAY,MAAM;AAAE,QAAIA,MAAE,EAAE,QAAO,IAAE,GAAG,MAAKA,GAAC,GAAE,IAAE,GAAGA,GAAC,GAAE,IAAE,GAAGA,KAAE,CAAC,GAAE,IAAE,EAAE,MAAM,EAAE,GAAE,IAAEA,OAAG,IAAE,OAAK,QAAQ,EAAE,KAAK,GAAG,CAAC;AAAI,SAAK,WAAS;AAAA;AAAA,UAElR,CAAC;AAAA,kCACuB,CAAC;AAAA;AAAA,4CAES,CAAC;AAAA;AAAA;AAAA,EAExC;AAAC;AAAE,IAAI,KAAG,GAAG;AAAV,IAAoB,KAAG;AAAvB,IAA4B,KAAG;AAA/B,IAAoC,KAAG,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,SAAOA,OAAK,OAAK,GAAGA,GAAC,IAAE,CAAC,IAAG,GAAGA,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAE,UAAU,4BAA4B;AAAjD,IAAmD,KAAG;AAAI,SAAS,KAAI;AAAC,SAAO,EAAE,EAAE,OAAO,UAAQ,OAAK,OAAK,EAAE,EAAE,OAAO,OAAO,SAAO,EAAE,EAAE,OAAO,OAAO,QAAM,OAAO,mBAAiB,KAAG,OAAK;AAAI;AAAC,IAAI,KAAG,MAAMA,YAAU,GAAE;AAAA,EAAC,aAAY;AAAC,WAAOA,IAAE;AAAA,EAAY;AAAA,EAAC,YAAY,GAAE;AAAC,QAAG,MAAM,GAAE,KAAK,cAAY,oBAAI,WAAQ,KAAK,kBAAgB,oBAAI,WAAQ,KAAK,eAAa,oBAAI,WAAQ,KAAK,gBAAc,GAAE,KAAK,eAAa,GAAE,KAAK,iBAAe,GAAE,KAAK,kBAAgB,GAAE,KAAK,oBAAkB,OAAG,KAAK,iBAAe,GAAE,KAAK,WAAS,OAAG,CAAC,EAAE,EAAE,QAAQ,WAAW,EAAE,OAAM,IAAI,MAAM,uCAAuC;AAAE,QAAIC;AAAE,QAAG,KAAG,MAAK;AAAC,UAAG,aAAa,GAAG,CAAAA,MAAE;AAAA,WAAM;AAAC,YAAI,IAAE,GAAG,EAAE,EAAE,UAAU,eAAe,GAAE,CAAC;AAAE,QAAAA,MAAE,IAAI,GAAG,CAAC;AAAA,MAAC;AAAC,WAAK,cAAY,CAAC,GAAE,KAAK,sBAAoB;AAAA,IAAE,OAAK;AAAC,UAAI,IAAE,GAAG,EAAE,EAAE,UAAU,eAAe,CAAC;AAAE,MAAAA,MAAE,IAAI,GAAG,CAAC,GAAE,KAAK,cAAY,GAAG,EAAE,EAAE,UAAU,eAAe,CAAC,GAAE,KAAK,sBAAoB;AAAA,IAAE;AAAC,SAAK,QAAMA,KAAE,KAAK,SAAO,KAAK,MAAM,GAAG,QAAO,KAAK,iBAAe,IAAI,GAAG,KAAK,KAAK,GAAE,KAAK,qBAAmB,GAAG,GAAE,KAAK,UAAQ,IAAI,GAAG,MAAK,GAAG,CAAC;AAAA,EAAC;AAAA,EAAC,aAAY;AAAC,WAAO,KAAK,QAAQ,WAAW,IAAE,KAAK;AAAA,EAAc;AAAA,EAAC,aAAa,GAAEA,KAAE,GAAE,GAAE,GAAE,GAAE;AAAC,QAAI,IAAE,KAAK,eAAeA,KAAE,CAAC,GAAE,IAAE,KAAK,QAAQ,IAAI,EAAE,MAAM;AAAE,MAAE,WAAS,OAAG,EAAE,UAAQ,EAAC,SAAQ,GAAE,UAAS,CAAC,GAAE,CAAC,EAAC,GAAE,EAAE,WAAS,CAAC,GAAE,CAAC;AAAE,QAAI,IAAE,GAAGA,GAAC,GAAE,IAAE,IAAI,GAAG,GAAE,OAAG,CAAC,GAAE,IAAE,KAAK,gBAAgB,GAAE,CAAC,CAAC,GAAE,GAAE,CAAC,CAAC,GAAE,CAAC,CAAC,CAAC;AAAE,WAAO,EAAE,QAAMA,KAAE,EAAE,UAAQ,MAAK,KAAK,8BAA8B,CAAC,GAAE,EAAE;AAAA,EAAM;AAAA,EAAC,MAAM,GAAEA,KAAE,GAAE;AAAC,SAAI,EAAE,EAAE,QAAQ,gCAAgC,KAAG,EAAE,EAAE,QAAQ,OAAO,MAAI,KAAK,uBAAuB,CAAC,GAAE,MAAI,eAAa,KAAG,KAAK,OAAM,IAAI,MAAM,uEAAuE;AAAE,QAAI,IAAE,EAAC,IAAG,KAAK,WAAW,EAAC;AAAE,WAAO,KAAK,QAAQ,IAAI,GAAE,EAAC,OAAMA,KAAE,OAAM,GAAE,QAAO,GAAE,OAAM,GAAG,QAAO,UAAS,EAAC,CAAC,GAAE;AAAA,EAAC;AAAA,EAAC,SAAS,GAAE;AAAC,WAAO,KAAK,QAAQ,IAAI,CAAC,IAAE,KAAK,QAAQ,IAAI,CAAC,EAAE,WAAS;AAAA,EAAC;AAAA,EAAC,OAAO,GAAE;AAAC,QAAIA,MAAE,KAAK,QAAQ,IAAI,CAAC;AAAE,IAAAA,IAAE;AAAA,EAAU;AAAA,EAAC,OAAO,GAAE;AAAC,QAAG,KAAK,QAAQ,IAAI,CAAC,GAAE;AAAC,UAAIA,MAAE,KAAK,QAAQ,IAAI,CAAC;AAAE,MAAAA,IAAE;AAAA,IAAU;AAAA,EAAC;AAAA,EAAC,KAAK,GAAEA,KAAE,GAAE,GAAE,GAAE;AAAC,QAAG,EAAE,EAAE,QAAQ,OAAO,KAAG,KAAK,uBAAuBA,GAAC,GAAE,MAAI,YAAY,OAAM,IAAI,MAAM,uEAAuE;AAAE,SAAK,QAAQ,IAAI,GAAE,EAAC,OAAM,GAAE,OAAM,GAAE,QAAOA,KAAE,OAAM,GAAG,QAAO,UAAS,EAAC,CAAC;AAAA,EAAC;AAAA,EAAC,8BAA8B,GAAE;AAAC,SAAK,YAAY,EAAE,MAAM;AAAA,EAAC;AAAA,EAAC,SAAS,GAAE;AAAC,QAAIA,MAAE,KAAK,QAAQ,IAAI,CAAC,GAAE,EAAC,QAAO,GAAE,OAAM,GAAE,oBAAmB,GAAE,OAAM,GAAE,OAAM,GAAE,UAAS,EAAC,IAAEA;AAAE,QAAG,KAAG,MAAK;AAAC,UAAI;AAAE,UAAE,IAAE,IAAI,GAAG,GAAE,EAAE,IAAE,IAAE,IAAI,GAAG,GAAE,EAAE;AAAE,UAAI,IAAE,KAAK,gBAAgB,GAAE,CAAC,EAAC,QAAO,GAAE,OAAM,GAAE,OAAM,EAAC,CAAC,GAAE,CAAC,GAAE,IAAE,KAAK,SAAS,EAAE,MAAM;AAAE,aAAO,KAAK,8BAA8B,CAAC,GAAE;AAAA,IAAC;AAAC,QAAG,KAAG,KAAK,QAAO,KAAK,qBAAqB,CAAC;AAAE,QAAG,MAAI,SAAS,QAAO;AAAE,QAAI,IAAE,KAAK,gBAAc,MAAK;AAAE,UAAI,IAAE,EAAE,IAAI;AAAG,QAAI;AAAE,QAAG,MAAI,aAAY;AAAC,UAAI,IAAE,KAAK,SAAS,EAAE,KAAK,MAAM,GAAE,IAAE,KAAK,SAAS,EAAE,KAAK,MAAM;AAAE,UAAE,EAAE,uBAAuB,GAAE,CAAC;AAAA,IAAC,MAAM,KAAE,KAAK,qBAAqB,CAAC;AAAE,WAAO,MAAI,KAAK,kBAAgB,EAAE,IAAI,IAAE,IAAG,KAAK,qBAAqB,GAAE,CAAC;AAAA,EAAC;AAAA,EAAC,MAAM,KAAK,GAAE;AAAC,QAAG,KAAK,YAAY,IAAI,CAAC,GAAE;AAAC,UAAI,IAAE,KAAK,YAAY,IAAI,CAAC;AAAE,aAAO,IAAI,QAAQ,OAAG,EAAE,KAAK,CAAC,CAAC;AAAA,IAAC;AAAC,QAAIA,MAAE,KAAK,QAAQ,IAAI,CAAC,GAAE,EAAC,QAAO,GAAE,OAAM,GAAE,OAAM,GAAE,OAAM,GAAE,oBAAmB,GAAE,UAAS,EAAC,IAAEA;AAAE,QAAG,KAAG,MAAK;AAAC,UAAI;AAAE,UAAE,IAAE,IAAI,GAAG,GAAE,EAAE,IAAE,IAAE,IAAI,GAAG,GAAE,EAAE;AAAE,UAAI,IAAE,KAAK,gBAAgB,GAAE,CAAC,EAAC,QAAO,GAAE,OAAM,GAAE,OAAM,EAAC,CAAC,GAAE,CAAC,GAAE,IAAE,KAAK,KAAK,EAAE,MAAM;AAAE,aAAO,KAAK,8BAA8B,CAAC,GAAE;AAAA,IAAC;AAAC,QAAG,KAAG,KAAK,QAAO,KAAK,qBAAqB,CAAC;AAAE,QAAG,EAAE,EAAE,QAAQ,OAAO,KAAG,CAAC,EAAE,EAAE,QAAQ,8BAA8B,KAAG,EAAE,EAAE,UAAU,eAAe,MAAI,EAAE,OAAM,IAAI,MAAM,8FAA8F;AAAE,QAAI,IAAE,MAAK;AAAE,QAAG,MAAI,eAAa,EAAE,EAAE,IAAI,wBAAwB,GAAE;AAAC,UAAE,KAAK,OAAO,CAAC;AAAE,UAAI,IAAE,KAAK,QAAQ,IAAI,EAAE,MAAM;AAAE,UAAE,KAAK,MAAM,wBAAwB,EAAE,QAAQ,SAAQ,GAAG,GAAG,CAAC,CAAC;AAAA,IAAC;AAAC,SAAK,YAAY,IAAI,GAAE,CAAC,CAAC,GAAE,MAAI,eAAa,MAAM,KAAK,MAAM,sBAAsB;AAAE,QAAI;AAAE,QAAG,MAAI,aAAY;AAAC,UAAI,IAAE,MAAM,QAAQ,IAAI,CAAC,KAAK,KAAK,EAAE,KAAK,MAAM,GAAE,KAAK,KAAK,EAAE,KAAK,MAAM,CAAC,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC;AAAE,UAAE,EAAE,uBAAuB,GAAE,CAAC;AAAA,IAAC,WAAS,KAAG,KAAK,KAAE,KAAK,qBAAqB,CAAC;AAAA,SAAM;AAAC,UAAI,IAAE,EAAE,cAAc,CAAC;AAAE,UAAE,KAAK,MAAM,gCAAgC,GAAE,CAAC;AAAA,IAAC;AAAC,QAAG,KAAG,QAAM,KAAK,8BAA8B,CAAC,GAAE,KAAG,MAAK;AAAC,UAAI,IAAE,KAAK,MAAM;AAAG,SAAG,GAAE,MAAI,EAAE,aAAa,CAAC,CAAC;AAAA,IAAC;AAAC,QAAI,IAAE,KAAK,qBAAqB,GAAE,CAAC,GAAE,IAAE,KAAK,YAAY,IAAI,CAAC;AAAE,WAAO,KAAK,YAAY,OAAO,CAAC,GAAE,EAAE,QAAQ,OAAG,EAAE,CAAC,CAAC,GAAE,KAAK,gBAAgB,IAAI,CAAC,MAAI,KAAK,gBAAgB,OAAO,CAAC,GAAE,KAAK,YAAY,CAAC,KAAG,GAAG,EAAE,aAAa,GAAE,IAAI,GAAE,KAAK,mBAAkB;AAAA,EAAC;AAAA,EAAC,UAAU,GAAEA,MAAE,CAAC,GAAE;AAAC,QAAI,IAAE,KAAK,QAAQ,IAAI,CAAC,GAAE,EAAC,QAAO,GAAE,OAAM,GAAE,OAAM,GAAE,OAAM,GAAE,UAAS,GAAE,SAAQ,EAAC,IAAE;AAAE,QAAG,MAAI,YAAY,OAAM,IAAI,MAAM,uDAAuD;AAAE,QAAG,KAAG,MAAK;AAAC,UAAI;AAAE,UAAE,IAAE,IAAI,GAAG,GAAE,EAAE,IAAE,IAAE,IAAI,GAAG,GAAE,EAAE;AAAE,UAAI,IAAE,KAAK,gBAAgB,GAAE,CAAC,EAAC,QAAO,GAAE,OAAM,GAAE,OAAM,EAAC,CAAC,GAAE,CAAC,GAAE,IAAE,KAAK,UAAU,GAAEA,GAAC;AAAE,aAAO,KAAK,8BAA8B,CAAC,GAAE;AAAA,IAAC;AAAC,QAAG,KAAG,KAAK,OAAM,KAAG,OAAK,IAAI,MAAM,gCAAgC,IAAE,IAAI,MAAM,iCAAiC;AAAE,QAAI,IAAE,KAAK,OAAO,GAAEA,IAAE,cAAc,GAAE,IAAE,GAAG,EAAE,yBAAyB,CAAC,GAAE,IAAE,KAAK,QAAQ,IAAI,EAAE,MAAM;AAAE,WAAO,OAAO,OAAO,EAAC,WAAU,EAAC,GAAE,EAAE,OAAO;AAAA,EAAC;AAAA,EAAC,WAAW,GAAE;AAAC,QAAIA,MAAE,KAAK,SAAS,EAAE,MAAM;AAAE,QAAG,EAAE,UAAQ,SAAS,KAAG;AAAC,UAAI,IAAEA,IAAE,IAAI,OAAG,EAAE,aAAa,CAAC,CAAC;AAAE,aAAO,GAAG,EAAE,OAAM,EAAE,OAAM,CAAC;AAAA,IAAC,SAAO,GAAE;AAAC,YAAM,IAAI,MAAM,kDAAkD;AAAA,IAAC;AAAC,WAAO,GAAG,EAAE,OAAM,EAAE,OAAMA,GAAC;AAAA,EAAC;AAAA,EAAC,uBAAuB,GAAE;AAAC,QAAG,KAAG,KAAK,UAAQA,MAAE,GAAEA,MAAE,EAAE,QAAOA,OAAI;AAAC,UAAI,IAAE,EAAEA,GAAC;AAAE,UAAG,CAAC,GAAG,CAAC,EAAE,OAAM,EAAE,EAAE,QAAQ,8BAA8B,IAAE,MAAM,aAAa,CAAC,+IAA+I,IAAE,MAAM,aAAa,CAAC,wCAAwC;AAAA,IAAC;AAAA,EAAC;AAAA,EAAC,qBAAqB,GAAE;AAAC,QAAG,EAAC,OAAMA,KAAE,OAAM,GAAE,UAAS,EAAC,IAAE,KAAK,QAAQ,IAAI,CAAC,GAAE,IAAE,EAAE,cAAcA,GAAC;AAAE,QAAG,EAAE,EAAE,QAAQ,8BAA8B,GAAE;AAAC,UAAI,IAAE,KAAK,OAAO,CAAC,GAAE,IAAE,KAAK,QAAQ,IAAI,EAAE,MAAM,GAAE,IAAE,KAAK,MAAM,gCAAgC,EAAE,QAAQ,SAAQ,GAAG,GAAGA,GAAC,CAAC,EAAE,SAAS,GAAE,CAAC;AAAE,aAAO,KAAK,8BAA8B,CAAC,GAAE;AAAA,IAAC;AAAC,QAAI,IAAE,EAAE,EAAE,QAAQ,YAAY,KAAG,MAAI,MAAG,IAAE,IAAE,GAAGA,GAAC,IAAEA,KAAE,IAAE,IAAE,IAAI,GAAG,CAAC,IAAE,IAAI,GAAG,CAAC,GAAE,IAAE,KAAK,gBAAgB,GAAE,CAAC,EAAC,OAAM,GAAE,OAAM,GAAE,QAAO,EAAC,CAAC,GAAE,SAAS,GAAE,IAAE,KAAK,QAAQ,IAAI,EAAE,MAAM,GAAE,IAAE,KAAK,MAAM,gDAAgD,EAAE,QAAQ,SAAQ,EAAE,SAAS,CAAC,GAAE,EAAE,SAAS,CAAC,CAAC,EAAE,SAAS,GAAE,CAAC;AAAE,WAAO,KAAK,8BAA8B,CAAC,GAAE;AAAA,EAAC;AAAA,EAAC,iBAAgB;AAAC,WAAO,EAAE,EAAE,UAAU,+CAA+C,IAAE;AAAA,EAAC;AAAA,EAAC,KAAK,GAAE;AAAC,QAAIA,MAAE,KAAK,cAAa,IAAE,CAAC,GAAE,IAAE;AAAG,SAAK,sBAAoB,QAAM,KAAK,qBAAmB,GAAE,IAAE,QAAI,KAAK,aAAa,KAAK,CAAC,GAAE,KAAK,eAAa,GAAE,EAAE;AAAE,QAAI,IAAE,EAAE,QAAQ,KAAK,aAAa,IAAI,OAAG,EAAE,KAAK,CAAC,EAAE,OAAO,OAAG,KAAG,IAAI,GAAE,IAAE,EAAE,QAAQ,KAAK,aAAa,IAAI,OAAG,EAAE,IAAI,CAAC,EAAE,OAAO,OAAG,KAAG,IAAI;AAAE,SAAK,eAAaA,KAAE,MAAI,KAAK,qBAAmB;AAAM,QAAI,IAAE,EAAC,cAAa,KAAK,cAAa,gBAAe,KAAK,gBAAe,UAAS,MAAK,QAAO,KAAI;AAAE,YAAO,YAAS;AAAC,UAAG,EAAE,EAAE,UAAU,+CAA+C,IAAE,GAAE;AAAC,YAAI,IAAE,MAAM,QAAQ,IAAI,CAAC;AAAE,UAAE,WAAS,EAAE,IAAI,CAAC,GAAE,EAAE,sBAAoB,MAAI,EAAE,IAAI,CAAC,GAAE,OAAK,EAAC,MAAK,EAAE,CAAC,GAAE,IAAG,EAAC,EAAE,EAAE,IAAI,OAAG,GAAG,EAAE,IAAI,KAAK,EAAE,EAAE,EAAE,EAAE,KAAK,IAAI;AAAA,MAAC,MAAM,GAAE,WAAS,EAAC,OAAM,4DAA2D;AAAE,aAAO,KAAK,eAAa,GAAE,KAAK,iBAAe,GAAE;AAAA,IAAC,GAAG;AAAA,EAAC;AAAA,EAAC,SAAQ;AAAC,WAAM,EAAC,YAAW,OAAG,eAAc,KAAK,eAAc,wBAAuB,KAAK,eAAe,mBAAkB,mBAAkB,KAAK,eAAe,aAAY;AAAA,EAAC;AAAA,EAAC,aAAY;AAAC,WAAO,EAAE,EAAE,UAAU,+CAA+C,IAAE,IAAE,KAAK,MAAM,WAAW,IAAE,EAAC,SAAQ,EAAE,IAAI,GAAE,OAAM,KAAI;AAAA,EAAC;AAAA,EAAC,SAAS,GAAE;AAAC,WAAO,EAAE,EAAE,UAAU,+CAA+C,IAAE,KAAG,KAAK,MAAM,SAAS,GAAE,MAAI,EAAE,QAAM,EAAE,IAAI,GAAE;AAAA,EAAE;AAAA,EAAC,MAAM,aAAa,GAAE;AAAC,QAAG,EAAE,EAAE,UAAU,+CAA+C,IAAE,EAAE,QAAO,KAAK,MAAM,uBAAuB,CAAC;AAAE,QAAIA,MAAE;AAAE,WAAOA,IAAE,QAAMA,IAAE;AAAA,EAAO;AAAA,EAAC,YAAY,GAAEA,MAAE,OAAG;AAAC,QAAG,KAAK,gBAAgB,IAAI,CAAC,EAAE,QAAM;AAAG,QAAG,CAAC,KAAK,QAAQ,IAAI,CAAC,EAAE,QAAM;AAAG,QAAGA,MAAE,KAAK,QAAQ,IAAI,CAAC,EAAE,WAAS,IAAE,KAAK,QAAQ,IAAI,CAAC,EAAE,YAAW,CAACA,OAAG,KAAK,QAAQ,IAAI,CAAC,EAAE,WAAS,EAAE,QAAM;AAAG,QAAG,KAAK,YAAY,IAAI,CAAC,EAAE,QAAO,KAAK,gBAAgB,IAAI,CAAC,GAAE,KAAK,kBAAiB;AAAG,SAAK,eAAe,CAAC;AAAE,QAAG,EAAC,oBAAmB,EAAC,IAAE,KAAK,QAAQ,IAAI,CAAC;AAAE,WAAO,KAAG,SAAO,KAAK,YAAY,EAAE,KAAK,QAAOA,GAAC,GAAE,KAAK,YAAY,EAAE,KAAK,QAAOA,GAAC,IAAG,KAAK,QAAQ,OAAO,CAAC,GAAE;AAAA,EAAE;AAAA,EAAC,eAAe,GAAE;AAAC,QAAG,EAAC,SAAQA,KAAE,OAAM,GAAE,UAAS,GAAE,OAAM,GAAE,UAAS,GAAE,OAAM,EAAC,IAAE,KAAK,QAAQ,IAAI,CAAC,GAAE,IAAE,KAAG,EAAE,cAAY,GAAE,IAAE,KAAK,aAAa,IAAI,CAAC;AAAE,QAAE,IAAE,KAAK,aAAa,IAAI,GAAE,IAAE,CAAC,KAAG,KAAK,aAAa,OAAO,CAAC,GAAEA,OAAG,SAAO,KAAK,iBAAe,KAAK,aAAa,GAAE,CAAC,GAAE,KAAK,eAAe,eAAeA,KAAE,GAAE,GAAE,CAAC;AAAI,QAAI,IAAE,KAAK,QAAQ,IAAI,CAAC;AAAE,MAAE,UAAQ,MAAK,EAAE,WAAS,MAAK,EAAE,WAAS,OAAG,EAAE,QAAM;AAAA,EAAI;AAAA,EAAC,WAAW,GAAE;AAAC,WAAO,KAAK,YAAY,CAAC,GAAE,KAAK,QAAQ,IAAI,CAAC,EAAE,QAAQ;AAAA,EAAO;AAAA,EAAC,YAAY,GAAE;AAAC,WAAO,KAAK,QAAQ,IAAI,CAAC;AAAA,EAAC;AAAA,EAAC,mBAAmB,GAAEA,MAAE,IAAG;AAAC,WAAO,EAAE,EAAE,QAAQ,mBAAmB,KAAG,EAAE,MAAM,OAAG,KAAK,QAAQ,IAAI,EAAE,MAAM,EAAE,WAAS,QAAM,EAAE,cAAc,EAAE,KAAK,IAAEA,GAAC;AAAA,EAAC;AAAA,EAAC,kBAAiB;AAAC,WAAO,KAAK;AAAA,EAAK;AAAA,EAAC,MAAM,GAAE;AAAC,MAAE,KAAK,uEAAuE;AAAE,QAAIA,MAAE,EAAE,SAAS;AAAE,WAAO,GAAG,EAAE,OAAMA,GAAC;AAAA,EAAC;AAAA,EAAC,cAAc,GAAEA,KAAE,GAAE;AAAC,QAAI,IAAE,IAAI,GAAG,EAAE,OAAMA,GAAC,GAAE,IAAE,KAAK,cAAc,GAAE,CAAC,CAAC,GAAE,CAAC;AAAE,WAAO,GAAG,EAAE,yBAAyB,CAAC;AAAA,EAAC;AAAA,EAAC,IAAI,GAAE;AAAC,QAAG,KAAK,mBAAmB,CAAC,CAAC,CAAC,KAAG,EAAE,UAAQ,aAAY;AAAC,UAAI,IAAE,GAAG,KAAK,QAAQ,IAAI,EAAE,MAAM,EAAE,MAAM;AAAE,aAAO,KAAK,WAAW,EAAE,OAAM,EAAE,OAAM,CAAC;AAAA,IAAC;AAAC,QAAG,EAAE,EAAE,QAAQ,6BAA6B,EAAE,QAAO,KAAK,cAAc,GAAE,IAAG,EAAE,KAAK;AAAE,QAAIA,MAAE,IAAI,GAAG,EAAE,OAAM,EAAE,GAAE,IAAE,KAAK,cAAcA,KAAE,CAAC,CAAC,CAAC;AAAE,WAAO,GAAG,EAAE,yBAAyB,CAAC;AAAA,EAAC;AAAA,EAAC,eAAe,GAAEA,KAAE,GAAE;AAAC,QAAI;AAAE,QAAGA,QAAI,YAAU,KAAG,QAAM,EAAE,SAAO,KAAG,EAAE,SAAS,EAAE,CAAC,CAAC,GAAE;AAAC,UAAI,IAAE,EAAE,IAAI,OAAG,EAAE,aAAa,CAAC,CAAC;AAAE,UAAE,KAAK,MAAM,GAAE,GAAEA,GAAC;AAAA,IAAC,MAAM,KAAE,KAAK,MAAM,GAAE,GAAEA,GAAC;AAAE,WAAO,KAAK,QAAQ,IAAI,CAAC,EAAE,QAAM,MAAK,EAAC,QAAO,GAAE,OAAM,GAAE,OAAMA,IAAC;AAAA,EAAC;AAAA,EAAC,WAAW,GAAEA,KAAE,GAAE;AAAC,WAAO,GAAG,EAAE,yBAAyB,KAAK,eAAe,GAAEA,KAAE,CAAC,GAAE,IAAI;AAAA,EAAC;AAAA,EAAC,aAAa,GAAE;AAAC,QAAIA,MAAE,IAAI,GAAG,EAAE,KAAK;AAAE,WAAO,KAAK,gBAAgBA,KAAE,CAAC,CAAC,GAAE,EAAE,KAAK;AAAA,EAAC;AAAA,EAAC,WAAW,GAAE;AAAC,QAAIA,MAAE,IAAI,GAAG,EAAE,KAAK;AAAE,WAAO,KAAK,gBAAgBA,KAAE,CAAC,CAAC,GAAE,EAAE,OAAM,MAAK,IAAE;AAAA,EAAC;AAAA,EAAC,cAAc,GAAEA,KAAE;AAAC,QAAI,IAAE,CAAC,GAAG,EAAE,KAAK,GAAE,GAAG,GAAG,EAAE,KAAK,CAAC,GAAE,IAAE,EAAC,OAAM,EAAE,OAAM,OAAM,GAAE,QAAO,EAAE,OAAM,GAAE,IAAE,CAAC,GAAGA,GAAC,GAAE,GAAG,GAAGA,GAAC,CAAC,GAAE,IAAE,IAAI,GAAG,GAAE,CAAC,GAAE,IAAE,MAAG,IAAE,CAAC,CAAC,GAAE,IAAE,KAAK,gBAAgB,GAAE,CAAC,CAAC,GAAE,EAAE,OAAM,GAAE,CAAC;AAAE,WAAM,EAAC,QAAO,EAAE,QAAO,OAAMA,KAAE,OAAM,EAAE,MAAK;AAAA,EAAC;AAAA,EAAC,OAAO,GAAEA,KAAE;AAAC,QAAI,IAAE,KAAK,QAAQ,IAAI,CAAC,GAAE,EAAC,UAAS,GAAE,OAAM,GAAE,OAAM,EAAC,IAAE;AAAE,QAAGA,OAAG,MAAK;AAAC,UAAI,IAAE,EAAE,cAAc,CAAC,GAAE,IAAEA,IAAE,CAAC,IAAEA,IAAE,CAAC,IAAE;AAAE,QAAE,OAAO,KAAG,GAAE,MAAI,2GAA2G;AAAA,IAAC;AAAC,QAAI,IAAE,GAAG,CAAC,GAAE;AAAE,QAAE,IAAE,IAAI,GAAG,CAAC,IAAE,IAAE,IAAI,GAAG,CAAC;AAAE,QAAI,IAAE,MAAG,IAAE,CAACA,OAAG,OAAKA,MAAE,GAAG,CAAC,CAAC,GAAE,IAAE,KAAK,gBAAgB,GAAE,CAAC,EAAC,OAAM,GAAE,OAAM,GAAE,QAAO,EAAC,CAAC,GAAE,GAAE,GAAE,GAAEA,GAAC;AAAE,WAAM,EAAC,OAAM,GAAE,OAAM,GAAE,QAAO,EAAE,OAAM;AAAA,EAAC;AAAA,EAAC,gBAAgB,GAAEA,KAAE,GAAE,GAAE,IAAE,OAAG,GAAE;AAAC,QAAI,IAAE,KAAK,eAAe,EAAE,aAAY,CAAC,GAAE,IAAE,KAAK,QAAQ,IAAI,EAAE,MAAM;AAAE,QAAG,EAAE,iBAAe,EAAE,WAAS,OAAI,EAAE,qBAAmB,GAAG,OAAM;AAAC,UAAI,IAAE,KAAG,OAAK,IAAE,GAAG,EAAE,WAAW;AAAE,QAAE,WAAS,EAAE,IAAI,OAAG,IAAE,CAAC;AAAA,IAAC;AAAC,QAAG,EAAE,eAAa,SAAO,EAAE,QAAM,EAAE,cAAa,EAAE,cAAc,EAAE,KAAK,MAAI,EAAE,QAAO,EAAE,SAAO,EAAE,uBAAuB,EAAE,OAAM,CAAC,GAAE;AAAE,QAAI,IAAE,CAAC,GAAE,IAAEA,IAAE,IAAI,OAAG;AAAC,UAAG,EAAE,UAAQ,YAAY,OAAM,IAAI,MAAM,iIAAiI;AAAE,UAAI,IAAE,KAAK,QAAQ,IAAI,EAAE,MAAM;AAAE,UAAG,EAAE,WAAS,MAAK;AAAC,YAAG,CAAC,EAAE,gBAAc,EAAE,cAAc,EAAE,KAAK,KAAG,EAAE,EAAE,UAAU,2BAA2B,EAAE,QAAM,EAAC,OAAM,EAAE,OAAM,SAAQ,MAAK,WAAU,MAAG,eAAc,EAAE,OAAM;AAAE,UAAE,iBAAe,EAAE,WAAS,MAAG,EAAE,QAAM,EAAE;AAAA,MAAM;AAAC,UAAG,KAAK,YAAY,EAAE,MAAM,GAAE,CAAC,CAAC,EAAE,YAAU,CAAC,CAAC,EAAE,aAAa,KAAE,EAAE,WAAS,KAAK,aAAa,CAAC,IAAE,KAAK,WAAW,CAAC,GAAE,EAAE,KAAK,CAAC,GAAE,IAAE,KAAK,QAAQ,IAAI,EAAE,MAAM;AAAA,eAAU,EAAE,YAAU,CAAC,GAAG,EAAE,OAAM,EAAE,KAAK,GAAE;AAAC,YAAI,IAAE,GAAE,IAAE,EAAE;AAAM,UAAE,QAAM,EAAE,OAAM,IAAE,KAAK,cAAc,GAAE,CAAC,GAAE,EAAE,KAAK,CAAC,GAAE,IAAE,KAAK,QAAQ,IAAI,EAAE,MAAM,GAAE,EAAE,QAAM;AAAA,MAAC;AAAC,aAAM,EAAC,OAAM,EAAE,OAAM,SAAQ,GAAE,WAAU,MAAE;AAAA,IAAC,CAAC;AAAE,SAAK,YAAY,EAAE,MAAM;AAAE,QAAI,IAAE,EAAC,OAAM,EAAE,OAAM,SAAQ,GAAE,WAAU,MAAE,GAAE,IAAE,GAAG,GAAE,GAAE,CAAC,GAAE,IAAE,KAAK,iBAAiB,GAAE,MAAI,GAAG,KAAK,OAAM,GAAE,GAAE,CAAC,CAAC,GAAE,IAAE,KAAK,gBAAc,MAAK;AAAE,UAAI,IAAE,KAAK,WAAW,IAAG,EAAE,EAAE,IAAI,qBAAqB,KAAG,GAAG,KAAK,OAAM,GAAE,GAAE,GAAE,CAAC,GAAE,EAAE,QAAQ,OAAG,KAAK,8BAA8B,CAAC,CAAC,GAAE,MAAI,IAAE,KAAK,SAAS,CAAC,GAAE,KAAK,aAAa,KAAK,EAAC,MAAK,EAAE,YAAY,MAAK,OAAM,KAAK,aAAa,CAAC,EAAC,CAAC;AAAG,QAAI,IAAE,EAAE,EAAE,UAAU,uBAAuB;AAAE,QAAG,IAAE,GAAE;AAAC,UAAI,IAAE,EAAE,IAAI;AAAE,UAAE,KAAK,kBAAgB,MAAI,KAAK,MAAM,GAAG,MAAM,GAAE,KAAK,kBAAgB;AAAA,IAAE;AAAC,QAAG,CAAC,EAAE,EAAE,QAAQ,qBAAqB,KAAG,EAAE,YAAU,MAAI,OAAG;AAAC,UAAI,IAAE,KAAK,aAAa,CAAC;AAAE,aAAO,KAAK,8BAA8B,CAAC,GAAE;AAAA,IAAC;AAAC,WAAO;AAAA,EAAC;AAAA,EAAC,cAAc,GAAEA,KAAE,GAAE,GAAE,IAAE,OAAG;AAAC,WAAO,IAAE,KAAGA,IAAE,CAAC,EAAE,OAAM,KAAK,gBAAgB,GAAEA,KAAE,GAAE,GAAE,CAAC;AAAA,EAAC;AAAA,EAAC,iBAAiB,GAAEA,KAAE;AAAC,WAAO,KAAK,KAAK,gBAAc,KAAK,YAAY,CAAC,IAAEA,IAAE,IAAG,KAAK,YAAY,CAAC;AAAA,EAAC;AAAA,EAAC,oBAAmB;AAAC,WAAO,KAAK;AAAA,EAAc;AAAA,EAAC,UAAS;AAAC,SAAK,aAAW,EAAE,EAAE,QAAQ,SAAS,KAAG,OAAO,KAAK,KAAK,WAAW,EAAE,QAAQ,CAAAA,QAAG;AAAC,WAAK,MAAM,cAAc,KAAK,YAAYA,GAAC,EAAE,YAAY,GAAE,OAAO,KAAK,YAAYA,GAAC;AAAA,IAAC,CAAC,GAAE,KAAK,eAAe,QAAQ,GAAE,KAAK,UAAQ,QAAM,OAAO,qBAAmB,eAAa,KAAK,kBAAkB,oBAAkB,KAAK,OAAO,OAAO,IAAE,KAAK,SAAO,MAAK,KAAK,wBAAsB,KAAK,MAAM,UAAQ,MAAK,KAAK,MAAM,QAAQ,IAAG,KAAK,WAAS;AAAA,EAAG;AAAA,EAAC,iBAAgB;AAAC,WAAO,KAAK,uBAAqB,SAAO,KAAK,sBAAoB,GAAG,MAAI;AAAC,UAAG,CAAC,EAAE,EAAE,IAAI,8BAA8B,GAAE;AAAC,YAAI,IAAE,EAAE,EAAE,QAAQ,OAAO;AAAE,UAAE,EAAE,IAAI,SAAQ,KAAE;AAAE,YAAIA,MAAE,KAAK,IAAI,GAAG,IAAI,CAAC,EAAE,SAAS,EAAE,CAAC;AAAE,YAAG,EAAE,EAAE,IAAI,SAAQ,CAAC,GAAEA,MAAE,EAAE,QAAO;AAAA,MAAE;AAAC,aAAO;AAAA,IAAE,CAAC,IAAG,KAAK;AAAA,EAAmB;AAAA,EAAC,UAAS;AAAC,WAAO,KAAK,eAAe,MAAI,KAAG,KAAG;AAAA,EAAE;AAAA,EAAC,YAAY,GAAE;AAAC,QAAIA,MAAE,KAAK,QAAQ,IAAI,CAAC,GAAE,EAAC,OAAM,GAAE,OAAM,GAAE,QAAO,GAAE,SAAQ,GAAE,OAAM,GAAE,UAAS,EAAC,IAAEA;AAAE,QAAG,KAAG,KAAK;AAAO,QAAI,IAAE,KAAK,gBAAc,MAAK;AAAE,UAAI,IAAE,EAAE,IAAI;AAAG,QAAI,IAAEA,IAAE;AAAS,QAAG,KAAG,SAAO,IAAE,GAAG,GAAE,CAAC,GAAEA,IAAE,WAAS,IAAG,KAAG,MAAK;AAAC,UAAI,IAAE,GAAG,CAAC,GAAE,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,aAAa,cAAY,aAAa;AAAkB,OAAC,KAAG,CAAC,OAAK,CAAC,GAAE,CAAC,IAAE,GAAG,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,IAAG,IAAE,IAAE,IAAI,GAAG,GAAE,CAAC,IAAE,IAAE,IAAI,GAAG,GAAE,CAAC;AAAE,UAAI,IAAE,IAAE,CAAC,GAAE,CAAC,IAAE,GAAE,IAAE,KAAK,eAAe,GAAE,CAAC,GAAE,IAAE,KAAK,QAAQ,IAAI,EAAE,MAAM;AAAE,UAAE,EAAE,QAAM,GAAG,SAAO,EAAE,QAAM,GAAG,QAAO,EAAE,WAAS,GAAE,KAAK,MAAM,2BAA2B,KAAK,WAAW,EAAE,MAAM,GAAE,GAAE,GAAE,CAAC;AAAE,UAAI,IAAE,CAAC,CAAC,GAAE,CAAC,CAAC,GAAE,IAAE,KAAK,gBAAgB,GAAE,CAAC,CAAC,GAAE,GAAE,GAAE,IAAE,GAAE,IAAE,KAAK,QAAQ,IAAI,EAAE,MAAM;AAAE,MAAAA,IAAE,WAAS,EAAE,UAASA,IAAE,WAAS,EAAE,UAASA,IAAE,QAAM,EAAE,OAAM,EAAE,EAAE,IAAI,qBAAqB,IAAE,KAAK,YAAY,EAAE,MAAM,KAAGA,IAAE,UAAQ,EAAE,SAAQA,IAAE,SAAO,MAAK,KAAK,QAAQ,OAAO,EAAE,MAAM,IAAG,KAAK,8BAA8B,CAAC,GAAE,MAAI,KAAK,gBAAc,EAAE,IAAI,IAAE;AAAA,IAAE,OAAK;AAAC,UAAI,IAAE,KAAK,eAAe,GAAE,GAAE,GAAE,CAAC;AAAE,MAAAA,IAAE,UAAQ;AAAA,IAAC;AAAA,EAAC;AAAA,EAAC,qBAAqB,GAAEA,KAAE;AAAC,QAAI,IAAE,KAAK,QAAQ,IAAI,CAAC,GAAE,EAAC,OAAM,EAAC,IAAE;AAAE,WAAOA,OAAG,SAAO,EAAE,SAAO,GAAGA,KAAE,CAAC,IAAG,EAAE;AAAA,EAAM;AAAA,EAAC,eAAe,GAAEA,KAAE,GAAE,GAAE;AAAC,QAAG,KAAK,iBAAe,KAAK,aAAa,GAAE,CAAC,GAAE,CAAC,KAAK,qBAAmB,KAAK,gBAAc,KAAK,qBAAmB,OAAK,MAAK;AAAC,UAAI,KAAG,KAAK,gBAAc,OAAK,MAAM,QAAQ,CAAC;AAAE,WAAK,oBAAkB,MAAG,QAAQ,KAAK,6BAA6B,CAAC,uCAAuC;AAAA,IAAC;AAAC,WAAO,KAAK,eAAe,eAAe,GAAEA,KAAE,CAAC;AAAA,EAAC;AAAA,EAAC,aAAa,GAAEA,KAAE;AAAC,WAAO,EAAE,CAAC,IAAE,EAAE,CAAC,IAAE,EAAE,gBAAgBA,GAAC;AAAA,EAAC;AAAA,EAAC,yBAAwB;AAAC,aAAO,CAAC,EAAC,CAAC,KAAI,OAAO,QAAQ,KAAK,WAAW,EAAE,MAAK,iBAAiB,CAAC;AAAA,EAAC;AAAA,EAAC,MAAM,8BAA6B;AAAC,QAAI,IAAE,CAAC;AAAE,QAAG,KAAK,MAAM,8BAA6B;AAAC,eAAO,CAAC,EAACA,GAAC,KAAI,OAAO,QAAQ,KAAK,WAAW,EAAE,GAAE,KAAK,KAAK,sBAAsBA,GAAC,CAAC;AAAE,aAAO,QAAQ,IAAI,CAAC;AAAA,IAAC,OAAK;AAAC,eAAO,CAAC,EAACA,GAAC,KAAI,OAAO,QAAQ,KAAK,WAAW,GAAE;AAAC,YAAI,IAAE,IAAI,QAAQ,OAAG;AAAC,cAAG;AAAC,iBAAK,iBAAiBA,GAAC,GAAE,EAAE,IAAE;AAAA,UAAC,SAAO,GAAE;AAAC,kBAAM;AAAA,UAAC;AAAA,QAAC,CAAC;AAAE,UAAE,KAAK,CAAC;AAAA,MAAC;AAAC,aAAO,QAAQ,IAAI,CAAC;AAAA,IAAC;AAAA,EAAC;AAAA,EAAC,MAAM,sBAAsB,GAAE;AAAC,WAAO,KAAK,MAAM,GAAG,oBAAoB,EAAE,cAAa,KAAK,MAAM,6BAA6B,qBAAqB,IAAE,KAAK,iBAAiB,CAAC,KAAG,MAAM,GAAG,GAAE,KAAK,sBAAsB,CAAC;AAAA,EAAE;AAAA,EAAC,iBAAiB,GAAE;AAAC,QAAG,KAAK,MAAM,GAAG,oBAAoB,EAAE,cAAa,KAAK,MAAM,GAAG,WAAW,MAAI,MAAG,OAAM,QAAQ,IAAI,KAAK,MAAM,GAAG,kBAAkB,EAAE,YAAY,CAAC,GAAE,KAAK,MAAM,GAAG,mBAAmB,EAAE,gBAAe,KAAK,MAAM,GAAG,cAAc,MAAI,SAAI,GAAG,EAAE,QAAO,KAAK,MAAM,GAAG,iBAAiB,EAAE,cAAc,CAAC,GAAE,IAAI,MAAM,oCAAoC,KAAG,IAAI,MAAM,6CAA6C;AAAE,WAAM;AAAA,EAAE;AAAA,EAAC,sBAAqB;AAAC,aAAQ,KAAK,OAAO,OAAO,KAAK,WAAW,GAAE;AAAC,WAAK,MAAM,SAAS,EAAE,YAAY;AAAE,UAAG,EAAC,oBAAmBA,KAAE,wBAAuB,GAAE,QAAO,GAAE,QAAO,GAAE,kBAAiB,GAAE,yBAAwB,GAAE,qBAAoB,EAAC,IAAE,GAAG,KAAK,OAAM,EAAE,SAAQ,EAAE,YAAY;AAAE,QAAE,qBAAmBA,KAAE,EAAE,yBAAuB,GAAE,EAAE,SAAO,GAAE,EAAE,SAAO,GAAE,EAAE,mBAAiB,GAAE,EAAE,0BAAwB,GAAE,EAAE,sBAAoB;AAAA,IAAC;AAAA,EAAC;AAAA,EAAC,wBAAwB,GAAEA,KAAE,GAAE;AAAC,MAAE,WAAS,EAAE,YAAU;AAAO,QAAG,EAAC,SAAQ,GAAE,QAAO,GAAE,OAAM,GAAE,UAAS,EAAC,IAAE,GAAE,IAAE,GAAG,EAAE;AAAQ,QAAG,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC,EAAE,OAAM,IAAI,MAAM,+RAA+R;AAAE,QAAI,IAAE,EAAE,aAAa,GAAEA,KAAE,GAAE,GAAE,GAAE,CAAC;AAAE,WAAO,GAAG,EAAE,qBAAqB,GAAEA,KAAE,GAAE,CAAC;AAAA,EAAC;AAAC;AAAE,GAAG,aAAW;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAG,MAAI,aAAW,MAAI,YAAY,QAAOA;AAAE,MAAG,MAAI,WAAS,MAAI,QAAO;AAAC,QAAIC,MAAE,MAAI,UAAQ,IAAI,WAAWD,IAAE,MAAM,IAAE,IAAI,WAAWA,IAAE,MAAM;AAAE,aAAQ,IAAE,GAAE,IAAEC,IAAE,QAAO,EAAE,EAAE,CAAAA,IAAE,CAAC,IAAE,KAAK,MAAMD,IAAE,CAAC,CAAC;AAAE,WAAOC;AAAA,EAAC,MAAM,OAAM,IAAI,MAAM,iBAAiB,CAAC,EAAE;AAAC;AAAC,IAAI,KAAG;AAAS,SAAS,KAAI;AAAC,IAAE,EAAE,IAAI,4BAA2B,IAAE;AAAC;AAAC,GAAG,UAAU,KAAG,GAAG,SAAQ,MAAI,IAAI,MAAG,CAAC;AAAE,IAAI,MAAI,EAAC,gBAAe,GAAE;AAAE,IAAI,KAAG;AAAA;AAAA;AAAA;AAGlviB,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,KAAI,GAAG,GAAE,KAAK,cAAY,EAAE,2BAA2BA,KAAE,CAAC,GAAE,KAAK,sBAAoB,GAAG,KAAK,YAAY,MAAM,GAAE,KAAK,WAAS;AAAA;AAAA,UAE3K,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQN;AAAC;AAAE,IAAI,KAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAKb,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE,IAAE,OAAG;AAAC,SAAK,gBAAc,CAAC,KAAI,GAAG,GAAE,KAAK,uBAAqB,MAAG,KAAK,eAAa,MAAG,KAAK,eAAa,MAAG,KAAK,cAAY,EAAE,2BAA2BA,KAAE,CAAC;AAAE,QAAI,IAAE,KAAK,YAAY;AAAO,SAAK,sBAAoB,GAAG,CAAC;AAAE,QAAI,IAAE;AAAG,QAAG,EAAE,KAAG,MAAI,KAAG,EAAE,cAAc,KAAK,WAAW,MAAI,EAAE,KAAE;AAAA;AAAA;AAAA;AAAA;AAAA,aAIzS,IAAE;AAAA,YACR,GAAG,CAAC,CAAC;AAAA,WACP,MAAI,EAAE,MAAK,sBAAoB,KAAG;AAAA;AAAA;AAAA;AAAA,cAIhC,KAAG;AAAA,yCAC0B,KAAK,YAAY,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA,SAG5C;AAAC,UAAI,IAAE,GAAG,UAAS,CAAC;AAAE,WAAK,sBAAoB,KAAG;AAAA;AAAA,iBAEjD,EAAE,IAAE,CAAC,CAAC,qBAAqB,CAAC;AAAA;AAAA,iBAE5B,EAAE,IAAE,CAAC,CAAC,qBAAqB,CAAC;AAAA;AAAA;AAAA;AAAA,cAIjC,KAAG;AAAA;AAAA,iBAEE,EAAE,IAAE,CAAC,CAAC,YAAY,KAAK,YAAY,IAAE,CAAC,CAAC;AAAA;AAAA,iBAEvC,EAAE,IAAE,CAAC,CAAC,YAAY,KAAK,YAAY,IAAE,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,IAI7C;AAAC,SAAK,WAAS;AAAA;AAAA,UAEhB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAQD,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,EAIN;AAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE;AAAE,SAAOC,IAAE,OAAO,EAAE,MAAM,GAAE,EAAC,QAAO,EAAE,QAAO,OAAM,EAAE,OAAM,OAAM,EAAE,MAAK;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,MAAK,GAAE,MAAK,EAAC,IAAE,GAAE,IAAEC,IAAE,eAAe,EAAE,OAAM,WAAW,GAAE,IAAEA,IAAE,QAAQ,IAAI,EAAE,MAAM,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,IAAC,CAAC;AAAE,SAAO,EAAE,qBAAmB,EAAC,MAAK,GAAE,MAAK,EAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG;AAAP,IAAsC,KAAG;AAAA;AAAA;AAAA;AAGngB,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,OAAM,EAAC,IAAE,GAAE,IAAEC,IAAE,eAAe,CAAC,GAAE,WAAU,EAAE,kBAAkB,GAAE,SAAS,CAAC,GAAE,IAAE,EAAE,EAAE,QAAQ,8BAA8B,IAAE,IAAI,GAAG,IAAG,EAAE,OAAM,EAAE,KAAK,IAAE,IAAI,GAAG,IAAG,EAAE,OAAM,EAAE,KAAK,GAAE,IAAEA,IAAE,gBAAgB,GAAE,CAAC,GAAE,CAAC,GAAE,SAAS;AAAE,SAAOA,IAAE,8BAA8B,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG;AAAP,IAAsC,KAAG;AAAA;AAAA;AAAA;AAGha,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,GAAE,GAAE,OAAM,EAAC,IAAE,GAAE,IAAE,EAAE,EAAE,QAAQ,8BAA8B,IAAE,IAAI,GAAG,IAAG,EAAE,OAAM,EAAE,KAAK,IAAE,IAAI,GAAG,IAAG,EAAE,OAAM,EAAE,KAAK;AAAE,SAAOC,IAAE,gBAAgB,GAAE,CAAC,GAAE,CAAC,GAAE,SAAS;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG;AAA0B,SAAS,GAAG,EAAC,WAAUD,KAAE,iBAAgB,GAAE,eAAcC,KAAE,OAAM,EAAC,GAAE;AAAC,SAAM,CAAC,EAAC,QAAO,GAAE,SAAQ,EAAC,MAAI;AAAC,QAAG,EAAC,GAAE,EAAC,IAAE,GAAE,IAAE,GAAE,IAAE,KAAG,EAAE;AAAM,QAAG,EAAE,mBAAmB,CAAC,CAAC,CAAC,KAAGA,OAAG,MAAK;AAAC,UAAI,IAAE,EAAE,QAAQ,IAAI,EAAE,MAAM,GAAE,IAAEA,IAAE,EAAE,QAAO,CAAC;AAAE,aAAO,EAAE,eAAe,EAAE,OAAM,GAAE,CAAC;AAAA,IAAC;AAAC,QAAI,IAAE,EAAE,EAAE,QAAQ,6BAA6B,KAAG,KAAG,MAAK;AAAE,WAAO,IAAE,IAAE,IAAI,GAAG,EAAE,OAAM,CAAC,IAAE,IAAE,IAAI,GAAG,EAAE,OAAMD,GAAC,GAAE,EAAE,gBAAgB,GAAE,CAAC,CAAC,GAAE,CAAC;AAAA,EAAC;AAAC;AAAC,SAAS,GAAG,EAAC,WAAUA,KAAE,iBAAgB,GAAE,kBAAiBC,MAAE,OAAG,iBAAgB,IAAE,OAAG,eAAc,GAAE,OAAM,EAAC,GAAE;AAAC,SAAM,CAAC,EAAC,QAAO,GAAE,SAAQ,EAAC,MAAI;AAAC,QAAG,EAAC,GAAE,GAAE,GAAE,EAAC,IAAE,GAAE,IAAE;AAAE,QAAG,KAAG,EAAE,UAAQ,aAAY;AAAC,UAAI,IAAE,EAAE,QAAQ,IAAI,EAAE,MAAM,GAAE,IAAE,EAAE,QAAQ,IAAI,EAAE,MAAM,GAAE,CAAC,GAAE,CAAC,IAAE,CAAC,CAAC,EAAE,mBAAmB,MAAK,EAAE,mBAAmB,IAAI,GAAE,CAAC,EAAE,mBAAmB,MAAK,EAAE,mBAAmB,IAAI,CAAC,EAAE,IAAI,OAAG;AAAC,YAAG,CAAC,GAAE,CAAC,IAAE,GAAE,IAAE,EAAC,QAAO,EAAE,QAAO,OAAM,EAAE,OAAM,OAAM,EAAE,MAAK,GAAE,IAAE,EAAC,QAAO,EAAE,QAAO,OAAM,EAAE,OAAM,OAAM,EAAE,MAAK,GAAE,IAAE,IAAI,GAAGD,KAAE,EAAE,OAAM,EAAE,KAAK;AAAE,eAAO,EAAE,gBAAgB,GAAE,CAAC,GAAE,CAAC,GAAE,GAAG,EAAE,OAAM,EAAE,KAAK,CAAC;AAAA,MAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,MAAK,GAAE,MAAK,EAAC,GAAE,SAAQ,EAAC,CAAC;AAAE,aAAO,EAAE,8BAA8B,CAAC,GAAE,EAAE,8BAA8B,CAAC,GAAE;AAAA,IAAC;AAAC,QAAI,IAAE,KAAG,GAAG,EAAE,OAAM,EAAE,KAAK;AAAE,SAAI,EAAE,UAAQ,YAAU,EAAE,UAAQ,YAAU,EAAE,mBAAmB,CAAC,GAAE,CAAC,CAAC,MAAI,KAAG,MAAK;AAAC,UAAI,IAAE,EAAE,QAAQ,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,QAAQ,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,UAAQ,WAAS,EAAE,uBAAuB,CAAC,IAAE,GAAE,IAAE,EAAE,UAAQ,WAAS,EAAE,uBAAuB,CAAC,IAAE,GAAE,CAAC,GAAE,CAAC,IAAE,EAAE,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,eAAe,GAAE,CAAC,GAAE,IAAE,EAAE,QAAQ,IAAI,EAAE,MAAM;AAAE,aAAO,EAAE,SAAO,GAAE;AAAA,IAAC;AAAC,QAAI,IAAE,EAAE,EAAE,QAAQ,8BAA8B,KAAG,KAAG,MAAK;AAAE,WAAO,IAAE,IAAE,IAAI,GAAG,GAAE,EAAE,OAAM,EAAE,OAAMC,GAAC,IAAE,IAAE,IAAI,GAAGD,KAAE,EAAE,OAAM,EAAE,KAAK,GAAE,EAAE,gBAAgB,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC;AAAA,EAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,IAAE,OAAG;AAAC,MAAGA,QAAI,SAAS,QAAO,IAAE,KAAG;AAAG,MAAGA,QAAI,OAAO,QAAO,IAAE,KAAG;AAAG,MAAGA,QAAI,MAAM,QAAO,IAAE,KAAG;AAAG,MAAGA,QAAI,QAAQ,QAAO,IAAE,KAAG;AAAG,MAAGA,QAAI,QAAQ,QAAO,IAAE,KAAG;AAAG,MAAGA,QAAI,YAAY,QAAO,IAAE,KAAG;AAAG,MAAGA,QAAI,UAAU,QAAO,IAAE,KAAG;AAAG,QAAM,IAAI,MAAM,cAAcA,GAAC,kDAAkD;AAAC;AAAC,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEC,KAAE,GAAE,IAAE,OAAG,IAAE,OAAG,IAAE,OAAG,IAAE,MAAK,IAAE,OAAG,IAAE,OAAG;AAAC,SAAK,gBAAc,CAAC,WAAU,SAAS,GAAE,KAAK,eAAa,MAAG,KAAK,eAAa,MAAG,KAAK,cAAY,GAAE,KAAK,sBAAoB,GAAG,KAAK,YAAY,MAAM;AAAE,QAAI,IAAE,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,GAAE,IAAE,KAAK,KAAK,IAAE,CAAC,GAAE,IAAE,IAAE,gBAAc,eAAc,IAAE,IAAE,gBAAc,eAAc,IAAE,IAAE,CAAC,UAAS,QAAQ,IAAE,CAAC,UAAS,QAAQ,GAAE,IAAE,IAAE,CAAC,UAAS,QAAQ,IAAE,CAAC,UAAS,QAAQ,GAAE,IAAE,IAAG,IAAE;AAAG,UAAI,IAAE,IAAE;AAAA;AAAA,YAE1kF,CAAC;AAAA,aACF,IAAE,IAAE;AAAA;AAAA,YAEH,CAAC;AAAA,aACF,IAAE;AAAA,YACD,CAAC;AAAA,YACF,IAAE;AAAgC,QAAI,IAAE,IAAE,oCAAkC;AAAG,SAAG,KAAK,cAAc,KAAK,MAAM,GAAE,KAAG,KAAK,cAAc,KAAK,wBAAwB,GAAE,KAAG,KAAK,cAAc,KAAK,gBAAgB;AAAE,QAAI,IAAE,QAAO,IAAE;AAAO,MAAE,CAAC,IAAEA,IAAE,CAAC,IAAE,IAAE,cAAc,EAAE,CAAC,CAAC,MAAIA,IAAE,CAAC,IAAE,EAAE,CAAC,MAAI,IAAE,cAAcA,IAAE,CAAC,CAAC,MAAK,KAAK,WAAS;AAAA,QAClU,CAAC;AAAA;AAAA,sCAE6B,CAAC;AAAA;AAAA;AAAA;AAAA,uBAIhB,CAAC;AAAA,uBACD,CAAC;AAAA,8BACM,CAAC;AAAA,wCACS,CAAC;AAAA,wCACD,CAAC;AAAA;AAAA;AAAA;AAAA,uBAIlB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;AAAA,uBACd,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAS3B,CAAC;AAAA;AAAA,UAED,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,EAIN;AAAC;AAAE,IAAI,KAAG,EAAC,MAAK,yCAAwC,MAAK,wCAAuC;AAAjG,IAAmG,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,SAAQ,SAAQ,SAAQ,OAAO,GAAE,KAAK,cAAY,EAAE,2BAA2BA,KAAE,CAAC,GAAE,KAAK,WAAS;AAAA;AAAA;AAAA,UAGnP,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUN;AAAC;AAAE,IAAI,KAAG;AAAgB,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,GAAE,GAAE,GAAE,EAAC,IAAE,GAAE,IAAE,EAAE,WAAW,EAAE,OAAM,EAAE,KAAK;AAAE,MAAG,EAAE,UAAQ,aAAY;AAAC,QAAI,IAAEC,IAAE,QAAQ,IAAI,EAAE,MAAM,GAAE,IAAEA,IAAE,QAAQ,IAAI,EAAE,MAAM,GAAE,IAAE,IAAI,GAAG,GAAG,MAAK,EAAE,OAAM,EAAE,KAAK,GAAE,IAAE,IAAI,GAAG,GAAG,MAAK,EAAE,OAAM,EAAE,KAAK,GAAE,IAAE,CAAC,EAAC,QAAO,EAAE,mBAAmB,KAAK,QAAO,OAAM,EAAE,mBAAmB,KAAK,OAAM,OAAM,EAAE,MAAK,GAAE,EAAC,QAAO,EAAE,mBAAmB,KAAK,QAAO,OAAM,EAAE,mBAAmB,KAAK,OAAM,OAAM,EAAE,MAAK,GAAE,EAAC,QAAO,EAAE,mBAAmB,KAAK,QAAO,OAAM,EAAE,mBAAmB,KAAK,OAAM,OAAM,EAAE,MAAK,GAAE,EAAC,QAAO,EAAE,mBAAmB,KAAK,QAAO,OAAM,EAAE,mBAAmB,KAAK,OAAM,OAAM,EAAE,MAAK,CAAC,GAAE,IAAEA,IAAE,gBAAgB,GAAE,GAAE,SAAS,GAAE,IAAEA,IAAE,gBAAgB,GAAE,GAAE,SAAS,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,MAAK,GAAE,MAAK,EAAC,GAAE,SAAQA,IAAC,CAAC;AAAE,WAAOA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAE;AAAA,EAAC;AAAC,MAAGA,IAAE,mBAAmB,CAAC,GAAE,CAAC,CAAC,GAAE;AAAC,QAAI,IAAEA,IAAE,QAAQ,IAAI,EAAE,MAAM,GAAE,IAAEA,IAAE,QAAQ,IAAI,EAAE,MAAM,GAAE,CAAC,GAAE,CAAC,IAAE,GAAG,EAAE,OAAM,EAAE,OAAM,EAAE,QAAO,EAAE,QAAO,CAAC,GAAE,IAAEA,IAAE,eAAe,GAAE,CAAC,GAAE,IAAEA,IAAE,QAAQ,IAAI,EAAE,MAAM;AAAE,WAAO,EAAE,SAAO,GAAE;AAAA,EAAC;AAAC,MAAI;AAAE,SAAO,EAAE,EAAE,QAAQ,8BAA8B,IAAE,IAAE,IAAI,GAAG,IAAG,EAAE,OAAM,EAAE,KAAK,IAAE,IAAE,IAAI,GAAG,IAAG,EAAE,OAAM,EAAE,KAAK,GAAEA,IAAE,gBAAgB,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,CAAC,GAAGD,IAAE,KAAK,GAAE,GAAG,GAAGA,IAAE,KAAK,CAAC,GAAE,IAAE,EAAC,OAAMA,IAAE,OAAM,OAAM,GAAE,QAAOA,IAAE,OAAM,GAAE,IAAE,CAAC,GAAG,CAAC,GAAE,GAAG,GAAG,CAAC,CAAC,GAAE,IAAE,IAAI,GAAG,GAAE,CAAC,GAAE,IAAE,MAAG,IAAE,CAAC,CAAC,GAAE,IAAEC,IAAE,gBAAgB,GAAE,CAAC,CAAC,GAAED,IAAE,OAAM,GAAE,CAAC;AAAE,SAAM,EAAC,QAAO,EAAE,QAAO,OAAM,GAAE,OAAM,EAAE,MAAK;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,OAAM,EAAC,IAAE,GAAE,IAAEC,KAAE,IAAE,EAAE,cAAc,EAAE,KAAK,GAAE,IAAE,EAAE,uBAAuB,GAAE,CAAC,GAAE,IAAE,EAAE,cAAc,CAAC;AAAE,IAAE,OAAO,MAAI,GAAE,MAAI,kBAAkB,CAAC,SAAS,CAAC,gCAAgC,EAAE,KAAK,SAAS,CAAC,+EAA+E;AAAE,MAAI,IAAE,EAAE,QAAQ,IAAI,EAAE,MAAM;AAAE,SAAO,EAAE,YAAU,CAAC,GAAG,EAAE,OAAM,CAAC,KAAG,EAAE,EAAE,YAAU,QAAM,GAAG,EAAE,OAAM,CAAC,KAAG,GAAG,GAAE,GAAE,CAAC,KAAG,EAAE,OAAO,EAAE,MAAM,GAAE,EAAC,QAAO,EAAE,QAAO,OAAM,GAAE,OAAM,EAAE,MAAK;AAAE;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE;AAAC,SAAK,gBAAc,CAAC,GAAG;AAAE,QAAG,EAAC,YAAW,GAAE,WAAU,GAAE,QAAO,GAAE,SAAQ,EAAC,IAAE;AAAE,SAAK,cAAY,CAAC,GAAE,CAAC;AAAE,QAAI,IAAE,KAAK,MAAM,IAAE,CAAC,IAAE,GAAE,IAAE,IAAE,GAAE,IAAE;AAAiC,QAAGA,OAAG,MAAK;AAAC,UAAI,IAAE,IAAEA;AAAE,UAAE,4BAA4B,EAAE,MAAM,CAAC,IAAE,EAAE,YAAY,CAAC,IAAE,CAAC;AAAA,IAAU;AAAC,QAAI,IAAE;AAAG,QAAE,IAAE,MAAI,IAAE;AAAA,oCACtvE,CAAC;AAAA;AAAA;AAAA,UAG5B,KAAK,WAAS;AAAA;AAAA;AAAA;AAAA,UAIb,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kCAQuB,CAAC;AAAA;AAAA;AAAA;AAAA,8BAIL,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YASnB,CAAC;AAAA;AAAA;AAAA,iCAGoB,CAAC;AAAA,cACpB,MAAI,CAAC;AAAA;AAAA;AAAA,YAGP,CAAC;AAAA,qBACQ,MAAI,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,YAKd,CAAC;AAAA,qBACQ,MAAI,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAMd,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,EAIR;AAAC;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE;AAAC,SAAK,gBAAc,CAAC,GAAG;AAAE,QAAG,EAAC,YAAW,GAAE,WAAU,GAAE,QAAO,GAAE,SAAQ,EAAC,IAAE;AAAE,SAAK,cAAY,CAAC,GAAE,CAAC;AAAE,QAAI,IAAE,OAAM,IAAE;AAAG,IAAAA,QAAI,SAAO,IAAE,QAAMA,QAAI,SAAO,IAAE,eAAc,IAAE,SAAOA,QAAI,UAAQ,IAAE,gBAAe,IAAE;AAAO,QAAI,IAAE,GAAGA,GAAC,IAAIA,GAAC,IAAIA,GAAC;AAAqE,IAAAA,QAAI,QAAM,IAAE,aAAWA,QAAI,SAAO,IAAE,cAAYA,QAAI,QAAM,IAAE,aAAWA,QAAI,UAAQ,IAAE;AAAY,QAAI,IAAE,KAAK,MAAM,IAAE,CAAC,IAAE,GAAE,IAAE,IAAE,GAAE,IAAE;AAAA,YACrcA,QAAI,KAAK;AAAA;AAAA,mBAEFA,QAAI,MAAM;AAAA;AAAA;AAAA;AAAA,wBAIL,CAAC;AAAA,cACXA,QAAI,KAAK,OAAOA,QAAI,KAAK;AAAA,0BACb,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAOrB,IAAE;AAAO,IAAAA,QAAI,SAAO,IAAE,OAAM,IAAE;AAAA;AAAA;AAAA;AAAA,SAI5B,IAAE,WAASA,QAAI,UAAQ,IAAE,OAAM,IAAE;AAAA;AAAA;AAAA;AAAA,SAIjC,IAAE;AAAS,QAAI,IAAE;AAAG,QAAE,IAAE,MAAI,IAAE;AAAA,oCACF,CAAC;AAAA;AAAA;AAAA,UAG5B,KAAK,WAAS;AAAA,0CACmB,CAAC;AAAA;AAAA;AAAA;AAAA,UAIjC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kCAQuB,CAAC;AAAA;AAAA,kCAED,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8BAML,CAAC;AAAA;AAAA,YAEnB,CAAC,aAAa,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAOf,CAAC;AAAA;AAAA;AAAA,iCAGoB,CAAC;AAAA,cACpB,MAAI,CAAC;AAAA,YACP,CAAC,aAAa,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAOf,CAAC;AAAA,qBACQ,MAAI,CAAC;AAAA,YACd,CAAC,aAAa,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAOf,CAAC;AAAA,qBACQ,MAAI,CAAC;AAAA,YACd,CAAC,aAAa,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAOf,CAAC;AAAA;AAAA,oBAEO,CAAC;AAAA;AAAA;AAAA,EAEhB;AAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAI,IAAE,CAAC;AAAE,SAAK,EAAE,WAAS,KAAG,EAAE,EAAE,SAAO,CAAC,EAAE,YAAU,KAAG;AAAC,QAAIC,MAAE,EAAE,SAAO,EAAE,EAAE,SAAO,CAAC,EAAE,UAAQD,IAAE,CAAC,GAAE,IAAE,EAAE,yBAAyBC,GAAC;AAAE,MAAE,KAAK,EAAC,QAAOA,KAAE,YAAW,GAAE,SAAQ,KAAK,KAAKA,MAAE,CAAC,EAAC,CAAC;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE;AAAC,MAAI,IAAE,GAAGD,IAAE,KAAK,GAAE,IAAEA;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,KAAI;AAAC,QAAG,EAAC,QAAO,GAAE,YAAW,GAAE,SAAQ,EAAC,IAAE,EAAE,CAAC,GAAE,GAAE;AAAE,IAAAC,QAAI,SAAO,IAAE,MAAI,IAAE,IAAI,GAAG,EAAC,YAAW,GAAE,QAAO,GAAE,WAAUD,IAAE,MAAM,CAAC,GAAE,SAAQ,EAAC,GAAE,CAAC,IAAE,IAAI,GAAG,EAAC,YAAW,GAAE,QAAO,GAAE,WAAUA,IAAE,MAAM,CAAC,GAAE,SAAQ,EAAC,CAAC,IAAE,IAAE,IAAI,GAAG,EAAC,YAAW,GAAE,QAAO,GAAE,WAAUA,IAAE,MAAM,CAAC,GAAE,SAAQ,EAAC,GAAEC,GAAC,GAAE,IAAE,GAAE,IAAE,EAAE,gBAAgB,GAAE,CAAC,CAAC,GAAE,CAAC,GAAE,EAAE,WAASD,IAAE,UAAQ,EAAE,8BAA8B,CAAC;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEC,KAAE;AAAC,SAAK,gBAAc,CAAC,GAAG;AAAE,QAAI,IAAE,IAAI,MAAM,EAAE,MAAM;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,IAAI,GAAE,CAAC,IAAE,EAAEA,IAAE,CAAC,CAAC;AAAE,SAAK,cAAY,GAAE,KAAK,OAAK,EAAE;AAAO,QAAI,IAAE,GAAG,KAAK,IAAI,GAAE,IAAE,GAAGA,GAAC;AAAE,SAAK,WAAS;AAAA;AAAA,QAEv0B,CAAC;AAAA,uBACc,CAAC;AAAA;AAAA;AAAA,EAEnB;AAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAI,IAAEA,IAAE;AAAO,MAAG,IAAE,EAAE,OAAM,MAAM,sBAAsB,CAAC,uBAAuB;AAAE,MAAIC,MAAE,CAAC,WAAU,WAAU,WAAU,WAAU,WAAU,SAAS,GAAE,IAAE,IAAI,MAAM,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAED,IAAE,QAAO,IAAI,GAAEA,IAAE,CAAC,CAAC,IAAEC,IAAE,CAAC;AAAE,SAAO,EAAE,KAAK;AAAC;AAAC,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,eAAa,MAAG,KAAK,eAAa;AAAG,QAAI,IAAE,IAAI,MAAM,EAAE,MAAM;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,IAAI,GAAE,CAAC,IAAE,EAAEA,IAAE,CAAC,CAAC;AAAE,QAAG,KAAK,cAAY,GAAE,KAAK,OAAK,EAAE,QAAO,KAAK,OAAK,EAAE,OAAM,MAAM,6BAA6B,KAAK,IAAI,wBAAwB;AAAE,QAAI,IAAE,GAAG,KAAK,IAAI,GAAE,IAAE,GAAG,MAAK,KAAK,IAAI,GAAE,IAAE,IAAI,MAAM,KAAK,IAAI;AAAE,aAAQ,IAAE,GAAE,IAAEA,IAAE,QAAO,IAAI,GAAEA,IAAE,CAAC,CAAC,IAAE,EAAE,CAAC;AAAE,QAAI,IAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,KAAK,CAAC,KAAI,IAAE,KAAK,EAAE,KAAK,OAAK,CAAC,CAAC,MAAM,EAAE,KAAK,OAAK,CAAC,CAAC,IAAG,IAAE,mBAAmB,EAAE,KAAK,CAAC,MAAM,CAAC;AAAI,SAAK,WAAS;AAAA;AAAA,QAE9vB,CAAC;AAAA;AAAA,oBAEW,CAAC;AAAA,WACV,CAAC;AAAA,sBACU,CAAC;AAAA;AAAA,UAEb,EAAE,KAAK,OAAK,CAAC,CAAC;AAAA,aACX,EAAE,KAAK,OAAK,CAAC,CAAC,MAAM,EAAE,KAAK,OAAK,CAAC,CAAC;AAAA,sBACzB,CAAC;AAAA,aACV,CAAC;AAAA,wBACU,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAKpB;AAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,EAAE,EAAE,QAAQ,6BAA6B,IAAE,IAAI,GAAGD,IAAE,OAAM,CAAC,IAAE,IAAI,GAAGA,IAAE,OAAM,CAAC;AAAE,SAAOC,IAAE,gBAAgB,GAAE,CAACD,GAAC,GAAEA,IAAE,KAAK;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE;AAAC,MAAI,IAAE,GAAE,IAAED,IAAE,MAAM,QAAO,IAAE,EAAE,eAAe,GAAEA,IAAE,KAAK,GAAE,IAAE,GAAE,IAAE,EAAE,mBAAmB,GAAE,CAAC,GAAE,IAAE,KAAG,MAAK,IAAEA;AAAE,QAAI,IAAE,GAAGA,KAAE,GAAE,CAAC,GAAE,IAAE,EAAE,iBAAiB,EAAE,QAAO,CAAC,IAAG,EAAE,2BAA2B,OAAM,GAAE,CAAC;AAAE,MAAG,CAAC,GAAE,CAAC,IAAE,EAAE,0BAA0B,EAAE,OAAM,CAAC,GAAE,IAAE;AAAE,EAAAC,QAAI,IAAE,EAAE,qBAAqB,GAAE,CAAC;AAAG,MAAI,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,EAAE,cAAcD,IAAE,KAAK,IAAE,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,OAAM,EAAC,OAAM,CAAC,GAAE,CAAC,EAAC,GAAE,SAAQ,EAAC,CAAC,GAAE,IAAE,GAAGA,IAAE,KAAK,GAAE,IAAE,GAAG,GAAE,GAAE,OAAM,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,OAAM,EAAC,OAAM,EAAC,GAAE,SAAQ,EAAC,CAAC;AAAE,SAAO,EAAE,8BAA8B,CAAC,GAAE,EAAE,8BAA8B,CAAC,GAAE,KAAG,EAAE,8BAA8B,CAAC,GAAE;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,MAAK,GAAE,UAAS,EAAC,IAAE;AAAE,SAAO,GAAG,GAAE,GAAE,GAAEC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,MAAK,EAAC,IAAE,GAAE,IAAEC,KAAE,IAAE,EAAE,MAAM,QAAO,IAAE,IAAI,MAAM,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,IAAI,GAAE,CAAC,IAAE,EAAE,MAAM,EAAE,CAAC,CAAC;AAAE,MAAI;AAAE,MAAG,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAE;AAAC,QAAI,IAAE,EAAE,QAAQ,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,GAAG,GAAE,EAAE,OAAM,EAAE,OAAM,GAAE,CAAC;AAAE,QAAE,EAAE,eAAe,GAAE,EAAE,KAAK;AAAE,QAAI,IAAE,EAAE,QAAQ,IAAI,EAAE,MAAM;AAAE,MAAE,SAAO;AAAA,EAAC,MAAM,KAAE,GAAG,GAAE,GAAE,CAAC;AAAE,SAAO;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG;AAAI,SAAS,GAAG,EAAC,GAAED,KAAE,GAAE,GAAE,YAAWC,KAAE,YAAW,GAAE,SAAQ,GAAE,MAAK,IAAE,MAAK,wBAAuB,IAAE,MAAK,gBAAe,IAAE,GAAE,YAAW,IAAE,KAAI,GAAE;AAAC,MAAI,IAAED,IAAE,MAAM,QAAO,IAAE,EAAE,MAAM,QAAO,IAAEC,MAAED,IAAE,MAAM,IAAE,CAAC,IAAEA,IAAE,MAAM,IAAE,CAAC,GAAE,IAAE,IAAE,EAAE,MAAM,IAAE,CAAC,IAAE,EAAE,MAAM,IAAE,CAAC,GAAE,IAAEC,MAAED,IAAE,MAAM,IAAE,CAAC,IAAEA,IAAE,MAAM,IAAE,CAAC,GAAE,IAAE,IAAE,EAAE,MAAM,IAAE,CAAC,IAAE,EAAE,MAAM,IAAE,CAAC,GAAE,IAAEA,IAAE,MAAM,MAAM,GAAE,EAAE,GAAE,IAAE,EAAE,MAAM,MAAM,GAAE,EAAE,GAAE,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,GAAG,2BAA2BA,IAAE,MAAM,MAAM,GAAE,EAAE,GAAE,EAAE,MAAM,MAAM,GAAE,EAAE,CAAC,EAAE,OAAO,CAAC,GAAE,CAAC,CAAC;AAAE,IAAE,OAAO,MAAI,GAAE,MAAI,kCAAkC,CAAC,UAAU,CAAC,4BAA4BA,IAAE,KAAK,QAAQ,EAAE,KAAK,mBAAmBC,GAAC,mBAAmB,CAAC,cAAc;AAAE,MAAI,IAAEA,MAAE,CAAC,GAAE,GAAE,CAAC,IAAE,CAAC,GAAE,GAAE,CAAC,GAAE,IAAE,IAAE,CAAC,GAAE,GAAE,CAAC,IAAE,CAAC,GAAE,GAAE,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAED,IAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,IAAE,CAAC,GAAE,CAAC,GAAE,IAAE,KAAK,IAAI,GAAE,CAAC,GAAE,IAAEC,MAAE,EAAE,MAAM,CAAC,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,KAAG,MAAK,IAAE,KAAG,MAAK,IAAE,MAAI,aAAY,IAAE,KAAG,OAAK,GAAG,GAAE,IAAE,IAAE,MAAK,IAAE,KAAG,KAAG,KAAG,KAAG,MAAK;AAAE,OAAI,MAAI,KAAG,MAAI,MAAI,IAAE,MAAI,MAAI,OAAG;AAAC,QAAI,IAAE,GAAE,IAAE;AAAE,IAAAA,QAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,MAAK,CAAC,GAAE,GAAE,CAAC,EAAC,EAAC,CAAC,GAAE,EAAE,KAAK,CAAC,IAAG,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,MAAK,CAAC,GAAE,GAAE,CAAC,EAAC,EAAC,CAAC,GAAE,EAAE,KAAK,CAAC;AAAG,QAAI,KAAG,MAAI,GAAE,KAAG,MAAI,GAAE,KAAG;AAAE,WAAK,KAAG,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,CAAC,GAAE,GAAE,CAAC,EAAC,EAAC,CAAC,GAAE,EAAE,KAAK,EAAE;AAAG,QAAI,KAAG,MAAI,IAAE,IAAE,GAAE,KAAG;AAAE,WAAK,KAAG,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,CAAC,GAAE,GAAE,CAAC,EAAC,EAAC,CAAC,GAAE,EAAE,KAAK,EAAE;AAAG,QAAI,KAAG,GAAG,EAAC,QAAO,EAAC,GAAE,IAAG,GAAE,GAAE,GAAE,SAAQ,EAAC,CAAC;AAAE,QAAE,GAAG,EAAC,QAAO,EAAC,GAAE,GAAE,GAAE,SAAQ,GAAE,OAAM,EAAC,MAAK,IAAG,UAAS,KAAE,EAAC,CAAC,GAAE,EAAE,KAAK,EAAE;AAAA,EAAC,OAAK;AAAC,QAAI,IAAE,GAAGD,IAAE,OAAM,EAAE,KAAK,GAAE,IAAE,IAAI,GAAG,GAAE,GAAE,CAAC,GAAE,GAAE,CAAC,GAAEC,KAAE,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,KAAG,CAAC,GAAE,CAAC;AAAE,QAAG,KAAG,QAAM,GAAG,KAAK,CAAC,GAAE,KAAG,GAAG,KAAK,CAAC,GAAE,GAAE;AAAC,UAAI,KAAG,EAAE,eAAe,CAAC,GAAE,WAAU,EAAE,kBAAkB,GAAE,SAAS,CAAC;AAAE,SAAG,KAAK,EAAE,GAAE,EAAE,KAAK,EAAE;AAAA,IAAC;AAAC,QAAE,EAAE,gBAAgB,GAAE,IAAG,CAAC;AAAA,EAAC;AAAC,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,IAAE,KAAK,CAAC;AAAE,WAAQ,KAAK,EAAE,GAAE,8BAA8B,CAAC;AAAE,SAAO;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,GAAE,GAAE,MAAK,GAAE,wBAAuB,EAAC,IAAE,GAAE,EAAC,YAAW,GAAE,YAAW,GAAE,YAAW,GAAE,gBAAe,EAAC,IAAE;AAAE,SAAO,GAAG,EAAC,GAAE,GAAE,GAAE,GAAE,YAAW,GAAE,YAAW,GAAE,SAAQC,KAAE,MAAK,GAAE,wBAAuB,GAAE,gBAAe,GAAE,YAAW,EAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG;AAAiB,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE;AAAE,MAAGC,IAAE,mBAAmB,CAAC,CAAC,CAAC,KAAG,EAAE,UAAQ,aAAY;AAAC,QAAI,IAAEA,IAAE,QAAQ,IAAI,EAAE,MAAM,GAAE,IAAE,GAAG,EAAE,MAAM;AAAE,WAAOA,IAAE,eAAe,EAAE,OAAM,EAAE,OAAM,CAAC;AAAA,EAAC;AAAC,MAAI;AAAE,SAAO,EAAE,EAAE,QAAQ,6BAA6B,IAAE,IAAE,IAAI,GAAG,EAAE,OAAM,EAAE,IAAE,IAAE,IAAI,GAAG,EAAE,OAAM,EAAE,GAAEA,IAAE,gBAAgB,GAAE,CAAC,CAAC,GAAE,EAAE,KAAK;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG,KAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAV,IAK1tH,KAAG,GAAG,EAAC,WAAU,GAAE,CAAC;AALssH,IAKpsH,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG,KAAG;AAAA;AAAA;AAAV,IAEzC,KAAG,GAAG,EAAC,WAAU,GAAE,CAAC;AAFqB,IAEnB,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG;AAAP,IAAuB,KAAG,GAAG,EAAC,WAAU,IAAG,iBAAgB,IAAG,iBAAgB,MAAG,eAAc,GAAE,CAAC;AAAlG,IAAoG,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE;AAAC,SAAK,cAAY,CAAC,GAAE,KAAK,cAAY,GAAE,KAAK,gBAAcA,IAAE,IAAI,CAAC,GAAE,MAAI,IAAI,CAAC,EAAE;AAAE,QAAI,IAAE,CAAC;AAAE,SAAK,cAAc,QAAQ,OAAG;AAAC,QAAE,KAAK,UAAU,CAAC,SAAS,CAAC,gBAAgB;AAAA,IAAC,CAAC;AAAE,QAAI,IAAE,KAAK,cAAc,IAAI,OAAG,IAAI,CAAC,EAAE,EAAE,KAAK,KAAK;AAAE,SAAK,WAAS;AAAA;AAAA,UAEvgB,EAAE,KAAK;AAAA,SACR,CAAC;AAAA;AAAA,yBAEe,CAAC;AAAA;AAAA;AAAA;AAAA,EAGrB;AAAC;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE;AAAC,SAAK,cAAY,CAAC,GAAE,KAAK,eAAa,MAAG,KAAK,eAAa,MAAG,KAAK,cAAY,GAAE,KAAK,gBAAcA,IAAE,IAAI,CAAC,GAAE,MAAI,IAAI,CAAC,EAAE;AAAE,QAAI,IAAE,CAAC;AAAE,SAAK,cAAc,QAAQ,OAAG;AAAC,QAAE,KAAK,SAAS,CAAC,SAAS,CAAC,gBAAgB;AAAA,IAAC,CAAC;AAAE,QAAI,IAAE,KAAK,cAAc,IAAI,OAAG,IAAI,CAAC,EAAE,EAAE,KAAK,KAAK;AAAE,SAAK,WAAS;AAAA;AAAA,UAEhT,EAAE,KAAK;AAAA,SACR,CAAC;AAAA;AAAA,wBAEc,CAAC;AAAA;AAAA;AAAA;AAAA,EAGpB;AAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,IAAE;AAAE,MAAG,EAAE,WAAS,EAAE,QAAO,GAAG,EAAC,QAAO,EAAC,GAAE,EAAE,CAAC,EAAC,GAAE,SAAQC,IAAC,CAAC;AAAE,MAAG,EAAE,SAAO,EAAE,EAAE,UAAU,8BAA8B,GAAE;AAAC,QAAI,IAAE,KAAK,MAAM,EAAE,SAAO,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAE,MAAM,GAAE,CAAC,GAAE,SAAQA,IAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAE,MAAM,CAAC,GAAE,SAAQA,IAAC,CAAC;AAAE,WAAO,GAAG,EAAC,QAAO,CAAC,GAAE,CAAC,GAAE,SAAQA,IAAC,CAAC;AAAA,EAAC;AAAC,MAAI,IAAE,EAAE,IAAI,OAAG,EAAE,KAAK,EAAE,OAAO,CAAC,GAAE,MAAI,GAAG,GAAE,CAAC,CAAC,GAAE,IAAE,EAAE,IAAI,OAAG,EAAE,KAAK,GAAE,IAAE,EAAE,EAAE,QAAQ,YAAY,IAAE,IAAI,GAAG,EAAE,CAAC,EAAE,OAAM,CAAC,IAAE,IAAI,GAAG,EAAE,CAAC,EAAE,OAAM,CAAC;AAAE,SAAOA,IAAE,gBAAgB,GAAE,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,MAAK,GAAE,UAAS,EAAC,IAAE,GAAE,IAAE,EAAE,MAAM,QAAO,IAAE,EAAE,eAAe,GAAE,EAAE,KAAK,GAAE,IAAE,GAAE,IAAE,EAAE,mBAAmB,GAAE,CAAC,GAAE,IAAE;AAAE,OAAG,SAAO,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC,GAAE,IAAE,EAAE,iBAAiB,EAAE,QAAO,CAAC,IAAG,EAAE,2BAA2B,OAAM,GAAE,CAAC;AAAE,MAAG,CAAC,GAAE,CAAC,IAAE,EAAE,0BAA0B,EAAE,OAAM,CAAC,GAAE,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,CAAC,IAAG,CAAC,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,GAAE,EAAE,OAAM,OAAMA,GAAC,GAAE;AAAE,MAAG,GAAE;AAAC,QAAI,IAAE,EAAE,qBAAqB,GAAE,CAAC;AAAE,QAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAA,EAAC,MAAM,KAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,SAAOA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAE,KAAG,QAAMA,IAAE,8BAA8B,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,MAAK,GAAE,UAAS,EAAC,IAAE,GAAE,IAAE,EAAE,MAAM,QAAO,IAAE,EAAE,eAAe,GAAE,EAAE,KAAK,GAAE,IAAE,GAAE,IAAE,EAAE,mBAAmB,GAAE,CAAC,GAAE,IAAE;AAAE,OAAG,SAAO,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC,GAAE,IAAE,EAAE,iBAAiB,EAAE,QAAO,CAAC,IAAG,EAAE,2BAA2B,OAAM,GAAE,CAAC;AAAE,MAAG,CAAC,GAAE,CAAC,IAAE,EAAE,0BAA0B,EAAE,OAAM,CAAC,GAAE,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,CAAC,IAAG,CAAC,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,GAAE,EAAE,OAAM,OAAMA,GAAC,GAAE;AAAE,MAAG,GAAE;AAAC,QAAI,IAAE,EAAE,qBAAqB,GAAE,CAAC;AAAE,QAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAA,EAAC,MAAM,KAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,SAAOA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAE,KAAG,QAAMA,IAAE,8BAA8B,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG;AAAE,QAAG,EAAC,YAAW,GAAE,WAAU,GAAE,SAAQ,EAAC,IAAE;AAAE,SAAG,KAAK,cAAc,KAAK,cAAc,GAAE,KAAK,cAAY,CAAC,GAAE,CAAC;AAAE,QAAI,IAAEA,QAAI,QAAM,MAAI,KAAI,IAAE,IAAE,kBAAgB;AAA+C,SAAK,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA,kCAK5uE,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,8BAKL,CAAC;AAAA,wBACP,CAAC;AAAA;AAAA,0BAEC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOtB;AAAC;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,eAAa,MAAG,KAAK,eAAa,MAAG,EAAE,OAAO,EAAE,SAAO,GAAE,MAAI,aAAa,EAAE,OAAO,CAAC,EAAE,YAAY,IAAE,EAAE,MAAM,CAAC,CAAC,0CAA0C;AAAE,QAAI,IAAE,EAAE,EAAE,SAAO,CAAC,GAAE,IAAE,KAAK,KAAK,IAAEA,GAAC;AAAE,SAAK,cAAY,EAAE,MAAM,GAAE,EAAE,GAAE,IAAE,KAAG,KAAK,YAAY,KAAK,CAAC,GAAE,KAAG,KAAK,cAAc,KAAK,cAAc;AAAE,QAAI,IAAE,KAAK,aAAY,IAAE,EAAE,QAAO,IAAE,GAAG,CAAC,GAAE,IAAE,GAAG,UAAS,CAAC,GAAE,GAAE;AAAE,QAAG,MAAI,GAAE;AAAC,UAAE,IAAE;AAAE,UAAI,IAAE,GAAG,CAAC;AAAE,UAAE;AAAA,UAClc,CAAC,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC;AAAA,YAC7B,EAAE,IAAE,CAAC,CAAC;AAAA,UACR,CAAC,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC;AAAA,YAC7B,EAAE,IAAE,CAAC,CAAC;AAAA,UACR,CAAC,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC;AAAA,YAC7B,EAAE,IAAE,CAAC,CAAC;AAAA,UACR,CAAC,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC;AAAA,YAC7B,EAAE,IAAE,CAAC,CAAC;AAAA,IAAG,MAAM,KAAE,GAAE,IAAE;AAAA,UACvB,CAAC;AAAA,YACC,EAAE,IAAE,CAAC,CAAC;AAAA,UACR,CAAC;AAAA,YACC,EAAE,IAAE,CAAC,CAAC;AAAA,UACR,CAAC;AAAA,YACC,EAAE,IAAE,CAAC,CAAC;AAAA,UACR,CAAC;AAAA,YACC,EAAE,IAAE,CAAC,CAAC;AAAI,QAAI,IAAE,CAAC,KAAI,KAAI,KAAI,KAAI,KAAI,GAAG,EAAE,MAAM,GAAE,CAAC,GAAE,IAAE,MAAI,EAAE,IAAE,CAAC,GAAE,IAAE,EAAE,IAAI,OAAG,SAAO,CAAC,GAAE,IAAE,GAAG,cAAa,IAAE,CAAC,EAAE,OAAO,SAAS,GAAE,IAAE,GAAG,cAAa,IAAE,CAAC,EAAE,OAAO,SAAS,GAAE,IAAE,GAAG,cAAa,IAAE,CAAC,EAAE,OAAO,SAAS,GAAE,IAAE,GAAG,cAAa,IAAE,CAAC,EAAE,OAAO,SAAS,GAAE,IAAE,MAAI,QAAM,gBAAc,YAAW,IAAE,IAAE,KAAG;AAAA,sDAC7P,EAAE,KAAK,CAAC;AAAA,sDACR,EAAE,KAAK,CAAC;AAAA,sDACR,EAAE,KAAK,CAAC;AAAA,sDACR,EAAE,KAAK,CAAC,QAAO,IAAE;AAAA,0BAC7C,EAAE,KAAK,CAAC;AAAA,uCACK,EAAE,KAAK,CAAC;AAAA,uCACR,EAAE,KAAK,CAAC;AAAA,qDACM,EAAE,KAAK,CAAC,WAAU,IAAE,IAAE,KAAG;AAAA,qCACzC,EAAE,KAAK,CAAC;AAAA,4CACD,EAAE,KAAK,CAAC;AAAA,iDACH,EAAE,MAAM,EAAE,EAAE,KAAK,CAAC;AAAA;AAC1D,SAAK,WAAS;AAAA,0BACG,EAAE,KAAK,CAAC;AAAA,iCACD,EAAE,KAAK,CAAC;AAAA,sCACH,EAAE,MAAM,EAAE,EAAE,KAAK,CAAC;AAAA;AAAA,QAEhD,CAAC;AAAA;AAAA,UAEC,CAAC;AAAA,4BACiB,EAAE,IAAE,CAAC,CAAC,MAAM,EAAE,IAAE,CAAC,IAAE,CAAC;AAAA,4BACpB,EAAE,IAAE,CAAC,CAAC,MAAM,EAAE,IAAE,CAAC,IAAE,CAAC;AAAA,UACtC,CAAC;AAAA,yCAC8B,CAAC,eAAe,CAAC;AAAA,sBACpC,CAAC,eAAe,CAAC,OAAOA,GAAC;AAAA;AAAA;AAAA,2BAGpB,CAAC;AAAA;AAAA,8BAEEA,GAAC;AAAA;AAAA,YAEnB,CAAC;AAAA,6BACgB,CAAC;AAAA;AAAA;AAAA,mBAGX,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWf;AAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,IAAE,MAAK;AAAC,MAAI,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,EAAE,MAAM,CAAC;AAAE,OAAG,SAAO,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,EAAE,MAAM,CAAC;AAAG,MAAI,IAAE,EAAE,yBAAyB,CAAC,GAAE,IAAE,EAAC,YAAW,GAAE,QAAO,GAAE,WAAU,GAAE,SAAQ,KAAK,KAAK,IAAE,CAAC,EAAC,GAAE,IAAE,IAAI,GAAG,GAAEA,KAAE,KAAG,IAAI,GAAE,IAAE,CAAC,CAAC;AAAE,OAAG,QAAM,EAAE,KAAK,CAAC;AAAE,MAAI,IAAED,IAAE,gBAAgB,GAAE,GAAE,OAAO;AAAE,MAAG,EAAE,MAAM,CAAC,MAAI,EAAE,QAAO;AAAE,MAAI,IAAE,GAAGA,KAAE,GAAEC,KAAE,CAAC;AAAE,SAAOD,IAAE,8BAA8B,CAAC,GAAE;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,IAAE,MAAK;AAAC,MAAI,IAAE,KAAG,OAAK,EAAE,QAAM,EAAE,OAAM,IAAE,EAAE,EAAE,SAAO,CAAC,GAAE,IAAE,EAAE,yBAAyB,CAAC,GAAE,IAAE,IAAI,GAAG,GAAE,GAAEA,KAAE,KAAG,IAAI,GAAE,IAAE,KAAG,OAAK,CAAC,CAAC,IAAE,CAAC,GAAE,CAAC,GAAE,IAAED,IAAE,gBAAgB,GAAE,GAAE,OAAO;AAAE,MAAG,EAAE,MAAM,WAAS,EAAE,MAAM,QAAO;AAAC,QAAI,IAAE,GAAGA,KAAE,GAAEC,KAAE,CAAC;AAAE,WAAOD,IAAE,8BAA8B,CAAC,GAAE;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE;AAAC,MAAI,IAAE,CAACA,GAAC;AAAE,MAAG,EAAE,2BAA2B,QAAM,EAAE,OAAO,CAAC,EAAE,YAAY,IAAE,EAAE,MAAM,CAAC,GAAE,GAAE,EAAE,MAAM,MAAM,GAAE,CAAC,EAAE,EAAE,QAAQ,mBAAmB,KAAG,EAAE,MAAM,UAAQ,GAAE;AAAC,QAAI,IAAE,CAAC,GAAE,IAAED,IAAE,QAAQ,IAAI,EAAE,MAAM,GAAE,IAAE,MAAI,QAAM,EAAE,UAAS,IAAE;AAAE,UAAI,IAAEA,IAAE,aAAa,CAAC,GAAE,EAAE,KAAK,CAAC;AAAG,QAAG,CAAC,GAAE,CAAC,IAAE,EAAE,0BAA0B,EAAE,OAAM,CAAC,GAAE,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,CAAC,IAAG,CAAC,EAAC,EAAC,CAAC;AAAE,MAAE,KAAK,CAAC;AAAE,QAAI,IAAE,GAAGA,KAAE,GAAE,CAAC;AAAE,MAAE,KAAK,CAAC;AAAE,QAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,WAAO,EAAE,QAAQ,OAAGA,IAAE,8BAA8B,CAAC,CAAC,GAAE;AAAA,EAAC;AAAC,SAAO,GAAGA,KAAE,GAAE,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,MAAK,EAAC,IAAE,GAAE,IAAE,EAAE,eAAe,GAAE,EAAE,KAAK,GAAE,IAAE,EAAE,mBAAmB,GAAE,EAAE,MAAM,MAAM,GAAE,IAAE,GAAE,IAAE,CAAC;AAAE,OAAG,SAAO,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC,GAAE,EAAE,KAAK,CAAC,GAAE,IAAE,EAAE,iBAAiB,EAAE,QAAO,EAAE,MAAM,MAAM,IAAG,EAAE,2BAA2B,UAAS,CAAC,EAAE,CAAC,CAAC,GAAE,EAAE,MAAM,MAAM;AAAE,MAAI,IAAE,GAAGA,KAAE,GAAE,EAAE,CAAC,GAAE,KAAK;AAAE,SAAO,EAAE,QAAQ,OAAGA,IAAE,8BAA8B,CAAC,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,MAAK,EAAC,IAAE,GAAE,IAAE,EAAE,eAAe,GAAE,EAAE,KAAK,GAAE,IAAE,EAAE,mBAAmB,GAAE,EAAE,MAAM,MAAM,GAAE,IAAE,GAAE,IAAE,CAAC;AAAE,OAAG,SAAO,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC,GAAE,EAAE,KAAK,CAAC,GAAE,IAAE,EAAE,iBAAiB,EAAE,QAAO,EAAE,MAAM,MAAM,IAAG,EAAE,2BAA2B,UAAS,CAAC,EAAE,CAAC,CAAC,GAAE,EAAE,MAAM,MAAM;AAAE,MAAI,IAAE,GAAGA,KAAE,GAAE,EAAE,CAAC,GAAE,KAAK;AAAE,SAAO,EAAE,QAAQ,OAAGA,IAAE,8BAA8B,CAAC,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG,KAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAV,IAK3lE,KAAG,GAAG,EAAC,WAAU,GAAE,CAAC;AALukE,IAKrkE,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG,KAAG;AAAV,IAA+C,KAAG,GAAG,EAAC,WAAU,GAAE,CAAC;AAAnE,IAAqE,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG,KAAG;AAAA;AAAA;AAAV,IAErM,KAAG,GAAG,EAAC,WAAU,GAAE,CAAC;AAFiL,IAE/K,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG,KAAG;AAAA;AAAA;AAAV,IAE3E,KAAG;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,KAAG;AAAA;AAAA;AAPsE,IAS3E,KAAG,GAAG,EAAC,WAAU,IAAG,iBAAgB,GAAE,CAAC;AAToC,IASlC,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG,KAAG;AAAA;AAAA;AAAV,IAEnD,KAAG,GAAG,EAAC,WAAU,GAAE,CAAC;AAF+B,IAE7B,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE,IAAE,OAAG,IAAE,OAAG;AAAC,QAAG,KAAK,gBAAc,CAAC,GAAG,GAAEA,QAAI,SAAO,EAAE,OAAM,IAAI,MAAM,4CAA4C;AAAE,QAAI,IAAE,EAAE,aAAY,IAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,EAAE,gBAAe,IAAE,EAAE,eAAc,IAAE,EAAE,uBAAsB,IAAE,EAAE,sBAAqB,IAAE,EAAE,QAAQ,KAAI,IAAE,EAAE,QAAQ;AAAK,SAAK,cAAY,EAAE;AAAS,QAAI,IAAEA,QAAI,OAAM,IAAE,cAAc,EAAE,QAAQ,YAAY,EAAE,OAAO,YAAY,EAAE,UAAU,QAAO,IAAE,SAAS,EAAE,OAAO,YAAY,EAAE,UAAU,QAAO,IAAE;AAAM,QAAG,MAAI,IAAE,iBAAgB,GAAE;AAAC,UAAI,IAAE;AAAK,WAAK,WAAS;AAAA,sCAC3nB,CAAC,KAAK,CAAC;AAAA,mCACV,CAAC,KAAK,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kCAkBR,CAAC;AAAA,sBACb,CAAC;AAAA;AAAA;AAAA,kCAGW,EAAE,QAAQ;AAAA;AAAA;AAAA;AAAA,oCAIR,CAAC;AAAA,wBACb,CAAC;AAAA;AAAA;AAAA,oCAGW,EAAE,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0BAUnB,CAAC;AAAA;AAAA;AAAA,mCAGQ,IAAE,IAAE,IAAE,IAAE,QAAQ,CAAC,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMnD;AAAA,IAAM;AAAC,QAAI,IAAE,OAAM,IAAE,GAAGA,GAAC,IAAIA,GAAC,IAAIA,GAAC;AAAqE,IAAAA,QAAI,UAAQ,IAAE;AAA8B,QAAI,IAAE,KAAK,MAAM,IAAE,CAAC,IAAE,GAAE,IAAE,IAAE,GAAE,IAAE;AAAA,YAChL,CAAC;AAAA;AAAA;AAAA,wBAGW,CAAC;AAAA;AAAA;AAEnB,SAAK,WAAS;AAAA,oCACgB,CAAC,KAAK,CAAC;AAAA,iCACV,CAAC,KAAK,CAAC;AAAA,0CACE,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8BAMb,EAAE,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kCAkBL,CAAC;AAAA;AAAA;AAAA;AAAA,gCAIH,CAAC;AAAA,oBACb,CAAC;AAAA;AAAA;AAAA,gCAGW,EAAE,QAAQ;AAAA;AAAA;AAAA;AAAA,kCAIR,CAAC;AAAA,uCACI,CAAC;AAAA;AAAA;AAAA;AAAA,yCAIC,CAAC;AAAA,6CACG,CAAC;AAAA,6CACD,CAAC;AAAA;AAAA;AAAA,cAGhC,CAAC;AAAA;AAAA;AAAA,gCAGiB,CAAC;AAAA,gBACjB,MAAI,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAQP,CAAC;AAAA,uBACQ,MAAI,CAAC;AAAA;AAAA;AAAA,yCAGa,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,cAK5B,CAAC;AAAA,uBACQ,MAAI,CAAC;AAAA;AAAA;AAAA,yCAGa,CAAC;AAAA,6CACG,CAAC;AAAA;AAAA;AAAA;AAAA,cAIhC,CAAC;AAAA;AAAA;AAAA,oBAGK,CAAC;AAAA;AAAA;AAAA,EAEhB;AAAC;AA7IkH,IA6IhH,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE,IAAE,OAAG,IAAE,OAAG;AAAC,QAAG,KAAK,gBAAc,CAAC,GAAG,GAAEA,QAAI,SAAO,EAAE,OAAM,IAAI,MAAM,4CAA4C;AAAE,QAAI,IAAE,EAAE,aAAY,IAAE,EAAE,aAAY,IAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,EAAE,eAAc,IAAE,EAAE,gBAAe,IAAE,EAAE,eAAc,IAAE,EAAE,sBAAqB,IAAE,EAAE,uBAAsB,IAAE,EAAE,sBAAqB,IAAE,EAAE,QAAQ,OAAM,IAAE,EAAE,QAAQ,KAAI,IAAE,EAAE,QAAQ;AAAK,SAAK,cAAY,EAAE;AAAS,QAAI,IAAEA,QAAI,OAAM,IAAE;AAAM,QAAG,MAAI,IAAE,iBAAgB,GAAE;AAAC,UAAI,IAAE;AAAK,WAAK,WAAS;AAAA;AAAA,oBAEre,CAAC,KAAK,CAAC,KAAK,CAAC;AAAA,mCACE,CAAC,KAAK,CAAC,KAAK,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kCAkBd,CAAC;AAAA,sBACb,CAAC;AAAA;AAAA;AAAA,kCAGW,EAAE,OAAO;AAAA;AAAA;AAAA;AAAA,oCAIP,CAAC;AAAA,wBACb,CAAC;AAAA;AAAA;AAAA,oCAGW,EAAE,QAAQ;AAAA;AAAA;AAAA;AAAA,sCAIR,CAAC;AAAA,0BACb,CAAC;AAAA;AAAA;AAAA,sCAGW,EAAE,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4BAUnB,CAAC;AAAA;AAAA;AAAA,qCAGQ,IAAE,IAAE,cAAc,EAAE,OAAO,YAAY,EAAE,QAAQ,YAAY,EAAE,OAAO,YAAY,EAAE,UAAU,UAAQ,UAAU,EAAE,QAAQ,YAAY,EAAE,OAAO,YAAY,EAAE,UAAU,UAAQ,QAAQ,CAAC,MAAM,CAAC;AAAA,6BACvM,CAAC,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAO7B;AAAA,IAAM;AAAC,QAAI,IAAE,OAAM,IAAE,GAAGA,GAAC,IAAIA,GAAC,IAAIA,GAAC;AAAqE,IAAAA,QAAI,UAAQ,IAAE;AAA8B,QAAI,IAAE,KAAK,MAAM,IAAE,CAAC,IAAE,GAAE,IAAE,IAAE,GAAE,IAAE;AAAA,YAChL,CAAC;AAAA;AAAA;AAAA,wBAGW,CAAC;AAAA;AAAA;AAEnB,SAAK,WAAS;AAAA;AAAA,gBAEJ,CAAC,KAAK,CAAC,KAAK,CAAC;AAAA,iCACI,CAAC,KAAK,CAAC,KAAK,CAAC;AAAA,0CACJ,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8BAMb,EAAE,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kCAmBL,CAAC;AAAA;AAAA;AAAA;AAAA,gCAIH,CAAC;AAAA,oBACb,CAAC;AAAA;AAAA;AAAA,gCAGW,EAAE,OAAO;AAAA;AAAA;AAAA;AAAA,kCAIP,CAAC;AAAA,oBACf,CAAC;AAAA;AAAA;AAAA,kCAGa,EAAE,QAAQ;AAAA;AAAA;AAAA;AAAA,oCAIR,CAAC;AAAA,yCACI,CAAC;AAAA;AAAA;AAAA;AAAA,+CAIK,CAAC;AAAA,mDACG,CAAC;AAAA,mDACD,CAAC;AAAA;AAAA;AAAA,gBAGpC,CAAC;AAAA;AAAA;AAAA,kCAGiB,CAAC;AAAA,kBACjB,MAAI,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAQP,CAAC;AAAA,yBACQ,MAAI,CAAC;AAAA;AAAA;AAAA,+CAGiB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,gBAKhC,CAAC;AAAA,yBACQ,MAAI,CAAC;AAAA;AAAA;AAAA,+CAGiB,CAAC;AAAA,mDACG,CAAC;AAAA;AAAA;AAAA;AAAA,gBAIpC,CAAC;AAAA;AAAA;AAAA;AAAA,oBAIG,CAAC;AAAA;AAAA;AAAA,EAEhB;AAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE;AAAE,KAAG,GAAE,SAAS;AAAE,MAAG,EAAC,YAAW,GAAE,SAAQ,GAAE,KAAI,GAAE,iBAAgB,EAAC,IAAE,GAAE,IAAE;AAAE,IAAE,OAAO,EAAE,+BAA+B,GAAE,CAAC,GAAE,MAAI,wEAAwE,CAAC,mBAAmB,CAAC,GAAG;AAAE,MAAI,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,MAAG,EAAE,gBAAc,KAAG,EAAE,iBAAe,KAAG,EAAE,YAAY,EAAE,SAAQ,EAAE,QAAQ,EAAE,QAAO,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,IAAC,CAAC;AAAE,MAAI,IAAE,IAAI,GAAG,GAAE,OAAM,KAAE;AAAE,SAAOA,IAAE,gBAAgB,GAAE,CAAC,CAAC,GAAE,SAAS;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,YAAW,GAAE,SAAQ,GAAE,KAAI,GAAE,iBAAgB,GAAE,YAAW,EAAC,IAAE,GAAE,IAAE,CAAC,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,IAAI,GAAG,GAAE,OAAM,KAAE;AAAE,SAAOC,IAAE,gBAAgB,GAAE,CAAC,CAAC,GAAE,SAAS;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,IAAI,GAAE,KAAK,cAAY,EAAE;AAAQ,QAAIA,MAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,EAAE,gBAAe,IAAE,EAAE,eAAc,IAAE,EAAE,uBAAsB,IAAE,EAAE,sBAAqB,IAAE,IAAE,IAAE,EAAE,QAAQ,KAAI,IAAE,IAAE,IAAE,EAAE,QAAQ,MAAK,IAAE,KAAGA,MAAE;AAAG,SAAK,WAAS;AAAA,iCAChnC,CAAC,KAAK,CAAC;AAAA,0CACE,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gCAcX,CAAC;AAAA,oBACb,CAAC;AAAA,gDAC2B,CAAC;AAAA;AAAA,oCAEb,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA,kCAKb,CAAC;AAAA,mBAChB,CAAC;AAAA,kDAC8B,CAAC;AAAA;AAAA,sCAEb,EAAE,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAa3C;AAAC;AA1C21B,IA0Cz1B,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,IAAI,GAAE,KAAK,cAAY,EAAE;AAAQ,QAAIA,MAAE,EAAE,aAAY,IAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,EAAE,aAAY,IAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,EAAE,eAAc,IAAE,EAAE,gBAAe,IAAE,EAAE,eAAc,IAAE,EAAE,sBAAqB,IAAE,EAAE,uBAAsB,IAAE,EAAE,sBAAqB,IAAE,IAAE,IAAE,EAAE,QAAQ,OAAM,IAAE,IAAE,IAAE,EAAE,QAAQ,KAAI,IAAE,IAAE,IAAE,EAAE,QAAQ,MAAK,IAAE,KAAGA,MAAE,IAAE;AAAG,SAAK,WAAS;AAAA,iCACtX,CAAC,KAAK,CAAC,KAAK,CAAC;AAAA,0CACJ,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gCAiBX,CAAC;AAAA,oBACb,CAAC;AAAA,gDAC2B,CAAC;AAAA;AAAA,oCAEb,EAAE,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA,kCAKZ,CAAC;AAAA,sBACb,CAAC;AAAA,kDAC2B,CAAC;AAAA;AAAA,sCAEb,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oCAMb,CAAC;AAAA,wBACb,CAAC;AAAA,oDAC2B,CAAC;AAAA;AAAA,wCAEb,EAAE,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAc7C;AAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,IAAG,GAAE,OAAM,EAAC,IAAE,GAAE,IAAE,GAAE,EAAC,YAAW,GAAE,SAAQ,GAAE,KAAI,GAAE,iBAAgB,EAAC,IAAE,GAAE,IAAE,CAAC,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,IAAI,GAAG,CAAC;AAAE,SAAOC,IAAE,gBAAgB,GAAE,CAAC,CAAC,GAAE,EAAE,KAAK;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,IAAG,GAAE,OAAM,EAAC,IAAE,GAAE,IAAE;AAAE,KAAG,CAAC,GAAE,CAAC,GAAE,aAAa;AAAE,MAAG,EAAC,YAAW,GAAE,SAAQ,GAAE,KAAI,EAAC,IAAE,GAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,IAAI,GAAG,CAAC;AAAE,SAAOC,IAAE,gBAAgB,GAAE,CAAC,CAAC,GAAE,EAAE,KAAK;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,GAAE,EAAC,IAAE,GAAE,EAAC,YAAW,GAAE,YAAW,EAAC,IAAE;AAAE,SAAO,GAAG,EAAC,GAAE,GAAE,GAAE,GAAE,YAAW,GAAE,YAAW,GAAE,SAAQC,IAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE,GAAE,GAAE,GAAE;AAAC,SAAK,cAAY,CAAC,GAAE,KAAK,gBAAc,CAAC,KAAI,QAAO,UAAU,GAAE,EAAE,2BAA2B,GAAEA,GAAC,GAAE,EAAE,2BAA2B,GAAE,CAAC;AAAE,QAAI,IAAE;AAAM,SAAG,SAAO,EAAE,2BAA2B,GAAE,CAAC,GAAE,KAAK,cAAc,KAAK,QAAQ,GAAE,IAAE;AAA0B,QAAI,IAAE;AAAM,SAAG,SAAO,EAAE,2BAA2B,GAAE,CAAC,GAAE,KAAK,cAAc,KAAK,OAAO,GAAE,IAAE,0BAAyB,KAAK,cAAY,GAAE,KAAK,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA,yBAK/pC,CAAC;AAAA,wBACF,CAAC;AAAA,2DACkC,CAAC;AAAA;AAAA;AAAA;AAAA,EAGvD;AAAC;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE,GAAE,GAAE,GAAE;AAAC,SAAK,eAAa,MAAG,KAAK,eAAa,MAAG,KAAK,gBAAc,CAAC,KAAI,QAAO,UAAU,GAAE,EAAE,2BAA2B,GAAEA,GAAC,GAAE,EAAE,2BAA2B,GAAE,CAAC;AAAE,QAAI,IAAE;AAAY,SAAG,SAAO,EAAE,2BAA2B,GAAE,CAAC,GAAE,KAAK,cAAc,KAAK,QAAQ,GAAE,IAAE;AAA0B,QAAI,IAAE;AAAY,SAAG,SAAO,EAAE,2BAA2B,GAAE,CAAC,GAAE,KAAK,cAAc,KAAK,OAAO,GAAE,IAAE,0BAAyB,KAAK,cAAY,GAAE,KAAK,WAAS;AAAA;AAAA,wBAEtc,CAAC;AAAA,uBACF,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yDAMiC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,EAIrD;AAAC;AAAE,IAAI,KAAG,CAAC,EAAC,QAAOD,KAAE,SAAQ,GAAE,OAAMC,IAAC,MAAI;AAAC,MAAG,EAAC,GAAE,GAAE,MAAK,GAAE,UAAS,GAAE,QAAO,GAAE,OAAM,EAAC,IAAED;AAAE,IAAE,OAAO,EAAE,MAAM,WAAS,EAAE,MAAM,QAAO,MAAI,8EAA8E,GAAE,EAAE,OAAO,KAAG,QAAM,EAAE,MAAM,WAAS,EAAE,MAAM,QAAO,MAAI,4EAA4E,GAAE,EAAE,OAAO,KAAG,QAAM,EAAE,MAAM,WAAS,EAAE,MAAM,QAAO,MAAI,2EAA2E;AAAE,MAAG,EAAC,iBAAgB,EAAC,IAAEC;AAAE,OAAG,SAAO,IAAE;AAAM,MAAI,IAAE,CAAC,GAAE,GAAE,CAAC,GAAE,IAAE;AAAK,OAAG,SAAO,IAAE,EAAE,OAAM,EAAE,KAAK,CAAC;AAAG,MAAI,IAAE;AAAK,OAAG,SAAO,IAAE,EAAE,OAAM,EAAE,KAAK,CAAC;AAAG,MAAI,IAAE,EAAE,EAAE,QAAQ,0BAA0B,IAAE,IAAI,GAAG,EAAE,OAAM,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,CAAC,IAAE,IAAI,GAAG,EAAE,OAAM,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,CAAC;AAAE,SAAO,EAAE,gBAAgB,GAAE,GAAE,EAAE,CAAC,EAAE,KAAK;AAAC;AAArwB,IAAuwB,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,QAAQ,GAAE,KAAK,cAAY,GAAE,KAAK,OAAK,EAAE;AAAO,QAAIA,MAAE,GAAG,KAAK,IAAI;AAAE,SAAK,iBAAe,CAAC,EAAC,MAAK,SAAQ,YAAW,KAAK,MAAK,MAAK,MAAK,CAAC;AAAE,QAAI,IAAE,GAAG,KAAK,IAAI,GAAE,GAAE,IAAE,EAAE,IAAI,CAAC,GAAE,MAAI,aAAa,GAAG,CAAC,CAAC,YAAY,CAAC,cAAc,GAAG,CAAC,CAAC,GAAG;AAAE,QAAE;AAAA,UACjlCA,GAAC;AAAA,UACDA,GAAC;AAAA,UACD,EAAE,KAAK;AAAA,CAChB,CAAC;AAAA,SACM,KAAK,WAAS;AAAA;AAAA,UAEZ,CAAC;AAAA,8BACmB,CAAC;AAAA;AAAA;AAAA,EAE1B;AAAC;AAV8zB,IAU5zB,KAAG,CAAC,KAAI,KAAI,KAAI,KAAI,KAAI,GAAG;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAGA,QAAI,EAAE,QAAM;AAAY,MAAGA,OAAG,EAAE,QAAO,GAAG,MAAM,GAAEA,GAAC,EAAE,IAAI,OAAG,eAAa,CAAC,EAAE,KAAK,GAAG;AAAE,QAAM,MAAM,oBAAoBA,GAAC,uBAAuB;AAAC;AAAC,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,QAAQ,GAAE,KAAK,eAAa,MAAG,KAAK,eAAa,MAAG,KAAK,cAAY,GAAE,KAAK,OAAK,EAAE,QAAO,KAAK,iBAAe,CAAC,EAAC,MAAK,SAAQ,YAAW,KAAK,MAAK,MAAK,MAAK,CAAC;AAAE,QAAIC,MAAE,GAAG,KAAK,IAAI,GAAE,IAAE,GAAG,UAAS,KAAK,IAAI,GAAE,IAAE,GAAG,aAAY,KAAK,IAAI,GAAE,IAAE,KAAK,SAAO,IAAE,cAAY,QAAQ,EAAE,MAAM,EAAE,EAAE,KAAK,CAAC,KAAI,IAAE,wBAAwB,EAAE,KAAK,CAAC,MAAM,CAAC,KAAI,IAAE;AAAA,mBACrjB,CAAC;AAAA,cACN,EAAE,KAAK,OAAK,CAAC,CAAC,MAAM,EAAE,KAAK,OAAK,CAAC,CAAC;AAAA,YACpC,EAAE,KAAK,OAAK,CAAC,CAAC;AAAA,qBACL,CAAC;AAAA,YACV,EAAE,KAAK,OAAK,CAAC,CAAC;AAAA;AAAA,OAEpB,IAAE,KAAK,SAAO,IAAE,KAAG;AAAA,UACf,EAAE,KAAK,OAAK,CAAC,CAAC;AAAA,cACV,EAAE,KAAK,OAAK,CAAC,CAAC,MAAM,EAAE,KAAK,OAAK,CAAC,CAAC;AAAA,YACpC,EAAE,KAAK,OAAK,CAAC,CAAC;AAAA,qBACL,CAAC;AAAA,gBACN,EAAE,KAAK,OAAK,CAAC,CAAC,MAAM,EAAE,KAAK,OAAK,CAAC,CAAC;AAAA,cACpC,EAAE,KAAK,OAAK,CAAC,CAAC;AAAA,uBACL,CAAC;AAAA;AAAA;AAAA,OAGlB,IAAE,KAAK,QAAM,IAAE;AAAA,cACPA,GAAC,IAAI,EAAE,IAAI,CAAC,GAAE,MAAI,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,OAAK,EAAE,IAAI,CAAC,GAAE,MAAI,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK;AAAA,CAC/G;AAAE,SAAK,WAAS;AAAA;AAAA,UAEPA,GAAC;AAAA,UACDA,GAAC;AAAA,UACD,CAAC;AAAA;AAAA,UAED,CAAC;AAAA,UACD,CAAC;AAAA;AAAA;AAAA;AAAA,EAGN;AAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE;AAAC,MAAI,IAAE,EAAE,QAAQ,IAAID,IAAE,MAAM,GAAE,IAAE,EAAE,eAAeC,KAAED,IAAE,KAAK,GAAE,IAAE,EAAE,QAAQ,IAAI,EAAE,MAAM;AAAE,SAAO,OAAO,GAAE,CAAC,GAAE,EAAE,WAAS,GAAE,EAAE,QAAMC,KAAE,EAAE,QAAMD,IAAE;AAAM,MAAI,IAAE,GAAG,kBAAkB,GAAE,EAAE,eAAeA,IAAE,KAAK,CAAC;AAAE,IAAE,UAAQ,KAAG,EAAE,MAAM,aAAY,EAAE,QAAM,EAAC,YAAW,GAAE,YAAW,EAAE,SAAO,EAAE,MAAM,cAAYA,IAAE,OAAM;AAAE,MAAI,IAAE,EAAE,aAAa,IAAI,EAAE,MAAM,UAAU,KAAG;AAAE,SAAO,EAAE,aAAa,IAAI,EAAE,MAAM,YAAW,IAAE,CAAC,GAAE;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,OAAM,GAAE,MAAK,EAAC,IAAE,GAAE,CAAC,GAAE,CAAC,IAAE,GAAG,iBAAiB,GAAE,GAAE,CAAC;AAAE,MAAG,GAAG,kBAAkB,GAAE,GAAE,CAAC,GAAE,EAAE,cAAc,CAAC,MAAI,EAAE,QAAOC,IAAE,eAAe,GAAE,EAAE,OAAM,CAAC,CAAC;AAAE,MAAGA,IAAE,mBAAmB,CAAC,CAAC,CAAC,KAAG,EAAE,UAAQ,UAAS;AAAC,QAAI,IAAEA,IAAE,QAAQ,IAAI,EAAE,MAAM,GAAE,IAAE,GAAG,EAAE,QAAO,GAAE,GAAE,EAAE,OAAM,EAAE,KAAK;AAAE,WAAOA,IAAE,eAAe,GAAE,EAAE,OAAM,CAAC;AAAA,EAAC;AAAC,MAAG,EAAC,UAAS,EAAC,IAAEA,IAAE,QAAQ,IAAI,EAAE,MAAM,GAAE,IAAE,GAAG,iBAAiB,EAAE,OAAM,GAAE,CAAC;AAAE,MAAG,KAAG,CAAC,GAAE;AAAC,QAAI,IAAE,EAAE,EAAE,QAAQ,6BAA6B,IAAE,IAAI,GAAG,CAAC,IAAE,IAAI,GAAG,CAAC,GAAE,IAAE,CAAC,CAAC;AAAE,WAAOA,IAAE,gBAAgB,GAAE,CAAC,CAAC,GAAE,EAAE,OAAM,CAAC;AAAA,EAAC;AAAC,SAAOA,IAAE,YAAY,EAAE,MAAM,GAAE,GAAG,GAAE,GAAE,GAAEA,GAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG,CAAAD,QAAG;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,YAAW,GAAE,OAAM,EAAC,IAAE;AAAE,IAAE,OAAO,EAAE,MAAM,UAAQ,GAAE,MAAI,sEAAsE;AAAE,MAAI,IAAE,EAAE,OAAO,CAAC,GAAE,MAAI,IAAE,CAAC,GAAE,IAAE,EAAE,YAAY,EAAE,OAAM,GAAE,CAAC,GAAE,IAAE,EAAE,YAAY,EAAE,QAAO,EAAE,MAAM,GAAE,IAAE,EAAE,oBAAoB,EAAE,OAAM,GAAE,CAAC,GAAE,IAAE,EAAE,oBAAoB,GAAE,EAAE,MAAM,GAAE,IAAE,EAAE,aAAa,GAAE,GAAE,EAAE,MAAM,GAAE,IAAE,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,GAAE,MAAK,EAAC,EAAC,CAAC;AAAE,SAAO,EAAE,KAAK,CAAC,GAAE,EAAE,KAAK,CAAC,GAAE,EAAE,KAAK,CAAC,GAAE,EAAE,QAAQ,OAAGA,IAAE,8BAA8B,CAAC,CAAC,GAAE;AAAC;AAAtpB,IAAwpB,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,SAAQ,EAAC,IAAE,GAAE,EAAC,MAAK,EAAC,IAAE,GAAE,IAAEC,IAAE,SAAS,EAAE,MAAM,GAAE,IAAEA,IAAE,SAAS,EAAE,MAAM,GAAE,IAAE,GAAG,GAAE,GAAE,EAAE,OAAM,EAAE,OAAM,CAAC;AAAE,SAAOA,IAAE,eAAe,CAAC,CAAC,GAAE,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAP,IAMpgE,KAAG;AAAA;AAAA;AAEH,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,GAAE,GAAE,GAAE,EAAC,IAAE,GAAE,IAAE,EAAE,EAAE,QAAQ,8BAA8B,GAAE,IAAE,EAAE,EAAE,UAAU,eAAe;AAAE,MAAGC,IAAE,mBAAmB,CAAC,GAAE,CAAC,CAAC,KAAG,MAAI,GAAE;AAAC,QAAI,IAAEA,IAAE,QAAQ,IAAI,EAAE,MAAM,EAAE,QAAO,IAAEA,IAAE,QAAQ,IAAI,EAAE,MAAM,EAAE,QAAO,CAAC,GAAE,CAAC,IAAE,GAAG,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,EAAE,KAAK,GAAE,IAAEA,IAAE,eAAe,GAAE,EAAE,KAAK,GAAE,IAAEA,IAAE,QAAQ,IAAI,EAAE,MAAM;AAAE,WAAO,EAAE,SAAO,GAAE;AAAA,EAAC;AAAC,MAAI;AAAE,SAAO,IAAE,IAAE,IAAI,GAAG,IAAG,EAAE,OAAM,EAAE,OAAM,KAAE,IAAE,IAAE,IAAI,GAAG,IAAG,EAAE,OAAM,EAAE,KAAK,GAAEA,IAAE,gBAAgB,GAAE,CAAC,GAAE,CAAC,GAAE,EAAE,KAAK;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,IAAG,GAAE,IAAG,EAAC,IAAE,GAAE,IAAEC,IAAE,SAAS,EAAE,MAAM,GAAE,IAAEA,IAAE,SAAS,EAAE,MAAM,GAAE,IAAE,EAAE,2BAA2B,MAAM,KAAK,CAAC,GAAE,MAAM,KAAK,CAAC,CAAC;AAAE,SAAOA,IAAE,eAAe,CAAC,EAAE,MAAM,GAAE,SAAQ,WAAW,KAAK,CAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG;AAAP,IAA+B,KAAG,GAAG,EAAC,WAAU,IAAG,eAAc,IAAG,OAAM,OAAM,CAAC;AAAjF,IAAmF,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,OAAM,EAAC,IAAE,GAAE,IAAEC,IAAE,QAAQ,IAAI,EAAE,MAAM;AAAE,SAAO,GAAG,EAAC,QAAO,EAAC,GAAE,EAAE,mBAAmB,KAAI,GAAE,SAAQA,IAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG;AAAwB,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,IAAI,GAAGD,IAAE,OAAM,EAAE,GAAE,IAAE,EAAE,gBAAgBC,KAAE,CAACD,GAAC,GAAE,OAAO;AAAE,SAAM,EAAC,QAAO,EAAE,QAAO,OAAM,EAAE,OAAM,OAAM,EAAE,MAAK;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,OAAM,EAAC,IAAE;AAAE,MAAG,MAAI,aAAY;AAAC,QAAG,EAAE,UAAQ,YAAY,QAAO,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,IAAC,CAAC;AAAE,QAAI,IAAE,GAAG,EAAE,KAAK,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,UAAS,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,MAAK,GAAE,MAAK,EAAC,GAAE,SAAQA,IAAC,CAAC;AAAE,WAAO,EAAE,QAAQ,GAAEA,IAAE,8BAA8B,CAAC,GAAE;AAAA,EAAC;AAAC,MAAG,EAAE,UAAQ,aAAY;AAAC,QAAI,IAAE,GAAG,EAAC,QAAO,EAAC,OAAM,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,WAAOA,IAAE,8BAA8B,CAAC,GAAE;AAAA,EAAC;AAAC,MAAG,CAAC,EAAE,gBAAgB,EAAE,OAAM,CAAC,GAAE;AAAC,QAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,IAAC,CAAC;AAAE,WAAM,EAAC,QAAO,EAAE,QAAO,OAAM,EAAE,OAAM,OAAM,EAAC;AAAA,EAAC;AAAC,MAAGA,IAAE,mBAAmB,CAAC,CAAC,CAAC,GAAE;AAAC,QAAI,IAAEA,IAAE,QAAQ,IAAI,EAAE,MAAM,EAAE,QAAO,CAAC,GAAE,GAAE,CAAC,IAAE,GAAG,GAAE,EAAE,OAAM,EAAE,OAAM,CAAC;AAAE,WAAOA,IAAE,eAAe,GAAE,GAAE,CAAC;AAAA,EAAC;AAAC,MAAG,MAAI,QAAQ,QAAO,GAAG,GAAEA,GAAC;AAAE,MAAG,MAAI,QAAO;AAAC,QAAI,IAAEA,IAAE,eAAe,CAAC,GAAE,QAAO,EAAE,uBAAuB,QAAO,CAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,GAAE,GAAE,EAAC,GAAE,SAAQA,IAAC,CAAC;AAAE,WAAOA,IAAE,8BAA8B,CAAC,GAAE;AAAA,EAAC;AAAC,QAAM,IAAI,MAAM,iCAAiC,EAAE,KAAK,OAAO,CAAC,EAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG;AAAP,IAAyB,KAAG,GAAG,EAAC,WAAU,IAAG,iBAAgB,IAAG,eAAc,GAAE,CAAC;AAAjF,IAAmF,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,iBAAe,CAAC,EAAC,MAAK,UAAS,MAAK,QAAO,GAAE,EAAC,MAAK,UAAS,MAAK,QAAO,CAAC,GAAE,KAAK,cAAY,GAAE,KAAK,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAW1kF;AAAC;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,eAAa,MAAG,KAAK,eAAa,MAAG,KAAK,iBAAe,CAAC,EAAC,MAAK,UAAS,MAAK,QAAO,GAAE,EAAC,MAAK,UAAS,MAAK,QAAO,CAAC,GAAE,KAAK,cAAY,GAAE,KAAK,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWnN;AAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,cAAa,GAAE,cAAa,EAAC,IAAE,GAAE;AAAE,IAAE,EAAE,QAAQ,iBAAiB,IAAE,IAAE,IAAI,GAAG,EAAE,KAAK,IAAE,IAAE,IAAI,GAAG,EAAE,KAAK;AAAE,MAAI,IAAE,CAAC,CAAC,CAAC,GAAE,CAAC,CAAC,CAAC;AAAE,SAAOC,IAAE,gBAAgB,GAAE,CAAC,CAAC,GAAE,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,QAAO,MAAM,GAAE,KAAK,cAAY,GAAE,KAAK,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAatX;AAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,SAAM,EAAC,QAAO,EAAE,QAAO,OAAM,EAAE,OAAM,OAAMA,IAAE,MAAK;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,IAAEC,IAAE,QAAQ,IAAI,EAAE,MAAM,GAAE,IAAE,IAAI,GAAG,EAAE,KAAK,GAAE,IAAE,CAAC,GAAG,GAAE,EAAE,mBAAmB,IAAI,GAAE,GAAG,GAAE,EAAE,mBAAmB,IAAI,CAAC;AAAE,SAAOA,IAAE,gBAAgB,GAAE,GAAE,EAAE,CAAC,EAAE,KAAK;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,cAAY,CAAC,GAAE,KAAK,cAAY,EAAE,gBAAgB,GAAE,CAAC,GAAE,KAAK,gBAAc,EAAE,IAAI,CAAC,GAAE,MAAI,IAAI,CAAC,EAAE;AAAE,QAAIA,MAAE,IAAI,MAAM,EAAE,SAAO,CAAC;AAAE,IAAAA,IAAE,CAAC,IAAE,EAAE,CAAC,EAAE,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAEA,IAAE,QAAO,IAAI,CAAAA,IAAE,CAAC,IAAEA,IAAE,IAAE,CAAC,IAAE,EAAE,CAAC,EAAE,CAAC;AAAE,QAAI,IAAE,CAAC,YAAYA,IAAE,CAAC,CAAC,6BAA6B;AAAE,aAAQ,IAAE,GAAE,IAAEA,IAAE,QAAO,KAAI;AAAC,UAAI,IAAEA,IAAE,IAAE,CAAC;AAAE,QAAE,KAAK,iBAAiBA,IAAE,CAAC,CAAC,mBAAmB,CAAC,WAAW,CAAC,KAAK;AAAA,IAAC;AAAC,QAAI,IAAEA,IAAE,QAAO,IAAEA,IAAEA,IAAE,SAAO,CAAC;AAAE,MAAE,KAAK,sBAAsB,CAAC,WAAW,CAAC,KAAK,GAAE,KAAK,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAM/xB,EAAE,KAAK;AAAA,SACR,CAAC;AAAA;AAAA;AAAA,EAEL;AAAC;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE;AAAC,SAAK,eAAa,MAAG,KAAK,eAAa,MAAG,KAAK,cAAY,CAAC,GAAE,KAAK,cAAY,EAAE,gBAAgB,GAAEA,GAAC;AAAE,QAAI,IAAE,KAAK,aAAY,IAAE,EAAE,QAAO,IAAE,GAAG,CAAC,GAAE,IAAE,GAAG,UAAS,CAAC,GAAE,IAAE,CAAC,KAAI,KAAI,KAAI,KAAI,KAAI,GAAG,EAAE,MAAM,GAAE,CAAC;AAAE,SAAK,gBAAc,EAAE,IAAI,CAAC,GAAE,MAAI,IAAI,CAAC,EAAE;AAAE,QAAI,IAAE,IAAI,MAAM,EAAE,SAAO,CAAC;AAAE,MAAE,CAAC,IAAE,EAAE,CAAC,EAAEA,GAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,IAAI,GAAE,CAAC,IAAE,EAAE,IAAE,CAAC,IAAE,EAAE,CAAC,EAAEA,GAAC;AAAE,QAAI,IAAE,EAAEA,GAAC,GAAE,IAAE,EAAE,MAAM,EAAE,GAAE,IAAE,EAAE,KAAK,GAAE,IAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;AAAA;AAAA,oBAEnZ,CAAC,WAAW,EAAE,KAAK,CAAC;AAAA;AAC7B,aAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,KAAI;AAAC,UAAI,IAAE,EAAE,IAAE,CAAC;AAAE,WAAG;AAAA,cACzC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAE,CAAC,CAAC;AAAA;AAAA,kBAE7B,CAAC,IAAI,GAAG,GAAE,GAAE,CAAC,CAAC;AAAA,mBACb,GAAG,GAAE,GAAE,CAAC,CAAC;AAAA;AAAA,IAClB;AAAC,QAAI,IAAE,EAAE,QAAO,IAAE,EAAE,EAAE,SAAO,CAAC;AAAE,SAAG;AAAA;AAAA,gBAE7B,CAAC,IAAI,GAAG,GAAE,GAAE,CAAC,CAAC;AAAA,iBACb,GAAG,GAAE,GAAE,CAAC,CAAC,OAAM,KAAK,WAAS;AAAA,uBACvB,EAAE,IAAI,OAAG,SAAO,CAAC,CAAC;AAAA,UAC/B,CAAC;AAAA;AAAA;AAAA;AAAA,UAID,CAAC;AAAA,sCAC2B,CAAC;AAAA;AAAA,UAE7B,EAAE,IAAE,CAAC,CAAC,MAAM,EAAE,IAAE,CAAC,CAAC;AAAA,cACd,EAAE,IAAE,CAAC,CAAC,MAAM,EAAE,IAAE,CAAC,CAAC;AAAA,gCACA,CAAC;AAAA;AAAA;AAAA,UAGvB,EAAE,IAAE,CAAC,CAAC,MAAM,EAAE,IAAE,CAAC,CAAC;AAAA,cACd,EAAE,IAAE,CAAC,CAAC,MAAM,EAAE,IAAE,CAAC,CAAC;AAAA,gCACA,CAAC;AAAA;AAAA;AAAA,UAGvB,EAAE,IAAE,CAAC,CAAC,MAAM,EAAE,IAAE,CAAC,CAAC;AAAA,cACd,EAAE,IAAE,CAAC,CAAC,MAAM,EAAE,IAAE,CAAC,CAAC;AAAA,cAClB,EAAE,IAAE,CAAC,CAAC,MAAM,EAAE,IAAE,CAAC,CAAC;AAAA,gCACA,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,EAI5B;AAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAED,IAAE,QAAQ,CAAC;AAAE,SAAOA,IAAE,IAAI,CAAC,GAAE,MAAI,MAAI,IAAE,GAAG,CAAC,MAAMC,GAAC,KAAG,CAAC,EAAE,KAAK;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,OAAM,EAAC,IAAE,GAAE,IAAEC,IAAE,QAAQ,IAAI,EAAE,MAAM;AAAE,SAAO,GAAG,EAAC,QAAO,EAAC,GAAE,EAAE,mBAAmB,KAAI,GAAE,SAAQA,IAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAED,IAAE,CAAC,EAAE;AAAM,MAAG,MAAI,aAAY;AAAC,QAAI,IAAEA,IAAE,IAAI,OAAG,GAAG,EAAC,QAAO,EAAC,OAAM,EAAC,GAAE,SAAQC,IAAC,CAAC,CAAC,GAAE,IAAED,IAAE,IAAI,OAAG,GAAG,EAAC,QAAO,EAAC,OAAM,EAAC,GAAE,SAAQC,IAAC,CAAC,CAAC,GAAE,IAAE,GAAG,GAAE,GAAEA,GAAC,GAAE,IAAE,GAAG,GAAE,GAAEA,GAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,MAAK,GAAE,MAAK,EAAC,GAAE,SAAQA,IAAC,CAAC;AAAE,WAAO,EAAE,QAAQ,OAAGA,IAAE,8BAA8B,CAAC,CAAC,GAAE,EAAE,QAAQ,OAAGA,IAAE,8BAA8B,CAAC,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAE;AAAA,EAAC;AAAC,MAAI,IAAEA,IAAE,mBAAmBD,GAAC;AAAE,MAAG,MAAI,aAAW,IAAE,OAAI,GAAE;AAAC,QAAI,IAAEA,IAAE,IAAI,OAAG;AAAC,UAAI,IAAE,CAAC,IAAG,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC,CAAC,CAAC;AAAE,aAAO,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAA,IAAC,CAAC,GAAE,IAAE,EAAE,IAAI,QAAI,EAAC,MAAKA,IAAE,SAAS,EAAE,MAAM,GAAE,OAAM,EAAE,MAAK,EAAE,GAAE,IAAE,EAAE,gBAAgB,EAAE,IAAI,OAAG,EAAE,KAAK,GAAE,CAAC,GAAE,IAAE,EAAE,CAAC,EAAE,MAAM,CAAC,MAAI,GAAE,IAAE,GAAG,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,gBAAgBD,IAAE,IAAI,OAAG,EAAE,KAAK,GAAE,CAAC,GAAE,IAAEC,IAAE,eAAe,GAAE,GAAE,CAAC;AAAE,WAAO,EAAE,QAAQ,OAAGA,IAAE,8BAA8B,CAAC,CAAC,GAAE;AAAA,EAAC;AAAC,MAAI,IAAED,IAAE,OAAO,OAAG,EAAE,cAAc,EAAE,KAAK,IAAE,CAAC,GAAE,IAAE,EAAE,EAAE,QAAQ,6BAA6B,KAAG,EAAE,CAAC,EAAE,MAAM,SAAO;AAAE,MAAG,EAAE,WAAS,GAAE;AAAC,QAAI,IAAE,IAAE,IAAI,GAAGA,IAAE,CAAC,EAAE,OAAM,EAAE,IAAE,IAAI,GAAGA,IAAE,CAAC,EAAE,OAAM,EAAE;AAAE,WAAOC,IAAE,gBAAgB,GAAED,KAAE,CAAC;AAAA,EAAC;AAAC,MAAI,IAAE,EAAE,EAAE,UAAU,8BAA8B;AAAE,MAAG,EAAE,SAAO,GAAE;AAAC,QAAI,IAAE,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,KAAG,GAAE;AAAC,UAAI,IAAE,EAAE,MAAM,GAAE,IAAE,CAAC;AAAE,QAAE,KAAK,GAAG,GAAE,GAAEC,GAAC,CAAC;AAAA,IAAC;AAAC,QAAI,IAAE,GAAG,GAAE,GAAEA,GAAC;AAAE,aAAQ,KAAK,EAAE,CAAAA,IAAE,8BAA8B,CAAC;AAAE,WAAO;AAAA,EAAC;AAAC,MAAG,GAAE;AAAC,QAAI,IAAE,IAAI,GAAG,EAAE,IAAI,OAAG,EAAE,KAAK,GAAE,CAAC;AAAE,WAAOA,IAAE,gBAAgB,GAAE,GAAE,CAAC;AAAA,EAAC;AAAC,MAAG,EAAC,WAAU,GAAE,UAAS,EAAC,IAAE,GAAG,GAAE,GAAEA,GAAC,GAAE,IAAE,IAAI,GAAG,EAAE,IAAI,OAAG,EAAE,KAAK,CAAC,GAAE,IAAEA,IAAE,gBAAgB,GAAE,GAAE,CAAC;AAAE,IAAE,QAAQ,OAAGA,IAAE,8BAA8B,CAAC,CAAC;AAAE,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,OAAM,EAAC,OAAM,EAAC,GAAE,SAAQA,IAAC,CAAC;AAAE,SAAOA,IAAE,8BAA8B,CAAC,GAAE;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,EAAE,gBAAgBD,IAAE,IAAI,OAAG,EAAE,KAAK,GAAE,CAAC;AAAE,SAAM,EAAC,WAAUA,IAAE,IAAI,OAAG,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,OAAM,EAAC,OAAM,CAAC,IAAG,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC,CAAC,CAAC,EAAC,GAAE,SAAQC,IAAC,CAAC,CAAC,GAAE,UAAS,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,MAAK,EAAC,IAAE,GAAE,IAAE,EAAE,eAAe,GAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAE,IAAE,EAAE,IAAI,OAAG,EAAE,KAAK;AAAE,IAAE,uBAAuB,GAAE,CAAC;AAAE,MAAI,IAAE,EAAE,gBAAgB,EAAE,IAAI,OAAG,EAAE,KAAK,GAAE,CAAC;AAAE,MAAG,EAAE,cAAc,CAAC,MAAI,EAAE,QAAOC,IAAE,eAAe,GAAE,EAAE,CAAC,EAAE,OAAM,CAAC,CAAC;AAAE,MAAI,IAAE,EAAE,OAAO,OAAG,EAAE,cAAc,EAAE,KAAK,IAAE,CAAC;AAAE,SAAO,EAAE,WAAS,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAE,CAAC,EAAC,GAAE,SAAQA,IAAC,CAAC,IAAE,GAAG,GAAE,GAAEA,GAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,MAAE,OAAG,IAAE,MAAK,IAAE,OAAG,IAAE,OAAG;AAAC,SAAK,gBAAc,CAAC,KAAI,GAAG,GAAE,KAAK,cAAY,EAAE;AAAS,QAAI,IAAE,EAAE,QAAQ,KAAI,IAAE,EAAE,QAAQ,MAAK,IAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,EAAE,gBAAe,IAAE,EAAE,eAAc,IAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,KAAK,MAAM,EAAE,aAAW,CAAC,IAAE,GAAE,IAAE,EAAE,aAAW,GAAE,IAAE,EAAE,eAAa,gBAAe,IAAE,IAAE,IAAE,GAAE,IAAE,IAAE,IAAE,GAAE,IAAE,IAAE,IAAE,GAAE,IAAE,IAAG,IAAE;AAAG,UAAI,IAAE,IAAE;AAAA;AAAA,YAElwF,CAAC;AAAA,aACF,IAAE,IAAE;AAAA;AAAA,YAEH,CAAC;AAAA,aACF,IAAE;AAAA;AAAA,cAEC,CAAC;AAAA;AAAA,WAEL,IAAE;AAAgC,QAAI,IAAEA,MAAE,oCAAkC;AAAG,IAAAA,OAAG,KAAK,cAAc,KAAK,MAAM,GAAE,KAAG,KAAK,cAAc,KAAK,wBAAwB,GAAE,KAAG,KAAK,cAAc,KAAK,gBAAgB,GAAE,KAAK,WAAS;AAAA,QACpO,CAAC;AAAA;AAAA,oCAE2B,CAAC,KAAK,CAAC;AAAA,iCACV,CAAC,KAAK,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,0BAKd,CAAC;AAAA;AAAA;AAAA,2BAGA,CAAC,aAAa,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gCAOV,CAAC;AAAA,qCACI,CAAC;AAAA;AAAA,gCAEN,EAAE,QAAQ;AAAA;AAAA;AAAA;AAAA,kCAIR,CAAC;AAAA,uCACI,CAAC;AAAA;AAAA,kCAEN,EAAE,OAAO;AAAA;AAAA;AAAA;AAAA,oCAIP,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAQjB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAmBH,MAAI,CAAC;AAAA;AAAA,oBAEH,CAAC;AAAA;AAAA,0CAEqB,CAAC;AAAA,mCACR,CAAC;AAAA;AAAA;AAAA,kCAGF,CAAC;AAAA,mCACA,CAAC;AAAA;AAAA;AAAA,yBAGX,MAAI,CAAC;AAAA;AAAA,+BAEC,CAAC;AAAA,+BACD,CAAC;AAAA;AAAA;AAAA,oBAGZ,CAAC;AAAA;AAAA,wCAEmB,CAAC;AAAA,wCACD,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,gCAKT,CAAC;AAAA,gCACD,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,yBAKR,MAAI,CAAC;AAAA;AAAA,+BAEC,CAAC;AAAA,+BACD,CAAC;AAAA,+BACD,CAAC;AAAA;AAAA;AAAA,oBAGZ,CAAC;AAAA;AAAA,wCAEmB,CAAC;AAAA,wCACD,CAAC;AAAA,wCACD,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,gCAKT,CAAC;AAAA,gCACD,CAAC;AAAA,gCACD,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAUvB,CAAC;AAAA,UACD,CAAC;AAAA;AAAA;AAAA;AAAA,EAGN;AAAC;AAtIu5E,IAsIr5E,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,KAAI,GAAG,GAAE,KAAK,cAAY,EAAE;AAAS,QAAIA,MAAE,EAAE,QAAQ,OAAM,IAAE,EAAE,QAAQ,KAAI,IAAE,EAAE,QAAQ,MAAK,IAAE,EAAE,aAAY,IAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,EAAE,eAAc,IAAE,EAAE,gBAAe,IAAE,EAAE,eAAc,IAAE,EAAE,aAAY,IAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,KAAK,MAAM,EAAE,aAAW,CAAC,IAAE,GAAE,IAAE,EAAE,aAAW;AAAE,SAAK,WAAS;AAAA,oCACnU,CAAC,KAAK,CAAC,KAAK,CAAC;AAAA,iCAChBA,GAAC,KAAK,CAAC,KAAK,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gCAgBd,CAAC;AAAA,qCACI,CAAC;AAAA;AAAA,gCAEN,EAAE,OAAO;AAAA;AAAA;AAAA;AAAA,kCAIP,CAAC;AAAA,uCACI,CAAC;AAAA;AAAA,kCAEN,EAAE,QAAQ;AAAA;AAAA;AAAA;AAAA,oCAIR,CAAC;AAAA,yCACI,CAAC;AAAA;AAAA,oCAEN,EAAE,OAAO;AAAA;AAAA;AAAA;AAAA,sCAIP,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAiBnB,MAAI,CAAC;AAAA;AAAA,4CAEmB,CAAC;AAAA,qCACR,CAAC;AAAA,2BACX,MAAI,CAAC;AAAA;AAAA,4CAEY,CAAC;AAAA,4CACD,CAAC;AAAA;AAAA;AAAA,qCAGR,CAAC;AAAA,qCACD,CAAC;AAAA;AAAA;AAAA,2BAGX,MAAI,CAAC;AAAA;AAAA,4CAEY,CAAC;AAAA,4CACD,CAAC;AAAA,4CACD,CAAC;AAAA;AAAA;AAAA,qCAGR,CAAC;AAAA,qCACD,CAAC;AAAA,qCACD,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASjC;AAAC;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,MAAE,OAAG,IAAE,MAAK,IAAE,OAAG,IAAE,OAAG;AAAC,SAAK,gBAAc,CAAC,KAAI,GAAG,GAAE,KAAK,eAAa,MAAG,KAAK,eAAa,MAAG,KAAK,iBAAe,CAAC,EAAC,MAAK,QAAO,MAAK,QAAO,GAAE,EAAC,MAAK,WAAU,MAAK,QAAO,GAAE,EAAC,MAAK,aAAY,MAAK,QAAO,GAAE,EAAC,MAAK,UAAS,MAAK,QAAO,CAAC,GAAE,KAAK,cAAY,EAAE,UAAS,KAAK,sBAAoB,GAAG,KAAK,YAAY,MAAM;AAAE,QAAI,IAAE,EAAE,QAAQ,MAAK,IAAE,EAAE,aAAY,IAAE,EAAE,eAAc,IAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,GAAE,IAAE;AAAA;AAAA;AAE5Y,aAAQ,IAAE,GAAE,IAAE,GAAE,IAAI,MAAG;AAAA,yBAC9C,IAAE,CAAC;AAAA,wBACJ,IAAE,CAAC;AAAA,yBACF,IAAE,IAAE,CAAC;AAAA,wBACN,IAAE,IAAE,CAAC;AAAA,oBACT,CAAC;AAAI,SAAG;AAAA,2BACD,CAAC;AAAA,8BACE,EAAE,UAAU;AAAA;AACjC,aAAQ,IAAE,GAAE,IAAE,GAAE,IAAI,MAAG;AAAA,oBACZ,IAAE,CAAC;AAAA,oBACH,IAAE,CAAC;AAAA,oBACH,IAAE,IAAE,CAAC;AAAA,oBACL,IAAE,IAAE,CAAC;AAAA,eACV,CAAC;AAAgB,SAAG;AAAA;AAAA;AAAA;AAG1B,aAAQ,IAAE,GAAE,KAAG,IAAE,KAAG,GAAE,KAAI;AAAC,UAAI,IAAE,IAAE;AAAE,UAAG,KAAG;AAAA,6BACvB,IAAE,CAAC;AAAA,cACnB,MAAI,GAAE;AAAC,YAAG,IAAE,MAAI,IAAE,MAAI,KAAG,KAAG;AAAA;AAAA,uEAE8B,CAAC;AAAA,4BAC5C,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,8BAKC,CAAC;AAAA;AAAA,4BAEH,CAAC;AAAA;AAAA,kBAEZ,MAAI,KAAG,IAAE,IAAE,KAAG;AAAA,qBACV,CAAC,kBAAkB,IAAE,CAAC,eAAe,CAAC;AAAA,qBACxC,KAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yBAYG,CAAC,+BAA+B,CAAC;AAAA;AAAA,yBAEjC,CAAC,4BAA4B,CAAC;AAAA;AAAA,wBAEjC,KAAG;AAAA,2DACkC,CAAC;AAAA,4BAChC,CAAC;AAAA;AAAA,8BAEC,CAAC;AAAA;AAAA,4BAEH,CAAC;AAAA;AAAA;AAAA,qBAGR,CAAC,aAAa,CAAC;AAAA,oBACjB,IAAE,IAAE,IAAG;AAAC,cAAI,IAAE,IAAE,MAAI,IAAE,EAAE,kBAAkB,CAAC,IAAE;AAAE,cAAE,MAAI,KAAG,IAAE,MAAI,KAAG,IAAE,MAAI,KAAG,IAAE,MAAI,KAAG,KAAG;AAAA,wDACjD,CAAC;AAAA;AAAA,yEAEgB,IAAE,CAAC;AAAA,8BAC9C,IAAE,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,gCAKD,IAAE,CAAC;AAAA;AAAA,8BAEL,IAAE,CAAC;AAAA;AAAA,sBAEZ,IAAE,IAAE,KAAG;AAAA;AAAA;AAAA;AAAA,0BAIF,IAAE,CAAC,+BAA+B,IAAE,CAAC;AAAA;AAAA,0BAErC,IAAE,CAAC,4BAA4B,IAAE,CAAC;AAAA;AAAA,yBAErC,KAAG;AAAA,yBACD,IAAE,CAAC,kBAAkB,CAAC,eAAe,IAAE,CAAC;AAAA,0BACzC,MAAI,IAAE,KAAG;AAAA,yBACR,IAAE,CAAC,aAAa,CAAC;AAAA,yBACnB,KAAG;AAAA,uCACa,CAAC;AAAA;AAAA,2EAEmC,IAAE,CAAC;AAAA,gCAC9C,IAAE,CAAC;AAAA;AAAA,kCAED,IAAE,CAAC;AAAA;AAAA,gCAEL,IAAE,CAAC;AAAA;AAAA;AAAA,yBAGV,IAAE,CAAC,aAAa,IAAE,CAAC;AAAA;AAAA,QACtB;AAAA,MAAC,MAAM,KAAE,MAAI,IAAE,MAAI,KAAG,KAAG;AAAA;AAAA,sEAEuB,CAAC;AAAA,4BAC3C,CAAC;AAAA;AAAA;AAAA;AAAA,8BAIC,CAAC;AAAA;AAAA,4BAEH,CAAC;AAAA;AAAA;AAAA,kEAGqC,IAAE,CAAC;AAAA,4BACzC,IAAE,CAAC;AAAA;AAAA;AAAA;AAAA,8BAID,IAAE,CAAC;AAAA;AAAA,4BAEL,IAAE,CAAC;AAAA;AAAA;AAAA,qBAGV,CAAC,kBAAkB,CAAC,eAAe,IAAE,CAAC;AAAA,kBAC1C,IAAE,IAAE,MAAI,KAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAML,IAAE,CAAC,kBAAkB,IAAE,CAAC;AAAA,wBACzB,KAAG;AAAA,0DACiC,CAAC;AAAA,4BAC/B,CAAC;AAAA;AAAA,8BAEC,CAAC;AAAA;AAAA,4BAEH,CAAC;AAAA;AAAA;AAAA;AAAA,sEAIyC,IAAE,CAAC;AAAA,4BAC7C,IAAE,CAAC;AAAA;AAAA,8BAED,IAAE,CAAC;AAAA;AAAA,4BAEL,IAAE,CAAC;AAAA;AAAA;AAAA,qBAGV,CAAC;AAAA,4BACM,CAAC,eAAe,IAAE,CAAC;AAAA,kBAC9B,IAAE,IAAE,MAAI,KAAG;AAAA,uBACL,IAAE,CAAC,kBAAkB,CAAC,eAAe,IAAE,CAAC;AAAA;AACzC,UAAE,MAAI,KAAG;AAAA,gCACC,CAAC;AAAA,4BACL,CAAC;AAAA,2BACF,EAAE,UAAU;AAAA,8BACT,CAAC;AAAA;AAAA,cAElB,IAAE,IAAE,MAAI,KAAG;AAAA,kCACU,IAAE,CAAC;AAAA,8BACP,IAAE,CAAC;AAAA,6BACJ,EAAE,UAAU;AAAA,gCACT,IAAE,CAAC;AAAA;AAAA;AAAA,IAEnB;AAAC,SAAG;AAAA;AAAA,MAEf,KAAG;AAAA;AAAA,MAEH,KAAG;AAAA;AAAA;AAEH,QAAI,IAAE,IAAG,IAAE;AAAG,UAAI,IAAE,IAAE;AAAA;AAAA,aAEd,CAAC;AAAA,cACF,IAAE,IAAE;AAAA;AAAA,aAEH,CAAC;AAAA,cACF,IAAE;AAAA,aACD,CAAC;AAAA,aACF,IAAE;AAAgC,QAAI,IAAEA,MAAE,oCAAkC;AAAG,IAAAA,OAAG,KAAK,cAAc,KAAK,MAAM,GAAE,KAAG,KAAK,cAAc,KAAK,wBAAwB,GAAE,KAAG,KAAK,cAAc,KAAK,gBAAgB,GAAE,KAAK,WAAS;AAAA,SACrO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAaC,CAAC;AAAA;AAAA;AAAA,WAGD,CAAC;AAAA,WACD,CAAC;AAAA;AAAA;AAAA;AAAA,EAGN;AAAC;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,eAAa,MAAG,KAAK,eAAa,MAAG,KAAK,iBAAe,CAAC,EAAC,MAAK,cAAa,MAAK,QAAO,GAAE,EAAC,MAAK,OAAM,MAAK,QAAO,GAAE,EAAC,MAAK,UAAS,MAAK,QAAO,GAAE,EAAC,MAAK,YAAW,MAAK,QAAO,GAAE,EAAC,MAAK,cAAa,MAAK,MAAK,GAAE,EAAC,MAAK,oBAAmB,MAAK,MAAK,GAAE,EAAC,MAAK,YAAW,MAAK,MAAK,CAAC,GAAE,KAAK,cAAY,GAAE,KAAK,sBAAoB,GAAG,KAAK,YAAY,MAAM;AAAE,QAAG,EAAC,YAAW,EAAC,IAAEA,KAAE,IAAE,GAAG,GAAE,IAAE,MAAI,gBAAe,IAAE,IAAE,IAAE,GAAE,IAAE,IAAE,IAAE,GAAE,IAAE,KAAK,sBAAoB,wDAAsD,mBAAmB,EAAE,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,OAAM,IAAE;AAAG,aAAQ,IAAE,GAAE,KAAG,GAAE,IAAI,UAAQ,IAAE,GAAE,KAAG,GAAE,IAAI,MAAG;AAAA,gCACjnB,CAAC;AAAA,yBACR,CAAC;AAAA;AAAA,YAEd,CAAC;AAAA;AAAA;AAAA;AAAA,iCAIoB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mCAQC,CAAC;AAAA;AAAA;AAAA;AAAA,sBAId,CAAC;AAAA;AAAA,2BAEI,IAAE,IAAE,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,2BAKL,IAAE,IAAE,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOtB,SAAK,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UASd,CAAC;AAAA;AAAA,UAED,EAAE,MAAM;AAAA;AAAA;AAAA,EAEb;AAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAED,IAAE;AAAO,SAAOC,OAAG,IAAE,IAAE,CAAC,GAAGD,IAAE,MAAM,GAAE,EAAE,GAAEA,IAAEC,MAAE,CAAC,IAAED,IAAEC,MAAE,CAAC,GAAED,IAAEC,MAAE,CAAC,CAAC,IAAE,CAAC,GAAGD,IAAE,MAAM,GAAE,EAAE,GAAEA,IAAEC,MAAE,CAAC,GAAED,IAAEC,MAAE,CAAC,IAAED,IAAEC,MAAE,CAAC,CAAC,IAAE,CAAC,KAAGA,QAAI,KAAGD,IAAE,CAAC,IAAE,IAAE,CAACA,IAAE,CAAC,GAAE,CAAC,IAAE;AAAI;AAAC,SAAS,GAAG,EAAC,GAAEA,KAAE,QAAO,GAAE,UAASC,KAAE,SAAQ,GAAE,MAAK,IAAE,MAAK,wBAAuB,IAAE,MAAK,gBAAe,IAAE,GAAE,YAAW,IAAE,KAAI,GAAE;AAAC,MAAI,IAAED,IAAE,OAAM,IAAE,EAAE,QAAQ,IAAIA,IAAE,MAAM,GAAE,IAAEC,IAAE,YAAW,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,GAAE,IAAEA,IAAE,aAAY,IAAEA,IAAE,eAAa,gBAAe,IAAE,OAAG,IAAE,OAAG,GAAE,IAAE,CAAC;AAAE,MAAG,KAAG,MAAK;AAAC,QAAI,IAAE,GAAG,EAAE,OAAM,CAAC;AAAE,SAAG,SAAO,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,EAAE,KAAK,CAAC;AAAA,EAAE;AAAC,MAAG,KAAG,MAAK;AAAC,QAAI,IAAE,GAAG,EAAE,OAAM,CAAC;AAAE,SAAG,SAAO,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,EAAE,KAAK,CAAC;AAAA,EAAE;AAAC,MAAG,GAAG,MAAI,KAAG,MAAI,MAAI,IAAE,OAAK,EAAE,YAAU,KAAG,EAAE,WAAS,QAAM,EAAE,CAAC,IAAE,MAAI,KAAG,EAAE,YAAY,EAAE,MAAM,MAAM,EAAE,GAAE,EAAE,MAAM,EAAE,CAAC,GAAE;AAAC,QAAI,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,KAAG,EAAE,CAAC,IAAE,IAAG,IAAE,EAAC,QAAOD,IAAE,QAAO,OAAM,CAAC,GAAE,GAAEC,IAAE,UAAU,GAAE,OAAMD,IAAE,MAAK,GAAE,IAAE,EAAE;AAAM,MAAE,QAAM,EAAE,MAAM,MAAM,GAAE,EAAE,MAAM,EAAE,MAAM,SAAO,CAAC,KAAI,EAAE,OAAO,GAAG,EAAE,OAAM,EAAE,KAAK,GAAE,MAAI,kBAAkB,EAAE,KAAK,OAAO,EAAE,KAAK,aAAa;AAAE,QAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,CAAC,GAAEC,IAAE,YAAWA,IAAE,WAAW,EAAC,EAAC,CAAC;AAAE,MAAE,KAAK,CAAC;AAAE,QAAI,IAAE,GAAG,EAAC,GAAE,GAAE,GAAE,GAAE,SAAQ,GAAE,YAAW,GAAE,YAAW,GAAE,MAAK,GAAE,YAAW,GAAE,wBAAuB,GAAE,gBAAe,EAAC,CAAC,GAAE,IAAE,EAAE,QAAQ,IAAI,EAAE,MAAM;AAAE,MAAE,OAAO,EAAE,UAAS,MAAI,6CAA6C,GAAE,EAAE,QAAM,GAAE,EAAE,QAAMA,IAAE,UAAS,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,EAAC,CAAC,GAAE,EAAE,QAAMA,IAAE,UAAS,EAAE,KAAK,CAAC;AAAA,EAAC,OAAK;AAAC,QAAI,IAAEA,IAAE,YAAUA,IAAE,UAAS,IAAE,GAAG,EAAC,QAAO,EAAC,GAAED,IAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,IAAE,CAACC,IAAE,WAAU,GAAEA,IAAE,UAAU,IAAE,CAACA,IAAE,WAAUA,IAAE,YAAW,CAAC,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,CAAC,GAAEA,IAAE,YAAWA,IAAE,WAAW,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,GAAE,IAAE,IAAE,GAAE,GAAE,IAAE,IAAE,GAAE,YAAW,CAAC,GAAE,YAAW,GAAE,SAAQ,GAAE,MAAK,GAAE,YAAW,GAAE,wBAAuB,GAAE,gBAAe,EAAC,CAAC;AAAE,QAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAMA,IAAE,SAAQ,EAAC,CAAC,GAAE,EAAE,KAAK,CAAC,GAAE,EAAE,KAAK,CAAC,GAAE,EAAE,KAAK,CAAC;AAAA,EAAC;AAAC,WAAQ,KAAK,EAAE,GAAE,8BAA8B,CAAC;AAAE,SAAO;AAAC;AAAC,SAAS,GAAG,EAAC,GAAED,KAAE,QAAO,GAAE,UAASC,KAAE,SAAQ,GAAE,MAAK,IAAE,MAAK,wBAAuB,IAAE,MAAK,gBAAe,IAAE,GAAE,YAAW,IAAE,KAAI,GAAE;AAAC,MAAG,EAAC,aAAY,GAAE,cAAa,GAAE,YAAW,GAAE,UAAS,GAAE,WAAU,GAAE,YAAW,EAAC,IAAEA,KAAE,IAAE,MAAI,gBAAe,IAAE,IAAE,IAAE,GAAE,IAAE,IAAE,GAAE,IAAE,CAACA,IAAE,WAAU,GAAE,CAAC,GAAE,IAAE,MAAG,IAAE,OAAG,IAAE,CAAC;AAAE,MAAG,KAAG,MAAK;AAAC,QAAI,IAAE,GAAG,EAAE,OAAM,CAAC;AAAE,SAAG,SAAO,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,EAAE,KAAK,CAAC;AAAA,EAAE;AAAC,MAAG,KAAG,MAAK;AAAC,QAAI,IAAE,GAAG,EAAE,OAAM,CAAC;AAAE,SAAG,SAAO,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,EAAE,KAAK,CAAC;AAAA,EAAE;AAAC,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,CAAC,GAAE,GAAE,EAAE,cAAc,EAAE,KAAK,IAAE,CAAC,EAAC,EAAC,CAAC;AAAE,IAAE,KAAK,CAAC;AAAE,MAAI,IAAE,IAAI,GAAG,GAAEA,GAAC,GAAE,IAAE,CAACD,IAAE,OAAM,CAACC,IAAE,QAAQ,KAAIA,IAAE,QAAQ,IAAI,GAAE,CAACA,IAAE,cAAaA,IAAE,WAAW,GAAE,CAACA,IAAE,gBAAeA,IAAE,aAAa,GAAE,CAACA,IAAE,UAAU,GAAE,CAACA,IAAE,cAAYA,IAAE,UAAU,GAAE,CAACA,IAAE,QAAQ,CAAC,GAAE,IAAE,EAAE,gBAAgB,GAAE,CAACD,GAAC,GAAE,WAAU,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,IAAE,KAAK,CAAC,GAAE,EAAE,KAAK,CAAC;AAAE,MAAI,IAAE,KAAG,MAAK,IAAE,KAAG,MAAK,IAAE,MAAI,aAAY,IAAE,IAAE,GAAG,GAAE,IAAE,IAAE,MAAK,IAAE,IAAI,GAAG,IAAE,EAAE,QAAM,EAAE,OAAM,IAAE,EAAE,QAAM,EAAE,OAAM,IAAE,CAACC,IAAE,WAAU,GAAEA,IAAE,WAAW,IAAE,CAACA,IAAE,WAAUA,IAAE,aAAY,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,IAAE,CAAC,GAAE,CAAC,IAAE,CAAC,GAAE,CAAC;AAAE,MAAG,KAAG,EAAE,KAAK,CAAC,GAAE,KAAG,EAAE,KAAK,CAAC,GAAE,GAAE;AAAC,QAAI,IAAE,EAAE,eAAe,CAAC,GAAE,WAAU,EAAE,kBAAkB,GAAE,SAAS,CAAC;AAAE,MAAE,KAAK,CAAC,GAAE,EAAE,KAAK,CAAC;AAAA,EAAC;AAAC,MAAI,IAAE,EAAE,gBAAgB,GAAE,GAAE,SAAS,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAMA,IAAE,SAAQ,EAAC,CAAC;AAAE,IAAE,KAAK,CAAC;AAAE,WAAQ,KAAK,EAAE,GAAE,8BAA8B,CAAC;AAAE,SAAO;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,QAAO,EAAC,IAAE,GAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,YAAW,GAAE,WAAU,GAAE,iBAAgB,EAAC,IAAE,GAAE,IAAE,EAAE,wBAAwB,CAAC,GAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,OAAG,CAAC,GAAE;AAAE,MAAG,EAAE,iBAAe,KAAG,EAAE,gBAAc,KAAG,EAAE,mBAAiB,KAAG,EAAE,kBAAgB,KAAG,EAAE,iBAAe,KAAG,EAAE,gBAAc,MAAI,EAAE,QAAQ,SAAO,UAAQ,EAAE,QAAQ,SAAO,SAAS,KAAE,GAAG,EAAC,GAAE,GAAE,QAAO,GAAE,UAAS,GAAE,SAAQC,IAAC,CAAC;AAAA,WAAU,EAAE,eAAa,KAAG,MAAI,kBAAgB,EAAE,EAAE,QAAQ,gBAAgB,GAAE;AAAC,QAAI,IAAE,IAAI,GAAG,CAAC,GAAE,IAAE,CAAC,CAAC,EAAE,QAAQ,KAAI,EAAE,QAAQ,IAAI,GAAE,CAAC,EAAE,cAAa,EAAE,WAAW,GAAE,CAAC,EAAE,gBAAe,EAAE,aAAa,GAAE,CAAC,EAAE,UAAS,EAAE,OAAO,CAAC;AAAE,QAAEA,IAAE,gBAAgB,GAAE,CAAC,GAAE,CAAC,GAAE,WAAU,CAAC;AAAA,EAAC,WAAS,EAAE,EAAE,QAAQ,mBAAmB,EAAE,KAAE,GAAG,EAAC,GAAE,GAAE,QAAO,GAAE,UAAS,GAAE,SAAQA,IAAC,CAAC;AAAA,OAAM;AAAC,QAAI,IAAE,IAAI,GAAG,CAAC;AAAE,QAAEA,IAAE,gBAAgB,GAAE,CAAC,GAAE,CAAC,GAAE,SAAS;AAAA,EAAC;AAAC,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAE,SAAQ,EAAC,CAAC;AAAE,SAAOA,IAAE,8BAA8B,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,KAAI,IAAI,GAAE,KAAK,cAAY,EAAE;AAAY,QAAIA,MAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,EAAE,QAAQ,KAAI,IAAE,EAAE,QAAQ,MAAK,IAAE,EAAE,eAAa;AAAe,SAAK,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8BAYvxI,EAAE,SAAS;AAAA,kCACP,EAAE,SAAS;AAAA,iCACZA,GAAC,MAAM,CAAC;AAAA;AAAA,kCAEP,EAAE,QAAQ;AAAA;AAAA;AAAA;AAAA,oCAIR,EAAE,QAAQ;AAAA,mCACX,CAAC,MAAM,CAAC;AAAA;AAAA,oCAEP,EAAE,OAAO;AAAA;AAAA;AAAA;AAAA,gBAI7B,IAAE;AAAA;AAAA,gDAE4B;AAAA;AAAA,6CAED;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMxC;AAAC;AArCkmI,IAqChmI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,MAAK,GAAG,GAAE,KAAK,cAAY,EAAE;AAAQ,QAAIA,MAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,EAAE,eAAa,gBAAe,IAAEA,MAAE,IAAE,EAAE,QAAQ,KAAI,IAAE,IAAE,IAAE,EAAE,QAAQ,MAAK,IAAE,IAAE,IAAE,GAAE,IAAE,IAAE,IAAE,GAAE,IAAE,IAAE,IAAE;AAAE,SAAK,WAAS;AAAA,iCAC7O,CAAC,KAAK,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,0BAKd,CAAC;AAAA;AAAA,wCAEa,CAAC,aAAa,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gCAOvBA,GAAC;AAAA,gDACe,CAAC;AAAA;AAAA,oCAEb,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA,yBAKtBA,GAAC;AAAA;AAAA,kCAEQ,CAAC;AAAA,kDACe,CAAC;AAAA;AAAA,sCAEb,EAAE,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2BAMrB,CAAC;AAAA;AAAA,oCAEQ,EAAE,WAAW;AAAA;AAAA,oBAE7B,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAehB;AAAC;AA1FkmI,IA0FhmI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,KAAI,IAAI,GAAE,KAAK,cAAY,EAAE;AAAY,QAAIA,MAAE,EAAE,aAAY,IAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,EAAE,QAAQ,OAAM,IAAE,EAAE,QAAQ,KAAI,IAAE,EAAE,QAAQ;AAAK,SAAK,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8BAWrL,EAAE,SAAS;AAAA,kCACP,EAAE,QAAQ;AAAA,iCACXA,GAAC,MAAM,CAAC;AAAA;AAAA,kCAEP,EAAE,OAAO;AAAA;AAAA;AAAA;AAAA,oCAIP,EAAE,SAAS;AAAA,mCACZ,CAAC,MAAM,CAAC;AAAA;AAAA,oCAEP,EAAE,QAAQ;AAAA;AAAA;AAAA;AAAA,sCAIR,EAAE,QAAQ;AAAA,qCACX,CAAC,MAAM,CAAC;AAAA;AAAA,sCAEP,EAAE,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAa1C;AAAC;AApIkmI,IAoIhmI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,MAAK,GAAG,GAAE,KAAK,cAAY,EAAE;AAAQ,QAAIA,MAAE,EAAE,aAAY,IAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,EAAE,aAAY,IAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAEA,MAAE,IAAE,EAAE,QAAQ,OAAM,IAAE,IAAE,IAAE,EAAE,QAAQ,KAAI,IAAE,IAAE,IAAE,EAAE,QAAQ;AAAK,SAAK,WAAS;AAAA,iCAC3O,CAAC,KAAK,CAAC,KAAK,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gCAcdA,GAAC;AAAA,gDACe,CAAC;AAAA;AAAA,oCAEb,EAAE,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA,yBAKrBA,GAAC;AAAA;AAAA,kCAEQ,CAAC;AAAA,kDACe,CAAC;AAAA;AAAA,sCAEb,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2BAMtB,CAAC;AAAA;AAAA,oCAEQ,CAAC;AAAA,oDACe,CAAC;AAAA;AAAA,wCAEb,EAAE,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,6BAMrB,CAAC;AAAA;AAAA,sCAEQ,EAAE,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAU9C;AAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,IAAG,EAAC,IAAE,GAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,YAAW,GAAE,iBAAgB,GAAE,aAAY,EAAC,IAAE,GAAE,IAAE,EAAE,wBAAwB,CAAC,GAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,GAAE,OAAG,CAAC,GAAE,IAAE,IAAI,GAAG,CAAC;AAAE,SAAOC,IAAE,gBAAgB,GAAE,CAAC,GAAE,CAAC,GAAE,SAAS;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,MAAK,GAAG,GAAE,KAAK,eAAa,MAAG,KAAK,eAAa,MAAG,KAAK,iBAAe,CAAC,EAAC,MAAK,WAAU,MAAK,OAAM,CAAC,GAAE,KAAK,cAAY,EAAE,SAAQ,KAAK,sBAAoB,GAAG,KAAK,YAAY,MAAM;AAAE,QAAIA,MAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAEA,MAAE,IAAE,EAAE,QAAQ,KAAI,IAAE,IAAE,IAAE,EAAE,QAAQ;AAAK,SAAK,WAAS;AAAA,iCACvmB,CAAC,KAAK,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gCAYRA,GAAC;AAAA;AAAA,oCAEG,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA,yBAItBA,GAAC;AAAA;AAAA,kCAEQ,CAAC;AAAA,2BACR,CAAC;AAAA;AAAA;AAAA,oDAGwB,EAAE,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA,uDAKP,EAAE,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA,sCAK3B,EAAE,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sCAiBb,EAAE,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sCASb,EAAE,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAa9C;AAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,IAAG,GAAE,QAAO,EAAC,IAAE,GAAE,EAAC,YAAW,GAAE,SAAQ,GAAE,KAAI,GAAE,YAAW,GAAE,iBAAgB,EAAC,IAAE,GAAE,IAAE,EAAE,wBAAwB,CAAC,GAAE,IAAE,EAAE,kBAAkB,GAAE,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,OAAG,CAAC;AAAE,MAAG,EAAE,EAAE,QAAQ,4BAA4B,KAAG,MAAI,gBAAe;AAAC,QAAI,IAAE,CAAC,CAAC,EAAE,cAAa,EAAE,WAAW,CAAC,GAAE,IAAE,IAAI,GAAG,CAAC;AAAE,WAAOC,IAAE,gBAAgB,GAAE,CAAC,GAAE,CAAC,GAAE,WAAU,CAAC;AAAA,EAAC,OAAK;AAAC,QAAI,IAAE,IAAI,GAAG,CAAC;AAAE,WAAOA,IAAE,gBAAgB,GAAE,CAAC,GAAE,CAAC,GAAE,SAAS;AAAA,EAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,QAAO,EAAC,IAAE,GAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,WAAU,EAAC,IAAE,GAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,CAAC,GAAE,IAAE,IAAI,GAAG,CAAC;AAAE,SAAOC,IAAE,gBAAgB,GAAE,CAAC,GAAE,CAAC,GAAE,SAAS;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,IAAG,EAAC,IAAE,GAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,aAAY,EAAC,IAAE,GAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,IAAI,GAAG,CAAC;AAAE,SAAOC,IAAE,gBAAgB,GAAE,CAAC,GAAE,CAAC,GAAE,SAAS;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,IAAG,GAAE,QAAO,EAAC,IAAE,GAAE,EAAC,KAAI,GAAE,SAAQ,GAAE,YAAW,EAAC,IAAE,GAAE,IAAE,EAAE,kBAAkB,GAAE,EAAE,OAAM,GAAE,GAAE,CAAC,GAAE,IAAE,IAAI,GAAG,CAAC;AAAE,SAAOC,IAAE,gBAAgB,GAAE,CAAC,GAAE,CAAC,GAAE,SAAS;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG,KAAG;AAAA;AAAA;AAAV,IAExuC,KAAG;AAAA;AAAA;AAAA,IAGD,EAAE;AAAA;AAAA;AALouC,IAOxuC,KAAG,GAAG,EAAC,WAAU,IAAG,iBAAgB,GAAE,CAAC;AAPisC,IAO/rC,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG;AAAA;AAAA;AAAA;AAAP,IAG9F,KAAG,GAAG,EAAC,WAAU,GAAE,CAAC;AAH0E,IAGxE,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE,GAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,SAAQ,SAAQ,QAAQ,GAAE,KAAK,cAAY,CAAC;AAAE,QAAG,CAAC,GAAE,GAAE,GAAE,CAAC,IAAE,GAAE,CAAC,CAAC,IAAEA,KAAE,CAAC,GAAE,CAAC,IAAE;AAAE,SAAK,cAAY,CAAC,GAAE,GAAE,GAAE,CAAC;AAAE,QAAI,IAAE,MAAI,aAAW,IAAE,GAAE,CAAC,GAAE,CAAC,IAAE,CAAC,GAAG,IAAE,CAAC,MAAK,GAAG,IAAE,CAAC,IAAI,GAAE,CAAC,GAAE,GAAE,CAAC,IAAE,IAAE,IAAE,CAAC,IAAI,IAAE,MAAI,IAAE,EAAE,IAAG,0BAAyB,MAAM,CAAC,4BAA4B,IAAE,CAAC,OAAM,OAAM,mBAAmB,CAAC,EAAE,GAAE,CAAC,GAAE,GAAE,CAAC,IAAE,IAAE,IAAE,CAAC,IAAI,IAAE,MAAI,IAAE,EAAE,IAAG,yBAAwB,MAAM,CAAC,2BAA2B,IAAE,CAAC,OAAM,OAAM,mBAAmB,CAAC,EAAE;AAAE,SAAK,WAAS;AAAA,yCACvgB,CAAC;AAAA,wCACF,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iCAgBR,CAAC;AAAA;AAAA;AAAA;AAAA,+BAIH,CAAC;AAAA,8BACF,CAAC;AAAA;AAAA,uBAER,CAAC;AAAA,mCACW,CAAC;AAAA,4BACR,CAAC;AAAA;AAAA;AAAA,uBAGN,CAAC;AAAA,mCACW,CAAC;AAAA,4BACR,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,aAKhB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwBT;AAAC;AAAE,IAAI,KAAG,CAAAD,QAAG;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,GAAE,OAAM,GAAE,QAAO,EAAC,IAAE,GAAE,EAAC,UAAS,GAAE,QAAO,GAAE,oBAAmB,EAAC,IAAE,GAAE,IAAE,IAAI,GAAG,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,CAAC;AAAE,SAAOC,IAAE,gBAAgB,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,SAAS;AAAC;AAApM,IAAsM,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI;AAAA,CAAI,SAASD,KAAE;AAAC,EAAAA,IAAE,OAAK,KAAIA,IAAE,MAAI;AAAG,GAAG,OAAK,KAAG,CAAC,EAAE;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEC,KAAE,GAAE,GAAE;AAAC,SAAK,KAAG,GAAE,KAAK,cAAYA,KAAE,KAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,iBAAe,CAAC,EAAC,MAAK,SAAQ,MAAK,QAAO,CAAC;AAAE,QAAI,IAAE,KAAK,YAAY,QAAO,IAAE,KAAK,OAAK,GAAG,OAAK,QAAM,OAAM,IAAE,IAAE,IAAE,QAAQ,GAAG,GAAE,UAAS,KAAK,EAAE,CAAC,KAAI,IAAE,KAAK,YAAY,KAAK,YAAY,SAAO,CAAC,GAAE,IAAE,IAAG,IAAE;AAAG,SAAG,IAAE,IAAE,UAAU,IAAE,CAAC,KAAG,YAAW,IAAE,IAAE,YAAU,cAAY,IAAE,IAAE,gBAAgB,CAAC,KAAG,eAAc,IAAE,IAAE,eAAa,eAAc,KAAK,WAAS;AAAA;AAAA,UAExuB,GAAG,CAAC,CAAC;AAAA,oBACK,GAAG,GAAE,UAAS,KAAK,EAAE,CAAC;AAAA,sBACpB,CAAC;AAAA;AAAA,cAET,CAAC;AAAA,sBACO,CAAC;AAAA,YACX,GAAG,GAAE,UAAS,KAAK,EAAE,CAAC;AAAA,gBAClB,KAAK,EAAE,UAAU,GAAG,GAAE,UAAS,KAAK,EAAE,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,EAIlD;AAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAGD,QAAI,EAAE,QAAM,GAAG,CAAC;AAAG,MAAGA,QAAI,EAAE,QAAM,GAAG,CAAC,OAAO,CAAC;AAAK,MAAGA,QAAI,EAAE,QAAM,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC;AAAK,MAAGA,QAAI,EAAE,QAAM,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;AAAK,QAAM,IAAI,MAAM,cAAcC,GAAC,aAAaD,GAAC,uBAAuB;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAGD,QAAI,EAAE,QAAM,GAAG,CAAC;AAAG,MAAGA,QAAI,EAAE,QAAM,GAAG,CAAC;AAAK,MAAGA,QAAI,EAAE,QAAM,GAAG,CAAC;AAAK,MAAGA,QAAI,EAAE,QAAM,GAAG,CAAC;AAAK,QAAM,IAAI,MAAM,cAAcC,GAAC,aAAaD,GAAC,uBAAuB;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE;AAAC,MAAI,IAAE,EAAE,MAAM,QAAO,IAAE,EAAE,mBAAmB,CAAC,CAAC,GAAE,CAAC,GAAE,IAAE;AAAE,OAAG,SAAO,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC;AAAG,MAAI,IAAE,EAAE,iBAAiB,GAAE,CAAC,EAAE,CAAC;AAAE,MAAG,MAAI,IAAE,EAAE,OAAM,IAAI,MAAM,mDAAmD,EAAE,MAAM,SAAO,CAAC,iBAAiB,CAAC,EAAE;AAAE,MAAI,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,IAAC,CAAC;AAAE,WAAQ,IAAE,GAAE,KAAG,KAAK,KAAK,KAAK,KAAK,CAAC,CAAC,IAAE,GAAE,KAAI;AAAC,QAAI,IAAE,IAAI,GAAGD,KAAE,EAAE,OAAM,OAAG,CAAC,GAAE,IAAE,CAAC,CAAC,CAAC,CAAC,GAAE,IAAE;AAAE,QAAEC,IAAE,gBAAgB,GAAE,CAAC,CAAC,GAAE,EAAE,OAAM,CAAC,GAAEA,IAAE,8BAA8B,CAAC;AAAA,EAAC;AAAC,MAAG,GAAE;AAAC,QAAI,IAAE,IAAI,GAAGD,KAAE,EAAE,OAAM,GAAE,CAAC,GAAE,IAAE;AAAE,QAAEC,IAAE,gBAAgB,GAAE,CAAC,CAAC,GAAE,EAAE,KAAK,GAAEA,IAAE,8BAA8B,CAAC;AAAA,EAAC;AAAC,MAAG,KAAG,MAAK;AAAC,QAAI,IAAE,EAAE,uBAAuB,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC;AAAE,WAAOA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAE;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,MAAK,GAAE,WAAU,GAAE,SAAQ,EAAC,IAAE;AAAE,SAAO,GAAG,GAAG,MAAK,GAAEC,KAAE,GAAE,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,MAAK,GAAE,WAAU,GAAE,SAAQ,EAAC,IAAE;AAAE,SAAO,GAAG,GAAG,KAAI,GAAEC,KAAE,GAAE,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,SAAQ,EAAC,IAAE,GAAE,EAAC,MAAK,GAAE,cAAa,EAAC,IAAE;AAAE,MAAG,EAAE,MAAM,WAAS,GAAE;AAAC,QAAI,IAAEC,IAAE,SAAS,EAAE,MAAM,GAAE,IAAEA,IAAE,SAAS,EAAE,MAAM,GAAE,IAAE,GAAG,GAAE,GAAE,EAAE,OAAM,EAAE,OAAM,CAAC;AAAE,WAAOA,IAAE,eAAe,CAAC,CAAC,GAAE,EAAE,OAAM,CAAC;AAAA,EAAC,WAAS,EAAE,MAAM,WAAS,GAAE;AAAC,QAAI,IAAEA,IAAE,WAAW,CAAC,GAAE,IAAEA,IAAE,WAAW,CAAC,GAAE,IAAE,GAAG,GAAE,GAAE,GAAE,CAAC;AAAE,WAAOA,IAAE,eAAe,EAAE,OAAM,EAAE,OAAM,EAAE,MAAM;AAAA,EAAC;AAAC,QAAM,IAAI,MAAM,qEAAqE,EAAE,MAAM,MAAM,GAAG;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,cAAY,CAAC,GAAE,KAAK,cAAY,GAAE,KAAK,YAAUA,KAAE,KAAK,aAAW,GAAE,KAAK,WAAS;AAAA;AAAA;AAAA;AAAA,gBAIjqE,KAAK,qBAAqB,CAAC;AAAA,gBAC3B,KAAK,oBAAoB,CAAC;AAAA,gBAC1B,KAAK,oBAAoB,CAAC;AAAA;AAAA,uBAEnBA,GAAC;AAAA,+BACOA,GAAC;AAAA,uBACTA,GAAC;AAAA,+BACOA,GAAC;AAAA,mCACGA,GAAC;AAAA,UAC1B,KAAK,mBAAmB,CAAC;AAAA;AAAA;AAAA,uBAGZ,KAAK,uBAAuB,CAAC;AAAA;AAAA;AAAA;AAAA,EAGjD;AAAA,EAAC,uBAAsB;AAAC,WAAO,KAAK,eAAa,SAAO,cAAY;AAAA,EAAW;AAAA,EAAC,sBAAqB;AAAC,WAAO,KAAK,eAAa,SAAO,cAAY;AAAA,EAAW;AAAA,EAAC,sBAAqB;AAAC,WAAO,KAAK,eAAa,SAAO,cAAY;AAAA,EAAW;AAAA,EAAC,qBAAoB;AAAC,WAAO,KAAK,eAAa,SAAO,KAAK,YAAY,CAAC,IAAE,KAAK,YAAY,CAAC;AAAA,EAAC;AAAA,EAAC,yBAAwB;AAAC,WAAO,KAAK,eAAa,SAAO,8BAA4B;AAAA,EAA2B;AAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,WAAU,GAAE,YAAW,EAAC,IAAE,GAAE,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,MAAI,SAAO,EAAE,MAAM,CAAC,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,MAAI,SAAO,EAAE,MAAM,CAAC,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,MAAI,SAAO,EAAE,MAAM,CAAC,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,IAAE,GAAE,IAAE,IAAE,GAAE,IAAE,KAAG,IAAE,IAAG,IAAE,MAAI,SAAO,CAAC,GAAE,GAAE,GAAE,CAAC,IAAE,CAAC,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,IAAI,GAAG,GAAE,GAAE,CAAC;AAAE,SAAOC,IAAE,gBAAgB,GAAE,CAAC,CAAC,GAAE,EAAE,KAAK;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,MAAE,OAAG,IAAE,MAAK,IAAE,OAAG,IAAE,OAAG;AAAC,SAAK,gBAAc,CAAC,KAAI,GAAG,GAAE,KAAK,iBAAe,CAAC,EAAC,MAAK,QAAO,MAAK,QAAO,GAAE,EAAC,MAAK,WAAU,MAAK,QAAO,GAAE,EAAC,MAAK,aAAY,MAAK,QAAO,GAAE,EAAC,MAAK,UAAS,MAAK,QAAO,CAAC,GAAE,KAAK,cAAY,EAAE,UAAS,KAAK,sBAAoB,GAAG,KAAK,YAAY,MAAM;AAAE,QAAI,IAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,EAAE,cAAY,EAAE,YAAW,IAAE,IAAG,IAAE;AAAG,UAAI,IAAE,IAAE;AAAA;AAAA,YAEvqC,CAAC;AAAA,aACF,IAAE,IAAE;AAAA;AAAA,YAEH,CAAC;AAAA,aACF,IAAE;AAAA;AAAA,cAEC,CAAC;AAAA;AAAA,WAEL,IAAE;AAAgC,QAAI,IAAEA,MAAE,oCAAkC;AAAG,IAAAA,OAAG,KAAK,cAAc,KAAK,MAAM,GAAE,KAAG,KAAK,cAAc,KAAK,wBAAwB,GAAE,KAAG,KAAK,cAAc,KAAK,gBAAgB,GAAE,KAAK,WAAS;AAAA,QACpO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAOe,CAAC;AAAA,4BACG,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gCASG,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kCAOC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAczB,CAAC;AAAA,UACD,CAAC;AAAA;AAAA;AAAA;AAAA,EAGN;AAAC;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,MAAE,OAAG,IAAE,MAAK,IAAE,OAAG,IAAE,OAAG;AAAC,SAAK,gBAAc,CAAC,KAAI,GAAG,GAAE,KAAK,eAAa,MAAG,KAAK,eAAa,MAAG,KAAK,iBAAe,CAAC,EAAC,MAAK,QAAO,MAAK,QAAO,GAAE,EAAC,MAAK,WAAU,MAAK,QAAO,GAAE,EAAC,MAAK,aAAY,MAAK,QAAO,GAAE,EAAC,MAAK,UAAS,MAAK,QAAO,CAAC,GAAE,KAAK,cAAY,EAAE,UAAS,KAAK,sBAAoB,GAAG,KAAK,YAAY,MAAM;AAAE,QAAI,IAAE,EAAE,cAAY,EAAE,YAAW,IAAE,EAAE,QAAQ,MAAK,IAAE,EAAE,aAAY,IAAE,EAAE,eAAc,IAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,GAAE,IAAE;AAAA;AAAA;AAE1a,aAAQ,IAAE,GAAE,IAAE,GAAE,IAAI,MAAG;AAAA,wBAC9C,IAAE,CAAC;AAAA,uBACJ,IAAE,CAAC;AAAA,wBACF,IAAE,IAAE,CAAC;AAAA,uBACN,IAAE,IAAE,CAAC;AAAA,mBACT,CAAC;AAAI,SAAG;AAAA,0BACD,CAAC;AAAA;AACnB,aAAQ,IAAE,GAAE,IAAE,GAAE,IAAI,MAAG;AAAA,mBACZ,IAAE,CAAC;AAAA,mBACH,IAAE,CAAC;AAAA,mBACH,IAAE,IAAE,CAAC;AAAA,mBACL,IAAE,IAAE,CAAC;AAAA,cACV,CAAC;AAAgB,SAAG;AAAA;AAAA;AAAA;AAG1B,aAAQ,IAAE,GAAE,KAAG,IAAE,KAAG,GAAE,KAAI;AAAC,UAAI,IAAE,IAAE;AAAE,UAAG,KAAG;AAAA,4BACvB,IAAE,CAAC;AAAA,aACnB,MAAI,GAAE;AAAC,YAAG,IAAE,MAAI,IAAE,MAAI,KAAG,KAAG;AAAA;AAAA,sEAE8B,CAAC;AAAA,2BAC5C,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,6BAKC,CAAC;AAAA;AAAA,2BAEH,CAAC;AAAA;AAAA,iBAEZ,MAAI,KAAG,IAAE,IAAE,KAAG;AAAA,oBACV,CAAC,kBAAkB,IAAE,CAAC,eAAe,CAAC;AAAA,oBACxC,KAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAYG,CAAC,+BAA+B,CAAC;AAAA;AAAA,wBAEjC,CAAC,4BAA4B,CAAC;AAAA;AAAA,uBAEjC,KAAG;AAAA,0DACkC,CAAC;AAAA,2BAChC,CAAC;AAAA;AAAA,6BAEC,CAAC;AAAA;AAAA,2BAEH,CAAC;AAAA;AAAA;AAAA,oBAGR,CAAC,aAAa,CAAC;AAAA,mBACjB,IAAE,IAAE,IAAG;AAAC,cAAI,IAAE,IAAE,MAAI,IAAE,EAAE,kBAAkB,CAAC,IAAE;AAAE,cAAE,MAAI,KAAG,IAAE,MAAI,KAAG,IAAE,MAAI,KAAG,IAAE,MAAI,KAAG,KAAG;AAAA,uDACjD,CAAC;AAAA;AAAA,wEAEgB,IAAE,CAAC;AAAA,6BAC9C,IAAE,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,+BAKD,IAAE,CAAC;AAAA;AAAA,6BAEL,IAAE,CAAC;AAAA;AAAA,qBAEZ,IAAE,IAAE,KAAG;AAAA;AAAA;AAAA;AAAA,yBAIF,IAAE,CAAC,+BAA+B,IAAE,CAAC;AAAA;AAAA,yBAErC,IAAE,CAAC,4BAA4B,IAAE,CAAC;AAAA;AAAA,wBAErC,KAAG;AAAA,wBACD,IAAE,CAAC,kBAAkB,CAAC,eAAe,IAAE,CAAC;AAAA,yBACzC,MAAI,IAAE,KAAG;AAAA,wBACR,IAAE,CAAC,aAAa,CAAC;AAAA,wBACnB,KAAG;AAAA,sCACa,CAAC;AAAA;AAAA,0EAEmC,IAAE,CAAC;AAAA,+BAC9C,IAAE,CAAC;AAAA;AAAA,iCAED,IAAE,CAAC;AAAA;AAAA,+BAEL,IAAE,CAAC;AAAA;AAAA;AAAA,wBAGV,IAAE,CAAC,aAAa,IAAE,CAAC;AAAA;AAAA,QACtB;AAAA,MAAC,MAAM,KAAE,MAAI,IAAE,MAAI,KAAG,KAAG;AAAA;AAAA,qEAEuB,CAAC;AAAA,2BAC3C,CAAC;AAAA;AAAA;AAAA;AAAA,6BAIC,CAAC;AAAA;AAAA,2BAEH,CAAC;AAAA;AAAA;AAAA,iEAGqC,IAAE,CAAC;AAAA,2BACzC,IAAE,CAAC;AAAA;AAAA;AAAA;AAAA,6BAID,IAAE,CAAC;AAAA;AAAA,2BAEL,IAAE,CAAC;AAAA;AAAA;AAAA,oBAGV,CAAC,kBAAkB,CAAC,eAAe,IAAE,CAAC;AAAA,iBAC1C,IAAE,IAAE,MAAI,KAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAML,IAAE,CAAC,kBAAkB,IAAE,CAAC;AAAA,uBACzB,KAAG;AAAA,yDACiC,CAAC;AAAA,2BAC/B,CAAC;AAAA;AAAA,6BAEC,CAAC;AAAA;AAAA,2BAEH,CAAC;AAAA;AAAA;AAAA;AAAA,qEAIyC,IAAE,CAAC;AAAA,2BAC7C,IAAE,CAAC;AAAA;AAAA,6BAED,IAAE,CAAC;AAAA;AAAA,2BAEL,IAAE,CAAC;AAAA;AAAA;AAAA,oBAGV,CAAC;AAAA,2BACM,CAAC,eAAe,IAAE,CAAC;AAAA,iBAC9B,IAAE,IAAE,MAAI,KAAG;AAAA,sBACL,IAAE,CAAC,kBAAkB,CAAC,eAAe,IAAE,CAAC;AAAA;AACzC,UAAE,MAAI,KAAG;AAAA,+BACC,CAAC;AAAA,2BACL,CAAC;AAAA,aAChB,IAAE,IAAE,MAAI,KAAG;AAAA,iCACU,IAAE,CAAC;AAAA,6BACP,IAAE,CAAC;AAAA;AAAA,IACjB;AAAC,SAAG;AAAA;AAAA,KAEf,KAAG;AAAA;AAAA;AAED,QAAI,IAAE,IAAG,IAAE;AAAG,UAAI,IAAE,IAAE;AAAA;AAAA,YAEhB,CAAC;AAAA,aACF,IAAE,IAAE;AAAA;AAAA,YAEH,CAAC;AAAA,aACF,IAAE;AAAA,YACD,CAAC;AAAA,YACF,IAAE;AAAgC,QAAI,IAAEA,MAAE,oCAAkC;AAAG,IAAAA,OAAG,KAAK,cAAc,KAAK,MAAM,GAAE,KAAG,KAAK,cAAc,KAAK,wBAAwB,GAAE,KAAG,KAAK,cAAc,KAAK,gBAAgB,GAAE,KAAK,WAAS;AAAA,QACrO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAOe,CAAC;AAAA,4BACG,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAOnB,CAAC;AAAA;AAAA;AAAA,UAGD,CAAC;AAAA,UACD,CAAC;AAAA;AAAA;AAAA;AAAA,EAGN;AAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,QAAO,EAAC,IAAE,GAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,WAAU,GAAE,iBAAgB,EAAC,IAAE,GAAE,IAAE;AAAE,OAAG,SAAO,IAAE,CAAC,GAAE,CAAC,IAAG,EAAE,OAAO,EAAE,+BAA+B,GAAE,CAAC,GAAE,MAAI,gFAAgF,CAAC,mBAAmB,CAAC,GAAG;AAAE,MAAI,IAAE,EAAE,kBAAkB,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,IAAE,GAAE;AAAE,IAAE,EAAE,QAAQ,0BAA0B,KAAG,EAAE,eAAa,KAAG,EAAE,cAAY,EAAE,eAAa,IAAE,IAAE,IAAI,GAAG,CAAC,IAAE,IAAE,IAAI,GAAG,CAAC;AAAE,MAAI,IAAE,CAAC,CAAC,EAAE,QAAQ,KAAI,EAAE,QAAQ,IAAI,GAAE,CAAC,EAAE,cAAa,EAAE,WAAW,GAAE,CAAC,EAAE,gBAAe,EAAE,aAAa,GAAE,CAAC,EAAE,UAAS,EAAE,OAAO,CAAC;AAAE,SAAOC,IAAE,gBAAgB,GAAE,CAAC,GAAE,CAAC,GAAE,WAAU,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,KAAI,IAAI,GAAE,KAAK,cAAY,EAAE;AAAY,QAAIA,MAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,EAAE,QAAQ,KAAI,IAAE,EAAE,QAAQ,MAAK,IAAE,EAAE,cAAY,EAAE;AAAW,SAAK,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAOn3B,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,8BAKK,EAAE,SAAS;AAAA,kCACP,EAAE,SAAS;AAAA,iCACZA,GAAC,MAAM,CAAC;AAAA;AAAA,kCAEP,EAAE,QAAQ;AAAA;AAAA;AAAA;AAAA,oCAIR,EAAE,QAAQ;AAAA,mCACX,CAAC,MAAM,CAAC;AAAA;AAAA,oCAEP,EAAE,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYxC;AAAC;AAnC2rB,IAmCzrB,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,MAAK,GAAG,GAAE,KAAK,cAAY,EAAE;AAAQ,QAAIA,MAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAEA,MAAE,IAAE,EAAE,QAAQ,KAAI,IAAE,IAAE,IAAE,EAAE,QAAQ,MAAK,IAAE,EAAE,cAAY,EAAE;AAAW,SAAK,WAAS;AAAA,iCAClN,CAAC,KAAK,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gCAYRA,GAAC;AAAA,gDACe,CAAC;AAAA;AAAA,oCAEb,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA,yBAKtBA,GAAC;AAAA;AAAA,kCAEQ,CAAC;AAAA,kDACe,CAAC;AAAA;AAAA,sCAEb,EAAE,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2BAMrB,CAAC;AAAA;AAAA;AAAA,oCAGQ,CAAC;AAAA,8BACP,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAS1B;AAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,IAAG,EAAC,IAAE,GAAE,EAAC,SAAQ,GAAE,WAAU,GAAE,KAAI,GAAE,iBAAgB,GAAE,aAAY,EAAC,IAAE,GAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,GAAE,IAAE,GAAE,IAAE,IAAI,GAAG,CAAC;AAAE,SAAOC,IAAE,gBAAgB,GAAE,CAAC,GAAE,CAAC,GAAE,SAAS;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,IAAG,GAAE,QAAO,EAAC,IAAE,GAAE,EAAC,SAAQ,GAAE,WAAU,GAAE,KAAI,GAAE,iBAAgB,GAAE,YAAW,EAAC,IAAE,GAAE,IAAE,EAAE,kBAAkB,GAAE,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,IAAE,GAAE,IAAE,IAAI,GAAG,CAAC;AAAE,SAAOC,IAAE,gBAAgB,GAAE,CAAC,GAAE,CAAC,GAAE,SAAS;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,cAAY,CAAC,GAAE,CAAC,GAAE,KAAK,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMvpB;AAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,IAAE,CAAC,GAAG,EAAE,OAAM,GAAG,EAAE,KAAK,GAAE,IAAE,EAAE,cAAc,EAAE,KAAK,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,OAAM,CAAC,CAAC,EAAC,EAAC,CAAC,GAAE,IAAE,IAAI,GAAG,CAAC,GAAE,IAAEA,IAAE,gBAAgB,GAAE,CAAC,CAAC,GAAE,EAAE,KAAK,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,SAAOA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,KAAI,GAAG,GAAE,KAAK,cAAY,EAAE;AAAS,QAAG,EAAC,UAASA,KAAE,SAAQ,GAAE,SAAQ,GAAE,cAAa,GAAE,aAAY,GAAE,cAAa,GAAE,aAAY,GAAE,gBAAe,GAAE,eAAc,EAAC,IAAE,GAAE,EAAC,KAAI,GAAE,MAAK,EAAC,IAAE;AAAE,SAAK,WAAS;AAAA,oCACtlB,CAAC,KAAK,CAAC;AAAA,iCACV,CAAC,KAAK,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8BAaV,CAAC;AAAA,iCACE,CAAC;AAAA;AAAA,kCAEAA,GAAC;AAAA,kCACD,CAAC;AAAA,qCACE,CAAC;AAAA;AAAA,sCAEA,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBlC;AAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,QAAO,EAAC,IAAE,GAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,WAAU,EAAC,IAAE,GAAE,IAAE,EAAE,sBAAsB,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,QAAO,CAAC,GAAE,GAAE,IAAE,IAAI,GAAG,CAAC;AAAE,MAAEC,IAAE,gBAAgB,GAAE,CAAC,GAAE,CAAC,GAAE,SAAS;AAAE,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAE,SAAQ,EAAC,CAAC;AAAE,SAAOA,IAAE,8BAA8B,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,UAAS,EAAC,IAAE,GAAE,IAAE,GAAE,EAAC,SAAQ,GAAE,YAAW,GAAE,QAAO,EAAC,IAAE,EAAE,qBAAqB,GAAE,EAAE,MAAM;AAAE,IAAE,oBAAoB,EAAE,QAAO,GAAE,CAAC;AAAE,MAAG,EAAC,MAAK,GAAE,OAAM,EAAC,IAAE,EAAE,qBAAqB,GAAE,CAAC,GAAE,IAAE,EAAE,QAAO,IAAE,MAAK,IAAE,EAAE,QAAO,IAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,aAAQ,KAAK,EAAE,CAAC,GAAE;AAAC,UAAG,EAAC,oBAAmB,GAAE,YAAW,EAAC,IAAE,EAAE,qBAAqB,GAAE,EAAE,CAAC,CAAC,GAAE;AAAE,QAAE,sBAAsB,CAAC,IAAE,IAAE,EAAE,CAAC,KAAG,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAE,CAAC,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC,GAAE,EAAE,KAAK,CAAC;AAAG,UAAI,IAAE,EAAE,MAAM,MAAM;AAAE,eAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE,EAAE,GAAE,OAAO,EAAE,CAAC,GAAE,GAAE,CAAC;AAAE,QAAE,YAAY,EAAE,OAAM,CAAC,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,EAAE,KAAK,CAAC,IAAG,MAAI,OAAK,IAAE,KAAG,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,GAAE,GAAE,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAE,EAAE,KAAK,CAAC;AAAA,IAAE;AAAC,QAAE,IAAE,MAAI,EAAE,CAAC,KAAG,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,MAAK,EAAE,CAAC,KAAG,EAAE,SAAO,IAAG,UAAS,MAAE,EAAC,CAAC,GAAE,EAAE,KAAK,CAAC,IAAG;AAAA,EAAI;AAAC,WAAQ,KAAK,EAAE,OAAI,KAAGA,IAAE,8BAA8B,CAAC;AAAE,SAAO;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG;AAAP,IAAiD,KAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAApD,IAShwC,KAAG,GAAG,EAAC,WAAU,IAAG,iBAAgB,GAAE,CAAC;AATytC,IASvtC,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG;AAAP,IAAgD,KAAG;AAAA;AAAA;AAAA;AAAnD,IAG9F,KAAG,CAAAD,QAAG;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,IAAG,GAAE,GAAE,EAAC,IAAE,GAAE,IAAE,EAAE,EAAE,QAAQ,8BAA8B,IAAE,IAAI,GAAG,IAAG,EAAE,OAAM,EAAE,KAAK,IAAE,IAAI,GAAG,IAAG,EAAE,OAAM,EAAE,KAAK;AAAE,SAAOC,IAAE,gBAAgB,GAAE,CAAC,GAAE,CAAC,GAAE,EAAE,KAAK;AAAC;AAH7F,IAG+F,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG;AAAA;AAAA;AAAP,IAElP,KAAG;AAF+O,IAEvN,KAAG,GAAG,EAAC,WAAU,IAAG,iBAAgB,IAAG,OAAM,QAAO,eAAc,GAAE,CAAC;AAFkJ,IAEhJ,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG;AAAA;AAAA;AAAA;AAAA,cAIlJ,EAAE,KAAK;AAAA,eACN,EAAE,MAAM;AAAA,eACR,EAAE,MAAM;AAAA,eACR,EAAE,MAAM;AAAA,eACR,EAAE,MAAM;AAAA,eACR,EAAE,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AATkI,IAevJ,KAAG,GAAG,EAAC,WAAU,GAAE,CAAC;AAfmI,IAejI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG,KAAG;AAAA;AAAA;AAAV,IAE3E,KAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAFwE,IAW3E,KAAG,GAAG,EAAC,WAAU,IAAG,iBAAgB,IAAG,eAAc,IAAG,OAAM,UAAS,CAAC;AAXG,IAWD,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,OAAMC,KAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,KAAI,EAAC,IAAEC,KAAE,EAAC,OAAM,EAAC,IAAE,GAAE,IAAE,EAAE,MAAM,QAAO,IAAE,EAAE,MAAM,MAAM,GAAE,IAAE;AAAE,SAAO,IAAE,MAAI,EAAE,OAAO,EAAE,IAAE,MAAI,GAAE,MAAI,iCAAiC,EAAE,IAAE,EAAE,KAAK,CAAC,GAAG,GAAE,IAAE,IAAE,IAAE,IAAG,EAAE,OAAO,GAAE,GAAE,CAAC,GAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG;AAAP,IAA8B,KAAG,GAAG,EAAC,WAAU,IAAG,iBAAgB,IAAG,eAAc,GAAE,CAAC;AAAtF,IAAwF,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,QAAO,MAAM;AAAE,QAAI,IAAEA,IAAE,CAAC;AAAE,SAAK,cAAYA;AAAE,QAAI,IAAE,IAAE,SAAS,KAAK,EAAE,KAAG,UAAU,KAAK,EAAE,IAAG,IAAE,IAAE,GAAG,CAAC,OAAK,OAAM;AAAE,QAAG,MAAI,OAAO,KAAE;AAAA,aAA4C,MAAI,OAAO,KAAE;AAAA,QAAyC,OAAM,IAAI,MAAM,sDAAsD,CAAC,GAAG;AAAE,SAAK,WAAS;AAAA,yCACz5B,CAAC;AAAA;AAAA;AAAA,UAGhC,CAAC;AAAA;AAAA;AAAA;AAAA,kDAIuC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8BAMrB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yDAS0B,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUrD;AAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAEA,IAAE,QAAQ,IAAID,IAAE,MAAM,GAAE,IAAE,EAAE,cAAcA,IAAE,KAAK,GAAE,IAAEA,IAAE,MAAMA,IAAE,MAAM,SAAO,CAAC,GAAE,IAAE,IAAE,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAEA,IAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,OAAM,CAAC,GAAE,CAAC,EAAC,EAAC,CAAC,GAAE,IAAE,EAAE,OAAM,IAAE,IAAI,GAAG,QAAO,GAAE,CAAC,GAAE,IAAE,IAAI,GAAG,QAAO,GAAE,CAAC,GAAE,IAAE,CAAC,EAAC,QAAO,EAAE,mBAAmB,KAAK,QAAO,OAAM,EAAE,mBAAmB,KAAK,OAAM,OAAM,EAAC,GAAE,EAAC,QAAO,EAAE,mBAAmB,KAAK,QAAO,OAAM,EAAE,mBAAmB,KAAK,OAAM,OAAM,EAAC,CAAC,GAAE,IAAEA,IAAE,gBAAgB,GAAE,GAAE,SAAS,GAAE,IAAEA,IAAE,gBAAgB,GAAE,GAAE,SAAS,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,MAAK,GAAE,MAAK,EAAC,GAAE,SAAQA,IAAC,CAAC;AAAE,EAAAA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC;AAAE,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAMD,IAAE,MAAK,EAAC,CAAC;AAAE,SAAOC,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAE;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,OAAM,EAAC,IAAE;AAAE,SAAO,GAAG,GAAE,OAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE;AAAC,SAAK,cAAY,CAAC,GAAE,KAAK,iBAAe,CAAC,EAAC,MAAK,SAAQ,MAAK,QAAO,CAAC,GAAE,KAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,cAAY,GAAE,KAAK,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAKv+B;AAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,SAAQ,GAAE,OAAMC,IAAC,IAAED,KAAE,EAAC,OAAM,GAAE,OAAM,EAAC,IAAEC,KAAE,EAAC,OAAM,EAAC,IAAEA;AAAE,MAAG,IAAE,KAAG,EAAE,WAAW,CAAC,GAAE,MAAI,UAAS;AAAC,QAAI,IAAE,EAAE,kBAAkB,GAAE,EAAE,cAAc,CAAC,CAAC;AAAE,WAAO,EAAE,KAAK,CAAC,GAAE,EAAE,eAAe,GAAE,GAAE,CAAC;AAAA,EAAC,OAAK;AAAC,QAAI,IAAE,IAAI,GAAG,GAAE,CAAC,GAAE,IAAE,CAAC,CAAC,CAAC,CAAC;AAAE,WAAO,EAAE,gBAAgB,GAAE,CAAC,GAAE,GAAE,CAAC;AAAA,EAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,OAAO,GAAE,KAAK,cAAY,CAAC;AAAE,QAAIA,MAAE,EAAE,CAAC;AAAE,SAAK,cAAY,GAAE,KAAK,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA,yBAK3aA,GAAC;AAAA;AAAA,uCAEaA,GAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOnC;AAAC;AAAE,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,CAAC,EAAC,QAAOD,KAAE,SAAQ,EAAC,MAAI;AAAC,MAAG,EAAC,OAAMC,IAAC,IAAED,KAAE,IAAE,GAAE,IAAE,IAAI,GAAGC,IAAE,KAAK;AAAE,SAAO,EAAE,gBAAgB,GAAE,CAACA,GAAC,GAAEA,IAAE,KAAK;AAAC,EAAC;AAAE,IAAI,KAAG;AAAP,IAA0B,KAAG,GAAG,EAAC,WAAU,IAAG,iBAAgB,IAAG,eAAc,GAAE,CAAC;AAAlF,IAAoF,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAP,IAU5S,KAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAVyS,IA+B5S,KAAG,GAAG,EAAC,WAAU,IAAG,iBAAgB,IAAG,OAAM,QAAO,CAAC;AA/BuP,IA+BrP,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG;AAAE,QAAIA,MAAE,GAAG,GAAE,CAAC,GAAE,CAAC,IAAE;AAAE,SAAK,cAAY,GAAE,KAAK,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uDAMhK,CAAC,OAAO,CAAC;AAAA;AAAA,wBAExCA,IAAE,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAc9B;AAAC;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,eAAa,OAAG,KAAK,eAAa;AAAG,QAAIA,MAAE,GAAG,GAAE,CAAC,GAAE,CAAC,IAAE;AAAE,SAAK,cAAY,GAAE,KAAK,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8BAe7H,CAAC,OAAO,CAAC;AAAA,4BACXA,IAAE,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAgB7BA,IAAE,MAAM;AAAA;AAAA;AAAA,EAEb;AAAC;AAAE,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAvD,IAAyD;AAAzD,IAA4D,KAAG,EAAE,EAAE,QAAQ,uCAAuC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,QAAO,EAAC,IAAE,GAAE,EAAC,aAAY,EAAC,IAAE,GAAE,IAAE,OAAO,oBAAkB,eAAa,aAAa,kBAAiB,IAAE,OAAO,oBAAkB,eAAa,aAAa,kBAAiB,CAAC,GAAE,CAAC,IAAE,IAAE,CAAC,EAAE,YAAW,EAAE,WAAW,IAAE,CAAC,EAAE,OAAM,EAAE,MAAM,GAAE,IAAE,CAAC,GAAE,CAAC,GAAE,IAAE,CAAC,GAAE,GAAE,CAAC;AAAE,MAAG,KAAG,GAAE;AAAC,QAAI,IAAE,EAAE,EAAE,QAAQ,uCAAuC;AAAE,KAAC,MAAI,QAAM,MAAI,QAAM,KAAG,GAAE,KAAG,SAAS,cAAc,QAAQ,EAAE,WAAW,MAAK,EAAC,oBAAmB,GAAE,CAAC,IAAG,GAAG,OAAO,QAAM,GAAE,GAAG,OAAO,SAAO,GAAE,GAAG,UAAU,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,GAAG;AAAA,EAAM;AAAC,MAAI,IAAEC,IAAE,eAAe,GAAE,OAAO;AAAE,EAAAA,IAAE,QAAQ,IAAI,EAAE,MAAM,EAAE,QAAM,GAAG,QAAOA,IAAE,MAAM,yBAAyBA,IAAE,WAAW,EAAE,MAAM,GAAE,CAAC;AAAE,MAAI,IAAE,EAAE,EAAE,QAAQ,YAAY,IAAE,IAAI,GAAG,CAAC,IAAE,IAAI,GAAG,CAAC,GAAE,IAAEA,IAAE,gBAAgB,GAAE,CAAC,CAAC,GAAE,OAAO;AAAE,SAAOA,IAAE,YAAY,EAAE,MAAM,GAAE;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,QAAO,GAAE,MAAK,GAAE,wBAAuB,EAAC,IAAE,GAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,YAAW,GAAE,WAAU,GAAE,iBAAgB,GAAE,YAAW,GAAE,gBAAe,EAAC,IAAE,GAAE,IAAE,EAAE,wBAAwB,CAAC,GAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,OAAG,CAAC,GAAE,GAAE,IAAE,CAAC,GAAE,IAAE,KAAG,MAAK,IAAE,KAAG,MAAK,IAAE,MAAI,aAAY,IAAE,MAAI;AAAC,QAAI,IAAE,CAAC,GAAE,CAAC,GAAE,IAAE,CAAC,GAAE,MAAI;AAAC,UAAG,MAAI,UAAQ,EAAE,MAAM,WAAS,KAAG,EAAE,MAAM,CAAC,MAAI,GAAE;AAAC,YAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,OAAM,CAAC,EAAE,MAAM,CAAC,GAAE,GAAE,CAAC,EAAC,EAAC,CAAC;AAAE,eAAO,EAAE,KAAK,CAAC,GAAE;AAAA,MAAC;AAAC,aAAO;AAAA,IAAC;AAAE,QAAG,KAAG,EAAE,KAAK,EAAE,GAAE,CAAC,CAAC,GAAE,KAAG,EAAE,KAAK,EAAE,GAAE,CAAC,CAAC,GAAE,GAAE;AAAC,UAAI,IAAEA,IAAE,eAAe,CAAC,GAAE,WAAU,EAAE,kBAAkB,GAAE,SAAS,CAAC;AAAE,QAAE,KAAK,CAAC,GAAE,EAAE,KAAK,CAAC;AAAA,IAAC;AAAC,WAAO;AAAA,EAAC;AAAE,MAAG,EAAE,iBAAe,KAAG,EAAE,gBAAc,KAAG,EAAE,mBAAiB,KAAG,EAAE,kBAAgB,KAAG,EAAE,iBAAe,KAAG,EAAE,gBAAc,MAAI,EAAE,QAAQ,SAAO,UAAQ,EAAE,QAAQ,SAAO,SAAS,KAAE,GAAG,EAAC,GAAE,GAAE,QAAO,GAAE,UAAS,GAAE,SAAQA,KAAE,MAAK,GAAE,YAAW,GAAE,wBAAuB,GAAE,gBAAe,EAAC,CAAC;AAAA,WAAU,EAAE,eAAa,KAAG,MAAI,kBAAgB,EAAE,EAAE,QAAQ,gBAAgB,GAAE;AAAC,QAAI,IAAE,IAAE,GAAG,GAAE,IAAE,IAAE,MAAK,IAAE,IAAI,GAAG,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,CAAC,CAAC,EAAE,QAAQ,KAAI,EAAE,QAAQ,IAAI,GAAE,CAAC,EAAE,cAAa,EAAE,WAAW,GAAE,CAAC,EAAE,gBAAe,EAAE,aAAa,GAAE,CAAC,EAAE,UAAS,EAAE,OAAO,CAAC,GAAE,IAAE,EAAE;AAAE,QAAEA,IAAE,gBAAgB,GAAE,GAAE,WAAU,CAAC;AAAA,EAAC,WAAS,EAAE,EAAE,QAAQ,mBAAmB,EAAE,KAAE,GAAG,EAAC,GAAE,GAAE,QAAO,GAAE,UAAS,GAAE,SAAQA,KAAE,MAAK,GAAE,YAAW,GAAE,wBAAuB,GAAE,gBAAe,EAAC,CAAC;AAAA,OAAM;AAAC,QAAI,IAAE,IAAE,GAAG,GAAE,KAAE,IAAE,MAAK,IAAE,IAAI,GAAG,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE;AAAE,QAAEA,IAAE,gBAAgB,GAAE,GAAE,SAAS;AAAA,EAAC;AAAC,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAE,SAAQ,EAAC,CAAC;AAAE,SAAO,EAAE,KAAK,CAAC,GAAE,EAAE,QAAQ,OAAGA,IAAE,8BAA8B,CAAC,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,QAAO,GAAE,MAAK,GAAE,wBAAuB,EAAC,IAAE,GAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,WAAU,GAAE,iBAAgB,GAAE,YAAW,GAAE,gBAAe,EAAC,IAAE,GAAE,IAAE,CAAC,GAAE,IAAE;AAAE,OAAG,SAAO,IAAE,CAAC,GAAE,CAAC,IAAG,EAAE,OAAO,EAAE,+BAA+B,GAAE,CAAC,GAAE,MAAI,gFAAgF,CAAC,mBAAmB,CAAC,GAAG;AAAE,MAAI,IAAE,EAAE,kBAAkB,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,IAAE,GAAE,IAAE,EAAE,EAAE,QAAQ,0BAA0B,KAAG,EAAE,eAAa,KAAG,EAAE,cAAY,EAAE,eAAa,GAAE,IAAE,IAAE,GAAG,GAAE,CAAC,IAAE,MAAK,IAAE,CAAC,GAAE,CAAC,GAAE,IAAE,KAAG,MAAK,IAAE,KAAG,MAAK,IAAE,MAAI;AAAY,MAAG,KAAG,EAAE,KAAK,CAAC,GAAE,KAAG,EAAE,KAAK,CAAC,GAAE,GAAE;AAAC,QAAI,IAAEC,IAAE,eAAe,CAAC,GAAE,WAAU,EAAE,kBAAkB,GAAE,SAAS,CAAC;AAAE,MAAE,KAAK,CAAC,GAAE,EAAE,KAAK,CAAC;AAAA,EAAC;AAAC,MAAI;AAAE,MAAE,IAAE,IAAI,GAAG,GAAE,GAAE,GAAE,GAAE,CAAC,IAAE,IAAE,IAAI,GAAG,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,MAAI,IAAE,CAAC,CAAC,EAAE,QAAQ,KAAI,EAAE,QAAQ,IAAI,GAAE,CAAC,EAAE,cAAa,EAAE,WAAW,GAAE,CAAC,EAAE,gBAAe,EAAE,aAAa,GAAE,CAAC,EAAE,UAAS,EAAE,OAAO,CAAC,GAAE,IAAEA,IAAE,gBAAgB,GAAE,GAAE,WAAU,CAAC;AAAE,SAAO,EAAE,QAAQ,OAAGA,IAAE,8BAA8B,CAAC,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE,GAAE;AAAC,SAAK,WAAS,GAAE,KAAK,UAAQA,KAAE,KAAK,cAAY,GAAE,KAAK,gBAAc,CAAC,KAAI,SAAS,GAAE,KAAK,cAAY;AAAE,QAAI,IAAE,GAAG,EAAE,MAAM,GAAE,IAAE;AAAA;AACnnH,aAAQ,IAAE,GAAE,IAAE,KAAK,UAAS,IAAI,MAAG;AAAA,gDACH,CAAC;AAAA;AAAA,sDAEK,KAAK,YAAY,CAAC,CAAC;AAAA,oCACrC,KAAK,QAAQ,CAAC,CAAC;AAAI,SAAK,WAAS;AAAA;AAAA,YAEzD,CAAC;AAAA;AAAA;AAAA;AAAA,YAID,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,EAIN;AAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,QAAO,GAAE,SAAQ,EAAC,IAAE,GAAE,IAAE,EAAE,OAAM,IAAE,EAAE,EAAE,SAAO,CAAC,GAAE,IAAE,EAAE,cAAc,EAAE,KAAK,GAAE,CAAC,GAAE,GAAE,GAAE,CAAC,IAAE,EAAE,mBAAmB,GAAE,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,OAAM,CAAC,GAAE,CAAC,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,CAAC,EAAE,cAAc,EAAE,KAAK,IAAE,GAAE,CAAC,EAAC,EAAC,CAAC;AAAE,MAAGA,IAAE,mBAAmB,CAAC,GAAE,CAAC,CAAC,KAAG,EAAE,UAAQ,UAAS;AAAC,QAAI,IAAEA,IAAE,SAAS,EAAE,MAAM,GAAE,IAAEA,IAAE,WAAW,CAAC,GAAE,IAAE,GAAG,GAAE,GAAE,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,EAAE,OAAM,CAAC;AAAE,WAAOA,IAAE,eAAe,GAAE,EAAE,OAAM,EAAE,MAAM;AAAA,EAAC;AAAC,MAAI,IAAE,IAAI,GAAG,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,EAAE,KAAK,GAAE,IAAEA,IAAE,gBAAgB,GAAE,CAAC,GAAE,CAAC,GAAE,EAAE,KAAK,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,SAAOA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE;AAAC,SAAK,gBAAc,CAAC,KAAI,SAAS,GAAE,KAAK,cAAYA,KAAE,KAAK,OAAKA,IAAE;AAAO,QAAI,IAAE,GAAG,KAAK,IAAI,GAAE,IAAE,GAAG,GAAE,CAAC;AAAE,SAAK,WAAS;AAAA;AAAA,UAE33B,CAAC;AAAA;AAAA,oDAEyC,EAAE,CAAC,CAAC;AAAA,oCACpB,CAAC;AAAA;AAAA;AAAA,EAEhC;AAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,CAAC,WAAU,WAAU,WAAU,SAAS,GAAE,IAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAED,IAAE,QAAO,IAAI,OAAI,IAAE,EAAE,KAAK,OAAO,IAAE,EAAE,KAAK,GAAGC,IAAE,CAAC,CAAC,EAAE;AAAE,SAAO,EAAE,KAAK;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,SAAQ,EAAC,IAAE,GAAE,EAAC,MAAK,GAAE,WAAU,EAAC,IAAE,GAAE,IAAE,EAAE,eAAe,GAAE,EAAE,KAAK,EAAE,CAAC;AAAE,MAAG,EAAE,EAAE,IAAI,OAAO,GAAE;AAAC,QAAI,IAAEC,IAAE,SAAS,EAAE,MAAM,GAAE,IAAE,EAAE,MAAM,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE,GAAE;AAAC,UAAI,IAAE,EAAE,CAAC;AAAE,QAAE,OAAO,KAAG,IAAE,KAAG,KAAG,GAAE,MAAI,6BAA6B,CAAC,kBAAkB,IAAE,CAAC,GAAG;AAAA,IAAC;AAAA,EAAC;AAAC,MAAI,IAAE,EAAE,aAAa,yBAAyB,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,cAAc,EAAE,KAAK,GAAE,IAAE,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,CAAC,EAAE,WAAU,EAAE,WAAU,EAAE,SAAQ,EAAE,SAAS,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,CAAC,EAAE,WAAU,IAAE,EAAE,SAAS,EAAC,EAAC,CAAC;AAAE,IAAE,KAAK,CAAC,GAAE,EAAE,KAAK,CAAC;AAAE,MAAI,IAAE,CAAC,EAAE,WAAU,EAAE,WAAU,IAAE,EAAE,WAAU,EAAE,SAAS;AAAE,MAAGA,IAAE,mBAAmB,CAAC,GAAE,CAAC,CAAC,KAAG,EAAE,UAAQ,UAAS;AAAC,QAAI,IAAEA,IAAE,WAAW,CAAC,GAAE,IAAEA,IAAE,WAAW,CAAC,GAAE,IAAE,GAAG,GAAE,GAAE,CAAC;AAAE,WAAO,EAAE,QAAQ,OAAGA,IAAE,8BAA8B,CAAC,CAAC,GAAEA,IAAE,eAAe,EAAE,aAAY,EAAE,OAAM,EAAE,MAAM;AAAA,EAAC;AAAC,MAAI,IAAE,IAAI,GAAG,EAAE,OAAM,CAAC,GAAE,IAAEA,IAAE,gBAAgB,GAAE,CAAC,GAAE,CAAC,GAAE,EAAE,KAAK;AAAE,IAAE,KAAK,CAAC;AAAE,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAE,YAAW,EAAC,CAAC;AAAE,SAAO,EAAE,QAAQ,OAAGA,IAAE,8BAA8B,CAAC,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG;AAAP,IAA8B,MAAI;AAAA;AAAA;AAAlC,IAEtuC,MAAI,GAAG,EAAC,WAAU,IAAG,iBAAgB,KAAI,eAAc,IAAG,OAAM,OAAM,CAAC;AAF+pC,IAE7pC,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,MAAI;AAAR,IAAgC,MAAI;AAAA;AAAA;AAApC,IAE/H,MAAI,GAAG,EAAC,WAAU,KAAI,iBAAgB,KAAI,OAAM,QAAO,eAAc,GAAE,CAAC;AAFuD,IAErD,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,OAAM,EAAC,IAAE;AAAE,SAAO,GAAG,GAAE,MAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,MAAI;AAAR,IAAgD,MAAI,GAAG,EAAC,WAAU,KAAI,OAAM,OAAM,CAAC;AAAnF,IAAqF,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,MAAI;AAAR,IAAkC,MAAI,GAAG,EAAC,WAAU,KAAI,OAAM,OAAM,CAAC;AAArE,IAAuE,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,MAAI;AAAR,IAAkC,MAAI,GAAG,EAAC,WAAU,KAAI,OAAM,OAAM,CAAC;AAArE,IAAuE,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,MAAI;AAAR,IAA+B,MAAI;AAAA;AAAA;AAAnC,IAEvoB,MAAI,GAAG,EAAC,WAAU,KAAI,iBAAgB,KAAI,eAAc,IAAG,OAAM,OAAM,CAAC;AAF+jB,IAE7jB,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,MAAI;AAAR,IAAgC,MAAI;AAAA;AAAA;AAApC,IAEhI,MAAI,GAAG,EAAC,WAAU,KAAI,iBAAgB,KAAI,eAAc,IAAG,OAAM,OAAM,CAAC;AAFwD,IAEtD,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,SAAQ,GAAE,OAAMC,IAAC,IAAED,KAAE,EAAC,OAAM,GAAE,MAAK,GAAE,KAAI,EAAC,IAAEC,KAAE,IAAE,GAAG,GAAE,GAAE,CAAC;AAAE,SAAO,EAAE,eAAe,CAAC,EAAE,MAAM,GAAE,WAAU,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,MAAI,KAAG;AAAA;AAAA;AAAX,IAExT,MAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAFoT,IAUxT,MAAI,GAAG,EAAC,WAAU,KAAI,iBAAgB,KAAI,eAAc,GAAE,CAAC;AAV6P,IAU3P,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,MAAI,KAAG;AAAA;AAAA;AAAX,IAEnH,MAAI,GAAG,EAAC,WAAU,IAAG,CAAC;AAF6F,IAE3F,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,MAAI;AAAR,IAA8C,MAAI;AAAA;AAAA;AAAA;AAAA;AAAlD,IAI9E,MAAI,GAAG,EAAC,WAAU,KAAI,iBAAgB,KAAI,OAAM,OAAM,CAAC;AAJuB,IAIrB,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,MAAI;AAAR,IAAqC,MAAI,GAAG,EAAC,WAAU,IAAG,CAAC;AAA3D,IAA6D,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,MAAI;AAAR,IAA8C,MAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAlD,IAKlO,MAAI,GAAG,EAAC,WAAU,KAAI,iBAAgB,KAAI,OAAM,OAAM,CAAC;AAL2K,IAKzK,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE,GAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,cAAY,CAAC;AAAE,QAAI,IAAEA,KAAE,IAAE,EAAE,CAAC,IAAE;AAAE,SAAK,cAAY;AAAE,QAAI,GAAE,IAAE,SAAS,CAAC,aAAa,CAAC;AAAU,UAAI,MAAG,IAAE,eAAe,CAAC,MAAI,MAAI,IAAE,IAAE,QAAQ,CAAC,MAAI,IAAE,WAAW,CAAC,cAAc,CAAC,OAAM,KAAK,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAS3V,CAAC,UAAU,CAAC;AAAA;AAAA,oCAEA,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,0BAKX,CAAC;AAAA;AAAA;AAAA;AAAA,EAGtB;AAAC;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE,GAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,cAAY,CAAC,GAAE,KAAK,eAAa,MAAG,KAAK,eAAa;AAAG,QAAI,IAAEA,KAAE,IAAE,EAAE,CAAC,IAAE;AAAE,SAAK,cAAY;AAAE,QAAI,GAAE,IAAE,SAAS,CAAC,aAAa,CAAC;AAAU,UAAI,MAAG,IAAE,eAAe,CAAC,MAAI,MAAI,IAAE,IAAE,QAAQ,CAAC,MAAI,IAAE,WAAW,CAAC,cAAc,CAAC,OAAM,KAAK,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gCAQpR,KAAK,YAAY,CAAC,CAAC;AAAA,gCACnB,KAAK,YAAY,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iCAelB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yBAWT,CAAC,UAAU,CAAC;AAAA;AAAA;AAAA,6DAGwB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0CAqBpB,CAAC;AAAA;AAAA;AAAA;AAAA,EAGtC;AAAC;AAAE,IAAI,MAAI,CAAAD,QAAG;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,aAAY,GAAE,MAAK,GAAE,OAAM,GAAE,MAAK,EAAC,IAAE,GAAE,IAAE,EAAE,EAAE,QAAQ,0BAA0B,IAAE,IAAI,GAAG,EAAE,OAAM,GAAE,GAAE,GAAE,CAAC,IAAE,IAAI,GAAG,EAAE,OAAM,GAAE,GAAE,GAAE,CAAC;AAAE,SAAOC,IAAE,gBAAgB,GAAE,CAAC,CAAC,GAAE,EAAE,KAAK;AAAC;AAA/N,IAAiO,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE,GAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,cAAa,eAAc,IAAI,GAAE,KAAK,cAAY,CAAC,GAAE,KAAK,cAAY,GAAE,KAAK,QAAM,EAAE,CAAC,GAAE,KAAK,cAAYA,KAAE,KAAK,OAAK,GAAE,KAAK,QAAM,GAAE,KAAK,OAAK,GAAE,KAAK,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8BAQvd,KAAK,KAAK;AAAA,oDACYA,GAAC;AAAA,yCACZ,KAAK,KAAK;AAAA,0BACzBA,GAAC;AAAA;AAAA;AAAA,sCAGW,KAAK,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yBAevB,CAAC,oBAAoB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yCAON,CAAC;AAAA,0BAChB,CAAC;AAAA;AAAA;AAAA;AAAA,0CAIe,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EActC;AAAC;AAAE,IAAI,MAAI,CAAAD,QAAG;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,GAAE,GAAE,IAAG,EAAC,IAAE,GAAE,EAAC,aAAY,GAAE,MAAK,GAAE,OAAM,GAAE,MAAK,EAAC,IAAE,GAAE,IAAE,IAAI,GAAG,EAAE,OAAM,GAAE,GAAE,GAAE,CAAC;AAAE,SAAOC,IAAE,gBAAgB,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,EAAE,KAAK;AAAC;AAA5K,IAA8K,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE;AAAC,MAAI,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,EAAE,cAAcD,IAAE,KAAK,IAAE,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAEA,IAAC,GAAE,OAAM,EAAC,OAAM,CAAC,GAAE,CAAC,EAAC,GAAE,SAAQ,EAAC,CAAC,GAAE,IAAE,GAAG,GAAEA,IAAE,OAAM,OAAM,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,OAAM,EAAC,OAAMC,IAAC,GAAE,SAAQ,EAAC,CAAC;AAAE,SAAO,EAAE,8BAA8B,CAAC,GAAE,EAAE,8BAA8B,CAAC,GAAE;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,kBAAiB,GAAE,UAAS,EAAC,IAAE,GAAE,IAAE,EAAE,MAAM,QAAO,IAAE,EAAE,eAAe,GAAE,EAAE,KAAK,GAAE,IAAE,GAAE,IAAE,EAAE,mBAAmB,GAAE,CAAC,GAAE,IAAE,KAAG,MAAK,IAAEC,IAAE,mBAAmB,CAAC,CAAC,CAAC,GAAE,IAAE;AAAE,MAAG,GAAE;AAAC,QAAG,GAAE;AAAC,UAAI,IAAEA,IAAE,QAAQ,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,IAAI,MAAM,CAAC;AAAE,eAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,IAAI,GAAE,CAAC,IAAE,EAAE,MAAM,EAAE,CAAC,CAAC;AAAE,UAAI,IAAE,GAAG,GAAE,EAAE,OAAM,EAAE,OAAM,GAAE,CAAC;AAAE,UAAEA,IAAE,eAAe,GAAE,EAAE,KAAK;AAAE,UAAI,IAAEA,IAAE,QAAQ,IAAI,EAAE,MAAM;AAAE,QAAE,SAAO;AAAA,IAAC,MAAM,KAAE,GAAG,GAAE,GAAEA,GAAC;AAAE,QAAE,EAAE,iBAAiB,EAAE,QAAO,CAAC;AAAA,EAAC;AAAC,IAAE,2BAA2B,OAAM,GAAE,CAAC;AAAE,MAAG,CAAC,GAAE,CAAC,IAAE,EAAE,0BAA0B,EAAE,OAAM,CAAC,GAAE,IAAE;AAAE,QAAI,IAAE,EAAE,qBAAqB,GAAE,CAAC;AAAG,MAAI;AAAE,MAAG,GAAE;AAAC,QAAI,IAAEA,IAAE,QAAQ,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,GAAG,GAAE,EAAE,cAAc,CAAC,GAAE,GAAE,EAAE,KAAK;AAAE,QAAEA,IAAE,eAAe,GAAE,EAAE,KAAK;AAAE,QAAI,IAAEA,IAAE,QAAQ,IAAI,EAAE,MAAM;AAAE,MAAE,SAAO;AAAA,EAAC,MAAM,KAAE,GAAG,GAAE,GAAE,GAAEA,GAAC;AAAE,SAAO,KAAGA,IAAE,8BAA8B,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,MAAI,KAAG;AAAA;AAAA;AAAX,IAEh3C,MAAI;AAAA;AAAA;AAAA;AAAA;AAAA,MAKF,KAAG;AAAA;AAAA;AAP22C,IASh3C,MAAI,GAAG,EAAC,WAAU,KAAI,iBAAgB,KAAI,eAAc,GAAE,CAAC;AATqzC,IASnzC,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE;AAAE,KAAG,GAAE,SAAS;AAAE,MAAG,EAAC,YAAW,GAAE,SAAQ,GAAE,KAAI,GAAE,iBAAgB,EAAC,IAAE,GAAE,IAAE;AAAE,IAAE,OAAO,EAAE,+BAA+B,GAAE,CAAC,GAAE,MAAI,wEAAwE,CAAC,mBAAmB,CAAC,GAAG;AAAE,MAAI,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,MAAG,EAAE,gBAAc,KAAG,EAAE,iBAAe,KAAG,EAAE,YAAY,EAAE,SAAQ,EAAE,QAAQ,EAAE,QAAO,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,IAAC,CAAC;AAAE,MAAI,IAAE,IAAI,GAAG,GAAE,OAAM,KAAE;AAAE,SAAOA,IAAE,gBAAgB,GAAE,CAAC,CAAC,GAAE,EAAE,KAAK;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,YAAW,GAAE,SAAQ,GAAE,KAAI,GAAE,YAAW,GAAE,iBAAgB,EAAC,IAAE,GAAE,IAAE,CAAC,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,IAAI,GAAG,GAAE,OAAM,KAAE;AAAE,SAAOC,IAAE,gBAAgB,GAAE,CAAC,CAAC,GAAE,EAAE,KAAK;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,MAAK,QAAQ,GAAE,KAAK,cAAY,EAAE;AAAQ,QAAIA,MAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,EAAE,gBAAe,IAAE,EAAE,uBAAsB,IAAE,EAAE,sBAAqB,IAAE,IAAE,IAAE,EAAE,QAAQ,KAAI,IAAE,IAAE,IAAE,EAAE,QAAQ,MAAK,IAAE,IAAE,IAAE;AAAE,SAAK,WAAS;AAAA,iCACjrC,CAAC,KAAK,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gCAcR,CAAC;AAAA,kBACf,CAAC;AAAA,gDAC6BA,GAAC;AAAA;AAAA,oCAEb,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA,kCAKb,CAAC;AAAA,kDACe,CAAC;AAAA;AAAA,sCAEb,EAAE,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gCAOhB,CAAC;AAAA;AAAA;AAAA;AAAA,qCAII,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQjC;AAAC;AA9Cw8B,IA8Ct8B,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,MAAK,QAAQ,GAAE,KAAK,cAAY,EAAE;AAAQ,QAAIA,MAAE,EAAE,aAAY,IAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,EAAE,eAAc,IAAE,EAAE,gBAAe,IAAE,EAAE,eAAc,IAAE,EAAE,sBAAqB,IAAE,EAAE,uBAAsB,IAAE,EAAE,sBAAqB,IAAE,IAAE,IAAE,EAAE,QAAQ,OAAM,IAAE,IAAE,IAAE,EAAE,QAAQ,KAAI,IAAE,IAAE,IAAE,EAAE,QAAQ,MAAK,IAAE,IAAE,IAAE,IAAE;AAAE,SAAK,WAAS;AAAA,iCAC5U,CAAC,KAAK,CAAC,KAAK,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gCAiBd,CAAC;AAAA,mBACd,CAAC;AAAA,gDAC4BA,GAAC;AAAA;AAAA,oCAEb,EAAE,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA,kCAKZ,CAAC;AAAA,sBACb,CAAC;AAAA,kDAC2B,CAAC;AAAA;AAAA,sCAEb,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oCAMb,CAAC;AAAA,wBACb,CAAC;AAAA,oDAC2B,CAAC;AAAA;AAAA,wCAEb,EAAE,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kCAOhB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yBAMV,CAAC,MAAM,CAAC;AAAA,yBACR,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASrB;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,IAAG,GAAE,OAAM,EAAC,IAAE,GAAE,IAAE,GAAE,EAAC,YAAW,GAAE,SAAQ,GAAE,KAAI,GAAE,iBAAgB,EAAC,IAAE,GAAE,IAAE,CAAC,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,IAAI,GAAG,GAAE,OAAM,IAAE,GAAE,IAAEC,IAAE,gBAAgB,GAAE,CAAC,CAAC,GAAE,EAAE,KAAK,GAAE,IAAE,IAAI,GAAG,CAAC,GAAE,IAAEA,IAAE,gBAAgB,GAAE,CAAC,GAAE,CAAC,GAAE,EAAE,KAAK;AAAE,SAAOA,IAAE,8BAA8B,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,IAAG,GAAE,OAAM,GAAE,QAAO,EAAC,IAAE,GAAE,IAAE;AAAE,KAAG,CAAC,GAAE,CAAC,GAAE,aAAa;AAAE,MAAG,EAAC,YAAW,GAAE,SAAQ,GAAE,KAAI,GAAE,iBAAgB,EAAC,IAAE,GAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,MAAG,IAAE,IAAI,GAAG,GAAE,OAAM,CAAC,GAAE,IAAEC,IAAE,gBAAgB,GAAE,CAAC,CAAC,GAAE,EAAE,KAAK,GAAE,IAAE,IAAI,GAAG,CAAC,GAAE,IAAEA,IAAE,gBAAgB,GAAE,CAAC,GAAE,CAAC,GAAE,EAAE,KAAK;AAAE,SAAOA,IAAE,8BAA8B,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE;AAAC,MAAI,IAAE,IAAI,GAAGA,KAAE,OAAM,KAAE,GAAE,IAAE,EAAE,gBAAgB,GAAE,CAACD,GAAC,GAAE,SAAS;AAAE,MAAE,IAAI,GAAGC,KAAE,OAAM,MAAG,MAAG,CAAC;AAAE,MAAI,IAAE,EAAE,gBAAgB,GAAE,CAACD,GAAC,GAAE,SAAS;AAAE,SAAM,CAAC,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,CAAC,EAAC,QAAOA,KAAE,OAAM,GAAE,SAAQC,IAAC,MAAI;AAAC,MAAG,EAAC,GAAE,EAAC,IAAED,KAAE,EAAC,YAAW,GAAE,SAAQ,GAAE,KAAI,GAAE,qBAAoB,EAAC,IAAE,GAAE,IAAEC;AAAE,IAAE,OAAO,EAAE,MAAM,WAAS,GAAE,MAAI,uDAAuD,EAAE,MAAM,MAAM,GAAG;AAAE,MAAI,IAAE,CAAC,GAAE,CAAC;AAAE,IAAE,OAAO,EAAE,+BAA+B,GAAE,CAAC,GAAE,MAAI,wEAAwE,CAAC,mBAAmB,CAAC,GAAG;AAAE,MAAI,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,IAAE,GAAG,GAAE,GAAE,GAAE,CAAC;AAAE,SAAM,CAAC,GAAE,CAAC;AAAC,EAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE;AAAC,MAAI,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,EAAE,cAAcD,IAAE,KAAK,IAAE,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAEA,IAAC,GAAE,OAAM,EAAC,OAAM,CAAC,GAAE,CAAC,EAAC,GAAE,SAAQ,EAAC,CAAC,GAAE,IAAE,GAAG,GAAE,WAAU,QAAO,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,OAAM,EAAC,OAAMC,IAAC,GAAE,SAAQ,EAAC,CAAC;AAAE,SAAO,EAAE,8BAA8B,CAAC,GAAE,EAAE,8BAA8B,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,CAAC,EAAC,QAAOD,KAAE,OAAM,GAAE,SAAQC,IAAC,MAAI;AAAC,MAAG,EAAC,GAAE,EAAC,IAAED,KAAE,EAAC,UAAS,GAAE,MAAK,EAAC,IAAE,GAAE,IAAEC,KAAE,IAAE,EAAE,MAAM,QAAO,IAAE,EAAE,eAAe,GAAE,EAAE,KAAK,GAAE,IAAE,GAAE,IAAE,EAAE,mBAAmB,GAAE,CAAC,GAAE,IAAE,KAAG,MAAK,IAAE,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAE,IAAE,CAAC,GAAE,IAAE;AAAE,MAAG,GAAE;AAAC,QAAG,GAAE;AAAC,UAAI,IAAE,EAAE,QAAQ,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,IAAI,MAAM,CAAC;AAAE,eAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,IAAI,GAAE,CAAC,IAAE,EAAE,MAAM,EAAE,CAAC,CAAC;AAAE,UAAI,IAAE,GAAG,GAAE,EAAE,OAAM,EAAE,OAAM,GAAE,CAAC;AAAE,UAAE,EAAE,eAAe,GAAE,EAAE,KAAK;AAAE,UAAI,IAAE,EAAE,QAAQ,IAAI,EAAE,MAAM;AAAE,QAAE,SAAO;AAAA,IAAC,MAAM,KAAE,GAAG,GAAE,GAAE,CAAC;AAAE,MAAE,KAAK,CAAC,GAAE,IAAE,EAAE,iBAAiB,EAAE,QAAO,CAAC;AAAA,EAAC;AAAC,IAAE,2BAA2B,OAAM,GAAE,CAAC;AAAE,MAAG,CAAC,GAAE,CAAC,IAAE,EAAE,0BAA0B,EAAE,OAAM,CAAC,GAAE,IAAE;AAAE,QAAI,IAAE,EAAE,qBAAqB,GAAE,CAAC;AAAG,MAAI,IAAE,GAAG,GAAE,GAAE,GAAE,CAAC;AAAE,WAAQ,KAAK,EAAE,GAAE,8BAA8B,CAAC;AAAE,SAAO;AAAC,EAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,MAAK,GAAE,UAAS,EAAC,IAAE,GAAE,IAAE,EAAE,MAAM,QAAO,IAAE,EAAE,eAAe,GAAE,EAAE,KAAK,GAAE,IAAE,GAAE,IAAE,EAAE,mBAAmB,GAAE,CAAC,GAAE,IAAE;AAAE,OAAG,SAAO,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC,GAAE,IAAE,EAAE,iBAAiB,EAAE,QAAO,EAAE,MAAM,MAAM,IAAG,EAAE,2BAA2B,OAAM,GAAE,CAAC;AAAE,MAAG,CAAC,GAAE,CAAC,IAAE,EAAE,0BAA0B,EAAE,OAAM,CAAC,GAAE,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,CAAC,IAAG,CAAC,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,GAAE,EAAE,OAAM,OAAMA,GAAC,GAAE;AAAE,MAAG,GAAE;AAAC,QAAI,IAAE,EAAE,qBAAqB,GAAE,CAAC;AAAE,QAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAA,EAAC,MAAM,KAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,SAAOA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAE,KAAG,QAAMA,IAAE,8BAA8B,CAAC,GAAE;AAAC;AAAC,IAAIK,MAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,MAAI,KAAG;AAAA;AAAA;AAAX,IAEpqG,MAAI;AAAA;AAAA;AAAA;AAAA;AAAA,MAKF,KAAG;AAAA;AAAA;AAP+pG,IASpqG,MAAI,GAAG,EAAC,WAAU,KAAI,iBAAgB,KAAI,eAAc,GAAE,CAAC;AATymG,IASvmG,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEL,KAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,cAAYA,IAAE,IAAI,CAAC,GAAE,MAAI,EAAE,CAAC,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,CAAC;AAAE,QAAI,IAAE,EAAE,QAAO,IAAE,GAAG,CAAC,GAAE,IAAEA,IAAE,IAAI,OAAG,EAAE,CAAC,CAAC,EAAE,KAAK,GAAG,GAAE,IAAEA,IAAE,IAAI,CAAC,GAAE,MAAI,EAAE,CAAC,IAAE,EAAE,CAAC,CAAC,EAAE,KAAK,GAAG,GAAE,IAAE,CAAC,aAAY,aAAY,aAAY,WAAW,EAAE,MAAM,GAAE,CAAC,GAAE,IAAE,MAAI,YAAU,IAAE;AAAE,QAAG,MAAI,GAAE;AAAC,WAAK,WAAS;AAAA,sBACvY,CAAC;AAAA,oBACH,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,wCAKmB,CAAC;AAAA;AAAA,4CAEG,CAAC;AAAA;AAAA;AAAA;AAAA;AAIrC;AAAA,IAAM;AAAC,SAAK,WAAS;AAAA,QACrB,CAAC,YAAY,CAAC,IAAI,CAAC;AAAA,QACnB,CAAC,UAAU,CAAC,IAAI,CAAC;AAAA;AAAA;AAAA,UAGf,CAAC;AAAA,8BACmB,CAAC;AAAA;AAAA,iDAEkB,CAAC;AAAA;AAAA,qDAEG,CAAC;AAAA;AAAA;AAAA,UAG5C,CAAC;AAAA,yBACc,CAAC;AAAA;AAAA;AAAA,EAErB;AAAC;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,eAAa,MAAG,KAAK,eAAa,MAAG,KAAK,cAAYA,IAAE,IAAI,CAAC,GAAE,MAAI,EAAE,CAAC,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,CAAC;AAAE,QAAI,IAAE,EAAE,QAAO,IAAE,GAAG,CAAC,GAAE,IAAEA,IAAE,IAAI,OAAG,EAAE,CAAC,CAAC,EAAE,KAAK,GAAG,GAAE,IAAEA,IAAE,IAAI,CAAC,GAAE,MAAI,EAAE,CAAC,IAAE,EAAE,CAAC,CAAC,EAAE,KAAK,GAAG,GAAE,IAAE,GAAG,MAAK,CAAC,GAAE,IAAE,GAAG,UAAS,CAAC,GAAE,IAAE,GAAG,EAAE,IAAE,CAAC,CAAC,MAAM,KAAK,YAAY,IAAE,CAAC,CAAC,IAAG,IAAE,MAAI,IAAE,WAAS,QAAQ,EAAE,MAAM,EAAE,EAAE,KAAK,CAAC,KAAI,IAAE,MAAI,YAAU,IAAE,GAAE,IAAE;AAAG,QAAG,MAAI,GAAE;AAAC,UAAI,IAAE;AAAA,UACpY,CAAC;AAAA;AAAA,0CAE+B,CAAC;AAAA;AAAA,8CAEG,CAAC;AAAA;AAAA;AAAA;AAGvC,UAAE;AAAA,UACA,CAAC;AAAA,UACD,CAAC;AAAA,sCAC2B,EAAE,KAAK,CAAC,MAAM,CAAC;AAAA,UAC3C,EAAE,IAAE,CAAC,CAAC;AAAA,aACH,CAAC;AAAA,YACF,CAAC;AAAA,wCAC2B,EAAE,KAAK,CAAC,MAAM,CAAC;AAAA;AAAA;AAAA,IAEhD,OAAK;AAAC,UAAI,IAAE;AAAA,UACT,CAAC;AAAA,UACD,CAAC,SAAS,CAAC;AAAA,UACX,CAAC,UAAU,CAAC;AAAA,UACZ,CAAC;AAAA;AAAA,6CAEkC,CAAC;AAAA,kDACI,CAAC;AAAA;AAAA;AAE3C,UAAE;AAAA,UACA,CAAC;AAAA,UACD,CAAC;AAAA,sCAC2B,EAAE,KAAK,CAAC,MAAM,CAAC;AAAA,UAC3C,EAAE,IAAE,CAAC,CAAC;AAAA,aACH,CAAC;AAAA,YACF,CAAC;AAAA,wCAC2B,EAAE,KAAK,CAAC,MAAM,CAAC;AAAA;AAAA;AAAA,UAG7C,EAAE,IAAE,CAAC,CAAC;AAAA,aACH,EAAE,IAAE,CAAC,CAAC,MAAM,KAAK,YAAY,IAAE,CAAC,CAAC;AAAA,YAClC,CAAC;AAAA,wCAC2B,EAAE,KAAK,CAAC,MAAM,CAAC;AAAA,YAC3C,EAAE,IAAE,CAAC,CAAC;AAAA,eACH,CAAC;AAAA,cACF,CAAC;AAAA,0CAC2B,EAAE,KAAK,CAAC,MAAM,CAAC;AAAA;AAAA;AAAA;AAAA,IAGlD;AAAC,SAAK,WAAS;AAAA,cACR,CAAC,YAAY,CAAC,IAAI,CAAC;AAAA,cACnB,CAAC,UAAU,CAAC,IAAI,CAAC;AAAA;AAAA;AAAA,UAGrB,CAAC;AAAA;AAAA,UAED,CAAC;AAAA;AAAA;AAAA;AAAA,EAGN;AAAC;AAAE,IAAI,MAAI,CAAC,EAAC,QAAOD,KAAE,SAAQ,GAAE,OAAMC,IAAC,MAAI;AAAC,MAAG,EAAC,GAAE,EAAC,IAAED,KAAE,EAAC,UAAS,GAAE,MAAK,EAAC,IAAEC,KAAE,IAAE,EAAE,EAAE,QAAQ,6BAA6B,IAAE,IAAI,GAAG,EAAE,OAAM,GAAE,CAAC,IAAE,IAAI,GAAG,EAAE,OAAM,GAAE,CAAC;AAAE,SAAO,EAAE,gBAAgB,GAAE,CAAC,CAAC,GAAE,EAAE,KAAK;AAAC;AAAtM,IAAwM,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,MAAI;AAAA;AAAR,IACjP,MAAI;AAAA;AAAA;AAAA,MAGrB,KAAG;AAAA;AAAA;AAJ+P,IAMpQ,MAAI,GAAG,EAAC,WAAU,KAAI,iBAAgB,IAAG,CAAC;AAN0N,IAMxN,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,OAAO,GAAE,KAAK,iBAAe,CAAC,EAAC,MAAK,QAAO,MAAK,QAAO,CAAC,GAAE,KAAK,cAAY,CAAC,GAAE,CAAC,GAAE,KAAK,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8BAQzNA,MAAE,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0BAUPA,MAAE,CAAC;AAAA;AAAA;AAAA,EAExB;AAAC;AAAE,IAAI,MAAI;AAAA;AAAA;AAAA;AAAA;AAAR,IAIO,MAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAJX,IAsBN,KAAG,GAAG,EAAC,WAAU,KAAI,iBAAgB,KAAI,kBAAiB,KAAE,CAAC;AAtBvD,IAsByD,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG;AAAP,IAAuB,KAAG,GAAG,EAAC,WAAU,IAAG,iBAAgB,IAAG,iBAAgB,MAAG,eAAc,GAAE,CAAC;AAAlG,IAAoG,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,QAAO,EAAC,IAAE,GAAE,EAAC,KAAI,EAAC,IAAE,GAAE,IAAE,EAAE,eAAe,CAAC,CAAC,GAAE,EAAE,KAAK,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,kBAAiB,GAAE,UAAS,MAAE,EAAC,CAAC,GAAE,IAAE,EAAE,qBAAqB,EAAE,OAAM,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,GAAE,GAAE,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,MAAK,GAAE,UAAS,MAAE,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,GAAE,GAAE,EAAC,GAAE,SAAQA,IAAC,CAAC;AAAE,SAAOA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,QAAO,EAAC,IAAE,GAAE,EAAC,YAAW,GAAE,MAAK,GAAE,YAAW,EAAC,IAAE,GAAE,IAAE,IAAE,IAAE,GAAG,EAAC,QAAO,EAAC,QAAO,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,KAAI,EAAE,MAAM,SAAO,EAAC,EAAC,CAAC,GAAE,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,IAAI,GAAG,GAAE,GAAE,CAAC,GAAE,IAAE,CAAC,CAAC,CAAC,CAAC,GAAE,IAAEA,IAAE,gBAAgB,GAAE,CAAC,CAAC,GAAE,SAAQ,CAAC;AAAE,SAAO,KAAGA,IAAE,8BAA8B,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,MAAI,KAAG;AAAA;AAAA;AAAX,IAEz1C,MAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUJ,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE;AAAE,MAAGC,IAAE,mBAAmB,CAAC,CAAC,CAAC,GAAE;AAAC,QAAI,IAAEA,IAAE,QAAQ,IAAI,EAAE,MAAM,GAAE,CAAC,GAAE,CAAC,IAAE,GAAG,EAAE,QAAO,EAAE,OAAM,EAAE,KAAK;AAAE,WAAOA,IAAE,eAAe,GAAE,EAAE,OAAM,CAAC;AAAA,EAAC;AAAC,MAAI;AAAE,SAAO,EAAE,EAAE,QAAQ,6BAA6B,IAAE,IAAE,IAAI,GAAG,EAAE,OAAM,GAAG,IAAE,IAAE,IAAI,GAAG,EAAE,OAAM,GAAG,GAAEA,IAAE,gBAAgB,GAAE,CAAC,CAAC,GAAE,EAAE,KAAK;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG;AAAwB,SAAS,IAAID,KAAE;AAAC,IAAE,KAAK,+FAA+F;AAAE,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,GAAE,QAAO,EAAC,IAAE,GAAE,EAAC,eAAc,GAAE,cAAa,GAAE,gBAAe,EAAC,IAAE,GAAE,IAAEC,IAAE,SAAS,EAAE,MAAM,GAAE,IAAEA,IAAE,SAAS,EAAE,MAAM,GAAE,EAAC,iBAAgB,EAAC,IAAE,IAAI,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,SAAOA,IAAE,eAAe,CAAC,EAAE,MAAM,GAAE,SAAQ,IAAI,WAAW,CAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG;AAAwB,SAAS,IAAID,KAAE;AAAC,IAAE,KAAK,+FAA+F;AAAE,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,GAAE,QAAO,EAAC,IAAE,GAAE,EAAC,eAAc,GAAE,cAAa,GAAE,gBAAe,GAAE,oBAAmB,EAAC,IAAE,GAAE,IAAEC,IAAE,SAAS,EAAE,MAAM,GAAE,IAAEA,IAAE,SAAS,EAAE,MAAM,GAAE,EAAC,iBAAgB,GAAE,cAAa,EAAC,IAAE,IAAI,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,SAAM,CAACA,IAAE,eAAe,CAAC,EAAE,MAAM,GAAE,SAAQ,IAAI,WAAW,CAAC,CAAC,GAAEA,IAAE,eAAe,CAAC,GAAE,SAAQ,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG;AAAwB,SAAS,IAAID,KAAE;AAAC,IAAE,KAAK,+FAA+F;AAAE,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,GAAE,QAAO,EAAC,IAAE,GAAE,EAAC,eAAc,GAAE,cAAa,GAAE,gBAAe,GAAE,cAAa,EAAC,IAAE,GAAE,IAAEC,IAAE,SAAS,EAAE,MAAM,GAAE,IAAEA,IAAE,SAAS,EAAE,MAAM,GAAE,IAAE,GAAE,IAAE,GAAE,IAAE,GAAE,IAAE,GAAE,EAAC,iBAAgB,GAAE,gBAAe,EAAC,IAAE,IAAI,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,SAAM,CAACA,IAAE,eAAe,CAAC,EAAE,MAAM,GAAE,SAAQ,IAAI,WAAW,CAAC,CAAC,GAAEA,IAAE,eAAe,CAAC,EAAE,MAAM,GAAE,WAAU,IAAI,aAAa,CAAC,CAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,SAAS,GAAE,KAAK,cAAY,CAAC,GAAEA,GAAC,GAAE,KAAK,WAAS;AAAA;AAAA;AAAA;AAAA,8BAIl/D,CAAC,YAAY,CAAC;AAAA;AAAA;AAAA;AAAA,EAGvC;AAAC;AAAE,IAAI,MAAI,CAAAD,QAAG;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,SAAQ,EAAC,IAAE,GAAE,EAAC,OAAM,GAAE,OAAM,GAAE,SAAQ,GAAE,UAAS,EAAC,IAAE,GAAE,IAAE,EAAE,cAAc,EAAE,KAAK,GAAE,IAAE,IAAI,GAAG,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,OAAM,CAAC,CAAC,EAAC,EAAC,CAAC,GAAE,IAAEA,IAAE,gBAAgB,GAAE,CAAC,CAAC,GAAE,CAAC;AAAE,EAAAA,IAAE,8BAA8B,CAAC;AAAE,MAAI,IAAE,CAAC,GAAG,EAAE,OAAM,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,SAAOA,IAAE,8BAA8B,CAAC,GAAE;AAAC;AAAlX,IAAoX,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE;AAAE,MAAG,EAAE,UAAQ,aAAY;AAAC,QAAI,IAAE,GAAG,EAAC,QAAO,EAAC,OAAM,EAAC,GAAE,SAAQC,IAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,OAAM,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,MAAK,GAAE,MAAK,EAAC,GAAE,SAAQA,IAAC,CAAC;AAAE,WAAOA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAE;AAAA,EAAC,MAAM,QAAO,GAAG,EAAC,OAAM,EAAC,OAAM,EAAE,OAAM,OAAM,EAAE,OAAM,OAAM,EAAE,UAAQ,WAAS,KAAG,EAAC,GAAE,SAAQA,IAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE;AAAE,MAAG,EAAE,UAAQ,SAAS,OAAM,IAAI,MAAM,8CAA8C;AAAE,MAAG,EAAE,UAAQ,aAAY;AAAC,QAAI,IAAE,GAAG,EAAC,QAAO,EAAC,OAAM,EAAC,GAAE,SAAQC,IAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,OAAM,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,MAAK,GAAE,MAAK,EAAC,GAAE,SAAQA,IAAC,CAAC;AAAE,WAAOA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAE;AAAA,EAAC,MAAM,QAAO,GAAG,EAAC,OAAM,EAAC,OAAM,EAAE,OAAM,OAAM,EAAE,OAAM,OAAM,EAAC,GAAE,SAAQA,IAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,MAAK,EAAC,IAAE;AAAE,MAAG,EAAE,WAAS,EAAE,QAAO,GAAG,EAAC,QAAO,EAAC,OAAM,EAAE,CAAC,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,KAAI,EAAC,EAAC,CAAC;AAAE,MAAI,IAAE,EAAE,CAAC,EAAE,OAAM,IAAE,EAAE,CAAC,EAAE;AAAM,IAAE,QAAQ,OAAG;AAAC,MAAE,kBAAkB,GAAE,EAAE,OAAM,uDAAuD,GAAE,EAAE,OAAO,MAAI,EAAE,OAAM,MAAI,uDAAuD;AAAA,EAAC,CAAC;AAAE,MAAI,IAAE,CAAC,GAAE,IAAE,EAAE,IAAI,OAAG;AAAC,QAAI,IAAE,GAAG,EAAC,QAAO,EAAC,OAAM,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,KAAI,EAAC,EAAC,CAAC;AAAE,WAAO,EAAE,KAAK,CAAC,GAAE;AAAA,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,GAAE,SAAQA,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC;AAAE,SAAO,EAAE,QAAQ,OAAGA,IAAE,8BAA8B,CAAC,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,iBAAe,CAAC,EAAC,MAAK,SAAQ,MAAK,QAAO,CAAC,GAAE,KAAK,cAAYA,IAAE,IAAI,CAAC,GAAE,MAAI,EAAE,CAAC,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,CAAC;AAAE,QAAI,IAAE,EAAE,QAAO,IAAE,GAAG,CAAC,GAAE,IAAEA,IAAE,IAAI,OAAG,EAAE,CAAC,CAAC,EAAE,KAAK,GAAG,GAAE,IAAEA,IAAE,IAAI,CAAC,GAAE,MAAI,EAAE,CAAC,IAAE,EAAE,CAAC,CAAC,EAAE,KAAK,GAAG,GAAE,IAAE,CAAC,aAAY,aAAY,aAAY,WAAW,EAAE,MAAM,GAAE,CAAC;AAAE,QAAG,MAAI,GAAE;AAAC,WAAK,WAAS;AAAA,sBAC58E,CAAC;AAAA,oBACH,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUb;AAAA,IAAM;AAAC,SAAK,WAAS;AAAA,QACrB,CAAC,YAAY,CAAC,IAAI,CAAC;AAAA,QACnB,CAAC,UAAU,CAAC,IAAI,CAAC;AAAA;AAAA;AAAA,UAGf,CAAC;AAAA;AAAA;AAAA;AAAA,YAIC,CAAC;AAAA,2BACc,CAAC;AAAA;AAAA;AAAA;AAAA,EAGvB;AAAC;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,eAAa,MAAG,KAAK,eAAa,MAAG,KAAK,iBAAe,CAAC,EAAC,MAAK,SAAQ,MAAK,QAAO,CAAC,GAAE,KAAK,cAAYA,IAAE,IAAI,CAAC,GAAE,MAAI,EAAE,CAAC,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,CAAC;AAAE,QAAI,IAAE,EAAE,QAAO,IAAE,GAAG,CAAC,GAAE,IAAEA,IAAE,IAAI,OAAG,EAAE,CAAC,CAAC,EAAE,KAAK,GAAG,GAAE,IAAEA,IAAE,IAAI,CAAC,GAAE,MAAI,EAAE,CAAC,IAAE,EAAE,CAAC,CAAC,EAAE,KAAK,GAAG,GAAE,IAAE,GAAG,MAAK,CAAC,GAAE,IAAE,GAAG,UAAS,CAAC,GAAE,IAAE,GAAG,EAAE,IAAE,CAAC,CAAC,MAAM,KAAK,YAAY,IAAE,CAAC,CAAC,IAAG,IAAE,MAAI,IAAE,WAAS,QAAQ,EAAE,MAAM,EAAE,EAAE,KAAK,CAAC,KAAI,IAAE,CAAC,GAAG,CAAC,oBAAmB,GAAG,EAAE,IAAE,CAAC,CAAC;AAAA,YAC9a,CAAC;AAAA,SACL,MAAI,IAAE,KAAG;AAAA;AAAA,SAER,EAAE,IAAE,CAAC,CAAC;AAAA,YACH,EAAE,IAAE,CAAC,CAAC,MAAM,KAAK,YAAY,IAAE,CAAC,CAAC,OAAM,MAAI,IAAE,KAAG,KAAK,EAAE,IAAE,CAAC,CAAC;AAAA,cACzD,CAAC,KAAK,GAAE,IAAE,MAAI,IAAE,4BAA0B,8DAA6D,IAAE;AAAG,aAAQ,IAAE,GAAE,IAAE,MAAI,IAAE,IAAE,GAAE,IAAE,GAAE,IAAI,MAAG;AAAA,UACnJ,EAAE,CAAC,CAAC;AAAA,cACA,CAAC;AAAA,mBACI,CAAC;AAAA;AAAA,YAER,CAAC;AAAA,mBACM,CAAC,uBAAuB,EAAE,KAAK,CAAC,MAAM,CAAC;AAAA;AAAA;AAElD,SAAG,MAAI,IAAE,OAAK,MAAK,KAAK,WAAS;AAAA,cAC3B,CAAC,YAAY,CAAC,IAAI,CAAC;AAAA,cACnB,CAAC,UAAU,CAAC,IAAI,CAAC;AAAA;AAAA;AAAA,UAGrB,CAAC;AAAA;AAAA,UAED,CAAC;AAAA;AAAA;AAAA;AAAA,EAGN;AAAC;AAAE,IAAI,KAAG,CAAAD,QAAG;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,UAAS,GAAE,eAAc,EAAC,IAAE;AAAE,MAAG,EAAE,cAAc,EAAE,KAAK,MAAI,GAAE;AAAC,QAAI,IAAE,EAAE,IAAI,CAAC,GAAE,MAAI,EAAE,CAAC,IAAE,EAAE,MAAM,CAAC,IAAE,EAAE,CAAC,CAAC;AAAE,WAAO,GAAG,EAAC,SAAQC,KAAE,OAAM,EAAC,OAAM,GAAE,OAAM,GAAE,OAAM,EAAE,MAAK,EAAC,CAAC;AAAA,EAAC;AAAC,MAAI,IAAE,EAAE,EAAE,QAAQ,6BAA6B,IAAE,IAAI,GAAG,EAAE,OAAM,GAAE,CAAC,IAAE,IAAI,GAAG,EAAE,OAAM,GAAE,CAAC,GAAE,IAAE,CAAC,CAAC,CAAC,CAAC;AAAE,SAAOA,IAAE,gBAAgB,GAAE,CAAC,CAAC,GAAE,EAAE,OAAM,CAAC;AAAC;AAArW,IAAuW,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,MAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAR,IASla,MAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAgBF,KAAG;AAAA;AAAA;AAzB6Z,IA2Bla,MAAI,GAAG,EAAC,WAAU,KAAI,iBAAgB,IAAG,CAAC;AA3BwX,IA2BtX,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,MAAK,GAAE,UAAS,EAAC,IAAE,GAAE,IAAE,EAAE,MAAM,QAAO,IAAE,CAAC,GAAE,IAAE,EAAE,eAAe,GAAE,EAAE,KAAK,GAAE,IAAE,GAAE,IAAE,EAAE,mBAAmB,GAAE,CAAC,GAAE,IAAE;AAAE,OAAG,SAAO,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC,GAAE,IAAE,EAAE,iBAAiB,EAAE,QAAO,CAAC,GAAE,EAAE,KAAK,CAAC,IAAG,EAAE,2BAA2B,QAAO,GAAE,CAAC;AAAE,MAAI;AAAE,MAAGA,IAAE,mBAAmB,CAAC,CAAC,CAAC,GAAE;AAAC,QAAI,IAAEA,IAAE,QAAQ,IAAI,EAAE,MAAM,EAAE,QAAO,EAAC,SAAQ,GAAE,UAAS,GAAE,UAAS,EAAC,IAAE,GAAG,EAAE,OAAM,EAAE,OAAM,GAAE,CAAC;AAAE,QAAEA,IAAE,eAAe,GAAE,GAAE,CAAC;AAAA,EAAC,OAAK;AAAC,QAAG,CAAC,GAAE,CAAC,IAAE,EAAE,0BAA0B,EAAE,OAAM,CAAC,GAAE,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,CAAC,IAAG,CAAC,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAE,KAAK,GAAE,IAAE,GAAG,GAAE,GAAE,QAAOA,GAAC;AAAE,QAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,EAAE,KAAK,CAAC,GAAE,EAAE,KAAK,CAAC;AAAA,EAAC;AAAC,MAAG,GAAE;AAAC,MAAE,KAAK,CAAC;AAAE,QAAI,IAAE,EAAE,qBAAqB,EAAE,OAAM,CAAC;AAAE,QAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAA,EAAC;AAAC,SAAO,EAAE,QAAQ,OAAGA,IAAE,8BAA8B,CAAC,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,oBAAmB,GAAE,mBAAkB,GAAE,SAAQ,EAAC,IAAE,GAAE,EAAC,kBAAiB,EAAC,IAAE,GAAE,IAAE,EAAE,IAAI,OAAGC,IAAE,SAAS,EAAE,MAAM,CAAC,GAAE,IAAE,EAAE,IAAI,OAAG,EAAE,KAAK,GAAE,IAAEA,IAAE,SAAS,EAAE,MAAM,GAAE,IAAEA,IAAE,SAAS,EAAE,MAAM,GAAE,CAAC,GAAE,GAAE,CAAC,IAAE,GAAG,GAAE,GAAE,GAAE,EAAE,OAAM,EAAE,OAAM,GAAE,EAAE,OAAM,CAAC,GAAE,IAAE,EAAE,IAAI,OAAGA,IAAE,eAAe,CAAC,EAAE,MAAM,GAAE,SAAQ,CAAC,CAAC,GAAE,IAAEA,IAAE,eAAe,GAAE,EAAE,OAAM,CAAC;AAAE,SAAO,EAAE,OAAO,CAAC,CAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,QAAO,GAAE,QAAO,GAAE,QAAO,EAAC,IAAE,GAAE,IAAEC,IAAE,SAAS,EAAE,MAAM,GAAE,IAAEA,IAAE,SAAS,EAAE,MAAM,GAAE,IAAEA,IAAE,SAAS,EAAE,MAAM,GAAE,CAAC,GAAE,CAAC,IAAE,GAAG,GAAE,EAAE,OAAM,EAAE,OAAM,GAAE,EAAE,OAAM,GAAE,EAAE,KAAK,GAAE,IAAEA,IAAE,eAAe,CAAC,EAAE,MAAM,GAAE,SAAQ,CAAC,GAAE,IAAEA,IAAE,eAAe,CAAC,EAAE,MAAM,GAAE,EAAE,OAAM,CAAC;AAAE,SAAM,CAAC,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,GAAE,QAAO,GAAE,cAAa,GAAE,qBAAoB,EAAC,IAAE,GAAE,EAAC,mBAAkB,EAAC,IAAE,GAAE,IAAEC,IAAE,SAAS,EAAE,MAAM,GAAE,IAAEA,IAAE,SAAS,EAAE,MAAM,GAAE,IAAEA,IAAE,SAAS,EAAE,MAAM,GAAE,IAAE,EAAE,IAAI,OAAGA,IAAE,SAAS,EAAE,MAAM,CAAC,GAAE,IAAE,EAAE,IAAI,OAAG,EAAE,KAAK,GAAE,CAAC,GAAE,CAAC,IAAE,GAAG,GAAE,EAAE,OAAM,GAAE,EAAE,OAAM,EAAE,OAAM,GAAE,EAAE,OAAM,GAAE,GAAE,CAAC;AAAE,SAAOA,IAAE,eAAe,GAAE,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,KAAG,CAAAD,QAAG;AAAC,MAAG,EAAC,SAAQ,GAAE,OAAMC,IAAC,IAAED,KAAE,EAAC,OAAM,GAAE,MAAK,GAAE,MAAK,GAAE,OAAM,EAAC,IAAEC,KAAE,IAAE,GAAG,GAAE,GAAE,GAAE,CAAC;AAAE,SAAO,EAAE,eAAe,CAAC,EAAE,MAAM,GAAE,GAAE,CAAC;AAAC;AAA3H,IAA6H,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,MAAI;AAAR,IAA0B,MAAI,GAAG,EAAC,WAAU,IAAG,CAAC;AAAhD,IAAkD,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,MAAI,KAAG;AAAA;AAAA;AAAX,IAEv6E,MAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAFm6E,IAYv6E,MAAI,GAAG,EAAC,WAAU,KAAI,iBAAgB,IAAG,CAAC;AAZ63E,IAY33E,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,MAAI,KAAG;AAAA;AAAA;AAAX,IAElG,MAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAF8F,IAYlG,MAAI,GAAG,EAAC,WAAU,KAAI,iBAAgB,IAAG,CAAC;AAZwD,IAYtD,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE,GAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,cAAY,CAAC;AAAE,QAAG,CAAC,GAAE,GAAE,GAAE,CAAC,IAAE;AAAE,SAAK,cAAY,CAAC,GAAEA,KAAE,GAAE,CAAC;AAAE,QAAI,IAAE,CAAC,KAAGA,MAAE,IAAE,IAAE,IAAE,GAAE,KAAG,IAAE,IAAE,IAAE,IAAE,CAAC,GAAE,IAAE,CAAC,KAAGA,MAAE,IAAEA,MAAE,IAAEA,KAAE,KAAG,IAAE,IAAE,IAAE,IAAE,CAAC,GAAE;AAAE,QAAE,IAAE,0EAAwE,IAAE,+CAA8C,KAAK,WAAS;AAAA;AAAA,YAE/Z,EAAE,CAAC,IAAE,EAAE,CAAC,CAAC;AAAA,YACT,EAAE,CAAC,IAAE,EAAE,CAAC,CAAC;AAAA,uCACkB,CAAC,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mCASb,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAoB/B;AAAC;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE,GAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,eAAa,MAAG,KAAK,eAAa,MAAG,KAAK,cAAY,CAAC;AAAE,QAAG,CAAC,GAAE,GAAE,GAAE,CAAC,IAAE;AAAE,SAAK,cAAY,CAAC,GAAEA,KAAE,GAAE,CAAC;AAAE,QAAI,IAAE,CAAC,KAAGA,MAAE,IAAE,IAAE,IAAE,GAAE,KAAG,IAAE,IAAE,IAAE,IAAE,CAAC,GAAE,IAAE,CAAC,KAAGA,MAAE,IAAEA,MAAE,IAAEA,KAAE,KAAG,IAAE,IAAE,IAAE,IAAE,CAAC,GAAE;AAAE,QAAE,IAAE,0EAAwE,IAAE,+CAA8C,KAAK,WAAS;AAAA;AAAA,YAE7W,EAAE,CAAC,IAAE,EAAE,CAAC,CAAC;AAAA,YACT,EAAE,CAAC,IAAE,EAAE,CAAC,CAAC;AAAA,YACT,EAAE,CAAC,IAAE,EAAE,CAAC,CAAC;AAAA,uCACkB,CAAC,OAAO,CAAC;AAAA,uCACT,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mCAcL,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gCAQJ,IAAE,CAAC;AAAA,uCACI,IAAE,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgDrC;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,QAAO,EAAC,IAAE,GAAE,EAAC,cAAa,GAAE,kBAAiB,GAAE,MAAK,EAAC,IAAE,GAAE,CAAC,GAAE,CAAC,IAAE,GAAE,IAAE,EAAE,EAAE,QAAQ,6BAA6B,IAAE,IAAI,GAAG,EAAE,OAAM,GAAE,GAAE,GAAE,CAAC,IAAE,IAAI,GAAG,EAAE,OAAM,GAAE,GAAE,GAAE,CAAC;AAAE,SAAOC,IAAE,gBAAgB,GAAE,CAAC,CAAC,GAAE,SAAS;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,IAAI,GAAE,KAAK,cAAY,CAAC,GAAE,KAAK,cAAYA;AAAE,QAAG,CAAC,EAAC,GAAE,CAAC,IAAEA,KAAE,CAAC,EAAC,GAAE,CAAC,IAAE,GAAE,IAAE,CAAC,KAAG,IAAE,IAAE,IAAE,IAAE,GAAE,KAAG,IAAE,IAAE,IAAE,IAAE,CAAC,GAAE,IAAE,CAAC,KAAG,IAAE,IAAE,IAAE,IAAE,GAAE,KAAG,IAAE,IAAE,IAAE,IAAE,CAAC,GAAE,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,GAAE,IAAE,IAAE,GAAE,IAAE,IAAE,GAAE,IAAE,KAAK,KAAK,CAAC,IAAE,IAAE,GAAE,IAAE,KAAK,KAAK,CAAC,IAAE,IAAE;AAAE,SAAK,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0CAU7hB,CAAC;AAAA,yCACF,CAAC;AAAA;AAAA,6CAEG,CAAC;AAAA,4CACF,CAAC;AAAA;AAAA,oCAET,CAAC;AAAA,mCACF,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kCAcF,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oCAQC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sDAMiB,IAAE,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qDAMJ,IAAE,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA8BnD;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,QAAO,GAAE,IAAG,EAAC,IAAE,GAAE,EAAC,cAAa,EAAC,IAAE,GAAE,IAAE,IAAI,GAAG,EAAE,OAAM,EAAE,OAAM,CAAC;AAAE,SAAOC,IAAE,gBAAgB,GAAE,CAAC,CAAC,GAAE,EAAE,KAAK;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE,GAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,cAAY,CAAC;AAAE,QAAG,CAAC,GAAE,GAAE,GAAE,CAAC,IAAE;AAAE,SAAK,cAAY,CAAC,GAAEA,KAAE,GAAE,CAAC;AAAE,QAAI,IAAE,CAAC,KAAGA,MAAE,IAAE,IAAE,IAAE,GAAE,KAAG,IAAE,IAAE,IAAE,IAAE,CAAC,GAAE,IAAE,CAAC,KAAGA,MAAE,IAAEA,MAAE,IAAEA,KAAE,KAAG,IAAE,IAAE,IAAE,IAAE,CAAC,GAAE,IAAE,IAAE,QAAM,OAAM;AAAE,QAAE,IAAE,8EAA4E,IAAE,+CAA8C,KAAK,WAAS;AAAA;AAAA,YAE5iB,EAAE,CAAC,IAAE,EAAE,CAAC,CAAC;AAAA,YACT,EAAE,CAAC,IAAE,EAAE,CAAC,CAAC;AAAA,uCACkB,CAAC,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mCASb,CAAC;AAAA;AAAA;AAAA;AAAA,8DAI0B,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAK1D;AAAC;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE,GAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,eAAa,MAAG,KAAK,eAAa,MAAG,KAAK,cAAY,CAAC;AAAE,QAAG,CAAC,GAAE,GAAE,GAAE,CAAC,IAAE;AAAE,SAAK,cAAY,CAAC,GAAEA,KAAE,GAAE,CAAC;AAAE,QAAI,IAAE,CAAC,KAAGA,MAAE,IAAE,IAAE,IAAE,GAAE,KAAG,IAAE,IAAE,IAAE,IAAE,CAAC,GAAE,IAAE,CAAC,KAAGA,MAAE,IAAEA,MAAE,IAAEA,KAAE,KAAG,IAAE,IAAE,IAAE,IAAE,CAAC,GAAE,IAAE,IAAE,QAAM,OAAM;AAAE,QAAE,IAAE,8EAA4E,IAAE,+CAA8C,KAAK,WAAS;AAAA;AAAA,YAEjY,EAAE,CAAC,IAAE,EAAE,CAAC,CAAC;AAAA,YACT,EAAE,CAAC,IAAE,EAAE,CAAC,CAAC;AAAA,YACT,EAAE,CAAC,IAAE,EAAE,CAAC,CAAC;AAAA,uCACkB,CAAC,OAAO,CAAC;AAAA,uCACT,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mCAcL,CAAC;AAAA;AAAA;AAAA;AAAA,8DAI0B,CAAC;AAAA;AAAA;AAAA,gCAG/B,IAAE,CAAC;AAAA,uCACI,IAAE,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAarC;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,QAAO,EAAC,IAAE,GAAE,EAAC,cAAa,GAAE,kBAAiB,GAAE,MAAK,EAAC,IAAE,GAAE,CAAC,GAAE,CAAC,IAAE,GAAE,IAAE,EAAE,EAAE,QAAQ,6BAA6B,IAAE,IAAI,GAAG,EAAE,OAAM,GAAE,GAAE,GAAE,CAAC,IAAE,IAAI,GAAG,EAAE,OAAM,GAAE,GAAE,GAAE,CAAC;AAAE,SAAOC,IAAE,gBAAgB,GAAE,CAAC,CAAC,GAAE,EAAE,KAAK;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,IAAI,GAAE,KAAK,cAAY,CAAC,GAAE,KAAK,cAAYA;AAAE,QAAG,CAAC,EAAC,GAAE,CAAC,IAAEA,KAAE,CAAC,EAAC,GAAE,CAAC,IAAE,GAAE,IAAE,CAAC,KAAG,IAAE,IAAE,IAAE,IAAE,GAAE,KAAG,IAAE,IAAE,IAAE,IAAE,CAAC,GAAE,IAAE,CAAC,KAAG,IAAE,IAAE,IAAE,IAAE,GAAE,KAAG,IAAE,IAAE,IAAE,IAAE,CAAC,GAAE,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,GAAE,IAAE,IAAE,GAAE,IAAE,IAAE,GAAE,IAAE,KAAK,KAAK,CAAC,IAAE,IAAE,GAAE,IAAE,KAAK,KAAK,CAAC,IAAE,IAAE;AAAE,SAAK,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0CAU3hB,CAAC;AAAA,yCACF,CAAC;AAAA;AAAA,6CAEG,CAAC;AAAA,4CACF,CAAC;AAAA;AAAA,oCAET,CAAC;AAAA,mCACF,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kCAcF,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oCAQC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,sBAKf,EAAE,CAAC,CAAC;AAAA,sCACY,EAAE,CAAC,CAAC;AAAA;AAAA;AAAA,wBAGlB,EAAE,CAAC,CAAC;AAAA,wCACY,EAAE,CAAC,CAAC;AAAA;AAAA;AAAA,4BAGhB,CAAC;AAAA,kBACX,CAAC;AAAA;AAAA;AAAA;AAAA,4BAIS,CAAC;AAAA,kBACX,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYd;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,QAAO,GAAE,IAAG,EAAC,IAAE,GAAE,EAAC,cAAa,EAAC,IAAE,GAAE,IAAE,IAAI,GAAG,EAAE,OAAM,EAAE,OAAM,CAAC;AAAE,SAAOC,IAAE,gBAAgB,GAAE,CAAC,CAAC,GAAE,EAAE,KAAK;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE;AAAC,SAAK,gBAAc,CAAC,GAAG;AAAE,QAAI,IAAE,EAAE;AAAO,QAAG,IAAE,EAAE,OAAM,IAAI,MAAM,kCAAkC,CAAC,8BAA8B;AAAE,QAAG,KAAK,cAAY,GAAE,MAAI,GAAE;AAAC,WAAK,WAAS;AAAA;AAAA;AAAA,2BAG7Y,EAAE,CAAC,CAAC;AAAA;AAAA;AAEvB;AAAA,IAAM;AAAC,QAAI,IAAE,OAAGA,IAAE,QAAQ,CAAC,MAAI,MAAI,EAAE,CAAC,MAAI,IAAE,GAAG,EAAE,CAAC,CAAC,aAAa,CAAC,UAAQ,UAAU,CAAC,KAAI,IAAE,EAAE,IAAI,CAAC,GAAE,MAAI,EAAE,CAAC,CAAC,EAAE,KAAK,GAAG,GAAE,IAAE,GAAG,CAAC;AAAE,SAAK,WAAS;AAAA;AAAA,UAE3I,CAAC;AAAA,yBACc,CAAC;AAAA;AAAA;AAAA,EAErB;AAAC;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,eAAa,MAAG,KAAK,eAAa;AAAG,QAAI,IAAE,EAAE;AAAO,QAAG,IAAE,EAAE,OAAM,IAAI,MAAM,kCAAkC,CAAC,8BAA8B;AAAE,SAAK,cAAY;AAAE,QAAI,IAAE,GAAG,MAAK,CAAC,GAAE,IAAE,GAAG,EAAE,IAAE,CAAC,CAAC,UAAU,KAAK,YAAY,IAAE,CAAC,CAAC,IAAG,IAAE,GAAG,EAAE,IAAE,CAAC,CAAC,UAAU,KAAK,YAAY,IAAE,CAAC,CAAC,IAAG,IAAE,GAAG,CAAC;AAAE,UAAI,IAAE,KAAK,WAAS;AAAA;AAAA;AAAA;AAAA,uCAIrU,EAAE,CAAC,CAAC;AAAA,cAC7B,EAAE,CAAC,CAAC;AAAA,eACH,CAAC;AAAA,2CAC2B,EAAE,CAAC,CAAC;AAAA,kBAC7B,EAAE,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA,UAId,KAAK,WAAS;AAAA;AAAA,YAEV,CAAC;AAAA;AAAA,uBAEU,EAAE,EAAE,MAAM,CAAC,CAAC;AAAA,eACpB,CAAC;AAAA,yBACS,EAAE,EAAE,MAAM,CAAC,CAAC;AAAA;AAAA,eAEtB,CAAC;AAAA,yBACS,EAAE,EAAE,MAAM,CAAC,CAAC;AAAA,iBACpB,CAAC;AAAA,2BACS,EAAE,EAAE,MAAM,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAKjC,aAAS,EAAE,GAAE;AAAC,aAAO,EAAE,CAAC;AAAA,IAAC;AAAC,aAAS,EAAE,GAAE;AAAC,aAAO,EAAE,IAAE,CAAC,IAAE,MAAI,EAAE,IAAE,CAAC,IAAE,SAAQ,EAAE,CAAC;AAAA,IAAC;AAAC,aAAS,EAAE,GAAE;AAAC,aAAO,EAAE,IAAE,CAAC,IAAE,MAAI,EAAE,IAAE,CAAC,IAAE,SAAQ,EAAE,CAAC;AAAA,IAAC;AAAC,aAAS,EAAE,GAAE;AAAC,aAAO,EAAE,IAAE,CAAC,IAAE,MAAI,EAAE,IAAE,CAAC,IAAE,SAAQ,EAAE,IAAE,CAAC,IAAE,MAAI,EAAE,IAAE,CAAC,IAAE,SAAQ,EAAE,CAAC;AAAA,IAAC;AAAC,aAAS,EAAE,GAAE;AAAC,UAAI,IAAE,EAAE,IAAI,CAAC,GAAE,MAAI,EAAE,GAAE,CAAC,CAAC,GAAE,IAAE,EAAE,KAAK,GAAG,GAAE,IAAE,EAAE,MAAM,EAAE,EAAE,KAAK,GAAG;AAAE,aAAM,mBAAmB,CAAC,WAAW,CAAC;AAAA,IAAI;AAAC,aAAS,EAAE,GAAE,GAAE;AAAC,aAAOA,IAAE,QAAQ,CAAC,MAAI,MAAI,EAAE,CAAC,MAAI,IAAE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,SAAO,GAAG,EAAE,CAAC,CAAC;AAAA,IAAE;AAAA,EAAC;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,MAAK,EAAC,IAAE,GAAE,IAAE,EAAE,MAAM,QAAO,IAAE,EAAE,eAAe,GAAE,EAAE,KAAK;AAAE,MAAG,MAAI,EAAE,QAAO,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,IAAC,CAAC;AAAE,MAAI,IAAE,EAAE,EAAE,QAAQ,6BAA6B,IAAE,IAAI,GAAG,EAAE,OAAM,CAAC,IAAE,IAAI,GAAG,EAAE,OAAM,CAAC;AAAE,SAAOA,IAAE,gBAAgB,GAAE,CAAC,CAAC,GAAE,EAAE,KAAK;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE;AAAC,SAAK,gBAAc,CAAC,OAAO,GAAE,KAAK,cAAY,CAAC,GAAE,KAAK,iBAAe,CAAC,EAAC,MAAK,UAAS,MAAK,OAAM,CAAC;AAAE,QAAI,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC;AAAE,SAAK,cAAY;AAAE,QAAI,IAAE;AAAG,WAAOA,OAAG,WAAS,IAAE,uBAAuBA,IAAE,QAAQ,CAAC,CAAC,MAAI,IAAE;AAAA,2BACl9BA,IAAE,KAAK,GAAG,CAAC;AAAA,+CACQ,KAAK,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAWhD,CAAC;AAAA,uCAC0B,CAAC,+BAA+B,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAKnE;AAAC;AAAE,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,CAAC,EAAC,QAAOD,KAAE,OAAM,GAAE,SAAQC,IAAC,MAAI;AAAC,MAAG,EAAC,OAAM,EAAC,IAAED,KAAE,EAAC,SAAQ,GAAE,WAAU,GAAE,QAAO,EAAC,IAAE,GAAE,IAAEC,KAAE,IAAE,IAAI,GAAG,EAAE,OAAM,CAAC,GAAE,CAAC,GAAE,CAAC,IAAE,EAAE,eAAe,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,GAAE,IAAE,CAAC,CAAC,GAAE,GAAE,KAAK,IAAI,CAAC,GAAE,KAAK,IAAI,CAAC,CAAC,CAAC;AAAE,SAAO,EAAE,gBAAgB,GAAE,CAAC,CAAC,GAAE,EAAE,OAAM,CAAC;AAAC,EAAC;AAAE,IAAI,MAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAR,IAepS,MAAI,GAAG,EAAC,WAAU,IAAG,CAAC;AAf8Q,IAe5Q,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,MAAI;AAAR,IAAiC,MAAI,GAAG,EAAC,WAAU,KAAI,eAAc,GAAE,CAAC;AAAxE,IAA0E,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE,GAAE,GAAE,GAAE,IAAE,MAAG,IAAE,OAAG;AAAC,SAAK,gBAAc,CAAC,WAAU,WAAU,cAAc,GAAE,KAAK,cAAY;AAAE,QAAI,IAAE,GAAG,EAAE,MAAM,GAAE,IAAE,GAAG,EAAE,MAAM,GAAE,IAAE;AAAG,UAAI,IAAE,IAAE,MAAI,MAAI,MAAI,IAAE;AAAQ,QAAI,IAAE,cAAc,CAAC,KAAI,IAAE;AAAG,UAAI,IAAE,IAAE,MAAI,MAAI,MAAI,IAAE;AAAgB,QAAI,IAAE,cAAc,CAAC,KAAI,IAAE;AAAG,UAAI,IAAE;AAAwB,QAAI,IAAE,mBAAmB,CAAC,KAAI,IAAEA,MAAE,IAAE,eAAa;AAAU,SAAK,WAAS;AAAA,UAC/kB,CAAC,cAAc,CAAC,IAAI,CAAC;AAAA;AAAA;AAAA,YAGnB,CAAC;AAAA;AAAA;AAAA,gCAGmB,CAAC;AAAA;AAAA,kCAECA,GAAC;AAAA,kCACD,CAAC;AAAA,0CACO,CAAC;AAAA;AAAA;AAAA,uBAGpB,CAAC;AAAA;AAAA;AAAA;AAAA,0BAIE,CAAC;AAAA;AAAA;AAAA,EAEpB;AAAC;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE,GAAE,GAAE,GAAE,IAAE,MAAG,IAAE,OAAG;AAAC,SAAK,gBAAc,CAAC,WAAU,WAAU,cAAc,GAAE,KAAK,eAAa,MAAG,KAAK,eAAa,MAAG,KAAK,cAAY;AAAE,QAAI,IAAE,GAAG,EAAE,MAAM,GAAE,IAAE,GAAG,EAAE,MAAM,GAAE,IAAE;AAAG,UAAI,IAAE,IAAE,MAAI,MAAI,MAAI,IAAE;AAAQ,QAAI,IAAE,cAAc,CAAC,KAAI,IAAE;AAAG,UAAI,IAAE,IAAE,MAAI,MAAI,MAAI,IAAE;AAAgB,QAAI,IAAE,cAAc,CAAC,KAAI,IAAE;AAAG,UAAI,IAAE;AAAwB,QAAI,IAAE,mBAAmB,CAAC,KAAI,IAAEA,MAAE,IAAE,eAAa,WAAU,IAAEA,MAAE,IAAE,mBAAiB;AAAU,SAAK,WAAS;AAAA,UACpd,CAAC,cAAc,CAAC,IAAI,CAAC;AAAA;AAAA;AAAA,YAGnB,CAAC;AAAA;AAAA;AAAA,gCAGmB,CAAC;AAAA;AAAA,kCAECA,GAAC;AAAA,oCACC,CAAC;AAAA,6CACQ,CAAC;AAAA,4BAClBA,GAAC;AAAA,+CACkB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,+BAKjB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0BAiBN,CAAC;AAAA;AAAA;AAAA,EAEpB;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,SAAQ,GAAE,SAAQ,EAAC,IAAE,GAAE,EAAC,OAAM,EAAC,IAAE,GAAE,EAAC,WAAU,GAAE,YAAW,GAAE,WAAU,GAAE,SAAQ,GAAE,YAAW,EAAC,IAAE,EAAE,gBAAgB,GAAE,GAAE,CAAC,GAAE,IAAE,CAAC,IAAE,GAAE,CAAC;AAAE,MAAG,MAAI,EAAE,QAAOC,IAAE,eAAe,GAAE,EAAE,KAAK;AAAE,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,CAAC,GAAE,CAAC,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,CAAC,GAAE,CAAC,EAAC,EAAC,CAAC,GAAE,IAAEA,IAAE,eAAe,CAAC,GAAE,WAAU,IAAI,aAAa,CAAC,CAAC,CAAC,CAAC,GAAE;AAAE,IAAE,EAAE,QAAQ,YAAY,IAAE,IAAE,IAAI,GAAG,GAAE,GAAE,EAAE,MAAM,QAAO,EAAE,MAAM,QAAO,GAAE,CAAC,IAAE,IAAE,IAAI,GAAG,GAAE,GAAE,EAAE,MAAM,QAAO,EAAE,MAAM,QAAO,GAAE,CAAC;AAAE,MAAI,IAAEA,IAAE,gBAAgB,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,EAAE,KAAK,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,SAAOA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,kBAAiB,QAAQ,GAAE,KAAK,iBAAe,CAAC,EAAC,MAAK,aAAY,MAAK,MAAK,CAAC,GAAE,KAAK,cAAY,CAAC,GAAE,CAAC;AAAE,QAAI,IAAE,0BAAyB,IAAE,uBAAuB,KAAK,KAAK,KAAK,KAAKA,MAAE,CAAC,CAAC,CAAC,sCAAqC,IAAE,EAAE,EAAE,UAAU,eAAe,MAAI,IAAE,IAAE,GAAE,IAAE,MAAI,SAAO,MAAI;AAAK,SAAK,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA,WAKroC,CAAC;AAAA;AAAA,+CAEmC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkB1C;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,gBAAe,GAAE,QAAO,EAAC,IAAE,GAAE,EAAC,MAAK,EAAC,IAAE,GAAE,IAAE,IAAI,GAAG,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,CAAC,GAAE,IAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AAAE,SAAOC,IAAE,gBAAgB,GAAE,CAAC,GAAE,CAAC,GAAE,SAAQ,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,KAAI,KAAI,GAAG,GAAE,KAAK,cAAYA;AAAE,QAAI,GAAE;AAAE,QAAG,IAAE,EAAE,OAAM,MAAM,kBAAkB,CAAC,uBAAuB;AAAE,QAAG,MAAI,EAAE,KAAE,SAAQ,IAAE;AAAA,SAAY;AAAC,UAAI,IAAE,CAAC,WAAU,WAAU,WAAU,SAAS,GAAE,IAAE,CAAC,GAAE,IAAE,CAAC;AAAE,eAAQ,IAAE,GAAE,IAAEA,IAAE,QAAO,IAAI,GAAE,KAAK,GAAG,EAAE,CAAC,CAAC,EAAE,GAAE,IAAE,KAAG,EAAE,KAAK,GAAG,EAAE,CAAC,CAAC,EAAE;AAAE,UAAE,EAAE,KAAK,GAAE,IAAE,EAAE,KAAK;AAAA,IAAC;AAAC,QAAI,IAAE,GAAG,CAAC;AAAE,SAAK,WAAS;AAAA;AAAA,UAEzmB,CAAC;AAAA,4BACiB,CAAC;AAAA;AAAA,2BAEF,CAAC;AAAA;AAAA,2BAED,CAAC;AAAA;AAAA;AAAA;AAAA,EAGvB;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,WAAU,GAAE,GAAE,GAAE,GAAE,EAAC,IAAE,GAAE,IAAE,IAAI,GAAG,EAAE,MAAM,QAAO,EAAE,OAAM,EAAE,MAAM,MAAM;AAAE,SAAOC,IAAE,gBAAgB,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,GAAG,EAAE,OAAM,EAAE,KAAK,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,MAAI;AAAA;AAAA;AAAA,uBAG7N,EAAE,eAAe;AAAA,kBACtB,EAAE,UAAU;AAAA;AAAA;AAJ8M,IAM1O,MAAI,GAAG,EAAC,WAAU,IAAG,CAAC;AANoN,IAMlN,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,MAAI,KAAG;AAAA;AAAA;AAAX,IAE9E,MAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAF0E,IAY9E,MAAI,GAAG,EAAC,WAAU,KAAI,iBAAgB,KAAI,eAAc,GAAE,CAAC;AAZmB,IAYjB,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,MAAI;AAAA;AAAA;AAAA;AAAR,IAGnH,MAAI,GAAG,EAAC,WAAU,IAAG,CAAC;AAH6F,IAG3F,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,MAAI,KAAG;AAAA;AAAA;AAAX,IAE9E,MAAI;AAAA;AAAA;AAAA,IAGF,EAAE;AAAA;AAAA;AAL0E,IAO9E,MAAI,GAAG,EAAC,WAAU,KAAI,iBAAgB,IAAG,CAAC;AAPoC,IAOlC,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,MAAI;AAAA;AAAA;AAAA;AAAR,IAGlG,MAAI,GAAG,EAAC,WAAU,IAAG,CAAC;AAH4E,IAG1E,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,MAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAR,IAoB9E,MAAI,GAAG,EAAC,WAAU,IAAG,CAAC;AApBwD,IAoBtD,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,MAAI,CAAAD,QAAG;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,YAAW,GAAE,UAAS,EAAC,IAAE;AAAE,IAAE,OAAO,EAAE,MAAM,UAAQ,GAAE,MAAI,sEAAsE;AAAE,MAAI,IAAE,EAAE,OAAO,CAAC,GAAE,MAAI,IAAE,CAAC,GAAE,IAAE,CAAC,CAAC,GAAE,CAAC,CAAC;AAAE,IAAE,KAAK,GAAG,CAAC;AAAE,WAAQ,IAAE,IAAE,EAAE,QAAO,IAAE,EAAE,MAAM,QAAO,EAAE,EAAE,GAAE,KAAK,CAAC,GAAE,CAAC,CAAC;AAAE,MAAI,IAAE,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,UAAS,GAAE,eAAc,EAAC,EAAC,CAAC,GAAE,IAAE,EAAE,YAAY,EAAE,OAAM,GAAE,GAAE,KAAE,GAAE,IAAE,EAAE,YAAY,EAAE,QAAO,EAAE,QAAO,KAAE,GAAE,IAAE,EAAE,oBAAoB,EAAE,OAAM,GAAE,GAAE,KAAE,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,SAAO,EAAE,KAAK,CAAC,GAAE,EAAE,KAAK,CAAC,GAAE,EAAE,KAAK,CAAC,GAAE,EAAE,QAAQ,OAAGA,IAAE,8BAA8B,CAAC,CAAC,GAAE;AAAC;AAA/rB,IAAisB,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,SAAQ,GAAE,QAAO,GAAE,YAAW,GAAE,cAAa,EAAC,IAAE;AAAE,MAAG,EAAE,MAAM,WAAS,EAAE,OAAM,IAAI,MAAM;AAAA,WAC/7B,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,MAAM,WAAS,EAAE,OAAM,IAAI,MAAM;AAAA,WACjD,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,MAAM,WAAS,EAAE,OAAM,IAAI,MAAM;AAAA,WACjD,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,MAAM,WAAS,EAAE,OAAM,IAAI,MAAM;AAAA,UAClD,EAAE,KAAK,EAAE;AAAE,MAAI,IAAEC,IAAE,SAAS,EAAE,MAAM,GAAE,IAAEA,IAAE,SAAS,EAAE,MAAM,GAAE,IAAEA,IAAE,SAAS,EAAE,MAAM,GAAE,IAAEA,IAAE,SAAS,EAAE,MAAM,EAAE,CAAC,GAAE,CAAC,GAAE,GAAE,GAAE,GAAE,CAAC,IAAE,GAAG,GAAE,EAAE,OAAM,EAAE,OAAM,GAAE,EAAE,OAAM,GAAE,CAAC;AAAE,SAAM,CAACA,IAAE,eAAe,GAAE,EAAE,OAAM,CAAC,GAAEA,IAAE,eAAe,CAAC,EAAE,CAAC,CAAC,GAAE,EAAE,OAAM,CAAC,GAAEA,IAAE,eAAe,CAAC,EAAE,MAAM,GAAE,QAAO,IAAI,WAAW,EAAE,IAAI,OAAG,OAAO,CAAC,CAAC,CAAC,CAAC,GAAEA,IAAE,eAAe,CAAC,EAAE,MAAM,GAAE,EAAE,OAAM,IAAI,WAAW,CAAC,CAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,cAAa,GAAE,YAAW,GAAE,UAAS,EAAC,IAAE;AAAE,MAAG,EAAE,MAAM,WAAS,EAAE,OAAM,IAAI,MAAM,uDAAuD,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,MAAM,WAAS,EAAE,OAAM,IAAI,MAAM,qDAAqD,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,MAAM,WAAS,EAAE,OAAM,IAAI,MAAM,sDAAsD,EAAE,KAAK,EAAE;AAAE,MAAI,IAAE,MAAM,KAAKC,IAAE,SAAS,EAAE,MAAM,CAAC,GAAE,IAAEA,IAAE,SAAS,EAAE,MAAM,GAAE,IAAE,MAAM,KAAKA,IAAE,SAAS,EAAE,MAAM,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,IAAE,GAAG,GAAE,EAAE,OAAM,EAAE,OAAM,GAAE,CAAC;AAAE,SAAM,CAACA,IAAE,eAAe,GAAE,EAAE,OAAM,CAAC,GAAEA,IAAE,eAAe,CAAC,EAAE,MAAM,GAAE,EAAE,OAAM,IAAI,WAAW,CAAC,CAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,MAAK,GAAE,SAAQ,GAAE,YAAW,EAAC,IAAE;AAAE,MAAG,EAAE,MAAM,SAAO,EAAE,OAAM,IAAI,MAAM,2DAA2D;AAAE,MAAG,EAAE,MAAM,WAAS,EAAE,OAAM,IAAI,MAAM;AAAA,gBACjxC,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,MAAM,WAAS,EAAE,OAAM,IAAI,MAAM;AAAA,gBACjD,EAAE,KAAK,EAAE;AAAE,MAAI,IAAEC,IAAE,SAAS,EAAE,MAAM,GAAE,IAAEA,IAAE,SAAS,EAAE,MAAM,GAAE,IAAEA,IAAE,SAAS,EAAE,MAAM,GAAE,CAAC,GAAE,CAAC,IAAE,GAAG,GAAE,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,IAAE;AAAE,SAAOA,IAAE,eAAe,GAAE,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,MAAK,GAAE,SAAQ,GAAE,YAAW,EAAC,IAAE;AAAE,MAAG,EAAE,MAAM,SAAO,EAAE,OAAM,IAAI,MAAM,2DAA2D;AAAE,MAAG,EAAE,MAAM,WAAS,EAAE,OAAM,IAAI,MAAM;AAAA,eAC1a,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,MAAM,WAAS,EAAE,OAAM,IAAI,MAAM;AAAA,eACjD,EAAE,KAAK,EAAE;AAAE,MAAI,IAAEC,IAAE,SAAS,EAAE,MAAM,GAAE,IAAEA,IAAE,SAAS,EAAE,MAAM,GAAE,IAAEA,IAAE,SAAS,EAAE,MAAM,GAAE,CAAC,GAAE,CAAC,IAAE,GAAG,GAAE,EAAE,OAAM,EAAE,OAAM,GAAE,CAAC;AAAE,SAAOA,IAAE,eAAe,GAAE,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,eAAc,GAAE,cAAa,GAAE,cAAa,EAAC,IAAE,GAAE,EAAC,aAAY,EAAC,IAAE,GAAE,EAAC,WAAU,GAAE,YAAW,GAAE,WAAU,GAAE,SAAQ,GAAE,YAAW,EAAC,IAAE,EAAE,gBAAgB,GAAE,GAAE,CAAC,GAAE,IAAE;AAAG,MAAG,EAAE,UAAQ,UAAS;AAAC,QAAI,IAAEC,IAAE,WAAW,CAAC,GAAE,IAAEA,IAAE,WAAW,CAAC,GAAE,IAAE,EAAE,aAAaA,IAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC,GAAE,IAAE,GAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,WAAOA,IAAE,eAAe,GAAE,EAAE,OAAM,EAAE,MAAM;AAAA,EAAC;AAAC,MAAI,IAAE,IAAI,GAAG,GAAE,GAAE,EAAE,MAAM,QAAO,EAAE,MAAM,QAAO,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,IAAEA,IAAE,gBAAgB,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,EAAE,KAAK,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,SAAOA,IAAE,8BAA8B,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,iBAAgB,GAAE,MAAK,EAAC,IAAE,GAAE,IAAE,EAAE,eAAe,GAAE,EAAE,KAAK,EAAE,CAAC,GAAE,IAAE,EAAE,iBAAiB,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,MAAM,QAAO,IAAE,IAAI,MAAM,CAAC,EAAE,KAAK,CAAC,GAAE,IAAE,EAAE,MAAM,MAAM;AAAE,SAAO,EAAE,IAAI,OAAG;AAAC,QAAI,IAAE,CAAC,GAAG,CAAC;AAAE,MAAE,CAAC,IAAE;AAAE,QAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,OAAM,GAAE,MAAK,EAAC,EAAC,CAAC;AAAE,WAAO,EAAE,CAAC,KAAG,GAAE;AAAA,EAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,KAAG;AAAP,IAAyB,MAAI,GAAG,EAAC,WAAU,IAAG,iBAAgB,IAAG,eAAc,GAAE,CAAC;AAAlF,IAAoF,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,MAAI;AAAR,IAAwB,MAAI,GAAG,EAAC,WAAU,IAAG,CAAC;AAA9C,IAAgD,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,KAAG;AAAP,IAAmC,MAAI,GAAG,EAAC,WAAU,IAAG,iBAAgB,GAAE,CAAC;AAA3E,IAA6E,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE;AAAE,MAAG,EAAE,UAAQ,SAAS,OAAM,IAAI,MAAM,kCAAkC;AAAE,MAAI,IAAEC,IAAE,SAAS,EAAE,MAAM,GAAE,IAAE,EAAE,uBAAuB,CAAC,GAAE,IAAE,GAAG,GAAE,UAAS,CAAC;AAAE,SAAOA,IAAE,eAAe,EAAE,OAAM,UAAS,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,SAAS,IAAI,EAAC,QAAOD,KAAE,OAAM,GAAE,SAAQC,IAAC,GAAE;AAAC,MAAG,EAAC,GAAE,EAAC,IAAED,KAAE,IAAE,KAAG;AAAA,mCACp5D,EAAE,KAAK;AAAA,KACtC,IAAE,IAAI,GAAG,EAAE,OAAM,CAAC;AAAE,SAAOC,IAAE,gBAAgB,GAAE,CAAC,CAAC,GAAE,EAAE,KAAK;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,cAAY;AAAE,QAAI,IAAE,EAAE,QAAO,IAAE,GAAG,EAAE,MAAM,GAAE,IAAE,GAAG,EAAE,MAAM,GAAE,IAAE;AAAG,QAAG,MAAI,EAAE,KAAE;AAAA,SAA+B;AAAC,UAAI,IAAE;AAAE,UAAE,EAAE,IAAI,CAAC,GAAE,OAAK,KAAI,EAAE,WAAS,IAAE,oBAAoB,CAAC,aAAa,CAAC,MAAI,UAAU,IAAE,CAAC,eAAe,CAAC,aAAa,CAAC,IAAI,EAAE,KAAK,GAAG;AAAA,IAAC;AAAC,SAAK,WAAS;AAAA,QACpb,CAAC,YAAY,CAAC,IAAI,CAAC;AAAA,QACnB,CAAC,cAAc,CAAC,IAAIA,GAAC;AAAA;AAAA;AAAA,UAGnB,CAAC;AAAA,yBACc,CAAC;AAAA;AAAA;AAAA,EAErB;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,OAAM,GAAE,KAAI,GAAE,SAAQ,GAAE,WAAU,GAAE,SAAQ,GAAE,cAAa,GAAE,aAAY,GAAE,gBAAe,EAAC,IAAE,GAAE,EAAC,kBAAiB,GAAE,YAAW,GAAE,YAAW,GAAE,WAAU,GAAE,eAAc,GAAE,OAAM,GAAE,KAAI,GAAE,SAAQ,EAAC,IAAE,GAAG,UAAU,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE;AAAE,MAAG,EAAE,KAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAA,WAAU,KAAG,GAAE;AAAC,MAAE,OAAO,EAAE,MAAM,UAAQ,GAAE,MAAI,yCAAyC,EAAE,MAAM,MAAM,EAAE;AAAE,QAAI,IAAE,GAAG,gBAAgB,GAAE,GAAE,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,GAAE,MAAK,EAAC,EAAC,CAAC;AAAE,QAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAEA,IAAE,8BAA8B,CAAC;AAAA,EAAC,WAASA,IAAE,mBAAmB,CAAC,CAAC,CAAC,GAAE;AAAC,QAAI,IAAEA,IAAE,SAAS,EAAE,MAAM,GAAE,IAAE,GAAG,EAAE,OAAM,EAAE,OAAM,CAAC,GAAE,IAAE,GAAG,GAAE,GAAE,GAAE,CAAC;AAAE,QAAEA,IAAE,eAAe,GAAE,EAAE,OAAM,EAAE,MAAM;AAAA,EAAC,OAAK;AAAC,QAAI,IAAE,IAAI,GAAG,GAAE,GAAE,CAAC;AAAE,QAAEA,IAAE,gBAAgB,GAAE,CAAC,CAAC,GAAE,EAAE,KAAK;AAAA,EAAC;AAAC,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,SAAOA,IAAE,8BAA8B,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,WAAU,GAAE,aAAY,GAAE,SAAQ,GAAE,UAAS,GAAE,UAAS,GAAE,wBAAuB,EAAC,IAAE,GAAE,EAAC,MAAK,GAAE,YAAW,EAAC,IAAE,GAAE,IAAEC,IAAE,SAAS,EAAE,MAAM,GAAE,IAAEA,IAAE,SAAS,EAAE,MAAM,GAAE,CAAC,GAAE,CAAC,IAAE,GAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,SAAM,CAACA,IAAE,eAAe,CAAC,EAAE,MAAM,GAAE,UAAS,CAAC,GAAEA,IAAE,eAAe,EAAE,OAAM,SAAQ,CAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,WAAU,EAAC,IAAE,GAAE,EAAC,OAAM,GAAE,WAAU,EAAC,IAAE;AAAE,MAAG,EAAE,UAAQ,SAAS,OAAM,IAAI,MAAM,kCAAkC;AAAE,MAAG,EAAE,MAAM,WAAS,EAAE,OAAM,IAAI,MAAM,sCAAsC,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,MAAM,WAAS,EAAE,OAAM,IAAI,MAAM,0CAA0C,EAAE,KAAK,EAAE;AAAE,MAAI,IAAEC,IAAE,SAAS,EAAE,MAAM,GAAE,IAAEA,IAAE,SAAS,EAAE,MAAM,EAAE,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,IAAE,GAAG,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE;AAAO,SAAM,CAACA,IAAE,eAAe,CAAC,GAAE,CAAC,GAAE,SAAQ,CAAC,GAAEA,IAAE,eAAe,CAAC,CAAC,GAAE,UAAS,CAAC,GAAEA,IAAE,eAAe,CAAC,CAAC,GAAE,SAAQ,IAAI,WAAW,CAAC,CAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,YAAW,EAAC,IAAE,GAAE,EAAC,OAAM,EAAC,IAAE;AAAE,MAAG,EAAE,UAAQ,SAAS,OAAM,IAAI,MAAM,kCAAkC;AAAE,MAAG,KAAG,EAAE,OAAM,IAAI,MAAM,sCAAsC;AAAE,MAAI,IAAEC,IAAE,SAAS,EAAE,MAAM,GAAE,IAAE,GAAG,GAAE,CAAC;AAAE,SAAOA,IAAE,eAAe,EAAE,OAAM,SAAQ,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,MAAI;AAAR,IAAyB,MAAI,GAAG,EAAC,WAAU,IAAG,CAAC;AAA/C,IAAiD,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,MAAI;AAAA;AAAA;AAAA;AAAR,IAG72E,MAAI,GAAG,EAAC,WAAU,IAAG,CAAC;AAHu1E,IAGr1E,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,QAAO,GAAE,SAAQ,GAAE,SAAQ,EAAC,IAAE,GAAE,CAAC,IAAE,GAAE,EAAC,WAAU,GAAE,YAAW,GAAE,WAAU,GAAE,SAAQ,GAAE,YAAW,EAAC,IAAE,EAAE,gBAAgB,GAAE,GAAE,EAAE,KAAK,GAAE,IAAE,CAAC,IAAE,GAAE,CAAC;AAAE,MAAG,MAAI,EAAE,QAAOC,IAAE,eAAe,EAAE,OAAM,EAAE,KAAK;AAAE,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,CAAC,GAAE,CAAC,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,CAAC,GAAE,CAAC,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,IAAE,IAAI,GAAG,GAAE,GAAE,EAAE,MAAM,QAAO,EAAE,MAAM,QAAO,GAAE,GAAE,OAAG,IAAE,GAAE,IAAEA,IAAE,gBAAgB,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,EAAE,KAAK,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAE,MAAK,EAAC,CAAC;AAAE,SAAOA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE;AAAC,SAAK,gBAAc,CAAC,GAAG;AAAE,QAAI,IAAE,IAAI,MAAM,EAAE,MAAM;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,IAAI,GAAE,CAAC,IAAE,EAAE,CAAC,IAAEA,IAAE,CAAC;AAAE,SAAK,cAAY,GAAE,KAAK,OAAK,EAAE;AAAO,QAAI,IAAE,GAAG,KAAK,IAAI,GAAE,IAAE,IAAI,CAAC;AAAE,SAAK,WAAS;AAAA;AAAA,UAE3/B,CAAC;AAAA,yBACc,CAAC;AAAA;AAAA;AAAA,EAErB;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAI,IAAEA,IAAE;AAAO,MAAG,IAAE,EAAE,OAAM,MAAM,iBAAiB,CAAC,uBAAuB;AAAE,MAAG,MAAI,EAAE,QAAM,eAAeA,IAAE,CAAC,CAAC;AAAI,MAAIC,MAAE,CAAC,WAAU,WAAU,WAAU,WAAU,SAAS,GAAE,IAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAED,IAAE,QAAO,IAAI,GAAE,KAAK,QAAQC,IAAE,CAAC,CAAC,KAAKD,IAAE,CAAC,CAAC,GAAG;AAAE,SAAO,EAAE,KAAK;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,MAAK,EAAC,IAAE;AAAE,MAAG,EAAE,UAAQ,YAAU,EAAE,MAAM,SAAO,GAAE;AAAC,QAAI,IAAEC,IAAE,SAAS,EAAE,MAAM,GAAE,IAAE,EAAE,UAAQ,WAAS,EAAE,IAAI,OAAG,EAAE,aAAa,CAAC,CAAC,IAAE,GAAE,IAAE,GAAG,EAAE,OAAM,EAAE,OAAM,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC;AAAE,WAAOA,IAAE,eAAe,EAAE,OAAM,EAAE,OAAM,EAAE,MAAM;AAAA,EAAC;AAAC,MAAI,IAAE,IAAI,GAAG,EAAE,OAAM,CAAC;AAAE,SAAOA,IAAE,gBAAgB,GAAE,CAAC,CAAC,GAAE,EAAE,KAAK;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,KAAI,SAAS,GAAE,KAAK,iBAAe,CAAC,EAAC,MAAK,KAAI,MAAK,MAAK,GAAE,EAAC,MAAK,aAAY,MAAK,MAAK,GAAE,EAAC,MAAK,eAAc,MAAK,QAAO,GAAE,EAAC,MAAK,OAAM,MAAK,MAAK,GAAE,EAAC,MAAK,OAAM,MAAK,MAAK,CAAC,GAAE,KAAK,cAAY,GAAE,KAAK,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwCp5B;AAAC;AAxCupB,IAwCrpB,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,KAAI,SAAS,GAAE,KAAK,iBAAe,CAAC,EAAC,MAAK,KAAI,MAAK,MAAK,GAAE,EAAC,MAAK,aAAY,MAAK,MAAK,GAAE,EAAC,MAAK,KAAI,MAAK,MAAK,CAAC,GAAE,KAAK,cAAY,GAAE,KAAK,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkC/L;AAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,QAAI,QAAMA,IAAE,8BAA8B,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAI,IAAE;AAAE,SAAK,IAAEA,MAAG,MAAG;AAAE,SAAO;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,GAAE,GAAE,QAAO,EAAC,IAAE,GAAE,IAAE,EAAE,EAAE,UAAU,0CAA0C,GAAE,IAAE,EAAE,EAAE,UAAU,8BAA8B,GAAE,IAAE,EAAE,OAAM,IAAE,EAAE,EAAE,SAAO,CAAC;AAAE,MAAGC,IAAE,mBAAmB,CAAC,CAAC,CAAC,KAAG,IAAE,KAAG,IAAE,GAAE;AAAC,QAAI,IAAEA,IAAE,SAAS,EAAE,MAAM,GAAE,CAAC,GAAE,CAAC,IAAE,GAAG,GAAE,GAAE,EAAE,OAAM,GAAE,CAAC;AAAE,WAAM,CAACA,IAAE,eAAe,EAAE,OAAM,EAAE,OAAM,EAAE,MAAM,GAAEA,IAAE,eAAe,EAAE,OAAM,EAAE,OAAM,EAAE,MAAM,CAAC;AAAA,EAAC;AAAC,MAAG,MAAI,EAAE,QAAO,EAAE,EAAE,SAAO,CAAC,IAAE,GAAE,CAACA,IAAE,eAAe,GAAE,EAAE,OAAM,CAAC,CAAC,GAAEA,IAAE,eAAe,GAAE,SAAQ,CAAC,CAAC,CAAC;AAAE,MAAG,MAAI,EAAE,QAAM,CAAC,GAAE,GAAG,EAAC,OAAM,EAAC,OAAM,GAAE,OAAM,SAAQ,OAAM,EAAC,GAAE,SAAQA,IAAC,CAAC,CAAC;AAAE,MAAI,IAAEA,IAAE,QAAQ,IAAI,EAAE,MAAM,GAAE,IAAE,MAAI,QAAM,EAAE,UAAS,IAAE,IAAEA,IAAE,aAAa,CAAC,IAAE,GAAE,IAAE,EAAE,cAAc,CAAC,IAAE,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,OAAM,EAAC,OAAM,CAAC,GAAE,CAAC,EAAC,GAAE,SAAQA,IAAC,CAAC;AAAE,OAAG,GAAGA,KAAE,CAAC;AAAE,MAAI,IAAE,GAAG,CAAC,GAAE,IAAE,GAAG,CAAC,GAAE,IAAE,MAAK,IAAE,MAAI,MAAI,OAAK,CAAC,GAAE,CAAC,IAAE,CAAC,GAAE,CAAC,GAAE,IAAE,CAAC,GAAE,GAAE,MAAI;AAAC,QAAI,IAAE,EAAE,GAAE,IAAE,IAAI,GAAG,CAAC,GAAE,IAAE,CAAC,CAAC,CAAC,GAAE,CAAC,MAAI,OAAK,IAAE,CAAC,GAAE,CAAC,OAAO,iBAAiB,GAAE,CAAC,CAAC,GAAE,CAAC,CAAC,CAAC,GAAE,IAAE;AAAE,QAAEA,IAAE,gBAAgB,GAAE,GAAE,SAAQ,CAAC,GAAE,GAAGA,KAAE,CAAC;AAAA,EAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,KAAG,GAAE;AAAC,QAAI,IAAE,IAAE;AAAE,aAAQ,IAAE,GAAE,KAAG,GAAE,KAAG,EAAE,GAAE,GAAE,GAAE,CAAC,GAAE,CAAC,CAAC;AAAA,EAAC;AAAC,WAAQ,IAAE,GAAE,IAAE,GAAE,KAAG,GAAE;AAAC,QAAI,IAAE,EAAE,GAAE,IAAE,IAAI,GAAG,CAAC,GAAE,IAAE,CAAC,CAAC,GAAE,IAAE,CAAC,CAAC,CAAC,GAAE,CAAC,MAAI,OAAK,IAAE,CAAC,GAAE,CAAC,CAAC,CAAC,GAAE,IAAE;AAAE,QAAEA,IAAE,gBAAgB,GAAE,GAAE,SAAQ,CAAC,GAAE,GAAGA,KAAE,CAAC;AAAE,QAAI,IAAE,IAAE,GAAE,IAAE,IAAE;AAAE,aAAQ,IAAE,GAAE,KAAG,GAAE,KAAG,EAAE,GAAE,GAAE,GAAE,EAAE,KAAK;AAAA,EAAC;AAAC,MAAI,IAAE;AAAE,MAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,GAAE,MAAK,CAAC,GAAE,CAAC,EAAC,EAAC,CAAC,GAAE,GAAGA,KAAE,CAAC;AAAE,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,GAAE,SAAQ,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,MAAK,GAAE,WAAU,EAAC,EAAC,CAAC;AAAE,KAAGA,KAAE,CAAC;AAAE,MAAI,IAAE,EAAE,MAAM,GAAE,EAAE;AAAE,IAAE,KAAK,CAAC,GAAE,IAAE,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,OAAM,EAAC,OAAM,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAE,GAAGA,KAAE,CAAC;AAAE,MAAI,IAAE;AAAE,SAAO,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,OAAM,EAAC,OAAM,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAE,GAAGA,KAAE,CAAC,GAAE,CAAC,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE,GAAE,GAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,SAAQ,YAAY,GAAE,KAAK,cAAY;AAAE,QAAI,IAAE,MAAI,YAAU,IAAE,GAAE;AAAE,YAAO,GAAE;AAAA,MAAC,KAAI;AAAW,YAAE;AAAE;AAAA,MAAM,KAAI;AAAU,YAAE;AAAE;AAAA,MAAM,KAAI;AAAO,YAAE;AAAE;AAAA,MAAM,KAAI;AAAU,YAAE;AAAE;AAAA,MAAM;AAAQ,YAAE;AAAE;AAAA,IAAK;AAAC,SAAK,WAAS;AAAA;AAAA;AAAA,mBAG92D,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2BAwBO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2BAiBD,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4CAUgB,CAAC,+BAA+BA,GAAC;AAAA;AAAA;AAAA,sCAGvC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sCAwBD,CAAC;AAAA;AAAA;AAAA;AAAA,mDAIYA,GAAC;AAAA,mDACD,CAAC;AAAA;AAAA,sBAE9B,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwBd;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,GAAE,YAAW,EAAC,IAAE,GAAE,EAAC,eAAc,GAAE,UAAS,GAAE,WAAU,GAAE,aAAY,EAAC,IAAE,GAAE,CAAC,GAAE,GAAE,GAAE,CAAC,IAAE,EAAE,OAAM,CAAC,GAAE,CAAC,IAAE,KAAG,OAAK,IAAE,CAAC,GAAE,CAAC,GAAE,IAAE,CAAC,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,IAAI,GAAG,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,SAAOC,IAAE,gBAAgB,GAAE,CAAC,GAAE,CAAC,GAAE,SAAS;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,OAAMC,KAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,MAAK,EAAC,IAAEC,KAAE,EAAC,GAAE,EAAC,IAAE;AAAE,KAAG,GAAE,QAAQ,GAAE,QAAQ,KAAK,aAAY,4DAA4D;AAAE,MAAI,IAAE,EAAE,SAAS,EAAE,MAAM,GAAE,EAAC,cAAa,GAAE,aAAY,GAAE,SAAQ,EAAC,IAAE,GAAG,GAAE,GAAE,EAAE,OAAM,EAAE,KAAK;AAAE,SAAM,CAAC,EAAE,eAAe,GAAE,EAAE,OAAM,CAAC,GAAE,EAAE,eAAe,CAAC,EAAE,MAAM,GAAE,SAAQ,CAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,EAAC,IAAE,GAAE,EAAC,MAAK,EAAC,IAAE;AAAE,MAAE,MAAI,KAAG,EAAE,MAAM;AAAQ,MAAI,IAAE,GAAE,IAAE,EAAE,MAAM,QAAO,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,IAAI,MAAM,IAAE,CAAC,GAAE,IAAE;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,IAAI,OAAI,MAAI,EAAE,GAAG,IAAE,EAAE,MAAM,CAAC;AAAG,MAAI,IAAE,CAAC,GAAE,IAAE,IAAI,MAAM,CAAC,EAAE,KAAK,CAAC,GAAE,IAAE,EAAE,MAAM,MAAM;AAAE,IAAE,CAAC,IAAE;AAAE,MAAI,IAAE,IAAI,MAAM,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,KAAI;AAAC,MAAE,CAAC,IAAE;AAAE,QAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,OAAM,GAAE,MAAK,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,MAAE,CAAC,IAAE,GAAE,EAAE,KAAK,CAAC;AAAA,EAAC;AAAC,SAAO,EAAE,QAAQ,OAAGA,IAAE,8BAA8B,CAAC,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE;AAAC,SAAK,gBAAc,CAAC,KAAI,YAAY;AAAE,QAAI,IAAE,EAAE,YAAW,IAAE,EAAE,WAAU,IAAE,EAAE,QAAO,IAAE,EAAE,aAAY,IAAE,IAAE,KAAK,KAAK,IAAE,CAAC;AAAE,SAAK,cAAY,CAAC,GAAE,CAAC;AAAE,QAAI,IAAE,OAAM,IAAE,YAAW,IAAE,KAAK,MAAM,IAAE,CAAC,IAAE,GAAE,IAAE,IAAE,GAAE,IAAE;AAAA;AAAA,OAEh9C,IAAE;AAAG,QAAE,IAAE,MAAI,IAAE;AAAA,oCACe,CAAC;AAAA;AAAA;AAAA;AAG5B,QAAI,IAAE;AAAG,QAAE,IAAE,MAAI,IAAE;AAAA,oCACQ,CAAC;AAAA;AAAA;AAAA,UAG5B,KAAK,WAAS;AAAA,0CACmB,CAAC;AAAA;AAAA;AAAA,UAGjC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,UAKD,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YASC,CAAC,cAAc,CAAC;AAAA,wDAC4B,CAAC;AAAA;AAAA;AAAA;AAAA,8BAI3B,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAgBnB,CAAC;AAAA;AAAA;AAAA,iCAGoB,CAAC;AAAA,cACpB,MAAI,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAiBP,CAAC;AAAA,qBACQ,MAAI,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAed,CAAC;AAAA,qBACQ,MAAI,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAed,CAAC;AAAA;AAAA,oBAEO,CAAC;AAAA;AAAA;AAAA,EAEhB;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,YAAW,EAAC,IAAE,GAAE,EAAC,aAAY,EAAC,IAAE,GAAE,IAAE,EAAE,MAAM,QAAO,IAAE,CAAC,GAAE,IAAE,GAAE,IAAE,EAAE,mBAAmB,CAAC,CAAC,GAAE,CAAC,GAAE,IAAE;AAAE,OAAG,SAAO,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC,GAAE,EAAE,KAAK,CAAC,GAAE,IAAE,EAAE,iBAAiB,GAAE,CAAC,EAAE,CAAC;AAAG,MAAI,IAAE,EAAE,aAAa,gBAAgB,EAAE,OAAM,GAAE,CAAC,GAAE,IAAE,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,CAAC,IAAG,CAAC,EAAC,EAAC,CAAC;AAAE,IAAE,KAAK,CAAC;AAAE,MAAI,IAAE,GAAG,EAAE,KAAK,GAAE,IAAE,CAAC,GAAE,GAAE,GAAE,GAAE,MAAI;AAAC,QAAI,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,EAAE,aAAa,8BAA8B,GAAE,CAAC,GAAE,IAAE,EAAC,YAAW,GAAE,QAAO,GAAE,WAAU,GAAE,aAAY,EAAC,GAAE,IAAE,IAAI,GAAG,GAAE,CAAC,GAAE,IAAEA,IAAE,cAAc,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC;AAAE,QAAG,EAAE,KAAK,CAAC,GAAE,EAAE,MAAM,CAAC,MAAI,EAAE,QAAO;AAAE,QAAI,IAAE,GAAG,EAAC,SAAQA,KAAE,OAAM,EAAC,OAAM,GAAE,MAAK,GAAE,MAAK,GAAE,OAAM,UAAS,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,MAAK,CAAC,IAAE,CAAC,EAAC,EAAC,CAAC;AAAE,WAAO,EAAE,KAAK,CAAC,GAAE,EAAE,KAAK,CAAC,GAAE,EAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAAC,GAAE,IAAE,EAAE,GAAE,sBAAqB,GAAE,GAAE,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,IAAE;AAAE,MAAG,KAAG,MAAK;AAAC,MAAE,KAAK,CAAC;AAAE,QAAI,IAAE,EAAE,uBAAuB,CAAC;AAAE,QAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC;AAAA,EAAC;AAAC,SAAO,EAAE,QAAQ,OAAGA,IAAE,8BAA8B,CAAC,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,MAAI,CAAC,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAGK,KAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,EAAE;AAAE,SAAQN,OAAK,IAAI,IAAGA,GAAC;AAAE,IAAI;AAAA,CAAI,SAASA,KAAE;AAAC,EAAAA,IAAEA,IAAE,UAAQ,CAAC,IAAE,WAAUA,IAAEA,IAAE,QAAM,CAAC,IAAE,SAAQA,IAAEA,IAAE,OAAK,CAAC,IAAE,QAAOA,IAAEA,IAAE,SAAO,CAAC,IAAE,UAASA,IAAEA,IAAE,YAAU,CAAC,IAAE;AAAW,GAAG,OAAK,KAAG,CAAC,EAAE;AAAE,IAAI;AAAA,CAAI,SAASA,KAAE;AAAC,EAAAA,IAAEA,IAAE,SAAO,CAAC,IAAE,UAASA,IAAEA,IAAE,OAAK,CAAC,IAAE,QAAOA,IAAEA,IAAE,QAAM,CAAC,IAAE,SAAQA,IAAEA,IAAE,QAAM,CAAC,IAAE,SAAQA,IAAEA,IAAE,YAAU,CAAC,IAAE,aAAYA,IAAEA,IAAE,UAAQ,CAAC,IAAE,WAAUA,IAAEA,IAAE,MAAI,CAAC,IAAE;AAAK,GAAG,OAAK,KAAG,CAAC,EAAE;AAAE,IAAI;AAAG,SAAS,IAAIA,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,GAAE,GAAE,MAAK,GAAE,wBAAuB,EAAC,IAAE;AAAE,MAAG,EAAE,UAAQ,aAAW,EAAE,UAAQ,UAAU,OAAM,IAAI,MAAM,6DAA6D;AAAE,MAAG,EAAC,YAAW,GAAE,YAAW,GAAE,YAAW,GAAE,gBAAe,EAAC,IAAE,GAAE,IAAEC,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE;AAAE,MAAG,KAAG,MAAK;AAAC,QAAI,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM;AAAE,QAAG,EAAE,MAAM,WAAS,EAAE,OAAM,IAAI,MAAM,uDAAuD,EAAE,MAAM,MAAM,GAAG;AAAE,QAAE,EAAE;AAAA,EAAE;AAAC,MAAI,IAAE,KAAG,OAAK,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,GAAG,CAAC;AAAE,MAAG,KAAG,KAAK,OAAM,IAAI,MAAM,GAAG,CAAC,oEAAoE;AAAE,MAAI,IAAE,IAAE,EAAE,MAAM,CAAC,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,IAAE,EAAE,MAAM,CAAC,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,GAAG,2BAA2B,EAAE,MAAM,MAAM,GAAE,EAAE,GAAE,EAAE,MAAM,MAAM,GAAE,EAAE,CAAC,GAAE,IAAEA,IAAE,WAAW,CAAC,GAAG,GAAE,GAAE,CAAC,GAAE,EAAE,KAAK,GAAE,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,IAAI,WAAW,IAAI,WAAW,EAAE,KAAK,EAAE,MAAM,GAAE,IAAE,IAAI,WAAW,IAAI,WAAW,EAAE,KAAK,EAAE,MAAM;AAAE,SAAO,GAAG,GAAE,GAAE,EAAE,MAAM,QAAO,GAAE,GAAE,EAAE,MAAM,QAAO,GAAE,GAAE,GAAE,GAAE,GAAE,KAAG,GAAE,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC;AAAE,WAAS,EAAE,GAAE;AAAC,IAAAA,MAAE,EAAE,KAAK,MAAMD,KAAE,MAAK,CAAC,UAAS,UAAS,QAAQ,CAAC;AAAA,EAAC;AAAC,WAAS,EAAE,GAAE;AAAC,QAAG,EAAC,SAAQ,GAAE,QAAO,EAAC,GAAE,EAAC,EAAC,IAAE,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,WAAW,EAAE,OAAM,KAAG,EAAE,KAAK,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,WAAO,EAAE,cAAc,EAAE,KAAK,MAAI,KAAGC,IAAE,GAAE,GAAG,EAAE,KAAK,GAAE,CAAC,GAAE;AAAA,EAAC;AAAC,SAAM,EAAC,YAAWD,KAAE,aAAY,QAAO,WAAU,GAAE,YAAW,EAAC;AAAC;AAAC,IAAI,KAAG,GAAG,EAAE;AAAE,IAAI,KAAG,GAAG,EAAE;AAAE,IAAI,KAAG,GAAG,EAAE;AAAE,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAI;AAAE,WAAS,EAAE,GAAE;AAAC,QAAE,EAAE,KAAK,MAAMD,KAAE,MAAK,CAAC,UAAS,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,QAAQ,CAAC;AAAA,EAAC;AAAC,WAAS,EAAE,GAAE;AAAC,QAAG,EAAC,SAAQ,GAAE,QAAO,EAAC,IAAE,GAAE,EAAC,GAAE,GAAE,GAAE,EAAC,IAAE,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAEC,OAAG,OAAKA,MAAE,EAAE,OAAM,IAAE,EAAE,2BAA2B,EAAE,OAAM,EAAE,KAAK,GAAE,IAAE,EAAE,WAAW,GAAE,CAAC;AAAE,QAAG,EAAE,cAAc,CAAC,MAAI,EAAE,QAAO;AAAE,QAAI,IAAE,IAAI,WAAW,IAAI,WAAW,EAAE,KAAK,EAAE,MAAM,GAAE,IAAE,IAAI,WAAW,IAAI,WAAW,EAAE,KAAK,EAAE,MAAM,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,WAAO,EAAE,GAAE,GAAE,EAAE,MAAM,QAAO,GAAE,GAAE,EAAE,MAAM,QAAO,GAAG,EAAE,KAAK,GAAE,CAAC,GAAE;AAAA,EAAC;AAAC,SAAM,EAAC,YAAWD,KAAE,aAAY,QAAO,WAAU,GAAE,YAAW,EAAC;AAAC;AAAC,IAAI,MAAI;AAAR,IAAW,KAAG,GAAG,IAAG,GAAG;AAAE,IAAI;AAAG,SAAS,IAAIA,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,SAAQ,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,IAAEC,IAAE,WAAW,EAAE,CAAC,EAAE,OAAM,EAAE,CAAC,EAAE,KAAK;AAAE,MAAG,EAAE,cAAc,EAAE,KAAK,MAAI,EAAE,QAAO;AAAE,MAAI,IAAE,EAAE,IAAI,OAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,EAAE,GAAE,IAAE,IAAI,WAAW,IAAI,WAAW,CAAC,EAAE,MAAM,GAAE,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,SAAO,GAAG,GAAE,EAAE,QAAO,GAAG,EAAE,KAAK,GAAE,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,IAAC,IAAED;AAAE,MAAG,EAAE,UAAQ,SAAS,QAAO,GAAGC,IAAE,SAAS,EAAE,MAAM,GAAE,EAAE,OAAM,EAAE,KAAK;AAAE,MAAI,IAAEA,IAAE,WAAW,EAAE,OAAM,EAAE,KAAK,GAAE,IAAEA,IAAE,mBAAmB,CAAC;AAAE,SAAOA,IAAE,mBAAmB,CAAC,EAAE,IAAI,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,YAAW,GAAE;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,SAAQ,UAAS,UAAS,UAAS,SAAQ,QAAQ,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,CAAC,GAAE,CAAC,IAAE,IAAI,EAAE,EAAE,OAAM,EAAE,IAAI,GAAE,IAAE;AAAG,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,IAAI,GAAE,CAAC,MAAI,MAAI,IAAE;AAAI,MAAI,IAAE,IAAI,EAAE,EAAE,OAAM,EAAE,IAAI,GAAE,IAAE,EAAC,QAAO,EAAE,EAAE,QAAO,OAAM,GAAE,OAAM,EAAE,EAAE,MAAK;AAAE,MAAG,GAAE;AAAC,QAAI,IAAE,GAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,CAAC;AAAE,WAAO,EAAE,QAAM,GAAE;AAAA,EAAC;AAAC,MAAI,IAAEA,IAAE,WAAW,GAAE,EAAE,KAAK,GAAE,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,IAAI,WAAW,IAAI,WAAW,CAAC,EAAE,MAAM,GAAE,IAAE,IAAI,WAAW,IAAI,WAAW,EAAE,KAAK,EAAE,MAAM;AAAE,SAAO,GAAG,GAAE,GAAE,EAAE,MAAM,QAAO,GAAG,EAAE,KAAK,GAAE,GAAE,GAAE,EAAE,MAAM,GAAE;AAAC;AAAC,SAAS,IAAID,KAAE,GAAE;AAAC,MAAIC,MAAE,IAAI,MAAMD,IAAE,MAAM;AAAE,WAAQ,IAAE,GAAE,IAAEC,IAAE,QAAO,IAAI,CAAAA,IAAE,CAAC,IAAED,IAAE,EAAE,CAAC,CAAC;AAAE,SAAOC;AAAC;AAAC,SAAS,IAAID,KAAE,GAAE;AAAC,MAAIC,MAAE,CAAC,GAAE,IAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAED,IAAE,QAAO,EAAE,EAAE,CAAAA,IAAE,CAAC,MAAI,KAAGC,IAAE,KAAKD,IAAE,CAAC,CAAC,GAAEA,IAAE,EAAE,CAAC,CAAC,MAAI,KAAG,EAAE,KAAK,EAAE,CAAC,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE,GAAE;AAAC,QAAI,IAAE;AAAG,aAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE,EAAE,GAAE,CAAC,KAAG,MAAI,MAAI,MAAI,EAAE,CAAC,IAAE,EAAE,CAAC,OAAK,IAAE;AAAG,MAAE,CAAC,IAAE;AAAA,EAAC;AAAC,SAAM,CAACC,KAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,YAAW,IAAG,WAAU,IAAG;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAED,IAAE,OAAM,IAAEA,IAAE,MAAM,QAAO,IAAE,EAAE,eAAe,GAAE,CAAC,GAAE,IAAE,GAAE,IAAE,EAAE,mBAAmB,GAAE,CAAC,GAAE,IAAE,MAAK,IAAE;AAAG,MAAG,KAAG,MAAK;AAAC,QAAI,IAAE,IAAI,MAAM,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,IAAI,GAAE,CAAC,IAAE,EAAE,EAAE,CAAC,CAAC;AAAE,QAAE,EAAE,iBAAiB,EAAE,QAAO,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAEA,IAAC,GAAE,OAAM,EAAC,MAAK,EAAC,GAAE,SAAQC,IAAC,CAAC;AAAE,QAAI,IAAEA,IAAE,UAAU,IAAID,IAAE,MAAM,EAAE;AAAG,IAAAC,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,OAAK,MAAI,IAAE;AAAA,EAAG;AAAC,SAAM,EAAC,YAAW,GAAE,cAAa,GAAE,MAAK,GAAE,oBAAmB,EAAC;AAAC;AAAC,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,wBAAwB,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,SAAQ,GAAE,QAAOC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,MAAK,GAAE,UAAS,EAAC,IAAE,GAAE,EAAC,GAAE,EAAC,IAAEC,KAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,GAAE,EAAC,YAAW,GAAE,MAAK,GAAE,cAAa,GAAE,oBAAmB,EAAC,IAAE,GAAG,GAAE,GAAE,CAAC;AAAE,MAAG,GAAE;AAAC,QAAI,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,QAAE,GAAE,IAAE;AAAA,EAAC;AAAC,MAAI,IAAE,EAAE,MAAM;AAAO,IAAE,2BAA2B,OAAM,GAAE,CAAC;AAAE,MAAG,CAAC,GAAE,CAAC,IAAE,EAAE,0BAA0B,EAAE,OAAM,CAAC,GAAE,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,EAAE,WAAW,GAAE,EAAE,KAAK;AAAE,MAAG,EAAE,cAAc,EAAE,KAAK,MAAI,GAAE;AAAC,QAAI,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,OAAG,GAAE,GAAE,CAAC;AAAA,EAAC;AAAC,MAAG,KAAG,EAAE,YAAY,EAAE,MAAM,GAAE,GAAE;AAAC,QAAI,IAAE,EAAE,qBAAqB,EAAE,OAAM,CAAC;AAAE,MAAE,QAAM;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,wBAAwB,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,SAAQ,GAAE,QAAOC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,MAAK,GAAE,UAAS,EAAC,IAAE,GAAE,EAAC,GAAE,EAAC,IAAEC,KAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,GAAE,EAAC,YAAW,GAAE,MAAK,GAAE,cAAa,GAAE,oBAAmB,EAAC,IAAE,GAAG,GAAE,GAAE,CAAC;AAAE,MAAG,GAAE;AAAC,QAAI,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,QAAE,GAAE,IAAE;AAAA,EAAC;AAAC,MAAI,IAAE,EAAE,MAAM;AAAO,IAAE,2BAA2B,OAAM,GAAE,CAAC;AAAE,MAAG,CAAC,GAAE,CAAC,IAAE,EAAE,0BAA0B,EAAE,OAAM,CAAC,GAAE,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,EAAE,WAAW,GAAE,EAAE,KAAK;AAAE,MAAG,EAAE,cAAc,EAAE,KAAK,MAAI,GAAE;AAAC,QAAI,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,OAAG,GAAE,GAAE,CAAC;AAAA,EAAC;AAAC,MAAG,KAAG,EAAE,YAAY,EAAE,MAAM,GAAE,GAAE;AAAC,QAAI,IAAE,EAAE,qBAAqB,EAAE,OAAM,CAAC;AAAE,MAAE,QAAM;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAI;AAAE,WAASC,IAAE,GAAE;AAAC,QAAE,EAAE,KAAK,MAAMD,KAAE,MAAK,CAAC,UAAS,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAA,EAAC;AAAC,WAAS,EAAE,GAAE;AAAC,QAAG,EAAC,SAAQ,GAAE,QAAO,GAAE,OAAM,EAAC,IAAE,GAAE,EAAC,MAAK,EAAC,IAAE,GAAE,EAAC,GAAE,EAAC,IAAE,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,GAAE,IAAE,GAAE,EAAC,YAAW,GAAE,MAAK,GAAE,oBAAmB,EAAC,IAAE,GAAG,GAAE,GAAE,CAAC;AAAE,QAAG,GAAE;AAAC,UAAI,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,YAAI,MAAI,IAAE,GAAE,IAAE;AAAA,IAAE;AAAC,QAAI,IAAE,EAAE,MAAM,MAAM,GAAE,EAAE,GAAE,IAAE,EAAE,WAAW,GAAE,OAAO,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,cAAc,EAAE,KAAK,GAAE,IAAE,EAAE,MAAM,EAAE,CAAC,CAAC;AAAE,WAAO,EAAE,GAAE,GAAG,EAAE,KAAK,GAAE,GAAE,GAAE,CAAC,GAAE,KAAG,EAAE,YAAY,EAAE,MAAM,GAAE;AAAA,EAAC;AAAC,SAAM,EAAC,YAAWA,KAAE,aAAY,QAAO,WAAUC,KAAE,YAAW,EAAC;AAAC;AAAC,IAAI,KAAG,GAAG,EAAE;AAAE,IAAI,KAAG,GAAG,EAAE;AAAE,IAAI,KAAG,GAAG,EAAE;AAAE,IAAI,KAAG,GAAG,EAAE;AAAE,IAAI,KAAG,GAAG,EAAE;AAAE,IAAI,KAAG,GAAG,IAAG,KAAE;AAAE,IAAI,KAAG,GAAG,EAAE;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,OAAMC,KAAE,SAAQ,EAAC,IAAED,KAAE,IAAE,EAAE,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,EAAC,YAAW,GAAE,SAAQ,GAAE,KAAI,GAAE,iBAAgB,EAAC,IAAEC,KAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,EAAE,QAAQ,KAAI,IAAE,EAAE,QAAQ,OAAM,IAAE,EAAE,QAAQ,QAAO,IAAE,EAAE,QAAQ,MAAK,IAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,EAAE;AAAW,MAAG,EAAE,eAAa,eAAe,OAAM,IAAI,MAAM,6CAA6C,EAAE,UAAU,+BAA+B;AAAE,MAAG,EAAE,kBAAgB,KAAG,EAAE,mBAAiB,EAAE,OAAM,IAAI,MAAM,0EAA0E,EAAE,cAAc,KAAK,EAAE,aAAa,IAAI;AAAE,MAAI,IAAE,EAAE,WAAW,EAAE,UAAS,SAAS,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,SAAO,GAAG,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,aAAY,MAAK,CAAC,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,YAAW,GAAE,SAAQ,GAAE,KAAI,GAAE,iBAAgB,GAAE,YAAW,EAAC,IAAE,GAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,IAAEC,IAAE,WAAW,EAAE,UAAS,EAAE,KAAK;AAAE,SAAO,GAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,EAAE,WAAU,EAAE,YAAW,EAAE,SAAQ,EAAE,UAAS,EAAE,SAAQ,EAAE,UAAS,EAAE,WAAU,EAAE,UAAS,EAAE,aAAY,EAAE,cAAa,EAAE,aAAY,EAAE,eAAc,EAAE,gBAAe,EAAE,eAAc,EAAE,sBAAqB,EAAE,uBAAsB,EAAE,sBAAqB,EAAE,QAAQ,OAAM,EAAE,QAAQ,KAAI,EAAE,QAAQ,IAAI,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,iBAAgB,MAAK,CAAC,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,IAAG,GAAE,OAAM,EAAC,IAAE,GAAE,EAAC,YAAW,GAAE,SAAQ,GAAE,KAAI,GAAE,iBAAgB,EAAC,IAAE,GAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,IAAEC,IAAE,WAAW,EAAE,OAAM,EAAE,KAAK;AAAE,SAAO,GAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,EAAE,WAAU,EAAE,YAAW,EAAE,SAAQ,EAAE,UAAS,EAAE,SAAQ,EAAE,UAAS,EAAE,WAAU,EAAE,UAAS,EAAE,aAAY,EAAE,cAAa,EAAE,aAAY,EAAE,eAAc,EAAE,gBAAe,EAAE,eAAc,EAAE,sBAAqB,EAAE,uBAAsB,EAAE,sBAAqB,EAAE,QAAQ,OAAM,EAAE,QAAQ,KAAI,EAAE,QAAQ,MAAK,EAAE,aAAY,EAAE,cAAa,EAAE,WAAW,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,eAAc,MAAK,CAAC,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,IAAG,GAAE,OAAM,EAAC,IAAE,GAAE,EAAC,YAAW,GAAE,SAAQ,GAAE,KAAI,EAAC,IAAE,GAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,CAAC,GAAE,IAAEC,IAAE,WAAW,EAAE,OAAM,EAAE,KAAK;AAAE,SAAO,GAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,EAAE,WAAU,EAAE,YAAW,EAAE,UAAS,EAAE,SAAQ,EAAE,WAAU,EAAE,UAAS,EAAE,cAAa,EAAE,aAAY,EAAE,gBAAe,EAAE,eAAc,EAAE,uBAAsB,EAAE,sBAAqB,EAAE,QAAQ,KAAI,EAAE,QAAQ,MAAK,EAAE,cAAa,EAAE,WAAW,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,OAAMC,IAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,OAAM,EAAC,IAAEC,KAAE,IAAE,EAAE,cAAc,EAAE,KAAK,GAAE,IAAE,EAAE,uBAAuB,GAAE,CAAC;AAAE,SAAO,EAAE,OAAO,MAAI,EAAE,cAAc,CAAC,GAAE,MAAI,cAAc,CAAC,gBAAgB,EAAE,KAAK,kEAAkE,GAAED,IAAE,QAAQ,OAAO,EAAE,MAAM,GAAE,EAAC,QAAO,EAAE,QAAO,OAAM,GAAE,OAAM,EAAE,MAAK;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,YAAW,GAAE;AAAE,IAAI;AAAG,SAAS,IAAIA,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,GAAE,EAAC,IAAE,GAAE,EAAC,YAAW,GAAE,YAAW,EAAC,IAAE;AAAE,MAAG,EAAE,UAAQ,aAAW,EAAE,UAAQ,UAAU,OAAM,IAAI,MAAM,4DAA4D;AAAE,MAAI,IAAE,EAAE,MAAM,QAAO,IAAE,EAAE,MAAM,QAAO,IAAE,IAAE,EAAE,MAAM,IAAE,CAAC,IAAE,EAAE,MAAM,IAAE,CAAC,GAAE,IAAE,IAAE,EAAE,MAAM,IAAE,CAAC,IAAE,EAAE,MAAM,IAAE,CAAC,GAAE,IAAE,IAAE,EAAE,MAAM,IAAE,CAAC,IAAE,EAAE,MAAM,IAAE,CAAC,GAAE,IAAE,IAAE,EAAE,MAAM,IAAE,CAAC,IAAE,EAAE,MAAM,IAAE,CAAC,GAAE,IAAE,EAAE,MAAM,MAAM,GAAE,EAAE,GAAE,IAAE,EAAE,MAAM,MAAM,GAAE,EAAE,GAAE,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,GAAG,2BAA2B,EAAE,MAAM,MAAM,GAAE,EAAE,GAAE,EAAE,MAAM,MAAM,GAAE,EAAE,CAAC,EAAE,OAAO,CAAC,GAAE,CAAC,CAAC;AAAE,IAAE,OAAO,MAAI,GAAE,MAAI,kCAAkC,CAAC,UAAU,CAAC,4BAA4B,EAAE,KAAK,QAAQ,EAAE,KAAK,mBAAmB,CAAC,mBAAmB,CAAC,cAAc;AAAE,MAAI,IAAE,IAAE,CAAC,GAAE,GAAE,CAAC,IAAE,CAAC,GAAE,GAAE,CAAC,GAAE,IAAE,IAAE,CAAC,GAAE,GAAE,CAAC,IAAE,CAAC,GAAE,GAAE,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,IAAE,EAAE,MAAM,CAAC,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,IAAE,EAAE,MAAM,CAAC,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,KAAK,IAAI,GAAE,CAAC,GAAE,IAAEA,IAAE,WAAW,CAAC,GAAE,GAAE,CAAC,GAAE,EAAE,KAAK,GAAE,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,IAAI,WAAW,IAAI,WAAW,EAAE,KAAK,EAAE,MAAM,GAAE,IAAE,IAAI,WAAW,IAAI,WAAW,EAAE,KAAK,EAAE,MAAM;AAAE,SAAO,GAAG,GAAE,GAAE,EAAE,MAAM,QAAO,GAAE,GAAE,EAAE,MAAM,QAAO,GAAE,GAAE,CAAC,GAAEA,IAAE,YAAY,EAAE,MAAM,GAAEA,IAAE,YAAY,EAAE,MAAM,GAAE,EAAE,QAAM,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,OAAM,EAAC,OAAMC,KAAE,MAAK,EAAC,GAAE,SAAQ,EAAC,IAAED,KAAE,CAAC,GAAE,CAAC,IAAE,GAAG,iBAAiB,GAAEC,KAAE,CAAC,GAAE,IAAE,GAAG,iBAAiB,EAAE,OAAM,GAAE,CAAC,GAAE,IAAE,EAAE,SAAS,EAAE,MAAM,GAAE,IAAE,EAAE,WAAW,GAAE,EAAE,KAAK,GAAE,IAAE,EAAE,eAAe,EAAE,KAAK,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM;AAAE,MAAG,GAAE;AAAC,QAAI,IAAE,GAAG,kBAAkB,GAAE,CAAC;AAAE,WAAO,EAAE,UAAQ,WAAS,EAAE,cAAY,EAAE,MAAM,GAAE,IAAE,EAAE,cAAc,CAAC,CAAC,IAAE,EAAE,mBAAmB,CAAC,EAAE,IAAI,EAAE,SAAS,GAAE,IAAE,EAAE,cAAc,CAAC,CAAC,CAAC,GAAE;AAAA,EAAC;AAAC,MAAG,EAAE,UAAQ,UAAS;AAAC,QAAI,IAAE,GAAG,GAAE,GAAE,GAAE,EAAE,OAAM,EAAE,KAAK;AAAE,WAAO,EAAE,cAAY,GAAE;AAAA,EAAC;AAAC,MAAI,IAAE,EAAE,mBAAmB,CAAC,GAAE,IAAE,EAAE,MAAM;AAAO,MAAG,MAAI,EAAE,KAAI,GAAE,EAAE,CAAC,GAAE,GAAE,GAAE,CAAC;AAAA,WAAU,MAAI,EAAE,KAAI,GAAE,EAAE,CAAC,GAAE,EAAE,CAAC,GAAE,GAAE,GAAE,CAAC;AAAA,WAAU,MAAI,EAAE,KAAI,GAAE,EAAE,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,CAAC,GAAE,GAAE,GAAE,CAAC;AAAA,OAAM;AAAC,QAAI,IAAE,GAAG,GAAE,GAAE,GAAE,EAAE,OAAM,EAAE,KAAK;AAAE,MAAE,IAAI,CAAC;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,SAAS,IAAID,KAAE,GAAEC,KAAE,GAAE,GAAE;AAAC,MAAI,IAAE,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,IAAE,EAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,QAAI,IAAE,IAAE,IAAE;AAAE,IAAAA,IAAE,IAAID,IAAE,SAAS,GAAE,IAAE,EAAE,CAAC,CAAC,GAAE,CAAC,GAAE,KAAG,EAAE,CAAC;AAAA,EAAC;AAAC;AAAC,SAAS,IAAIA,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE;AAAC,MAAI,IAAE,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,IAAE,EAAE,CAAC,GAAE,IAAE,IAAE,EAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,IAAI,UAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,QAAI,IAAE,IAAE,IAAE,IAAEA,MAAE;AAAE,MAAE,IAAID,IAAE,SAAS,GAAE,IAAE,EAAE,CAAC,CAAC,GAAE,CAAC,GAAE,KAAG,EAAE,CAAC;AAAA,EAAC;AAAC;AAAC,SAAS,IAAIA,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE,GAAE;AAAC,MAAI,IAAE,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,IAAE,EAAE,CAAC,GAAE,IAAE,IAAE,EAAE,CAAC,GAAE,IAAE,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,IAAI,UAAQ,IAAE,GAAE,IAAE,GAAE,IAAI,UAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,QAAI,IAAE,IAAE,IAAE,IAAEA,MAAE,IAAE,IAAE;AAAE,MAAE,IAAID,IAAE,SAAS,GAAE,IAAE,EAAE,CAAC,CAAC,GAAE,CAAC,GAAE,KAAG,EAAE,CAAC;AAAA,EAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,YAAW,GAAE;AAAE,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,YAAW,GAAE,OAAM,EAAC,IAAE,GAAE,IAAE,EAAE,OAAO,CAAC,GAAE,MAAI,IAAE,CAAC,GAAE,IAAE,EAAE,YAAY,EAAE,OAAM,GAAE,CAAC,GAAE,IAAE,EAAE,YAAY,EAAE,QAAO,EAAE,MAAM,GAAE,IAAE,EAAE,oBAAoB,EAAE,OAAM,GAAE,CAAC,GAAE,IAAE,EAAE,oBAAoB,GAAE,EAAE,MAAM,GAAE,IAAE,EAAE,aAAa,GAAE,GAAE,EAAE,MAAM,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,GAAE,MAAK,EAAC,EAAC,CAAC;AAAE,SAAOA,IAAE,YAAY,EAAE,MAAM,GAAEA,IAAE,YAAY,EAAE,MAAM,GAAEA,IAAE,YAAY,EAAE,MAAM,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,WAAU,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,SAAQ,GAAE,QAAOC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,SAAQ,EAAC,IAAEC,KAAE,EAAC,MAAK,EAAC,IAAE,GAAE,IAAE,EAAE,MAAM,OAAO,CAAC,GAAE,MAAI,IAAE,GAAE,CAAC,MAAI,GAAE,IAAE,EAAE,MAAM,WAAS,IAAE,CAAC,CAAC,IAAE,CAAC,EAAE,MAAM,CAAC,GAAE,CAAC,GAAE,IAAE,EAAE,WAAW,GAAE,EAAE,KAAK;AAAE,WAAS,EAAE,GAAE;AAAC,WAAO,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAA,EAAE;AAAC,SAAO,GAAG,EAAE,CAAC,GAAE,GAAE,GAAE,EAAE,CAAC,GAAE,GAAG,EAAE,KAAK,GAAE,EAAE,CAAC,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI,MAAI;AAAR,IAAW,KAAG,GAAG,IAAG,GAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,IAAG,GAAE,IAAG,EAAC,IAAE,GAAE,IAAEC,IAAE,mBAAmB,CAAC,GAAE,IAAEA,IAAE,mBAAmB,CAAC,GAAE,IAAE,EAAE,2BAA2B,MAAM,KAAK,CAAC,GAAE,MAAM,KAAK,CAAC,CAAC;AAAE,SAAOA,IAAE,WAAW,CAAC,EAAE,MAAM,GAAE,SAAQ,QAAO,IAAI,WAAW,CAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,YAAW,IAAG;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,OAAM,EAAC,OAAMC,IAAC,GAAE,SAAQ,EAAC,IAAED,KAAE,IAAE,EAAE,WAAW,EAAE,OAAMC,GAAC,GAAE,IAAE,EAAE,mBAAmB,CAAC;AAAE,SAAO,EAAE,mBAAmB,CAAC,EAAE,IAAI,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,EAAE;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,cAAa,GAAE,cAAa,EAAC,IAAE,GAAE,IAAEC,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAEA,IAAE,WAAW,EAAE,OAAM,EAAE,KAAK,GAAE,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,SAAO,GAAG,GAAE,GAAE,GAAE,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,IAAE,EAAE,eAAeA,IAAE,MAAM,MAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAE,IAAE,EAAE,IAAI,OAAG,EAAE,KAAK;AAAE,IAAE,uBAAuB,GAAE,CAAC;AAAE,MAAI,IAAE,EAAE,gBAAgB,EAAE,IAAI,OAAG,EAAE,KAAK,GAAE,CAAC,GAAE,IAAE,EAAE,OAAO,OAAG,EAAE,cAAc,EAAE,KAAK,IAAE,CAAC;AAAE,MAAG,EAAE,WAAS,EAAE,QAAO,GAAG,EAAC,QAAO,EAAC,GAAE,EAAE,CAAC,EAAC,GAAE,SAAQC,IAAC,CAAC;AAAE,MAAI,IAAEA,IAAE,WAAW,GAAE,EAAE,CAAC,EAAE,KAAK;AAAE,MAAG,EAAE,cAAc,CAAC,MAAI,EAAE,QAAO;AAAE,MAAG,EAAE,CAAC,EAAE,UAAQ,UAAS;AAAC,QAAI,IAAE,EAAE,IAAI,OAAG;AAAC,UAAI,IAAE,CAAC,IAAG,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC,CAAC,CAAC;AAAE,aAAO,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAA,IAAC,CAAC,GAAE,IAAE,EAAE,IAAI,QAAI,EAAC,MAAKA,IAAE,SAAS,EAAE,MAAM,GAAE,OAAM,EAAE,MAAK,EAAE;AAAE,QAAE,EAAE,gBAAgB,EAAE,IAAI,OAAG,EAAE,KAAK,GAAE,CAAC;AAAE,QAAI,IAAE,EAAE,CAAC,EAAE,MAAM,CAAC,MAAI,GAAE,IAAE,GAAG,GAAE,GAAE,EAAE,CAAC,EAAE,OAAM,CAAC,GAAE,IAAE,EAAE,gBAAgB,EAAE,IAAI,OAAG,EAAE,KAAK,GAAE,CAAC;AAAE,MAAE,QAAM;AAAE,QAAI,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM;AAAE,WAAO,EAAE,cAAY,EAAE,uBAAuB,CAAC,GAAE,EAAE,QAAQ,OAAGA,IAAE,YAAY,EAAE,MAAM,CAAC,GAAE;AAAA,EAAC;AAAC,MAAI,IAAE,EAAE,cAAc,EAAE,CAAC,EAAE,MAAM,MAAM,GAAE,CAAC,CAAC,GAAE,IAAE,GAAE,IAAE,EAAE,IAAI,OAAG;AAAC,QAAI,IAAE,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC,CAAC;AAAE,WAAO,KAAG,GAAE;AAAA,EAAC,CAAC,GAAE,IAAE,EAAE,IAAI,OAAGA,IAAE,mBAAmB,CAAC,CAAC,GAAE,IAAEA,IAAE,mBAAmB,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,QAAI,IAAE,IAAE;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,KAAI;AAAC,UAAI,IAAE,EAAE,CAAC,GAAE,IAAE,IAAE,GAAE,IAAE,EAAE,CAAC,EAAE,SAAS,GAAE,IAAE,CAAC;AAAE,QAAE,IAAI,GAAE,CAAC,GAAE,KAAG;AAAA,IAAC;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,YAAW,GAAE;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,OAAMC,KAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,QAAO,EAAC,IAAE,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,EAAC,SAAQ,GAAE,WAAU,GAAE,KAAI,GAAE,iBAAgB,GAAE,YAAW,EAAC,IAAEC,KAAE,IAAE,EAAE,wBAAwB,CAAC,GAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,OAAG,CAAC,GAAE,IAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,EAAE,QAAQ,KAAI,IAAE,EAAE,QAAQ,OAAM,IAAE,EAAE,QAAQ,QAAO,IAAE,EAAE,QAAQ,MAAK,IAAE,EAAE,gBAAe,IAAE,EAAE,eAAc,IAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,EAAE,YAAW,IAAE,EAAE,aAAY,IAAE,EAAE,QAAQ,SAAO,SAAO,IAAE;AAAE,MAAG,EAAE,eAAa,eAAe,OAAM,IAAI,MAAM,oDAAoD,EAAE,UAAU,+BAA+B;AAAE,MAAI,IAAE,EAAE,WAAW,EAAE,UAAS,SAAS,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,SAAO,GAAG,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,SAAQ,GAAE,QAAOC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,IAAG,GAAE,QAAO,EAAC,IAAEC,KAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,YAAW,GAAE,iBAAgB,GAAE,YAAW,EAAC,IAAE,GAAE,IAAE,GAAE,IAAE,EAAE,wBAAwB,CAAC,GAAE,IAAE,EAAE,kBAAkB,GAAE,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,OAAG,CAAC,GAAE,EAAC,WAAU,GAAE,cAAa,GAAE,aAAY,GAAE,YAAW,GAAE,UAAS,GAAE,SAAQ,GAAE,aAAY,GAAE,WAAU,GAAE,UAAS,GAAE,cAAa,GAAE,aAAY,EAAC,IAAE,GAAE,IAAE,IAAE,IAAE,EAAE,QAAQ,KAAI,IAAE,IAAE,IAAE,EAAE,QAAQ,MAAK,IAAE,EAAE,eAAa,gBAAe,IAAE,EAAE,eAAe,EAAE,OAAO,GAAE,IAAE,EAAE,eAAe,EAAE,KAAK,GAAE,CAAC,GAAE,GAAE,CAAC,IAAE,EAAE,eAAe,EAAE,KAAK,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,GAAE,IAAE,IAAE,EAAE,CAAC,IAAE,GAAE,IAAE,IAAE,IAAE,EAAE,CAAC,GAAE,KAAG,EAAE,CAAC,GAAE,KAAG,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,GAAE,KAAG,IAAE,EAAE,CAAC,IAAE,GAAE,KAAG,IAAE,IAAE,EAAE,CAAC,GAAE,KAAG,EAAE,WAAW,EAAE,SAAQ,SAAS,GAAE,KAAG,EAAE,UAAU,IAAI,GAAG,MAAM,EAAE,IAAG,KAAG,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,KAAG,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,SAAO,GAAG,IAAG,IAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,IAAG,IAAG,IAAG,IAAG,EAAE,GAAE;AAAE;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,QAAO,EAAC,IAAE,GAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,WAAU,EAAC,IAAE;AAAE,MAAG,EAAE,UAAQ,UAAU,OAAM,IAAI,MAAM,yCAAyC,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,UAAQ,UAAU,OAAM,IAAI,MAAM,8CAA8C,EAAE,KAAK,EAAE;AAAE,MAAI,IAAE,EAAE,kBAAkB,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,CAAC,GAAE,IAAEC,IAAE,WAAW,EAAE,UAAS,EAAE,KAAK;AAAE,SAAO,GAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,EAAE,WAAU,EAAE,SAAQ,EAAE,UAAS,EAAE,SAAQ,EAAE,YAAW,EAAE,UAAS,EAAE,WAAU,EAAE,UAAS,EAAE,aAAY,EAAE,aAAY,EAAE,cAAa,EAAE,aAAY,EAAE,eAAc,EAAE,gBAAe,EAAE,eAAc,EAAE,aAAY,EAAE,cAAa,EAAE,aAAY,EAAE,QAAQ,OAAM,EAAE,QAAQ,KAAI,EAAE,QAAQ,IAAI,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,IAAG,EAAC,IAAE,GAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,aAAY,EAAC,IAAE;AAAE,MAAG,EAAE,UAAQ,UAAU,OAAM,IAAI,MAAM,0CAA0C,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,UAAQ,UAAU,OAAM,IAAI,MAAM,8CAA8C,EAAE,KAAK,EAAE;AAAE,MAAI,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,CAAC,GAAE,IAAEC,IAAE,WAAW,EAAE,aAAY,EAAE,KAAK;AAAE,SAAO,GAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,EAAE,WAAU,EAAE,SAAQ,EAAE,UAAS,EAAE,SAAQ,EAAE,YAAW,EAAE,UAAS,EAAE,WAAU,EAAE,UAAS,EAAE,aAAY,EAAE,aAAY,EAAE,cAAa,EAAE,aAAY,EAAE,eAAc,EAAE,gBAAe,EAAE,eAAc,EAAE,aAAY,EAAE,cAAa,EAAE,aAAY,EAAE,QAAQ,OAAM,EAAE,QAAQ,KAAI,EAAE,QAAQ,IAAI,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,IAAG,GAAE,QAAO,EAAC,IAAE,GAAE,EAAC,KAAI,GAAE,SAAQ,GAAE,YAAW,EAAC,IAAE;AAAE,MAAG,EAAE,UAAQ,UAAU,OAAM,IAAI,MAAM,0CAA0C,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,UAAQ,UAAU,OAAM,IAAI,MAAM,8CAA8C,EAAE,KAAK,EAAE;AAAE,MAAI,IAAE,EAAE,kBAAkB,GAAE,EAAE,OAAM,GAAE,GAAE,CAAC,GAAE,IAAEC,IAAE,WAAW,EAAE,SAAQ,EAAE,KAAK;AAAE,SAAO,GAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,EAAE,WAAU,EAAE,SAAQ,EAAE,UAAS,EAAE,SAAQ,EAAE,YAAW,EAAE,UAAS,EAAE,WAAU,EAAE,UAAS,EAAE,aAAY,EAAE,aAAY,EAAE,cAAa,EAAE,aAAY,EAAE,eAAc,EAAE,gBAAe,EAAE,eAAc,EAAE,aAAY,EAAE,cAAa,EAAE,aAAY,EAAE,QAAQ,OAAM,EAAE,QAAQ,KAAI,EAAE,QAAQ,IAAI,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI,KAAG,GAAG,EAAE;AAAE,IAAI,KAAG,GAAG,EAAE;AAAE,IAAI;AAAA,CAAI,SAASD,KAAE;AAAC,EAAAA,IAAEA,IAAE,WAAS,CAAC,IAAE,YAAWA,IAAEA,IAAE,UAAQ,CAAC,IAAE;AAAS,GAAG,OAAK,KAAG,CAAC,EAAE;AAAE,IAAI;AAAG,SAAS,IAAIA,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,UAAS,UAAS,SAAQ,UAAS,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,SAAQ,GAAE,QAAOC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,QAAO,GAAE,oBAAmB,GAAE,UAAS,EAAC,IAAE,GAAE,EAAC,OAAM,GAAE,OAAM,GAAE,QAAO,EAAC,IAAEC,KAAE,IAAE,EAAE,MAAM,CAAC,GAAE,CAAC,GAAE,CAAC,IAAE,GAAE,IAAE,CAAC,GAAE,GAAE,GAAE,EAAE,MAAM,CAAC,CAAC,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,GAAE;AAAE,IAAE,UAAQ,cAAY,IAAE,GAAG,EAAC,SAAQ,GAAE,QAAO,EAAC,GAAE,EAAC,GAAE,OAAM,EAAC,OAAM,UAAS,EAAC,CAAC,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM;AAAG,MAAI,IAAE,EAAE,IAAG,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,WAAW,GAAE,SAAS,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,IAAI,WAAW,IAAI,WAAW,EAAE,KAAK,EAAE,MAAM;AAAE,SAAO,GAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAG,CAAC,GAAE,GAAE,CAAC,GAAE,KAAG,QAAM,EAAE,YAAY,EAAE,MAAM,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,MAAK,GAAE,WAAU,GAAE,SAAQ,EAAC,IAAE,GAAE,IAAE,EAAE,MAAM;AAAO,IAAE,OAAO,EAAE,UAAQ,aAAW,EAAE,UAAQ,SAAQ,MAAI,4BAA4B,EAAE,KAAK,8BAA8B;AAAE,MAAI,IAAE,EAAE,mBAAmB,CAAC,CAAC,GAAE,CAAC,GAAE,IAAE;AAAE,QAAI,SAAO,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,OAAM,EAAC,MAAK,EAAC,GAAE,SAAQC,IAAC,CAAC;AAAG,MAAI,IAAE,EAAE,iBAAiB,GAAE,CAAC,EAAE,CAAC;AAAE,IAAE,2BAA2B,WAAU,CAAC,CAAC,GAAE,CAAC;AAAE,MAAI,IAAEA,IAAE,WAAW,EAAE,OAAM,EAAE,KAAK,GAAE,IAAE,EAAE,MAAM,CAAC,GAAE,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,KAAG,GAAE,IAAE,IAAE,GAAE,IAAE,IAAE,GAAE,GAAE,GAAE,GAAG,EAAE,KAAK,CAAC;AAAE,MAAI,IAAE;AAAE,MAAG,MAAI,MAAK;AAAC,QAAI,IAAE,EAAE,uBAAuB,CAAC;AAAE,QAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,OAAM,EAAC,MAAK,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAEA,IAAE,YAAY,EAAE,MAAM,GAAEA,IAAE,YAAY,EAAE,MAAM;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,MAAK,GAAE,WAAU,GAAE,SAAQ,EAAC,IAAE,GAAE,IAAE,EAAE,MAAM;AAAO,IAAE,OAAO,EAAE,UAAQ,aAAW,EAAE,UAAQ,SAAQ,MAAI,2BAA2B,EAAE,KAAK,8BAA8B;AAAE,MAAI,IAAE,EAAE,mBAAmB,CAAC,CAAC,GAAE,CAAC,GAAE,IAAE;AAAE,QAAI,SAAO,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,OAAM,EAAC,MAAK,EAAC,GAAE,SAAQC,IAAC,CAAC;AAAG,MAAI,IAAE,EAAE,iBAAiB,GAAE,CAAC,EAAE,CAAC;AAAE,IAAE,2BAA2B,UAAS,CAAC,CAAC,GAAE,CAAC;AAAE,MAAI,IAAEA,IAAE,WAAW,EAAE,OAAM,EAAE,KAAK,GAAE,IAAE,EAAE,MAAM,CAAC,GAAE,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,KAAG,GAAE,IAAE,IAAE,GAAE,IAAE,IAAE,GAAE,GAAE,GAAE,GAAG,EAAE,KAAK,CAAC;AAAE,MAAI,IAAE;AAAE,MAAG,MAAI,MAAK;AAAC,QAAI,IAAE,EAAE,uBAAuB,CAAC;AAAE,QAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,OAAM,EAAC,MAAK,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAEA,IAAE,YAAY,EAAE,MAAM,GAAEA,IAAE,YAAY,EAAE,MAAM;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,iBAAgB,MAAK,CAAC,UAAS,SAAQ,UAAS,UAAS,WAAU,UAAS,UAAS,WAAU,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,SAAQ,GAAE,QAAOC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,SAAQ,EAAC,IAAEC,KAAE,EAAC,MAAK,GAAE,cAAa,EAAC,IAAE,GAAE,IAAE,EAAE,MAAM,OAAO,CAAC,GAAE,MAAI,IAAE,GAAE,CAAC,MAAI,GAAE,IAAE,EAAE,MAAM,WAAS,IAAE,CAAC,CAAC,IAAE,CAAC,EAAE,MAAM,CAAC,GAAE,CAAC,GAAE,IAAE,EAAE,WAAW,GAAE,EAAE,KAAK;AAAE,WAAS,EAAE,GAAE;AAAC,WAAO,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAA,EAAE;AAAC,SAAO,GAAG,EAAE,CAAC,GAAE,IAAI,WAAW,IAAI,WAAW,EAAE,KAAK,EAAE,MAAM,GAAE,EAAE,MAAM,QAAO,GAAE,GAAE,EAAE,CAAC,GAAE,GAAG,EAAE,KAAK,GAAE,GAAE,EAAE,CAAC,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,UAAS,SAAQ,UAAS,SAAQ,SAAQ,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,SAAQ,GAAE,QAAOC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,KAAE,EAAC,WAAU,GAAE,YAAW,EAAC,IAAE,GAAE,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,MAAI,SAAO,EAAE,MAAM,CAAC,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,MAAI,SAAO,EAAE,MAAM,CAAC,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,MAAI,SAAO,EAAE,MAAM,CAAC,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,IAAE,GAAE,IAAE,IAAE,GAAE,IAAE,KAAG,IAAE,IAAG,IAAE,MAAI,SAAO,CAAC,GAAE,GAAE,GAAE,CAAC,IAAE,CAAC,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,WAAW,GAAE,SAAS,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,IAAI,WAAW,IAAI,WAAW,EAAE,eAAe,EAAE,KAAK,CAAC,EAAE,MAAM,GAAE,IAAE,IAAI,WAAW,IAAI,WAAW,CAAC,EAAE,MAAM,GAAE,IAAE,IAAI,WAAW,IAAI,WAAW,EAAE,eAAe,CAAC,CAAC,EAAE,MAAM,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,SAAO,GAAG,GAAE,GAAE,MAAI,SAAO,IAAE,GAAE,GAAE,EAAE,MAAM,SAAO,GAAE,GAAE,GAAE,EAAE,QAAO,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,OAAMC,KAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,QAAO,EAAC,IAAE,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,EAAC,SAAQ,GAAE,WAAU,GAAE,KAAI,GAAE,iBAAgB,EAAC,IAAEC,KAAE,IAAE,KAAG,OAAK,CAAC,GAAE,CAAC,IAAE,GAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,IAAE,GAAE,IAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,EAAE,QAAQ,KAAI,IAAE,EAAE,QAAQ,OAAM,IAAE,EAAE,QAAQ,QAAO,IAAE,EAAE,QAAQ,MAAK,IAAE,EAAE,gBAAe,IAAE,EAAE,eAAc,IAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,EAAE,YAAW,IAAE,EAAE,aAAY,IAAE,EAAE,QAAQ,SAAO,SAAO,IAAE;AAAE,MAAG,EAAE,eAAa,eAAe,OAAM,IAAI,MAAM,mEAAmE,EAAE,UAAU,+BAA+B;AAAE,MAAI,IAAE,EAAE,WAAW,EAAE,UAAS,SAAS,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,SAAO,GAAG,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,QAAO,MAAK,CAAC,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,IAAE,EAAE,cAAc,EAAE,KAAK,GAAE,IAAEC,IAAE,WAAW,CAAC,GAAG,EAAE,OAAM,GAAG,EAAE,KAAK,GAAE,EAAE,KAAK;AAAE,SAAO,GAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,GAAG,EAAE,KAAK,GAAE,GAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,EAAE,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,QAAO,EAAC,IAAE,GAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,WAAU,EAAC,IAAE;AAAE,MAAG,EAAE,UAAQ,EAAE,MAAM,OAAM,IAAI,MAAM,+DAA+D,EAAE,KAAK,QAAQ,EAAE,KAAK,EAAE;AAAE,MAAI,IAAE,EAAE,sBAAsB,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,QAAO,CAAC,GAAE,IAAEC,IAAE,WAAW,EAAE,UAAS,EAAE,KAAK;AAAE,SAAO,GAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,GAAG,EAAE,KAAK,GAAE,EAAE,WAAU,EAAE,YAAW,EAAE,UAAS,EAAE,SAAQ,EAAE,WAAU,EAAE,UAAS,EAAE,cAAa,EAAE,aAAY,EAAE,gBAAe,EAAE,eAAc,EAAE,cAAa,EAAE,aAAY,EAAE,QAAQ,KAAI,EAAE,QAAQ,IAAI,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,QAAO,GAAE,IAAG,EAAC,IAAE,GAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,WAAU,EAAC,IAAE;AAAE,MAAG,EAAE,UAAQ,EAAE,SAAO,EAAE,UAAQ,EAAE,MAAM,OAAM,IAAI,MAAM,oFAAoF,EAAE,KAAK,KAAK,EAAE,KAAK,SAAS,EAAE,KAAK,EAAE;AAAE,MAAI,IAAE,EAAE,sBAAsB,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,QAAO,CAAC,GAAE,IAAEC,IAAE,WAAW,EAAE,OAAM,EAAE,KAAK;AAAE,SAAO,GAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,GAAG,EAAE,KAAK,GAAE,EAAE,WAAU,EAAE,YAAW,EAAE,UAAS,EAAE,SAAQ,EAAE,WAAU,EAAE,UAAS,EAAE,cAAa,EAAE,aAAY,EAAE,gBAAe,EAAE,eAAc,EAAE,cAAa,EAAE,aAAY,EAAE,QAAQ,KAAI,EAAE,QAAQ,IAAI,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,QAAO,GAAE,IAAG,EAAC,IAAE,GAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,WAAU,EAAC,IAAE;AAAE,MAAG,EAAE,UAAQ,EAAE,SAAO,EAAE,UAAQ,EAAE,MAAM,OAAM,IAAI,MAAM,mFAAmF,EAAE,KAAK,KAAK,EAAE,KAAK,SAAS,EAAE,KAAK,EAAE;AAAE,MAAI,IAAE,EAAE,sBAAsB,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,QAAO,CAAC,GAAE,IAAEC,IAAE,WAAW,EAAE,OAAM,EAAE,KAAK;AAAE,SAAO,GAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,GAAG,EAAE,KAAK,GAAE,EAAE,WAAU,EAAE,YAAW,EAAE,UAAS,EAAE,SAAQ,EAAE,WAAU,EAAE,UAAS,EAAE,cAAa,EAAE,aAAY,EAAE,gBAAe,EAAE,eAAc,EAAE,cAAa,EAAE,aAAY,EAAE,QAAQ,KAAI,EAAE,QAAQ,IAAI,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI,KAAG,GAAG,EAAE;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,IAAG,GAAE,GAAE,EAAC,IAAE,GAAE,IAAEC,IAAE,WAAW,EAAE,OAAM,SAAS,GAAE,IAAE,OAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,SAAO,GAAG,EAAE,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI,MAAI;AAAR,IAAW,KAAG,GAAG,IAAG,KAAI,MAAM;AAAE,IAAI,KAAG,GAAG,EAAE;AAAE,IAAI,KAAG,GAAG,IAAG,SAAS;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,OAAMC,KAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,OAAM,EAAC,IAAE,GAAE,EAAC,KAAI,EAAC,IAAEC,KAAE,IAAE,EAAE,MAAM,QAAO,IAAE,EAAE,MAAM,MAAM,GAAE,IAAE;AAAE,SAAO,IAAE,MAAI,EAAE,OAAO,EAAE,IAAE,MAAI,GAAE,MAAI,iCAAiC,EAAE,IAAE,EAAE,KAAK,CAAC,GAAG,GAAE,IAAE,IAAE,IAAE,IAAG,EAAE,OAAO,GAAE,GAAE,CAAC,GAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,IAAG,SAAS;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,OAAM,EAAC,OAAM,GAAE,OAAMC,IAAC,GAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,OAAM,EAAC,OAAM,EAAC,EAAC,IAAEA;AAAE,MAAE,KAAG,EAAE,WAAWC,GAAC;AAAE,MAAI,IAAE,EAAE,WAAW,GAAE,CAAC;AAAE,SAAO,EAAE,mBAAmB,CAAC,EAAE,KAAKA,GAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,YAAW,GAAE;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,OAAM,EAAC,IAAE,GAAE,IAAEC,IAAE,WAAW,EAAE,OAAM,EAAE,KAAK,GAAE,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,CAAC,GAAE,GAAE,GAAE,CAAC,IAAE,EAAE;AAAM,SAAO,GAAG,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,YAAW,KAAI,WAAU,IAAG;AAAE,IAAI,KAAG,GAAG,EAAE;AAAE,IAAI,MAAI;AAAR,IAAW,KAAG,GAAG,IAAG,GAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,SAAQ,GAAE,QAAOC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,iBAAgB,EAAC,IAAE,GAAE,EAAC,GAAE,GAAE,MAAK,GAAE,UAAS,GAAE,QAAO,GAAE,OAAM,EAAC,IAAEC,KAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,KAAG,OAAK,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,KAAG,GAAE,IAAE,KAAG,OAAK,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,KAAG,GAAE,IAAE,EAAE,WAAW,EAAE,OAAM,EAAE,KAAK;AAAE,MAAG,EAAE,cAAc,EAAE,KAAK,MAAI,EAAE,QAAO;AAAE,MAAI,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,SAAO,GAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,OAAMC,KAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,QAAO,GAAE,MAAK,GAAE,wBAAuB,EAAC,IAAE,GAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,WAAU,GAAE,YAAW,GAAE,iBAAgB,GAAE,YAAW,GAAE,gBAAe,EAAC,IAAEC,KAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,GAAG,CAAC;AAAE,MAAG,KAAG,KAAK,OAAM,IAAI,MAAM,GAAG,CAAC,oEAAoE;AAAE,MAAI,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,aAAY,IAAE;AAAE,MAAG,KAAG,MAAK;AAAC,QAAI,KAAG,EAAE,UAAU,IAAI,EAAE,MAAM;AAAE,QAAG,GAAG,MAAM,WAAS,EAAE,OAAM,IAAI,MAAM,sDAAsD,GAAG,MAAM,MAAM,GAAG;AAAE,QAAG,GAAG,MAAM,CAAC,MAAI,EAAE,OAAM,IAAI,MAAM,2BAA2B,GAAG,KAAK,mDAAmD,CAAC,GAAG;AAAE,QAAE,GAAG;AAAA,EAAE;AAAC,MAAI,IAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,EAAE,QAAQ,KAAI,IAAE,EAAE,QAAQ,OAAM,IAAE,EAAE,QAAQ,QAAO,IAAE,EAAE,QAAQ,MAAK,IAAE,EAAE,gBAAe,IAAE,EAAE,eAAc,IAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,EAAE,YAAW,IAAE,EAAE,QAAQ,SAAO,SAAO,IAAE,GAAE,IAAE,EAAE,WAAU,IAAE,EAAE,UAAS,IAAE,EAAE;AAAQ,MAAG,MAAI,OAAO,OAAM,IAAI,MAAM,yDAAyD,CAAC,uBAAuB;AAAE,MAAI,IAAE,EAAE,WAAW,EAAE,UAAS,SAAS,GAAE,KAAG,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,KAAG,KAAG,OAAK,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,SAAO,GAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,IAAG,KAAG,GAAE,EAAE,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,OAAMC,KAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,QAAO,GAAE,MAAK,GAAE,wBAAuB,EAAC,IAAE,GAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,WAAU,GAAE,YAAW,GAAE,iBAAgB,GAAE,YAAW,GAAE,gBAAe,EAAC,IAAEC,KAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,IAAE,GAAE,IAAE,GAAG,CAAC;AAAE,MAAG,KAAG,KAAK,OAAM,IAAI,MAAM,GAAG,CAAC,6EAA6E;AAAE,MAAI,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,aAAY,IAAE;AAAE,MAAG,KAAG,MAAK;AAAC,QAAI,KAAG,EAAE,UAAU,IAAI,EAAE,MAAM;AAAE,QAAG,GAAG,MAAM,WAAS,EAAE,OAAM,IAAI,MAAM,+DAA+D,GAAG,MAAM,MAAM,GAAG;AAAE,QAAG,GAAG,MAAM,CAAC,MAAI,EAAE,OAAM,IAAI,MAAM,oCAAoC,GAAG,KAAK,mDAAmD,CAAC,GAAG;AAAE,QAAE,GAAG;AAAA,EAAE;AAAC,MAAI,IAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,EAAE,QAAQ,KAAI,IAAE,EAAE,QAAQ,OAAM,IAAE,EAAE,QAAQ,QAAO,IAAE,EAAE,QAAQ,MAAK,IAAE,EAAE,gBAAe,IAAE,EAAE,eAAc,IAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,EAAE,YAAW,IAAE,EAAE,QAAQ,SAAO,SAAO,IAAE,GAAE,IAAE,EAAE,WAAU,IAAE,EAAE,UAAS,IAAE,EAAE;AAAQ,MAAG,MAAI,OAAO,OAAM,IAAI,MAAM,kEAAkE,CAAC,uBAAuB;AAAE,MAAI,IAAE,EAAE,WAAW,EAAE,UAAS,SAAS,GAAE,KAAG,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,KAAG,KAAG,OAAK,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,SAAO,GAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,IAAG,KAAG,GAAE,EAAE,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,SAAQ,GAAE,QAAOC,IAAC,IAAED,KAAE,EAAC,QAAO,GAAE,SAAQ,EAAC,IAAEC,KAAE,CAAC,GAAE,GAAE,GAAE,CAAC,IAAE,GAAG,mBAAmB,GAAE,CAAC,GAAE,IAAE,EAAE,WAAW,GAAE,EAAE,KAAK;AAAE,MAAG,MAAI,EAAE,QAAO;AAAE,MAAI,IAAE,EAAE,OAAM,IAAE,EAAE,EAAE,SAAO,CAAC,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,IAAI,WAAW,IAAI,WAAW,CAAC,EAAE,MAAM,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,SAAO,GAAG,GAAE,GAAG,EAAE,KAAK,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,UAAS,MAAK,CAAC,UAAS,UAAS,SAAQ,UAAS,UAAS,UAAS,SAAQ,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,SAAQ,GAAE,QAAOC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,SAAQ,EAAC,IAAEC,KAAE,EAAC,MAAK,GAAE,WAAU,EAAC,IAAE,GAAE,IAAE,EAAE,eAAe,GAAE,EAAE,KAAK,EAAE,CAAC,GAAE,IAAE,EAAE,SAAS,EAAE,MAAM,GAAE,IAAE,EAAE,MAAM,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE,GAAE;AAAC,QAAI,IAAE,EAAE,CAAC;AAAE,MAAE,OAAO,KAAG,IAAE,KAAG,KAAG,GAAE,MAAI,6BAA6B,CAAC,kBAAkB,IAAE,CAAC,GAAG;AAAA,EAAC;AAAC,MAAI,IAAE,EAAE,aAAa,yBAAyB,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,OAAM,EAAC,OAAM,CAAC,EAAE,WAAU,EAAE,WAAU,EAAE,SAAQ,EAAE,SAAS,EAAC,GAAE,SAAQ,EAAC,CAAC,GAAE,IAAE,EAAE,cAAc,EAAE,KAAK,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,OAAM,EAAC,OAAM,CAAC,EAAE,WAAU,IAAE,EAAE,SAAS,EAAC,GAAE,SAAQ,EAAC,CAAC,GAAE,IAAE,CAAC,EAAE,WAAU,EAAE,WAAU,IAAE,EAAE,WAAU,EAAE,SAAS,GAAE,IAAE,EAAE,WAAW,GAAE,EAAE,KAAK;AAAE,MAAG,EAAE,cAAc,EAAE,KAAK,MAAI,EAAE,QAAO;AAAE,MAAI,IAAE,EAAE,MAAM,SAAO,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,IAAI,WAAW,IAAI,WAAW,EAAE,eAAe,EAAE,KAAK,CAAC,EAAE,MAAM,GAAE,IAAE,IAAI,WAAW,IAAI,WAAW,EAAE,eAAe,CAAC,CAAC,EAAE,MAAM;AAAE,SAAO,GAAG,GAAE,GAAG,EAAE,KAAK,GAAE,GAAE,GAAE,GAAE,EAAE,WAAU,GAAE,CAAC,GAAE,EAAE,YAAY,EAAE,MAAM,GAAE,EAAE,YAAY,EAAE,MAAM,GAAE,EAAE,QAAM,EAAE,aAAY;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI,MAAI;AAAR,IAAW,KAAG,GAAG,IAAG,KAAI,MAAM;AAAE,IAAI,MAAI;AAAR,IAAW,KAAG,GAAG,IAAG,KAAI,MAAM;AAAE,IAAI,KAAG,GAAG,IAAG,MAAM;AAAE,IAAI,KAAG,GAAG,IAAG,MAAM;AAAE,IAAI,KAAG,GAAG,IAAG,MAAM;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,OAAM,EAAC,OAAMC,IAAC,GAAE,SAAQ,EAAC,IAAED,KAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,WAAW,EAAE,OAAM,SAAS;AAAE,MAAG,EAAE,cAAc,EAAE,KAAK,MAAI,GAAE;AAAC,QAAI,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,OAAG,GAAE,GAAG,EAAE,KAAK,GAAEC,KAAE,CAAC;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI,MAAI;AAAR,IAAW,KAAG,GAAG,IAAG,KAAI,MAAM;AAAE,IAAI,MAAI;AAAR,IAAW,KAAG,GAAG,IAAG,KAAI,MAAM;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,OAAM,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,OAAM,GAAE,MAAK,GAAE,KAAI,EAAC,IAAE,GAAE,IAAE,KAAK,MAAM,CAAC,GAAE,IAAEC,IAAE,WAAW,CAAC,CAAC,GAAE,SAAS;AAAE,SAAO,GAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,GAAE,GAAE,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI,KAAG,GAAG,EAAE;AAAE,IAAI,KAAG,GAAG,EAAE;AAAE,IAAI,MAAI;AAAR,IAAW,KAAG,GAAG,IAAG,KAAI,MAAM;AAAE,IAAI,KAAG,GAAG,EAAE;AAAE,IAAI,MAAI;AAAR,IAAW,KAAG,GAAG,IAAG,KAAI,MAAM;AAAE,IAAI,MAAI;AAAR,IAAW,KAAG,GAAG,IAAG,KAAI,MAAM;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,aAAY,GAAE,MAAK,GAAE,OAAM,GAAE,MAAK,EAAC,IAAE;AAAE,MAAG,EAAE,UAAQ,UAAU,OAAM,IAAI,MAAM,sCAAsC;AAAE,MAAI,IAAEC,IAAE,WAAW,EAAE,OAAM,EAAE,KAAK;AAAE,SAAO,GAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,EAAE,MAAM,CAAC,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,GAAE,GAAE,IAAG,EAAC,IAAE,GAAE,EAAC,aAAY,GAAE,MAAK,GAAE,OAAM,GAAE,MAAK,EAAC,IAAE;AAAE,MAAG,EAAE,UAAQ,aAAW,EAAE,UAAQ,aAAW,EAAE,UAAQ,UAAU,OAAM,IAAI,MAAM,qDAAqD;AAAE,MAAI,IAAEC,IAAE,WAAW,EAAE,OAAM,EAAE,KAAK;AAAE,SAAO,GAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,EAAE,MAAM,CAAC,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,SAAQ,GAAE,QAAOC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,kBAAiB,GAAE,UAAS,EAAC,IAAE,GAAE,EAAC,GAAE,EAAC,IAAEC,KAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,GAAE,EAAC,YAAW,GAAE,MAAK,GAAE,cAAa,GAAE,oBAAmB,EAAC,IAAE,GAAG,GAAE,GAAE,CAAC;AAAE,MAAG,GAAE;AAAC,QAAI,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,QAAE,GAAE,IAAE;AAAA,EAAC;AAAC,MAAI,IAAE,EAAE,MAAM;AAAO,IAAE,2BAA2B,OAAM,GAAE,CAAC;AAAE,MAAG,CAAC,GAAE,CAAC,IAAE,EAAE,0BAA0B,EAAE,OAAM,CAAC,GAAE,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,EAAE,WAAW,GAAE,EAAE,KAAK;AAAE,MAAG,EAAE,cAAc,EAAE,KAAK,MAAI,GAAE;AAAC,QAAI,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,OAAG,GAAE,GAAG,EAAE,KAAK,GAAE,GAAE,CAAC;AAAA,EAAC;AAAC,MAAG,KAAG,EAAE,YAAY,EAAE,MAAM,GAAE,GAAE;AAAC,QAAI,IAAE,EAAE,qBAAqB,EAAE,OAAM,CAAC;AAAE,MAAE,QAAM;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI,MAAI;AAAR,IAAW,KAAG,GAAG,IAAG,GAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,OAAMC,KAAE,SAAQ,EAAC,IAAED,KAAE,IAAE,EAAE,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,IAAE,OAAO,EAAE,UAAQ,WAAU,MAAI,0DAA0D,EAAE,KAAK,GAAG;AAAE,MAAG,EAAC,YAAW,GAAE,SAAQ,GAAE,KAAI,GAAE,iBAAgB,EAAC,IAAEC,KAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,EAAE,QAAQ,KAAI,IAAE,EAAE,QAAQ,OAAM,IAAE,EAAE,QAAQ,QAAO,IAAE,EAAE,QAAQ,MAAK,IAAE,EAAE,gBAAe,IAAE,EAAE,eAAc,IAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,EAAE,YAAW,IAAE,EAAE;AAAY,MAAG,EAAE,eAAa,eAAe,OAAM,IAAI,MAAM,6CAA6C,EAAE,UAAU,+BAA+B;AAAE,MAAI,IAAE,EAAE,WAAW,EAAE,UAAS,SAAS,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,SAAO,GAAG,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,aAAY,MAAK,CAAC,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,YAAW,GAAE,SAAQ,GAAE,KAAI,GAAE,iBAAgB,GAAE,YAAW,EAAC,IAAE,GAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,IAAEC,IAAE,WAAW,EAAE,UAAS,EAAE,KAAK;AAAE,SAAO,GAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,EAAE,WAAU,EAAE,YAAW,EAAE,SAAQ,EAAE,UAAS,EAAE,SAAQ,EAAE,UAAS,EAAE,WAAU,EAAE,UAAS,EAAE,aAAY,EAAE,cAAa,EAAE,aAAY,EAAE,eAAc,EAAE,gBAAe,EAAE,eAAc,EAAE,sBAAqB,EAAE,uBAAsB,EAAE,sBAAqB,EAAE,QAAQ,OAAM,EAAE,QAAQ,KAAI,EAAE,QAAQ,IAAI,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,iBAAgB,MAAK,CAAC,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,IAAG,GAAE,OAAM,EAAC,IAAE,GAAE,EAAC,YAAW,GAAE,SAAQ,GAAE,KAAI,GAAE,iBAAgB,EAAC,IAAE,GAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,IAAEC,IAAE,WAAW,EAAE,OAAM,EAAE,KAAK;AAAE,SAAO,GAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,EAAE,WAAU,EAAE,YAAW,EAAE,SAAQ,EAAE,UAAS,EAAE,SAAQ,EAAE,UAAS,EAAE,WAAU,EAAE,UAAS,EAAE,aAAY,EAAE,cAAa,EAAE,aAAY,EAAE,eAAc,EAAE,gBAAe,EAAE,eAAc,EAAE,sBAAqB,EAAE,uBAAsB,EAAE,sBAAqB,EAAE,QAAQ,OAAM,EAAE,QAAQ,KAAI,EAAE,QAAQ,IAAI,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,eAAc,MAAK,CAAC,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,IAAG,GAAE,OAAM,EAAC,IAAE,GAAE,EAAC,YAAW,GAAE,SAAQ,GAAE,KAAI,GAAE,iBAAgB,EAAC,IAAE,GAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,IAAEC,IAAE,WAAW,EAAE,OAAM,EAAE,KAAK;AAAE,SAAO,GAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,EAAE,WAAU,EAAE,YAAW,EAAE,UAAS,EAAE,SAAQ,EAAE,WAAU,EAAE,UAAS,EAAE,cAAa,EAAE,aAAY,EAAE,gBAAe,EAAE,eAAc,EAAE,uBAAsB,EAAE,sBAAqB,EAAE,QAAQ,KAAI,EAAE,QAAQ,IAAI,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,qBAAoB,MAAK,CAAC,UAAS,UAAS,UAAS,UAAS,WAAU,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,YAAW,GAAE,SAAQ,GAAE,KAAI,GAAE,qBAAoB,EAAC,IAAE;AAAE,IAAE,OAAO,EAAE,MAAM,WAAS,GAAE,MAAI,uDAAuD,EAAE,MAAM,MAAM,GAAG;AAAE,MAAI,IAAE,CAAC,GAAE,CAAC;AAAE,IAAE,OAAO,EAAE,+BAA+B,GAAE,CAAC,GAAE,MAAI,wEAAwE,CAAC,mBAAmB,CAAC,GAAG;AAAE,MAAI,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,IAAEC,IAAE,WAAW,EAAE,UAAS,EAAE,KAAK,GAAE,IAAEA,IAAE,WAAW,EAAE,UAAS,OAAO;AAAE,SAAO,GAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,GAAG,EAAE,KAAK,GAAE,GAAE,EAAE,WAAU,EAAE,YAAW,EAAE,UAAS,EAAE,SAAQ,EAAE,WAAU,EAAE,UAAS,EAAE,cAAa,EAAE,aAAY,EAAE,gBAAe,EAAE,eAAc,EAAE,uBAAsB,EAAE,sBAAqB,EAAE,QAAQ,KAAI,EAAE,QAAQ,IAAI,GAAE,CAAC,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,wBAAwB,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,SAAQ,GAAE,QAAOC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,MAAK,GAAE,UAAS,EAAC,IAAE,GAAE,EAAC,GAAE,EAAC,IAAEC,KAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,GAAE,IAAE,GAAE,EAAC,YAAW,GAAE,MAAK,GAAE,cAAa,GAAE,oBAAmB,EAAC,IAAE,GAAG,GAAE,GAAE,CAAC,GAAE,IAAE;AAAE,MAAG,GAAE;AAAC,QAAI,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,UAAI,MAAI,IAAE,GAAE,IAAE,GAAE,IAAE,EAAE,iBAAiB,EAAE,QAAO,EAAE,MAAM,MAAM;AAAA,EAAE;AAAC,IAAE,2BAA2B,QAAO,GAAE,EAAE,MAAM,MAAM;AAAE,MAAG,CAAC,GAAE,CAAC,IAAE,EAAE,0BAA0B,EAAE,OAAM,CAAC,GAAE,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE;AAAE,IAAE,UAAQ,cAAY,IAAE,GAAG,EAAC,SAAQ,GAAE,QAAO,EAAC,GAAE,EAAC,GAAE,OAAM,EAAC,OAAM,UAAS,EAAC,CAAC,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAI,MAAI,IAAE,EAAE,WAAW,GAAE,SAAS;AAAE,MAAG,EAAE,cAAc,EAAE,KAAK,MAAI,GAAE;AAAC,QAAI,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,OAAG,GAAE,GAAE,CAAC;AAAA,EAAC;AAAC,MAAG,KAAG,EAAE,YAAY,EAAE,MAAM,GAAE,GAAE;AAAC,QAAI,IAAE,EAAE,qBAAqB,EAAE,OAAM,CAAC;AAAE,MAAE,QAAM;AAAA,EAAC;AAAC,SAAO,EAAE,UAAQ,aAAW,EAAE,YAAY,EAAE,MAAM,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,SAAQ,GAAE,QAAOC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,MAAK,GAAE,UAAS,EAAC,IAAE,GAAE,EAAC,GAAE,EAAC,IAAEC,KAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,GAAE,IAAE,GAAE,EAAC,YAAW,GAAE,MAAK,GAAE,cAAa,GAAE,oBAAmB,EAAC,IAAE,GAAG,GAAE,GAAE,CAAC;AAAE,MAAG,GAAE;AAAC,QAAI,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,UAAI,MAAI,IAAE,GAAE,IAAE;AAAA,EAAE;AAAC,MAAI,IAAE,EAAE,MAAM;AAAO,IAAE,2BAA2B,OAAM,GAAE,CAAC;AAAE,MAAG,CAAC,GAAE,CAAC,IAAE,EAAE,0BAA0B,EAAE,OAAM,CAAC,GAAE,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,EAAE,WAAW,GAAE,EAAE,KAAK;AAAE,MAAG,EAAE,cAAc,EAAE,KAAK,MAAI,GAAE;AAAC,QAAI,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,OAAG,GAAE,GAAG,EAAE,KAAK,GAAE,GAAE,CAAC;AAAA,EAAC;AAAC,MAAG,KAAG,EAAE,YAAY,EAAE,MAAM,GAAE,GAAE;AAAC,QAAI,IAAE,EAAE,qBAAqB,EAAE,OAAM,CAAC;AAAE,MAAE,QAAM;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI,MAAI;AAAR,IAAW,KAAG,GAAG,IAAG,GAAG;AAAE,IAAI;AAAA,CAAI,SAASD,KAAE;AAAC,EAAAA,IAAEA,IAAE,UAAQ,CAAC,IAAE,WAAUA,IAAEA,IAAE,YAAU,CAAC,IAAE;AAAW,GAAG,OAAK,KAAG,CAAC,EAAE;AAAE,IAAI;AAAG,SAAS,IAAIA,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,UAAS,GAAE,MAAK,EAAC,EAAC,IAAED,KAAE,IAAE,EAAE,IAAI,CAAC,GAAE,MAAI,EAAE,CAAC,IAAE,EAAE,MAAM,CAAC,IAAE,EAAE,CAAC,CAAC,GAAE,IAAEC,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAEA,IAAE,WAAW,GAAE,EAAE,KAAK,GAAE,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,IAAI,WAAW,IAAI,WAAW,EAAE,KAAK,EAAE,MAAM,GAAE,IAAE,EAAE,IAAI,OAAG,EAAE,CAAC,CAAC,GAAE,IAAE,EAAE,IAAI,OAAG,EAAE,CAAC,CAAC,GAAE,IAAE,IAAI,WAAW,IAAI,WAAW,CAAC,EAAE,MAAM,GAAE,IAAE,IAAI,WAAW,IAAI,WAAW,CAAC,EAAE,MAAM;AAAE,SAAO,GAAG,GAAE,GAAE,EAAE,MAAM,QAAO,GAAG,EAAE,KAAK,GAAE,GAAE,GAAE,GAAG,CAAC,GAAE,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,YAAW,KAAI,WAAU,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAG,EAAC,SAAQ,GAAE,QAAO,EAAC,QAAOC,IAAC,GAAE,OAAM,EAAC,KAAI,EAAC,EAAC,IAAED,KAAE,IAAE,EAAE,UAAU,IAAIC,IAAE,MAAM,EAAE,IAAG,IAAE,EAAE,WAAWA,IAAE,OAAMA,IAAE,KAAK,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAEA,IAAE,MAAM,CAAC,GAAE,IAAE,EAAE,cAAcA,IAAE,KAAK,IAAE;AAAE,SAAO,EAAE,cAAc,EAAE,KAAK,MAAI,KAAG,GAAG,GAAE,GAAE,GAAE,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,GAAE;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,QAAO,EAAC,IAAE,GAAE,EAAC,YAAW,GAAE,MAAK,GAAE,YAAW,EAAC,IAAE;AAAE,MAAG,EAAE,UAAQ,UAAU,OAAM,IAAI,MAAM,8CAA8C,EAAE,KAAK,EAAE;AAAE,MAAI,IAAE,IAAE,IAAE,GAAG,EAAC,QAAO,EAAC,QAAO,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,KAAI,EAAE,MAAM,SAAO,EAAC,EAAC,CAAC,GAAE,CAAC,GAAE,CAAC,IAAE,EAAE,OAAM,IAAEA,IAAE,WAAW,CAAC,GAAE,CAAC,GAAE,OAAO;AAAE,SAAO,GAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,GAAE,GAAE,GAAE,GAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,EAAE,GAAE,KAAGA,IAAE,YAAY,EAAE,MAAM,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI,KAAG,GAAG,IAAG,IAAE;AAAE,IAAI,MAAI;AAAR,IAAW,KAAG,GAAG,IAAG,GAAG;AAAE,IAAI,KAAG,GAAG,EAAE;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,IAAI,WAAWD,IAAE,KAAK,OAAO,QAAO,GAAE,CAAC,GAAE,IAAEC,IAAE,CAAC,GAAE,IAAEA,IAAE,CAAC,GAAE,IAAEA,IAAE,CAAC,GAAE,IAAEA,IAAE,CAAC;AAAE,SAAOD,IAAE,KAAK,MAAM,CAAC,GAAE,EAAC,kBAAiB,GAAE,cAAa,GAAE,iBAAgB,GAAE,eAAc,EAAC;AAAC;AAAC,IAAI;AAAG,SAAS,IAAIA,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,UAAS,CAAC,UAAS,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,SAAQ,GAAE,QAAOC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,cAAa,GAAE,eAAc,GAAE,gBAAe,EAAC,IAAE,GAAE,EAAC,OAAM,GAAE,QAAO,EAAC,IAAEC,KAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,GAAG,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,EAAC,kBAAiB,GAAE,cAAa,GAAE,iBAAgB,GAAE,eAAc,EAAC,IAAE,GAAG,GAAE,CAAC;AAAE,SAAO,EAAE,KAAK,MAAM,CAAC,GAAE,EAAE,KAAK,MAAM,CAAC,GAAE,EAAE,WAAW,CAAC,CAAC,GAAE,SAAQ,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,UAAS,CAAC,UAAS,UAAS,UAAS,UAAS,UAAS,MAAM,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,SAAQ,GAAE,QAAOC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,cAAa,GAAE,eAAc,GAAE,gBAAe,GAAE,oBAAmB,EAAC,IAAE,GAAE,EAAC,OAAM,GAAE,QAAO,EAAC,IAAEC,KAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,GAAG,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,EAAC,kBAAiB,GAAE,cAAa,GAAE,iBAAgB,GAAE,eAAc,EAAC,IAAE,GAAG,GAAE,CAAC;AAAE,IAAE,KAAK,MAAM,CAAC;AAAE,MAAI,IAAE,EAAE,WAAW,CAAC,CAAC,GAAE,SAAQ,CAAC,GAAE,IAAE,EAAE,WAAW,CAAC,GAAE,SAAQ,CAAC;AAAE,SAAM,CAAC,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,UAAS,CAAC,UAAS,UAAS,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,SAAQ,GAAE,QAAOC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,cAAa,GAAE,eAAc,GAAE,gBAAe,GAAE,cAAa,EAAC,IAAE,GAAE,EAAC,OAAM,GAAE,QAAO,EAAC,IAAEC,KAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,GAAG,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,EAAC,kBAAiB,GAAE,cAAa,GAAE,iBAAgB,GAAE,eAAc,EAAC,IAAE,GAAG,GAAE,CAAC;AAAE,IAAE,KAAK,MAAM,CAAC;AAAE,MAAI,IAAE,EAAE,WAAW,CAAC,CAAC,GAAE,SAAQ,CAAC,GAAE,IAAE,EAAE,WAAW,CAAC,CAAC,GAAE,WAAU,CAAC;AAAE,SAAM,CAAC,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI,MAAI;AAAR,IAAW,KAAG,GAAG,IAAG,KAAI,MAAM;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,SAAQ,EAAC,IAAE,GAAE,EAAC,OAAM,GAAE,OAAM,GAAE,SAAQ,GAAE,UAAS,EAAC,IAAE,GAAE,IAAEC,IAAE,WAAW,CAAC,GAAG,EAAE,OAAM,CAAC,GAAE,CAAC,GAAE,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,SAAO,GAAG,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,IAAC,IAAED,KAAE,IAAEC,IAAE,WAAW,EAAE,OAAM,EAAE,KAAK;AAAE,SAAOA,IAAE,mBAAmB,CAAC,EAAE,KAAK,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,MAAK,EAAC,IAAE;AAAE,MAAG,EAAE,WAAS,EAAE,QAAO,GAAG,EAAC,QAAO,EAAC,OAAM,EAAE,CAAC,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,KAAI,EAAC,EAAC,CAAC;AAAE,MAAI,IAAE,EAAE,CAAC,EAAE,OAAM,IAAE,EAAE,CAAC,EAAE;AAAM,IAAE,QAAQ,OAAG;AAAC,MAAE,kBAAkB,GAAE,EAAE,OAAM,uDAAuD,GAAE,EAAE,OAAO,MAAI,EAAE,OAAM,MAAI,uDAAuD;AAAA,EAAC,CAAC;AAAE,MAAI,IAAE,CAAC,GAAE,IAAE,EAAE,IAAI,OAAG;AAAC,QAAI,IAAE,GAAG,EAAC,QAAO,EAAC,OAAM,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,KAAI,EAAC,EAAC,CAAC;AAAE,WAAO,EAAE,KAAK,CAAC,GAAE;AAAA,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,GAAE,SAAQA,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC;AAAE,SAAO,EAAE,QAAQ,OAAGA,IAAE,YAAY,EAAE,MAAM,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,UAAS,GAAE,eAAc,EAAC,EAAC,IAAED,KAAE,IAAE,EAAE,IAAI,CAAC,GAAE,MAAI,EAAE,CAAC,IAAE,EAAE,MAAM,CAAC,IAAE,EAAE,CAAC,CAAC;AAAE,MAAG,EAAE,cAAc,EAAE,KAAK,MAAI,EAAE,QAAO,GAAG,EAAC,SAAQC,KAAE,OAAM,EAAC,OAAM,GAAE,OAAM,GAAE,OAAM,EAAE,MAAK,EAAC,CAAC;AAAE,MAAI,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAEA,IAAE,WAAW,GAAE,EAAE,KAAK,GAAE,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,IAAI,WAAW,IAAI,WAAW,EAAE,KAAK,EAAE,MAAM,GAAE,IAAE,EAAE,IAAI,OAAG,EAAE,CAAC,CAAC,GAAE,IAAE,EAAE,IAAI,OAAG,EAAE,CAAC,CAAC,GAAE,IAAE,IAAI,WAAW,IAAI,WAAW,CAAC,EAAE,MAAM,GAAE,IAAE,IAAI,WAAW,IAAI,WAAW,CAAC,EAAE,MAAM;AAAE,SAAO,GAAG,GAAE,GAAE,EAAE,MAAM,QAAO,GAAG,EAAE,KAAK,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,YAAW,KAAI,WAAU,IAAG;AAAE,IAAI,MAAI;AAAR,IAAW,KAAG,GAAG,IAAG,GAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,GAAE,GAAE,OAAM,EAAC,IAAE,GAAE,IAAEC,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,GAAE,IAAE,GAAE,IAAE;AAAE,IAAE,UAAQ,cAAY,IAAE,GAAG,EAAC,SAAQA,KAAE,QAAO,EAAC,GAAE,EAAC,GAAE,OAAM,EAAC,OAAM,UAAS,EAAC,CAAC,GAAE,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAI,MAAI,IAAEA,IAAE,WAAW,EAAE,OAAM,SAAS,GAAE,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,SAAO,GAAG,GAAE,GAAE,CAAC,GAAE,EAAE,UAAQ,aAAWA,IAAE,YAAY,EAAE,MAAM,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,SAAQ,GAAE,QAAOC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,MAAK,GAAE,UAAS,EAAC,IAAE,GAAE,EAAC,GAAE,EAAC,IAAEC,KAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,GAAE,IAAE,GAAE,EAAC,YAAW,GAAE,MAAK,GAAE,cAAa,GAAE,oBAAmB,EAAC,IAAE,GAAG,GAAE,GAAE,CAAC,GAAE,IAAE;AAAE,MAAG,GAAE;AAAC,QAAI,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,UAAI,MAAI,IAAE,GAAE,IAAE,GAAE,IAAE,EAAE,iBAAiB,EAAE,QAAO,EAAE,MAAM,MAAM;AAAA,EAAE;AAAC,IAAE,2BAA2B,QAAO,GAAE,EAAE,MAAM,MAAM;AAAE,MAAG,CAAC,GAAE,CAAC,IAAE,EAAE,0BAA0B,EAAE,OAAM,CAAC,GAAE,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,EAAE,WAAW,GAAE,EAAE,KAAK;AAAE,MAAG,EAAE,cAAc,EAAE,KAAK,MAAI,GAAE;AAAC,QAAI,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,OAAG,GAAE,GAAE,GAAG,EAAE,KAAK,GAAE,CAAC;AAAA,EAAC;AAAC,MAAG,KAAG,EAAE,YAAY,EAAE,MAAM,GAAE,GAAE;AAAC,QAAI,IAAE,EAAE,qBAAqB,EAAE,OAAM,CAAC;AAAE,MAAE,QAAM;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI,MAAI,CAAAD,QAAG;AAAC,MAAG,EAAC,SAAQ,GAAE,OAAMC,IAAC,IAAED,KAAE,EAAC,OAAM,GAAE,MAAK,GAAE,MAAK,GAAE,OAAM,EAAC,IAAEC,KAAE,IAAE,GAAG,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,WAAW,CAAC,EAAE,MAAM,GAAE,CAAC;AAAE,SAAO,EAAE,mBAAmB,CAAC,EAAE,IAAI,CAAC,GAAE;AAAC;AAAzJ,IAA2J,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,YAAW,IAAG;AAAE,IAAI,MAAI;AAAR,IAAW,KAAG,GAAG,IAAG,GAAG;AAAE,IAAI,KAAG,GAAG,EAAE;AAAE,IAAI,KAAG,GAAG,EAAE;AAAE,IAAI,KAAG,GAAG,EAAE;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,SAAQ,GAAE,QAAOC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,QAAO,EAAC,IAAEC,KAAE,EAAC,cAAa,GAAE,kBAAiB,GAAE,MAAK,EAAC,IAAE,GAAE,CAAC,GAAE,CAAC,IAAE,GAAE,CAAC,GAAE,GAAE,GAAE,CAAC,IAAE,EAAE,OAAM,IAAE,CAAC,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,GAAE;AAAE,IAAE,UAAQ,cAAY,IAAE,GAAG,EAAC,SAAQ,GAAE,QAAO,EAAC,GAAE,EAAC,GAAE,OAAM,EAAC,OAAM,UAAS,EAAC,CAAC,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM;AAAG,MAAI,IAAE,EAAE,IAAG,IAAE,EAAE,WAAW,GAAE,SAAS;AAAE,MAAG,EAAE,cAAc,EAAE,KAAK,MAAI,EAAE,QAAO;AAAE,MAAI,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,SAAO,GAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,IAAE,IAAE,GAAE,IAAE,IAAE,GAAE,CAAC,GAAE,KAAG,QAAM,EAAE,YAAY,EAAE,MAAM,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,UAAS,SAAQ,SAAQ,SAAS,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,QAAO,GAAE,IAAG,EAAC,IAAE,GAAE,EAAC,cAAa,EAAC,IAAE,GAAE,IAAEC,IAAE,WAAW,EAAE,OAAM,SAAS,GAAE,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,GAAE;AAAE,SAAO,EAAE,UAAQ,cAAY,IAAE,GAAG,EAAC,SAAQA,KAAE,QAAO,EAAC,GAAE,EAAC,GAAE,OAAM,EAAC,OAAM,UAAS,EAAC,CAAC,GAAE,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,IAAG,GAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAI,WAAW,IAAI,WAAW,EAAE,KAAK,EAAE,MAAM,GAAE,IAAI,WAAW,IAAI,WAAW,EAAE,KAAK,EAAE,MAAM,GAAE,CAAC,GAAE,KAAG,QAAMA,IAAE,YAAY,EAAE,MAAM,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,SAAQ,GAAE,QAAOC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,QAAO,EAAC,IAAEC,KAAE,EAAC,cAAa,GAAE,kBAAiB,GAAE,MAAK,EAAC,IAAE,GAAE,CAAC,GAAE,CAAC,IAAE,GAAE,CAAC,GAAE,GAAE,GAAE,CAAC,IAAE,EAAE,OAAM,IAAE,CAAC,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,WAAW,GAAE,SAAS;AAAE,MAAG,EAAE,cAAc,EAAE,KAAK,MAAI,EAAE,QAAO;AAAE,MAAI,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,GAAE;AAAE,IAAE,UAAQ,cAAY,IAAE,GAAG,EAAC,SAAQ,GAAE,QAAO,EAAC,GAAE,EAAC,GAAE,OAAM,EAAC,OAAM,UAAS,EAAC,CAAC,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM;AAAG,MAAI,IAAE,EAAE,IAAG,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,SAAO,GAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,IAAE,IAAE,GAAE,IAAE,IAAE,GAAE,CAAC,GAAE,KAAG,QAAM,EAAE,YAAY,EAAE,MAAM,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,UAAS,SAAQ,SAAQ,SAAS,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,QAAO,GAAE,IAAG,EAAC,IAAE,GAAE,EAAC,cAAa,EAAC,IAAE,GAAE,IAAEC,IAAE,WAAW,EAAE,OAAM,SAAS,GAAE,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,GAAE;AAAE,SAAO,EAAE,UAAQ,cAAY,IAAE,GAAG,EAAC,SAAQA,KAAE,QAAO,EAAC,GAAE,EAAC,GAAE,OAAM,EAAC,OAAM,UAAS,EAAC,CAAC,GAAE,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,IAAG,GAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAI,WAAW,IAAI,WAAW,EAAE,KAAK,EAAE,MAAM,GAAE,IAAI,WAAW,IAAI,WAAW,EAAE,KAAK,EAAE,MAAM,GAAE,CAAC,GAAE,KAAG,QAAMA,IAAE,YAAY,EAAE,MAAM,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,SAAQ,UAAS,SAAQ,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,MAAK,EAAC,IAAE,GAAE,IAAE,EAAE,eAAe,GAAE,EAAE,KAAK;AAAE,MAAG,EAAE,MAAM,WAAS,EAAE,QAAO,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,IAAC,CAAC;AAAE,MAAI,IAAEA,IAAE,WAAW,EAAE,OAAM,EAAE,KAAK,GAAE,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,IAAI,WAAW,IAAI,WAAW,CAAC,EAAE,MAAM,GAAE,IAAE,IAAI,WAAW,IAAI,WAAW,EAAE,KAAK,EAAE,MAAM;AAAE,KAAG,GAAE,GAAE,EAAE,QAAO,GAAE,EAAE,MAAM,QAAO,CAAC;AAAE,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,OAAM,EAAC,OAAM,EAAE,MAAK,GAAE,SAAQA,IAAC,CAAC;AAAE,SAAOA,IAAE,YAAY,EAAE,MAAM,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,YAAW,KAAI,WAAU,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,EAAC,IAAE,GAAE,EAAC,SAAQ,GAAE,WAAU,GAAE,QAAO,EAAC,IAAE,GAAE,IAAEC,IAAE,WAAW,EAAE,OAAM,EAAE,KAAK,GAAE,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,CAAC,GAAE,GAAE,GAAE,CAAC,IAAE,EAAE,OAAM,CAAC,GAAE,CAAC,IAAE,EAAE,eAAe,GAAE,GAAE,CAAC,GAAE,IAAE,MAAI,GAAE,IAAE,KAAI,IAAE,OAAO,KAAG,WAAS,CAAC,GAAE,GAAE,GAAE,IAAE,IAAE,CAAC,IAAE,CAAC,GAAG,GAAE,CAAC,GAAE,IAAE,IAAI,WAAW,IAAI,WAAW,CAAC,EAAE,MAAM;AAAE,SAAO,GAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,EAAE,QAAO,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,YAAW,KAAI,WAAU,IAAG;AAAE,IAAI,KAAG,GAAG,EAAE;AAAE,IAAI,KAAG,GAAG,EAAE;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,SAAQ,GAAE,QAAOC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,SAAQ,GAAE,SAAQ,EAAC,IAAEC,KAAE,EAAC,OAAM,EAAC,IAAE,GAAE,IAAE,EAAE,WAAW,GAAE,EAAE,KAAK;AAAE,MAAG,EAAE,cAAc,CAAC,MAAI,EAAE,QAAO;AAAE,MAAG,EAAC,WAAU,GAAE,YAAW,GAAE,WAAU,GAAE,SAAQ,GAAE,YAAW,EAAC,IAAE,GAAG,gBAAgB,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,IAAI,WAAW,IAAI,WAAW,CAAC,EAAE,MAAM,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,SAAO,GAAG,GAAE,GAAE,GAAG,EAAE,KAAK,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,QAAO,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,gBAAe,GAAE,QAAO,EAAC,IAAE,GAAE,EAAC,MAAK,EAAC,IAAE;AAAE,MAAG,EAAE,UAAQ,EAAE,MAAM,OAAM,IAAI,MAAM,+EAA+E,EAAE,KAAK,QAAQ,EAAE,KAAK,EAAE;AAAE,MAAI,IAAEC,IAAE,WAAW,EAAE,OAAM,OAAO;AAAE,WAAS,EAAE,GAAE;AAAC,WAAOA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAA,EAAE;AAAC,SAAO,GAAG,EAAE,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,GAAG,EAAE,KAAK,GAAE,MAAI,QAAO,EAAE,CAAC,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,YAAW,MAAK,CAAC,UAAS,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,WAAU,GAAE,GAAE,GAAE,GAAE,EAAC,IAAE,GAAE,IAAEC,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAEA,IAAE,WAAW,EAAE,OAAM,EAAE,KAAK,GAAE,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,MAAM,QAAO,IAAE,EAAE,MAAM,QAAO,IAAE,MAAI,KAAG,IAAE,KAAG,MAAI,IAAE,IAAE,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC,CAAC;AAAE,SAAO,GAAG,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,YAAW,KAAI,WAAU,IAAG;AAAE,IAAI,KAAG,GAAG,EAAE;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,SAAQ,GAAE,QAAO,EAAC,GAAEC,IAAC,EAAC,IAAED,KAAE,IAAE,EAAE,UAAU,IAAIC,IAAE,MAAM,EAAE,IAAG,IAAE,EAAE,WAAWA,IAAE,OAAMA,IAAE,KAAK,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,SAAO,EAAE,cAAc,EAAE,KAAK,MAAI,KAAG,GAAG,GAAE,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,WAAU,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI,KAAG,GAAG,EAAE;AAAE,IAAI,KAAG,GAAG,EAAE;AAAE,IAAI,KAAG,GAAG,EAAE;AAAE,IAAI,KAAG,GAAG,EAAE;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,YAAW,GAAE,UAAS,EAAC,IAAE,GAAE,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,CAAC,CAAC,GAAE,CAAC,CAAC;AAAE,IAAE,KAAK,GAAG,CAAC;AAAE,WAAQ,IAAE,IAAE,EAAE,QAAO,IAAE,EAAE,MAAM,QAAO,EAAE,EAAE,GAAE,KAAK,CAAC,GAAE,CAAC,CAAC;AAAE,MAAI,IAAE,GAAG,WAAW,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,UAAS,GAAE,eAAc,EAAC,EAAC,CAAC,GAAE,IAAE,EAAE,YAAY,EAAE,OAAM,GAAE,GAAE,KAAE,GAAE,IAAE,EAAE,YAAY,EAAE,QAAO,EAAE,QAAO,KAAE,GAAE,IAAE,EAAE,oBAAoB,EAAE,OAAM,GAAE,GAAE,KAAE,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,SAAOA,IAAE,YAAY,EAAE,MAAM,GAAEA,IAAE,YAAY,EAAE,MAAM,GAAEA,IAAE,YAAY,EAAE,MAAM,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,uBAAsB,UAAS,CAAC,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,SAAQ,GAAE,QAAOC,IAAC,IAAED,KAAE,EAAC,SAAQ,GAAE,QAAO,GAAE,YAAW,GAAE,cAAa,EAAC,IAAEC,KAAE,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,GAAE,IAAE,CAAC,IAAE,GAAE,CAAC,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,WAAW,GAAE,EAAE,KAAK,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,WAAW,EAAE,MAAM,GAAE,CAAC,GAAE,EAAE,KAAK,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,WAAW,CAAC,CAAC,GAAE,MAAM,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,WAAW,CAAC,CAAC,GAAE,EAAE,KAAK,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,WAAW,CAAC,CAAC,GAAE,OAAO,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,GAAG,GAAE,GAAE,GAAG,EAAE,KAAK,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,SAAS,EAAE,MAAM,GAAE;AAAE,UAAO,EAAE,CAAC,GAAE;AAAA,IAAC,KAAK,GAAE;AAAC,UAAE,EAAE,gDAAgD,EAAE,CAAC,CAAC;AAAE;AAAA,IAAK;AAAA,IAAC,KAAK,GAAE;AAAC,UAAE,EAAE,gDAAgD,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC;AAAE;AAAA,IAAK;AAAA,IAAC,KAAK;AAAE,UAAE,EAAE,kDAAkD,EAAE,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC;AAAE;AAAA,IAAM;AAAQ,UAAE;AAAA,EAAE;AAAC,MAAG,EAAE,YAAY,EAAE,MAAM,GAAE,EAAE,OAAM,EAAE,YAAY,EAAE,MAAM,GAAE,EAAE,YAAY,EAAE,MAAM,GAAE,EAAE,YAAY,EAAE,MAAM,GAAE,EAAE,YAAY,EAAE,MAAM,GAAE,IAAI,MAAM,CAAC;AAAE,MAAI,IAAE,GAAE,IAAE;AAAE,SAAO,MAAI,EAAE,CAAC,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,OAAM,EAAC,OAAM,GAAE,MAAK,CAAC,GAAE,CAAC,EAAC,GAAE,SAAQ,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,OAAM,EAAC,OAAM,GAAE,MAAK,EAAC,GAAE,SAAQ,EAAC,CAAC,GAAE,EAAE,YAAY,EAAE,MAAM,GAAE,EAAE,YAAY,EAAE,MAAM,IAAG,CAAC,GAAE,GAAE,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,SAAQ,GAAE,QAAOC,IAAC,IAAED,KAAE,EAAC,cAAa,GAAE,YAAW,GAAE,UAAS,EAAC,IAAEC;AAAE,MAAG,EAAE,MAAM,WAAS,EAAE,OAAM,IAAI,MAAM;AAAA,UACrr9D,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,MAAM,WAAS,EAAE,OAAM,IAAI,MAAM;AAAA,UACjD,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,MAAM,WAAS,EAAE,OAAM,IAAI,MAAM,sDAAsD,EAAE,KAAK,EAAE;AAAE,MAAI,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,EAAE,cAAc,EAAE,KAAK,GAAE,IAAE,EAAE,WAAW,CAAC,GAAE,CAAC,GAAE,EAAE,KAAK,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,WAAW,CAAC,CAAC,GAAE,EAAE,KAAK,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,WAAW,CAAC,CAAC,GAAE,OAAO,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,KAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,MAAI,IAAE,EAAE,SAAS,EAAE,MAAM,GAAE;AAAE,UAAO,EAAE,CAAC,GAAE;AAAA,IAAC,KAAK,GAAE;AAAC,UAAE,EAAE,yDAAyD,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC;AAAE;AAAA,IAAK;AAAA,IAAC,KAAK,GAAE;AAAC,UAAE,EAAE,8CAA8C,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC;AAAE;AAAA,IAAK;AAAA,IAAC,KAAK;AAAE,UAAE,EAAE,qDAAqD;AAAE;AAAA,IAAM,KAAK,GAAE;AAAC,UAAI,IAAE,MAAM,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,GAAE,IAAE,MAAM,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC;AAAE,UAAE,EAAE,gDAAgD,GAAE,CAAC;AAAE;AAAA,IAAK;AAAA,IAAC,KAAK,GAAE;AAAC,UAAI,IAAE,MAAM,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,GAAE,IAAE,MAAM,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC;AAAE,UAAE,EAAE,gDAAgD,GAAE,CAAC;AAAE;AAAA,IAAK;AAAA,IAAC;AAAQ,UAAE;AAAA,EAAE;AAAC,MAAG,EAAE,YAAY,EAAE,MAAM,GAAE,EAAE,OAAM,EAAE,YAAY,EAAE,MAAM,GAAE,EAAE,YAAY,EAAE,MAAM,GAAE,IAAI,MAAM,CAAC;AAAE,SAAM,CAAC,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,GAAGD,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,0BAAyB,MAAK,CAAC,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAG,EAAC,SAAQC,KAAE,QAAO,EAAC,IAAED,KAAE,EAAC,MAAK,GAAE,SAAQ,GAAE,YAAW,EAAC,IAAE,GAAE,IAAE,EAAE,MAAM,CAAC,GAAE,IAAEC,IAAE,SAAS,EAAE,QAAO,IAAE,GAAE,CAAC,EAAE,CAAC,GAAE,IAAE,IAAE,IAAE,IAAE,IAAE;AAAE,MAAG,IAAE,EAAE,OAAM,IAAI,MAAM,EAAE,wDAAwD,CAAC;AAAE,MAAI,IAAE,EAAE,MAAM,MAAM;AAAE,IAAE,CAAC,IAAE;AAAE,MAAI,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAEA,IAAE,WAAW,GAAE,EAAE,KAAK,GAAE,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAEA,IAAE,WAAW,CAAC,CAAC,GAAE,OAAO,GAAE,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,KAAG,GAAE,GAAG,EAAE,KAAK,GAAE,EAAE,MAAM,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,MAAI,IAAEA,IAAE,SAAS,EAAE,MAAM,GAAE;AAAE,UAAO,EAAE,CAAC,GAAE;AAAA,IAAC,KAAK,GAAE;AAAC,UAAE,EAAE,wDAAwD;AAAE;AAAA,IAAK;AAAA,IAAC,KAAK,GAAE;AAAC,UAAE,EAAE,6DAA6D;AAAE;AAAA,IAAK;AAAA,IAAC,KAAK;AAAE,UAAE,EAAE,yDAAyD,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC;AAAE;AAAA,IAAM,KAAK;AAAE,UAAE,EAAE,uDAAuD,EAAE,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC;AAAE;AAAA,IAAM;AAAQ,UAAE;AAAA,EAAE;AAAC,MAAGA,IAAE,YAAY,EAAE,MAAM,GAAE,EAAE,OAAMA,IAAE,YAAY,EAAE,MAAM,GAAE,IAAI,MAAM,CAAC;AAAE,SAAO;AAAC;AAAC,SAAS,IAAID,KAAE;AAAC,SAAO,GAAGA,KAAE,IAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,IAAG,YAAW,IAAG;AAAE,SAAS,IAAIA,KAAE;AAAC,SAAO,GAAGA,KAAE,KAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,IAAG,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAIA,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,SAAQ,GAAE,QAAOC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,eAAc,GAAE,cAAa,GAAE,cAAa,EAAC,IAAEC,KAAE,EAAC,aAAY,EAAC,IAAE,GAAE,IAAE,EAAE,WAAW,GAAE,EAAE,KAAK;AAAE,MAAG,EAAE,cAAc,CAAC,MAAI,EAAE,QAAO;AAAE,MAAG,EAAC,WAAU,GAAE,YAAW,GAAE,WAAU,GAAE,SAAQ,GAAE,YAAW,EAAC,IAAE,EAAE,gBAAgB,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,IAAI,WAAW,IAAI,WAAW,CAAC,EAAE,MAAM,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,SAAO,GAAG,GAAE,GAAE,EAAE,MAAM,QAAO,GAAE,GAAG,EAAE,KAAK,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,OAAMC,KAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,iBAAgB,GAAE,MAAK,EAAC,IAAEC,KAAE,IAAE,EAAE,eAAe,GAAE,EAAE,KAAK,EAAE,CAAC,GAAE,IAAE,EAAE,iBAAiB,GAAE,GAAE,CAAC,GAAE,IAAE,IAAI,MAAM,EAAE,MAAM,MAAM,EAAE,KAAK,CAAC,GAAE,IAAE,EAAE,MAAM,MAAM;AAAE,SAAO,EAAE,IAAI,OAAG;AAAC,QAAI,IAAE,CAAC,GAAG,CAAC;AAAE,MAAE,CAAC,IAAE;AAAE,QAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,OAAM,EAAC,OAAM,GAAE,MAAK,EAAC,GAAE,SAAQ,EAAC,CAAC;AAAE,WAAO,EAAE,CAAC,KAAG,GAAE;AAAA,EAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,YAAW,IAAG;AAAE,IAAI,KAAG,GAAG,EAAE;AAAE,IAAI,KAAG,GAAG,EAAE;AAAE,IAAI,MAAI;AAAR,IAAW,KAAG,GAAG,IAAG,GAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,SAAQ,GAAE,QAAOC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,EAAC,IAAE,GAAE,EAAC,GAAE,EAAC,IAAEC,KAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,WAAW,EAAE,OAAM,EAAE,KAAK,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,SAAO,GAAG,GAAE,GAAE,GAAG,EAAE,KAAK,GAAE,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,SAAQ,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,SAAQ,GAAE,QAAOC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,KAAE,EAAC,OAAM,GAAE,KAAI,GAAE,SAAQ,GAAE,WAAU,GAAE,SAAQ,GAAE,cAAa,GAAE,aAAY,GAAE,gBAAe,EAAC,IAAE,GAAE,EAAC,kBAAiB,GAAE,YAAW,GAAE,YAAW,GAAE,WAAU,GAAE,eAAc,GAAE,OAAM,GAAE,KAAI,GAAE,SAAQ,EAAC,IAAE,GAAG,UAAU,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE;AAAE,MAAG,EAAE,KAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAA,WAAU,KAAG,GAAE;AAAC,MAAE,OAAO,EAAE,MAAM,UAAQ,GAAE,MAAI,yCAAyC,EAAE,MAAM,MAAM,EAAE;AAAE,QAAI,IAAE,GAAG,gBAAgB,GAAE,GAAE,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,GAAE,MAAK,EAAC,EAAC,CAAC;AAAE,QAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,EAAE,YAAY,EAAE,MAAM;AAAA,EAAC,OAAK;AAAC,QAAI,IAAE,EAAE,WAAW,GAAE,SAAS,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,IAAI,WAAW,IAAI,WAAW,EAAE,eAAe,EAAE,KAAK,CAAC,EAAE,MAAM,GAAE,IAAE,IAAI,WAAW,IAAI,WAAW,CAAC,EAAE,MAAM,GAAE,IAAE,IAAI,WAAW,IAAI,WAAW,CAAC,EAAE,MAAM,GAAE,IAAE,IAAI,WAAW,IAAI,WAAW,CAAC,EAAE,MAAM,GAAE,IAAE,IAAI,WAAW,IAAI,WAAW,CAAC,EAAE,MAAM,GAAE,IAAE,IAAI,WAAW,IAAI,WAAW,EAAE,eAAe,CAAC,CAAC,EAAE,MAAM,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,OAAG,GAAE,GAAE,EAAE,MAAM,QAAO,GAAE,GAAE,GAAE,GAAE,GAAE,EAAE,QAAO,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,EAAE,YAAY,EAAE,MAAM;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,SAAQ,GAAE,QAAOC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,MAAK,GAAE,YAAW,EAAC,IAAEC,KAAE,EAAC,WAAU,GAAE,aAAY,GAAE,SAAQ,GAAE,UAAS,GAAE,UAAS,GAAE,wBAAuB,EAAC,IAAE,GAAE,IAAE,EAAE,SAAS,EAAE,MAAM,GAAE,IAAE,EAAE,SAAS,EAAE,MAAM,GAAE,CAAC,GAAE,CAAC,IAAE,GAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,WAAW,CAAC,EAAE,MAAM,GAAE,QAAQ,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM;AAAE,IAAE,cAAY;AAAE,MAAI,IAAE,EAAE,WAAW,EAAE,OAAM,OAAO;AAAE,SAAO,EAAE,mBAAmB,CAAC,EAAE,IAAI,CAAC,GAAE,CAAC,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,SAAQ,GAAE,QAAOC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,GAAE,WAAU,EAAC,IAAEC,KAAE,EAAC,WAAU,EAAC,IAAE,GAAE,IAAE,EAAE,SAAS,EAAE,MAAM,GAAE,IAAE,EAAE,SAAS,EAAE,MAAM,GAAE,CAAC,GAAE,GAAE,CAAC,IAAE,GAAG,GAAE,EAAE,CAAC,GAAE,CAAC,GAAE,IAAE,EAAE,QAAO,IAAE,EAAE,WAAW,CAAC,GAAE,CAAC,GAAE,OAAO;AAAE,IAAE,mBAAmB,CAAC,EAAE,IAAI,CAAC;AAAE,MAAI,IAAE,EAAE,WAAW,CAAC,CAAC,GAAE,QAAQ,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM;AAAE,IAAE,cAAY;AAAE,MAAI,IAAE,EAAE,WAAW,CAAC,CAAC,GAAE,OAAO;AAAE,SAAO,EAAE,mBAAmB,CAAC,EAAE,IAAI,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,SAAQ,GAAE,QAAOC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,EAAC,IAAEC,KAAE,EAAC,YAAW,EAAC,IAAE,GAAE,IAAE,EAAE,SAAS,EAAE,MAAM,GAAE,IAAE,GAAG,GAAE,CAAC,GAAE,IAAE,EAAE,WAAW,EAAE,OAAM,OAAO;AAAE,SAAO,EAAE,mBAAmB,CAAC,EAAE,IAAI,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,YAAW,IAAG;AAAE,IAAI,MAAI;AAAR,IAAW,KAAG,GAAG,IAAG,GAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,SAAQ,GAAE,QAAOC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,MAAK,GAAE,UAAS,EAAC,IAAE,GAAE,EAAC,GAAE,EAAC,IAAEC,KAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,GAAE,IAAE,GAAE,EAAC,YAAW,GAAE,MAAK,GAAE,cAAa,GAAE,oBAAmB,EAAC,IAAE,GAAG,GAAE,GAAE,CAAC,GAAE,IAAE;AAAE,MAAG,GAAE;AAAC,QAAI,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,UAAI,MAAI,IAAE,GAAE,IAAE,GAAE,IAAE,EAAE,iBAAiB,EAAE,QAAO,EAAE,MAAM,MAAM;AAAA,EAAE;AAAC,IAAE,2BAA2B,OAAM,GAAE,EAAE,MAAM,MAAM;AAAE,MAAG,CAAC,GAAE,CAAC,IAAE,EAAE,0BAA0B,EAAE,OAAM,CAAC,GAAE,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,EAAE,WAAW,GAAE,EAAE,KAAK;AAAE,MAAG,EAAE,cAAc,EAAE,KAAK,MAAI,GAAE;AAAC,QAAI,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,OAAG,GAAE,GAAE,GAAG,EAAE,KAAK,GAAE,CAAC;AAAA,EAAC;AAAC,MAAG,KAAG,EAAE,YAAY,EAAE,MAAM,GAAE,GAAE;AAAC,QAAI,IAAE,EAAE,qBAAqB,EAAE,OAAM,CAAC;AAAE,MAAE,QAAM;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI,KAAG,GAAG,EAAE;AAAE,IAAI,KAAG,GAAG,EAAE;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,SAAQ,GAAE,QAAOC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,QAAO,GAAE,SAAQ,GAAE,SAAQ,EAAC,IAAEC,KAAE,CAAC,IAAE,GAAE,IAAE,EAAE,WAAW,EAAE,OAAM,EAAE,KAAK;AAAE,MAAG,EAAE,cAAc,EAAE,KAAK,MAAI,EAAE,QAAO;AAAE,MAAG,EAAC,WAAU,GAAE,YAAW,GAAE,WAAU,GAAE,SAAQ,GAAE,YAAW,EAAC,IAAE,GAAG,gBAAgB,GAAE,GAAE,EAAE,KAAK,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,IAAI,WAAW,IAAI,WAAW,CAAC,EAAE,MAAM,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,SAAO,GAAG,GAAE,GAAE,GAAG,EAAE,KAAK,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,SAAQ,UAAS,SAAQ,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,IAAEC,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,EAAC,MAAK,EAAC,IAAE,GAAE,IAAE,IAAI,MAAM,EAAE,MAAM,MAAM;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,IAAI,GAAE,CAAC,IAAE,EAAE,MAAM,CAAC,IAAE,EAAE,CAAC;AAAE,MAAI,IAAE,IAAI,WAAW,IAAI,WAAW,EAAE,KAAK,EAAE,MAAM,GAAE,IAAE,IAAI,WAAW,IAAI,WAAW,CAAC,EAAE,MAAM,GAAE,IAAEA,IAAE,WAAW,GAAE,EAAE,KAAK,GAAE,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,SAAO,GAAG,GAAE,GAAE,EAAE,MAAM,QAAO,GAAE,EAAE,QAAO,GAAG,EAAE,KAAK,GAAE,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,SAAQ,UAAS,UAAS,UAAS,QAAO,UAAS,QAAQ,CAAC;AAAC;AAAC,IAAI,MAAI,CAAC,EAAC,QAAOA,KAAE,SAAQ,GAAE,OAAMC,IAAC,MAAI;AAAC,MAAG,EAAC,GAAE,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,QAAO,EAAC,IAAEC,KAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,IAAI,WAAW,IAAI,WAAW,EAAE,KAAK,EAAE,MAAM,GAAE,IAAE,EAAE,MAAM,MAAM;AAAE,IAAE,EAAE,SAAO,CAAC,IAAE;AAAE,MAAI,IAAE,EAAE,WAAW,GAAE,EAAE,KAAK,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,WAAW,GAAE,OAAO,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,SAAO,GAAG,GAAE,GAAE,EAAE,MAAM,QAAO,GAAG,EAAE,KAAK,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC;AAAC;AAApW,IAAsW,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,QAAO,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,UAAS,SAAQ,UAAS,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,SAAQ,GAAE,QAAOC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,GAAE,YAAW,EAAC,IAAEC,KAAE,EAAC,eAAc,GAAE,UAAS,GAAE,WAAU,GAAE,aAAY,EAAC,IAAE,GAAE,CAAC,GAAE,GAAE,GAAE,CAAC,IAAE,EAAE,OAAM,CAAC,GAAE,CAAC,IAAE,KAAG,OAAK,IAAE,CAAC,GAAE,CAAC,GAAE,IAAE,CAAC,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,IAAI,WAAW,IAAI,WAAW,EAAE,eAAe,EAAE,KAAK,CAAC,EAAE,MAAM,GAAE,IAAE,IAAI,WAAW,IAAI,WAAW,EAAE,eAAe,CAAC,CAAC,EAAE,MAAM,GAAE,IAAE,EAAE,WAAW,GAAE,EAAE,KAAK,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,MAAI,YAAU,IAAE,GAAE;AAAE,UAAO,GAAE;AAAA,IAAC,KAAI;AAAW,UAAE;AAAE;AAAA,IAAM,KAAI;AAAU,UAAE;AAAE;AAAA,IAAM,KAAI;AAAO,UAAE;AAAE;AAAA,IAAM,KAAI;AAAU,UAAE;AAAE;AAAA,IAAM;AAAQ,UAAE;AAAE;AAAA,EAAK;AAAC,SAAO,GAAG,GAAE,GAAE,EAAE,MAAM,CAAC,IAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,EAAE,MAAM,SAAO,GAAE,GAAE,EAAE,SAAO,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,OAAMC,KAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,MAAK,EAAC,IAAEC,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,cAAa,GAAE,aAAY,GAAE,SAAQ,EAAC,IAAE,GAAG,EAAE,SAAS,EAAE,MAAM,GAAE,GAAE,EAAE,OAAM,EAAE,KAAK;AAAE,SAAM,CAAC,EAAE,WAAW,GAAE,EAAE,OAAM,QAAO,CAAC,GAAE,EAAE,WAAW,CAAC,EAAE,MAAM,GAAE,SAAQ,QAAO,CAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,EAAC,IAAE,GAAE,EAAC,MAAK,EAAC,IAAE;AAAE,MAAE,MAAI,KAAG,EAAE,MAAM;AAAQ,MAAI,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,EAAE,MAAM,QAAO,IAAE,IAAI,MAAM,IAAE,CAAC,GAAE,IAAE;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,IAAI,OAAI,MAAI,EAAE,GAAG,IAAE,EAAE,MAAM,CAAC;AAAG,MAAI,IAAE,IAAI,MAAM,CAAC,GAAE,IAAE,IAAI,MAAM,CAAC,EAAE,KAAK,CAAC,GAAE,IAAE,EAAE,MAAM,MAAM;AAAE,IAAE,CAAC,IAAE;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,IAAI,GAAE,CAAC,IAAE,GAAE,EAAE,CAAC,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,OAAM,EAAC,OAAM,GAAE,MAAK,EAAC,GAAE,SAAQC,IAAC,CAAC;AAAE,SAAO,EAAE,IAAI,CAAC,EAAC,QAAO,GAAE,OAAM,EAAC,OAAK,EAAC,QAAO,GAAE,OAAM,GAAE,OAAM,EAAC,EAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,IAAC,IAAED,KAAE,IAAEC,IAAE,WAAW,EAAE,OAAM,EAAE,KAAK;AAAE,SAAOA,IAAE,mBAAmB,CAAC,EAAE,KAAK,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,YAAW,IAAG;AAAE,IAAI,MAAI,CAAC,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,EAAE;AAAE,SAAQD,OAAK,IAAI,IAAGA,GAAC;AAAE,IAAI,KAAG,EAAE;AAAE,GAAG,aAAa,yBAAwB,YAAS;AAAC,MAAG;AAAC,WAAO,YAAY,SAAS,IAAI,WAAW,CAAC,GAAE,IAAG,KAAI,KAAI,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,IAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,IAAG,GAAE,GAAE,GAAE,GAAE,IAAG,GAAE,KAAI,IAAG,IAAG,EAAE,CAAC,CAAC;AAAA,EAAC,SAAOA,KAAE;AAAC,WAAM;AAAA,EAAE;AAAC,CAAC;AAAE,GAAG,aAAa,gCAA+B,YAAS;AAAC,MAAG,GAAG,IAAI,SAAS,EAAE,QAAM;AAAG,MAAG;AAAC,WAAO,IAAI,eAAe,EAAE,MAAM,YAAY,IAAI,kBAAkB,CAAC,CAAC,GAAE,YAAY,SAAS,IAAI,WAAW,CAAC,GAAE,IAAG,KAAI,KAAI,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,IAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,IAAG,IAAG,GAAE,GAAE,GAAE,IAAG,GAAE,KAAI,IAAG,GAAE,GAAE,IAAG,EAAE,CAAC,CAAC;AAAA,EAAC,SAAOA,KAAE;AAAC,WAAM;AAAA,EAAE;AAAC,CAAC;AAAE,IAAI,KAAG,GAAG,GAAG,CAAC;AAAd,IAAgB,KAAG,GAAG,GAAG,CAAC;AAA1B,IAA4B,KAAG,GAAG,GAAG,CAAC;AAAE,IAAI,KAAG,GAAG,WAAS;AAAnB,IAAsB,MAAI,GAAG,WAAS;AAAtC,IAAyC,KAAG,cAAc,GAAE;AAAA,EAAC,YAAY,GAAE;AAAC,UAAM,GAAE,KAAK,OAAK,GAAE,KAAK,mBAAiB,GAAE,KAAK,KAAK,KAAK,qBAAqB,EAAE,GAAE,KAAG,KAAK,KAAK,KAAK,gBAAgB,GAAE,KAAK,YAAU,IAAI,GAAG,MAAK,GAAG,CAAC;AAAA,EAAC;AAAA,EAAC,MAAM,GAAEC,KAAE,GAAE;AAAC,QAAI,IAAE,EAAC,IAAG,KAAK,mBAAkB;AAAE,WAAO,KAAK,KAAK,GAAE,GAAEA,KAAE,GAAE,CAAC,GAAE;AAAA,EAAC;AAAA,EAAC,aAAY;AAAC,WAAO,KAAK,UAAU,WAAW;AAAA,EAAC;AAAA,EAAC,MAAM,KAAK,GAAE;AAAC,QAAIA,MAAE,EAAE,IAAI;AAAE,WAAO,EAAE,GAAE,EAAC,UAAS,EAAE,IAAI,IAAEA,IAAC;AAAA,EAAC;AAAA,EAAC,KAAK,GAAEA,KAAE,GAAE,GAAE,GAAE;AAAC,QAAI,IAAE,KAAK;AAAmB,QAAG,MAAI,UAAS;AAAC,UAAI,IAAEA;AAAE,WAAK,UAAU,IAAI,GAAE,EAAC,IAAG,GAAE,aAAY,GAAE,OAAM,GAAE,OAAM,GAAE,cAAa,MAAK,UAAS,EAAC,CAAC;AAAE;AAAA,IAAM;AAAC,QAAI,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,IAAE,EAAE,gBAAgB,CAAC,GAAE,IAAE,KAAK,KAAK,QAAQ,CAAC,MAAI;AAAE,SAAK,UAAU,IAAI,GAAE,EAAC,IAAG,GAAE,cAAa,GAAE,OAAM,GAAE,OAAM,GAAE,UAAS,EAAC,CAAC,GAAE,KAAK,KAAK,KAAK,eAAe,GAAE,GAAE,CAAC,GAAEA,OAAG,QAAM,KAAK,KAAK,OAAO,IAAI,IAAI,WAAWA,IAAE,QAAOA,IAAE,YAAW,CAAC,GAAE,CAAC;AAAA,EAAC;AAAA,EAAC,MAAM,KAAK,GAAE;AAAC,WAAO,KAAK,SAAS,CAAC;AAAA,EAAC;AAAA,EAAC,SAAS,GAAEA,KAAE,GAAE;AAAC,QAAG,EAAC,cAAa,GAAE,OAAM,GAAE,OAAM,GAAE,aAAY,EAAC,IAAE,KAAK,UAAU,IAAI,CAAC;AAAE,QAAG,MAAI,SAAS,SAAOA,OAAG,QAAMA,QAAI,OAAK,KAAG,QAAM,KAAG,EAAE,UAAQ,IAAE,EAAE,MAAMA,KAAE,CAAC;AAAE,IAAAA,MAAEA,OAAG,GAAE,IAAE,KAAG,EAAE,cAAc,CAAC;AAAE,QAAI,IAAE,EAAE,gBAAgB,CAAC,GAAE,IAAE,KAAK,KAAK,OAAO,MAAM,IAAEA,MAAE,GAAE,IAAE,IAAE,CAAC;AAAE,WAAO,IAAI,EAAE,QAAO,CAAC;AAAA,EAAC;AAAA,EAAC,YAAY,GAAEA,MAAE,OAAG;AAAC,QAAG,KAAK,UAAU,IAAI,CAAC,GAAE;AAAC,UAAI,IAAE,KAAK,UAAU,IAAI,CAAC;AAAE,UAAG,EAAE,YAAW,CAACA,OAAG,EAAE,WAAS,EAAE,QAAM;AAAG,WAAK,KAAK,MAAM,EAAE,YAAY,GAAE,KAAK,KAAK,KAAK,YAAY,EAAE,EAAE,GAAE,KAAK,UAAU,OAAO,CAAC;AAAA,IAAC;AAAC,WAAM;AAAA,EAAE;AAAA,EAAC,SAAS,GAAE;AAAC,WAAO,KAAK,UAAU,IAAI,CAAC,IAAE,KAAK,UAAU,IAAI,CAAC,EAAE,WAAS;AAAA,EAAC;AAAA,EAAC,OAAO,GAAE;AAAC,QAAIA,MAAE,KAAK,UAAU,IAAI,CAAC;AAAE,IAAAA,OAAG,QAAMA,IAAE;AAAA,EAAU;AAAA,EAAC,iBAAgB;AAAC,WAAO;AAAA,EAAE;AAAA,EAAC,gBAAgB,GAAE;AAAC,WAAO,KAAK,UAAU,IAAI,CAAC,EAAE;AAAA,EAAY;AAAA,EAAC,UAAS;AAAC,SAAK,KAAK,KAAK,QAAQ,GAAE,aAAY,KAAK,QAAM,KAAK,KAAK,QAAQ,oBAAoB,GAAE,KAAK,OAAK;AAAA,EAAI;AAAA,EAAC,SAAQ;AAAC,WAAM,EAAC,YAAW,MAAE;AAAA,EAAC;AAAA,EAAC,WAAW,GAAEA,KAAE,GAAE,GAAE;AAAC,QAAI;AAAE,QAAG,KAAG,KAAK,KAAE,KAAK,MAAM,KAAG,OAAK,IAAE,MAAK,GAAEA,GAAC;AAAA,SAAM;AAAC,UAAI,IAAE,KAAK;AAAmB,UAAE,EAAC,IAAG,EAAC,GAAE,KAAK,UAAU,IAAI,GAAE,EAAC,IAAG,GAAE,cAAa,GAAE,OAAM,GAAE,OAAMA,KAAE,UAAS,EAAC,CAAC;AAAE,UAAI,IAAE,EAAE,cAAc,CAAC;AAAE,WAAK,KAAK,KAAK,eAAe,GAAE,GAAE,CAAC;AAAA,IAAC;AAAC,WAAM,EAAC,QAAO,GAAE,OAAM,GAAE,OAAMA,IAAC;AAAA,EAAC;AAAA,EAAC,mBAAmB,EAAC,OAAM,GAAE,OAAMA,KAAE,QAAO,EAAC,GAAE;AAAC,QAAI,IAAE,KAAK,KAAK,OAAO,QAAO,EAAC,cAAa,EAAC,IAAE,KAAK,UAAU,IAAI,CAAC,GAAE,IAAE,EAAE,cAAc,CAAC;AAAE,YAAOA,KAAE;AAAA,MAAC,KAAI;AAAU,eAAO,IAAI,aAAa,GAAE,GAAE,CAAC;AAAA,MAAE,KAAI;AAAQ,eAAO,IAAI,WAAW,GAAE,GAAE,CAAC;AAAA,MAAE,KAAI;AAAO,eAAO,IAAI,WAAW,GAAE,GAAE,CAAC;AAAA,MAAE;AAAQ,cAAM,IAAI,MAAM,iBAAiBA,GAAC,EAAE;AAAA,IAAC;AAAA,EAAC;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,SAAM,CAAC,GAAEC,SAAK,EAAE,MAAMD,KAAE,EAAC,aAAY,cAAa,CAAC,EAAE,KAAK,OAAG;AAAC,MAAE,MAAI,EAAE,IAAI,EAAE,uCAAuCA,GAAC,GAAG,GAAE,EAAE,YAAY,EAAE,KAAK,OAAG;AAAC,kBAAY,YAAY,GAAE,CAAC,EAAE,KAAK,OAAG;AAAC,QAAAC,IAAE,EAAE,UAAS,EAAE,MAAM;AAAA,MAAC,CAAC;AAAA,IAAC,CAAC;AAAA,EAAC,CAAC,GAAE,CAAC;AAAE;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAG,MAAI,KAAK,QAAO;AAAG,MAAI,IAAE;AAAyB,SAAOD,OAAG,IAAE,IAAE,yCAAuCA,QAAI,IAAE,gCAA+B,MAAI,QAAM,GAAG,CAAC,KAAG,OAAK,GAAG,CAAC,IAAEC,MAAE;AAAC;AAAC,eAAe,KAAI;AAAC,MAAG,CAACD,KAAE,CAAC,IAAE,MAAM,QAAQ,IAAI,CAAC,EAAE,EAAE,SAAS,uBAAuB,GAAE,EAAE,EAAE,SAAS,8BAA8B,CAAC,CAAC;AAAE,SAAO,IAAI,QAAQ,CAACC,KAAE,MAAI;AAAC,QAAI,IAAE,CAAC;AAAE,MAAE,aAAW,CAAC,GAAE,MAAI;AAAC,UAAG,EAAE,SAAS,YAAY,GAAE;AAAC,YAAI,IAAE,GAAG,mBAAmB,QAAQ,OAAM,KAAK,GAAE,IAAE,IAAI,KAAK,CAAC,CAAC,GAAE,EAAC,MAAK,yBAAwB,CAAC;AAAE,eAAO,IAAI,gBAAgB,CAAC;AAAA,MAAC;AAAC,aAAO,EAAE,SAAS,OAAO,IAAE,GAAGD,KAAE,GAAE,MAAI,OAAK,KAAG,CAAC,IAAE,IAAE;AAAA,IAAC,GAAE,OAAK,EAAE,kBAAgB,IAAI,GAAGA,KAAE,GAAE,MAAI,OAAK,KAAG,EAAE,CAAC;AAAG,QAAI,IAAE;AAAG,MAAE,UAAQ,MAAI;AAAC,UAAG,KAAG,GAAG;AAAO,WAAG,MAAG,EAAE,EAAC,SAAQ,kMAAiM,CAAC;AAAA,IAAC;AAAE,QAAI;AAAE,SAAGA,OAAG,MAAI,QAAM,EAAE,sBAAoB,IAAI,KAAK,CAAC,yCAAuC,GAAG,SAAS,CAAC,GAAE,EAAC,MAAK,kBAAiB,CAAC,GAAE,IAAE,GAAG,CAAC,KAAG,IAAE,IAAI,CAAC,GAAE,EAAE,KAAK,OAAG;AAAC,UAAE,MAAG,KAAG;AAAG,UAAI,IAAE;AAAK,QAAE,OAAK,EAAC,MAAK,EAAE,MAAM,QAAO,MAAK,CAAC,CAAC,GAAE,sBAAqB,EAAE,MAAM,2BAA0B,MAAK,CAAC,QAAQ,CAAC,GAAE,iBAAgB,EAAE,MAAM,qBAAoB,UAAS,CAAC,CAAC,GAAE,gBAAe,EAAE,MAAM,mBAAkB,MAAK,CAAC,UAAS,UAAS,QAAQ,CAAC,GAAE,aAAY,EAAE,MAAM,gBAAe,GAAE,CAAC,QAAQ,CAAC,GAAE,SAAQ,EAAE,MAAM,WAAU,GAAE,CAAC,CAAC,EAAC,GAAEC,IAAE,EAAC,MAAK,EAAC,CAAC;AAAA,IAAC,CAAC,EAAE,MAAM,CAAC;AAAA,EAAC,CAAC;AAAC;AAAC,SAAS,IAAID,KAAE,GAAE;AAAC,UAAO,GAAE;AAAA,IAAC,KAAI;AAAU,aAAO,IAAI,aAAaA,GAAC;AAAA,IAAE,KAAI;AAAQ,aAAO,IAAI,WAAWA,GAAC;AAAA,IAAE,KAAI;AAAO,aAAO,IAAI,WAAWA,GAAC;AAAA,IAAE;AAAQ,YAAM,IAAI,MAAM,iBAAiB,CAAC,EAAE;AAAA,EAAC;AAAC;AAAC,IAAI,MAAI,CAAC,0BAAyB,+BAA8B,sCAAsC;AAAtG,IAAwG,KAAG;AAA3G,IAAgH,KAAG;AAAnH,IAAwH,KAAG,CAAC;AAA5H,IAA8H,KAAG;AAAjI,IAAoI,KAAG;AAAG,SAAS,IAAIA,KAAE,IAAE,OAAG;AAAC,MAAG,GAAG,mGAAmG,GAAE,GAAG,OAAM,IAAI,MAAM,gIAAgI;AAAE,OAAGA,KAAE,KAAG;AAAC;AAAC,SAAS,IAAIA,KAAE,IAAE,OAAG;AAAC,MAAG,GAAG,OAAM,IAAI,MAAM,iIAAiI;AAAE,MAAG,OAAOA,OAAG,SAAS,MAAGA;AAAA,OAAM;AAAC,SAAGA;AAAE,QAAIC,MAAE,IAAI,OAAO,OAAG,GAAG,CAAC,KAAG,IAAI;AAAE,QAAGA,IAAE,SAAO,EAAE,OAAM,IAAI,MAAM,2DAA2DA,IAAE,KAAK,GAAG,CAAC,+JAA+J;AAAA,EAAC;AAAC,OAAG;AAAC;AAAC,IAAI,KAAG;AAAP,IAAU,KAAG;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA;AAAC;AAAC,SAAS,MAAK;AAAC,MAAG,OAAK,GAAG,OAAM,IAAI,MAAM,+BAA+B;AAAE,SAAO;AAAE;AAAC,IAAI,MAAI;AAAS,IAAI,MAAI;AAAE,GAAG,QAAO,YAAS;AAAC,MAAG,EAAC,MAAKA,IAAC,IAAE,MAAM,GAAG;AAAE,SAAO,IAAI,GAAGA,GAAC;AAAC,GAAE,GAAG;AAAE,IAAI,KAAG,EAAE;AAAE,GAAG,aAAa,qCAAoC,MAAI,EAAE;AAAE,GAAG,aAAa,sBAAqB,MAAI,IAAE;AAAE,GAAG,aAAa,8BAA6B,MAAI,EAAE;AAAE,GAAG,aAAa,qCAAoC,MAAI,IAAE;AAAE,GAAG,aAAa,4BAA2B,MAAI,KAAE;AAAE,GAAG,aAAa,qCAAoC,MAAI,GAAG;AAAE,GAAG,aAAa,2BAA0B,MAAI,KAAE;AAAE,GAAG,aAAa,kCAAiC,MAAI,IAAE;AAAE,GAAG,aAAa,iCAAgC,MAAI,KAAE;AAAE,GAAG,aAAa,sDAAqD,MAAI,EAAE;AAAE,GAAG,aAAa,sCAAqC,MAAI,KAAE;AAAE,GAAG,aAAa,uBAAsB,MAAI,EAAE;AAAE,GAAG,aAAa,8BAA6B,MAAI,KAAE;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,UAAI,KAAK,SAAO,EAAE,QAAO,KAAK,eAAa,EAAE,cAAa,KAAK,qBAAmB,KAAK,sBAAsB;AAAA,EAAE;AAAA,EAAC,wBAAuB;AAAC,QAAG,KAAK,QAAQ,GAAE;AAAC,UAAG,KAAK,aAAa,WAAW,KAAK,EAAE,QAAO,OAAO,KAAK,aAAa,MAAM,KAAK,CAAC;AAAE,UAAG,KAAK,aAAa,WAAW,IAAI,EAAE,QAAO;AAAA,IAAE;AAAC,WAAO;AAAA,EAAC;AAAA,EAAC,UAAS;AAAC,WAAO,KAAK,WAAS;AAAA,EAAO;AAAC;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,SAAO,GAAE,KAAK,iBAAe,GAAE,KAAK,iBAAe,GAAE,KAAK,cAAY,oBAAI,OAAI,KAAK,cAAY,oBAAI,OAAI,KAAK,eAAa,GAAE,KAAK,oBAAkB;AAAA,EAAC;AAAA,EAAC,cAAc,GAAEC,KAAE,IAAE,OAAG,IAAE,MAAG;AAAC,QAAI,GAAE,IAAE,GAAG,GAAEA,GAAC;AAAE,WAAO,KAAG,KAAK,YAAY,IAAI,CAAC,KAAG,KAAK,YAAY,IAAI,GAAE,CAAC,CAAC,GAAE,KAAK,YAAY,IAAI,CAAC,EAAE,SAAO,KAAG,IAAE,KAAK,YAAY,IAAI,CAAC,EAAE,IAAI,GAAE,KAAK,qBAAmB,IAAE,KAAK,OAAO,aAAa,EAAC,MAAK,GAAE,OAAMA,KAAE,kBAAiB,EAAC,CAAC,GAAE,KAAK,qBAAmB,OAAK,IAAE,KAAK,OAAO,aAAa,EAAC,MAAK,GAAE,OAAMA,KAAE,kBAAiB,EAAC,CAAC,GAAE,KAAK,qBAAmB,IAAG,KAAK,YAAY,IAAI,CAAC,KAAG,KAAK,YAAY,IAAI,GAAE,CAAC,CAAC,GAAE,KAAK,YAAY,IAAI,CAAC,EAAE,KAAK,CAAC,GAAE,KAAK,kBAAiB,KAAK,gBAAc,GAAE;AAAA,EAAC;AAAA,EAAC,cAAc,GAAEA,MAAE,MAAG;AAAC,QAAG,KAAK,YAAY,SAAO,EAAE;AAAO,QAAI,IAAE,EAAE,MAAK,IAAE,EAAE,OAAM,IAAE,GAAG,GAAE,CAAC,GAAE,IAAE,KAAK,YAAY,IAAI,CAAC,GAAE,IAAE,EAAE,QAAQ,CAAC;AAAE,QAAG,IAAE,EAAE,OAAM,IAAI,MAAM,0CAA0C;AAAE,MAAE,CAAC,IAAE,EAAE,EAAE,SAAO,CAAC,GAAE,EAAE,IAAI,GAAE,KAAK,kBAAiB,KAAK,gBAAc,GAAEA,OAAG,KAAK,YAAY,IAAI,CAAC,EAAE,KAAK,CAAC,GAAE,KAAK,qBAAmB,EAAE,QAAQ,GAAE,KAAK,qBAAmB;AAAA,EAAE;AAAA,EAAC,oBAAmB;AAAC,WAAO,KAAK;AAAA,EAAc;AAAA,EAAC,oBAAmB;AAAC,WAAO,KAAK;AAAA,EAAc;AAAA,EAAC,UAAS;AAAC,SAAK,YAAY,QAAQ,CAAC,GAAEA,QAAI;AAAC,QAAE,QAAQ,OAAG;AAAC,UAAE,QAAQ;AAAA,MAAC,CAAC;AAAA,IAAC,CAAC,GAAE,KAAK,YAAY,QAAQ,CAAC,GAAEA,QAAI;AAAC,QAAE,QAAQ,OAAG;AAAC,UAAE,QAAQ;AAAA,MAAC,CAAC;AAAA,IAAC,CAAC,GAAE,KAAK,cAAY,oBAAI,OAAI,KAAK,cAAY,oBAAI,OAAI,KAAK,iBAAe,GAAE,KAAK,iBAAe,GAAE,KAAK,eAAa,GAAE,KAAK,oBAAkB;AAAA,EAAC;AAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,SAAM,GAAGA,GAAC,IAAI,CAAC;AAAE;AAAC,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,SAAO,GAAE,KAAK,kBAAgB,GAAE,KAAK,kBAAgB,GAAE,KAAK,eAAa,oBAAI,OAAI,KAAK,eAAa,oBAAI,OAAI,KAAK,eAAa,GAAE,KAAK,oBAAkB;AAAA,EAAC;AAAA,EAAC,eAAe,GAAEC,KAAE,GAAE,GAAE;AAAC,QAAI,IAAE,GAAG,CAAC,GAAE,IAAE,IAAEA,MAAE,GAAE,IAAE,GAAG,GAAEA,KAAE,GAAE,CAAC;AAAE,QAAG,KAAK,aAAa,IAAI,CAAC,KAAG,KAAK,aAAa,IAAI,GAAE,CAAC,CAAC,GAAE,KAAK,aAAa,IAAI,CAAC,KAAG,KAAK,aAAa,IAAI,GAAE,CAAC,CAAC,GAAE,KAAK,gBAAc,GAAE,KAAK,mBAAkB,KAAK,aAAa,IAAI,CAAC,EAAE,SAAO,GAAE;AAAC,WAAK;AAAkB,UAAI,IAAE,KAAK,aAAa,IAAI,CAAC,EAAE,MAAM;AAAE,aAAO,KAAK,aAAa,IAAI,CAAC,EAAE,KAAK,CAAC,GAAE;AAAA,IAAC;AAAC,SAAK,qBAAmB;AAAE,QAAI,IAAE,KAAK,OAAO,cAAc,EAAC,MAAK,CAAC,GAAEA,GAAC,GAAE,QAAO,GAAE,OAAM,EAAC,CAAC;AAAE,WAAO,KAAK,aAAa,IAAI,CAAC,EAAE,KAAK,CAAC,GAAE;AAAA,EAAC;AAAA,EAAC,eAAe,GAAE;AAAC,QAAG,KAAK,aAAa,SAAO,EAAE;AAAO,QAAIA,MAAE,EAAE,OAAM,IAAE,EAAE,QAAO,IAAE,EAAE,QAAO,IAAE,EAAE,OAAM,IAAE,GAAGA,KAAE,GAAE,GAAE,CAAC;AAAE,SAAK,aAAa,IAAI,CAAC,KAAG,KAAK,aAAa,IAAI,GAAE,CAAC,CAAC,GAAE,KAAK,aAAa,IAAI,CAAC,EAAE,KAAK,CAAC,GAAE,KAAK,mBAAkB,KAAK;AAAkB,QAAI,IAAE,KAAK,aAAa,IAAI,CAAC,GAAE,IAAE,EAAE,QAAQ,CAAC;AAAE,QAAG,IAAE,EAAE,OAAM,IAAI,MAAM,0EAA0E;AAAE,MAAE,OAAO,GAAE,CAAC;AAAE,QAAI,IAAE,GAAG,CAAC,GAAE,IAAEA,MAAE,IAAE;AAAE,SAAK,gBAAc;AAAA,EAAC;AAAA,EAAC,qBAAoB;AAAC,WAAO,KAAK;AAAA,EAAe;AAAA,EAAC,qBAAoB;AAAC,WAAO,KAAK;AAAA,EAAe;AAAA,EAAC,UAAS;AAAC,SAAK,aAAa,QAAQ,CAAC,GAAEA,QAAI;AAAC,QAAE,QAAQ,OAAG;AAAC,UAAE,QAAQ;AAAA,MAAC,CAAC;AAAA,IAAC,CAAC,GAAE,KAAK,aAAa,QAAQ,CAAC,GAAEA,QAAI;AAAC,QAAE,QAAQ,OAAG;AAAC,UAAE,QAAQ;AAAA,MAAC,CAAC;AAAA,IAAC,CAAC,GAAE,KAAK,eAAa,oBAAI,OAAI,KAAK,eAAa,oBAAI,OAAI,KAAK,kBAAgB,GAAE,KAAK,kBAAgB,GAAE,KAAK,eAAa,GAAE,KAAK,oBAAkB;AAAA,EAAC;AAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE;AAAC,SAAM,GAAGD,GAAC,IAAI,CAAC,IAAIC,GAAC,IAAI,CAAC;AAAE;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAGA,QAAI,aAAa,QAAO;AAAG,QAAM,IAAI,MAAM,GAAGA,GAAC,oBAAoB;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAG,KAAK,IAAI,GAAGA,GAAC,IAAE,EAAE,OAAM,IAAI,MAAM,0DAA0D;AAAE,MAAIC,MAAED,IAAE,QAAO,IAAE,UAAS,IAAEA,IAAE,IAAI,OAAG,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,GAAE,IAAE,IAAI,MAAMC,MAAE,CAAC;AAAE,IAAEA,MAAE,CAAC,IAAE,EAAEA,MAAE,CAAC;AAAE,WAAQ,IAAEA,MAAE,GAAE,KAAG,GAAE,EAAE,EAAE,GAAE,CAAC,IAAE,IAAI,EAAE,IAAE,CAAC,CAAC,MAAM,EAAE,IAAE,CAAC,CAAC;AAAI,SAAO;AAAC;AAAC,IAAI,KAAG,CAACD,KAAE,GAAEC,QAAIA,QAAI,UAAQ,aAAaD,GAAC,kBAAkB,CAAC,QAAM;AAAA;AAAA;AAAA;AAAA,4DAI72qB,CAAC;AAAA;AAAA,oDAETA,GAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMxC,IAAI;AAAA,CAAI,SAASA,KAAE;AAAC,EAAAA,IAAEA,IAAE,cAAY,CAAC,IAAE,eAAcA,IAAEA,IAAE,OAAK,CAAC,IAAE;AAAM,GAAG,OAAK,KAAG,CAAC,EAAE;AAAE,IAAI,KAAG,CAACA,KAAE,GAAEC,KAAE,GAAE,MAAI;AAAC,MAAI,IAAE,EAAC,OAAM,EAAE,OAAM,OAAM,EAAE,MAAK,GAAE,IAAE,IAAIA,KAAE,GAAE,CAAC,GAAE,IAAED,IAAE,mBAAmB,EAAC,MAAK,GAAE,OAAM,EAAE,YAAY,KAAI,CAAC,GAAE,IAAE,EAAE,EAAE,IAAI,qBAAqB;AAAE,MAAG,MAAI,IAAG;AAAC,QAAE,EAAE,YAAY;AAAE,QAAI,IAAE,EAAE,MAAM,GAAG;AAAE,KAAC,MAAI,SAAO,EAAE,KAAK,OAAG,EAAE,UAAU,YAAY,EAAE,SAAS,CAAC,CAAC,OAAK,QAAQ,MAAM,EAAE,SAAS,GAAE,QAAQ,MAAM,CAAC,GAAE,QAAQ,SAAS;AAAA,EAAE;AAAC,SAAO,IAAEA,IAAE,2BAA2B,EAAC,SAAQ,EAAC,QAAO,GAAE,YAAW,SAAQ,GAAE,OAAM,EAAE,YAAY,MAAK,QAAO,OAAM,CAAC,IAAEA,IAAE,sBAAsB,EAAC,SAAQ,EAAC,QAAO,GAAE,YAAW,SAAQ,GAAE,OAAM,EAAE,YAAY,MAAK,QAAO,OAAM,CAAC;AAAC;AAAhjB,IAAkjB,KAAG,CAACA,KAAE,IAAE,UAAQ;AAAC,UAAOA,KAAE;AAAA,IAAC,KAAK;AAAE,aAAM,GAAG,CAAC;AAAA,IAAG,KAAK;AAAE,aAAM,QAAQ,CAAC;AAAA,IAAI,KAAK;AAAE,aAAM,QAAQ,CAAC;AAAA,IAAI,KAAK;AAAE,aAAM,QAAQ,CAAC;AAAA,IAAI;AAAQ,YAAM,IAAI,MAAM,GAAGA,GAAC,cAAc,CAAC,oBAAoB;AAAA,EAAC;AAAC;AAAE,SAAS,GAAGA,KAAE;AAAC,MAAGA,OAAG,EAAE,QAAM;AAAM,MAAGA,QAAI,EAAE,QAAM;AAAY,MAAGA,QAAI,EAAE,QAAM;AAAY,MAAGA,QAAI,EAAE,QAAM;AAAY,MAAGA,QAAI,EAAE,QAAM;AAAO,MAAGA,QAAI,EAAE,QAAM;AAAO,QAAM,MAAM,gBAAgBA,GAAC,uBAAuB;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAGA,QAAI,EAAE,QAAM;AAAI,MAAGA,QAAI,EAAE,QAAM;AAAI,MAAGA,QAAI,EAAE,QAAM;AAAI,MAAGA,QAAI,EAAE,QAAM;AAAI,MAAGA,QAAI,EAAE,QAAM;AAAI,MAAGA,QAAI,EAAE,QAAM;AAAI,QAAM,MAAM,SAASA,GAAC,uBAAuB;AAAC;AAAC,SAAS,KAAKA,KAAE;AAAC,MAAI;AAAE,UAAOA,IAAE,QAAO;AAAA,IAAC,KAAK;AAAE,UAAE;AAAA;AAAA;AAErwC;AAAA,IAAM,KAAK;AAAE,UAAE;AAAA,kBACLA,IAAE,CAAC,CAAC;AAAA;AACd;AAAA,IAAM;AAAQ,YAAM,MAAM,aAAa;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAIC;AAAE,SAAOA,MAAE;AAAA,OACnF,IAAI,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAWHD,MAAE,4BAA0B,SAAS;AAAA;AAAA,OAEzCC;AAAC;AAAC,SAAS,IAAID,KAAE;AAAC,SAAM;AAAA,6BACDA,IAAE,cAAc,CAAC,CAAC,KAAKA,IAAE,cAAc,CAAC,CAAC,KAAKA,IAAE,cAAc,CAAC,CAAC;AAAA;AAC5F;AAAC,SAAS,IAAIA,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,CAAC,GAAE,IAAEA,IAAE,cAAc,CAAC,IAAEA,IAAE,cAAc,CAAC,IAAEA,IAAE,cAAc,CAAC;AAAE,MAAGA,IAAE,kBAAgBA,IAAE,kBAAgBA,IAAE,kBAAgB,GAAE,EAAE,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAUlJ,GAAGA,GAAC,IAAE,8BAA4B;AAAA,qEACyB,CAAC;AAAA;AAAA,SAE7D;AAAA;AAAA,KAEJ,GAAEA,IAAE,gBAAc,MAAK;AAAC,QAAI,IAAEA,IAAE,iBAAe,GAAG,cAAY,gEAAgE,GAAG,EAAE,OAAMA,IAAE,eAAe,CAAC,OAAK,0DAA0D,GAAGD,IAAE,CAAC,EAAE,OAAMC,IAAE,eAAe,CAAC,MAAK,IAAE,EAAE,MAAM,WAAS,IAAE,cAAY;AAAM,MAAE,KAAK;AAAA;AAAA,8BAEpR,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAMrB,CAAC;AAAA;AAAA,OAEJ;AAAE,QAAI,IAAE,GAAGA,GAAC;AAAE,WAAM,CAAC,IAAG,EAAE,KAAK;AAAA,CACrC,GAAE,GAAG,EAAE,KAAK,GAAEA,IAAE,YAAY,GAAE,GAAG,GAAEA,GAAC,CAAC,EAAE,KAAK;AAAA,CAC5C;AAAA,EAAC;AAAC,MAAI,GAAE,GAAE,IAAE;AAAgD,EAAAA,IAAE,cAAc,QAAQ,CAAC,GAAE,MAAI;AAAC,QAAI,IAAE,GAAGD,IAAE,CAAC,EAAE,MAAM,MAAM;AAAE,SAAG,GAAG,EAAE,OAAO,CAAC,EAAE,YAAY,IAAE,EAAE,MAAM,CAAC,CAAC,WAAW,CAAC,MAAK,IAAEA,IAAE,CAAC,EAAE,MAAM,SAAO,GAAE,IAAE,GAAG,CAAC,GAAE,KAAG,GAAG,EAAE,OAAO,CAAC,EAAE,YAAY,IAAE,EAAE,MAAM,CAAC,CAAC,iBAAiB,CAAC;AAAA,EAAI,CAAC;AAAE,MAAI,IAAE,GAAG,EAAE,MAAM,MAAM;AAAE,OAAG,cAAc,CAAC,MAAK,IAAE,EAAE,MAAM,SAAO,GAAE,IAAE,GAAG,CAAC,GAAE,KAAG;AAAA,4BACvU,CAAC,MAAKC,IAAE,SAAO,KAAG,iBAAgBA,IAAE,aAAW,KAAGA,IAAE,WAAU,KAAG,MAAK,IAAE,IAAI,CAAC,GAAE,EAAE,KAAK,CAAC,GAAEA,IAAE,SAAO,EAAE,KAAK;AAAA;AAAA,KAEhI,IAAE,EAAE,KAAK;AAAA,qEACuD,GAAG,EAAE,OAAMA,IAAE,eAAe,CAAC;AAAA,KAC7F,GAAEA,IAAE,cAAc,QAAQ,CAAC,GAAE,MAAI;AAAC,MAAE,KAAK;AAAA,2BACnB,IAAE,CAAC,wBAAwB,CAAC,WAAWA,IAAE,qBAAmB,GAAGD,IAAE,CAAC,EAAE,OAAMC,IAAE,mBAAmB,CAAC,CAAC,IAAE,GAAGD,IAAE,CAAC,EAAE,OAAMC,IAAE,eAAe,CAAC;AAAA,SACrJ;AAAA,EAAC,CAAC,GAAE,MAAI,MAAI,EAAE,KAAK;AAAA,2BACD,IAAEA,IAAE,cAAc,MAAM;AAAA,OAC5C;AAAE,MAAI,IAAE,IAAI,EAAE,OAAMA,IAAE,cAAc,GAAE,IAAE,CAAC,IAAG,EAAE,KAAK;AAAA,CACzD,IAAE,KAAI,GAAG,EAAE,KAAK,GAAE,GAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAAE,EAAAA,IAAE,UAAQ,EAAE,KAAK,IAAI,EAAE,OAAM,EAAE,OAAMA,IAAE,eAAe,CAAC,GAAEA,IAAE,cAAc,QAAQ,CAAC,GAAE,MAAI;AAAC,MAAE,KAAK,GAAG,GAAGD,IAAE,CAAC,EAAE,OAAM,CAAC,CAAC,EAAE;AAAA,EAAC,CAAC;AAAE,MAAI,IAAEA,IAAE,IAAI,CAAC,GAAE,MAAI,IAAI,GAAE,EAAE,OAAMC,IAAE,qBAAmBA,IAAE,mBAAmB,CAAC,IAAEA,IAAE,iBAAgBA,IAAE,eAAe,EAAE,WAAS,EAAE,MAAM,MAAM,CAAC,EAAE,KAAK;AAAA,CACpT;AAAE,IAAE,KAAK,CAAC,GAAE,EAAE,KAAKA,IAAE,YAAY,CAAC;AAAE,MAAI,IAAE,GAAGA,GAAC;AAAE,SAAO,EAAE,KAAK,GAAG,GAAEA,GAAC,CAAC,GAAE,EAAE,KAAK;AAAA,CAC9E;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAED,IAAE;AAAU,MAAGA,IAAE,gBAAc,KAAK,QAAO;AAAE,MAAI,IAAE,CAAC,GAAE,IAAE,CAAC;AAAE,IAAE,QAAQ,OAAG;AAAC,MAAE,KAAK,EAAE,KAAK,GAAE,EAAE,KAAK,EAAE,KAAK;AAAA,EAAC,CAAC,GAAE,EAAE,KAAKC,IAAE,KAAK,GAAE,EAAE,KAAKA,IAAE,KAAK;AAAE,MAAI,IAAE,EAAE,IAAI,OAAG,EAAE,iBAAiB,EAAE,OAAMA,IAAE,KAAK,CAAC,GAAE,IAAE,EAAE,IAAI,OAAG,EAAE,YAAY,EAAE,OAAMA,IAAE,KAAK,CAAC,EAAE,KAAK,GAAG,GAAE,IAAE,EAAE,IAAI,OAAG,EAAE,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,GAAE,IAAE,GAAGD,GAAC,IAAE,iBAAe;AAAG,SAAO,KAAG,OAAKA,IAAE,gBAAcA,IAAE,cAAc,KAAK,GAAG,IAAE,MAAI,EAAE,IAAI,OAAG,EAAE,MAAM,EAAE,KAAK,GAAG,IAAE,EAAE,KAAK,GAAG,IAAEA,IAAE,cAAc,KAAK,GAAG,IAAE,IAAE,IAAE,GAAE;AAAC;AAAC,IAAI,KAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAP,IAkDld,MAAI;AAAA;AAAA;AAAA;AAAA;AAIJ,SAAS,GAAGA,KAAE,IAAE,IAAG;AAAC,MAAIC,MAAED,IAAE,QAAO,IAAE,MAAI,KAAG,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,IAAE,EAAE,MAAM,CAAC,CAAC,oBAAkB,sBAAqB,IAAE,MAAI,KAAG,GAAG,EAAE,OAAO,CAAC,EAAE,YAAY,IAAE,EAAE,MAAM,CAAC,CAAC,iBAAe;AAAkB,MAAGC,OAAG,EAAE,QAAM,MAAM,CAAC;AAAyC,MAAI,IAAE,EAAE,eAAeD,GAAC,GAAE,IAAE,GAAGC,GAAC,GAAE,IAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAEA,KAAE,IAAI,GAAE,KAAK,IAAI,CAAC,EAAE;AAAE,MAAG,EAAE,WAAS,EAAE,QAAM,UAAU,CAAC;AAAA,kCACxV,CAAC,oCAAoC,CAAC;AAAA;AAAA;AAEjE,MAAI;AAAE,SAAO,IAAE,wBAAsB,EAAE,IAAI,CAAC,GAAE,MAAI;AAAC,QAAI,IAAE,OAAO,EAAE,CAAC,CAAC,wBAAwB,CAAC,IAAI,GAAG,CAAC,CAAC,IAAG,IAAE,MAAI,EAAE,SAAO,IAAE,OAAO,EAAE,IAAE,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC,eAAe,CAAC,IAAI,GAAG,CAAC,CAAC,KAAG,qBAAqB,EAAE,CAAC,CAAC,eAAe,CAAC,IAAI,GAAG,CAAC,CAAC;AAAG,WAAM,GAAG,CAAC,KAAK,CAAC;AAAA,EAAG,CAAC,EAAE,KAAK,EAAE,GAAE;AAAA,SACxQ,CAAC,oBAAoB,CAAC;AAAA,QACvB,CAAC;AAAA,eACM,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC;AAAA;AAAA;AAE5B;AAAC,SAAS,IAAID,KAAE,GAAE;AAAC,MAAIC,MAAED,IAAE,MAAK,IAAEA,IAAE,MAAM,QAAO,IAAE,GAAG,CAAC,GAAE,IAAE,QAAMC,IAAE,OAAO,CAAC,EAAE,YAAY,IAAEA,IAAE,MAAM,CAAC,GAAE,IAAE,CAAC,MAAK,MAAK,MAAK,MAAK,MAAK,IAAI,EAAE,MAAM,GAAE,CAAC,GAAE,IAAE,EAAE,IAAI,OAAG,GAAG,CAAC,QAAQ,EAAE,KAAK,IAAI;AAAE,MAAG,IAAE,EAAE,QAAM;AAAA,WAC5L,CAAC,SAAS,GAAG,CAAC,CAAC;AAAA,iBACT,GAAG,CAAC,CAAC,IAAIA,GAAC;AAAA;AAAA;AAErB,MAAI,IAAE,YAAYA,IAAE,OAAO,CAAC,EAAE,YAAY,IAAEA,IAAE,MAAM,CAAC,CAAC,SAAQ,IAAE,GAAG,CAAC;AAAI,SAAO,MAAI,MAAI,IAAE,OAAM;AAAA,SAC5F,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;AAAA,eACb,GAAG,CAAC,CAAC,IAAIA,GAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC;AAAA,UAC1D,CAAC,IAAI,MAAI,IAAE,KAAG,MAAM,CAAC,EAAE;AAAA;AAAA;AAE7B;AAAC,SAAS,IAAID,KAAE,GAAEC,KAAE,GAAE;AAAC,MAAI,IAAED,IAAE,MAAK,IAAE,EAAE,OAAO,CAAC,EAAE,YAAY,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,QAAM,IAAE,YAAW,IAAEA,IAAE,MAAM,QAAO,IAAE,EAAE,QAAO,IAAE,GAAG,CAAC;AAAE,MAAG,EAAE,YAAYA,IAAE,OAAM,CAAC,KAAG,EAAE,QAAM;AAAA,SACpK,CAAC,+BAA+B,GAAGC,GAAC,CAAC;AAAA,eAC/B,GAAGA,GAAC,CAAC,IAAI,CAAC;AAAA;AAAA;AAAA,SAGhB,CAAC,mBAAmB,CAAC,QAAQ,GAAGA,GAAC,CAAC;AAAA,eAC5B,GAAGA,GAAC,CAAC,IAAI,CAAC,IAAI,IAAE,IAAE,qCAAmC,QAAQ,GAAGA,QAAI,IAAE,KAAG,MAAMA,GAAC,EAAE;AAAA;AAAA;AAE3F,MAAI,IAAE,EAAE,iBAAiBD,IAAE,OAAM,CAAC,GAAE,IAAE,IAAE,GAAE,IAAE;AAAG,MAAG,MAAI,EAAE,QAAM;AAAA,SAC3D,CAAC,+BAA+B,GAAGC,GAAC,CAAC;AAAA,kBAC5B,CAAC;AAAA;AAAA;AAAA,SAGV,CAAC,mBAAmB,CAAC,QAAQ,GAAGA,GAAC,CAAC;AAAA,kBACzB,CAAC;AAAA;AAAA;AAEf,MAAE,KAAG,EAAE,UAAQ,IAAE,IAAE,gBAAc,IAAE,EAAE,IAAI,OAAG,UAAU,GAAG,IAAE,CAAC,CAAC,OAAO,EAAE,KAAK;AAAA,CAC9E;AAAE,MAAI,IAAE;AAAG,MAAG,IAAE,KAAG,IAAE,EAAE,KAAE;AAAA,WAAiB,IAAE,GAAE;AAAC,QAAI,IAAE,GAAG,CAAC,GAAE,IAAED,IAAE,MAAM,IAAI,CAAC,GAAE,MAAI,UAAU,GAAG,IAAE,CAAC,CAAC,EAAE,EAAE,KAAK,IAAI;AAAE,QAAE,GAAG,CAAC,IAAI,CAAC;AAAA,EAAG,MAAM,KAAE;AAAS,MAAI,IAAE,YAAY,EAAE,OAAO,CAAC,EAAE,YAAY,IAAE,EAAE,MAAM,CAAC,CAAC,SAAQ,IAAE,GAAG,CAAC;AAAI,SAAM;AAAA,OACvN,CAAC,+BAA+B,GAAGC,GAAC,CAAC;AAAA;AAAA,MAEtC,CAAC;AAAA,aACM,GAAGA,GAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAIA,QAAI,IAAE,KAAG,MAAMA,GAAC,EAAE;AAAA;AAAA;AAAA,OAGxE,CAAC,qBAAqB,CAAC,QAAQ,GAAGA,GAAC,CAAC;AAAA;AAAA,MAErC,CAAC;AAAA,aACM,GAAGA,GAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAIA,QAAI,IAAE,KAAG,MAAMA,GAAC,EAAE;AAAA;AAAA;AAE9E;AAAC,SAAS,IAAID,KAAE,GAAEC,KAAE,GAAE;AAAC,MAAI,IAAE,IAAID,KAAEC,GAAC;AAAE,SAAOD,IAAE,MAAM,UAAQ,EAAE,WAAS,KAAG,IAAIA,KAAE,GAAEC,KAAE,CAAC,IAAG;AAAC;AAAC,SAAS,IAAID,KAAE,GAAE;AAAC,MAAG,EAAC,GAAEC,KAAE,GAAE,IAAE,CAAC,GAAE,GAAE,IAAE,CAAC,EAAC,IAAE,GAAE,IAAED,IAAE,QAAO,IAAEC,IAAE,SAAO,EAAE,SAAO,EAAE;AAAO,MAAG,MAAI,EAAE,QAAM;AAAG,MAAGA,IAAE,WAAS,EAAE,QAAM,2BAA2B,GAAG,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAInP,MAAI,IAAE,IAAG,IAAE,CAACA,KAAE,GAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,KAAI;AAAC,QAAI,IAAE,EAAE,CAAC;AAAE,QAAG,EAAE,WAAS,EAAE,KAAG,EAAE,WAAS,EAAE,MAAG,QAAQ,EAAE,CAAC,CAAC,mBAAmB,CAAC;AAAA,SAAU;AAAC,UAAI,IAAE,GAAG,GAAE,mBAAmB;AAAE,WAAG,YAAY,CAAC,mBAAmB,CAAC;AAAM,eAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,IAAI,MAAG,QAAQ,EAAE,CAAC,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,KAAI,MAAI,EAAE,SAAO,IAAE,KAAG,QAAQ,EAAE,IAAE,CAAC,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAI,KAAG,QAAQ,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;AAAA,IAAG;AAAA,EAAC;AAAC,MAAI,IAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,IAAI,GAAE,KAAK,IAAI,CAAC,EAAE;AAAE,MAAI,IAAE,GAAG,CAAC,GAAE,IAAE,2BAA2B,CAAC;AAAA,IACpe,CAAC;AAAA;AACH,SAAO,EAAE,WAAS,IAAE,KAAG,UAAU,CAAC,WAAS,KAAG,UAAU,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,QAAO;AAAC;AAAC,SAAS,IAAID,KAAE;AAAC,MAAI,IAAE;AAAG,UAAOA,KAAE;AAAA,IAAC,KAAK;AAAA,IAAE,KAAK;AAAE,WAAG;AAAA;AAAA;AAAA;AAAA;AAI7H;AAAA,IAAM,KAAK;AAAE,WAAG;AAAA;AAAA;AAAA;AAAA;AAIhB;AAAA,IAAM,KAAK;AAAE,WAAG;AAAA;AAAA;AAAA;AAAA;AAIhB;AAAA,IAAM,KAAK;AAAE,WAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAKhB;AAAA,IAAM,KAAK;AAAE,WAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQhB;AAAA,IAAM,KAAK;AAAE,WAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAShB;AAAA,IAAM;AAAQ,QAAE,OAAO,OAAG,MAAI,eAAeA,GAAC,SAAS;AAAE;AAAA,EAAK;AAAC,SAAO;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAOA,IAAE,SAAS,CAAC,MAAI,KAAGA,IAAE,SAAS,CAAC,MAAI;AAAC;AAAC,SAAS,GAAGA,KAAE,IAAE,GAAE;AAAC,MAAGA,QAAI,UAAU,QAAO,GAAG,GAAE,KAAK;AAAE,MAAGA,QAAI,WAASA,QAAI,OAAO,QAAO,GAAG,GAAE,KAAK;AAAE,QAAM,IAAI,MAAM,QAAQA,GAAC,oBAAoB;AAAC;AAAC,SAAS,IAAIA,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAED,IAAE,QAAO,IAAE,GAAG,GAAEC,GAAC,GAAE,IAAE,gDAAgD,GAAGA,GAAC,CAAC;AAAA,4BACzW,CAAC;AAAA;AAAA;AAAA,sDAGyB,GAAGA,KAAE,KAAK,CAAC;AAAA,4BACrC,CAAC;AAAA;AAAA;AAEvB,MAAG,KAAG,GAAE;AAAC,QAAI,IAAE,CAAC,MAAK,MAAK,MAAK,MAAK,MAAK,IAAI,EAAE,MAAM,GAAE,CAAC,GAAE,IAAE,GAAG,CAAC;AAAE,SAAG;AAAA,6BAC9C,EAAE,IAAI,OAAG,GAAG,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,aAAa,GAAGA,GAAC,CAAC;AAAA,mDAC7B,CAAC,IAAI,EAAE,KAAK,IAAI,CAAC;AAAA,oCAChCA,QAAI,IAAE,KAAG,MAAMA,GAAC,EAAE;AAAA;AAAA,gCAEtB,EAAE,IAAI,OAAG,GAAG,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,aAAa,GAAGA,KAAE,KAAK,CAAC;AAAA,mDACtC,CAAC,IAAI,EAAE,KAAK,IAAI,CAAC;AAAA,uCAC7BA,QAAI,IAAE,KAAG,MAAMA,GAAC,EAAE;AAAA;AAAA;AAAA,EAEpD;AAAC,SAAO;AAAC;AAAC,SAAS,IAAID,KAAE;AAAC,MAAI,IAAE;AAAwB,EAAAA,MAAEA,IAAE,QAAQ,GAAE,OAAG,gBAAc,CAAC;AAAE,MAAIC,MAAE;AAAwB,SAAOD,MAAEA,IAAE,QAAQC,KAAE,CAAC,GAAE,GAAE,MAAI,MAAM,CAAC,gBAAgB,CAAC,EAAE,GAAED;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAM,EAAEA,IAAE,eAAe,eAAe,GAAG,KAAGA,IAAE,eAAe,EAAE,WAAS,KAAGA,IAAE,eAAe,eAAe,GAAG,KAAGA,IAAE,eAAe,EAAE,WAAS;AAAE;AAAC,IAAI,KAAG,CAAC;AAAE,GAAG,IAAG,EAAC,oBAAmB,MAAI,IAAG,mBAAkB,MAAI,IAAG,kBAAiB,MAAI,IAAG,iBAAgB,MAAI,GAAE,+BAA8B,MAAI,IAAG,+BAA8B,MAAI,IAAG,+BAA8B,MAAI,IAAG,oBAAmB,MAAI,GAAE,mBAAkB,MAAI,IAAG,yBAAwB,MAAI,IAAG,CAAC;AAAE,IAAI,KAAG,CAAAA,QAAG;AAAC,MAAI,IAAE;AAAE,WAAQC,MAAE,GAAEA,MAAED,IAAE,QAAOC,MAAI,MAAGD,IAAEC,GAAC;AAAE,SAAO;AAAC;AAAE,SAAS,IAAID,KAAE,GAAE;AAAC,MAAGA,IAAE,WAAS,EAAE,OAAO,OAAM,IAAI,MAAM,+BAA+BA,IAAE,MAAM,+BAA+B,EAAE,MAAM,4BAA4B;AAAE,SAAO,EAAE,MAAM,CAACC,KAAE,MAAIA,MAAED,IAAE,CAAC,MAAI,CAAC;AAAC;AAAC,SAAS,EAAEA,KAAE,GAAEC,MAAE,CAAC,GAAE,GAAE,CAAC,GAAE,IAAE,CAAC,GAAE,GAAE,CAAC,GAAE;AAAC,MAAG,CAAC,GAAE,GAAE,CAAC,IAAE,CAAC,KAAK,KAAK,GAAGD,IAAE,EAAE,IAAI,OAAG,EAAE,CAAC,CAAC,CAAC,KAAGC,IAAE,CAAC,IAAE,EAAE,CAAC,EAAE,GAAED,IAAE,IAAE,KAAK,KAAK,GAAGA,IAAE,EAAE,IAAI,OAAG,EAAE,CAAC,CAAC,CAAC,KAAGC,IAAE,CAAC,IAAE,EAAE,CAAC,EAAE,IAAE,GAAED,IAAE,IAAE,KAAK,KAAK,GAAGA,IAAE,EAAE,IAAI,OAAG,EAAE,CAAC,CAAC,CAAC,KAAGC,IAAE,CAAC,IAAE,EAAE,CAAC,EAAE,IAAE,CAAC;AAAE,SAAM,CAAC,GAAE,GAAE,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE,IAAE,OAAG;AAAC,MAAI,IAAE,CAAC,GAAE,GAAE,CAAC,GAAE,IAAE,CAAC,GAAE,GAAE,CAAC;AAAE,SAAO,MAAID,OAAG,MAAI,EAAE,CAAC,IAAE,IAAG,KAAG,MAAIC,OAAG,OAAK,EAAE,CAAC,IAAE,KAAI,EAAC,eAAc,GAAE,mBAAkB,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,MAAE,OAAG;AAAC,MAAGA,IAAE,QAAM,CAAC,GAAE,GAAE,CAAC;AAAE,MAAI,IAAE,GAAGD,IAAE,EAAE,IAAI,OAAG,EAAE,CAAC,CAAC,CAAC,GAAE,IAAE,GAAGA,IAAE,EAAE,IAAI,OAAG,EAAE,CAAC,CAAC,CAAC;AAAE,SAAO,KAAG,IAAE,CAAC,GAAE,IAAG,CAAC,IAAE,KAAG,IAAE,CAAC,IAAG,GAAE,CAAC,IAAE,CAAC,IAAG,IAAG,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,MAAE,OAAG;AAAC,MAAGA,IAAE,QAAM,CAAC,GAAE,GAAE,CAAC;AAAE,MAAI,IAAE,GAAGD,IAAE,EAAE,IAAI,OAAG,EAAE,CAAC,CAAC,CAAC,GAAE,IAAE,GAAGA,IAAE,EAAE,IAAI,OAAG,EAAE,CAAC,CAAC,CAAC;AAAE,SAAO,KAAG,IAAE,CAAC,GAAE,GAAE,CAAC,IAAE,KAAG,IAAE,CAAC,GAAE,GAAE,CAAC,IAAE,CAAC,GAAE,GAAE,CAAC;AAAC;AAAC,SAAS,EAAEA,KAAE;AAAC,SAAM,EAAC,GAAEA,IAAE,IAAI,CAAC,GAAEC,QAAIA,GAAC,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAGA,QAAI,aAAWA,QAAI,WAASA,QAAI,UAAQA,QAAI,SAAS,QAAO;AAAE,MAAGA,QAAI,YAAY,QAAO;AAAE,QAAM,IAAI,MAAM,iBAAiBA,GAAC,EAAE;AAAC;AAAC,SAAS,KAAI;AAAC,SAAM,CAAC,EAAE,OAAO,cAAY,eAAa,WAAW,aAAW,WAAW,UAAU;AAAI;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,QAAM,QAAQA,GAAC,MAAIA,MAAE,CAACA,GAAC,IAAGA,IAAE,QAAQ,CAAAC,QAAG;AAAC,IAAAA,OAAG,QAAM,EAAE,OAAOA,IAAE,UAAQ,aAAY,MAAI,GAAG,CAAC,4DAA4D;AAAA,EAAC,CAAC;AAAC;AAAC,IAAI;AAAA,CAAI,SAASD,KAAE;AAAC,EAAAA,IAAEA,IAAE,sBAAoB,CAAC,IAAE,uBAAsBA,IAAEA,IAAE,sBAAoB,CAAC,IAAE,uBAAsBA,IAAEA,IAAE,+BAA6B,CAAC,IAAE,gCAA+BA,IAAEA,IAAE,sBAAoB,CAAC,IAAE,uBAAsBA,IAAEA,IAAE,YAAU,CAAC,IAAE;AAAW,GAAG,OAAK,KAAG,CAAC,EAAE;AAAE,IAAI,MAAI,EAAE,EAAE,UAAU,mCAAmC;AAAzD,IAA2D,MAAI,CAACA,KAAE,MAAI;AAAC,MAAIC,MAAED,IAAE,OAAO,kCAAiC,IAAE,EAAE,gBAAe,IAAE,EAAE;AAAS,MAAG,EAAE,MAAM,OAAG,KAAGC,GAAC,EAAE,QAAO;AAAE,IAAE,OAAO,EAAE,CAAC,IAAEA,OAAG,EAAE,MAAI,UAAQ,EAAE,MAAI,QAAO,MAAI,0DAA0D;AAAE,MAAI,IAAE,KAAK,KAAK,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC;AAAE,SAAO,IAAEA,OAAG,IAAE,KAAK,KAAK,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,GAAE,EAAE,OAAO,KAAGA,KAAE,MAAI,6CAA6C,GAAE,CAAC,GAAE,GAAE,CAAC,KAAG,CAAC,GAAE,GAAE,CAAC;AAAC;AAA3b,IAA6b,KAAG,MAAMD,YAAU,GAAE;AAAA,EAAC,aAAY;AAAC,WAAOA,IAAE;AAAA,EAAY;AAAA,EAAC,YAAY,GAAEC,KAAE;AAAC,QAAG,MAAM,GAAE,KAAK,uBAAqB,oBAAI,WAAQ,KAAK,sBAAoB,GAAE,KAAK,WAAS,OAAG,KAAK,iBAAe,GAAE,KAAK,4BAA0B,CAAC,GAAE,KAAK,qBAAmB,MAAK,KAAK,WAAS,MAAK,KAAK,gBAAc,GAAE,KAAK,yBAAuB,CAAC,GAAE,KAAK,yBAAuB,CAAC,GAAE,KAAK,eAAa,GAAE,KAAK,oBAAkB,OAAG,KAAK,0BAAwB,OAAG,CAAC,GAAG,EAAE,OAAM,IAAI,MAAM,wCAAwC;AAAE,SAAK,gBAAc,CAAC,GAAE,KAAK,SAAO,GAAE,KAAK,QAAM,EAAE,OAAM,KAAK,iBAAe,MAAK,KAAK,qBAAmB,MAAK,KAAK,cAAY,IAAI,GAAGA,GAAC,GAAE,KAAK,wBAAsB,KAAK,OAAO,SAAS,IAAI,iBAAiB,GAAE,KAAK,gCAA8B,KAAK,YAAY,sBAAoB,KAAG,KAAG,GAAE,KAAK,gBAAc,IAAI,GAAG,KAAK,MAAM,GAAE,KAAK,iBAAe,IAAI,GAAG,KAAK,MAAM,GAAE,KAAK,YAAU,IAAI,GAAG,MAAK,GAAG,CAAC,GAAE,EAAE,EAAE,QAAQ,yBAAyB,MAAI,KAAK,cAAY,SAAS,cAAc,QAAQ,GAAE,KAAK,YAAY,QAAM,GAAE,KAAK,YAAY,SAAO,GAAE,KAAK,eAAa,KAAK,YAAY,WAAW,QAAQ,GAAE,KAAK,aAAa,UAAU,EAAC,QAAO,GAAE,QAAO,aAAY,CAAC,GAAE,SAAS,KAAK,YAAY,KAAK,WAAW;AAAA,EAAE;AAAA,EAAC,iBAAgB;AAAC,WAAO;AAAA,EAAE;AAAA,EAAC,YAAY,GAAEA,MAAE,OAAG;AAAC,QAAG,CAAC,KAAK,UAAU,IAAI,CAAC,EAAE,QAAM;AAAG,QAAI,IAAE,KAAK,UAAU,IAAI,CAAC;AAAE,WAAOA,MAAE,EAAE,WAAS,IAAE,EAAE,YAAW,EAAE,WAAS,IAAE,SAAI,EAAE,sBAAoB,SAAO,KAAK,YAAY,EAAE,mBAAmB,KAAK,MAAM,GAAE,KAAK,YAAY,EAAE,mBAAmB,KAAK,MAAM,IAAG,KAAK,qBAAqB,IAAI,CAAC,KAAG,KAAK,0BAA0B,KAAK,CAAC,GAAE,SAAK,KAAK,gBAAgB,CAAC,GAAE,KAAK,UAAU,OAAO,CAAC,GAAE;AAAA,EAAI;AAAA,EAAC,SAAQ;AAAC,WAAM,EAAC,eAAc,KAAK,cAAc,cAAa,wBAAuB,KAAK,cAAc,mBAAkB,YAAW,MAAE;AAAA,EAAC;AAAA,EAAC,gBAAgB,GAAE;AAAC,QAAIA,MAAE,KAAK,UAAU,IAAI,CAAC;AAAE,QAAG,EAAE,CAACA,OAAG,CAACA,IAAE,WAAU;AAAC,UAAGA,IAAE,UAAS;AAAC,QAAAA,IAAE,WAAS;AAAK;AAAA,MAAM;AAAC,MAAAA,IAAE,oBAAoB,YAAU,KAAK,cAAc,cAAcA,IAAE,QAAQ,IAAEA,IAAE,oBAAoB,cAAY,KAAK,eAAe,eAAeA,IAAE,QAAQ,GAAEA,IAAE,WAAS;AAAA,IAAI;AAAA,EAAC;AAAA,EAAC,SAAS,GAAE;AAAC,WAAO,KAAK,UAAU,IAAI,CAAC,IAAE,KAAK,UAAU,IAAI,CAAC,EAAE,WAAS;AAAA,EAAC;AAAA,EAAC,OAAO,GAAE;AAAC,QAAIA,MAAE,KAAK,UAAU,IAAI,CAAC;AAAE,IAAAA,IAAE;AAAA,EAAU;AAAA,EAAC,OAAO,GAAE;AAAC,QAAG,KAAK,UAAU,IAAI,CAAC,GAAE;AAAC,UAAIA,MAAE,KAAK,UAAU,IAAI,CAAC;AAAE,MAAAA,IAAE;AAAA,IAAU;AAAA,EAAC;AAAA,EAAC,MAAM,GAAEA,KAAE,GAAE;AAAC,QAAG,MAAI,eAAa,KAAG,KAAK,OAAM,IAAI,MAAM,uEAAuE;AAAE,QAAI,IAAE,EAAC,IAAG,KAAK,WAAW,EAAC;AAAE,WAAO,KAAK,UAAU,IAAI,GAAE,EAAC,OAAM,GAAE,OAAMA,KAAE,QAAO,GAAE,UAAS,EAAC,CAAC,GAAE;AAAA,EAAC;AAAA,EAAC,KAAK,GAAEA,KAAE,GAAE,GAAE,GAAE;AAAC,QAAG,MAAI,YAAY,OAAM,IAAI,MAAM,uEAAuE;AAAE,SAAK,UAAU,IAAI,GAAE,EAAC,OAAM,GAAE,OAAM,GAAE,QAAOA,KAAE,UAAS,EAAC,CAAC;AAAA,EAAC;AAAA,EAAC,cAAa;AAAC,SAAK,MAAM,OAAO,CAAC,KAAK,eAAe,OAAO,CAAC,CAAC,GAAE,KAAK,iBAAe,MAAK,KAAK,sBAAoB,GAAE,KAAK,uBAAqB,oBAAI,WAAQ,KAAK,0BAA0B,QAAQ,OAAG;AAAC,WAAK,gBAAgB,CAAC,GAAE,KAAK,UAAU,OAAO,CAAC;AAAA,IAAC,CAAC,GAAE,KAAK,uBAAuB,QAAQ,OAAG,KAAK,cAAc,cAAc,CAAC,CAAC,GAAE,KAAK,uBAAuB,QAAQ,OAAG,KAAK,cAAc,cAAc,GAAE,KAAE,CAAC,GAAE,KAAK,4BAA0B,CAAC,GAAE,KAAK,yBAAuB,CAAC,GAAE,KAAK,yBAAuB,CAAC;AAAA,EAAC;AAAA,EAAC,4BAA2B;AAAC,SAAK,mBAAiB,KAAK,iBAAe,KAAK,OAAO,qBAAqB;AAAA,EAAE;AAAA,EAAC,wBAAuB;AAAC,SAAK,uBAAqB,KAAK,mBAAmB,IAAI,GAAE,KAAK,qBAAmB;AAAA,EAAK;AAAA,EAAC,MAAM,8BAA6B;AAAC,QAAI;AAAE,QAAG;AAAC,UAAE,MAAM,QAAQ,IAAI,OAAO,OAAO,KAAK,aAAa,CAAC;AAAA,IAAC,SAAOA,KAAE;AAAC,YAAM,IAAI,MAAMA,IAAE,OAAO;AAAA,IAAC;AAAC,WAAO,KAAK,KAAK,aAAa,EAAE,IAAI,CAACA,KAAE,MAAI;AAAC,WAAK,cAAcA,GAAC,IAAE,EAAE,CAAC;AAAA,IAAC,CAAC;AAAA,EAAC;AAAA,EAAC,MAAM,cAAc,GAAE;AAAC,QAAG,EAAE,EAAE,QAAQ,4BAA4B,EAAE,QAAO,QAAQ,KAAK,oIAAoI,GAAE;AAAK,QAAIA,MAAE,EAAE,MAAK,IAAE,KAAK,cAAc,cAAcA,KAAE,eAAe,WAAS,eAAe,QAAQ;AAAE,SAAK,0BAA0B,GAAE,KAAK,sBAAsB,GAAE,KAAK,eAAe,mBAAmB,GAAE,GAAE,GAAE,GAAEA,GAAC,GAAE,KAAK,YAAY,GAAE,MAAM,EAAE,SAAS,WAAW,IAAI;AAAE,QAAI,IAAE,EAAE,eAAe,EAAE,MAAM,CAAC;AAAE,WAAO,EAAE,MAAM,GAAE,KAAG,QAAM,KAAK,cAAc,cAAc,CAAC,GAAE,EAAE,EAAE,QAAQ,yBAAyB,MAAI,EAAE,OAAO,KAAK,iBAAe,QAAO,MAAI,wCAAwC,GAAE,KAAK,aAAa,kBAAkB,IAAG;AAAA,EAAC;AAAA,EAAC,qBAAqB,GAAEA,KAAE;AAAC,QAAI,IAAE,KAAK,UAAU,IAAI,CAAC;AAAE,WAAO,EAAE,SAAOA,KAAE,EAAE;AAAA,EAAM;AAAA,EAAC,SAAS,GAAE;AAAC,QAAIA,MAAE,KAAK,UAAU,IAAI,CAAC,GAAE,EAAC,QAAO,GAAE,oBAAmB,EAAC,IAAEA;AAAE,QAAG,KAAG,QAAMA,IAAE,UAAQ,SAAS,QAAO;AAAE,QAAGA,IAAE,UAAQ,aAAY;AAAC,UAAI,IAAE,KAAK,SAAS,EAAE,KAAK,MAAM,GAAE,IAAE,KAAK,SAAS,EAAE,KAAK,MAAM,GAAE,IAAE,EAAE,mCAAmC,EAAE,uBAAuB,GAAE,CAAC,EAAE,QAAO,SAAS;AAAE,aAAO,KAAK,qBAAqB,GAAE,CAAC,GAAE;AAAA,IAAC;AAAC,SAAK,sBAAoB,KAAK,oBAAkB,MAAG,QAAQ,KAAK,oIAAoI;AAAG,QAAI,IAAE,CAAC,UAAS,eAAe,GAAE,IAAEA,IAAE,UAAS,IAAE,EAAE;AAAK,MAAE,OAAO,IAAE,MAAI,GAAE,MAAI,4EAA4E;AAAE,QAAI,IAAE,IAAE,GAAE,IAAE,IAAI,YAAY,CAAC,GAAE,IAAE,KAAI,IAAE,KAAI,IAAE,EAAE,IAAI,OAAG,IAAI,gBAAgB,GAAE,CAAC,CAAC,GAAE,IAAE,IAAI,gBAAgB,GAAE,CAAC;AAAE,SAAK,sBAAsB,GAAE,EAAE,IAAI,CAAC,GAAE,MAAI;AAAC,UAAI,IAAE,EAAE,WAAW,QAAQ;AAAE,aAAO,EAAE,UAAU,EAAC,QAAO,KAAK,QAAO,QAAO,cAAa,OAAM,gBAAgB,UAAS,WAAU,EAAE,CAAC,EAAC,CAAC,GAAE,EAAE,kBAAkB;AAAA,IAAC,CAAC,EAAE,IAAI,CAAC,GAAE,MAAI;AAAC,UAAI,IAAE,IAAE,GAAE,IAAE,CAAC,GAAE,GAAE,MAAI;AAAC,aAAK,0BAA0B,GAAE,KAAK,eAAe,oBAAoB,EAAC,QAAO,GAAE,aAAY,GAAE,QAAO,EAAC,GAAE,EAAC,SAAQ,EAAC,GAAE,EAAC,OAAM,GAAE,QAAO,EAAC,CAAC,GAAE,KAAK,YAAY;AAAE,YAAI,IAAE,EAAE,WAAW,MAAK,EAAC,oBAAmB,KAAE,CAAC;AAAE,UAAE,UAAU,GAAE,GAAE,GAAE,CAAC,GAAE,EAAE,UAAU,EAAE,CAAC,GAAE,GAAE,CAAC;AAAE,YAAI,IAAE,EAAE,aAAa,GAAE,GAAE,GAAE,CAAC,EAAE,MAAK,IAAE,EAAE,CAAC,GAAE,IAAE,IAAI,kBAAkB,GAAE,GAAE,IAAE,IAAE,CAAC;AAAE,iBAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,KAAG,EAAE,KAAG,MAAI,gBAAgB,GAAE,IAAE,CAAC,IAAE,EAAE,IAAE,CAAC;AAAA,aAAM;AAAC,cAAI,IAAE,EAAE,CAAC;AAAE,YAAE,CAAC,IAAE,EAAE,IAAE,CAAC,GAAE,EAAE,IAAE,CAAC,IAAE,EAAE,IAAE,CAAC,GAAE,EAAE,IAAE,CAAC,IAAE;AAAA,QAAC;AAAA,MAAC,GAAE,IAAE,KAAK,MAAM,KAAG,IAAE,EAAE,GAAE,IAAE,GAAE,IAAE,GAAE,IAAE;AAAE,eAAQ,IAAE,GAAE,IAAE,GAAE,IAAI,GAAE,GAAE,GAAE,CAAC,GAAE,KAAG,IAAE,IAAE;AAAE,UAAI,IAAE,KAAG,IAAE;AAAG,UAAE,KAAK,MAAM,IAAE,CAAC,GAAE,IAAE,MAAI,EAAE,GAAE,GAAE,CAAC,GAAE,KAAG,KAAG,IAAE,KAAI,IAAE,IAAE,GAAE,IAAE,KAAG,EAAE,GAAE,GAAE,CAAC;AAAA,IAAC,CAAC;AAAE,QAAI,IAAE,EAAE,mCAAmC,GAAEA,IAAE,KAAK;AAAE,WAAO,KAAK,qBAAqB,GAAE,CAAC,GAAE;AAAA,EAAC;AAAA,EAAC,MAAM,KAAK,GAAE;AAAC,QAAG,CAAC,KAAK,UAAU,IAAI,CAAC,EAAE,OAAM,IAAI,MAAM,UAAU,CAAC,sBAAsB;AAAE,QAAIA,MAAE,KAAK,UAAU,IAAI,CAAC,GAAE,EAAC,QAAO,EAAC,IAAEA;AAAE,QAAG,KAAG,KAAK,QAAO;AAAE,QAAI;AAAE,QAAGA,IAAE,UAAQ,aAAY;AAAC,UAAI,IAAE,MAAM,QAAQ,IAAI,CAAC,KAAK,KAAKA,IAAE,mBAAmB,KAAK,MAAM,GAAE,KAAK,KAAKA,IAAE,mBAAmB,KAAK,MAAM,CAAC,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC;AAAE,UAAE,EAAE,uBAAuB,GAAE,CAAC;AAAA,IAAC,OAAK;AAAC,UAAI,IAAE,MAAM,KAAK,cAAcA,IAAE,QAAQ;AAAE,UAAE,EAAE,mCAAmC,GAAEA,IAAE,KAAK;AAAA,IAAC;AAAC,WAAO,KAAK,qBAAqB,GAAE,CAAC,GAAE;AAAA,EAAC;AAAA,EAAC,WAAW,GAAE;AAAC,QAAIA,MAAE,EAAE,MAAK,IAAE,EAAE,OAAM,IAAE,KAAK,cAAc,cAAcA,KAAE,CAAC;AAAE,WAAO,KAAK,0BAA0B,GAAE,KAAK,sBAAsB,GAAE,KAAK,eAAe,mBAAmB,GAAE,GAAE,GAAE,GAAEA,GAAC,GAAE,KAAK,YAAY,GAAE;AAAA,EAAC;AAAA,EAAC,wBAAwB,GAAEA,KAAE,GAAE;AAAC,QAAI,IAAE,EAAE;AAAO,QAAG,MAAI,YAAY,OAAM,IAAI,MAAM,qCAAqC;AAAE,QAAI,IAAE,EAAC,IAAG,KAAK,WAAW,EAAC;AAAE,SAAK,UAAU,IAAI,GAAE,EAAC,OAAM,GAAE,OAAMA,KAAE,QAAO,MAAK,UAAS,GAAE,UAAS,EAAE,SAAQ,CAAC;AAAE,QAAI,IAAE,KAAK,UAAU,IAAI,CAAC,GAAE,IAAE,GAAG,EAAE,KAAK,IAAE,EAAE,cAAc,EAAE,KAAK;AAAE,QAAG,EAAE,OAAO,OAAK,EAAE,OAAM,IAAI,MAAM,kBAAkB,EAAE,OAAO,IAAI,iCAAiC,CAAC,IAAI;AAAE,SAAI,EAAE,OAAO,SAAO,eAAe,UAAQ,eAAe,gBAAc,eAAe,UAAQ,eAAe,UAAU,OAAM,IAAI,MAAM,kFAAkF;AAAE,WAAO,EAAE,aAAW,SAAK,IAAE,KAAK,WAAW,CAAC,IAAG,EAAE,WAAS,GAAE,GAAG,EAAE,qBAAqB,GAAEA,KAAE,GAAE,IAAI;AAAA,EAAC;AAAA,EAAC,UAAU,GAAE;AAAC,QAAIA,MAAE,KAAK,UAAU,IAAI,CAAC,GAAE,EAAC,QAAO,GAAE,OAAM,GAAE,OAAM,GAAE,UAAS,EAAC,IAAEA;AAAE,QAAG,MAAI,YAAY,OAAM,IAAI,MAAM,sDAAsD;AAAE,QAAG,KAAG,KAAK,OAAM,KAAG,OAAK,IAAI,MAAM,gCAAgC,IAAE,IAAI,MAAM,iCAAiC;AAAE,QAAI,IAAE,GAAE,IAAE,EAAE,MAAK,IAAE,EAAE,OAAM,IAAE,KAAK,cAAc,cAAc,GAAE,CAAC;AAAE,SAAK,0BAA0B,GAAE,KAAK,sBAAsB,GAAE,KAAK,eAAe,mBAAmB,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,KAAK,YAAY;AAAE,QAAI,IAAE,KAAK,eAAe,GAAE,CAAC,GAAE,IAAE,GAAG,EAAE,yBAAyB,CAAC,GAAE,IAAE,KAAK,UAAU,IAAI,EAAE,MAAM;AAAE,WAAO,EAAE,WAAS,GAAE,EAAC,WAAU,GAAE,QAAO,EAAC;AAAA,EAAC;AAAA,EAAC,WAAW,GAAE;AAAC,QAAIA,MAAE,KAAK,SAAS,EAAE,MAAM;AAAE,QAAG,EAAE,UAAQ,SAAS,KAAG;AAAC,UAAI,IAAEA,IAAE,IAAI,OAAG,EAAE,aAAa,CAAC,CAAC;AAAE,aAAO,GAAG,EAAE,OAAM,EAAE,OAAM,CAAC;AAAA,IAAC,SAAO,GAAE;AAAC,YAAM,IAAI,MAAM,kDAAkD;AAAA,IAAC;AAAC,WAAO,GAAG,EAAE,OAAM,EAAE,OAAMA,GAAC;AAAA,EAAC;AAAA,EAAC,MAAM,KAAK,GAAE;AAAC,KAAC,KAAK,yBAAuB,CAAC,KAAK,4BAA0B,QAAQ,KAAK,mOAAmO,GAAE,KAAK,0BAAwB;AAAI,QAAIA,MAAE,KAAK,cAAa,IAAE,CAAC,GAAE,IAAE;AAAG,SAAK,sBAAoB,QAAM,KAAK,qBAAmB,GAAE,IAAE,QAAI,KAAK,aAAa,KAAK,CAAC,GAAE,KAAK,eAAa,GAAE,EAAE;AAAE,QAAI,IAAE,EAAE,QAAQ,KAAK,aAAa,IAAI,OAAG,EAAE,KAAK,CAAC,EAAE,OAAO,OAAG,KAAG,IAAI,GAAE,IAAE,EAAE,QAAQ,KAAK,aAAa,IAAI,OAAG,EAAE,IAAI,CAAC,EAAE,OAAO,OAAG,KAAG,IAAI;AAAE,SAAK,eAAaA,KAAE,MAAI,KAAK,qBAAmB;AAAM,QAAI,IAAE,EAAC,cAAa,KAAK,cAAa,gBAAe,KAAK,gBAAe,UAAS,MAAK,QAAO,KAAI,GAAE,IAAE,MAAM,QAAQ,IAAI,CAAC;AAAE,WAAO,EAAE,WAAS,EAAE,IAAI,CAAC,GAAE,EAAE,sBAAoB,MAAI,EAAE,IAAI,CAAC,GAAE,OAAK,EAAC,MAAK,EAAE,CAAC,GAAE,IAAG,EAAC,EAAE,EAAE,IAAI,OAAG,GAAG,EAAE,IAAI,KAAK,EAAE,EAAE,EAAE,EAAE,KAAK,IAAI,GAAE,KAAK,eAAa,GAAE,KAAK,iBAAe,GAAE;AAAA,EAAC;AAAA,EAAC,eAAe,GAAEA,KAAE,GAAE;AAAC,WAAOA,QAAI,YAAU,KAAG,QAAM,EAAE,SAAO,KAAG,EAAE,SAAS,EAAE,CAAC,CAAC,MAAI,IAAE,EAAE,IAAI,OAAG,EAAE,aAAa,CAAC,CAAC,IAAG,EAAC,QAAO,KAAK,MAAM,GAAE,GAAEA,GAAC,GAAE,OAAM,GAAE,OAAMA,IAAC;AAAA,EAAC;AAAA,EAAC,gBAAgB,GAAE;AAAC,QAAG,CAAC,EAAE,QAAO;AAAK,QAAI,IAAE,KAAK,UAAU,IAAI,EAAE,MAAM,EAAE;AAAS,WAAO,aAAa,YAAU,EAAC,QAAO,EAAC,IAAE,aAAa,aAAW,EAAE,WAAW,IAAE;AAAA,EAAC;AAAA,EAAC,YAAY,GAAE;AAAC,QAAIA,MAAE,KAAK,UAAU,IAAI,CAAC;AAAE,QAAGA,IAAE,YAAU,KAAK;AAAO,QAAI,IAAE,GAAGA,IAAE,KAAK,IAAE,EAAE,cAAcA,IAAE,KAAK,GAAE,GAAE,IAAE,eAAe,UAAQ,eAAe,WAAS,eAAe;AAAS,QAAGA,IAAE,QAAO;AAAC,UAAG,IAAE,KAAK,cAAc,cAAc,GAAE,GAAE,IAAE,GAAE,EAAE,aAAW,YAAW;AAAC,YAAI,IAAE,KAAK,cAAc,cAAc,GAAE,eAAe,YAAU,eAAe,UAAS,MAAG,KAAE,GAAE,IAAE,EAAE,eAAe;AAAE,QAAAA,IAAE,UAAQ,WAASA,IAAE,UAAQ,SAAO,IAAI,WAAW,CAAC,EAAE,IAAIA,IAAE,MAAM,IAAE,IAAI,aAAa,CAAC,EAAE,IAAIA,IAAE,MAAM,GAAE,EAAE,MAAM,GAAE,KAAK,0BAA0B,GAAE,KAAK,sBAAsB,GAAE,KAAK,eAAe,mBAAmB,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,KAAK,uBAAuB,KAAK,CAAC;AAAA,MAAC,OAAK;AAAC,YAAI,IAAE,EAAE,eAAe;AAAE,QAAAA,IAAE,UAAQ,WAASA,IAAE,UAAQ,SAAO,IAAI,WAAW,CAAC,EAAE,IAAIA,IAAE,MAAM,IAAE,IAAI,aAAa,CAAC,EAAE,IAAIA,IAAE,MAAM,GAAE,EAAE,MAAM;AAAA,MAAC;AAAC,MAAAA,IAAE,SAAO;AAAA,IAAI,MAAM,KAAE,KAAK,cAAc,cAAc,GAAE,CAAC;AAAE,IAAAA,IAAE,WAAS;AAAA,EAAC;AAAA,EAAC,aAAa,GAAE;AAAC,QAAIA,MAAE,GAAE,IAAE,GAAE,IAAE,CAAC,GAAE,IAAE;AAAE,MAAE,QAAQ,OAAG;AAAC,QAAE,KAAK,WAAS,MAAI,EAAE,OAAK,CAAC,CAAC;AAAG,UAAI;AAAE,cAAO,EAAE,KAAK,QAAO;AAAA,QAAC,KAAK;AAAE,cAAE;AAAE;AAAA,QAAM,KAAK;AAAE,cAAE;AAAE;AAAA,QAAM,KAAK;AAAE,cAAE;AAAG;AAAA,QAAM,KAAK;AAAE,cAAE;AAAG;AAAA,QAAM,KAAK;AAAE,cAAE;AAAG;AAAA,QAAM,KAAK;AAAE,cAAE;AAAG;AAAA,QAAM;AAAQ,YAAE,OAAO,OAAG,MAAI,eAAe,EAAE,KAAK,MAAM,SAAS;AAAA,MAAC;AAAC,OAAC,MAAI,KAAG,MAAI,OAAK,IAAE,KAAI,IAAE,MAAI,IAAE,IAAGA,MAAE,KAAK,KAAKA,MAAE,CAAC,IAAE,GAAE,IAAE,EAAE,KAAK,QAAO,EAAE,KAAKA,GAAC,GAAEA,OAAG,EAAE,KAAK,SAAO;AAAA,IAAC,CAAC,GAAEA,MAAE,KAAK,KAAKA,MAAE,CAAC,IAAE;AAAE,QAAI,IAAE,IAAI,YAAYA,GAAC;AAAE,MAAE,QAAQ,CAAC,GAAE,MAAI;AAAC,UAAI,IAAE,EAAE,CAAC;AAAE,QAAE,SAAO,UAAQ,IAAI,WAAW,GAAE,GAAE,EAAE,KAAK,MAAM,EAAE,IAAI,EAAE,IAAI,IAAE,EAAE,SAAO,WAAS,IAAI,YAAY,GAAE,GAAE,EAAE,KAAK,MAAM,EAAE,IAAI,EAAE,IAAI,IAAE,IAAI,aAAa,GAAE,GAAE,EAAE,KAAK,MAAM,EAAE,IAAI,EAAE,IAAI;AAAA,IAAC,CAAC;AAAE,QAAI,IAAE,KAAK,cAAc,cAAcA,KAAE,eAAe,WAAS,eAAe,OAAO;AAAE,WAAO,KAAK,MAAM,YAAY,GAAE,GAAE,GAAE,GAAEA,GAAC,GAAE,KAAK,uBAAuB,KAAK,CAAC,GAAE,EAAC,QAAO,GAAE,MAAKA,KAAE,QAAO,EAAC;AAAA,EAAC;AAAA,EAAC,iBAAiB,GAAEA,KAAE,GAAE,GAAE,GAAE;AAAC,QAAG,MAAI,IAAE,KAAK,eAAe,EAAE,aAAY,CAAC,IAAG,EAAE,cAAc,EAAE,KAAK,MAAI,EAAE,QAAO,KAAK,UAAU,IAAI,EAAE,MAAM,EAAE,SAAO,EAAE,uBAAuB,EAAE,OAAM,CAAC,GAAE;AAAE,SAAK,YAAY,EAAE,MAAM,GAAE,EAAE,WAAS,IAAI,KAAK,QAAO,CAAC;AAAE,QAAI,IAAEA,IAAE,IAAI,CAAC,GAAE,MAAI;AAAC,UAAG,EAAE,UAAQ,YAAY,OAAM,IAAI,MAAM,iIAAiI;AAAE,aAAO,KAAK,YAAY,EAAE,MAAM,GAAE,EAAC,OAAM,KAAK,UAAU,IAAI,EAAE,MAAM,EAAE,OAAM,OAAM,EAAE,OAAM,MAAK,EAAE,cAAc,CAAC,EAAC;AAAA,IAAC,CAAC;AAAE,MAAE,YAAU,GAAG,GAAE,GAAE,CAAC;AAAE,QAAI,IAAE,EAAE,EAAE,QAAQ,4BAA4B;AAAE,WAAO,EAAE,aAAa,KAAK,kBAAgB,KAAK,cAAc,EAAE,SAAS,IAAE,GAAG,KAAK,QAAO,GAAE,GAAE,GAAE,CAAC,IAAG,EAAE,WAAS,KAAK,cAAc,EAAE,SAAS,GAAE,KAAG,KAAK,gBAAgB,GAAE,GAAEA,KAAE,CAAC,GAAE;AAAA,EAAC;AAAA,EAAC,gBAAgB,GAAEA,KAAE,GAAE,GAAE;AAAC,QAAG,EAAE,oBAAoB,QAAQ,OAAM,IAAI,MAAM,iFAAiF;AAAE,QAAI,IAAE,CAAC,GAAE,IAAE,CAAC,GAAE,IAAE;AAAQ,QAAG,EAAE,gBAAc,MAAK;AAAC,QAAE,KAAK,EAAC,MAAK,WAAU,MAAK,CAAC,GAAG,EAAC,GAAE,EAAC,MAAK,WAAU,MAAK,CAAC,IAAE,CAAC,EAAC,CAAC,GAAE,IAAE,EAAE,OAAOA,GAAC,EAAE,IAAI,OAAG,EAAE,KAAK;AAAE,UAAI,IAAE;AAAQ,QAAE,IAAI,OAAG;AAAC,UAAE,KAAK,EAAC,MAAK,GAAE,MAAK,EAAC,CAAC;AAAE,YAAI,IAAE,EAAE,eAAe,CAAC;AAAE,UAAE,KAAK,EAAC,MAAK,GAAE,MAAK,EAAC,CAAC;AAAA,MAAC,CAAC;AAAA,IAAC,OAAK;AAAC,UAAI,IAAE,EAAE,eAAeA,IAAE,KAAK;AAAE,QAAE,KAAK,EAAC,MAAK,GAAE,MAAK,EAAC,CAAC;AAAA,IAAC;AAAC,QAAG,EAAE,MAAK;AAAC,UAAI,IAAE,EAAE,cAAc,EAAE,WAAW;AAAE,QAAE,KAAK,EAAC,MAAK,GAAE,MAAK,CAAC,EAAE,kBAAgB,IAAE,EAAE,kBAAgB,CAAC,EAAC,CAAC;AAAA,IAAC;AAAC,UAAI,IAAE,CAAC,GAAG,GAAE,GAAG,CAAC;AAAG,QAAI,IAAE,CAAC,KAAK,gBAAgBA,GAAC,GAAE,GAAG,EAAE,IAAI,OAAG,KAAK,gBAAgB,CAAC,CAAC,GAAE,KAAK,aAAa,CAAC,CAAC;AAAE,MAAE,QAAQ,OAAG;AAAC,WAAK,qBAAqB,IAAI,EAAE,MAAM;AAAA,IAAC,CAAC,GAAE,KAAK,qBAAqB,IAAIA,IAAE,MAAM;AAAE,QAAI,IAAE,KAAK,OAAO,gBAAgB,EAAC,QAAO,EAAE,SAAS,mBAAmB,CAAC,GAAE,SAAQ,EAAE,IAAI,CAAC,GAAE,OAAK,EAAC,SAAQ,GAAE,UAAS,EAAC,EAAE,EAAC,CAAC,GAAE,IAAE,KAAK,gBAAc;AAAK,SAAK,0BAA0B;AAAE,QAAI,IAAE,CAAC;AAAE,SAAG,KAAK,yBAAuB,KAAK,sBAAsB,GAAE,KAAK,YAAU,SAAO,KAAK,WAAS,KAAK,OAAO,eAAe,EAAC,MAAK,aAAY,OAAM,KAAK,cAAa,CAAC,IAAG,EAAE,kBAAgB,EAAC,UAAS,KAAK,UAAS,2BAA0B,GAAE,qBAAoB,EAAC,GAAE,KAAK,qBAAmB,KAAK,eAAe,iBAAiB,CAAC,KAAG,KAAK,uBAAqB,KAAK,qBAAmB,KAAK,eAAe,iBAAiB,CAAC,IAAG,KAAK,mBAAmB,YAAY,EAAE,QAAQ,GAAE,KAAK,mBAAmB,aAAa,GAAE,CAAC,GAAE,KAAK,mBAAmB,mBAAmB,EAAE,SAAS,CAAC,GAAE,EAAE,SAAS,CAAC,GAAE,EAAE,SAAS,CAAC,CAAC,GAAE,KAAK,wBAAuB,KAAG,EAAE,EAAE,IAAI,mCAAmC,KAAG,KAAK,uBAAqB,EAAE,iBAAe,GAAG,UAAQ,KAAK,sBAAsB,GAAE,IAAE,KAAK,aAAa,KAAK,EAAC,MAAK,EAAE,YAAY,MAAK,OAAM,KAAK,aAAa,EAAC,CAAC,IAAE,KAAK,YAAY;AAAA,EAAE;AAAA,EAAC,MAAM,eAAc;AAAC,QAAG,CAAC,KAAK,sBAAsB,QAAO;AAAE,SAAK,sBAAoB,SAAO,KAAK,qBAAmB,KAAK,cAAc,cAAc,KAAK,gBAAc,GAAE,eAAe,WAAS,eAAe,WAAS,eAAe,aAAa,IAAG,KAAK,eAAe,gBAAgB,KAAK,UAAS,GAAE,KAAK,eAAc,KAAK,oBAAmB,CAAC;AAAE,QAAI,IAAE,KAAK,cAAc,cAAc,KAAK,gBAAc,GAAE,eAAe,WAAS,eAAe,QAAQ;AAAE,SAAK,eAAe,mBAAmB,KAAK,oBAAmB,GAAE,GAAE,GAAE,KAAK,gBAAc,CAAC,GAAE,KAAK,YAAY,GAAE,MAAM,EAAE,SAAS,WAAW,IAAI;AAAE,QAAIA,MAAE,IAAI,eAAe,EAAE,eAAe,CAAC,GAAE,IAAE,OAAOA,IAAE,CAAC,IAAEA,IAAE,CAAC,CAAC,IAAE;AAAI,WAAO,EAAE,MAAM,GAAE,KAAK,cAAc,cAAc,CAAC,GAAE;AAAA,EAAC;AAAA,EAAC,mBAAmB,GAAEA,MAAE,KAAI;AAAC,WAAO,EAAE,EAAE,QAAQ,oBAAoB,KAAG,EAAE,MAAM,OAAG,KAAK,UAAU,IAAI,EAAE,MAAM,EAAE,YAAU,QAAM,EAAE,cAAc,EAAE,KAAK,IAAEA,GAAC;AAAA,EAAC;AAAA,EAAC,aAAY;AAAC,WAAO,KAAK,UAAU,WAAW,IAAE,KAAK,0BAA0B;AAAA,EAAM;AAAA,EAAC,UAAS;AAAC,SAAK,aAAW,KAAK,YAAU,QAAM,KAAK,SAAS,QAAQ,GAAE,KAAK,cAAc,QAAQ,GAAE,KAAK,eAAe,QAAQ,GAAE,KAAK,WAAS;AAAA,EAAG;AAAC;AAAE,GAAG,aAAW;AAAE,GAAG,KAAG,GAAG,UAAS,YAAS;AAAC,MAAID,MAAE,EAAC,iBAAgB,EAAE,EAAE,IAAI,0BAA0B,IAAE,cAAY,mBAAkB,GAAE,IAAE,MAAM,UAAU,IAAI,eAAeA,GAAC,GAAEC,MAAE,CAAC,GAAE,IAAE,CAAC;AAAE,IAAE,SAAS,IAAI,iBAAiB,KAAG,EAAE,KAAK,iBAAiB,GAAE,EAAE,SAAS,IAAI,oBAAoB,KAAG,EAAE,KAAK,CAAC,oBAAoB,CAAC,GAAEA,IAAE,mBAAiB;AAAE,MAAI,IAAE,EAAE;AAAO,EAAAA,IAAE,iBAAe,EAAC,gCAA+B,EAAE,gCAA+B,kCAAiC,EAAE,kCAAiC,6BAA4B,EAAE,6BAA4B,eAAc,EAAE,eAAc,0BAAyB,EAAE,0BAAyB,mCAAkC,EAAE,kCAAiC;AAAE,MAAI,IAAE,MAAM,EAAE,cAAcA,GAAC,GAAE,IAAE,MAAM,EAAE,mBAAmB;AAAE,SAAO,IAAI,GAAG,GAAE,CAAC;AAAC,GAAE,CAAC;AAAE,IAAI;AAAA,CAAI,SAASD,KAAE;AAAC,EAAAA,IAAEA,IAAE,MAAI,CAAC,IAAE,OAAMA,IAAEA,IAAE,QAAM,CAAC,IAAE,SAAQA,IAAEA,IAAE,wBAAsB,CAAC,IAAE,yBAAwBA,IAAEA,IAAE,wBAAsB,CAAC,IAAE,yBAAwBA,IAAEA,IAAE,MAAI,CAAC,IAAE,OAAMA,IAAEA,IAAE,UAAQ,CAAC,IAAE,WAAUA,IAAEA,IAAE,QAAM,CAAC,IAAE,SAAQA,IAAEA,IAAE,YAAU,CAAC,IAAE,aAAYA,IAAEA,IAAE,UAAQ,CAAC,IAAE,WAAUA,IAAEA,IAAE,gBAAc,CAAC,IAAE,iBAAgBA,IAAEA,IAAE,OAAK,EAAE,IAAE,QAAOA,IAAEA,IAAE,aAAW,EAAE,IAAE,cAAaA,IAAEA,IAAE,cAAY,EAAE,IAAE,eAAcA,IAAEA,IAAE,aAAW,EAAE,IAAE,cAAaA,IAAEA,IAAE,MAAI,EAAE,IAAE,OAAMA,IAAEA,IAAE,MAAI,EAAE,IAAE,OAAMA,IAAEA,IAAE,MAAI,EAAE,IAAE,OAAMA,IAAEA,IAAE,MAAI,EAAE,IAAE,OAAMA,IAAEA,IAAE,YAAU,EAAE,IAAE,aAAYA,IAAEA,IAAE,MAAI,EAAE,IAAE,OAAMA,IAAEA,IAAE,QAAM,EAAE,IAAE,SAAQA,IAAEA,IAAE,qBAAmB,EAAE,IAAE,sBAAqBA,IAAEA,IAAE,MAAI,EAAE,IAAE;AAAK,GAAG,OAAK,KAAG,CAAC,EAAE;AAAE,IAAI,MAAI;AAAR,IAAkC,MAAI;AAAtC,IAAsE,MAAI;AAA1E,IAA4H,MAAI;AAAhI,IAAkL,MAAI;AAAtL,IAAgN,MAAI;AAApN,IAA6Q,MAAI;AAAA;AAAA;AAAA;AAAA;AAAjR,IAI/2lB,MAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAJ22lB,IAU/2lB,MAAI;AAAA;AAAA;AAAA;AAAA;AAV22lB,IAc/2lB,MAAI;AAAA;AAAA;AAAA;AAAA;AAd22lB,IAkB/2lB,MAAI;AAAA;AAAA;AAAA;AAAA;AAlB22lB,IAsB/2lB,MAAI;AAAA;AAAA;AAAA;AAAA;AAtB22lB,IA0B/2lB,MAAI;AA1B22lB,IA0Bv0lB,MAAI;AAAA;AA1Bm0lB,IA2B70lB,MAAI;AA3By0lB,IA2BrylB,MAAI;AAAA;AA3BiylB,IA4B7zlB,MAAI;AA5ByzlB,IA4B3xlB,MAAI;AA5BuxlB,IA4BzvlB,MAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AA5BqvlB,IAiC/2lB,MAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAjC22lB,IAgD/2lB,MAAI;AAhD22lB,IAgDj1lB,MAAI;AAAA;AAAA;AAAA;AAhD60lB,IAmD/2lB,MAAI;AAAA;AAAA;AAAA;AAnD22lB,IAsD/2lB,MAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAtD22lB,IA6D/2lB,MAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA7D22lB,IAkF/2lB,MAAI;AAlF22lB,IAkF/zlB,MAAI;AAAA;AAAA;AAAA;AAlF2zlB,IAqF/2lB,MAAI;AArF22lB,IAqFr0lB,MAAI;AAA0B,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAIC;AAAE,KAAE;AAAC,YAAOD,KAAE;AAAA,MAAC,KAAK,GAAG;AAAM,QAAAC,MAAE;AAAI;AAAA,MAAM,KAAK,GAAG;AAAI,QAAAA,MAAE;AAAI;AAAA,MAAM,KAAK,GAAG;AAAI,QAAAA,MAAE;AAAI;AAAA,MAAM,KAAK,GAAG;AAAI,QAAAA,MAAE,IAAE,MAAI;AAAI;AAAA,MAAM,KAAK,GAAG;AAAU,QAAAA,MAAE,IAAE,MAAI;AAAI;AAAA,MAAM,KAAK,GAAG;AAAI,QAAAA,MAAE,IAAE,MAAI;AAAI;AAAA,MAAM;AAAQ;AAAA,IAAQ;AAAC,QAAI,GAAE,GAAE;AAAE,WAAO,KAAG,IAAE,aAAY,IAAE,aAAY,IAAE,iBAAe,IAAE,SAAQ,IAAE,OAAM,IAAE,SAAQ;AAAA,qBACjX,CAAC;AAAA,0CACoB,CAAC;AAAA,qBACtB,CAAC;AAAA,0CACoB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAMjCA,GAAC;AAAA;AAAA,0BAEe,CAAC;AAAA,cACb,CAAC;AAAA;AAAA;AAAA,EAEV,SAAO;AAAI,UAAOD,KAAE;AAAA,IAAC,KAAK,GAAG;AAAI,MAAAC,MAAE;AAAI;AAAA,IAAM,KAAK,GAAG;AAAsB,MAAAA,MAAE;AAAI;AAAA,IAAM,KAAK,GAAG;AAAsB,MAAAA,MAAE;AAAI;AAAA,IAAM,KAAK,GAAG;AAAI,MAAAA,MAAE;AAAI;AAAA,IAAM,KAAK,GAAG;AAAQ,MAAAA,MAAE;AAAI;AAAA,IAAM,KAAK,GAAG;AAAM,MAAAA,MAAE;AAAI;AAAA,IAAM,KAAK,GAAG;AAAU,MAAAA,MAAE;AAAI;AAAA,IAAM,KAAK,GAAG;AAAQ,MAAAA,MAAE;AAAI;AAAA,IAAM,KAAK,GAAG;AAAc,MAAAA,MAAE;AAAI;AAAA,IAAM,KAAK,GAAG;AAAK,MAAAA,MAAE;AAAI;AAAA,IAAM,KAAK,GAAG;AAAW,MAAAA,MAAE;AAAI;AAAA,IAAM,KAAK,GAAG;AAAY,aAAO,IAAE,MAAI;AAAA,IAAI,KAAK,GAAG;AAAW,aAAO,IAAE,MAAI;AAAA,IAAI,KAAK,GAAG;AAAI,MAAAA,MAAE;AAAI;AAAA,IAAM,KAAK,GAAG;AAAM,aAAO,IAAE,MAAI;AAAA,IAAI,KAAK,GAAG;AAAmB,MAAAA,MAAE;AAAI;AAAA,IAAM,KAAK,GAAG;AAAI,MAAAA,MAAE;AAAI;AAAA,IAAM;AAAA,EAAQ;AAAC,SAAM;AAAA,MAChjBA,GAAC;AAAA;AAAA;AAEJ;AAAC,IAAI;AAAA,CAAG,SAASD,KAAE;AAAC,EAAAA,IAAEA,IAAE,MAAI,CAAC,IAAE,OAAMA,IAAEA,IAAE,OAAK,CAAC,IAAE,QAAOA,IAAEA,IAAE,QAAM,CAAC,IAAE,SAAQA,IAAEA,IAAE,OAAK,CAAC,IAAE,QAAOA,IAAEA,IAAE,QAAM,CAAC,IAAE,SAAQA,IAAEA,IAAE,OAAK,CAAC,IAAE,QAAOA,IAAEA,IAAE,QAAM,CAAC,IAAE,SAAQA,IAAEA,IAAE,OAAK,CAAC,IAAE,QAAOA,IAAEA,IAAE,MAAI,CAAC,IAAE,OAAMA,IAAEA,IAAE,OAAK,CAAC,IAAE,QAAOA,IAAEA,IAAE,MAAI,EAAE,IAAE,OAAMA,IAAEA,IAAE,MAAI,EAAE,IAAE,OAAMA,IAAEA,IAAE,MAAI,EAAE,IAAE,OAAMA,IAAEA,IAAE,QAAM,EAAE,IAAE,SAAQA,IAAEA,IAAE,QAAM,EAAE,IAAE,SAAQA,IAAEA,IAAE,YAAU,EAAE,IAAE,aAAYA,IAAEA,IAAE,SAAO,EAAE,IAAE,UAASA,IAAEA,IAAE,SAAO,EAAE,IAAE,UAASA,IAAEA,IAAE,SAAO,EAAE,IAAE,UAASA,IAAEA,IAAE,MAAI,EAAE,IAAE,OAAMA,IAAEA,IAAE,QAAM,EAAE,IAAE,SAAQA,IAAEA,IAAE,cAAY,EAAE,IAAE,eAAcA,IAAEA,IAAE,MAAI,EAAE,IAAE,OAAMA,IAAEA,IAAE,OAAK,EAAE,IAAE,QAAOA,IAAEA,IAAE,QAAM,EAAE,IAAE,SAAQA,IAAEA,IAAE,YAAU,EAAE,IAAE,aAAYA,IAAEA,IAAE,aAAW,EAAE,IAAE,cAAaA,IAAEA,IAAE,QAAM,EAAE,IAAE,SAAQA,IAAEA,IAAE,QAAM,EAAE,IAAE,SAAQA,IAAEA,IAAE,OAAK,EAAE,IAAE,QAAOA,IAAEA,IAAE,UAAQ,EAAE,IAAE,WAAUA,IAAEA,IAAE,OAAK,EAAE,IAAE,QAAOA,IAAEA,IAAE,MAAI,EAAE,IAAE,OAAMA,IAAEA,IAAE,OAAK,EAAE,IAAE,QAAOA,IAAEA,IAAE,WAAS,EAAE,IAAE,YAAWA,IAAEA,IAAE,OAAK,EAAE,IAAE,QAAOA,IAAEA,IAAE,SAAO,EAAE,IAAE,UAASA,IAAEA,IAAE,OAAK,EAAE,IAAE,QAAOA,IAAEA,IAAE,MAAI,EAAE,IAAE,OAAMA,IAAEA,IAAE,OAAK,EAAE,IAAE,QAAOA,IAAEA,IAAE,SAAO,EAAE,IAAE;AAAQ,GAAG,MAAI,IAAE,CAAC,EAAE;AAAE,IAAI,MAAI;AAAR,IAAyB,MAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAA7B,IAK55B,MAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AALw5B,IAU55B,MAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAVw5B,IAe55B,MAAI;AAfw5B,IAer4B,MAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAfi4B,IAoB55B,MAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AApBw5B,IA+B55B,MAAI;AA/Bw5B,IA+Bt4B,MAAI;AA/Bk4B,IA+Bj3B,MAAI;AAAA;AAAA;AAAA;AA/B62B,IAkC55B,MAAI;AAlCw5B,IAkCj4B,MAAI;AAlC63B,IAkCv0B,MAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAlCm0B,IAiD55B,MAAI;AAAA;AAAA;AAAA;AAAA,YAIM,EAAE,KAAK;AAAA,aACN,EAAE,MAAM;AAAA,aACR,EAAE,MAAM;AAAA,aACR,EAAE,MAAM;AAAA,aACR,EAAE,MAAM;AAAA,aACR,EAAE,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA1Dy4B,IAgE55B,MAAI;AAhEw5B,IAgEv4B,MAAI;AAhEm4B,IAgEh3B,MAAI;AAhE42B,IAgEt0B,MAAI;AAhEk0B,IAgE1yB,MAAI;AAhEsyB,IAgE9wB,MAAI;AAhE0wB,IAgE9vB,MAAI;AAAA;AAhE0vB,IAiE54B,MAAI;AAAA;AAAA;AAAA;AAjEw4B,IAoE55B,MAAI;AApEw5B,IAoE73B,MAAI;AApEy3B,IAoE52B,MAAI;AApEw2B,IAoEhzB,MAAI;AAAA;AAAA;AAAA;AApE4yB,IAuE55B,MAAI;AAvEw5B,IAuEt4B,MAAI;AAvEk4B,IAuEh2B,MAAI;AAvE41B,IAuE/zB,MAAI;AAvE2zB,IAuE1uB,MAAI;AAAA;AAAA;AAvEsuB,IAyE55B,MAAI;AAzEw5B,IAyEr4B,MAAI;AAzEi4B,IAyEx2B,MAAI;AAAA;AAAA,aAE7C,EAAE,UAAU;AAAA;AAAA,aAEZ,EAAE,eAAe;AAAA;AAAA;AA7Eg4B,IA+E55B,MAAI;AA/Ew5B,IA+El3B,MAAI;AA/E82B,IA+E51B,MAAI;AA/Ew1B,IA+Ev0B,MAAI;AAAA;AAAA;AAAA;AA/Em0B,IAkF55B,MAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAlFw5B,IAiG55B,MAAI;AAjGw5B,IAiGt4B,MAAI;AAjGk4B,IAiGl3B,MAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAjG82B,IAuG55B,MAAI;AAvGw5B,IAuGv4B,MAAI;AAAA;AAAA;AAAA;AAvGm4B,IA0G55B,MAAI;AAAwB,SAAS,GAAGA,KAAE,GAAE;AAAC,UAAOA,KAAE;AAAA,IAAC,KAAK,EAAE;AAAI,aAAO;AAAA,IAAI,KAAK,EAAE;AAAK,aAAO;AAAA,IAAI,KAAK,EAAE;AAAM,aAAO;AAAA,IAAI,KAAK,EAAE;AAAK,aAAO;AAAA,IAAI,KAAK,EAAE;AAAM,aAAO;AAAA,IAAI,KAAK,EAAE;AAAK,aAAO;AAAA,IAAI,KAAK,EAAE;AAAM,aAAO;AAAA,IAAI,KAAK,EAAE;AAAI,aAAO;AAAA,IAAI,KAAK,EAAE;AAAK,aAAO;AAAA,IAAI,KAAK,EAAE;AAAK,aAAO;AAAA,IAAI,KAAK,EAAE;AAAI,aAAO,IAAE,MAAI;AAAA,IAAI,KAAK,EAAE;AAAI,aAAO;AAAA,IAAI,KAAK,EAAE;AAAI,aAAO;AAAA,IAAI,KAAK,EAAE;AAAM,aAAO;AAAA,IAAI,KAAK,EAAE;AAAM,aAAO;AAAA,IAAI,KAAK,EAAE;AAAU,aAAO;AAAA,IAAI,KAAK,EAAE;AAAO,aAAO;AAAA,IAAI,KAAK,EAAE;AAAO,aAAO;AAAA,IAAI,KAAK,EAAE;AAAO,aAAO;AAAA,IAAI,KAAK,EAAE;AAAI,aAAO;AAAA,IAAI,KAAK,EAAE;AAAM,aAAO;AAAA,IAAI,KAAK,EAAE;AAAY,aAAO;AAAA,IAAI,KAAK,EAAE;AAAI,aAAO;AAAA,IAAI,KAAK,EAAE;AAAU,aAAO,IAAE,MAAI;AAAA,IAAI,KAAK,EAAE;AAAW,aAAO;AAAA,IAAI,KAAK,EAAE;AAAK,aAAO,IAAE,MAAI;AAAA,IAAI,KAAK,EAAE;AAAM,aAAO,IAAE,MAAI;AAAA,IAAI,KAAK,EAAE;AAAM,aAAO;AAAA,IAAI,KAAK,EAAE;AAAM,aAAO;AAAA,IAAI,KAAK,EAAE;AAAK,aAAO;AAAA,IAAI,KAAK,EAAE;AAAQ,aAAO;AAAA,IAAI,KAAK,EAAE;AAAK,aAAO;AAAA,IAAI,KAAK,EAAE;AAAI,aAAO;AAAA,IAAI,KAAK,EAAE;AAAK,aAAO;AAAA,IAAI,KAAK,EAAE;AAAS,aAAO;AAAA,IAAI,KAAK,EAAE;AAAK,aAAO;AAAA,IAAI,KAAK,EAAE;AAAO,aAAO;AAAA,IAAI,KAAK,EAAE;AAAK,aAAO;AAAA,IAAI,KAAK,EAAE;AAAI,aAAO;AAAA,IAAI,KAAK,EAAE;AAAK,aAAO;AAAA,IAAI,KAAK,EAAE;AAAO,aAAO;AAAA,IAAI;AAAQ,YAAM,IAAI,MAAM,cAAcA,GAAC,sBAAsB;AAAA,EAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,IAAE,OAAGC,MAAE,OAAG,IAAE,GAAE;AAAC,MAAGD,QAAI,KAAK,QAAM;AAAG,MAAI,IAAE;AAAG,MAAGA,QAAI,SAAS,KAAE,GAAG,EAAE,MAAM;AAAA,WAAUA,QAAI,OAAO,KAAE,GAAG,EAAE,MAAKC,GAAC;AAAA,WAAUD,QAAI,MAAM,KAAE,GAAG,EAAE,KAAIC,GAAC;AAAA,WAAUD,QAAI,QAAQ,KAAE,GAAG,EAAE,OAAMC,GAAC;AAAA,WAAUD,QAAI,QAAQ,KAAE,GAAG,GAAG,OAAMC,GAAC;AAAA,WAAUD,QAAI,UAAU,KAAE,GAAG,EAAE,SAAQC,GAAC;AAAA,WAAUD,QAAI,YAAY,KAAE,GAAG,EAAE,WAAUC,GAAC;AAAA,MAAO,OAAM,IAAI,MAAM,cAAcD,GAAC,mDAAmD;AAAE,MAAI,IAAE,GAAGC,MAAE,IAAE,CAAC,GAAE,IAAE;AAAG,SAAO,IAAE,IAAE;AAAA,0BAChgD,CAAC,iBAAiB,CAAC,aAAa,CAAC;AAAA;AAAA,UAEjD,CAAC;AAAA,WACF,IAAE;AAAA,0BACe,CAAC,iBAAiB,CAAC,aAAa,CAAC;AAAA,UACjD,CAAC;AAAA,UACF;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,SAAM;AAAA,QAC1BA,MAAE,mDAAiD,EAAE;AAAA,QACrD,IAAE,uCAAqC,EAAE;AAAA;AAC1C;AAAC,SAAS,GAAGA,KAAE,GAAEC,MAAE,OAAG,IAAE,OAAG,IAAE,OAAG,IAAE,GAAE;AAAC,IAAE,OAAOD,OAAG,MAAI,KAAG,CAACA,KAAE,MAAI,cAAcA,GAAC,0CAA0C,CAAC,EAAE;AAAE,MAAI,IAAE;AAAA,QAClIA,MAAE,mCAAiC,gCAAgC;AAAA;AAAA,OAErE,IAAE,IAAE,mCAAiC;AAAiC,SAAM;AAAA,mDAC/B,GAAG,CAAC,CAAC;AAAA,kBACtC,GAAG,CAAC,CAAC;AAAA,MACjBC,OAAG,IAAE,IAAE;AAAA,MACPD,MAAE,4DAA0D,0DAA0D;AAAA;AAAA,QAEpH,CAAC;AAAA;AAAA,KAEJ;AAAA;AAAA;AAAA;AAAA,mDAI8C,GAAG,CAAC,CAAC;AAAA,kBACtC,GAAG,CAAC,CAAC;AAAA,MACjB,CAAC;AAAA;AAAA;AAAA;AAGJ;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE,IAAE,OAAG,IAAE,OAAG,IAAE,OAAG,IAAE,GAAE;AAAC,SAAM;AAAA,IAC9C,GAAGA,KAAE,GAAE,GAAE,GAAE,GAAE,CAAC,CAAC;AAAA,yDACsC,GAAG,CAAC,CAAC;AAAA,MACxD,KAAG,IAAE,KAAG,2DAA2D;AAAA;AAAA;AAAA;AAAA,QAIjE,GAAGD,KAAE,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAIZ;AAAC,IAAI,MAAI,CAACA,KAAE,MAAIA,MAAE;AAAA;AAAA;AAAA,wCAGmB,CAAC;AAAA,YAC/B;AAAA;AAAA;AAAA,gCAGsB,CAAC;AAAA;AAP7B,IAQM,MAAI,CAACA,KAAE,GAAEC,KAAE,MAAI;AAAC,MAAGD,IAAE,QAAM;AAAA,4BACT,CAAC;AAAA;AAAA;AAAA,8BAGCC,GAAC;AAAA;AAAA;AAAA;AAGtB;AAAC,QAAI,IAAE,IAAG,IAAE;AAAG,aAAQ,IAAE,GAAE,IAAE,GAAE,IAAI,MAAG,cAAc,CAAC,kBAAkB,CAAC,MAAM,CAAC,eAAc,KAAG,uBAAuB,CAAC,uBAAuB,CAAC;AAAe,WAAM;AAAA,4BAClJ,IAAE,CAAC;AAAA,UACrB,CAAC;AAAA,8BACmBA,GAAC;AAAA;AAAA,YAEnB,CAAC;AAAA;AAAA;AAAA,EAEL;AAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,MAAE,OAAG,IAAE,IAAG,IAAE,OAAG,IAAE,IAAG,IAAE,OAAG;AAAC,MAAI,IAAE,EAAE,CAAC,IAAED,IAAE,CAAC,GAAE,IAAE,EAAE,CAAC,IAAEA,IAAE,CAAC,GAAE,IAAEC,MAAE,IAAE,GAAE,IAAEA,MAAE,IAAE,GAAE,IAAE,IAAE,EAAE,CAAC,GAAE,IAAE,IAAE,EAAE,CAAC,GAAE,IAAED,IAAE,CAAC,GAAE,IAAEA,IAAE,CAAC;AAAE,SAAO,EAAE,QAAQC,OAAG,MAAI,KAAGD,IAAE,CAAC,MAAI,KAAG,CAACC,QAAI,MAAI,KAAG,MAAI,OAAK,IAAE,EAAE,CAAC,MAAI,KAAG,IAAE,EAAE,CAAC,MAAI,KAAGD,IAAE,CAAC,MAAI,GAAE,MAAI,iBAAiBC,GAAC,8BAA8B,CAAC,yBAAyBD,IAAE,CAAC,CAAC;AAAA,wCACtQ,CAAC;AAAA,mBACtB,CAAC,yCAAyC,EAAE,CAAC,CAAC,eAAe,CAAC,0CAA0C,EAAE,CAAC,CAAC,kBAAkBA,IAAE,CAAC,CAAC,aAAa,GAAE;AAAA,4CACxH,CAAC,UAAU,IAAE,CAAC,MAAM,CAAC;AAAA,oDACb,IAAEA,IAAE,CAAC,CAAC,MAAM,CAAC;AAAA;AAAA,IAE7D,EAAE,CAAC;AAAA;AAAA,+BAEwB,CAAC;AAAA;AAAA;AAAA,wCAGQ,CAAC;AAAA,wCACD,CAAC;AAAA,kBACvB,IAAE,MAAI,iBAAiB;AAAA,mBACtB,KAAG,CAAC,IAAE,UAAQ,4BAA4B;AAAA,mBAC1C,KAAG,CAAC,IAAE,UAAQ,4BAA4B;AAAA,gDACb,CAAC;AAAA;AAAA,qBAE5B,IAAE,GAAG,KAAK,KAAK,IAAE,CAAC,CAAC,KAAG,6BAA6B,CAAC,MAAM;AAAA,mBAC5D,IAAE,qBAAqB,CAAC,KAAG,GAAG;AAAA;AAAA,gCAEjB,CAAC;AAAA;AAAA;AAAA,gCAGD,CAAC;AAAA;AAAA;AAAA,4CAGW,CAAC;AAAA;AAAA;AAAA,cAG/B,IAAIC,KAAE,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA,4CAIsB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,4BAKjB,CAAC;AAAA;AAAA;AAAA;AAAA,UAInB,IAAIA,KAAE,GAAE,GAAE,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA,wCAIkB,CAAC;AAAA;AAAA;AAAA;AAGrC;AAAC,IAAI,KAAG,CAAAD,QAAGA,MAAE;AAAA;AAAA;AAAA;AAAA,YAIP;AAAA;AAAA;AAAA;AAAA;AAJL,IAQK,MAAI,CAAAA,QAAGA,MAAE,kDAAgD;AAAgD,SAAS,GAAGA,KAAE,GAAEC,MAAE,OAAG,IAAE,IAAG,IAAE,OAAG,IAAE,IAAG,IAAE,OAAG,IAAE,OAAG;AAAC,MAAI,IAAED,IAAE,CAAC,IAAE,EAAE,CAAC,GAAE,IAAEA,IAAE,CAAC,IAAE,EAAE,CAAC,GAAE,IAAEC,MAAE,IAAE,GAAE,IAAEA,MAAE,IAAE;AAAE,IAAE,OAAO,IAAE,EAAE,CAAC,MAAI,KAAG,IAAE,EAAE,CAAC,MAAI,KAAG,IAAE,EAAE,CAAC,MAAI,GAAE,MAAI,cAAc,CAAC,yCAAyC,EAAE,CAAC,CAAC,gBAAgB,CAAC,yCAAyC,EAAE,CAAC,CAAC,eAAe,CAAC,yCAAyC,EAAE,CAAC,CAAC,EAAE;AAAE,MAAI,IAAE,IAAE,EAAE,CAAC,GAAE,IAAE,IAAE,EAAE,CAAC,GAAE,IAAE,IAAE,EAAE,CAAC,GAAE,IAAED,IAAE,CAAC,GAAE,IAAEA,IAAE,CAAC,GAAE,IAAE,IAAE;AAAA;AAAA;AAAA,kDAGxb,CAAC;AAAA,kDACD,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,mDAKA,CAAC,2BAA2B,EAAE,CAAC,CAAC;AAAA,qDAC9B,CAAC,2BAA2B,EAAE,CAAC,CAAC;AAAA,cACvE,GAAGC,GAAC,CAAC;AAAA;AAAA;AAAA;AAAA,mDAIgC,CAAC,2BAA2B,EAAE,CAAC,CAAC;AAAA,yDAC1B,CAAC,2BAA2B,EAAE,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4BAM7D,CAAC;AAAA;AAAA;AAAA;AAAA,mCAIM,CAAC;AAAA,8BACN,CAAC;AAAA,wCACS,CAAC;AAAA,6DACoB,EAAE,CAAC,CAAC;AAAA;AAAA,8CAEnB,CAAC;AAAA,4BACnBA,MAAE,oCAAoC,EAAE,CAAC,CAAC,OAAK,iCAAiC,EAAE,CAAC,CAAC,OAAO;AAAA,gDACvE,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0CAQP,CAAC;AAAA,4DACiB,EAAE,CAAC,CAAC;AAAA,4CACpB,CAAC;AAAA,8DACiB,EAAE,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA,UAI1D;AAAA,mCAC2B,CAAC;AAAA,mCACD,CAAC;AAAA;AAAA,sCAEE,CAAC;AAAA,sCACD,CAAC;AAAA,8CACO,CAAC;AAAA;AAAA,oCAEX,CAAC;AAAA,oCACD,CAAC;AAAA,oCACD,CAAC;AAAA;AAAA;AAAA;AAAA,wCAIG,CAAC;AAAA,0CACC,CAAC;AAAA;AAAA;AAAA,UAGjC,GAAGA,GAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,wCAKyB,CAAC;AAAA,0CACC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAQnB,CAAC;AAAA;AAAA;AAAA;AAAA,+BAIM,CAAC;AAAA,0BACN,CAAC;AAAA,oCACS,CAAC;AAAA;AAAA;AAAA;AAAA,0CAIK,CAAC;AAAA,UACjC,IAAIA,GAAC,CAAC;AAAA,4CAC4B,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sCAUP,CAAC;AAAA,wCACC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAKrC,SAAM;AAAA,gDACsC,CAAC,MAAM,CAAC;AAAA,gDACR,CAAC,MAAM,CAAC;AAAA;AAAA,MAElD,EAAE,CAAC;AAAA,oBACW,IAAE,MAAI,iBAAiB;AAAA,qBACtB,KAAG,CAAC,IAAE,UAAQ,4BAA4B;AAAA,qBAC1C,KAAG,CAAC,IAAE,UAAQ,4BAA4B;AAAA,uBACxC,IAAE,GAAG,KAAK,KAAK,IAAE,CAAC,CAAC,KAAG,6BAA6B,CAAC,MAAM;AAAA,qBAC5D,IAAE,qBAAqB,CAAC,KAAG,GAAG;AAAA;AAAA,mCAEhB,CAAC,MAAM,CAAC;AAAA;AAAA;AAAA,0CAGD,CAAC;AAAA,4CACC,CAAC;AAAA;AAAA;AAAA;AAAA,QAIrC,CAAC;AAAA;AAAA;AAEN;AAAC,IAAI,MAAI,CAAAD,QAAGA,MAAE;AAAA;AAAA;AAAA;AAAA;AAAA,MAKb;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA,SAAS,IAAIA,KAAE,IAAE,OAAG;AAAC,IAAE,OAAOA,IAAE,CAAC,MAAI,KAAGA,IAAE,CAAC,MAAI,GAAE,MAAI,iDAAiDA,GAAC,GAAG;AAAE,MAAIC,MAAED,IAAE,CAAC,IAAE;AAAE,SAAM;AAAA,gDACnFA,IAAE,CAAC,CAAC;AAAA;AAAA,MAE9C,EAAE,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,iDAKwCC,GAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yBAUzBA,GAAC;AAAA,uCACa,IAAI,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA,8BAIfA,MAAE,CAAC;AAAA,2BACNA,GAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAezB;AAAC,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,IAAE,OAAG,IAAE,OAAG,IAAE,MAAK,IAAE,MAAK,IAAE,MAAK,IAAE,OAAG;AAAC,SAAK,gBAAc,CAAC,KAAI,GAAG,GAAE,KAAK,WAAS,qDAAoD,KAAK,cAAYA,KAAE,KAAK,iBAAe,EAAC,GAAE,CAAC,CAAC,GAAE,GAAE,CAAC,CAAC,GAAE,GAAE,CAAC,CAAC,EAAC;AAAE,QAAI,IAAE,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC;AAAE,QAAG,KAAK,UAAQ,IAAE,MAAI,KAAG,CAAC,KAAGA,IAAE,CAAC,IAAE,MAAI,KAAG,MAAIA,IAAE,CAAC,IAAE,MAAI,KAAG,CAAC,GAAE,KAAK,kBAAgB,KAAK,SAAO,IAAE,GAAE,KAAK,YAAUA,IAAE,CAAC,MAAI,KAAG,CAAC,GAAE,CAAC,KAAK,UAAQ,KAAK,UAAU,MAAK,oBAAkB,CAAC,GAAE,GAAE,CAAC,GAAE,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC;AAAA,SAAM;AAAC,UAAI,IAAE,GAAGA,IAAE,CAAC,GAAE,GAAEA,IAAE,CAAC,GAAE,CAAC;AAAE,WAAK,gBAAc,EAAE,eAAc,KAAK,oBAAkB,EAAE;AAAA,IAAiB;AAAC,SAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,eAAc,KAAK,iBAAiB;AAAE,QAAI,IAAE,KAAG,MAAK,IAAE,KAAG;AAAK,SAAG,KAAK,cAAc,KAAK,MAAM,GAAE,KAAG,KAAK,cAAc,KAAK,wBAAwB,GAAE,KAAK,4BAA0B,GAAE,KAAK,aAAW,GAAE,KAAK,aAAW,GAAE,KAAK,UAAQ,GAAE,KAAK,aAAW,GAAE,KAAK,4BAA0B,GAAE,CAAC,KAAK,WAAU,KAAK,WAAU,KAAK,QAAQ,IAAE,KAAK,YAAYA,IAAE,CAAC,GAAEA,IAAE,CAAC,GAAE,CAAC,GAAE,KAAK,YAAU,gBAAgB,KAAK,iBAAiB,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU,IAAI,KAAK,SAAS,IAAI,KAAK,SAAS,IAAI,KAAK,QAAQ,IAAI,KAAK,MAAM,IAAI,KAAK,SAAS,IAAI,KAAK,yBAAyB;AAAA,EAAE;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE;AAAC,QAAI,IAAE,KAAK,cAAc,CAAC,IAAE,KAAK,kBAAkB,CAAC,GAAE,IAAE,KAAK,cAAc,CAAC,IAAE,KAAK,kBAAkB,CAAC;AAAE,KAAC,KAAK,UAAQ,KAAK,YAAU,KAAK,YAAU,KAAK,cAAc,CAAC,IAAE,IAAE,KAAK,YAAU;AAAE,QAAI,IAAE,IAAE,MAAI,GAAE,IAAEA,MAAE,MAAI,GAAE,IAAE,IAAE,KAAK,cAAY;AAAE,WAAM,CAAC,GAAE,GAAE,CAAC;AAAA,EAAC;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,QAC37C,GAAG,KAAK,YAAW,KAAK,2BAA0B,KAAK,MAAM,CAAC;AAAA,QAC9D,GAAG,KAAK,SAAQ,KAAK,YAAW,OAAG,KAAK,YAAW,KAAK,WAAU,KAAK,WAAU,KAAK,UAAS,KAAK,SAAO,IAAE,CAAC,CAAC;AAAA,QAC/G,KAAK,SAAO,GAAG,KAAK,mBAAkB,KAAK,eAAc,KAAK,YAAW,KAAK,WAAU,OAAG,MAAK,IAAE,IAAE,KAAK,YAAU,IAAI,KAAK,eAAc,KAAK,UAAU,IAAE,GAAG,KAAK,mBAAkB,KAAK,eAAc,KAAK,YAAW,KAAK,WAAU,OAAG,MAAK,KAAK,2BAA0B,IAAE,CAAC;AAAA;AAAA,EACpR;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,SAAM;AAAA,4CACcA,GAAC;AAAA,MACvC,EAAE,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yDASgDA,GAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8BAQ5BA,MAAE,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAc9B;AAAC,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEC,MAAE,OAAG,IAAE,OAAG,IAAE,MAAK,IAAE,MAAK,IAAE,MAAK;AAAC,SAAK,gBAAc,CAAC,KAAI,GAAG,GAAE,KAAK,WAAS,qDAAoD,KAAK,gBAAc,CAAC,KAAI,GAAE,CAAC,GAAE,KAAK,cAAY,GAAE,KAAK,iBAAe,EAAC,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,CAAC,EAAC,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa;AAAE,QAAI,IAAE,KAAG,MAAK,IAAE,KAAG;AAAK,SAAG,KAAK,cAAc,KAAK,MAAM,GAAE,KAAG,KAAK,cAAc,KAAK,wBAAwB,GAAE,KAAK,aAAWA,KAAE,KAAK,aAAW,GAAE,KAAK,UAAQ,GAAE,KAAK,aAAW,GAAE,KAAK,4BAA0B,GAAE,KAAK,YAAU,gBAAgB,KAAK,UAAU,IAAIA,GAAC,IAAI,CAAC;AAAA,EAAE;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,QAC7lB,GAAG,KAAK,YAAW,KAAK,yBAAyB,CAAC;AAAA,QAClD,GAAG,KAAK,SAAQ,KAAK,YAAW,KAAK,YAAW,KAAK,UAAU,CAAC;AAAA,QAChE,IAAI,KAAK,cAAc,CAAC,CAAC,CAAC;AAAA;AAAA,EAC7B;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAI,IAAEA,IAAE,CAAC,GAAEC,MAAED,IAAE,CAAC,GAAE,IAAE,IAAEC,MAAE,IAAEA;AAAE,SAAM;AAAA,8CACZ,CAAC,MAAM,CAAC;AAAA,8CACRA,GAAC,MAAM,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQlD,EAAE,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,+CAUwC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gCAQhB,CAAC;AAAA,gCACD,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kCAYC,CAAC;AAAA,kCACD,CAAC;AAAA;AAAA,4BAEP,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQ1B;AAAC,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE,IAAE,OAAG,IAAE,OAAG,IAAE,MAAK,IAAE,MAAK,IAAE,MAAK;AAAC,SAAK,gBAAc,CAAC,KAAI,GAAG,GAAE,KAAK,WAAS,qDAAoD,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,cAAY,GAAE,KAAK,iBAAe,EAAC,GAAE,CAAC,CAAC,GAAE,GAAE,CAAC,CAAC,GAAE,GAAE,CAAC,CAAC,EAAC,GAAE,KAAK,WAAS,CAAC,KAAK,KAAK,EAAE,CAAC,IAAE,KAAK,cAAc,CAAC,CAAC,GAAE,KAAK,KAAK,EAAE,CAAC,IAAE,KAAK,cAAc,CAAC,CAAC,GAAE,EAAE,CAAC,CAAC;AAAE,QAAI,IAAE,KAAG;AAAK,SAAG,KAAK,cAAc,KAAK,MAAM;AAAE,QAAI,IAAE,KAAG;AAAK,SAAG,KAAK,cAAc,KAAK,wBAAwB,GAAE,KAAK,aAAW,GAAE,KAAK,aAAW,GAAE,KAAK,UAAQ,GAAE,KAAK,aAAW,GAAE,KAAK,4BAA0B,GAAE,KAAK,YAAU,yBAAyB,KAAK,UAAU,IAAI,CAAC,IAAI,CAAC;AAAA,EAAE;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,QACpoB,GAAG,KAAK,YAAW,KAAK,yBAAyB,CAAC;AAAA,QAClD,GAAG,KAAK,SAAQ,KAAK,YAAW,KAAK,YAAW,KAAK,UAAU,CAAC;AAAA,QAChE,IAAI,KAAK,aAAa,CAAC;AAAA;AAAA,EAC1B;AAAC;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,IAAE,OAAG,IAAE,OAAG;AAAC,SAAK,gBAAc,CAAC,KAAI,GAAG,GAAE,KAAK,WAAS,qDAAoD,KAAK,gBAAc,CAAC,GAAE,GAAE,CAAC,GAAE,KAAK,SAAO,MAAG,KAAK,kBAAgB,KAAI,EAAE,OAAO,EAAE,CAAC,MAAI,GAAE,MAAI,8CAA8C,GAAE,KAAK,cAAY,GAAE,KAAK,iBAAe,EAAC,GAAE,CAAC,CAAC,GAAE,GAAE,CAAC,CAAC,GAAE,GAAE,CAAC,GAAE,CAAC,EAAC;AAAE,QAAI,KAAG,KAAG,KAAK,YAAY,CAAC,IAAE,MAAI,KAAG,CAAC,KAAGA,MAAE,MAAI,MAAI,KAAK,YAAY,CAAC,IAAE,MAAI;AAAE,SAAK,oBAAkB,CAAC,GAAE,GAAE,KAAK,eAAe,GAAE,KAAK,kBAAgB,IAAE,IAAE,GAAE,MAAI,KAAK,YAAY,CAAC,IAAE,OAAK,KAAK,kBAAkB,CAAC,IAAE,IAAG,KAAK,YAAY,CAAC,IAAE,OAAK,KAAK,kBAAkB,CAAC,IAAE,KAAI,KAAK,WAAS,EAAE,KAAK,gBAAe,CAAC,KAAK,YAAY,CAAC,GAAE,KAAK,YAAY,CAAC,GAAE,KAAK,YAAY,CAAC,GAAEA,GAAC,GAAE,KAAK,eAAc,KAAK,iBAAiB,GAAE,KAAK,aAAW,GAAE,KAAK,aAAW,GAAE,KAAK,YAAU,gBAAgB,CAAC,IAAI,CAAC,IAAI,KAAK,iBAAiB,IAAI,KAAK,eAAe;AAAA,EAAE;AAAA,EAAC,cAAa;AAAC,QAAI,IAAE,KAAK;AAAgB,WAAM;AAAA,QACp5B,GAAG,OAAG,KAAK,YAAW,OAAG,OAAG,OAAG,CAAC,CAAC;AAAA,8DACqB,GAAG,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gCAMnC,CAAC;AAAA,cACnB,GAAG,0BAAyB,GAAG,IAAE,IAAE,aAAW,OAAO,IAAG,SAAS,CAAC;AAAA;AAAA;AAAA;AAAA,QAIxE,MAAI,IAAE,GAAG,KAAK,mBAAkB,KAAK,eAAc,KAAK,YAAW,IAAG,MAAG,KAAK,eAAe,IAAE,GAAG,KAAK,mBAAkB,KAAK,eAAc,KAAK,YAAW,IAAG,MAAG,KAAK,eAAe,CAAC;AAAA;AAAA,EAC1L;AAAC;AAdE,IAcA,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,MAAE,MAAK,IAAE,MAAK,IAAE,MAAK;AAAC,SAAK,WAAS,IAAG,KAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,UAAQA,OAAG,MAAK,KAAK,4BAA0B,KAAG,MAAK,KAAK,aAAW,GAAE,KAAK,WAAS,KAAK,cAAc,KAAK,MAAM,GAAE,KAAK,6BAA2B,KAAK,cAAc,KAAK,wBAAwB,GAAE,KAAK,YAAU,kBAAkB,CAAC;AAAA,EAAE;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,MAC7gB,GAAG,KAAK,YAAW,KAAK,yBAAyB,CAAC;AAAA,MAClD,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA,UAIN,GAAG,KAAK,SAAQ,KAAK,UAAU,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,EAIrC;AAAC;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAE,KAAK,cAAY,CAAC,GAAE,KAAK,WAAS,gBAAe,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,YAAU;AAAA,EAAM;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,MAC5T,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAKb;AAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,SAAQ,GAAE,OAAMC,IAAC,IAAED,KAAE,EAAC,OAAM,GAAE,OAAM,EAAC,IAAEC,KAAE,EAAC,OAAM,EAAC,IAAEA;AAAE,MAAG,IAAE,KAAG,EAAE,WAAW,CAAC,GAAE,MAAI,UAAS;AAAC,QAAI,IAAE,EAAE,kBAAkB,GAAE,EAAE,cAAc,CAAC,CAAC;AAAE,WAAO,EAAE,KAAK,CAAC,GAAE,EAAE,eAAe,GAAE,GAAE,CAAC;AAAA,EAAC,OAAK;AAAC,QAAI,IAAE,IAAI,GAAG,CAAC,GAAE,IAAE,CAAC,EAAC,MAAK,WAAU,MAAK,CAAC,CAAC,EAAC,CAAC;AAAE,WAAO,EAAE,iBAAiB,GAAE,CAAC,GAAE,GAAE,CAAC;AAAA,EAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,OAAMC,IAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,OAAM,EAAC,IAAEC,KAAE,IAAE,EAAE,cAAc,EAAE,KAAK,GAAE,IAAE,EAAE,uBAAuB,GAAE,CAAC,GAAE,IAAE,EAAE,cAAc,CAAC;AAAE,SAAO,EAAE,OAAO,MAAI,GAAE,MAAI,kBAAkB,CAAC,SAAS,CAAC,gCAAgC,EAAE,KAAK,SAAS,CAAC,+EAA+E,GAAED,IAAE,QAAQ,OAAO,EAAE,MAAM,GAAE,EAAC,QAAO,EAAE,QAAO,OAAM,GAAE,OAAM,EAAE,MAAK;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,GAAE;AAAE,SAAS,GAAG,EAAC,GAAEA,KAAE,GAAE,GAAE,YAAWC,KAAE,YAAW,GAAE,SAAQ,GAAE,MAAK,IAAE,MAAK,wBAAuB,IAAE,MAAK,gBAAe,IAAE,GAAE,YAAW,IAAE,KAAI,GAAE;AAAC,MAAI,IAAED,IAAE,MAAM,QAAO,IAAE,EAAE,MAAM,QAAO,IAAEC,MAAED,IAAE,MAAM,IAAE,CAAC,IAAEA,IAAE,MAAM,IAAE,CAAC,GAAE,IAAE,IAAE,EAAE,MAAM,IAAE,CAAC,IAAE,EAAE,MAAM,IAAE,CAAC,GAAE,IAAEC,MAAED,IAAE,MAAM,IAAE,CAAC,IAAEA,IAAE,MAAM,IAAE,CAAC,GAAE,IAAE,IAAE,EAAE,MAAM,IAAE,CAAC,IAAE,EAAE,MAAM,IAAE,CAAC,GAAE,IAAEA,IAAE,MAAM,MAAM,GAAE,EAAE,GAAE,IAAE,EAAE,MAAM,MAAM,GAAE,EAAE,GAAE,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,GAAG,2BAA2BA,IAAE,MAAM,MAAM,GAAE,EAAE,GAAE,EAAE,MAAM,MAAM,GAAE,EAAE,CAAC,EAAE,OAAO,CAAC,GAAE,CAAC,CAAC;AAAE,IAAE,OAAO,MAAI,GAAE,MAAI,kCAAkC,CAAC,UAAU,CAAC,4BAA4BA,IAAE,KAAK,QAAQ,EAAE,KAAK,mBAAmBC,GAAC,mBAAmB,CAAC,cAAc;AAAE,MAAI,IAAEA,MAAE,CAAC,GAAE,GAAE,CAAC,IAAE,CAAC,GAAE,GAAE,CAAC,GAAE,IAAE,IAAE,CAAC,GAAE,GAAE,CAAC,IAAE,CAAC,GAAE,GAAE,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAED,IAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,IAAE,CAAC,GAAE,CAAC,GAAE,IAAE,KAAK,IAAI,GAAE,CAAC,GAAE,IAAE,CAAC,GAAE,CAAC,GAAE,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,CAAC,CAAC,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,CAAC,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,CAAC,EAAC,CAAC,GAAE,GAAE,GAAE,IAAE,CAAC,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,EAAE,IAAI,4BAA4B;AAAE,MAAG,IAAE,GAAE;AAAC,QAAI,IAAE,EAAE,EAAE,UAAU,oDAAoD,GAAE,IAAE,IAAE,IAAE,IAAE,EAAE,+BAA8B,IAAE,IAAE,KAAK,KAAK,IAAE,EAAE,IAAE,KAAK,KAAK,IAAE,EAAE;AAAE,SAAG,KAAG,KAAG,KAAG,KAAG,IAAE,IAAE,IAAE,IAAE,KAAG,MAAI,IAAE,GAAG,sBAAoB,MAAI,KAAG,KAAG,MAAI,IAAE,GAAG,sBAAoB,IAAE,GAAG,+BAA6B,IAAE,GAAG;AAAA,EAAmB;AAAC,UAAO,GAAE;AAAA,IAAC,KAAK,GAAG;AAAoB,UAAE,IAAI,GAAG,GAAEC,KAAE,GAAE,GAAE,GAAE,CAAC;AAAE;AAAA,IAAM,KAAK,GAAG,qBAAoB;AAAC,UAAG,IAAE,GAAG,EAAC,SAAQ,GAAE,OAAM,EAAC,OAAM,GAAE,OAAM,GAAE,OAAMD,IAAE,MAAK,EAAC,CAAC,GAAE,IAAE,IAAI,GAAG,GAAE,GAAEC,KAAE,CAAC,GAAE,KAAG,GAAE;AAAC,YAAE,EAAE,iBAAiB,GAAE,GAAED,IAAE,OAAM,GAAE,CAAC;AAAE,YAAI,IAAE,IAAI,GAAG,EAAE,OAAM,GAAE,GAAE,CAAC,GAAE,IAAE,MAAK,KAAG,CAAC,CAAC;AAAE,aAAG,GAAG,KAAK,CAAC,GAAE,KAAG,GAAG,KAAK,CAAC,GAAE,MAAI,gBAAc,IAAE,CAAC,EAAC,MAAK,WAAU,MAAK,CAAC,CAAC,EAAC,CAAC,GAAE,EAAE,YAAU;AAAiB,YAAI,KAAG,EAAE,iBAAiB,GAAE,IAAG,EAAE,OAAM,CAAC;AAAE,UAAE,KAAK,CAAC;AAAE,YAAI,KAAG,GAAG,EAAC,QAAO,EAAC,GAAE,GAAE,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,UAAE,KAAK,EAAE;AAAE,iBAAQ,MAAM,EAAE,GAAE,YAAY,GAAG,MAAM;AAAE,eAAO;AAAA,MAAE;AAAC;AAAA,IAAK;AAAA,IAAC,KAAK,GAAG;AAA6B,UAAE,IAAI,GAAG,GAAE,GAAE,GAAEC,KAAE,GAAE,GAAE,GAAE,CAAC;AAAE;AAAA,IAAM,KAAK,GAAG;AAAoB,UAAI,IAAE,EAAE,YAAY,QAAQ;AAAE,UAAE,IAAI,GAAG,GAAE,GAAEA,KAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE;AAAA,IAAM;AAAQ,YAAM,IAAI,MAAM,iCAAiC,CAAC,GAAG;AAAA,EAAC;AAAC,OAAG,EAAE,KAAK,CAAC,GAAE,KAAG,EAAE,KAAK,CAAC,GAAE,MAAI,gBAAc,EAAE,KAAK,EAAC,MAAK,WAAU,MAAK,CAAC,CAAC,EAAC,CAAC,GAAE,EAAE,YAAU,kBAAiB,IAAE,EAAE,iBAAiB,GAAE,GAAED,IAAE,OAAM,GAAE,CAAC;AAAE,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,IAAE,KAAK,CAAC;AAAE,WAAQ,KAAK,EAAE,GAAE,YAAY,EAAE,MAAM;AAAE,SAAO;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,GAAE,GAAE,MAAK,GAAE,wBAAuB,EAAC,IAAE,GAAE,EAAC,YAAW,GAAE,YAAW,GAAE,YAAW,GAAE,gBAAe,EAAC,IAAE;AAAE,SAAO,GAAG,EAAC,GAAE,GAAE,GAAE,GAAE,YAAW,GAAE,YAAW,GAAE,SAAQC,KAAE,MAAK,GAAE,wBAAuB,GAAE,gBAAe,GAAE,YAAW,EAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,SAAQ,SAAQ,SAAQ,OAAO,GAAE,KAAK,gBAAc,CAAC,KAAI,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,EAAE,2BAA2BA,KAAE,CAAC,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,YAAU,mBAAmB,CAAC,IAAG,KAAK,KAAG;AAAA,EAAC;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA;AAAA;AAAA,UAGhqH,GAAG,KAAK,IAAG,KAAE,CAAC;AAAA;AAAA;AAAA,QAGhB,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASb;AAAC;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE;AAAC,QAAG,KAAK,OAAK,MAAG,KAAK,gBAAc,CAAC,KAAI,GAAG,GAAE,KAAK,cAAY,EAAE,2BAA2BA,KAAE,CAAC,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,KAAG,GAAE,KAAK,uBAAqBA,IAAE,UAAQ,KAAG,EAAE,SAAO,KAAGA,IAAE,CAAC,IAAE,KAAI,KAAK,uBAAqB,EAAE,UAAQ,KAAGA,IAAE,SAAO,KAAG,EAAE,CAAC,IAAE,KAAI,KAAK,wBAAsB,KAAK,qBAAqB,MAAK,kBAAgB,GAAE,KAAK,qBAAmB,CAAC,GAAE,CAAC,GAAE,KAAK,oBAAkB,KAAK,uBAAqB,EAAE,CAAC,IAAEA,IAAE,CAAC,GAAE,KAAK,YAAU,UAAU,CAAC,IAAI,KAAK,iBAAiB,IAAG,KAAK,OAAK,UAAS,KAAK,gBAAc,CAAC,KAAI,GAAE,CAAC;AAAA,SAAM;AAAC,UAAI,IAAEA,IAAE,SAAO,KAAGA,IAAEA,IAAE,SAAO,CAAC,IAAE,MAAI,GAAE,IAAE,EAAE,SAAO,KAAG,EAAE,EAAE,SAAO,CAAC,IAAE,MAAI;AAAE,WAAG,KAAG,KAAK,kBAAgB,GAAE,KAAK,qBAAmB,CAAC,GAAE,CAAC,KAAG,MAAI,EAAE,cAAc,CAAC,KAAG,EAAE,EAAE,SAAO,CAAC,MAAI,MAAI,MAAI,EAAE,cAAcA,GAAC,KAAGA,IAAEA,IAAE,SAAO,CAAC,MAAI,MAAI,KAAK,kBAAgB,GAAE,KAAK,qBAAmB,IAAE,CAAC,GAAE,CAAC,IAAE,CAAC,GAAE,CAAC,MAAI,KAAK,kBAAgB,GAAE,KAAK,qBAAmB,CAAC,GAAE,CAAC,IAAG,KAAK,OAAK,aAAY,KAAK,YAAU,UAAU,CAAC,IAAI,KAAK,kBAAkB,IAAG,KAAK,gBAAc,CAAC,KAAI,GAAE,CAAC;AAAA,IAAC;AAAC,SAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,eAAc,CAAC,KAAK,iBAAgB,GAAE,CAAC,CAAC;AAAA,EAAC;AAAA,EAAC,cAAa;AAAC,QAAI,GAAEA,MAAE,KAAK,oBAAkB,IAAE,cAAY,OAAM,IAAE;AAAA,6BACzoCA,GAAC,SAASA,GAAC,QAAQA,GAAC;AAAA,QACzC,GAAG,KAAK,IAAG,KAAK,oBAAkB,CAAC,CAAC;AAAA;AAAA;AAEtC,QAAG,KAAK,SAAO,UAAS;AAAC,UAAI,IAAE,KAAK,oBAAkB,IAAE,UAAU,KAAK,YAAY,SAAO,CAAC,MAAI,KAAI,IAAE,KAAK,uBAAqB;AAAA,8BACvG,CAAC,OAAK,qBAAqB,CAAC;AAAA;AACb,UAAE;AAAA,UACrC,CAAC;AAAA,gDACqC,KAAK,iBAAiB;AAAA,UAC5D,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA,4BAGQ,KAAK,iBAAiB;AAAA,0CACR,KAAK,uBAAqB,MAAI,GAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAM7D,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,IAIN,MAAM,KAAE;AAAA,SACR,CAAC;AAAA,SACD,EAAE,OAAO,CAAC;AAAA;AAAA,qDAEkC,KAAK,eAAe;AAAA,qBACpDA,GAAC;AAAA,qBACDA,GAAC;AAAA;AAAA;AAAA;AAAA;AAIb,WAAO;AAAA,EAAC;AAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,EAAC,IAAEA,KAAE,EAAC,GAAEC,IAAC,IAAE;AAAE,SAAOD,IAAE,QAAQ,OAAOC,IAAE,MAAM,GAAE,EAAC,QAAOA,IAAE,QAAO,OAAMA,IAAE,OAAM,OAAMA,IAAE,MAAK;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,MAAK,GAAE,MAAK,EAAC,IAAE,GAAE,IAAEC,IAAE,eAAe,EAAE,OAAM,WAAW,GAAE,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,IAAC,CAAC;AAAE,SAAO,EAAE,qBAAmB,EAAC,MAAK,GAAE,MAAK,EAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,GAAE;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,IAAE,IAAG;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,OAAK;AAAG,QAAI,IAAE;AAAI,SAAK,gBAAc,CAAC,GAAE,GAAE,CAAC,GAAE,KAAK,cAAY,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,KAAGA,KAAE,MAAI,OAAK,KAAK,WAAS,IAAG,KAAK,YAAU,SAASA,GAAC;AAAA,EAAE;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA;AAAA,UAEtyB,GAAG,KAAK,IAAG,KAAE,CAAC;AAAA;AAAA,QAEhB,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMX;AAAC;AAAE,SAAS,GAAG,EAAC,QAAOD,KAAE,eAAc,GAAE,OAAMC,IAAC,GAAE;AAAC,SAAM,CAAC,EAAC,QAAO,GAAE,SAAQ,EAAC,MAAI;AAAC,QAAG,EAAC,GAAE,EAAC,IAAE,GAAE,IAAE,GAAE,IAAEA,OAAG,EAAE;AAAM,QAAG,EAAE,mBAAmB,CAAC,CAAC,CAAC,KAAG,KAAG,MAAK;AAAC,UAAI,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,GAAE,IAAE,EAAE,EAAE,QAAO,CAAC;AAAE,aAAO,EAAE,eAAe,EAAE,OAAM,GAAE,CAAC;AAAA,IAAC;AAAC,QAAI,IAAE,IAAI,GAAG,EAAE,OAAMD,GAAC;AAAE,WAAO,EAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,CAAC;AAAA,EAAC;AAAC;AAAC,SAAS,GAAG,EAAC,QAAOA,KAAE,eAAc,GAAE,iBAAgBC,MAAE,OAAG,OAAM,EAAC,GAAE;AAAC,SAAM,CAAC,EAAC,QAAO,GAAE,SAAQ,EAAC,MAAI;AAAC,QAAG,EAAC,GAAE,GAAE,EAAC,IAAE,GAAE,IAAE;AAAE,QAAGA,OAAG,EAAE,UAAQ,aAAY;AAAC,UAAI,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,GAAE,GAAE;AAAE,UAAGD,QAAI,GAAG,IAAI,EAAC,GAAE,CAAC,IAAE,CAAC,CAAC,EAAE,mBAAmB,MAAK,EAAE,mBAAmB,IAAI,GAAE,CAAC,EAAE,mBAAmB,MAAK,EAAE,mBAAmB,IAAI,CAAC,EAAE,IAAI,OAAG;AAAC,YAAG,CAAC,GAAE,CAAC,IAAE,GAAE,IAAE,EAAC,QAAO,EAAE,QAAO,OAAM,EAAE,OAAM,OAAM,EAAE,MAAK,GAAE,IAAE,EAAC,QAAO,EAAE,QAAO,OAAM,EAAE,OAAM,OAAM,EAAE,MAAK,GAAE,IAAE,IAAI,GAAGA,KAAE,EAAE,OAAM,EAAE,KAAK;AAAE,eAAO,EAAE,iBAAiB,GAAE,CAAC,GAAE,CAAC,GAAE,GAAG,EAAE,OAAM,EAAE,KAAK,CAAC;AAAA,MAAC,CAAC;AAAA,WAAM;AAAC,YAAI,IAAE,IAAI,GAAG,GAAG,uBAAsB,EAAE,OAAM,EAAE,KAAK,GAAE,IAAE,IAAI,GAAG,GAAG,uBAAsB,EAAE,OAAM,EAAE,KAAK,GAAE,IAAE,CAAC,EAAC,QAAO,EAAE,mBAAmB,KAAK,QAAO,OAAM,EAAE,mBAAmB,KAAK,OAAM,OAAM,EAAE,MAAK,GAAE,EAAC,QAAO,EAAE,mBAAmB,KAAK,QAAO,OAAM,EAAE,mBAAmB,KAAK,OAAM,OAAM,EAAE,MAAK,GAAE,EAAC,QAAO,EAAE,mBAAmB,KAAK,QAAO,OAAM,EAAE,mBAAmB,KAAK,OAAM,OAAM,EAAE,MAAK,GAAE,EAAC,QAAO,EAAE,mBAAmB,KAAK,QAAO,OAAM,EAAE,mBAAmB,KAAK,OAAM,OAAM,EAAE,MAAK,CAAC;AAAE,YAAE,EAAE,iBAAiB,GAAE,GAAE,SAAS,GAAE,IAAE,EAAE,iBAAiB,GAAE,GAAE,SAAS;AAAA,MAAC;AAAC,UAAI,IAAE,GAAG,EAAC,QAAO,EAAC,MAAK,GAAE,MAAK,EAAC,GAAE,SAAQ,EAAC,CAAC;AAAE,aAAO,EAAE,YAAY,EAAE,MAAM,GAAE,EAAE,YAAY,EAAE,MAAM,GAAE;AAAA,IAAC;AAAC,QAAI,IAAE,KAAG,GAAG,EAAE,OAAM,EAAE,KAAK;AAAE,SAAI,EAAE,UAAQ,YAAU,EAAE,UAAQ,YAAU,EAAE,mBAAmB,CAAC,GAAE,CAAC,CAAC,MAAI,KAAG,MAAK;AAAC,UAAI,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,UAAQ,WAAS,EAAE,uBAAuB,CAAC,IAAE,GAAE,IAAE,EAAE,UAAQ,WAAS,EAAE,uBAAuB,CAAC,IAAE,GAAE,CAAC,GAAE,CAAC,IAAE,EAAE,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,CAAC;AAAE,aAAO,EAAE,eAAe,GAAE,GAAE,CAAC;AAAA,IAAC;AAAC,QAAI,IAAE,IAAI,GAAGA,KAAE,EAAE,OAAM,EAAE,KAAK;AAAE,WAAO,EAAE,iBAAiB,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC;AAAA,EAAC;AAAC;AAAC,IAAG,EAAC,SAAQ,IAAG,UAAS,IAAG,UAAS,IAAG,YAAW,IAAG,WAAU,IAAG,SAAQ,IAAG,WAAU,IAAG,WAAU,IAAG,cAAa,IAAG,cAAa,IAAG,cAAa,IAAG,kBAAiB,IAAG,aAAY,IAAG,eAAc,IAAG,UAAS,IAAG,SAAQ,IAAG,SAAQ,IAAG,aAAY,IAAG,aAAY,IAAG,cAAa,IAAG,SAAQ,IAAG,cAAa,IAAG,UAAS,IAAG,WAAU,IAAG,WAAU,IAAG,aAAY,IAAG,eAAc,IAAG,WAAU,IAAG,kBAAiB,IAAG,kBAAiB,IAAG,SAAQ,IAAG,UAAS,IAAG,UAAS,IAAG,eAAc,IAAG,YAAW,IAAG,IAAE;AAAG,IAAI,MAAI,GAAG,EAAC,QAAO,EAAE,KAAI,eAAc,GAAE,CAAC;AAA1C,IAA4C,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,EAAE,KAAI,CAAC;AAA1B,IAA4B,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,EAAE,MAAK,CAAC;AAA3B,IAA6B,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,GAAG,KAAI,eAAc,IAAG,iBAAgB,KAAE,CAAC;AAA9D,IAAgE,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,GAAE,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,EAAE,CAAC,GAAE,KAAK,gBAAc,EAAE,IAAI,CAACC,KAAE,MAAI,IAAI,CAAC,EAAE,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,eAAc,CAAC,KAAK,eAAc,GAAE,CAAC,CAAC,GAAE,KAAK,YAAU;AAAA,EAAM;AAAA,EAAC,cAAa;AAAC,QAAI,IAAE,CAAC;AAAE,SAAK,cAAc,QAAQ,OAAG;AAAC,QAAE,KAAK,QAAQ,CAAC,SAAS,CAAC,yBAAyB;AAAA,IAAC,CAAC;AAAE,QAAIA,MAAE,KAAK,cAAc,IAAI,OAAG,IAAI,CAAC,EAAE,EAAE,KAAK,KAAK;AAAE,WAAM;AAAA,QACxtG,EAAE,OAAO,CAAC;AAAA,8BACY,KAAK,aAAa;AAAA,oCACZ,KAAK,aAAa;AAAA;AAAA;AAAA,cAGxC,EAAE,KAAK;AAAA,SACZ,CAAC;AAAA,0CACgCA,GAAC;AAAA;AAAA;AAAA;AAAA;AAAA,EAItC;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,IAAE;AAAE,MAAG,EAAE,WAAS,EAAE,QAAO,GAAG,EAAC,QAAO,EAAC,GAAE,EAAE,CAAC,EAAC,GAAE,SAAQC,IAAC,CAAC;AAAE,MAAI,IAAE,EAAE,IAAI,OAAG,EAAE,KAAK,EAAE,OAAO,CAAC,GAAE,MAAI,GAAG,GAAE,CAAC,CAAC,GAAE,IAAE,EAAE,IAAI,OAAG,EAAE,KAAK,GAAE,IAAE,IAAI,GAAG,CAAC;AAAE,SAAOA,IAAE,iBAAiB,GAAE,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,gBAAc,CAAC,IAAG,IAAG,CAAC;AAAE,QAAI,IAAE,IAAI,MAAM,EAAE,MAAM;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,IAAI,GAAE,CAAC,IAAE,EAAEA,IAAE,CAAC,CAAC;AAAE,SAAK,cAAY,GAAE,KAAK,iBAAe,EAAC,GAAE,CAAC,CAAC,GAAE,GAAE,CAAC,CAAC,EAAC,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,eAAc,CAAC,GAAE,GAAE,CAAC,CAAC,GAAE,KAAK,YAAU;AAAA,EAAiB;AAAA,EAAC,cAAa;AAAC,MAAE,OAAO,KAAK,cAAc,CAAC,MAAI,KAAK,cAAc,CAAC,GAAE,MAAI,gDAAgD,KAAK,cAAc,CAAC,CAAC,MAAM,KAAK,cAAc,CAAC,CAAC,EAAE;AAAE,QAAI,IAAE,KAAK,cAAc,CAAC;AAAE,WAAM;AAAA,+CACrvB,KAAK,cAAc,CAAC,IAAE,CAAC,MAAM,KAAK,cAAc,CAAC,CAAC;AAAA,QACzF,EAAE,CAAC;AAAA,uCAC4B,CAAC;AAAA,uCACD,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mCAQL,CAAC;AAAA,mCACD,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAM/B;AAAC;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,gBAAc,GAAE,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK;AAAG,QAAI,IAAE,IAAI,MAAM,EAAE,MAAM;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,IAAI,GAAE,CAAC,IAAE,EAAEA,IAAE,CAAC,CAAC;AAAE,SAAK,cAAY,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,eAAc,CAAC,KAAK,eAAc,GAAE,CAAC,CAAC,GAAE,KAAK,SAAOA,KAAE,KAAK,YAAU,aAAaA,GAAC;AAAA,EAAE;AAAA,EAAC,cAAa;AAAC,QAAI,IAAE,GAAG,KAAK,YAAY,MAAM,GAAEA,MAAE,GAAG,KAAK,MAAM;AAAE,WAAM;AAAA,QAC1c,EAAE,OAAO,CAAC;AAAA,6BACW,KAAK,aAAa;AAAA,oCACX,KAAK,aAAa;AAAA;AAAA;AAAA,8DAGQ,KAAK,YAAY,MAAM;AAAA,gBACrE,CAAC,IAAIA,GAAC;AAAA;AAAA;AAAA;AAAA;AAAA,EAIjB;AAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAI,IAAEA,IAAE;AAAO,MAAG,IAAE,EAAE,OAAM,MAAM,sBAAsB,CAAC,uBAAuB;AAAE,MAAIC,MAAE,IAAI,MAAM,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAED,IAAE,QAAO,IAAI,CAAAC,IAAED,IAAE,CAAC,CAAC,IAAE,UAAU,GAAG,CAAC,CAAC;AAAG,SAAOC,IAAE,KAAK;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,MAAK,EAAC,IAAE,GAAE,IAAEC,KAAE,IAAE,EAAE,MAAM,QAAO,IAAE,IAAI,MAAM,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,IAAI,GAAE,CAAC,IAAE,EAAE,MAAM,EAAE,CAAC,CAAC;AAAE,MAAGA,IAAE,mBAAmB,CAAC,CAAC,CAAC,GAAE;AAAC,QAAI,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,GAAG,GAAE,EAAE,OAAM,EAAE,OAAM,GAAE,CAAC;AAAE,WAAOA,IAAE,eAAe,GAAE,EAAE,OAAM,CAAC;AAAA,EAAC;AAAC,MAAG,EAAE,MAAM,WAAS,KAAG,EAAE,YAAY,GAAE,CAAC,GAAE,CAAC,CAAC,GAAE;AAAC,QAAI,IAAE,IAAI,GAAG,EAAE,OAAM,CAAC;AAAE,WAAO,EAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,EAAE,KAAK;AAAA,EAAC;AAAC,MAAI,IAAE,IAAI,GAAG,EAAE,OAAM,CAAC;AAAE,SAAO,EAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,EAAE,KAAK;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,GAAE;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,WAAS,qBAAoB,KAAK,OAAK,MAAG,KAAK,aAAW,CAAC,EAAE,WAAU,EAAE,MAAM;AAAE,QAAG,CAAC,CAAC,IAAE,EAAE,0BAA0B,KAAK,YAAW,CAAC,CAAC,CAAC;AAAE,SAAK,cAAY,EAAE,WAAS,IAAE,CAAC,CAAC,IAAE,GAAE,EAAE,UAAQ,SAAO,KAAG,MAAI,KAAK,gBAAc,CAAC,KAAI,GAAE,CAAC,IAAE,EAAE,UAAQ,OAAK,KAAK,gBAAc,CAAC,KAAI,GAAE,CAAC,IAAE,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,CAAC,GAAE,GAAE,CAAC,CAAC,GAAE,KAAK,aAAWA,KAAE,KAAK,YAAU,UAAUA,GAAC;AAAA,EAAE;AAAA,EAAC,cAAa;AAAC,QAAI,IAAE,IAAGA,MAAE,OAAM,IAAE,KAAK,cAAc,CAAC;AAAE,SAAK,eAAa,SAAO,KAAK,eAAa,SAAO,IAAE;AAAA;AAAA;AAAA,qDAG3vC,KAAK,eAAa,QAAM,MAAI,GAAG;AAAA,yCAC5CA,MAAE,oBAAkB,KAAK,eAAa,SAAO,KAAK,eAAa,SAAO,IAAE,yCAAuC,KAAK,eAAa,UAAQ,IAAE,wCAAuCA,MAAE,SAAO,KAAK,eAAa,SAAO,IAAE,4DAA2DA,MAAE,SAAO,KAAK,eAAa,UAAQ,IAAE,4DAA2DA,MAAE;AAAO,QAAI,IAAE,KAAK,eAAa,SAAO,yEAAuE;AAA4C,WAAM;AAAA;AAAA;AAAA;AAAA;AAAA,SAKjjB;AAAA,mDAC0C,CAAC;AAAA,QAC5C;AAAA;AAAA;AAAA,wBAGgB,KAAK,YAAY,WAAS,IAAE,iBAAe,iBAAiB;AAAA;AAAA;AAAA,SAG3E,EAAE,OAAO,CAAC;AAAA,qCACkB,CAAC;AAAA;AAAA,2BAEXA,GAAC;AAAA;AAAA,qDAEyB,CAAC;AAAA;AAAA,uBAE/B,CAAC;AAAA;AAAA,aAEX,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,6CAK+B,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAMhC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAQH,CAAC;AAAA;AAAA;AAAA;AAAA,EAGP;AAAC;AAAE,IAAI,MAAI,EAAC,MAAK,WAAU,KAAI,QAAO,KAAI,OAAM;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE;AAAC,MAAI,IAAED,IAAE,MAAM,QAAO,IAAE,CAAC,GAAE,IAAE,EAAE,eAAe,GAAEA,IAAE,KAAK,GAAE,IAAE,GAAE,IAAE,EAAE,mBAAmB,GAAE,CAAC,GAAE,IAAEA;AAAE,OAAG,SAAO,IAAE,GAAG,EAAC,QAAO,EAAC,GAAEA,IAAC,GAAE,OAAM,EAAC,MAAK,EAAC,GAAE,SAAQ,EAAC,CAAC,GAAE,IAAE,EAAE,iBAAiB,EAAE,QAAO,CAAC,GAAE,EAAE,KAAK,CAAC,IAAG,EAAE,2BAA2B,GAAE,GAAE,CAAC;AAAE,MAAG,CAAC,GAAE,CAAC,IAAE,EAAE,0BAA0B,EAAE,OAAM,CAAC,GAAE,IAAE;AAAE,EAAAC,QAAI,IAAE,EAAE,qBAAqB,GAAE,CAAC;AAAG,MAAI;AAAE,OAAI,MAAI,SAAO,MAAI,WAAS,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAE;AAAC,QAAI,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAO,YAAO,GAAE;AAAA,MAAC,KAAI;AAAM,YAAI,IAAE,GAAG,GAAE,EAAE,cAAc,CAAC,GAAE,GAAED,IAAE,KAAK;AAAE,YAAE,EAAE,eAAe,GAAEA,IAAE,OAAM,CAAC;AAAE;AAAA,MAAM,KAAI;AAAO,YAAG,EAAC,SAAQ,GAAE,UAAS,GAAE,UAAS,EAAC,IAAE,GAAG,EAAE,OAAM,EAAE,OAAM,GAAE,CAAC;AAAE,YAAE,EAAE,eAAe,GAAE,GAAE,CAAC;AAAE;AAAA,MAAM;AAAQ,cAAM,IAAI,MAAM,GAAG,CAAC,2CAA2C;AAAA,IAAC;AAAA,EAAC,OAAK;AAAC,QAAI,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,EAAE,cAAc,EAAE,KAAK,IAAE,GAAE,IAAE,EAAC,YAAW,GAAE,QAAO,GAAE,WAAU,GAAE,SAAQ,EAAC,GAAE,IAAE,IAAI,CAAC,KAAG,GAAGA,IAAE,KAAK,GAAE,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,CAAC,CAAC,EAAC,CAAC,GAAE,IAAE,IAAI,GAAG,GAAE,GAAE,EAAE,OAAO,OAAO,wBAAwB,GAAE,IAAE,EAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,GAAE,CAAC;AAAE,MAAE,KAAK,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,OAAM,EAAC,OAAM,EAAC,GAAE,SAAQ,EAAC,CAAC;AAAA,EAAC;AAAC,SAAO,EAAE,QAAQ,OAAG,EAAE,YAAY,EAAE,MAAM,CAAC,GAAE;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,UAAS,GAAE,MAAK,EAAC,IAAE;AAAE,SAAO,GAAG,GAAE,GAAE,GAAE,OAAMC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,UAAS,GAAE,MAAK,EAAC,IAAE;AAAE,SAAO,GAAG,GAAE,GAAE,GAAE,OAAMC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,WAAS,wBAAuB,KAAK,OAAK;AAAG,QAAI,IAAE,CAACA,GAAC;AAAE,SAAK,KAAG,MAAI,QAAM,MAAI;AAAI,QAAG,CAAC,GAAE,CAAC,IAAE,EAAE,0BAA0B,GAAE,CAAC;AAAE,SAAK,cAAY,EAAE,WAAS,IAAE,CAAC,CAAC,IAAE,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,EAAE,cAAc,CAAC,IAAE,MAAI,KAAK,OAAK,SAAQ,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,MAAI,KAAK,OAAK,UAAS,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,CAAC,GAAE,GAAE,CAAC,CAAC,IAAG,KAAK,aAAW,GAAE,KAAK,YAAU,aAAa,KAAK,EAAE,IAAI,KAAK,IAAI;AAAA,EAAE;AAAA,EAAC,cAAa;AAAC,QAAI,IAAE,KAAK,cAAc,CAAC,GAAEA,MAAE,MAAI,KAAK,WAAW,WAAS,IAAE,oBAAkB,mBAAmB,GAAG,KAAK,WAAW,SAAO,CAAC,CAAC,IAAG,IAAE,MAAI;AAAC,UAAI,IAAE;AAAG,UAAG,KAAK,YAAY,WAAS,EAAE,MAAK,WAAW,WAAS,MAAI,KAAG;AAAA,UAAsB,UAAQ,IAAE,GAAE,IAAE,KAAK,YAAY,QAAO,IAAI,MAAG,gBAAgB,GAAG,CAAC,CAAC;AAAI,aAAO;AAAA,IAAC;AAAE,WAAO,KAAK,SAAO,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA,QAK3yE;AAAA,iDACyC,CAAC;AAAA,gDACF,CAAC;AAAA,KAC5C;AAAA;AAAA,QAEG,EAAE,OAAO,CAAC;AAAA,oCACkB,CAAC;AAAA,6BACRA,IAAE,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAMV,CAAC;AAAA,iCACU,EAAE,CAAC;AAAA,+CACW,KAAK,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kDASJ,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4BAMvB,KAAK,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAc7B;AAAA,QACE,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA,iCAIe,EAAE,CAAC;AAAA,+BACLA,IAAE,CAAC;AAAA;AAAA,mCAEC,EAAE,CAAC;AAAA,4BACV,KAAK,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQ5B;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,MAAK,EAAC,IAAE,GAAE,IAAE,EAAE,eAAe,GAAE,EAAE,KAAK,GAAE,IAAE,EAAE,mBAAmB,GAAE,EAAE,MAAM,MAAM,GAAE,IAAE,GAAE,IAAE,CAAC;AAAE,OAAG,SAAO,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC,GAAE,EAAE,KAAK,CAAC,GAAE,IAAE,EAAE,iBAAiB,EAAE,QAAO,EAAE,MAAM,MAAM,IAAG,EAAE,2BAA2B,UAAS,CAAC,EAAE,CAAC,CAAC,GAAE,EAAE,MAAM,MAAM;AAAE,MAAI,IAAE,IAAI,GAAG,EAAE,OAAM,EAAE,CAAC,GAAE,KAAK,GAAE,IAAE,CAAC,EAAC,MAAK,WAAU,MAAK,CAAC,OAAO,iBAAiB,EAAC,CAAC,GAAE,IAAEA,IAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,SAAQ,CAAC;AAAE,SAAO,EAAE,QAAQ,OAAGA,IAAE,YAAY,EAAE,MAAM,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,MAAK,EAAC,IAAE,GAAE,IAAE,EAAE,eAAe,GAAE,EAAE,KAAK,GAAE,IAAE,EAAE,mBAAmB,GAAE,EAAE,MAAM,MAAM,GAAE,IAAE,GAAE,IAAE,CAAC;AAAE,OAAG,SAAO,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC,GAAE,EAAE,KAAK,CAAC,GAAE,IAAE,EAAE,iBAAiB,EAAE,QAAO,EAAE,MAAM,MAAM,IAAG,EAAE,2BAA2B,UAAS,CAAC,EAAE,CAAC,CAAC,GAAE,EAAE,MAAM,MAAM;AAAE,MAAI,IAAE,IAAI,GAAG,EAAE,OAAM,EAAE,CAAC,GAAE,KAAK,GAAE,IAAE,CAAC,EAAC,MAAK,WAAU,MAAK,CAAC,OAAO,iBAAiB,EAAC,CAAC,GAAE,IAAEA,IAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,SAAQ,CAAC;AAAE,SAAO,EAAE,QAAQ,OAAGA,IAAE,YAAY,EAAE,MAAM,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,EAAE,KAAI,CAAC;AAA1B,IAA4B,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,EAAE,MAAK,CAAC;AAA3B,IAA6B,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,EAAE,KAAI,CAAC;AAA1B,IAA4B,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,GAAG,MAAK,CAAC;AAA5B,IAA8B,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,EAAE,MAAK,CAAC;AAA3B,IAA6B,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,WAAS,wBAAuB,KAAK,gBAAc,CAAC,KAAI,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,EAAE,UAAS,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,YAAU;AAAA,EAA6B;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,QACz0D,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcb;AAAC;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,IAAE,OAAG,IAAE,OAAG,IAAE,OAAG;AAAC,QAAG,KAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,WAAS,+GAA8G,KAAK,gBAAc,CAAC,KAAI,GAAE,CAAC,GAAE,KAAK,OAAK,MAAGA,QAAI,SAAO,EAAE,OAAM,IAAI,MAAM,4CAA4C;AAAE,SAAK,cAAY,EAAE,UAAS,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,WAASA,KAAE,KAAK,mBAAiB,GAAE,KAAK,mBAAiB,GAAE,KAAK,oBAAkB,GAAE,KAAK,YAAU,UAAUA,GAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AAAA,EAAE;AAAA,EAAC,cAAa;AAAC,QAAI;AAAE,SAAK,aAAW,QAAM,IAAE,4DAA0D,KAAK,mBAAiB,IAAE;AAAA;AAAA;AAAA;AAAA,wBAI1rB,KAAK,mBAAiB,KAAK,oBAAkB,2FAAyF,4DAA0D,iCAAiC;AAAA,WAChP,IAAE;AAAyC,QAAIA,MAAE;AAAc,WAAO,KAAK,aAAW,UAAQA,MAAE,kCAAiC;AAAA,QAClI,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YASN,KAAK,mBAAiB;AAAA;AAAA,oCAEA,qBAAqB,KAAK,aAAW,QAAM,QAAM,yBAAyB,GAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAiB/F,CAAC;AAAA;AAAA;AAAA;AAAA,YAIL,KAAK,mBAAiB,6CAA2C,2BAA2BA,GAAC,IAAI;AAAA;AAAA;AAAA;AAAA,EAGxG;AAAC;AAzCE,IAyCA,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,IAAE,OAAG,IAAE,OAAG,IAAE,OAAG;AAAC,QAAG,KAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,WAAS,wFAAuF,KAAK,gBAAc,CAAC,KAAI,GAAE,CAAC,GAAE,KAAK,OAAK,MAAGA,QAAI,SAAO,EAAE,OAAM,IAAI,MAAM,4CAA4C;AAAE,SAAK,cAAY,EAAE,UAAS,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,WAASA,KAAE,KAAK,mBAAiB,GAAE,KAAK,mBAAiB,GAAE,KAAK,oBAAkB,GAAE,KAAK,YAAU,UAAUA,GAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AAAA,EAAE;AAAA,EAAC,cAAa;AAAC,QAAI;AAAE,SAAK,aAAW,QAAM,IAAE,wCAAsC,KAAK,mBAAiB,IAAE;AAAA;AAAA;AAAA;AAAA,wBAI3oB,KAAK,mBAAiB,KAAK,oBAAkB,oHAAkH,sFAAoF,sFAAsF;AAAA,WACxV,IAAE;AAAyC,QAAIA,MAAE;AAAc,WAAO,KAAK,aAAW,UAAQA,MAAE,kCAAiC;AAAA,QAClI,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAWN,KAAK,mBAAiB;AAAA;AAAA,oCAEA,qBAAqB,KAAK,aAAW,QAAM,QAAM,yBAAyB,GAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAsB7F,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,YAKP,KAAK,mBAAiB,6CAA2C,2BAA2BA,GAAC,IAAI;AAAA;AAAA;AAAA;AAAA,EAGxG;AAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,kBAAiB,GAAE,UAAS,EAAC,IAAE;AAAE,SAAO,GAAG,GAAE,GAAE,GAAE,OAAMC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,UAAS,GAAE,MAAK,EAAC,IAAE;AAAE,SAAO,GAAG,GAAE,GAAE,GAAE,QAAOC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE;AAAC,MAAG,EAAE,gBAAc,KAAG,EAAE,iBAAe,KAAG,EAAE,YAAY,EAAE,SAAQ,EAAE,QAAQ,EAAE,QAAO,GAAG,EAAC,QAAO,EAAC,GAAED,IAAC,GAAE,SAAQ,EAAC,CAAC;AAAE,MAAG,EAAE,gBAAc,EAAE,WAAS,EAAE,iBAAe,EAAE,YAAU,EAAE,cAAY,KAAG,EAAE,QAAQ,SAAO,SAAQ;AAAC,QAAI,IAAEA,IAAE,MAAM,QAAO,IAAE,GAAG,EAAC,QAAO,EAAC,GAAEA,IAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,CAACA,IAAE,MAAM,IAAE,CAAC,IAAEA,IAAE,MAAM,IAAE,CAAC,GAAEA,IAAE,MAAM,IAAE,CAAC,CAAC,EAAC,EAAC,CAAC,GAAE;AAAE,IAAAC,QAAI,QAAM,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,MAAK,GAAE,UAAS,MAAE,EAAC,CAAC,KAAG,EAAE,OAAOA,QAAI,OAAM,MAAI,qBAAqBA,GAAC,EAAE,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,kBAAiB,GAAE,UAAS,MAAE,EAAC,CAAC;AAAG,QAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAE,SAAQ,EAAC,CAAC;AAAE,WAAO,EAAE,YAAY,EAAE,MAAM,GAAE,EAAE,YAAY,EAAE,MAAM,GAAE;AAAA,EAAC;AAAC,MAAI,GAAE,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,cAAa,EAAE,WAAW,EAAC,CAAC;AAAE,SAAO,EAAE,iBAAe,KAAG,EAAE,gBAAc,IAAE,IAAE,IAAI,GAAG,CAAC,KAAGA,QAAI,QAAM,IAAE,IAAI,GAAG,GAAE,KAAK,KAAG,EAAE,OAAOA,QAAI,OAAM,MAAI,qBAAqBA,GAAC,EAAE,GAAE,IAAE,IAAI,GAAG,GAAE,KAAK,IAAG,EAAE,KAAK,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,QAAQ,KAAI,EAAE,QAAQ,IAAI,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,gBAAe,EAAE,aAAa,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,UAAS,EAAE,OAAO,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,uBAAsB,EAAE,oBAAoB,EAAC,CAAC,IAAG,EAAE,iBAAiB,GAAE,CAACD,GAAC,GAAEA,IAAE,OAAM,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,YAAW,GAAE,SAAQ,GAAE,KAAI,GAAE,iBAAgB,EAAC,IAAE,GAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,SAAO,GAAG,GAAE,GAAE,OAAMC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,YAAW,GAAE,SAAQ,GAAE,KAAI,GAAE,YAAW,GAAE,iBAAgB,EAAC,IAAE,GAAE,IAAE,CAAC,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,IAAI,GAAG,GAAE,KAAK,GAAE,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,aAAY,EAAE,cAAa,EAAE,WAAW,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,QAAQ,OAAM,EAAE,QAAQ,KAAI,EAAE,QAAQ,IAAI,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,SAAQ,EAAE,UAAS,EAAE,OAAO,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,sBAAqB,EAAE,uBAAsB,EAAE,oBAAoB,EAAC,CAAC;AAAE,SAAOC,IAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,IAAI,GAAE,KAAK,WAAS;AAAA,+DAClvE,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,EAAE,SAAQ,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,YAAU;AAAA,EAAmB;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,QAClS,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqCb;AAAC;AAvCsuE,IAuCpuE,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,IAAI,GAAE,KAAK,WAAS;AAAA,+EACM,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,EAAE,SAAQ,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,YAAU;AAAA,EAAmB;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,QAClT,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA+Cb;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,IAAG,GAAE,OAAM,EAAC,IAAE,GAAE,IAAE,GAAE,EAAC,YAAW,GAAE,SAAQ,GAAE,KAAI,GAAE,iBAAgB,EAAC,IAAE,GAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,IAAI,GAAG,CAAC,GAAE,IAAE,KAAG,EAAE,cAAY,EAAE,eAAa,EAAE,cAAa,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,aAAY,EAAE,cAAa,EAAE,WAAW,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,uBAAqB,IAAE,EAAE,QAAQ,OAAM,EAAE,wBAAsB,IAAE,EAAE,QAAQ,KAAI,EAAE,uBAAqB,IAAE,EAAE,QAAQ,IAAI,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,sBAAqB,EAAE,uBAAsB,EAAE,oBAAoB,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,QAAQ,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,SAAS,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,QAAQ,EAAC,GAAE,EAAC,MAAK,WAAU,MAAK,CAAC,CAAC,EAAC,CAAC;AAAE,SAAOC,IAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,IAAG,GAAE,OAAM,EAAC,IAAE,GAAE,IAAE;AAAE,KAAG,CAAC,GAAE,CAAC,GAAE,aAAa;AAAE,MAAG,EAAC,YAAW,GAAE,SAAQ,GAAE,KAAI,EAAC,IAAE,GAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,IAAI,GAAG,CAAC,GAAE,IAAE,KAAG,EAAE,eAAa,EAAE,cAAa,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,cAAa,EAAE,WAAW,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,wBAAsB,IAAE,EAAE,QAAQ,KAAI,EAAE,uBAAqB,IAAE,EAAE,QAAQ,IAAI,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,gBAAe,EAAE,aAAa,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,uBAAsB,EAAE,oBAAoB,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,SAAS,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,QAAQ,EAAC,GAAE,EAAC,MAAK,WAAU,MAAK,CAAC,CAAC,EAAC,CAAC;AAAE,SAAOC,IAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,GAAE,EAAC,IAAE,GAAE,EAAC,YAAW,GAAE,YAAW,EAAC,IAAE;AAAE,SAAO,GAAG,EAAC,GAAE,GAAE,GAAE,GAAE,YAAW,GAAE,YAAW,GAAE,SAAQC,IAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE;AAAC,SAAK,gBAAc,CAAC,QAAQ,GAAE,KAAK,gBAAc,GAAE,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAYA,KAAE,KAAK,OAAKA,IAAE,QAAO,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,eAAc,CAAC,KAAK,eAAc,GAAE,CAAC,CAAC,GAAE,KAAK,QAAM,GAAE,KAAK,WAAS,WAAW,GAAG,EAAE,MAAM,CAAC,MAAK,KAAK,YAAU;AAAA,EAAO;AAAA,EAAC,cAAa;AAAC,QAAI,IAAE,GAAG,KAAK,IAAI,GAAEA,MAAE,IAAI,KAAK,IAAI,GAAE;AAAE,WAAO,KAAK,MAAM,WAAS,IAAE,IAAE,KAAK,YAAY,IAAI,CAAC,GAAE,MAAI,sCAAsC,IAAE,IAAE,KAAK,YAAY,IAAI,CAAC,GAAE,MAAI,aAAa,GAAG,CAAC,CAAC,qBAAqB,GAAG,CAAC,CAAC,aAAa,GAAG,CAAC,CAAC,GAAG,GAAE;AAAA,QAC1uE,EAAE,OAAO,CAAC;AAAA;AAAA,4BAEU,CAAC;AAAA;AAAA,YAEjB,EAAE,KAAK;AAAA,CAClB,CAAC;AAAA,8CAC4CA,GAAC;AAAA;AAAA;AAAA;AAAA,EAG1C;AAAC;AAV2nD,IAUznD,KAAG,CAAC,KAAI,KAAI,KAAI,KAAI,KAAI,GAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAGA,QAAI,EAAE,QAAM;AAAY,MAAGA,OAAG,EAAE,QAAO,GAAG,MAAM,GAAEA,GAAC,EAAE,IAAI,OAAG,aAAa,CAAC,EAAE,EAAE,KAAK,GAAG;AAAE,QAAM,MAAM,oBAAoBA,GAAC,uBAAuB;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,OAAM,GAAE,MAAK,EAAC,IAAE,GAAE,CAAC,GAAE,CAAC,IAAE,GAAG,iBAAiB,GAAE,GAAE,CAAC;AAAE,MAAG,GAAG,kBAAkB,GAAE,GAAE,CAAC,GAAEC,IAAE,mBAAmB,CAAC,CAAC,CAAC,KAAG,EAAE,UAAQ,UAAS;AAAC,QAAI,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,GAAE,IAAE,GAAG,EAAE,QAAO,GAAE,GAAE,EAAE,OAAM,EAAE,KAAK;AAAE,WAAOA,IAAE,eAAe,GAAE,EAAE,OAAM,CAAC;AAAA,EAAC;AAAC,MAAG,EAAE,cAAc,CAAC,MAAI,EAAE,QAAOA,IAAE,eAAe,GAAE,EAAE,OAAM,CAAC,CAAC;AAAE,MAAI,IAAE,IAAI,GAAG,GAAE,CAAC,GAAE,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,EAAC,CAAC;AAAE,SAAOA,IAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,GAAE;AAAE,IAAI,MAAI,CAAAD,QAAG;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,YAAW,GAAE,OAAM,EAAC,IAAE;AAAE,IAAE,OAAO,EAAE,MAAM,UAAQ,GAAE,MAAI,uEAAuE;AAAE,MAAI,IAAE,EAAE,OAAO,CAAC,GAAE,MAAI,IAAE,CAAC,GAAE,IAAE,EAAE,YAAY,EAAE,OAAM,GAAE,CAAC,GAAE,IAAE,EAAE,YAAY,EAAE,QAAO,EAAE,MAAM,GAAE,IAAE,EAAE,oBAAoB,EAAE,OAAM,GAAE,CAAC,GAAE,IAAE,EAAE,oBAAoB,GAAE,EAAE,MAAM,GAAE,IAAE,EAAE,aAAa,GAAE,GAAE,EAAE,MAAM,GAAE,IAAE,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,GAAE,MAAK,EAAC,EAAC,CAAC;AAAE,SAAO,EAAE,KAAK,CAAC,GAAE,EAAE,KAAK,CAAC,GAAE,EAAE,KAAK,CAAC,GAAE,EAAE,QAAQ,OAAGA,IAAE,YAAY,EAAE,MAAM,CAAC,GAAE;AAAC;AAA7oB,IAA+oB,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI;AAAA;AAAA,MAEt4C,GAAG,kBAAiB,SAAQ,SAAS,CAAC;AAAA;AAAA;AAFw1C,IAIl4C,MAAI;AAAA;AAAA;AAAA;AAAA;AAJ83C,IAQl4C,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,IAAE,OAAG;AAAC,SAAK,cAAY,CAAC,GAAE,KAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,WAAS,uBAAsB,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,SAAO,MAAG,KAAK,aAAW,MAAG,KAAK,eAAa,OAAG,KAAK,cAAY,GAAE,KAAK,OAAK,EAAE,QAAO,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,eAAa,GAAE,MAAI,KAAK,SAAO,QAAI,KAAK,aAAWA,KAAE,KAAK,cAAY,KAAK,cAAc,KAAK,GAAG,GAAE,KAAK,YAAU,YAAY,KAAK,UAAU,IAAI,KAAK,YAAY,IAAI,KAAK,IAAI;AAAA,EAAE;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,MACjiB,KAAK,eAAa,MAAI,GAAG;AAAA,IAC3B,EAAE,OAAO,CAAC;AAAA,MACR,KAAK,SAAO,IAAE;AAAA;AAAA;AAAA,sBAGE,KAAK,eAAa,IAAE,KAAK,aAAW,gBAAc,IAAI;AAAA;AAAA;AAAA,SAGrE;AAAA;AAAA;AAAA;AAAA,sBAIe,KAAK,eAAa,IAAE,KAAK,aAAW,6BAA2B,IAAI;AAAA;AAAA;AAAA,MAGnF;AAAA;AAAA;AAAA,EAEH;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,SAAQ,EAAC,IAAE,GAAE,EAAC,MAAK,EAAC,IAAE,GAAE,IAAE,EAAE,cAAc,EAAE,KAAK,GAAE,IAAE,EAAE,cAAc,EAAE,KAAK,IAAE,GAAE,IAAE,CAAC,CAAC,GAAE,IAAE,EAAE,OAAM,IAAE,GAAG,EAAC,SAAQC,KAAE,OAAM,EAAC,OAAM,GAAE,OAAM,GAAE,OAAM,EAAC,EAAC,CAAC,GAAE,IAAE,IAAI,GAAG,CAAC,CAAC,GAAE,CAAC,GAAE,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,CAAC,CAAC,EAAC,CAAC,GAAE,IAAE,IAAE,CAAC,GAAE,CAAC,IAAE,CAAC,CAAC;AAAE,SAAOA,IAAE,iBAAiB,GAAE,GAAE,GAAE,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,cAAY,CAAC,GAAE,KAAK,gBAAc,CAAC,MAAK,IAAI,GAAE,KAAK,WAAS,gCAA+B,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,CAAC,CAAC,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,YAAU;AAAA,EAAe;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,IACnsB,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwBX;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,IAAG,GAAE,IAAG,EAAC,IAAE;AAAE,MAAGC,IAAE,mBAAmB,CAAC,GAAE,CAAC,CAAC,GAAE;AAAC,QAAI,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,GAAE,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,GAAE,IAAE,EAAE,QAAO,IAAE,EAAE,QAAO,IAAE,EAAE,2BAA2B,MAAM,KAAK,CAAC,GAAE,MAAM,KAAK,CAAC,CAAC;AAAE,WAAOA,IAAE,eAAe,CAAC,EAAE,MAAM,GAAE,SAAQ,WAAW,KAAK,CAAC,CAAC;AAAA,EAAC;AAAC,MAAI,IAAE,EAAE,cAAc,EAAE,KAAK,GAAE,IAAE,EAAE,cAAc,EAAE,KAAK,GAAE,IAAE,KAAK,IAAI,GAAE,CAAC,GAAE,IAAE,IAAI,GAAG,CAAC,GAAE,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,CAAC,CAAC,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,CAAC,EAAC,CAAC;AAAE,SAAOA,IAAE,iBAAiB,GAAE,CAAC,GAAE,CAAC,GAAE,SAAQ,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,GAAG,EAAC,QAAO,GAAG,WAAU,OAAM,QAAO,eAAc,GAAE,CAAC;AAA7D,IAA+D,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,OAAM,EAAC,IAAE,GAAE,IAAEC,IAAE,UAAU,IAAI,EAAE,MAAM;AAAE,SAAO,GAAG,EAAC,QAAO,EAAC,GAAE,EAAE,mBAAmB,KAAI,GAAE,SAAQA,IAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,IAAI,GAAGD,IAAE,OAAM,EAAE,MAAM,GAAE,IAAE,EAAE,iBAAiBC,KAAE,CAACD,GAAC,GAAE,OAAO;AAAE,SAAM,EAAC,QAAO,EAAE,QAAO,OAAM,EAAE,OAAM,OAAM,EAAE,MAAK;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,OAAM,EAAC,IAAE;AAAE,MAAG,MAAI,aAAY;AAAC,QAAG,EAAE,UAAQ,YAAY,QAAO,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,IAAC,CAAC;AAAE,QAAI,IAAE,GAAG,EAAE,KAAK,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,UAAS,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,MAAK,GAAE,MAAK,EAAC,GAAE,SAAQA,IAAC,CAAC;AAAE,WAAO,EAAE,QAAQ,GAAEA,IAAE,YAAY,EAAE,MAAM,GAAE;AAAA,EAAC;AAAC,MAAG,EAAE,UAAQ,aAAY;AAAC,QAAI,IAAE,GAAG,EAAC,QAAO,EAAC,OAAM,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,WAAOA,IAAE,YAAY,EAAE,MAAM,GAAE;AAAA,EAAC;AAAC,MAAG,CAAC,EAAE,gBAAgB,EAAE,OAAM,CAAC,GAAE;AAAC,QAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,IAAC,CAAC;AAAE,WAAM,EAAC,QAAO,EAAE,QAAO,OAAM,EAAE,OAAM,OAAM,EAAC;AAAA,EAAC;AAAC,MAAGA,IAAE,mBAAmB,CAAC,CAAC,CAAC,GAAE;AAAC,QAAI,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,QAAO,CAAC,GAAE,GAAE,CAAC,IAAE,GAAG,GAAE,EAAE,OAAM,EAAE,OAAM,CAAC;AAAE,WAAOA,IAAE,eAAe,GAAE,GAAE,CAAC;AAAA,EAAC;AAAC,MAAG,MAAI,QAAQ,QAAO,GAAG,GAAEA,GAAC;AAAE,MAAG,MAAI,QAAO;AAAC,QAAI,IAAEA,IAAE,eAAe,CAAC,GAAE,QAAO,EAAE,uBAAuB,QAAO,CAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,GAAE,GAAE,EAAC,GAAE,SAAQA,IAAC,CAAC;AAAE,WAAOA,IAAE,YAAY,EAAE,MAAM,GAAE;AAAA,EAAC;AAAC,QAAM,IAAI,MAAM,iCAAiC,EAAE,KAAK,OAAO,CAAC,EAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,GAAE;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,EAAE,MAAK,eAAc,GAAE,CAAC;AAA3C,IAA6C,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,WAAS,+BAA8B,KAAK,gBAAc,GAAE,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,kBAAgB,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,eAAc,CAAC,KAAK,eAAc,GAAE,CAAC,CAAC,GAAE,KAAK,YAAU;AAAA,EAAU;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,QAC/6E,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASb;AAAC;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,WAAS,+BAA8B,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,YAAU;AAAA,EAAM;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,QACxT,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUb;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,cAAa,GAAE,cAAa,EAAC,IAAE,GAAE,GAAE,IAAE,CAAC,EAAC,MAAK,WAAU,MAAK,CAAC,CAAC,EAAC,GAAE,EAAC,MAAK,WAAU,MAAK,CAAC,CAAC,EAAC,CAAC;AAAE,SAAO,EAAE,cAAc,EAAE,KAAK,IAAE,MAAI,IAAE,IAAE,IAAI,GAAG,EAAE,KAAK,IAAE,IAAE,IAAI,GAAG,EAAE,KAAK,GAAEC,IAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,cAAY,CAAC,GAAE,KAAK,gBAAc,CAAC,QAAO,MAAM,GAAE,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,YAAU;AAAA,EAAY;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,MACjnB,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWb;AAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,SAAM,EAAC,QAAO,EAAE,QAAO,OAAM,EAAE,OAAM,OAAMA,IAAE,MAAK;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,IAAEC,IAAE,UAAU,IAAI,EAAE,MAAM,GAAE,IAAE,IAAI,GAAG,EAAE,KAAK,GAAE,IAAE,CAAC,GAAG,GAAE,EAAE,mBAAmB,IAAI,GAAE,GAAG,GAAE,EAAE,mBAAmB,IAAI,CAAC;AAAE,SAAOA,IAAE,iBAAiB,GAAE,GAAE,EAAE,CAAC,EAAE,KAAK;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,WAAS,IAAG,KAAK,gBAAc,GAAE,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,EAAE,gBAAgB,GAAE,CAAC,GAAE,KAAK,gBAAc,EAAE,IAAI,CAACA,KAAE,MAAI,IAAI,CAAC,EAAE,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,eAAc,CAAC,KAAK,eAAc,GAAE,CAAC,CAAC,GAAE,KAAK,eAAa,EAAE,SAAO;AAAE,aAAQA,MAAE,GAAEA,MAAE,KAAK,cAAaA,MAAI,MAAK,YAAU,SAASA,GAAC;AAAU,SAAK,YAAU;AAAA,EAAQ;AAAA,EAAC,cAAa;AAAC,QAAI,IAAE,CAAC;AAAE,QAAG,KAAK,eAAa,GAAE;AAAC,QAAE,KAAK,qFAAqF;AAAE,eAAQ,IAAE,GAAE,IAAE,KAAK,cAAa,IAAI,GAAE,KAAK,gCAAgC,CAAC,CAAC,CAAC,gDAAgD,CAAC,4BAA4B,IAAE,CAAC,OAAO;AAAE,UAAI,IAAE,KAAK,cAAa,IAAE,KAAK,eAAa;AAAE,QAAE,KAAK,oDAAoD,CAAC,4BAA4B,CAAC,OAAO;AAAA,IAAC,MAAM,GAAE,KAAK,uDAAuD;AAAE,WAAM;AAAA,QAC7xC,EAAE,OAAO,CAAC;AAAA,6BACW,KAAK,aAAa;AAAA,oCACX,KAAK,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAMxC,EAAE,KAAK;AAAA,SACZ,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,EAIL;AAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,OAAM,EAAC,IAAE,GAAE,IAAEC,IAAE,UAAU,IAAI,EAAE,MAAM;AAAE,SAAO,GAAG,EAAC,QAAO,EAAC,GAAE,EAAE,mBAAmB,KAAI,GAAE,SAAQA,IAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAED,IAAE,CAAC,EAAE;AAAM,MAAG,MAAI,aAAY;AAAC,QAAI,IAAEA,IAAE,IAAI,OAAG,GAAG,EAAC,QAAO,EAAC,OAAM,EAAC,GAAE,SAAQC,IAAC,CAAC,CAAC,GAAE,IAAED,IAAE,IAAI,OAAG,GAAG,EAAC,QAAO,EAAC,OAAM,EAAC,GAAE,SAAQC,IAAC,CAAC,CAAC,GAAE,IAAE,GAAG,GAAE,GAAEA,GAAC,GAAE,IAAE,GAAG,GAAE,GAAEA,GAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,MAAK,GAAE,MAAK,EAAC,GAAE,SAAQA,IAAC,CAAC;AAAE,WAAO,EAAE,QAAQ,OAAGA,IAAE,YAAY,EAAE,MAAM,CAAC,GAAE,EAAE,QAAQ,OAAGA,IAAE,YAAY,EAAE,MAAM,CAAC,GAAEA,IAAE,YAAY,EAAE,MAAM,GAAEA,IAAE,YAAY,EAAE,MAAM,GAAE;AAAA,EAAC;AAAC,MAAI,IAAEA,IAAE,mBAAmBD,GAAC;AAAE,MAAG,MAAI,aAAW,IAAE,OAAI,GAAE;AAAC,QAAI,IAAEA,IAAE,IAAI,OAAG;AAAC,UAAI,IAAE,CAAC,IAAG,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC,CAAC,CAAC;AAAE,aAAO,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAA,IAAC,CAAC,GAAE,IAAE,EAAE,IAAI,QAAI,EAAC,MAAKA,IAAE,SAAS,EAAE,MAAM,GAAE,OAAM,EAAE,MAAK,EAAE,GAAE,IAAE,EAAE,gBAAgB,EAAE,IAAI,OAAG,EAAE,KAAK,GAAE,CAAC,GAAE,IAAE,EAAE,CAAC,EAAE,MAAM,CAAC,MAAI,GAAE,IAAE,GAAG,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,gBAAgBD,IAAE,IAAI,OAAG,EAAE,KAAK,GAAE,CAAC,GAAE,IAAEC,IAAE,eAAe,GAAE,GAAE,CAAC;AAAE,WAAO,EAAE,QAAQ,OAAGA,IAAE,YAAY,EAAE,MAAM,CAAC,GAAE;AAAA,EAAC;AAAC,MAAI,IAAEA,IAAE,OAAO,OAAO,kCAAgC;AAAE,MAAGD,IAAE,SAAO,GAAE;AAAC,QAAI,IAAE,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAEA,IAAE,QAAO,KAAG,GAAE;AAAC,UAAI,IAAEA,IAAE,MAAM,GAAE,IAAE,CAAC;AAAE,QAAE,KAAK,GAAG,GAAE,GAAEC,GAAC,CAAC;AAAA,IAAC;AAAC,QAAI,IAAE,GAAG,GAAE,GAAEA,GAAC;AAAE,aAAQ,KAAK,EAAE,CAAAA,IAAE,YAAY,EAAE,MAAM;AAAE,WAAO;AAAA,EAAC;AAAC,MAAG,EAAC,WAAU,GAAE,UAAS,EAAC,IAAE,IAAID,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,IAAI,OAAG,EAAE,KAAK,GAAE,IAAE,IAAI,GAAG,CAAC,GAAE,IAAE,CAAC,GAAE,IAAE,IAAI,MAAM,EAAE,SAAO,CAAC;AAAE,MAAG,EAAE,SAAO,GAAE;AAAC,MAAE,CAAC,IAAE,EAAE,CAAC,EAAE,CAAC,GAAE,EAAE,KAAK,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,CAAC,CAAC,EAAC,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,IAAI,GAAE,CAAC,IAAE,EAAE,IAAE,CAAC,IAAE,EAAE,CAAC,EAAE,CAAC,GAAE,EAAE,KAAK,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,CAAC,CAAC,EAAC,CAAC;AAAA,EAAC;AAAC,MAAI,IAAEA,IAAE,iBAAiB,GAAE,GAAE,EAAE,CAAC,EAAE,OAAM,CAAC;AAAE,IAAE,QAAQ,OAAGA,IAAE,YAAY,EAAE,MAAM,CAAC;AAAE,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,SAAOA,IAAE,YAAY,EAAE,MAAM,GAAE;AAAC;AAAC,SAAS,IAAID,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,EAAE,gBAAgBD,IAAE,IAAI,OAAG,EAAE,KAAK,GAAE,CAAC;AAAE,SAAM,EAAC,WAAUA,IAAE,IAAI,OAAG,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,OAAM,CAAC,EAAE,cAAc,EAAE,MAAM,MAAM,GAAE,CAAC,CAAC,GAAE,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC,CAAC,CAAC,EAAC,EAAC,CAAC,CAAC,GAAE,UAAS,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,MAAK,EAAC,IAAE,GAAE,IAAE,EAAE,eAAe,GAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAE,IAAE,EAAE,IAAI,OAAG,EAAE,KAAK;AAAE,IAAE,uBAAuB,GAAE,CAAC;AAAE,MAAI,IAAE,EAAE,gBAAgB,EAAE,IAAI,OAAG,EAAE,KAAK,GAAE,CAAC;AAAE,MAAG,EAAE,cAAc,CAAC,MAAI,EAAE,QAAOC,IAAE,eAAe,GAAE,EAAE,CAAC,EAAE,OAAM,CAAC,CAAC;AAAE,MAAI,IAAE,EAAE,OAAO,OAAG,EAAE,cAAc,EAAE,KAAK,IAAE,CAAC;AAAE,SAAO,EAAE,WAAS,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAE,CAAC,EAAC,GAAE,SAAQA,IAAC,CAAC,IAAE,GAAG,GAAE,GAAEA,GAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,GAAE;AAAE,SAAS,IAAID,KAAE,GAAEC,KAAE,GAAE,IAAE,OAAG,IAAE,MAAK,IAAE,OAAG,IAAE,GAAE,IAAE,GAAE,IAAE,GAAE;AAAC,MAAI,IAAE,OAAG;AAAC,YAAO,GAAE;AAAA,MAAC,KAAK;AAAE,eAAM;AAAA,MAA4B,KAAK;AAAE,eAAM;AAAA,MAAgE,KAAK;AAAE,eAAM;AAAA,MAAsC;AAAQ,cAAM,IAAI,MAAM,oBAAoB,CAAC,oBAAoB;AAAA,IAAC;AAAA,EAAC,GAAE,IAAE,OAAG;AAAC,YAAO,GAAE;AAAA,MAAC,KAAK;AAAE,eAAM;AAAA,MAAiD,KAAK;AAAE,eAAM;AAAA,MAA6D;AAAQ,cAAM,IAAI,MAAM,oBAAoB,CAAC,oBAAoB;AAAA,IAAC;AAAA,EAAC,GAAE,IAAED,MAAE;AAAA;AAAA,UAE3sF;AAAA;AAAA,SAEA,IAAEA,MAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAMJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAMA,IAAEA,MAAE,uBAAqB,sBAAqB,IAAEA,MAAE,uBAAqB,sBAAqB,IAAEA,MAAE,QAAM,OAAM,IAAEA,MAAE,QAAM,OAAM,IAAE;AAAA;AAAA,uBAE/GA,MAAE,yBAAuB,sBAAsB;AAAA,qBACjD,CAAC;AAAA,qBACD,CAAC;AAAA;AAAA,mBAEH,CAAC;AAAA,mBACD,CAAC;AAAA;AAAA;AAAA,kBAGF,CAAC;AAAA,sBACG,GAAG,CAAC,CAAC;AAAA;AAAA;AAAA,gCAGK,CAAC,2BAA2B,CAAC;AAAA,UACnD,CAAC;AAAA;AAAA,UAED,EAAE,CAAC,CAAC;AAAA;AAAA,wBAES,IAAEA,MAAE,KAAG,IAAE;AAAA,QACxB,CAAC,KAAG;AAAA;AAAA,UAEF,CAAC;AAAA;AAAA,eAEI,GAAG,CAAC,CAAC,WAAS,KAAGC,MAAE;AAAA,QAC1B,CAAC,KAAG;AAAA;AAAA,UAEF,CAAC;AAAA;AAAA,eAEI,GAAG,CAAC,CAAC,UAAS,IAAE,GAAG,EAAE,CAAC,CAAC,IAAG,IAAE,GAAG,CAAC,GAAE,IAAED,MAAE,GAAG,CAAC,IAAE,GAAG,CAAC,GAAE,IAAEA,MAAE,GAAG,CAAC,IAAE,GAAG,CAAC;AAAE,SAAM;AAAA,QAC/E,GAAG,GAAE,GAAE,MAAI,GAAE,CAAC,CAAC;AAAA,yDACkC,CAAC;AAAA,UAChDA,MAAE,IAAE,CAAC;AAAA;AAAA;AAAA,yDAG0C,CAAC;AAAA,UAChDA,MAAE,IAAE,CAAC;AAAA;AAAA;AAAA,gEAGiD,CAAC;AAAA;AAAA;AAAA;AAAA,yBAIxCA,MAAE,yBAAuB,sBAAsB;AAAA,UAC9D,CAAC;AAAA,UACD,GAAG,GAAE,CAAC,CAAC;AAAA;AAAA;AAAA;AAGT;AAAC,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEC,KAAE,GAAE,GAAE,IAAE,OAAG,IAAE,MAAK,IAAE,OAAG,IAAE,OAAG;AAAC,SAAK,gBAAc,CAAC,KAAI,GAAG,GAAE,KAAK,WAAS,2IAA0I,KAAK,cAAY,EAAE,UAAS,KAAK,iBAAe,EAAE,eAAa,gBAAe,KAAK,WAAS,EAAE,aAAW,MAAI,KAAG,EAAE,aAAW,MAAI,MAAI,KAAK,kBAAgB,EAAE,WAAS,MAAI,KAAG,CAAC,KAAK,mBAAiB,EAAE,cAAY,MAAI,GAAE,KAAK,iBAAe,KAAK,iBAAe,EAAC,GAAE,CAAC,CAAC,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,CAAC,EAAC,IAAE,EAAC,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,CAAC,GAAE,GAAE,CAAC,CAAC,EAAC,GAAE,KAAK,gBAAc,GAAG,KAAK,gBAAe,KAAK,aAAY,KAAK,MAAM,GAAE,KAAK,oBAAkB,GAAG,KAAK,gBAAe,KAAK,aAAY,KAAK,MAAM,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,eAAc,KAAK,iBAAiB,GAAE,KAAK,UAAQ,KAAK,kBAAgB,GAAE,KAAK,kBAAgB,EAAE,aAAW,MAAI,KAAG,KAAK,mBAAiB,GAAE,KAAK,qBAAmB,CAAC,GAAE,CAAC,MAAI,KAAK,mBAAiB,GAAE,KAAK,qBAAmB,CAAC,GAAE,CAAC,IAAG,MAAI,KAAK,cAAc,KAAK,MAAM,GAAE,KAAK,mBAAmB,KAAK,CAAC,IAAG,MAAI,KAAK,cAAc,KAAK,wBAAwB,GAAE,KAAK,mBAAmB,KAAK,CAAC,OAAK,KAAK,mBAAiB,KAAK,kBAAkB,CAAC,GAAE,KAAG,KAAK,cAAc,KAAK,MAAM,GAAE,KAAG,KAAK,cAAc,KAAK,wBAAwB,IAAG,KAAK,4BAA0B,GAAE,KAAK,UAAQ,GAAE,KAAK,aAAW,GAAE,KAAK,4BAA0B,GAAE,KAAK,aAAW,KAAK,cAAc,CAAC,IAAE,KAAK,kBAAkB,CAAC,GAAE,KAAK,aAAW,KAAK,cAAc,CAAC,IAAE,KAAK,kBAAkB,CAAC,GAAE,KAAK,YAAU,KAAK,IAAI,KAAK,cAAc,CAAC,IAAE,KAAK,kBAAiB,KAAK,cAAc,CAAC,CAAC,GAAE,KAAK,YAAUA,MAAE,KAAK,eAAa,GAAE,KAAK,YAAU,IAAE,KAAK,eAAa,GAAE,KAAK,WAAS,IAAE,KAAK,cAAY,GAAE,KAAK,YAAU,YAAY,KAAK,iBAAiB,IAAI,KAAK,UAAU,KAAK,KAAK,SAAS,IAAI,KAAK,SAAS,IAAI,KAAK,QAAQ,IAAI,KAAK,MAAM,IAAI,KAAK,gBAAgB,IAAI,KAAK,cAAc,IAAI,KAAK,yBAAyB;AAAA,EAAE;AAAA,EAAC,cAAa;AAAC,QAAI,IAAE,KAAK,SAAO,GAAG,KAAK,mBAAkB,KAAK,eAAc,CAAC,KAAK,gBAAe,KAAK,SAAS,IAAE,GAAG,KAAK,mBAAkB,KAAK,eAAc,CAAC,KAAK,gBAAe,KAAK,WAAU,OAAG,MAAK,KAAK,yBAAyB,GAAEA,MAAE,KAAK,SAAO,CAAC,KAAK,kBAAiB,GAAE,CAAC,IAAE,CAAC,GAAE,GAAE,CAAC;AAAE,WAAM;AAAA,MAC9pE,IAAI,KAAK,gBAAe,KAAK,WAAU,KAAK,WAAU,KAAK,UAAS,KAAK,SAAQ,KAAK,YAAW,KAAK,2BAA0BA,IAAE,CAAC,GAAEA,IAAE,CAAC,GAAEA,IAAE,CAAC,CAAC,CAAC;AAAA,MAC/I,CAAC;AAAA;AAAA,EACJ;AAAC;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,MAAE,OAAG,IAAE,MAAK,IAAE,OAAG;AAAC,SAAK,gBAAc,CAAC,KAAI,GAAG,GAAE,KAAK,WAAS,qFAAoF,KAAK,gBAAc,CAAC,GAAE,GAAE,CAAC,GAAE,KAAK,cAAY,EAAE,UAAS,KAAK,iBAAe,EAAE,eAAa,gBAAe,KAAK,iBAAe,KAAK,iBAAe,EAAC,GAAE,CAAC,CAAC,GAAE,GAAE,CAAC,CAAC,GAAE,GAAE,CAAC,GAAE,CAAC,EAAC,IAAE,EAAC,GAAE,CAAC,CAAC,GAAE,GAAE,CAAC,CAAC,GAAE,GAAE,CAAC,GAAE,CAAC,EAAC,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,UAAQA,KAAE,KAAK,aAAW,GAAE,KAAK,4BAA0B,GAAEA,OAAG,KAAK,cAAc,KAAK,MAAM,GAAE,KAAG,KAAK,cAAc,KAAK,wBAAwB,GAAE,KAAK,YAAU,eAAe,KAAK,UAAU,IAAI,KAAK,cAAc;AAAA,EAAE;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,SACpqB,GAAG,KAAK,YAAW,KAAK,2BAA0B,OAAG,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAkBxC,KAAK,iBAAe,sCAAoC,mCAAmC;AAAA;AAAA;AAAA,aAGtG,GAAG,KAAK,SAAQ,KAAK,UAAU,CAAC;AAAA;AAAA;AAAA;AAAA,SAIpC,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA,4BAGS,KAAK,iBAAe,eAAa,YAAY;AAAA,wBACjD,KAAK,iBAAe,eAAa,YAAY;AAAA,wBAC7C,KAAK,iBAAe,eAAa,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iDAMpB,KAAK,iBAAe,wBAAsB,qBAAqB;AAAA,iBAC/F,KAAK,iBAAe,kDAAgD,+CAA+C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQ9H;AAAC;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,WAAS;AAAA,2BACpD,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,iBAAeA,KAAE,KAAK,YAAU,UAAU,KAAK,cAAc;AAAA,EAAE;AAAA,EAAC,cAAa;AAAC,QAAI,IAAE,KAAK,iBAAe,IAAE,GAAEA,MAAE,KAAK,iBAAe,IAAE,GAAE,IAAE,KAAK,iBAAe,cAAY,aAAY,IAAE,KAAK,iBAAe,cAAY,aAAY,IAAE,KAAK,iBAAe,gCAA8B;AAA8B,WAAM;AAAA,MAChgB,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA,oBAII,CAAC;AAAA,oBACD,CAAC;AAAA;AAAA;AAAA;AAAA,oCAIe,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sCAMCA,GAAC;AAAA,sBACjB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMnB;AAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAED,IAAE;AAAO,SAAOC,OAAG,IAAE,IAAE,CAAC,GAAGD,IAAE,MAAM,GAAE,EAAE,GAAEA,IAAEC,MAAE,CAAC,IAAED,IAAEC,MAAE,CAAC,GAAED,IAAEC,MAAE,CAAC,CAAC,IAAE,CAAC,GAAGD,IAAE,MAAM,GAAE,EAAE,GAAEA,IAAEC,MAAE,CAAC,GAAED,IAAEC,MAAE,CAAC,IAAED,IAAEC,MAAE,CAAC,CAAC,IAAE,CAAC,KAAGA,QAAI,KAAGD,IAAE,CAAC,IAAE,IAAE,CAACA,IAAE,CAAC,GAAE,CAAC,IAAE;AAAI;AAAC,SAAS,IAAI,EAAC,GAAEA,KAAE,QAAO,GAAE,UAASC,KAAE,SAAQ,GAAE,MAAK,IAAE,MAAK,wBAAuB,IAAE,MAAK,gBAAe,IAAE,GAAE,YAAW,IAAE,KAAI,GAAE;AAAC,MAAI,IAAEA,IAAE,eAAa,gBAAe,IAAE,CAAC,GAAE,IAAE,OAAG,IAAE,KAAGA,IAAE,iBAAeA,IAAE,YAAUA,IAAE,gBAAcA,IAAE,WAASA,IAAE,QAAQ,SAAO,SAAQ,IAAE,CAAC,GAAE,GAAE;AAAE,MAAG,GAAE;AAAC,QAAI,IAAEA,IAAE,WAASA,IAAE,UAAQA,IAAE;AAAW,QAAE,GAAG,EAAC,QAAO,EAAC,GAAED,IAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,CAAC,GAAEC,IAAE,WAAU,CAAC,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,CAAC,GAAE,GAAEA,IAAE,WAAW,EAAC,EAAC,CAAC;AAAA,EAAC,MAAM,KAAE,GAAG,EAAC,QAAO,EAAC,GAAED,IAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,IAAE,CAACC,IAAE,WAAUA,IAAE,WAASA,IAAE,SAAQA,IAAE,UAAU,IAAE,CAACA,IAAE,WAAUA,IAAE,YAAWA,IAAE,WAASA,IAAE,OAAO,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,CAAC,GAAEA,IAAE,YAAWA,IAAE,WAAW,EAAC,EAAC,CAAC;AAAE,MAAG,EAAE,KAAK,CAAC,GAAE,EAAE,KAAK,CAAC,GAAE,KAAG,MAAK;AAAC,QAAI,IAAE,GAAG,EAAE,OAAM,CAAC;AAAE,SAAG,SAAO,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,EAAE,KAAK,CAAC;AAAA,EAAE;AAAC,MAAG,KAAG,MAAK;AAAC,QAAI,IAAE,GAAG,EAAE,OAAM,CAAC;AAAE,SAAG,SAAO,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,EAAE,KAAK,CAAC;AAAA,EAAE;AAAC,MAAI,IAAE,GAAG,EAAC,GAAE,IAAE,IAAE,GAAE,GAAE,IAAE,IAAE,GAAE,YAAW,GAAE,YAAW,GAAE,SAAQ,GAAE,MAAK,GAAE,YAAW,GAAE,wBAAuB,GAAE,gBAAe,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAMA,IAAE,SAAQ,EAAC,CAAC;AAAE,IAAE,KAAK,CAAC;AAAE,WAAQ,KAAK,EAAE,GAAE,YAAY,EAAE,MAAM;AAAE,SAAO;AAAC;AAAC,SAAS,IAAI,EAAC,GAAED,KAAE,QAAO,GAAE,UAASC,KAAE,SAAQ,GAAE,MAAK,IAAE,MAAK,wBAAuB,IAAE,MAAK,gBAAe,IAAE,GAAE,YAAW,IAAE,KAAI,GAAE;AAAC,MAAG,EAAC,aAAY,GAAE,cAAa,GAAE,YAAW,GAAE,aAAY,GAAE,cAAa,GAAE,SAAQ,GAAE,UAAS,GAAE,WAAU,GAAE,eAAc,GAAE,gBAAe,GAAE,YAAW,EAAC,IAAEA,KAAE,IAAE,MAAI,gBAAe,IAAE,IAAE,IAAE,GAAE,IAAE,IAAE,GAAE,IAAE,IAAE,CAACA,IAAE,WAAU,GAAE,CAAC,IAAE,CAACA,IAAE,WAAU,GAAE,CAAC,GAAE,IAAE,IAAI,GAAG,GAAE,CAAC,GAAE,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,KAAI,EAAE,IAAI,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,GAAE,CAAC,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,GAAE,CAAC,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,CAAC,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,IAAE,CAAC,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,CAAC,EAAC,CAAC,GAAE,IAAE,EAAE,iBAAiB,GAAE,CAACD,GAAC,GAAEA,IAAE,OAAM,CAAC,GAAE,IAAE,CAAC;AAAE,IAAE,KAAK,CAAC;AAAE,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,CAAC,GAAE,GAAE,EAAE,EAAC,EAAC,CAAC;AAAE,MAAG,EAAE,KAAK,CAAC,GAAE,KAAG,MAAK;AAAC,QAAI,IAAE,GAAG,EAAE,OAAM,CAAC;AAAE,SAAG,SAAO,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,EAAE,KAAK,CAAC;AAAA,EAAE;AAAC,MAAG,KAAG,MAAK;AAAC,QAAI,IAAE,GAAG,EAAE,OAAM,CAAC;AAAE,SAAG,SAAO,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,EAAE,KAAK,CAAC;AAAA,EAAE;AAAC,MAAI,IAAE,GAAG,EAAC,GAAE,IAAE,IAAE,GAAE,GAAE,IAAE,IAAE,GAAE,YAAW,CAAC,GAAE,YAAW,OAAG,SAAQ,GAAE,MAAK,GAAE,YAAW,GAAE,wBAAuB,GAAE,gBAAe,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAMC,IAAE,SAAQ,EAAC,CAAC;AAAE,IAAE,KAAK,CAAC;AAAE,WAAQ,KAAK,EAAE,GAAE,YAAY,EAAE,MAAM;AAAE,SAAO;AAAC;AAAC,SAAS,GAAG,EAAC,GAAED,KAAE,QAAO,GAAE,UAASC,KAAE,SAAQ,GAAE,MAAK,IAAE,MAAK,wBAAuB,IAAE,MAAK,gBAAe,IAAE,GAAE,YAAW,IAAE,KAAI,GAAE;AAAC,MAAI,IAAE,KAAG,MAAK,IAAE,KAAG,MAAK,IAAEA,IAAE,eAAa,gBAAe,IAAE,KAAGA,IAAE,iBAAeA,IAAE,YAAUA,IAAE,gBAAcA,IAAE,WAASA,IAAE,QAAQ,SAAO,SAAQ,IAAE,EAAE,EAAE,QAAQ,+BAA+B;AAAE,MAAG,CAAC,MAAI,KAAGA,IAAE,iBAAe,KAAGA,IAAE,gBAAc,KAAGA,IAAE,mBAAiB,KAAGA,IAAE,kBAAgB,KAAGA,IAAE,iBAAe,KAAGA,IAAE,gBAAc,MAAIA,IAAE,QAAQ,SAAO,UAAQA,IAAE,QAAQ,SAAO,UAAU,QAAO,IAAI,EAAC,GAAED,KAAE,QAAO,GAAE,UAASC,KAAE,SAAQ,GAAE,MAAK,GAAE,YAAW,GAAE,wBAAuB,GAAE,gBAAe,EAAC,CAAC;AAAE,MAAI,IAAE,EAAE,EAAE,UAAU,oDAAoD,GAAE,IAAE,IAAE,KAAG,IAAE,EAAE,+BAA8B,IAAEA,IAAE,YAAU,KAAK,KAAKA,IAAE,YAAUA,IAAE,WAAS,EAAE,IAAE,KAAK,KAAKA,IAAE,cAAY,EAAE;AAAE,MAAG,EAAE,EAAE,QAAQ,oCAAoC,KAAG,KAAG,EAAE,QAAO,IAAI,EAAC,GAAED,KAAE,QAAO,GAAE,UAASC,KAAE,SAAQ,GAAE,MAAK,GAAE,wBAAuB,GAAE,gBAAe,GAAE,YAAW,EAAC,CAAC;AAAE,MAAI,GAAE,IAAE,CAACA,IAAE,QAAQ,KAAIA,IAAE,QAAQ,IAAI,GAAE,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,CAACA,IAAE,cAAaA,IAAE,WAAW,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,GAAG,CAAC,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAACA,IAAE,cAAaA,IAAE,WAAW,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAACA,IAAE,gBAAeA,IAAE,aAAa,EAAC,CAAC;AAAE,MAAG,EAAE,KAAE,IAAI,GAAGA,KAAE,GAAE,GAAE,CAAC;AAAA,OAAM;AAAC,QAAI,IAAE,IAAEA,IAAE,YAAUA,IAAE,WAASA,IAAE,aAAY,IAAE,IAAEA,IAAE,cAAYA,IAAE,YAAUA,IAAE,UAAS,IAAEA,IAAE,eAAaA,IAAE,cAAYA,IAAE;AAAW,MAAE,KAAK,EAAC,MAAK,SAAQ,MAAK,CAAC,CAAC,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,CAAC,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,CAAC,EAAC,CAAC;AAAE,QAAI,IAAE,EAAE,YAAY,QAAQ;AAAE,QAAE,IAAI,GAAGA,KAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAAC;AAAC,MAAI,IAAE,CAAC,GAAE,IAAE,CAACD,KAAE,CAAC;AAAE,QAAI,CAAC,KAAG,EAAE,MAAM,WAAS,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,CAAC,EAAE,MAAM,CAAC,GAAE,GAAE,CAAC,EAAC,EAAC,CAAC,GAAE,EAAE,KAAK,CAAC,IAAG,EAAE,KAAK,CAAC,IAAG,MAAI,CAAC,KAAG,EAAE,MAAM,WAAS,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,CAAC,EAAE,MAAM,CAAC,GAAE,GAAE,CAAC,EAAC,EAAC,CAAC,GAAE,EAAE,KAAK,CAAC,IAAG,EAAE,KAAK,CAAC,IAAG,MAAI,gBAAc,EAAE,KAAK,EAAC,MAAK,WAAU,MAAK,CAAC,CAAC,EAAC,CAAC,GAAE,EAAE,YAAU;AAAiB,MAAI,IAAE,EAAE,iBAAiB,GAAE,GAAEA,IAAE,OAAM,CAAC;AAAE,WAAQ,KAAK,EAAE,GAAE,YAAY,EAAE,MAAM;AAAE,SAAO;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,OAAMC,KAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,QAAO,EAAC,IAAE,GAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,YAAW,GAAE,WAAU,GAAE,iBAAgB,EAAC,IAAEC,KAAE,IAAE,EAAE,wBAAwB,CAAC,GAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,OAAG,CAAC;AAAE,SAAO,GAAG,EAAC,GAAE,GAAE,QAAO,GAAE,UAAS,GAAE,SAAQ,EAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,MAAK,GAAG,GAAE,KAAK,WAAS,2FAA0F,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,OAAG,KAAK,SAAO,OAAG,KAAK,gBAAc,GAAE,KAAK,cAAY,EAAE,SAAQ,KAAK,iBAAe,EAAE,eAAa,gBAAe,KAAK,SAAO,KAAK,kBAAgB,EAAE,cAAY,MAAI,KAAG,EAAE,aAAW,MAAI,GAAE,KAAK,UAAQ,KAAK,gBAAc,GAAE,KAAK,kBAAgB,GAAE,KAAK,gBAAc,CAAC,GAAE,GAAE,CAAC,GAAE,KAAK,iBAAe,EAAC,GAAE,CAAC,CAAC,GAAE,GAAE,CAAC,CAAC,GAAE,GAAE,CAAC,GAAE,CAAC,EAAC,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,eAAc,CAAC,GAAE,KAAK,eAAc,CAAC,CAAC,MAAI,KAAK,OAAK,MAAG,KAAK,gBAAc,GAAE,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,IAAG,KAAK,YAAU,kBAAkB,KAAK,cAAc,IAAI,KAAK,MAAM,IAAI,KAAK,aAAa;AAAA,EAAE;AAAA,EAAC,cAAa;AAAC,QAAI,IAAE,KAAK,iBAAe,IAAE,GAAEA,MAAE,KAAK,iBAAe,IAAE,GAAE,IAAE,KAAK,iBAAe,IAAE,GAAE,IAAE;AAAA,MAC99K,EAAE,CAAC;AAAA;AAAA;AAAA,kCAGyB,KAAK,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sCAOd,KAAK,aAAa;AAAA,4BAC5B,KAAK,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4BAgFlB,KAAK,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOxC,WAAO,KAAK,SAAO;AAAA,MACnB,CAAC;AAAA,QACD;AAAA,MACA,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA,0BAIU,CAAC;AAAA;AAAA,0CAEe,CAAC,aAAaA,GAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,6BA0B5B,KAAK,iBAAe,iCAA+B,8BAA8B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAS3G;AAAC;AA/I2gJ,IA+IzgJ,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,KAAI,IAAI,GAAE,KAAK,WAAS,2HAA0H,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,EAAE,aAAY,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,iBAAe,EAAE,eAAa,gBAAe,KAAK,YAAU,mBAAmB,KAAK,cAAc;AAAA,EAAE;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,MACrf,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAyBI,KAAK,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAepC;AAAC;AAxL2gJ,IAwLzgJ,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,KAAI,IAAI,GAAE,KAAK,WAAS;AAAA,wFACa,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,EAAE,aAAY,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,YAAU;AAAA,EAAiB;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,MAC/T,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAuCb;AAAC;AAjO2gJ,IAiOzgJ,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,MAAK,GAAG,GAAE,KAAK,WAAS;AAAA,4EACC,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,EAAE,SAAQ,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,YAAU;AAAA,EAAgB;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,MAC9S,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAoDb;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,IAAG,EAAC,IAAE,GAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,YAAW,GAAE,iBAAgB,GAAE,aAAY,EAAC,IAAE,GAAE,IAAE,EAAE,wBAAwB,CAAC,GAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,GAAE,OAAG,CAAC,GAAE,IAAE,IAAI,GAAG,CAAC,GAAE,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,QAAQ,KAAI,EAAE,QAAQ,IAAI,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,cAAa,EAAE,WAAW,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,SAAS,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,SAAS,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,QAAQ,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,QAAQ,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,OAAO,EAAC,CAAC;AAAE,SAAOC,IAAE,iBAAiB,GAAE,CAAC,GAAE,CAAC,GAAE,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,SAAS,IAAID,MAAE,GAAE;AAAC,MAAI,IAAE,OAAG;AAAC,YAAO,GAAE;AAAA,MAAC,KAAK;AAAE,eAAM;AAAA,MAA0D,KAAK;AAAE,eAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASnsB;AAAQ,cAAM,IAAI,MAAM,oBAAoB,CAAC,oBAAoB;AAAA,IAAC;AAAA,EAAC,GAAE,IAAE;AAAA,UAC3E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBASO,GAAGA,GAAC,CAAC;AAAA;AAAA;AAAA,iBAGL,GAAGA,GAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8DAOwCA,GAAC,IAAI;AAAA;AAAA,eAEpD,GAAGA,GAAC,CAAC;AAAS,SAAM;AAAA,qDACkB,GAAGA,GAAC,CAAC;AAAA,MACpD,CAAC;AAAA;AAAA;AAAA,qDAG8C,GAAGA,GAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QASlD,EAAEA,GAAC,CAAC;AAAA;AAAA,aAEC,GAAGA,GAAC,CAAC;AAAA;AAAA;AAAA,+DAG6C,GAAGA,GAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iEAQHA,GAAC;AAAA;AAAA;AAE9D;AAAC,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,KAAI,GAAG,GAAE,KAAK,WAAS,6IAA4I,KAAK,cAAY,EAAE,SAAQ,EAAE,OAAO,EAAE,eAAa,gBAAe,MAAI,6BAA6B,GAAE,KAAK,SAAO,EAAE,aAAW,MAAI,KAAG,EAAE,cAAY,MAAI,GAAE,KAAK,iBAAe,EAAC,GAAE,CAAC,CAAC,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,CAAC,EAAC,GAAE,KAAK,gBAAc,GAAG,KAAK,gBAAe,KAAK,aAAY,KAAK,MAAM,GAAE,KAAK,oBAAkB,GAAG,KAAK,gBAAe,KAAK,aAAY,KAAK,MAAM,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,eAAc,KAAK,iBAAiB,GAAE,KAAK,WAAS,KAAK,kBAAgB,GAAE,KAAK,qBAAmB,CAAC,GAAE,CAAC,IAAG,KAAK,YAAU,oBAAoB,KAAK,MAAM,IAAI,KAAK,iBAAiB;AAAA,EAAE;AAAA,EAAC,cAAa;AAAC,QAAI,IAAE,KAAK,SAAO,GAAG,KAAK,mBAAkB,KAAK,aAAa,IAAE,GAAG,KAAK,mBAAkB,KAAK,aAAa;AAAE,WAAM;AAAA,MAC15B,IAAI,KAAK,SAAO,IAAE,CAAC,CAAC;AAAA,MACpB,CAAC;AAAA;AAAA,EACF;AAAC;AAAE,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,IAAG,GAAE,QAAO,EAAC,IAAE,GAAE,EAAC,YAAW,GAAE,SAAQ,GAAE,KAAI,GAAE,YAAW,GAAE,iBAAgB,EAAC,IAAE,GAAE,IAAE,EAAE,wBAAwB,CAAC,GAAE,IAAE,EAAE,kBAAkB,GAAE,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,OAAG,CAAC,GAAE,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,cAAa,EAAE,WAAW,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,eAAa,IAAE,EAAE,QAAQ,KAAI,EAAE,cAAY,IAAE,EAAE,QAAQ,IAAI,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,cAAa,EAAE,WAAW,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,WAAU,EAAE,WAAU,EAAE,UAAS,EAAE,WAAW,EAAC,CAAC,GAAE;AAAE,MAAG,EAAE,EAAE,QAAQ,mCAAmC,KAAG,EAAE,eAAa,eAAe,KAAE,IAAI,GAAG,CAAC;AAAA,OAAM;AAAC,QAAE,IAAI,GAAG,CAAC;AAAE,QAAI,IAAE,EAAE,WAAS,EAAE,SAAQ,IAAE,EAAE,YAAW,IAAE,EAAE,eAAa,EAAE,cAAY,EAAE;AAAY,MAAE,KAAK,EAAC,MAAK,UAAS,MAAK,CAAC,CAAC,EAAC,GAAE,EAAC,MAAK,UAAS,MAAK,CAAC,CAAC,EAAC,GAAE,EAAC,MAAK,UAAS,MAAK,CAAC,CAAC,EAAC,CAAC;AAAA,EAAC;AAAC,SAAOC,IAAE,iBAAiB,GAAE,CAAC,GAAE,CAAC,GAAE,WAAU,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,KAAI,GAAG,GAAE,KAAK,WAAS,qFAAoF,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,EAAE,UAAS,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,YAAU;AAAA,EAAa;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,MAChuC,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiFV;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,QAAO,EAAC,IAAE,GAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,WAAU,EAAC,IAAE,GAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,CAAC,GAAE,IAAE,CAAC,EAAE,QAAQ,OAAM,EAAE,QAAQ,KAAI,EAAE,QAAQ,IAAI,GAAE,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,aAAY,EAAE,cAAa,EAAE,WAAW,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,GAAG,CAAC,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,aAAY,EAAE,cAAa,EAAE,WAAW,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,eAAc,EAAE,gBAAe,EAAE,aAAa,EAAC,CAAC,GAAE,IAAE,IAAI,GAAG,CAAC,GAAE,IAAE,GAAG,EAAE,OAAM,EAAE,KAAK;AAAE,SAAOC,IAAE,iBAAiB,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,IAAG,EAAC,IAAE,GAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,aAAY,EAAC,IAAE,GAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,IAAI,GAAG,CAAC,GAAE,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,QAAQ,OAAM,EAAE,QAAQ,KAAI,EAAE,QAAQ,IAAI,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,aAAY,EAAE,cAAa,EAAE,WAAW,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,SAAS,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,QAAQ,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,SAAS,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,QAAQ,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,OAAO,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,QAAQ,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,OAAO,EAAC,CAAC;AAAE,SAAOC,IAAE,iBAAiB,GAAE,CAAC,GAAE,CAAC,GAAE,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,IAAG,GAAE,QAAO,EAAC,IAAE,GAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,YAAW,EAAC,IAAE,GAAE,IAAE,EAAE,kBAAkB,GAAE,EAAE,OAAM,GAAE,GAAE,CAAC,GAAE,IAAE,IAAI,GAAG,CAAC,GAAE,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,aAAY,EAAE,cAAa,EAAE,WAAW,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,cAAY,IAAE,EAAE,QAAQ,OAAM,EAAE,eAAa,IAAE,EAAE,QAAQ,KAAI,EAAE,cAAY,IAAE,EAAE,QAAQ,IAAI,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,aAAY,EAAE,cAAa,EAAE,WAAW,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,QAAQ,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,SAAS,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,QAAQ,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,WAAW,EAAC,CAAC;AAAE,SAAOC,IAAE,iBAAiB,GAAE,CAAC,GAAE,CAAC,GAAE,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,EAAE,IAAG,CAAC;AAAzB,IAA2B,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,EAAE,KAAI,CAAC;AAA1B,IAA4B,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,SAAQ,SAAQ,QAAQ,GAAE,KAAK,WAAS,6BAA4B,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK;AAAG,QAAG,CAAC,CAAC,IAAEA;AAAE,SAAK,cAAY,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,CAAC,GAAE,CAAC,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,WAAS,MAAI,aAAW,IAAE,GAAE,KAAK,wBAAsB,KAAK,YAAY,CAAC,IAAE,GAAE,KAAK,uBAAqB,KAAK,YAAY,CAAC,IAAE,GAAE,KAAK,YAAU,iBAAiB,KAAK,QAAQ,IAAI,KAAK,qBAAqB,IAAI,KAAK,oBAAoB;AAAA,EAAE;AAAA,EAAC,cAAa;AAAC,QAAG,CAAC,GAAEA,GAAC,IAAE,CAAC,mCAAkC,iCAAiC,GAAE,CAAC,GAAE,GAAE,CAAC,IAAE,KAAK,wBAAsB,CAAC,IAAI,CAAC,qCAAoC,0BAAyB,MAAM,CAAC,0BAA0B,IAAE,CAAC,OAAM,OAAM,mBAAmB,CAAC,EAAE,GAAE,CAAC,GAAE,GAAE,CAAC,IAAE,KAAK,uBAAqB,CAAC,IAAIA,GAAC,qCAAoC,yBAAwB,MAAMA,GAAC,yBAAyB,IAAE,CAAC,OAAM,OAAM,mBAAmBA,GAAC,EAAE;AAAE,WAAM;AAAA,MACz6F,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA,iCAGiB,CAAC;AAAA,gCACF,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,6BAeJ,CAAC;AAAA,4BACF,CAAC;AAAA,qBACR,CAAC;AAAA,mCACa,CAAC;AAAA;AAAA;AAAA;AAAA,qBAIf,CAAC;AAAA,mCACaA,GAAC;AAAA;AAAA;AAAA;AAAA;AAAA,aAKvB,KAAK,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAuBrB;AAAC;AAAE,IAAI,MAAI,CAAAD,QAAG;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,GAAE,OAAM,GAAE,QAAO,EAAC,IAAE,GAAE,EAAC,UAAS,GAAE,QAAO,GAAE,oBAAmB,EAAC,IAAE,GAAE,IAAE,IAAI,GAAG,EAAE,MAAM,CAAC,GAAE,EAAE,OAAM,GAAE,CAAC,GAAE,IAAE,CAAC,EAAC,MAAK,WAAU,MAAK,CAAC,CAAC,EAAC,CAAC;AAAE,SAAOC,IAAE,iBAAiB,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,WAAU,CAAC;AAAC;AAAvO,IAAyO,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI;AAAA,CAAI,SAASD,KAAE;AAAC,EAAAA,IAAE,OAAK,KAAIA,IAAE,MAAI;AAAG,GAAG,OAAK,KAAG,CAAC,EAAE;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEC,KAAE,GAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,WAAS,gBAAe,KAAK,OAAK,MAAG,KAAK,gBAAc,CAAC,KAAI,GAAE,CAAC,GAAE,KAAK,cAAYA,KAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,YAAU,GAAE,KAAK,UAAQ,GAAE,KAAK,KAAG,GAAE,KAAK,YAAU,OAAO,KAAK,EAAE,IAAI,KAAK,SAAS,IAAI,KAAK,OAAO;AAAA,EAAE;AAAA,EAAC,cAAa;AAAC,QAAI,IAAE,KAAK,YAAY,QAAOA,MAAE,KAAK,OAAK,GAAG,OAAK,QAAM,OAAM,IAAE,KAAK,YAAUA,MAAE,QAAQ,GAAG,GAAE,UAAS,KAAK,EAAE,CAAC,KAAI,IAAE,KAAK,YAAY,KAAK,YAAY,SAAO,CAAC,GAAE,IAAE,IAAG,IAAE;AAAG,WAAO,KAAK,aAAW,IAAE,KAAK,UAAQ,UAAU,IAAE,CAAC,KAAG,YAAW,IAAE,KAAK,UAAQ,YAAU,cAAY,IAAE,KAAK,UAAQ,gBAAgB,CAAC,KAAG,eAAc,IAAE,KAAK,UAAQ,eAAa,eAAc;AAAA,QACpkC,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA,qBAIG,GAAG,GAAE,UAAS,KAAK,EAAE,CAAC;AAAA,qBACtB,CAAC;AAAA;AAAA,eAEP,CAAC;AAAA,uBACO,CAAC;AAAA,aACX,GAAG,GAAE,UAAS,KAAK,EAAE,CAAC;AAAA,iBAClB,KAAK,EAAE,UAAU,GAAG,GAAE,UAAS,KAAK,EAAE,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAKnD;AAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAGD,QAAI,EAAE,QAAM,GAAG,CAAC;AAAG,MAAGA,QAAI,EAAE,QAAM,GAAG,CAAC,OAAO,CAAC;AAAK,MAAGA,QAAI,EAAE,QAAM,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC;AAAK,MAAGA,QAAI,EAAE,QAAM,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;AAAK,QAAM,MAAM,cAAcC,GAAC,aAAaD,GAAC,uBAAuB;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAGD,QAAI,EAAE,QAAM,GAAG,CAAC;AAAG,MAAGA,QAAI,EAAE,QAAM,GAAG,CAAC;AAAK,MAAGA,QAAI,EAAE,QAAM,GAAG,CAAC;AAAK,MAAGA,QAAI,EAAE,QAAM,GAAG,CAAC;AAAK,QAAM,MAAM,cAAcC,GAAC,aAAaD,GAAC,uBAAuB;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE;AAAC,MAAI,IAAE,EAAE,MAAM,QAAO,IAAE,EAAE,mBAAmB,CAAC,CAAC,GAAE,CAAC,GAAE,IAAE;AAAE,OAAG,SAAO,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC;AAAG,MAAI,IAAE,EAAE,iBAAiB,GAAE,CAAC,EAAE,CAAC;AAAE,MAAG,MAAI,IAAE,EAAE,OAAM,IAAI,MAAM,oDAAoD,EAAE,MAAM,SAAO,CAAC,iBAAiB,CAAC,EAAE;AAAE,MAAI,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,IAAC,CAAC;AAAE,WAAQ,IAAE,GAAE,KAAG,KAAK,KAAK,KAAK,KAAK,CAAC,CAAC,IAAE,GAAE,KAAI;AAAC,QAAI,IAAE,IAAI,GAAGD,KAAE,EAAE,OAAM,OAAG,CAAC,GAAE,IAAE,GAAE,IAAE,CAAC,EAAC,MAAK,WAAU,MAAK,CAAC,CAAC,EAAC,CAAC;AAAE,QAAEC,IAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,EAAE,OAAM,CAAC,GAAEA,IAAE,YAAY,EAAE,MAAM;AAAA,EAAC;AAAC,MAAG,GAAE;AAAC,QAAI,IAAE,IAAI,GAAGD,KAAE,EAAE,OAAM,GAAE,CAAC,GAAE,IAAE,GAAE,IAAE,CAAC,EAAC,MAAK,WAAU,MAAK,CAAC,CAAC,EAAC,CAAC;AAAE,QAAEC,IAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,EAAE,OAAM,CAAC,GAAEA,IAAE,YAAY,EAAE,MAAM;AAAA,EAAC;AAAC,MAAG,KAAG,MAAK;AAAC,QAAI,IAAE,EAAE,uBAAuB,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC;AAAE,WAAOA,IAAE,YAAY,EAAE,MAAM,GAAEA,IAAE,YAAY,EAAE,MAAM,GAAE;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,MAAK,GAAE,WAAU,GAAE,SAAQ,EAAC,IAAE;AAAE,SAAO,GAAG,GAAG,MAAK,GAAEC,KAAE,GAAE,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,MAAK,GAAE,WAAU,GAAE,SAAQ,EAAC,IAAE;AAAE,SAAO,GAAG,GAAG,KAAI,GAAEC,KAAE,GAAE,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,SAAQ,EAAC,IAAE,GAAE,EAAC,MAAK,GAAE,cAAa,EAAC,IAAE,GAAE,IAAE,EAAE,MAAM,WAAS,GAAE,IAAE,EAAE,cAAc,EAAE,KAAK,IAAE,GAAE,IAAE,EAAE,OAAM,IAAE,IAAE,CAAC,EAAE,MAAM,CAAC,CAAC,IAAE,CAAC,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,GAAE,IAAE,IAAE,CAAC,CAAC,IAAE,CAAC,EAAE,MAAM,CAAC,GAAE,CAAC,GAAE,IAAE,GAAG,EAAC,SAAQC,KAAE,OAAM,EAAC,OAAM,GAAE,OAAM,GAAE,OAAM,EAAC,EAAC,CAAC,GAAE,IAAE,IAAI,GAAG,GAAE,GAAE,CAAC,GAAE,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,CAAC,CAAC,EAAC,CAAC,GAAE,IAAE,IAAE,CAAC,GAAE,CAAC,IAAE,CAAC,CAAC;AAAE,SAAOA,IAAE,iBAAiB,GAAE,GAAE,GAAE,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,WAAS,oBAAmB,KAAK,cAAY,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,YAAU,gBAAgBA,GAAC,IAAG,KAAK,aAAWA;AAAA,EAAC;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,QACzwE,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA,oBAIE,KAAK,qBAAqB,CAAC;AAAA,oBAC3B,KAAK,oBAAoB,CAAC;AAAA,oBAC1B,KAAK,oBAAoB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAOhC,KAAK,mBAAmB,CAAC;AAAA;AAAA;AAAA,sBAGjB,KAAK,uBAAuB,CAAC;AAAA;AAAA;AAAA;AAAA,EAG3C;AAAA,EAAC,uBAAsB;AAAC,WAAO,KAAK,eAAa,SAAO,cAAY;AAAA,EAAW;AAAA,EAAC,sBAAqB;AAAC,WAAO,KAAK,eAAa,SAAO,cAAY;AAAA,EAAW;AAAA,EAAC,sBAAqB;AAAC,WAAO,KAAK,eAAa,SAAO,cAAY;AAAA,EAAW;AAAA,EAAC,qBAAoB;AAAC,WAAO,KAAK,eAAa,SAAO,yBAAuB;AAAA,EAAsB;AAAA,EAAC,yBAAwB;AAAC,WAAO,KAAK,eAAa,SAAO,8BAA4B;AAAA,EAA2B;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,WAAU,GAAE,YAAW,EAAC,IAAE,GAAE,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,MAAI,SAAO,EAAE,MAAM,CAAC,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,MAAI,SAAO,EAAE,MAAM,CAAC,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,MAAI,SAAO,EAAE,MAAM,CAAC,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,IAAE,GAAE,IAAE,IAAE,GAAE,IAAE,KAAG,IAAE,IAAG,IAAE,MAAI,SAAO,CAAC,GAAE,GAAE,GAAE,CAAC,IAAE,CAAC,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,CAAC,CAAC,EAAC,CAAC,GAAE,IAAE,IAAI,GAAG,GAAE,CAAC;AAAE,SAAOC,IAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE,IAAE,OAAG,IAAE,MAAK,IAAE,OAAG;AAAC,SAAK,gBAAc,CAAC,KAAI,GAAG,GAAE,KAAK,WAAS,yCAAwC,KAAK,gBAAc,CAAC,IAAG,IAAG,CAAC,GAAE,KAAK,cAAY,GAAE,KAAK,iBAAe,EAAC,GAAE,CAAC,CAAC,GAAE,GAAE,CAAC,CAAC,GAAE,GAAE,CAAC,GAAE,CAAC,EAAC,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAG,KAAK,cAAc,KAAK,MAAM,GAAE,KAAG,KAAK,cAAc,KAAK,wBAAwB,GAAE,KAAK,UAAQ,GAAE,KAAK,aAAW,GAAE,KAAK,qBAAmB,GAAE,KAAK,eAAaA,KAAE,KAAK,cAAY,GAAE,KAAK,YAAU,iBAAiB,KAAK,UAAU,IAAI,KAAK,YAAY,IAAI,KAAK,WAAW;AAAA,EAAE;AAAA,EAAC,cAAa;AAAC,QAAI,IAAE,KAAK,cAAY,KAAK,cAAaA,MAAE,KAAK,cAAc,CAAC,IAAE,KAAK,cAAc,CAAC,IAAE,KAAK,cAAc,CAAC,GAAE,IAAE,KAAK,cAAc,CAAC,IAAE,KAAK,eAAa,GAAE,IAAE,KAAK,cAAc,CAAC,IAAE,KAAK,cAAY;AAAE,WAAM;AAAA,QAC1mD,GAAG,KAAK,YAAW,KAAK,oBAAmB,OAAG,CAAC,CAAC;AAAA;AAAA,kDAEN,CAAC,MAAM,CAAC;AAAA,kDACR,KAAK,WAAW,MAAM,KAAK,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAUjF,EAAE,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mDAewC,CAAC,2BAA2B,KAAK,cAAc,CAAC,CAAC;AAAA,qDAC/C,CAAC,2BAA2B,KAAK,cAAc,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAS5F,IAAEA,MAAE,gBAAgB,CAAC,MAAI,kBAAkB,CAAC,uBAAuBA,GAAC,GAAG;AAAA;AAAA;AAAA,gCAGjD,KAAK,WAAW;AAAA,gCAChB,KAAK,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gCAOhB,KAAK,YAAY;AAAA,kCACf,KAAK,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAMxC,GAAG,KAAK,SAAQ,KAAK,UAAU,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAKrC;AAAC;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,MAAE,OAAG,IAAE,MAAK,IAAE,OAAG;AAAC,SAAK,gBAAc,CAAC,KAAI,GAAG,GAAE,KAAK,WAAS,6DAA4D,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,gBAAc,GAAE,KAAK,kBAAgB,GAAE,KAAK,cAAY,EAAE,UAAS,KAAK,eAAa,KAAK,KAAK,KAAK,YAAY,CAAC,IAAE,KAAK,aAAa,IAAE,KAAK;AAAc,QAAI,IAAE,CAAC,KAAK,YAAY,CAAC,GAAE,KAAK,YAAY,CAAC,GAAE,KAAK,cAAa,KAAK,YAAY,CAAC,CAAC;AAAE,SAAK,iBAAe,EAAE,CAAC,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,GAAE,KAAK,eAAc,CAAC,KAAK,kBAAgB,KAAK,eAAc,GAAE,CAAC,CAAC,GAAE,EAAE,OAAO,EAAE,eAAa,gBAAe,MAAI,6BAA6B,GAAEA,OAAG,KAAK,cAAc,KAAK,MAAM,GAAE,KAAG,KAAK,cAAc,KAAK,wBAAwB,GAAE,KAAK,WAAS,GAAE,KAAK,UAAQA,KAAE,KAAK,aAAW,GAAE,KAAK,qBAAmB,GAAE,KAAK,YAAU,iBAAiB,CAAC,IAAI,KAAK,SAAS,YAAY,IAAI,KAAK,SAAS,WAAW,IAAI,KAAK,SAAS,YAAY,IAAI,KAAK,SAAS,WAAW,IAAI,KAAK,aAAa;AAAA,EAAE;AAAA,EAAC,cAAa;AAAC,QAAI,KAAG,KAAK,gBAAc,KAAG,KAAK,SAAS,cAAY,KAAK,SAAS,aAAYA,MAAE,KAAK,SAAS,cAAa,IAAE,KAAK,SAAS;AAAY,WAAM;AAAA,QACjmC,GAAG,KAAK,YAAW,KAAK,oBAAmB,MAAG,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAShD,EAAE,OAAO,CAAC;AAAA,8CAC4B,KAAK,eAAe;AAAA,sCAC5B,KAAK,eAAe;AAAA;AAAA,+CAEX,KAAK,aAAa;AAAA,sCAC3B,KAAK,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA,sDAKFA,GAAC,KAAK,CAAC;AAAA;AAAA;AAAA;AAAA,uCAItB,CAAC;AAAA,yCACC,KAAK,aAAa;AAAA,8BAC7B,KAAK,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA,gCAKhB,KAAK,SAAS,YAAY;AAAA;AAAA;AAAA,kCAGxB,CAAC;AAAA;AAAA;AAAA,oCAGC,KAAK,SAAS,WAAW;AAAA;AAAA,oCAEzB,KAAK,aAAa;AAAA,6CACT,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8BAMhB,KAAK,aAAa;AAAA;AAAA;AAAA;AAAA,cAIlC,GAAG,KAAK,SAAQ,KAAK,UAAU,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAKzC;AAAC;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,MAAE,OAAG,IAAE,MAAK,IAAE,OAAG;AAAC,SAAK,gBAAc,CAAC,KAAI,GAAG,GAAE,KAAK,WAAS;AAAA,uEAC1B,KAAK,gBAAc,CAAC,KAAI,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,EAAE,UAAS,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,iBAAe,EAAE,eAAa,gBAAeA,OAAG,KAAK,cAAc,KAAK,MAAM,GAAE,KAAG,KAAK,cAAc,KAAK,wBAAwB,GAAE,KAAK,WAAS,GAAE,KAAK,UAAQA,KAAE,KAAK,aAAW,GAAE,KAAK,qBAAmB,GAAE,KAAK,YAAU,aAAa,KAAK,UAAU,IAAI,KAAK,cAAc;AAAA,EAAE;AAAA,EAAC,cAAa;AAAC,QAAI,IAAE,KAAK,iBAAe,6BAA2B;AAA2B,WAAM;AAAA,QACnnB,GAAG,KAAK,YAAW,KAAK,oBAAmB,OAAG,CAAC,CAAC;AAAA;AAAA,QAEhD,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA,6CAI2B,KAAK,iBAAe,OAAK,IAAI;AAAA,4BAC9C,KAAK,iBAAe,IAAE,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,+BA4BpB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,+BAoBD,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAMlB,GAAG,KAAK,SAAQ,KAAK,UAAU,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,EAIzC;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,QAAO,EAAC,IAAE,GAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,YAAW,GAAE,WAAU,GAAE,iBAAgB,EAAC,IAAE,GAAE,IAAE,EAAE,wBAAwB,CAAC,GAAE,IAAE;AAAE,OAAG,SAAO,IAAE,CAAC,GAAE,CAAC;AAAG,MAAI,IAAE,EAAE,kBAAkB,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,MAAG,CAAC,GAAE,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,QAAQ,KAAI,EAAE,QAAQ,IAAI,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,UAAS,EAAE,OAAO,EAAC,CAAC,GAAE,IAAE,EAAE,eAAa,gBAAe;AAAE,SAAM,CAAC,KAAG,EAAE,WAAS,MAAI,EAAE,UAAQ,MAAI,EAAE,iBAAe,KAAG,EAAE,gBAAc,KAAG,EAAE,kBAAgB,KAAG,EAAE,mBAAiB,KAAG,EAAE,eAAa,EAAE,cAAY,IAAE,IAAI,GAAG,EAAE,UAAS,EAAE,cAAa,EAAE,WAAW,IAAE,KAAG,EAAE,YAAU,KAAG,EAAE,WAAS,KAAG,EAAE,eAAa,KAAG,EAAE,eAAa,EAAE,eAAa,EAAE,mBAAiB,KAAG,EAAE,kBAAgB,KAAG,EAAE,aAAW,MAAI,KAAG,IAAE,IAAI,GAAG,CAAC,GAAE,EAAE,KAAK,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,YAAY,EAAC,CAAC,MAAI,IAAE,IAAI,GAAG,CAAC,GAAE,EAAE,KAAK,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,YAAY,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,WAAW,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,cAAa,EAAE,WAAW,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,gBAAe,EAAE,aAAa,EAAC,CAAC,IAAGC,IAAE,iBAAiB,GAAE,CAAC,GAAE,CAAC,GAAE,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,KAAI,IAAI,GAAE,KAAK,WAAS;AAAA,0FACtiC,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,EAAE,aAAY,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,YAAU;AAAA,EAAkC;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,QAChV,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkCb;AAAC;AApCijC,IAoC/iC,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,MAAK,GAAG,GAAE,KAAK,WAAS;AAAA,4DACjB,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,EAAE,SAAQ,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,YAAU;AAAA,EAAiC;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,QAC7S,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAyCb;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,IAAG,EAAC,IAAE,GAAE,EAAC,SAAQ,GAAE,WAAU,GAAE,KAAI,GAAE,iBAAgB,GAAE,aAAY,EAAC,IAAE,GAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,GAAE,IAAE,GAAE,IAAE,IAAI,GAAG,CAAC,GAAE,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,cAAa,EAAE,WAAW,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,QAAQ,KAAI,EAAE,QAAQ,IAAI,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,cAAa,EAAE,WAAW,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,SAAS,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,QAAQ,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,QAAQ,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,OAAO,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,SAAS,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,cAAY,EAAE,UAAU,EAAC,CAAC;AAAE,SAAOC,IAAE,iBAAiB,GAAE,CAAC,GAAE,CAAC,GAAE,WAAU,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,IAAG,GAAE,QAAO,EAAC,IAAE,GAAE,EAAC,SAAQ,GAAE,WAAU,GAAE,KAAI,GAAE,iBAAgB,GAAE,YAAW,EAAC,IAAE,GAAE,IAAE,EAAE,kBAAkB,GAAE,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,IAAE,GAAE,IAAE,IAAI,GAAG,CAAC,GAAE,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,cAAa,EAAE,WAAW,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,eAAa,IAAE,EAAE,QAAQ,KAAI,EAAE,cAAY,IAAE,EAAE,QAAQ,IAAI,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,cAAa,EAAE,WAAW,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,SAAS,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,QAAQ,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,cAAY,EAAE,UAAU,EAAC,CAAC;AAAE,SAAOC,IAAE,iBAAiB,GAAE,CAAC,GAAE,CAAC,GAAE,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,CAAC,GAAE,CAAC,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,YAAU;AAAA,EAAM;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,QAC1/C,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOb;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,IAAE,CAAC,GAAG,EAAE,OAAM,GAAG,EAAE,KAAK,GAAE,IAAE,EAAE,cAAc,EAAE,KAAK,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,OAAM,CAAC,CAAC,EAAC,EAAC,CAAC,GAAE,IAAE,IAAI,GAAG,CAAC,GAAE,IAAEA,IAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,EAAE,KAAK,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,SAAOA,IAAE,YAAY,EAAE,MAAM,GAAEA,IAAE,YAAY,EAAE,MAAM,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,KAAI,GAAG,GAAE,KAAK,WAAS,oFAAmF,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,EAAE,UAAS,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,YAAU;AAAA,EAAY;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,SAC1uB,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA+Bb;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,QAAO,EAAC,IAAE,GAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,WAAU,EAAC,IAAE,GAAE,IAAE,EAAE,sBAAsB,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,QAAO,CAAC,GAAE,IAAE,CAAC,EAAE,QAAQ,KAAI,EAAE,QAAQ,IAAI,GAAE,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,cAAa,EAAE,WAAW,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,GAAG,CAAC,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,cAAa,EAAE,WAAW,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,gBAAe,EAAE,aAAa,EAAC,CAAC,GAAE,IAAE,IAAI,GAAG,CAAC;AAAE,SAAOC,IAAE,iBAAiB,GAAE,CAAC,GAAE,CAAC,GAAE,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE;AAAC,QAAG,KAAK,gBAAc,CAAC,KAAI,KAAI,IAAI,GAAE,KAAK,WAAS,kGAAiG,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,SAAO,MAAG,KAAK,cAAY,EAAE,SAAQ,KAAK,iBAAe,EAAE,EAAE,QAAQ,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,EAAE,UAAS,KAAK,aAAa,GAAEA,QAAI,aAAWA,QAAI,QAAQ,OAAM,IAAI,MAAM;AAAA,oCACz1BA,GAAC,QAAQ;AAAE,SAAK,OAAKA,KAAE,KAAK,YAAU;AAAA,EAAyB;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,SAC/G,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAuCN,GAAG,wBAAuB,SAAQ,KAAK,IAAI,CAAC;AAAA;AAAA;AAAA;AAAA,EAGnD;AAAC;AA5C8e,IA4C5e,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE;AAAC,QAAG,KAAK,gBAAc,CAAC,KAAI,KAAI,IAAI,GAAE,KAAK,WAAS,kGAAiG,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,SAAO,MAAG,KAAK,cAAY,EAAE,aAAY,KAAK,iBAAe,EAAE,EAAE,QAAQ,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,EAAE,UAAS,KAAK,aAAa,GAAE,MAAI,aAAW,MAAI,QAAQ,OAAM,IAAI,MAAM;AAAA,oCAC/W,CAAC,QAAQ;AAAE,SAAK,OAAK,GAAE,KAAK,YAAU;AAAA,EAA0B;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,SAChH,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAsCN,GAAG,wBAAuB,SAAQ,KAAK,IAAI,CAAC;AAAA;AAAA;AAAA;AAAA,EAGnD;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,QAAO,GAAE,IAAG,EAAC,IAAE,GAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,WAAU,EAAC,IAAE,GAAE,IAAE,EAAE,sBAAsB,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,QAAO,CAAC,GAAE,IAAE,EAAE,OAAM,IAAE,IAAI,GAAG,GAAE,EAAE,OAAM,CAAC,GAAE,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,cAAa,EAAE,WAAW,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,QAAQ,KAAI,EAAE,QAAQ,IAAI,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,cAAa,EAAE,WAAW,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,gBAAe,EAAE,aAAa,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,cAAc,EAAE,QAAQ,CAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,SAAQC,KAAE,OAAM,EAAC,OAAM,EAAE,OAAM,OAAM,GAAE,OAAM,EAAC,EAAC,CAAC;AAAE,SAAOA,IAAE,iBAAiB,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,GAAE,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,QAAO,GAAE,IAAG,EAAC,IAAE,GAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,WAAU,EAAC,IAAE,GAAE,IAAE,EAAE,sBAAsB,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,QAAO,CAAC,GAAE,IAAE,EAAE,OAAM,IAAE,IAAI,GAAG,GAAE,CAAC,GAAE,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,cAAa,EAAE,WAAW,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,QAAQ,KAAI,EAAE,QAAQ,IAAI,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,cAAa,EAAE,WAAW,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,gBAAe,EAAE,aAAa,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,cAAc,EAAE,QAAQ,CAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,SAAQC,KAAE,OAAM,EAAC,OAAM,EAAE,SAAQ,OAAM,GAAE,OAAM,EAAC,EAAC,CAAC;AAAE,SAAOA,IAAE,iBAAiB,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,GAAE,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,OAAO,GAAE,KAAK,WAAS,eAAc,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,eAAa,GAAG,MAAK,KAAK,OAAK,MAAG,KAAK,cAAY,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,OAAKA,KAAE,KAAK,gBAAc,GAAE,KAAK,YAAU,QAAQA,GAAC,IAAI,CAAC;AAAA,EAAE;AAAA,EAAC,cAAa;AAAC,QAAI,GAAEA,MAAE,KAAK,SAAO,YAAU,UAAQ;AAAgB,WAAO,IAAE;AAAA;AAAA,oBAErmDA,GAAC;AAAA,oBACDA,GAAC;AAAA,oBACDA,GAAC;AAAA;AAAA,oBAEDA,GAAC;AAAA,UACZ;AAAA,iEACwD,KAAK,aAAa;AAAA,SAC1E,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,eAKJ,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAST;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,EAAC,IAAE,GAAE,EAAC,QAAO,GAAE,SAAQ,EAAC,IAAE,GAAE,CAAC,GAAE,CAAC,IAAE,EAAE,MAAM,MAAM,GAAE,CAAC,GAAE,EAAC,cAAa,EAAC,IAAE,KAAG,CAAC,GAAE,KAAG,KAAG,OAAK,SAAO,EAAE,UAAQ,GAAE,IAAEC,IAAE,OAAO,SAAS,IAAI,oBAAoB,IAAE,eAAa,cAAa,IAAE,CAAC,GAAE,CAAC,GAAE,IAAE,IAAI,GAAG,GAAE,EAAE,OAAM,CAAC;AAAE,IAAE,QAAM,GAAE,EAAE,SAAO;AAAE,MAAI,IAAE,UAAS,IAAE,EAAE,WAAW,CAAC,GAAE;AAAE,QAAI,IAAE,IAAI,gBAAgB,GAAE,CAAC,GAAE,IAAE,EAAE,WAAW,CAAC;AAAG,MAAI,IAAE,EAAE,MAAM,WAAS,IAAE,EAAE,MAAM,CAAC,IAAE;AAAE,IAAE,UAAU,EAAC,QAAOA,IAAE,QAAO,QAAO,GAAE,OAAM,gBAAgB,iBAAgB,WAAU,gBAAe,CAAC;AAAE,MAAI,IAAE,SAAQ,IAAEA,IAAE,eAAe,GAAE,CAAC,GAAE,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM;AAAE,IAAE,WAAS,EAAE,kBAAkB,GAAE,EAAE,WAAS;AAAG,MAAI,IAAE,CAAC,EAAC,MAAK,UAAS,MAAK,CAAC,CAAC,EAAC,GAAE,EAAC,MAAK,WAAU,MAAK,CAAC,CAAC,EAAC,CAAC;AAAE,MAAGA,IAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,GAAE,GAAE,CAAC,GAAE,GAAE;AAAC,QAAI,IAAE,EAAE,WAAW,IAAI;AAAE,QAAG,CAAC,EAAE,OAAM,IAAI,MAAM,2EAA2E;AAAE,MAAE,UAAU,GAAE,GAAE,CAAC;AAAA,EAAC;AAAC,SAAOA,IAAE,YAAY,EAAE,MAAM,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,GAAG,EAAC,QAAO,GAAG,KAAI,eAAc,IAAG,iBAAgB,KAAE,CAAC;AAA7D,IAA+D,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,MAAK,GAAE,UAAS,EAAC,IAAE;AAAE,SAAO,GAAG,GAAE,GAAE,GAAE,OAAMC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,GAAE;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,UAAS,EAAC,IAAE,GAAE,IAAE,GAAE,EAAC,SAAQ,GAAE,YAAW,GAAE,QAAO,EAAC,IAAE,EAAE,qBAAqB,GAAE,EAAE,MAAM;AAAE,IAAE,oBAAoB,EAAE,QAAO,GAAE,CAAC;AAAE,MAAG,EAAC,MAAK,GAAE,OAAM,EAAC,IAAE,EAAE,qBAAqB,GAAE,CAAC,GAAE,IAAE,EAAE,QAAO,IAAE,MAAK,IAAE,EAAE,QAAO,IAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,aAAQ,KAAK,EAAE,CAAC,GAAE;AAAC,UAAG,EAAC,oBAAmB,GAAE,YAAW,EAAC,IAAE,EAAE,qBAAqB,GAAE,EAAE,CAAC,CAAC,GAAE;AAAE,QAAE,sBAAsB,CAAC,IAAE,IAAE,EAAE,CAAC,KAAG,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAE,CAAC,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC,GAAE,EAAE,KAAK,CAAC;AAAG,UAAI,IAAE,EAAE,MAAM,MAAM;AAAE,eAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE,EAAE,GAAE,OAAO,EAAE,CAAC,GAAE,GAAE,CAAC;AAAE,QAAE,YAAY,EAAE,OAAM,CAAC,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,EAAE,KAAK,CAAC,IAAG,MAAI,OAAK,IAAE,KAAG,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,GAAE,GAAE,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAE,EAAE,KAAK,CAAC;AAAA,IAAE;AAAC,QAAE,IAAE,MAAI,EAAE,CAAC,KAAG,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,MAAK,EAAE,CAAC,KAAG,EAAE,SAAO,IAAG,UAAS,MAAE,EAAC,CAAC,GAAE,EAAE,KAAK,CAAC,IAAG;AAAA,EAAI;AAAC,WAAQ,KAAK,EAAE,OAAI,KAAGA,IAAE,YAAY,EAAE,MAAM;AAAE,SAAO;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,EAAE,IAAG,CAAC;AAAzB,IAA2B,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,CAAAD,QAAG;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,IAAG,GAAE,GAAE,EAAC,IAAE,GAAE,IAAE,IAAI,GAAG,GAAG,SAAQ,EAAE,OAAM,EAAE,KAAK;AAAE,SAAOC,IAAE,iBAAiB,GAAE,CAAC,GAAE,CAAC,GAAE,EAAE,KAAK;AAAC;AAAlI,IAAoI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,GAAG,OAAM,OAAM,QAAO,eAAc,GAAE,CAAC;AAA1D,IAA4D,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,EAAE,IAAG,CAAC;AAAzB,IAA2B,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,EAAE,KAAI,eAAc,IAAG,OAAM,UAAS,CAAC;AAA1D,IAA4D,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,OAAMC,KAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,KAAI,EAAC,IAAEC,KAAE,EAAC,OAAM,EAAC,IAAE,GAAE,IAAE,EAAE,MAAM,QAAO,IAAE,EAAE,MAAM,MAAM,GAAE,IAAE;AAAE,SAAO,IAAE,MAAI,EAAE,OAAO,EAAE,IAAE,MAAI,GAAE,MAAI,iCAAiC,EAAE,IAAE,EAAE,KAAK,CAAC,GAAG,GAAE,IAAE,IAAE,IAAE,IAAG,EAAE,OAAO,GAAE,GAAE,CAAC,GAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,GAAE;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,EAAE,OAAM,eAAc,GAAE,CAAC;AAA5C,IAA8C,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE;AAAC,SAAK,gBAAc,CAAC,QAAO,MAAM,GAAE,KAAK,cAAY,CAAC,GAAE,KAAK,WAAS,+CAA8C,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAYA,KAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,YAAU,GAAE,KAAK,YAAU,OAAO,CAAC;AAAA,EAAE;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA;AAAA,QAEp8G,KAAK,cAAY,SAAO,sCAAoC,mCAAmC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAyBjG,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMb;AAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAEA,IAAE,UAAU,IAAID,IAAE,MAAM,GAAE,IAAE,EAAE,cAAcA,IAAE,KAAK,GAAE,IAAEA,IAAE,MAAMA,IAAE,MAAM,SAAO,CAAC,GAAE,IAAE,IAAE,GAAE,IAAE,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAEA,IAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,OAAM,CAAC,GAAE,CAAC,EAAC,EAAC,CAAC;AAAE,IAAE,KAAK,CAAC;AAAE,MAAI,IAAE,EAAE,OAAM,IAAE,IAAI,GAAG,QAAO,CAAC,GAAE,IAAE,IAAI,GAAG,QAAO,CAAC,GAAE,IAAE,CAAC,EAAC,QAAO,EAAE,mBAAmB,KAAK,QAAO,OAAM,EAAE,mBAAmB,KAAK,OAAM,OAAM,EAAC,GAAE,EAAC,QAAO,EAAE,mBAAmB,KAAK,QAAO,OAAM,EAAE,mBAAmB,KAAK,OAAM,OAAM,EAAC,CAAC,GAAE,IAAE,IAAE,IAAE,KAAK,KAAG,KAAG,KAAK,IAAG,IAAE,IAAE,EAAE,CAAC,IAAE,GAAE,IAAE,CAAC,EAAC,MAAK,WAAU,MAAK,CAAC,CAAC,EAAC,GAAE,EAAC,MAAK,WAAU,MAAK,CAAC,CAAC,EAAC,CAAC,GAAE,IAAEA,IAAE,iBAAiB,GAAE,GAAE,WAAU,CAAC;AAAE,IAAE,KAAK,CAAC;AAAE,MAAI,IAAEA,IAAE,iBAAiB,GAAE,GAAE,WAAU,CAAC;AAAE,IAAE,KAAK,CAAC;AAAE,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,MAAK,GAAE,MAAK,EAAC,GAAE,SAAQA,IAAC,CAAC;AAAE,IAAE,KAAK,CAAC;AAAE,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAMD,IAAE,MAAK,EAAC,CAAC;AAAE,SAAO,EAAE,QAAQ,OAAGC,IAAE,YAAY,EAAE,MAAM,CAAC,GAAE;AAAC;AAAC,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,OAAM,EAAC,IAAE;AAAE,SAAO,GAAG,GAAE,OAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,cAAY,CAAC,GAAE,KAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,YAAU;AAAA,EAAe;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,QACnqC,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQb;AAAC;AAAE,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,CAAC,EAAC,QAAOD,KAAE,SAAQ,EAAC,MAAI;AAAC,MAAG,EAAC,OAAMC,IAAC,IAAED,KAAE,IAAE,GAAE,IAAE,IAAI,GAAGC,IAAE,KAAK;AAAE,SAAO,EAAE,iBAAiB,GAAE,CAACA,GAAC,GAAEA,IAAE,KAAK;AAAC,EAAC;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,EAAE,OAAM,eAAc,GAAE,CAAC;AAA5C,IAA8C,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,GAAG,WAAU,eAAc,IAAG,OAAM,QAAO,CAAC;AAA/D,IAAiE,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,IAAE,OAAG;AAAC,SAAK,eAAa,GAAG,aAAY,KAAK,cAAY,CAAC,CAAC,GAAE,KAAK,gBAAc,CAAC,GAAE,KAAK,gBAAc,CAAC,KAAI,GAAE,CAAC,GAAE,KAAK,cAAY,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,eAAc,CAACA,KAAE,GAAE,CAAC,CAAC,GAAE,KAAK,cAAY,GAAE,KAAK,YAAU,cAAc,KAAK,WAAW;AAAA,EAAE;AAAA,EAAC,cAAa;AAAC,QAAI,IAAE,KAAK,cAAY,4CAA0C;AAA4C,WAAM;AAAA,uCACzzB,KAAK,cAAY,qBAAmB,iBAAiB;AAAA,QACpF,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA,yBAIO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMvB;AAAC;AAAE,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAzD,IAA2D;AAA3D,IAA8D,KAAG,EAAE,EAAE,QAAQ,uCAAuC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,QAAO,EAAC,IAAE,GAAE,EAAC,aAAY,EAAC,IAAE;AAAE,MAAG,KAAG,KAAK,OAAM,IAAI,MAAM,0DAA0D;AAAE,MAAI,IAAE,OAAO,oBAAkB,eAAa,aAAa,kBAAiB,IAAE,OAAO,oBAAkB,eAAa,aAAa,kBAAiB,IAAE,OAAO,qBAAmB,eAAa,aAAa,qBAAmB,OAAO,mBAAiB,eAAa,aAAa,iBAAgB,IAAE,OAAO,eAAa,eAAa,aAAa,aAAY,CAAC,GAAE,CAAC,IAAE,IAAE,CAAC,EAAE,YAAW,EAAE,WAAW,IAAE,CAAC,EAAE,OAAM,EAAE,MAAM,GAAE,IAAE,CAAC,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,EAAE,QAAQ,gCAAgC,KAAG,GAAE,IAAE,KAAG;AAAE,MAAG,KAAG,KAAG,GAAE;AAAC,QAAI;AAAE,QAAG,EAAE,KAAEC,IAAE,OAAO,sBAAsB,EAAC,QAAO,EAAC,CAAC;AAAA,SAAM;AAAC,UAAG,GAAE;AAAC,YAAI,IAAE,EAAE,EAAE,QAAQ,uCAAuC;AAAE,SAAC,MAAI,QAAM,MAAI,QAAM,KAAG,GAAE,KAAG,SAAS,cAAc,QAAQ,EAAE,WAAW,MAAK,EAAC,oBAAmB,GAAE,CAAC,IAAG,GAAG,OAAO,QAAM,GAAE,GAAG,OAAO,SAAO,GAAE,GAAG,UAAU,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,GAAG;AAAA,MAAM;AAAC,UAAI,IAAE,gBAAgB,WAAS,gBAAgB,oBAAkB,gBAAgB,iBAAgB,IAAEA,IAAE,eAAe,eAAe,EAAE,CAAC,GAAE,EAAE,CAAC,GAAE,cAAa,CAAC;AAAE,MAAAA,IAAE,MAAM,2BAA2B,EAAC,QAAO,EAAC,GAAE,EAAC,SAAQ,EAAC,GAAE,CAAC,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,CAAC,GAAE,IAAE;AAAA,IAAC;AAAC,QAAI,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,EAAE,eAAe,CAAC,GAAE,IAAE,IAAI,GAAG,GAAE,GAAE,CAAC,GAAE,IAAE,CAAC,EAAC,MAAK,UAAS,MAAK,CAAC,CAAC,EAAC,GAAE,EAAC,MAAK,UAAS,MAAK,CAAC,CAAC,EAAC,GAAE,EAAC,MAAK,UAAS,MAAK,CAAC,GAAG,CAAC,EAAC,CAAC,GAAE,IAAEA,IAAE,eAAe,CAAC,GAAE,CAAC,GAAE,OAAO,GAAE,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM;AAAE,MAAE,WAAS;AAAE,QAAI,IAAEA,IAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,SAAQ,CAAC;AAAE,WAAOA,IAAE,YAAY,EAAE,MAAM,GAAE;AAAA,EAAC;AAAC,MAAI,IAAE,EAAE,MAAK,IAAE;AAAE,MAAG,KAAG,QAAM,MAAI,GAAE;AAAC,QAAE,IAAI,WAAW,EAAE,QAAM,EAAE,SAAO,CAAC;AAAE,QAAI,IAAE,EAAE,QAAO,IAAE;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,IAAI,KAAE,IAAE,MAAI,EAAE,GAAG,IAAE,EAAE,CAAC;AAAA,EAAE;AAAC,MAAI,IAAEA,IAAE,eAAe,GAAE,SAAQ,IAAI,WAAW,CAAC,CAAC;AAAE,SAAOA,IAAE,YAAY,EAAE,MAAM,GAAE;AAAC;AAAC,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE,GAAE,GAAE;AAAC,SAAK,WAAS,0BAAyB,KAAK,gBAAc,CAAC,KAAI,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,gBAAc,CAAC,KAAI,QAAO,UAAU,GAAE,EAAE,2BAA2B,GAAEA,GAAC,GAAE,EAAE,2BAA2B,GAAE,CAAC,GAAE,KAAK,cAAY,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAG,SAAO,EAAE,2BAA2B,GAAE,CAAC,GAAE,KAAK,cAAc,KAAK,QAAQ,IAAG,KAAG,SAAO,EAAE,2BAA2B,GAAE,CAAC,GAAE,KAAK,cAAc,KAAK,OAAO,IAAG,KAAK,cAAY,GAAE,KAAK,aAAW,GAAE,KAAK,YAAU;AAAA,EAAW;AAAA,EAAC,cAAa;AAAC,QAAI,IAAE;AAAM,SAAK,eAAa,SAAO,IAAE;AAAiC,QAAIA,MAAE;AAAM,WAAO,KAAK,cAAY,SAAOA,MAAE,iCAAgC;AAAA,QAC3/E,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8BAMY,CAAC;AAAA,6BACFA,GAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAK3B;AAAC;AAAE,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,CAAC,EAAC,QAAOD,KAAE,OAAM,GAAE,SAAQC,IAAC,MAAI;AAAC,MAAG,EAAC,GAAE,GAAE,OAAM,GAAE,QAAO,GAAE,MAAK,GAAE,UAAS,EAAC,IAAED,KAAE,EAAC,iBAAgB,EAAC,IAAE,GAAE,IAAEC,KAAE,IAAE,CAAC,GAAE,GAAE,CAAC,GAAE,IAAE;AAAK,OAAG,SAAO,IAAE,EAAE,OAAM,EAAE,KAAK,CAAC;AAAG,MAAI,IAAE;AAAK,OAAG,SAAO,IAAE,EAAE,OAAM,EAAE,KAAK,CAAC;AAAG,MAAI,IAAE,IAAI,GAAG,EAAE,OAAM,EAAE,OAAM,EAAE,OAAM,GAAE,CAAC,GAAE,IAAE,CAAC,EAAC,MAAK,WAAU,MAAK,CAAC,CAAC,EAAC,CAAC;AAAE,SAAO,EAAE,iBAAiB,GAAE,GAAE,EAAE,OAAM,CAAC;AAAC,EAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,QAAO,GAAE,MAAK,GAAE,wBAAuB,EAAC,IAAE,GAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,YAAW,GAAE,WAAU,GAAE,iBAAgB,GAAE,YAAW,GAAE,gBAAe,EAAC,IAAE,GAAE,IAAE,EAAE,wBAAwB,CAAC,GAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,OAAG,CAAC;AAAE,SAAO,GAAG,EAAC,GAAE,GAAE,QAAO,GAAE,UAAS,GAAE,SAAQC,KAAE,MAAK,GAAE,wBAAuB,GAAE,gBAAe,GAAE,YAAW,EAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,QAAO,GAAE,MAAK,GAAE,wBAAuB,EAAC,IAAE,GAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,WAAU,GAAE,iBAAgB,GAAE,YAAW,GAAE,gBAAe,EAAC,IAAE,GAAE,IAAE;AAAE,OAAG,SAAO,IAAE,CAAC,GAAE,CAAC,IAAG,EAAE,OAAO,EAAE,+BAA+B,GAAE,CAAC,GAAE,MAAI,gFAAgF,CAAC,mBAAmB,CAAC,GAAG;AAAE,MAAI,IAAE,EAAE,kBAAkB,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,IAAE,GAAE,IAAE,CAAC,GAAE,CAAC,GAAE,IAAE,KAAG,MAAK,IAAE,KAAG;AAAK,OAAG,EAAE,KAAK,CAAC,GAAE,KAAG,EAAE,KAAK,CAAC;AAAE,MAAI,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,QAAQ,KAAI,EAAE,QAAQ,IAAI,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,UAAS,EAAE,OAAO,EAAC,CAAC,GAAE;AAAE,SAAO,EAAE,YAAU,KAAG,EAAE,WAAS,KAAG,EAAE,eAAa,KAAG,EAAE,eAAa,EAAE,eAAa,EAAE,mBAAiB,KAAG,EAAE,kBAAgB,KAAG,EAAE,aAAW,MAAI,KAAG,IAAE,IAAI,GAAG,GAAE,GAAE,GAAE,CAAC,GAAE,EAAE,KAAK,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,YAAY,EAAC,CAAC,MAAI,IAAE,IAAI,GAAG,GAAE,GAAE,GAAE,CAAC,GAAE,EAAE,KAAK,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,YAAY,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,WAAW,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,cAAa,EAAE,WAAW,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,gBAAe,EAAE,aAAa,EAAC,CAAC,IAAG,MAAI,gBAAc,EAAE,KAAK,EAAC,MAAK,WAAU,MAAK,CAAC,CAAC,EAAC,CAAC,GAAE,EAAE,YAAU,kBAAiBC,IAAE,iBAAiB,GAAE,GAAE,WAAU,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE;AAAC,SAAK,gBAAc,CAAC,KAAI,SAAS,GAAE,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAYA,KAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,YAAU,YAAY,CAAC,IAAG,KAAK,WAAS,GAAE,KAAK,WAAS,6BAA6B,GAAG,CAAC,CAAC;AAAA,EAAG;AAAA,EAAC,cAAa;AAAC,QAAI;AAAE,WAAO,KAAK,WAAS,IAAE,IAAE,wBAAsB,IAAE,oBAAmB;AAAA,QAC31E,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8BAMY,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOxB;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,QAAO,GAAE,SAAQ,EAAC,IAAE,GAAE,IAAE,EAAE,OAAM,IAAE,EAAE,EAAE,SAAO,CAAC,GAAE,IAAE,EAAE,cAAc,EAAE,KAAK,GAAE,CAAC,GAAE,GAAE,GAAE,CAAC,IAAE,EAAE,mBAAmB,GAAE,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,OAAM,CAAC,GAAE,CAAC,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,CAAC,EAAE,cAAc,EAAE,KAAK,IAAE,GAAE,CAAC,EAAC,EAAC,CAAC;AAAE,MAAGA,IAAE,mBAAmB,CAAC,GAAE,CAAC,CAAC,KAAG,EAAE,UAAQ,UAAS;AAAC,QAAI,IAAEA,IAAE,SAAS,EAAE,MAAM,GAAE,IAAEA,IAAE,WAAW,CAAC,GAAE,IAAE,GAAG,GAAE,GAAE,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,EAAE,OAAM,CAAC;AAAE,WAAOA,IAAE,eAAe,GAAE,EAAE,OAAM,EAAE,MAAM;AAAA,EAAC;AAAC,MAAI,IAAE,IAAI,GAAG,GAAE,CAAC,GAAE,CAAC,CAAC,GAAE,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,CAAC,CAAC,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,EAAC,CAAC,GAAE,IAAEA,IAAE,iBAAiB,GAAE,CAAC,GAAE,CAAC,GAAE,EAAE,OAAM,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,SAAOA,IAAE,YAAY,EAAE,MAAM,GAAEA,IAAE,YAAY,EAAE,MAAM,GAAEA,IAAE,YAAY,EAAE,MAAM,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE;AAAC,SAAK,gBAAc,CAAC,KAAI,SAAS,GAAE,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,EAAE,MAAM,GAAE,KAAK,SAAO,GAAE,KAAK,cAAYA,KAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,YAAU;AAAA,EAAQ;AAAA,EAAC,cAAa;AAAC,QAAI,IAAE,IAAI,KAAK,MAAM;AAAE,WAAM;AAAA,QACjlC,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,oDAKkC,CAAC;AAAA;AAAA;AAAA;AAAA,EAGhD;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAI,IAAE,CAAC,WAAU,WAAU,WAAU,SAAS,GAAEC,MAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAED,IAAE,QAAO,IAAI,OAAI,IAAEC,IAAE,KAAK,QAAQ,IAAEA,IAAE,KAAK,GAAG,EAAE,CAAC,CAAC,EAAE;AAAE,SAAOA,IAAE,KAAK;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,SAAQ,EAAC,IAAE,GAAE,EAAC,MAAK,GAAE,WAAU,EAAC,IAAE,GAAE,IAAE,EAAE,eAAe,GAAE,EAAE,KAAK,EAAE,CAAC,GAAE,IAAE,EAAE,aAAa,yBAAyB,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,cAAc,EAAE,KAAK,GAAE,IAAE,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,OAAM,CAAC,EAAE,WAAU,EAAE,WAAU,EAAE,SAAQ,EAAE,SAAS,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,CAAC,EAAE,WAAU,IAAE,EAAE,SAAS,EAAC,EAAC,CAAC;AAAE,IAAE,KAAK,CAAC,GAAE,EAAE,KAAK,CAAC;AAAE,MAAI,IAAE,CAAC,EAAE,WAAU,EAAE,WAAU,IAAE,EAAE,WAAU,EAAE,SAAS;AAAE,MAAGA,IAAE,mBAAmB,CAAC,GAAE,CAAC,CAAC,GAAE;AAAC,QAAI,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,GAAG,EAAE,OAAM,EAAE,OAAM,CAAC,GAAE,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,GAAG,EAAE,OAAM,EAAE,OAAM,CAAC,GAAE,IAAE,GAAG,GAAE,GAAE,CAAC;AAAE,WAAO,EAAE,QAAQ,OAAGA,IAAE,YAAY,EAAE,MAAM,CAAC,GAAEA,IAAE,eAAe,EAAE,aAAY,EAAE,OAAM,EAAE,MAAM;AAAA,EAAC;AAAC,MAAI,IAAE,IAAI,GAAG,EAAE,OAAM,CAAC,GAAE,IAAEA,IAAE,iBAAiB,GAAE,CAAC,GAAE,CAAC,GAAE,EAAE,KAAK;AAAE,IAAE,KAAK,CAAC;AAAE,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAE,YAAW,EAAC,CAAC;AAAE,SAAO,EAAE,QAAQ,OAAGA,IAAE,YAAY,EAAE,MAAM,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,GAAE;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,GAAG,SAAQ,eAAc,IAAG,OAAM,OAAM,CAAC;AAA5D,IAA8D,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,GAAG,eAAc,OAAM,QAAO,eAAc,GAAE,CAAC;AAAlE,IAAoE,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,OAAM,EAAC,IAAE;AAAE,SAAO,GAAG,GAAE,MAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,EAAE,WAAU,OAAM,OAAM,CAAC;AAA5C,IAA8C,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,EAAE,QAAO,OAAM,OAAM,CAAC;AAAzC,IAA2C,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,EAAE,QAAO,OAAM,OAAM,CAAC;AAAzC,IAA2C,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,OAAM,EAAC,IAAE,GAAE,IAAE,CAAC,EAAC,MAAK,WAAU,MAAK,CAAC,CAAC,EAAC,CAAC,GAAE,IAAE,IAAI,GAAG,EAAE,OAAM,EAAE,WAAU,cAAc;AAAE,SAAOC,IAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,WAAU,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,GAAG,MAAK,OAAM,QAAO,eAAc,GAAE,CAAC;AAAzD,IAA2D,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,GAAG,YAAW,OAAM,QAAO,eAAc,GAAE,CAAC;AAA/D,IAAiE,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAE,KAAK,cAAY,CAAC,GAAE,KAAK,WAAS,4BAA2B,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,CAAC,CAAC,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,YAAU;AAAA,EAAU;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,QAC1hF,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAKb;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,SAAQ,GAAE,OAAMC,IAAC,IAAED,KAAE,EAAC,OAAM,GAAE,MAAK,GAAE,KAAI,EAAC,IAAEC,KAAE,KAAG,IAAE,MAAI,IAAE,IAAG,IAAE,IAAI,GAAG,CAAC,GAAE,IAAE,CAAC,EAAC,MAAK,WAAU,MAAK,CAAC,CAAC,EAAC,GAAE,EAAC,MAAK,WAAU,MAAK,CAAC,CAAC,EAAC,CAAC;AAAE,SAAO,EAAE,iBAAiB,GAAE,CAAC,GAAE,WAAU,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,EAAE,KAAI,eAAc,GAAE,CAAC;AAA1C,IAA4C,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,EAAE,MAAK,CAAC;AAA3B,IAA6B,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,GAAG,aAAY,OAAM,OAAM,CAAC;AAA/C,IAAiD,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,EAAE,YAAW,CAAC;AAAjC,IAAmC,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,GAAG,WAAU,CAAC;AAAjC,IAAmC,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAP,IAUptB,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,cAAY,CAAC,GAAE,KAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,WAAS,sDAAqD,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,YAAU;AAAA,EAAK;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,MAC1V,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAiBN,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAKT;AAAC;AAjCktB,IAiChtB,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE;AAAC,SAAK,cAAY,CAAC,GAAE,KAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,WAAS,sDAAqD,KAAK,gBAAc,CAAC,KAAI,GAAE,CAAC,GAAE,KAAK,iBAAe,IAAG,EAAE,OAAOA,OAAG,KAAK,gBAAe,MAAI,wCAAwC,KAAK,cAAc,uBAAuBA,GAAC,EAAE,GAAE,KAAK,cAAY,GAAE,KAAK,uBAAqB,KAAK,cAAc,CAAC,IAAE,IAAE,KAAK,gBAAe,KAAK,iBAAe,EAAC,GAAE,CAAC,CAAC,GAAE,GAAE,CAAC,CAAC,GAAE,GAAE,CAAC,GAAE,CAAC,EAAC,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,CAAC,KAAK,sBAAqB,KAAK,cAAc,CAAC,GAAE,KAAK,cAAc,CAAC,CAAC,CAAC,GAAE,KAAK,YAAU;AAAA,EAAY;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,wCACxkB,KAAK,cAAc,CAAC,CAAC;AAAA,mCAC1B,KAAK,oBAAoB;AAAA,6BAC/B,KAAK,cAAc;AAAA;AAAA,MAE1C,EAAE,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAuBC,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA,EAIL;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,aAAY,GAAE,MAAK,GAAE,OAAM,GAAE,MAAK,EAAC,IAAE,GAAE;AAAE,MAAE,KAAG,IAAE,IAAI,GAAG,EAAE,KAAK,IAAE,IAAE,IAAI,GAAG,EAAE,OAAM,CAAC;AAAE,MAAI,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,CAAC,CAAC,EAAC,GAAE,EAAC,MAAK,WAAU,MAAK,CAAC,CAAC,EAAC,GAAE,EAAC,MAAK,WAAU,MAAK,CAAC,CAAC,EAAC,GAAE,EAAC,MAAK,WAAU,MAAK,CAAC,CAAC,EAAC,CAAC;AAAE,SAAOC,IAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,cAAY,CAAC,GAAE,KAAK,gBAAc,CAAC,cAAa,eAAc,IAAI,GAAE,KAAK,WAAS,2DAA0D,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,YAAU;AAAA,EAAU;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,MAC/uB,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiDb;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,GAAE,GAAE,IAAG,EAAC,IAAE,GAAE,EAAC,aAAY,GAAE,MAAK,GAAE,OAAM,GAAE,MAAK,EAAC,IAAE,GAAE,IAAE,IAAI,GAAG,EAAE,KAAK,GAAE,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,CAAC,CAAC,EAAC,GAAE,EAAC,MAAK,WAAU,MAAK,CAAC,CAAC,EAAC,GAAE,EAAC,MAAK,WAAU,MAAK,CAAC,CAAC,EAAC,GAAE,EAAC,MAAK,WAAU,MAAK,CAAC,CAAC,EAAC,CAAC;AAAE,SAAOC,IAAE,iBAAiB,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,GAAG,KAAI,eAAc,GAAE,CAAC;AAA3C,IAA6C,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,YAAW,GAAE,SAAQ,GAAE,KAAI,GAAE,iBAAgB,EAAC,IAAE,GAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,SAAO,GAAG,GAAE,GAAE,OAAMC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,YAAW,GAAE,SAAQ,GAAE,KAAI,GAAE,YAAW,GAAE,iBAAgB,EAAC,IAAE,GAAE,IAAE,CAAC,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,IAAI,GAAG,GAAE,KAAK,GAAE,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,aAAY,EAAE,cAAa,EAAE,WAAW,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,QAAQ,OAAM,EAAE,QAAQ,KAAI,EAAE,QAAQ,IAAI,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,SAAQ,EAAE,UAAS,EAAE,OAAO,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,sBAAqB,EAAE,uBAAsB,EAAE,oBAAoB,EAAC,CAAC;AAAE,SAAOC,IAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,MAAK,QAAQ,GAAE,KAAK,WAAS;AAAA,yCACxwC,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,EAAE,SAAQ,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,YAAU;AAAA,EAAmB;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,QAC5Q,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA2Cb;AAAC;AA7C6tC,IA6C3tC,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,MAAK,QAAQ,GAAE,KAAK,WAAS;AAAA,wDAC1B,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,EAAE,SAAQ,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,YAAU;AAAA,EAAmB;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,QAC3R,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwDb;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,IAAG,GAAE,OAAM,EAAC,IAAE,GAAE,IAAE,GAAE,EAAC,YAAW,GAAE,SAAQ,GAAE,KAAI,GAAE,iBAAgB,EAAC,IAAE,GAAE,IAAE,CAAC,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,IAAI,GAAG,GAAE,OAAM,IAAE,GAAE,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,aAAY,EAAE,cAAa,EAAE,WAAW,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,QAAQ,OAAM,EAAE,QAAQ,KAAI,EAAE,QAAQ,IAAI,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,SAAQ,EAAE,UAAS,EAAE,OAAO,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,sBAAqB,EAAE,uBAAsB,EAAE,oBAAoB,EAAC,CAAC,GAAE,IAAEC,IAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,SAAQ,CAAC,GAAE,IAAE,IAAI,GAAG,CAAC;AAAE,MAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,aAAY,EAAE,cAAa,EAAE,WAAW,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,uBAAqB,IAAE,EAAE,QAAQ,OAAM,EAAE,wBAAsB,IAAE,EAAE,QAAQ,KAAI,EAAE,uBAAqB,IAAE,EAAE,QAAQ,IAAI,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,sBAAqB,EAAE,uBAAsB,EAAE,oBAAoB,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,QAAQ,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,SAAS,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,QAAQ,EAAC,CAAC;AAAE,MAAI,IAAEA,IAAE,iBAAiB,GAAE,CAAC,GAAE,CAAC,GAAE,EAAE,OAAM,CAAC;AAAE,SAAOA,IAAE,YAAY,EAAE,MAAM,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,IAAG,GAAE,OAAM,GAAE,QAAO,EAAC,IAAE,GAAE,IAAE;AAAE,KAAG,CAAC,GAAE,CAAC,GAAE,aAAa;AAAE,MAAG,EAAC,YAAW,GAAE,SAAQ,GAAE,KAAI,GAAE,iBAAgB,EAAC,IAAE,GAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,IAAI,GAAG,GAAE,OAAM,IAAE,GAAE,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,cAAa,EAAE,WAAW,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,QAAQ,KAAI,EAAE,QAAQ,IAAI,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,gBAAe,EAAE,aAAa,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,UAAS,EAAE,OAAO,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,uBAAsB,EAAE,oBAAoB,EAAC,CAAC,GAAE,IAAEC,IAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,SAAQ,CAAC,GAAE,IAAE,IAAI,GAAG,CAAC;AAAE,MAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,cAAa,EAAE,WAAW,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,wBAAsB,IAAE,EAAE,QAAQ,KAAI,EAAE,uBAAqB,IAAE,EAAE,QAAQ,IAAI,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,gBAAe,EAAE,aAAa,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,uBAAsB,EAAE,oBAAoB,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,SAAS,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,QAAQ,EAAC,CAAC;AAAE,MAAI,IAAEA,IAAE,iBAAiB,GAAE,CAAC,GAAE,CAAC,GAAE,EAAE,OAAM,CAAC;AAAE,SAAOA,IAAE,YAAY,EAAE,MAAM,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,YAAW,GAAE,SAAQ,GAAE,KAAI,GAAE,qBAAoB,EAAC,IAAE,GAAE,EAAC,GAAE,EAAC,IAAE;AAAE,IAAE,OAAO,EAAE,MAAM,WAAS,GAAE,MAAI,uDAAuD,EAAE,MAAM,MAAM,GAAG;AAAE,MAAI,IAAE,CAAC,GAAE,CAAC;AAAE,IAAE,OAAO,EAAE,+BAA+B,GAAE,CAAC,GAAE,MAAI,wEAAwE,CAAC,mBAAmB,CAAC,GAAG;AAAE,MAAI,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,cAAa,EAAE,WAAW,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,QAAQ,KAAI,EAAE,QAAQ,IAAI,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,gBAAe,EAAE,aAAa,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,UAAS,EAAE,OAAO,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,uBAAsB,EAAE,oBAAoB,EAAC,CAAC,GAAE,IAAE,IAAI,GAAG,GAAE,OAAM,KAAE,GAAE,IAAEC,IAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,EAAE,OAAM,CAAC;AAAE,MAAE,IAAI,GAAG,GAAE,OAAM,MAAG,MAAG,CAAC;AAAE,MAAI,IAAEA,IAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,SAAQ,CAAC;AAAE,SAAM,CAAC,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,MAAK,GAAE,UAAS,EAAC,IAAE;AAAE,SAAO,GAAG,GAAE,GAAE,GAAE,OAAMC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,GAAG,KAAI,eAAc,GAAE,CAAC;AAA3C,IAA6C,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE;AAAC,SAAK,WAAS,IAAG,KAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAYA,IAAE,IAAI,CAAC,GAAE,MAAI,EAAE,CAAC,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,CAAC,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,SAAO,GAAEA,IAAE,IAAI,CAAC,GAAE,MAAI;AAAC,WAAK,YAAU,OAAO,CAAC;AAAA,IAAe,CAAC,GAAE,KAAK,SAAO,MAAI,YAAU,IAAE,GAAE,KAAK,YAAU,aAAa,CAAC;AAAA,EAAE;AAAA,EAAC,cAAa;AAAC,QAAI,IAAE,KAAK,OAAO,QAAOA,MAAE,KAAK,OAAO,IAAI,CAAC,GAAE,MAAI,eAAe,CAAC,KAAK,EAAE,KAAK,GAAG,GAAE,IAAE,KAAK,OAAO,IAAI,CAAC,GAAE,MAAI,eAAe,CAAC,wBAAwB,IAAE,IAAE,IAAI,CAAC,MAAI,EAAE,EAAE,EAAE,KAAK,GAAG,GAAE,IAAE,MAAI,IAAE,UAAQ,YAAW,IAAE,MAAI,IAAE,QAAM,UAAS,IAAE,MAAI,IAAE,SAAO,WAAU,IAAE,GAAG,CAAC,GAAE,IAAE,IAAE,IAAE,CAAC,aAAY,aAAY,aAAY,WAAW,EAAE,MAAM,GAAE,CAAC,IAAE;AAAS,WAAM;AAAA,QAC36H,EAAE,OAAO,CAAC;AAAA;AAAA,wBAEM,CAAC,IAAIA,GAAC;AAAA,sBACR,CAAC,IAAI,CAAC;AAAA;AAAA,gCAEI,CAAC;AAAA,kBACf,CAAC,MAAM,CAAC;AAAA,gBACV,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,KAAK,MAAM;AAAA,wBAC5B,CAAC,OAAO,CAAC;AAAA,gBACjB,CAAC,OAAO,CAAC,eAAe,CAAC,MAAM,KAAK,MAAM;AAAA;AAAA;AAAA;AAAA,yCAIjB,CAAC;AAAA;AAAA;AAAA;AAAA,EAGrC;AAAC;AAAE,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,CAAC,EAAC,QAAOD,KAAE,OAAM,GAAE,SAAQC,IAAC,MAAI;AAAC,MAAG,EAAC,GAAE,EAAC,IAAED,KAAE,EAAC,UAAS,GAAE,MAAK,EAAC,IAAE,GAAE,IAAEC,KAAE,IAAE,EAAE,IAAI,QAAI,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,EAAC,EAAE,GAAE,IAAE,IAAI,GAAG,EAAE,OAAM,GAAE,CAAC;AAAE,SAAO,EAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,EAAE,OAAM,CAAC;AAAC,EAAC;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,GAAG,IAAG,CAAC;AAA1B,IAA4B,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE;AAAC,SAAK,gBAAc,CAAC,OAAO,GAAE,KAAK,cAAY,CAAC,GAAE,KAAK,WAAS,iCAAgC,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,CAAC,GAAEA,GAAC,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,YAAU;AAAA,EAAa;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAWjqB,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAsBb;AAAC;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,QAAQ,GAAE,KAAK,cAAY,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,CAAC,KAAK,YAAY,CAAC,GAAE,GAAE,CAAC,GAAE,KAAK,YAAY,CAAC,KAAG,OAAK,KAAK,gBAAc,CAAC,KAAI,GAAE,CAAC,IAAE,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,YAAU;AAAA,EAAS;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,sCAC7P,KAAK,cAAc,CAAC,CAAC;AAAA;AAAA;AAAA,wBAGnC,KAAK,cAAc,CAAC,CAAC;AAAA,MACvC,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAsDX;AAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,QAAO,EAAC,IAAE,GAAE,EAAC,KAAI,EAAC,IAAE,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,OAAM,CAAC,EAAE,cAAc,EAAE,KAAK,IAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,EAAC,EAAC,CAAC,GAAE,IAAE,IAAI,GAAG,EAAE,KAAK,GAAE,IAAEA,IAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,EAAE,KAAK,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAE,MAAK,EAAC,CAAC;AAAE,SAAOA,IAAE,YAAY,EAAE,MAAM,GAAEA,IAAE,YAAY,EAAE,MAAM,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,GAAE;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,QAAO,EAAC,IAAE,GAAE,EAAC,YAAW,GAAE,MAAK,GAAE,YAAW,EAAC,IAAE,GAAE,IAAE,IAAE,IAAE,GAAG,EAAC,QAAO,EAAC,QAAO,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,KAAI,EAAE,MAAM,SAAO,EAAC,EAAC,CAAC,GAAE,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,IAAI,GAAG,GAAE,CAAC,GAAE,IAAE,CAAC,EAAC,MAAK,WAAU,MAAK,CAAC,CAAC,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,CAAC,EAAC,CAAC,GAAE,IAAEA,IAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,SAAQ,CAAC;AAAE,SAAO,KAAGA,IAAE,YAAY,EAAE,MAAM,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE;AAAE,MAAGC,IAAE,mBAAmB,CAAC,CAAC,CAAC,GAAE;AAAC,QAAI,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,GAAE,CAAC,GAAE,CAAC,IAAE,GAAG,EAAE,QAAO,EAAE,OAAM,EAAE,KAAK;AAAE,WAAOA,IAAE,eAAe,GAAE,EAAE,OAAM,CAAC;AAAA,EAAC;AAAC,MAAI,IAAE,IAAI,GAAG,EAAE,OAAM,EAAE,GAAG;AAAE,SAAOA,IAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,EAAE,KAAK;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,UAAQ,KAAK,gGAAgG;AAAE,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,GAAE,QAAO,EAAC,IAAE,GAAE,EAAC,eAAc,GAAE,cAAa,GAAE,gBAAe,EAAC,IAAE,GAAE,IAAEC,IAAE,SAAS,EAAE,MAAM,GAAE,IAAEA,IAAE,SAAS,EAAE,MAAM,GAAE,EAAC,iBAAgB,EAAC,IAAE,GAAG,wBAAwB,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,SAAOA,IAAE,eAAe,CAAC,EAAE,MAAM,GAAE,SAAQ,IAAI,WAAW,CAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,UAAQ,KAAK,gGAAgG;AAAE,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,GAAE,QAAO,EAAC,IAAE,GAAE,EAAC,eAAc,GAAE,cAAa,GAAE,gBAAe,GAAE,cAAa,EAAC,IAAE,GAAE,IAAEC,IAAE,SAAS,EAAE,MAAM,GAAE,IAAEA,IAAE,SAAS,EAAE,MAAM,GAAE,IAAE,GAAE,IAAE,GAAE,IAAE,GAAE,IAAE,GAAE,EAAC,iBAAgB,GAAE,gBAAe,EAAC,IAAE,GAAG,wBAAwB,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,SAAM,CAACA,IAAE,eAAe,CAAC,EAAE,MAAM,GAAE,SAAQ,IAAI,WAAW,CAAC,CAAC,GAAEA,IAAE,eAAe,CAAC,EAAE,MAAM,GAAE,WAAU,IAAI,aAAa,CAAC,CAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,WAAS,kCAAiC,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,CAAC,GAAEA,GAAC,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,YAAU;AAAA,EAAQ;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,QAC/4E,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOb;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,SAAQ,EAAC,IAAE,GAAE,EAAC,OAAM,GAAE,OAAM,GAAE,SAAQ,GAAE,UAAS,EAAC,IAAE,GAAE,IAAE,EAAE,cAAc,EAAE,KAAK,GAAE,IAAE,IAAI,GAAG,GAAE,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,OAAM,CAAC,CAAC,EAAC,EAAC,CAAC,GAAE,IAAE,CAAC,EAAC,MAAK,WAAU,MAAK,CAAC,CAAC,EAAC,GAAE,EAAC,MAAK,WAAU,MAAK,CAAC,CAAC,EAAC,CAAC,GAAE,IAAEA,IAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,GAAE,CAAC;AAAE,EAAAA,IAAE,YAAY,EAAE,MAAM;AAAE,MAAI,IAAE,CAAC,GAAG,EAAE,OAAM,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,SAAOA,IAAE,YAAY,EAAE,MAAM,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE;AAAE,MAAG,EAAE,UAAQ,aAAY;AAAC,QAAI,IAAE,GAAG,EAAC,QAAO,EAAC,OAAM,EAAC,GAAE,SAAQC,IAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,OAAM,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,MAAK,GAAE,MAAK,EAAC,GAAE,SAAQA,IAAC,CAAC;AAAE,WAAOA,IAAE,YAAY,EAAE,MAAM,GAAEA,IAAE,YAAY,EAAE,MAAM,GAAEA,IAAE,YAAY,EAAE,MAAM,GAAEA,IAAE,YAAY,EAAE,MAAM,GAAE;AAAA,EAAC,MAAM,QAAO,GAAG,EAAC,OAAM,EAAC,OAAM,EAAE,OAAM,OAAM,EAAE,OAAM,OAAM,EAAE,UAAQ,WAAS,KAAG,EAAC,GAAE,SAAQA,IAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE;AAAE,MAAG,EAAE,UAAQ,SAAS,OAAM,IAAI,MAAM,8CAA8C;AAAE,MAAG,EAAE,UAAQ,aAAY;AAAC,QAAI,IAAE,GAAG,EAAC,QAAO,EAAC,OAAM,EAAC,GAAE,SAAQC,IAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,OAAM,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,MAAK,GAAE,MAAK,EAAC,GAAE,SAAQA,IAAC,CAAC;AAAE,WAAOA,IAAE,YAAY,EAAE,MAAM,GAAEA,IAAE,YAAY,EAAE,MAAM,GAAEA,IAAE,YAAY,EAAE,MAAM,GAAEA,IAAE,YAAY,EAAE,MAAM,GAAE;AAAA,EAAC,MAAM,QAAO,GAAG,EAAC,OAAM,EAAC,OAAM,EAAE,OAAM,OAAM,EAAE,OAAM,OAAM,EAAC,GAAE,SAAQA,IAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,GAAE;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,MAAK,EAAC,IAAE;AAAE,MAAG,EAAE,WAAS,EAAE,QAAO,GAAG,EAAC,QAAO,EAAC,OAAM,EAAE,CAAC,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,KAAI,EAAC,EAAC,CAAC;AAAE,MAAI,IAAE,EAAE,CAAC,EAAE,OAAM,IAAE,EAAE,CAAC,EAAE;AAAM,IAAE,QAAQ,OAAG;AAAC,MAAE,kBAAkB,GAAE,EAAE,OAAM,uDAAuD,GAAE,EAAE,OAAO,MAAI,EAAE,OAAM,MAAI,uDAAuD;AAAA,EAAC,CAAC;AAAE,MAAI,IAAE,CAAC,GAAE,IAAE,EAAE,IAAI,OAAG;AAAC,QAAI,IAAE,GAAG,EAAC,QAAO,EAAC,OAAM,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,KAAI,EAAC,EAAC,CAAC;AAAE,WAAO,EAAE,KAAK,CAAC,GAAE;AAAA,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,GAAE,SAAQA,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC;AAAE,SAAO,EAAE,QAAQ,OAAGA,IAAE,YAAY,EAAE,MAAM,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,SAAS,GAAGD,KAAE,IAAE,OAAG;AAAC,MAAIC,MAAED,IAAE,QAAO,IAAE,GAAGC,GAAC,GAAE,IAAED,IAAE,IAAI,CAAC,GAAE,MAAI,eAAe,CAAC,KAAK,EAAE,KAAK,GAAG,GAAE,IAAEA,IAAE,IAAI,CAAC,GAAE,MAAI,eAAe,CAAC,wBAAwBC,MAAE,IAAE,IAAI,CAAC,MAAI,EAAE,EAAE,EAAE,KAAK,GAAG,GAAE,IAAEA,MAAE,IAAE,GAAG,CAAC,IAAI,CAAC,MAAI,GAAG,CAAC,IAAG,IAAEA,MAAE,IAAE,GAAG,CAAC,IAAI,CAAC,MAAI,GAAG,CAAC,IAAG,IAAEA,MAAE,IAAE,8BAA4B,wBAAuB,IAAEA,MAAE,IAAE,6BAA2B,uBAAsB,IAAEA,MAAE,IAAE,CAAC,aAAY,aAAY,aAAY,WAAW,EAAE,MAAM,GAAEA,GAAC,IAAE;AAAS,SAAM;AAAA,sBACp/E,CAAC;AAAA,oBACH,CAAC;AAAA,cACP,CAAC,OAAO,CAAC;AAAA,oCACa,IAAE,IAAE,wBAAwB;AAAA;AAAA;AAAA,yCAGvB,CAAC;AAAA;AAAA;AAEvC;AAAC,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,WAAS,wBAAuB,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAYA,IAAE,IAAI,CAAC,GAAE,MAAI,EAAE,CAAC,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,CAAC,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAEA,IAAE,IAAI,CAAC,GAAE,MAAI;AAAC,WAAK,YAAU,OAAO,CAAC;AAAA,IAAe,CAAC,GAAE,KAAK,SAAO,GAAE,KAAK,YAAU;AAAA,EAAK;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,QAC9Y,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA,YAGN,GAAG,KAAK,MAAM,CAAC;AAAA;AAAA;AAAA;AAAA,EAGtB;AAAC;AAAE,IAAI,MAAI,CAAAD,QAAG;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,UAAS,GAAE,eAAc,EAAC,IAAE;AAAE,MAAG,EAAE,MAAM,OAAG,EAAE,YAAY,GAAE,CAAC,GAAE,CAAC,CAAC,CAAC,EAAE,QAAO,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,IAAC,CAAC;AAAE,MAAG,EAAE,cAAc,EAAE,KAAK,MAAI,GAAE;AAAC,QAAI,IAAE,EAAE,IAAI,CAAC,GAAE,MAAI,EAAE,CAAC,IAAE,EAAE,MAAM,CAAC,IAAE,EAAE,CAAC,CAAC;AAAE,WAAO,GAAG,EAAC,SAAQA,KAAE,OAAM,EAAC,OAAM,GAAE,OAAM,GAAE,OAAM,EAAE,MAAK,EAAC,CAAC;AAAA,EAAC;AAAC,MAAI,IAAE,CAAC,EAAC,MAAK,WAAU,MAAK,CAAC,CAAC,EAAC,CAAC;AAAE,IAAE,IAAI,OAAG,EAAE,KAAK,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,EAAC,CAAC,CAAC;AAAE,MAAI,IAAE,IAAI,GAAG,EAAE,OAAM,CAAC;AAAE,SAAOA,IAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,EAAE,OAAM,CAAC;AAAC;AAA5b,IAA8b,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,GAAG,IAAG,CAAC;AAA1B,IAA4B,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,GAAE,GAAE,OAAM,EAAC,IAAE,GAAE,IAAE,IAAI,GAAG,GAAG,OAAM,EAAE,OAAM,EAAE,KAAK;AAAE,SAAOC,IAAE,iBAAiB,GAAE,CAAC,GAAE,CAAC,GAAE,SAAS;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,MAAK,GAAE,UAAS,EAAC,IAAE;AAAE,SAAO,GAAG,GAAE,GAAE,GAAE,QAAOC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,CAAAD,QAAG;AAAC,MAAG,EAAC,SAAQ,GAAE,OAAMC,IAAC,IAAED,KAAE,EAAC,OAAM,GAAE,MAAK,GAAE,MAAK,GAAE,OAAM,EAAC,IAAEC,KAAE,IAAE,GAAG,GAAE,GAAE,GAAE,CAAC;AAAE,SAAO,EAAE,eAAe,CAAC,EAAE,MAAM,GAAE,GAAE,CAAC;AAAC;AAA5H,IAA8H,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,GAAG,IAAG,CAAC;AAA1B,IAA4B,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,EAAE,WAAU,CAAC;AAAhC,IAAkC,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,EAAE,KAAI,CAAC;AAA1B,IAA4B,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,EAAE,MAAK,CAAC;AAA3B,IAA6B,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,WAAS,0DAAyD,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,CAAC,EAAE,CAAC,GAAEA,KAAE,GAAE,EAAE,CAAC,CAAC,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,YAAU;AAAA,EAAgB;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,QACzyD,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA0Cb;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,QAAO,EAAC,IAAE,GAAE,EAAC,cAAa,GAAE,MAAK,GAAE,kBAAiB,EAAC,IAAE,GAAE,CAAC,GAAE,CAAC,IAAE,GAAE,IAAE,KAAG,IAAE,IAAE,IAAE,GAAE,IAAE,KAAG,IAAE,IAAE,IAAE,GAAE,IAAE,CAAC,EAAC,MAAK,WAAU,MAAK,CAAC,GAAE,CAAC,EAAC,GAAE,EAAC,MAAK,WAAU,MAAK,CAAC,IAAE,MAAG,CAAC,EAAC,CAAC,GAAE,IAAE,IAAI,GAAG,EAAE,OAAM,GAAE,CAAC;AAAE,SAAOC,IAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,WAAU,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE;AAAC,SAAK,gBAAc,CAAC,IAAI,GAAE,KAAK,WAAS;AAAA,qFACrU,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,eAAaA,KAAE,KAAK,YAAU,0BAA0BA,GAAC;AAAA,EAAE;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,QAC9U,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAyEb;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,QAAO,GAAE,IAAG,EAAC,IAAE,GAAE,EAAC,cAAa,EAAC,IAAE,GAAE,CAAC,EAAC,GAAE,CAAC,IAAE,EAAE,OAAM,CAAC,EAAC,GAAE,CAAC,IAAE,EAAE,OAAM,IAAE,CAAC,KAAG,IAAE,IAAE,IAAE,IAAE,GAAE,KAAG,IAAE,IAAE,IAAE,IAAE,CAAC,GAAE,IAAE,CAAC,KAAG,IAAE,IAAE,IAAE,IAAE,GAAE,KAAG,IAAE,IAAE,IAAE,IAAE,CAAC,GAAE,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,GAAE,IAAE,IAAE,GAAE,IAAE,IAAE,GAAE,IAAE,KAAK,KAAK,CAAC,IAAE,IAAE,GAAE,IAAE,KAAK,KAAK,CAAC,IAAE,IAAE,GAAE,IAAE,IAAI,GAAG,EAAE,OAAM,CAAC,GAAE,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,EAAC,GAAE,EAAC,MAAK,WAAU,MAAK,CAAC,CAAC,EAAC,GAAE,EAAC,MAAK,WAAU,MAAK,CAAC,CAAC,EAAC,GAAE,EAAC,MAAK,WAAU,MAAK,CAAC,CAAC,EAAC,GAAE,EAAC,MAAK,WAAU,MAAK,CAAC,CAAC,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,CAAC,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,CAAC,EAAC,CAAC;AAAE,SAAOC,IAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,WAAS,mDAAkD,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,CAAC,EAAE,CAAC,GAAEA,KAAE,GAAE,EAAE,CAAC,CAAC,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,mBAAiB,GAAE,KAAK,YAAU,iBAAiB,CAAC;AAAA,EAAE;AAAA,EAAC,cAAa;AAAC,QAAI;AAAE,WAAO,KAAK,mBAAiB,IAAE,4FAA0F,IAAE,mDAAkD;AAAA,QAChnC,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oCAmBkB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWhC;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,QAAO,EAAC,IAAE,GAAE,EAAC,cAAa,GAAE,kBAAiB,GAAE,MAAK,EAAC,IAAE,GAAE,CAAC,GAAE,CAAC,IAAE,GAAE,IAAE,KAAG,IAAE,IAAE,IAAE,GAAE,IAAE,KAAG,IAAE,IAAE,IAAE,GAAE,IAAE,CAAC,EAAC,MAAK,WAAU,MAAK,CAAC,GAAE,CAAC,EAAC,GAAE,EAAC,MAAK,WAAU,MAAK,CAAC,IAAE,MAAG,CAAC,EAAC,CAAC,GAAE,IAAE,IAAI,GAAG,EAAE,OAAM,GAAE,GAAE,CAAC;AAAE,SAAOC,IAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE;AAAC,SAAK,gBAAc,CAAC,IAAI,GAAE,KAAK,WAAS;AAAA,0CAChX,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,eAAaA,KAAE,KAAK,YAAU,gCAAgCA,GAAC;AAAA,EAAE;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,QACzS,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBA0CE,KAAK,eAAa,+BAA6B,sBAAsB;AAAA;AAAA;AAAA;AAAA,oBAIrE,KAAK,eAAa,+BAA6B,sBAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYpF;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,QAAO,GAAE,IAAG,EAAC,IAAE,GAAE,EAAC,cAAa,EAAC,IAAE,GAAE,CAAC,EAAC,GAAE,CAAC,IAAE,EAAE,OAAM,CAAC,EAAC,GAAE,CAAC,IAAE,EAAE,OAAM,IAAE,CAAC,KAAG,IAAE,IAAE,IAAE,IAAE,GAAE,KAAG,IAAE,IAAE,IAAE,IAAE,CAAC,GAAE,IAAE,CAAC,KAAG,IAAE,IAAE,IAAE,IAAE,GAAE,KAAG,IAAE,IAAE,IAAE,IAAE,CAAC,GAAE,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,GAAE,IAAE,IAAE,GAAE,IAAE,IAAE,GAAE,IAAE,KAAK,KAAK,CAAC,IAAE,IAAE,GAAE,IAAE,KAAK,KAAK,CAAC,IAAE,IAAE,GAAE,IAAE,IAAI,GAAG,EAAE,OAAM,CAAC,GAAE,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,EAAC,GAAE,EAAC,MAAK,WAAU,MAAK,CAAC,CAAC,EAAC,GAAE,EAAC,MAAK,WAAU,MAAK,CAAC,CAAC,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,CAAC,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,CAAC,EAAC,CAAC;AAAE,SAAOC,IAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,WAAS,sBAAqB,KAAK,YAAU;AAAA,EAAS;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAsB3zB,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQb;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,MAAK,EAAC,IAAE,GAAE,IAAE,EAAE,MAAM;AAAO,MAAG,MAAI,EAAE,QAAO,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,IAAC,CAAC;AAAE,MAAI,IAAE,EAAE,OAAM,IAAE,CAAC,GAAE,GAAE,GAAE,CAAC;AAAE,IAAE,QAAQ,CAAC,GAAE,MAAI;AAAC,QAAI,IAAE,IAAE,IAAE;AAAE,MAAE,CAAC,IAAE;AAAA,EAAC,CAAC;AAAE,MAAI,IAAE,EAAE,eAAe,GAAE,EAAE,KAAK,GAAE,IAAE,CAAC,GAAE,GAAE,GAAE,CAAC;AAAE,IAAE,QAAQ,OAAG;AAAC,QAAI,IAAE,IAAE,IAAE;AAAE,MAAE,CAAC,IAAE;AAAA,EAAC,CAAC;AAAE,MAAI,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,IAAE,IAAI,GAAG,CAAC,GAAE,IAAEA,IAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,EAAE,OAAM,CAAC;AAAE,EAAAA,IAAE,YAAY,EAAE,MAAM;AAAE,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,SAAOA,IAAE,YAAY,EAAE,MAAM,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE;AAAC,SAAK,cAAY,CAAC,GAAE,KAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,WAAS;AAAA,8BAC5yB,KAAK,YAAU,UAAS,KAAK,cAAY,GAAE,OAAOA,OAAG,YAAU,KAAK,YAAU,qBAAoB,KAAK,cAAY,yCAAwC,KAAK,aAAW,aAAW,KAAK,YAAU,2BAA0B,KAAK,cAAY,oDAAmD,KAAK,aAAW;AAAA,EAAQ;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,UACnW,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAWN,KAAK,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQvB;AAAC;AAAE,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,CAAC,EAAC,QAAOD,KAAE,OAAM,GAAE,SAAQC,IAAC,MAAI;AAAC,MAAG,EAAC,OAAM,EAAC,IAAED,KAAE,EAAC,SAAQ,GAAE,WAAU,GAAE,QAAO,EAAC,IAAE,GAAE,IAAEC,KAAE,IAAE,IAAI,GAAG,EAAE,OAAM,CAAC,GAAE,CAAC,GAAE,CAAC,IAAE,EAAE,eAAe,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,GAAE,IAAE,CAAC,EAAC,MAAK,WAAU,MAAK,CAAC,CAAC,EAAC,GAAE,EAAC,MAAK,WAAU,MAAK,CAAC,CAAC,EAAC,GAAE,EAAC,MAAK,WAAU,MAAK,CAAC,KAAK,IAAI,CAAC,CAAC,EAAC,GAAE,EAAC,MAAK,WAAU,MAAK,CAAC,KAAK,IAAI,CAAC,CAAC,EAAC,CAAC;AAAE,SAAO,OAAO,KAAG,WAAS,EAAE,KAAK,EAAC,MAAK,WAAU,MAAK,CAAC,OAAO,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAC,CAAC,IAAE,EAAE,KAAK,EAAC,MAAK,WAAU,MAAK,EAAC,CAAC,GAAE,EAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,EAAE,OAAM,CAAC;AAAC,EAAC;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,EAAE,MAAK,CAAC;AAA3B,IAA6B,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,EAAE,OAAM,eAAc,GAAE,CAAC;AAA5C,IAA8C,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE,GAAE,GAAE,GAAE,GAAE,IAAE,MAAG;AAAC,SAAK,gBAAc,CAAC,WAAU,SAAS,GAAE,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,SAAO,MAAG,KAAK,cAAY,GAAE,KAAK,OAAK,GAAE,KAAK,iBAAe,GAAE,KAAK,iBAAe,EAAE,CAAC,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,GAAE,KAAK,aAAa,GAAE,KAAK,yBAAuBA,MAAE,GAAE,KAAK,YAAU,WAAW,CAAC,IAAI,CAAC,IAAI,KAAK,sBAAsB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM;AAAG,QAAI,IAAE,GAAG,EAAE,MAAM;AAAE,SAAK,WAAS,4BAA4B,CAAC,uBAAsB,KAAK,cAAY,GAAE,KAAK,cAAY;AAAA,EAAC;AAAA,EAAC,cAAa;AAAC,QAAI,IAAE;AAAG,SAAK,gBAAc,IAAE,IAAE,cAAY,KAAK,gBAAc,MAAI,IAAE;AAAgB,QAAIA,MAAE,cAAc,CAAC,KAAI,IAAE,KAAK,yBAAuB,wBAAsB,oBAAmB,IAAE,IAAG,IAAE;AAAG,SAAK,eAAe,EAAE,WAAS,KAAG,IAAE,kBAAiB,IAAE;AAAA;AAAA;AAAA;AAAA,WAI16C,KAAK,eAAe,EAAE,WAAS,MAAI,IAAE,wCAAuC,IAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAW9E,QAAI,IAAE,cAAc,MAAM,KAAK,EAAC,QAAO,KAAK,YAAW,GAAE,CAAC,GAAE,MAAI,UAAU,CAAC,GAAG,EAAE,KAAK,IAAI,CAAC;AAAI,WAAM;AAAA,MACvG,CAAC;AAAA,QACC,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,0CAKwBA,GAAC;AAAA,8DACmB,CAAC;AAAA;AAAA;AAAA,gBAG/C,GAAG,KAAK,IAAI,CAAC,IAAI,CAAC;AAAA,qDACmB,CAAC;AAAA;AAAA,YAE1C,KAAK,iBAAe,GAAG,sBAAqB,eAAc,KAAK,IAAI,IAAE,6DAA6D;AAAA;AAAA;AAAA,EAEtI;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,SAAQ,GAAE,SAAQ,EAAC,IAAE,GAAE,EAAC,OAAM,EAAC,IAAE,GAAE,EAAC,WAAU,GAAE,YAAW,GAAE,WAAU,GAAE,SAAQ,GAAE,YAAW,EAAC,IAAE,EAAE,gBAAgB,GAAE,GAAE,CAAC,GAAE,IAAE,CAAC,IAAE,GAAE,CAAC;AAAE,MAAG,MAAI,EAAE,QAAOC,IAAE,eAAe,GAAE,EAAE,KAAK;AAAE,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,CAAC,GAAE,CAAC,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,CAAC,GAAE,CAAC,EAAC,EAAC,CAAC,GAAE,IAAE,EAAE,OAAM,IAAE,GAAG,EAAC,SAAQA,KAAE,OAAM,EAAC,OAAM,GAAE,OAAM,GAAE,OAAM,EAAC,EAAC,CAAC,GAAE,IAAE,EAAE,cAAc,EAAE,KAAK,GAAE,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,CAAC,CAAC,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,CAAC,EAAC,CAAC,GAAE,IAAE,IAAI,GAAG,EAAE,OAAM,GAAE,EAAE,MAAM,QAAO,EAAE,MAAM,QAAO,GAAE,GAAE,CAAC,GAAE,IAAEA,IAAE,iBAAiB,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,SAAOA,IAAE,YAAY,EAAE,MAAM,GAAEA,IAAE,YAAY,EAAE,MAAM,GAAEA,IAAE,YAAY,EAAE,MAAM,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE;AAAC,SAAK,cAAY,CAAC,GAAE,KAAK,gBAAc,CAAC,kBAAiB,QAAQ,GAAE,KAAK,WAAS,oBAAmB,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,OAAKA,KAAE,KAAK,YAAU,iBAAiBA,GAAC;AAAA,EAAE;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8CAMrlC,KAAK,SAAO,SAAO,MAAI,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QASjE,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOb;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,gBAAe,GAAE,QAAO,EAAC,IAAE,GAAE,EAAC,MAAK,EAAC,IAAE,GAAE,IAAE,IAAI,GAAG,CAAC,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,GAAE,CAAC,GAAE,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,MAAM,CAAC,CAAC,EAAC,CAAC;AAAE,SAAOC,IAAE,iBAAiB,GAAE,CAAC,GAAE,CAAC,GAAE,SAAQ,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,KAAI,KAAI,GAAG,GAAE,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAYA,KAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,QAAM,GAAE,KAAK,OAAK,GAAE,KAAK,YAAU;AAAA,EAAQ;AAAA,EAAC,cAAa;AAAC,QAAI,GAAEA;AAAE,QAAG,KAAK,OAAK,EAAE,OAAM,MAAM,kBAAkB,KAAK,IAAI,uBAAuB;AAAE,QAAG,KAAK,SAAO,EAAE,CAAAA,MAAE,SAAQ,IAAE;AAAA,SAAY;AAAC,UAAI,IAAE,CAAC,WAAU,WAAU,WAAU,SAAS,GAAE,IAAE,CAAC,GAAE,IAAE,CAAC;AAAE,eAAQ,IAAE,GAAE,IAAE,KAAK,YAAY,QAAO,IAAI,GAAE,KAAK,GAAG,EAAE,CAAC,CAAC,EAAE,GAAE,IAAE,KAAK,SAAO,EAAE,KAAK,GAAG,EAAE,CAAC,CAAC,EAAE;AAAE,UAAE,EAAE,KAAK,GAAEA,MAAE,EAAE,KAAK;AAAA,IAAC;AAAC,WAAM;AAAA,QAC52B,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA,4BAGU,CAAC;AAAA;AAAA,2CAEcA,GAAC;AAAA;AAAA,2CAEDA,GAAC;AAAA;AAAA;AAAA;AAAA;AAAA,EAIvC;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,WAAU,GAAE,GAAE,GAAE,GAAE,EAAC,IAAE,GAAE,IAAE,IAAI,GAAG,EAAE,MAAM,QAAO,EAAE,OAAM,EAAE,MAAM,MAAM;AAAE,SAAOC,IAAE,iBAAiB,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,GAAG,EAAE,OAAM,EAAE,KAAK,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,EAAE,KAAI,CAAC;AAA1B,IAA4B,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,EAAE,QAAO,CAAC;AAA7B,IAA+B,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,EAAE,KAAI,CAAC;AAA1B,IAA4B,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,EAAE,IAAG,CAAC;AAAzB,IAA2B,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,EAAE,KAAI,CAAC;AAA1B,IAA4B,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,EAAE,SAAQ,CAAC;AAA9B,IAAgC,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE,GAAE,GAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,cAAY,CAAC,GAAE,KAAK,WAAS,IAAG,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK;AAAG,QAAI,IAAE,IAAI,MAAM,EAAE,MAAM;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,IAAI,GAAE,CAAC,IAAE,EAAE,EAAE,CAAC,CAAC;AAAE,SAAK,cAAY,GAAE,KAAK,SAAO,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,SAAO,GAAE,KAAK,eAAaA,KAAE,KAAK,YAAU,0BAA0B,GAAG,EAAE,MAAM,CAAC,2BAA2B,GAAG,CAAC,CAAC,MAAK,EAAE,IAAI,CAAC,GAAE,MAAI;AAAC,WAAK,YAAU,OAAO,CAAC;AAAA,IAAe,CAAC,GAAE,KAAK,YAAU,kBAAkB,CAAC;AAAA,EAAE;AAAA,EAAC,cAAa;AAAC,QAAI,IAAE,GAAG,KAAK,YAAY,MAAM,GAAEA,MAAE,GAAG,KAAK,MAAM;AAAE,WAAM;AAAA,QAC/1C,GAAG,KAAK,cAAa,SAAS,CAAC;AAAA,QAC/B,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA,kDAGgC,KAAK,YAAY,MAAM,KAAK,CAAC,IAAIA,GAAC;AAAA;AAAA,YAExE,GAAG,KAAK,QAAO,IAAE,CAAC;AAAA;AAAA;AAAA;AAAA,EAGzB;AAAC;AAAE,IAAI,MAAI,CAAAD,QAAG;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,YAAW,GAAE,UAAS,EAAC,IAAE;AAAE,IAAE,OAAO,EAAE,MAAM,UAAQ,GAAE,MAAI,uEAAuE;AAAE,MAAI,IAAE,EAAE,OAAO,CAAC,GAAE,MAAI,IAAE,CAAC,GAAE,IAAE,CAAC,CAAC,GAAE,CAAC,CAAC;AAAE,IAAE,KAAK,GAAG,CAAC;AAAE,WAAQ,IAAE,IAAE,EAAE,QAAO,IAAE,EAAE,MAAM,QAAO,EAAE,EAAE,GAAE,KAAK,CAAC,GAAE,CAAC,CAAC;AAAE,MAAI,IAAE,EAAE,IAAI,CAAC,GAAE,MAAI,EAAE,CAAC,IAAE,EAAE,MAAM,CAAC,IAAE,EAAE,CAAC,CAAC,GAAE,IAAE,EAAE,YAAY,GAAE,GAAE,GAAE,KAAE,GAAE,IAAE,EAAE,YAAY,EAAE,QAAO,EAAE,QAAO,KAAE,GAAE,IAAE,EAAE,oBAAoB,GAAE,GAAE,GAAE,KAAE,GAAE,IAAE,EAAE,eAAe,CAAC,GAAE,IAAE,IAAI,GAAG,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,EAAE,MAAM,GAAE,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,EAAC,CAAC;AAAE,IAAE,IAAI,OAAG,EAAE,KAAK,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,EAAC,CAAC,CAAC;AAAE,MAAI,IAAEC,IAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,EAAE,OAAM,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,SAAOA,IAAE,YAAY,EAAE,MAAM,GAAE;AAAC;AAAnsB,IAAqsB,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,SAAQ,WAAU,YAAY,GAAE,KAAK,cAAY,CAAC,GAAE,KAAK,WAAS,wCAAuC,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,SAAO,MAAG,KAAK,cAAY,GAAE,KAAK,OAAK,GAAE,KAAK,iBAAe,EAAE,CAACA,GAAC,CAAC,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,CAACA,GAAC,GAAE,KAAK,aAAa,GAAE,KAAK,YAAU;AAAA,EAAkB;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,MAClnC,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UASN,GAAG,qBAAoB,SAAQ,KAAK,IAAI,CAAC;AAAA;AAAA;AAAA;AAAA,EAGhD;AAAC;AAbgwB,IAa9vB,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE;AAAC,SAAK,gBAAc,CAAC,YAAY,GAAE,KAAK,cAAY,CAAC,GAAE,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,SAAO,MAAG,KAAK,cAAY,CAAC,CAAC,GAAE,KAAK,iBAAe,EAAEA,GAAC,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAeA,KAAE,KAAK,aAAa,GAAE,KAAK,YAAU;AAAA,EAA6B;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,MACpS,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA,UAGN,GAAG,sBAAqB,KAAI,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA,EAG3C;AAAC;AApBgwB,IAoB9vB,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE;AAAC,SAAK,gBAAc,CAAC,cAAa,oBAAoB,GAAE,KAAK,cAAY,CAAC,GAAE,KAAK,WAAS,qBAAoB,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,GAAE,KAAK,OAAKA,KAAE,KAAK,iBAAe,EAAE,CAAC,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,GAAE,KAAK,aAAa,GAAE,KAAK,YAAU;AAAA,EAAmB;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,MACzV,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,YAKJ,KAAK,SAAO,YAAU,6DAA2D,wDAAwD;AAAA;AAAA;AAAA;AAAA;AAAA,EAIlJ;AAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,IAAE,OAAG,GAAE;AAAC,MAAI,IAAE,EAAE,cAAcD,IAAE,KAAK,IAAEA,IAAE,MAAM,CAAC,GAAE,IAAEA,IAAE,OAAM,IAAE,EAAE,cAAc,EAAE,KAAK,GAAE,IAAE,EAAE,SAASC,IAAE,MAAM,GAAE,IAAE,IAAE,IAAE,EAAE,IAAE,CAAC,IAAE,IAAE,GAAE,GAAE,IAAED,IAAE,MAAM,MAAM;AAAE,IAAE,CAAC,IAAE;AAAE,MAAI,IAAE,IAAE,GAAE,IAAE,GAAG,EAAC,SAAQ,GAAE,OAAM,EAAC,OAAM,GAAE,OAAM,GAAE,OAAM,EAAC,EAAC,CAAC;AAAE,MAAE,IAAI,GAAG,GAAE,GAAE,CAAC;AAAE,MAAI,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,CAAC,CAAC,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,CAAC,EAAC,CAAC,GAAE,IAAE,EAAE,iBAAiB,GAAE,CAACA,KAAE,GAAEC,GAAC,GAAE,GAAE,GAAE,CAAC;AAAE,MAAG,EAAE,QAAO;AAAE,MAAI,IAAE,GAAG,EAAC,SAAQ,GAAE,OAAM,EAAC,OAAM,CAAC,CAAC,GAAE,OAAM,GAAE,OAAM,QAAO,EAAC,CAAC;AAAE,MAAE,IAAI,GAAG,GAAEA,IAAE,KAAK;AAAE,MAAI,IAAE,EAAE,iBAAiB,GAAE,CAACA,GAAC,GAAE,SAAQ,MAAK,CAAC,GAAE,IAAE,GAAG,EAAC,SAAQ,GAAE,OAAM,EAAC,OAAM,GAAE,OAAM,GAAE,OAAM,EAAC,EAAC,CAAC;AAAE,MAAE,IAAI,GAAG,GAAE,CAAC,GAAE,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,CAAC,CAAC,EAAC,CAAC;AAAE,MAAI,IAAE,EAAE,iBAAiB,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,GAAE,CAAC;AAAE,SAAO,EAAE,YAAY,EAAE,MAAM,GAAE,EAAE,YAAY,EAAE,MAAM,GAAE;AAAC;AAAC,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,MAAK,GAAE,SAAQ,GAAE,YAAW,EAAC,IAAE;AAAE,SAAO,GAAG,GAAE,GAAE,GAAE,OAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,MAAK,GAAE,SAAQ,GAAE,YAAW,EAAC,IAAE;AAAE,SAAO,GAAG,GAAE,GAAE,GAAE,MAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK;AAAG,QAAI,IAAE,IAAI,MAAM,EAAE,MAAM;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,IAAI,GAAE,CAAC,IAAE,EAAE,CAAC,IAAEA,IAAE,CAAC;AAAE,SAAK,cAAY,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,OAAK,KAAK,YAAY,QAAO,KAAK,YAAU;AAAA,EAAM;AAAA,EAAC,cAAa;AAAC,QAAI,IAAE,IAAI,KAAK,MAAK,WAAW;AAAE,WAAM;AAAA,QAC/2C,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA,yCAGuB,CAAC;AAAA;AAAA;AAAA;AAAA,EAGrC;AAAC;AAAE,SAAS,IAAID,KAAE,IAAE,IAAG;AAAC,MAAGA,OAAG,EAAE,OAAM,MAAM,iBAAiBA,GAAC,uBAAuB;AAAE,MAAGA,QAAI,EAAE,QAAM,YAAY,CAAC;AAAU,MAAIC,MAAE,CAAC,WAAU,WAAU,WAAU,SAAS,GAAE,IAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAED,KAAE,IAAI,GAAE,KAAK,IAAIC,IAAE,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI;AAAE,SAAO,EAAE,KAAK;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,MAAK,EAAC,IAAE;AAAE,MAAGC,IAAE,mBAAmB,CAAC,CAAC,CAAC,KAAG,EAAE,UAAQ,YAAU,EAAE,MAAM,UAAQ,GAAE;AAAC,QAAI,IAAEA,IAAE,SAAS,EAAE,MAAM,GAAE,IAAE,EAAE,UAAQ,WAAS,EAAE,IAAI,OAAG,EAAE,aAAa,CAAC,CAAC,IAAE,GAAE,IAAE,GAAG,EAAE,OAAM,EAAE,OAAM,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC;AAAE,WAAOA,IAAE,eAAe,EAAE,OAAM,EAAE,OAAM,EAAE,MAAM;AAAA,EAAC;AAAC,MAAI,IAAE,IAAI,GAAG,EAAE,OAAM,CAAC;AAAE,SAAOA,IAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,EAAE,KAAK;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,GAAE;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,eAAc,GAAE,cAAa,GAAE,cAAa,EAAC,IAAE,GAAE,EAAC,aAAY,EAAC,IAAE,GAAE,EAAC,WAAU,GAAE,YAAW,GAAE,WAAU,GAAE,SAAQ,GAAE,YAAW,EAAC,IAAE,EAAE,gBAAgB,GAAE,GAAE,CAAC,GAAE,IAAE;AAAG,MAAG,EAAE,UAAQ,UAAS;AAAC,QAAI,IAAEC,IAAE,WAAW,CAAC,GAAE,IAAEA,IAAE,WAAW,CAAC,GAAE,IAAE,EAAE,aAAaA,IAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC,GAAE,IAAE,GAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,WAAOA,IAAE,eAAe,GAAE,EAAE,OAAM,EAAE,MAAM;AAAA,EAAC;AAAC,MAAI,IAAE,CAAC,IAAE,GAAE,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,CAAC,GAAE,CAAC,EAAC,EAAC,CAAC,GAAE,IAAE,EAAE,MAAM,SAAO,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,CAAC,GAAE,CAAC,EAAC,EAAC,CAAC,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAE,IAAE,EAAE,OAAM,IAAEA,IAAE,eAAe,CAAC,GAAE,GAAE,EAAE,oBAAoB,GAAE,CAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC,GAAE,IAAE,EAAE,cAAc,CAAC,GAAE,CAAC,CAAC,GAAE,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,CAAC,CAAC,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,CAAC,EAAC,CAAC;AAAE,UAAO,GAAE;AAAA,IAAC,KAAK;AAAE;AAAA,IAAM,KAAK;AAAE;AAAC,YAAI,IAAE,IAAI,GAAG,CAAC,GAAE,CAAC,GAAE,GAAE,EAAE,MAAM,QAAO,EAAE,MAAM,QAAO,GAAE,GAAE,GAAE,CAAC;AAAE,QAAAA,IAAE,iBAAiB,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,GAAE,CAAC;AAAA,MAAC;AAAC;AAAA,IAAM;AAAQ;AAAC,YAAI,IAAE,IAAI,GAAG,CAAC,GAAE,CAAC,GAAE,GAAE,EAAE,MAAM,QAAO,EAAE,MAAM,QAAO,GAAE,GAAE,GAAE,CAAC;AAAE,QAAAA,IAAE,iBAAiB,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,GAAE,CAAC;AAAA,MAAC;AAAC;AAAC,YAAI,IAAE,IAAI,GAAG,CAAC,GAAE,CAAC,GAAE,GAAE,EAAE,MAAM,QAAO,EAAE,MAAM,QAAO,GAAE,GAAE,CAAC;AAAE,QAAAA,IAAE,iBAAiB,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,GAAE,CAAC;AAAA,MAAC;AAAA,EAAC;AAAC,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,SAAOA,IAAE,YAAY,EAAE,MAAM,GAAEA,IAAE,YAAY,EAAE,MAAM,GAAEA,IAAE,YAAY,EAAE,MAAM,GAAEA,IAAE,YAAY,EAAE,MAAM,GAAEA,IAAE,YAAY,EAAE,MAAM,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,iBAAgB,GAAE,MAAK,EAAC,IAAE,GAAE,IAAE,EAAE,eAAe,GAAE,EAAE,KAAK,EAAE,CAAC,GAAE,IAAE,EAAE,iBAAiB,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,MAAM,QAAO,IAAE,IAAI,MAAM,CAAC,EAAE,KAAK,CAAC,GAAE,IAAE,EAAE,MAAM,MAAM;AAAE,SAAO,EAAE,IAAI,OAAG;AAAC,QAAI,IAAE,CAAC,GAAG,CAAC;AAAE,MAAE,CAAC,IAAE;AAAE,QAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,OAAM,GAAE,MAAK,EAAC,EAAC,CAAC;AAAE,WAAO,EAAE,CAAC,KAAG,GAAE;AAAA,EAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,EAAE,KAAI,CAAC;AAA1B,IAA4B,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,CAAC,EAAC,QAAOD,KAAE,SAAQ,EAAC,MAAI;AAAC,MAAG,EAAC,GAAEC,IAAC,IAAED,KAAE,IAAE,GAAE,IAAE,IAAI,GAAGC,IAAE,OAAM,EAAE,MAAM;AAAE,SAAO,EAAE,iBAAiB,GAAE,CAACA,GAAC,GAAEA,IAAE,KAAK;AAAC,EAAC;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,GAAG,mBAAkB,CAAC;AAAzC,IAA2C,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,SAAS,IAAI,EAAC,QAAOD,KAAE,OAAM,GAAE,SAAQC,IAAC,GAAE;AAAC,MAAG,EAAC,GAAE,EAAC,IAAED,KAAE,IAAE,IAAI,GAAG,EAAE,OAAM,EAAE,MAAK,kBAAkB,GAAE,IAAE,CAAC,EAAC,MAAK,WAAU,MAAK,CAAC,EAAE,KAAK,EAAC,CAAC;AAAE,SAAOC,IAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,gBAAc,GAAE,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,eAAc,CAAC,KAAK,eAAc,GAAE,CAAC,CAAC;AAAE,QAAIA,MAAE,GAAG,KAAK,YAAY,MAAM;AAAE,SAAK,WAAS,WAAWA,GAAC,gBAAgBA,GAAC,MAAK,KAAK,YAAU;AAAA,EAAc;AAAA,EAAC,cAAa;AAAC,QAAI,IAAE,KAAK,YAAY,QAAOA,MAAE;AAAG,QAAG,MAAI,EAAE,CAAAA,MAAE;AAAA,SAAiD;AAAC,UAAI,IAAE;AAAE,MAAAA,MAAE,KAAK,YAAY,IAAI,CAAC,GAAE,OAAK,KAAI,KAAK,YAAY,WAAS,IAAE,6BAA6B,CAAC,sBAAsB,CAAC,MAAI,UAAU,IAAE,CAAC,wBAAwB,CAAC,sBAAsB,CAAC,IAAI,EAAE,KAAK,GAAG;AAAA,IAAC;AAAC,WAAM;AAAA,SAC5oH,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA,0CAGuBA,GAAC;AAAA;AAAA;AAAA;AAAA,EAGrC;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,OAAM,GAAE,KAAI,GAAE,SAAQ,GAAE,WAAU,GAAE,SAAQ,GAAE,cAAa,GAAE,aAAY,GAAE,gBAAe,EAAC,IAAE,GAAE,EAAC,kBAAiB,GAAE,YAAW,GAAE,YAAW,GAAE,WAAU,GAAE,eAAc,GAAE,OAAM,GAAE,KAAI,GAAE,SAAQ,EAAC,IAAE,GAAG,UAAU,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE;AAAE,MAAG,EAAE,KAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAA,WAAU,KAAG,GAAE;AAAC,MAAE,OAAO,EAAE,MAAM,UAAQ,GAAE,MAAI,yCAAyC,EAAE,MAAM,MAAM,EAAE;AAAE,QAAI,IAAE,GAAG,gBAAgB,GAAE,GAAE,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,GAAE,MAAK,EAAC,EAAC,CAAC;AAAE,QAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAEA,IAAE,YAAY,EAAE,MAAM;AAAA,EAAC,WAASA,IAAE,mBAAmB,CAAC,CAAC,CAAC,GAAE;AAAC,QAAI,IAAEA,IAAE,SAAS,EAAE,MAAM,GAAE,IAAE,GAAG,EAAE,OAAM,EAAE,OAAM,CAAC,GAAE,IAAE,GAAG,GAAE,GAAE,GAAE,CAAC;AAAE,QAAEA,IAAE,eAAe,GAAE,EAAE,OAAM,EAAE,MAAM;AAAA,EAAC,OAAK;AAAC,QAAI,IAAE,IAAI,GAAG,CAAC,GAAE,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,EAAC,CAAC,GAAE,IAAEA,IAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,EAAE,OAAM,CAAC;AAAE,QAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAEA,IAAE,YAAY,EAAE,MAAM;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,WAAU,GAAE,aAAY,GAAE,SAAQ,GAAE,UAAS,GAAE,UAAS,GAAE,wBAAuB,EAAC,IAAE,GAAE,EAAC,MAAK,GAAE,YAAW,EAAC,IAAE,GAAE,IAAEC,IAAE,SAAS,EAAE,MAAM,GAAE,IAAEA,IAAE,SAAS,EAAE,MAAM,GAAE,CAAC,GAAE,CAAC,IAAE,GAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,SAAM,CAACA,IAAE,eAAe,CAAC,EAAE,MAAM,GAAE,UAAS,CAAC,GAAEA,IAAE,eAAe,EAAE,OAAM,SAAQ,CAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,GAAG,KAAI,eAAc,IAAG,iBAAgB,KAAE,CAAC;AAA9D,IAAgE,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,EAAE,IAAG,CAAC;AAAzB,IAA2B,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,EAAE,KAAI,CAAC;AAA1B,IAA4B,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,QAAO,GAAE,SAAQ,GAAE,SAAQ,EAAC,IAAE,GAAE,CAAC,IAAE,GAAE,EAAC,WAAU,GAAE,YAAW,GAAE,WAAU,GAAE,SAAQ,GAAE,YAAW,EAAC,IAAE,EAAE,gBAAgB,GAAE,GAAE,EAAE,KAAK,GAAE,IAAE,CAAC,IAAE,GAAE,CAAC;AAAE,MAAG,MAAI,EAAE,QAAOC,IAAE,eAAe,EAAE,OAAM,EAAE,KAAK;AAAE,MAAI,IAAE,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,CAAC,GAAE,CAAC,EAAC,EAAC,CAAC;AAAE,IAAE,KAAK,CAAC;AAAE,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,CAAC,GAAE,CAAC,EAAC,EAAC,CAAC;AAAE,IAAE,KAAK,CAAC;AAAE,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,IAAE,KAAK,CAAC;AAAE,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,MAAK,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAC,EAAC,CAAC,GAAE,IAAE,IAAI,GAAG,CAAC,GAAE,CAAC,GAAE,GAAE,EAAE,MAAM,QAAO,EAAE,MAAM,QAAO,GAAE,GAAE,EAAE,OAAM,KAAE,GAAE,IAAE,EAAE,cAAc,CAAC,GAAE,CAAC,CAAC,GAAE,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,CAAC,CAAC,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,CAAC,EAAC,CAAC,GAAE,IAAEA,IAAE,iBAAiB,GAAE,CAAC,GAAE,CAAC,GAAE,EAAE,OAAM,GAAE,CAAC;AAAE,IAAE,KAAK,CAAC;AAAE,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAE,MAAK,EAAC,CAAC;AAAE,SAAO,EAAE,QAAQ,OAAGA,IAAE,YAAY,EAAE,MAAM,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,KAAI,SAAS,GAAE,KAAK,gBAAc,CAAC,KAAI,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,WAAS;AAAA,gCAC9sF,KAAK,YAAU;AAAA,EAAM;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,UAC/D,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkEb;AAAC;AApE0+E,IAoEx+E,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,KAAI,SAAS,GAAE,KAAK,gBAAc,CAAC,KAAI,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,WAAS,8CAA6C,KAAK,YAAU;AAAA,EAAO;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,UAC/U,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA0Db;AAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,QAAI,QAAMA,IAAE,YAAY,EAAE,MAAM;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAI,IAAE;AAAE,SAAK,IAAEA,MAAG,MAAG;AAAE,SAAO;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,GAAE,GAAE,QAAO,EAAC,IAAE,GAAE,IAAE,EAAE,OAAM,IAAE,EAAE,EAAE,SAAO,CAAC;AAAE,MAAGC,IAAE,mBAAmB,CAAC,CAAC,CAAC,GAAE;AAAC,QAAI,IAAEA,IAAE,SAAS,EAAE,MAAM,GAAE,CAAC,GAAE,CAAC,IAAE,GAAG,GAAE,GAAE,EAAE,OAAM,GAAE,CAAC;AAAE,WAAM,CAACA,IAAE,eAAe,EAAE,OAAM,EAAE,OAAM,EAAE,MAAM,GAAEA,IAAE,eAAe,EAAE,OAAM,EAAE,OAAM,EAAE,MAAM,CAAC;AAAA,EAAC;AAAC,MAAG,MAAI,EAAE,QAAO,EAAE,EAAE,SAAO,CAAC,IAAE,GAAE,CAACA,IAAE,eAAe,GAAE,EAAE,OAAM,CAAC,CAAC,GAAEA,IAAE,eAAe,GAAE,SAAQ,CAAC,CAAC,CAAC;AAAE,MAAG,MAAI,EAAE,QAAM,CAAC,GAAE,GAAG,EAAC,OAAM,EAAC,OAAM,GAAE,OAAM,SAAQ,OAAM,EAAC,GAAE,SAAQA,IAAC,CAAC,CAAC;AAAE,MAAI,IAAE,EAAE,cAAc,CAAC,IAAE,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,OAAM,EAAC,OAAM,CAAC,GAAE,CAAC,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAE,IAAE,GAAG,CAAC,GAAE,IAAE,GAAG,CAAC,GAAE,IAAE,MAAK,IAAE,MAAI,MAAI,OAAK,CAAC,GAAE,CAAC,IAAE,CAAC,GAAE,CAAC,GAAE,IAAE,CAAC,GAAE,GAAE,MAAI;AAAC,QAAI,IAAE,EAAE,GAAE,IAAE,IAAI,GAAG,CAAC,GAAE,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,CAAC,CAAC,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,MAAI,OAAK,IAAE,CAAC,EAAC,GAAE,EAAC,MAAK,WAAU,MAAK,CAAC,OAAO,iBAAiB,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,CAAC,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,CAAC,EAAC,CAAC,GAAE,IAAE;AAAE,QAAEA,IAAE,iBAAiB,GAAE,GAAE,SAAQ,CAAC,GAAE,GAAGA,KAAE,CAAC;AAAA,EAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,KAAG,GAAE;AAAC,QAAI,IAAE,IAAE;AAAE,aAAQ,IAAE,GAAE,KAAG,GAAE,KAAG,EAAE,GAAE,GAAE,GAAE,CAAC,GAAE,CAAC,CAAC;AAAA,EAAC;AAAC,WAAQ,IAAE,GAAE,IAAE,GAAE,KAAG,GAAE;AAAC,QAAI,IAAE,EAAE,GAAE,IAAE,IAAI,GAAG,CAAC,GAAE,IAAE,CAAC,CAAC,GAAE,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,CAAC,CAAC,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,MAAI,OAAK,IAAE,CAAC,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,CAAC,EAAC,CAAC,GAAE,IAAE;AAAE,QAAEA,IAAE,iBAAiB,GAAE,GAAE,SAAQ,CAAC,GAAE,GAAGA,KAAE,CAAC;AAAE,QAAI,IAAE,IAAE,GAAE,IAAE,IAAE;AAAE,aAAQ,IAAE,GAAE,KAAG,GAAE,KAAG,EAAE,GAAE,GAAE,GAAE,EAAE,KAAK;AAAA,EAAC;AAAC,MAAI,IAAE;AAAE,MAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,GAAE,MAAK,CAAC,GAAE,CAAC,EAAC,EAAC,CAAC,GAAE,GAAGA,KAAE,CAAC;AAAE,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,GAAE,SAAQ,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,MAAK,GAAE,WAAU,EAAC,EAAC,CAAC;AAAE,KAAGA,KAAE,CAAC;AAAE,MAAI,IAAE,EAAE,MAAM,GAAE,EAAE;AAAE,IAAE,KAAK,CAAC,GAAE,IAAE,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,OAAM,EAAC,OAAM,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAE,GAAGA,KAAE,CAAC;AAAE,MAAI,IAAE;AAAE,SAAO,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,OAAM,EAAC,OAAM,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAE,GAAGA,KAAE,CAAC,GAAE,CAAC,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,SAAQ,YAAY,GAAE,KAAK,WAAS,iEAAgE,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,YAAU;AAAA,EAAW;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAgE76D,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAoDb;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,GAAE,YAAW,EAAC,IAAE,GAAE,EAAC,eAAc,GAAE,UAAS,GAAE,WAAU,GAAE,aAAY,EAAC,IAAE,GAAE,CAAC,GAAE,GAAE,GAAE,CAAC,IAAE,EAAE,OAAM,CAAC,GAAE,CAAC,IAAE,KAAG,OAAK,IAAE,CAAC,GAAE,CAAC,GAAE,IAAE,CAAC,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,IAAI,GAAG,CAAC,GAAE,IAAE,MAAI,YAAU,IAAE,GAAE;AAAE,UAAO,GAAE;AAAA,IAAC,KAAI;AAAW,UAAE;AAAE;AAAA,IAAM,KAAI;AAAU,UAAE;AAAE;AAAA,IAAM,KAAI;AAAO,UAAE;AAAE;AAAA,IAAM,KAAI;AAAU,UAAE;AAAE;AAAA,IAAM;AAAQ,UAAE;AAAE;AAAA,EAAK;AAAC,MAAI,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,CAAC,CAAC,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,CAAC,EAAC,GAAE,EAAC,MAAK,WAAU,MAAK,CAAC,CAAC,EAAC,CAAC;AAAE,SAAOC,IAAE,iBAAiB,GAAE,CAAC,GAAE,CAAC,GAAE,WAAU,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,EAAC,IAAE,GAAE,EAAC,MAAK,EAAC,IAAE;AAAE,MAAE,MAAI,KAAG,EAAE,MAAM;AAAQ,MAAI,IAAE,GAAE,IAAE,EAAE,MAAM,QAAO,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,IAAI,MAAM,IAAE,CAAC,GAAE,IAAE;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,IAAI,OAAI,MAAI,EAAE,GAAG,IAAE,EAAE,MAAM,CAAC;AAAG,MAAI,IAAE,CAAC,GAAE,IAAE,IAAI,MAAM,CAAC,EAAE,KAAK,CAAC,GAAE,IAAE,EAAE,MAAM,MAAM;AAAE,IAAE,CAAC,IAAE;AAAE,MAAI,IAAE,IAAI,MAAM,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,KAAI;AAAC,MAAE,CAAC,IAAE;AAAE,QAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,OAAM,GAAE,MAAK,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,MAAE,CAAC,IAAE,GAAE,EAAE,KAAK,CAAC;AAAA,EAAC;AAAC,SAAO,EAAE,QAAQ,OAAGA,IAAE,YAAY,EAAE,MAAM,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE;AAAC,QAAG,KAAK,cAAY,CAAC,GAAE,KAAK,gBAAc,CAAC,KAAI,YAAY,GAAE,KAAK,WAAS,kCAAiC,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,SAAO,MAAG,KAAK,cAAYA,KAAE,KAAK,iBAAe,EAAE,CAAC,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,GAAE,KAAK,aAAa,GAAE,MAAI,aAAW,MAAI,QAAQ,OAAM,IAAI,MAAM;AAAA,wCAC31C,CAAC,QAAQ;AAAE,SAAK,OAAK,GAAE,KAAK,YAAU;AAAA,EAAoB;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,MACjH,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAWJ,GAAG,sBAAqB,SAAQ,KAAK,IAAI,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,EAInD;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,YAAW,EAAC,IAAE,GAAE,EAAC,aAAY,EAAC,IAAE,GAAE,IAAE,EAAE,MAAM,QAAO,IAAE,CAAC,GAAE,IAAE,GAAE,IAAE,EAAE,mBAAmB,CAAC,CAAC,GAAE,CAAC,GAAE,IAAE;AAAE,OAAG,SAAO,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC,GAAE,EAAE,KAAK,CAAC,GAAE,IAAE,EAAE,iBAAiB,GAAE,CAAC,EAAE,CAAC;AAAG,MAAI,IAAE,EAAE,aAAa,gBAAgB,EAAE,OAAM,GAAE,CAAC,GAAE,IAAE,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,CAAC,IAAG,CAAC,EAAC,EAAC,CAAC;AAAE,IAAE,KAAK,CAAC;AAAE,MAAI,IAAE,EAAE,OAAM,IAAE,CAAC,EAAE,MAAM,CAAC,GAAE,CAAC,GAAE,IAAE,GAAG,EAAC,SAAQA,KAAE,OAAM,EAAC,OAAM,GAAE,OAAM,GAAE,OAAM,EAAC,EAAC,CAAC,GAAE,IAAE,IAAI,GAAG,EAAE,OAAM,GAAE,CAAC,GAAE,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,CAAC,CAAC,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,cAAc,EAAE,KAAK,CAAC,EAAC,CAAC,GAAE,IAAEA,IAAE,iBAAiB,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,IAAE,KAAK,CAAC;AAAE,MAAI,IAAE;AAAE,MAAG,KAAG,MAAK;AAAC,MAAE,KAAK,CAAC;AAAE,QAAI,IAAE,EAAE,uBAAuB,CAAC;AAAE,QAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC;AAAA,EAAC;AAAC,SAAO,EAAE,QAAQ,OAAGA,IAAE,YAAY,EAAE,MAAM,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,CAAC,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,EAAE;AAAE,SAAQD,OAAK,IAAI,IAAGA,GAAC;AAAE,IAAI,KAAG;AAAP,IAAgB,MAAI;AAApB,IAA6B,MAAI;AAAjC,IAA0C,MAAI;AAA9C,IAAuD,MAAI;AAA3D,IAAoE,MAAI;AAAxE,IAAiF,MAAI,EAAC,MAAK,IAAG,aAAY,IAAG,kBAAiB,KAAI,oBAAmB,KAAI,sBAAqB,KAAI,qBAAoB,KAAI,uBAAsB,IAAG;AAAE,IAAI,MAAI;;;ACt0Q/lD,SAAS,OAAO,KAAW;AAChC,QAAMO,MAAK,oBAAI,KAAK;AACpB,QAAMC,MAAK,GAAGD,IAAG,SAAS,EAAE,SAAS,EAAE,SAAS,GAAG,GAAG,CAAC,IAAIA,IAAG,WAAW,EAAE,SAAS,EAAE,SAAS,GAAG,GAAG,CAAC,IAAIA,IAAG,WAAW,EAAE,SAAS,EAAE,SAAS,GAAG,GAAG,CAAC,IAAIA,IAAG,gBAAgB,EAAE,SAAS,EAAE,SAAS,GAAG,GAAG,CAAC;AACzM,MAAI,IAAK,SAAQ,IAAIC,KAAI,UAAU,GAAG,GAAG;AAC3C;AAGO,SAAS,KAAK,QAAgB,MAAsB;AACzD,QAAM,YAAY,OAAO,SAAS,GAAG,IAAI,KAAK;AAC9C,QAAM,WAAW,KAAK,WAAW,GAAG,KAAK,KAAK,WAAW,GAAG,KAAK,KAAK,WAAW,OAAO,KAAK,KAAK,WAAW,QAAQ,KAAK,KAAK,WAAW,OAAO;AACjJ,QAAM,OAAO,WAAW,GAAG,IAAI,KAAK,GAAG,MAAM,GAAG,SAAS,GAAG,IAAI;AAChE,MAAI,CAAC,KAAK,kBAAkB,EAAE,SAAS,OAAO,EAAG,OAAM,IAAI,MAAM,yCAAyC,IAAI,EAAE;AAChH,SAAO;AACT;AAGO,IAAM,MAAM,MAAM;AACvB,MAAI,OAAO,gBAAgB,YAAa,QAAO,YAAY,IAAI;AAC/D,SAAO,UAAU,OAAO,QAAQ,OAAO,OAAO,CAAC,IAAI,MAAO,KAAM,SAAS,CAAC;AAC5E;AAGO,SAAS,SAAS,UAA2BC,SAAyB,SAAS,UAAU,OAA+D,CAAC,GAAG;AACjK,aAAW,OAAO,OAAO,KAAKA,OAAM,GAAG;AACrC,QAAI,OAAOA,QAAO,GAAG,MAAM,UAAU;AACnC,eAAS,SAAS,GAAG,GAAGA,QAAO,GAAG,GAAG,KAAK,IAAI;AAAA,IAChD,OAAO;AACL,YAAM,UAAU,YAAa,OAAO,SAAS,GAAG,MAAM;AACtD,UAAI,CAAC,QAAS,MAAK,KAAK,EAAE,QAAQ,oBAAoB,OAAO,GAAG,MAAM,IAAI,GAAG,MAAMA,QAAO,GAAG,CAAC,GAAG,CAAC;AAClG,YAAM,OAAO,YAAY,OAAO,SAAS,GAAG,MAAM,OAAOA,QAAO,GAAG;AACnE,UAAI,WAAW,CAAC,KAAM,MAAK,KAAK,EAAE,QAAQ,0BAA0B,OAAO,GAAG,MAAM,IAAI,GAAG,MAAMA,QAAO,GAAG,CAAC,IAAI,UAAU,OAAO,SAAS,GAAG,EAAE,CAAC;AAAA,IAClJ;AAAA,EAEF;AACA,MAAIA,QAAO,SAAS,WAAW,YAAY,KAAK,SAAS,EAAG,KAAI,yBAAyB,IAAI;AAC7F,SAAO;AACT;AAGO,SAAS,aAAa,SAAS;AACpC,QAAM,WAAW,CAAC,QAAQ,OAAO,OAAO,QAAQ;AAChD,SAAO,QAAQ,OAAO,CAAC,MAAM,QAAQ;AACnC,WAAO,KAAK,OAAO,CAAC,CAAC,EAAE,QAAQ,CAAC,QAAQ;AACtC,YAAM,OAAO,KAAK,GAAG;AACrB,YAAM,OAAO,IAAI,GAAG;AACpB,UAAI,MAAM,QAAQ,IAAI,KAAK,MAAM,QAAQ,IAAI,EAAG,MAAK,GAAG,IAAI,KAAK,OAAO,GAAG,IAAI;AAAA,eACtE,SAAS,IAAI,KAAK,SAAS,IAAI,EAAG,MAAK,GAAG,IAAI,UAAU,MAAM,IAAI;AAAA,UACtE,MAAK,GAAG,IAAI;AAAA,IACnB,CAAC;AACD,WAAO;AAAA,EACT,GAAG,CAAC,CAAC;AACP;;;ACyRA,IAAM,SAAiB;AAAA,EACrB,SAAS;AAAA,EACT,eAAe;AAAA,EACf,aAAa;AAAA,EACb,gBAAgB;AAAA,EAChB,UAAU;AAAA,EACV,mBAAmB;AAAA,EACnB,OAAO;AAAA,EACP,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,kBAAkB;AAAA,EAClB,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,OAAO,CAAC;AAAA,EACR,iBAAiB;AAAA,EACjB,QAAQ;AAAA,IACN,SAAS;AAAA,IACT,cAAc;AAAA,IACd,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,gBAAgB;AAAA,IAChB,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,WAAW;AAAA,IACX,MAAM;AAAA,IACN,YAAY;AAAA,IACZ,KAAK;AAAA,IACL,UAAU;AAAA,IACV,OAAO;AAAA,IACP,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,UAAU;AAAA,IACV,UAAU;AAAA,EACZ;AAAA,EACA,SAAS;AAAA,IACP,SAAS;AAAA,EACX;AAAA,EACA,MAAM;AAAA,IACJ,SAAS;AAAA,IACT,UAAU;AAAA,MACR,WAAW;AAAA,MACX,UAAU;AAAA,MACV,aAAa;AAAA,MACb,YAAY;AAAA,MACZ,UAAU;AAAA,MACV,eAAe;AAAA,MACf,SAAS;AAAA,MACT,cAAc;AAAA,MACd,OAAO;AAAA,MACP,MAAM;AAAA,MACN,QAAQ;AAAA,IACV;AAAA,IACA,MAAM;AAAA,MACJ,SAAS;AAAA,MACT,WAAW;AAAA,MACX,aAAa;AAAA,IACf;AAAA,IACA,WAAW;AAAA,MACT,SAAS;AAAA,MACT,WAAW;AAAA,IACb;AAAA,IACA,MAAM;AAAA,MACJ,SAAS;AAAA,MACT,OAAO;AAAA,MACP,WAAW;AAAA,IACb;AAAA,IACA,SAAS;AAAA,MACP,SAAS;AAAA,MACT,eAAe;AAAA,MACf,YAAY;AAAA,MACZ,UAAU;AAAA,MACV,WAAW;AAAA,IACb;AAAA,IACA,aAAa;AAAA,MACX,SAAS;AAAA,MACT,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,UAAU;AAAA,MACV,eAAe;AAAA,IACjB;AAAA,IACA,WAAW;AAAA,MACT,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,UAAU;AAAA,MACV,WAAW;AAAA,IACb;AAAA,IACA,UAAU;AAAA,MACR,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,UAAU;AAAA,MACV,WAAW;AAAA,IACb;AAAA,EACF;AAAA,EACA,MAAM;AAAA,IACJ,SAAS;AAAA,IACT,WAAW;AAAA,IACX,aAAa;AAAA,IACb,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,SAAS;AAAA,IACT,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,eAAe;AAAA,IACf,cAAc;AAAA,IACd,aAAa;AAAA,IACb,WAAW;AAAA,IACX,UAAU;AAAA,MACR,WAAW;AAAA,IACb;AAAA,IACA,UAAU;AAAA,MACR,WAAW;AAAA,IACb;AAAA,EACF;AAAA,EACA,QAAQ;AAAA,IACN,SAAS;AAAA,IACT,WAAW;AAAA,IACX,eAAe;AAAA,IACf,cAAc;AAAA,IACd,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,UAAU;AAAA,EACZ;AAAA,EACA,cAAc;AAAA,IACZ,SAAS;AAAA,IACT,WAAW;AAAA,IACX,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AACF;;;AC1dO,IAAM,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAqBvB,IAAM,uBAAuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAc7B,IAAM,0BAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAchC,IAAM,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAejB,IAAM,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAyBb,IAAM,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AC9E3B,IAAM,UAAU,CAAC,QAAQ,QAAgB,eAAe;AACtD,QAAMC,MAAI,IAAI,OAAO,QAAQ,SAAS,gBAAgB,IAAI;AAC1D,SAAO,QAAQA,KAAG,CAACC,QAAO,SAAS;AACjC,eAAW,IAAI,IAAI;AACnB,WAAOA;AAAA,EACT,CAAC;AACH;AAEA,IAAM,YAAN,MAAgB;AAAA,EAMd,YAAYC,KAAI,cAAc,gBAAgB;AAL9C,mCAAU,CAAC;AACX,qCAAY,CAAC;AACb;AACA;AA2BA,mCAAU,CAAC,QAAQ,SAA6B;AAC9C,YAAM,SAAS,KAAK,GAAG,aAAa,IAAI;AACxC,UAAI,CAAC,QAAQ;AACX,YAAI,iCAAiC;AACrC,eAAO;AAAA,MACT;AACA,WAAK,GAAG,aAAa,QAAQ,MAAM;AACnC,WAAK,GAAG,cAAc,MAAM;AAC5B,UAAI,CAAC,KAAK,GAAG,mBAAmB,QAAQ,KAAK,GAAG,cAAc,GAAG;AAC/D,YAAI,8BAA8B,KAAK,GAAG,iBAAiB,MAAM,KAAK,SAAS,EAAE;AACjF,eAAO;AAAA,MACT;AACA,aAAO;AAAA,IACT;AArCE,SAAK,KAAKA;AACV,UAAM,eAAe,KAAK,QAAQ,cAAc,KAAK,GAAG,aAAa;AACrE,UAAM,iBAAiB,KAAK,QAAQ,gBAAgB,KAAK,GAAG,eAAe;AAC3E,SAAK,KAAK,KAAK,GAAG,cAAc;AAChC,QAAI,CAAC,gBAAgB,CAAC,eAAgB;AACtC,QAAI,CAAC,KAAK,IAAI;AACZ,UAAI,wCAAwC;AAC5C;AAAA,IACF;AACA,SAAK,GAAG,aAAa,KAAK,IAAI,YAAY;AAC1C,SAAK,GAAG,aAAa,KAAK,IAAI,cAAc;AAC5C,SAAK,GAAG,YAAY,KAAK,EAAE;AAC3B,QAAI,CAAC,KAAK,GAAG,oBAAoB,KAAK,IAAI,KAAK,GAAG,WAAW,GAAG;AAC9D,UAAI,2BAA2B,KAAK,GAAG,kBAAkB,KAAK,EAAE,KAAK,SAAS,EAAE;AAChF;AAAA,IACF;AACA,SAAK,GAAG,WAAW,KAAK,EAAE;AAC1B,YAAQ,cAAc,aAAa,KAAK,SAAS;AACjD,eAAW,KAAK,KAAK,UAAW,MAAK,UAAU,CAAC,IAAI,KAAK,GAAG,kBAAkB,KAAK,IAAI,CAAC;AACxF,YAAQ,cAAc,WAAW,KAAK,OAAO;AAC7C,YAAQ,gBAAgB,WAAW,KAAK,OAAO;AAC/C,eAAW,KAAK,KAAK,QAAS,MAAK,QAAQ,CAAC,IAAI,KAAK,GAAG,mBAAmB,KAAK,IAAI,CAAC;AAAA,EACvF;AAgBF;AAWO,SAAS,gBAAgB;AAC9B,MAAI,YAAY;AAChB,MAAI,gBAAqC;AACzC,MAAI,cAAc;AAClB,MAAI,0BAA0B;AAC9B,MAAI,mBAAoG,CAAC,MAAM,IAAI;AACnH,MAAI,cAAyC,CAAC;AAC9C,MAAI,eAAmC;AACvC,MAAI,iBAAmC;AACvC,QAAM,WAAW,OAAO,KAAK,GAAG;AAChC,QAAM,qBAAqB,CAAE;AAC7B,QAAM,OAAO,EAAE,cAAc,EAAE;AAC/B,QAAMA,MAAK,SAAS,WAAW,OAAO;AACtC,MAAI,CAACA,KAAI;AACP,QAAI,kCAAkC;AACtC;AAAA,EACF;AAEA,OAAK,KAAKA;AAEV,WAAS,OAAO,OAAO,QAAQ;AAC7B,QAAI,UAAU,SAAS,SAAS,WAAW,SAAS,OAAQ;AAC5D,aAAS,QAAQ;AACjB,aAAS,SAAS;AAClB,QAAI,CAAC,cAAc;AACjB,YAAM,WAAW,IAAI,aAAa,CAAC,IAAI,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAChH,qBAAeA,IAAG,aAAa;AAC/B,MAAAA,IAAG,WAAWA,IAAG,cAAc,YAAY;AAC3C,MAAAA,IAAG,WAAWA,IAAG,cAAc,UAAUA,IAAG,WAAW;AACvD,MAAAA,IAAG,YAAYA,IAAG,gCAAgC,IAAI;AAAA,IACxD;AACA,IAAAA,IAAG,SAAS,GAAG,GAAG,SAAS,OAAO,SAAS,MAAM;AACjD,uBAAmB,CAAC,MAAM,IAAI;AAAA,EAChC;AAEA,WAAS,yBAAyB,OAAO,QAAQ;AAC/C,UAAM,MAAMA,IAAG,kBAAkB;AACjC,IAAAA,IAAG,gBAAgBA,IAAG,aAAa,GAAG;AACtC,UAAM,eAAeA,IAAG,mBAAmB;AAC3C,IAAAA,IAAG,iBAAiBA,IAAG,cAAc,YAAY;AACjD,UAAM,UAAUA,IAAG,cAAc;AACjC,IAAAA,IAAG,YAAYA,IAAG,YAAY,OAAO;AACrC,IAAAA,IAAG,WAAWA,IAAG,YAAY,GAAGA,IAAG,MAAM,OAAO,QAAQ,GAAGA,IAAG,MAAMA,IAAG,eAAe,IAAI;AAC1F,IAAAA,IAAG,cAAcA,IAAG,YAAYA,IAAG,oBAAoBA,IAAG,MAAM;AAChE,IAAAA,IAAG,cAAcA,IAAG,YAAYA,IAAG,oBAAoBA,IAAG,MAAM;AAChE,IAAAA,IAAG,cAAcA,IAAG,YAAYA,IAAG,gBAAgBA,IAAG,aAAa;AACnE,IAAAA,IAAG,cAAcA,IAAG,YAAYA,IAAG,gBAAgBA,IAAG,aAAa;AACnE,IAAAA,IAAG,qBAAqBA,IAAG,aAAaA,IAAG,mBAAmBA,IAAG,YAAY,SAAS,CAAC;AACvF,IAAAA,IAAG,YAAYA,IAAG,YAAY,IAAI;AAClC,IAAAA,IAAG,gBAAgBA,IAAG,aAAa,IAAI;AACvC,WAAO,EAAE,KAAK,QAAQ;AAAA,EACxB;AAEA,WAAS,mBAAmBC,QAAuE;AACjG,qBAAiBA,MAAK,IAAI,iBAAiBA,MAAK,KAAK,yBAAyB,SAAS,OAAO,SAAS,MAAM;AAC7G,WAAO,iBAAiBA,MAAK;AAAA,EAC/B;AAEA,WAAS,KAAK,QAAQ,GAAG;AACvB,QAAI,CAAC,eAAgB;AACrB,QAAI,SAA8B;AAClC,QAAI,SAAkC;AACtC,QAAI,QAAQ;AACZ,QAAI,cAAc,EAAG,UAAS;AAAA,QACzB,UAAS,mBAAmB,uBAAuB,EAAE,WAAW;AACrE;AACA,QAAI,eAAe,EAAE,QAAQ,KAAK,eAAe;AAC/C,eAAS;AACT,cAAQ,YAAY,MAAM;AAAA,IAC5B,OAAO;AACL,iCAA2B,0BAA0B,KAAK;AAC1D,eAAS,mBAAmB,uBAAuB,EAAE,OAAO;AAAA,IAC9D;AACA,IAAAD,IAAG,YAAYA,IAAG,YAAY,MAAM;AACpC,IAAAA,IAAG,gBAAgBA,IAAG,aAAa,MAAM;AACzC,IAAAA,IAAG,UAAU,eAAe,QAAQ,OAAO,GAAI,QAAQ,KAAK,CAAE;AAC9D,IAAAA,IAAG,WAAWA,IAAG,WAAW,GAAG,CAAC;AAAA,EAClC;AAEA,WAAS,cAAc,gBAAkC;AACvD,QAAI,mBAAmB,cAAc,GAAG;AACtC,uBAAiB,mBAAmB,cAAc;AAClD,MAAAA,IAAG,YAAY,iBAAiB,eAAe,KAAK,SAAS,IAAI;AACjE,aAAO;AAAA,IACT;AACA,qBAAiB,IAAI,UAAUA,KAAY,gBAAgB,cAAc;AACzE,QAAI,CAAC,gBAAgB;AACnB,UAAI,qCAAqC;AACzC,aAAO;AAAA,IACT;AACA,UAAM,YAAY,aAAa;AAC/B,UAAM,WAAW,IAAI;AACrB,IAAAA,IAAG,wBAAwB,eAAe,UAAU,KAAK,CAAC;AAC1D,IAAAA,IAAG,oBAAoB,eAAe,UAAU,KAAK,GAAG,GAAGA,IAAG,OAAO,OAAO,UAAU,IAAI,SAAS;AACnG,IAAAA,IAAG,wBAAwB,eAAe,UAAU,IAAI,CAAC;AACzD,IAAAA,IAAG,oBAAoB,eAAe,UAAU,IAAI,GAAG,GAAGA,IAAG,OAAO,OAAO,UAAU,IAAI,SAAS;AAClG,uBAAmB,cAAc,IAAI;AACrC,WAAO;AAAA,EACT;AAEA,QAAM,SAAS;AAAA,IACb,aAAa,CAAC,WAAqB;AACjC,YAAM,IAAI,IAAI,aAAa,MAAM;AACjC,QAAE,CAAC,KAAK;AACR,QAAE,CAAC,KAAK;AACR,QAAE,EAAE,KAAK;AACT,QAAE,EAAE,KAAK;AACT,YAAM,SAAU,EAAE,EAAE,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,EAAE,MAAM,KAAK,EAAE,EAAE,MAAM,KAAK,EAAE,EAAE,MAAM,KAAK,EAAE,EAAE,MAAM,KAAK,EAAE,EAAE,MAAM,IACrH,0BACA;AACZ,YAAM,UAAU,cAAc,MAAM;AACpC,UAAI,CAAC,QAAS;AACd,MAAAA,IAAG,WAAW,QAAQ,QAAQ,GAAG,GAAG,CAAC;AACrC,WAAK;AAAA,IACP;AAAA,IAEA,YAAY,CAAC,eAAuB;AAClC,YAAM,KAAK,cAAc,KAAK;AAC9B,aAAO,YAAY;AAAA,QACjB;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QACZ;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QACZ;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QACZ;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,MACd,CAAC;AAAA,IACH;AAAA,IAEA,YAAY,CAAC,WAAmB;AAC9B,YAAM,KAAK,UAAU,KAAK,IAAI,IAAI;AAClC,YAAME,MAAM,IAAI,KAAK;AACrB,aAAO,YAAY;AAAA,QACjB;AAAA,QAAGA;AAAA,QAAGA;AAAA,QAAG;AAAA,QAAG;AAAA,QACZA;AAAA,QAAG;AAAA,QAAGA;AAAA,QAAG;AAAA,QAAG;AAAA,QACZA;AAAA,QAAGA;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QACZ;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,MACd,CAAC;AAAA,IACH;AAAA,IAEA,YAAY,MAAM;AAChB,aAAO,WAAW,EAAE;AAAA,IACtB;AAAA,IAEA,UAAU,CAAC,WAAmB;AAC5B,YAAMC,MAAK,UAAU,KAAK;AAC1B,YAAM,IAAI,QAAQA,KAAI;AACtB,aAAO,YAAY;AAAA,QACjBA;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QACZ;AAAA,QAAGA;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QACZ;AAAA,QAAG;AAAA,QAAGA;AAAA,QAAG;AAAA,QAAG;AAAA,QACZ;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,MACd,CAAC;AAAA,IACH;AAAA,IAEA,UAAU,MAAM;AACd,aAAO,SAAS,EAAE;AAAA,IACpB;AAAA,IAEA,KAAK,CAAC,aAAqB;AACzB,kBAAY,YAAY,KAAK,MAAM,KAAK;AACxC,YAAM,MAAM,KAAK,IAAI,QAAQ;AAC7B,YAAM,MAAM,KAAK,IAAI,QAAQ;AAC7B,YAAM,OAAO;AACb,YAAM,OAAO;AACb,YAAM,OAAO;AACb,aAAO,YAAY;AAAA,QACjB,OAAO,OAAO,IAAI,QAAQ,MAAO,CAAC;AAAA,QAAO,OAAO,MAAO,CAAC,OAAQ,MAAO,CAAC;AAAA,QAAO,OAAO,MAAO,CAAC,OAAQ,OAAO,IAAI;AAAA,QAAO;AAAA,QAAG;AAAA,QAC3H,OAAO,MAAO,CAAC,OAAQ,MAAO;AAAA,QAAQ,OAAO,OAAO,IAAI,QAAQ,MAAO;AAAA,QAAQ,OAAO,MAAO,CAAC,OAAQ,MAAO;AAAA,QAAS;AAAA,QAAG;AAAA,QACzH,OAAO,MAAO,CAAC,OAAQ,MAAO,EAAE,IAAI;AAAA,QAAQ,OAAO,MAAO,CAAC,OAAQ,MAAO;AAAA,QAAO,OAAO,OAAO,IAAI,QAAQ,MAAO;AAAA,QAAO;AAAA,QAAG;AAAA,QAC5H;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,MACd,CAAC;AAAA,IACH;AAAA,IAEA,qBAAqB,MAAM;AACzB,aAAO,YAAY;AAAA,QACjB;AAAA,QAAW;AAAA,QAAW;AAAA,QAAW;AAAA,QAAG;AAAA,QACpC;AAAA,QAAW;AAAA,QAAW;AAAA,QAAW;AAAA,QAAG;AAAA,QACpC;AAAA,QAAW;AAAA,QAAW;AAAA,QAAW;AAAA,QAAG;AAAA,QACpC;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,MACd,CAAC;AAAA,IACH;AAAA,IAEA,OAAO,MAAM;AACX,aAAO,YAAY;AAAA,QACjB;AAAA,QAAO;AAAA,QAAW;AAAA,QAAY;AAAA,QAAG;AAAA,QACjC;AAAA,QAAO;AAAA,QAAW;AAAA,QAAY;AAAA,QAAG;AAAA,QACjC;AAAA,QAAO;AAAA,QAAW;AAAA,QAAY;AAAA,QAAG;AAAA,QACjC;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,MACd,CAAC;AAAA,IACH;AAAA,IAEA,SAAS,MAAM;AACb,aAAO,YAAY;AAAA,QACjB;AAAA,QAAoB;AAAA,QAAqB;AAAA,QAAqB;AAAA,QAAG;AAAA,QACjE;AAAA,QAAuB;AAAA,QAAoB;AAAA,QAAqB;AAAA,QAAG;AAAA,QACnE;AAAA,QAAqB;AAAA,QAAsB;AAAA,QAAqB;AAAA,QAAG;AAAA,QACnE;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,MACd,CAAC;AAAA,IACH;AAAA,IAEA,gBAAgB,MAAM;AACpB,aAAO,YAAY;AAAA,QACjB;AAAA,QAAoB;AAAA,QAAoB;AAAA,QAAsB;AAAA,QAAG;AAAA,QACjE;AAAA,QAAqB;AAAA,QAAoB;AAAA,QAAqB;AAAA,QAAG;AAAA,QACjE;AAAA,QAAoB;AAAA,QAAqB;AAAA,QAAoB;AAAA,QAAG;AAAA,QAChE;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,MACd,CAAC;AAAA,IACH;AAAA,IAEA,YAAY,MAAM;AAChB,aAAO,YAAY;AAAA,QACjB;AAAA,QAAoB;AAAA,QAAqB;AAAA,QAAsB;AAAA,QAAG;AAAA,QAClE;AAAA,QAAsB;AAAA,QAAoB;AAAA,QAAsB;AAAA,QAAG;AAAA,QACnE;AAAA,QAAsB;AAAA,QAAqB;AAAA,QAAoB;AAAA,QAAG;AAAA,QAClE;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,MACd,CAAC;AAAA,IACH;AAAA,IAEA,aAAa,MAAM;AACjB,aAAO,YAAY;AAAA,QACjB;AAAA,QAAoB;AAAA,QAAqB;AAAA,QAAsB;AAAA,QAAG;AAAA,QAClE;AAAA,QAAqB;AAAA,QAAoB;AAAA,QAAsB;AAAA,QAAG;AAAA,QAClE;AAAA,QAAoB;AAAA,QAAqB;AAAA,QAAmB;AAAA,QAAG;AAAA,QAC/D;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,MACd,CAAC;AAAA,IACH;AAAA,IAEA,UAAU,MAAM;AACd,aAAO,YAAY;AAAA,QACjB;AAAA,QAAO;AAAA,QAAQ;AAAA,QAAQ;AAAA,QAAG;AAAA,QAC1B;AAAA,QAAQ;AAAA,QAAO;AAAA,QAAQ;AAAA,QAAG;AAAA,QAC1B;AAAA,QAAQ;AAAA,QAAQ;AAAA,QAAO;AAAA,QAAG;AAAA,QAC1B;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,MACd,CAAC;AAAA,IACH;AAAA,IAEA,YAAY,MAAM;AAChB,aAAO,YAAY;AAAA,QACjB;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QACZ;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QACZ;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QACZ;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,MACd,CAAC;AAAA,IACH;AAAA,IAEA,aAAa,CAAC,WAAqB;AACjC,YAAM,IAAI,IAAI,aAAa,MAAM;AACjC,YAAM,aAAa,IAAI,SAAS;AAChC,YAAM,aAAa,IAAI,SAAS;AAChC,YAAM,UAAU,cAAsB,WAAW;AACjD,UAAI,CAAC,QAAS;AACd,MAAAH,IAAG,WAAW,QAAQ,QAAQ,GAAG,GAAG,CAAC;AACrC,MAAAA,IAAG,UAAU,QAAQ,QAAQ,IAAI,GAAG,YAAY,UAAU;AAC1D,WAAK;AAAA,IACP;AAAA,IAEA,aAAa,MAAM;AAEjB,aAAO,YAAY,KAAK,MAAM;AAAA,QAC5B;AAAA,QAAG;AAAA,QAAG;AAAA,QACN;AAAA,QAAG;AAAA,QAAI;AAAA,QACP;AAAA,QAAG;AAAA,QAAG;AAAA,MACR,CAAC;AAAA,IACH;AAAA,IAEA,QAAQ,MAAM;AAEZ,aAAO,YAAY,KAAK,MAAM;AAAA,QAC5B;AAAA,QAAI;AAAA,QAAG;AAAA,QACP;AAAA,QAAI;AAAA,QAAG;AAAA,QACP;AAAA,QAAI;AAAA,QAAG;AAAA,MACT,CAAC;AAAA,IACH;AAAA,IAEA,QAAQ,MAAM;AAEZ,aAAO,YAAY,KAAK,MAAM;AAAA,QAC5B;AAAA,QAAI;AAAA,QAAI;AAAA,QACR;AAAA,QAAG;AAAA,QAAG;AAAA,QACN;AAAA,QAAG;AAAA,QAAG;AAAA,MACR,CAAC;AAAA,IACH;AAAA,IAEA,SAAS,CAAC,WAAW;AACnB,YAAM,IAAI,UAAU;AAEpB,aAAO,YAAY,KAAK,MAAM;AAAA,QAC5B;AAAA,QAAG,KAAK;AAAA,QAAG;AAAA,QACX,KAAK;AAAA,QAAG,IAAI,IAAI;AAAA,QAAG,KAAK;AAAA,QACxB;AAAA,QAAG,KAAK;AAAA,QAAG;AAAA,MACb,CAAC;AAAA,IACH;AAAA,IAEA,QAAQ,CAACI,UAAiB;AACxB,YAAM,IAAIA,SAAQ;AAElB,aAAO,YAAY,KAAK,MAAM;AAAA,QAC5B,KAAK;AAAA,QAAG,KAAK;AAAA,QAAG;AAAA,QAChB,KAAK;AAAA,QAAG;AAAA,QAAG,IAAI;AAAA,QACf;AAAA,QAAG,IAAI;AAAA,QAAG,IAAI;AAAA,MAChB,CAAC;AAAA,IACH;AAAA,IAEA,MAAM,CAACA,UAAiB;AACtB,YAAM,YAAaA,QAAO,IAAK,SAAS;AACxC,YAAM,YAAaA,QAAO,IAAK,SAAS;AACxC,YAAM,UAAU,cAAsB,IAAI;AAC1C,UAAI,CAAC,QAAS;AAEd,MAAAJ,IAAG,UAAU,QAAQ,QAAQ,IAAI,GAAG,GAAG,SAAS;AAChD,WAAK,KAAK,YAAY;AAEtB,MAAAA,IAAG,UAAU,QAAQ,QAAQ,IAAI,GAAG,WAAW,CAAC;AAChD,WAAK;AAAA,IACP;AAAA,IAEA,UAAU,CAACI,UAAiB;AAC1B,YAAM,YAAaA,QAAQ,SAAS;AACpC,YAAM,YAAaA,QAAQ,SAAS;AACpC,YAAM,UAAU,cAAsB,QAAQ;AAC9C,UAAI,CAAC,QAAS;AACd,MAAAJ,IAAG,UAAU,QAAQ,QAAQ,MAAM,GAAG,WAAW,SAAS;AAC1D,WAAK;AAAA,IACP;AAAA,EACF;AAGA,OAAK,MAAM,SAAU,MAAM;AACzB,UAAM,OAAO,MAAM,UAAU,MAAM,KAAK,WAAW,CAAC;AACpD,UAAM,OAAO,OAAO,IAAI;AACxB,gBAAY,KAAK,EAAE,MAAM,KAAK,CAAC;AAAA,EACjC;AAGA,OAAK,QAAQ,WAAY;AACvB,kBAAc,CAAC;AAAA,EACjB;AAGA,OAAK,MAAM,WAAY;AACrB,WAAO;AAAA,EACT;AAGA,OAAK,QAAQ,SAAU,OAAO;AAC5B,WAAO,MAAM,OAAO,MAAM,MAAM;AAChC,gBAAY;AACZ,QAAI,CAAC,cAAe,iBAAgBA,IAAG,cAAc;AACrD,IAAAA,IAAG,YAAYA,IAAG,YAAY,aAAa;AAC3C,IAAAA,IAAG,cAAcA,IAAG,YAAYA,IAAG,gBAAgBA,IAAG,aAAa;AACnE,IAAAA,IAAG,cAAcA,IAAG,YAAYA,IAAG,gBAAgBA,IAAG,aAAa;AACnE,IAAAA,IAAG,cAAcA,IAAG,YAAYA,IAAG,oBAAoBA,IAAG,OAAO;AACjE,IAAAA,IAAG,cAAcA,IAAG,YAAYA,IAAG,oBAAoBA,IAAG,OAAO;AACjE,IAAAA,IAAG,WAAWA,IAAG,YAAY,GAAGA,IAAG,MAAMA,IAAG,MAAMA,IAAG,eAAe,KAAK;AACzE,aAAS,IAAI,GAAG,IAAI,YAAY,QAAQ,KAAK;AAC3C,oBAAe,MAAM,YAAY,SAAS;AAC1C,YAAM,IAAI,YAAY,CAAC;AAEvB,QAAE,KAAK,MAAM,MAAM,EAAE,QAAQ,CAAC,CAAC;AAAA,IACjC;AACA,WAAO;AAAA,EACT;AAGA,OAAK,OAAO,SAAU,OAAO;AAC3B,SAAK,IAAI,cAAc,CAAC;AACxB,WAAO,KAAK,MAAM,KAAK;AAAA,EACzB;AACF;;;AClbA,eAAsB,sBAAsB,YAAqC;AAC/E,QAAM,UAAU,WAAW,MAAM,WAAW,IAAO,GAAQ,UAAU,IAAI;AACzE,QAAMK,OAAS,GAAM,SAAS,GAAG,CAAC;AAClC,QAAM,MAAgB,CAAI,GAAIA,KAAI,CAAC,CAAC,GAAM,GAAIA,KAAI,CAAC,CAAC,GAAM,GAAIA,KAAI,CAAC,CAAC,CAAC;AACrE,QAAM,MAAgB,CAAI,GAAIA,KAAI,CAAC,CAAC,GAAM,GAAIA,KAAI,CAAC,CAAC,GAAM,GAAIA,KAAI,CAAC,CAAC,CAAC;AAGrE,QAAM,SAAS,MAAM,QAAQ,IAAI,IAAI,IAAI,CAAC,YAAY,QAAQ,KAAK,CAAC,CAAC;AACrE,QAAM,WAAW,KAAK,IAAI,OAAO,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC;AAClE,QAAM,WAAW,WAAW,IAAI,MAAM;AACtC,QAAM,SAAS,WAAW;AAC1B,MAAI;AACJ,MAAI,SAAS,GAAG;AACd,UAAM,MAAM,CAAI,GAAIA,KAAI,CAAC,GAAG,IAAI,CAAC,CAAC,GAAM,GAAIA,KAAI,CAAC,GAAG,IAAI,CAAC,CAAC,GAAM,GAAIA,KAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;AACnF,UAAM,QAAQ,CAAI,GAAI,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,GAAM,GAAI,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,GAAM,GAAI,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;AAErF,UAAM,MAAM,CAAI,GAAI,IAAI,CAAC,GAAG,MAAM,GAAM,GAAI,IAAI,CAAC,GAAG,MAAM,GAAM,GAAI,IAAI,CAAC,GAAG,MAAM,CAAC;AACnF,UAAM,QAAW,GAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC;AAClD,YAAW,EAAQ,OAAO,CAAC,GAAG,QAAQ,MAAM,CAAC,KAAK,GAAG,QAAQ,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;AAC9E,IAAG,GAAQ,CAAC,GAAG,KAAK,GAAG,OAAO,GAAG,KAAK,KAAK,CAAC;AAAA,EAC9C,OAAO;AACL,YAAW,GAAW,SAAS,CAAC;AAAA,EAClC;AACA,EAAG,GAAQ,CAAC,GAAGA,MAAK,GAAG,KAAK,GAAG,KAAKA,MAAK,SAAS,UAAU,CAAC;AAC7D,SAAO;AACT;;;ACpBA,IAAM,UAAU;AAEhB,IAAI,WAA6B;AACjC,IAAI,YAA8B;AAClC,IAAI,YAA8B;AAElC,IAAIC;AAEJ,IAAM,OAAoG;AAAA,EACxG,UAAU;AAAA,EACV,WAAW;AAAA,EACX,WAAW;AAAA,EACX,aAAa;AACf;AAEO,SAAS,QAAQ;AACtB,OAAK,WAAW;AAChB,OAAK,YAAY;AACjB,OAAK,YAAY;AACjB,OAAK,cAAc;AACrB;AAEO,SAAS,OAAO,OAAe,QAA2B;AAC/D,MAAI;AACJ,MAAI,IAAI,SAAS;AACf,QAAI,IAAI,QAAQ;AACd,UAAI,OAAO,oBAAoB,YAAa,OAAM,IAAI,MAAM,mFAAmF;AAC/I,UAAI,IAAI,gBAAgB,OAAO,MAAM;AAAA,IACvC,OAAO;AACL,UAAI,OAAO,aAAa,aAAa;AACnC,YAAI,SAAS,cAAc,QAAQ;AACnC,UAAE,QAAQ;AACV,UAAE,SAAS;AAAA,MACb,WAAW,OAAO,cAAc,eAAe,UAAU,YAAY,eAAe;AAElF,YAAI,OAAO,IAAI,WAAW,YAAa,KAAI,IAAI,IAAI,OAAO,OAAO,MAAM;AAAA,iBAC9D,OAAO,WAAW,WAAW,YAAa,KAAI,IAAI,WAAW,OAAO,OAAO,MAAM;AAAA,YACrF,OAAM,IAAI,MAAM,wFAAwF;AAAA,MAC/G,OAAO;AACL,cAAM,IAAI,MAAM,kEAAkE;AAAA,MACpF;AAAA,IACF;AAAA,EACF,OAAO;AAEL,QAAI,OAAO,IAAI,WAAW,YAAa,KAAI,IAAI,IAAI,OAAO,OAAO,MAAM;AAAA,aAC9D,OAAO,WAAW,WAAW,YAAa,KAAI,IAAI,WAAW,OAAO,OAAO,MAAM;AAAA,EAE5F;AAEA,SAAO;AACT;AAGO,SAAS,KAAK,OAAkB,QAAoB;AACzD,QAAM,eAAe,UAAU,OAAO,MAAM,OAAO,MAAM,MAAM;AAC/D,QAAM,MAAM,aAAa,WAAW,IAAI;AACxC,MAAI,UAAU,OAAO,GAAG,CAAC;AACzB,SAAO;AACT;AAKA,eAAsBC,SAAQ,OAAcC,SAAgB,YAAqB,MAAsE;AA3EvJ,cAAAC;AA4EE,MAAI,CAAC,OAAO;AAEV,QAAID,QAAO,MAAO,KAAI,+BAA+B;AACrD,WAAO,EAAE,QAAQ,MAAM,QAAQ,KAAK;AAAA,EACtC;AAEA,MACE,EAAE,iBAAoB,OACnB,EAAE,OAAO,UAAU,eAAe,iBAAiB,UACnD,EAAE,OAAO,WAAW,WAAW,eAAe,iBAAiB,WAAW,WAC1E,EAAE,OAAO,cAAc,eAAe,iBAAiB,cACvD,EAAE,OAAO,gBAAgB,eAAe,iBAAiB,gBACzD,EAAE,OAAO,qBAAqB,eAAe,iBAAiB,qBAC9D,EAAE,OAAO,qBAAqB,eAAe,iBAAiB,qBAC9D,EAAE,OAAO,qBAAqB,eAAe,iBAAiB,qBAC9D,EAAE,OAAO,sBAAsB,eAAe,iBAAiB,sBAC/D,EAAE,OAAO,oBAAoB,eAAe,iBAAiB,kBAChE;AACA,UAAM,IAAI,MAAM,kCAAkC;AAAA,EACpD;AACA,MAAI,iBAAoB,IAAQ;AAC9B,QAAIE,UAAwB;AAC5B,QAAI,MAAM,oBAAoB,EAAG,OAAM,IAAI,MAAM,yDAAyD;AAC1G,QAAI,CAAE,MAAiB,MAAO,OAAM,IAAI,MAAM,sDAAsD;AACpG,QAAK,MAAiB,MAAM,WAAW,GAAG;AACxC,UAAK,MAAiB,MAAM,CAAC,MAAM,GAAG;AACpC,QAAAA,UAAY,GAAW,OAAO,CAAC;AAAA,MACjC,WAAY,MAAiB,MAAM,CAAC,MAAM,GAAG;AAC3C,cAAMC,OAAS,GAAQ,OAAmB,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC;AAChE,QAAAD,UAAY,GAAWC,MAAK,CAAC;AAC7B,QAAG,GAAQA,IAAG;AAAA,MAChB;AAAA,IACF,WAAY,MAAiB,MAAM,WAAW,GAAG;AAC/C,UAAK,MAAiB,MAAM,CAAC,MAAM,GAAG;AACpC,QAAAD,UAAY,GAAM,KAAK;AAAA,MACzB,WAAY,MAAiB,MAAM,CAAC,MAAM,GAAG;AAC3C,QAAAA,UAAY,GAAQ,OAAmB,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC;AAAA,MACtE;AAAA,IACF;AAEA,QAAIA,WAAU,QAAQA,QAAO,MAAM,WAAW,KAAKA,QAAO,MAAM,CAAC,MAAM,KAAKA,QAAO,MAAM,CAAC,MAAM,EAAG,OAAM,IAAI,MAAM,iEAAmE,MAAiB,MAAO,SAAS,CAAC,EAAE;AAC1N,QAAKA,QAAQ,UAAU,SAAS;AAC9B,YAAM,OAAU,GAAKA,SAAQ,SAAS;AACtC,MAAG,GAAQA,OAAM;AACjB,MAAAA,UAAS;AAAA,IACX;AACA,WAAO,EAAE,QAAQA,SAAoB,QAASF,QAAO,OAAO,SAAS,YAAY,KAAM;AAAA,EACzF;AAEA,MAAI,OAAO,MAAM,YAAY,MAAM,eAAgB,MAA2B,cAAc,GAAG;AAC7F,QAAIA,QAAO,MAAO,KAAI,2BAA2B;AACjD,WAAO,EAAE,QAAQ,MAAM,QAAQ,SAAS;AAAA,EAC1C;AACA,QAAM,gBAAwB,MAAM,cAAc,KAAK,MAAM,YAAY,KAAK,MAAM,OAAO,KAAM,MAAM,OAAO,KAAM,MAAM,OAAO,EAAE,CAAC,IAAI;AACxI,QAAM,iBAAyB,MAAM,eAAe,KAAK,MAAM,aAAa,KAAK,MAAM,QAAQ,KAAM,MAAM,OAAO,KAAM,MAAM,OAAO,EAAE,CAAC,IAAI;AAC5I,MAAI,CAAC,iBAAiB,CAAC,gBAAgB;AACrC,QAAIA,QAAO,MAAO,KAAI,mCAAmC;AACzD,WAAO,EAAE,QAAQ,MAAM,QAAQ,SAAS;AAAA,EAC1C;AACA,MAAI,cAAsB;AAC1B,MAAI,eAAuB;AAC3B,MAAI,cAAc,SAAS;AACzB,kBAAc;AACd,mBAAe,KAAK,MAAM,cAAc,iBAAiB,aAAa;AAAA,EACxE;AACA,MAAI,eAAe,SAAS;AAC1B,mBAAe;AACf,kBAAc,KAAK,MAAM,eAAe,gBAAgB,cAAc;AAAA,EACxE;AAGA,SAAK,KAAAA,QAAO,WAAP,mBAAe,UAAS,KAAK,EAAG,eAAcA,QAAO,OAAO;AAAA,cACvD,KAAAA,QAAO,WAAP,mBAAe,WAAU,KAAK,EAAG,eAAc,kBAAkBA,QAAO,OAAO,UAAU,KAAK;AACxG,OAAKA,QAAO,OAAO,UAAU,KAAK,EAAG,gBAAeA,QAAO,OAAO;AAAA,YACxDA,QAAO,OAAO,SAAS,KAAK,EAAG,gBAAe,mBAAmBA,QAAO,OAAO,SAAS,KAAK;AACvG,MAAI,CAAC,eAAe,CAAC,aAAc,OAAM,IAAI,MAAM,yCAAyC;AAC5F,MAAI,CAAC,YAAa,SAAS,UAAU,eAAiB,SAAS,WAAW,aAAe,YAAW,OAAO,aAAa,YAAY;AAGpI,QAAM,QAAQ,SAAS,WAAW,IAAI;AACtC,MAAK,OAAO,cAAc,eAAiB,iBAAiB,WAAY;AACtE,UAAM,aAAa,OAAO,GAAG,CAAC;AAAA,EAChC,OAAO;AACL,QAAIA,QAAO,OAAO,QAAQ,OAAO,MAAM,cAAc,aAAa;AAChE,YAAM,UAAU,eAAe,CAAC;AAChC,YAAM,MAAM,IAAI,CAAC;AACjB,YAAM,UAAU,OAAoB,GAAG,GAAG,eAAe,gBAAgB,GAAG,GAAG,SAAS,OAAO,SAAS,MAAM;AAC9G,YAAM,aAAa,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA,IACrC,OAAO;AACL,YAAM,UAAU,OAAoB,GAAG,GAAG,eAAe,gBAAgB,GAAG,GAAG,SAAS,OAAO,SAAS,MAAM;AAAA,IAChH;AAAA,EACF;AAEA,MAAI,CAAC,aAAc,SAAS,UAAU,UAAU,SAAW,SAAS,WAAW,UAAU,OAAS,aAAY,OAAO,SAAS,OAAO,SAAS,MAAM;AAGpJ,MAAIA,QAAO,OAAO,WAAW,IAAI,MAAM,WAAW;AAChD,QAAI,CAACF,IAAI,CAAAA,MAAK,IAAI,UAAU,IAAY,cAAc,IAAI;AAC1D,QAAI,SAAS,CAAC,CAACA;AACf,QAAI,EAACA,OAAA,gBAAAA,IAAI,MAAK;AACZ,UAAIE,QAAO,MAAO,KAAI,gDAAgD;AACtE,UAAI,MAAM,YAAY;AACtB,MAAAA,QAAO,OAAO,UAAU;AACxB,WAAK,UAAU,SAAS;AAAA,IAE1B,OAAO;AACL,MAAAF,IAAG,MAAM;AACT,UAAIE,QAAO,OAAO,eAAe,EAAG,CAAAF,IAAG,IAAI,cAAcE,QAAO,OAAO,UAAU;AACjF,UAAIA,QAAO,OAAO,aAAa,EAAG,CAAAF,IAAG,IAAI,YAAYE,QAAO,OAAO,QAAQ;AAC3E,UAAIA,QAAO,OAAO,cAAc,EAAG,CAAAF,IAAG,IAAI,WAAWE,QAAO,OAAO,SAAS;AAC5E,UAAIA,QAAO,OAAO,SAAS,EAAG,CAAAF,IAAG,IAAI,QAAQE,QAAO,OAAO,IAAI;AAC/D,UAAIA,QAAO,OAAO,eAAe,EAAG,CAAAF,IAAG,IAAI,cAAcE,QAAO,OAAO,UAAU;AACjF,UAAIA,QAAO,OAAO,QAAQ,EAAG,CAAAF,IAAG,IAAI,OAAOE,QAAO,OAAO,GAAG;AAC5D,UAAIA,QAAO,OAAO,SAAU,CAAAF,IAAG,IAAI,UAAU;AAC7C,UAAIE,QAAO,OAAO,MAAO,CAAAF,IAAG,IAAI,OAAO;AACvC,UAAIE,QAAO,OAAO,QAAS,CAAAF,IAAG,IAAI,SAAS;AAC3C,UAAIE,QAAO,OAAO,MAAO,CAAAF,IAAG,IAAI,OAAO;AACvC,UAAIE,QAAO,OAAO,WAAY,CAAAF,IAAG,IAAI,YAAY;AACjD,UAAIE,QAAO,OAAO,YAAa,CAAAF,IAAG,IAAI,aAAa;AACnD,UAAIE,QAAO,OAAO,SAAU,CAAAF,IAAG,IAAI,UAAU;AAC7C,UAAIE,QAAO,OAAO,aAAa,EAAG,CAAAF,IAAG,IAAI,YAAYE,QAAO,OAAO,QAAQ;AAC3E,YAAIC,MAAAH,IAAG,IAAI,MAAP,gBAAAG,IAAU,UAAS,EAAG,aAAYH,IAAG,MAAM,QAAQ;AAAA,UAClD,aAAYA,IAAG,KAAK,QAAQ;AAAA,IACnC;AAAA,EACF,OAAO;AACL,SAAK,UAAU,SAAS;AACxB,QAAIA,IAAI,CAAAA,MAAK;AACb,QAAI,SAAS,CAAC,CAACA;AAAA,EACjB;AAEA,MAAI,CAAC,UAAW,QAAO,EAAE,QAAQ,MAAM,QAAQ,UAAU;AACzD,MAAI,CAAC,UAAW,OAAM,IAAI,MAAM,oCAAoC;AAGpE,MAAI;AACJ,MAAI,QAAQ;AACZ,MAAK,OAAO,cAAc,eAAe,iBAAiB,aAAgB,MAAoB,QAAS,MAAoB,SAAU,MAAoB,QAAS;AAChK,QAAI,IAAI,WAAc,IAAS;AAC7B,eAAY,KAAa,GAAQ,WAAW,KAAkB,IAAI;AAAA,IACpE,OAAO;AACL,cAAS,MAAoB,KAAK,SAAU,MAAoB,SAAU,MAAoB;AAE9F,YAAM,MAAM,IAAI,WAAY,MAAoB,KAAK,MAAM;AAC3D,eAAY,GAAO,KAAK,CAAE,MAAoB,QAAS,MAAoB,OAAO,KAAK,GAAG,OAAO;AAAA,IACnG;AAAA,EACF,OAAO;AACL,QAAI,CAAC,aAAc,UAAU,UAAU,UAAU,SAAW,UAAU,WAAW,UAAU,OAAS,aAAY,OAAO,UAAU,OAAO,UAAU,MAAM;AACxJ,QAAO,MAAW,IAAI,SAAS;AAC7B,UAAIE,QAAO,YAAY,WAAWA,QAAO,YAAY,aAAaA,QAAO,YAAY,UAAU;AAC7F,iBAAY,GAAQ,WAAW,SAA8B;AAAA,MAC/D,OAAO;AACL,oBAAY,KAAK,SAAS;AAC1B,iBAAY,GAAQ,WAAW,SAA8B;AAAA,MAC/D;AAAA,IACF,OAAO;AACL,YAAM,aAAa,KAAK,SAAS;AACjC,YAAM,UAAU,WAAW,WAAW,IAAI;AAC1C,YAAM,WAAW,QAAQ,aAAa,GAAG,GAAG,aAAa,YAAY;AACrE,cAAQ,SAAS,KAAK,SAAS,cAAc;AAC7C,YAAM,MAAM,IAAI,WAAW,SAAS,KAAK,MAAM;AAC/C,eAAY,GAAO,KAAK,CAAC,aAAa,cAAc,KAAK,CAAC;AAAA,IAC5D;AAAA,EACF;AACA,MAAI,UAAU,GAAG;AACf,UAAMG,OAAS,GAAQ,QAAQ,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC;AACrD,IAAG,GAAQ,MAAM;AACjB,aAASA;AAAA,EACX;AACA,MAAI,CAAC,OAAQ,OAAM,IAAI,MAAM,mCAAmC;AAChE,QAAM,SAAoB,GAAK,QAAQ,SAAS;AAChD,QAAM,SAAiBH,QAAO,OAAO,eAAe,MAAc,sBAAsB,MAAM,IAAO,GAAW,QAAQ,CAAC;AACzH,EAAG,GAAQ,CAAC,QAAQ,MAAM,CAAC;AAE3B,MAAIA,QAAO,OAAO,gBAAgB;AAChC,UAAM,MAAS,GAAI,MAAM;AACzB,UAAM,SAAS,MAAM,IAAI,KAAK;AAC9B,IAAAA,QAAO,OAAO,aAAa,OAAO,CAAC,IAAI,IAAK,IAAI,OAAO,CAAC,IAAI,MAAQ,IAAI,OAAO,CAAC;AAChF,IAAG,GAAQ,GAAG;AAAA,EAChB;AAEA,SAAO,EAAE,QAA4B,QAASA,QAAO,OAAO,SAAS,YAAY,KAAM;AACzF;AAgCA,eAAsB,KAAKA,SAAyB,OAAe;AACjE,MAAI,YAAY;AAChB,MAAIA,QAAO,qBAAqB,KAAK,CAAC,MAAM,SAAS,MAAM,MAAM,WAAW,KAAK,MAAM,MAAM,CAAC,IAAI,QAAQ,MAAM,MAAM,CAAC,IAAI,KAAM,QAAO;AAcxI,MAAI,CAAC,KAAK,aAAa;AACrB,SAAK,cAAiB,GAAM,KAAK;AAAA,EACnC,WAAW,KAAK,YAAY,MAAM,CAAC,MAAM,MAAM,MAAM,CAAC,KAAK,KAAK,YAAY,MAAM,CAAC,MAAM,MAAM,MAAM,CAAC,GAAG;AACvG,IAAG,GAAQ,KAAK,WAAW;AAC3B,SAAK,cAAiB,GAAM,KAAK;AAAA,EACnC,OAAO;AACL,UAAMI,MAA4B,CAAC;AACnC,IAAAA,IAAE,OAAU,GAAI,OAAO,KAAK,WAAW;AACvC,IAAAA,IAAE,UAAa,GAAIA,IAAE,MAAMA,IAAE,IAAI;AACjC,IAAAA,IAAE,MAAS,GAAIA,IAAE,OAAO;AACxB,UAAM,UAAU,MAAMA,IAAE,IAAI,KAAK;AACjC,UAAM,eAAe,QAAQ,CAAC,KAAK,MAAM,MAAM,CAAC,KAAK,MAAM,MAAM,MAAM,CAAC,KAAK,KAAK,MAAM;AACxF,IAAG,GAAQ,CAAC,KAAK,aAAaA,IAAE,MAAMA,IAAE,SAASA,IAAE,GAAG,CAAC;AACvD,SAAK,cAAiB,GAAM,KAAK;AACjC,gBAAY,iBAAiBJ,QAAO,oBAAoB;AAAA,EAC1D;AACA,SAAO;AACT;AAEA,eAAsB,QAAQA,SAAyB,QAAgB,QAAiC;AACtG,QAAMI,MAA4B,CAAC;AACnC,MAAI,CAAC,UAAU,CAAC,UAAU,OAAO,MAAM,WAAW,KAAK,OAAO,MAAM,WAAW,OAAO,MAAM,QAAQ;AAClG,QAAI,CAACJ,QAAO,MAAO,KAAI,uDAAuD,OAAO,OAAO,OAAO,KAAK;AACxG,WAAO;AAAA,EACT;AACA,MAAI,OAAO,MAAM,CAAC,MAAM,KAAK,OAAO,MAAM,CAAC,MAAM,KAAK,OAAO,MAAM,CAAC,MAAM,KAAK,OAAO,MAAM,CAAC,MAAM,GAAG;AACpG,QAAI,CAACA,QAAO,MAAO,KAAI,yDAAyD,OAAO,OAAO,OAAO,KAAK;AAC1G,WAAO;AAAA,EACT;AACA,EAAAI,IAAE,SAAY,GAAM,MAAM;AAC1B,EAAAA,IAAE,SAAU,OAAO,MAAM,CAAC,MAAM,OAAO,MAAM,CAAC,KAAK,OAAO,MAAM,CAAC,MAAM,OAAO,MAAM,CAAC,IAAQ,GAAM,eAAe,QAAoB,CAAC,OAAO,MAAM,CAAC,GAAG,OAAO,MAAM,CAAC,CAAC,CAAC,IAAO,GAAM,MAAM;AAC3L,EAAAA,IAAE,OAAU,GAAIA,IAAE,QAAQA,IAAE,MAAM;AAClC,EAAAA,IAAE,UAAa,GAAIA,IAAE,MAAMA,IAAE,IAAI;AACjC,EAAAA,IAAE,MAAS,GAAIA,IAAE,OAAO;AACxB,QAAM,UAAU,MAAMA,IAAE,IAAI,KAAK;AACjC,QAAM,eAAe,QAAQ,CAAC,KAAK,OAAO,MAAM,CAAC,KAAK,MAAM,OAAO,MAAM,CAAC,KAAK,KAAK,MAAM;AAC1F,EAAG,GAAQ,CAACA,IAAE,QAAQA,IAAE,QAAQA,IAAE,MAAMA,IAAE,SAASA,IAAE,GAAG,CAAC;AACzD,SAAO;AACT;;;ACvVA;AAIO,IAAM,MAAN,MAAU;AAAA,EAgGf,cAAc;AA9Fd;AAAA;AAEA;AAAA;AAEA;AAAA;AAEA;AAAA,oCAAmB;AAEnB;AAAA,iCAAgB;AAEhB;AAAA,oCAAqB,CAAC;AAEtB;AAAA;AAEA;AAAA;AAEA;AAAA;AAIA;AAAA;AAEA;AAAA,mCAAmB;AAEnB;AAAA,sCAGI;AAAA,MACA,SAAS;AAAA,MACT,KAAK;AAAA,IACP;AAEF;AAAA,gCAKI;AAAA,MACA,WAAW;AAAA,MACX,SAAS;AAAA,MACT,MAAM;AAAA,MACN,aAAa;AAAA,IACf;AAEF;AAAA,iCAOI;AAAA,MACA,WAAW;AAAA,MACX,SAAS;AAAA,MACT,SAAS;AAAA,MACT,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,QAAQ;AAAA,IACV;AAEF;AAAA,kCAII;AAAA,MACA,WAAW;AAAA,MACX,SAAS;AAAA,MACT,SAAS;AAAA,IACX;AAEF;AAAA,+BAGI;AAAA,MACA,OAAO;AAAA,MACP,OAAO,CAAC;AAAA,IACV;AAEF;AAAA,mCAAoB,CAAC;AAGrB;AAAA;AACA;AACA;AAYE,SAAK,UAAW,OAAO,cAAc,eAAiB,OAAO,UAAU,eAAe;AACtF,SAAK,OAAQ,OAAO,YAAY,eAAiB,OAAO,QAAQ,aAAa,eAAiB,OAAO,QAAQ,SAAS,SAAS;AAC/H,SAAK,OAAO,EAAE,SAAY,IAAQ,WAAW,EAAE;AAC/C,SAAK,YAAY,OAAO,oBAAoB;AAC5C,SAAK,UAAU;AAGf,SAAK,SAAS,KAAK,WAAW,KAAK,YAAa,OAAO,sBAAsB,cAAe;AAC5F,QAAK,OAAO,cAAc,eAAiB,OAAO,UAAU,cAAc,aAAc;AACtF,YAAM,QAAQ,UAAU,aAAa;AACrC,YAAM,MAAM,MAAM,MAAM,eAAe;AACvC,UAAI,2BAAM,IAAI;AACZ,cAAM,gBAAgB,IAAI,CAAC,EAAE,MAAM,eAAe;AAClD,aAAK,YAAY,+CAAgB,MAAM,cAAc,CAAC,EAAE,QAAQ,UAAU,EAAE,IAAI;AAChF,aAAK,QAAQ,MAAM,QAAQ,IAAI,CAAC,GAAG,EAAE;AACrC,YAAI,KAAK,SAAS,CAAC,EAAG,MAAK,QAAQ,KAAK,MAAM,QAAQ,IAAI,CAAC,GAAG,EAAE;AAChE,aAAK,QAAQ,KAAK,MAAM,QAAQ,OAAO,GAAG;AAAA,MAC5C;AAAA,IACF,WAAW,OAAO,YAAY,aAAa;AACzC,WAAK,WAAW,GAAG,QAAQ,QAAQ,IAAI,QAAQ,IAAI;AACnD,WAAK,QAAQ,UAAU,QAAQ,OAAO;AAAA,IACxC;AAAA,EACF;AAAA,EAhCA,IAAI,SAAS;AAAE,WAAO,mBAAK;AAAA,EAAS;AAAA,EACpC,IAAI,OAAO,KAAK;AAAE,uBAAK,SAAU;AAAK,eAAW,SAAS;AAAA,EAAK;AAAA,EAC/D,IAAI,QAAQ;AAAE,WAAO,mBAAK;AAAA,EAAQ;AAAA;AAAA,EAElC,IAAI,MAAM,KAAK;AAAE,uBAAK,QAAS;AAAK,eAAW,QAAQ;AAAA,EAAK;AAAA,EAC5D,IAAI,YAAY;AAAE,WAAO,mBAAK;AAAA,EAAY;AAAA;AAAA,EAE1C,IAAI,UAAU,KAAK;AAAE,uBAAK,YAAa;AAAK,eAAW,YAAY;AAAA,EAAK;AAAA;AAAA,EA4BxE,MAAM,gBAAgB;AAEpB,SAAK,WAAW,OAAO,KAAQ,GAAO,EAAE,eAAe;AACvD,QAAI;AACF,WAAK,aAAa;AAAA,QAChB,SAAa,GAAQ,EAAE,SAAS,IAAO,GAAQ,EAAE,SAAS,EAAE,aAAa;AAAA,QACzE,KAAS,GAAQ,EAAE,SAAS,IAAO,GAAQ,EAAE,SAAS,EAAE,iBAAiB,IAAI;AAAA,MAC/E;AAAA,IACF,SAAQ;AAAA,IAAO;AACf,SAAK,KAAK,YAAY,OAAO,gBAAgB;AAC7C,SAAK,KAAK,UAAU,KAAK,SAAS,SAAS,MAAM;AACjD,QAAI,KAAK,KAAK,aAAa,KAAK,KAAK,SAAS;AAC5C,WAAK,KAAK,OAAO,MAAS,EAAI,EAAE,SAAS,uBAAuB;AAChE,WAAK,KAAK,cAAc,MAAS,EAAI,EAAE,SAAS,8BAA8B;AAAA,IAChF;AACA,UAAM,IAAU,OAAO,KAAK,GAAG;AAC/B,UAAMC,MAAK,IAAI,EAAE,WAAW,QAAQ,IAA8B;AAClE,SAAK,MAAM,YAAY,OAAOA,QAAO;AACrC,SAAK,MAAM,UAAU,KAAK,SAAS,SAAS,OAAO;AACnD,QAAI,KAAK,MAAM,aAAa,KAAK,MAAM,WAAWA,KAAI;AACpD,WAAK,MAAM,UAAUA,IAAG,aAAaA,IAAG,OAAO;AAC/C,WAAK,MAAM,SAASA,IAAG,aAAaA,IAAG,MAAM;AAC7C,WAAK,MAAM,WAAWA,IAAG,aAAaA,IAAG,QAAQ;AACjD,WAAK,MAAM,SAASA,IAAG,aAAaA,IAAG,wBAAwB;AAAA,IACjE;AACA,SAAK,OAAO,YAAY,KAAK,WAAW,OAAO,cAAc,eAAe,OAAO,UAAU,QAAQ;AACrG,SAAK,OAAO,UAAU,KAAK,SAAS,SAAS,QAAQ;AACrD,QAAI;AACF,UAAI,KAAK,OAAO,WAAW;AACzB,cAAM,UAAU,MAAM,UAAU,IAAI,eAAe;AACnD,aAAK,OAAO,UAAU,OAAM,mCAAS;AAAA,MACvC;AAAA,IACF,SAAQ;AACN,WAAK,OAAO,YAAY;AAAA,IAC1B;AACA,QAAI;AACF,WAAK,UAAa,GAAwB,GAAW,CAAC,EAAE,IAAI,CAAC,WAAW,OAAO,WAAW,YAAY,CAAC;AAAA,IACzG,SAAQ;AAAA,IAAO;AAAA,EACjB;AAAA;AAAA,EAGA,YAAY;AACV,UAAM,MAAM,EAAE,OAAO,IAAI,OAAO,CAAC,EAAE;AACnC,QAAI,KAAK,QAAQ,KAAK,SAAS,WAAW,OAAO,GAAG;AAAA,IAWpD;AACA,QAAI,CAAC,KAAK,IAAK,QAAO,eAAe,MAAM,OAAO,EAAE,OAAO,IAAI,CAAC;AAAA,QAC3D,MAAK,MAAM;AAAA,EAClB;AACF;AAjGE;AACA;AACA;AAiGK,IAAM,MAAM,IAAI,IAAI;;;AC/JpB,IAAM,SAAN,MAAa;AAAA,EAUlB,cAAc;AARd;AAAA;AAAA;AAEA;AAAA;AAEA;AAAA;AAEA;AAAA,mCAA6B,CAAC;AA2D9B,wBAAO,aAAY,YAAwC;AACzD,UAAI;AACF,cAAM,UAAU,MAAM,UAAU,aAAa,iBAAiB;AAC9D,aAAK,UAAU,QAAQ,OAAO,CAAC,WAAW,OAAO,SAAS,YAAY;AAAA,MACxE,SAAQ;AACN,aAAK,UAAU,CAAC;AAAA,MAClB;AACA,aAAO,KAAK;AAAA,IACd;AAGA;AAAA,wBAAO,SAAQ,OAAO,iBAA0D;AAzGlF;AA2GI,UAAI,6CAAc,MAAO,MAAK,OAAO,QAAQ,6CAAc;AAC3D,UAAI,6CAAc,KAAM,MAAK,OAAO,OAAO,6CAAc;AACzD,UAAI,6CAAc,KAAM,MAAK,OAAO,OAAO,6CAAc;AACzD,UAAI,6CAAc,MAAO,MAAK,OAAO,QAAQ,6CAAc;AAC3D,UAAI,6CAAc,OAAQ,MAAK,OAAO,SAAS,6CAAc;AAC7D,UAAI,6CAAc,GAAI,MAAK,OAAO,KAAK,6CAAc;AAGrD,UAAI,6CAAc,SAAS;AACzB,YAAI,OAAO,aAAa,YAAY,UAAU;AAC5C,gBAAMC,MAAK,SAAS,eAAe,aAAa,OAAO;AACvD,cAAIA,OAAMA,eAAc,kBAAkB;AACxC,iBAAK,UAAUA;AAAA,UACjB,OAAO;AACL,gBAAI,KAAK,OAAO,MAAO,KAAI,UAAU,0BAA0B,aAAa,OAAO;AACnF,mBAAO,yCAAyC,aAAa,OAAO;AAAA,UACtE;AAAA,QACF,WAAW,aAAa,mBAAmB,kBAAkB;AAC3D,eAAK,UAAU,aAAa;AAAA,QAC9B,OAAO;AACL,cAAI,KAAK,OAAO,MAAO,KAAI,UAAU,uBAAuB,aAAa,OAAO;AAChF,iBAAO,sCAAsC,aAAa,OAAO;AAAA,QACnE;AAAA,MACF,OAAO;AACL,aAAK,UAAU,SAAS,cAAc,OAAO;AAAA,MAC/C;AAGA,YAAM,uBAA+C;AAAA,QACnD,OAAO;AAAA,QACP,OAAO;AAAA,UACL,YAAY,KAAK,OAAO,SAAS,UAAU,SAAS;AAAA;AAAA,UAEpD,YAAY,KAAK,OAAO,OAAO,mBAAmB;AAAA,QACpD;AAAA,MACF;AACA,YAAI,UAAK,WAAL,mBAAa,SAAQ,EAAG,CAAC,qBAAqB,MAAgC,QAAQ,EAAE,OAAO,KAAK,OAAO,MAAM;AACrH,YAAI,UAAK,WAAL,mBAAa,UAAS,EAAG,CAAC,qBAAqB,MAAgC,SAAS,EAAE,OAAO,KAAK,OAAO,OAAO;AACxH,UAAI,KAAK,OAAO,GAAI,CAAC,qBAAqB,MAAkC,WAAW,KAAK,OAAO;AAGnG,WAAK,QAAQ,iBAAiB,QAAQ,MAAM;AAAE,YAAI,KAAK,OAAO,MAAO,KAAI,UAAU,MAAM;AAAA,MAAG,CAAC;AAC7F,WAAK,QAAQ,iBAAiB,SAAS,MAAM;AAAE,YAAI,KAAK,OAAO,MAAO,KAAI,UAAU,OAAO;AAAA,MAAG,CAAC;AAC/F,WAAK,QAAQ,iBAAiB,SAAS,YAAY;AACjD,YAAI,CAAC,KAAK,WAAW,CAAC,KAAK,OAAQ;AACnC,YAAI,KAAK,QAAQ,OAAQ,OAAM,KAAK,QAAQ,KAAK;AAAA,YAC5C,MAAK,QAAQ,MAAM;AAAA,MAC1B,CAAC;AAGD,UAAI,EAAC,uCAAW,eAAc;AAC5B,YAAI,KAAK,OAAO,MAAO,KAAI,gBAAgB,YAAY;AACvD,eAAO;AAAA,MACT;AACA,UAAI;AACF,aAAK,SAAS,MAAM,UAAU,aAAa,aAAa,oBAAoB;AAAA,MAC9E,SAAS,KAAK;AACZ,YAAI,UAAU,GAAG;AACjB,eAAO,iBAAiB,GAAG;AAAA,MAC7B;AACA,UAAI,CAAC,KAAK,QAAQ;AAChB,YAAI,KAAK,OAAO,MAAO,KAAI,gBAAgB,WAAW;AACtD,eAAO;AAAA,MACT;AACA,WAAK,QAAQ,YAAY,KAAK;AAC9B,YAAM,QAAQ,IAAI,QAAQ,CAAC,YAAY;AACrC,YAAI,CAAC,KAAK,QAAS,SAAQ,KAAK;AAAA,YAC3B,MAAK,QAAQ,eAAe,MAAM,QAAQ,IAAI;AAAA,MACrD,CAAC;AACD,YAAM;AACN,YAAM,KAAK,QAAQ,KAAK;AAExB,UAAI,KAAK,OAAO,OAAO;AACrB,YAAI,UAAU;AAAA,UACZ,OAAO,KAAK;AAAA,UACZ,QAAQ,KAAK;AAAA,UACb,OAAO,KAAK;AAAA,UACZ,QAAQ,KAAK;AAAA,UACb,OAAO,KAAK;AAAA,UACZ,UAAU,KAAK;AAAA,UACf,aAAa,KAAK;AAAA,UAClB,cAAc,KAAK;AAAA,QACrB,CAAC;AAAA,MACH;AACA,aAAO,WAAW,KAAK,KAAK;AAAA,IAC9B;AAGA;AAAA,wBAAO,SAAQ,MAAY;AACzB,UAAI,KAAK,QAAS,MAAK,QAAQ,MAAM;AAAA,IACvC;AAGA;AAAA,wBAAO,QAAO,YAA2B;AACvC,UAAI,KAAK,QAAS,OAAM,KAAK,QAAQ,KAAK;AAAA,IAC5C;AAGA;AAAA,wBAAO,QAAO,MAAY;AACxB,UAAI,KAAK,OAAO,MAAO,KAAI,UAAU,MAAM;AAC3C,UAAI,KAAK,MAAO,MAAK,MAAM,KAAK;AAAA,IAClC;AA1KE,SAAK,SAAS;AAAA,MACZ,SAAS;AAAA,MACT,OAAO;AAAA,MACP,MAAM;AAAA,MACN,MAAM;AAAA,MACN,OAAO;AAAA,MACP,QAAQ;AAAA,IACV;AAAA,EACF;AAAA;AAAA,EAGA,IAAW,QAAsC;AAC/C,QAAI,CAAC,KAAK,OAAQ,QAAO;AACzB,WAAO,KAAK,OAAO,eAAe,EAAE,CAAC;AAAA,EACvC;AAAA;AAAA,EAGA,IAAW,eAAmD;AAC5D,QAAI,CAAC,KAAK,MAAO,QAAO;AACxB,WAAO,KAAK,MAAM,kBAAkB,KAAK,MAAM,gBAAgB,IAAI;AAAA,EACrE;AAAA;AAAA,EAGA,IAAW,cAAiD;AAC1D,QAAI,CAAC,KAAK,MAAO,QAAO;AACxB,WAAO,KAAK,MAAM,iBAAiB,KAAK,MAAM,eAAe,IAAI;AAAA,EACnE;AAAA;AAAA,EAGA,IAAW,WAA2C;AACpD,QAAI,CAAC,KAAK,OAAQ,QAAO;AACzB,UAAM,QAA0B,KAAK,OAAO,eAAe,EAAE,CAAC;AAC9D,WAAO,MAAM,cAAc,MAAM,YAAY,IAAI;AAAA,EACnD;AAAA;AAAA,EAGA,IAAW,QAAgB;AACzB,QAAI,CAAC,KAAK,MAAO,QAAO;AACxB,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA;AAAA,EAGA,IAAW,SAAkB;AAhF/B;AAiFI,aAAO,UAAK,YAAL,mBAAc,WAAU;AAAA,EACjC;AAAA;AAAA,EAGA,IAAW,QAAgB;AArF7B;AAsFI,aAAO,UAAK,YAAL,mBAAc,eAAc;AAAA,EACrC;AAAA;AAAA,EAGA,IAAW,SAAiB;AA1F9B;AA2FI,aAAO,UAAK,YAAL,mBAAc,gBAAe;AAAA,EACtC;AAqHF;;;ACjNA;AAAA;AAAA,+BAAAC;AAAA,EAAA;AAAA,yBAAAC;AAAA,EAAA;AAAA;AAAA,0BAAAC;AAAA,EAAA,yBAAAC;AAAA,EAAA,4BAAAC;AAAA,EAAA,wBAAAC;AAAA,EAAA,yBAAAC;AAAA,EAAA,wBAAAC;AAAA,EAAA;AAAA;AAAA;AAAA,gCAAAC;AAAA,EAAA,+BAAAC;AAAA,EAAA,0BAAAC;AAAA,EAAA;AAAA;AAAA;AAAA,8BAAAC;AAAA,EAAA,kCAAAC;AAAA,EAAA,iCAAAC;AAAA,EAAA,kCAAAC;AAAA,EAAA;AAAA,wBAAAC;AAAA,EAAA;AAAA,mBAAAC;AAAA,EAAA,iBAAAC;AAAA,EAAA;AAAA,8BAAAC;AAAA,EAAA;AAAA,6BAAAC;AAAA,EAAA,2BAAAC;AAAA,EAAA,6BAAAC;AAAA,EAAA;AAAA;AAAA,uCAAAC;AAAA,EAAA,uCAAAC;AAAA,EAAA,uCAAAC;AAAA,EAAA,qCAAAC;AAAA,EAAA,qCAAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,6BAAAC;AAAA,EAAA,2BAAAC;AAAA,EAAA,yBAAAC;AAAA,EAAA;AAAA,qBAAAC;AAAA,EAAA,mBAAAC;AAAA,EAAA,mBAAAC;AAAA,EAAA,mBAAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AACE,gBAAa;AACb,gBAAa;AACb,gBAAa;AACb,cAAW;AACX,eAAY;AACZ,cAAW;AACX,IAAAb,oBAAqB;AACrB,gBAAa;AACb,WAAQ;AACR,eAAY;AACZ,aAAU;AACV,IAAAO,oBAAqB;AACrB,IAAA3B,sBAAuB;AACvB,UAAO;AACP,IAAAE,iBAAkB;AAClB,IAAAC,kBAAmB;AACnB,IAAAC,qBAAsB;AACtB,IAAAC,iBAAkB;AAClB,IAAAC,kBAAmB;AACnB,IAAAC,iBAAkB;AAClB,oBAAiB;AACjB,gBAAa;AACb,IAAAK,2BAA4B;AAC5B,IAAAD,qBAAsB;AACtB,IAAAE,0BAA2B;AAC3B,IAAAC,2BAA4B;AAC5B,IAAAC,eAAgB;AAChB,IAAAC,UAAW;AACX,IAAAC,UAAW;AACX,WAAQ;AACR,IAAAC,qBAAsB;AACtB,aAAU;AACV,iBAAc;AACd,IAAAC,oBAAqB;AACrB,IAAAE,sBAAuB;AACvB,mBAAgB;AAChB,WAAQ;AACR,iBAAc;AACd,oBAAiB;AACjB,IAAAO,oBAAqB;AACrB,IAAAC,kBAAmB;AACnB,cAAW;AACX,cAAW;AACX,UAAO;AACP,aAAU;AACV,IAAA5B,gBAAiB;AACjB,IAAAO,uBAAwB;AACxB,IAAAC,wBAAyB;AACzB,IAAAC,mBAAoB;AACpB,IAAAY,8BAA+B;AAC/B,IAAAC,gCAAiC;AACjC,IAAAC,gCAAiC;AACjC,IAAAC,8BAA+B;AAC/B,IAAAC,8BAA+B;AAC/B,IAAAI,YAAa;AACb,IAAAC,YAAa;AACb,IAAAC,YAAa;AACb,IAAAC,YAAa;AA1Df;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,qBAAAb;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,qBAAAO;AAAA,EACA,uBAAA3B;AAAA,EACA;AAAA,EACA,kBAAAE;AAAA,EACA,mBAAAC;AAAA,EACA,sBAAAC;AAAA,EACA,kBAAAC;AAAA,EACA,mBAAAC;AAAA,EACA,kBAAAC;AAAA,EACA;AAAA,EACA;AAAA,EACA,4BAAAK;AAAA,EACA,sBAAAD;AAAA,EACA,2BAAAE;AAAA,EACA,4BAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,WAAAC;AAAA,EACA,WAAAC;AAAA,EACA;AAAA,EACA,sBAAAC;AAAA,EACA;AAAA,EACA;AAAA,EACA,qBAAAC;AAAA,EACA,uBAAAE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,qBAAAO;AAAA,EACA,mBAAAC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,iBAAA5B;AAAA,EACA,wBAAAO;AAAA,EACA,yBAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,+BAAAY;AAAA,EACA,iCAAAC;AAAA,EACA,iCAAAC;AAAA,EACA,+BAAAC;AAAA,EACA,+BAAAC;AAAA,EACA,aAAAI;AAAA,EACA,aAAAC;AAAA,EACA,aAAAC;AAAA,EACA,aAAAC;AACF;;;ACrDA,IAAM,UAAU;AAAA,EACd,aAAa;AAAA,EACb,gBAAgB;AAAA,EAChB,SAAS;AAAA,EACT,OAAO;AAAA,EACP,eAAe;AACjB;AAWO,IAAM,aAAwC,CAAC;AAEtD,eAAe,YAAY,KAAaC,OAA8C;AACpF,MAAI,QAAQ,MAAO,KAAI,qBAAqB,KAAKA,KAAI;AACrD,SAAO,MAAM,KAAKA,KAAI;AACxB;AAEO,SAAS,oBAAoBC,SAAgB;AAClD,UAAQ,cAAcA,QAAO;AAC7B,UAAQ,UAAUA,QAAO;AACzB,UAAQ,gBAAgBA,QAAO;AACjC;AAEA,eAAsB,UAAU,WAAoD;AApCpF,cAAAC,KAAAC;AAqCE,MAAI,WAAW,KAAK,QAAQ,eAAe,aAAa,EAAE;AAC1D,MAAI,CAAC,SAAS,YAAY,EAAE,SAAS,OAAO,EAAG,aAAY;AAC3D,QAAM,oBAAoB,SAAS,SAAS,GAAG,IAAI,SAAS,MAAM,GAAG,IAAI,SAAS,MAAM,IAAI;AAC5F,QAAM,iBAAiB,kBAAkB,kBAAkB,SAAS,CAAC,EAAE,QAAQ,SAAS,EAAE;AAC1F,QAAM,kBAAkB,iBAAiB;AACzC,aAAW,cAAc,IAAI;AAAA,IAC3B,MAAM;AAAA,IACN,kBAAkB;AAAA,IAClB,mBAAmB;AAAA,IACnB,aAAa,eAAW,cAAc;AAAA,IACtC,SAAS;AAAA,IACT,KAAK;AAAA,EACP;AACA,UAAQ,iBAAkB,OAAO,cAAc;AAC/C,MAAI,eAAe,CAAC;AACpB,MAAI;AACF,mBAAgB,QAAQ,kBAAkB,QAAQ,cAAe,MAAS,GAAG,WAAW,IAAI,CAAC;AAAA,EAC/F,SAAQ;AACN,YAAQ,iBAAiB;AAAA,EAC3B;AACA,aAAW,cAAc,EAAE,UAAW,QAAQ,kBAAkB,QAAQ,eAAgB,OAAO,KAAK,YAAY,EAAE,SAAS,eAAe;AAC1I,aAAW,cAAc,EAAE,MAAM,WAAW,cAAc,EAAE,UAAU,kBAAkB;AACxF,QAAM,gBAAgB,OAAO,UAAU,cAAc,CAAC,IAAI,EAAE,WAAW,CAAC,KAAaH,UAAuB,YAAY,KAAKA,KAAI,EAAE;AACnI,MAAII,UAAoB,IAAO,GAAW,WAAW,cAAc,EAAE,KAAK,aAAa;AACvF,MAAI,SAAS;AACb,MAAI;AAEF,IAAAA,QAAM,cAAc;AACpB,QAAI,QAAQ,MAAO,KAAI,uBAAuBA,QAAM,SAAS,CAAC;AAAA,EAChE,SAAS,KAAK;AACZ,QAAI,oCAAoC,UAAU,GAAG;AAAA,EACvD;AACA,MAAI;AAEF,UAAM,YAAY,QAAM,KAAAA,QAAM,YAAN,mBAAe,WAAU;AACjD,eAAW,cAAc,EAAE,qBAAmB,4CAAW,eAAX,mBAAuB,eAAc;AACnF,QAAI,UAAW,CAAAA,QAAM,SAAS,SAAS;AAAA,QAClC,CAAAA,UAAQ,MAAS,GAAe,WAAW,cAAc,EAAE,UAAU,kBAAkB,UAAU,aAAa;AAEnH,eAAW,cAAc,EAAE,sBAAoBD,OAAAD,MAAAE,QAAM,cAAN,gBAAAF,IAAiB,eAAjB,gBAAAC,IAA6B,eAAc;AAC1F,QAAI,QAAQ,QAAS,KAAI,SAAS,EAAE,OAAO,gBAAgB,KAAKC,QAAM,UAAU,GAAG,OAAO,WAAW,cAAc,EAAE,kBAAkB,CAAC;AACxI,aAAS;AAAA,EACX,SAAS,KAAK;AACZ,QAAI,wBAAwB,UAAU,GAAG;AAAA,EAC3C;AACA,MAAI,UAAU,QAAQ,eAAe,QAAQ,kBAAkB,CAAC,WAAW,cAAc,EAAE,SAAS;AAClG,QAAI;AACF,YAAM,aAAa,MAAMA,QAAM,KAAK,eAAe;AACnD,UAAI,QAAQ,MAAO,KAAI,gBAAgB,iBAAiB,UAAU;AAAA,IACpE,SAAS,KAAK;AACZ,UAAI,uBAAuB,UAAU,GAAG;AAAA,IAC1C;AAAA,EACF;AACA,SAAOA;AACT;;;ACzFE,cAAW;;;ACMN,IAAMC,UAAS;AAAA,EACpB,MAAM;AAAA,EACN,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,IAAI;AAAA,EACJ,YAAY,CAAC;AAAA,EACb,WAAW;AAAA;AAAA,IACT,OAAO;AAAA,IACP,WAAW;AAAA,IACX,oBAAoB;AAAA,IACpB,uBAAuB;AAAA,IACvB,OAAO;AAAA,IACP,SAAS;AAAA,IACT,8BAA8B;AAAA;AAAA,IAC9B,gBAAgB;AAAA;AAAA,EAClB;AACF;AAEA,SAAS,aAAmB;AAK1B,QAAMC,MAAKD,QAAO;AAClB,MAAI,CAACC,IAAI;AACT,EAAAD,QAAO,aAAaC,IAAG,uBAAuB;AAEhD;AAOO,SAAS,SAAS,UAAuB;AA1ChD;AA4CE,MAAI,SAAS,OAAO,YAAY,UAAW;AAC3C,MAAKD,QAAO,QAAW,GAAO,EAAE,YAAa,GAAC,KAAAA,WAAA,gBAAAA,QAAQ,OAAR,mBAAY,aAAaA,QAAO,GAAG,WAAU;AACzF,QAAI,wCAAwC;AAC5C,aAAS,OAAO,MAAM;AAAA,EAMxB;AACA,MAAI,CAAI,IAAYA,QAAO,IAAI,GAAG;AAChC,QAAI;AACF,MAAAA,QAAO,SAAe,OAAO,KAAK,GAAG;AAAA,IACvC,SAAS,KAAK;AACZ,UAAI,wCAAwC,GAAG;AAC/C;AAAA,IACF;AACA,QAAI;AACF,MAAAA,QAAO,KAAKA,QAAO,OAAO,WAAW,UAAUA,QAAO,SAAS;AAC/D,UAAI,CAACA,QAAO,IAAI;AACd,YAAI,yCAAyC;AAC7C;AAAA,MACF;AACA,YAAM,OAAOA,QAAO,GAAG,aAAaA,QAAO,GAAG,OAAO,EAAE,SAAS,KAAK;AACrE,UAAI,CAAC,MAAM;AACT,YAAI,6EAA6E;AACjF,iBAAS,OAAO,UAAU;AAC1B;AAAA,MACF;AACA,UAAIA,QAAO,QAAQ;AACjB,QAAAA,QAAO,OAAO,iBAAiB,oBAAoB,CAAC,MAAM;AACxD,cAAI,kBAAkB,EAAE,IAAI;AAC5B,cAAI,0FAA0F;AAC9F,mBAAS,KAAK,OAAO;AACrB,gBAAM,IAAI,MAAM,mCAAmC;AAAA,QACrD,CAAC;AACD,QAAAA,QAAO,OAAO,iBAAiB,wBAAwB,CAAC,MAAM;AAC5D,cAAI,oCAAoC,CAAC;AAAA,QAC3C,CAAC;AACD,QAAAA,QAAO,OAAO,iBAAiB,6BAA6B,CAAC,MAAM;AACjE,cAAI,kCAAkC,CAAC;AAAA,QACzC,CAAC;AAAA,MACH;AAAA,IACF,SAAS,KAAK;AACZ,UAAI,4CAA4C,GAAG;AACnD;AAAA,IACF;AACA,QAAI;AACF,MAAG,GAAgB,GAAGA,QAAO,EAAE;AAAA,IACjC,SAAS,KAAK;AACZ,UAAI,4CAA4C,GAAG;AACnD;AAAA,IACF;AACA,QAAI;AACF,YAAM,MAAM,IAAO,GAAaA,QAAO,EAAE;AAEzC,MAAG,GAAgBA,QAAO,MAAM,MAAM,IAAO,GAAiB,GAAG,GAAGA,QAAO,QAAQ;AAAA,IACrF,SAAS,KAAK;AACZ,UAAI,iDAAiD,GAAG;AACxD;AAAA,IACF;AACA,QAAI;AACF,YAAM,UAAa,GAAqB,OAAO;AAC/C,cAAQ,QAAQ,CAAC,iBAAiB;AAChC,cAAM,kBAAkB,EAAE,GAAG,cAAc,aAAaA,QAAO,KAAK;AACpE,QAAG,GAAe,eAAe;AAAA,MACnC,CAAC;AAAA,IACH,SAAS,KAAK;AACZ,UAAI,4DAA4D,GAAG;AACnE;AAAA,IACF;AACA,QAAI;AAEF,UAAO,EAAI,EAAE,aAAa,cAAe,CAAG,EAAI,EAAE,IAAI,iBAAiB,CAAC;AAAA,IAC1E,SAAS,KAAK;AACZ,UAAI,kDAAkD,GAAG;AACzD;AAAA,IACF;AACA,eAAW;AACX,UAAM,UAAa,GAAQ;AAC3B,UAAM,UAAU,OAAO,QAAQ,OAAO,MAAM,cAAc,QAAQ,iBAAiB,EAAE,EAAE,KAAK;AAC5F,QAAI,SAAS;AACX,UAAI,SAAS,OAAO,MAAO,KAAI,+BAA+B,EAAE,OAAO,QAAQ,aAAa,QAAQ,OAAO,GAAa,UAAU,QAAQ,aAAa,QAAQ,QAAQ,EAAY,CAAC;AAAA,IACtL,OAAO;AACL,UAAI,yCAAyC,SAASA,QAAO,EAAE;AAAA,IACjE;AAAA,EACF;AACF;;;AChIO,IAAM,YAAwD;AAAA,EACnE,OAAO;AAAA,EACP,KAAK;AAAA,EACL,KAAK;AAAA,EACL,MAAM;AAAA,EACN,OAAO;AAAA,EACP,KAAK,CAAC,QAAQ,OAAQ,KAAM;AAC9B;AAEO,SAAS,OAAO;AACrB,YAAU,QAAW,GAAO,KAAO,SAAS;AAC5C,YAAU,MAAS,GAAO,GAAK,SAAS;AACxC,YAAU,MAAS,GAAO,GAAK,SAAS;AACxC,YAAU,OAAU,GAAO,KAAK,SAAS;AACzC,YAAU,QAAW,GAAO,OAAO,SAAS;AAC5C,YAAU,MAAS,GAAS,CAAC,QAAQ,OAAQ,KAAM,GAAG,SAAS;AACjE;;;ACTA,eAAsB,iBAAuC;AAV7D;AAWE,QAAM,IAAI,cAAc;AACxB,OAAI,SAAI,eAAJ,mBAAgB,QAAS,QAAO;AACpC,MAAI,IAAI,OAAO,aAAa,IAAI,OAAO,QAAS,QAAO;AACvD,MAAI,IAAI,MAAM,aAAa,IAAI,MAAM,QAAS,QAAO;AACrD,MAAI,IAAI,KAAK,aAAa,IAAI,KAAK,QAAS,QAAO;AACnD,SAAO;AACT;AAEA,SAAS,kBAAkBE,SAAgB;AACzC,QAAM,aAAuB,CAAC;AAC9B,MAAI,CAAC,IAAI,QAAQ,SAAS,KAAK,GAAG;AAChC,UAAM,YAAY;AAAA,MAChB,YAAY;AAAA,MACZ,aAAgB,GAAW;AAAA,MAC3B,YAAY,CAACC,QAAU,GAAK,MAAS,GAAIA,IAAG,OAAO,GAAM,GAAO,GAAIA,IAAG,OAAO,GAAGA,IAAG,OAAO,CAAC,GAAGA,IAAG,OAAO,CAAC,CAAC,CAAC;AAAA,IAC9G;AACA,IAAG,GAAe,SAAS;AAC3B,QAAI,QAAQ,KAAK,KAAK;AACtB,eAAW,KAAK,KAAK;AAAA,EACvB;AACA,MAAI,CAAC,IAAI,QAAQ,SAAS,UAAU,GAAG;AACrC,UAAM,iBAAiB;AAAA,MACrB,YAAY;AAAA,MACZ,aAAgB,GAAW;AAAA,MAC3B,YAAY,CAACA,QAAU,GAAK,MAAS,GAAO,GAAO,GAASA,IAAG,OAAO,GAAGA,IAAG,OAAO,CAAC,GAAGA,IAAG,OAAO,CAAC,GAAM,GAAIA,IAAG,OAAO,GAAGA,IAAG,OAAO,CAAC,CAAC,CAAC;AAAA,IACxI;AACA,IAAG,GAAe,cAAc;AAChC,QAAI,QAAQ,KAAK,UAAU;AAC3B,eAAW,KAAK,UAAU;AAAA,EAC5B;AAqBA,MAAI,CAAC,IAAI,QAAQ,SAAS,kBAAkB,KAAKD,QAAO,iBAAiB;AACvE,UAAM,yBAAyB;AAAA,MAC7B,YAAY;AAAA,MACZ,aAAgB,GAAW;AAAA,MAC3B,YAAY,CAACC,QAAU,GAAK,MAAM;AAChC,cAAM,UAAa,GAAW;AAC9B,QAAG,IAAW,KAAK;AACnB,cAAMC,MAAO,GAAM,iBAAiBD,IAAG,OAAO,OAAOA,IAAG,MAAM,SAASA,IAAG,MAAM,WAAWA,IAAG,MAAM,MAAM;AAC1G,QAAG,IAAW,OAAO;AACrB,eAAOC;AAAA,MACT,CAAC;AAAA,IACH;AACA,IAAG,GAAe,sBAAsB;AACxC,QAAI,QAAQ,KAAK,kBAAkB;AACnC,eAAW,KAAK,kBAAkB;AAAA,EACpC;AACA,MAAK,WAAW,SAAS,KAAMF,QAAO,MAAO,KAAI,uBAAuB,UAAU;AACpF;AAEA,IAAI,eAAwC,CAAC;AAE7C,eAAsB,MAAM,UAAiB,QAAQ,OAAO;AAlF5D;AAmFE,WAAS,QAAQ;AACjB,QAAI,cAAS,OAAO,YAAhB,mBAAyB,YAAW,EAAG,UAAS,OAAO,UAAU,MAAM,eAAe;AAC1F,MAAI,SAAS,IAAI,WAAY,SAAS,OAAO,WAAY,SAAS,OAAO,QAAQ,SAAS,KAAU,GAAW,MAAM,SAAS,OAAO,SAAW;AAC9I,UAAM,YAAY,IAAI;AAEtB,QAAI,SAAS,OAAO,WAAW,SAAS,OAAO,QAAQ,SAAS,GAAG;AAGjE,UAAI,OAAO,WAAW,eAAe,OAAO,sBAAsB,eAAe,SAAS,OAAO,OAAO;AACtG,YAAI,SAAS,OAAO,MAAO,KAAI,2BAA2B;AAAA,MAC5D;AAEA,UAAI,OAAO,cAAc,iBAAe,4CAAW,cAAX,mBAAsB,cAAc,SAAS,cAAa;AAChG,YAAI,SAAS,OAAO,MAAO,KAAI,yBAAyB;AAAA,MAC1D;AAGA,UAAI,YAAY,OAAO,KAAQ,GAAO,EAAE,eAA0C;AAClF,UAAI,SAAS,OAAO,YAAY,aAAa,CAAC,UAAU,SAAS,SAAS,GAAG;AAC3E,QAAQ,SAAS,QAAQ;AACzB,oBAAY,OAAO,KAAQ,GAAO,EAAE,eAA0C;AAAA,MAChF;AACA,UAAI,SAAS,OAAO,MAAO,KAAI,uBAAuB,SAAS;AAG/D,UAAI,IAAI,WAAW,CAAC,IAAI,QAAS,SAAS,OAAO,YAAY,gBAAiB,UAAU,SAAS,OAAO,GAAG;AACzG,YAAI,SAAS,OAAO,MAAO,KAAI,8DAA8D;AAC7F,iBAAS,OAAO,UAAU;AAAA,MAC5B;AACA,UAAI,IAAI,QAAQ,CAAC,IAAI,YAAY,SAAS,OAAO,YAAY,WAAW,SAAS,OAAO,YAAY,cAAc,UAAU,SAAS,YAAY,GAAG;AAClJ,YAAI,SAAS,OAAO,MAAO,KAAI,4BAA4B,SAAS,OAAO,OAAO,0BAA0B;AAC5G,iBAAS,OAAO,UAAU;AAAA,MAC5B;AAGA,UAAI,IAAI,WAAW,SAAS,OAAO,YAAY,UAAU;AACvD,YAAI,OAAO,cAAc,eAAe,OAAO,UAAU,QAAQ,aAAa;AAC5E,cAAI,qEAAqE;AACzE,mBAAS,OAAO,UAAU;AAAA,QAC5B,OAAO;AACL,gBAAM,UAAU,MAAM,UAAU,IAAI,eAAe;AACnD,cAAI,SAAS,OAAO,MAAO,KAAI,8BAA8B,OAAO;AACpE,cAAI,CAAC,SAAS;AACZ,gBAAI,sEAAsE;AAC1E,qBAAS,OAAO,UAAU;AAAA,UAC5B,OAAO;AAEL,kBAAM,cAAc,wBAAwB,UAAU,MAAM,QAAQ,mBAAmB,IAAI;AAE3F,gBAAI,wBAAwB,WAAW;AAAA,UACzC;AAAA,QACF;AAAA,MACF;AAEA,UAAI,CAAC,UAAU,SAAS,SAAS,OAAO,OAAO,GAAG;AAChD,YAAI,kBAAkB,SAAS,OAAO,OAAO,wBAAwB;AACrE,iBAAS,OAAO,UAAU,IAAI,OAAO,eAAe;AACpD,YAAI,SAAS,OAAO,MAAO,KAAI,6BAA6B,SAAS,OAAO,OAAO,EAAE;AAAA,MACvF;AAEA,UAAI,SAAS,OAAO,MAAO,KAAI,oBAAoB,CAAC,SAAS,OAAO,OAAO,CAAC;AAG5E,UAAI,SAAS,OAAO,YAAY,QAAQ;AAEtC,YAAO,EAAI,EAAE,aAAa,8BAA+B,CAAG,EAAI,EAAE,IAAI,iCAAiC,IAAI;AAC3G,YAAI,SAAS,OAAO,MAAO,KAAI,cAAc,SAAS,OAAO,QAAQ;AACrE,YAAI,OAAU,QAAiB,YAAa,CAAG,IAAa,SAAS,OAAO,UAAU,SAAS,OAAO,iBAAiB;AAAA,YAClH,OAAM,IAAI,MAAM,wEAAwE;AAC7F,YAAIG,MAAK;AACT,YAAI,OAAO;AACX,YAAI;AACF,UAAAA,MAAK,MAAS,EAAI,EAAE,SAAS,8BAA8B;AAC3D,iBAAO,MAAS,EAAI,EAAE,SAAS,uBAAuB;AACtD,cAAI,SAAS,OAAO,MAAO,KAAI,mBAAmB,OAAO,SAAS,SAAS,IAAIA,MAAK,kBAAkB,gBAAgB,EAAE;AACxH,cAAI,SAAS,OAAO,SAAS,CAAC,KAAM,KAAI,2CAA2C;AAAA,QACrF,SAAQ;AACN,cAAI,uBAAuB;AAAA,QAC7B;AAAA,MACF;AAEA,UAAI;AACF,cAAS,IAAW,SAAS,OAAO,OAAO;AAC3C,cAAS,IAAM;AAAA,MACjB,SAAS,KAAK;AACZ,YAAI,8BAA8B,SAAS,OAAO,SAAS,GAAG;AAC9D,eAAO;AAAA,MACT;AAEA,UAAI,SAAS,OAAO,MAAO,gBAAe,KAAK,MAAM,KAAK,UAAa,EAAI,EAAE,KAAK,CAAC;AAAA,IACrF;AAGA,QAAO,GAAW,MAAM,aAAgB,GAAW,MAAM,SAAS;AAEhE,UAAO,EAAI,EAAE,aAAa,0BAA2B,CAAG,EAAI,EAAE,IAAI,6BAA6B,IAAI;AAEnG,UAAO,EAAI,EAAE,aAAa,eAAgB,CAAG,EAAI,EAAE,IAAI,kBAAkB,IAAI;AAK7E,UAAI,SAAS,OAAO,SAAS,OAAO,SAAS,OAAO,eAAe,eAAe,SAAS,OAAO,YAAY;AAC5G,YAAI,mDAAmD,IAAI;AAC3D,QAAG,EAAI,EAAE,IAAI,kCAAkC,CAAC;AAAA,MAClD;AAAA,IACF;AAGA,QAAO,GAAW,MAAM,UAAU;AAAA,IAIlC;AAEA,QAAI,SAAS,OAAO,OAAO;AAEzB,YAAM,WAAc,EAAI,EAAE;AAC1B,YAAM,eAAe,CAAC;AACtB,iBAAW,OAAO,OAAO,KAAK,QAAQ,GAAG;AACvC,YAAI,aAAa,GAAG,MAAM,SAAS,GAAG,EAAG;AACzC,qBAAa,GAAG,IAAI,SAAS,GAAG;AAAA,MAClC;AACA,UAAI,SAAS,OAAO,SAAS,OAAO,KAAK,YAAY,EAAE,SAAS,EAAG,KAAI,YAAe,GAAW,GAAG,UAAU,YAAY;AAAA,IAC5H;AAEA,QAAI,SAAS,OAAO,SAAS,OAAO,KAAK,SAAS,OAAO,KAAK,EAAE,SAAS,GAAG;AAC1E,UAAI,SAAS,OAAO,MAAO,KAAI,UAAU,SAAS,OAAO,OAAO,CAAC;AACjE,iBAAW,CAAC,KAAK,GAAG,KAAK,OAAO,QAAQ,SAAS,OAAO,KAAK,GAAG;AAC9D,QAAG,EAAI,EAAE,IAAI,KAAK,GAAuB;AAAA,MAC3C;AAAA,IACF;AAEA,IAAG,IAAe;AAClB,IAAU,KAAK;AACf,aAAS,YAAY,cAAc,KAAK,MAAM,IAAI,IAAI,SAAS;AAC/D,aAAS,OAAO,UAAa,GAAW;AACxC,UAAM,IAAI,cAAc;AACxB,sBAAkB,SAAS,MAAM;AAAA,EAGnC;AACA,SAAO;AACT;AAGO,SAAS,QAAQ,aAAuBH,SAAQ;AAErD,aAAW,cAAc,aAAa;AACpC,UAAM,eAAe;AAAA,MACnB;AAAA,MACA,aAAaA,QAAO;AAAA,MACpB,YAAY,CAAC,UAAsB;AA3OzC;AA4OQ,YAAIA,QAAO,MAAO,KAAI,cAAc,YAAYA,QAAO,SAAS,KAAK;AACrE,gBAAO,oCAAO,WAAP,mBAAe;AAAA,MACxB;AAAA;AAAA;AAAA,IAGF;AACA,IAAG,GAAe,YAAY;AAAA,EAChC;AACA,MAAI,UAAa,GAAwB,GAAW,CAAC,EAAE,IAAI,CAAC,WAAW,OAAO,WAAW,YAAY,CAAC;AACxG;;;ACrPA;AAAA;AAAA;AAAA;AAAA,gBAAAI;AAAA,EAAA;AAAA;AAAA;AAAA,cAAAC;AAAA,EAAA;AAAA,iBAAAC;AAAA,EAAA;AAAA;;;ACKO,IAAM,mBAAmB,CAAC,UAAqB;AACpD,MAAI,CAAC,MAAO,KAAI,4BAA4B;AAAA,WACnC,CAAC,MAAM,WAAY,KAAI,wCAAwC;AAAA,OACnE;AACH,UAAM,MAAM,MAAM,WAAW,MAAM,EAAE,oBAAoB,KAAK,CAAC;AAC/D,QAAI,CAAC,IAAK,KAAI,uCAAuC;AAAA,QAChD,QAAO;AAAA,EACd;AACA,SAAO;AACT;AAEO,IAAM,UAAU,CAAC,UAAkB,KAAK,MAAO,QAAQ,MAAO,KAAK,EAAE;AAErE,IAAM,UAAU,CAAC,KAAa,QAAgB,WAA4B,IAAI,QAAQ,QAAQ,OAAO,WAAW,WAAW,OAAO,QAAQ,CAAC,IAAI,MAAM;AAErJ,IAAM,aAAa,CAAC,GAAuB,QAA6B;AAC7E,MAAI,CAAC,IAAI,YAAY,OAAO,MAAM,YAAa,QAAO,IAAI;AAC1D,QAAMC,OAAM,kBAAkB,KAAK,CAAC,MAAO,IAAI,GAAI,MAAO,IAAI,GAAI,GAAG,CAAC;AACtE,SAAO,QAAQA,KAAI,CAAC,CAAC,KAAKA,KAAI,CAAC,CAAC,KAAKA,KAAI,CAAC,CAAC,KAAK,IAAI,KAAK;AAC3D;AAEO,SAAS,OAAO,KAAmE,KAAa,QAAgB,QAAgBC,eAA2B;AAChK,QAAM,OAAiB,IAAI,QAAQ,WAAW,EAAE,EAAE,MAAM,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC;AACjF,QAAM,IAAI,KAAK,IAAI,GAAG,MAAM;AAC5B,WAAS,IAAI,KAAK,SAAS,GAAG,KAAK,GAAG,KAAK;AACzC,UAAMC,KAAI,IAAID,cAAa,aAAa;AACxC,QAAIA,cAAa,eAAeA,cAAa,gBAAgB,IAAI;AAC/D,UAAI,YAAYA,cAAa;AAC7B,UAAI,SAAS,KAAK,CAAC,GAAG,IAAI,GAAGC,KAAI,EAAE;AAAA,IACrC;AACA,QAAI,YAAYD,cAAa;AAC7B,QAAI,SAAS,KAAK,CAAC,GAAG,IAAI,GAAGC,KAAI,EAAE;AAAA,EACrC;AACF;AAEO,SAAS,MAAM,KAAmE,GAAWA,IAAW,GAAuBD,eAA2B;AAC/J,MAAI,YAAY,WAAW,GAAGA,aAAY;AAC1C,MAAI,UAAU;AACd,MAAI,IAAI,GAAGC,IAAGD,cAAa,WAAW,GAAG,IAAI,KAAK,EAAE;AACpD,MAAI,KAAK;AACX;AAEO,SAAS,KAAK,KAAmE,GAAWC,IAAW,OAAe,QAAgBD,eAA2B;AACtK,MAAI,UAAU;AACd,MAAI,YAAYA,cAAa;AAC7B,MAAIA,cAAa,WAAW;AAC1B,UAAME,OAAM,IAAI,IAAI,SAAS;AAC7B,UAAMC,OAAMF,KAAIA,KAAI,UAAU;AAC9B,QAAI,QAAQC,KAAIC,KAAI,QAAQ,GAAG,SAAS,GAAG,GAAG,GAAG,IAAI,KAAK,EAAE;AAAA,EAC9D,OAAO;AACL,QAAI,OAAO,IAAIH,cAAa,WAAWC,EAAC;AACxC,QAAI,OAAO,IAAI,QAAQD,cAAa,WAAWC,EAAC;AAChD,QAAI,iBAAiB,IAAI,OAAOA,IAAG,IAAI,OAAOA,KAAID,cAAa,SAAS;AACxE,QAAI,OAAO,IAAI,OAAOC,KAAI,SAASD,cAAa,SAAS;AACzD,QAAI,iBAAiB,IAAI,OAAOC,KAAI,QAAQ,IAAI,QAAQD,cAAa,WAAWC,KAAI,MAAM;AAC1F,QAAI,OAAO,IAAID,cAAa,WAAWC,KAAI,MAAM;AACjD,QAAI,iBAAiB,GAAGA,KAAI,QAAQ,GAAGA,KAAI,SAASD,cAAa,SAAS;AAC1E,QAAI,OAAO,GAAGC,KAAID,cAAa,SAAS;AACxC,QAAI,iBAAiB,GAAGC,IAAG,IAAID,cAAa,WAAWC,EAAC;AACxD,QAAI,UAAU;AAAA,EAChB;AACA,MAAI,OAAO;AACb;AAEO,SAAS,MAAM,KAAmE,QAAiBD,eAA2B;AACnI,MAAI,OAAO,SAAS,EAAG;AACvB,MAAI,UAAU;AACd,MAAI,OAAO,OAAO,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC;AACrC,aAAWI,OAAM,QAAQ;AACvB,QAAI,cAAc,WAAWA,IAAG,CAAC,KAAK,GAAGJ,aAAY;AACrD,QAAI,OAAO,KAAK,MAAMI,IAAG,CAAC,CAAC,GAAG,KAAK,MAAMA,IAAG,CAAC,CAAC,CAAC;AAAA,EACjD;AACA,MAAI,OAAO;AACX,MAAIJ,cAAa,cAAc;AAC7B,QAAI,UAAU;AACd,QAAI,KAAK;AAAA,EACX;AACF;AAEO,SAAS,OAAO,KAAmE,QAAiBA,eAA2B;AACpI,MAAI,OAAO,SAAS,EAAG;AACvB,MAAI,YAAYA,cAAa;AAC7B,MAAI,CAACA,cAAa,aAAa,OAAO,UAAU,GAAG;AACjD,UAAM,KAAK,QAAQA,aAAY;AAC/B;AAAA,EACF;AACA,MAAI,OAAO,OAAO,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC;AACrC,WAAS,IAAI,GAAG,IAAI,OAAO,SAAS,GAAG,KAAK;AAC1C,UAAMK,OAAM,OAAO,CAAC,EAAE,CAAC,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC,KAAK;AAC/C,UAAMC,OAAM,OAAO,CAAC,EAAE,CAAC,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC,KAAK;AAC/C,QAAI,iBAAiB,OAAO,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,EAAE,CAAC,GAAGD,KAAIC,GAAE;AAAA,EACzD;AACA,MAAI,iBAAiB,OAAO,OAAO,SAAS,CAAC,EAAE,CAAC,GAAG,OAAO,OAAO,SAAS,CAAC,EAAE,CAAC,GAAG,OAAO,OAAO,SAAS,CAAC,EAAE,CAAC,GAAG,OAAO,OAAO,SAAS,CAAC,EAAE,CAAC,CAAC;AAC3I,MAAI,OAAO;AACX,MAAIN,cAAa,cAAc;AAC7B,QAAI,UAAU;AACd,QAAI,KAAK;AAAA,EACX;AACF;AAEO,SAAS,MAAM,KAAmE,MAAa,IAAW,SAAS,GAAG;AAC3H,MAAI;AACJ,MAAI;AACJ,MAAIC;AACJ,MAAI,UAAU;AACd,MAAI,OAAO,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC;AAC3B,MAAI,OAAO,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;AACvB,UAAQ,KAAK,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,GAAG,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC;AACnD,MAAI,SAAS,KAAK,IAAI,KAAK,IAAI,GAAG,CAAC;AACnC,EAAAA,KAAI,SAAS,KAAK,IAAI,KAAK,IAAI,GAAG,CAAC;AACnC,MAAI,OAAO,GAAGA,EAAC;AACf,WAAU,IAAM,KAAQ,IAAI,KAAK;AACjC,MAAI,SAAS,KAAK,IAAI,KAAK,IAAI,GAAG,CAAC;AACnC,EAAAA,KAAI,SAAS,KAAK,IAAI,KAAK,IAAI,GAAG,CAAC;AACnC,MAAI,OAAO,GAAGA,EAAC;AACf,WAAU,IAAM,KAAQ,IAAI,KAAK;AACjC,MAAI,SAAS,KAAK,IAAI,KAAK,IAAI,GAAG,CAAC;AACnC,EAAAA,KAAI,SAAS,KAAK,IAAI,KAAK,IAAI,GAAG,CAAC;AACnC,MAAI,OAAO,GAAGA,EAAC;AACf,MAAI,UAAU;AACd,MAAI,OAAO;AACX,MAAI,KAAK;AACX;;;ACnEO,IAAMM,WAAuB;AAAA,EAClC,OAAO;AAAA;AAAA,EACP,YAAY;AAAA;AAAA,EACZ,aAAa;AAAA,EACb,OAAO;AAAA,EACP,MAAM;AAAA,EACN,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,WAAW;AAAA,EACX,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,eAAe;AAAA,EACf,cAAc;AAAA,EACd,cAAc;AAAA,EACd,UAAU;AAAA,EACV,cAAc;AAAA,EACd,UAAU;AAAA,EACV,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,gBAAgB;AAAA,EAChB,cAAc;AAAA,EACd,YAAY;AAAA,EACZ,cAAc;AAAA,EACd,eAAe;AACjB;;;AClFO,IAAM,kBAA4C;AAAA,EACvD,YAAY;AAAA,IACV;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACtD;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACvD;AAAA,IAAK;AAAA,IAAI;AAAA,IAAK;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAI;AAAA,IAAI;AAAA,IAAK;AAAA,IAAI;AAAA,EACpD;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,gBAAgB,CAAC,KAAK,IAAI,IAAI,IAAI,GAAG,KAAK,KAAK,KAAK,GAAG;AAAA,EACvD,gBAAgB,CAAC,IAAI,KAAK,IAAI,KAAK,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,GAAG;AAAA,EAClE,gBAAgB,CAAC,KAAK,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,GAAG;AAAA,EACxD,gBAAgB,CAAC,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,GAAG;AAAA,EACjE,oBAAoB,CAAC,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,GAAG;AAAA,EACrE,oBAAoB,CAAC,KAAK,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,GAAG;AAAA,EAC5D,oBAAoB,CAAC,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,GAAG;AAAA,EACrE,oBAAoB,CAAC,KAAK,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,GAAG;AAAA,EAC5D,gBAAgB,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;AAAA;AAAA,EAClD,gBAAgB,CAAC,IAAI,GAAG,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;AAAA;AAAA,EACzD,gBAAgB,CAAC,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG;AAAA;AAAA,EAC7C,gBAAgB,CAAC,KAAK,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,KAAK,GAAG;AAAA;AAAA,EACvD,gBAAgB,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;AAAA;AAAA,EAClD,gBAAgB,CAAC,KAAK,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;AAAA;AAAA,EAC3D,gBAAgB,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;AAAA;AAAA,EAC5D,mBAAmB,CAAC,KAAK,IAAI,IAAI,KAAK,IAAI,KAAK,IAAI,GAAG;AAAA;AAAA,EACtD,mBAAmB,CAAC,IAAI,KAAK,IAAI,IAAI,IAAI,EAAE;AAAA;AAAA,EAC3C,cAAc,CAAC,KAAK,KAAK,KAAK,KAAK,GAAG;AAAA;AAAA,EACtC,eAAe,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;AAAA,EACjD,eAAe,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;AAAA,EAC3D,eAAe,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;AAAA,EACjD,eAAe,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;AAAA,EAC3D,eAAe,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;AAAA,EACjD,eAAe,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;AAAA,EAC3D,eAAe,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;AAAA,EAC3D,kBAAkB,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;AAAA,EACzD,kBAAkB,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;AAAA,EAC/C,aAAa,CAAC,KAAK,KAAK,KAAK,KAAK,GAAG;AAAA,EACrC,mBAAmB,CAAC,GAAG;AAAA,EACvB,SAAS,CAAC,CAAC;AAAA,EACX,YAAY,CAAC,CAAC;AAAA,EACd,iBAAiB,CAAC,EAAE;AAAA,EACpB,gBAAgB,CAAC,GAAG;AAAA,EACpB,YAAY,CAAC,GAAG;AAAA,EAChB,WAAW,CAAC,GAAG;AACjB;AAEO,IAAM,gBAAmD;AAAA,EAC9D,OAAO;AAAA,EACP,OAAO;AAAA,EACP,cAAc,CAAC,IAAI,gBAAgB,kBAAkB,CAAC,CAAC;AACzD;AAEO,IAAM,qBAAwD;AAAA,EACnE,SAAS;AAAA,EACT,UAAU;AAAA,EACV,MAAM;AAAA,EACN,OAAO;AAAA,EACP,SAAS;AAAA,EACT,UAAU;AAAA,EACV,cAAc,CAAC,GAAG,CAAC;AACrB;AAEO,IAAM,cAAoD;AAAA;AAAA,EAC/D,EAAE,KAAK,aAAa,SAAS,CAAC,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,EAAE;AAAA;AAAA,EACzD,EAAE,KAAK,aAAa,SAAS,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,EAAE;AAAA;AAAA,EAC1D,EAAE,KAAK,aAAa,SAAS,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,EAAE;AAAA;AAAA,EAC1D,EAAE,KAAK,aAAa,SAAS,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE;AAAA;AAAA,EACzD,EAAE,KAAK,aAAa,SAAS,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,EAAE;AAAA;AAAA,EAClE,EAAE,KAAK,aAAa,SAAS,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,EAAE;AAAA;AAAA,EAClE,EAAE,KAAK,aAAa,SAAS,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,EAAE;AAAA;AAAA,EAClE,EAAE,KAAK,gBAAgB,SAAS,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,EAAE;AAAA;AAAA,EACjE,EAAE,KAAK,gBAAgB,SAAS,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,EAAE;AAAA;AAC3D;AAEO,IAAM,QAA4B;AAAA,EACvC,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,iBAAiB,iBAAiB;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,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,iBAAiB,iBAAiB;AAAA,EACnC,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,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,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,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,gBAAgB;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;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,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,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,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAG;AAwB1I,IAAM,Q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U,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,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,QAA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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;AA0JrB,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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", "names": ["r2", "r", "t", "r4", "r5", "r7", "r9", "r3", "dt", "ts", "config", "r", "match", "gl", "index", "y", "v", "size", "rgb", "fx", "process", "config", "_c", "tensor", "rgb", "t", "gl", "el", "affectnet-mobilenet", "anti-spoofing", "blazeface-back", "blazeface-front", "blazepose-detector", "blazepose-full", "blazepose-heavy", "blazepose-lite", "efficientpose-i-lite", "efficientpose-ii-lite", "efficientpose-iv", "facemesh-attention", "facemesh-attention-pinto", "facemesh-detection-full", "facemesh-detection-short", "faceres-deep", "gear-e1", "gear-e2", "gender-ssrnet-imdb", "handlandmark-full", "handlandmark-lite", "handlandmark-sparse", "insightface-efficientnet-b0", "insightface-ghostnet-strides1", "insightface-ghostnet-strides2", "insightface-mobilenet-emore", "insightface-mobilenet-swish", "movenet-lightning", "movenet-multipose", "movenet-thunder", "nanodet-e", "nanodet-g", "nanodet-m", "nanodet-t", "init", "config", "_c", "_d", "model", "config", "gl", "config", "op", "t", "mt", "canvas", "init", "options", "rgb", "localOptions", "y", "cx", "cy", "pt", "xc", "yc", "options", "connectionsToIndices", "index", "_c", "_d", "_f", "_g", "_h", "_i", "emotion", "index", "v", "pt", "inCanvas", "options", "inCanvas", "localOptions", "options", "pt", "connected", "inCanvas", "localOptions", "options", "pt", "inCanvas", "localOptions", "options", "inCanvas", "localOptions", "options", "inCanvas", "localOptions", "options", "canvas", "init", "anchors", "y", "config", "outputSize", "t", "outputSize", "pt", "model", "inputSize", "config", "size", "t", "outputSize", "kpt", "distance", "annotations", "pt", "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", "enhance", "id", "x", "kpt", "connected", "pt", "pt", "w", "size", "y", "y", "v1", "v2", "size", "inputSize", "anchors", "face", "y", "model", "inputSize", "load", "config", "decodeBoxes", "t", "r2", "_c", "_d", "_f", "_g", "model", "inputSize", "load", "config", "index", "face", "scale", "y", "_c", "_d", "_f", "_g", "_h", "_i", "_j", "t", "r", "cache", "model", "inputSize", "predict", "config", "_c", "_d", "_f", "_g", "_h", "_i", "_j", "id", "size", "face", "pt", "t", "index", "load", "model", "last", "lastTime", "skipped", "load", "config", "_c", "predict", "count", "_a", "_b", "t", "inputSize", "model", "last", "lastTime", "lastCount", "skipped", "load", "config", "predict", "count", "_c", "_d", "_a", "t", "gender", "all", "y", "face", "pt", "model", "skipped", "lastCount", "lastTime", "load", "config", "predict", "count", "model", "cached", "skipped", "lastCount", "lastTime", "load", "config", "predict", "count", "model", "last", "lastCount", "lastTime", "skipped", "load", "config", "predict", "count", "_a", "_b", "_c", "_d", "t", "gender", "age", "model", "last", "lastCount", "lastTime", "skipped", "load", "config", "predict", "count", "_c", "_d", "_a", "_b", "t", "model", "last", "lastCount", "lastTime", "skipped", "rgb", "load", "config", "predict", "count", "_c", "_d", "_a", "_b", "t", "normalize", "model", "last", "lastCount", "lastTime", "skipped", "load", "config", "predict", "count", "_a", "t", "model", "last", "lastCount", "lastTime", "skipped", "load", "config", "predict", "count", "_a", "t", "face", "normalize", "v", "y", "r", "r10", "r11", "r12", "r22", "size", "pt", "face", "_c", "_d", "_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", "_c", "_d", "hand", "getBoxSize", "getBoxCenter", "w", "scaleBoxCoordinates", "enlargeBox", "size", "squarifyBox", "normalizeRadians", "computeRotation", "buildTranslationMatrix", "y", "dot", "v1", "v2", "getColumnFrom2DArr", "multiplyTransformMatrices", "size", "buildRotationMatrix", "invertTransformMatrix", "rotatePoint", "anchors", "model", "_c", "_d", "anchors", "t", "r2", "index", "config", "hand", "scaleBoxCoordinates", "lastTime", "handPoseModel", "_c", "xs", "ys", "rotatePoint", "enlargeBox", "squarifyBox", "getBoxSize", "buildRotationMatrix", "invertTransformMatrix", "getBoxCenter", "dot", "config", "computeRotation", "meshAnnotations", "predict", "config", "annotations", "index", "pt", "loadDetect", "models", "inputSize", "skipped", "lastTime", "cache", "loadDetect", "config", "loadSkeleton", "config", "models", "t", "ratio", "id", "hand", "inputSize", "kpt", "index", "predict", "skipped", "lastTime", "cache", "connected", "kpt", "calc", "config", "_c", "_d", "_f", "_g", "_h", "_i", "_j", "_k", "_l", "_n", "_o", "_p", "_q", "_r", "_s", "_u", "_v", "_w", "_x", "_z", "t0", "_a", "_b", "_e", "annotations", "pt", "kp", "t1", "model", "load", "config", "predict", "t", "options", "clamp", "index", "models_exports", "cache", "body", "kp", "compare", "inputSize", "t", "outputSize", "kpt", "pt", "model", "inputSize", "skipped", "cache", "load", "config", "kpt", "id", "pt", "annotations", "connected", "kp", "body", "predict", "t", "model", "last", "lastTime", "skipped", "inputSize", "load", "config", "process", "id", "size", "labels", "cx", "cy", "y", "w", "predict", "outputSize", "y", "maxSize", "t", "outputStride", "y1", "y2", "x2", "dy", "dx", "model", "point", "height", "width", "minConfidence", "y", "predict", "config", "t", "load", "model", "outputNodes", "init", "config", "load", "r", "rgb", "predict", "model", "load", "config", "predict", "t", "model", "op", "_c", "_d", "_f", "_g", "_h", "_i", "_j", "_k", "_l", "_n", "_o", "_p", "_q", "_r", "_s", "_u", "_v", "_w", "_x", "_z", "_A", "load", "loadDetect", "loadSkeleton", "models", "join", "_c", "_d", "_f", "id", "face", "person", "body", "hand", "gesture", "y", "face", "body", "res", "face", "body", "canvas", "atob", "_c", "_d", "model", "t", "t0", "t1", "init", "process", "_c", "predict", "count", "model", "calc", "t0", "t1", "ms", "_d", "_f", "_g", "_h", "_i", "_j", "_k", "_l", "_n", "_o", "_p", "_q", "_r", "_s", "_u", "face", "body", "hand", "iris", "join"] } diff --git a/dist/human.js b/dist/human.js index 70130dc7..edc64c8f 100644 --- a/dist/human.js +++ b/dist/human.js @@ -4,57 +4,57 @@ author: ' */ -"use strict";var Human=(()=>{var jc=Object.defineProperty;var EC=Object.getOwnPropertyDescriptor;var MC=Object.getOwnPropertyNames;var $C=Object.prototype.hasOwnProperty;var PC=(e,t,a)=>t in e?jc(e,t,{enumerable:!0,configurable:!0,writable:!0,value:a}):e[t]=a;var yr=(e,t)=>{for(var a in t)jc(e,a,{get:t[a],enumerable:!0})},_C=(e,t,a,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of MC(t))!$C.call(e,r)&&r!==a&&jc(e,r,{get:()=>t[r],enumerable:!(n=EC(t,r))||n.enumerable});return e};var FC=e=>_C(jc({},"__esModule",{value:!0}),e);var he=(e,t,a)=>(PC(e,typeof t!="symbol"?t+"":t,a),a),Gx=(e,t,a)=>{if(!t.has(e))throw TypeError("Cannot "+a)};var qa=(e,t,a)=>(Gx(e,t,"read from private field"),a?a.call(e):t.get(e)),qn=(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)},xr=(e,t,a,n)=>(Gx(e,t,"write to private field"),n?n.call(e,a):t.set(e,a),a);var lye={};yr(lye,{Env:()=>nc,Human:()=>Mx,default:()=>Mx,defaults:()=>dl,draw:()=>C0,empty:()=>pr,env:()=>ne,match:()=>em,models:()=>Ex});var Ke={};yr(Ke,{Abs:()=>iu,Acos:()=>oi,Acosh:()=>li,AdadeltaOptimizer:()=>Zg,AdagradOptimizer:()=>Jg,AdamOptimizer:()=>Qg,AdamaxOptimizer:()=>e3,Add:()=>os,AddN:()=>ui,All:()=>di,Any:()=>pi,ArgMax:()=>ou,ArgMin:()=>lu,Asin:()=>ci,Asinh:()=>hi,Atan:()=>mi,Atan2:()=>gi,Atanh:()=>fi,AvgPool:()=>yi,AvgPool3D:()=>uu,AvgPool3DGrad:()=>dp,AvgPoolGrad:()=>up,BackendWasm:()=>kk,BatchMatMul:()=>xi,BatchToSpaceND:()=>du,Bincount:()=>Ai,BitwiseAnd:()=>pu,BroadcastArgs:()=>cu,BroadcastTo:()=>CT,Cast:()=>bi,Ceil:()=>vi,ClipByValue:()=>ls,Complex:()=>pp,ComplexAbs:()=>cp,Concat:()=>hu,Conv2D:()=>wi,Conv2DBackpropFilter:()=>hp,Conv2DBackpropInput:()=>ki,Conv3D:()=>Ii,Conv3DBackpropFilterV2:()=>mu,Conv3DBackpropInputV2:()=>Si,Cos:()=>Ci,Cosh:()=>Ti,CropAndResize:()=>Ei,Cumprod:()=>Ni,Cumsum:()=>Ri,DataStorage:()=>ip,DenseBincount:()=>fu,DepthToSpace:()=>Mi,DepthwiseConv2dNative:()=>$i,DepthwiseConv2dNativeBackpropFilter:()=>mp,DepthwiseConv2dNativeBackpropInput:()=>fp,Diag:()=>gu,Dilation2D:()=>Pi,Dilation2DBackpropFilter:()=>ql,Dilation2DBackpropInput:()=>jl,Draw:()=>gp,ENV:()=>eg,Einsum:()=>yp,Elu:()=>Fi,EluGrad:()=>yu,Environment:()=>CA,Equal:()=>Oi,Erf:()=>Di,Exp:()=>zi,ExpandDims:()=>xu,Expm1:()=>Li,FFT:()=>xp,Fill:()=>Au,FlipLeftRight:()=>Wi,Floor:()=>Bi,FloorDiv:()=>Vi,FromPixels:()=>Ld,FusedBatchNorm:()=>Ui,FusedConv2D:()=>Zr,FusedDepthwiseConv2D:()=>Jr,GPGPUContext:()=>Gl,GatherNd:()=>Gi,GatherV2:()=>bu,GraphModel:()=>Xp,Greater:()=>Hi,GreaterEqual:()=>ji,IFFT:()=>Ap,Identity:()=>qi,Imag:()=>bp,IsFinite:()=>Xi,IsInf:()=>Ki,IsNan:()=>Yi,KernelBackend:()=>ru,LRN:()=>io,LRNGrad:()=>vu,LeakyRelu:()=>Zi,Less:()=>Ji,LessEqual:()=>Qi,LinSpace:()=>eo,Log:()=>to,Log1p:()=>ao,LogSoftmax:()=>TT,LogicalAnd:()=>no,LogicalNot:()=>ro,LogicalOr:()=>so,LogicalXor:()=>NA,LowerBound:()=>NT,MathBackendCPU:()=>p3,MathBackendWebGL:()=>Jp,MatrixBandPart:()=>RT,Max:()=>oo,MaxPool:()=>uo,MaxPool3D:()=>wu,MaxPool3DGrad:()=>wp,MaxPoolGrad:()=>vp,MaxPoolWithArgmax:()=>ku,Maximum:()=>lo,Mean:()=>po,Min:()=>co,Minimum:()=>ho,MirrorPad:()=>mo,Mod:()=>fo,MomentumOptimizer:()=>t3,Multinomial:()=>go,Multiply:()=>yo,Neg:()=>Iu,NonMaxSuppressionV3:()=>Ao,NonMaxSuppressionV4:()=>Su,NonMaxSuppressionV5:()=>bo,NotEqual:()=>xo,OP_SCOPE_SUFFIX:()=>sg,OneHot:()=>vo,OnesLike:()=>Cu,Optimizer:()=>cs,OptimizerConstructors:()=>V7,Pack:()=>Tu,PadV2:()=>wo,Pool:()=>ET,Pow:()=>ko,Prelu:()=>Io,Prod:()=>So,RMSPropOptimizer:()=>a3,RaggedGather:()=>$h,RaggedRange:()=>Ph,RaggedTensorToTensor:()=>_h,Range:()=>Nu,Rank:()=>n1,Real:()=>kp,RealDiv:()=>_i,Reciprocal:()=>Co,Reduction:()=>wa,Relu:()=>To,Relu6:()=>Eo,Reshape:()=>Ru,ResizeBilinear:()=>Ro,ResizeBilinearGrad:()=>Mu,ResizeNearestNeighbor:()=>No,ResizeNearestNeighborGrad:()=>Eu,Reverse:()=>Mo,RotateWithOffset:()=>el,Round:()=>$o,Rsqrt:()=>Po,SGDOptimizer:()=>Qh,ScatterNd:()=>_o,SearchSorted:()=>Do,Select:()=>$u,Selu:()=>Oo,Sigmoid:()=>Bo,Sign:()=>Wo,Sin:()=>zo,Sinh:()=>Lo,Slice:()=>Pu,Softmax:()=>Ho,Softplus:()=>Vo,SpaceToBatchND:()=>_u,SparseFillEmptyRows:()=>Ip,SparseReshape:()=>Du,SparseSegmentMean:()=>Ou,SparseSegmentSum:()=>zu,SparseToDense:()=>jo,SplitV:()=>Fu,Sqrt:()=>Uo,Square:()=>Sp,SquaredDifference:()=>qo,StaticRegexReplace:()=>Cp,Step:()=>ds,StridedSlice:()=>Xo,StringNGrams:()=>Lu,StringSplit:()=>Tp,StringToHashBucketFast:()=>Np,Sub:()=>Ko,Sum:()=>Go,Tan:()=>Yo,Tanh:()=>Zo,Tensor:()=>yt,TensorBuffer:()=>Vt,TensorScatterUpdate:()=>Fo,Tile:()=>us,TopK:()=>Jo,Transform:()=>Qo,Transpose:()=>wr,Unique:()=>Rp,Unpack:()=>Wu,UnsortedSegmentSum:()=>Ep,UpperBound:()=>MT,Variable:()=>Ud,WebGPUBackend:()=>X3,ZerosLike:()=>Bu,_FusedMatMul:()=>Yr,abs:()=>Za,acos:()=>tb,acosh:()=>ab,add:()=>we,addN:()=>Dh,all:()=>nb,any:()=>rb,argMax:()=>rr,argMin:()=>sb,asin:()=>ib,asinh:()=>ob,atan:()=>lb,atan2:()=>ub,atanh:()=>db,avgPool:()=>hg,avgPool3d:()=>mb,backend:()=>Bn,backend_util:()=>C,basicLSTMCell:()=>fb,batchNorm:()=>Wp,batchNorm2d:()=>gb,batchNorm3d:()=>yb,batchNorm4d:()=>xb,batchToSpaceND:()=>mg,bincount:()=>fg,bitwiseAnd:()=>Ab,booleanMaskAsync:()=>n7,broadcastArgs:()=>bb,broadcastTo:()=>Ul,broadcast_util:()=>al,browser:()=>Er,buffer:()=>_e,cast:()=>Ue,ceil:()=>vb,clipByValue:()=>wb,clone:()=>Ia,complex:()=>Sr,concat:()=>lt,concat1d:()=>kb,concat2d:()=>Vu,concat3d:()=>Ib,concat4d:()=>Sb,conv1d:()=>Cb,conv2d:()=>Bp,conv2dTranspose:()=>Nb,conv3d:()=>Rb,conv3dTranspose:()=>Eb,copyRegisteredKernels:()=>DT,cos:()=>Mb,cosh:()=>$b,cosineWindow:()=>Xh,cumprod:()=>Pb,cumsum:()=>_b,customGrad:()=>tr,denseBincount:()=>Fb,deprecationWarn:()=>og,depthToSpace:()=>Db,depthwiseConv2d:()=>Oh,deregisterOp:()=>zD,device_util:()=>_p,diag:()=>Ob,dilation2d:()=>zb,disableDeprecationWarnings:()=>hN,dispose:()=>J,disposeVariables:()=>mN,div:()=>ve,divNoNan:()=>Wb,dot:()=>Bb,dropout:()=>l7,einsum:()=>Vs,elu:()=>xg,enableDebugMode:()=>cN,enableProdMode:()=>ig,enclosingPowerOfTwo:()=>Xg,engine:()=>It,ensureShape:()=>Vb,env:()=>B,equal:()=>yg,erf:()=>Ub,euclideanNorm:()=>jb,exp:()=>ns,expandDims:()=>Wt,expm1:()=>qb,eye:()=>bg,fft:()=>Gh,fill:()=>sr,findBackend:()=>lg,findBackendFactory:()=>AN,floor:()=>vg,floorDiv:()=>zp,forceHalfFloat:()=>y8,fused:()=>Kg,gather:()=>wg,gatherND:()=>o7,gather_util:()=>s3,getBackend:()=>Qt,getGradient:()=>t1,getKernel:()=>Bd,getKernelsForBackend:()=>Jn,getThreadsCount:()=>ule,gpgpu_util:()=>Xv,grad:()=>tM,grads:()=>aM,greater:()=>Gp,greaterEqual:()=>kg,ifft:()=>Zd,imag:()=>Hp,image:()=>fe,inTopKAsync:()=>u7,io:()=>Kn,irfft:()=>Vg,isFinite:()=>Xb,isInf:()=>Kb,isNaN:()=>Yb,keep:()=>zn,kernel_impls:()=>Rn,leakyRelu:()=>Ig,less:()=>mh,lessEqual:()=>zh,linalg:()=>y7,linspace:()=>Zb,loadGraphModel:()=>d3,loadGraphModelSync:()=>GO,localResponseNormalization:()=>Jb,log:()=>Yl,log1p:()=>Sg,logSigmoid:()=>e4,logSoftmax:()=>t4,logSumExp:()=>Tg,logicalAnd:()=>Xd,logicalNot:()=>Ng,logicalOr:()=>Rg,logicalXor:()=>a4,losses:()=>x7,lowerBound:()=>n4,matMul:()=>pt,math:()=>E7,max:()=>fa,maxPool:()=>Eg,maxPool3d:()=>r4,maxPoolWithArgmax:()=>s4,maximum:()=>Mg,mean:()=>Kd,memory:()=>fN,meshgrid:()=>i4,min:()=>as,minimum:()=>Yd,mirrorPad:()=>o4,mod:()=>Uu,moments:()=>l4,movingAverage:()=>r7,mul:()=>te,multiRNNCell:()=>u4,multinomial:()=>d4,neg:()=>Ln,nextFrame:()=>U7,node:()=>Q3,norm:()=>Up,notEqual:()=>$g,oneHot:()=>fh,ones:()=>Hr,onesLike:()=>p4,op:()=>z,outerProduct:()=>c4,pad:()=>ir,pad1d:()=>h4,pad2d:()=>m4,pad3d:()=>f4,pad4d:()=>g4,pool:()=>y4,pow:()=>Kl,prelu:()=>_g,print:()=>pg,prod:()=>x4,profile:()=>gN,raggedGather:()=>A4,raggedRange:()=>b4,raggedTensorToTensor:()=>v4,rand:()=>w4,randomGamma:()=>C4,randomNormal:()=>Lg,randomStandardNormal:()=>T4,randomUniform:()=>Bh,randomUniformInt:()=>N4,range:()=>Zl,ready:()=>Dp,real:()=>Jl,reciprocal:()=>R4,registerBackend:()=>tl,registerGradient:()=>PT,registerKernel:()=>xn,registerOp:()=>OD,relu:()=>jp,relu6:()=>Wg,removeBackend:()=>xN,reshape:()=>Q,reverse:()=>rs,reverse1d:()=>E4,reverse2d:()=>M4,reverse3d:()=>$4,reverse4d:()=>P4,rfft:()=>Hh,round:()=>Bg,rsqrt:()=>_4,scalar:()=>Ge,scatterND:()=>s7,scatter_util:()=>jh,searchSorted:()=>Wh,selu:()=>F4,separableConv2d:()=>D4,serialization:()=>v7,setBackend:()=>Fp,setPlatform:()=>bN,setThreadsCount:()=>lle,setWasmPath:()=>ole,setWasmPaths:()=>u0,setWebGLContext:()=>n0,setdiff1dAsync:()=>O4,shared:()=>t0,sigmoid:()=>za,sign:()=>z4,signal:()=>g7,sin:()=>L4,sinh:()=>W4,slice:()=>Fe,slice1d:()=>B4,slice2d:()=>V4,slice3d:()=>qp,slice4d:()=>Vh,slice_util:()=>Nt,softmax:()=>Uh,softplus:()=>Cg,spaceToBatchND:()=>Pg,sparse:()=>A7,sparseToDense:()=>i7,spectral:()=>f7,split:()=>Sa,sqrt:()=>er,square:()=>Tn,squaredDifference:()=>Ug,squeeze:()=>Oe,stack:()=>ca,step:()=>Gg,stridedSlice:()=>U4,string:()=>b7,sub:()=>xe,sum:()=>ot,sumOutType:()=>Pp,tan:()=>G4,tanh:()=>hh,tensor:()=>Ve,tensor1d:()=>Bt,tensor2d:()=>Zn,tensor3d:()=>Hg,tensor4d:()=>H4,tensor5d:()=>j4,tensor6d:()=>q4,tensorScatterUpdate:()=>K4,tensor_util:()=>_A,test_util:()=>k4,tidy:()=>De,tile:()=>Xr,time:()=>yN,topk:()=>Y4,train:()=>_F,transpose:()=>Qs,truncatedNormal:()=>Z4,unique:()=>J4,unregisterGradient:()=>FT,unregisterKernel:()=>_T,unsortedSegmentSum:()=>Q4,unstack:()=>Na,upcastType:()=>pa,upperBound:()=>e7,util:()=>v,valueAndGrad:()=>nM,valueAndGrads:()=>rM,variable:()=>t7,variableGrads:()=>Qb,version:()=>ac,version_converter:()=>jO,version_core:()=>i3,version_cpu:()=>iL,version_wasm:()=>dle,version_webgl:()=>Kj,webgl:()=>Yj,webgl_util:()=>xv,webgpu_util:()=>Ck,where:()=>kr,whereAsync:()=>qg,zeros:()=>yn,zerosLike:()=>Qa});var DC=Object.create,Z1=Object.defineProperty,OC=Object.getOwnPropertyDescriptor,zC=Object.getOwnPropertyNames,LC=Object.getPrototypeOf,WC=Object.prototype.hasOwnProperty,Xt=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Ze=(e,t)=>{for(var a in t)Z1(e,a,{get:t[a],enumerable:!0})},BC=(e,t,a,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of zC(t))!WC.call(e,r)&&r!==a&&Z1(e,r,{get:()=>t[r],enumerable:!(n=OC(t,r))||n.enumerable});return e},nu=(e,t,a)=>(a=e!=null?DC(LC(e)):{},BC(t||!e||!e.__esModule?Z1(a,"default",{value:e,enumerable:!0}):a,e)),VC=Xt((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(S){}function n(S,_,O){this.low=S|0,this.high=_|0,this.unsigned=!!O}n.prototype.__isLong__,Object.defineProperty(n.prototype,"__isLong__",{value:!0});function r(S){return(S&&S.__isLong__)===!0}n.isLong=r;var s={},i={};function o(S,_){var O,W,P;return _?(S>>>=0,(P=0<=S&&S<256)&&(W=i[S],W)?W:(O=u(S,(S|0)<0?-1:0,!0),P&&(i[S]=O),O)):(S|=0,(P=-128<=S&&S<128)&&(W=s[S],W)?W:(O=u(S,S<0?-1:0,!1),P&&(s[S]=O),O))}n.fromInt=o;function l(S,_){if(isNaN(S))return _?b:A;if(_){if(S<0)return b;if(S>=g)return M}else{if(S<=-y)return $;if(S+1>=y)return N}return S<0?l(-S,_).neg():u(S%f|0,S/f|0,_)}n.fromNumber=l;function u(S,_,O){return new n(S,_,O)}n.fromBits=u;var p=Math.pow;function c(S,_,O){if(S.length===0)throw Error("empty string");if(S==="NaN"||S==="Infinity"||S==="+Infinity"||S==="-Infinity")return A;if(typeof _=="number"?(O=_,_=!1):_=!!_,O=O||10,O<2||360)throw Error("interior hyphen");if(W===0)return c(S.substring(1),_,O).neg();for(var P=l(p(O,8)),U=A,G=0;G>>0:this.low},E.toNumber=function(){return this.unsigned?(this.high>>>0)*f+(this.low>>>0):this.high*f+(this.low>>>0)},E.toString=function(S){if(S=S||10,S<2||36>>0,V=H.toString(S);if(U=q,U.isZero())return V+G;for(;V.length<6;)V="0"+V;G=""+V+G}},E.getHighBits=function(){return this.high},E.getHighBitsUnsigned=function(){return this.high>>>0},E.getLowBits=function(){return this.low},E.getLowBitsUnsigned=function(){return this.low>>>0},E.getNumBitsAbs=function(){if(this.isNegative())return this.eq($)?64:this.neg().getNumBitsAbs();for(var S=this.high!=0?this.high:this.low,_=31;_>0&&!(S&1<<_);_--);return this.high!=0?_+33:_+1},E.isZero=function(){return this.high===0&&this.low===0},E.eqz=E.isZero,E.isNegative=function(){return!this.unsigned&&this.high<0},E.isPositive=function(){return this.unsigned||this.high>=0},E.isOdd=function(){return(this.low&1)===1},E.isEven=function(){return(this.low&1)===0},E.equals=function(S){return r(S)||(S=d(S)),this.unsigned!==S.unsigned&&this.high>>>31===1&&S.high>>>31===1?!1:this.high===S.high&&this.low===S.low},E.eq=E.equals,E.notEquals=function(S){return!this.eq(S)},E.neq=E.notEquals,E.ne=E.notEquals,E.lessThan=function(S){return this.comp(S)<0},E.lt=E.lessThan,E.lessThanOrEqual=function(S){return this.comp(S)<=0},E.lte=E.lessThanOrEqual,E.le=E.lessThanOrEqual,E.greaterThan=function(S){return this.comp(S)>0},E.gt=E.greaterThan,E.greaterThanOrEqual=function(S){return this.comp(S)>=0},E.gte=E.greaterThanOrEqual,E.ge=E.greaterThanOrEqual,E.compare=function(S){if(r(S)||(S=d(S)),this.eq(S))return 0;var _=this.isNegative(),O=S.isNegative();return _&&!O?-1:!_&&O?1:this.unsigned?S.high>>>0>this.high>>>0||S.high===this.high&&S.low>>>0>this.low>>>0?-1:1:this.sub(S).isNegative()?-1:1},E.comp=E.compare,E.negate=function(){return!this.unsigned&&this.eq($)?$:this.not().add(w)},E.neg=E.negate,E.add=function(S){r(S)||(S=d(S));var _=this.high>>>16,O=this.high&65535,W=this.low>>>16,P=this.low&65535,U=S.high>>>16,G=S.high&65535,q=S.low>>>16,H=S.low&65535,V=0,Z=0,X=0,re=0;return re+=P+H,X+=re>>>16,re&=65535,X+=W+q,Z+=X>>>16,X&=65535,Z+=O+G,V+=Z>>>16,Z&=65535,V+=_+U,V&=65535,u(X<<16|re,V<<16|Z,this.unsigned)},E.subtract=function(S){return r(S)||(S=d(S)),this.add(S.neg())},E.sub=E.subtract,E.multiply=function(S){if(this.isZero())return A;if(r(S)||(S=d(S)),a){var _=a.mul(this.low,this.high,S.low,S.high);return u(_,a.get_high(),this.unsigned)}if(S.isZero())return A;if(this.eq($))return S.isOdd()?$:A;if(S.eq($))return this.isOdd()?$:A;if(this.isNegative())return S.isNegative()?this.neg().mul(S.neg()):this.neg().mul(S).neg();if(S.isNegative())return this.mul(S.neg()).neg();if(this.lt(x)&&S.lt(x))return l(this.toNumber()*S.toNumber(),this.unsigned);var O=this.high>>>16,W=this.high&65535,P=this.low>>>16,U=this.low&65535,G=S.high>>>16,q=S.high&65535,H=S.low>>>16,V=S.low&65535,Z=0,X=0,re=0,ee=0;return ee+=U*V,re+=ee>>>16,ee&=65535,re+=P*V,X+=re>>>16,re&=65535,re+=U*H,X+=re>>>16,re&=65535,X+=W*V,Z+=X>>>16,X&=65535,X+=P*H,Z+=X>>>16,X&=65535,X+=U*q,Z+=X>>>16,X&=65535,Z+=O*V+W*H+P*q+U*G,Z&=65535,u(re<<16|ee,Z<<16|X,this.unsigned)},E.mul=E.multiply,E.divide=function(S){if(r(S)||(S=d(S)),S.isZero())throw Error("division by zero");if(a){if(!this.unsigned&&this.high===-2147483648&&S.low===-1&&S.high===-1)return this;var _=(this.unsigned?a.div_u:a.div_s)(this.low,this.high,S.low,S.high);return u(_,a.get_high(),this.unsigned)}if(this.isZero())return this.unsigned?b:A;var O,W,P;if(this.unsigned){if(S.unsigned||(S=S.toUnsigned()),S.gt(this))return b;if(S.gt(this.shru(1)))return I;P=b}else{if(this.eq($)){if(S.eq(w)||S.eq(T))return $;if(S.eq($))return w;var U=this.shr(1);return O=U.div(S).shl(1),O.eq(A)?S.isNegative()?w:T:(W=this.sub(S.mul(O)),P=O.add(W.div(S)),P)}else if(S.eq($))return this.unsigned?b:A;if(this.isNegative())return S.isNegative()?this.neg().div(S.neg()):this.neg().div(S).neg();if(S.isNegative())return this.div(S.neg()).neg();P=A}for(W=this;W.gte(S);){O=Math.max(1,Math.floor(W.toNumber()/S.toNumber()));for(var G=Math.ceil(Math.log(O)/Math.LN2),q=G<=48?1:p(2,G-48),H=l(O),V=H.mul(S);V.isNegative()||V.gt(W);)O-=q,H=l(O,this.unsigned),V=H.mul(S);H.isZero()&&(H=w),P=P.add(H),W=W.sub(V)}return P},E.div=E.divide,E.modulo=function(S){if(r(S)||(S=d(S)),a){var _=(this.unsigned?a.rem_u:a.rem_s)(this.low,this.high,S.low,S.high);return u(_,a.get_high(),this.unsigned)}return this.sub(this.div(S).mul(S))},E.mod=E.modulo,E.rem=E.modulo,E.not=function(){return u(~this.low,~this.high,this.unsigned)},E.and=function(S){return r(S)||(S=d(S)),u(this.low&S.low,this.high&S.high,this.unsigned)},E.or=function(S){return r(S)||(S=d(S)),u(this.low|S.low,this.high|S.high,this.unsigned)},E.xor=function(S){return r(S)||(S=d(S)),u(this.low^S.low,this.high^S.high,this.unsigned)},E.shiftLeft=function(S){return r(S)&&(S=S.toInt()),(S&=63)===0?this:S<32?u(this.low<>>32-S,this.unsigned):u(0,this.low<>>S|this.high<<32-S,this.high>>S,this.unsigned):u(this.high>>S-32,this.high>=0?0:-1,this.unsigned)},E.shr=E.shiftRight,E.shiftRightUnsigned=function(S){if(r(S)&&(S=S.toInt()),S&=63,S===0)return this;var _=this.high;if(S<32){var O=this.low;return u(O>>>S|_<<32-S,_>>>S,this.unsigned)}else return S===32?u(_,0,this.unsigned):u(_>>>S-32,0,this.unsigned)},E.shru=E.shiftRightUnsigned,E.shr_u=E.shiftRightUnsigned,E.toSigned=function(){return this.unsigned?u(this.low,this.high,!1):this},E.toUnsigned=function(){return this.unsigned?this:u(this.low,this.high,!0)},E.toBytes=function(S){return S?this.toBytesLE():this.toBytesBE()},E.toBytesLE=function(){var S=this.high,_=this.low;return[_&255,_>>>8&255,_>>>16&255,_>>>24,S&255,S>>>8&255,S>>>16&255,S>>>24]},E.toBytesBE=function(){var S=this.high,_=this.low;return[S>>>24,S>>>16&255,S>>>8&255,S&255,_>>>24,_>>>16&255,_>>>8&255,_&255]},n.fromBytes=function(S,_,O){return O?n.fromBytesLE(S,_):n.fromBytesBE(S,_)},n.fromBytesLE=function(S,_){return new n(S[0]|S[1]<<8|S[2]<<16|S[3]<<24,S[4]|S[5]<<8|S[6]<<16|S[7]<<24,_)},n.fromBytesBE=function(S,_){return new n(S[4]<<24|S[5]<<16|S[6]<<8|S[7],S[0]<<24|S[1]<<16|S[2]<<8|S[3],_)}}),UC=Xt(()=>{}),GC=Xt(()=>{}),HC=Xt((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)}),jC=Xt((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,m=(p.next()>>>0)/4294967296,f=(h+m)/(1<<21);while(f===0);return f},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)}),qC=Xt((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,m=(p.next()>>>0)/4294967296,f=(h+m)/(1<<21);while(f===0);return f},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)}),XC=Xt((e,t)=>{(function(a,n,r){function s(l){var u=this;u.next=function(){var c=u.x,d=u.i,h,m,f;return h=c[d],h^=h>>>7,m=h^h<<24,h=c[d+1&7],m^=h^h>>>10,h=c[d+3&7],m^=h^h>>>3,h=c[d+4&7],m^=h^h<<7,h=c[d+7&7],h=h^h<<13,m^=h^h<<9,c[d]=m,u.i=d+1&7,m};function p(c,d){var h,m,f=[];if(d===(d|0))m=f[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,m=(p.next()>>>0)/4294967296,f=(h+m)/(1<<21);while(f===0);return f},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)}),KC=Xt((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,m,f;return u.w=c=c+1640531527|0,f=d[h+34&127],m=d[h=h+1&127],f^=f<<13,m^=m<<17,f^=f>>>15,m^=m>>>12,f=d[h]=f^m,u.i=h,f+(c^c>>>16)|0};function p(c,d){var h,m,f,g,y,x=[],A=128;for(d===(d|0)?(m=d,d=null):(d=d+"\0",m=0,A=Math.max(A,d.length)),f=0,g=-32;g>>15,m^=m<<4,m^=m>>>13,g>=0&&(y=y+1640531527|0,h=x[g&127]^=m+y,f=h==0?f+1:0);for(f>=128&&(x[(d&&d.length||0)&127]=-1),f=127,g=4*128;g>0;--g)m=x[f+34&127],h=x[f=f+1&127],m^=m<<13,h^=h<<17,m^=m>>>15,h^=h>>>12,x[f]=m^h;c.w=y,c.X=x,c.i=f}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,m=(p.next()>>>0)/4294967296,f=(h+m)/(1<<21);while(f===0);return f},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)}),YC=Xt((e,t)=>{(function(a,n,r){function s(l){var u=this,p="";u.next=function(){var d=u.b,h=u.c,m=u.d,f=u.a;return d=d<<25^d>>>7^h,h=h-m|0,m=m<<24^m>>>8^f,f=f-d|0,u.b=d=d<<20^d>>>12^h,u.c=h=h-m|0,u.d=m<<16^h>>>16^f,u.a=f-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,m=(p.next()>>>0)/4294967296,f=(h+m)/(1<<21);while(f===0);return f},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)}),ZC=Xt(()=>{}),JC=Xt((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 m(w,I,T){var N=[];I=I==!0?{entropy:!0}:I||{};var M=x(y(I.entropy?[w,b(n)]:w==null?A():w,3),N),$=new f(N),E=function(){for(var S=$.g(i),_=u,O=0;S=c;)S/=2,_/=2,O>>>=1;return(S+O)/_};return E.int32=function(){return $.g(4)|0},E.quick=function(){return $.g(4)/4294967296},E.double=E,x(b($.S),n),(I.pass||T||function(S,_,O,W){return W&&(W.S&&g(W,$),S.state=function(){return g($,{})}),O?(r[l]=S,_):S})(E,M,"global"in I?I.global:this==r,I.state)}function f(w){var I,T=w.length,N=this,M=0,$=N.i=N.j=0,E=N.S=[];for(T||(w=[T++]);M{var a=HC(),n=jC(),r=qC(),s=XC(),i=KC(),o=YC(),l=JC();l.alea=a,l.xor128=n,l.xorwow=r,l.xorshift7=s,l.xor4096=i,l.tychei=o,t.exports=l}),mA=Xt(()=>{}),fA=Xt(()=>{}),QC=Xt(()=>{}),eT=Xt(()=>{}),tT=Xt(()=>{}),aT=Xt((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 ie.buffer!=He&&ht(ie.buffer),xt}function i(){return ie.buffer!=He&&ht(ie.buffer),Ha}function o(){return ie.buffer!=He&&ht(ie.buffer),zt}function l(){return ie.buffer!=He&&ht(ie.buffer),la}function u(){return ie.buffer!=He&&ht(ie.buffer),_a}function p(){return ie.buffer!=He&&ht(ie.buffer),dn}function c(){return ie.buffer!=He&&ht(ie.buffer),Fa}var d=typeof r!="undefined"?r:{},h,m;d.ready=new Promise(function(D,j){h=D,m=j});var f;typeof process!="undefined"&&process.listeners&&(f={uncaughtException:process.listeners("uncaughtException"),unhandledRejection:process.listeners("unhandledRejection")});var g=Object.assign({},d),y=[],x="./this.program",A=(D,j)=>{throw j},b=typeof window=="object",w=typeof importScripts=="function",I=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string",T=d.ENVIRONMENT_IS_PTHREAD||!1,N="";function M(D){return d.locateFile?d.locateFile(D,N):N+D}var $,E,S,_;function O(D){D instanceof Fs||H("exiting due to exception: "+D)}if(I){var W=mA(),P=fA();w?N=P.dirname(N)+"/":N=__dirname+"/",$=(j,oe)=>(j=Nl(j)?new URL(j):P.normalize(j),W.readFileSync(j,oe?void 0:"utf8")),S=j=>{var oe=$(j,!0);return oe.buffer||(oe=new Uint8Array(oe)),oe},E=(j,oe,Me)=>{j=Nl(j)?new URL(j):P.normalize(j),W.readFile(j,function(je,Be){je?Me(je):oe(Be.buffer)})},process.argv.length>1&&(x=process.argv[1].replace(/\\/g,"/")),y=process.argv.slice(2),process.on("uncaughtException",function(j){if(!(j instanceof Fs))throw j}),process.on("unhandledRejection",function(j){throw j}),A=(j,oe)=>{if(In())throw process.exitCode=j,oe;O(oe),process.exit(j)},d.inspect=function(){return"[Emscripten Module object]"};let D;try{D=QC()}catch(j){throw console.error('The "worker_threads" module is not supported in this node.js build - perhaps a newer version is needed?'),j}global.Worker=D.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="",I||($=D=>{var j=new XMLHttpRequest;return j.open("GET",D,!1),j.send(null),j.responseText},w&&(S=D=>{var j=new XMLHttpRequest;return j.open("GET",D,!1),j.responseType="arraybuffer",j.send(null),new Uint8Array(j.response)}),E=(D,j,oe)=>{var Me=new XMLHttpRequest;Me.open("GET",D,!0),Me.responseType="arraybuffer",Me.onload=()=>{if(Me.status==200||Me.status==0&&Me.response){j(Me.response);return}oe()},Me.onerror=oe,Me.send(null)}),_=D=>document.title=D);I&&typeof performance=="undefined"&&(global.performance=eT().performance);var U=console.log.bind(console),G=console.warn.bind(console);I&&(U=D=>W.writeSync(1,D+` +"use strict";var Human=(()=>{var jc=Object.defineProperty;var MC=Object.getOwnPropertyDescriptor;var $C=Object.getOwnPropertyNames;var PC=Object.prototype.hasOwnProperty;var Gx=e=>{throw TypeError(e)};var _C=(e,t,a)=>t in e?jc(e,t,{enumerable:!0,configurable:!0,writable:!0,value:a}):e[t]=a;var yr=(e,t)=>{for(var a in t)jc(e,a,{get:t[a],enumerable:!0})},FC=(e,t,a,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of $C(t))!PC.call(e,r)&&r!==a&&jc(e,r,{get:()=>t[r],enumerable:!(n=MC(t,r))||n.enumerable});return e};var DC=e=>FC(jc({},"__esModule",{value:!0}),e);var he=(e,t,a)=>_C(e,typeof t!="symbol"?t+"":t,a),Hx=(e,t,a)=>t.has(e)||Gx("Cannot "+a);var qa=(e,t,a)=>(Hx(e,t,"read from private field"),a?a.call(e):t.get(e)),qn=(e,t,a)=>t.has(e)?Gx("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,a),xr=(e,t,a,n)=>(Hx(e,t,"write to private field"),n?n.call(e,a):t.set(e,a),a);var uye={};yr(uye,{Env:()=>nc,Human:()=>Mx,default:()=>Mx,defaults:()=>dl,draw:()=>C0,empty:()=>pr,env:()=>ne,match:()=>em,models:()=>Ex});var Ke={};yr(Ke,{Abs:()=>iu,Acos:()=>oi,Acosh:()=>li,AdadeltaOptimizer:()=>Zg,AdagradOptimizer:()=>Jg,AdamOptimizer:()=>Qg,AdamaxOptimizer:()=>e3,Add:()=>os,AddN:()=>ui,All:()=>di,Any:()=>pi,ArgMax:()=>ou,ArgMin:()=>lu,Asin:()=>ci,Asinh:()=>hi,Atan:()=>mi,Atan2:()=>gi,Atanh:()=>fi,AvgPool:()=>yi,AvgPool3D:()=>uu,AvgPool3DGrad:()=>dp,AvgPoolGrad:()=>up,BackendWasm:()=>Ik,BatchMatMul:()=>xi,BatchToSpaceND:()=>du,Bincount:()=>Ai,BitwiseAnd:()=>pu,BroadcastArgs:()=>cu,BroadcastTo:()=>TT,Cast:()=>bi,Ceil:()=>vi,ClipByValue:()=>ls,Complex:()=>pp,ComplexAbs:()=>cp,Concat:()=>hu,Conv2D:()=>wi,Conv2DBackpropFilter:()=>hp,Conv2DBackpropInput:()=>ki,Conv3D:()=>Ii,Conv3DBackpropFilterV2:()=>mu,Conv3DBackpropInputV2:()=>Si,Cos:()=>Ci,Cosh:()=>Ti,CropAndResize:()=>Ei,Cumprod:()=>Ni,Cumsum:()=>Ri,DataStorage:()=>ip,DenseBincount:()=>fu,DepthToSpace:()=>Mi,DepthwiseConv2dNative:()=>$i,DepthwiseConv2dNativeBackpropFilter:()=>mp,DepthwiseConv2dNativeBackpropInput:()=>fp,Diag:()=>gu,Dilation2D:()=>Pi,Dilation2DBackpropFilter:()=>ql,Dilation2DBackpropInput:()=>jl,Draw:()=>gp,ENV:()=>eg,Einsum:()=>yp,Elu:()=>Fi,EluGrad:()=>yu,Environment:()=>TA,Equal:()=>Oi,Erf:()=>Di,Exp:()=>zi,ExpandDims:()=>xu,Expm1:()=>Li,FFT:()=>xp,Fill:()=>Au,FlipLeftRight:()=>Wi,Floor:()=>Bi,FloorDiv:()=>Vi,FromPixels:()=>Ld,FusedBatchNorm:()=>Ui,FusedConv2D:()=>Zr,FusedDepthwiseConv2D:()=>Jr,GPGPUContext:()=>Gl,GatherNd:()=>Gi,GatherV2:()=>bu,GraphModel:()=>Xp,Greater:()=>Hi,GreaterEqual:()=>ji,IFFT:()=>Ap,Identity:()=>qi,Imag:()=>bp,IsFinite:()=>Xi,IsInf:()=>Ki,IsNan:()=>Yi,KernelBackend:()=>ru,LRN:()=>io,LRNGrad:()=>vu,LeakyRelu:()=>Zi,Less:()=>Ji,LessEqual:()=>Qi,LinSpace:()=>eo,Log:()=>to,Log1p:()=>ao,LogSoftmax:()=>NT,LogicalAnd:()=>no,LogicalNot:()=>ro,LogicalOr:()=>so,LogicalXor:()=>RA,LowerBound:()=>RT,MathBackendCPU:()=>p3,MathBackendWebGL:()=>Jp,MatrixBandPart:()=>ET,Max:()=>oo,MaxPool:()=>uo,MaxPool3D:()=>wu,MaxPool3DGrad:()=>wp,MaxPoolGrad:()=>vp,MaxPoolWithArgmax:()=>ku,Maximum:()=>lo,Mean:()=>po,Min:()=>co,Minimum:()=>ho,MirrorPad:()=>mo,Mod:()=>fo,MomentumOptimizer:()=>t3,Multinomial:()=>go,Multiply:()=>yo,Neg:()=>Iu,NonMaxSuppressionV3:()=>Ao,NonMaxSuppressionV4:()=>Su,NonMaxSuppressionV5:()=>bo,NotEqual:()=>xo,OP_SCOPE_SUFFIX:()=>sg,OneHot:()=>vo,OnesLike:()=>Cu,Optimizer:()=>cs,OptimizerConstructors:()=>U7,Pack:()=>Tu,PadV2:()=>wo,Pool:()=>MT,Pow:()=>ko,Prelu:()=>Io,Prod:()=>So,RMSPropOptimizer:()=>a3,RaggedGather:()=>$h,RaggedRange:()=>Ph,RaggedTensorToTensor:()=>_h,Range:()=>Nu,Rank:()=>n1,Real:()=>kp,RealDiv:()=>_i,Reciprocal:()=>Co,Reduction:()=>wa,Relu:()=>To,Relu6:()=>Eo,Reshape:()=>Ru,ResizeBilinear:()=>Ro,ResizeBilinearGrad:()=>Mu,ResizeNearestNeighbor:()=>No,ResizeNearestNeighborGrad:()=>Eu,Reverse:()=>Mo,RotateWithOffset:()=>el,Round:()=>$o,Rsqrt:()=>Po,SGDOptimizer:()=>Qh,ScatterNd:()=>_o,SearchSorted:()=>Do,Select:()=>$u,Selu:()=>Oo,Sigmoid:()=>Bo,Sign:()=>Wo,Sin:()=>zo,Sinh:()=>Lo,Slice:()=>Pu,Softmax:()=>Ho,Softplus:()=>Vo,SpaceToBatchND:()=>_u,SparseFillEmptyRows:()=>Ip,SparseReshape:()=>Du,SparseSegmentMean:()=>Ou,SparseSegmentSum:()=>zu,SparseToDense:()=>jo,SplitV:()=>Fu,Sqrt:()=>Uo,Square:()=>Sp,SquaredDifference:()=>qo,StaticRegexReplace:()=>Cp,Step:()=>ds,StridedSlice:()=>Xo,StringNGrams:()=>Lu,StringSplit:()=>Tp,StringToHashBucketFast:()=>Np,Sub:()=>Ko,Sum:()=>Go,Tan:()=>Yo,Tanh:()=>Zo,Tensor:()=>yt,TensorBuffer:()=>Vt,TensorScatterUpdate:()=>Fo,Tile:()=>us,TopK:()=>Jo,Transform:()=>Qo,Transpose:()=>wr,Unique:()=>Rp,Unpack:()=>Wu,UnsortedSegmentSum:()=>Ep,UpperBound:()=>$T,Variable:()=>Ud,WebGPUBackend:()=>X3,ZerosLike:()=>Bu,_FusedMatMul:()=>Yr,abs:()=>Za,acos:()=>ab,acosh:()=>nb,add:()=>we,addN:()=>Dh,all:()=>rb,any:()=>sb,argMax:()=>rr,argMin:()=>ib,asin:()=>ob,asinh:()=>lb,atan:()=>ub,atan2:()=>db,atanh:()=>pb,avgPool:()=>hg,avgPool3d:()=>fb,backend:()=>Bn,backend_util:()=>C,basicLSTMCell:()=>gb,batchNorm:()=>Wp,batchNorm2d:()=>yb,batchNorm3d:()=>xb,batchNorm4d:()=>Ab,batchToSpaceND:()=>mg,bincount:()=>fg,bitwiseAnd:()=>bb,booleanMaskAsync:()=>r7,broadcastArgs:()=>vb,broadcastTo:()=>Ul,broadcast_util:()=>al,browser:()=>Er,buffer:()=>_e,cast:()=>Ue,ceil:()=>wb,clipByValue:()=>kb,clone:()=>Ia,complex:()=>Sr,concat:()=>lt,concat1d:()=>Ib,concat2d:()=>Vu,concat3d:()=>Sb,concat4d:()=>Cb,conv1d:()=>Tb,conv2d:()=>Bp,conv2dTranspose:()=>Rb,conv3d:()=>Eb,conv3dTranspose:()=>Mb,copyRegisteredKernels:()=>OT,cos:()=>$b,cosh:()=>Pb,cosineWindow:()=>Xh,cumprod:()=>_b,cumsum:()=>Fb,customGrad:()=>tr,denseBincount:()=>Db,deprecationWarn:()=>og,depthToSpace:()=>Ob,depthwiseConv2d:()=>Oh,deregisterOp:()=>LD,device_util:()=>_p,diag:()=>zb,dilation2d:()=>Lb,disableDeprecationWarnings:()=>mN,dispose:()=>J,disposeVariables:()=>fN,div:()=>ve,divNoNan:()=>Bb,dot:()=>Vb,dropout:()=>u7,einsum:()=>Vs,elu:()=>xg,enableDebugMode:()=>hN,enableProdMode:()=>ig,enclosingPowerOfTwo:()=>Xg,engine:()=>It,ensureShape:()=>Ub,env:()=>B,equal:()=>yg,erf:()=>Gb,euclideanNorm:()=>qb,exp:()=>ns,expandDims:()=>Wt,expm1:()=>Xb,eye:()=>bg,fft:()=>Gh,fill:()=>sr,findBackend:()=>lg,findBackendFactory:()=>bN,floor:()=>vg,floorDiv:()=>zp,forceHalfFloat:()=>x8,fused:()=>Kg,gather:()=>wg,gatherND:()=>l7,gather_util:()=>s3,getBackend:()=>Qt,getGradient:()=>t1,getKernel:()=>Bd,getKernelsForBackend:()=>Jn,getThreadsCount:()=>dle,gpgpu_util:()=>Kv,grad:()=>aM,grads:()=>nM,greater:()=>Gp,greaterEqual:()=>kg,ifft:()=>Zd,imag:()=>Hp,image:()=>fe,inTopKAsync:()=>d7,io:()=>Kn,irfft:()=>Vg,isFinite:()=>Kb,isInf:()=>Yb,isNaN:()=>Zb,keep:()=>zn,kernel_impls:()=>Rn,leakyRelu:()=>Ig,less:()=>mh,lessEqual:()=>zh,linalg:()=>x7,linspace:()=>Jb,loadGraphModel:()=>d3,loadGraphModelSync:()=>HO,localResponseNormalization:()=>Qb,log:()=>Yl,log1p:()=>Sg,logSigmoid:()=>t4,logSoftmax:()=>a4,logSumExp:()=>Tg,logicalAnd:()=>Xd,logicalNot:()=>Ng,logicalOr:()=>Rg,logicalXor:()=>n4,losses:()=>A7,lowerBound:()=>r4,matMul:()=>pt,math:()=>M7,max:()=>fa,maxPool:()=>Eg,maxPool3d:()=>s4,maxPoolWithArgmax:()=>i4,maximum:()=>Mg,mean:()=>Kd,memory:()=>gN,meshgrid:()=>o4,min:()=>as,minimum:()=>Yd,mirrorPad:()=>l4,mod:()=>Uu,moments:()=>u4,movingAverage:()=>s7,mul:()=>te,multiRNNCell:()=>d4,multinomial:()=>p4,neg:()=>Ln,nextFrame:()=>G7,node:()=>Q3,norm:()=>Up,notEqual:()=>$g,oneHot:()=>fh,ones:()=>Hr,onesLike:()=>c4,op:()=>z,outerProduct:()=>h4,pad:()=>ir,pad1d:()=>m4,pad2d:()=>f4,pad3d:()=>g4,pad4d:()=>y4,pool:()=>x4,pow:()=>Kl,prelu:()=>_g,print:()=>pg,prod:()=>A4,profile:()=>yN,raggedGather:()=>b4,raggedRange:()=>v4,raggedTensorToTensor:()=>w4,rand:()=>k4,randomGamma:()=>T4,randomNormal:()=>Lg,randomStandardNormal:()=>N4,randomUniform:()=>Bh,randomUniformInt:()=>R4,range:()=>Zl,ready:()=>Dp,real:()=>Jl,reciprocal:()=>E4,registerBackend:()=>tl,registerGradient:()=>_T,registerKernel:()=>xn,registerOp:()=>zD,relu:()=>jp,relu6:()=>Wg,removeBackend:()=>AN,reshape:()=>Q,reverse:()=>rs,reverse1d:()=>M4,reverse2d:()=>$4,reverse3d:()=>P4,reverse4d:()=>_4,rfft:()=>Hh,round:()=>Bg,rsqrt:()=>F4,scalar:()=>Ge,scatterND:()=>i7,scatter_util:()=>jh,searchSorted:()=>Wh,selu:()=>D4,separableConv2d:()=>O4,serialization:()=>w7,setBackend:()=>Fp,setPlatform:()=>vN,setThreadsCount:()=>ule,setWasmPath:()=>lle,setWasmPaths:()=>u0,setWebGLContext:()=>n0,setdiff1dAsync:()=>z4,shared:()=>t0,sigmoid:()=>za,sign:()=>L4,signal:()=>y7,sin:()=>W4,sinh:()=>B4,slice:()=>Fe,slice1d:()=>V4,slice2d:()=>U4,slice3d:()=>qp,slice4d:()=>Vh,slice_util:()=>Nt,softmax:()=>Uh,softplus:()=>Cg,spaceToBatchND:()=>Pg,sparse:()=>b7,sparseToDense:()=>o7,spectral:()=>g7,split:()=>Sa,sqrt:()=>er,square:()=>Tn,squaredDifference:()=>Ug,squeeze:()=>Oe,stack:()=>ca,step:()=>Gg,stridedSlice:()=>G4,string:()=>v7,sub:()=>xe,sum:()=>ot,sumOutType:()=>Pp,tan:()=>H4,tanh:()=>hh,tensor:()=>Ve,tensor1d:()=>Bt,tensor2d:()=>Zn,tensor3d:()=>Hg,tensor4d:()=>j4,tensor5d:()=>q4,tensor6d:()=>X4,tensorScatterUpdate:()=>Y4,tensor_util:()=>FA,test_util:()=>I4,tidy:()=>De,tile:()=>Xr,time:()=>xN,topk:()=>Z4,train:()=>FF,transpose:()=>Qs,truncatedNormal:()=>J4,unique:()=>Q4,unregisterGradient:()=>DT,unregisterKernel:()=>FT,unsortedSegmentSum:()=>e7,unstack:()=>Na,upcastType:()=>pa,upperBound:()=>t7,util:()=>v,valueAndGrad:()=>rM,valueAndGrads:()=>sM,variable:()=>a7,variableGrads:()=>e4,version:()=>ac,version_converter:()=>qO,version_core:()=>i3,version_cpu:()=>oL,version_wasm:()=>ple,version_webgl:()=>Yj,webgl:()=>Zj,webgl_util:()=>Av,webgpu_util:()=>Tk,where:()=>kr,whereAsync:()=>qg,zeros:()=>yn,zerosLike:()=>Qa});var OC=Object.create,Z1=Object.defineProperty,zC=Object.getOwnPropertyDescriptor,LC=Object.getOwnPropertyNames,WC=Object.getPrototypeOf,BC=Object.prototype.hasOwnProperty,Xt=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Ze=(e,t)=>{for(var a in t)Z1(e,a,{get:t[a],enumerable:!0})},VC=(e,t,a,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of LC(t))!BC.call(e,r)&&r!==a&&Z1(e,r,{get:()=>t[r],enumerable:!(n=zC(t,r))||n.enumerable});return e},nu=(e,t,a)=>(a=e!=null?OC(WC(e)):{},VC(t||!e||!e.__esModule?Z1(a,"default",{value:e,enumerable:!0}):a,e)),UC=Xt((e,t)=>{"use strict";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(S){}function n(S,_,O){this.low=S|0,this.high=_|0,this.unsigned=!!O}n.prototype.__isLong__,Object.defineProperty(n.prototype,"__isLong__",{value:!0});function r(S){return(S&&S.__isLong__)===!0}n.isLong=r;var s={},i={};function o(S,_){var O,W,P;return _?(S>>>=0,(P=0<=S&&S<256)&&(W=i[S],W)?W:(O=u(S,(S|0)<0?-1:0,!0),P&&(i[S]=O),O)):(S|=0,(P=-128<=S&&S<128)&&(W=s[S],W)?W:(O=u(S,S<0?-1:0,!1),P&&(s[S]=O),O))}n.fromInt=o;function l(S,_){if(isNaN(S))return _?b:A;if(_){if(S<0)return b;if(S>=g)return M}else{if(S<=-y)return $;if(S+1>=y)return N}return S<0?l(-S,_).neg():u(S%f|0,S/f|0,_)}n.fromNumber=l;function u(S,_,O){return new n(S,_,O)}n.fromBits=u;var p=Math.pow;function c(S,_,O){if(S.length===0)throw Error("empty string");if(S==="NaN"||S==="Infinity"||S==="+Infinity"||S==="-Infinity")return A;if(typeof _=="number"?(O=_,_=!1):_=!!_,O=O||10,O<2||360)throw Error("interior hyphen");if(W===0)return c(S.substring(1),_,O).neg();for(var P=l(p(O,8)),U=A,G=0;G>>0:this.low},E.toNumber=function(){return this.unsigned?(this.high>>>0)*f+(this.low>>>0):this.high*f+(this.low>>>0)},E.toString=function(S){if(S=S||10,S<2||36>>0,V=H.toString(S);if(U=q,U.isZero())return V+G;for(;V.length<6;)V="0"+V;G=""+V+G}},E.getHighBits=function(){return this.high},E.getHighBitsUnsigned=function(){return this.high>>>0},E.getLowBits=function(){return this.low},E.getLowBitsUnsigned=function(){return this.low>>>0},E.getNumBitsAbs=function(){if(this.isNegative())return this.eq($)?64:this.neg().getNumBitsAbs();for(var S=this.high!=0?this.high:this.low,_=31;_>0&&!(S&1<<_);_--);return this.high!=0?_+33:_+1},E.isZero=function(){return this.high===0&&this.low===0},E.eqz=E.isZero,E.isNegative=function(){return!this.unsigned&&this.high<0},E.isPositive=function(){return this.unsigned||this.high>=0},E.isOdd=function(){return(this.low&1)===1},E.isEven=function(){return(this.low&1)===0},E.equals=function(S){return r(S)||(S=d(S)),this.unsigned!==S.unsigned&&this.high>>>31===1&&S.high>>>31===1?!1:this.high===S.high&&this.low===S.low},E.eq=E.equals,E.notEquals=function(S){return!this.eq(S)},E.neq=E.notEquals,E.ne=E.notEquals,E.lessThan=function(S){return this.comp(S)<0},E.lt=E.lessThan,E.lessThanOrEqual=function(S){return this.comp(S)<=0},E.lte=E.lessThanOrEqual,E.le=E.lessThanOrEqual,E.greaterThan=function(S){return this.comp(S)>0},E.gt=E.greaterThan,E.greaterThanOrEqual=function(S){return this.comp(S)>=0},E.gte=E.greaterThanOrEqual,E.ge=E.greaterThanOrEqual,E.compare=function(S){if(r(S)||(S=d(S)),this.eq(S))return 0;var _=this.isNegative(),O=S.isNegative();return _&&!O?-1:!_&&O?1:this.unsigned?S.high>>>0>this.high>>>0||S.high===this.high&&S.low>>>0>this.low>>>0?-1:1:this.sub(S).isNegative()?-1:1},E.comp=E.compare,E.negate=function(){return!this.unsigned&&this.eq($)?$:this.not().add(w)},E.neg=E.negate,E.add=function(S){r(S)||(S=d(S));var _=this.high>>>16,O=this.high&65535,W=this.low>>>16,P=this.low&65535,U=S.high>>>16,G=S.high&65535,q=S.low>>>16,H=S.low&65535,V=0,Z=0,X=0,re=0;return re+=P+H,X+=re>>>16,re&=65535,X+=W+q,Z+=X>>>16,X&=65535,Z+=O+G,V+=Z>>>16,Z&=65535,V+=_+U,V&=65535,u(X<<16|re,V<<16|Z,this.unsigned)},E.subtract=function(S){return r(S)||(S=d(S)),this.add(S.neg())},E.sub=E.subtract,E.multiply=function(S){if(this.isZero())return A;if(r(S)||(S=d(S)),a){var _=a.mul(this.low,this.high,S.low,S.high);return u(_,a.get_high(),this.unsigned)}if(S.isZero())return A;if(this.eq($))return S.isOdd()?$:A;if(S.eq($))return this.isOdd()?$:A;if(this.isNegative())return S.isNegative()?this.neg().mul(S.neg()):this.neg().mul(S).neg();if(S.isNegative())return this.mul(S.neg()).neg();if(this.lt(x)&&S.lt(x))return l(this.toNumber()*S.toNumber(),this.unsigned);var O=this.high>>>16,W=this.high&65535,P=this.low>>>16,U=this.low&65535,G=S.high>>>16,q=S.high&65535,H=S.low>>>16,V=S.low&65535,Z=0,X=0,re=0,ee=0;return ee+=U*V,re+=ee>>>16,ee&=65535,re+=P*V,X+=re>>>16,re&=65535,re+=U*H,X+=re>>>16,re&=65535,X+=W*V,Z+=X>>>16,X&=65535,X+=P*H,Z+=X>>>16,X&=65535,X+=U*q,Z+=X>>>16,X&=65535,Z+=O*V+W*H+P*q+U*G,Z&=65535,u(re<<16|ee,Z<<16|X,this.unsigned)},E.mul=E.multiply,E.divide=function(S){if(r(S)||(S=d(S)),S.isZero())throw Error("division by zero");if(a){if(!this.unsigned&&this.high===-2147483648&&S.low===-1&&S.high===-1)return this;var _=(this.unsigned?a.div_u:a.div_s)(this.low,this.high,S.low,S.high);return u(_,a.get_high(),this.unsigned)}if(this.isZero())return this.unsigned?b:A;var O,W,P;if(this.unsigned){if(S.unsigned||(S=S.toUnsigned()),S.gt(this))return b;if(S.gt(this.shru(1)))return I;P=b}else{if(this.eq($)){if(S.eq(w)||S.eq(T))return $;if(S.eq($))return w;var U=this.shr(1);return O=U.div(S).shl(1),O.eq(A)?S.isNegative()?w:T:(W=this.sub(S.mul(O)),P=O.add(W.div(S)),P)}else if(S.eq($))return this.unsigned?b:A;if(this.isNegative())return S.isNegative()?this.neg().div(S.neg()):this.neg().div(S).neg();if(S.isNegative())return this.div(S.neg()).neg();P=A}for(W=this;W.gte(S);){O=Math.max(1,Math.floor(W.toNumber()/S.toNumber()));for(var G=Math.ceil(Math.log(O)/Math.LN2),q=G<=48?1:p(2,G-48),H=l(O),V=H.mul(S);V.isNegative()||V.gt(W);)O-=q,H=l(O,this.unsigned),V=H.mul(S);H.isZero()&&(H=w),P=P.add(H),W=W.sub(V)}return P},E.div=E.divide,E.modulo=function(S){if(r(S)||(S=d(S)),a){var _=(this.unsigned?a.rem_u:a.rem_s)(this.low,this.high,S.low,S.high);return u(_,a.get_high(),this.unsigned)}return this.sub(this.div(S).mul(S))},E.mod=E.modulo,E.rem=E.modulo,E.not=function(){return u(~this.low,~this.high,this.unsigned)},E.and=function(S){return r(S)||(S=d(S)),u(this.low&S.low,this.high&S.high,this.unsigned)},E.or=function(S){return r(S)||(S=d(S)),u(this.low|S.low,this.high|S.high,this.unsigned)},E.xor=function(S){return r(S)||(S=d(S)),u(this.low^S.low,this.high^S.high,this.unsigned)},E.shiftLeft=function(S){return r(S)&&(S=S.toInt()),(S&=63)===0?this:S<32?u(this.low<>>32-S,this.unsigned):u(0,this.low<>>S|this.high<<32-S,this.high>>S,this.unsigned):u(this.high>>S-32,this.high>=0?0:-1,this.unsigned)},E.shr=E.shiftRight,E.shiftRightUnsigned=function(S){if(r(S)&&(S=S.toInt()),S&=63,S===0)return this;var _=this.high;if(S<32){var O=this.low;return u(O>>>S|_<<32-S,_>>>S,this.unsigned)}else return S===32?u(_,0,this.unsigned):u(_>>>S-32,0,this.unsigned)},E.shru=E.shiftRightUnsigned,E.shr_u=E.shiftRightUnsigned,E.toSigned=function(){return this.unsigned?u(this.low,this.high,!1):this},E.toUnsigned=function(){return this.unsigned?this:u(this.low,this.high,!0)},E.toBytes=function(S){return S?this.toBytesLE():this.toBytesBE()},E.toBytesLE=function(){var S=this.high,_=this.low;return[_&255,_>>>8&255,_>>>16&255,_>>>24,S&255,S>>>8&255,S>>>16&255,S>>>24]},E.toBytesBE=function(){var S=this.high,_=this.low;return[S>>>24,S>>>16&255,S>>>8&255,S&255,_>>>24,_>>>16&255,_>>>8&255,_&255]},n.fromBytes=function(S,_,O){return O?n.fromBytesLE(S,_):n.fromBytesBE(S,_)},n.fromBytesLE=function(S,_){return new n(S[0]|S[1]<<8|S[2]<<16|S[3]<<24,S[4]|S[5]<<8|S[6]<<16|S[7]<<24,_)},n.fromBytesBE=function(S,_){return new n(S[4]<<24|S[5]<<16|S[6]<<8|S[7],S[0]<<24|S[1]<<16|S[2]<<8|S[3],_)}}),GC=Xt(()=>{"use strict"}),HC=Xt(()=>{"use strict"}),jC=Xt((e,t)=>{"use strict";(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)}),qC=Xt((e,t)=>{"use strict";(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,m=(p.next()>>>0)/4294967296,f=(h+m)/(1<<21);while(f===0);return f},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)}),XC=Xt((e,t)=>{"use strict";(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,m=(p.next()>>>0)/4294967296,f=(h+m)/(1<<21);while(f===0);return f},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)}),KC=Xt((e,t)=>{"use strict";(function(a,n,r){function s(l){var u=this;u.next=function(){var c=u.x,d=u.i,h,m,f;return h=c[d],h^=h>>>7,m=h^h<<24,h=c[d+1&7],m^=h^h>>>10,h=c[d+3&7],m^=h^h>>>3,h=c[d+4&7],m^=h^h<<7,h=c[d+7&7],h=h^h<<13,m^=h^h<<9,c[d]=m,u.i=d+1&7,m};function p(c,d){var h,m,f=[];if(d===(d|0))m=f[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,m=(p.next()>>>0)/4294967296,f=(h+m)/(1<<21);while(f===0);return f},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)}),YC=Xt((e,t)=>{"use strict";(function(a,n,r){function s(l){var u=this;u.next=function(){var c=u.w,d=u.X,h=u.i,m,f;return u.w=c=c+1640531527|0,f=d[h+34&127],m=d[h=h+1&127],f^=f<<13,m^=m<<17,f^=f>>>15,m^=m>>>12,f=d[h]=f^m,u.i=h,f+(c^c>>>16)|0};function p(c,d){var h,m,f,g,y,x=[],A=128;for(d===(d|0)?(m=d,d=null):(d=d+"\0",m=0,A=Math.max(A,d.length)),f=0,g=-32;g>>15,m^=m<<4,m^=m>>>13,g>=0&&(y=y+1640531527|0,h=x[g&127]^=m+y,f=h==0?f+1:0);for(f>=128&&(x[(d&&d.length||0)&127]=-1),f=127,g=4*128;g>0;--g)m=x[f+34&127],h=x[f=f+1&127],m^=m<<13,h^=h<<17,m^=m>>>15,h^=h>>>12,x[f]=m^h;c.w=y,c.X=x,c.i=f}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,m=(p.next()>>>0)/4294967296,f=(h+m)/(1<<21);while(f===0);return f},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)}),ZC=Xt((e,t)=>{"use strict";(function(a,n,r){function s(l){var u=this,p="";u.next=function(){var d=u.b,h=u.c,m=u.d,f=u.a;return d=d<<25^d>>>7^h,h=h-m|0,m=m<<24^m>>>8^f,f=f-d|0,u.b=d=d<<20^d>>>12^h,u.c=h=h-m|0,u.d=m<<16^h>>>16^f,u.a=f-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,m=(p.next()>>>0)/4294967296,f=(h+m)/(1<<21);while(f===0);return f},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)}),JC=Xt(()=>{"use strict"}),QC=Xt((e,t)=>{"use strict";(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 m(w,I,T){var N=[];I=I==!0?{entropy:!0}:I||{};var M=x(y(I.entropy?[w,b(n)]:w==null?A():w,3),N),$=new f(N),E=function(){for(var S=$.g(i),_=u,O=0;S=c;)S/=2,_/=2,O>>>=1;return(S+O)/_};return E.int32=function(){return $.g(4)|0},E.quick=function(){return $.g(4)/4294967296},E.double=E,x(b($.S),n),(I.pass||T||function(S,_,O,W){return W&&(W.S&&g(W,$),S.state=function(){return g($,{})}),O?(r[l]=S,_):S})(E,M,"global"in I?I.global:this==r,I.state)}function f(w){var I,T=w.length,N=this,M=0,$=N.i=N.j=0,E=N.S=[];for(T||(w=[T++]);M{"use strict";var a=jC(),n=qC(),r=XC(),s=KC(),i=YC(),o=ZC(),l=QC();l.alea=a,l.xor128=n,l.xorwow=r,l.xorshift7=s,l.xor4096=i,l.tychei=o,t.exports=l}),fA=Xt(()=>{"use strict"}),gA=Xt(()=>{"use strict"}),eT=Xt(()=>{"use strict"}),tT=Xt(()=>{"use strict"}),aT=Xt(()=>{"use strict"}),nT=Xt((e,t)=>{"use strict";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 ie.buffer!=He&&ht(ie.buffer),xt}function i(){return ie.buffer!=He&&ht(ie.buffer),Ha}function o(){return ie.buffer!=He&&ht(ie.buffer),zt}function l(){return ie.buffer!=He&&ht(ie.buffer),la}function u(){return ie.buffer!=He&&ht(ie.buffer),_a}function p(){return ie.buffer!=He&&ht(ie.buffer),dn}function c(){return ie.buffer!=He&&ht(ie.buffer),Fa}var d=typeof r!="undefined"?r:{},h,m;d.ready=new Promise(function(D,j){h=D,m=j});var f;typeof process!="undefined"&&process.listeners&&(f={uncaughtException:process.listeners("uncaughtException"),unhandledRejection:process.listeners("unhandledRejection")});var g=Object.assign({},d),y=[],x="./this.program",A=(D,j)=>{throw j},b=typeof window=="object",w=typeof importScripts=="function",I=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string",T=d.ENVIRONMENT_IS_PTHREAD||!1,N="";function M(D){return d.locateFile?d.locateFile(D,N):N+D}var $,E,S,_;function O(D){D instanceof Fs||H("exiting due to exception: "+D)}if(I){var W=fA(),P=gA();w?N=P.dirname(N)+"/":N=__dirname+"/",$=(j,oe)=>(j=Nl(j)?new URL(j):P.normalize(j),W.readFileSync(j,oe?void 0:"utf8")),S=j=>{var oe=$(j,!0);return oe.buffer||(oe=new Uint8Array(oe)),oe},E=(j,oe,Me)=>{j=Nl(j)?new URL(j):P.normalize(j),W.readFile(j,function(je,Be){je?Me(je):oe(Be.buffer)})},process.argv.length>1&&(x=process.argv[1].replace(/\\/g,"/")),y=process.argv.slice(2),process.on("uncaughtException",function(j){if(!(j instanceof Fs))throw j}),process.on("unhandledRejection",function(j){throw j}),A=(j,oe)=>{if(In())throw process.exitCode=j,oe;O(oe),process.exit(j)},d.inspect=function(){return"[Emscripten Module object]"};let D;try{D=eT()}catch(j){throw console.error('The "worker_threads" module is not supported in this node.js build - perhaps a newer version is needed?'),j}global.Worker=D.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="",I||($=D=>{var j=new XMLHttpRequest;return j.open("GET",D,!1),j.send(null),j.responseText},w&&(S=D=>{var j=new XMLHttpRequest;return j.open("GET",D,!1),j.responseType="arraybuffer",j.send(null),new Uint8Array(j.response)}),E=(D,j,oe)=>{var Me=new XMLHttpRequest;Me.open("GET",D,!0),Me.responseType="arraybuffer",Me.onload=()=>{if(Me.status==200||Me.status==0&&Me.response){j(Me.response);return}oe()},Me.onerror=oe,Me.send(null)}),_=D=>document.title=D);I&&typeof performance=="undefined"&&(global.performance=tT().performance);var U=console.log.bind(console),G=console.warn.bind(console);I&&(U=D=>W.writeSync(1,D+` `),G=D=>W.writeSync(2,D+` -`));var q=d.print||U,H=d.printErr||G;Object.assign(d,g),g=null,d.arguments&&(y=d.arguments),d.thisProgram&&(x=d.thisProgram),d.quit&&(A=d.quit);var V=4,Z=Atomics.load,X=Atomics.store,re=Atomics.compareExchange,ee;d.wasmBinary&&(ee=d.wasmBinary);var ge=d.noExitRuntime||!0;typeof WebAssembly!="object"&&_s("no native wasm support detected");var ie,be,Ce=!1,Re;function Le(D,j){D||_s(j)}var qe=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):void 0;function gt(D,j,oe){j>>>=0;for(var Me=j+oe,je=j;D[je]&&!(je>=Me);)++je;if(je-j>16&&D.buffer&&qe)return qe.decode(D.buffer instanceof SharedArrayBuffer?D.slice(j,je):D.subarray(j,je));for(var Be="";j>10,56320|cn&1023)}}return Be}function dt(D,j){return D>>>=0,D?gt(i(),D,j):""}function st(D,j,oe,Me){if(oe>>>=0,!(Me>0))return 0;for(var je=oe,Be=oe+Me-1,ye=0;ye=55296&&Ne<=57343){var Tt=D.charCodeAt(++ye);Ne=65536+((Ne&1023)<<10)|Tt&1023}if(Ne<=127){if(oe>=Be)break;j[oe++>>>0]=Ne}else if(Ne<=2047){if(oe+1>=Be)break;j[oe++>>>0]=192|Ne>>6,j[oe++>>>0]=128|Ne&63}else if(Ne<=65535){if(oe+2>=Be)break;j[oe++>>>0]=224|Ne>>12,j[oe++>>>0]=128|Ne>>6&63,j[oe++>>>0]=128|Ne&63}else{if(oe+3>=Be)break;j[oe++>>>0]=240|Ne>>18,j[oe++>>>0]=128|Ne>>12&63,j[oe++>>>0]=128|Ne>>6&63,j[oe++>>>0]=128|Ne&63}}return j[oe>>>0]=0,oe-je}function it(D,j,oe){return st(D,i(),j,oe)}var He,xt,Ha,zt,un,la,_a,dn,Fa;T&&(He=d.buffer);function ht(D){He=D,d.HEAP8=xt=new Int8Array(D),d.HEAP16=zt=new Int16Array(D),d.HEAP32=la=new Int32Array(D),d.HEAPU8=Ha=new Uint8Array(D),d.HEAPU16=un=new Uint16Array(D),d.HEAPU32=_a=new Uint32Array(D),d.HEAPF32=dn=new Float32Array(D),d.HEAPF64=Fa=new Float64Array(D)}var Da=d.INITIAL_MEMORY||16777216;if(T)ie=d.wasmMemory,He=d.buffer;else if(d.wasmMemory)ie=d.wasmMemory;else if(ie=new WebAssembly.Memory({initial:Da/65536,maximum:65536,shared:!0}),!(ie.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"),I&&H("(on node you may need: --experimental-wasm-threads --experimental-wasm-bulk-memory and/or recent version)"),Error("bad memory");ie&&(He=ie.buffer),Da=He.byteLength,ht(He);var ja,hr=[],Cl=[],jn=[],md=!1;function In(){return ge}function Dr(){if(d.preRun)for(typeof d.preRun=="function"&&(d.preRun=[d.preRun]);d.preRun.length;)pm(d.preRun.shift());gd(hr)}function Yt(){md=!0,!T&&gd(Cl)}function xc(){if(!T){if(d.postRun)for(typeof d.postRun=="function"&&(d.postRun=[d.postRun]);d.postRun.length;)$x(d.postRun.shift());gd(jn)}}function pm(D){hr.unshift(D)}function cm(D){Cl.unshift(D)}function $x(D){jn.unshift(D)}var Or=0,Tl=null,mr=null;function hm(D){Or++,d.monitorRunDependencies&&d.monitorRunDependencies(Or)}function Ac(D){if(Or--,d.monitorRunDependencies&&d.monitorRunDependencies(Or),Or==0&&(Tl!==null&&(clearInterval(Tl),Tl=null),mr)){var j=mr;mr=null,j()}}function _s(D){d.onAbort&&d.onAbort(D),D="Aborted("+D+")",H(D),Ce=!0,Re=1,D+=". Build with -sASSERTIONS for more info.";var j=new WebAssembly.RuntimeError(D);throw m(j),j}var mm="data:application/octet-stream;base64,";function bc(D){return D.startsWith(mm)}function Nl(D){return D.startsWith("file://")}var ma;ma="tfjs-backend-wasm-threaded-simd.wasm",bc(ma)||(ma=M(ma));function vc(D){try{if(D==ma&&ee)return new Uint8Array(ee);if(S)return S(D);throw"both async and sync fetching of the wasm failed"}catch(j){_s(j)}}function fm(){if(!ee&&(b||w)){if(typeof fetch=="function"&&!Nl(ma))return fetch(ma,{credentials:"same-origin"}).then(function(D){if(!D.ok)throw"failed to load wasm binary file at '"+ma+"'";return D.arrayBuffer()}).catch(function(){return vc(ma)});if(E)return new Promise(function(D,j){E(ma,function(oe){D(new Uint8Array(oe))},j)})}return Promise.resolve().then(function(){return vc(ma)})}function gm(){var D={env:_c,wasi_snapshot_preview1:_c};function j(ye,Ne){var Tt=ye.exports;if(d.asm=Tt,Sm(d.asm._emscripten_tls_init),ja=d.asm.__indirect_function_table,cm(d.asm.__wasm_call_ctors),be=Ne,!T){var cn=We.unusedWorkers.length;We.unusedWorkers.forEach(function(gr){We.loadWasmModuleToWorker(gr,function(){--cn||Ac("wasm-instantiate")})})}}T||hm("wasm-instantiate");function oe(ye){j(ye.instance,ye.module)}function Me(ye){return fm().then(function(Ne){return WebAssembly.instantiate(Ne,D)}).then(function(Ne){return Ne}).then(ye,function(Ne){H("failed to asynchronously prepare wasm: "+Ne),_s(Ne)})}function je(){return!ee&&typeof WebAssembly.instantiateStreaming=="function"&&!bc(ma)&&!Nl(ma)&&!I&&typeof fetch=="function"?fetch(ma,{credentials:"same-origin"}).then(function(ye){var Ne=WebAssembly.instantiateStreaming(ye,D);return Ne.then(oe,function(Tt){return H("wasm streaming compile failed: "+Tt),H("falling back to ArrayBuffer instantiation"),Me(oe)})}):Me(oe)}if(d.instantiateWasm)try{var Be=d.instantiateWasm(D,j);return Be}catch(ye){H("Module.instantiateWasm callback failed with error: "+ye),m(ye)}return je().catch(m),{}}var Px,_x,wc={};function Fs(D){this.name="ExitStatus",this.message="Program terminated with exit("+D+")",this.status=D}function ym(D){var j=We.pthreads[D];delete We.pthreads[D],j.terminate(),V2(D),We.runningWorkers.splice(We.runningWorkers.indexOf(j),1),j.pthread_ptr=0}function xm(D){var j=We.pthreads[D];j.postMessage({cmd:"cancel"})}function fd(D){var j=We.pthreads[D];Le(j),We.returnWorkerToPool(j)}function Am(D){var j=We.getNewWorker();if(!j)return 6;We.runningWorkers.push(j),We.pthreads[D.pthread_ptr]=j,j.pthread_ptr=D.pthread_ptr;var oe={cmd:"run",start_routine:D.startRoutine,arg:D.arg,pthread_ptr:D.pthread_ptr};return j.runPthread=()=>{I&&j.ref(),j.postMessage(oe,D.transferList),delete j.runPthread},j.loaded&&j.runPthread(),0}var kc={varargs:void 0,get:function(){kc.varargs+=4;var D=l()[kc.varargs-4>>>2];return D},getStr:function(D){var j=dt(D);return j}};function Ic(D){if(T)return zr(1,1,D);Re=D,In()||(We.terminateAllThreads(),d.onExit&&d.onExit(D),Ce=!0),A(D,new Fs(D))}function bm(D,j){if(Re=D,!j&&T)throw Cc(D),"unwind";Ic(D)}var Sc=bm;function vm(D){if(D instanceof Fs||D=="unwind")return Re;A(1,D)}var We={unusedWorkers:[],runningWorkers:[],tlsInitFunctions:[],pthreads:{},init:function(){T?We.initWorker():We.initMainThread()},initMainThread:function(){for(var D=8;D--;)We.allocateUnusedWorker()},initWorker:function(){ge=!1},setExitStatus:function(D){Re=D},terminateAllThreads:function(){for(var D of Object.values(We.pthreads))We.returnWorkerToPool(D);for(var D of We.unusedWorkers)D.terminate();We.unusedWorkers=[]},returnWorkerToPool:function(D){var j=D.pthread_ptr;delete We.pthreads[j],We.unusedWorkers.push(D),We.runningWorkers.splice(We.runningWorkers.indexOf(D),1),D.pthread_ptr=0,I&&D.unref(),V2(j)},receiveObjectTransfer:function(D){},threadInitTLS:function(){We.tlsInitFunctions.forEach(D=>D())},loadWasmModuleToWorker:function(D,j){D.onmessage=Be=>{var ye=Be.data,Ne=ye.cmd;if(D.pthread_ptr&&(We.currentProxiedOperationCallerThread=D.pthread_ptr),ye.targetThread&&ye.targetThread!=Wc()){var Tt=We.pthreads[ye.targetThread];Tt?Tt.postMessage(ye,ye.transferList):H('Internal error! Worker sent a message "'+Ne+'" to target pthread '+ye.targetThread+", but that thread no longer exists!"),We.currentProxiedOperationCallerThread=void 0;return}Ne==="processProxyingQueue"?yd(ye.queue):Ne==="spawnThread"?Am(ye):Ne==="cleanupThread"?fd(ye.thread):Ne==="killThread"?ym(ye.thread):Ne==="cancelThread"?xm(ye.thread):Ne==="loaded"?(D.loaded=!0,I&&D.unref(),j&&j(D),D.runPthread&&D.runPthread()):Ne==="print"?q("Thread "+ye.threadId+": "+ye.text):Ne==="printErr"?H("Thread "+ye.threadId+": "+ye.text):Ne==="alert"?alert("Thread "+ye.threadId+": "+ye.text):ye.target==="setimmediate"?D.postMessage(ye):Ne==="callHandler"?d[ye.handler](...ye.args):Ne&&H("worker sent an unknown command "+Ne),We.currentProxiedOperationCallerThread=void 0},D.onerror=Be=>{var ye="worker sent an error!";throw H(ye+" "+Be.filename+":"+Be.lineno+": "+Be.message),Be},I&&(D.on("message",function(Be){D.onmessage({data:Be})}),D.on("error",function(Be){D.onerror(Be)}),D.on("detachedExit",function(){}));var oe=[],Me=["onExit","onAbort","print","printErr"];for(var je of Me)d.hasOwnProperty(je)&&oe.push(je);D.postMessage({cmd:"load",handlers:oe,urlOrBlob:d.mainScriptUrlOrBlob||n,wasmMemory:ie,wasmModule:be})},allocateUnusedWorker:function(){var D,j=M("tfjs-backend-wasm-threaded-simd.worker.js");D=new Worker(j),We.unusedWorkers.push(D)},getNewWorker:function(){return We.unusedWorkers.length==0&&(We.allocateUnusedWorker(),We.loadWasmModuleToWorker(We.unusedWorkers[0])),We.unusedWorkers.pop()}};d.PThread=We;function gd(D){for(;D.length>0;)D.shift()(d)}function wm(){var D=Wc(),j=l()[D+52>>>2],oe=l()[D+56>>>2],Me=j-oe;Wx(j,Me),Bc(j)}d.establishStackSpace=wm;function Cc(D){if(T)return zr(2,0,D);try{Sc(D)}catch(j){vm(j)}}var Rl=[];function km(D){var j=Rl[D];return j||(D>=Rl.length&&(Rl.length=D+1),Rl[D]=j=ja.get(D)),j}function Im(D,j){var oe=km(D)(j);In()?We.setExitStatus(oe):Lx(oe)}d.invokeEntryPoint=Im;function Sm(D){We.tlsInitFunctions.push(D)}function Cm(D){Dx(D,!w,1,!b),We.threadInitTLS()}function Tm(D){T?postMessage({cmd:"cleanupThread",thread:D}):fd(D)}function Tc(D,j,oe,Me){return T?zr(3,1,D,j,oe,Me):Nc(D,j,oe,Me)}function Nc(D,j,oe,Me){if(typeof SharedArrayBuffer=="undefined")return H("Current environment does not support SharedArrayBuffer, pthreads are not available!"),6;var je=[],Be=0;if(T&&(je.length===0||Be))return Tc(D,j,oe,Me);if(Be)return Be;var ye={startRoutine:oe,pthread_ptr:D,arg:Me,transferList:je};return T?(ye.cmd="spawnThread",postMessage(ye,je),0):Am(ye)}function Nm(){return 65536}var Rm=!0;function Em(){return Rm}function yd(D){Atomics.store(l(),D>>2,1),Wc()&&zx(D),Atomics.compareExchange(l(),D>>2,1,0)}d.executeNotifiedProxyingQueue=yd;function Mm(D,j,oe,Me){if(D==j)setTimeout(()=>yd(Me));else if(T)postMessage({targetThread:D,cmd:"processProxyingQueue",queue:Me});else{var je=We.pthreads[D];if(!je)return;je.postMessage({cmd:"processProxyingQueue",queue:Me})}return 1}function $m(D,j,oe){return-1}function Pm(){_s("")}function Ds(D){Ds.shown||(Ds.shown={}),Ds.shown[D]||(Ds.shown[D]=1,I&&(D="warning: "+D),H(D))}function _m(){I||w||Ds("Blocking on the main thread is very dangerous, see https://emscripten.org/docs/porting/pthreads.html#blocking-on-the-main-browser-thread")}function Fm(){return Date.now()}function Rc(){return 4294901760}function Dm(){return Rc()}var xd;I?xd=()=>{var D=process.hrtime();return D[0]*1e3+D[1]/1e6}:xd=()=>performance.timeOrigin+performance.now();function Om(D,j,oe){i().copyWithin(D>>>0,j>>>0,j+oe>>>0)}function zm(){return I?tT().cpus().length:navigator.hardwareConcurrency}function Lm(D){var j=U2(),oe=D();return Bc(j),oe}function zr(D,j){var oe=arguments.length-2,Me=arguments;return Lm(()=>{for(var je=oe,Be=Vc(je*8),ye=Be>>3,Ne=0;Ne>>0]=Tt}return Ox(D,je,Be,j)})}var Ad=[];function Wm(D,j,oe){Ad.length=j;for(var Me=oe>>3,je=0;je>>0];var Be=D<0,ye=Be?wc[-D-1]:Km[D];return ye.apply(null,Ad)}function Bm(D){try{return ie.grow(D-He.byteLength+65535>>>16),ht(ie.buffer),1}catch(j){}}function Vm(D){var j=i().length;if(D=D>>>0,D<=j)return!1;var oe=Rc();if(D>oe)return!1;let Me=(Tt,cn)=>Tt+(cn-Tt%cn)%cn;for(var je=1;je<=4;je*=2){var Be=j*(1+.2/je);Be=Math.min(Be,D+100663296);var ye=Math.min(oe,Me(Math.max(D,Be),65536)),Ne=Bm(ye);if(Ne)return!0}return!1}function Um(){throw"unwind"}function Ec(D){return T?zr(4,1,D):52}function Mc(D,j,oe,Me,je){return T?zr(5,1,D,j,oe,Me,je):70}var Gm=[null,[],[]];function Hm(D,j){var oe=Gm[D];j===0||j===10?((D===1?q:H)(gt(oe,0)),oe.length=0):oe.push(j)}function $c(D,j,oe,Me){if(T)return zr(6,1,D,j,oe,Me);for(var je=0,Be=0;Be>>2],Ne=u()[j+4>>>2];j+=8;for(var Tt=0;Tt>>0]);je+=Ne}return u()[Me>>>2]=je,0}function Pc(D){var j=d["_"+D];return j}function jm(D,j){s().set(D,j>>>0)}function qm(D,j,oe,Me,je){var Be={string:hn=>{var Pl=0;if(hn!=null&&hn!==0){var Ux=(hn.length<<2)+1;Pl=Vc(Ux),it(hn,Pl,Ux)}return Pl},array:hn=>{var Pl=Vc(hn.length);return jm(hn,Pl),Pl}};function ye(hn){return j==="string"?dt(hn):j==="boolean"?!!hn:hn}var Ne=Pc(D),Tt=[],cn=0;if(Me)for(var gr=0;grye==="number"||ye==="boolean"),Be=j!=="string";return Be&&je&&!Me?Pc(D):function(){return qm(D,j,oe,arguments,Me)}}We.init();var Km=[null,Ic,Cc,Tc,Ec,Mc,$c],_c={__emscripten_init_main_thread_js:Cm,__emscripten_thread_cleanup:Tm,__pthread_create_js:Nc,_emscripten_default_pthread_stack_size:Nm,_emscripten_get_now_is_monotonic:Em,_emscripten_notify_task_queue:Mm,_emscripten_set_offscreencanvas_size:$m,abort:Pm,emscripten_check_blocking_allowed:_m,emscripten_date_now:Fm,emscripten_get_heap_max:Dm,emscripten_get_now:xd,emscripten_memcpy_big:Om,emscripten_num_logical_cores:zm,emscripten_receive_on_main_thread_js:Wm,emscripten_resize_heap:Vm,emscripten_unwind_to_js_event_loop:Um,exit:Sc,fd_close:Ec,fd_seek:Mc,fd_write:$c,memory:ie||d.wasmMemory},Fx=gm(),Ym=d.___wasm_call_ctors=function(){return(Ym=d.___wasm_call_ctors=d.asm.__wasm_call_ctors).apply(null,arguments)},Zm=d._init=function(){return(Zm=d._init=d.asm.init).apply(null,arguments)},Jm=d._init_with_threads_count=function(){return(Jm=d._init_with_threads_count=d.asm.init_with_threads_count).apply(null,arguments)},Qm=d._get_threads_count=function(){return(Qm=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)},tf=d._dispose_data=function(){return(tf=d._dispose_data=d.asm.dispose_data).apply(null,arguments)},af=d._dispose=function(){return(af=d._dispose=d.asm.dispose).apply(null,arguments)},nf=d._Abs=function(){return(nf=d._Abs=d.asm.Abs).apply(null,arguments)},rf=d._Acos=function(){return(rf=d._Acos=d.asm.Acos).apply(null,arguments)},sf=d._Acosh=function(){return(sf=d._Acosh=d.asm.Acosh).apply(null,arguments)},of=d._Add=function(){return(of=d._Add=d.asm.Add).apply(null,arguments)},lf=d._AddN=function(){return(lf=d._AddN=d.asm.AddN).apply(null,arguments)},uf=d._All=function(){return(uf=d._All=d.asm.All).apply(null,arguments)},df=d._Any=function(){return(df=d._Any=d.asm.Any).apply(null,arguments)},pf=d._ArgMax=function(){return(pf=d._ArgMax=d.asm.ArgMax).apply(null,arguments)},cf=d._ArgMin=function(){return(cf=d._ArgMin=d.asm.ArgMin).apply(null,arguments)},hf=d._Asin=function(){return(hf=d._Asin=d.asm.Asin).apply(null,arguments)},mf=d._Asinh=function(){return(mf=d._Asinh=d.asm.Asinh).apply(null,arguments)},ff=d._Atan=function(){return(ff=d._Atan=d.asm.Atan).apply(null,arguments)},gf=d._Atan2=function(){return(gf=d._Atan2=d.asm.Atan2).apply(null,arguments)},yf=d._Atanh=function(){return(yf=d._Atanh=d.asm.Atanh).apply(null,arguments)},xf=d._AvgPool=function(){return(xf=d._AvgPool=d.asm.AvgPool).apply(null,arguments)},Af=d._AvgPool3D=function(){return(Af=d._AvgPool3D=d.asm.AvgPool3D).apply(null,arguments)},bf=d._AvgPool3DGrad=function(){return(bf=d._AvgPool3DGrad=d.asm.AvgPool3DGrad).apply(null,arguments)},vf=d._AvgPoolGrad=function(){return(vf=d._AvgPoolGrad=d.asm.AvgPoolGrad).apply(null,arguments)},wf=d._BatchMatMul=function(){return(wf=d._BatchMatMul=d.asm.BatchMatMul).apply(null,arguments)},kf=d._Bincount=function(){return(kf=d._Bincount=d.asm.Bincount).apply(null,arguments)},If=d._BitwiseAnd=function(){return(If=d._BitwiseAnd=d.asm.BitwiseAnd).apply(null,arguments)},Sf=d._Ceil=function(){return(Sf=d._Ceil=d.asm.Ceil).apply(null,arguments)},Cf=d._ClipByValue=function(){return(Cf=d._ClipByValue=d.asm.ClipByValue).apply(null,arguments)},Tf=d._Conv2D=function(){return(Tf=d._Conv2D=d.asm.Conv2D).apply(null,arguments)},Nf=d._Conv2DBackpropInput=function(){return(Nf=d._Conv2DBackpropInput=d.asm.Conv2DBackpropInput).apply(null,arguments)},Rf=d._Conv3D=function(){return(Rf=d._Conv3D=d.asm.Conv3D).apply(null,arguments)},Ef=d._Conv3DBackpropFilterV2=function(){return(Ef=d._Conv3DBackpropFilterV2=d.asm.Conv3DBackpropFilterV2).apply(null,arguments)},Mf=d._Conv3DBackpropInputV2=function(){return(Mf=d._Conv3DBackpropInputV2=d.asm.Conv3DBackpropInputV2).apply(null,arguments)},$f=d._Cos=function(){return($f=d._Cos=d.asm.Cos).apply(null,arguments)},Pf=d._Cosh=function(){return(Pf=d._Cosh=d.asm.Cosh).apply(null,arguments)},_f=d._CropAndResize=function(){return(_f=d._CropAndResize=d.asm.CropAndResize).apply(null,arguments)},Ff=d._Cumprod=function(){return(Ff=d._Cumprod=d.asm.Cumprod).apply(null,arguments)},Df=d._Cumsum=function(){return(Df=d._Cumsum=d.asm.Cumsum).apply(null,arguments)},Of=d._DenseBincount=function(){return(Of=d._DenseBincount=d.asm.DenseBincount).apply(null,arguments)},zf=d._DepthToSpace=function(){return(zf=d._DepthToSpace=d.asm.DepthToSpace).apply(null,arguments)},Lf=d._DepthwiseConv2dNative=function(){return(Lf=d._DepthwiseConv2dNative=d.asm.DepthwiseConv2dNative).apply(null,arguments)},Wf=d._Diag=function(){return(Wf=d._Diag=d.asm.Diag).apply(null,arguments)},Bf=d._Dilation2D=function(){return(Bf=d._Dilation2D=d.asm.Dilation2D).apply(null,arguments)},Vf=d._Dilation2DBackpropFilter=function(){return(Vf=d._Dilation2DBackpropFilter=d.asm.Dilation2DBackpropFilter).apply(null,arguments)},Uf=d._Dilation2DBackpropInput=function(){return(Uf=d._Dilation2DBackpropInput=d.asm.Dilation2DBackpropInput).apply(null,arguments)},Gf=d._Elu=function(){return(Gf=d._Elu=d.asm.Elu).apply(null,arguments)},Hf=d._EluGrad=function(){return(Hf=d._EluGrad=d.asm.EluGrad).apply(null,arguments)},jf=d._Equal=function(){return(jf=d._Equal=d.asm.Equal).apply(null,arguments)},qf=d._Erf=function(){return(qf=d._Erf=d.asm.Erf).apply(null,arguments)},Xf=d._Exp=function(){return(Xf=d._Exp=d.asm.Exp).apply(null,arguments)},Kf=d._Expm1=function(){return(Kf=d._Expm1=d.asm.Expm1).apply(null,arguments)},Yf=d._FlipLeftRight=function(){return(Yf=d._FlipLeftRight=d.asm.FlipLeftRight).apply(null,arguments)},Zf=d._Floor=function(){return(Zf=d._Floor=d.asm.Floor).apply(null,arguments)},Jf=d._FloorDiv=function(){return(Jf=d._FloorDiv=d.asm.FloorDiv).apply(null,arguments)},Qf=d._FusedBatchNorm=function(){return(Qf=d._FusedBatchNorm=d.asm.FusedBatchNorm).apply(null,arguments)},e2=d._FusedConv2D=function(){return(e2=d._FusedConv2D=d.asm.FusedConv2D).apply(null,arguments)},t2=d._FusedDepthwiseConv2D=function(){return(t2=d._FusedDepthwiseConv2D=d.asm.FusedDepthwiseConv2D).apply(null,arguments)},a2=d._Gather=function(){return(a2=d._Gather=d.asm.Gather).apply(null,arguments)},n2=d._GatherNd=function(){return(n2=d._GatherNd=d.asm.GatherNd).apply(null,arguments)},r2=d._Greater=function(){return(r2=d._Greater=d.asm.Greater).apply(null,arguments)},s2=d._GreaterEqual=function(){return(s2=d._GreaterEqual=d.asm.GreaterEqual).apply(null,arguments)},i2=d._IsFinite=function(){return(i2=d._IsFinite=d.asm.IsFinite).apply(null,arguments)},o2=d._IsInf=function(){return(o2=d._IsInf=d.asm.IsInf).apply(null,arguments)},l2=d._IsNan=function(){return(l2=d._IsNan=d.asm.IsNan).apply(null,arguments)},u2=d._LRN=function(){return(u2=d._LRN=d.asm.LRN).apply(null,arguments)},d2=d._LRNGrad=function(){return(d2=d._LRNGrad=d.asm.LRNGrad).apply(null,arguments)},p2=d._LeakyRelu=function(){return(p2=d._LeakyRelu=d.asm.LeakyRelu).apply(null,arguments)},c2=d._Less=function(){return(c2=d._Less=d.asm.Less).apply(null,arguments)},h2=d._LessEqual=function(){return(h2=d._LessEqual=d.asm.LessEqual).apply(null,arguments)},m2=d._LinSpace=function(){return(m2=d._LinSpace=d.asm.LinSpace).apply(null,arguments)},f2=d._Log=function(){return(f2=d._Log=d.asm.Log).apply(null,arguments)},g2=d._Log1p=function(){return(g2=d._Log1p=d.asm.Log1p).apply(null,arguments)},y2=d._LogicalAnd=function(){return(y2=d._LogicalAnd=d.asm.LogicalAnd).apply(null,arguments)},x2=d._LogicalNot=function(){return(x2=d._LogicalNot=d.asm.LogicalNot).apply(null,arguments)},A2=d._LogicalOr=function(){return(A2=d._LogicalOr=d.asm.LogicalOr).apply(null,arguments)},b2=d._LogicalXor=function(){return(b2=d._LogicalXor=d.asm.LogicalXor).apply(null,arguments)},v2=d._Max=function(){return(v2=d._Max=d.asm.Max).apply(null,arguments)},w2=d._MaxPool=function(){return(w2=d._MaxPool=d.asm.MaxPool).apply(null,arguments)},k2=d._MaxPool3D=function(){return(k2=d._MaxPool3D=d.asm.MaxPool3D).apply(null,arguments)},I2=d._MaxPool3DGrad=function(){return(I2=d._MaxPool3DGrad=d.asm.MaxPool3DGrad).apply(null,arguments)},S2=d._MaxPoolGrad=function(){return(S2=d._MaxPoolGrad=d.asm.MaxPoolGrad).apply(null,arguments)},C2=d._MaxPoolWithArgmax=function(){return(C2=d._MaxPoolWithArgmax=d.asm.MaxPoolWithArgmax).apply(null,arguments)},T2=d._Maximum=function(){return(T2=d._Maximum=d.asm.Maximum).apply(null,arguments)},N2=d._Mean=function(){return(N2=d._Mean=d.asm.Mean).apply(null,arguments)},R2=d._Min=function(){return(R2=d._Min=d.asm.Min).apply(null,arguments)},E2=d._Minimum=function(){return(E2=d._Minimum=d.asm.Minimum).apply(null,arguments)},M2=d._MirrorPad=function(){return(M2=d._MirrorPad=d.asm.MirrorPad).apply(null,arguments)},$2=d._Mod=function(){return($2=d._Mod=d.asm.Mod).apply(null,arguments)},P2=d._Multinomial=function(){return(P2=d._Multinomial=d.asm.Multinomial).apply(null,arguments)},_2=d._Multiply=function(){return(_2=d._Multiply=d.asm.Multiply).apply(null,arguments)},F2=d._Neg=function(){return(F2=d._Neg=d.asm.Neg).apply(null,arguments)},D2=d._NonMaxSuppressionV3=function(){return(D2=d._NonMaxSuppressionV3=d.asm.NonMaxSuppressionV3).apply(null,arguments)},O2=d._NonMaxSuppressionV4=function(){return(O2=d._NonMaxSuppressionV4=d.asm.NonMaxSuppressionV4).apply(null,arguments)},Fc=d._NonMaxSuppressionV5=function(){return(Fc=d._NonMaxSuppressionV5=d.asm.NonMaxSuppressionV5).apply(null,arguments)},Dc=d._NotEqual=function(){return(Dc=d._NotEqual=d.asm.NotEqual).apply(null,arguments)},bd=d._OneHot=function(){return(bd=d._OneHot=d.asm.OneHot).apply(null,arguments)},z2=d._PadV2=function(){return(z2=d._PadV2=d.asm.PadV2).apply(null,arguments)},L2=d._Pow=function(){return(L2=d._Pow=d.asm.Pow).apply(null,arguments)},El=d._Prelu=function(){return(El=d._Prelu=d.asm.Prelu).apply(null,arguments)},Oc=d._Prod=function(){return(Oc=d._Prod=d.asm.Prod).apply(null,arguments)},Ml=d._RealDiv=function(){return(Ml=d._RealDiv=d.asm.RealDiv).apply(null,arguments)},$l=d._Reciprocal=function(){return($l=d._Reciprocal=d.asm.Reciprocal).apply(null,arguments)},W2=d._Relu=function(){return(W2=d._Relu=d.asm.Relu).apply(null,arguments)},Y=d._Relu6=function(){return(Y=d._Relu6=d.asm.Relu6).apply(null,arguments)},se=d._ResizeBilinear=function(){return(se=d._ResizeBilinear=d.asm.ResizeBilinear).apply(null,arguments)},Ee=d._ResizeBilinearGrad=function(){return(Ee=d._ResizeBilinearGrad=d.asm.ResizeBilinearGrad).apply(null,arguments)},et=d._ResizeNearestNeighbor=function(){return(et=d._ResizeNearestNeighbor=d.asm.ResizeNearestNeighbor).apply(null,arguments)},wt=d._ResizeNearestNeighborGrad=function(){return(wt=d._ResizeNearestNeighborGrad=d.asm.ResizeNearestNeighborGrad).apply(null,arguments)},kt=d._Reverse=function(){return(kt=d._Reverse=d.asm.Reverse).apply(null,arguments)},Je=d._RotateWithOffset=function(){return(Je=d._RotateWithOffset=d.asm.RotateWithOffset).apply(null,arguments)},Ye=d._Round=function(){return(Ye=d._Round=d.asm.Round).apply(null,arguments)},Lt=d._Rsqrt=function(){return(Lt=d._Rsqrt=d.asm.Rsqrt).apply(null,arguments)},pn=d._ScatterNd=function(){return(pn=d._ScatterNd=d.asm.ScatterNd).apply(null,arguments)},fr=d._SearchSorted=function(){return(fr=d._SearchSorted=d.asm.SearchSorted).apply(null,arguments)},zc=d._SelectV2=function(){return(zc=d._SelectV2=d.asm.SelectV2).apply(null,arguments)},vd=d._Selu=function(){return(vd=d._Selu=d.asm.Selu).apply(null,arguments)},B2=d._Sigmoid=function(){return(B2=d._Sigmoid=d.asm.Sigmoid).apply(null,arguments)},Oa=d._Sign=function(){return(Oa=d._Sign=d.asm.Sign).apply(null,arguments)},Lr=d._Sin=function(){return(Lr=d._Sin=d.asm.Sin).apply(null,arguments)},Lc=d._Sinh=function(){return(Lc=d._Sinh=d.asm.Sinh).apply(null,arguments)},ZS=d._Softmax=function(){return(ZS=d._Softmax=d.asm.Softmax).apply(null,arguments)},JS=d._Softplus=function(){return(JS=d._Softplus=d.asm.Softplus).apply(null,arguments)},QS=d._SparseFillEmptyRows=function(){return(QS=d._SparseFillEmptyRows=d.asm.SparseFillEmptyRows).apply(null,arguments)},eC=d._SparseReshape=function(){return(eC=d._SparseReshape=d.asm.SparseReshape).apply(null,arguments)},tC=d._SparseSegmentReduction=function(){return(tC=d._SparseSegmentReduction=d.asm.SparseSegmentReduction).apply(null,arguments)},aC=d._SparseToDense=function(){return(aC=d._SparseToDense=d.asm.SparseToDense).apply(null,arguments)},nC=d._Sqrt=function(){return(nC=d._Sqrt=d.asm.Sqrt).apply(null,arguments)},rC=d._Square=function(){return(rC=d._Square=d.asm.Square).apply(null,arguments)},sC=d._SquaredDifference=function(){return(sC=d._SquaredDifference=d.asm.SquaredDifference).apply(null,arguments)},iC=d._Step=function(){return(iC=d._Step=d.asm.Step).apply(null,arguments)},oC=d._StridedSlice=function(){return(oC=d._StridedSlice=d.asm.StridedSlice).apply(null,arguments)},lC=d._Sub=function(){return(lC=d._Sub=d.asm.Sub).apply(null,arguments)},uC=d._Sum=function(){return(uC=d._Sum=d.asm.Sum).apply(null,arguments)},dC=d._Tan=function(){return(dC=d._Tan=d.asm.Tan).apply(null,arguments)},pC=d._Tanh=function(){return(pC=d._Tanh=d.asm.Tanh).apply(null,arguments)},cC=d._TensorScatterUpdate=function(){return(cC=d._TensorScatterUpdate=d.asm.TensorScatterUpdate).apply(null,arguments)},hC=d._Tile=function(){return(hC=d._Tile=d.asm.Tile).apply(null,arguments)},mC=d._TopK=function(){return(mC=d._TopK=d.asm.TopK).apply(null,arguments)},fC=d._Transform=function(){return(fC=d._Transform=d.asm.Transform).apply(null,arguments)},gC=d._Transpose=function(){return(gC=d._Transpose=d.asm.Transpose).apply(null,arguments)},yC=d.__FusedMatMul=function(){return(yC=d.__FusedMatMul=d.asm._FusedMatMul).apply(null,arguments)},xC=d._malloc=function(){return(xC=d._malloc=d.asm.malloc).apply(null,arguments)},AC=d._free=function(){return(AC=d._free=d.asm.free).apply(null,arguments)},bC=d.__emscripten_tls_init=function(){return(bC=d.__emscripten_tls_init=d.asm._emscripten_tls_init).apply(null,arguments)},Wc=d._pthread_self=function(){return(Wc=d._pthread_self=d.asm.pthread_self).apply(null,arguments)},vC=d.___errno_location=function(){return(vC=d.___errno_location=d.asm.__errno_location).apply(null,arguments)},Dx=d.__emscripten_thread_init=function(){return(Dx=d.__emscripten_thread_init=d.asm._emscripten_thread_init).apply(null,arguments)},wC=d.__emscripten_thread_crashed=function(){return(wC=d.__emscripten_thread_crashed=d.asm._emscripten_thread_crashed).apply(null,arguments)},kC=d._emscripten_main_thread_process_queued_calls=function(){return(kC=d._emscripten_main_thread_process_queued_calls=d.asm.emscripten_main_thread_process_queued_calls).apply(null,arguments)},IC=d._emscripten_main_browser_thread_id=function(){return(IC=d._emscripten_main_browser_thread_id=d.asm.emscripten_main_browser_thread_id).apply(null,arguments)},Ox=d._emscripten_run_in_main_runtime_thread_js=function(){return(Ox=d._emscripten_run_in_main_runtime_thread_js=d.asm.emscripten_run_in_main_runtime_thread_js).apply(null,arguments)},SC=d._emscripten_dispatch_to_thread_=function(){return(SC=d._emscripten_dispatch_to_thread_=d.asm.emscripten_dispatch_to_thread_).apply(null,arguments)},zx=d.__emscripten_proxy_execute_task_queue=function(){return(zx=d.__emscripten_proxy_execute_task_queue=d.asm._emscripten_proxy_execute_task_queue).apply(null,arguments)},V2=d.__emscripten_thread_free_data=function(){return(V2=d.__emscripten_thread_free_data=d.asm._emscripten_thread_free_data).apply(null,arguments)},Lx=d.__emscripten_thread_exit=function(){return(Lx=d.__emscripten_thread_exit=d.asm._emscripten_thread_exit).apply(null,arguments)},Wx=d._emscripten_stack_set_limits=function(){return(Wx=d._emscripten_stack_set_limits=d.asm.emscripten_stack_set_limits).apply(null,arguments)},U2=d.stackSave=function(){return(U2=d.stackSave=d.asm.stackSave).apply(null,arguments)},Bc=d.stackRestore=function(){return(Bc=d.stackRestore=d.asm.stackRestore).apply(null,arguments)},Vc=d.stackAlloc=function(){return(Vc=d.stackAlloc=d.asm.stackAlloc).apply(null,arguments)},CC=d.dynCall_iijjiiii=function(){return(CC=d.dynCall_iijjiiii=d.asm.dynCall_iijjiiii).apply(null,arguments)},TC=d.dynCall_jiji=function(){return(TC=d.dynCall_jiji=d.asm.dynCall_jiji).apply(null,arguments)};d.keepRuntimeAlive=In,d.wasmMemory=ie,d.cwrap=Xm,d.ExitStatus=Fs,d.PThread=We;var Uc;mr=function D(){Uc||Bx(),Uc||(mr=D)};function Bx(D){if(D=D||y,Or>0)return;if(T){h(d),Yt(),startWorker(d);return}if(Dr(),Or>0)return;function j(){Uc||(Uc=!0,d.calledRun=!0,!Ce&&(Yt(),h(d),d.onRuntimeInitialized&&d.onRuntimeInitialized(),xc()))}d.setStatus?(d.setStatus("Running..."),setTimeout(function(){setTimeout(function(){d.setStatus("")},1),j()},1)):j()}if(d.preInit)for(typeof d.preInit=="function"&&(d.preInit=[d.preInit]);d.preInit.length>0;)d.preInit.pop()();Bx();var Gc;f&&(Gc={uncaughtException:process.listeners("uncaughtException").filter(function(D){return!f.uncaughtException.indexOf(D)>-1}),unhandledRejection:process.listeners("unhandledRejection").filter(function(D){return!f.unhandledRejection.indexOf(D)>-1})});var Hc;if(typeof WasmBackendModule!="undefined")Hc=WasmBackendModule;else if(typeof r!="undefined")Hc=r;else throw new Error("Could not find wasm module in post.js");if(Gc){var NC=Hc._dispose;Hc._dispose=function(){NC(),Gc.uncaughtException.forEach(function(D){process.removeListener("uncaughtException",D)}),Gc.unhandledRejection.forEach(function(D){process.removeListener("unhandledRejection",D)})}}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)}),nT=Xt((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")+"//# sourceURL="+f)},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.startWorker=instance=>{Module=instance;postMessage({"cmd":"loaded"})};self.onmessage=e=>{try{if(e.data.cmd==="load"){Module["wasmModule"]=e.data.wasmModule;for(const handler of e.data.handlers){Module[handler]=function(){postMessage({cmd:"callHandler",handler:handler,args:[...arguments]})}}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)}else if(e.data.cmd==="run"){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}};`}),rT=Xt((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(Y,se){i=Y,o=se});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=(Y,se)=>{throw se},h=typeof window=="object",m=typeof importScripts=="function",f=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string",g="";function y(Y){return s.locateFile?s.locateFile(Y,g):g+Y}var x,A,b,w;function I(Y){Y instanceof Tl||$("exiting due to exception: "+Y)}if(f){var T=mA(),N=fA();m?g=N.dirname(g)+"/":g=__dirname+"/",x=(Y,se)=>(Y=Dr(Y)?new URL(Y):N.normalize(Y),T.readFileSync(Y,se?void 0:"utf8")),b=Y=>{var se=x(Y,!0);return se.buffer||(se=new Uint8Array(se)),se},A=(Y,se,Ee)=>{Y=Dr(Y)?new URL(Y):N.normalize(Y),T.readFile(Y,function(et,wt){et?Ee(et):se(wt.buffer)})},process.argv.length>1&&(c=process.argv[1].replace(/\\/g,"/")),p=process.argv.slice(2),process.on("uncaughtException",function(Y){if(!(Y instanceof Tl))throw Y}),process.on("unhandledRejection",function(Y){throw Y}),d=(Y,se)=>{if(Ha())throw process.exitCode=Y,se;I(se),process.exit(Y)},s.inspect=function(){return"[Emscripten Module object]"}}else(h||m)&&(m?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="",x=Y=>{var se=new XMLHttpRequest;return se.open("GET",Y,!1),se.send(null),se.responseText},m&&(b=Y=>{var se=new XMLHttpRequest;return se.open("GET",Y,!1),se.responseType="arraybuffer",se.send(null),new Uint8Array(se.response)}),A=(Y,se,Ee)=>{var et=new XMLHttpRequest;et.open("GET",Y,!0),et.responseType="arraybuffer",et.onload=()=>{if(et.status==200||et.status==0&&et.response){se(et.response);return}Ee()},et.onerror=Ee,et.send(null)},w=Y=>document.title=Y);var M=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 E=4,S;s.wasmBinary&&(S=s.wasmBinary);var _=s.noExitRuntime||!0;typeof WebAssembly!="object"&&jn("no native wasm support detected");var O,W=!1,P;function U(Y,se){Y||jn(se)}var G=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):void 0;function q(Y,se,Ee){se>>>=0;for(var et=se+Ee,wt=se;Y[wt]&&!(wt>=et);)++wt;if(wt-se>16&&Y.buffer&&G)return G.decode(Y.subarray(se,wt));for(var kt="";se>10,56320|pn&1023)}}return kt}function H(Y,se){return Y>>>=0,Y?q(ee,Y,se):""}function V(Y,se,Ee,et){if(Ee>>>=0,!(et>0))return 0;for(var wt=Ee,kt=Ee+et-1,Je=0;Je=55296&&Ye<=57343){var Lt=Y.charCodeAt(++Je);Ye=65536+((Ye&1023)<<10)|Lt&1023}if(Ye<=127){if(Ee>=kt)break;se[Ee++>>>0]=Ye}else if(Ye<=2047){if(Ee+1>=kt)break;se[Ee++>>>0]=192|Ye>>6,se[Ee++>>>0]=128|Ye&63}else if(Ye<=65535){if(Ee+2>=kt)break;se[Ee++>>>0]=224|Ye>>12,se[Ee++>>>0]=128|Ye>>6&63,se[Ee++>>>0]=128|Ye&63}else{if(Ee+3>=kt)break;se[Ee++>>>0]=240|Ye>>18,se[Ee++>>>0]=128|Ye>>12&63,se[Ee++>>>0]=128|Ye>>6&63,se[Ee++>>>0]=128|Ye&63}}return se[Ee>>>0]=0,Ee-wt}function Z(Y,se,Ee){return V(Y,ee,se,Ee)}var X,re,ee,ge,ie,be,Ce,Re,Le;function qe(Y){X=Y,s.HEAP8=re=new Int8Array(Y),s.HEAP16=ge=new Int16Array(Y),s.HEAP32=be=new Int32Array(Y),s.HEAPU8=ee=new Uint8Array(Y),s.HEAPU16=ie=new Uint16Array(Y),s.HEAPU32=Ce=new Uint32Array(Y),s.HEAPF32=Re=new Float32Array(Y),s.HEAPF64=Le=new Float64Array(Y)}var gt=s.INITIAL_MEMORY||16777216,dt,st=[],it=[],He=[],xt=!1;function Ha(){return _}function zt(){if(s.preRun)for(typeof s.preRun=="function"&&(s.preRun=[s.preRun]);s.preRun.length;)_a(s.preRun.shift());mr(st)}function un(){xt=!0,mr(it)}function la(){if(s.postRun)for(typeof s.postRun=="function"&&(s.postRun=[s.postRun]);s.postRun.length;)Fa(s.postRun.shift());mr(He)}function _a(Y){st.unshift(Y)}function dn(Y){it.unshift(Y)}function Fa(Y){He.unshift(Y)}var ht=0,Da=null,ja=null;function hr(Y){ht++,s.monitorRunDependencies&&s.monitorRunDependencies(ht)}function Cl(Y){if(ht--,s.monitorRunDependencies&&s.monitorRunDependencies(ht),ht==0&&(Da!==null&&(clearInterval(Da),Da=null),ja)){var se=ja;ja=null,se()}}function jn(Y){s.onAbort&&s.onAbort(Y),Y="Aborted("+Y+")",$(Y),W=!0,P=1,Y+=". Build with -sASSERTIONS for more info.";var se=new WebAssembly.RuntimeError(Y);throw o(se),se}var md="data:application/octet-stream;base64,";function In(Y){return Y.startsWith(md)}function Dr(Y){return Y.startsWith("file://")}var Yt;Yt="tfjs-backend-wasm.wasm",In(Yt)||(Yt=y(Yt));function xc(Y){try{if(Y==Yt&&S)return new Uint8Array(S);if(b)return b(Y);throw"both async and sync fetching of the wasm failed"}catch(se){jn(se)}}function pm(){if(!S&&(h||m)){if(typeof fetch=="function"&&!Dr(Yt))return fetch(Yt,{credentials:"same-origin"}).then(function(Y){if(!Y.ok)throw"failed to load wasm binary file at '"+Yt+"'";return Y.arrayBuffer()}).catch(function(){return xc(Yt)});if(A)return new Promise(function(Y,se){A(Yt,function(Ee){Y(new Uint8Array(Ee))},se)})}return Promise.resolve().then(function(){return xc(Yt)})}function cm(){var Y={env:fd,wasi_snapshot_preview1:fd};function se(Je,Ye){var Lt=Je.exports;s.asm=Lt,O=s.asm.memory,qe(O.buffer),dt=s.asm.__indirect_function_table,dn(s.asm.__wasm_call_ctors),Cl("wasm-instantiate")}hr("wasm-instantiate");function Ee(Je){se(Je.instance)}function et(Je){return pm().then(function(Ye){return WebAssembly.instantiate(Ye,Y)}).then(function(Ye){return Ye}).then(Je,function(Ye){$("failed to asynchronously prepare wasm: "+Ye),jn(Ye)})}function wt(){return!S&&typeof WebAssembly.instantiateStreaming=="function"&&!In(Yt)&&!Dr(Yt)&&!f&&typeof fetch=="function"?fetch(Yt,{credentials:"same-origin"}).then(function(Je){var Ye=WebAssembly.instantiateStreaming(Je,Y);return Ye.then(Ee,function(Lt){return $("wasm streaming compile failed: "+Lt),$("falling back to ArrayBuffer instantiation"),et(Ee)})}):et(Ee)}if(s.instantiateWasm)try{var kt=s.instantiateWasm(Y,se);return kt}catch(Je){$("Module.instantiateWasm callback failed with error: "+Je),o(Je)}return wt().catch(o),{}}var $x,Or;function Tl(Y){this.name="ExitStatus",this.message="Program terminated with exit("+Y+")",this.status=Y}function mr(Y){for(;Y.length>0;)Y.shift()(s)}function hm(){jn("")}function Ac(){return 4294901760}function _s(){return Ac()}function mm(Y,se,Ee){ee.copyWithin(Y>>>0,se>>>0,se+Ee>>>0)}function bc(Y){try{return O.grow(Y-X.byteLength+65535>>>16),qe(O.buffer),1}catch(se){}}function Nl(Y){var se=ee.length;Y=Y>>>0;var Ee=Ac();if(Y>Ee)return!1;let et=(Lt,pn)=>Lt+(pn-Lt%pn)%pn;for(var wt=1;wt<=4;wt*=2){var kt=se*(1+.2/wt);kt=Math.min(kt,Y+100663296);var Je=Math.min(Ee,et(Math.max(Y,kt),65536)),Ye=bc(Je);if(Ye)return!0}return!1}var ma={varargs:void 0,get:function(){ma.varargs+=4;var Y=be[ma.varargs-4>>>2];return Y},getStr:function(Y){var se=H(Y);return se}};function vc(Y){return 52}function fm(Y,se,Ee,et,wt){return 70}var gm=[null,[],[]];function Px(Y,se){var Ee=gm[Y];se===0||se===10?((Y===1?M:$)(q(Ee,0)),Ee.length=0):Ee.push(se)}function _x(Y,se,Ee,et){for(var wt=0,kt=0;kt>>2],Ye=Ce[se+4>>>2];se+=8;for(var Lt=0;Lt>>0]);wt+=Ye}return Ce[et>>>2]=wt,0}function wc(Y){var se=s["_"+Y];return se}function Fs(Y,se){re.set(Y,se>>>0)}function ym(Y,se,Ee,et,wt){var kt={string:Oa=>{var Lr=0;if(Oa!=null&&Oa!==0){var Lc=(Oa.length<<2)+1;Lr=bd(Lc),Z(Oa,Lr,Lc)}return Lr},array:Oa=>{var Lr=bd(Oa.length);return Fs(Oa,Lr),Lr}};function Je(Oa){return se==="string"?H(Oa):se==="boolean"?!!Oa:Oa}var Ye=wc(Y),Lt=[],pn=0;if(et)for(var fr=0;frJe==="number"||Je==="boolean"),kt=se!=="string";return kt&&wt&&!et?wc(Y):function(){return ym(Y,se,Ee,arguments,et)}}var fd={abort:hm,emscripten_get_heap_max:_s,emscripten_memcpy_big:mm,emscripten_resize_heap:Nl,fd_close:vc,fd_seek:fm,fd_write:_x},Am=cm(),kc=s.___wasm_call_ctors=function(){return(kc=s.___wasm_call_ctors=s.asm.__wasm_call_ctors).apply(null,arguments)},Ic=s._init=function(){return(Ic=s._init=s.asm.init).apply(null,arguments)},bm=s._init_with_threads_count=function(){return(bm=s._init_with_threads_count=s.asm.init_with_threads_count).apply(null,arguments)},Sc=s._get_threads_count=function(){return(Sc=s._get_threads_count=s.asm.get_threads_count).apply(null,arguments)},vm=s._register_tensor=function(){return(vm=s._register_tensor=s.asm.register_tensor).apply(null,arguments)},We=s._dispose_data=function(){return(We=s._dispose_data=s.asm.dispose_data).apply(null,arguments)},gd=s._dispose=function(){return(gd=s._dispose=s.asm.dispose).apply(null,arguments)},wm=s._Abs=function(){return(wm=s._Abs=s.asm.Abs).apply(null,arguments)},Cc=s._Acos=function(){return(Cc=s._Acos=s.asm.Acos).apply(null,arguments)},Rl=s._Acosh=function(){return(Rl=s._Acosh=s.asm.Acosh).apply(null,arguments)},km=s._Add=function(){return(km=s._Add=s.asm.Add).apply(null,arguments)},Im=s._AddN=function(){return(Im=s._AddN=s.asm.AddN).apply(null,arguments)},Sm=s._All=function(){return(Sm=s._All=s.asm.All).apply(null,arguments)},Cm=s._Any=function(){return(Cm=s._Any=s.asm.Any).apply(null,arguments)},Tm=s._ArgMax=function(){return(Tm=s._ArgMax=s.asm.ArgMax).apply(null,arguments)},Tc=s._ArgMin=function(){return(Tc=s._ArgMin=s.asm.ArgMin).apply(null,arguments)},Nc=s._Asin=function(){return(Nc=s._Asin=s.asm.Asin).apply(null,arguments)},Nm=s._Asinh=function(){return(Nm=s._Asinh=s.asm.Asinh).apply(null,arguments)},Rm=s._Atan=function(){return(Rm=s._Atan=s.asm.Atan).apply(null,arguments)},Em=s._Atan2=function(){return(Em=s._Atan2=s.asm.Atan2).apply(null,arguments)},yd=s._Atanh=function(){return(yd=s._Atanh=s.asm.Atanh).apply(null,arguments)},Mm=s._AvgPool=function(){return(Mm=s._AvgPool=s.asm.AvgPool).apply(null,arguments)},$m=s._AvgPool3D=function(){return($m=s._AvgPool3D=s.asm.AvgPool3D).apply(null,arguments)},Pm=s._AvgPool3DGrad=function(){return(Pm=s._AvgPool3DGrad=s.asm.AvgPool3DGrad).apply(null,arguments)},Ds=s._AvgPoolGrad=function(){return(Ds=s._AvgPoolGrad=s.asm.AvgPoolGrad).apply(null,arguments)},_m=s._BatchMatMul=function(){return(_m=s._BatchMatMul=s.asm.BatchMatMul).apply(null,arguments)},Fm=s._Bincount=function(){return(Fm=s._Bincount=s.asm.Bincount).apply(null,arguments)},Rc=s._BitwiseAnd=function(){return(Rc=s._BitwiseAnd=s.asm.BitwiseAnd).apply(null,arguments)},Dm=s._Ceil=function(){return(Dm=s._Ceil=s.asm.Ceil).apply(null,arguments)},xd=s._ClipByValue=function(){return(xd=s._ClipByValue=s.asm.ClipByValue).apply(null,arguments)},Om=s._Conv2D=function(){return(Om=s._Conv2D=s.asm.Conv2D).apply(null,arguments)},zm=s._Conv2DBackpropInput=function(){return(zm=s._Conv2DBackpropInput=s.asm.Conv2DBackpropInput).apply(null,arguments)},Lm=s._Conv3D=function(){return(Lm=s._Conv3D=s.asm.Conv3D).apply(null,arguments)},zr=s._Conv3DBackpropFilterV2=function(){return(zr=s._Conv3DBackpropFilterV2=s.asm.Conv3DBackpropFilterV2).apply(null,arguments)},Ad=s._Conv3DBackpropInputV2=function(){return(Ad=s._Conv3DBackpropInputV2=s.asm.Conv3DBackpropInputV2).apply(null,arguments)},Wm=s._Cos=function(){return(Wm=s._Cos=s.asm.Cos).apply(null,arguments)},Bm=s._Cosh=function(){return(Bm=s._Cosh=s.asm.Cosh).apply(null,arguments)},Vm=s._CropAndResize=function(){return(Vm=s._CropAndResize=s.asm.CropAndResize).apply(null,arguments)},Um=s._Cumprod=function(){return(Um=s._Cumprod=s.asm.Cumprod).apply(null,arguments)},Ec=s._Cumsum=function(){return(Ec=s._Cumsum=s.asm.Cumsum).apply(null,arguments)},Mc=s._DenseBincount=function(){return(Mc=s._DenseBincount=s.asm.DenseBincount).apply(null,arguments)},Gm=s._DepthToSpace=function(){return(Gm=s._DepthToSpace=s.asm.DepthToSpace).apply(null,arguments)},Hm=s._DepthwiseConv2dNative=function(){return(Hm=s._DepthwiseConv2dNative=s.asm.DepthwiseConv2dNative).apply(null,arguments)},$c=s._Diag=function(){return($c=s._Diag=s.asm.Diag).apply(null,arguments)},Pc=s._Dilation2D=function(){return(Pc=s._Dilation2D=s.asm.Dilation2D).apply(null,arguments)},jm=s._Dilation2DBackpropFilter=function(){return(jm=s._Dilation2DBackpropFilter=s.asm.Dilation2DBackpropFilter).apply(null,arguments)},qm=s._Dilation2DBackpropInput=function(){return(qm=s._Dilation2DBackpropInput=s.asm.Dilation2DBackpropInput).apply(null,arguments)},Xm=s._Elu=function(){return(Xm=s._Elu=s.asm.Elu).apply(null,arguments)},Km=s._EluGrad=function(){return(Km=s._EluGrad=s.asm.EluGrad).apply(null,arguments)},_c=s._Equal=function(){return(_c=s._Equal=s.asm.Equal).apply(null,arguments)},Fx=s._Erf=function(){return(Fx=s._Erf=s.asm.Erf).apply(null,arguments)},Ym=s._Exp=function(){return(Ym=s._Exp=s.asm.Exp).apply(null,arguments)},Zm=s._Expm1=function(){return(Zm=s._Expm1=s.asm.Expm1).apply(null,arguments)},Jm=s._FlipLeftRight=function(){return(Jm=s._FlipLeftRight=s.asm.FlipLeftRight).apply(null,arguments)},Qm=s._Floor=function(){return(Qm=s._Floor=s.asm.Floor).apply(null,arguments)},ef=s._FloorDiv=function(){return(ef=s._FloorDiv=s.asm.FloorDiv).apply(null,arguments)},tf=s._FusedBatchNorm=function(){return(tf=s._FusedBatchNorm=s.asm.FusedBatchNorm).apply(null,arguments)},af=s._FusedConv2D=function(){return(af=s._FusedConv2D=s.asm.FusedConv2D).apply(null,arguments)},nf=s._FusedDepthwiseConv2D=function(){return(nf=s._FusedDepthwiseConv2D=s.asm.FusedDepthwiseConv2D).apply(null,arguments)},rf=s._Gather=function(){return(rf=s._Gather=s.asm.Gather).apply(null,arguments)},sf=s._GatherNd=function(){return(sf=s._GatherNd=s.asm.GatherNd).apply(null,arguments)},of=s._Greater=function(){return(of=s._Greater=s.asm.Greater).apply(null,arguments)},lf=s._GreaterEqual=function(){return(lf=s._GreaterEqual=s.asm.GreaterEqual).apply(null,arguments)},uf=s._IsFinite=function(){return(uf=s._IsFinite=s.asm.IsFinite).apply(null,arguments)},df=s._IsInf=function(){return(df=s._IsInf=s.asm.IsInf).apply(null,arguments)},pf=s._IsNan=function(){return(pf=s._IsNan=s.asm.IsNan).apply(null,arguments)},cf=s._LRN=function(){return(cf=s._LRN=s.asm.LRN).apply(null,arguments)},hf=s._LRNGrad=function(){return(hf=s._LRNGrad=s.asm.LRNGrad).apply(null,arguments)},mf=s._LeakyRelu=function(){return(mf=s._LeakyRelu=s.asm.LeakyRelu).apply(null,arguments)},ff=s._Less=function(){return(ff=s._Less=s.asm.Less).apply(null,arguments)},gf=s._LessEqual=function(){return(gf=s._LessEqual=s.asm.LessEqual).apply(null,arguments)},yf=s._LinSpace=function(){return(yf=s._LinSpace=s.asm.LinSpace).apply(null,arguments)},xf=s._Log=function(){return(xf=s._Log=s.asm.Log).apply(null,arguments)},Af=s._Log1p=function(){return(Af=s._Log1p=s.asm.Log1p).apply(null,arguments)},bf=s._LogicalAnd=function(){return(bf=s._LogicalAnd=s.asm.LogicalAnd).apply(null,arguments)},vf=s._LogicalNot=function(){return(vf=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)},Sf=s._MaxPool=function(){return(Sf=s._MaxPool=s.asm.MaxPool).apply(null,arguments)},Cf=s._MaxPool3D=function(){return(Cf=s._MaxPool3D=s.asm.MaxPool3D).apply(null,arguments)},Tf=s._MaxPool3DGrad=function(){return(Tf=s._MaxPool3DGrad=s.asm.MaxPool3DGrad).apply(null,arguments)},Nf=s._MaxPoolGrad=function(){return(Nf=s._MaxPoolGrad=s.asm.MaxPoolGrad).apply(null,arguments)},Rf=s._MaxPoolWithArgmax=function(){return(Rf=s._MaxPoolWithArgmax=s.asm.MaxPoolWithArgmax).apply(null,arguments)},Ef=s._Maximum=function(){return(Ef=s._Maximum=s.asm.Maximum).apply(null,arguments)},Mf=s._Mean=function(){return(Mf=s._Mean=s.asm.Mean).apply(null,arguments)},$f=s._Min=function(){return($f=s._Min=s.asm.Min).apply(null,arguments)},Pf=s._Minimum=function(){return(Pf=s._Minimum=s.asm.Minimum).apply(null,arguments)},_f=s._MirrorPad=function(){return(_f=s._MirrorPad=s.asm.MirrorPad).apply(null,arguments)},Ff=s._Mod=function(){return(Ff=s._Mod=s.asm.Mod).apply(null,arguments)},Df=s._Multinomial=function(){return(Df=s._Multinomial=s.asm.Multinomial).apply(null,arguments)},Of=s._Multiply=function(){return(Of=s._Multiply=s.asm.Multiply).apply(null,arguments)},zf=s._Neg=function(){return(zf=s._Neg=s.asm.Neg).apply(null,arguments)},Lf=s._NonMaxSuppressionV3=function(){return(Lf=s._NonMaxSuppressionV3=s.asm.NonMaxSuppressionV3).apply(null,arguments)},Wf=s._NonMaxSuppressionV4=function(){return(Wf=s._NonMaxSuppressionV4=s.asm.NonMaxSuppressionV4).apply(null,arguments)},Bf=s._NonMaxSuppressionV5=function(){return(Bf=s._NonMaxSuppressionV5=s.asm.NonMaxSuppressionV5).apply(null,arguments)},Vf=s._NotEqual=function(){return(Vf=s._NotEqual=s.asm.NotEqual).apply(null,arguments)},Uf=s._OneHot=function(){return(Uf=s._OneHot=s.asm.OneHot).apply(null,arguments)},Gf=s._PadV2=function(){return(Gf=s._PadV2=s.asm.PadV2).apply(null,arguments)},Hf=s._Pow=function(){return(Hf=s._Pow=s.asm.Pow).apply(null,arguments)},jf=s._Prelu=function(){return(jf=s._Prelu=s.asm.Prelu).apply(null,arguments)},qf=s._Prod=function(){return(qf=s._Prod=s.asm.Prod).apply(null,arguments)},Xf=s._RealDiv=function(){return(Xf=s._RealDiv=s.asm.RealDiv).apply(null,arguments)},Kf=s._Reciprocal=function(){return(Kf=s._Reciprocal=s.asm.Reciprocal).apply(null,arguments)},Yf=s._Relu=function(){return(Yf=s._Relu=s.asm.Relu).apply(null,arguments)},Zf=s._Relu6=function(){return(Zf=s._Relu6=s.asm.Relu6).apply(null,arguments)},Jf=s._ResizeBilinear=function(){return(Jf=s._ResizeBilinear=s.asm.ResizeBilinear).apply(null,arguments)},Qf=s._ResizeBilinearGrad=function(){return(Qf=s._ResizeBilinearGrad=s.asm.ResizeBilinearGrad).apply(null,arguments)},e2=s._ResizeNearestNeighbor=function(){return(e2=s._ResizeNearestNeighbor=s.asm.ResizeNearestNeighbor).apply(null,arguments)},t2=s._ResizeNearestNeighborGrad=function(){return(t2=s._ResizeNearestNeighborGrad=s.asm.ResizeNearestNeighborGrad).apply(null,arguments)},a2=s._Reverse=function(){return(a2=s._Reverse=s.asm.Reverse).apply(null,arguments)},n2=s._RotateWithOffset=function(){return(n2=s._RotateWithOffset=s.asm.RotateWithOffset).apply(null,arguments)},r2=s._Round=function(){return(r2=s._Round=s.asm.Round).apply(null,arguments)},s2=s._Rsqrt=function(){return(s2=s._Rsqrt=s.asm.Rsqrt).apply(null,arguments)},i2=s._ScatterNd=function(){return(i2=s._ScatterNd=s.asm.ScatterNd).apply(null,arguments)},o2=s._SearchSorted=function(){return(o2=s._SearchSorted=s.asm.SearchSorted).apply(null,arguments)},l2=s._SelectV2=function(){return(l2=s._SelectV2=s.asm.SelectV2).apply(null,arguments)},u2=s._Selu=function(){return(u2=s._Selu=s.asm.Selu).apply(null,arguments)},d2=s._Sigmoid=function(){return(d2=s._Sigmoid=s.asm.Sigmoid).apply(null,arguments)},p2=s._Sign=function(){return(p2=s._Sign=s.asm.Sign).apply(null,arguments)},c2=s._Sin=function(){return(c2=s._Sin=s.asm.Sin).apply(null,arguments)},h2=s._Sinh=function(){return(h2=s._Sinh=s.asm.Sinh).apply(null,arguments)},m2=s._Softmax=function(){return(m2=s._Softmax=s.asm.Softmax).apply(null,arguments)},f2=s._Softplus=function(){return(f2=s._Softplus=s.asm.Softplus).apply(null,arguments)},g2=s._SparseFillEmptyRows=function(){return(g2=s._SparseFillEmptyRows=s.asm.SparseFillEmptyRows).apply(null,arguments)},y2=s._SparseReshape=function(){return(y2=s._SparseReshape=s.asm.SparseReshape).apply(null,arguments)},x2=s._SparseSegmentReduction=function(){return(x2=s._SparseSegmentReduction=s.asm.SparseSegmentReduction).apply(null,arguments)},A2=s._SparseToDense=function(){return(A2=s._SparseToDense=s.asm.SparseToDense).apply(null,arguments)},b2=s._Sqrt=function(){return(b2=s._Sqrt=s.asm.Sqrt).apply(null,arguments)},v2=s._Square=function(){return(v2=s._Square=s.asm.Square).apply(null,arguments)},w2=s._SquaredDifference=function(){return(w2=s._SquaredDifference=s.asm.SquaredDifference).apply(null,arguments)},k2=s._Step=function(){return(k2=s._Step=s.asm.Step).apply(null,arguments)},I2=s._StridedSlice=function(){return(I2=s._StridedSlice=s.asm.StridedSlice).apply(null,arguments)},S2=s._Sub=function(){return(S2=s._Sub=s.asm.Sub).apply(null,arguments)},C2=s._Sum=function(){return(C2=s._Sum=s.asm.Sum).apply(null,arguments)},T2=s._Tan=function(){return(T2=s._Tan=s.asm.Tan).apply(null,arguments)},N2=s._Tanh=function(){return(N2=s._Tanh=s.asm.Tanh).apply(null,arguments)},R2=s._TensorScatterUpdate=function(){return(R2=s._TensorScatterUpdate=s.asm.TensorScatterUpdate).apply(null,arguments)},E2=s._Tile=function(){return(E2=s._Tile=s.asm.Tile).apply(null,arguments)},M2=s._TopK=function(){return(M2=s._TopK=s.asm.TopK).apply(null,arguments)},$2=s._Transform=function(){return($2=s._Transform=s.asm.Transform).apply(null,arguments)},P2=s._Transpose=function(){return(P2=s._Transpose=s.asm.Transpose).apply(null,arguments)},_2=s.__FusedMatMul=function(){return(_2=s.__FusedMatMul=s.asm._FusedMatMul).apply(null,arguments)},F2=s._malloc=function(){return(F2=s._malloc=s.asm.malloc).apply(null,arguments)},D2=s._free=function(){return(D2=s._free=s.asm.free).apply(null,arguments)},O2=s.___errno_location=function(){return(O2=s.___errno_location=s.asm.__errno_location).apply(null,arguments)},Fc=s.stackSave=function(){return(Fc=s.stackSave=s.asm.stackSave).apply(null,arguments)},Dc=s.stackRestore=function(){return(Dc=s.stackRestore=s.asm.stackRestore).apply(null,arguments)},bd=s.stackAlloc=function(){return(bd=s.stackAlloc=s.asm.stackAlloc).apply(null,arguments)},z2=s.dynCall_iijjiiii=function(){return(z2=s.dynCall_iijjiiii=s.asm.dynCall_iijjiiii).apply(null,arguments)},L2=s.dynCall_jiji=function(){return(L2=s.dynCall_jiji=s.asm.dynCall_jiji).apply(null,arguments)};s.cwrap=xm;var El;ja=function Y(){El||Oc(),El||(ja=Y)};function Oc(Y){if(Y=Y||p,ht>0||(zt(),ht>0))return;function se(){El||(El=!0,s.calledRun=!0,!W&&(un(),i(s),s.onRuntimeInitialized&&s.onRuntimeInitialized(),la()))}s.setStatus?(s.setStatus("Running..."),setTimeout(function(){setTimeout(function(){s.setStatus("")},1),se()},1)):se()}if(s.preInit)for(typeof s.preInit=="function"&&(s.preInit=[s.preInit]);s.preInit.length>0;)s.preInit.pop()();Oc();var Ml;l&&(Ml={uncaughtException:process.listeners("uncaughtException").filter(function(Y){return!l.uncaughtException.indexOf(Y)>-1}),unhandledRejection:process.listeners("unhandledRejection").filter(function(Y){return!l.unhandledRejection.indexOf(Y)>-1})});var $l;if(typeof r!="undefined")$l=r;else if(typeof WasmBackendModuleThreadedSimd!="undefined")$l=WasmBackendModuleThreadedSimd;else throw new Error("Could not find wasm module in post.js");if(Ml){var W2=$l._dispose;$l._dispose=function(){W2(),Ml.uncaughtException.forEach(function(Y){process.removeListener("uncaughtException",Y)}),Ml.unhandledRejection.forEach(function(Y){process.removeListener("unhandledRejection",Y)})}}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)}),ip=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}},ru=class{refCount(e){return Xa("refCount")}incRef(e){return Xa("incRef")}timerAvailable(){return!0}time(e){return Xa("time")}read(e){return Xa("read")}readSync(e){return Xa("readSync")}readToGPU(e,t){return Xa("readToGPU")}numDataIds(){return Xa("numDataIds")}disposeData(e,t){return Xa("disposeData")}write(e,t,a){return Xa("write")}move(e,t,a,n,r){return Xa("move")}createTensorFromGPUData(e,t,a){return Xa("createTensorFromGPUData")}memory(){return Xa("memory")}floatPrecision(){return Xa("floatPrecision")}epsilon(){return this.floatPrecision()===32?1e-7:1e-4}dispose(){return Xa("dispose")}};function Xa(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 gA(e){let t=e.length,a=0;for(;t>0;)a=Math.random()*t|0,t--,uh(e,t,a)}function sT(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--,uh(e,a,n),uh(t,a,n)}function zd(e,t,a){return Math.max(e,Math.min(t,a))}function iT(e){return e%2===0?e:e+1}function uh(e,t,a){let n=e[t];e[t]=e[a],e[a]=n}function oT(e){let t=0;for(let a=0;aa+` Shapes ${e} and ${t} must match`)}function ii(e){F(e!=null,()=>"The input to the tensor constructor must be a non-null value.")}function mt(e){if(e.length===0)return 1;let t=e[0];for(let a=1;a0,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 fT(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 op(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=>Hl(n)),()=>`All values in axis param must be integers but got axis ${e}`),e.map(n=>n<0?a+n:n)}function xA(e,t){let a=[],n=[],r=t!=null&&Array.isArray(t)&&t.length===0,s=t==null||r?null:op(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 AA(e,t){return J1(e,t)}function J1(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 bA(e,t){for(let a=0;at+=a.length),t}function Ur(e){return typeof e=="string"||e instanceof String}function kA(e){return typeof e=="boolean"}function IA(e){return typeof e=="number"}function lp(e){return Array.isArray(e)?lp(e[0]):e instanceof Float32Array?"float32":e instanceof Int32Array||e instanceof Uint8Array||e instanceof Uint8ClampedArray?"int32":IA(e)?"float32":Ur(e)?"string":kA(e)?"bool":"float32"}function Kr(e){return!!(e&&e.constructor&&e.call&&e.apply)}function ph(e,t){for(let a=t;a=0;--n)a[n]=a[n+1]*e[n+1];return a}function SA(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 SA(0,e,t,a)}function yT(e,t){if(Array.isArray(e))return e;if(t==="float32")return e instanceof Float32Array?e:new Float32Array(e);if(t==="int32")return e instanceof Int32Array?e:new Int32Array(e);if(t==="bool"||t==="string")return Uint8Array.from(new Int32Array(e));throw new Error(`Unknown dtype ${t}`)}function Q1(e,t){let a=Eh(e,t);for(let n=0;nn*r,1);if(t==null||t==="float32")return Wl(e,new Float32Array(a));if(t==="int32")return Wl(e,new Int32Array(a));if(t==="bool")return Wl(e,new Uint8Array(a));throw new Error(`Unknown data type ${t}`)}function an(e){e.forEach(t=>{F(Number.isInteger(t)&&t>=0,()=>`Tensor must have a shape comprised of positive integers but got shape [${e}].`)})}function AT(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]=kT(a,n)})}};function vT(e){let t={};return e.replace(/[?&]([^=?&]+)(?:=([^&]*))?/g,(a,...n)=>(wT(t,n[0],n[1]),n.join("="))),t}function wT(e,t,a){e[decodeURIComponent(t)]=decodeURIComponent(a||"")}function kT(e,t){let a=t.toLowerCase();return a==="true"||a==="false"?a==="true":`${+a}`===a?+a:t}function B(){return eg}var eg=null;function IT(e){eg=e}var H2;function TA(){if(H2==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");H2=e}return H2}function ST(){let e=TA();return e._tfGlobals==null&&(e._tfGlobals=new Map),e._tfGlobals}function tg(e,t){let a=ST();if(a.has(e))return a.get(e);{let n=t();return a.set(e,n),a.get(e)}}var iu="Abs",oi="Acos",li="Acosh",os="Add",ui="AddN",di="All",pi="Any",ou="ArgMax",lu="ArgMin",ci="Asin",hi="Asinh",mi="Atan",fi="Atanh",gi="Atan2",yi="AvgPool",up="AvgPoolGrad",uu="AvgPool3D",dp="AvgPool3DGrad",xi="BatchMatMul",du="BatchToSpaceND",Ai="Bincount",pu="BitwiseAnd",CT="BroadcastTo",cu="BroadcastArgs",bi="Cast",vi="Ceil",ls="ClipByValue",pp="Complex",cp="ComplexAbs",hu="Concat",wi="Conv2D",hp="Conv2DBackpropFilter",ki="Conv2DBackpropInput",Ii="Conv3D",mu="Conv3DBackpropFilterV2",Si="Conv3DBackpropInputV2",Ci="Cos",Ti="Cosh",Ni="Cumprod",Ri="Cumsum",Ei="CropAndResize",fu="DenseBincount",Mi="DepthToSpace",$i="DepthwiseConv2dNative",mp="DepthwiseConv2dNativeBackpropFilter",fp="DepthwiseConv2dNativeBackpropInput",gu="Diag",Pi="Dilation2D",jl="Dilation2DBackpropInput",ql="Dilation2DBackpropFilter",gp="Draw",_i="RealDiv",yp="Einsum",Fi="Elu",yu="EluGrad",Di="Erf",Oi="Equal",zi="Exp",xu="ExpandDims",Li="Expm1",xp="FFT",Au="Fill",Wi="FlipLeftRight",Bi="Floor",Vi="FloorDiv",Ui="FusedBatchNorm",bu="GatherV2",Gi="GatherNd",Hi="Greater",ji="GreaterEqual",qi="Identity",Ap="IFFT",bp="Imag",Xi="IsFinite",Ki="IsInf",Yi="IsNan",Zi="LeakyRelu",Ji="Less",Qi="LessEqual",eo="LinSpace",to="Log",ao="Log1p",no="LogicalAnd",ro="LogicalNot",so="LogicalOr",NA="LogicalXor",TT="LogSoftmax",NT="LowerBound",io="LRN",vu="LRNGrad",RT="MatrixBandPart",oo="Max",lo="Maximum",uo="MaxPool",vp="MaxPoolGrad",wu="MaxPool3D",wp="MaxPool3DGrad",ku="MaxPoolWithArgmax",po="Mean",co="Min",ho="Minimum",mo="MirrorPad",fo="Mod",go="Multinomial",yo="Multiply",Iu="Neg",xo="NotEqual",Ao="NonMaxSuppressionV3",Su="NonMaxSuppressionV4",bo="NonMaxSuppressionV5",Cu="OnesLike",vo="OneHot",Tu="Pack",wo="PadV2",ET="Pool",ko="Pow",Io="Prelu",So="Prod",$h="RaggedGather",Ph="RaggedRange",_h="RaggedTensorToTensor",Nu="Range",kp="Real",Co="Reciprocal",To="Relu",Ru="Reshape",No="ResizeNearestNeighbor",Eu="ResizeNearestNeighborGrad",Ro="ResizeBilinear",Mu="ResizeBilinearGrad",Eo="Relu6",Mo="Reverse",$o="Round",Po="Rsqrt",_o="ScatterNd",Fo="TensorScatterUpdate",Do="SearchSorted",$u="Select",Oo="Selu",Pu="Slice",zo="Sin",Lo="Sinh",Wo="Sign",Bo="Sigmoid",Vo="Softplus",Uo="Sqrt",Go="Sum",_u="SpaceToBatchND",Fu="SplitV",Ho="Softmax",Ip="SparseFillEmptyRows",Du="SparseReshape",Ou="SparseSegmentMean",zu="SparseSegmentSum",jo="SparseToDense",qo="SquaredDifference",Sp="Square",Cp="StaticRegexReplace",Xo="StridedSlice",Lu="StringNGrams",Tp="StringSplit",Np="StringToHashBucketFast",Ko="Sub",Yo="Tan",Zo="Tanh",us="Tile",Jo="TopK",Qo="Transform",wr="Transpose",Rp="Unique",Wu="Unpack",Ep="UnsortedSegmentSum",MT="UpperBound",Bu="ZerosLike",ds="Step",Ld="FromPixels",el="RotateWithOffset",Yr="_FusedMatMul",Zr="FusedConv2D",Jr="FusedDepthwiseConv2D";function Vr(...e){B().getBool("IS_TEST")||B().getBool("PROD")||console.warn(...e)}function $T(...e){B().getBool("IS_TEST")||B().getBool("PROD")||console.log(...e)}var Xl=tg("kernelRegistry",()=>new Map),Wd=tg("gradRegistry",()=>new Map);function Bd(e,t){let a=ag(e,t);return Xl.get(a)}function t1(e){return Wd.get(e)}function Jn(e){let t=Xl.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 xn(e){let{kernelName:t,backendName:a}=e,n=ag(t,a);Xl.has(n)&&Vr(`The kernel '${t}' for backend '${a}' is already registered`),Xl.set(n,e)}function PT(e){let{kernelName:t}=e;Wd.has(t)&&B().getBool("DEBUG")&&Vr(`Overriding the gradient for '${t}'`),Wd.set(t,e)}function _T(e,t){let a=ag(e,t);if(!Xl.has(a))throw new Error(`The kernel '${e}' for backend '${t}' is not registered`);Xl.delete(a)}function FT(e){if(!Wd.has(e))throw new Error(`The gradient '${e}' for backend is not registered`);Wd.delete(e)}function DT(e,t){Jn(e).forEach(a=>{let n=Object.assign({},a,{backendName:t});xn(n)})}function ag(e,t){return`${t}_${e}`}var v={};Ze(v,{arraysEqual:()=>Cr,arraysEqualWithNull:()=>yA,assert:()=>F,assertNonNegativeIntegerDimensions:()=>an,assertNonNull:()=>ii,assertShapesMatch:()=>Ta,bytesFromStringArray:()=>wA,bytesPerElement:()=>dh,checkConversionForErrors:()=>bA,clamp:()=>zd,computeStrides:()=>su,convertBackendValuesAndArrayBuffer:()=>yT,createScalarValue:()=>VT,createShuffledIndices:()=>hT,decodeString:()=>ch,distSquared:()=>uT,encodeString:()=>$p,fetch:()=>GT,fingerPrint64:()=>BT,flatten:()=>Qr,getArrayFromDType:()=>J1,getTypedArrayFromDType:()=>AA,hasEncodingLoss:()=>gT,hexToLong:()=>Mp,indexToLoc:()=>bT,inferDtype:()=>lp,inferFromImplicitShape:()=>fT,isBoolean:()=>kA,isFunction:()=>Kr,isInt:()=>Hl,isNumber:()=>IA,isPromise:()=>Mh,isScalarShape:()=>dT,isString:()=>Ur,isTypedArray:()=>Jt,isValidDtype:()=>vA,locToIndex:()=>AT,makeOnesTypedArray:()=>Q1,makeZerosNestedTypedArray:()=>xT,makeZerosTypedArray:()=>Eh,nearestDivisor:()=>ph,nearestLargerEven:()=>iT,now:()=>Vd,parseAxisParam:()=>op,randUniform:()=>lT,repeatedTry:()=>mT,rightPad:()=>_d,shuffle:()=>gA,shuffleCombo:()=>sT,sizeFromShape:()=>mt,sizeToSquarishShape:()=>cT,squeezeShape:()=>xA,sum:()=>oT,swap:()=>uh,tanh:()=>pT,toNestedArray:()=>Wl,toTypedArray:()=>Fh});function RA(e){return e instanceof Float32Array||e instanceof Int32Array||e instanceof Uint8Array||e instanceof Uint8ClampedArray}var jx=nu(VC()),Bs=jx.default||jx;function Mp(e){return Bs.fromString(e,!0,16)}var EA=Mp("c3a5c85c97cb3127"),Ls=Mp("b492b66fbe98f273"),va=Mp("9ae16a3b2f90404f");function a1(e){return e.xor(e.shru(47))}function MA(e,t,a){let n=e.slice(t,t+a);return Bs.fromBytes(Array.from(n),!0,!0)}function At(e,t){return MA(e,t,8)}function qx(e,t){return MA(e,t,4)}function Zt(e,t){return t===0?e:e.shru(t).or(e.shl(64-t))}function qr(e,t,a=Mp("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 OT(e,t,a,n,r,s){r=r.add(e),s=Zt(s.add(r).add(n),21);let i=r;return r=r.add(t),r=r.add(a),s=s.add(Zt(r,44)),[r.add(n),s.add(i)]}function qc(e,t,a,n){return OT(At(e,t),At(e,t+8),At(e,t+16),At(e,t+24),a,n)}function zT(e,t=e.length){if(t>=8){let a=va.add(t*2),n=At(e,0).add(va),r=At(e,t-8),s=Zt(r,37).mul(a).add(n),i=Zt(n,25).add(r).mul(a);return qr(s,i,a)}if(t>=4){let a=va.add(t*2),n=qx(e,0);return qr(n.shl(3).add(t),qx(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 a1(va.mul(s).xor(EA.mul(i))).mul(va)}return va}function LT(e,t=e.length){let a=va.add(t*2),n=At(e,0).mul(Ls),r=At(e,8),s=At(e,t-8).mul(a),i=At(e,t-16).mul(va);return qr(Zt(n.add(r),43).add(Zt(s,30)).add(i),n.add(Zt(r.add(va),18)).add(s),a)}function WT(e,t=e.length){let a=va.add(t*2),n=At(e,0).mul(va),r=At(e,8),s=At(e,t-8).mul(a),i=At(e,t-16).mul(va),o=Zt(n.add(r),43).add(Zt(s,30)).add(i),l=qr(o,n.add(Zt(r.add(va),18)).add(s),a),u=At(e,16).mul(a),p=At(e,24),c=o.add(At(e,t-32)).mul(a),d=l.add(At(e,t-24)).mul(a);return qr(Zt(u.add(p),43).add(Zt(c,30)).add(d),u.add(Zt(p.add(n),18)).add(c),a)}function BT(e,t=e.length){let a=Bs.fromNumber(81,!0);if(t<=32)return t<=16?zT(e,t):LT(e,t);if(t<=64)return WT(e,t);let n=a,r=a.mul(Ls).add(113),s=a1(r.mul(va).add(113)).mul(va),i=[Bs.UZERO,Bs.UZERO],o=[Bs.UZERO,Bs.UZERO];n=n.mul(va).add(At(e,0));let l=0,u=(t-1>>6)*64,p=u+(t-1&63)-63;do n=Zt(n.add(r).add(i[0]).add(At(e,l+8)),37).mul(Ls),r=Zt(r.add(i[1]).add(At(e,l+48)),42).mul(Ls),n=n.xor(o[1]),r=r.add(i[0]).add(At(e,l+40)),s=Zt(s.add(o[0]),33).mul(Ls),i=qc(e,l,i[1].mul(Ls),n.add(o[0])),o=qc(e,l+32,s.add(o[1]),r.add(At(e,l+16))),[s,n]=[n,s],l+=64;while(l!==u);let c=Ls.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=Zt(n.add(r).add(i[0]).add(At(e,l+8)),37).mul(c),r=Zt(r.add(i[1]).add(At(e,l+48)),42).mul(c),n=n.xor(o[1].mul(9)),r=r.add(i[0].mul(9).add(At(e,l+40))),s=Zt(s.add(o[0]),33).mul(c),i=qc(e,l,i[1].mul(c),n.add(o[0])),o=qc(e,l+32,s.add(o[1]),r.add(At(e,l+16))),[s,n]=[n,s],qr(qr(i[0],o[0],c).add(a1(r).mul(EA)).add(s),qr(i[1],o[1],c).add(n),c)}function VT(e,t){return t==="string"?$p(e):Fh([e],t)}function UT(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=Qr(e)),B().getBool("DEBUG")&&bA(e,t),UT(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=Vd();if(this.backendTimer.timerAvailable())s=this.backendTimer.time(r);else{r();for(let o of n)o.dataSync();s=Promise.resolve({kernelMs:Vd()-i})}if(B().getBool("CHECK_COMPUTATION_FOR_ERRORS"))for(let o=0;o{jT(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 jT(e,t,a){if(t!=="float32")return!1;for(let n=0;n0?m:""} `}}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 XT(e,t,a){let n={},r={};for(let l=0;ln[f.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(!Cr(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 Xx=20,wd=3,j2=7;function YT(e,t,a,n){let r=su(t),s=ZT(e,t,a,r),i=t.length,o=eh(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(` +`));var q=d.print||U,H=d.printErr||G;Object.assign(d,g),g=null,d.arguments&&(y=d.arguments),d.thisProgram&&(x=d.thisProgram),d.quit&&(A=d.quit);var V=4,Z=Atomics.load,X=Atomics.store,re=Atomics.compareExchange,ee;d.wasmBinary&&(ee=d.wasmBinary);var ge=d.noExitRuntime||!0;typeof WebAssembly!="object"&&_s("no native wasm support detected");var ie,be,Ce=!1,Re;function Le(D,j){D||_s(j)}var qe=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):void 0;function gt(D,j,oe){j>>>=0;for(var Me=j+oe,je=j;D[je]&&!(je>=Me);)++je;if(je-j>16&&D.buffer&&qe)return qe.decode(D.buffer instanceof SharedArrayBuffer?D.slice(j,je):D.subarray(j,je));for(var Be="";j>10,56320|cn&1023)}}return Be}function dt(D,j){return D>>>=0,D?gt(i(),D,j):""}function st(D,j,oe,Me){if(oe>>>=0,!(Me>0))return 0;for(var je=oe,Be=oe+Me-1,ye=0;ye=55296&&Ne<=57343){var Tt=D.charCodeAt(++ye);Ne=65536+((Ne&1023)<<10)|Tt&1023}if(Ne<=127){if(oe>=Be)break;j[oe++>>>0]=Ne}else if(Ne<=2047){if(oe+1>=Be)break;j[oe++>>>0]=192|Ne>>6,j[oe++>>>0]=128|Ne&63}else if(Ne<=65535){if(oe+2>=Be)break;j[oe++>>>0]=224|Ne>>12,j[oe++>>>0]=128|Ne>>6&63,j[oe++>>>0]=128|Ne&63}else{if(oe+3>=Be)break;j[oe++>>>0]=240|Ne>>18,j[oe++>>>0]=128|Ne>>12&63,j[oe++>>>0]=128|Ne>>6&63,j[oe++>>>0]=128|Ne&63}}return j[oe>>>0]=0,oe-je}function it(D,j,oe){return st(D,i(),j,oe)}var He,xt,Ha,zt,un,la,_a,dn,Fa;T&&(He=d.buffer);function ht(D){He=D,d.HEAP8=xt=new Int8Array(D),d.HEAP16=zt=new Int16Array(D),d.HEAP32=la=new Int32Array(D),d.HEAPU8=Ha=new Uint8Array(D),d.HEAPU16=un=new Uint16Array(D),d.HEAPU32=_a=new Uint32Array(D),d.HEAPF32=dn=new Float32Array(D),d.HEAPF64=Fa=new Float64Array(D)}var Da=d.INITIAL_MEMORY||16777216;if(T)ie=d.wasmMemory,He=d.buffer;else if(d.wasmMemory)ie=d.wasmMemory;else if(ie=new WebAssembly.Memory({initial:Da/65536,maximum:65536,shared:!0}),!(ie.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"),I&&H("(on node you may need: --experimental-wasm-threads --experimental-wasm-bulk-memory and/or recent version)"),Error("bad memory");ie&&(He=ie.buffer),Da=He.byteLength,ht(He);var ja,hr=[],Cl=[],jn=[],md=!1;function In(){return ge}function Dr(){if(d.preRun)for(typeof d.preRun=="function"&&(d.preRun=[d.preRun]);d.preRun.length;)pm(d.preRun.shift());gd(hr)}function Yt(){md=!0,!T&&gd(Cl)}function xc(){if(!T){if(d.postRun)for(typeof d.postRun=="function"&&(d.postRun=[d.postRun]);d.postRun.length;)$x(d.postRun.shift());gd(jn)}}function pm(D){hr.unshift(D)}function cm(D){Cl.unshift(D)}function $x(D){jn.unshift(D)}var Or=0,Tl=null,mr=null;function hm(D){Or++,d.monitorRunDependencies&&d.monitorRunDependencies(Or)}function Ac(D){if(Or--,d.monitorRunDependencies&&d.monitorRunDependencies(Or),Or==0&&(Tl!==null&&(clearInterval(Tl),Tl=null),mr)){var j=mr;mr=null,j()}}function _s(D){d.onAbort&&d.onAbort(D),D="Aborted("+D+")",H(D),Ce=!0,Re=1,D+=". Build with -sASSERTIONS for more info.";var j=new WebAssembly.RuntimeError(D);throw m(j),j}var mm="data:application/octet-stream;base64,";function bc(D){return D.startsWith(mm)}function Nl(D){return D.startsWith("file://")}var ma;ma="tfjs-backend-wasm-threaded-simd.wasm",bc(ma)||(ma=M(ma));function vc(D){try{if(D==ma&&ee)return new Uint8Array(ee);if(S)return S(D);throw"both async and sync fetching of the wasm failed"}catch(j){_s(j)}}function fm(){if(!ee&&(b||w)){if(typeof fetch=="function"&&!Nl(ma))return fetch(ma,{credentials:"same-origin"}).then(function(D){if(!D.ok)throw"failed to load wasm binary file at '"+ma+"'";return D.arrayBuffer()}).catch(function(){return vc(ma)});if(E)return new Promise(function(D,j){E(ma,function(oe){D(new Uint8Array(oe))},j)})}return Promise.resolve().then(function(){return vc(ma)})}function gm(){var D={env:_c,wasi_snapshot_preview1:_c};function j(ye,Ne){var Tt=ye.exports;if(d.asm=Tt,Sm(d.asm._emscripten_tls_init),ja=d.asm.__indirect_function_table,cm(d.asm.__wasm_call_ctors),be=Ne,!T){var cn=We.unusedWorkers.length;We.unusedWorkers.forEach(function(gr){We.loadWasmModuleToWorker(gr,function(){--cn||Ac("wasm-instantiate")})})}}T||hm("wasm-instantiate");function oe(ye){j(ye.instance,ye.module)}function Me(ye){return fm().then(function(Ne){return WebAssembly.instantiate(Ne,D)}).then(function(Ne){return Ne}).then(ye,function(Ne){H("failed to asynchronously prepare wasm: "+Ne),_s(Ne)})}function je(){return!ee&&typeof WebAssembly.instantiateStreaming=="function"&&!bc(ma)&&!Nl(ma)&&!I&&typeof fetch=="function"?fetch(ma,{credentials:"same-origin"}).then(function(ye){var Ne=WebAssembly.instantiateStreaming(ye,D);return Ne.then(oe,function(Tt){return H("wasm streaming compile failed: "+Tt),H("falling back to ArrayBuffer instantiation"),Me(oe)})}):Me(oe)}if(d.instantiateWasm)try{var Be=d.instantiateWasm(D,j);return Be}catch(ye){H("Module.instantiateWasm callback failed with error: "+ye),m(ye)}return je().catch(m),{}}var Px,_x,wc={};function Fs(D){this.name="ExitStatus",this.message="Program terminated with exit("+D+")",this.status=D}function ym(D){var j=We.pthreads[D];delete We.pthreads[D],j.terminate(),V2(D),We.runningWorkers.splice(We.runningWorkers.indexOf(j),1),j.pthread_ptr=0}function xm(D){var j=We.pthreads[D];j.postMessage({cmd:"cancel"})}function fd(D){var j=We.pthreads[D];Le(j),We.returnWorkerToPool(j)}function Am(D){var j=We.getNewWorker();if(!j)return 6;We.runningWorkers.push(j),We.pthreads[D.pthread_ptr]=j,j.pthread_ptr=D.pthread_ptr;var oe={cmd:"run",start_routine:D.startRoutine,arg:D.arg,pthread_ptr:D.pthread_ptr};return j.runPthread=()=>{I&&j.ref(),j.postMessage(oe,D.transferList),delete j.runPthread},j.loaded&&j.runPthread(),0}var kc={varargs:void 0,get:function(){kc.varargs+=4;var D=l()[kc.varargs-4>>>2];return D},getStr:function(D){var j=dt(D);return j}};function Ic(D){if(T)return zr(1,1,D);Re=D,In()||(We.terminateAllThreads(),d.onExit&&d.onExit(D),Ce=!0),A(D,new Fs(D))}function bm(D,j){if(Re=D,!j&&T)throw Cc(D),"unwind";Ic(D)}var Sc=bm;function vm(D){if(D instanceof Fs||D=="unwind")return Re;A(1,D)}var We={unusedWorkers:[],runningWorkers:[],tlsInitFunctions:[],pthreads:{},init:function(){T?We.initWorker():We.initMainThread()},initMainThread:function(){for(var D=8;D--;)We.allocateUnusedWorker()},initWorker:function(){ge=!1},setExitStatus:function(D){Re=D},terminateAllThreads:function(){for(var D of Object.values(We.pthreads))We.returnWorkerToPool(D);for(var D of We.unusedWorkers)D.terminate();We.unusedWorkers=[]},returnWorkerToPool:function(D){var j=D.pthread_ptr;delete We.pthreads[j],We.unusedWorkers.push(D),We.runningWorkers.splice(We.runningWorkers.indexOf(D),1),D.pthread_ptr=0,I&&D.unref(),V2(j)},receiveObjectTransfer:function(D){},threadInitTLS:function(){We.tlsInitFunctions.forEach(D=>D())},loadWasmModuleToWorker:function(D,j){D.onmessage=Be=>{var ye=Be.data,Ne=ye.cmd;if(D.pthread_ptr&&(We.currentProxiedOperationCallerThread=D.pthread_ptr),ye.targetThread&&ye.targetThread!=Wc()){var Tt=We.pthreads[ye.targetThread];Tt?Tt.postMessage(ye,ye.transferList):H('Internal error! Worker sent a message "'+Ne+'" to target pthread '+ye.targetThread+", but that thread no longer exists!"),We.currentProxiedOperationCallerThread=void 0;return}Ne==="processProxyingQueue"?yd(ye.queue):Ne==="spawnThread"?Am(ye):Ne==="cleanupThread"?fd(ye.thread):Ne==="killThread"?ym(ye.thread):Ne==="cancelThread"?xm(ye.thread):Ne==="loaded"?(D.loaded=!0,I&&D.unref(),j&&j(D),D.runPthread&&D.runPthread()):Ne==="print"?q("Thread "+ye.threadId+": "+ye.text):Ne==="printErr"?H("Thread "+ye.threadId+": "+ye.text):Ne==="alert"?alert("Thread "+ye.threadId+": "+ye.text):ye.target==="setimmediate"?D.postMessage(ye):Ne==="callHandler"?d[ye.handler](...ye.args):Ne&&H("worker sent an unknown command "+Ne),We.currentProxiedOperationCallerThread=void 0},D.onerror=Be=>{var ye="worker sent an error!";throw H(ye+" "+Be.filename+":"+Be.lineno+": "+Be.message),Be},I&&(D.on("message",function(Be){D.onmessage({data:Be})}),D.on("error",function(Be){D.onerror(Be)}),D.on("detachedExit",function(){}));var oe=[],Me=["onExit","onAbort","print","printErr"];for(var je of Me)d.hasOwnProperty(je)&&oe.push(je);D.postMessage({cmd:"load",handlers:oe,urlOrBlob:d.mainScriptUrlOrBlob||n,wasmMemory:ie,wasmModule:be})},allocateUnusedWorker:function(){var D,j=M("tfjs-backend-wasm-threaded-simd.worker.js");D=new Worker(j),We.unusedWorkers.push(D)},getNewWorker:function(){return We.unusedWorkers.length==0&&(We.allocateUnusedWorker(),We.loadWasmModuleToWorker(We.unusedWorkers[0])),We.unusedWorkers.pop()}};d.PThread=We;function gd(D){for(;D.length>0;)D.shift()(d)}function wm(){var D=Wc(),j=l()[D+52>>>2],oe=l()[D+56>>>2],Me=j-oe;Wx(j,Me),Bc(j)}d.establishStackSpace=wm;function Cc(D){if(T)return zr(2,0,D);try{Sc(D)}catch(j){vm(j)}}var Rl=[];function km(D){var j=Rl[D];return j||(D>=Rl.length&&(Rl.length=D+1),Rl[D]=j=ja.get(D)),j}function Im(D,j){var oe=km(D)(j);In()?We.setExitStatus(oe):Lx(oe)}d.invokeEntryPoint=Im;function Sm(D){We.tlsInitFunctions.push(D)}function Cm(D){Dx(D,!w,1,!b),We.threadInitTLS()}function Tm(D){T?postMessage({cmd:"cleanupThread",thread:D}):fd(D)}function Tc(D,j,oe,Me){return T?zr(3,1,D,j,oe,Me):Nc(D,j,oe,Me)}function Nc(D,j,oe,Me){if(typeof SharedArrayBuffer=="undefined")return H("Current environment does not support SharedArrayBuffer, pthreads are not available!"),6;var je=[],Be=0;if(T&&(je.length===0||Be))return Tc(D,j,oe,Me);if(Be)return Be;var ye={startRoutine:oe,pthread_ptr:D,arg:Me,transferList:je};return T?(ye.cmd="spawnThread",postMessage(ye,je),0):Am(ye)}function Nm(){return 65536}var Rm=!0;function Em(){return Rm}function yd(D){Atomics.store(l(),D>>2,1),Wc()&&zx(D),Atomics.compareExchange(l(),D>>2,1,0)}d.executeNotifiedProxyingQueue=yd;function Mm(D,j,oe,Me){if(D==j)setTimeout(()=>yd(Me));else if(T)postMessage({targetThread:D,cmd:"processProxyingQueue",queue:Me});else{var je=We.pthreads[D];if(!je)return;je.postMessage({cmd:"processProxyingQueue",queue:Me})}return 1}function $m(D,j,oe){return-1}function Pm(){_s("")}function Ds(D){Ds.shown||(Ds.shown={}),Ds.shown[D]||(Ds.shown[D]=1,I&&(D="warning: "+D),H(D))}function _m(){I||w||Ds("Blocking on the main thread is very dangerous, see https://emscripten.org/docs/porting/pthreads.html#blocking-on-the-main-browser-thread")}function Fm(){return Date.now()}function Rc(){return 4294901760}function Dm(){return Rc()}var xd;I?xd=()=>{var D=process.hrtime();return D[0]*1e3+D[1]/1e6}:xd=()=>performance.timeOrigin+performance.now();function Om(D,j,oe){i().copyWithin(D>>>0,j>>>0,j+oe>>>0)}function zm(){return I?aT().cpus().length:navigator.hardwareConcurrency}function Lm(D){var j=U2(),oe=D();return Bc(j),oe}function zr(D,j){var oe=arguments.length-2,Me=arguments;return Lm(()=>{for(var je=oe,Be=Vc(je*8),ye=Be>>3,Ne=0;Ne>>0]=Tt}return Ox(D,je,Be,j)})}var Ad=[];function Wm(D,j,oe){Ad.length=j;for(var Me=oe>>3,je=0;je>>0];var Be=D<0,ye=Be?wc[-D-1]:Km[D];return ye.apply(null,Ad)}function Bm(D){try{return ie.grow(D-He.byteLength+65535>>>16),ht(ie.buffer),1}catch(j){}}function Vm(D){var j=i().length;if(D=D>>>0,D<=j)return!1;var oe=Rc();if(D>oe)return!1;let Me=(Tt,cn)=>Tt+(cn-Tt%cn)%cn;for(var je=1;je<=4;je*=2){var Be=j*(1+.2/je);Be=Math.min(Be,D+100663296);var ye=Math.min(oe,Me(Math.max(D,Be),65536)),Ne=Bm(ye);if(Ne)return!0}return!1}function Um(){throw"unwind"}function Ec(D){return T?zr(4,1,D):52}function Mc(D,j,oe,Me,je){return T?zr(5,1,D,j,oe,Me,je):70}var Gm=[null,[],[]];function Hm(D,j){var oe=Gm[D];j===0||j===10?((D===1?q:H)(gt(oe,0)),oe.length=0):oe.push(j)}function $c(D,j,oe,Me){if(T)return zr(6,1,D,j,oe,Me);for(var je=0,Be=0;Be>>2],Ne=u()[j+4>>>2];j+=8;for(var Tt=0;Tt>>0]);je+=Ne}return u()[Me>>>2]=je,0}function Pc(D){var j=d["_"+D];return j}function jm(D,j){s().set(D,j>>>0)}function qm(D,j,oe,Me,je){var Be={string:hn=>{var Pl=0;if(hn!=null&&hn!==0){var Ux=(hn.length<<2)+1;Pl=Vc(Ux),it(hn,Pl,Ux)}return Pl},array:hn=>{var Pl=Vc(hn.length);return jm(hn,Pl),Pl}};function ye(hn){return j==="string"?dt(hn):j==="boolean"?!!hn:hn}var Ne=Pc(D),Tt=[],cn=0;if(Me)for(var gr=0;grye==="number"||ye==="boolean"),Be=j!=="string";return Be&&je&&!Me?Pc(D):function(){return qm(D,j,oe,arguments,Me)}}We.init();var Km=[null,Ic,Cc,Tc,Ec,Mc,$c],_c={__emscripten_init_main_thread_js:Cm,__emscripten_thread_cleanup:Tm,__pthread_create_js:Nc,_emscripten_default_pthread_stack_size:Nm,_emscripten_get_now_is_monotonic:Em,_emscripten_notify_task_queue:Mm,_emscripten_set_offscreencanvas_size:$m,abort:Pm,emscripten_check_blocking_allowed:_m,emscripten_date_now:Fm,emscripten_get_heap_max:Dm,emscripten_get_now:xd,emscripten_memcpy_big:Om,emscripten_num_logical_cores:zm,emscripten_receive_on_main_thread_js:Wm,emscripten_resize_heap:Vm,emscripten_unwind_to_js_event_loop:Um,exit:Sc,fd_close:Ec,fd_seek:Mc,fd_write:$c,memory:ie||d.wasmMemory},Fx=gm(),Ym=d.___wasm_call_ctors=function(){return(Ym=d.___wasm_call_ctors=d.asm.__wasm_call_ctors).apply(null,arguments)},Zm=d._init=function(){return(Zm=d._init=d.asm.init).apply(null,arguments)},Jm=d._init_with_threads_count=function(){return(Jm=d._init_with_threads_count=d.asm.init_with_threads_count).apply(null,arguments)},Qm=d._get_threads_count=function(){return(Qm=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)},tf=d._dispose_data=function(){return(tf=d._dispose_data=d.asm.dispose_data).apply(null,arguments)},af=d._dispose=function(){return(af=d._dispose=d.asm.dispose).apply(null,arguments)},nf=d._Abs=function(){return(nf=d._Abs=d.asm.Abs).apply(null,arguments)},rf=d._Acos=function(){return(rf=d._Acos=d.asm.Acos).apply(null,arguments)},sf=d._Acosh=function(){return(sf=d._Acosh=d.asm.Acosh).apply(null,arguments)},of=d._Add=function(){return(of=d._Add=d.asm.Add).apply(null,arguments)},lf=d._AddN=function(){return(lf=d._AddN=d.asm.AddN).apply(null,arguments)},uf=d._All=function(){return(uf=d._All=d.asm.All).apply(null,arguments)},df=d._Any=function(){return(df=d._Any=d.asm.Any).apply(null,arguments)},pf=d._ArgMax=function(){return(pf=d._ArgMax=d.asm.ArgMax).apply(null,arguments)},cf=d._ArgMin=function(){return(cf=d._ArgMin=d.asm.ArgMin).apply(null,arguments)},hf=d._Asin=function(){return(hf=d._Asin=d.asm.Asin).apply(null,arguments)},mf=d._Asinh=function(){return(mf=d._Asinh=d.asm.Asinh).apply(null,arguments)},ff=d._Atan=function(){return(ff=d._Atan=d.asm.Atan).apply(null,arguments)},gf=d._Atan2=function(){return(gf=d._Atan2=d.asm.Atan2).apply(null,arguments)},yf=d._Atanh=function(){return(yf=d._Atanh=d.asm.Atanh).apply(null,arguments)},xf=d._AvgPool=function(){return(xf=d._AvgPool=d.asm.AvgPool).apply(null,arguments)},Af=d._AvgPool3D=function(){return(Af=d._AvgPool3D=d.asm.AvgPool3D).apply(null,arguments)},bf=d._AvgPool3DGrad=function(){return(bf=d._AvgPool3DGrad=d.asm.AvgPool3DGrad).apply(null,arguments)},vf=d._AvgPoolGrad=function(){return(vf=d._AvgPoolGrad=d.asm.AvgPoolGrad).apply(null,arguments)},wf=d._BatchMatMul=function(){return(wf=d._BatchMatMul=d.asm.BatchMatMul).apply(null,arguments)},kf=d._Bincount=function(){return(kf=d._Bincount=d.asm.Bincount).apply(null,arguments)},If=d._BitwiseAnd=function(){return(If=d._BitwiseAnd=d.asm.BitwiseAnd).apply(null,arguments)},Sf=d._Ceil=function(){return(Sf=d._Ceil=d.asm.Ceil).apply(null,arguments)},Cf=d._ClipByValue=function(){return(Cf=d._ClipByValue=d.asm.ClipByValue).apply(null,arguments)},Tf=d._Conv2D=function(){return(Tf=d._Conv2D=d.asm.Conv2D).apply(null,arguments)},Nf=d._Conv2DBackpropInput=function(){return(Nf=d._Conv2DBackpropInput=d.asm.Conv2DBackpropInput).apply(null,arguments)},Rf=d._Conv3D=function(){return(Rf=d._Conv3D=d.asm.Conv3D).apply(null,arguments)},Ef=d._Conv3DBackpropFilterV2=function(){return(Ef=d._Conv3DBackpropFilterV2=d.asm.Conv3DBackpropFilterV2).apply(null,arguments)},Mf=d._Conv3DBackpropInputV2=function(){return(Mf=d._Conv3DBackpropInputV2=d.asm.Conv3DBackpropInputV2).apply(null,arguments)},$f=d._Cos=function(){return($f=d._Cos=d.asm.Cos).apply(null,arguments)},Pf=d._Cosh=function(){return(Pf=d._Cosh=d.asm.Cosh).apply(null,arguments)},_f=d._CropAndResize=function(){return(_f=d._CropAndResize=d.asm.CropAndResize).apply(null,arguments)},Ff=d._Cumprod=function(){return(Ff=d._Cumprod=d.asm.Cumprod).apply(null,arguments)},Df=d._Cumsum=function(){return(Df=d._Cumsum=d.asm.Cumsum).apply(null,arguments)},Of=d._DenseBincount=function(){return(Of=d._DenseBincount=d.asm.DenseBincount).apply(null,arguments)},zf=d._DepthToSpace=function(){return(zf=d._DepthToSpace=d.asm.DepthToSpace).apply(null,arguments)},Lf=d._DepthwiseConv2dNative=function(){return(Lf=d._DepthwiseConv2dNative=d.asm.DepthwiseConv2dNative).apply(null,arguments)},Wf=d._Diag=function(){return(Wf=d._Diag=d.asm.Diag).apply(null,arguments)},Bf=d._Dilation2D=function(){return(Bf=d._Dilation2D=d.asm.Dilation2D).apply(null,arguments)},Vf=d._Dilation2DBackpropFilter=function(){return(Vf=d._Dilation2DBackpropFilter=d.asm.Dilation2DBackpropFilter).apply(null,arguments)},Uf=d._Dilation2DBackpropInput=function(){return(Uf=d._Dilation2DBackpropInput=d.asm.Dilation2DBackpropInput).apply(null,arguments)},Gf=d._Elu=function(){return(Gf=d._Elu=d.asm.Elu).apply(null,arguments)},Hf=d._EluGrad=function(){return(Hf=d._EluGrad=d.asm.EluGrad).apply(null,arguments)},jf=d._Equal=function(){return(jf=d._Equal=d.asm.Equal).apply(null,arguments)},qf=d._Erf=function(){return(qf=d._Erf=d.asm.Erf).apply(null,arguments)},Xf=d._Exp=function(){return(Xf=d._Exp=d.asm.Exp).apply(null,arguments)},Kf=d._Expm1=function(){return(Kf=d._Expm1=d.asm.Expm1).apply(null,arguments)},Yf=d._FlipLeftRight=function(){return(Yf=d._FlipLeftRight=d.asm.FlipLeftRight).apply(null,arguments)},Zf=d._Floor=function(){return(Zf=d._Floor=d.asm.Floor).apply(null,arguments)},Jf=d._FloorDiv=function(){return(Jf=d._FloorDiv=d.asm.FloorDiv).apply(null,arguments)},Qf=d._FusedBatchNorm=function(){return(Qf=d._FusedBatchNorm=d.asm.FusedBatchNorm).apply(null,arguments)},e2=d._FusedConv2D=function(){return(e2=d._FusedConv2D=d.asm.FusedConv2D).apply(null,arguments)},t2=d._FusedDepthwiseConv2D=function(){return(t2=d._FusedDepthwiseConv2D=d.asm.FusedDepthwiseConv2D).apply(null,arguments)},a2=d._Gather=function(){return(a2=d._Gather=d.asm.Gather).apply(null,arguments)},n2=d._GatherNd=function(){return(n2=d._GatherNd=d.asm.GatherNd).apply(null,arguments)},r2=d._Greater=function(){return(r2=d._Greater=d.asm.Greater).apply(null,arguments)},s2=d._GreaterEqual=function(){return(s2=d._GreaterEqual=d.asm.GreaterEqual).apply(null,arguments)},i2=d._IsFinite=function(){return(i2=d._IsFinite=d.asm.IsFinite).apply(null,arguments)},o2=d._IsInf=function(){return(o2=d._IsInf=d.asm.IsInf).apply(null,arguments)},l2=d._IsNan=function(){return(l2=d._IsNan=d.asm.IsNan).apply(null,arguments)},u2=d._LRN=function(){return(u2=d._LRN=d.asm.LRN).apply(null,arguments)},d2=d._LRNGrad=function(){return(d2=d._LRNGrad=d.asm.LRNGrad).apply(null,arguments)},p2=d._LeakyRelu=function(){return(p2=d._LeakyRelu=d.asm.LeakyRelu).apply(null,arguments)},c2=d._Less=function(){return(c2=d._Less=d.asm.Less).apply(null,arguments)},h2=d._LessEqual=function(){return(h2=d._LessEqual=d.asm.LessEqual).apply(null,arguments)},m2=d._LinSpace=function(){return(m2=d._LinSpace=d.asm.LinSpace).apply(null,arguments)},f2=d._Log=function(){return(f2=d._Log=d.asm.Log).apply(null,arguments)},g2=d._Log1p=function(){return(g2=d._Log1p=d.asm.Log1p).apply(null,arguments)},y2=d._LogicalAnd=function(){return(y2=d._LogicalAnd=d.asm.LogicalAnd).apply(null,arguments)},x2=d._LogicalNot=function(){return(x2=d._LogicalNot=d.asm.LogicalNot).apply(null,arguments)},A2=d._LogicalOr=function(){return(A2=d._LogicalOr=d.asm.LogicalOr).apply(null,arguments)},b2=d._LogicalXor=function(){return(b2=d._LogicalXor=d.asm.LogicalXor).apply(null,arguments)},v2=d._Max=function(){return(v2=d._Max=d.asm.Max).apply(null,arguments)},w2=d._MaxPool=function(){return(w2=d._MaxPool=d.asm.MaxPool).apply(null,arguments)},k2=d._MaxPool3D=function(){return(k2=d._MaxPool3D=d.asm.MaxPool3D).apply(null,arguments)},I2=d._MaxPool3DGrad=function(){return(I2=d._MaxPool3DGrad=d.asm.MaxPool3DGrad).apply(null,arguments)},S2=d._MaxPoolGrad=function(){return(S2=d._MaxPoolGrad=d.asm.MaxPoolGrad).apply(null,arguments)},C2=d._MaxPoolWithArgmax=function(){return(C2=d._MaxPoolWithArgmax=d.asm.MaxPoolWithArgmax).apply(null,arguments)},T2=d._Maximum=function(){return(T2=d._Maximum=d.asm.Maximum).apply(null,arguments)},N2=d._Mean=function(){return(N2=d._Mean=d.asm.Mean).apply(null,arguments)},R2=d._Min=function(){return(R2=d._Min=d.asm.Min).apply(null,arguments)},E2=d._Minimum=function(){return(E2=d._Minimum=d.asm.Minimum).apply(null,arguments)},M2=d._MirrorPad=function(){return(M2=d._MirrorPad=d.asm.MirrorPad).apply(null,arguments)},$2=d._Mod=function(){return($2=d._Mod=d.asm.Mod).apply(null,arguments)},P2=d._Multinomial=function(){return(P2=d._Multinomial=d.asm.Multinomial).apply(null,arguments)},_2=d._Multiply=function(){return(_2=d._Multiply=d.asm.Multiply).apply(null,arguments)},F2=d._Neg=function(){return(F2=d._Neg=d.asm.Neg).apply(null,arguments)},D2=d._NonMaxSuppressionV3=function(){return(D2=d._NonMaxSuppressionV3=d.asm.NonMaxSuppressionV3).apply(null,arguments)},O2=d._NonMaxSuppressionV4=function(){return(O2=d._NonMaxSuppressionV4=d.asm.NonMaxSuppressionV4).apply(null,arguments)},Fc=d._NonMaxSuppressionV5=function(){return(Fc=d._NonMaxSuppressionV5=d.asm.NonMaxSuppressionV5).apply(null,arguments)},Dc=d._NotEqual=function(){return(Dc=d._NotEqual=d.asm.NotEqual).apply(null,arguments)},bd=d._OneHot=function(){return(bd=d._OneHot=d.asm.OneHot).apply(null,arguments)},z2=d._PadV2=function(){return(z2=d._PadV2=d.asm.PadV2).apply(null,arguments)},L2=d._Pow=function(){return(L2=d._Pow=d.asm.Pow).apply(null,arguments)},El=d._Prelu=function(){return(El=d._Prelu=d.asm.Prelu).apply(null,arguments)},Oc=d._Prod=function(){return(Oc=d._Prod=d.asm.Prod).apply(null,arguments)},Ml=d._RealDiv=function(){return(Ml=d._RealDiv=d.asm.RealDiv).apply(null,arguments)},$l=d._Reciprocal=function(){return($l=d._Reciprocal=d.asm.Reciprocal).apply(null,arguments)},W2=d._Relu=function(){return(W2=d._Relu=d.asm.Relu).apply(null,arguments)},Y=d._Relu6=function(){return(Y=d._Relu6=d.asm.Relu6).apply(null,arguments)},se=d._ResizeBilinear=function(){return(se=d._ResizeBilinear=d.asm.ResizeBilinear).apply(null,arguments)},Ee=d._ResizeBilinearGrad=function(){return(Ee=d._ResizeBilinearGrad=d.asm.ResizeBilinearGrad).apply(null,arguments)},et=d._ResizeNearestNeighbor=function(){return(et=d._ResizeNearestNeighbor=d.asm.ResizeNearestNeighbor).apply(null,arguments)},wt=d._ResizeNearestNeighborGrad=function(){return(wt=d._ResizeNearestNeighborGrad=d.asm.ResizeNearestNeighborGrad).apply(null,arguments)},kt=d._Reverse=function(){return(kt=d._Reverse=d.asm.Reverse).apply(null,arguments)},Je=d._RotateWithOffset=function(){return(Je=d._RotateWithOffset=d.asm.RotateWithOffset).apply(null,arguments)},Ye=d._Round=function(){return(Ye=d._Round=d.asm.Round).apply(null,arguments)},Lt=d._Rsqrt=function(){return(Lt=d._Rsqrt=d.asm.Rsqrt).apply(null,arguments)},pn=d._ScatterNd=function(){return(pn=d._ScatterNd=d.asm.ScatterNd).apply(null,arguments)},fr=d._SearchSorted=function(){return(fr=d._SearchSorted=d.asm.SearchSorted).apply(null,arguments)},zc=d._SelectV2=function(){return(zc=d._SelectV2=d.asm.SelectV2).apply(null,arguments)},vd=d._Selu=function(){return(vd=d._Selu=d.asm.Selu).apply(null,arguments)},B2=d._Sigmoid=function(){return(B2=d._Sigmoid=d.asm.Sigmoid).apply(null,arguments)},Oa=d._Sign=function(){return(Oa=d._Sign=d.asm.Sign).apply(null,arguments)},Lr=d._Sin=function(){return(Lr=d._Sin=d.asm.Sin).apply(null,arguments)},Lc=d._Sinh=function(){return(Lc=d._Sinh=d.asm.Sinh).apply(null,arguments)},JS=d._Softmax=function(){return(JS=d._Softmax=d.asm.Softmax).apply(null,arguments)},QS=d._Softplus=function(){return(QS=d._Softplus=d.asm.Softplus).apply(null,arguments)},eC=d._SparseFillEmptyRows=function(){return(eC=d._SparseFillEmptyRows=d.asm.SparseFillEmptyRows).apply(null,arguments)},tC=d._SparseReshape=function(){return(tC=d._SparseReshape=d.asm.SparseReshape).apply(null,arguments)},aC=d._SparseSegmentReduction=function(){return(aC=d._SparseSegmentReduction=d.asm.SparseSegmentReduction).apply(null,arguments)},nC=d._SparseToDense=function(){return(nC=d._SparseToDense=d.asm.SparseToDense).apply(null,arguments)},rC=d._Sqrt=function(){return(rC=d._Sqrt=d.asm.Sqrt).apply(null,arguments)},sC=d._Square=function(){return(sC=d._Square=d.asm.Square).apply(null,arguments)},iC=d._SquaredDifference=function(){return(iC=d._SquaredDifference=d.asm.SquaredDifference).apply(null,arguments)},oC=d._Step=function(){return(oC=d._Step=d.asm.Step).apply(null,arguments)},lC=d._StridedSlice=function(){return(lC=d._StridedSlice=d.asm.StridedSlice).apply(null,arguments)},uC=d._Sub=function(){return(uC=d._Sub=d.asm.Sub).apply(null,arguments)},dC=d._Sum=function(){return(dC=d._Sum=d.asm.Sum).apply(null,arguments)},pC=d._Tan=function(){return(pC=d._Tan=d.asm.Tan).apply(null,arguments)},cC=d._Tanh=function(){return(cC=d._Tanh=d.asm.Tanh).apply(null,arguments)},hC=d._TensorScatterUpdate=function(){return(hC=d._TensorScatterUpdate=d.asm.TensorScatterUpdate).apply(null,arguments)},mC=d._Tile=function(){return(mC=d._Tile=d.asm.Tile).apply(null,arguments)},fC=d._TopK=function(){return(fC=d._TopK=d.asm.TopK).apply(null,arguments)},gC=d._Transform=function(){return(gC=d._Transform=d.asm.Transform).apply(null,arguments)},yC=d._Transpose=function(){return(yC=d._Transpose=d.asm.Transpose).apply(null,arguments)},xC=d.__FusedMatMul=function(){return(xC=d.__FusedMatMul=d.asm._FusedMatMul).apply(null,arguments)},AC=d._malloc=function(){return(AC=d._malloc=d.asm.malloc).apply(null,arguments)},bC=d._free=function(){return(bC=d._free=d.asm.free).apply(null,arguments)},vC=d.__emscripten_tls_init=function(){return(vC=d.__emscripten_tls_init=d.asm._emscripten_tls_init).apply(null,arguments)},Wc=d._pthread_self=function(){return(Wc=d._pthread_self=d.asm.pthread_self).apply(null,arguments)},wC=d.___errno_location=function(){return(wC=d.___errno_location=d.asm.__errno_location).apply(null,arguments)},Dx=d.__emscripten_thread_init=function(){return(Dx=d.__emscripten_thread_init=d.asm._emscripten_thread_init).apply(null,arguments)},kC=d.__emscripten_thread_crashed=function(){return(kC=d.__emscripten_thread_crashed=d.asm._emscripten_thread_crashed).apply(null,arguments)},IC=d._emscripten_main_thread_process_queued_calls=function(){return(IC=d._emscripten_main_thread_process_queued_calls=d.asm.emscripten_main_thread_process_queued_calls).apply(null,arguments)},SC=d._emscripten_main_browser_thread_id=function(){return(SC=d._emscripten_main_browser_thread_id=d.asm.emscripten_main_browser_thread_id).apply(null,arguments)},Ox=d._emscripten_run_in_main_runtime_thread_js=function(){return(Ox=d._emscripten_run_in_main_runtime_thread_js=d.asm.emscripten_run_in_main_runtime_thread_js).apply(null,arguments)},CC=d._emscripten_dispatch_to_thread_=function(){return(CC=d._emscripten_dispatch_to_thread_=d.asm.emscripten_dispatch_to_thread_).apply(null,arguments)},zx=d.__emscripten_proxy_execute_task_queue=function(){return(zx=d.__emscripten_proxy_execute_task_queue=d.asm._emscripten_proxy_execute_task_queue).apply(null,arguments)},V2=d.__emscripten_thread_free_data=function(){return(V2=d.__emscripten_thread_free_data=d.asm._emscripten_thread_free_data).apply(null,arguments)},Lx=d.__emscripten_thread_exit=function(){return(Lx=d.__emscripten_thread_exit=d.asm._emscripten_thread_exit).apply(null,arguments)},Wx=d._emscripten_stack_set_limits=function(){return(Wx=d._emscripten_stack_set_limits=d.asm.emscripten_stack_set_limits).apply(null,arguments)},U2=d.stackSave=function(){return(U2=d.stackSave=d.asm.stackSave).apply(null,arguments)},Bc=d.stackRestore=function(){return(Bc=d.stackRestore=d.asm.stackRestore).apply(null,arguments)},Vc=d.stackAlloc=function(){return(Vc=d.stackAlloc=d.asm.stackAlloc).apply(null,arguments)},TC=d.dynCall_iijjiiii=function(){return(TC=d.dynCall_iijjiiii=d.asm.dynCall_iijjiiii).apply(null,arguments)},NC=d.dynCall_jiji=function(){return(NC=d.dynCall_jiji=d.asm.dynCall_jiji).apply(null,arguments)};d.keepRuntimeAlive=In,d.wasmMemory=ie,d.cwrap=Xm,d.ExitStatus=Fs,d.PThread=We;var Uc;mr=function D(){Uc||Bx(),Uc||(mr=D)};function Bx(D){if(D=D||y,Or>0)return;if(T){h(d),Yt(),startWorker(d);return}if(Dr(),Or>0)return;function j(){Uc||(Uc=!0,d.calledRun=!0,!Ce&&(Yt(),h(d),d.onRuntimeInitialized&&d.onRuntimeInitialized(),xc()))}d.setStatus?(d.setStatus("Running..."),setTimeout(function(){setTimeout(function(){d.setStatus("")},1),j()},1)):j()}if(d.preInit)for(typeof d.preInit=="function"&&(d.preInit=[d.preInit]);d.preInit.length>0;)d.preInit.pop()();Bx();var Gc;f&&(Gc={uncaughtException:process.listeners("uncaughtException").filter(function(D){return!f.uncaughtException.indexOf(D)>-1}),unhandledRejection:process.listeners("unhandledRejection").filter(function(D){return!f.unhandledRejection.indexOf(D)>-1})});var Hc;if(typeof WasmBackendModule!="undefined")Hc=WasmBackendModule;else if(typeof r!="undefined")Hc=r;else throw new Error("Could not find wasm module in post.js");if(Gc){var RC=Hc._dispose;Hc._dispose=function(){RC(),Gc.uncaughtException.forEach(function(D){process.removeListener("uncaughtException",D)}),Gc.unhandledRejection.forEach(function(D){process.removeListener("unhandledRejection",D)})}}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)}),rT=Xt((e,t)=>{"use strict";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")+"//# sourceURL="+f)},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.startWorker=instance=>{Module=instance;postMessage({"cmd":"loaded"})};self.onmessage=e=>{try{if(e.data.cmd==="load"){Module["wasmModule"]=e.data.wasmModule;for(const handler of e.data.handlers){Module[handler]=function(){postMessage({cmd:"callHandler",handler:handler,args:[...arguments]})}}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)}else if(e.data.cmd==="run"){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}};`}),sT=Xt((e,t)=>{"use strict";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(Y,se){i=Y,o=se});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=(Y,se)=>{throw se},h=typeof window=="object",m=typeof importScripts=="function",f=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string",g="";function y(Y){return s.locateFile?s.locateFile(Y,g):g+Y}var x,A,b,w;function I(Y){Y instanceof Tl||$("exiting due to exception: "+Y)}if(f){var T=fA(),N=gA();m?g=N.dirname(g)+"/":g=__dirname+"/",x=(Y,se)=>(Y=Dr(Y)?new URL(Y):N.normalize(Y),T.readFileSync(Y,se?void 0:"utf8")),b=Y=>{var se=x(Y,!0);return se.buffer||(se=new Uint8Array(se)),se},A=(Y,se,Ee)=>{Y=Dr(Y)?new URL(Y):N.normalize(Y),T.readFile(Y,function(et,wt){et?Ee(et):se(wt.buffer)})},process.argv.length>1&&(c=process.argv[1].replace(/\\/g,"/")),p=process.argv.slice(2),process.on("uncaughtException",function(Y){if(!(Y instanceof Tl))throw Y}),process.on("unhandledRejection",function(Y){throw Y}),d=(Y,se)=>{if(Ha())throw process.exitCode=Y,se;I(se),process.exit(Y)},s.inspect=function(){return"[Emscripten Module object]"}}else(h||m)&&(m?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="",x=Y=>{var se=new XMLHttpRequest;return se.open("GET",Y,!1),se.send(null),se.responseText},m&&(b=Y=>{var se=new XMLHttpRequest;return se.open("GET",Y,!1),se.responseType="arraybuffer",se.send(null),new Uint8Array(se.response)}),A=(Y,se,Ee)=>{var et=new XMLHttpRequest;et.open("GET",Y,!0),et.responseType="arraybuffer",et.onload=()=>{if(et.status==200||et.status==0&&et.response){se(et.response);return}Ee()},et.onerror=Ee,et.send(null)},w=Y=>document.title=Y);var M=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 E=4,S;s.wasmBinary&&(S=s.wasmBinary);var _=s.noExitRuntime||!0;typeof WebAssembly!="object"&&jn("no native wasm support detected");var O,W=!1,P;function U(Y,se){Y||jn(se)}var G=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):void 0;function q(Y,se,Ee){se>>>=0;for(var et=se+Ee,wt=se;Y[wt]&&!(wt>=et);)++wt;if(wt-se>16&&Y.buffer&&G)return G.decode(Y.subarray(se,wt));for(var kt="";se>10,56320|pn&1023)}}return kt}function H(Y,se){return Y>>>=0,Y?q(ee,Y,se):""}function V(Y,se,Ee,et){if(Ee>>>=0,!(et>0))return 0;for(var wt=Ee,kt=Ee+et-1,Je=0;Je=55296&&Ye<=57343){var Lt=Y.charCodeAt(++Je);Ye=65536+((Ye&1023)<<10)|Lt&1023}if(Ye<=127){if(Ee>=kt)break;se[Ee++>>>0]=Ye}else if(Ye<=2047){if(Ee+1>=kt)break;se[Ee++>>>0]=192|Ye>>6,se[Ee++>>>0]=128|Ye&63}else if(Ye<=65535){if(Ee+2>=kt)break;se[Ee++>>>0]=224|Ye>>12,se[Ee++>>>0]=128|Ye>>6&63,se[Ee++>>>0]=128|Ye&63}else{if(Ee+3>=kt)break;se[Ee++>>>0]=240|Ye>>18,se[Ee++>>>0]=128|Ye>>12&63,se[Ee++>>>0]=128|Ye>>6&63,se[Ee++>>>0]=128|Ye&63}}return se[Ee>>>0]=0,Ee-wt}function Z(Y,se,Ee){return V(Y,ee,se,Ee)}var X,re,ee,ge,ie,be,Ce,Re,Le;function qe(Y){X=Y,s.HEAP8=re=new Int8Array(Y),s.HEAP16=ge=new Int16Array(Y),s.HEAP32=be=new Int32Array(Y),s.HEAPU8=ee=new Uint8Array(Y),s.HEAPU16=ie=new Uint16Array(Y),s.HEAPU32=Ce=new Uint32Array(Y),s.HEAPF32=Re=new Float32Array(Y),s.HEAPF64=Le=new Float64Array(Y)}var gt=s.INITIAL_MEMORY||16777216,dt,st=[],it=[],He=[],xt=!1;function Ha(){return _}function zt(){if(s.preRun)for(typeof s.preRun=="function"&&(s.preRun=[s.preRun]);s.preRun.length;)_a(s.preRun.shift());mr(st)}function un(){xt=!0,mr(it)}function la(){if(s.postRun)for(typeof s.postRun=="function"&&(s.postRun=[s.postRun]);s.postRun.length;)Fa(s.postRun.shift());mr(He)}function _a(Y){st.unshift(Y)}function dn(Y){it.unshift(Y)}function Fa(Y){He.unshift(Y)}var ht=0,Da=null,ja=null;function hr(Y){ht++,s.monitorRunDependencies&&s.monitorRunDependencies(ht)}function Cl(Y){if(ht--,s.monitorRunDependencies&&s.monitorRunDependencies(ht),ht==0&&(Da!==null&&(clearInterval(Da),Da=null),ja)){var se=ja;ja=null,se()}}function jn(Y){s.onAbort&&s.onAbort(Y),Y="Aborted("+Y+")",$(Y),W=!0,P=1,Y+=". Build with -sASSERTIONS for more info.";var se=new WebAssembly.RuntimeError(Y);throw o(se),se}var md="data:application/octet-stream;base64,";function In(Y){return Y.startsWith(md)}function Dr(Y){return Y.startsWith("file://")}var Yt;Yt="tfjs-backend-wasm.wasm",In(Yt)||(Yt=y(Yt));function xc(Y){try{if(Y==Yt&&S)return new Uint8Array(S);if(b)return b(Y);throw"both async and sync fetching of the wasm failed"}catch(se){jn(se)}}function pm(){if(!S&&(h||m)){if(typeof fetch=="function"&&!Dr(Yt))return fetch(Yt,{credentials:"same-origin"}).then(function(Y){if(!Y.ok)throw"failed to load wasm binary file at '"+Yt+"'";return Y.arrayBuffer()}).catch(function(){return xc(Yt)});if(A)return new Promise(function(Y,se){A(Yt,function(Ee){Y(new Uint8Array(Ee))},se)})}return Promise.resolve().then(function(){return xc(Yt)})}function cm(){var Y={env:fd,wasi_snapshot_preview1:fd};function se(Je,Ye){var Lt=Je.exports;s.asm=Lt,O=s.asm.memory,qe(O.buffer),dt=s.asm.__indirect_function_table,dn(s.asm.__wasm_call_ctors),Cl("wasm-instantiate")}hr("wasm-instantiate");function Ee(Je){se(Je.instance)}function et(Je){return pm().then(function(Ye){return WebAssembly.instantiate(Ye,Y)}).then(function(Ye){return Ye}).then(Je,function(Ye){$("failed to asynchronously prepare wasm: "+Ye),jn(Ye)})}function wt(){return!S&&typeof WebAssembly.instantiateStreaming=="function"&&!In(Yt)&&!Dr(Yt)&&!f&&typeof fetch=="function"?fetch(Yt,{credentials:"same-origin"}).then(function(Je){var Ye=WebAssembly.instantiateStreaming(Je,Y);return Ye.then(Ee,function(Lt){return $("wasm streaming compile failed: "+Lt),$("falling back to ArrayBuffer instantiation"),et(Ee)})}):et(Ee)}if(s.instantiateWasm)try{var kt=s.instantiateWasm(Y,se);return kt}catch(Je){$("Module.instantiateWasm callback failed with error: "+Je),o(Je)}return wt().catch(o),{}}var $x,Or;function Tl(Y){this.name="ExitStatus",this.message="Program terminated with exit("+Y+")",this.status=Y}function mr(Y){for(;Y.length>0;)Y.shift()(s)}function hm(){jn("")}function Ac(){return 4294901760}function _s(){return Ac()}function mm(Y,se,Ee){ee.copyWithin(Y>>>0,se>>>0,se+Ee>>>0)}function bc(Y){try{return O.grow(Y-X.byteLength+65535>>>16),qe(O.buffer),1}catch(se){}}function Nl(Y){var se=ee.length;Y=Y>>>0;var Ee=Ac();if(Y>Ee)return!1;let et=(Lt,pn)=>Lt+(pn-Lt%pn)%pn;for(var wt=1;wt<=4;wt*=2){var kt=se*(1+.2/wt);kt=Math.min(kt,Y+100663296);var Je=Math.min(Ee,et(Math.max(Y,kt),65536)),Ye=bc(Je);if(Ye)return!0}return!1}var ma={varargs:void 0,get:function(){ma.varargs+=4;var Y=be[ma.varargs-4>>>2];return Y},getStr:function(Y){var se=H(Y);return se}};function vc(Y){return 52}function fm(Y,se,Ee,et,wt){return 70}var gm=[null,[],[]];function Px(Y,se){var Ee=gm[Y];se===0||se===10?((Y===1?M:$)(q(Ee,0)),Ee.length=0):Ee.push(se)}function _x(Y,se,Ee,et){for(var wt=0,kt=0;kt>>2],Ye=Ce[se+4>>>2];se+=8;for(var Lt=0;Lt>>0]);wt+=Ye}return Ce[et>>>2]=wt,0}function wc(Y){var se=s["_"+Y];return se}function Fs(Y,se){re.set(Y,se>>>0)}function ym(Y,se,Ee,et,wt){var kt={string:Oa=>{var Lr=0;if(Oa!=null&&Oa!==0){var Lc=(Oa.length<<2)+1;Lr=bd(Lc),Z(Oa,Lr,Lc)}return Lr},array:Oa=>{var Lr=bd(Oa.length);return Fs(Oa,Lr),Lr}};function Je(Oa){return se==="string"?H(Oa):se==="boolean"?!!Oa:Oa}var Ye=wc(Y),Lt=[],pn=0;if(et)for(var fr=0;frJe==="number"||Je==="boolean"),kt=se!=="string";return kt&&wt&&!et?wc(Y):function(){return ym(Y,se,Ee,arguments,et)}}var fd={abort:hm,emscripten_get_heap_max:_s,emscripten_memcpy_big:mm,emscripten_resize_heap:Nl,fd_close:vc,fd_seek:fm,fd_write:_x},Am=cm(),kc=s.___wasm_call_ctors=function(){return(kc=s.___wasm_call_ctors=s.asm.__wasm_call_ctors).apply(null,arguments)},Ic=s._init=function(){return(Ic=s._init=s.asm.init).apply(null,arguments)},bm=s._init_with_threads_count=function(){return(bm=s._init_with_threads_count=s.asm.init_with_threads_count).apply(null,arguments)},Sc=s._get_threads_count=function(){return(Sc=s._get_threads_count=s.asm.get_threads_count).apply(null,arguments)},vm=s._register_tensor=function(){return(vm=s._register_tensor=s.asm.register_tensor).apply(null,arguments)},We=s._dispose_data=function(){return(We=s._dispose_data=s.asm.dispose_data).apply(null,arguments)},gd=s._dispose=function(){return(gd=s._dispose=s.asm.dispose).apply(null,arguments)},wm=s._Abs=function(){return(wm=s._Abs=s.asm.Abs).apply(null,arguments)},Cc=s._Acos=function(){return(Cc=s._Acos=s.asm.Acos).apply(null,arguments)},Rl=s._Acosh=function(){return(Rl=s._Acosh=s.asm.Acosh).apply(null,arguments)},km=s._Add=function(){return(km=s._Add=s.asm.Add).apply(null,arguments)},Im=s._AddN=function(){return(Im=s._AddN=s.asm.AddN).apply(null,arguments)},Sm=s._All=function(){return(Sm=s._All=s.asm.All).apply(null,arguments)},Cm=s._Any=function(){return(Cm=s._Any=s.asm.Any).apply(null,arguments)},Tm=s._ArgMax=function(){return(Tm=s._ArgMax=s.asm.ArgMax).apply(null,arguments)},Tc=s._ArgMin=function(){return(Tc=s._ArgMin=s.asm.ArgMin).apply(null,arguments)},Nc=s._Asin=function(){return(Nc=s._Asin=s.asm.Asin).apply(null,arguments)},Nm=s._Asinh=function(){return(Nm=s._Asinh=s.asm.Asinh).apply(null,arguments)},Rm=s._Atan=function(){return(Rm=s._Atan=s.asm.Atan).apply(null,arguments)},Em=s._Atan2=function(){return(Em=s._Atan2=s.asm.Atan2).apply(null,arguments)},yd=s._Atanh=function(){return(yd=s._Atanh=s.asm.Atanh).apply(null,arguments)},Mm=s._AvgPool=function(){return(Mm=s._AvgPool=s.asm.AvgPool).apply(null,arguments)},$m=s._AvgPool3D=function(){return($m=s._AvgPool3D=s.asm.AvgPool3D).apply(null,arguments)},Pm=s._AvgPool3DGrad=function(){return(Pm=s._AvgPool3DGrad=s.asm.AvgPool3DGrad).apply(null,arguments)},Ds=s._AvgPoolGrad=function(){return(Ds=s._AvgPoolGrad=s.asm.AvgPoolGrad).apply(null,arguments)},_m=s._BatchMatMul=function(){return(_m=s._BatchMatMul=s.asm.BatchMatMul).apply(null,arguments)},Fm=s._Bincount=function(){return(Fm=s._Bincount=s.asm.Bincount).apply(null,arguments)},Rc=s._BitwiseAnd=function(){return(Rc=s._BitwiseAnd=s.asm.BitwiseAnd).apply(null,arguments)},Dm=s._Ceil=function(){return(Dm=s._Ceil=s.asm.Ceil).apply(null,arguments)},xd=s._ClipByValue=function(){return(xd=s._ClipByValue=s.asm.ClipByValue).apply(null,arguments)},Om=s._Conv2D=function(){return(Om=s._Conv2D=s.asm.Conv2D).apply(null,arguments)},zm=s._Conv2DBackpropInput=function(){return(zm=s._Conv2DBackpropInput=s.asm.Conv2DBackpropInput).apply(null,arguments)},Lm=s._Conv3D=function(){return(Lm=s._Conv3D=s.asm.Conv3D).apply(null,arguments)},zr=s._Conv3DBackpropFilterV2=function(){return(zr=s._Conv3DBackpropFilterV2=s.asm.Conv3DBackpropFilterV2).apply(null,arguments)},Ad=s._Conv3DBackpropInputV2=function(){return(Ad=s._Conv3DBackpropInputV2=s.asm.Conv3DBackpropInputV2).apply(null,arguments)},Wm=s._Cos=function(){return(Wm=s._Cos=s.asm.Cos).apply(null,arguments)},Bm=s._Cosh=function(){return(Bm=s._Cosh=s.asm.Cosh).apply(null,arguments)},Vm=s._CropAndResize=function(){return(Vm=s._CropAndResize=s.asm.CropAndResize).apply(null,arguments)},Um=s._Cumprod=function(){return(Um=s._Cumprod=s.asm.Cumprod).apply(null,arguments)},Ec=s._Cumsum=function(){return(Ec=s._Cumsum=s.asm.Cumsum).apply(null,arguments)},Mc=s._DenseBincount=function(){return(Mc=s._DenseBincount=s.asm.DenseBincount).apply(null,arguments)},Gm=s._DepthToSpace=function(){return(Gm=s._DepthToSpace=s.asm.DepthToSpace).apply(null,arguments)},Hm=s._DepthwiseConv2dNative=function(){return(Hm=s._DepthwiseConv2dNative=s.asm.DepthwiseConv2dNative).apply(null,arguments)},$c=s._Diag=function(){return($c=s._Diag=s.asm.Diag).apply(null,arguments)},Pc=s._Dilation2D=function(){return(Pc=s._Dilation2D=s.asm.Dilation2D).apply(null,arguments)},jm=s._Dilation2DBackpropFilter=function(){return(jm=s._Dilation2DBackpropFilter=s.asm.Dilation2DBackpropFilter).apply(null,arguments)},qm=s._Dilation2DBackpropInput=function(){return(qm=s._Dilation2DBackpropInput=s.asm.Dilation2DBackpropInput).apply(null,arguments)},Xm=s._Elu=function(){return(Xm=s._Elu=s.asm.Elu).apply(null,arguments)},Km=s._EluGrad=function(){return(Km=s._EluGrad=s.asm.EluGrad).apply(null,arguments)},_c=s._Equal=function(){return(_c=s._Equal=s.asm.Equal).apply(null,arguments)},Fx=s._Erf=function(){return(Fx=s._Erf=s.asm.Erf).apply(null,arguments)},Ym=s._Exp=function(){return(Ym=s._Exp=s.asm.Exp).apply(null,arguments)},Zm=s._Expm1=function(){return(Zm=s._Expm1=s.asm.Expm1).apply(null,arguments)},Jm=s._FlipLeftRight=function(){return(Jm=s._FlipLeftRight=s.asm.FlipLeftRight).apply(null,arguments)},Qm=s._Floor=function(){return(Qm=s._Floor=s.asm.Floor).apply(null,arguments)},ef=s._FloorDiv=function(){return(ef=s._FloorDiv=s.asm.FloorDiv).apply(null,arguments)},tf=s._FusedBatchNorm=function(){return(tf=s._FusedBatchNorm=s.asm.FusedBatchNorm).apply(null,arguments)},af=s._FusedConv2D=function(){return(af=s._FusedConv2D=s.asm.FusedConv2D).apply(null,arguments)},nf=s._FusedDepthwiseConv2D=function(){return(nf=s._FusedDepthwiseConv2D=s.asm.FusedDepthwiseConv2D).apply(null,arguments)},rf=s._Gather=function(){return(rf=s._Gather=s.asm.Gather).apply(null,arguments)},sf=s._GatherNd=function(){return(sf=s._GatherNd=s.asm.GatherNd).apply(null,arguments)},of=s._Greater=function(){return(of=s._Greater=s.asm.Greater).apply(null,arguments)},lf=s._GreaterEqual=function(){return(lf=s._GreaterEqual=s.asm.GreaterEqual).apply(null,arguments)},uf=s._IsFinite=function(){return(uf=s._IsFinite=s.asm.IsFinite).apply(null,arguments)},df=s._IsInf=function(){return(df=s._IsInf=s.asm.IsInf).apply(null,arguments)},pf=s._IsNan=function(){return(pf=s._IsNan=s.asm.IsNan).apply(null,arguments)},cf=s._LRN=function(){return(cf=s._LRN=s.asm.LRN).apply(null,arguments)},hf=s._LRNGrad=function(){return(hf=s._LRNGrad=s.asm.LRNGrad).apply(null,arguments)},mf=s._LeakyRelu=function(){return(mf=s._LeakyRelu=s.asm.LeakyRelu).apply(null,arguments)},ff=s._Less=function(){return(ff=s._Less=s.asm.Less).apply(null,arguments)},gf=s._LessEqual=function(){return(gf=s._LessEqual=s.asm.LessEqual).apply(null,arguments)},yf=s._LinSpace=function(){return(yf=s._LinSpace=s.asm.LinSpace).apply(null,arguments)},xf=s._Log=function(){return(xf=s._Log=s.asm.Log).apply(null,arguments)},Af=s._Log1p=function(){return(Af=s._Log1p=s.asm.Log1p).apply(null,arguments)},bf=s._LogicalAnd=function(){return(bf=s._LogicalAnd=s.asm.LogicalAnd).apply(null,arguments)},vf=s._LogicalNot=function(){return(vf=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)},Sf=s._MaxPool=function(){return(Sf=s._MaxPool=s.asm.MaxPool).apply(null,arguments)},Cf=s._MaxPool3D=function(){return(Cf=s._MaxPool3D=s.asm.MaxPool3D).apply(null,arguments)},Tf=s._MaxPool3DGrad=function(){return(Tf=s._MaxPool3DGrad=s.asm.MaxPool3DGrad).apply(null,arguments)},Nf=s._MaxPoolGrad=function(){return(Nf=s._MaxPoolGrad=s.asm.MaxPoolGrad).apply(null,arguments)},Rf=s._MaxPoolWithArgmax=function(){return(Rf=s._MaxPoolWithArgmax=s.asm.MaxPoolWithArgmax).apply(null,arguments)},Ef=s._Maximum=function(){return(Ef=s._Maximum=s.asm.Maximum).apply(null,arguments)},Mf=s._Mean=function(){return(Mf=s._Mean=s.asm.Mean).apply(null,arguments)},$f=s._Min=function(){return($f=s._Min=s.asm.Min).apply(null,arguments)},Pf=s._Minimum=function(){return(Pf=s._Minimum=s.asm.Minimum).apply(null,arguments)},_f=s._MirrorPad=function(){return(_f=s._MirrorPad=s.asm.MirrorPad).apply(null,arguments)},Ff=s._Mod=function(){return(Ff=s._Mod=s.asm.Mod).apply(null,arguments)},Df=s._Multinomial=function(){return(Df=s._Multinomial=s.asm.Multinomial).apply(null,arguments)},Of=s._Multiply=function(){return(Of=s._Multiply=s.asm.Multiply).apply(null,arguments)},zf=s._Neg=function(){return(zf=s._Neg=s.asm.Neg).apply(null,arguments)},Lf=s._NonMaxSuppressionV3=function(){return(Lf=s._NonMaxSuppressionV3=s.asm.NonMaxSuppressionV3).apply(null,arguments)},Wf=s._NonMaxSuppressionV4=function(){return(Wf=s._NonMaxSuppressionV4=s.asm.NonMaxSuppressionV4).apply(null,arguments)},Bf=s._NonMaxSuppressionV5=function(){return(Bf=s._NonMaxSuppressionV5=s.asm.NonMaxSuppressionV5).apply(null,arguments)},Vf=s._NotEqual=function(){return(Vf=s._NotEqual=s.asm.NotEqual).apply(null,arguments)},Uf=s._OneHot=function(){return(Uf=s._OneHot=s.asm.OneHot).apply(null,arguments)},Gf=s._PadV2=function(){return(Gf=s._PadV2=s.asm.PadV2).apply(null,arguments)},Hf=s._Pow=function(){return(Hf=s._Pow=s.asm.Pow).apply(null,arguments)},jf=s._Prelu=function(){return(jf=s._Prelu=s.asm.Prelu).apply(null,arguments)},qf=s._Prod=function(){return(qf=s._Prod=s.asm.Prod).apply(null,arguments)},Xf=s._RealDiv=function(){return(Xf=s._RealDiv=s.asm.RealDiv).apply(null,arguments)},Kf=s._Reciprocal=function(){return(Kf=s._Reciprocal=s.asm.Reciprocal).apply(null,arguments)},Yf=s._Relu=function(){return(Yf=s._Relu=s.asm.Relu).apply(null,arguments)},Zf=s._Relu6=function(){return(Zf=s._Relu6=s.asm.Relu6).apply(null,arguments)},Jf=s._ResizeBilinear=function(){return(Jf=s._ResizeBilinear=s.asm.ResizeBilinear).apply(null,arguments)},Qf=s._ResizeBilinearGrad=function(){return(Qf=s._ResizeBilinearGrad=s.asm.ResizeBilinearGrad).apply(null,arguments)},e2=s._ResizeNearestNeighbor=function(){return(e2=s._ResizeNearestNeighbor=s.asm.ResizeNearestNeighbor).apply(null,arguments)},t2=s._ResizeNearestNeighborGrad=function(){return(t2=s._ResizeNearestNeighborGrad=s.asm.ResizeNearestNeighborGrad).apply(null,arguments)},a2=s._Reverse=function(){return(a2=s._Reverse=s.asm.Reverse).apply(null,arguments)},n2=s._RotateWithOffset=function(){return(n2=s._RotateWithOffset=s.asm.RotateWithOffset).apply(null,arguments)},r2=s._Round=function(){return(r2=s._Round=s.asm.Round).apply(null,arguments)},s2=s._Rsqrt=function(){return(s2=s._Rsqrt=s.asm.Rsqrt).apply(null,arguments)},i2=s._ScatterNd=function(){return(i2=s._ScatterNd=s.asm.ScatterNd).apply(null,arguments)},o2=s._SearchSorted=function(){return(o2=s._SearchSorted=s.asm.SearchSorted).apply(null,arguments)},l2=s._SelectV2=function(){return(l2=s._SelectV2=s.asm.SelectV2).apply(null,arguments)},u2=s._Selu=function(){return(u2=s._Selu=s.asm.Selu).apply(null,arguments)},d2=s._Sigmoid=function(){return(d2=s._Sigmoid=s.asm.Sigmoid).apply(null,arguments)},p2=s._Sign=function(){return(p2=s._Sign=s.asm.Sign).apply(null,arguments)},c2=s._Sin=function(){return(c2=s._Sin=s.asm.Sin).apply(null,arguments)},h2=s._Sinh=function(){return(h2=s._Sinh=s.asm.Sinh).apply(null,arguments)},m2=s._Softmax=function(){return(m2=s._Softmax=s.asm.Softmax).apply(null,arguments)},f2=s._Softplus=function(){return(f2=s._Softplus=s.asm.Softplus).apply(null,arguments)},g2=s._SparseFillEmptyRows=function(){return(g2=s._SparseFillEmptyRows=s.asm.SparseFillEmptyRows).apply(null,arguments)},y2=s._SparseReshape=function(){return(y2=s._SparseReshape=s.asm.SparseReshape).apply(null,arguments)},x2=s._SparseSegmentReduction=function(){return(x2=s._SparseSegmentReduction=s.asm.SparseSegmentReduction).apply(null,arguments)},A2=s._SparseToDense=function(){return(A2=s._SparseToDense=s.asm.SparseToDense).apply(null,arguments)},b2=s._Sqrt=function(){return(b2=s._Sqrt=s.asm.Sqrt).apply(null,arguments)},v2=s._Square=function(){return(v2=s._Square=s.asm.Square).apply(null,arguments)},w2=s._SquaredDifference=function(){return(w2=s._SquaredDifference=s.asm.SquaredDifference).apply(null,arguments)},k2=s._Step=function(){return(k2=s._Step=s.asm.Step).apply(null,arguments)},I2=s._StridedSlice=function(){return(I2=s._StridedSlice=s.asm.StridedSlice).apply(null,arguments)},S2=s._Sub=function(){return(S2=s._Sub=s.asm.Sub).apply(null,arguments)},C2=s._Sum=function(){return(C2=s._Sum=s.asm.Sum).apply(null,arguments)},T2=s._Tan=function(){return(T2=s._Tan=s.asm.Tan).apply(null,arguments)},N2=s._Tanh=function(){return(N2=s._Tanh=s.asm.Tanh).apply(null,arguments)},R2=s._TensorScatterUpdate=function(){return(R2=s._TensorScatterUpdate=s.asm.TensorScatterUpdate).apply(null,arguments)},E2=s._Tile=function(){return(E2=s._Tile=s.asm.Tile).apply(null,arguments)},M2=s._TopK=function(){return(M2=s._TopK=s.asm.TopK).apply(null,arguments)},$2=s._Transform=function(){return($2=s._Transform=s.asm.Transform).apply(null,arguments)},P2=s._Transpose=function(){return(P2=s._Transpose=s.asm.Transpose).apply(null,arguments)},_2=s.__FusedMatMul=function(){return(_2=s.__FusedMatMul=s.asm._FusedMatMul).apply(null,arguments)},F2=s._malloc=function(){return(F2=s._malloc=s.asm.malloc).apply(null,arguments)},D2=s._free=function(){return(D2=s._free=s.asm.free).apply(null,arguments)},O2=s.___errno_location=function(){return(O2=s.___errno_location=s.asm.__errno_location).apply(null,arguments)},Fc=s.stackSave=function(){return(Fc=s.stackSave=s.asm.stackSave).apply(null,arguments)},Dc=s.stackRestore=function(){return(Dc=s.stackRestore=s.asm.stackRestore).apply(null,arguments)},bd=s.stackAlloc=function(){return(bd=s.stackAlloc=s.asm.stackAlloc).apply(null,arguments)},z2=s.dynCall_iijjiiii=function(){return(z2=s.dynCall_iijjiiii=s.asm.dynCall_iijjiiii).apply(null,arguments)},L2=s.dynCall_jiji=function(){return(L2=s.dynCall_jiji=s.asm.dynCall_jiji).apply(null,arguments)};s.cwrap=xm;var El;ja=function Y(){El||Oc(),El||(ja=Y)};function Oc(Y){if(Y=Y||p,ht>0||(zt(),ht>0))return;function se(){El||(El=!0,s.calledRun=!0,!W&&(un(),i(s),s.onRuntimeInitialized&&s.onRuntimeInitialized(),la()))}s.setStatus?(s.setStatus("Running..."),setTimeout(function(){setTimeout(function(){s.setStatus("")},1),se()},1)):se()}if(s.preInit)for(typeof s.preInit=="function"&&(s.preInit=[s.preInit]);s.preInit.length>0;)s.preInit.pop()();Oc();var Ml;l&&(Ml={uncaughtException:process.listeners("uncaughtException").filter(function(Y){return!l.uncaughtException.indexOf(Y)>-1}),unhandledRejection:process.listeners("unhandledRejection").filter(function(Y){return!l.unhandledRejection.indexOf(Y)>-1})});var $l;if(typeof r!="undefined")$l=r;else if(typeof WasmBackendModuleThreadedSimd!="undefined")$l=WasmBackendModuleThreadedSimd;else throw new Error("Could not find wasm module in post.js");if(Ml){var W2=$l._dispose;$l._dispose=function(){W2(),Ml.uncaughtException.forEach(function(Y){process.removeListener("uncaughtException",Y)}),Ml.unhandledRejection.forEach(function(Y){process.removeListener("unhandledRejection",Y)})}}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)}),ip=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}},ru=class{refCount(e){return Xa("refCount")}incRef(e){return Xa("incRef")}timerAvailable(){return!0}time(e){return Xa("time")}read(e){return Xa("read")}readSync(e){return Xa("readSync")}readToGPU(e,t){return Xa("readToGPU")}numDataIds(){return Xa("numDataIds")}disposeData(e,t){return Xa("disposeData")}write(e,t,a){return Xa("write")}move(e,t,a,n,r){return Xa("move")}createTensorFromGPUData(e,t,a){return Xa("createTensorFromGPUData")}memory(){return Xa("memory")}floatPrecision(){return Xa("floatPrecision")}epsilon(){return this.floatPrecision()===32?1e-7:1e-4}dispose(){return Xa("dispose")}};function Xa(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 yA(e){let t=e.length,a=0;for(;t>0;)a=Math.random()*t|0,t--,uh(e,t,a)}function iT(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--,uh(e,a,n),uh(t,a,n)}function zd(e,t,a){return Math.max(e,Math.min(t,a))}function oT(e){return e%2===0?e:e+1}function uh(e,t,a){let n=e[t];e[t]=e[a],e[a]=n}function lT(e){let t=0;for(let a=0;aa+` Shapes ${e} and ${t} must match`)}function ii(e){F(e!=null,()=>"The input to the tensor constructor must be a non-null value.")}function mt(e){if(e.length===0)return 1;let t=e[0];for(let a=1;a0,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 gT(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 op(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=>Hl(n)),()=>`All values in axis param must be integers but got axis ${e}`),e.map(n=>n<0?a+n:n)}function AA(e,t){let a=[],n=[],r=t!=null&&Array.isArray(t)&&t.length===0,s=t==null||r?null:op(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 bA(e,t){return J1(e,t)}function J1(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 vA(e,t){for(let a=0;at+=a.length),t}function Ur(e){return typeof e=="string"||e instanceof String}function IA(e){return typeof e=="boolean"}function SA(e){return typeof e=="number"}function lp(e){return Array.isArray(e)?lp(e[0]):e instanceof Float32Array?"float32":e instanceof Int32Array||e instanceof Uint8Array||e instanceof Uint8ClampedArray?"int32":SA(e)?"float32":Ur(e)?"string":IA(e)?"bool":"float32"}function Kr(e){return!!(e&&e.constructor&&e.call&&e.apply)}function ph(e,t){for(let a=t;a=0;--n)a[n]=a[n+1]*e[n+1];return a}function CA(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 CA(0,e,t,a)}function xT(e,t){if(Array.isArray(e))return e;if(t==="float32")return e instanceof Float32Array?e:new Float32Array(e);if(t==="int32")return e instanceof Int32Array?e:new Int32Array(e);if(t==="bool"||t==="string")return Uint8Array.from(new Int32Array(e));throw new Error(`Unknown dtype ${t}`)}function Q1(e,t){let a=Eh(e,t);for(let n=0;nn*r,1);if(t==null||t==="float32")return Wl(e,new Float32Array(a));if(t==="int32")return Wl(e,new Int32Array(a));if(t==="bool")return Wl(e,new Uint8Array(a));throw new Error(`Unknown data type ${t}`)}function an(e){e.forEach(t=>{F(Number.isInteger(t)&&t>=0,()=>`Tensor must have a shape comprised of positive integers but got shape [${e}].`)})}function bT(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]=IT(a,n)})}};function wT(e){let t={};return e.replace(/[?&]([^=?&]+)(?:=([^&]*))?/g,(a,...n)=>(kT(t,n[0],n[1]),n.join("="))),t}function kT(e,t,a){e[decodeURIComponent(t)]=decodeURIComponent(a||"")}function IT(e,t){let a=t.toLowerCase();return a==="true"||a==="false"?a==="true":`${+a}`===a?+a:t}function B(){return eg}var eg=null;function ST(e){eg=e}var H2;function NA(){if(H2==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");H2=e}return H2}function CT(){let e=NA();return e._tfGlobals==null&&(e._tfGlobals=new Map),e._tfGlobals}function tg(e,t){let a=CT();if(a.has(e))return a.get(e);{let n=t();return a.set(e,n),a.get(e)}}var iu="Abs",oi="Acos",li="Acosh",os="Add",ui="AddN",di="All",pi="Any",ou="ArgMax",lu="ArgMin",ci="Asin",hi="Asinh",mi="Atan",fi="Atanh",gi="Atan2",yi="AvgPool",up="AvgPoolGrad",uu="AvgPool3D",dp="AvgPool3DGrad",xi="BatchMatMul",du="BatchToSpaceND",Ai="Bincount",pu="BitwiseAnd",TT="BroadcastTo",cu="BroadcastArgs",bi="Cast",vi="Ceil",ls="ClipByValue",pp="Complex",cp="ComplexAbs",hu="Concat",wi="Conv2D",hp="Conv2DBackpropFilter",ki="Conv2DBackpropInput",Ii="Conv3D",mu="Conv3DBackpropFilterV2",Si="Conv3DBackpropInputV2",Ci="Cos",Ti="Cosh",Ni="Cumprod",Ri="Cumsum",Ei="CropAndResize",fu="DenseBincount",Mi="DepthToSpace",$i="DepthwiseConv2dNative",mp="DepthwiseConv2dNativeBackpropFilter",fp="DepthwiseConv2dNativeBackpropInput",gu="Diag",Pi="Dilation2D",jl="Dilation2DBackpropInput",ql="Dilation2DBackpropFilter",gp="Draw",_i="RealDiv",yp="Einsum",Fi="Elu",yu="EluGrad",Di="Erf",Oi="Equal",zi="Exp",xu="ExpandDims",Li="Expm1",xp="FFT",Au="Fill",Wi="FlipLeftRight",Bi="Floor",Vi="FloorDiv",Ui="FusedBatchNorm",bu="GatherV2",Gi="GatherNd",Hi="Greater",ji="GreaterEqual",qi="Identity",Ap="IFFT",bp="Imag",Xi="IsFinite",Ki="IsInf",Yi="IsNan",Zi="LeakyRelu",Ji="Less",Qi="LessEqual",eo="LinSpace",to="Log",ao="Log1p",no="LogicalAnd",ro="LogicalNot",so="LogicalOr",RA="LogicalXor",NT="LogSoftmax",RT="LowerBound",io="LRN",vu="LRNGrad",ET="MatrixBandPart",oo="Max",lo="Maximum",uo="MaxPool",vp="MaxPoolGrad",wu="MaxPool3D",wp="MaxPool3DGrad",ku="MaxPoolWithArgmax",po="Mean",co="Min",ho="Minimum",mo="MirrorPad",fo="Mod",go="Multinomial",yo="Multiply",Iu="Neg",xo="NotEqual",Ao="NonMaxSuppressionV3",Su="NonMaxSuppressionV4",bo="NonMaxSuppressionV5",Cu="OnesLike",vo="OneHot",Tu="Pack",wo="PadV2",MT="Pool",ko="Pow",Io="Prelu",So="Prod",$h="RaggedGather",Ph="RaggedRange",_h="RaggedTensorToTensor",Nu="Range",kp="Real",Co="Reciprocal",To="Relu",Ru="Reshape",No="ResizeNearestNeighbor",Eu="ResizeNearestNeighborGrad",Ro="ResizeBilinear",Mu="ResizeBilinearGrad",Eo="Relu6",Mo="Reverse",$o="Round",Po="Rsqrt",_o="ScatterNd",Fo="TensorScatterUpdate",Do="SearchSorted",$u="Select",Oo="Selu",Pu="Slice",zo="Sin",Lo="Sinh",Wo="Sign",Bo="Sigmoid",Vo="Softplus",Uo="Sqrt",Go="Sum",_u="SpaceToBatchND",Fu="SplitV",Ho="Softmax",Ip="SparseFillEmptyRows",Du="SparseReshape",Ou="SparseSegmentMean",zu="SparseSegmentSum",jo="SparseToDense",qo="SquaredDifference",Sp="Square",Cp="StaticRegexReplace",Xo="StridedSlice",Lu="StringNGrams",Tp="StringSplit",Np="StringToHashBucketFast",Ko="Sub",Yo="Tan",Zo="Tanh",us="Tile",Jo="TopK",Qo="Transform",wr="Transpose",Rp="Unique",Wu="Unpack",Ep="UnsortedSegmentSum",$T="UpperBound",Bu="ZerosLike",ds="Step",Ld="FromPixels",el="RotateWithOffset",Yr="_FusedMatMul",Zr="FusedConv2D",Jr="FusedDepthwiseConv2D";function Vr(...e){B().getBool("IS_TEST")||B().getBool("PROD")||console.warn(...e)}function PT(...e){B().getBool("IS_TEST")||B().getBool("PROD")||console.log(...e)}var Xl=tg("kernelRegistry",()=>new Map),Wd=tg("gradRegistry",()=>new Map);function Bd(e,t){let a=ag(e,t);return Xl.get(a)}function t1(e){return Wd.get(e)}function Jn(e){let t=Xl.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 xn(e){let{kernelName:t,backendName:a}=e,n=ag(t,a);Xl.has(n)&&Vr(`The kernel '${t}' for backend '${a}' is already registered`),Xl.set(n,e)}function _T(e){let{kernelName:t}=e;Wd.has(t)&&B().getBool("DEBUG")&&Vr(`Overriding the gradient for '${t}'`),Wd.set(t,e)}function FT(e,t){let a=ag(e,t);if(!Xl.has(a))throw new Error(`The kernel '${e}' for backend '${t}' is not registered`);Xl.delete(a)}function DT(e){if(!Wd.has(e))throw new Error(`The gradient '${e}' for backend is not registered`);Wd.delete(e)}function OT(e,t){Jn(e).forEach(a=>{let n=Object.assign({},a,{backendName:t});xn(n)})}function ag(e,t){return`${t}_${e}`}var v={};Ze(v,{arraysEqual:()=>Cr,arraysEqualWithNull:()=>xA,assert:()=>F,assertNonNegativeIntegerDimensions:()=>an,assertNonNull:()=>ii,assertShapesMatch:()=>Ta,bytesFromStringArray:()=>kA,bytesPerElement:()=>dh,checkConversionForErrors:()=>vA,clamp:()=>zd,computeStrides:()=>su,convertBackendValuesAndArrayBuffer:()=>xT,createScalarValue:()=>UT,createShuffledIndices:()=>mT,decodeString:()=>ch,distSquared:()=>dT,encodeString:()=>$p,fetch:()=>HT,fingerPrint64:()=>VT,flatten:()=>Qr,getArrayFromDType:()=>J1,getTypedArrayFromDType:()=>bA,hasEncodingLoss:()=>yT,hexToLong:()=>Mp,indexToLoc:()=>vT,inferDtype:()=>lp,inferFromImplicitShape:()=>gT,isBoolean:()=>IA,isFunction:()=>Kr,isInt:()=>Hl,isNumber:()=>SA,isPromise:()=>Mh,isScalarShape:()=>pT,isString:()=>Ur,isTypedArray:()=>Jt,isValidDtype:()=>wA,locToIndex:()=>bT,makeOnesTypedArray:()=>Q1,makeZerosNestedTypedArray:()=>AT,makeZerosTypedArray:()=>Eh,nearestDivisor:()=>ph,nearestLargerEven:()=>oT,now:()=>Vd,parseAxisParam:()=>op,randUniform:()=>uT,repeatedTry:()=>fT,rightPad:()=>_d,shuffle:()=>yA,shuffleCombo:()=>iT,sizeFromShape:()=>mt,sizeToSquarishShape:()=>hT,squeezeShape:()=>AA,sum:()=>lT,swap:()=>uh,tanh:()=>cT,toNestedArray:()=>Wl,toTypedArray:()=>Fh});function EA(e){return e instanceof Float32Array||e instanceof Int32Array||e instanceof Uint8Array||e instanceof Uint8ClampedArray}var qx=nu(UC()),Bs=qx.default||qx;function Mp(e){return Bs.fromString(e,!0,16)}var MA=Mp("c3a5c85c97cb3127"),Ls=Mp("b492b66fbe98f273"),va=Mp("9ae16a3b2f90404f");function a1(e){return e.xor(e.shru(47))}function $A(e,t,a){let n=e.slice(t,t+a);return Bs.fromBytes(Array.from(n),!0,!0)}function At(e,t){return $A(e,t,8)}function Xx(e,t){return $A(e,t,4)}function Zt(e,t){return t===0?e:e.shru(t).or(e.shl(64-t))}function qr(e,t,a=Mp("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 zT(e,t,a,n,r,s){r=r.add(e),s=Zt(s.add(r).add(n),21);let i=r;return r=r.add(t),r=r.add(a),s=s.add(Zt(r,44)),[r.add(n),s.add(i)]}function qc(e,t,a,n){return zT(At(e,t),At(e,t+8),At(e,t+16),At(e,t+24),a,n)}function LT(e,t=e.length){if(t>=8){let a=va.add(t*2),n=At(e,0).add(va),r=At(e,t-8),s=Zt(r,37).mul(a).add(n),i=Zt(n,25).add(r).mul(a);return qr(s,i,a)}if(t>=4){let a=va.add(t*2),n=Xx(e,0);return qr(n.shl(3).add(t),Xx(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 a1(va.mul(s).xor(MA.mul(i))).mul(va)}return va}function WT(e,t=e.length){let a=va.add(t*2),n=At(e,0).mul(Ls),r=At(e,8),s=At(e,t-8).mul(a),i=At(e,t-16).mul(va);return qr(Zt(n.add(r),43).add(Zt(s,30)).add(i),n.add(Zt(r.add(va),18)).add(s),a)}function BT(e,t=e.length){let a=va.add(t*2),n=At(e,0).mul(va),r=At(e,8),s=At(e,t-8).mul(a),i=At(e,t-16).mul(va),o=Zt(n.add(r),43).add(Zt(s,30)).add(i),l=qr(o,n.add(Zt(r.add(va),18)).add(s),a),u=At(e,16).mul(a),p=At(e,24),c=o.add(At(e,t-32)).mul(a),d=l.add(At(e,t-24)).mul(a);return qr(Zt(u.add(p),43).add(Zt(c,30)).add(d),u.add(Zt(p.add(n),18)).add(c),a)}function VT(e,t=e.length){let a=Bs.fromNumber(81,!0);if(t<=32)return t<=16?LT(e,t):WT(e,t);if(t<=64)return BT(e,t);let n=a,r=a.mul(Ls).add(113),s=a1(r.mul(va).add(113)).mul(va),i=[Bs.UZERO,Bs.UZERO],o=[Bs.UZERO,Bs.UZERO];n=n.mul(va).add(At(e,0));let l=0,u=(t-1>>6)*64,p=u+(t-1&63)-63;do n=Zt(n.add(r).add(i[0]).add(At(e,l+8)),37).mul(Ls),r=Zt(r.add(i[1]).add(At(e,l+48)),42).mul(Ls),n=n.xor(o[1]),r=r.add(i[0]).add(At(e,l+40)),s=Zt(s.add(o[0]),33).mul(Ls),i=qc(e,l,i[1].mul(Ls),n.add(o[0])),o=qc(e,l+32,s.add(o[1]),r.add(At(e,l+16))),[s,n]=[n,s],l+=64;while(l!==u);let c=Ls.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=Zt(n.add(r).add(i[0]).add(At(e,l+8)),37).mul(c),r=Zt(r.add(i[1]).add(At(e,l+48)),42).mul(c),n=n.xor(o[1].mul(9)),r=r.add(i[0].mul(9).add(At(e,l+40))),s=Zt(s.add(o[0]),33).mul(c),i=qc(e,l,i[1].mul(c),n.add(o[0])),o=qc(e,l+32,s.add(o[1]),r.add(At(e,l+16))),[s,n]=[n,s],qr(qr(i[0],o[0],c).add(a1(r).mul(MA)).add(s),qr(i[1],o[1],c).add(n),c)}function UT(e,t){return t==="string"?$p(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=Qr(e)),B().getBool("DEBUG")&&vA(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=Vd();if(this.backendTimer.timerAvailable())s=this.backendTimer.time(r);else{r();for(let o of n)o.dataSync();s=Promise.resolve({kernelMs:Vd()-i})}if(B().getBool("CHECK_COMPUTATION_FOR_ERRORS"))for(let o=0;o{qT(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 qT(e,t,a){if(t!=="float32")return!1;for(let n=0;n0?m:""} `}}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 KT(e,t,a){let n={},r={};for(let l=0;ln[f.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(!Cr(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 Kx=20,wd=3,j2=7;function ZT(e,t,a,n){let r=su(t),s=JT(e,t,a,r),i=t.length,o=eh(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 ZT(e,t,a,n){let r=mt(t),s=n[n.length-1],i=new Array(s).fill(0),o=t.length,l=a==="complex64"?Sd(e):e;if(o>1)for(let u=0;uXx){let f=wd*i,g=Array.from(e.slice(0,f)),y=Array.from(e.slice((o-wd)*i,o*i));return a==="complex64"&&(g=Sd(g),y=Sd(y)),["["+g.map((x,A)=>Id(x,r[A],a)).join(", ")+", ..., "+y.map((x,A)=>Id(x,r[o-wd+A],a)).join(", ")+"]"]}return["["+(a==="complex64"?Sd(e):Array.from(e)).map((f,g)=>Id(f,r[g],a)).join(", ")+"]"]}let u=t.slice(1),p=n.slice(1),c=n[0]*i,d=[];if(o>Xx){for(let f=0;f0?d[0]+h:"");for(let f=1;f1)for(let u=0;uKx){let f=wd*i,g=Array.from(e.slice(0,f)),y=Array.from(e.slice((o-wd)*i,o*i));return a==="complex64"&&(g=Sd(g),y=Sd(y)),["["+g.map((x,A)=>Id(x,r[A],a)).join(", ")+", ..., "+y.map((x,A)=>Id(x,r[o-wd+A],a)).join(", ")+"]"]}return["["+(a==="complex64"?Sd(e):Array.from(e)).map((f,g)=>Id(f,r[g],a)).join(", ")+"]"]}let u=t.slice(1),p=n.slice(1),c=n[0]*i,d=[];if(o>Kx){for(let f=0;f0?d[0]+h:"");for(let f=1;f`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||J1(t,this.size),this.strides=su(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;nch(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=>ch(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||(this.kerasMask&&this.kerasMask.dispose(),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 Ol.print(this,e)}clone(){return this.throwIfDisposed(),Ol.clone(this)}toString(e=!1){let t=this.dataSync();return YT(t,this.shape,this.dtype,e)}cast(e){return this.throwIfDisposed(),Ol.cast(this,e)}variable(e=!0,t,a){return this.throwIfDisposed(),On().makeVariable(this,e,t,a)}};Object.defineProperty(yt,Symbol.hasInstance,{value:e=>!!e&&e.data!=null&&e.dataSync!=null&&e.throwIfDisposed!=null});function PA(){return tg("Tensor",()=>yt)}PA();var Ud=class extends yt{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(!Cr(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(Ud,Symbol.hasInstance,{value:e=>e instanceof yt&&e.assign!=null&&e.assign instanceof Function});var _A={};Ze(_A,{assertTypesMatch:()=>OA,getTensorsInContainer:()=>ng,isTensorInList:()=>nN,makeTypesMatch:()=>Rt});var n1;(function(e){e.R0="R0",e.R1="R1",e.R2="R2",e.R3="R3",e.R4="R4",e.R5="R5",e.R6="R6"})(n1||(n1={}));var r1;(function(e){e.float32="float32",e.int32="int32",e.bool="int32",e.complex64="complex64"})(r1||(r1={}));var s1;(function(e){e.float32="float32",e.int32="int32",e.bool="bool",e.complex64="complex64"})(s1||(s1={}));var i1;(function(e){e.float32="float32",e.int32="float32",e.bool="float32",e.complex64="complex64"})(i1||(i1={}));var o1;(function(e){e.float32="complex64",e.int32="complex64",e.bool="complex64",e.complex64="complex64"})(o1||(o1={}));var aN={float32:i1,int32:r1,bool:s1,complex64:o1};function pa(e,t){if(e==="string"||t==="string"){if(e==="string"&&t==="string")return"string";throw new Error(`Can not upcast ${e} with ${t}`)}return aN[e][t]}function Pp(e){return pa(e,"int32")}function FA(e){return e!=null&&typeof e=="object"&&"texture"in e&&e.texture instanceof WebGLTexture}function DA(e){return typeof GPUBuffer!="undefined"&&e!=null&&typeof e=="object"&&"buffer"in e&&e.buffer instanceof GPUBuffer}function Rt(e,t){if(e.dtype===t.dtype)return[e,t];let a=pa(e.dtype,t.dtype);return[e.cast(a),t.cast(a)]}function OA(e,t){F(e.dtype===t.dtype,()=>`The dtypes of the first(${e.dtype}) and second(${t.dtype}) input must match`)}function nN(e,t){return t.some(a=>a.id===e.id)}function ng(e){let t=[];return zA(e,t,new Set),t}function zA(e,t,a){if(e==null)return;if(e instanceof yt){t.push(e);return}if(!rN(e))return;let n=e;for(let r in n){let s=n[r];a.has(s)||(a.add(s),zA(s,t,a))}}function rN(e){return Array.isArray(e)||typeof e=="object"}function q2(e){return e.kernelName!=null}var Kx=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()}},rg=class l1{constructor(t){this.ENV=t,this.registry={},this.registryFactory={},this.pendingBackendInitId=0,this.state=new Kx}async ready(){if(this.pendingBackendInit!=null)return this.pendingBackendInit.then(()=>{});if(this.backendInstance!=null)return;let t=this.getSortedBackends();for(let a=0;a{t.setupFunc!=null&&t.setupFunc(this.backendInstance)})}disposeRegisteredKernels(t){Jn(t).forEach(a=>{a.disposeFunc!=null&&a.disposeFunc(this.registry[t])})}initializeBackend(t){let a=this.registryFactory[t];if(a==null)throw new Error(`Cannot initialize backend ${t}, no registration found.`);try{let n=a.factory();if(n&&!(n instanceof ru)&&typeof n.then=="function"){let r=++this.pendingBackendInitId,s=n.then(i=>r(rthis.registryFactory[a].priority-this.registryFactory[t].priority)}initializeBackendsAndReturnBest(){let t=this.getSortedBackends();for(let a=0;athis.startScope(n),()=>this.endScope(r),()=>(r=a(),r instanceof Promise&&console.error("Cannot return a Promise inside of tidy."),r))}scopedRun(t,a,n){t();try{let r=n();return a(),r}catch(r){throw a(),r}}nextTensorId(){return l1.nextTensorId++}nextVariableId(){return l1.nextVariableId++}clone(t){let a=L.runKernel(qi,{x:t}),n={x:t},r=i=>({x:()=>{let o="float32",l={x:i},u={dtype:o};return L.runKernel(bi,l,u)}}),s=[];return this.addTapeNode(this.state.activeScope.name,n,[a],r,s,{}),a}runKernel(t,a,n){if(this.backendName==null&&this.backend,Bd(t,this.backendName)==null)throw new Error(`Kernel '${t}' not registered for backend '${this.backendName}'`);return this.runKernelFunc({kernelName:t,inputs:a,attrs:n})}shouldCheckForMemLeaks(){return this.ENV.getBool("IS_TEST")}checkKernelForMemLeak(t,a,n){let r=this.backend.numDataIds(),s=0;n.forEach(l=>{s+=l.dtype==="complex64"?3:1});let i=this.state.numDataMovesStack[this.state.numDataMovesStack.length-1],o=r-a-s-i;if(o>0)throw new Error(`Backend '${this.backendName}' has an internal memory leak (${o} data ids) after running '${t}'`)}runKernelFunc(t){let a,n=[],r=this.isTapeOn(),s=this.state.numBytes,i=this.state.numTensors;this.shouldCheckForMemLeaks()&&this.state.numDataMovesStack.push(0);let o;this.backendName==null&&this.backend;let l,u=q2(t)?t.kernelName:this.state.activeScope!=null?this.state.activeScope.name:"";if(q2(t)){let{kernelName:m,inputs:f,attrs:g}=t;this.backendName==null&&this.backend;let y=Bd(m,this.backendName);F(y!=null,()=>`Cannot find registered kernel '${m}' for backend '${this.backendName}'`),o=()=>{let x=this.backend.numDataIds();l=y.kernelFunc({inputs:f,attrs:g,backend:this.backend});let A=Array.isArray(l)?l:[l];this.shouldCheckForMemLeaks()&&this.checkKernelForMemLeak(m,x,A);let b=A.map(w=>w.rank!=null?w:this.makeTensorFromTensorInfo(w));if(r){let w=this.getTensorsForGradient(m,f,b);n=this.saveTensorsForBackwardMode(w)}return b}}else{let{forwardFunc:m}=t,f=g=>{r&&(n=g.map(y=>this.keep(this.clone(y))))};o=()=>{let g=this.backend.numDataIds();l=this.tidy(()=>m(this.backend,f));let y=Array.isArray(l)?l:[l];return this.shouldCheckForMemLeaks()&&this.checkKernelForMemLeak(u,g,y),y}}let{inputs:p,attrs:c}=t,d=q2(t)?null:t.backwardsFunc,h;return this.scopedRun(()=>this.state.kernelDepth++,()=>this.state.kernelDepth--,()=>{!this.ENV.getBool("DEBUG")&&!this.state.profiling?a=o():(h=this.profiler.profileKernel(u,p,()=>o()),this.ENV.getBool("DEBUG")&&this.profiler.logKernelProfile(h),a=h.outputs)}),r&&this.addTapeNode(u,p,a,d,n,c),this.state.profiling&&this.state.activeProfile.kernels.push({name:u,bytesAdded:this.state.numBytes-s,totalBytesSnapshot:this.state.numBytes,tensorsAdded:this.state.numTensors-i,totalTensorsSnapshot:this.state.numTensors,inputShapes:Object.keys(p).map(m=>p[m]!=null?p[m].shape:null),outputShapes:a.map(m=>m.shape),kernelTimeMs:h.timeMs,extraInfo:h.extraInfo}),Array.isArray(l)?a:a[0]}saveTensorsForBackwardMode(t){return t.map(a=>this.keep(this.clone(a)))}getTensorsForGradient(t,a,n){let r=t1(t);if(r!=null){let s=r.inputsToSave||[],i=r.outputsToSave||[],o;r.saveAllInputs?(F(Array.isArray(a),()=>"saveAllInputs is true, expected inputs to be an array."),o=Object.keys(a).map(u=>a[u])):o=s.map(u=>a[u]);let l=n.filter((u,p)=>i[p]);return o.concat(l)}return[]}makeTensor(t,a,n,r){if(t==null)throw new Error("Values passed to engine.makeTensor() are null");n=n||"float32",r=r||this.backend;let s=t;n==="string"&&Ur(t[0])&&(s=t.map(l=>$p(l)));let i=r.write(s,a,n),o=new yt(a,n,i,this.nextTensorId());if(this.trackTensor(o,r),n==="string"){let l=this.state.tensorInfo.get(i),u=wA(s);this.state.numBytes+=u-l.bytes,l.bytes=u}return o}makeTensorFromDataId(t,a,n,r){n=n||"float32";let s={dataId:t,shape:a,dtype:n};return this.makeTensorFromTensorInfo(s,r)}makeTensorFromTensorInfo(t,a){let{dataId:n,shape:r,dtype:s}=t,i=new yt(r,s,n,this.nextTensorId());return this.trackTensor(i,a),i}makeVariable(t,a=!0,n,r){n=n||this.nextVariableId().toString(),r!=null&&r!==t.dtype&&(t=t.cast(r));let s=new Ud(t,a,n,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(t,a){this.state.numTensors++,t.dtype==="string"&&this.state.numStringTensors++;let n=0;t.dtype!=="complex64"&&t.dtype!=="string"&&(n=t.size*dh(t.dtype)),this.state.numBytes+=n,this.state.tensorInfo.has(t.dataId)||(this.state.numDataBuffers++,this.state.tensorInfo.set(t.dataId,{backend:a||this.backend,dtype:t.dtype,shape:t.shape,bytes:n})),t instanceof Ud||this.track(t)}incRef(t,a){this.trackTensor(t,a),this.backend.incRef(t.dataId)}removeDataId(t,a){this.state.tensorInfo.has(t)&&this.state.tensorInfo.get(t).backend===a&&(this.state.tensorInfo.delete(t),this.state.numDataBuffers--)}disposeTensor(t){if(!this.state.tensorInfo.has(t.dataId))return;let a=this.state.tensorInfo.get(t.dataId);if(this.state.numTensors--,t.dtype==="string"&&(this.state.numStringTensors--,this.state.numBytes-=a.bytes),t.dtype!=="complex64"&&t.dtype!=="string"){let n=t.size*dh(t.dtype);this.state.numBytes-=n}a.backend.disposeData(t.dataId)&&this.removeDataId(t.dataId,a.backend)}disposeVariables(){for(let t in this.state.registeredVariables){let a=this.state.registeredVariables[t];this.disposeVariable(a)}}disposeVariable(t){this.disposeTensor(t),this.state.registeredVariables[t.name]!=null&&delete this.state.registeredVariables[t.name]}memory(){let t=this.backend.memory();return t.numTensors=this.state.numTensors,t.numDataBuffers=this.state.numDataBuffers,t.numBytes=this.state.numBytes,this.state.numStringTensors>0&&(t.unreliable=!0,t.reasons==null&&(t.reasons=[]),t.reasons.push("Memory usage by string tensors is approximate (2 bytes per character)")),t}async profile(t){this.state.profiling=!0;let a=this.state.numBytes,n=this.state.numTensors;this.state.activeProfile.kernels=[],this.state.activeProfile.result=await t(),this.state.profiling=!1,this.state.activeProfile.peakBytes=Math.max(...this.state.activeProfile.kernels.map(r=>r.totalBytesSnapshot)),this.state.activeProfile.newBytes=this.state.numBytes-a,this.state.activeProfile.newTensors=this.state.numTensors-n;for(let r of this.state.activeProfile.kernels)r.kernelTimeMs=await r.kernelTimeMs,r.extraInfo=await r.extraInfo;return this.state.activeProfile}isTapeOn(){return this.state.gradientDepth>0&&this.state.kernelDepth===0}addTapeNode(t,a,n,r,s,i){let o={id:this.state.nextTapeNodeId++,kernelName:t,inputs:a,outputs:n,saved:s},l=t1(t);l!=null&&(r=l.gradFunc),r!=null&&(o.gradient=u=>(u=u.map((p,c)=>{if(p==null){let d=n[c],h=Eh(d.size,d.dtype);return this.makeTensor(h,d.shape,d.dtype)}return p}),r(u.length>1?u:u[0],s,i))),this.state.activeTape.push(o)}keep(t){return t.kept=!0,t}startTape(){this.state.gradientDepth===0&&(this.state.activeTape=[]),this.state.gradientDepth++}endTape(){this.state.gradientDepth--}startScope(t){let a={track:[],name:"unnamed scope",id:this.state.nextScopeId++};t&&(a.name=t),this.state.scopeStack.push(a),this.state.activeScope=a}endScope(t){let a=ng(t),n=new Set(a.map(s=>s.id));for(let s=0;s{!s.kept&&s.scopeId===r.id&&this.track(s)})}gradients(t,a,n,r=!1){if(F(a.length>0,()=>"gradients() received an empty list of xs."),n!=null&&n.dtype!=="float32")throw new Error(`dy must have 'float32' dtype, but has '${n.dtype}'`);let s=this.scopedRun(()=>this.startTape(),()=>this.endTape(),()=>this.tidy("forward",t));F(s instanceof yt,()=>"The result y returned by f() must be a tensor.");let i=XT(this.state.activeTape,a,s);if(!r&&i.length===0&&a.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 o={};o[s.id]=n==null?sN(s.shape):n,KT(o,i,u=>this.tidy(u),iN);let l=a.map(u=>o[u.id]);return this.state.gradientDepth===0&&(this.state.activeTape.forEach(u=>{for(let p of u.saved)p.dispose()}),this.state.activeTape=null),{value:s,grads:l}})}customGrad(t){return F(Kr(t),()=>"The f passed in customGrad(f) must be a function."),(...a)=>{F(a.every(o=>o instanceof yt),()=>"The args passed in customGrad(f)(x1, x2,...) must all be tensors");let n,r={};a.forEach((o,l)=>{r[l]=o});let s=(o,l)=>(n=t(...a,l),F(n.value instanceof yt,()=>"The function f passed in customGrad(f) must return an object where `obj.value` is a tensor"),F(Kr(n.gradFunc),()=>"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function."),n.value),i=(o,l)=>{let u=n.gradFunc(o,l),p=Array.isArray(u)?u:[u];F(p.length===a.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(p.every(d=>d instanceof yt),()=>"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 c={};return p.forEach((d,h)=>{c[h]=()=>d}),c};return this.runKernelFunc({forwardFunc:s,backwardsFunc:i,inputs:r})}}readSync(t){return this.state.tensorInfo.get(t).backend.readSync(t)}read(t){return this.state.tensorInfo.get(t).backend.read(t)}readToGPU(t,a){return this.state.tensorInfo.get(t).backend.readToGPU(t,a)}async time(t){let a=Vd(),n=await this.backend.time(t);return n.wallMs=Vd()-a,n}track(t){return this.state.activeScope!=null&&(t.scopeId=this.state.activeScope.id,this.state.activeScope.track.push(t)),t}get registeredVariables(){return this.state.registeredVariables}reset(){this.pendingBackendInitId++,this.state.dispose(),this.ENV.reset(),this.state=new Kx;for(let t in this.registry)this.disposeRegisteredKernels(t),this.registry[t].dispose(),delete this.registry[t];this.backendName=null,this.backendInstance=null,this.pendingBackendInit=null}};rg.nextTensorId=0;rg.nextVariableId=0;function sN(e){let t=Q1(mt(e),"float32");return L.makeTensor(t,e,"float32")}function LA(){let e=TA();if(e._tfengine==null){let t=new CA(e);e._tfengine=new rg(t)}return IT(e._tfengine.ENV),QT(()=>e._tfengine),e._tfengine}var L=LA();function iN(e,t){let a={a:e,b:t};return L.runKernel(os,a)}var _p={};Ze(_p,{isBrowser:()=>WA,isMobile:()=>uN,mockIsMobile:()=>lN});function oN(){return typeof navigator!="undefined"&&navigator!=null}var u1;function lN(e){u1=e}function uN(e){if(u1!==void 0)return u1;if(e||oN()){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 Ba=B();Ba.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.")});Ba.registerFlag("IS_BROWSER",()=>WA());Ba.registerFlag("IS_NODE",()=>typeof process!="undefined"&&typeof process.versions!="undefined"&&typeof process.versions.node!="undefined");Ba.registerFlag("IS_CHROME",()=>typeof navigator!="undefined"&&navigator!=null&&navigator.userAgent!=null&&/Chrome/.test(navigator.userAgent)&&/Google Inc/.test(navigator.vendor));Ba.registerFlag("IS_SAFARI",()=>typeof navigator!="undefined"&&navigator!=null&&navigator.userAgent!=null&&/Safari/.test(navigator.userAgent)&&/Apple/.test(navigator.vendor));Ba.registerFlag("PROD",()=>!1);Ba.registerFlag("TENSORLIKE_CHECK_SHAPE_CONSISTENCY",()=>Ba.getBool("DEBUG"));Ba.registerFlag("DEPRECATION_WARNINGS_ENABLED",()=>!0);Ba.registerFlag("IS_TEST",()=>!1);Ba.registerFlag("CHECK_COMPUTATION_FOR_ERRORS",()=>Ba.getBool("DEBUG"));Ba.registerFlag("WRAP_TO_IMAGEBITMAP",()=>!1);Ba.registerFlag("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU",()=>!1);Ba.registerFlag("USE_SETTIMEOUTCUSTOM",()=>!1);function Qn(e,t){let a=e;if(Jt(e))return t==="string"?[]:[e.length];if(FA(e)){let r=e.channels||"RGBA";return[e.height,e.width*r.length]}else if(DA(e))return[e.buffer.size/(t==null?4:dh(t))];if(!Array.isArray(e))return[];let n=[];for(;Array.isArray(a)||Jt(a)&&t!=="string";)n.push(a.length),a=a[0];return Array.isArray(e)&&B().getBool("TENSORLIKE_CHECK_SHAPE_CONSISTENCY")&&BA(e,n,[]),n}function BA(e,t,a){if(a=a||[],!Array.isArray(e)&&!Jt(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),Yx(n,r,t,a),e==null||!Jt(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=Qn(e,r);!Jt(e)&&!Array.isArray(e)&&(e=[e]);let i=r!=="string"?Fh(e,r):Qr(e,[],!0);return L.makeTensor(i,s,r)}function Gd(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 sg="__op";function z(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+sg;let r=(...s)=>{L.startScope(a);try{let i=n(...s);return Mh(i)&&console.error("Cannot return a Promise inside of tidy."),L.endScope(i),i}catch(i){throw L.endScope(null),i}};return Object.defineProperty(r,"name",{value:a,configurable:!0}),r}function dN(e,t){let a=R(e,"real","complex"),n=R(t,"imag","complex");Ta(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 L.runKernel(pp,r)}var Sr=z({complex_:dN});function ps(e,t,a,n){if(n==null)n=lp(e);else if(n==="complex64")throw new Error("Cannot construct a complex64 tensor directly. Please use tf.complex(real, imag).");if(DA(e)||FA(e)){if(n!=="float32"&&n!=="int32")throw new Error(`Creating tensor from GPU data only supports 'float32'|'int32' dtype, while the dtype is ${n}.`);return L.backend.createTensorFromGPUData(e,t||a,n)}if(!Jt(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){an(t);let r=mt(t),s=mt(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!Jt(e)&&!Array.isArray(e)&&(e=[e]),t=t||a,e=n!=="string"?Fh(e,n):Qr(e,[],!0),L.makeTensor(e,t,n)}function Ve(e,t,a){let n=Qn(e,a);return ps(e,t,n,a)}var Ks={float32:4,float16:2,int32:4,uint16:2,uint8:1,bool:1,complex64:8},Tr=class VA{static join(t){return new VA(t).slice()}constructor(t){if(this.shards=[],this.previousShardIndex=0,t==null||(t instanceof Array||(t=[t]),t=t.map(n=>Jt(n)?n.buffer:n),t.length===0))return;this.bufferUniformSize=t[0].byteLength;let a=0;for(let n=0;n=this.byteLength)return-1;if(this.bufferUniformSize!=null)return this.previousShardIndex=Math.floor(t/this.bufferUniformSize),this.previousShardIndex;function a(r){return t=r.end?1:0}if(a(this.shards[this.previousShardIndex])===0)return this.previousShardIndex;let n=pN(this.shards,a);return n===-1?-1:(this.previousShardIndex=n,this.previousShardIndex)}};function pN(e,t){let a=0,n=e.length;for(;a<=n;){let r=Math.floor((n-a)/2)+a,s=t(e[r]);if(s===0)return r;s<0?n=r:a=r+1}return-1}function ig(){B().set("PROD",!0)}function cN(){B().set("DEBUG",!0)}function hN(){B().set("DEPRECATION_WARNINGS_ENABLED",!1),console.warn("TensorFlow.js deprecation warnings have been disabled.")}function og(e){B().getBool("DEPRECATION_WARNINGS_ENABLED")&&console.warn(e+" You can disable deprecation warnings with tf.disableDeprecationWarnings().")}tN(og);function mN(){L.disposeVariables()}function It(){return L}function fN(){return L.memory()}function gN(e){return L.profile(e)}function De(e,t){return L.tidy(e,t)}function J(e){ng(e).forEach(t=>t.dispose())}function zn(e){return L.keep(e)}function yN(e){return L.time(e)}function Fp(e){return L.setBackend(e)}function Dp(){return L.ready()}function Qt(){return L.backendName}function xN(e){L.removeBackend(e)}function lg(e){return L.findBackend(e)}function AN(e){return L.findBackendFactory(e)}function tl(e,t,a=1){return L.registerBackend(e,t,a)}function Bn(){return L.backend}function bN(e,t){B().setPlatform(e,t)}var es=4;async function vN(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,y)=>g+y.length,0)+es*d.length,m=new Uint8Array(h),f=0;for(let g=0;ga.slice(r+o,r+l));n[s.name]=GA(s,a.slice(r,r+i)),r+=i}return n}function wN(e,t){let a=mt(e.shape),n;if("quantization"in e){let r=e.quantization;n=Ks[r.dtype]}else if(e.dtype==="string"){let r=0;for(let s=0;s(r=await Zx(n,r,p),r.slice(u,p)));r=await Zx(n,r,i);let o=r.slice(0,i);r=r.slice(i);let l=GA(s,o);if(a[s.name]=l,Qt()==="webgpu"){let u=Bn();"uploadToGPU"in u&&mt(l.shape)>=B().get("WEBGPU_CPU_HANDOFF_SIZE_THRESHOLD")&&u.uploadToGPU(l.dataId)}}return a}function IN(e){if(e===null)throw new Error(`Invalid input value: ${JSON.stringify(e)}`);let t=0,a=[];e.forEach(s=>{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 ug=typeof Buffer!="undefined"&&(typeof Blob=="undefined"||typeof atob=="undefined"||typeof btoa=="undefined");function Jx(e){return ug?Buffer.byteLength(e,"utf8"):new Blob([e]).size}function SN(e){if(ug)return Buffer.from(e).toString("base64");let t=new Uint8Array(e),a="";for(let n=0,r=t.length;n{let n=a<<13,r=0;for(;!(n&8388608);)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 RN(){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 EN(){let e=new Uint32Array(64);for(let t=0;t<64;t++)e[t]=1024;return e[0]=e[32]=0,e}function MN(){let e=NN(),t=RN(),a=EN();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 gn=class Fn{constructor(){this.saveRouters=[],this.loadRouters=[]}static getInstance(){return Fn.instance==null&&(Fn.instance=new Fn),Fn.instance}static registerSaveRouter(t){Fn.getInstance().saveRouters.push(t)}static registerLoadRouter(t){Fn.getInstance().loadRouters.push(t)}static getSaveHandlers(t){return Fn.getHandlers(t,"save")}static getLoadHandlers(t,a){return Fn.getHandlers(t,"load",a)}static getHandlers(t,a,n){let r=[];return(a==="load"?Fn.getInstance().loadRouters:Fn.getInstance().saveRouters).forEach(s=>{let i=s(t,n);i!==null&&r.push(i)}),r}},$N=e=>gn.registerSaveRouter(e),PN=e=>gn.registerLoadRouter(e),_N=e=>gn.getSaveHandlers(e),FN=(e,t)=>gn.getLoadHandlers(e,t),p1="tensorflowjs",c1=1,js="models_store",Gr="model_info_store";function XA(){if(!B().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 h1(e){let t=e.result;t.createObjectStore(js,{keyPath:"modelPath"}),t.createObjectStore(Gr,{keyPath:"modelPath"})}var Ys=class{constructor(e){if(this.indexedDB=XA(),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(p1,c1);r.onupgradeneeded=()=>h1(r),r.onsuccess=()=>{let s=r.result;if(t==null){let i=s.transaction(js,"readonly"),o=i.objectStore(js).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{t.weightData=Tr.join(t.weightData);let i=Op(t),o=s.transaction(Gr,"readwrite"),l=o.objectStore(Gr),u;try{u=l.put({modelPath:this.modelPath,modelArtifactsInfo:i})}catch(c){return n(c)}let p;u.onsuccess=()=>{p=s.transaction(js,"readwrite");let c=p.objectStore(js),d;try{d=c.put({modelPath:this.modelPath,modelArtifacts:t,modelArtifactsInfo:i})}catch(h){return n(h)}d.onsuccess=()=>a({modelArtifactsInfo:i}),d.onerror=h=>{l=o.objectStore(Gr);let m=l.delete(this.modelPath);m.onsuccess=()=>(s.close(),n(d.error)),m.onerror=f=>(s.close(),n(d.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)})}};Ys.URL_SCHEME="indexeddb://";var KA=e=>B().getBool("IS_BROWSER")&&!Array.isArray(e)&&e.startsWith(Ys.URL_SCHEME)?DN(e.slice(Ys.URL_SCHEME.length)):null;gn.registerSaveRouter(KA);gn.registerLoadRouter(KA);function DN(e){return new Ys(e)}function ON(e){return e.startsWith(Ys.URL_SCHEME)?e.slice(Ys.URL_SCHEME.length):e}var zN=class{constructor(){this.indexedDB=XA()}async listModels(){return new Promise((e,t)=>{let a=this.indexedDB.open(p1,c1);a.onupgradeneeded=()=>h1(a),a.onsuccess=()=>{let n=a.result,r=n.transaction(Gr,"readonly"),s=r.objectStore(Gr).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=ON(e),new Promise((t,a)=>{let n=this.indexedDB.open(p1,c1);n.onupgradeneeded=()=>h1(n),n.onsuccess=()=>{let r=n.result,s=r.transaction(Gr,"readwrite"),i=s.objectStore(Gr),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(js,"readwrite");let c=l.objectStore(js).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)})}},vr="/",zl="tensorflowjs_models",YA="info",LN="model_topology",WN="weight_specs",BN="weight_data",VN="model_metadata";function ZA(e){return{info:[zl,e,YA].join(vr),topology:[zl,e,LN].join(vr),weightSpecs:[zl,e,WN].join(vr),weightData:[zl,e,BN].join(vr),modelMetadata:[zl,e,VN].join(vr)}}function JA(e){for(let t of Object.values(e))window.localStorage.removeItem(t)}function UN(e){let t=e.split(vr);if(t.length<3)throw new Error(`Invalid key format: ${e}`);return t.slice(1,t.length-1).join(vr)}function GN(e){return e.startsWith(Zs.URL_SCHEME)?e.slice(Zs.URL_SCHEME.length):e}var Zs=class{constructor(e){if(!B().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=ZA(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=Op(e),r=Tr.join(e.weightData);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,SN(r));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 JA(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=CN(s),t}};Zs.URL_SCHEME="localstorage://";var QA=e=>B().getBool("IS_BROWSER")&&!Array.isArray(e)&&e.startsWith(Zs.URL_SCHEME)?HN(e.slice(Zs.URL_SCHEME.length)):null;gn.registerSaveRouter(QA);gn.registerLoadRouter(QA);function HN(e){return new Zs(e)}var jN=class{constructor(){F(B().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=zl+vr,a=vr+YA;for(let n=0;n"scheme must not be undefined or null."),t.endsWith(Bl)&&(t=t.slice(0,t.indexOf(Bl))),F(t.length>0,()=>"scheme must not be an empty string.");let n=Wr.getInstance();F(n.managers[t]==null,()=>`A model store manager is already registered for scheme '${t}'.`),n.managers[t]=a}static getManager(t){let a=Wr.getInstance().managers[t];if(a==null)throw new Error(`Cannot find model manager for scheme '${t}'`);return a}static getSchemes(){return Object.keys(Wr.getInstance().managers)}};function th(e){if(e.indexOf(Bl)===-1)throw new Error(`The url string provided does not contain a scheme. Supported schemes are: ${ts.getSchemes().join(",")}`);return{scheme:e.split(Bl)[0],path:e.split(Bl)[1]}}async function eb(e,t,a=!1){F(e!==t,()=>`Old path and new path are the same: '${e}'`);let n=gn.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=gn.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=th(e).scheme,l=th(e).path,u=o===th(e).scheme,p=await r.load();a&&u&&await ts.getManager(o).removeModel(l);let c=await i.save(p);return a&&!u&&await ts.getManager(o).removeModel(l),c.modelArtifactsInfo}async function qN(){let e=ts.getSchemes(),t={};for(let a of e){let n=await ts.getManager(a).listModels();for(let r in n){let s=a+Bl+r;t[s]=n[r]}}return t}async function XN(e){let t=th(e);return ts.getManager(t.scheme).removeModel(t.path)}async function KN(e,t){return eb(e,t,!1)}async function YN(e,t){return eb(e,t,!0)}var ZN=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"||!B().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))}isTypedArray(e){return RA(e)}};if(B().get("IS_BROWSER")){B().setPlatform("browser",new ZN);try{ts.registerManager(Zs.URL_SCHEME,new jN)}catch(e){}try{ts.registerManager(Ys.URL_SCHEME,new zN)}catch(e){}}var JN={importFetch:()=>UC()},X2,QN=class{constructor(){this.util=GC(),this.textEncoder=new this.util.TextEncoder}fetch(e,t){return B().global.fetch!=null?B().global.fetch(e,t):(X2==null&&(X2=JN.importFetch()),X2(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)}isTypedArray(e){return this.util.types.isFloat32Array(e)||this.util.types.isInt32Array(e)||this.util.types.isUint8Array(e)||this.util.types.isUint8ClampedArray(e)}};B().get("IS_NODE")&&!B().get("IS_BROWSER")&&B().setPlatform("node",new QN);function _e(e,t="float32",a){return t=t||"float32",an(e),new Vt(e,t,a)}function eR(e,t){let a=R(e,"x","cast");if(!vA(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 L.runKernel(bi,n,r)}var Ue=z({cast_:eR});function tR(e){let t={x:R(e,"x","clone","string_or_numeric")};return L.runKernel(qi,t)}var Ia=z({clone_:tR});function pg(e,t=!1){console.log(e.toString(t))}LA();var aR={buffer:_e,cast:Ue,clone:Ia,print:pg};eN(aR);function nR(e,t){let a=R(e,"a","add"),n=R(t,"b","add");[a,n]=Rt(a,n);let r={a,b:n};return L.runKernel(os,r)}var we=z({add_:nR});function rR(e,t){let a=R(e,"a","floorDiv"),n=R(t,"b","floorDiv");[a,n]=Rt(a,n);let r={a,b:n};return L.runKernel(Vi,r)}var zp=z({floorDiv_:rR});function sR(e,t){let a=R(e,"a","div"),n=R(t,"b","div");if([a,n]=Rt(a,n),a.dtype==="int32"&&n.dtype==="int32")return zp(a,n);let r={a,b:n},s={};return L.runKernel(_i,r,s)}var ve=z({div_:sR});function iR(e,t){let a=R(e,"a","mul"),n=R(t,"b","mul");[a,n]=Rt(a,n);let r={a,b:n};return L.runKernel(yo,r)}var te=z({mul_:iR});function oR(e){let t=R(e,"x","abs");if(t.dtype==="complex64"){let a={x:t};return L.runKernel(cp,a)}else{let a={x:t};return L.runKernel(iu,a)}}var Za=z({abs_:oR});function lR(e){let t={x:R(e,"x","acos")};return L.runKernel(oi,t)}var tb=z({acos_:lR});function uR(e){let t={x:R(e,"x","acosh")};return L.runKernel(li,t)}var ab=z({acosh_:uR});function dR(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(!Cr(r.shape,a.shape))throw new Error("All tensors passed to tf.addN() must have the same shape")});let n=t;return L.runKernel(ui,n)}var Dh=z({addN_:dR});function pR(e,t=null,a=!1){let n={x:R(e,"x","all","bool")},r={axis:t,keepDims:a};return L.runKernel(di,n,r)}var nb=z({all_:pR});function cR(e,t=null,a=!1){let n={x:R(e,"x","any","bool")},r={axis:t,keepDims:a};return L.runKernel(pi,n,r)}var rb=z({any_:cR});function hR(e,t=0){let a={x:R(e,"x","argMax")},n={axis:t};return L.runKernel(ou,a,n)}var rr=z({argMax_:hR});function mR(e,t=0){let a={x:R(e,"x","argMin")},n={axis:t};return L.runKernel(lu,a,n)}var sb=z({argMin_:mR});function fR(e){let t={x:R(e,"x","asin")};return L.runKernel(ci,t)}var ib=z({asin_:fR});function gR(e){let t={x:R(e,"x","asinh")};return L.runKernel(hi,t)}var ob=z({asinh_:gR});function yR(e){let t={x:R(e,"x","atan")};return L.runKernel(mi,t)}var lb=z({atan_:yR});function xR(e,t){let a=R(e,"a","atan2"),n=R(t,"b","atan2");[a,n]=Rt(a,n);let r={a,b:n};return L.runKernel(gi,r)}var ub=z({atan2_:xR});function AR(e){let t={x:R(e,"x","atanh")};return L.runKernel(fi,t)}var db=z({atanh_:AR});function bR(e,t,a,n,r="NHWC",s){let i=e[3],o=[...t,i],l=hb(r);return Lp(e,o,a,s,n,null,null,l)}function pb(e,t,a,n,r,s,i="channelsLast"){let[o,l]=Hd(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 Lp(e,u,a,n,r,s,!1,i)}function vR(e,t,a,n,r,s,i="NDHWC"){let[o,l,u]=m1(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 cb(e,p,a,n,r,!1,c,s)}function Lp(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,,m]=t,[f,g]=Hd(a),[y,x]=Hd(n),A=Vl(d,y),b=Vl(h,x),{padInfo:w,outHeight:I,outWidth:T}=IR(r,u,p,f,g,A,b,s,o),N=i?m*c:m,M;return o==="channelsFirst"?M=[l,N,I,T]:o==="channelsLast"&&(M=[l,I,T,N]),{batchSize:l,dataFormat:o,inHeight:u,inWidth:p,inChannels:c,outHeight:I,outWidth:T,outChannels:N,padInfo:w,strideHeight:f,strideWidth:g,filterHeight:d,filterWidth:h,effectiveFilterHeight:A,effectiveFilterWidth:b,dilationHeight:y,dilationWidth:x,inShape:e,outShape:M,filterShape:t}}function cb(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,m,f,,g]=t,[y,x,A]=m1(a),[b,w,I]=m1(n),T=Vl(h,b),N=Vl(m,w),M=Vl(f,I),{padInfo:$,outDepth:E,outHeight:S,outWidth:_}=SR(r,u,p,c,y,x,A,T,N,M,o),O=s?g*d:g,W;return i==="channelsFirst"?W=[l,O,E,S,_]:i==="channelsLast"&&(W=[l,E,S,_,O]),{batchSize:l,dataFormat:i,inDepth:u,inHeight:p,inWidth:c,inChannels:d,outDepth:E,outHeight:S,outWidth:_,outChannels:O,padInfo:$,strideDepth:y,strideHeight:x,strideWidth:A,filterDepth:h,filterHeight:m,filterWidth:f,effectiveFilterDepth:T,effectiveFilterHeight:N,effectiveFilterWidth:M,dilationDepth:b,dilationHeight:w,dilationWidth:I,inShape:e,outShape:W,filterShape:t}}function wR(e,t,a,n,r){n==null&&(n=cg(e,t,a));let s=e[0],i=e[1],o=jd((s-t+2*n)/a+1,r),l=jd((i-t+2*n)/a+1,r);return[o,l]}function kR(e,t,a,n,r,s){r==null&&(r=cg(e,t[0],n[0]));let i=[0,0,0,a];for(let o=0;o<3;o++)e[o]+2*r>=t[o]&&(i[o]=jd((e[o]-t[o]+2*r)/n[o]+1,s));return i}function cg(e,t,a,n=1){let r=Vl(t,n);return Math.floor((e[0]*(a-1)-a+r)/2)}function Hd(e){return typeof e=="number"?[e,e,e]:e.length===2?[e[0],e[1],1]:e}function m1(e){return typeof e=="number"?[e,e,e]:e}function Vl(e,t){return t<=1?e:e+(e-1)*(t-1)}function IR(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=wR([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),m=Math.floor(d/2),f=d-m,g=Math.floor(h/2),y=h-g;u={top:m,bottom:f,left:g,right:y,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],m=l==="channelsLast"?e[2][0]:e[3][0],f=l==="channelsLast"?e[2][1]:e[3][1];u={top:d,bottom:h,left:m,right:f,type:d===0&&h===0&&m===0&&f===0?"VALID":"EXPLICIT"},p=jd((t-s+d+h)/n+1,o),c=jd((a-i+m+f)/r+1,o)}else throw Error(`Unknown padding parameter: ${e}`);return{padInfo:u,outHeight:p,outWidth:c}}function SR(e,t,a,n,r,s,i,o,l,u,p){let c,d,h,m;if(e==="valid"&&(e=0),typeof e=="number"){c={top:e,bottom:e,left:e,right:e,front:e,back:e,type:e===0?"VALID":"NUMBER"};let f=kR([t,a,n,1],[o,l,u],1,[r,s,i],e,p);d=f[0],h=f[1],m=f[2]}else if(e==="same"){d=Math.ceil(t/r),h=Math.ceil(a/s),m=Math.ceil(n/i);let f=(d-1)*r+o-t,g=(h-1)*s+l-a,y=(m-1)*i+u-n,x=Math.floor(f/2),A=f-x,b=Math.floor(g/2),w=g-b,I=Math.floor(y/2),T=y-I;c={top:b,bottom:w,left:I,right:T,front:x,back:A,type:"SAME"}}else throw Error(`Unknown padding parameter: ${e}`);return{padInfo:c,outDepth:d,outHeight:h,outWidth:m}}function jd(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 qd(e){let[t,a,n]=Hd(e);return t===1&&a===1&&n===1}function Nr(e,t){return qd(e)||qd(t)}function Js(e){return Hd(e).every(t=>t>0)}function hb(e){if(e==="NHWC")return"channelsLast";if(e==="NCHW")return"channelsFirst";throw new Error(`Unknown dataFormat ${e}`)}function Nn(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(Hl(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(Hl(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 CR(e,t){let a={x:R(e,"x","reshape","string_or_numeric")},n={shape:t};return L.runKernel(Ru,a,n)}var Q=z({reshape_:CR});function TR(e,t,a,n,r){let s=R(e,"x","avgPool","float32"),i=1;F(Nr(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=Q(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}.`),Nn("avgPool",n,r);let u={x:o},p={filterSize:t,strides:a,pad:n,dimRoundingMode:r},c=L.runKernel(yi,u,p);return c=Ue(c,s.dtype),l?Q(c,[c.shape[1],c.shape[2],c.shape[3]]):c}var hg=z({avgPool_:TR});function NR(e,t,a,n,r,s="NDHWC"){let i=R(e,"x","avgPool3d","float32"),o=i,l=!1;i.rank===4&&(l=!0,o=Q(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}`),F(typeof a=="number"&&a>0||Array.isArray(a)&&a[0]>0&&a[1]>0&&a[2]>0,()=>`Error in avgPool3d: Stride must be > 0, but got '${a}'`),Nn("avgPool3d",n,r);let u={x:o},p={filterSize:t,strides:a,pad:n,dimRoundingMode:r,dataFormat:s},c=L.runKernel(uu,u,p);return c=Ue(c,o.dtype),l?Q(c,[c.shape[1],c.shape[2],c.shape[3],c.shape[4]]):c}var mb=z({avgPool3d_:NR});function RR(e,t=0){F(e.length>=1,()=>"Pass at least one tensor to concat");let a=Gd(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 Ia(a[0]);let n=a,r={axis:t};return L.runKernel(hu,n,r)}var lt=z({concat_:RR});function ER(e,t,a=!1,n=!1){let r=R(e,"a","matMul"),s=R(t,"b","matMul");[r,s]=Rt(r,s);let i={a:r,b:s},o={transposeA:a,transposeB:n};return L.runKernel(xi,i,o)}var pt=z({matMul_:ER});function MR(e){let t={x:R(e,"x","sigmoid","float32")};return L.runKernel(Bo,t)}var za=z({sigmoid_:MR});function $R(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 L.runKernel(Pu,r,s)}var Fe=z({slice_:$R});function PR(e){let t={x:R(e,"x","tanh","float32")};return L.runKernel(Zo,t)}var hh=z({tanh_:PR});function _R(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=lt([u,c],1),h=pt(d,o),m=we(h,l),f=m.shape[0],g=m.shape[1]/4,y=[f,g],x=Fe(m,[0,0],y),A=Fe(m,[0,g],y),b=Fe(m,[0,g*2],y),w=Fe(m,[0,g*3],y),I=we(te(za(x),hh(A)),te(p,za(we(i,b)))),T=te(hh(I),za(w));return[I,T]}var fb=z({basicLSTMCell_:_R});function FR(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 L.runKernel(du,s,i)}var mg=z({batchToSpaceND_:FR});function DR(e){let t;return e.rank===0||e.rank===1?t=Q(e,[1,1,1,e.size]):e.rank===2?t=Q(e,[1,1,e.shape[0],e.shape[1]]):e.rank===3?t=Q(e,[1,e.shape[0],e.shape[1],e.shape[2]]):t=e,t}function OR(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")),F(o.rank===l.rank,()=>"Batch normalization gradient requires mean and variance to have equal ranks."),F(p==null||o.rank===p.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:DR(i),scale:u,offset:p,mean:o,variance:l},d={varianceEpsilon:s},h=L.runKernel(Ui,c,d);return Q(h,i.shape)}var Wp=z({batchNorm_:OR});function zR(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")),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}.`),p!=null&&F(p.rank===2||p.rank===1,()=>`Error in batchNorm2D: offset must be rank 2 or rank 1 but got rank ${p.rank}.`),Wp(i,o,l,p,u,s)}var gb=z({batchNorm2d_:zR});function LR(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")),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}.`),p!=null&&F(p.rank===3||p.rank===1,()=>`Error in batchNorm3D: offset must be rank 3 or rank 1 but got rank ${p.rank}.`),Wp(i,o,l,p,u,s)}var yb=z({batchNorm3d_:LR});function WR(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")),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}.`),p!=null&&F(p.rank===4||p.rank===1,()=>`Error in batchNorm4D: offset must be rank 4 or rank 1 but got rank ${p.rank}.`),Wp(i,o,l,p,u,s)}var xb=z({batchNorm4d_:WR});function BR(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 L.runKernel(Ai,s,i)}var fg=z({bincount_:BR});function VR(e,t){let a=R(e,"x","bitwiseAnd"),n=R(t,"y","bitwiseAnd");if(!Cr(a.shape,n.shape))throw new Error(`BitwiseAnd: Tensors must have the same shape. x: ${a.shape}, y: ${n.shape}`);if(a.dtype!=="int32"||n.dtype!=="int32")throw new Error(`BitwiseAnd: Only supports 'int32' values in tensor, found type of x: ${a.dtype} and type of y: ${n.dtype}`);let r={a,b:n};return L.runKernel(pu,r)}var Ab=z({bitwiseAnd_:VR});function UR(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 L.runKernel(cu,r)}var bb=z({broadcastArgs_:UR});function GR(e,t){let a=R(e,"broadcastTo","x"),n=a.shape;if(an(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 Ia(a);let i={x:a},o={reps:s};return L.runKernel(us,i,o)}var Ul=z({broadcastTo_:GR});function HR(e){let t={x:R(e,"x","ceil","float32")};return L.runKernel(vi,t)}var vb=z({ceil_:HR});function sr(e,t,a){an(e),a=a||lp(t);let n={shape:e,value:t,dtype:a};return L.runKernel(Au,{},n)}function jR(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 sr(n.shape,t,n.dtype);let r={x:n},s={clipValueMin:t,clipValueMax:a};return L.runKernel(ls,r,s)}var wb=z({clipByValue_:jR});function qR(e){return lt(e,0)}var kb=z({concat1d_:qR});function XR(e,t){return lt(e,t)}var Vu=z({concat2d_:XR});function KR(e,t){return lt(e,t)}var Ib=z({concat3d_:KR});function YR(e,t){return lt(e,t)}var Sb=z({concat4d_:YR});function ZR(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=Q(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}.`),Nn("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(Nr(a,s),()=>`Error in conv2D: Either strides or dilations must be 1. Got strides ${a} and dilations '${s}'`),F(Js(s),()=>"Error in conv2D: Dilated rates should be larger than 0."),F(Js(a),()=>"Error in conv2D: Strides should be larger than 0.");let d={x:u,filter:l},h={strides:a,pad:n,dataFormat:r,dilations:s,dimRoundingMode:i},m=L.runKernel(wi,d,h);return p?Q(m,[m.shape[1],m.shape[2],m.shape[3]]):m}var Bp=z({conv2d_:ZR});function JR(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=Q(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}.`),Nn("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(Nr(a,s),()=>`Error in conv1D: Either stride or dilation must be 1. Got stride ${a} and dilation '${s}'`),F(Js(s),()=>"Error in conv1D: Dilated rates should be larger than 0."),F(Js(a),()=>"Error in conv1D: Stride should be larger than 0."),F(r==="NWC",()=>`Error in conv1d: got dataFormat of ${r} but only NWC is currently supported.`);let c=Q(l,[1,l.shape[0],l.shape[1],l.shape[2]]),d=Q(u,[u.shape[0],1,u.shape[1],u.shape[2]]),h=Bp(d,c,[1,a],n,"NHWC",[1,s],i);return p?Q(h,[h.shape[2],h.shape[3]]):Q(h,[h.shape[0],h.shape[2],h.shape[3]])}var Cb=z({conv1d_:JR});function QR(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=Q(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 p=s==="NHWC"?o[3]:o[1],c=s==="NHWC"?l.shape[3]:l.shape[1];F(p===a.shape[2],()=>`Error in conv2dDerInput: depth of input (${p}) 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]}.`),Nn("conv2dDerInput",r,i);let d={dy:l,filter:a},h={strides:n,pad:r,dataFormat:s,dimRoundingMode:i,inputShape:o},m=L.runKernel(ki,d,h);return u?Q(m,[m.shape[1],m.shape[2],m.shape[3]]):m}var Tb=z({conv2DBackpropInput_:QR});function eE(e,t,a,n,r,s){let i=R(e,"x","conv2dTranspose"),o=R(t,"filter","conv2dTranspose");return Tb(a,i,o,n,r,"NHWC",s)}var Nb=z({conv2dTranspose_:eE});function tE(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=Q(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(Nr(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.`),F(Js(s),()=>"Error in conv3D: Dilated rates should be larger than 0."),F(Js(a),()=>"Error in conv3D: Strides should be larger than 0.");let p={x:l,filter:o},c={strides:a,pad:n,dataFormat:r,dilations:s},d=L.runKernel(Ii,p,c);return u?Q(d,[d.shape[1],d.shape[2],d.shape[3],d.shape[4]]):d}var Rb=z({conv3d_:tE});function aE(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=Q(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 p={dy:i,filter:a},c={pad:r,strides:n,inputShape:s},d=L.runKernel(Si,p,c);return o?Q(d,[d.shape[1],d.shape[2],d.shape[3],d.shape[4]]):d}var nE=z({conv3DBackpropInput_:aE});function rE(e,t,a,n,r){let s=R(e,"x","conv3dTranspose"),i=R(t,"filter","conv3dTranspose");return nE(a,s,i,n,r)}var Eb=z({conv3dTranspose_:rE});function sE(e){let t={x:R(e,"x","cos","float32")};return L.runKernel(Ci,t)}var Mb=z({cos_:sE});function iE(e){let t={x:R(e,"x","cosh","float32")};return L.runKernel(Ti,t)}var $b=z({cosh_:iE});function oE(e,t=0,a=!1,n=!1){let r={x:R(e,"x","cumprod")},s={axis:t,exclusive:a,reverse:n};return L.runKernel(Ni,r,s)}var Pb=z({cumprod_:oE});function lE(e,t=0,a=!1,n=!1){let r={x:R(e,"x","cumsum")},s={axis:t,exclusive:a,reverse:n};return L.runKernel(Ri,r,s)}var _b=z({cumsum_:lE});function uE(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 L.runKernel(fu,i,o)}var Fb=z({denseBincount_:uE});function dE(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 +`;return d[d.length-1]=" "+d[d.length-1]+"]"+(s?"":m),d}function Sd(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||J1(t,this.size),this.strides=su(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;nch(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=>ch(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||(this.kerasMask&&this.kerasMask.dispose(),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 Ol.print(this,e)}clone(){return this.throwIfDisposed(),Ol.clone(this)}toString(e=!1){let t=this.dataSync();return ZT(t,this.shape,this.dtype,e)}cast(e){return this.throwIfDisposed(),Ol.cast(this,e)}variable(e=!0,t,a){return this.throwIfDisposed(),On().makeVariable(this,e,t,a)}};Object.defineProperty(yt,Symbol.hasInstance,{value:e=>!!e&&e.data!=null&&e.dataSync!=null&&e.throwIfDisposed!=null});function _A(){return tg("Tensor",()=>yt)}_A();var Ud=class extends yt{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(!Cr(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(Ud,Symbol.hasInstance,{value:e=>e instanceof yt&&e.assign!=null&&e.assign instanceof Function});var FA={};Ze(FA,{assertTypesMatch:()=>zA,getTensorsInContainer:()=>ng,isTensorInList:()=>rN,makeTypesMatch:()=>Rt});var n1;(function(e){e.R0="R0",e.R1="R1",e.R2="R2",e.R3="R3",e.R4="R4",e.R5="R5",e.R6="R6"})(n1||(n1={}));var r1;(function(e){e.float32="float32",e.int32="int32",e.bool="int32",e.complex64="complex64"})(r1||(r1={}));var s1;(function(e){e.float32="float32",e.int32="int32",e.bool="bool",e.complex64="complex64"})(s1||(s1={}));var i1;(function(e){e.float32="float32",e.int32="float32",e.bool="float32",e.complex64="complex64"})(i1||(i1={}));var o1;(function(e){e.float32="complex64",e.int32="complex64",e.bool="complex64",e.complex64="complex64"})(o1||(o1={}));var nN={float32:i1,int32:r1,bool:s1,complex64:o1};function pa(e,t){if(e==="string"||t==="string"){if(e==="string"&&t==="string")return"string";throw new Error(`Can not upcast ${e} with ${t}`)}return nN[e][t]}function Pp(e){return pa(e,"int32")}function DA(e){return e!=null&&typeof e=="object"&&"texture"in e&&e.texture instanceof WebGLTexture}function OA(e){return typeof GPUBuffer!="undefined"&&e!=null&&typeof e=="object"&&"buffer"in e&&e.buffer instanceof GPUBuffer}function Rt(e,t){if(e.dtype===t.dtype)return[e,t];let a=pa(e.dtype,t.dtype);return[e.cast(a),t.cast(a)]}function zA(e,t){F(e.dtype===t.dtype,()=>`The dtypes of the first(${e.dtype}) and second(${t.dtype}) input must match`)}function rN(e,t){return t.some(a=>a.id===e.id)}function ng(e){let t=[];return LA(e,t,new Set),t}function LA(e,t,a){if(e==null)return;if(e instanceof yt){t.push(e);return}if(!sN(e))return;let n=e;for(let r in n){let s=n[r];a.has(s)||(a.add(s),LA(s,t,a))}}function sN(e){return Array.isArray(e)||typeof e=="object"}function q2(e){return e.kernelName!=null}var Yx=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()}},rg=class l1{constructor(t){this.ENV=t,this.registry={},this.registryFactory={},this.pendingBackendInitId=0,this.state=new Yx}async ready(){if(this.pendingBackendInit!=null)return this.pendingBackendInit.then(()=>{});if(this.backendInstance!=null)return;let t=this.getSortedBackends();for(let a=0;a{t.setupFunc!=null&&t.setupFunc(this.backendInstance)})}disposeRegisteredKernels(t){Jn(t).forEach(a=>{a.disposeFunc!=null&&a.disposeFunc(this.registry[t])})}initializeBackend(t){let a=this.registryFactory[t];if(a==null)throw new Error(`Cannot initialize backend ${t}, no registration found.`);try{let n=a.factory();if(n&&!(n instanceof ru)&&typeof n.then=="function"){let r=++this.pendingBackendInitId,s=n.then(i=>r(rthis.registryFactory[a].priority-this.registryFactory[t].priority)}initializeBackendsAndReturnBest(){let t=this.getSortedBackends();for(let a=0;athis.startScope(n),()=>this.endScope(r),()=>(r=a(),r instanceof Promise&&console.error("Cannot return a Promise inside of tidy."),r))}scopedRun(t,a,n){t();try{let r=n();return a(),r}catch(r){throw a(),r}}nextTensorId(){return l1.nextTensorId++}nextVariableId(){return l1.nextVariableId++}clone(t){let a=L.runKernel(qi,{x:t}),n={x:t},r=i=>({x:()=>{let o="float32",l={x:i},u={dtype:o};return L.runKernel(bi,l,u)}}),s=[];return this.addTapeNode(this.state.activeScope.name,n,[a],r,s,{}),a}runKernel(t,a,n){if(this.backendName==null&&this.backend,Bd(t,this.backendName)==null)throw new Error(`Kernel '${t}' not registered for backend '${this.backendName}'`);return this.runKernelFunc({kernelName:t,inputs:a,attrs:n})}shouldCheckForMemLeaks(){return this.ENV.getBool("IS_TEST")}checkKernelForMemLeak(t,a,n){let r=this.backend.numDataIds(),s=0;n.forEach(l=>{s+=l.dtype==="complex64"?3:1});let i=this.state.numDataMovesStack[this.state.numDataMovesStack.length-1],o=r-a-s-i;if(o>0)throw new Error(`Backend '${this.backendName}' has an internal memory leak (${o} data ids) after running '${t}'`)}runKernelFunc(t){let a,n=[],r=this.isTapeOn(),s=this.state.numBytes,i=this.state.numTensors;this.shouldCheckForMemLeaks()&&this.state.numDataMovesStack.push(0);let o;this.backendName==null&&this.backend;let l,u=q2(t)?t.kernelName:this.state.activeScope!=null?this.state.activeScope.name:"";if(q2(t)){let{kernelName:m,inputs:f,attrs:g}=t;this.backendName==null&&this.backend;let y=Bd(m,this.backendName);F(y!=null,()=>`Cannot find registered kernel '${m}' for backend '${this.backendName}'`),o=()=>{let x=this.backend.numDataIds();l=y.kernelFunc({inputs:f,attrs:g,backend:this.backend});let A=Array.isArray(l)?l:[l];this.shouldCheckForMemLeaks()&&this.checkKernelForMemLeak(m,x,A);let b=A.map(w=>w.rank!=null?w:this.makeTensorFromTensorInfo(w));if(r){let w=this.getTensorsForGradient(m,f,b);n=this.saveTensorsForBackwardMode(w)}return b}}else{let{forwardFunc:m}=t,f=g=>{r&&(n=g.map(y=>this.keep(this.clone(y))))};o=()=>{let g=this.backend.numDataIds();l=this.tidy(()=>m(this.backend,f));let y=Array.isArray(l)?l:[l];return this.shouldCheckForMemLeaks()&&this.checkKernelForMemLeak(u,g,y),y}}let{inputs:p,attrs:c}=t,d=q2(t)?null:t.backwardsFunc,h;return this.scopedRun(()=>this.state.kernelDepth++,()=>this.state.kernelDepth--,()=>{!this.ENV.getBool("DEBUG")&&!this.state.profiling?a=o():(h=this.profiler.profileKernel(u,p,()=>o()),this.ENV.getBool("DEBUG")&&this.profiler.logKernelProfile(h),a=h.outputs)}),r&&this.addTapeNode(u,p,a,d,n,c),this.state.profiling&&this.state.activeProfile.kernels.push({name:u,bytesAdded:this.state.numBytes-s,totalBytesSnapshot:this.state.numBytes,tensorsAdded:this.state.numTensors-i,totalTensorsSnapshot:this.state.numTensors,inputShapes:Object.keys(p).map(m=>p[m]!=null?p[m].shape:null),outputShapes:a.map(m=>m.shape),kernelTimeMs:h.timeMs,extraInfo:h.extraInfo}),Array.isArray(l)?a:a[0]}saveTensorsForBackwardMode(t){return t.map(a=>this.keep(this.clone(a)))}getTensorsForGradient(t,a,n){let r=t1(t);if(r!=null){let s=r.inputsToSave||[],i=r.outputsToSave||[],o;r.saveAllInputs?(F(Array.isArray(a),()=>"saveAllInputs is true, expected inputs to be an array."),o=Object.keys(a).map(u=>a[u])):o=s.map(u=>a[u]);let l=n.filter((u,p)=>i[p]);return o.concat(l)}return[]}makeTensor(t,a,n,r){if(t==null)throw new Error("Values passed to engine.makeTensor() are null");n=n||"float32",r=r||this.backend;let s=t;n==="string"&&Ur(t[0])&&(s=t.map(l=>$p(l)));let i=r.write(s,a,n),o=new yt(a,n,i,this.nextTensorId());if(this.trackTensor(o,r),n==="string"){let l=this.state.tensorInfo.get(i),u=kA(s);this.state.numBytes+=u-l.bytes,l.bytes=u}return o}makeTensorFromDataId(t,a,n,r){n=n||"float32";let s={dataId:t,shape:a,dtype:n};return this.makeTensorFromTensorInfo(s,r)}makeTensorFromTensorInfo(t,a){let{dataId:n,shape:r,dtype:s}=t,i=new yt(r,s,n,this.nextTensorId());return this.trackTensor(i,a),i}makeVariable(t,a=!0,n,r){n=n||this.nextVariableId().toString(),r!=null&&r!==t.dtype&&(t=t.cast(r));let s=new Ud(t,a,n,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(t,a){this.state.numTensors++,t.dtype==="string"&&this.state.numStringTensors++;let n=0;t.dtype!=="complex64"&&t.dtype!=="string"&&(n=t.size*dh(t.dtype)),this.state.numBytes+=n,this.state.tensorInfo.has(t.dataId)||(this.state.numDataBuffers++,this.state.tensorInfo.set(t.dataId,{backend:a||this.backend,dtype:t.dtype,shape:t.shape,bytes:n})),t instanceof Ud||this.track(t)}incRef(t,a){this.trackTensor(t,a),this.backend.incRef(t.dataId)}removeDataId(t,a){this.state.tensorInfo.has(t)&&this.state.tensorInfo.get(t).backend===a&&(this.state.tensorInfo.delete(t),this.state.numDataBuffers--)}disposeTensor(t){if(!this.state.tensorInfo.has(t.dataId))return;let a=this.state.tensorInfo.get(t.dataId);if(this.state.numTensors--,t.dtype==="string"&&(this.state.numStringTensors--,this.state.numBytes-=a.bytes),t.dtype!=="complex64"&&t.dtype!=="string"){let n=t.size*dh(t.dtype);this.state.numBytes-=n}a.backend.disposeData(t.dataId)&&this.removeDataId(t.dataId,a.backend)}disposeVariables(){for(let t in this.state.registeredVariables){let a=this.state.registeredVariables[t];this.disposeVariable(a)}}disposeVariable(t){this.disposeTensor(t),this.state.registeredVariables[t.name]!=null&&delete this.state.registeredVariables[t.name]}memory(){let t=this.backend.memory();return t.numTensors=this.state.numTensors,t.numDataBuffers=this.state.numDataBuffers,t.numBytes=this.state.numBytes,this.state.numStringTensors>0&&(t.unreliable=!0,t.reasons==null&&(t.reasons=[]),t.reasons.push("Memory usage by string tensors is approximate (2 bytes per character)")),t}async profile(t){this.state.profiling=!0;let a=this.state.numBytes,n=this.state.numTensors;this.state.activeProfile.kernels=[],this.state.activeProfile.result=await t(),this.state.profiling=!1,this.state.activeProfile.peakBytes=Math.max(...this.state.activeProfile.kernels.map(r=>r.totalBytesSnapshot)),this.state.activeProfile.newBytes=this.state.numBytes-a,this.state.activeProfile.newTensors=this.state.numTensors-n;for(let r of this.state.activeProfile.kernels)r.kernelTimeMs=await r.kernelTimeMs,r.extraInfo=await r.extraInfo;return this.state.activeProfile}isTapeOn(){return this.state.gradientDepth>0&&this.state.kernelDepth===0}addTapeNode(t,a,n,r,s,i){let o={id:this.state.nextTapeNodeId++,kernelName:t,inputs:a,outputs:n,saved:s},l=t1(t);l!=null&&(r=l.gradFunc),r!=null&&(o.gradient=u=>(u=u.map((p,c)=>{if(p==null){let d=n[c],h=Eh(d.size,d.dtype);return this.makeTensor(h,d.shape,d.dtype)}return p}),r(u.length>1?u:u[0],s,i))),this.state.activeTape.push(o)}keep(t){return t.kept=!0,t}startTape(){this.state.gradientDepth===0&&(this.state.activeTape=[]),this.state.gradientDepth++}endTape(){this.state.gradientDepth--}startScope(t){let a={track:[],name:"unnamed scope",id:this.state.nextScopeId++};t&&(a.name=t),this.state.scopeStack.push(a),this.state.activeScope=a}endScope(t){let a=ng(t),n=new Set(a.map(s=>s.id));for(let s=0;s{!s.kept&&s.scopeId===r.id&&this.track(s)})}gradients(t,a,n,r=!1){if(F(a.length>0,()=>"gradients() received an empty list of xs."),n!=null&&n.dtype!=="float32")throw new Error(`dy must have 'float32' dtype, but has '${n.dtype}'`);let s=this.scopedRun(()=>this.startTape(),()=>this.endTape(),()=>this.tidy("forward",t));F(s instanceof yt,()=>"The result y returned by f() must be a tensor.");let i=KT(this.state.activeTape,a,s);if(!r&&i.length===0&&a.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 o={};o[s.id]=n==null?iN(s.shape):n,YT(o,i,u=>this.tidy(u),oN);let l=a.map(u=>o[u.id]);return this.state.gradientDepth===0&&(this.state.activeTape.forEach(u=>{for(let p of u.saved)p.dispose()}),this.state.activeTape=null),{value:s,grads:l}})}customGrad(t){return F(Kr(t),()=>"The f passed in customGrad(f) must be a function."),(...a)=>{F(a.every(o=>o instanceof yt),()=>"The args passed in customGrad(f)(x1, x2,...) must all be tensors");let n,r={};a.forEach((o,l)=>{r[l]=o});let s=(o,l)=>(n=t(...a,l),F(n.value instanceof yt,()=>"The function f passed in customGrad(f) must return an object where `obj.value` is a tensor"),F(Kr(n.gradFunc),()=>"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function."),n.value),i=(o,l)=>{let u=n.gradFunc(o,l),p=Array.isArray(u)?u:[u];F(p.length===a.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(p.every(d=>d instanceof yt),()=>"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 c={};return p.forEach((d,h)=>{c[h]=()=>d}),c};return this.runKernelFunc({forwardFunc:s,backwardsFunc:i,inputs:r})}}readSync(t){return this.state.tensorInfo.get(t).backend.readSync(t)}read(t){return this.state.tensorInfo.get(t).backend.read(t)}readToGPU(t,a){return this.state.tensorInfo.get(t).backend.readToGPU(t,a)}async time(t){let a=Vd(),n=await this.backend.time(t);return n.wallMs=Vd()-a,n}track(t){return this.state.activeScope!=null&&(t.scopeId=this.state.activeScope.id,this.state.activeScope.track.push(t)),t}get registeredVariables(){return this.state.registeredVariables}reset(){this.pendingBackendInitId++,this.state.dispose(),this.ENV.reset(),this.state=new Yx;for(let t in this.registry)this.disposeRegisteredKernels(t),this.registry[t].dispose(),delete this.registry[t];this.backendName=null,this.backendInstance=null,this.pendingBackendInit=null}};rg.nextTensorId=0;rg.nextVariableId=0;function iN(e){let t=Q1(mt(e),"float32");return L.makeTensor(t,e,"float32")}function WA(){let e=NA();if(e._tfengine==null){let t=new TA(e);e._tfengine=new rg(t)}return ST(e._tfengine.ENV),eN(()=>e._tfengine),e._tfengine}var L=WA();function oN(e,t){let a={a:e,b:t};return L.runKernel(os,a)}var _p={};Ze(_p,{isBrowser:()=>BA,isMobile:()=>dN,mockIsMobile:()=>uN});function lN(){return typeof navigator!="undefined"&&navigator!=null}var u1;function uN(e){u1=e}function dN(e){if(u1!==void 0)return u1;if(e||lN()){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 BA(){return typeof window!="undefined"&&window.document!=null||typeof WorkerGlobalScope!="undefined"}var Ba=B();Ba.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.")});Ba.registerFlag("IS_BROWSER",()=>BA());Ba.registerFlag("IS_NODE",()=>typeof process!="undefined"&&typeof process.versions!="undefined"&&typeof process.versions.node!="undefined");Ba.registerFlag("IS_CHROME",()=>typeof navigator!="undefined"&&navigator!=null&&navigator.userAgent!=null&&/Chrome/.test(navigator.userAgent)&&/Google Inc/.test(navigator.vendor));Ba.registerFlag("IS_SAFARI",()=>typeof navigator!="undefined"&&navigator!=null&&navigator.userAgent!=null&&/Safari/.test(navigator.userAgent)&&/Apple/.test(navigator.vendor));Ba.registerFlag("PROD",()=>!1);Ba.registerFlag("TENSORLIKE_CHECK_SHAPE_CONSISTENCY",()=>Ba.getBool("DEBUG"));Ba.registerFlag("DEPRECATION_WARNINGS_ENABLED",()=>!0);Ba.registerFlag("IS_TEST",()=>!1);Ba.registerFlag("CHECK_COMPUTATION_FOR_ERRORS",()=>Ba.getBool("DEBUG"));Ba.registerFlag("WRAP_TO_IMAGEBITMAP",()=>!1);Ba.registerFlag("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU",()=>!1);Ba.registerFlag("USE_SETTIMEOUTCUSTOM",()=>!1);function Qn(e,t){let a=e;if(Jt(e))return t==="string"?[]:[e.length];if(DA(e)){let r=e.channels||"RGBA";return[e.height,e.width*r.length]}else if(OA(e))return[e.buffer.size/(t==null?4:dh(t))];if(!Array.isArray(e))return[];let n=[];for(;Array.isArray(a)||Jt(a)&&t!=="string";)n.push(a.length),a=a[0];return Array.isArray(e)&&B().getBool("TENSORLIKE_CHECK_SHAPE_CONSISTENCY")&&VA(e,n,[]),n}function VA(e,t,a){if(a=a||[],!Array.isArray(e)&&!Jt(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),Zx(n,r,t,a),e==null||!Jt(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=Qn(e,r);!Jt(e)&&!Array.isArray(e)&&(e=[e]);let i=r!=="string"?Fh(e,r):Qr(e,[],!0);return L.makeTensor(i,s,r)}function Gd(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 sg="__op";function z(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+sg;let r=(...s)=>{L.startScope(a);try{let i=n(...s);return Mh(i)&&console.error("Cannot return a Promise inside of tidy."),L.endScope(i),i}catch(i){throw L.endScope(null),i}};return Object.defineProperty(r,"name",{value:a,configurable:!0}),r}function pN(e,t){let a=R(e,"real","complex"),n=R(t,"imag","complex");Ta(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 L.runKernel(pp,r)}var Sr=z({complex_:pN});function ps(e,t,a,n){if(n==null)n=lp(e);else if(n==="complex64")throw new Error("Cannot construct a complex64 tensor directly. Please use tf.complex(real, imag).");if(OA(e)||DA(e)){if(n!=="float32"&&n!=="int32")throw new Error(`Creating tensor from GPU data only supports 'float32'|'int32' dtype, while the dtype is ${n}.`);return L.backend.createTensorFromGPUData(e,t||a,n)}if(!Jt(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){an(t);let r=mt(t),s=mt(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!Jt(e)&&!Array.isArray(e)&&(e=[e]),t=t||a,e=n!=="string"?Fh(e,n):Qr(e,[],!0),L.makeTensor(e,t,n)}function Ve(e,t,a){let n=Qn(e,a);return ps(e,t,n,a)}var Ks={float32:4,float16:2,int32:4,uint16:2,uint8:1,bool:1,complex64:8},Tr=class UA{static join(t){return new UA(t).slice()}constructor(t){if(this.shards=[],this.previousShardIndex=0,t==null||(t instanceof Array||(t=[t]),t=t.map(n=>Jt(n)?n.buffer:n),t.length===0))return;this.bufferUniformSize=t[0].byteLength;let a=0;for(let n=0;n=this.byteLength)return-1;if(this.bufferUniformSize!=null)return this.previousShardIndex=Math.floor(t/this.bufferUniformSize),this.previousShardIndex;function a(r){return t=r.end?1:0}if(a(this.shards[this.previousShardIndex])===0)return this.previousShardIndex;let n=cN(this.shards,a);return n===-1?-1:(this.previousShardIndex=n,this.previousShardIndex)}};function cN(e,t){let a=0,n=e.length;for(;a<=n;){let r=Math.floor((n-a)/2)+a,s=t(e[r]);if(s===0)return r;s<0?n=r:a=r+1}return-1}function ig(){B().set("PROD",!0)}function hN(){B().set("DEBUG",!0)}function mN(){B().set("DEPRECATION_WARNINGS_ENABLED",!1),console.warn("TensorFlow.js deprecation warnings have been disabled.")}function og(e){B().getBool("DEPRECATION_WARNINGS_ENABLED")&&console.warn(e+" You can disable deprecation warnings with tf.disableDeprecationWarnings().")}aN(og);function fN(){L.disposeVariables()}function It(){return L}function gN(){return L.memory()}function yN(e){return L.profile(e)}function De(e,t){return L.tidy(e,t)}function J(e){ng(e).forEach(t=>t.dispose())}function zn(e){return L.keep(e)}function xN(e){return L.time(e)}function Fp(e){return L.setBackend(e)}function Dp(){return L.ready()}function Qt(){return L.backendName}function AN(e){L.removeBackend(e)}function lg(e){return L.findBackend(e)}function bN(e){return L.findBackendFactory(e)}function tl(e,t,a=1){return L.registerBackend(e,t,a)}function Bn(){return L.backend}function vN(e,t){B().setPlatform(e,t)}var es=4;async function wN(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,y)=>g+y.length,0)+es*d.length,m=new Uint8Array(h),f=0;for(let g=0;ga.slice(r+o,r+l));n[s.name]=HA(s,a.slice(r,r+i)),r+=i}return n}function kN(e,t){let a=mt(e.shape),n;if("quantization"in e){let r=e.quantization;n=Ks[r.dtype]}else if(e.dtype==="string"){let r=0;for(let s=0;s(r=await Jx(n,r,p),r.slice(u,p)));r=await Jx(n,r,i);let o=r.slice(0,i);r=r.slice(i);let l=HA(s,o);if(a[s.name]=l,Qt()==="webgpu"){let u=Bn();"uploadToGPU"in u&&mt(l.shape)>=B().get("WEBGPU_CPU_HANDOFF_SIZE_THRESHOLD")&&u.uploadToGPU(l.dataId)}}return a}function SN(e){if(e===null)throw new Error(`Invalid input value: ${JSON.stringify(e)}`);let t=0,a=[];e.forEach(s=>{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 ug=typeof Buffer!="undefined"&&(typeof Blob=="undefined"||typeof atob=="undefined"||typeof btoa=="undefined");function Qx(e){return ug?Buffer.byteLength(e,"utf8"):new Blob([e]).size}function CN(e){if(ug)return Buffer.from(e).toString("base64");let t=new Uint8Array(e),a="";for(let n=0,r=t.length;n{let n=a<<13,r=0;for(;!(n&8388608);)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 EN(){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 MN(){let e=new Uint32Array(64);for(let t=0;t<64;t++)e[t]=1024;return e[0]=e[32]=0,e}function $N(){let e=RN(),t=EN(),a=MN();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 gn=class Fn{constructor(){this.saveRouters=[],this.loadRouters=[]}static getInstance(){return Fn.instance==null&&(Fn.instance=new Fn),Fn.instance}static registerSaveRouter(t){Fn.getInstance().saveRouters.push(t)}static registerLoadRouter(t){Fn.getInstance().loadRouters.push(t)}static getSaveHandlers(t){return Fn.getHandlers(t,"save")}static getLoadHandlers(t,a){return Fn.getHandlers(t,"load",a)}static getHandlers(t,a,n){let r=[];return(a==="load"?Fn.getInstance().loadRouters:Fn.getInstance().saveRouters).forEach(s=>{let i=s(t,n);i!==null&&r.push(i)}),r}},PN=e=>gn.registerSaveRouter(e),_N=e=>gn.registerLoadRouter(e),FN=e=>gn.getSaveHandlers(e),DN=(e,t)=>gn.getLoadHandlers(e,t),p1="tensorflowjs",c1=1,js="models_store",Gr="model_info_store";function KA(){if(!B().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 h1(e){let t=e.result;t.createObjectStore(js,{keyPath:"modelPath"}),t.createObjectStore(Gr,{keyPath:"modelPath"})}var Ys=class{constructor(e){if(this.indexedDB=KA(),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(p1,c1);r.onupgradeneeded=()=>h1(r),r.onsuccess=()=>{let s=r.result;if(t==null){let i=s.transaction(js,"readonly"),o=i.objectStore(js).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{t.weightData=Tr.join(t.weightData);let i=Op(t),o=s.transaction(Gr,"readwrite"),l=o.objectStore(Gr),u;try{u=l.put({modelPath:this.modelPath,modelArtifactsInfo:i})}catch(c){return n(c)}let p;u.onsuccess=()=>{p=s.transaction(js,"readwrite");let c=p.objectStore(js),d;try{d=c.put({modelPath:this.modelPath,modelArtifacts:t,modelArtifactsInfo:i})}catch(h){return n(h)}d.onsuccess=()=>a({modelArtifactsInfo:i}),d.onerror=h=>{l=o.objectStore(Gr);let m=l.delete(this.modelPath);m.onsuccess=()=>(s.close(),n(d.error)),m.onerror=f=>(s.close(),n(d.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)})}};Ys.URL_SCHEME="indexeddb://";var YA=e=>B().getBool("IS_BROWSER")&&!Array.isArray(e)&&e.startsWith(Ys.URL_SCHEME)?ON(e.slice(Ys.URL_SCHEME.length)):null;gn.registerSaveRouter(YA);gn.registerLoadRouter(YA);function ON(e){return new Ys(e)}function zN(e){return e.startsWith(Ys.URL_SCHEME)?e.slice(Ys.URL_SCHEME.length):e}var LN=class{constructor(){this.indexedDB=KA()}async listModels(){return new Promise((e,t)=>{let a=this.indexedDB.open(p1,c1);a.onupgradeneeded=()=>h1(a),a.onsuccess=()=>{let n=a.result,r=n.transaction(Gr,"readonly"),s=r.objectStore(Gr).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=zN(e),new Promise((t,a)=>{let n=this.indexedDB.open(p1,c1);n.onupgradeneeded=()=>h1(n),n.onsuccess=()=>{let r=n.result,s=r.transaction(Gr,"readwrite"),i=s.objectStore(Gr),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(js,"readwrite");let c=l.objectStore(js).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)})}},vr="/",zl="tensorflowjs_models",ZA="info",WN="model_topology",BN="weight_specs",VN="weight_data",UN="model_metadata";function JA(e){return{info:[zl,e,ZA].join(vr),topology:[zl,e,WN].join(vr),weightSpecs:[zl,e,BN].join(vr),weightData:[zl,e,VN].join(vr),modelMetadata:[zl,e,UN].join(vr)}}function QA(e){for(let t of Object.values(e))window.localStorage.removeItem(t)}function GN(e){let t=e.split(vr);if(t.length<3)throw new Error(`Invalid key format: ${e}`);return t.slice(1,t.length-1).join(vr)}function HN(e){return e.startsWith(Zs.URL_SCHEME)?e.slice(Zs.URL_SCHEME.length):e}var Zs=class{constructor(e){if(!B().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=JA(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=Op(e),r=Tr.join(e.weightData);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,CN(r));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 QA(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=TN(s),t}};Zs.URL_SCHEME="localstorage://";var eb=e=>B().getBool("IS_BROWSER")&&!Array.isArray(e)&&e.startsWith(Zs.URL_SCHEME)?jN(e.slice(Zs.URL_SCHEME.length)):null;gn.registerSaveRouter(eb);gn.registerLoadRouter(eb);function jN(e){return new Zs(e)}var qN=class{constructor(){F(B().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=zl+vr,a=vr+ZA;for(let n=0;n"scheme must not be undefined or null."),t.endsWith(Bl)&&(t=t.slice(0,t.indexOf(Bl))),F(t.length>0,()=>"scheme must not be an empty string.");let n=Wr.getInstance();F(n.managers[t]==null,()=>`A model store manager is already registered for scheme '${t}'.`),n.managers[t]=a}static getManager(t){let a=Wr.getInstance().managers[t];if(a==null)throw new Error(`Cannot find model manager for scheme '${t}'`);return a}static getSchemes(){return Object.keys(Wr.getInstance().managers)}};function th(e){if(e.indexOf(Bl)===-1)throw new Error(`The url string provided does not contain a scheme. Supported schemes are: ${ts.getSchemes().join(",")}`);return{scheme:e.split(Bl)[0],path:e.split(Bl)[1]}}async function tb(e,t,a=!1){F(e!==t,()=>`Old path and new path are the same: '${e}'`);let n=gn.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=gn.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=th(e).scheme,l=th(e).path,u=o===th(e).scheme,p=await r.load();a&&u&&await ts.getManager(o).removeModel(l);let c=await i.save(p);return a&&!u&&await ts.getManager(o).removeModel(l),c.modelArtifactsInfo}async function XN(){let e=ts.getSchemes(),t={};for(let a of e){let n=await ts.getManager(a).listModels();for(let r in n){let s=a+Bl+r;t[s]=n[r]}}return t}async function KN(e){let t=th(e);return ts.getManager(t.scheme).removeModel(t.path)}async function YN(e,t){return tb(e,t,!1)}async function ZN(e,t){return tb(e,t,!0)}var JN=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"||!B().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))}isTypedArray(e){return EA(e)}};if(B().get("IS_BROWSER")){B().setPlatform("browser",new JN);try{ts.registerManager(Zs.URL_SCHEME,new qN)}catch(e){}try{ts.registerManager(Ys.URL_SCHEME,new LN)}catch(e){}}var QN={importFetch:()=>GC()},X2,eR=class{constructor(){this.util=HC(),this.textEncoder=new this.util.TextEncoder}fetch(e,t){return B().global.fetch!=null?B().global.fetch(e,t):(X2==null&&(X2=QN.importFetch()),X2(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)}isTypedArray(e){return this.util.types.isFloat32Array(e)||this.util.types.isInt32Array(e)||this.util.types.isUint8Array(e)||this.util.types.isUint8ClampedArray(e)}};B().get("IS_NODE")&&!B().get("IS_BROWSER")&&B().setPlatform("node",new eR);function _e(e,t="float32",a){return t=t||"float32",an(e),new Vt(e,t,a)}function tR(e,t){let a=R(e,"x","cast");if(!wA(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 L.runKernel(bi,n,r)}var Ue=z({cast_:tR});function aR(e){let t={x:R(e,"x","clone","string_or_numeric")};return L.runKernel(qi,t)}var Ia=z({clone_:aR});function pg(e,t=!1){console.log(e.toString(t))}WA();var nR={buffer:_e,cast:Ue,clone:Ia,print:pg};tN(nR);function rR(e,t){let a=R(e,"a","add"),n=R(t,"b","add");[a,n]=Rt(a,n);let r={a,b:n};return L.runKernel(os,r)}var we=z({add_:rR});function sR(e,t){let a=R(e,"a","floorDiv"),n=R(t,"b","floorDiv");[a,n]=Rt(a,n);let r={a,b:n};return L.runKernel(Vi,r)}var zp=z({floorDiv_:sR});function iR(e,t){let a=R(e,"a","div"),n=R(t,"b","div");if([a,n]=Rt(a,n),a.dtype==="int32"&&n.dtype==="int32")return zp(a,n);let r={a,b:n},s={};return L.runKernel(_i,r,s)}var ve=z({div_:iR});function oR(e,t){let a=R(e,"a","mul"),n=R(t,"b","mul");[a,n]=Rt(a,n);let r={a,b:n};return L.runKernel(yo,r)}var te=z({mul_:oR});function lR(e){let t=R(e,"x","abs");if(t.dtype==="complex64"){let a={x:t};return L.runKernel(cp,a)}else{let a={x:t};return L.runKernel(iu,a)}}var Za=z({abs_:lR});function uR(e){let t={x:R(e,"x","acos")};return L.runKernel(oi,t)}var ab=z({acos_:uR});function dR(e){let t={x:R(e,"x","acosh")};return L.runKernel(li,t)}var nb=z({acosh_:dR});function pR(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(!Cr(r.shape,a.shape))throw new Error("All tensors passed to tf.addN() must have the same shape")});let n=t;return L.runKernel(ui,n)}var Dh=z({addN_:pR});function cR(e,t=null,a=!1){let n={x:R(e,"x","all","bool")},r={axis:t,keepDims:a};return L.runKernel(di,n,r)}var rb=z({all_:cR});function hR(e,t=null,a=!1){let n={x:R(e,"x","any","bool")},r={axis:t,keepDims:a};return L.runKernel(pi,n,r)}var sb=z({any_:hR});function mR(e,t=0){let a={x:R(e,"x","argMax")},n={axis:t};return L.runKernel(ou,a,n)}var rr=z({argMax_:mR});function fR(e,t=0){let a={x:R(e,"x","argMin")},n={axis:t};return L.runKernel(lu,a,n)}var ib=z({argMin_:fR});function gR(e){let t={x:R(e,"x","asin")};return L.runKernel(ci,t)}var ob=z({asin_:gR});function yR(e){let t={x:R(e,"x","asinh")};return L.runKernel(hi,t)}var lb=z({asinh_:yR});function xR(e){let t={x:R(e,"x","atan")};return L.runKernel(mi,t)}var ub=z({atan_:xR});function AR(e,t){let a=R(e,"a","atan2"),n=R(t,"b","atan2");[a,n]=Rt(a,n);let r={a,b:n};return L.runKernel(gi,r)}var db=z({atan2_:AR});function bR(e){let t={x:R(e,"x","atanh")};return L.runKernel(fi,t)}var pb=z({atanh_:bR});function vR(e,t,a,n,r="NHWC",s){let i=e[3],o=[...t,i],l=mb(r);return Lp(e,o,a,s,n,null,null,l)}function cb(e,t,a,n,r,s,i="channelsLast"){let[o,l]=Hd(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 Lp(e,u,a,n,r,s,!1,i)}function wR(e,t,a,n,r,s,i="NDHWC"){let[o,l,u]=m1(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 hb(e,p,a,n,r,!1,c,s)}function Lp(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,,m]=t,[f,g]=Hd(a),[y,x]=Hd(n),A=Vl(d,y),b=Vl(h,x),{padInfo:w,outHeight:I,outWidth:T}=SR(r,u,p,f,g,A,b,s,o),N=i?m*c:m,M;return o==="channelsFirst"?M=[l,N,I,T]:o==="channelsLast"&&(M=[l,I,T,N]),{batchSize:l,dataFormat:o,inHeight:u,inWidth:p,inChannels:c,outHeight:I,outWidth:T,outChannels:N,padInfo:w,strideHeight:f,strideWidth:g,filterHeight:d,filterWidth:h,effectiveFilterHeight:A,effectiveFilterWidth:b,dilationHeight:y,dilationWidth:x,inShape:e,outShape:M,filterShape:t}}function hb(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,m,f,,g]=t,[y,x,A]=m1(a),[b,w,I]=m1(n),T=Vl(h,b),N=Vl(m,w),M=Vl(f,I),{padInfo:$,outDepth:E,outHeight:S,outWidth:_}=CR(r,u,p,c,y,x,A,T,N,M,o),O=s?g*d:g,W;return i==="channelsFirst"?W=[l,O,E,S,_]:i==="channelsLast"&&(W=[l,E,S,_,O]),{batchSize:l,dataFormat:i,inDepth:u,inHeight:p,inWidth:c,inChannels:d,outDepth:E,outHeight:S,outWidth:_,outChannels:O,padInfo:$,strideDepth:y,strideHeight:x,strideWidth:A,filterDepth:h,filterHeight:m,filterWidth:f,effectiveFilterDepth:T,effectiveFilterHeight:N,effectiveFilterWidth:M,dilationDepth:b,dilationHeight:w,dilationWidth:I,inShape:e,outShape:W,filterShape:t}}function kR(e,t,a,n,r){n==null&&(n=cg(e,t,a));let s=e[0],i=e[1],o=jd((s-t+2*n)/a+1,r),l=jd((i-t+2*n)/a+1,r);return[o,l]}function IR(e,t,a,n,r,s){r==null&&(r=cg(e,t[0],n[0]));let i=[0,0,0,a];for(let o=0;o<3;o++)e[o]+2*r>=t[o]&&(i[o]=jd((e[o]-t[o]+2*r)/n[o]+1,s));return i}function cg(e,t,a,n=1){let r=Vl(t,n);return Math.floor((e[0]*(a-1)-a+r)/2)}function Hd(e){return typeof e=="number"?[e,e,e]:e.length===2?[e[0],e[1],1]:e}function m1(e){return typeof e=="number"?[e,e,e]:e}function Vl(e,t){return t<=1?e:e+(e-1)*(t-1)}function SR(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=kR([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),m=Math.floor(d/2),f=d-m,g=Math.floor(h/2),y=h-g;u={top:m,bottom:f,left:g,right:y,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],m=l==="channelsLast"?e[2][0]:e[3][0],f=l==="channelsLast"?e[2][1]:e[3][1];u={top:d,bottom:h,left:m,right:f,type:d===0&&h===0&&m===0&&f===0?"VALID":"EXPLICIT"},p=jd((t-s+d+h)/n+1,o),c=jd((a-i+m+f)/r+1,o)}else throw Error(`Unknown padding parameter: ${e}`);return{padInfo:u,outHeight:p,outWidth:c}}function CR(e,t,a,n,r,s,i,o,l,u,p){let c,d,h,m;if(e==="valid"&&(e=0),typeof e=="number"){c={top:e,bottom:e,left:e,right:e,front:e,back:e,type:e===0?"VALID":"NUMBER"};let f=IR([t,a,n,1],[o,l,u],1,[r,s,i],e,p);d=f[0],h=f[1],m=f[2]}else if(e==="same"){d=Math.ceil(t/r),h=Math.ceil(a/s),m=Math.ceil(n/i);let f=(d-1)*r+o-t,g=(h-1)*s+l-a,y=(m-1)*i+u-n,x=Math.floor(f/2),A=f-x,b=Math.floor(g/2),w=g-b,I=Math.floor(y/2),T=y-I;c={top:b,bottom:w,left:I,right:T,front:x,back:A,type:"SAME"}}else throw Error(`Unknown padding parameter: ${e}`);return{padInfo:c,outDepth:d,outHeight:h,outWidth:m}}function jd(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 qd(e){let[t,a,n]=Hd(e);return t===1&&a===1&&n===1}function Nr(e,t){return qd(e)||qd(t)}function Js(e){return Hd(e).every(t=>t>0)}function mb(e){if(e==="NHWC")return"channelsLast";if(e==="NCHW")return"channelsFirst";throw new Error(`Unknown dataFormat ${e}`)}function Nn(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(Hl(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(Hl(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 TR(e,t){let a={x:R(e,"x","reshape","string_or_numeric")},n={shape:t};return L.runKernel(Ru,a,n)}var Q=z({reshape_:TR});function NR(e,t,a,n,r){let s=R(e,"x","avgPool","float32"),i=1;F(Nr(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=Q(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}.`),Nn("avgPool",n,r);let u={x:o},p={filterSize:t,strides:a,pad:n,dimRoundingMode:r},c=L.runKernel(yi,u,p);return c=Ue(c,s.dtype),l?Q(c,[c.shape[1],c.shape[2],c.shape[3]]):c}var hg=z({avgPool_:NR});function RR(e,t,a,n,r,s="NDHWC"){let i=R(e,"x","avgPool3d","float32"),o=i,l=!1;i.rank===4&&(l=!0,o=Q(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}`),F(typeof a=="number"&&a>0||Array.isArray(a)&&a[0]>0&&a[1]>0&&a[2]>0,()=>`Error in avgPool3d: Stride must be > 0, but got '${a}'`),Nn("avgPool3d",n,r);let u={x:o},p={filterSize:t,strides:a,pad:n,dimRoundingMode:r,dataFormat:s},c=L.runKernel(uu,u,p);return c=Ue(c,o.dtype),l?Q(c,[c.shape[1],c.shape[2],c.shape[3],c.shape[4]]):c}var fb=z({avgPool3d_:RR});function ER(e,t=0){F(e.length>=1,()=>"Pass at least one tensor to concat");let a=Gd(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 Ia(a[0]);let n=a,r={axis:t};return L.runKernel(hu,n,r)}var lt=z({concat_:ER});function MR(e,t,a=!1,n=!1){let r=R(e,"a","matMul"),s=R(t,"b","matMul");[r,s]=Rt(r,s);let i={a:r,b:s},o={transposeA:a,transposeB:n};return L.runKernel(xi,i,o)}var pt=z({matMul_:MR});function $R(e){let t={x:R(e,"x","sigmoid","float32")};return L.runKernel(Bo,t)}var za=z({sigmoid_:$R});function PR(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 L.runKernel(Pu,r,s)}var Fe=z({slice_:PR});function _R(e){let t={x:R(e,"x","tanh","float32")};return L.runKernel(Zo,t)}var hh=z({tanh_:_R});function FR(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=lt([u,c],1),h=pt(d,o),m=we(h,l),f=m.shape[0],g=m.shape[1]/4,y=[f,g],x=Fe(m,[0,0],y),A=Fe(m,[0,g],y),b=Fe(m,[0,g*2],y),w=Fe(m,[0,g*3],y),I=we(te(za(x),hh(A)),te(p,za(we(i,b)))),T=te(hh(I),za(w));return[I,T]}var gb=z({basicLSTMCell_:FR});function DR(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 L.runKernel(du,s,i)}var mg=z({batchToSpaceND_:DR});function OR(e){let t;return e.rank===0||e.rank===1?t=Q(e,[1,1,1,e.size]):e.rank===2?t=Q(e,[1,1,e.shape[0],e.shape[1]]):e.rank===3?t=Q(e,[1,e.shape[0],e.shape[1],e.shape[2]]):t=e,t}function zR(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")),F(o.rank===l.rank,()=>"Batch normalization gradient requires mean and variance to have equal ranks."),F(p==null||o.rank===p.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:OR(i),scale:u,offset:p,mean:o,variance:l},d={varianceEpsilon:s},h=L.runKernel(Ui,c,d);return Q(h,i.shape)}var Wp=z({batchNorm_:zR});function LR(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")),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}.`),p!=null&&F(p.rank===2||p.rank===1,()=>`Error in batchNorm2D: offset must be rank 2 or rank 1 but got rank ${p.rank}.`),Wp(i,o,l,p,u,s)}var yb=z({batchNorm2d_:LR});function WR(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")),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}.`),p!=null&&F(p.rank===3||p.rank===1,()=>`Error in batchNorm3D: offset must be rank 3 or rank 1 but got rank ${p.rank}.`),Wp(i,o,l,p,u,s)}var xb=z({batchNorm3d_:WR});function BR(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")),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}.`),p!=null&&F(p.rank===4||p.rank===1,()=>`Error in batchNorm4D: offset must be rank 4 or rank 1 but got rank ${p.rank}.`),Wp(i,o,l,p,u,s)}var Ab=z({batchNorm4d_:BR});function VR(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 L.runKernel(Ai,s,i)}var fg=z({bincount_:VR});function UR(e,t){let a=R(e,"x","bitwiseAnd"),n=R(t,"y","bitwiseAnd");if(!Cr(a.shape,n.shape))throw new Error(`BitwiseAnd: Tensors must have the same shape. x: ${a.shape}, y: ${n.shape}`);if(a.dtype!=="int32"||n.dtype!=="int32")throw new Error(`BitwiseAnd: Only supports 'int32' values in tensor, found type of x: ${a.dtype} and type of y: ${n.dtype}`);let r={a,b:n};return L.runKernel(pu,r)}var bb=z({bitwiseAnd_:UR});function GR(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 L.runKernel(cu,r)}var vb=z({broadcastArgs_:GR});function HR(e,t){let a=R(e,"broadcastTo","x"),n=a.shape;if(an(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 Ia(a);let i={x:a},o={reps:s};return L.runKernel(us,i,o)}var Ul=z({broadcastTo_:HR});function jR(e){let t={x:R(e,"x","ceil","float32")};return L.runKernel(vi,t)}var wb=z({ceil_:jR});function sr(e,t,a){an(e),a=a||lp(t);let n={shape:e,value:t,dtype:a};return L.runKernel(Au,{},n)}function qR(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 sr(n.shape,t,n.dtype);let r={x:n},s={clipValueMin:t,clipValueMax:a};return L.runKernel(ls,r,s)}var kb=z({clipByValue_:qR});function XR(e){return lt(e,0)}var Ib=z({concat1d_:XR});function KR(e,t){return lt(e,t)}var Vu=z({concat2d_:KR});function YR(e,t){return lt(e,t)}var Sb=z({concat3d_:YR});function ZR(e,t){return lt(e,t)}var Cb=z({concat4d_:ZR});function JR(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=Q(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}.`),Nn("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(Nr(a,s),()=>`Error in conv2D: Either strides or dilations must be 1. Got strides ${a} and dilations '${s}'`),F(Js(s),()=>"Error in conv2D: Dilated rates should be larger than 0."),F(Js(a),()=>"Error in conv2D: Strides should be larger than 0.");let d={x:u,filter:l},h={strides:a,pad:n,dataFormat:r,dilations:s,dimRoundingMode:i},m=L.runKernel(wi,d,h);return p?Q(m,[m.shape[1],m.shape[2],m.shape[3]]):m}var Bp=z({conv2d_:JR});function QR(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=Q(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}.`),Nn("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(Nr(a,s),()=>`Error in conv1D: Either stride or dilation must be 1. Got stride ${a} and dilation '${s}'`),F(Js(s),()=>"Error in conv1D: Dilated rates should be larger than 0."),F(Js(a),()=>"Error in conv1D: Stride should be larger than 0."),F(r==="NWC",()=>`Error in conv1d: got dataFormat of ${r} but only NWC is currently supported.`);let c=Q(l,[1,l.shape[0],l.shape[1],l.shape[2]]),d=Q(u,[u.shape[0],1,u.shape[1],u.shape[2]]),h=Bp(d,c,[1,a],n,"NHWC",[1,s],i);return p?Q(h,[h.shape[2],h.shape[3]]):Q(h,[h.shape[0],h.shape[2],h.shape[3]])}var Tb=z({conv1d_:QR});function eE(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=Q(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 p=s==="NHWC"?o[3]:o[1],c=s==="NHWC"?l.shape[3]:l.shape[1];F(p===a.shape[2],()=>`Error in conv2dDerInput: depth of input (${p}) 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]}.`),Nn("conv2dDerInput",r,i);let d={dy:l,filter:a},h={strides:n,pad:r,dataFormat:s,dimRoundingMode:i,inputShape:o},m=L.runKernel(ki,d,h);return u?Q(m,[m.shape[1],m.shape[2],m.shape[3]]):m}var Nb=z({conv2DBackpropInput_:eE});function tE(e,t,a,n,r,s){let i=R(e,"x","conv2dTranspose"),o=R(t,"filter","conv2dTranspose");return Nb(a,i,o,n,r,"NHWC",s)}var Rb=z({conv2dTranspose_:tE});function aE(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=Q(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(Nr(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.`),F(Js(s),()=>"Error in conv3D: Dilated rates should be larger than 0."),F(Js(a),()=>"Error in conv3D: Strides should be larger than 0.");let p={x:l,filter:o},c={strides:a,pad:n,dataFormat:r,dilations:s},d=L.runKernel(Ii,p,c);return u?Q(d,[d.shape[1],d.shape[2],d.shape[3],d.shape[4]]):d}var Eb=z({conv3d_:aE});function nE(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=Q(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 p={dy:i,filter:a},c={pad:r,strides:n,inputShape:s},d=L.runKernel(Si,p,c);return o?Q(d,[d.shape[1],d.shape[2],d.shape[3],d.shape[4]]):d}var rE=z({conv3DBackpropInput_:nE});function sE(e,t,a,n,r){let s=R(e,"x","conv3dTranspose"),i=R(t,"filter","conv3dTranspose");return rE(a,s,i,n,r)}var Mb=z({conv3dTranspose_:sE});function iE(e){let t={x:R(e,"x","cos","float32")};return L.runKernel(Ci,t)}var $b=z({cos_:iE});function oE(e){let t={x:R(e,"x","cosh","float32")};return L.runKernel(Ti,t)}var Pb=z({cosh_:oE});function lE(e,t=0,a=!1,n=!1){let r={x:R(e,"x","cumprod")},s={axis:t,exclusive:a,reverse:n};return L.runKernel(Ni,r,s)}var _b=z({cumprod_:lE});function uE(e,t=0,a=!1,n=!1){let r={x:R(e,"x","cumsum")},s={axis:t,exclusive:a,reverse:n};return L.runKernel(Ri,r,s)}var Fb=z({cumsum_:uE});function dE(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 L.runKernel(fu,i,o)}var Db=z({denseBincount_:dE});function pE(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 ${r} and ${t} for depthToSpace with input shape ${n.shape}`),F(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 L.runKernel(Mi,o,l)}var Db=z({depthToSpace_:dE});function pE(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=Q(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]}.`),Nn("depthwiseConv2d",n,i);let d={x:u,filter:l},h={strides:a,pad:n,dataFormat:r,dilations:s,dimRoundingMode:i},m=L.runKernel($i,d,h);return p?Q(m,[m.shape[1],m.shape[2],m.shape[3]]):m}var Oh=z({depthwiseConv2d_:pE});function cE(e){let t={x:R(e,"x","diag")};return L.runKernel(gu,t)}var Ob=z({diag_:cE});function hE(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=Q(i,[1,i.shape[0],i.shape[1],i.shape[2]]),u=!0),F(l.shape[3]===o.shape[2],()=>`Error in dilation2d: input and filter must have the same depth: ${l.shape[3]} vs ${o.shape[2]}`);let p={x:l,filter:o},c={strides:a,pad:n,dilations:r},d=L.runKernel(Pi,p,c);return u?Q(d,[d.shape[1],d.shape[2],d.shape[3]]):d}var zb=z({dilation2d_:hE}),al={};Ze(al,{assertAndGetBroadcastShape:()=>Ut,getBroadcastDims:()=>Lb,getReductionAxes:()=>gg});function Lb(e,t){let a=e.length,n=[];for(let r=0;r1&&i===1&&n.unshift(s)}return n}function gg(e,t){let a=[];for(let n=0;n1)&&a.unshift(s)}return a}function Ut(e,t){let a=Math.max(e.length,t.length),n=new Array(a);for(let r=0;r`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=Q(a,[1,-1]),o=Q(n,[-1,1]),l=pt(i,o);return Q(l,[])}else if(a.rank===1&&n.rank===2){let i=Q(a,[1,-1]),o=Q(n,[n.shape[0],n.shape[1]]),l=pt(i,o);return Q(l,[l.size])}else if(a.rank===2&&n.rank===1){let i=Q(n,[-1,1]),o=pt(a,i);return Q(o,[o.size])}else{let i=Q(n,[n.shape[0],n.shape[1]]);return pt(a,i)}}var Bb=z({dot_:xE});function AE(e,...t){let a=t.map((r,s)=>R(r,`tensors${s}`,"einsum")),n={equation:e};return L.runKernel(yp,a,n)}var Vs=z({einsum_:AE});function bE(e){let t={x:R(e,"x","elu","float32")};return L.runKernel(Fi,t)}var xg=z({elu_:bE});function vE(e,t){let a=R(e,"x","ensureShape","string_or_numeric");if(!yA(a.shape,t))throw new Error(`EnsureShape: Shape of tensor ${a.shape} is not compatible with expected shape ${t}`);return e}var Vb=z({ensureShape_:vE});function wE(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 L.runKernel(Di,a)}var Ub=z({erf_:wE});function Ag(e,t){for(let a=0;ae[s]);return[a,r]}function Vp(e,t){let a=t.map(n=>1);return Gb(e,a,t)}function IE(e,t,a){F(Ag(t,a),()=>`${e} supports only inner-most axes for now. Got axes ${t} and rank-${a} input.`)}function SE(e,t){if(Ag(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 TE(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 L.runKernel(xu,n,r)}var Wt=z({expandDims_:OE});function zE(e){let t={x:R(e,"x","expm1")};return L.runKernel(Li,t)}var qb=z({expm1_:zE});function LE(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 L.runKernel(us,n,r)}var Xr=z({tile_:LE});function WE(e,t,a,n="float32"){t==null&&(t=e);let r=_e([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(Hl(t),()=>`Error in localResponseNormalization: depthRadius must be an integer but got depthRadius ${t}.`);let i=s,o=!1;s.rank===3&&(o=!0,i=Q(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=L.runKernel(io,l,u);return o?Q(p,[p.shape[1],p.shape[2],p.shape[3]]):p}var Jb=z({localResponseNormalization_:JE});function QE(e){let t={x:R(e,"x","log","float32")};return L.runKernel(to,t)}var Yl=z({log_:QE});function eM(e){let t={x:R(e,"x","log1p")};return L.runKernel(ao,t)}var Sg=z({log1p_:eM});function tM(e){return F(Kr(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 L.tidy(()=>{let{value:s,grads:i}=L.gradients(()=>e(n),[n],r);return r!=null&&Ta(s.shape,r.shape,"The shape of dy passed in grad(f)(x, dy) must match the shape returned by f(x)"),Lh(i),i[0]})}}function aM(e){return F(Kr(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=Gd(t,"args","tf.grads","string_or_numeric"),r=a!=null?R(a,"dy","tf.grads"):null;return L.tidy(()=>{let{value:s,grads:i}=L.gradients(()=>e(...n),n,r);return r!=null&&Ta(s.shape,r.shape,"The shape of dy passed in grads(f)([x1,...], dy) must match the shape returned by f([x1,...])"),Lh(i),i})}}function nM(e){return F(Kr(e),()=>"The f passed in valueAndGrad(f) must be a function"),(t,a)=>{F(t instanceof yt,()=>"The x passed in valueAndGrad(f)(x) must be a tensor"),F(a==null||a instanceof yt,()=>"The dy passed in valueAndGrad(f)(x, dy) must be a tensor");let{grads:n,value:r}=L.gradients(()=>e(t),[t],a);return Lh(n),{grad:n[0],value:r}}}function rM(e){return F(Kr(e),()=>"The f passed in valueAndGrads(f) must be a function"),(t,a)=>{F(Array.isArray(t)&&t.every(r=>r instanceof yt),()=>"The args passed in valueAndGrads(f)(args) must be array of tensors"),F(a==null||a instanceof yt,()=>"The dy passed in valueAndGrads(f)(args, dy) must be a tensor");let n=L.gradients(()=>e(...t),t,a);return a!=null&&Ta(n.value.shape,a.shape,"The shape of dy passed in valueAndGrads(f)([x1,...], dy) must match the shape returned by f([x1,...])"),Lh(n.grads),n}}function Qb(e,t){F(Kr(e),()=>"The f passed in variableGrads(f) must be a function"),F(t==null||Array.isArray(t)&&t.every(u=>u instanceof Ud),()=>"The varList passed in variableGrads(f, varList) must be an array of variables");let a=t!=null;if(!a){t=[];for(let u in L.registeredVariables)t.push(L.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}=L.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,p)=>{o[p]!=null&&(l[u.name]=o[p])}),n!=null&&n.forEach(u=>l[u.name]=null),{value:i,grads:l}}function tr(e){return L.customGrad(e)}function Lh(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 sM(e){let t={x:R(e,"x","neg")};return L.runKernel(Iu,t)}var Ln=z({neg_:sM});function iM(e){let t={x:R(e,"x","softplus")};return L.runKernel(Vo,t)}var Cg=z({softplus_:iM});function oM(e){let t=R(e,"x","logSigmoid");return tr(a=>({value:Ln(Cg(Ln(a))),gradFunc:n=>te(n,za(Ln(a)))}))(t)}var e4=z({logSigmoid_:oM});function lM(e,t){let a=R(e,"a","sub"),n=R(t,"b","sub");[a,n]=Rt(a,n);let r={a,b:n};return L.runKernel(Ko,r)}var xe=z({sub_:lM});function uM(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 tr((n,r)=>{let s=fa(n,t,!0),i=xe(n,s),o=xe(Ue(i,"float32"),Yl(ot(ns(i),t,!0)));return r([o]),{value:o,gradFunc:(l,u)=>{let[p]=u,c=!0,d=ns(p);return xe(l,te(ot(l,t,c),d))}}})(a)}var t4=z({logSoftmax_:uM});function dM(e,t=null,a=!1){let n=R(e,"x","logSumExp"),r=op(t,n.shape),s=fa(n,r,!0),i=xe(n,s),o=ns(i),l=ot(o,r),u=Yl(l),p=we(Q(s,u.shape),u);if(a){let c=Vp(p.shape,r);return Q(p,c)}return p}var Tg=z({logSumExp_:dM});function pM(e,t){let a=R(e,"a","logicalAnd","bool"),n=R(t,"b","logicalAnd","bool");Ut(a.shape,n.shape);let r={a,b:n};return L.runKernel(no,r)}var Xd=z({logicalAnd_:pM});function cM(e){let t={x:R(e,"x","logicalNot","bool")};return L.runKernel(ro,t)}var Ng=z({logicalNot_:cM});function hM(e,t){let a=R(e,"a","logicalOr","bool"),n=R(t,"b","logicalOr","bool");Ut(a.shape,n.shape);let r={a,b:n};return L.runKernel(so,r)}var Rg=z({logicalOr_:hM});function mM(e,t){let a=R(e,"a","logicalXor","bool"),n=R(t,"b","logicalXor","bool");return Ut(a.shape,n.shape),Xd(Rg(e,t),Ng(Xd(e,t)))}var a4=z({logicalXor_:mM}),Xc=2147483648;function fM(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=Q(n,[-1,s]),l=Q(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(mt(l.shape)>=Xc)throw new Error(`values tensor size must less than ${Xc}`);if(o.shape[1]>=Xc)throw new Error(`trailing dim_size must less than ${Xc} for int32 output type, was ${o.shape[1]}`);let u={sortedSequence:o,values:l},p={side:a};return L.runKernel(Do,u,p)}var Wh=z({searchSorted_:fM});function n4(e,t){return Wh(e,t,"left")}function gM(e,t,a,n,r){let s=R(e,"x","maxPool"),i=1,o=s,l=!1;s.rank===3&&(l=!0,o=Q(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(Nr(a,i),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${i}'`),Nn("maxPool",n,r);let u={x:o},p={filterSize:t,strides:a,pad:n,dimRoundingMode:r},c=L.runKernel(uo,u,p);return l?Q(c,[c.shape[1],c.shape[2],c.shape[3]]):c}var Eg=z({maxPool_:gM});function yM(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=Q(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}`),Nn("maxPool3d",n,r);let u={x:o},p={filterSize:t,strides:a,pad:n,dimRoundingMode:r,dataFormat:s},c=L.runKernel(wu,u,p);return l?Q(c,[c.shape[1],c.shape[2],c.shape[3],c.shape[4]]):c}var r4=z({maxPool3d_:yM});function xM(e,t,a,n,r=!1){let s={x:R(e,"x","maxPoolWithArgmax")},i={filterSize:t,strides:a,pad:n,includeBatchInIndex:r},o=L.runKernel(ku,s,i);return{result:o[0],indexes:o[1]}}var s4=z({maxPoolWithArgmax_:xM});function AM(e,t){let a=R(e,"a","maximum"),n=R(t,"b","maximum");[a,n]=Rt(a,n),a.dtype==="bool"&&(a=Ue(a,"int32"),n=Ue(n,"int32")),Ut(a.shape,n.shape);let r={a,b:n};return L.runKernel(lo,r)}var Mg=z({maximum_:AM});function bM(e,t=null,a=!1){let n={x:R(e,"x","mean")},r={axis:t,keepDims:a};return L.runKernel(po,n,r)}var Kd=z({mean_:bM});function yn(e,t="float32"){if(an(e),t==="complex64"){let n=yn(e,"float32"),r=yn(e,"float32");return Sr(n,r)}let a=Eh(mt(e),t);return L.makeTensor(a,e,t)}function Hr(e,t="float32"){if(an(e),t==="complex64"){let n=Hr(e,"float32"),r=yn(e,"float32");return Sr(n,r)}let a=Q1(mt(e),t);return L.makeTensor(a,e,t)}function i4(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 yt?e.dtype:"float32");if(t===void 0)return[n];let r=R(t,"y","meshgrid",t instanceof yt?t.dtype:"float32"),s=mt(n.shape),i=mt(r.shape);return a==="xy"?(n=Q(n,[1,-1]),r=Q(r,[-1,1]),[pt(Hr([i,1],n.dtype),n),pt(r,Hr([1,s],r.dtype))]):(n=Q(n,[-1,1]),r=Q(r,[1,-1]),[pt(n,Hr([1,i],n.dtype)),pt(Hr([s,1],r.dtype),r)])}function vM(e,t){let a=R(e,"a","minimum"),n=R(t,"b","minimum");[a,n]=Rt(a,n),a.dtype==="bool"&&(a=Ue(a,"int32"),n=Ue(n,"int32")),Ut(a.shape,n.shape);let r={a,b:n};return L.runKernel(ho,r)}var Yd=z({minimum_:vM});function wM(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 L.runKernel(mo,i,s)}var o4=z({mirrorPad_:wM});function kM(e,t){let a=R(e,"a","mod"),n=R(t,"b","mod");[a,n]=Rt(a,n);let r={a,b:n};return L.runKernel(fo,r)}var Uu=z({mod_:kM});function IM(e,t=null,a=!1){e=R(e,"x","moments");let n=op(t,e.shape),r=Kd(e,n,a),s=r.shape;a||(s=Vp(r.shape,n));let i=Tn(xe(Ue(e,"float32"),Q(r,s))),o=Kd(i,n,a);return{mean:r,variance:o}}var l4=z({moments_:IM});function SM(e,t,a,n){let r=R(t,"data","multiRNNCell"),s=Gd(a,"c","multiRNNCell"),i=Gd(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?Q(r,[1,-1]):r},l={numSamples:t,seed:a,normalized:n},u=L.runKernel(go,o,l);return i===1?Q(u,[u.size]):u}var d4=z({multinomial_:CM});function TM(e,t){let a=R(e,"a","notEqual","string_or_numeric"),n=R(t,"b","notEqual","string_or_numeric");[a,n]=Rt(a,n),Ut(a.shape,n.shape);let r={a,b:n};return L.runKernel(xo,r)}var $g=z({notEqual_:TM});function NM(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 L.runKernel(vo,s,i)}var fh=z({oneHot_:NM});function RM(e){let t={x:R(e,"x","onesLike")};return L.runKernel(Cu,t)}var p4=z({onesLike_:RM});function EM(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=Q(a,[-1,1]),s=Q(n,[1,-1]);return pt(r,s)}var c4=z({outerProduct_:EM});function MM(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 L.runKernel(wo,s,r)}var ir=z({pad_:MM});function $M(e,t,a=0){return F(t.length===2,()=>"Invalid number of paddings. Must be length of 2."),ir(e,[t],a)}var h4=z({pad1d_:$M});function PM(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."),ir(e,t,a)}var m4=z({pad2d_:PM});function _M(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."),ir(e,t,a)}var f4=z({pad3d_:_M});function FM(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."),ir(e,t,a)}var g4=z({pad4d_:FM});function DM(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 L.runKernel(_u,r,s)}var Pg=z({spaceToBatchND_:DM});function OM(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=Q(o,[1,o.shape[0],o.shape[1],o.shape[2]])),F(Nr(s,r),()=>`Error in pool: Either strides or dilations must be 1. Got strides ${s} and dilations '${r}'`);let p=pb(l.shape,t,s,r,n),c=[p.dilationHeight,p.dilationWidth],d;n==="same"?d=LM([p.filterHeight,p.filterWidth],c):d=[[0,0],[0,0]];let h=c[0]===1&&c[1]===1,[m,f]=zM([p.inHeight,p.inWidth],c,d),g=h?n:"valid",y=h?l:Pg(l,c,m),x=(a==="avg"?()=>hg(y,t,s,g,i):()=>Eg(y,t,s,g,i))(),A=h?x:mg(x,c,f);return u?Q(A,[A.shape[1],A.shape[2],A.shape[3]]):A}function zM(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 LM(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 y4=z({pool_:OM});function WM(e,t){let a=R(e,"x","prelu"),n=R(t,"alpha","prelu"),r={x:a,alpha:n};return L.runKernel(Io,r)}var _g=z({prelu_:WM});function BM(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 L.runKernel(So,r,s)}var x4=z({prod_:BM});function VM(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=L.runKernel($h,o,l);return{outputNestedSplits:u.slice(0,u.length-1),outputDenseValues:u[u.length-1]}}var A4=z({raggedGather_:VM});function UM(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=L.runKernel(Ph,i);return{rtNestedSplits:o[0],rtDenseValues:o[1]}}var b4=z({raggedRange_:UM});function GM(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 L.runKernel(_h,u,p)}var v4=z({raggedTensorToTensor_:GM});function HM(e,t,a){an(e);let n=mt(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;sI4,createVideoElement:()=>QM,encodeStrings:()=>S4,expectArrayBuffersEqual:()=>JM,expectArraysClose:()=>qM,expectArraysEqual:()=>KM,expectNumbersClose:()=>YM,expectPromiseToFail:()=>XM,expectValuesInRange:()=>ZM,play:()=>e$,testEpsilon:()=>Dg});var jM=.001,I4=.1;function qM(e,t,a){return a==null&&(a=Dg()),f1(e,t,(n,r)=>Og(n,r,a))}function Dg(){return L.backend.floatPrecision()===32?jM:I4}function f1(e,t,a){let n=!0;if((Jt(e)||Jt(t))&&(n=!1),Jt(e)&&Jt(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=Qn(e),o=Qn(t);if(!Cr(i,o))throw new Error(`Arrays have different shapes. Actual: [${i}]. Expected: [${o}]`)}let r=Jt(e)?e:Qr(e),s=Jt(t)?t:Qr(t);if(r.length!==s.length)throw new Error(`Arrays have different lengths actual: ${r.length} vs expected: ${s.length}. + ${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 L.runKernel(Mi,o,l)}var Ob=z({depthToSpace_:pE});function cE(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=Q(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]}.`),Nn("depthwiseConv2d",n,i);let d={x:u,filter:l},h={strides:a,pad:n,dataFormat:r,dilations:s,dimRoundingMode:i},m=L.runKernel($i,d,h);return p?Q(m,[m.shape[1],m.shape[2],m.shape[3]]):m}var Oh=z({depthwiseConv2d_:cE});function hE(e){let t={x:R(e,"x","diag")};return L.runKernel(gu,t)}var zb=z({diag_:hE});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=Q(i,[1,i.shape[0],i.shape[1],i.shape[2]]),u=!0),F(l.shape[3]===o.shape[2],()=>`Error in dilation2d: input and filter must have the same depth: ${l.shape[3]} vs ${o.shape[2]}`);let p={x:l,filter:o},c={strides:a,pad:n,dilations:r},d=L.runKernel(Pi,p,c);return u?Q(d,[d.shape[1],d.shape[2],d.shape[3]]):d}var Lb=z({dilation2d_:mE}),al={};Ze(al,{assertAndGetBroadcastShape:()=>Ut,getBroadcastDims:()=>Wb,getReductionAxes:()=>gg});function Wb(e,t){let a=e.length,n=[];for(let r=0;r1&&i===1&&n.unshift(s)}return n}function gg(e,t){let a=[];for(let n=0;n1)&&a.unshift(s)}return a}function Ut(e,t){let a=Math.max(e.length,t.length),n=new Array(a);for(let r=0;r`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=Q(a,[1,-1]),o=Q(n,[-1,1]),l=pt(i,o);return Q(l,[])}else if(a.rank===1&&n.rank===2){let i=Q(a,[1,-1]),o=Q(n,[n.shape[0],n.shape[1]]),l=pt(i,o);return Q(l,[l.size])}else if(a.rank===2&&n.rank===1){let i=Q(n,[-1,1]),o=pt(a,i);return Q(o,[o.size])}else{let i=Q(n,[n.shape[0],n.shape[1]]);return pt(a,i)}}var Vb=z({dot_:AE});function bE(e,...t){let a=t.map((r,s)=>R(r,`tensors${s}`,"einsum")),n={equation:e};return L.runKernel(yp,a,n)}var Vs=z({einsum_:bE});function vE(e){let t={x:R(e,"x","elu","float32")};return L.runKernel(Fi,t)}var xg=z({elu_:vE});function wE(e,t){let a=R(e,"x","ensureShape","string_or_numeric");if(!xA(a.shape,t))throw new Error(`EnsureShape: Shape of tensor ${a.shape} is not compatible with expected shape ${t}`);return e}var Ub=z({ensureShape_:wE});function kE(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 L.runKernel(Di,a)}var Gb=z({erf_:kE});function Ag(e,t){for(let a=0;ae[s]);return[a,r]}function Vp(e,t){let a=t.map(n=>1);return Hb(e,a,t)}function SE(e,t,a){F(Ag(t,a),()=>`${e} supports only inner-most axes for now. Got axes ${t} and rank-${a} input.`)}function CE(e,t){if(Ag(e,t))return null;let a=[];for(let n=0;na.push(n)),a}function TE(e){return e.map((t,a)=>[a,t]).sort((t,a)=>t[1]-a[1]).map(t=>t[0])}function NE(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 L.runKernel(xu,n,r)}var Wt=z({expandDims_:zE});function LE(e){let t={x:R(e,"x","expm1")};return L.runKernel(Li,t)}var Xb=z({expm1_:LE});function WE(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 L.runKernel(us,n,r)}var Xr=z({tile_:WE});function BE(e,t,a,n="float32"){t==null&&(t=e);let r=_e([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(Hl(t),()=>`Error in localResponseNormalization: depthRadius must be an integer but got depthRadius ${t}.`);let i=s,o=!1;s.rank===3&&(o=!0,i=Q(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=L.runKernel(io,l,u);return o?Q(p,[p.shape[1],p.shape[2],p.shape[3]]):p}var Qb=z({localResponseNormalization_:QE});function eM(e){let t={x:R(e,"x","log","float32")};return L.runKernel(to,t)}var Yl=z({log_:eM});function tM(e){let t={x:R(e,"x","log1p")};return L.runKernel(ao,t)}var Sg=z({log1p_:tM});function aM(e){return F(Kr(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 L.tidy(()=>{let{value:s,grads:i}=L.gradients(()=>e(n),[n],r);return r!=null&&Ta(s.shape,r.shape,"The shape of dy passed in grad(f)(x, dy) must match the shape returned by f(x)"),Lh(i),i[0]})}}function nM(e){return F(Kr(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=Gd(t,"args","tf.grads","string_or_numeric"),r=a!=null?R(a,"dy","tf.grads"):null;return L.tidy(()=>{let{value:s,grads:i}=L.gradients(()=>e(...n),n,r);return r!=null&&Ta(s.shape,r.shape,"The shape of dy passed in grads(f)([x1,...], dy) must match the shape returned by f([x1,...])"),Lh(i),i})}}function rM(e){return F(Kr(e),()=>"The f passed in valueAndGrad(f) must be a function"),(t,a)=>{F(t instanceof yt,()=>"The x passed in valueAndGrad(f)(x) must be a tensor"),F(a==null||a instanceof yt,()=>"The dy passed in valueAndGrad(f)(x, dy) must be a tensor");let{grads:n,value:r}=L.gradients(()=>e(t),[t],a);return Lh(n),{grad:n[0],value:r}}}function sM(e){return F(Kr(e),()=>"The f passed in valueAndGrads(f) must be a function"),(t,a)=>{F(Array.isArray(t)&&t.every(r=>r instanceof yt),()=>"The args passed in valueAndGrads(f)(args) must be array of tensors"),F(a==null||a instanceof yt,()=>"The dy passed in valueAndGrads(f)(args, dy) must be a tensor");let n=L.gradients(()=>e(...t),t,a);return a!=null&&Ta(n.value.shape,a.shape,"The shape of dy passed in valueAndGrads(f)([x1,...], dy) must match the shape returned by f([x1,...])"),Lh(n.grads),n}}function e4(e,t){F(Kr(e),()=>"The f passed in variableGrads(f) must be a function"),F(t==null||Array.isArray(t)&&t.every(u=>u instanceof Ud),()=>"The varList passed in variableGrads(f, varList) must be an array of variables");let a=t!=null;if(!a){t=[];for(let u in L.registeredVariables)t.push(L.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}=L.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,p)=>{o[p]!=null&&(l[u.name]=o[p])}),n!=null&&n.forEach(u=>l[u.name]=null),{value:i,grads:l}}function tr(e){return L.customGrad(e)}function Lh(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 iM(e){let t={x:R(e,"x","neg")};return L.runKernel(Iu,t)}var Ln=z({neg_:iM});function oM(e){let t={x:R(e,"x","softplus")};return L.runKernel(Vo,t)}var Cg=z({softplus_:oM});function lM(e){let t=R(e,"x","logSigmoid");return tr(a=>({value:Ln(Cg(Ln(a))),gradFunc:n=>te(n,za(Ln(a)))}))(t)}var t4=z({logSigmoid_:lM});function uM(e,t){let a=R(e,"a","sub"),n=R(t,"b","sub");[a,n]=Rt(a,n);let r={a,b:n};return L.runKernel(Ko,r)}var xe=z({sub_:uM});function dM(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 tr((n,r)=>{let s=fa(n,t,!0),i=xe(n,s),o=xe(Ue(i,"float32"),Yl(ot(ns(i),t,!0)));return r([o]),{value:o,gradFunc:(l,u)=>{let[p]=u,c=!0,d=ns(p);return xe(l,te(ot(l,t,c),d))}}})(a)}var a4=z({logSoftmax_:dM});function pM(e,t=null,a=!1){let n=R(e,"x","logSumExp"),r=op(t,n.shape),s=fa(n,r,!0),i=xe(n,s),o=ns(i),l=ot(o,r),u=Yl(l),p=we(Q(s,u.shape),u);if(a){let c=Vp(p.shape,r);return Q(p,c)}return p}var Tg=z({logSumExp_:pM});function cM(e,t){let a=R(e,"a","logicalAnd","bool"),n=R(t,"b","logicalAnd","bool");Ut(a.shape,n.shape);let r={a,b:n};return L.runKernel(no,r)}var Xd=z({logicalAnd_:cM});function hM(e){let t={x:R(e,"x","logicalNot","bool")};return L.runKernel(ro,t)}var Ng=z({logicalNot_:hM});function mM(e,t){let a=R(e,"a","logicalOr","bool"),n=R(t,"b","logicalOr","bool");Ut(a.shape,n.shape);let r={a,b:n};return L.runKernel(so,r)}var Rg=z({logicalOr_:mM});function fM(e,t){let a=R(e,"a","logicalXor","bool"),n=R(t,"b","logicalXor","bool");return Ut(a.shape,n.shape),Xd(Rg(e,t),Ng(Xd(e,t)))}var n4=z({logicalXor_:fM}),Xc=2147483648;function gM(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=Q(n,[-1,s]),l=Q(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(mt(l.shape)>=Xc)throw new Error(`values tensor size must less than ${Xc}`);if(o.shape[1]>=Xc)throw new Error(`trailing dim_size must less than ${Xc} for int32 output type, was ${o.shape[1]}`);let u={sortedSequence:o,values:l},p={side:a};return L.runKernel(Do,u,p)}var Wh=z({searchSorted_:gM});function r4(e,t){return Wh(e,t,"left")}function yM(e,t,a,n,r){let s=R(e,"x","maxPool"),i=1,o=s,l=!1;s.rank===3&&(l=!0,o=Q(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(Nr(a,i),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${i}'`),Nn("maxPool",n,r);let u={x:o},p={filterSize:t,strides:a,pad:n,dimRoundingMode:r},c=L.runKernel(uo,u,p);return l?Q(c,[c.shape[1],c.shape[2],c.shape[3]]):c}var Eg=z({maxPool_:yM});function xM(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=Q(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}`),Nn("maxPool3d",n,r);let u={x:o},p={filterSize:t,strides:a,pad:n,dimRoundingMode:r,dataFormat:s},c=L.runKernel(wu,u,p);return l?Q(c,[c.shape[1],c.shape[2],c.shape[3],c.shape[4]]):c}var s4=z({maxPool3d_:xM});function AM(e,t,a,n,r=!1){let s={x:R(e,"x","maxPoolWithArgmax")},i={filterSize:t,strides:a,pad:n,includeBatchInIndex:r},o=L.runKernel(ku,s,i);return{result:o[0],indexes:o[1]}}var i4=z({maxPoolWithArgmax_:AM});function bM(e,t){let a=R(e,"a","maximum"),n=R(t,"b","maximum");[a,n]=Rt(a,n),a.dtype==="bool"&&(a=Ue(a,"int32"),n=Ue(n,"int32")),Ut(a.shape,n.shape);let r={a,b:n};return L.runKernel(lo,r)}var Mg=z({maximum_:bM});function vM(e,t=null,a=!1){let n={x:R(e,"x","mean")},r={axis:t,keepDims:a};return L.runKernel(po,n,r)}var Kd=z({mean_:vM});function yn(e,t="float32"){if(an(e),t==="complex64"){let n=yn(e,"float32"),r=yn(e,"float32");return Sr(n,r)}let a=Eh(mt(e),t);return L.makeTensor(a,e,t)}function Hr(e,t="float32"){if(an(e),t==="complex64"){let n=Hr(e,"float32"),r=yn(e,"float32");return Sr(n,r)}let a=Q1(mt(e),t);return L.makeTensor(a,e,t)}function o4(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 yt?e.dtype:"float32");if(t===void 0)return[n];let r=R(t,"y","meshgrid",t instanceof yt?t.dtype:"float32"),s=mt(n.shape),i=mt(r.shape);return a==="xy"?(n=Q(n,[1,-1]),r=Q(r,[-1,1]),[pt(Hr([i,1],n.dtype),n),pt(r,Hr([1,s],r.dtype))]):(n=Q(n,[-1,1]),r=Q(r,[1,-1]),[pt(n,Hr([1,i],n.dtype)),pt(Hr([s,1],r.dtype),r)])}function wM(e,t){let a=R(e,"a","minimum"),n=R(t,"b","minimum");[a,n]=Rt(a,n),a.dtype==="bool"&&(a=Ue(a,"int32"),n=Ue(n,"int32")),Ut(a.shape,n.shape);let r={a,b:n};return L.runKernel(ho,r)}var Yd=z({minimum_:wM});function kM(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 L.runKernel(mo,i,s)}var l4=z({mirrorPad_:kM});function IM(e,t){let a=R(e,"a","mod"),n=R(t,"b","mod");[a,n]=Rt(a,n);let r={a,b:n};return L.runKernel(fo,r)}var Uu=z({mod_:IM});function SM(e,t=null,a=!1){e=R(e,"x","moments");let n=op(t,e.shape),r=Kd(e,n,a),s=r.shape;a||(s=Vp(r.shape,n));let i=Tn(xe(Ue(e,"float32"),Q(r,s))),o=Kd(i,n,a);return{mean:r,variance:o}}var u4=z({moments_:SM});function CM(e,t,a,n){let r=R(t,"data","multiRNNCell"),s=Gd(a,"c","multiRNNCell"),i=Gd(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?Q(r,[1,-1]):r},l={numSamples:t,seed:a,normalized:n},u=L.runKernel(go,o,l);return i===1?Q(u,[u.size]):u}var p4=z({multinomial_:TM});function NM(e,t){let a=R(e,"a","notEqual","string_or_numeric"),n=R(t,"b","notEqual","string_or_numeric");[a,n]=Rt(a,n),Ut(a.shape,n.shape);let r={a,b:n};return L.runKernel(xo,r)}var $g=z({notEqual_:NM});function RM(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 L.runKernel(vo,s,i)}var fh=z({oneHot_:RM});function EM(e){let t={x:R(e,"x","onesLike")};return L.runKernel(Cu,t)}var c4=z({onesLike_:EM});function MM(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=Q(a,[-1,1]),s=Q(n,[1,-1]);return pt(r,s)}var h4=z({outerProduct_:MM});function $M(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 L.runKernel(wo,s,r)}var ir=z({pad_:$M});function PM(e,t,a=0){return F(t.length===2,()=>"Invalid number of paddings. Must be length of 2."),ir(e,[t],a)}var m4=z({pad1d_:PM});function _M(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."),ir(e,t,a)}var f4=z({pad2d_:_M});function FM(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."),ir(e,t,a)}var g4=z({pad3d_:FM});function DM(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."),ir(e,t,a)}var y4=z({pad4d_:DM});function OM(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 L.runKernel(_u,r,s)}var Pg=z({spaceToBatchND_:OM});function zM(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=Q(o,[1,o.shape[0],o.shape[1],o.shape[2]])),F(Nr(s,r),()=>`Error in pool: Either strides or dilations must be 1. Got strides ${s} and dilations '${r}'`);let p=cb(l.shape,t,s,r,n),c=[p.dilationHeight,p.dilationWidth],d;n==="same"?d=WM([p.filterHeight,p.filterWidth],c):d=[[0,0],[0,0]];let h=c[0]===1&&c[1]===1,[m,f]=LM([p.inHeight,p.inWidth],c,d),g=h?n:"valid",y=h?l:Pg(l,c,m),x=(a==="avg"?()=>hg(y,t,s,g,i):()=>Eg(y,t,s,g,i))(),A=h?x:mg(x,c,f);return u?Q(A,[A.shape[1],A.shape[2],A.shape[3]]):A}function LM(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 WM(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 x4=z({pool_:zM});function BM(e,t){let a=R(e,"x","prelu"),n=R(t,"alpha","prelu"),r={x:a,alpha:n};return L.runKernel(Io,r)}var _g=z({prelu_:BM});function VM(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 L.runKernel(So,r,s)}var A4=z({prod_:VM});function UM(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=L.runKernel($h,o,l);return{outputNestedSplits:u.slice(0,u.length-1),outputDenseValues:u[u.length-1]}}var b4=z({raggedGather_:UM});function GM(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=L.runKernel(Ph,i);return{rtNestedSplits:o[0],rtDenseValues:o[1]}}var v4=z({raggedRange_:GM});function HM(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 L.runKernel(_h,u,p)}var w4=z({raggedTensorToTensor_:HM});function jM(e,t,a){an(e);let n=mt(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;sS4,createVideoElement:()=>e$,encodeStrings:()=>C4,expectArrayBuffersEqual:()=>QM,expectArraysClose:()=>XM,expectArraysEqual:()=>YM,expectNumbersClose:()=>ZM,expectPromiseToFail:()=>KM,expectValuesInRange:()=>JM,play:()=>t$,testEpsilon:()=>Dg});var qM=.001,S4=.1;function XM(e,t,a){return a==null&&(a=Dg()),f1(e,t,(n,r)=>Og(n,r,a))}function Dg(){return L.backend.floatPrecision()===32?qM:S4}function f1(e,t,a){let n=!0;if((Jt(e)||Jt(t))&&(n=!1),Jt(e)&&Jt(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=Qn(e),o=Qn(t);if(!Cr(i,o))throw new Error(`Arrays have different shapes. Actual: [${i}]. Expected: [${o}]`)}let r=Jt(e)?e:Qr(e),s=Jt(t)?t:Qr(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 KM(e,t){let a=typeof t=="string"||typeof t=="number"||typeof t=="boolean"?[t]:t;return Ur(e)||Ur(e[0])||Ur(t)||Ur(t[0])?f1(e,a,(n,r)=>n==r):f1(e,t,(n,r)=>Og(n,r,0))}function YM(e,t,a){if(a==null&&(a=Dg()),!Og(e,t,a))throw new Error(`Numbers differ: actual === ${e}, expected === ${t}`);typeof expect!="undefined"&&expect().nothing()}function Og(e,t,a){return!isFinite(e)&&!isFinite(t)?!0:!(isNaN(e)||isNaN(t)||Math.abs(e-t)>a)}function ZM(e,t,a){for(let n=0;na)throw new Error(`Value out of range:${e[n]} low: ${t}, high: ${a}`)}function JM(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 e$(e){await e.play(),"requestVideoFrameCallback"in e&&await new Promise(t=>{e.requestVideoFrameCallback(t)})}var zg=class{constructor(e,t,a,n,r){this.mean=e,this.stdDev=t,this.dtype=a,this.nextVal=NaN,this.truncated=n,this.truncated&&(this.upper=this.mean+this.stdDev*2,this.lower=this.mean-this.stdDev*2);let s=r||Math.random();this.random=Fg.alea(s.toString())}nextValue(){if(!isNaN(this.nextVal)){let n=this.nextVal;return this.nextVal=NaN,n}let e,t,a=!1;for(;!a;){let n,r,s;do n=2*this.random()-1,r=2*this.random()-1,s=n*n+r*r;while(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}},t$=class{constructor(e,t,a,n){this.alpha=e,this.beta=1/t,this.dtype=a;let r=n||Math.random();this.randu=Fg.alea(r.toString()),this.randn=new zg(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=Fg.alea(n)}convertValue(e){return this.canReturnFloat()?e:Math.round(e)}nextValue(){return this.convertValue(this.min+this.range*this.random())}};function n$(e,t,a=1,n="float32",r){if(an(e),a==null&&(a=1),n==null&&(n="float32"),n!=="float32"&&n!=="int32")throw new Error(`Unsupported data type ${n}`);let s=new t$(t,a,n,r),i=_e(e,n);for(let o=0;o`Error in reverse1D: x must be rank 1 but got rank ${t.rank}.`),rs(t,0)}var E4=z({reverse1d_:h$});function m$(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}.`),rs(a,t)}var M4=z({reverse2d_:m$});function f$(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}.`),rs(a,t)}var $4=z({reverse3d_:f$});function g$(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}.`),rs(a,t)}var P4=z({reverse4d_:g$});function y$(e){let t={x:R(e,"x","round")};return L.runKernel($o,t)}var Bg=z({round_:y$});function x$(e){let t={x:R(e,"x","rsqrt","float32")};return L.runKernel(Po,t)}var _4=z({rsqrt_:x$});function A$(e){let t={x:R(e,"x","selu")};return L.runKernel(Oo,t)}var F4=z({selu_:A$});function b$(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=Q(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(p.rank===4,()=>`Error in separableConv2d: input must be rank 4, but got rank ${p.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 d=l.shape[2],h=l.shape[3];F(u.shape[2]===d*h,()=>`Error in separableConv2d: the third dimension of pointwise filter must be ${d*h}, but got ${u.shape[2]}.`);let m=Oh(p,l,n,r,i,s),f=Bp(m,u,1,"valid",i);return c?Q(f,[f.shape[1],f.shape[2],f.shape[3]]):f}var D4=z({separableConv2d_:b$});async function v$(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 p=0;p`slice1d expects a rank-1 tensor, but got a rank-${n.rank} tensor`),Fe(n,[t],[a])}var B4=z({slice1d_:S$});function C$(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`),Fe(n,t,a)}var V4=z({slice2d_:C$});function T$(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`),Fe(n,t,a)}var qp=z({slice3d_:T$});function N$(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`),Fe(n,t,a)}var Vh=z({slice4d_:N$});function R$(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 L.runKernel(Ho,n,r)}var Uh=z({softmax_:R$});function E$(e){F(e.dtype==="complex64",()=>`The dtype for tf.spectral.fft() must be complex64 but got ${e.dtype}.`);let t={input:e};return L.runKernel(xp,t)}var Gh=z({fft_:E$});function M$(e){F(e.dtype==="complex64",()=>`The dtype for tf.spectral.ifft() must be complex64 but got ${e.dtype}.`);let t={input:e};return L.runKernel(Ap,t)}var Zd=z({ifft_:M$});function $$(e){let t=e.shape[e.shape.length-1],a=e.size/t,n;if(t<=2){let r=Q(e,[a,t]);n=Zd(r)}else{let r=[a,2*(t-1)],s=Q(Jl(e),[a,t]),i=Q(Hp(e),[a,t]),o=rs(Fe(s,[0,1],[a,t-2]),1),l=te(rs(Fe(i,[0,1],[a,t-2]),1),Ge(-1)),u=lt([s,o],1),p=lt([i,l],1),c=Q(Sr(u,p),[r[0],r[1]]);n=Zd(c)}if(n=Jl(n),e.rank===3&&e.shape[0]!==0){let r=n,s=e.shape[0];n=Q(n,[s,n.shape[0]/s,n.shape[1]]),r.dispose()}return n}var Vg=z({irfft_:$$});function P$(e,t,a=0){let n={x:R(e,"x","split")},r={numOrSizeSplits:t,axis:a};return L.runKernel(Fu,n,r)}var Sa=z({split_:P$});function _$(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),f=e.shape.map(g=>g);f[e.shape.length-1]=t,r=Fe(e,m,f),a=t}else if(t!=null&&t>a){let m=e.shape.map(f=>f);m[e.shape.length-1]=t-a,r=lt([e,yn(m)],e.shape.length-1),a=t}else r=e;let s=Qa(r),i=Q(Sr(r,s),[n,a]),o=Gh(i),l=Math.floor(a/2)+1,u=Jl(o),p=Hp(o),c=Sa(u,[l,a-l],u.shape.length-1),d=Sa(p,[l,a-l],p.shape.length-1),h=r.shape.slice();return h[r.shape.length-1]=l,Q(Sr(c[0],d[0]),h)}var Hh=z({rfft_:_$});function F$(e,t){let a=R(e,"a","squaredDifference"),n=R(t,"b","squaredDifference");[a,n]=Rt(a,n),Ut(a.shape,n.shape);let r={a,b:n},s={};return L.runKernel(qo,r,s)}var Ug=z({squaredDifference_:F$});function D$(e,t){let a=R(e,"x","squeeze","string_or_numeric");return Q(a,xA(a.shape,t).newShape)}var Oe=z({squeeze_:D$});function O$(e,t=0){let a=Gd(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 L.runKernel(Tu,n,r)}var ca=z({stack_:O$});function z$(e,t=0){let a={x:R(e,"x","step")},n={alpha:t};return L.runKernel(ds,a,n)}var Gg=z({step_:z$});function L$(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 L.runKernel(Xo,u,p)}var U4=z({stridedSlice_:L$});function W$(e){let t={x:R(e,"x","tan","float32")};return L.runKernel(Yo,t)}var G4=z({tan_:W$});function Bt(e,t){ii(e);let a=Qn(e,t);if(a.length!==1)throw new Error("tensor1d() requires values to be a flat/TypedArray");return ps(e,null,a,t)}function Zn(e,t,a){if(ii(e),t!=null&&t.length!==2)throw new Error("tensor2d() requires shape to have two numbers");let n=Qn(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 ps(e,t,n,a)}function Hg(e,t,a){if(ii(e),t!=null&&t.length!==3)throw new Error("tensor3d() requires shape to have three numbers");let n=Qn(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 ps(e,t,n,a)}function H4(e,t,a){if(ii(e),t!=null&&t.length!==4)throw new Error("tensor4d() requires shape to have four numbers");let n=Qn(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 ps(e,t,n,a)}function j4(e,t,a){if(ii(e),t!=null&&t.length!==5)throw new Error("tensor5d() requires shape to have five numbers");let n=Qn(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 ps(e,t,n,a)}function q4(e,t,a){if(ii(e),t!=null&&t.length!==6)throw new Error("tensor6d() requires shape to have six numbers");let n=Qn(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,ps(e,t,n,a)}var jh={};Ze(jh,{calculateShapes:()=>X4,validateInput:()=>qh,validateUpdateShape:()=>jg});function jg(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;c= 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]=L.runKernel(Jo,s,i);return{values:o,indices:l}}var Y4=z({topk_:V$});function U$(e,t=0,a=1,n,r){if(an(e),n!=null&&n==="bool")throw new Error("Unsupported data type $ { dtype }");let s=new zg(t,a,n,!0,r),i=_e(e,n);for(let o=0;o0,()=>"The input tensor must be at least 1D");let n={x:a},r={axis:t},[s,i]=L.runKernel(Rp,n,r);return{values:s,indices:i}}var J4=z({unique_:G$});function H$(e,t,a){let n=R(e,"x","unsortedSegmentSum"),r=R(t,"segmentIds","unsortedSegmentSum","int32");F(Hl(a),()=>"numSegments must be of dtype int");let s={x:n,segmentIds:r},i={numSegments:a};return L.runKernel(Ep,s,i)}var Q4=z({unsortedSegmentSum_:H$});function j$(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 L.runKernel(Wu,n,r)}var Na=z({unstack_:j$});function e7(e,t){return Wh(e,t,"right")}function t7(e,t=!0,a,n){return L.makeVariable(e,t,a,n)}function a7(e,t){let a=[];for(let s=0;s0,()=>"mask cannot be scalar"),Ta(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 f=s;fo).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"?De(()=>{let i=Jl(n),o=Hp(n);return i=L.runKernel(wr,{x:i},s),o=L.runKernel(wr,{x:o},s),a&&(o=Ln(o)),Sr(i,o)}):L.runKernel(wr,r,s)}var Qs=z({transpose_:K$});function Y$(e,t,a,n,r=!0){let s=R(e,"v","movingAverage"),i=R(t,"x","movingAverage"),o=R(a,"decay","movingAverage");OA(s,i),F(Cr(s.shape,i.shape),()=>"Shape mismatch in v and x");let l=Ge(1),u=xe(l,o),p=te(xe(i,s),u);if(r){F(n!=null,()=>"When using zeroDebias: true, step is required.");let c=R(n,"step","movingAverage");p=ve(p,xe(l,Kl(o,c)))}return we(s,p)}var r7=z({movingAverage_:Y$});function Z$(e,t,a){an(a);let n=R(e,"indices","scatterND","int32"),r=R(t,"updates","scatterND");qh(r,n,a);let s={indices:n,updates:r},i={shape:a};return L.runKernel(_o,s,i)}var s7=z({scatterND_:Z$});function J$(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 Q$(e,t,a,n=0){an(a);let r=R(e,"sparseIndices","sparseToDense","int32"),s=R(t,"sparseValues","sparseToDense","string_or_numeric"),i=R(n,"defaultValue","sparseToDense",s.dtype);J$(r,s,a,i);let o={sparseIndices:r,sparseValues:s,defaultValue:i},l={outputShape:a};return L.runKernel(jo,o,l)}var i7=z({sparseToDense_:Q$});function eP(e,t){let a=R(t,"indices","gatherND","int32"),n={params:R(e,"x","gatherND","string_or_numeric"),indices:a};return L.runKernel(Gi,n)}var o7=z({gatherND_:eP});function tP(e,t){if(t==null)return e.shape.slice();if(Cr(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 yt?r.clone():r;let s=tP(r,a),i=1-t,o=ve(vg(we(Bh(s,0,1,"float32",n),i)),i);return te(r,o)}var l7=z({dropout_:aP});function Xg(e){return Math.floor(Math.pow(2,Math.ceil(Math.log(e)/Math.log(2))))}function Xh(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}`),Ta(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],p=AA("bool",l);for(let c=0;cg.value-f.value),p[c]=0;for(let f=0;foP,depthwiseConv2d:()=>hP,matMul:()=>fP});function rP(e,t,a,n,r,s="NHWC",i){let o=e;e.rank===3&&(o=Q(e,[1,e.shape[0],e.shape[1],e.shape[2]]));let l=t;l.rank===3&&(l=Q(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],p=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(p===a[3],()=>`Error in conv2dDerFilter: depth of dy (${p}) must match output depth for filter (${a[3]}).`),Nn("conv2dDerFilter",r,i);let c={x:o,dy:l},d={strides:n,pad:r,dataFormat:s,dimRoundingMode:i,filterShape:a};return L.runKernel(hp,c,d)}var sP=z({conv2DBackpropFilter_:rP});function Kh(e,t,a){if(a==null||a==="linear")return e;if(a==="relu")return te(e,Gg(t));throw new Error(`Cannot compute gradient for fused activation ${a}.`)}function Yh(e,t){let a=t,n=gg(e.shape,t.shape);return n.length>0&&(a=ot(a,n)),Q(a,e.shape)}function Zh(e,t,a,n){if(t==="linear")return e;if(t==="relu")return jp(e);if(t==="elu")return xg(e);if(t==="relu6")return Wg(e);if(t==="prelu")return _g(e,a);if(t==="leakyrelu")return Ig(e,n);if(t==="sigmoid")return za(e);throw new Error(`Unknown fused activation ${t}.`)}var Jh=(e,t)=>!(e>0)||t==="linear";function iP({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",Jh(L.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 I=Bp(e,t,a,n,r,s,i);return o!=null&&(I=we(I,o)),Zh(I,l,u,p)}let c=R(e,"x","conv2d","float32"),d=R(t,"filter","conv2d","float32"),h=c,m=!1;c.rank===3&&(m=!0,h=Q(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(d.rank===4,()=>`Error in fused conv2d: filter must be rank 4, but got rank ${d.rank}.`),Nn("fused conv2d",n,i);let f=r==="NHWC"?h.shape[3]:h.shape[1];F(d.shape[2]===f,()=>`Error in conv2d: depth of input (${f}) must match input depth for filter ${d.shape[2]}.`),F(Nr(a,s),()=>`Error in conv2D: Either strides or dilations must be 1. Got strides ${a} and dilations '${s}'`);let g=Lp(h.shape,d.shape,a,s,n,i),y;o!=null&&(y=R(o,"bias","fused conv2d"),[y]=Rt(y,c),r==="NHWC"?Ut(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 x;if(u!=null){let I=u.shape;if(F(I.length<=1||I.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-${I.length}.`),I.length===1)F(I[0]===1||I[0]===g.outChannels,()=>`Error in fused conv2d: PReLU activation weights (${I}) is not compatible with the number of output channels (${g.outChannels}).`);else if(I.length===3)try{Ut(I,g.outShape)}catch(T){let N=`Error in fused conv2d: PReLU activation weights (${I}) is not compatible with the output shape of the conv2d (${g.outShape}).`;throw Error(N)}x=R(u,"prelu weights","fused conv2d")}let A=(I,T)=>{F(r==="NHWC",()=>`Error in gradient of fused conv2D: got dataFormat of ${r} but only NHWC is currently supported.`);let[N,M,$,E]=T,S=Kh(I,$,l);F(qd(s),()=>`Error in gradient of fused conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${s}'`);let _=Tb(M.shape,S,N,a,n),O=sP(M,S,N.shape,a,n),W=[_,O];if(E!=null){let P=Yh(E,S);W.push(P)}return W},b={x:h,filter:d,bias:y,preluActivationWeights:x},w={strides:a,pad:n,dataFormat:r,dilations:s,dimRoundingMode:i,activation:l,leakyreluAlpha:p};return o==null?tr((I,T,N)=>{let M=L.runKernel(Zr,b,w);return N([T,I,M]),m&&(M=Q(M,[M.shape[1],M.shape[2],M.shape[3]])),{value:M,gradFunc:A}})(h,d):tr((I,T,N,M)=>{let $=L.runKernel(Zr,b,w);return M([T,I,$,N]),m&&($=Q($,[$.shape[1],$.shape[2],$.shape[3]])),{value:$,gradFunc:A}})(h,d,y)}var oP=z({fusedConv2d_:iP});function lP(e,t,a,n,r,s=[1,1],i){let o=e;e.rank===3&&(o=Q(e,[1,e.shape[0],e.shape[1],e.shape[2]]));let l=t;l.rank===3&&(l=Q(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 L.runKernel(mp,u,p)}var uP=z({depthwiseConv2dNativeBackpropFilter_:lP});function dP(e,t,a,n,r,s=[1,1],i){let o=t,l=!1;t.rank===3&&(l=!0,o=Q(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=L.runKernel(fp,u,p);return l?Q(c,[c.shape[1],c.shape[2],c.shape[3]]):c}var pP=z({depthwiseConv2dNativeBackpropInput_:dP});function cP({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(Jh(L.state.gradientDepth,l)===!1){let w=Oh(e,t,a,n,r,s,i);return o!=null&&(w=we(w,o)),Zh(w,l,u,p)}let c=R(e,"x","depthwiseConv2d","float32"),d=R(t,"filter","depthwiseConv2d","float32"),h=c,m=!1;c.rank===3&&(m=!0,h=Q(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(d.rank===4,()=>`Error in fused depthwiseConv2d: filter must be rank 4, but got rank ${d.rank}.`),F(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]),F(Nr(a,s),()=>`Error in fused depthwiseConv2d: Either strides or dilations must be 1. Got strides ${a} and dilations '${s}'`),Nn("fused depthwiseConv2d",n,i);let f=Lp(h.shape,d.shape,a,s,n,i,!0),g;o!=null&&(g=R(o,"bias","fused conv2d"),[g]=Rt(g,c),Ut(f.outShape,g.shape));let y;u!=null&&(y=R(u,"prelu weights","fused depthwiseConv2d"));let x=(w,I)=>{F(qd(s),()=>`Error in gradient of fused depthwiseConv2d: dilation rates greater than 1 are not yet supported. Got dilations '${s}'`);let[T,N,M,$]=I,E=Kh(w,M,l),S=pP(N.shape,E,T,a,n,s,i),_=uP(N,E,T.shape,a,n,s,i);if($!=null){let O=Yh(g,E);return[S,_,O]}return[S,_]},A={x:h,filter:d,bias:g,preluActivationWeights:y},b={strides:a,pad:n,dataFormat:r,dilations:s,dimRoundingMode:i,activation:l,leakyreluAlpha:p};return o==null?tr((w,I,T)=>{let N=L.runKernel(Jr,A,b);return T([I,w,N]),m&&(N=Q(N,[N.shape[1],N.shape[2],N.shape[3]])),{value:N,gradFunc:x}})(h,d):tr((w,I,T,N)=>{let M=L.runKernel(Jr,A,b);return N([I,w,M,T]),m&&(M=Q(M,[M.shape[1],M.shape[2],M.shape[3]])),{value:M,gradFunc:x}})(h,d,g)}var hP=z({fusedDepthwiseConv2d_:cP});function mP({a:e,b:t,transposeA:a=!1,transposeB:n=!1,bias:r,activation:s="linear",preluActivationWeights:i,leakyreluAlpha:o=.2}){if(Jh(L.state.gradientDepth,s)===!1){let $=pt(e,t,a,n);return r!=null&&($=we($,r)),Zh($,s,i,o)}let l=R(e,"a","fused matMul"),u=R(t,"b","fused matMul");[l,u]=Rt(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],m=l.shape.slice(0,-2),f=u.shape.slice(0,-2),g=mt(m),y=mt(f);F(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 x=Ut(l.shape.slice(0,-2),u.shape.slice(0,-2)).concat([d,h]),A=a?Q(l,[g,p,d]):Q(l,[g,d,p]),b=n?Q(u,[y,h,c]):Q(u,[y,c,h]),w;r!=null&&(w=R(r,"bias","fused matMul"),[w]=Rt(w,l),Ut(x,w.shape));let I;i!=null&&(I=R(i,"prelu weights","fused matMul"));let T=($,E)=>{let[S,_,O,W]=E,P=Kh(Q($,O.shape),O,s),U,G;if(!a&&!n?(U=pt(P,_,!1,!0),G=pt(S,P,!0,!1)):!a&&n?(U=pt(P,_,!1,!1),G=pt(P,S,!0,!1)):a&&!n?(U=pt(_,P,!1,!0),G=pt(S,P,!1,!1)):(U=pt(_,P,!0,!0),G=pt(P,S,!0,!0)),r!=null){let q=Yh(W,P);return[U,G,q]}else return[U,G]},N={a:A,b,bias:w,preluActivationWeights:I},M={transposeA:a,transposeB:n,activation:s,leakyreluAlpha:o};return r==null?tr(($,E,S)=>{let _=L.runKernel(Yr,N,M);return S([$,E,_]),{value:Q(_,x),gradFunc:T}})(A,b):tr(($,E,S,_)=>{let O=L.runKernel(Yr,N,M);return _([$,E,O,S]),{value:Q(O,x),gradFunc:T}})(A,b,w)}var fP=z({fusedMatMul_:mP});function gP(e){return Xh(e,.54,.46)}var yP=z({hammingWindow_:gP});function xP(e){return Xh(e,.5,.5)}var d7=z({hannWindow_:xP});function AP(e,t,a,n=!1,r=0){let s=0,i=[];for(;s+t<=e.size;)i.push(Fe(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 p={image:i,boxes:o,boxInd:l},c={method:r,extrapolationValue:s,cropSize:n};return L.runKernel(Ei,p,c)}var kP=z({cropAndResize_:wP});function IP(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 L.runKernel(Wi,a,{})}var SP=z({flipLeftRight_:IP});function CP(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,Xr(t,r)}var TP=z({grayscaleToRGB_:CP});function NP(e){let t=R(e,"image","RGBToGrayscale"),a=t.rank-1,n=t.shape[a];F(t.rank>=2,()=>`Error in RGBToGrayscale: images must be at least rank 2, but got rank ${t.rank}.`),F(n===3,()=>`Error in RGBToGrayscale: last dimension of an RGB image should be size 3, but got size ${n}.`);let r=t.dtype,s=Ue(t,"float32"),i=Bt([.2989,.587,.114]),o;switch(t.rank){case 2:o=Vs("ij,j->i",s,i);break;case 3:o=Vs("ijk,k->ij",s,i);break;case 4:o=Vs("ijkl,l->ijk",s,i);break;case 5:o=Vs("ijklm,m->ijkl",s,i);break;case 6:o=Vs("ijklmn,n->ijklm",s,i);break;default:throw new Error("Not a valid tensor rank.")}return o=Wt(o,-1),Ue(o,r)}var RP=z({rgbToGrayscale_:NP});function EP(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 L.runKernel(el,s,i)}var MP=z({rotateWithOffset_:EP});function Gu(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 $P(e,t,a,n=.5,r=Number.NEGATIVE_INFINITY){let s=R(e,"boxes","nonMaxSuppression","float32"),i=R(t,"scores","nonMaxSuppression","float32"),o=Gu(s,i,a,n,r);a=o.maxOutputSize,n=o.iouThreshold,r=o.scoreThreshold;let l={maxOutputSize:a,iouThreshold:n,scoreThreshold:r};return L.runKernel(Ao,{boxes:s,scores:i},l)}var PP=z({nonMaxSuppression_:$P});function _P(e,t,a){let n=FP(e,t,a),r=n<0?-(n+1):n;e.splice(r,0,t)}function FP(e,t,a){return OP(e,t,a||DP)}function DP(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 c7(e,t,a,n,r){return Yg(e,t,a,n,r,0)}function h7(e,t,a,n,r,s){return Yg(e,t,a,n,r,0,!1,s,!0)}function m7(e,t,a,n,r,s){return Yg(e,t,a,n,r,s,!0)}function Yg(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(e5);let p=s>0?-.5/s:0,c=[],d=[];for(;c.length0;){let g=u.pop(),{score:y,boxIndex:x,suppressBeginIndex:A}=g;if(y=A;--w){let I=zP(e,x,c[w]);if(I>=n){b=!0;break}if(g.score=g.score*LP(n,p,I),g.score<=r)break}g.suppressBeginIndex=c.length,b||(g.score===y?(c.push(x),d.push(g.score)):g.score>r&&_P(u,g,e5))}let h=c.length,m=a-h;o&&m>0&&(c.push(...new Array(m).fill(0)),d.push(...new Array(m).fill(0)));let f={selectedIndices:c};return i&&(f.selectedScores=d),l&&(f.validOutputs=h),f}function zP(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),m=(c-u)*(d-p);if(h<=0||m<=0)return 0;let f=Math.max(s,u),g=Math.max(i,p),y=Math.min(o,c),x=Math.min(l,d),A=Math.max(y-f,0)*Math.max(x-g,0);return A/(h+m-A)}function LP(e,t,a){let n=Math.exp(t*a*a);return a<=e?n:0}function e5(e,t){return e.score-t.score||e.score===t.score&&t.boxIndex-e.boxIndex}async function WP(e,t,a,n=.5,r=Number.NEGATIVE_INFINITY){let s=R(e,"boxes","nonMaxSuppressionAsync"),i=R(t,"scores","nonMaxSuppressionAsync"),o=Gu(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}=c7(u,p,a,n,r);return s!==e&&s.dispose(),i!==t&&i.dispose(),Bt(c,"int32")}var BP=WP;function VP(e,t,a,n=.5,r=Number.NEGATIVE_INFINITY,s=0){let i=R(e,"boxes","nonMaxSuppression"),o=R(t,"scores","nonMaxSuppression"),l=Gu(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=L.runKernel(bo,u,p);return{selectedIndices:c[0],selectedScores:c[1]}}var UP=z({nonMaxSuppressionWithScore_:VP});async function GP(e,t,a,n=.5,r=Number.NEGATIVE_INFINITY,s=0){let i=R(e,"boxes","nonMaxSuppressionAsync"),o=R(t,"scores","nonMaxSuppressionAsync"),l=Gu(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}=m7(p,c,a,n,r,s);return i!==e&&i.dispose(),o!==t&&o.dispose(),{selectedIndices:Bt(d,"int32"),selectedScores:Bt(h)}}var HP=GP;function jP(e,t,a,n=.5,r=Number.NEGATIVE_INFINITY,s=!1){let i=R(e,"boxes","nonMaxSuppression"),o=R(t,"scores","nonMaxSuppression"),l=Gu(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},m=L.runKernel(Su,d,h);return{selectedIndices:m[0],validOutputs:m[1]}}var qP=z({nonMaxSuppressionPadded_:jP});async function XP(e,t,a,n=.5,r=Number.NEGATIVE_INFINITY,s=!1){let i=R(e,"boxes","nonMaxSuppressionAsync"),o=R(t,"scores","nonMaxSuppressionAsync"),l=Gu(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:m,validOutputs:f}=h7(d,h,u,p,c,s);return i!==e&&i.dispose(),o!==t&&o.dispose(),{selectedIndices:Bt(m,"int32"),validOutputs:Ge(f,"int32")}}var KP=XP;function YP(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=Q(r,[1,r.shape[0],r.shape[1],r.shape[2]]));let[]=t,o={images:s},l={alignCorners:a,halfPixelCenters:n,size:t},u=L.runKernel(Ro,o,l);return i?Q(u,[u.shape[1],u.shape[2],u.shape[3]]):u}var ZP=z({resizeBilinear_:YP});function JP(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=Q(r,[1,r.shape[0],r.shape[1],r.shape[2]]));let[]=t,o={images:s},l={alignCorners:a,halfPixelCenters:n,size:t},u=L.runKernel(No,o,l);return i?Q(u,[u.shape[1],u.shape[2],u.shape[3]]):u}var QP=z({resizeNearestNeighbor_:JP});function e_(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=te(Bt([n]),255),p,c,d,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){[p,c,d]=Sa(r,[1,1,1],-1);let f=te(p,s),g=te(c,i),y=te(d,o);h=we(we(f,g),y)}else h=e;if(t==="otsu"){let f=fg(Ue(Bg(h),"int32"),Ve([]),256);u=t_(f,l)}let m=a?zh(h,u):Gp(h,u);return Ue(te(m,255),"int32")}function t_(e,t){let a=Bt([-1]),n=Bt([0]),r=Bt([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}.`),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 L.runKernel(Qo,l,u)}var r_=z({transform_:n_});function s_(e,t,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),o,l;typeof t=="number"?(F(t%1===0,()=>`bandPart(): numLower must be an integer, got ${t}.`),F(t<=s,()=>`bandPart(): numLower (${t}) must not be greater than the number of rows (${s}).`),o=R(t<0?s:t,"numLower","bandPart")):(F(t.dtype==="int32",()=>"bandPart(): numLower's dtype must be an int32."),o=kr(mh(t,0),s,Yd(t,s))),typeof a=="number"?(F(a%1===0,()=>`bandPart(): numUpper must be an integer, got ${a}.`),F(a<=i,()=>`bandPart(): numUpper (${a}) must not be greater than the number of columns (${i}).`),l=R(a<0?i:a,"numUpper","bandPart")):(F(a.dtype==="int32",()=>"bandPart(): numUpper's dtype must be an int32."),l=kr(mh(a,0),i,Yd(a,i)));let u=Q(Zl(0,s,1,"int32"),[-1,1]),p=Zl(0,i,1,"int32"),c=xe(u,p),d=Xd(zh(c,o),kg(c,Ln(l))),h=yn([s,i],n.dtype);return Q(ca(Na(Q(n,[-1,s,i])).map(m=>kr(d,m,h))),r)}var i_=z({bandPart_:s_});function o_(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=Sa(e,e.shape[0],0).map(r=>Oe(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 t5(e,t);{let a=e.shape.slice(0,e.shape.length-2).reduce((l,u)=>l*u),n=Na(Q(e,[a,e.shape[e.shape.length-2],e.shape[e.shape.length-1]]),0),r=[],s=[];n.forEach(l=>{let[u,p]=t5(l,t);r.push(u),s.push(p)});let i=Q(ca(r,0),e.shape),o=Q(ca(s,0),e.shape);return[i,o]}}function t5(e,t=!1){return L.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=bg(a),s=Ia(e),i=Zn([[1]],[1,1]),o=Ia(i),l=a>=n?n:a;for(let u=0;u{let h=Fe(s,[u,u],[a-u,1]),m=Up(h),f=Fe(s,[u,u],[1,1]),g=kr(Gp(f,0),Zn([[-1]]),Zn([[1]])),y=xe(f,te(g,m)),x=ve(h,y);x.shape[0]===1?o=Ia(i):o=lt([i,Fe(x,[1,0],[x.shape[0]-1,x.shape[1]])],0);let A=Ln(ve(pt(g,y),m)),b=Fe(s,[u,0],[a-u,n]),w=te(A,o),I=Qs(o);if(u===0)s=xe(b,pt(w,pt(I,b)));else{let M=xe(b,pt(w,pt(I,b)));s=lt([Fe(s,[0,0],[u,n]),M],0)}let T=Qs(w),N=Fe(r,[0,u],[a,r.shape[1]-u]);if(u===0)r=xe(N,pt(pt(N,o),T));else{let M=xe(N,pt(pt(N,o),T));r=lt([Fe(r,[0,0],[a,u]),M],1)}return[o,s,r]}),J([p,c,d])}return!t&&a>n&&(r=Fe(r,[0,0],[a,n]),s=Fe(s,[0,0],[n,n])),[r,s]})}var d_=z({qr_:u_}),wa;(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"})(wa||(wa={}));function p_(e,t,a=wa.SUM_BY_NONZERO_WEIGHTS){let n=R(e,"losses","computeWeightedLoss"),r=null;t!=null&&(r=R(t,"weights","computeWeightedLoss"));let s=r==null?n:te(n,r);if(a===wa.NONE)return s;if(a===wa.SUM)return ot(s);if(a===wa.MEAN){if(r==null)return Kd(s);{let i=n.size/r.size,o=ve(ot(s),ot(r));return i>1?ve(o,Ge(i)):o}}if(a===wa.SUM_BY_NONZERO_WEIGHTS){if(r==null)return ve(ot(s),Ge(n.size));{let i=te(r,Hr(n.shape)),o=Ue(ot($g(i,Ge(0))),"float32");return ve(ot(s),o)}}throw Error(`Unknown reduction: ${a}`)}var Rr=z({computeWeightedLoss_:p_});function c_(e,t,a,n=wa.SUM_BY_NONZERO_WEIGHTS){let r=R(e,"labels","absoluteDifference"),s=R(t,"predictions","absoluteDifference"),i=null;a!=null&&(i=R(a,"weights","absoluteDifference")),Ta(r.shape,s.shape,"Error in absoluteDifference: ");let o=Za(xe(r,s));return Rr(o,i,n)}var h_=z({absoluteDifference_:c_});function m_(e,t,a,n,r=wa.SUM_BY_NONZERO_WEIGHTS){let s=R(e,"labels","cosineDistance"),i=R(t,"predictions","cosineDistance"),o=null;n!=null&&(o=R(n,"weights","cosineDistance")),Ta(s.shape,i.shape,"Error in cosineDistance: ");let l=Ge(1),u=xe(l,ot(te(s,i),a,!0));return Rr(u,o,r)}var f_=z({cosineDistance_:m_});function g_(e,t,a,n=wa.SUM_BY_NONZERO_WEIGHTS){let r=R(e,"labels","hingeLoss"),s=R(t,"predictions","hingeLoss"),i=null;a!=null&&(i=R(a,"weights","hingeLoss")),Ta(r.shape,s.shape,"Error in hingeLoss: ");let o=Ge(1);r=xe(te(Ge(2),r),o);let l=jp(xe(o,te(r,s)));return Rr(l,i,n)}var y_=z({hingeLoss_:g_});function x_(e,t,a,n=1,r=wa.SUM_BY_NONZERO_WEIGHTS){let s=R(e,"labels","huberLoss"),i=R(t,"predictions","huberLoss"),o=null;a!=null&&(o=R(a,"weights","huberLoss")),Ta(s.shape,i.shape,"Error in huberLoss: ");let l=Ge(n),u=Za(xe(i,s)),p=Yd(u,l),c=xe(u,p),d=we(te(Ge(.5),Tn(p)),te(l,c));return Rr(d,o,r)}var A_=z({huberLoss_:x_});function b_(e,t,a,n=1e-7,r=wa.SUM_BY_NONZERO_WEIGHTS){let s=R(e,"labels","logLoss"),i=R(t,"predictions","logLoss"),o=null;a!=null&&(o=R(a,"weights","logLoss")),Ta(s.shape,i.shape,"Error in logLoss: ");let l=Ge(1),u=Ge(n),p=Ln(te(s,Yl(we(i,u)))),c=te(xe(l,s),Yl(we(xe(l,i),u))),d=xe(p,c);return Rr(d,o,r)}var v_=z({logLoss_:b_});function w_(e,t,a,n=wa.SUM_BY_NONZERO_WEIGHTS){let r=R(e,"labels","meanSquaredError"),s=R(t,"predictions","meanSquaredError"),i=null;a!=null&&(i=R(a,"weights","meanSquaredError")),Ta(r.shape,s.shape,"Error in meanSquaredError: ");let o=Ug(r,s);return Rr(o,i,n)}var k_=z({meanSquaredError_:w_});function I_(e,t){let a=R(e,"labels","sigmoidCrossEntropyWithLogits"),n=R(t,"logits","sigmoidCrossEntropyWithLogits");Ta(a.shape,n.shape,"Error in sigmoidCrossEntropyWithLogits: ");let r=jp(n),s=te(n,a),i=Sg(ns(Ln(Za(n))));return we(xe(r,s),i)}function S_(e,t,a,n=0,r=wa.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")),Ta(s.shape,i.shape,"Error in sigmoidCrossEntropy: "),n>0){let u=Ge(n),p=Ge(1),c=Ge(.5);s=we(te(s,xe(p,u)),te(c,u))}let l=I_(s,i);return Rr(l,o,r)}var C_=z({sigmoidCrossEntropy_:S_});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 tr((n,r,s)=>{let i=Tg(r,[a],!0),o=xe(Ue(r,"float32"),i);s([n,o]);let l=Ln(te(o,n));return{value:ot(l,[a]),gradFunc:(u,p)=>{let[c,d]=p,h=Vp(u.shape,[a]);return[te(Q(u,h),xe(Ue(c,"float32"),ns(d))),te(Q(u,h),xe(ns(d),Ue(c,"float32")))]}}})(e,t)}function N_(e,t,a,n=0,r=wa.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")),Ta(s.shape,i.shape,"Error in softmaxCrossEntropy: "),n>0){let u=Ge(n),p=Ge(1),c=Ge(s.shape[1]);s=we(te(s,xe(p,u)),ve(u,c))}let l=T_(s,i);return Rr(l,o,r)}var R_=z({softmaxCrossEntropy_:N_});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=L.runKernel(Ip,l);return{outputIndices:u[0],outputValues:u[1],emptyRowIndicator:u[2],reverseIndexMap:u[3]}}var M_=z({sparseFillEmptyRows_:E_});function $_(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=L.runKernel(Du,i);return{outputIndices:o[0],outputShape:o[1]}}var P_=z({sparseReshape_:$_});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 +Expected: ${s}.`)}typeof expect!="undefined"&&expect().nothing()}function KM(e,t){e().then(()=>t.fail(),()=>t()),typeof expect!="undefined"&&expect().nothing()}function YM(e,t){let a=typeof t=="string"||typeof t=="number"||typeof t=="boolean"?[t]:t;return Ur(e)||Ur(e[0])||Ur(t)||Ur(t[0])?f1(e,a,(n,r)=>n==r):f1(e,t,(n,r)=>Og(n,r,0))}function ZM(e,t,a){if(a==null&&(a=Dg()),!Og(e,t,a))throw new Error(`Numbers differ: actual === ${e}, expected === ${t}`);typeof expect!="undefined"&&expect().nothing()}function Og(e,t,a){return!isFinite(e)&&!isFinite(t)?!0:!(isNaN(e)||isNaN(t)||Math.abs(e-t)>a)}function JM(e,t,a){for(let n=0;na)throw new Error(`Value out of range:${e[n]} low: ${t}, high: ${a}`)}function QM(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 t$(e){await e.play(),"requestVideoFrameCallback"in e&&await new Promise(t=>{e.requestVideoFrameCallback(t)})}var zg=class{constructor(e,t,a,n,r){this.mean=e,this.stdDev=t,this.dtype=a,this.nextVal=NaN,this.truncated=n,this.truncated&&(this.upper=this.mean+this.stdDev*2,this.lower=this.mean-this.stdDev*2);let s=r||Math.random();this.random=Fg.alea(s.toString())}nextValue(){if(!isNaN(this.nextVal)){let n=this.nextVal;return this.nextVal=NaN,n}let e,t,a=!1;for(;!a;){let n,r,s;do n=2*this.random()-1,r=2*this.random()-1,s=n*n+r*r;while(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}},a$=class{constructor(e,t,a,n){this.alpha=e,this.beta=1/t,this.dtype=a;let r=n||Math.random();this.randu=Fg.alea(r.toString()),this.randn=new zg(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=Fg.alea(n)}convertValue(e){return this.canReturnFloat()?e:Math.round(e)}nextValue(){return this.convertValue(this.min+this.range*this.random())}};function r$(e,t,a=1,n="float32",r){if(an(e),a==null&&(a=1),n==null&&(n="float32"),n!=="float32"&&n!=="int32")throw new Error(`Unsupported data type ${n}`);let s=new a$(t,a,n,r),i=_e(e,n);for(let o=0;o`Error in reverse1D: x must be rank 1 but got rank ${t.rank}.`),rs(t,0)}var M4=z({reverse1d_:m$});function f$(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}.`),rs(a,t)}var $4=z({reverse2d_:f$});function g$(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}.`),rs(a,t)}var P4=z({reverse3d_:g$});function y$(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}.`),rs(a,t)}var _4=z({reverse4d_:y$});function x$(e){let t={x:R(e,"x","round")};return L.runKernel($o,t)}var Bg=z({round_:x$});function A$(e){let t={x:R(e,"x","rsqrt","float32")};return L.runKernel(Po,t)}var F4=z({rsqrt_:A$});function b$(e){let t={x:R(e,"x","selu")};return L.runKernel(Oo,t)}var D4=z({selu_:b$});function v$(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=Q(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(p.rank===4,()=>`Error in separableConv2d: input must be rank 4, but got rank ${p.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 d=l.shape[2],h=l.shape[3];F(u.shape[2]===d*h,()=>`Error in separableConv2d: the third dimension of pointwise filter must be ${d*h}, but got ${u.shape[2]}.`);let m=Oh(p,l,n,r,i,s),f=Bp(m,u,1,"valid",i);return c?Q(f,[f.shape[1],f.shape[2],f.shape[3]]):f}var O4=z({separableConv2d_:v$});async function w$(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 p=0;p`slice1d expects a rank-1 tensor, but got a rank-${n.rank} tensor`),Fe(n,[t],[a])}var V4=z({slice1d_:C$});function T$(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`),Fe(n,t,a)}var U4=z({slice2d_:T$});function N$(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`),Fe(n,t,a)}var qp=z({slice3d_:N$});function R$(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`),Fe(n,t,a)}var Vh=z({slice4d_:R$});function E$(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 L.runKernel(Ho,n,r)}var Uh=z({softmax_:E$});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 L.runKernel(xp,t)}var Gh=z({fft_:M$});function $$(e){F(e.dtype==="complex64",()=>`The dtype for tf.spectral.ifft() must be complex64 but got ${e.dtype}.`);let t={input:e};return L.runKernel(Ap,t)}var Zd=z({ifft_:$$});function P$(e){let t=e.shape[e.shape.length-1],a=e.size/t,n;if(t<=2){let r=Q(e,[a,t]);n=Zd(r)}else{let r=[a,2*(t-1)],s=Q(Jl(e),[a,t]),i=Q(Hp(e),[a,t]),o=rs(Fe(s,[0,1],[a,t-2]),1),l=te(rs(Fe(i,[0,1],[a,t-2]),1),Ge(-1)),u=lt([s,o],1),p=lt([i,l],1),c=Q(Sr(u,p),[r[0],r[1]]);n=Zd(c)}if(n=Jl(n),e.rank===3&&e.shape[0]!==0){let r=n,s=e.shape[0];n=Q(n,[s,n.shape[0]/s,n.shape[1]]),r.dispose()}return n}var Vg=z({irfft_:P$});function _$(e,t,a=0){let n={x:R(e,"x","split")},r={numOrSizeSplits:t,axis:a};return L.runKernel(Fu,n,r)}var Sa=z({split_:_$});function F$(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),f=e.shape.map(g=>g);f[e.shape.length-1]=t,r=Fe(e,m,f),a=t}else if(t!=null&&t>a){let m=e.shape.map(f=>f);m[e.shape.length-1]=t-a,r=lt([e,yn(m)],e.shape.length-1),a=t}else r=e;let s=Qa(r),i=Q(Sr(r,s),[n,a]),o=Gh(i),l=Math.floor(a/2)+1,u=Jl(o),p=Hp(o),c=Sa(u,[l,a-l],u.shape.length-1),d=Sa(p,[l,a-l],p.shape.length-1),h=r.shape.slice();return h[r.shape.length-1]=l,Q(Sr(c[0],d[0]),h)}var Hh=z({rfft_:F$});function D$(e,t){let a=R(e,"a","squaredDifference"),n=R(t,"b","squaredDifference");[a,n]=Rt(a,n),Ut(a.shape,n.shape);let r={a,b:n},s={};return L.runKernel(qo,r,s)}var Ug=z({squaredDifference_:D$});function O$(e,t){let a=R(e,"x","squeeze","string_or_numeric");return Q(a,AA(a.shape,t).newShape)}var Oe=z({squeeze_:O$});function z$(e,t=0){let a=Gd(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 L.runKernel(Tu,n,r)}var ca=z({stack_:z$});function L$(e,t=0){let a={x:R(e,"x","step")},n={alpha:t};return L.runKernel(ds,a,n)}var Gg=z({step_:L$});function W$(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 L.runKernel(Xo,u,p)}var G4=z({stridedSlice_:W$});function B$(e){let t={x:R(e,"x","tan","float32")};return L.runKernel(Yo,t)}var H4=z({tan_:B$});function Bt(e,t){ii(e);let a=Qn(e,t);if(a.length!==1)throw new Error("tensor1d() requires values to be a flat/TypedArray");return ps(e,null,a,t)}function Zn(e,t,a){if(ii(e),t!=null&&t.length!==2)throw new Error("tensor2d() requires shape to have two numbers");let n=Qn(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 ps(e,t,n,a)}function Hg(e,t,a){if(ii(e),t!=null&&t.length!==3)throw new Error("tensor3d() requires shape to have three numbers");let n=Qn(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 ps(e,t,n,a)}function j4(e,t,a){if(ii(e),t!=null&&t.length!==4)throw new Error("tensor4d() requires shape to have four numbers");let n=Qn(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 ps(e,t,n,a)}function q4(e,t,a){if(ii(e),t!=null&&t.length!==5)throw new Error("tensor5d() requires shape to have five numbers");let n=Qn(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 ps(e,t,n,a)}function X4(e,t,a){if(ii(e),t!=null&&t.length!==6)throw new Error("tensor6d() requires shape to have six numbers");let n=Qn(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,ps(e,t,n,a)}var jh={};Ze(jh,{calculateShapes:()=>K4,validateInput:()=>qh,validateUpdateShape:()=>jg});function jg(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;c= 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]=L.runKernel(Jo,s,i);return{values:o,indices:l}}var Z4=z({topk_:U$});function G$(e,t=0,a=1,n,r){if(an(e),n!=null&&n==="bool")throw new Error("Unsupported data type $ { dtype }");let s=new zg(t,a,n,!0,r),i=_e(e,n);for(let o=0;o0,()=>"The input tensor must be at least 1D");let n={x:a},r={axis:t},[s,i]=L.runKernel(Rp,n,r);return{values:s,indices:i}}var Q4=z({unique_:H$});function j$(e,t,a){let n=R(e,"x","unsortedSegmentSum"),r=R(t,"segmentIds","unsortedSegmentSum","int32");F(Hl(a),()=>"numSegments must be of dtype int");let s={x:n,segmentIds:r},i={numSegments:a};return L.runKernel(Ep,s,i)}var e7=z({unsortedSegmentSum_:j$});function q$(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 L.runKernel(Wu,n,r)}var Na=z({unstack_:q$});function t7(e,t){return Wh(e,t,"right")}function a7(e,t=!0,a,n){return L.makeVariable(e,t,a,n)}function n7(e,t){let a=[];for(let s=0;s0,()=>"mask cannot be scalar"),Ta(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 f=s;fo).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"?De(()=>{let i=Jl(n),o=Hp(n);return i=L.runKernel(wr,{x:i},s),o=L.runKernel(wr,{x:o},s),a&&(o=Ln(o)),Sr(i,o)}):L.runKernel(wr,r,s)}var Qs=z({transpose_:Y$});function Z$(e,t,a,n,r=!0){let s=R(e,"v","movingAverage"),i=R(t,"x","movingAverage"),o=R(a,"decay","movingAverage");zA(s,i),F(Cr(s.shape,i.shape),()=>"Shape mismatch in v and x");let l=Ge(1),u=xe(l,o),p=te(xe(i,s),u);if(r){F(n!=null,()=>"When using zeroDebias: true, step is required.");let c=R(n,"step","movingAverage");p=ve(p,xe(l,Kl(o,c)))}return we(s,p)}var s7=z({movingAverage_:Z$});function J$(e,t,a){an(a);let n=R(e,"indices","scatterND","int32"),r=R(t,"updates","scatterND");qh(r,n,a);let s={indices:n,updates:r},i={shape:a};return L.runKernel(_o,s,i)}var i7=z({scatterND_:J$});function Q$(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 eP(e,t,a,n=0){an(a);let r=R(e,"sparseIndices","sparseToDense","int32"),s=R(t,"sparseValues","sparseToDense","string_or_numeric"),i=R(n,"defaultValue","sparseToDense",s.dtype);Q$(r,s,a,i);let o={sparseIndices:r,sparseValues:s,defaultValue:i},l={outputShape:a};return L.runKernel(jo,o,l)}var o7=z({sparseToDense_:eP});function tP(e,t){let a=R(t,"indices","gatherND","int32"),n={params:R(e,"x","gatherND","string_or_numeric"),indices:a};return L.runKernel(Gi,n)}var l7=z({gatherND_:tP});function aP(e,t){if(t==null)return e.shape.slice();if(Cr(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 yt?r.clone():r;let s=aP(r,a),i=1-t,o=ve(vg(we(Bh(s,0,1,"float32",n),i)),i);return te(r,o)}var u7=z({dropout_:nP});function Xg(e){return Math.floor(Math.pow(2,Math.ceil(Math.log(e)/Math.log(2))))}function Xh(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}`),Ta(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],p=bA("bool",l);for(let c=0;cg.value-f.value),p[c]=0;for(let f=0;flP,depthwiseConv2d:()=>mP,matMul:()=>gP});function sP(e,t,a,n,r,s="NHWC",i){let o=e;e.rank===3&&(o=Q(e,[1,e.shape[0],e.shape[1],e.shape[2]]));let l=t;l.rank===3&&(l=Q(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],p=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(p===a[3],()=>`Error in conv2dDerFilter: depth of dy (${p}) must match output depth for filter (${a[3]}).`),Nn("conv2dDerFilter",r,i);let c={x:o,dy:l},d={strides:n,pad:r,dataFormat:s,dimRoundingMode:i,filterShape:a};return L.runKernel(hp,c,d)}var iP=z({conv2DBackpropFilter_:sP});function Kh(e,t,a){if(a==null||a==="linear")return e;if(a==="relu")return te(e,Gg(t));throw new Error(`Cannot compute gradient for fused activation ${a}.`)}function Yh(e,t){let a=t,n=gg(e.shape,t.shape);return n.length>0&&(a=ot(a,n)),Q(a,e.shape)}function Zh(e,t,a,n){if(t==="linear")return e;if(t==="relu")return jp(e);if(t==="elu")return xg(e);if(t==="relu6")return Wg(e);if(t==="prelu")return _g(e,a);if(t==="leakyrelu")return Ig(e,n);if(t==="sigmoid")return za(e);throw new Error(`Unknown fused activation ${t}.`)}var Jh=(e,t)=>!(e>0)||t==="linear";function oP({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",Jh(L.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 I=Bp(e,t,a,n,r,s,i);return o!=null&&(I=we(I,o)),Zh(I,l,u,p)}let c=R(e,"x","conv2d","float32"),d=R(t,"filter","conv2d","float32"),h=c,m=!1;c.rank===3&&(m=!0,h=Q(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(d.rank===4,()=>`Error in fused conv2d: filter must be rank 4, but got rank ${d.rank}.`),Nn("fused conv2d",n,i);let f=r==="NHWC"?h.shape[3]:h.shape[1];F(d.shape[2]===f,()=>`Error in conv2d: depth of input (${f}) must match input depth for filter ${d.shape[2]}.`),F(Nr(a,s),()=>`Error in conv2D: Either strides or dilations must be 1. Got strides ${a} and dilations '${s}'`);let g=Lp(h.shape,d.shape,a,s,n,i),y;o!=null&&(y=R(o,"bias","fused conv2d"),[y]=Rt(y,c),r==="NHWC"?Ut(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 x;if(u!=null){let I=u.shape;if(F(I.length<=1||I.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-${I.length}.`),I.length===1)F(I[0]===1||I[0]===g.outChannels,()=>`Error in fused conv2d: PReLU activation weights (${I}) is not compatible with the number of output channels (${g.outChannels}).`);else if(I.length===3)try{Ut(I,g.outShape)}catch(T){let N=`Error in fused conv2d: PReLU activation weights (${I}) is not compatible with the output shape of the conv2d (${g.outShape}).`;throw Error(N)}x=R(u,"prelu weights","fused conv2d")}let A=(I,T)=>{F(r==="NHWC",()=>`Error in gradient of fused conv2D: got dataFormat of ${r} but only NHWC is currently supported.`);let[N,M,$,E]=T,S=Kh(I,$,l);F(qd(s),()=>`Error in gradient of fused conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${s}'`);let _=Nb(M.shape,S,N,a,n),O=iP(M,S,N.shape,a,n),W=[_,O];if(E!=null){let P=Yh(E,S);W.push(P)}return W},b={x:h,filter:d,bias:y,preluActivationWeights:x},w={strides:a,pad:n,dataFormat:r,dilations:s,dimRoundingMode:i,activation:l,leakyreluAlpha:p};return o==null?tr((I,T,N)=>{let M=L.runKernel(Zr,b,w);return N([T,I,M]),m&&(M=Q(M,[M.shape[1],M.shape[2],M.shape[3]])),{value:M,gradFunc:A}})(h,d):tr((I,T,N,M)=>{let $=L.runKernel(Zr,b,w);return M([T,I,$,N]),m&&($=Q($,[$.shape[1],$.shape[2],$.shape[3]])),{value:$,gradFunc:A}})(h,d,y)}var lP=z({fusedConv2d_:oP});function uP(e,t,a,n,r,s=[1,1],i){let o=e;e.rank===3&&(o=Q(e,[1,e.shape[0],e.shape[1],e.shape[2]]));let l=t;l.rank===3&&(l=Q(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 L.runKernel(mp,u,p)}var dP=z({depthwiseConv2dNativeBackpropFilter_:uP});function pP(e,t,a,n,r,s=[1,1],i){let o=t,l=!1;t.rank===3&&(l=!0,o=Q(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=L.runKernel(fp,u,p);return l?Q(c,[c.shape[1],c.shape[2],c.shape[3]]):c}var cP=z({depthwiseConv2dNativeBackpropInput_:pP});function hP({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(Jh(L.state.gradientDepth,l)===!1){let w=Oh(e,t,a,n,r,s,i);return o!=null&&(w=we(w,o)),Zh(w,l,u,p)}let c=R(e,"x","depthwiseConv2d","float32"),d=R(t,"filter","depthwiseConv2d","float32"),h=c,m=!1;c.rank===3&&(m=!0,h=Q(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(d.rank===4,()=>`Error in fused depthwiseConv2d: filter must be rank 4, but got rank ${d.rank}.`),F(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]),F(Nr(a,s),()=>`Error in fused depthwiseConv2d: Either strides or dilations must be 1. Got strides ${a} and dilations '${s}'`),Nn("fused depthwiseConv2d",n,i);let f=Lp(h.shape,d.shape,a,s,n,i,!0),g;o!=null&&(g=R(o,"bias","fused conv2d"),[g]=Rt(g,c),Ut(f.outShape,g.shape));let y;u!=null&&(y=R(u,"prelu weights","fused depthwiseConv2d"));let x=(w,I)=>{F(qd(s),()=>`Error in gradient of fused depthwiseConv2d: dilation rates greater than 1 are not yet supported. Got dilations '${s}'`);let[T,N,M,$]=I,E=Kh(w,M,l),S=cP(N.shape,E,T,a,n,s,i),_=dP(N,E,T.shape,a,n,s,i);if($!=null){let O=Yh(g,E);return[S,_,O]}return[S,_]},A={x:h,filter:d,bias:g,preluActivationWeights:y},b={strides:a,pad:n,dataFormat:r,dilations:s,dimRoundingMode:i,activation:l,leakyreluAlpha:p};return o==null?tr((w,I,T)=>{let N=L.runKernel(Jr,A,b);return T([I,w,N]),m&&(N=Q(N,[N.shape[1],N.shape[2],N.shape[3]])),{value:N,gradFunc:x}})(h,d):tr((w,I,T,N)=>{let M=L.runKernel(Jr,A,b);return N([I,w,M,T]),m&&(M=Q(M,[M.shape[1],M.shape[2],M.shape[3]])),{value:M,gradFunc:x}})(h,d,g)}var mP=z({fusedDepthwiseConv2d_:hP});function fP({a:e,b:t,transposeA:a=!1,transposeB:n=!1,bias:r,activation:s="linear",preluActivationWeights:i,leakyreluAlpha:o=.2}){if(Jh(L.state.gradientDepth,s)===!1){let $=pt(e,t,a,n);return r!=null&&($=we($,r)),Zh($,s,i,o)}let l=R(e,"a","fused matMul"),u=R(t,"b","fused matMul");[l,u]=Rt(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],m=l.shape.slice(0,-2),f=u.shape.slice(0,-2),g=mt(m),y=mt(f);F(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 x=Ut(l.shape.slice(0,-2),u.shape.slice(0,-2)).concat([d,h]),A=a?Q(l,[g,p,d]):Q(l,[g,d,p]),b=n?Q(u,[y,h,c]):Q(u,[y,c,h]),w;r!=null&&(w=R(r,"bias","fused matMul"),[w]=Rt(w,l),Ut(x,w.shape));let I;i!=null&&(I=R(i,"prelu weights","fused matMul"));let T=($,E)=>{let[S,_,O,W]=E,P=Kh(Q($,O.shape),O,s),U,G;if(!a&&!n?(U=pt(P,_,!1,!0),G=pt(S,P,!0,!1)):!a&&n?(U=pt(P,_,!1,!1),G=pt(P,S,!0,!1)):a&&!n?(U=pt(_,P,!1,!0),G=pt(S,P,!1,!1)):(U=pt(_,P,!0,!0),G=pt(P,S,!0,!0)),r!=null){let q=Yh(W,P);return[U,G,q]}else return[U,G]},N={a:A,b,bias:w,preluActivationWeights:I},M={transposeA:a,transposeB:n,activation:s,leakyreluAlpha:o};return r==null?tr(($,E,S)=>{let _=L.runKernel(Yr,N,M);return S([$,E,_]),{value:Q(_,x),gradFunc:T}})(A,b):tr(($,E,S,_)=>{let O=L.runKernel(Yr,N,M);return _([$,E,O,S]),{value:Q(O,x),gradFunc:T}})(A,b,w)}var gP=z({fusedMatMul_:fP});function yP(e){return Xh(e,.54,.46)}var xP=z({hammingWindow_:yP});function AP(e){return Xh(e,.5,.5)}var p7=z({hannWindow_:AP});function bP(e,t,a,n=!1,r=0){let s=0,i=[];for(;s+t<=e.size;)i.push(Fe(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 p={image:i,boxes:o,boxInd:l},c={method:r,extrapolationValue:s,cropSize:n};return L.runKernel(Ei,p,c)}var IP=z({cropAndResize_:kP});function SP(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 L.runKernel(Wi,a,{})}var CP=z({flipLeftRight_:SP});function TP(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,Xr(t,r)}var NP=z({grayscaleToRGB_:TP});function RP(e){let t=R(e,"image","RGBToGrayscale"),a=t.rank-1,n=t.shape[a];F(t.rank>=2,()=>`Error in RGBToGrayscale: images must be at least rank 2, but got rank ${t.rank}.`),F(n===3,()=>`Error in RGBToGrayscale: last dimension of an RGB image should be size 3, but got size ${n}.`);let r=t.dtype,s=Ue(t,"float32"),i=Bt([.2989,.587,.114]),o;switch(t.rank){case 2:o=Vs("ij,j->i",s,i);break;case 3:o=Vs("ijk,k->ij",s,i);break;case 4:o=Vs("ijkl,l->ijk",s,i);break;case 5:o=Vs("ijklm,m->ijkl",s,i);break;case 6:o=Vs("ijklmn,n->ijklm",s,i);break;default:throw new Error("Not a valid tensor rank.")}return o=Wt(o,-1),Ue(o,r)}var EP=z({rgbToGrayscale_:RP});function MP(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 L.runKernel(el,s,i)}var $P=z({rotateWithOffset_:MP});function Gu(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 PP(e,t,a,n=.5,r=Number.NEGATIVE_INFINITY){let s=R(e,"boxes","nonMaxSuppression","float32"),i=R(t,"scores","nonMaxSuppression","float32"),o=Gu(s,i,a,n,r);a=o.maxOutputSize,n=o.iouThreshold,r=o.scoreThreshold;let l={maxOutputSize:a,iouThreshold:n,scoreThreshold:r};return L.runKernel(Ao,{boxes:s,scores:i},l)}var _P=z({nonMaxSuppression_:PP});function FP(e,t,a){let n=DP(e,t,a),r=n<0?-(n+1):n;e.splice(r,0,t)}function DP(e,t,a){return zP(e,t,a||OP)}function OP(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 h7(e,t,a,n,r){return Yg(e,t,a,n,r,0)}function m7(e,t,a,n,r,s){return Yg(e,t,a,n,r,0,!1,s,!0)}function f7(e,t,a,n,r,s){return Yg(e,t,a,n,r,s,!0)}function Yg(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(t5);let p=s>0?-.5/s:0,c=[],d=[];for(;c.length0;){let g=u.pop(),{score:y,boxIndex:x,suppressBeginIndex:A}=g;if(y=A;--w){let I=LP(e,x,c[w]);if(I>=n){b=!0;break}if(g.score=g.score*WP(n,p,I),g.score<=r)break}g.suppressBeginIndex=c.length,b||(g.score===y?(c.push(x),d.push(g.score)):g.score>r&&FP(u,g,t5))}let h=c.length,m=a-h;o&&m>0&&(c.push(...new Array(m).fill(0)),d.push(...new Array(m).fill(0)));let f={selectedIndices:c};return i&&(f.selectedScores=d),l&&(f.validOutputs=h),f}function LP(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),m=(c-u)*(d-p);if(h<=0||m<=0)return 0;let f=Math.max(s,u),g=Math.max(i,p),y=Math.min(o,c),x=Math.min(l,d),A=Math.max(y-f,0)*Math.max(x-g,0);return A/(h+m-A)}function WP(e,t,a){let n=Math.exp(t*a*a);return a<=e?n:0}function t5(e,t){return e.score-t.score||e.score===t.score&&t.boxIndex-e.boxIndex}async function BP(e,t,a,n=.5,r=Number.NEGATIVE_INFINITY){let s=R(e,"boxes","nonMaxSuppressionAsync"),i=R(t,"scores","nonMaxSuppressionAsync"),o=Gu(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}=h7(u,p,a,n,r);return s!==e&&s.dispose(),i!==t&&i.dispose(),Bt(c,"int32")}var VP=BP;function UP(e,t,a,n=.5,r=Number.NEGATIVE_INFINITY,s=0){let i=R(e,"boxes","nonMaxSuppression"),o=R(t,"scores","nonMaxSuppression"),l=Gu(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=L.runKernel(bo,u,p);return{selectedIndices:c[0],selectedScores:c[1]}}var GP=z({nonMaxSuppressionWithScore_:UP});async function HP(e,t,a,n=.5,r=Number.NEGATIVE_INFINITY,s=0){let i=R(e,"boxes","nonMaxSuppressionAsync"),o=R(t,"scores","nonMaxSuppressionAsync"),l=Gu(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}=f7(p,c,a,n,r,s);return i!==e&&i.dispose(),o!==t&&o.dispose(),{selectedIndices:Bt(d,"int32"),selectedScores:Bt(h)}}var jP=HP;function qP(e,t,a,n=.5,r=Number.NEGATIVE_INFINITY,s=!1){let i=R(e,"boxes","nonMaxSuppression"),o=R(t,"scores","nonMaxSuppression"),l=Gu(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},m=L.runKernel(Su,d,h);return{selectedIndices:m[0],validOutputs:m[1]}}var XP=z({nonMaxSuppressionPadded_:qP});async function KP(e,t,a,n=.5,r=Number.NEGATIVE_INFINITY,s=!1){let i=R(e,"boxes","nonMaxSuppressionAsync"),o=R(t,"scores","nonMaxSuppressionAsync"),l=Gu(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:m,validOutputs:f}=m7(d,h,u,p,c,s);return i!==e&&i.dispose(),o!==t&&o.dispose(),{selectedIndices:Bt(m,"int32"),validOutputs:Ge(f,"int32")}}var YP=KP;function ZP(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=Q(r,[1,r.shape[0],r.shape[1],r.shape[2]]));let[]=t,o={images:s},l={alignCorners:a,halfPixelCenters:n,size:t},u=L.runKernel(Ro,o,l);return i?Q(u,[u.shape[1],u.shape[2],u.shape[3]]):u}var JP=z({resizeBilinear_:ZP});function QP(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=Q(r,[1,r.shape[0],r.shape[1],r.shape[2]]));let[]=t,o={images:s},l={alignCorners:a,halfPixelCenters:n,size:t},u=L.runKernel(No,o,l);return i?Q(u,[u.shape[1],u.shape[2],u.shape[3]]):u}var e_=z({resizeNearestNeighbor_:QP});function t_(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=te(Bt([n]),255),p,c,d,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){[p,c,d]=Sa(r,[1,1,1],-1);let f=te(p,s),g=te(c,i),y=te(d,o);h=we(we(f,g),y)}else h=e;if(t==="otsu"){let f=fg(Ue(Bg(h),"int32"),Ve([]),256);u=a_(f,l)}let m=a?zh(h,u):Gp(h,u);return Ue(te(m,255),"int32")}function a_(e,t){let a=Bt([-1]),n=Bt([0]),r=Bt([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}.`),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 L.runKernel(Qo,l,u)}var s_=z({transform_:r_});function i_(e,t,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),o,l;typeof t=="number"?(F(t%1===0,()=>`bandPart(): numLower must be an integer, got ${t}.`),F(t<=s,()=>`bandPart(): numLower (${t}) must not be greater than the number of rows (${s}).`),o=R(t<0?s:t,"numLower","bandPart")):(F(t.dtype==="int32",()=>"bandPart(): numLower's dtype must be an int32."),o=kr(mh(t,0),s,Yd(t,s))),typeof a=="number"?(F(a%1===0,()=>`bandPart(): numUpper must be an integer, got ${a}.`),F(a<=i,()=>`bandPart(): numUpper (${a}) must not be greater than the number of columns (${i}).`),l=R(a<0?i:a,"numUpper","bandPart")):(F(a.dtype==="int32",()=>"bandPart(): numUpper's dtype must be an int32."),l=kr(mh(a,0),i,Yd(a,i)));let u=Q(Zl(0,s,1,"int32"),[-1,1]),p=Zl(0,i,1,"int32"),c=xe(u,p),d=Xd(zh(c,o),kg(c,Ln(l))),h=yn([s,i],n.dtype);return Q(ca(Na(Q(n,[-1,s,i])).map(m=>kr(d,m,h))),r)}var o_=z({bandPart_:i_});function l_(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=Sa(e,e.shape[0],0).map(r=>Oe(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 a5(e,t);{let a=e.shape.slice(0,e.shape.length-2).reduce((l,u)=>l*u),n=Na(Q(e,[a,e.shape[e.shape.length-2],e.shape[e.shape.length-1]]),0),r=[],s=[];n.forEach(l=>{let[u,p]=a5(l,t);r.push(u),s.push(p)});let i=Q(ca(r,0),e.shape),o=Q(ca(s,0),e.shape);return[i,o]}}function a5(e,t=!1){return L.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=bg(a),s=Ia(e),i=Zn([[1]],[1,1]),o=Ia(i),l=a>=n?n:a;for(let u=0;u{let h=Fe(s,[u,u],[a-u,1]),m=Up(h),f=Fe(s,[u,u],[1,1]),g=kr(Gp(f,0),Zn([[-1]]),Zn([[1]])),y=xe(f,te(g,m)),x=ve(h,y);x.shape[0]===1?o=Ia(i):o=lt([i,Fe(x,[1,0],[x.shape[0]-1,x.shape[1]])],0);let A=Ln(ve(pt(g,y),m)),b=Fe(s,[u,0],[a-u,n]),w=te(A,o),I=Qs(o);if(u===0)s=xe(b,pt(w,pt(I,b)));else{let M=xe(b,pt(w,pt(I,b)));s=lt([Fe(s,[0,0],[u,n]),M],0)}let T=Qs(w),N=Fe(r,[0,u],[a,r.shape[1]-u]);if(u===0)r=xe(N,pt(pt(N,o),T));else{let M=xe(N,pt(pt(N,o),T));r=lt([Fe(r,[0,0],[a,u]),M],1)}return[o,s,r]}),J([p,c,d])}return!t&&a>n&&(r=Fe(r,[0,0],[a,n]),s=Fe(s,[0,0],[n,n])),[r,s]})}var p_=z({qr_:d_}),wa;(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"})(wa||(wa={}));function c_(e,t,a=wa.SUM_BY_NONZERO_WEIGHTS){let n=R(e,"losses","computeWeightedLoss"),r=null;t!=null&&(r=R(t,"weights","computeWeightedLoss"));let s=r==null?n:te(n,r);if(a===wa.NONE)return s;if(a===wa.SUM)return ot(s);if(a===wa.MEAN){if(r==null)return Kd(s);{let i=n.size/r.size,o=ve(ot(s),ot(r));return i>1?ve(o,Ge(i)):o}}if(a===wa.SUM_BY_NONZERO_WEIGHTS){if(r==null)return ve(ot(s),Ge(n.size));{let i=te(r,Hr(n.shape)),o=Ue(ot($g(i,Ge(0))),"float32");return ve(ot(s),o)}}throw Error(`Unknown reduction: ${a}`)}var Rr=z({computeWeightedLoss_:c_});function h_(e,t,a,n=wa.SUM_BY_NONZERO_WEIGHTS){let r=R(e,"labels","absoluteDifference"),s=R(t,"predictions","absoluteDifference"),i=null;a!=null&&(i=R(a,"weights","absoluteDifference")),Ta(r.shape,s.shape,"Error in absoluteDifference: ");let o=Za(xe(r,s));return Rr(o,i,n)}var m_=z({absoluteDifference_:h_});function f_(e,t,a,n,r=wa.SUM_BY_NONZERO_WEIGHTS){let s=R(e,"labels","cosineDistance"),i=R(t,"predictions","cosineDistance"),o=null;n!=null&&(o=R(n,"weights","cosineDistance")),Ta(s.shape,i.shape,"Error in cosineDistance: ");let l=Ge(1),u=xe(l,ot(te(s,i),a,!0));return Rr(u,o,r)}var g_=z({cosineDistance_:f_});function y_(e,t,a,n=wa.SUM_BY_NONZERO_WEIGHTS){let r=R(e,"labels","hingeLoss"),s=R(t,"predictions","hingeLoss"),i=null;a!=null&&(i=R(a,"weights","hingeLoss")),Ta(r.shape,s.shape,"Error in hingeLoss: ");let o=Ge(1);r=xe(te(Ge(2),r),o);let l=jp(xe(o,te(r,s)));return Rr(l,i,n)}var x_=z({hingeLoss_:y_});function A_(e,t,a,n=1,r=wa.SUM_BY_NONZERO_WEIGHTS){let s=R(e,"labels","huberLoss"),i=R(t,"predictions","huberLoss"),o=null;a!=null&&(o=R(a,"weights","huberLoss")),Ta(s.shape,i.shape,"Error in huberLoss: ");let l=Ge(n),u=Za(xe(i,s)),p=Yd(u,l),c=xe(u,p),d=we(te(Ge(.5),Tn(p)),te(l,c));return Rr(d,o,r)}var b_=z({huberLoss_:A_});function v_(e,t,a,n=1e-7,r=wa.SUM_BY_NONZERO_WEIGHTS){let s=R(e,"labels","logLoss"),i=R(t,"predictions","logLoss"),o=null;a!=null&&(o=R(a,"weights","logLoss")),Ta(s.shape,i.shape,"Error in logLoss: ");let l=Ge(1),u=Ge(n),p=Ln(te(s,Yl(we(i,u)))),c=te(xe(l,s),Yl(we(xe(l,i),u))),d=xe(p,c);return Rr(d,o,r)}var w_=z({logLoss_:v_});function k_(e,t,a,n=wa.SUM_BY_NONZERO_WEIGHTS){let r=R(e,"labels","meanSquaredError"),s=R(t,"predictions","meanSquaredError"),i=null;a!=null&&(i=R(a,"weights","meanSquaredError")),Ta(r.shape,s.shape,"Error in meanSquaredError: ");let o=Ug(r,s);return Rr(o,i,n)}var I_=z({meanSquaredError_:k_});function S_(e,t){let a=R(e,"labels","sigmoidCrossEntropyWithLogits"),n=R(t,"logits","sigmoidCrossEntropyWithLogits");Ta(a.shape,n.shape,"Error in sigmoidCrossEntropyWithLogits: ");let r=jp(n),s=te(n,a),i=Sg(ns(Ln(Za(n))));return we(xe(r,s),i)}function C_(e,t,a,n=0,r=wa.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")),Ta(s.shape,i.shape,"Error in sigmoidCrossEntropy: "),n>0){let u=Ge(n),p=Ge(1),c=Ge(.5);s=we(te(s,xe(p,u)),te(c,u))}let l=S_(s,i);return Rr(l,o,r)}var T_=z({sigmoidCrossEntropy_:C_});function N_(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 tr((n,r,s)=>{let i=Tg(r,[a],!0),o=xe(Ue(r,"float32"),i);s([n,o]);let l=Ln(te(o,n));return{value:ot(l,[a]),gradFunc:(u,p)=>{let[c,d]=p,h=Vp(u.shape,[a]);return[te(Q(u,h),xe(Ue(c,"float32"),ns(d))),te(Q(u,h),xe(ns(d),Ue(c,"float32")))]}}})(e,t)}function R_(e,t,a,n=0,r=wa.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")),Ta(s.shape,i.shape,"Error in softmaxCrossEntropy: "),n>0){let u=Ge(n),p=Ge(1),c=Ge(s.shape[1]);s=we(te(s,xe(p,u)),ve(u,c))}let l=N_(s,i);return Rr(l,o,r)}var E_=z({softmaxCrossEntropy_:R_});function M_(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=L.runKernel(Ip,l);return{outputIndices:u[0],outputValues:u[1],emptyRowIndicator:u[2],reverseIndexMap:u[3]}}var $_=z({sparseFillEmptyRows_:M_});function P_(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=L.runKernel(Du,i);return{outputIndices:o[0],outputShape:o[1]}}var __=z({sparseReshape_:P_});function F_(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 L.runKernel(Ou,i)}var F_=z({sparseSegmentMean_:__});function D_(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 L.runKernel(Ou,i)}var D_=z({sparseSegmentMean_:F_});function O_(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 L.runKernel(zu,i)}var O_=z({sparseSegmentSum_:D_});function z_(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=L.runKernel(Lu,c,p);return{nGrams:d[0],nGramsSplits:d[1]}}var L_=z({stringNGrams_:z_});function W_(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=L.runKernel(Tp,i,s);return{indices:o[0],values:o[1],shape:o[2]}}var B_=z({stringSplit_:W_});function V_(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 L.runKernel(Np,r,n)}var U_=z({stringToHashBucketFast_:V_});function G_(e,t,a,n=!0){let r=R(e,"input","staticRegexReplace","string"),s={pattern:t,rewrite:a,replaceGlobal:n};return L.runKernel(Cp,{x:r},s)}var H_=z({staticRegexReplace_:G_}),f7={fft:Gh,ifft:Zd,rfft:Hh,irfft:Vg},g7={hammingWindow:yP,hannWindow:d7,frame:p7,stft:vP},fe={flipLeftRight:SP,grayscaleToRGB:TP,resizeNearestNeighbor:QP,resizeBilinear:ZP,rgbToGrayscale:RP,rotateWithOffset:MP,cropAndResize:kP,nonMaxSuppression:PP,nonMaxSuppressionAsync:BP,nonMaxSuppressionWithScore:UP,nonMaxSuppressionWithScoreAsync:HP,nonMaxSuppressionPadded:qP,nonMaxSuppressionPaddedAsync:KP,threshold:a_,transform:r_},y7={bandPart:i_,gramSchmidt:l_,qr:d_},x7={absoluteDifference:h_,computeWeightedLoss:Rr,cosineDistance:f_,hingeLoss:y_,huberLoss:A_,logLoss:v_,meanSquaredError:k_,sigmoidCrossEntropy:C_,softmaxCrossEntropy:R_},A7={sparseFillEmptyRows:M_,sparseReshape:P_,sparseSegmentMean:F_,sparseSegmentSum:O_},b7={stringNGrams:L_,stringSplit:B_,stringToHashBucketFast:U_,staticRegexReplace:H_},v7={};Ze(v7,{Serializable:()=>w7,SerializationMap:()=>k7,getRegisteredName:()=>q_,registerClass:()=>I7});var j_=new Map,g1=new Map,w7=class{getClassName(){return this.constructor.className}static fromConfig(e,t){return new e(t)}},k7=class Ll{constructor(){this.classNameMap={}}static getMap(){return Ll.instance==null&&(Ll.instance=new Ll),Ll.instance}static register(t){Ll.getMap().classNameMap[t.className]=[t,t.fromConfig]}};function I7(e,t,a){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."),typeof t=="undefined"&&(t="Custom"),typeof a=="undefined"&&(a=e.className);let n=a,r=t+">"+n;return k7.register(e),j_.set(r,e),g1.set(e,r),e}function q_(e){return g1.has(e)?g1.get(e):e.className}var cs=class extends w7{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 J(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 Qb(e,t)}dispose(){this.iterations_!=null&&J(this.iterations_)}async saveIterations(){return this.iterations_==null&&(this.iterations_=0),{name:"iter",tensor:Ge(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(cs,Symbol.hasInstance,{value:e=>e.minimize!=null&&e.computeGradients!=null&&e.applyGradients!=null});var Zg=class extends cs{static get className(){return"Adadelta"}constructor(e,t,a=null){super(),this.learningRate=e,this.rho=t,this.epsilon=a,this.accumulatedGrads=[],this.accumulatedUpdates=[],a==null&&(this.epsilon=L.backend.epsilon())}applyGradients(e){(Array.isArray(e)?e.map(t=>t.name):Object.keys(e)).forEach((t,a)=>{let n=L.registeredVariables[t],r=!1;this.accumulatedGrads[a]==null&&(this.accumulatedGrads[a]={originalName:`${t}/accum_grad`,variable:De(()=>Qa(n).variable(r))}),this.accumulatedUpdates[a]==null&&(this.accumulatedUpdates[a]={originalName:`${t}/accum_var`,variable:De(()=>Qa(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;De(()=>{let l=we(te(i,this.rho),te(Tn(s),1-this.rho)),u=te(ve(er(we(o,this.epsilon)),er(we(i,this.epsilon))),s),p=we(te(o,this.rho),te(Tn(u),1-this.rho));i.assign(l),o.assign(p);let c=we(te(u,-this.learningRate),n);n.assign(c)})}),this.incrementIterations()}dispose(){this.accumulatedUpdates!=null&&(J(this.accumulatedGrads.map(e=>e.variable)),J(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)}},Jg=class extends cs{static get className(){return"Adagrad"}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=L.registeredVariables[t];this.accumulatedGrads[a]==null&&(this.accumulatedGrads[a]={originalName:`${t}/accumulator`,variable:De(()=>sr(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;De(()=>{let i=we(s,Tn(r));s.assign(i);let o=we(te(ve(r,er(we(i,L.backend.epsilon()))),-this.learningRate),n);n.assign(o)})}),this.incrementIterations()}dispose(){this.accumulatedGrads!=null&&J(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)}},Qg=class extends cs{static get className(){return"Adam"}constructor(e,t,a,n=null){super(),this.learningRate=e,this.beta1=t,this.beta2=a,this.epsilon=n,this.accumulatedFirstMoment=[],this.accumulatedSecondMoment=[],De(()=>{this.accBeta1=Ge(t).variable(),this.accBeta2=Ge(a).variable()}),n==null&&(this.epsilon=L.backend.epsilon())}applyGradients(e){let t=Array.isArray(e)?e.map(a=>a.name):Object.keys(e);De(()=>{let a=xe(1,this.accBeta1),n=xe(1,this.accBeta2);t.forEach((r,s)=>{let i=L.registeredVariables[r],o=!1;this.accumulatedFirstMoment[s]==null&&(this.accumulatedFirstMoment[s]={originalName:`${r}/m`,variable:De(()=>Qa(i).variable(o))}),this.accumulatedSecondMoment[s]==null&&(this.accumulatedSecondMoment[s]={originalName:`${r}/v`,variable:De(()=>Qa(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=we(te(u,this.beta1),te(l,1-this.beta1)),d=we(te(p,this.beta2),te(Tn(l),1-this.beta2)),h=ve(c,a),m=ve(d,n);u.assign(c),p.assign(d);let f=we(te(ve(h,we(er(m),this.epsilon)),-this.learningRate),i);i.assign(f)}),this.accBeta1.assign(te(this.accBeta1,this.beta1)),this.accBeta2.assign(te(this.accBeta2,this.beta2))}),this.incrementIterations()}dispose(){this.accBeta1.dispose(),this.accBeta2.dispose(),this.accumulatedFirstMoment!=null&&J(this.accumulatedFirstMoment.map(e=>e.variable)),this.accumulatedSecondMoment!=null&&J(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),De(()=>{this.accBeta1.assign(Kl(this.beta1,this.iterations_+1)),this.accBeta2.assign(Kl(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)}},e3=class extends cs{static get className(){return"Adamax"}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=[],De(()=>{this.iteration=Ge(0).variable(),this.accBeta1=Ge(t).variable()}),n==null&&(this.epsilon=L.backend.epsilon())}applyGradients(e){let t=Array.isArray(e)?e.map(a=>a.name):Object.keys(e);De(()=>{let a=xe(1,this.accBeta1),n=ve(-this.learningRate,we(te(this.iteration,this.decay),1));t.forEach((r,s)=>{let i=L.registeredVariables[r],o=!1;this.accumulatedFirstMoment[s]==null&&(this.accumulatedFirstMoment[s]={originalName:`${r}/m`,variable:Qa(i).variable(o)}),this.accumulatedWeightedInfNorm[s]==null&&(this.accumulatedWeightedInfNorm[s]={originalName:`${r}/v`,variable:Qa(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=we(te(u,this.beta1),te(l,1-this.beta1)),d=te(p,this.beta2),h=Za(l),m=Mg(d,h);u.assign(c),p.assign(m);let f=we(te(ve(n,a),ve(c,we(m,this.epsilon))),i);i.assign(f)}),this.iteration.assign(we(this.iteration,1)),this.accBeta1.assign(te(this.accBeta1,this.beta1))}),this.incrementIterations()}dispose(){this.accBeta1.dispose(),this.iteration.dispose(),this.accumulatedFirstMoment!=null&&J(this.accumulatedFirstMoment.map(e=>e.variable)),this.accumulatedWeightedInfNorm!=null&&J(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)}},Qh=class extends cs{static get className(){return"SGD"}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=L.registeredVariables[t];De(()=>{let s=we(te(this.c,n),r);r.assign(s)})}),this.incrementIterations()}setLearningRate(e){this.learningRate=e,this.c!=null&&this.c.dispose(),this.c=zn(Ge(-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)}},t3=class extends Qh{static get className(){return"Momentum"}constructor(e,t,a=!1){super(e),this.learningRate=e,this.momentum=t,this.useNesterov=a,this.accumulations=[],this.m=Ge(this.momentum)}applyGradients(e){(Array.isArray(e)?e.map(t=>t.name):Object.keys(e)).forEach((t,a)=>{let n=L.registeredVariables[t];this.accumulations[a]==null&&(this.accumulations[a]={originalName:`${t}/momentum`,variable:De(()=>Qa(n).variable(!1))});let r=this.accumulations[a].variable,s=Array.isArray(e)?e[a].tensor:e[t];s!=null&&De(()=>{let i,o=we(te(this.m,r),s);this.useNesterov?i=we(te(this.c,we(s,te(o,this.m))),n):i=we(te(this.c,o),n),r.assign(o),n.assign(i)})}),this.incrementIterations()}dispose(){this.m.dispose(),this.accumulations!=null&&J(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)}},a3=class extends cs{static get className(){return"RMSProp"}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=L.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=L.registeredVariables[t],r=!1;this.accumulatedMeanSquares[a]==null&&(this.accumulatedMeanSquares[a]={originalName:`${t}/rms`,variable:De(()=>Qa(n).variable(r))}),this.accumulatedMoments[a]==null&&(this.accumulatedMoments[a]={originalName:`${t}/momentum`,variable:De(()=>Qa(n).variable(r))}),this.accumulatedMeanGrads[a]==null&&this.centered&&(this.accumulatedMeanGrads[a]={originalName:`${t}/mg`,variable:De(()=>Qa(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;De(()=>{let l=we(te(i,this.decay),te(Tn(s),1-this.decay));if(this.centered){let u=this.accumulatedMeanGrads[a].variable,p=we(te(u,this.decay),te(s,1-this.decay)),c=ve(te(s,this.learningRate),er(xe(l,we(Tn(p),this.epsilon)))),d=we(te(o,this.momentum),c);i.assign(l),u.assign(p),o.assign(d);let h=xe(n,d);n.assign(h)}else{let u=we(te(i,this.decay),te(Tn(s),1-this.decay)),p=we(te(o,this.momentum),ve(te(s,this.learningRate),er(we(u,this.epsilon))));i.assign(u),o.assign(p);let c=xe(n,p);n.assign(c)}})}),this.incrementIterations()}dispose(){this.accumulatedMeanSquares!=null&&J(this.accumulatedMeanSquares.map(e=>e.variable)),this.accumulatedMeanGrads!=null&&this.centered&&J(this.accumulatedMeanGrads.map(e=>e.variable)),this.accumulatedMoments!=null&&J(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)}},X_=[Zg,Jg,Qg,e3,t3,a3,Qh];function K_(){for(let e of X_)I7(e)}var Kn={};Ze(Kn,{CompositeArrayBuffer:()=>Tr,browserFiles:()=>aF,browserHTTPRequest:()=>lF,concatenateArrayBuffers:()=>TN,copyModel:()=>KN,decodeWeights:()=>UA,decodeWeightsStream:()=>HA,encodeWeights:()=>vN,fromMemory:()=>dF,fromMemorySync:()=>R7,getLoadHandlers:()=>FN,getModelArtifactsForJSON:()=>dg,getModelArtifactsForJSONSync:()=>qA,getModelArtifactsInfoForJSON:()=>Op,getSaveHandlers:()=>_N,getWeightSpecs:()=>d1,http:()=>r3,isHTTPScheme:()=>x1,listModels:()=>qN,loadWeights:()=>rF,moveModel:()=>YN,registerLoadRouter:()=>PN,registerSaveRouter:()=>$N,removeModel:()=>XN,weightsLoaderFactory:()=>C7,withSaveHandler:()=>pF,withSaveHandlerSync:()=>cF});var Y_="model",Z_=".json",J_=".weights.bin";function a5(e){return new Promise(t=>setTimeout(t)).then(e)}var gh=class y1{constructor(t){if(!B().getBool("IS_BROWSER"))throw new Error("browserDownloads() cannot proceed because the current environment is not a browser.");t.startsWith(y1.URL_SCHEME)&&(t=t.slice(y1.URL_SCHEME.length)),(t==null||t.length===0)&&(t=Y_),this.modelJsonFileName=t+Z_,this.weightDataFileName=t+J_}async save(t){if(typeof document=="undefined")throw new Error("Browser downloads are not supported in this environment since `document` is not present");let a=Tr.join(t.weightData),n=window.URL.createObjectURL(new Blob([a],{type:"application/octet-stream"}));if(t.modelTopology instanceof ArrayBuffer)throw new Error("BrowserDownloads.save() does not support saving model topology in binary formats yet.");{let r=[{paths:["./"+this.weightDataFileName],weights:t.weightSpecs}],s=jA(t,r),i=window.URL.createObjectURL(new Blob([JSON.stringify(s)],{type:"application/json"})),o=this.modelJsonAnchor==null?document.createElement("a"):this.modelJsonAnchor;if(o.download=this.modelJsonFileName,o.href=i,await a5(()=>o.dispatchEvent(new MouseEvent("click"))),t.weightData!=null){let l=this.weightDataAnchor==null?document.createElement("a"):this.weightDataAnchor;l.download=this.weightDataFileName,l.href=n,await a5(()=>l.dispatchEvent(new MouseEvent("click")))}return{modelArtifactsInfo:Op(t)}}}};gh.URL_SCHEME="downloads://";var Q_=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=dg(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,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=>Qx(r.name)),n={};for(let r of e)r.paths.forEach(s=>{let i=Qx(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}},eF=e=>B().getBool("IS_BROWSER")&&!Array.isArray(e)&&e.startsWith(gh.URL_SCHEME)?tF(e.slice(gh.URL_SCHEME.length)):null;gn.registerSaveRouter(eF);function tF(e="model"){return new gh(e)}function aF(e){return new Q_(e)}function n5(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){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 S7(e,t){t==null&&(t={});let a=t.fetchFunc==null?B().platform.fetch:t.fetchFunc,n=e.map(s=>a(s,t.requestInit,{isBinary:!0})),r=(t.onProgress==null?await Promise.all(n):await n5(n,t.onProgress,0,.5)).map(s=>s.arrayBuffer());return t.onProgress==null?await Promise.all(r):await n5(r,t.onProgress,.5,1)}function nF(e,t){var a;let n=t.fetchFunc==null?B().platform.fetch:t.fetchFunc,r=0,s;return(a=t.onProgress)===null||a===void 0||a.call(t,0),new ReadableStream({pull:async i=>{for(var o;rS7(r,{requestInit:n}))(e,t,a)}function C7(e){return async(t,a="",n)=>{let r=t.map(()=>!1),s={},i=n!=null?n.map(()=>!1):[],o=[];if(t.forEach((h,m)=>{let f=0;h.weights.forEach(g=>{let y="quantization"in g?g.quantization.dtype:g.dtype,x=Ks[y]*mt(g.shape),A=()=>{r[m]=!0,s[m]==null&&(s[m]=[]),s[m].push({manifestEntry:g,groupOffset:f,sizeBytes:x})};n!=null?n.forEach((b,w)=>{b===g.name&&(A(),i[w]=!0)}):A(),o.push(g.name),f+=x})}),!i.every(h=>h)){let h=n.filter((m,f)=>!i[f]);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,m,f)=>(m&&h.push(f),h),[]),u=[];l.forEach(h=>{t[h].paths.forEach(m=>{let f=a+(a.endsWith("/")?"":"/")+m;u.push(f)})});let p=await e(u),c={},d=0;return l.forEach(h=>{let m=t[h].paths.length,f=new Tr(p.slice(d,d+m));s[h].forEach(g=>{let y=f.slice(g.groupOffset,g.groupOffset+g.sizeBytes),x=UA(y,[g.manifestEntry]);for(let A in x)c[A]=x[A]}),d+=m}),c}}var sF="application/octet-stream",iF="application/json",n3=class{constructor(e,t){if(this.DEFAULT_METHOD="POST",t==null&&(t={}),this.weightPathPrefix=t.weightPathPrefix,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=B().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||{},this.loadOptions=t}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=jA(e,a);if(t.body.append("model.json",new Blob([JSON.stringify(n)],{type:iF}),"model.json"),e.weightData!=null){let s=Tr.join(e.weightData);t.body.append("model.weights.bin",new Blob([s],{type:sF}),"model.weights.bin")}let r=await this.fetch(this.path,t);if(r.ok)return{modelArtifactsInfo:Op(e),responses:[r]};throw new Error(`BrowserHTTPRequest.save() failed due to HTTP response status ${r.status}.`)}async loadModelJSON(){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 t}async load(){if(this.loadOptions.streamWeights)return this.loadStream();let e=await this.loadModelJSON();return dg(e,t=>this.loadWeights(t))}async loadStream(){let e=await this.loadModelJSON(),t=await this.getWeightUrls(e.weightsManifest),a=d1(e.weightsManifest),n=()=>nF(t,this.loadOptions);return Object.assign(Object.assign({},e),{weightSpecs:a,getWeightStream:n})}async getWeightUrls(e){let t=Array.isArray(this.path)?this.path[1]:this.path,[a,n]=oF(t),r=this.weightPathPrefix||a,s=[],i=[];for(let o of e)for(let l of o.paths)this.weightUrlConverter!=null?i.push(this.weightUrlConverter(l)):s.push(r+l+n);return this.weightUrlConverter&&s.push(...await Promise.all(i)),s}async loadWeights(e){let t=await this.getWeightUrls(e),a=d1(e),n=await S7(t,this.loadOptions);return[a,n]}};n3.URL_SCHEME_REGEX=/^https?:\/\//;function oF(e){let t=e.lastIndexOf("/"),a=e.lastIndexOf("?"),n=e.substring(0,t),r=a>t?e.substring(a):"";return[n+"/",r]}function x1(e){return e.match(n3.URL_SCHEME_REGEX)!=null}var T7=(e,t)=>{if(typeof fetch=="undefined"&&(t==null||t.fetchFunc==null))return null;{let a=!0;if(Array.isArray(e)?a=e.every(n=>x1(n)):a=x1(e),a)return r3(e,t)}return null};gn.registerSaveRouter(T7);gn.registerLoadRouter(T7);function r3(e,t){return new n3(e,t)}function lF(e,t){return r3(e,t)}var K2=class{constructor(e){this.modelArtifacts=e}load(){return this.modelArtifacts}},N7=class{constructor(e){this.saveHandler=e}save(e){return this.saveHandler(e)}},uF=class{constructor(e){e.load&&(this.load=()=>Promise.resolve(e.load())),e.save&&(this.save=t=>Promise.resolve(e.save(t)))}};function dF(e,t,a,n){let r=arguments;return new uF(R7(...r))}function R7(e,t,a,n){return arguments.length===1?e.modelTopology!=null||e.weightSpecs!=null?new K2(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 K2({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 K2({modelTopology:e,weightSpecs:t,weightData:a,trainingConfig:n}))}function pF(e){return new N7(e)}function cF(e){return new N7(e)}var E7={};Ze(E7,{confusionMatrix:()=>mF});function hF(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=fh(Ue(n,"int32"),a),i=fh(Ue(r,"int32"),a),o=Qs(s),l=pt(o,i);return Ue(l,"int32")}var mF=z({confusionMatrix_:hF}),Er={};Ze(Er,{draw:()=>wF,fromPixels:()=>kF,fromPixelsAsync:()=>AF,toPixels:()=>vF});var Os,r5=!1;function M7(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(Bd(Ld,L.backendName)!=null){let d={pixels:e},h={numChannels:t};return L.runKernel(Ld,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(Os==null)if(typeof document=="undefined")if(typeof OffscreenCanvas!="undefined"&&typeof OffscreenCanvasRenderingContext2D!="undefined")Os=new OffscreenCanvas(1,1).getContext("2d");else throw new Error("Cannot parse input in current context. Reason: OffscreenCanvas Context2D rendering is not supported.");else Os=document.createElement("canvas").getContext("2d",{willReadFrequently:!0});Os.canvas.width=l,Os.canvas.height=u,Os.drawImage(e,0,0,l,u),p=Os.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||t===2)throw new Error(`toPixels only supports depth of size 1, 3 or 4 but got ${t}`);if(e.dtype!=="float32"&&e.dtype!=="int32")throw new Error(`Unsupported type for toPixels: ${e.dtype}. Please use float32 or int32 tensors.`)}function bF(e){let t=(e==null?void 0:e.alpha)||1;if(t>1||t<0)throw new Error(`Alpha value ${t} is suppoed to be in range [0 - 1].`)}async function vF(e,t){let a=R(e,"img","toPixels");if(!(e instanceof yt)){let u=a;a=Ue(u,"int32"),u.dispose()}$7(a);let[n,r]=a.shape.slice(0,2),s=a.rank===2?1:a.shape[2],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){r5||Bd(gp,L.backendName)!=null&&(console.warn("tf.browser.toPixels is not efficient to draw tensor on canvas. Please try tf.browser.draw instead."),r5=!0),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}function wF(e,t,a){let n=R(e,"img","draw");if(!(e instanceof yt)){let i=n;n=Ue(i,"int32"),i.dispose()}$7(n),bF(a==null?void 0:a.imageOptions);let r={image:n},s={canvas:t,options:a};L.runKernel(gp,r,s)}var kF=z({fromPixels_:M7}),s3={};Ze(s3,{prepareAndValidate:()=>P7});function P7(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(mt(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 Nt={};Ze(Nt,{assertParamsValid:()=>SF,computeFlatOffset:()=>EF,computeOutShape:()=>TF,getNormalizedAxes:()=>NF,isSliceContinous:()=>RF,maskToAxes:()=>CF,parseSliceParams:()=>MF,sliceInfo:()=>$F,startForAxis:()=>W7,startIndicesWithElidedDims:()=>O7,stopForAxis:()=>B7,stopIndicesWithElidedDims:()=>z7,stridesForAxis:()=>L7,stridesWithElidedDims:()=>_7});var A1=-2,IF=-1;function SF(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 CF(e){let t=[],a=0;for(;e>0;)e&1&&t.push(a),e/=2,a++;return t}function TF(e,t,a){let n=[];for(let r=0;r0){let h=t[0],m=a+1;p=O7(i,h,m,n,e),c=z7(o,h,m,r,e),d=_7(s,h,m,e)}else for(let h=0;h-1)s[o]=0;else{let l=F7(t,a,o),u=n[l];e&1<-1)s[o]=Number.MAX_SAFE_INTEGER;else{let l=F7(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=zd(0,i,l-1),i}function B7(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=zd(0,i,l):i=zd(-1,i,l-1),i}function RF(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 EF(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 $F(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)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 x=0;x0?0:-1,d.strides[x]>0?b:b-1];if(A&&d.strides[x]<=0)throw Error("only stride 1 allowed on non-range indexing.");f=f&&d.strides[x]===1;let T=!!(d.beginMask&1<=b)throw Error(`slice index ${d.begin[x]} of dimension ${x} out of bounds.`)}else d.begin[x]=s5(d.begin[x],0,d.strides[x],b,w,I),d.end[x]=s5(d.end[x],1,d.strides[x],b,w,I);let $=d.strides[x]===1&&d.begin[x]===0&&d.end[x]===b;h=h&&$,m=m&&(x===0&&d.strides[x]===1||$)}else h=h&&d.strides[x]===1&&T,m=m&&(x===0&&d.strides[x]===1||T);let N,M=!1;if(d.beginValid&&d.endValid?(N=d.end[x]-d.begin[x],M=!0):A?(N=1,M=!0):T&&b>=0&&(d.strides[x]<0?N=-b:N=b,M=!0),M){let $;N===0||N<0!=d.strides[x]<0?$=0:$=Math.trunc(N/d.strides[x])+(N%d.strides[x]!==0?1:0),g.push($)}else g.push(-1)}for(let x=0;x=0?y.push(g[A]):A===A1&&y.push(1)}return{finalShapeSparse:y.filter((x,A)=>d.finalShapeGatherIndices[A]!==A1),finalShape:y,isIdentity:h,sliceDim0:m,isSimpleSlice:f,begin:d.begin,end:d.end,strides:d.strides}}function PF(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 i3="4.17.0",V7=class{static sgd(e){return new Qh(e)}static momentum(e,t,a=!1){return new t3(e,t,a)}static rmsprop(e,t=.9,a=0,n=null,r=!1){return new a3(e,t,a,n,r)}static adam(e=.001,t=.9,a=.999,n=null){return new Qg(e,t,a,n)}static adadelta(e=.001,t=.95,a=null){return new Zg(e,t,a)}static adamax(e=.002,t=.9,a=.999,n=null,r=0){return new e3(e,t,a,n,r)}static adagrad(e,t=.1){return new Jg(e,t)}},_F=V7,FF=typeof requestAnimationFrame!="undefined"?requestAnimationFrame:typeof setImmediate!="undefined"?setImmediate:e=>e();function U7(){return new Promise(e=>FF(()=>e()))}var C={};Ze(C,{ERF_A1:()=>JF,ERF_A2:()=>QF,ERF_A3:()=>eD,ERF_A4:()=>tD,ERF_A5:()=>aD,ERF_P:()=>ZF,PARALLELIZE_THRESHOLD:()=>o3,RowPartitionType:()=>Xn,SELU_SCALE:()=>YF,SELU_SCALEALPHA:()=>KF,applyActivation:()=>Zh,assertAndGetBroadcastShape:()=>Ut,assertAxesAreInnerMostDims:()=>IE,assertParamsConsistent:()=>DF,assignToTypedArray:()=>lD,axesAreInnerMostDims:()=>Ag,calculateShapes:()=>X4,checkEinsumDimSizes:()=>mD,checkPadOnDimRoundingMode:()=>Nn,combineLocations:()=>Gb,combineRaggedTensorToTensorShapes:()=>zF,complexWithEvenIndex:()=>sD,complexWithOddIndex:()=>iD,computeConv2DInfo:()=>Lp,computeConv3DInfo:()=>cb,computeDefaultPad:()=>cg,computeDilation2DInfo:()=>bR,computeOptimalWindowSize:()=>VF,computeOutAndReduceShapes:()=>kE,computeOutShape:()=>OF,computePool2DInfo:()=>pb,computePool3DInfo:()=>vR,convertConv2DDataFormat:()=>hb,decodeEinsumEquation:()=>cD,eitherStridesOrDilationsAreOne:()=>Nr,expandShapeToKeepDim:()=>Vp,exponent:()=>dD,exponents:()=>uD,fromStringArrayToUint8:()=>FD,fromUint8ToStringArray:()=>_D,getAxesPermutation:()=>SE,getBroadcastDims:()=>Lb,getComplexWithIndex:()=>oD,getEinsumComputePath:()=>fD,getEinsumPermutation:()=>hD,getFusedBiasGradient:()=>Yh,getFusedDyActivation:()=>Kh,getImageCenter:()=>UF,getInnerMostAxes:()=>TE,getPermuted:()=>HF,getRaggedRank:()=>WF,getReductionAxes:()=>gg,getReshaped:()=>GF,getReshapedPermuted:()=>jF,getRowPartitionTypesHelper:()=>LF,getSliceBeginCoords:()=>qF,getSliceSize:()=>XF,getSparseFillEmptyRowsIndicesDenseShapeMismatch:()=>AD,getSparseFillEmptyRowsNegativeIndexErrorMessage:()=>bD,getSparseFillEmptyRowsOutOfRangeIndexErrorMessage:()=>vD,getSparseReshapeEmptyTensorZeroOutputDimErrorMessage:()=>ID,getSparseReshapeInputOutputMismatchErrorMessage:()=>CD,getSparseReshapeInputOutputMultipleErrorMessage:()=>SD,getSparseReshapeMultipleNegativeOneOutputDimErrorMessage:()=>wD,getSparseReshapeNegativeOutputDimErrorMessage:()=>kD,getSparseSegmentReductionIndicesOutOfRangeErrorMessage:()=>ED,getSparseSegmentReductionNegativeSegmentIdsErrorMessage:()=>TD,getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage:()=>ND,getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage:()=>RD,getUndoAxesPermutation:()=>CE,isIdentityPermutation:()=>gD,log:()=>$T,mergeRealAndImagArrays:()=>nD,prepareAndValidate:()=>P7,prepareSplitSize:()=>xD,segment_util:()=>G7,shouldFuse:()=>Jh,slice_util:()=>Nt,splitRealAndImagArrays:()=>rD,stridesOrDilationsArePositive:()=>Js,tupleValuesAreOne:()=>qd,upcastType:()=>pa,validateDefaultValueShape:()=>BF,validateInput:()=>qh,validateUpdateShape:()=>jg,warn:()=>Vr});function DF(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 OF(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 LF(e){let t={FIRST_DIM_SIZE:Xn.FIRST_DIM_SIZE,VALUE_ROWIDS:Xn.VALUE_ROWIDS,ROW_LENGTHS:Xn.ROW_LENGTHS,ROW_SPLITS:Xn.ROW_SPLITS,ROW_LIMITS:Xn.ROW_LIMITS,ROW_STARTS:Xn.ROW_STARTS},a=[];for(let n of e)if(n in t)a.push(t[n]);else break;return a}function WF(e){return e.length===0?0:e[0]===Xn.FIRST_DIM_SIZE?e.length-1:e.length}function BF(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 o3=30;function VF(e){return e<=o3?e:ph(e,Math.floor(Math.sqrt(e)))}function UF(e,t,a){let n=a*(typeof e=="number"?e:e[0]),r=t*(typeof e=="number"?e:e[1]);return[n,r]}function GF(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 jF(e,t,a,n=!0){let r=[];n?r.push(e[0]/a):r.push(e[0]*a);for(let s=1;s/g,i5=",",o5="...";function cD(e,t){e=e.replace(/\s/g,"");let a=(e.length-e.replace(pD,"").length)/Y2.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 ("${Y2}").`);let[n,r]=e.split(Y2);F(n.indexOf(o5)===-1,()=>`The ellipsis notation ("${o5}") is not supported yet.`);let s=n.split(i5),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;dm.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 mD(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 fD(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 yD(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 AD(e){return`Received SparseTensor with denseShape[0] = 0 but - indices.shape[0] = ${e}`}function bD(e,t){return`indices(${e}, 0) is invalid: ${t} < 0`}function vD(e,t,a){return`indices(${e}, 0) is invalid: ${t} >= ${a}`}function wD(e,t){return`only one output dimension may be -1, not both ${e} and ${t}`}function kD(e,t){return`size ${e} must be non-negative, not ${t}`}function ID(){return"reshape cannot infer the missing input size for an empty tensor unless all specified input sizes are non-zero"}function SD(e,t){let a=mt(e),n=mt(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 CD(e,t){let a=mt(e),n=mt(t);return`Input to reshape is a tensor with ${a} dense values, but the requested shape has ${n}. inputShape=${e} outputShape=${t}`}function TD(){return"segment ids must be >= 0"}function ND(){return"segment ids are not increasing"}function RD(e,t){return`Segment id ${e} out of range [0, ${t}), possibly because segmentIds input is not sorted.`}function ED(e,t,a){return`Bad: indices[${e}] == ${t} out of range [0, ${a})`}var G7={};Ze(G7,{collectGatherOpShapeInfo:()=>PD,computeOutShape:()=>$D,segOpComputeOptimalWindowSize:()=>MD});function MD(e,t){let a=!1,n;for(e<=o3?(n=e,a=!0):n=ph(e,Math.floor(Math.sqrt(e)));!a;)n>t||n===e?a=!0:n=ph(e,n+1);return n}function $D(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(ach(t))}catch(t){throw new Error(`Failed to decode encoded string bytes into utf-8, error: ${t}`)}}function FD(e){return e.map(t=>$p(t))}var Rn={};Ze(Rn,{nonMaxSuppressionV3Impl:()=>c7,nonMaxSuppressionV4Impl:()=>h7,nonMaxSuppressionV5Impl:()=>m7,whereImpl:()=>a7});K_();var DD=B();DD.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 Ka;(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"})(Ka||(Ka={}));var l5;(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={}))})(l5||(l5={}));var l3={};function OD(e,t){let a={tfOpName:e,category:"custom",inputs:[],attrs:[],customExecutor:t};l3[e]=a}function H7(e){return l3[e]}function zD(e){delete l3[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,u=o<0?t.inputNames.length+o:o;if(s.type==="tensor")return ua(t.inputNames[u],a,n,r);if(s.type==="tensors"){let d=t.inputs.slice(o,l);return t.inputNames.slice(o,l).filter((h,m)=>{var f;return((f=d[m])===null||f===void 0?void 0:f.op)!=="NoOp"}).map(h=>ua(h,a,n,r))}let p=ua(t.inputNames[u],a,n,r),c=p.dataSync();return s.type==="number"?c[0]:v.toNestedArray(p.shape,c)}let i=t.attrParams[e];return i&&i.value}function ua(e,t,a,n){let[r,s]=Ya(e,a);if(n!=null){let o=n.getHashTableHandleByName(r);if(o!=null)return o}let i=a.currentContextIds.find(o=>!!t[yh(r,o)]);return i!==void 0?t[yh(r,i)][s]:void 0}function u5(e,t,a){return t[yh(e,a.currentContextId)]}function Ar(e,t){let[a,n,r]=Ya(e,t);return[yh(a,t&&t.currentContextId),n,r]}function yh(e,t){return t?`${e}-${t}`:e}function Ya(e,t){if(e==="")return["",0,void 0];let a=t!=null&&t.parseNodeNameCache!=null;if(a){let s=t.parseNodeNameCache.get(e);if(s!=null)return s}let n=e.split(":"),r;if(n.length===1)r=[e,0,void 0];else{let s=n[0],i=n.length===3?n[1]:void 0,o=Number(n[n.length-1]);r=[s,o,i]}return a&&t.parseNodeNameCache.set(e,r),r}function ah(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 br(e){return e.kept?e:Ia(e)}var j7={};Ze(j7,{json:()=>LD});var LD=[{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}]}],q7={};Ze(q7,{json:()=>WD});var WD=[{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:"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}]},{tfOpName:"IsFinite",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"IsInf",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]}],X7={};Ze(X7,{json:()=>BD});var BD=[{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"}]}],K7={};Ze(K7,{json:()=>VD});var VD=[{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"}]}],Y7={};Ze(Y7,{json:()=>UD});var UD=[{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:"RandomUniformInt",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"minval",name:"minval",type:"number"},{tfName:"maxval",name:"maxval",type:"number"},{tfName:"seed",name:"seed",type:"number",defaultValue:0},{tfName:"seed2",name:"seed2",type:"number",defaultValue:0,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"}]}],Z7={};Ze(Z7,{json:()=>GD});var GD=[{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}]}],J7={};Ze(J7,{json:()=>HD});var HD=[{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"}]}],Q7={};Ze(Q7,{json:()=>jD});var jD=[{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"}]}],e6={};Ze(e6,{json:()=>qD});var qD=[{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"}]}],t6={};Ze(t6,{json:()=>XD});var XD=[{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"}]}],a6={};Ze(a6,{json:()=>KD});var KD=[{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}]},{tfOpName:"BitwiseAnd",category:"logical",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"y",type:"tensor"}]}],n6={};Ze(n6,{json:()=>YD});var YD=[{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"}]},{tfOpName:"MatrixBandPart",category:"matrices",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"numLower",type:"tensor"},{start:1,name:"numUpper",type:"tensor"}]}],r6={};Ze(r6,{json:()=>ZD});var ZD=[{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"}]}],s6={};Ze(s6,{json:()=>JD});var JD=[{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"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{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"}]}],i6={};Ze(i6,{json:()=>QD});var QD=[{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}]},{tfOpName:"TensorScatterUpdate",category:"slice_join",inputs:[{start:0,name:"tensor",type:"tensor"},{start:1,name:"indices",type:"tensor"},{start:2,name:"values",type:"tensor"}]}],o6={};Ze(o6,{json:()=>eO});var eO=[{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"}]}],l6={};Ze(l6,{json:()=>tO});var tO=[{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}]}],u6={};Ze(u6,{json:()=>aO});var aO=[{tfOpName:"StaticRegexReplace",category:"string",inputs:[{start:0,name:"input",type:"tensor"}],attrs:[{tfName:"pattern",name:"pattern",type:"string"},{tfName:"rewrite",name:"rewrite",type:"string"},{tfName:"replace_global",name:"replaceGlobal",type:"bool"}]},{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"}]}],d6={};Ze(d6,{json:()=>nO});var nO=[{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:"EnsureShape",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:[]}],d5=class{static get Instance(){return this._instance||(this._instance=new this)}constructor(){let e=[j7,q7,X7,K7,Y7,Z7,J7,Q7,e6,t6,a6,n6,r6,s6,i6,o6,l6,u6,d6],t=[].concat(...e.map(a=>a.json));this.opMappers=t.reduce((a,n)=>(a[n.tfOpName]=n,a),{})}transformGraph(e,t={}){let a=e.node,n=[],r=[],s=[],i=a.reduce((m,f)=>(m[f.name]=this.mapNode(f),f.op.startsWith("Placeholder")?n.push(m[f.name]):f.op==="Const"?r.push(m[f.name]):(f.input==null||f.input.length===0)&&s.push(m[f.name]),m),{}),o=[],l=[],u={},p={};t!=null&&(u=this.mapSignatureEntries(t.inputs),p=this.mapSignatureEntries(t.outputs));let c=Object.keys(i);c.forEach(m=>{let f=i[m];f.inputNames.forEach((g,y)=>{let[x,,A]=Ar(g),b=i[x];if(b.outputs!=null){let w=b.outputs.indexOf(A);if(w!==-1){let I=`${x}:${w}`;f.inputNames[y]=I}}f.inputs.push(b),b.children.push(f)})}),Object.keys(p).length===0?c.forEach(m=>{let f=i[m];f.children.length===0&&l.push(f)}):Object.keys(p).forEach(m=>{let[f]=Ar(m),g=i[f];g!=null&&(g.signatureKey=p[m],l.push(g))}),Object.keys(u).length>0?Object.keys(u).forEach(m=>{let[f]=Ar(m),g=i[f];g&&(g.signatureKey=u[m],o.push(g))}):o=n;let d={};e.library!=null&&e.library.function!=null&&(d=e.library.function.reduce((m,f)=>(m[f.signature.name]=this.mapFunction(f),m),{}));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=H7(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=b1(e.attr,r.tfName,r.defaultValue),i===void 0&&r.tfDeprecatedName&&(i=b1(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"string[]":i=T1(e.attr,r.tfName,r.defaultValue),i===void 0&&r.tfDeprecatedName&&(i=T1(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"number":i=w1(e.attr,r.tfName,r.defaultValue||0),i===void 0&&r.tfDeprecatedName&&(i=w1(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=v1(e.attr,r.tfName,r.defaultValue),i===void 0&&r.tfDeprecatedName&&(i=v1(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"bool[]":i=R1(e.attr,r.tfName,r.defaultValue),i===void 0&&r.tfDeprecatedName&&(i=R1(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"shape":i=S1(e.attr,r.tfName,r.defaultValue),i===void 0&&r.tfDeprecatedName&&(i=S1(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"shape[]":i=N1(e.attr,r.tfName,r.defaultValue),i===void 0&&r.tfDeprecatedName&&(i=N1(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"dtype":i=k1(e.attr,r.tfName,r.defaultValue),i===void 0&&r.tfDeprecatedName&&(i=k1(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"dtype[]":i=I1(e.attr,r.tfName,r.defaultValue),i===void 0&&r.tfDeprecatedName&&(i=I1(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"func":i=p5(e.attr,r.tfName,r.defaultValue),i===void 0&&r.tfDeprecatedName&&(i=p5(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]=Ar(u.name),c={name:p,op:"Placeholder",inputs:[],inputNames:[],category:"graph",inputParams:{},attrParams:{dtype:{value:u3(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,,m]=Ar(c),f=r[h];if(f.outputs!=null){let g=f.outputs.indexOf(m);if(g!==-1){let y=`${h}:${g}`;p.inputNames[d]=y}}p.inputs.push(f),f.children.push(p)})});let o=e.ret;e.signature.outputArg.forEach(u=>{let[p,c]=Ar(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 rO(e){let t=B().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 p6(e,t){let a=Array.isArray(e)?String.fromCharCode.apply(null,e):rO(e);return t?a:a.toLowerCase()}function b1(e,t,a,n=!1){let r=e[t];return r!=null?p6(r.s,n):a}function v1(e,t,a){let n=e[t];return n?n.b:a}function w1(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 u3(e){switch(typeof e=="string"&&(e=Ka[e]),e){case Ka.DT_FLOAT:case Ka.DT_HALF:return"float32";case Ka.DT_INT32:case Ka.DT_INT64:case Ka.DT_INT8:case Ka.DT_UINT8:return"int32";case Ka.DT_BOOL:return"bool";case Ka.DT_DOUBLE:return"float32";case Ka.DT_STRING:return"string";case Ka.DT_COMPLEX64:case Ka.DT_COMPLEX128:return"complex64";default:return null}}function p5(e,t,a){let n=e[t];return n&&n.func?n.func.name:a}function k1(e,t,a){let n=e[t];return n&&n.type?u3(n.type):a}function I1(e,t,a){let n=e[t];return n&&n.list&&n.list.type?n.list.type.map(r=>u3(r)):a}function c6(e){if(!e.unknownRank)return e.dim!=null?e.dim.map(t=>typeof t.size=="number"?t.size:parseInt(t.size,10)):[]}function S1(e,t,a){let n=e[t];return n&&n.shape?c6(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 T1(e,t,a,n=!1){let r=e[t];return r&&r.list&&r.list.s?r.list.s.map(s=>p6(s,n)):a}function N1(e,t,a){let n=e[t];return n&&n.list&&n.list.shape?n.list.shape.map(r=>c6(r)):a}function R1(e,t,a){let n=e[t];return n&&n.list&&n.list.b?n.list.b:a}var sO=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 ua(e,this.tensorMap,this.context)}getAttr(e,t){let a=this.node.rawAttrs[e];if(a.tensor!=null)return ua(e,this.tensorMap,this.context);if(a.i!=null||a.f!=null)return w1(this.node.rawAttrs,e,t);if(a.s!=null)return b1(this.node.rawAttrs,e,t);if(a.b!=null)return v1(this.node.rawAttrs,e,t);if(a.shape!=null)return S1(this.node.rawAttrs,e,t);if(a.type!=null)return k1(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 T1(this.node.rawAttrs,e,t);if(a.list.shape!=null)return N1(this.node.rawAttrs,e,t);if(a.list.b!=null)return R1(this.node.rawAttrs,e,t);if(a.list.type!=null)return I1(this.node.rawAttrs,e,t)}return t}},ea={};Ze(ea,{OP_SCOPE_SUFFIX:()=>sg,abs:()=>Za,acos:()=>tb,acosh:()=>ab,add:()=>we,addN:()=>Dh,all:()=>nb,any:()=>rb,argMax:()=>rr,argMin:()=>sb,asin:()=>ib,asinh:()=>ob,atan:()=>lb,atan2:()=>ub,atanh:()=>db,avgPool:()=>hg,avgPool3d:()=>mb,basicLSTMCell:()=>fb,batchNorm:()=>Wp,batchNorm2d:()=>gb,batchNorm3d:()=>yb,batchNorm4d:()=>xb,batchToSpaceND:()=>mg,bincount:()=>fg,bitwiseAnd:()=>Ab,booleanMaskAsync:()=>n7,broadcastArgs:()=>bb,broadcastTo:()=>Ul,buffer:()=>_e,cast:()=>Ue,ceil:()=>vb,clipByValue:()=>wb,clone:()=>Ia,complex:()=>Sr,concat:()=>lt,concat1d:()=>kb,concat2d:()=>Vu,concat3d:()=>Ib,concat4d:()=>Sb,conv1d:()=>Cb,conv2d:()=>Bp,conv2dTranspose:()=>Nb,conv3d:()=>Rb,conv3dTranspose:()=>Eb,cos:()=>Mb,cosh:()=>$b,cosineWindow:()=>Xh,cumprod:()=>Pb,cumsum:()=>_b,denseBincount:()=>Fb,depthToSpace:()=>Db,depthwiseConv2d:()=>Oh,diag:()=>Ob,dilation2d:()=>zb,div:()=>ve,divNoNan:()=>Wb,dot:()=>Bb,dropout:()=>l7,einsum:()=>Vs,elu:()=>xg,enclosingPowerOfTwo:()=>Xg,ensureShape:()=>Vb,equal:()=>yg,erf:()=>Ub,euclideanNorm:()=>jb,exp:()=>ns,expandDims:()=>Wt,expm1:()=>qb,eye:()=>bg,fft:()=>Gh,fill:()=>sr,floor:()=>vg,floorDiv:()=>zp,fused:()=>Kg,gather:()=>wg,gatherND:()=>o7,greater:()=>Gp,greaterEqual:()=>kg,ifft:()=>Zd,imag:()=>Hp,image:()=>fe,inTopKAsync:()=>u7,irfft:()=>Vg,isFinite:()=>Xb,isInf:()=>Kb,isNaN:()=>Yb,leakyRelu:()=>Ig,less:()=>mh,lessEqual:()=>zh,linalg:()=>y7,linspace:()=>Zb,localResponseNormalization:()=>Jb,log:()=>Yl,log1p:()=>Sg,logSigmoid:()=>e4,logSoftmax:()=>t4,logSumExp:()=>Tg,logicalAnd:()=>Xd,logicalNot:()=>Ng,logicalOr:()=>Rg,logicalXor:()=>a4,losses:()=>x7,lowerBound:()=>n4,matMul:()=>pt,max:()=>fa,maxPool:()=>Eg,maxPool3d:()=>r4,maxPoolWithArgmax:()=>s4,maximum:()=>Mg,mean:()=>Kd,meshgrid:()=>i4,min:()=>as,minimum:()=>Yd,mirrorPad:()=>o4,mod:()=>Uu,moments:()=>l4,movingAverage:()=>r7,mul:()=>te,multiRNNCell:()=>u4,multinomial:()=>d4,neg:()=>Ln,norm:()=>Up,notEqual:()=>$g,oneHot:()=>fh,ones:()=>Hr,onesLike:()=>p4,op:()=>z,outerProduct:()=>c4,pad:()=>ir,pad1d:()=>h4,pad2d:()=>m4,pad3d:()=>f4,pad4d:()=>g4,pool:()=>y4,pow:()=>Kl,prelu:()=>_g,print:()=>pg,prod:()=>x4,raggedGather:()=>A4,raggedRange:()=>b4,raggedTensorToTensor:()=>v4,rand:()=>w4,randomGamma:()=>C4,randomNormal:()=>Lg,randomStandardNormal:()=>T4,randomUniform:()=>Bh,randomUniformInt:()=>N4,range:()=>Zl,real:()=>Jl,reciprocal:()=>R4,relu:()=>jp,relu6:()=>Wg,reshape:()=>Q,reverse:()=>rs,reverse1d:()=>E4,reverse2d:()=>M4,reverse3d:()=>$4,reverse4d:()=>P4,rfft:()=>Hh,round:()=>Bg,rsqrt:()=>_4,scalar:()=>Ge,scatterND:()=>s7,searchSorted:()=>Wh,selu:()=>F4,separableConv2d:()=>D4,setdiff1dAsync:()=>O4,sigmoid:()=>za,sign:()=>z4,signal:()=>g7,sin:()=>L4,sinh:()=>W4,slice:()=>Fe,slice1d:()=>B4,slice2d:()=>V4,slice3d:()=>qp,slice4d:()=>Vh,softmax:()=>Uh,softplus:()=>Cg,spaceToBatchND:()=>Pg,sparse:()=>A7,sparseToDense:()=>i7,spectral:()=>f7,split:()=>Sa,sqrt:()=>er,square:()=>Tn,squaredDifference:()=>Ug,squeeze:()=>Oe,stack:()=>ca,step:()=>Gg,stridedSlice:()=>U4,string:()=>b7,sub:()=>xe,sum:()=>ot,tan:()=>G4,tanh:()=>hh,tensor:()=>Ve,tensor1d:()=>Bt,tensor2d:()=>Zn,tensor3d:()=>Hg,tensor4d:()=>H4,tensor5d:()=>j4,tensor6d:()=>q4,tensorScatterUpdate:()=>K4,tile:()=>Xr,topk:()=>Y4,transpose:()=>Qs,truncatedNormal:()=>Z4,unique:()=>J4,unsortedSegmentSum:()=>Q4,unstack:()=>Na,upperBound:()=>e7,variable:()=>t7,where:()=>kr,whereAsync:()=>qg,zeros:()=>yn,zerosLike:()=>Qa});var iO=(e,t,a,n=ea)=>{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`)}},oO=(e,t,a,n=ea)=>{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(ua(e.inputNames[0],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(ua(e.inputNames[0],t,a))];case"IsInf":return[n.isInf(ua(e.inputNames[0],t,a))];case"IsFinite":return[n.isFinite(ua(e.inputNames[0],t,a))];default:throw TypeError(`Node type ${e.op} is not implemented`)}};function Cn(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 c5(e){return!(typeof e=="number"||e.some(t=>t<0))}function kd(e,t,a){let n=E1(e,a),r=!c5(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=E1(s.shape,n)}),!c5(n))throw new Error(`Non-fully-defined elementShape: ${n}`);return n}function E1(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 lO=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=Ge(0),zn(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}, + ${s.shape}`);let i={data:n,indices:r,segmentIds:s};return L.runKernel(zu,i)}var z_=z({sparseSegmentSum_:O_});function L_(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=L.runKernel(Lu,c,p);return{nGrams:d[0],nGramsSplits:d[1]}}var W_=z({stringNGrams_:L_});function B_(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=L.runKernel(Tp,i,s);return{indices:o[0],values:o[1],shape:o[2]}}var V_=z({stringSplit_:B_});function U_(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 L.runKernel(Np,r,n)}var G_=z({stringToHashBucketFast_:U_});function H_(e,t,a,n=!0){let r=R(e,"input","staticRegexReplace","string"),s={pattern:t,rewrite:a,replaceGlobal:n};return L.runKernel(Cp,{x:r},s)}var j_=z({staticRegexReplace_:H_}),g7={fft:Gh,ifft:Zd,rfft:Hh,irfft:Vg},y7={hammingWindow:xP,hannWindow:p7,frame:c7,stft:wP},fe={flipLeftRight:CP,grayscaleToRGB:NP,resizeNearestNeighbor:e_,resizeBilinear:JP,rgbToGrayscale:EP,rotateWithOffset:$P,cropAndResize:IP,nonMaxSuppression:_P,nonMaxSuppressionAsync:VP,nonMaxSuppressionWithScore:GP,nonMaxSuppressionWithScoreAsync:jP,nonMaxSuppressionPadded:XP,nonMaxSuppressionPaddedAsync:YP,threshold:n_,transform:s_},x7={bandPart:o_,gramSchmidt:u_,qr:p_},A7={absoluteDifference:m_,computeWeightedLoss:Rr,cosineDistance:g_,hingeLoss:x_,huberLoss:b_,logLoss:w_,meanSquaredError:I_,sigmoidCrossEntropy:T_,softmaxCrossEntropy:E_},b7={sparseFillEmptyRows:$_,sparseReshape:__,sparseSegmentMean:D_,sparseSegmentSum:z_},v7={stringNGrams:W_,stringSplit:V_,stringToHashBucketFast:G_,staticRegexReplace:j_},w7={};Ze(w7,{Serializable:()=>k7,SerializationMap:()=>I7,getRegisteredName:()=>X_,registerClass:()=>S7});var q_=new Map,g1=new Map,k7=class{getClassName(){return this.constructor.className}static fromConfig(e,t){return new e(t)}},I7=class Ll{constructor(){this.classNameMap={}}static getMap(){return Ll.instance==null&&(Ll.instance=new Ll),Ll.instance}static register(t){Ll.getMap().classNameMap[t.className]=[t,t.fromConfig]}};function S7(e,t,a){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."),typeof t=="undefined"&&(t="Custom"),typeof a=="undefined"&&(a=e.className);let n=a,r=t+">"+n;return I7.register(e),q_.set(r,e),g1.set(e,r),e}function X_(e){return g1.has(e)?g1.get(e):e.className}var cs=class extends k7{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 J(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 e4(e,t)}dispose(){this.iterations_!=null&&J(this.iterations_)}async saveIterations(){return this.iterations_==null&&(this.iterations_=0),{name:"iter",tensor:Ge(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(cs,Symbol.hasInstance,{value:e=>e.minimize!=null&&e.computeGradients!=null&&e.applyGradients!=null});var Zg=class extends cs{static get className(){return"Adadelta"}constructor(e,t,a=null){super(),this.learningRate=e,this.rho=t,this.epsilon=a,this.accumulatedGrads=[],this.accumulatedUpdates=[],a==null&&(this.epsilon=L.backend.epsilon())}applyGradients(e){(Array.isArray(e)?e.map(t=>t.name):Object.keys(e)).forEach((t,a)=>{let n=L.registeredVariables[t],r=!1;this.accumulatedGrads[a]==null&&(this.accumulatedGrads[a]={originalName:`${t}/accum_grad`,variable:De(()=>Qa(n).variable(r))}),this.accumulatedUpdates[a]==null&&(this.accumulatedUpdates[a]={originalName:`${t}/accum_var`,variable:De(()=>Qa(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;De(()=>{let l=we(te(i,this.rho),te(Tn(s),1-this.rho)),u=te(ve(er(we(o,this.epsilon)),er(we(i,this.epsilon))),s),p=we(te(o,this.rho),te(Tn(u),1-this.rho));i.assign(l),o.assign(p);let c=we(te(u,-this.learningRate),n);n.assign(c)})}),this.incrementIterations()}dispose(){this.accumulatedUpdates!=null&&(J(this.accumulatedGrads.map(e=>e.variable)),J(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)}},Jg=class extends cs{static get className(){return"Adagrad"}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=L.registeredVariables[t];this.accumulatedGrads[a]==null&&(this.accumulatedGrads[a]={originalName:`${t}/accumulator`,variable:De(()=>sr(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;De(()=>{let i=we(s,Tn(r));s.assign(i);let o=we(te(ve(r,er(we(i,L.backend.epsilon()))),-this.learningRate),n);n.assign(o)})}),this.incrementIterations()}dispose(){this.accumulatedGrads!=null&&J(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)}},Qg=class extends cs{static get className(){return"Adam"}constructor(e,t,a,n=null){super(),this.learningRate=e,this.beta1=t,this.beta2=a,this.epsilon=n,this.accumulatedFirstMoment=[],this.accumulatedSecondMoment=[],De(()=>{this.accBeta1=Ge(t).variable(),this.accBeta2=Ge(a).variable()}),n==null&&(this.epsilon=L.backend.epsilon())}applyGradients(e){let t=Array.isArray(e)?e.map(a=>a.name):Object.keys(e);De(()=>{let a=xe(1,this.accBeta1),n=xe(1,this.accBeta2);t.forEach((r,s)=>{let i=L.registeredVariables[r],o=!1;this.accumulatedFirstMoment[s]==null&&(this.accumulatedFirstMoment[s]={originalName:`${r}/m`,variable:De(()=>Qa(i).variable(o))}),this.accumulatedSecondMoment[s]==null&&(this.accumulatedSecondMoment[s]={originalName:`${r}/v`,variable:De(()=>Qa(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=we(te(u,this.beta1),te(l,1-this.beta1)),d=we(te(p,this.beta2),te(Tn(l),1-this.beta2)),h=ve(c,a),m=ve(d,n);u.assign(c),p.assign(d);let f=we(te(ve(h,we(er(m),this.epsilon)),-this.learningRate),i);i.assign(f)}),this.accBeta1.assign(te(this.accBeta1,this.beta1)),this.accBeta2.assign(te(this.accBeta2,this.beta2))}),this.incrementIterations()}dispose(){this.accBeta1.dispose(),this.accBeta2.dispose(),this.accumulatedFirstMoment!=null&&J(this.accumulatedFirstMoment.map(e=>e.variable)),this.accumulatedSecondMoment!=null&&J(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),De(()=>{this.accBeta1.assign(Kl(this.beta1,this.iterations_+1)),this.accBeta2.assign(Kl(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)}},e3=class extends cs{static get className(){return"Adamax"}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=[],De(()=>{this.iteration=Ge(0).variable(),this.accBeta1=Ge(t).variable()}),n==null&&(this.epsilon=L.backend.epsilon())}applyGradients(e){let t=Array.isArray(e)?e.map(a=>a.name):Object.keys(e);De(()=>{let a=xe(1,this.accBeta1),n=ve(-this.learningRate,we(te(this.iteration,this.decay),1));t.forEach((r,s)=>{let i=L.registeredVariables[r],o=!1;this.accumulatedFirstMoment[s]==null&&(this.accumulatedFirstMoment[s]={originalName:`${r}/m`,variable:Qa(i).variable(o)}),this.accumulatedWeightedInfNorm[s]==null&&(this.accumulatedWeightedInfNorm[s]={originalName:`${r}/v`,variable:Qa(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=we(te(u,this.beta1),te(l,1-this.beta1)),d=te(p,this.beta2),h=Za(l),m=Mg(d,h);u.assign(c),p.assign(m);let f=we(te(ve(n,a),ve(c,we(m,this.epsilon))),i);i.assign(f)}),this.iteration.assign(we(this.iteration,1)),this.accBeta1.assign(te(this.accBeta1,this.beta1))}),this.incrementIterations()}dispose(){this.accBeta1.dispose(),this.iteration.dispose(),this.accumulatedFirstMoment!=null&&J(this.accumulatedFirstMoment.map(e=>e.variable)),this.accumulatedWeightedInfNorm!=null&&J(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)}},Qh=class extends cs{static get className(){return"SGD"}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=L.registeredVariables[t];De(()=>{let s=we(te(this.c,n),r);r.assign(s)})}),this.incrementIterations()}setLearningRate(e){this.learningRate=e,this.c!=null&&this.c.dispose(),this.c=zn(Ge(-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)}},t3=class extends Qh{static get className(){return"Momentum"}constructor(e,t,a=!1){super(e),this.learningRate=e,this.momentum=t,this.useNesterov=a,this.accumulations=[],this.m=Ge(this.momentum)}applyGradients(e){(Array.isArray(e)?e.map(t=>t.name):Object.keys(e)).forEach((t,a)=>{let n=L.registeredVariables[t];this.accumulations[a]==null&&(this.accumulations[a]={originalName:`${t}/momentum`,variable:De(()=>Qa(n).variable(!1))});let r=this.accumulations[a].variable,s=Array.isArray(e)?e[a].tensor:e[t];s!=null&&De(()=>{let i,o=we(te(this.m,r),s);this.useNesterov?i=we(te(this.c,we(s,te(o,this.m))),n):i=we(te(this.c,o),n),r.assign(o),n.assign(i)})}),this.incrementIterations()}dispose(){this.m.dispose(),this.accumulations!=null&&J(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)}},a3=class extends cs{static get className(){return"RMSProp"}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=L.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=L.registeredVariables[t],r=!1;this.accumulatedMeanSquares[a]==null&&(this.accumulatedMeanSquares[a]={originalName:`${t}/rms`,variable:De(()=>Qa(n).variable(r))}),this.accumulatedMoments[a]==null&&(this.accumulatedMoments[a]={originalName:`${t}/momentum`,variable:De(()=>Qa(n).variable(r))}),this.accumulatedMeanGrads[a]==null&&this.centered&&(this.accumulatedMeanGrads[a]={originalName:`${t}/mg`,variable:De(()=>Qa(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;De(()=>{let l=we(te(i,this.decay),te(Tn(s),1-this.decay));if(this.centered){let u=this.accumulatedMeanGrads[a].variable,p=we(te(u,this.decay),te(s,1-this.decay)),c=ve(te(s,this.learningRate),er(xe(l,we(Tn(p),this.epsilon)))),d=we(te(o,this.momentum),c);i.assign(l),u.assign(p),o.assign(d);let h=xe(n,d);n.assign(h)}else{let u=we(te(i,this.decay),te(Tn(s),1-this.decay)),p=we(te(o,this.momentum),ve(te(s,this.learningRate),er(we(u,this.epsilon))));i.assign(u),o.assign(p);let c=xe(n,p);n.assign(c)}})}),this.incrementIterations()}dispose(){this.accumulatedMeanSquares!=null&&J(this.accumulatedMeanSquares.map(e=>e.variable)),this.accumulatedMeanGrads!=null&&this.centered&&J(this.accumulatedMeanGrads.map(e=>e.variable)),this.accumulatedMoments!=null&&J(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)}},K_=[Zg,Jg,Qg,e3,t3,a3,Qh];function Y_(){for(let e of K_)S7(e)}var Kn={};Ze(Kn,{CompositeArrayBuffer:()=>Tr,browserFiles:()=>nF,browserHTTPRequest:()=>uF,concatenateArrayBuffers:()=>NN,copyModel:()=>YN,decodeWeights:()=>GA,decodeWeightsStream:()=>jA,encodeWeights:()=>wN,fromMemory:()=>pF,fromMemorySync:()=>E7,getLoadHandlers:()=>DN,getModelArtifactsForJSON:()=>dg,getModelArtifactsForJSONSync:()=>XA,getModelArtifactsInfoForJSON:()=>Op,getSaveHandlers:()=>FN,getWeightSpecs:()=>d1,http:()=>r3,isHTTPScheme:()=>x1,listModels:()=>XN,loadWeights:()=>sF,moveModel:()=>ZN,registerLoadRouter:()=>_N,registerSaveRouter:()=>PN,removeModel:()=>KN,weightsLoaderFactory:()=>T7,withSaveHandler:()=>cF,withSaveHandlerSync:()=>hF});var Z_="model",J_=".json",Q_=".weights.bin";function n5(e){return new Promise(t=>setTimeout(t)).then(e)}var gh=class y1{constructor(t){if(!B().getBool("IS_BROWSER"))throw new Error("browserDownloads() cannot proceed because the current environment is not a browser.");t.startsWith(y1.URL_SCHEME)&&(t=t.slice(y1.URL_SCHEME.length)),(t==null||t.length===0)&&(t=Z_),this.modelJsonFileName=t+J_,this.weightDataFileName=t+Q_}async save(t){if(typeof document=="undefined")throw new Error("Browser downloads are not supported in this environment since `document` is not present");let a=Tr.join(t.weightData),n=window.URL.createObjectURL(new Blob([a],{type:"application/octet-stream"}));if(t.modelTopology instanceof ArrayBuffer)throw new Error("BrowserDownloads.save() does not support saving model topology in binary formats yet.");{let r=[{paths:["./"+this.weightDataFileName],weights:t.weightSpecs}],s=qA(t,r),i=window.URL.createObjectURL(new Blob([JSON.stringify(s)],{type:"application/json"})),o=this.modelJsonAnchor==null?document.createElement("a"):this.modelJsonAnchor;if(o.download=this.modelJsonFileName,o.href=i,await n5(()=>o.dispatchEvent(new MouseEvent("click"))),t.weightData!=null){let l=this.weightDataAnchor==null?document.createElement("a"):this.weightDataAnchor;l.download=this.weightDataFileName,l.href=n,await n5(()=>l.dispatchEvent(new MouseEvent("click")))}return{modelArtifactsInfo:Op(t)}}}};gh.URL_SCHEME="downloads://";var eF=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=dg(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,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=>e5(r.name)),n={};for(let r of e)r.paths.forEach(s=>{let i=e5(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}},tF=e=>B().getBool("IS_BROWSER")&&!Array.isArray(e)&&e.startsWith(gh.URL_SCHEME)?aF(e.slice(gh.URL_SCHEME.length)):null;gn.registerSaveRouter(tF);function aF(e="model"){return new gh(e)}function nF(e){return new eF(e)}function r5(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){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 C7(e,t){t==null&&(t={});let a=t.fetchFunc==null?B().platform.fetch:t.fetchFunc,n=e.map(s=>a(s,t.requestInit,{isBinary:!0})),r=(t.onProgress==null?await Promise.all(n):await r5(n,t.onProgress,0,.5)).map(s=>s.arrayBuffer());return t.onProgress==null?await Promise.all(r):await r5(r,t.onProgress,.5,1)}function rF(e,t){var a;let n=t.fetchFunc==null?B().platform.fetch:t.fetchFunc,r=0,s;return(a=t.onProgress)===null||a===void 0||a.call(t,0),new ReadableStream({pull:async i=>{for(var o;rC7(r,{requestInit:n}))(e,t,a)}function T7(e){return async(t,a="",n)=>{let r=t.map(()=>!1),s={},i=n!=null?n.map(()=>!1):[],o=[];if(t.forEach((h,m)=>{let f=0;h.weights.forEach(g=>{let y="quantization"in g?g.quantization.dtype:g.dtype,x=Ks[y]*mt(g.shape),A=()=>{r[m]=!0,s[m]==null&&(s[m]=[]),s[m].push({manifestEntry:g,groupOffset:f,sizeBytes:x})};n!=null?n.forEach((b,w)=>{b===g.name&&(A(),i[w]=!0)}):A(),o.push(g.name),f+=x})}),!i.every(h=>h)){let h=n.filter((m,f)=>!i[f]);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,m,f)=>(m&&h.push(f),h),[]),u=[];l.forEach(h=>{t[h].paths.forEach(m=>{let f=a+(a.endsWith("/")?"":"/")+m;u.push(f)})});let p=await e(u),c={},d=0;return l.forEach(h=>{let m=t[h].paths.length,f=new Tr(p.slice(d,d+m));s[h].forEach(g=>{let y=f.slice(g.groupOffset,g.groupOffset+g.sizeBytes),x=GA(y,[g.manifestEntry]);for(let A in x)c[A]=x[A]}),d+=m}),c}}var iF="application/octet-stream",oF="application/json",n3=class{constructor(e,t){if(this.DEFAULT_METHOD="POST",t==null&&(t={}),this.weightPathPrefix=t.weightPathPrefix,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=B().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||{},this.loadOptions=t}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=qA(e,a);if(t.body.append("model.json",new Blob([JSON.stringify(n)],{type:oF}),"model.json"),e.weightData!=null){let s=Tr.join(e.weightData);t.body.append("model.weights.bin",new Blob([s],{type:iF}),"model.weights.bin")}let r=await this.fetch(this.path,t);if(r.ok)return{modelArtifactsInfo:Op(e),responses:[r]};throw new Error(`BrowserHTTPRequest.save() failed due to HTTP response status ${r.status}.`)}async loadModelJSON(){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 t}async load(){if(this.loadOptions.streamWeights)return this.loadStream();let e=await this.loadModelJSON();return dg(e,t=>this.loadWeights(t))}async loadStream(){let e=await this.loadModelJSON(),t=await this.getWeightUrls(e.weightsManifest),a=d1(e.weightsManifest),n=()=>rF(t,this.loadOptions);return Object.assign(Object.assign({},e),{weightSpecs:a,getWeightStream:n})}async getWeightUrls(e){let t=Array.isArray(this.path)?this.path[1]:this.path,[a,n]=lF(t),r=this.weightPathPrefix||a,s=[],i=[];for(let o of e)for(let l of o.paths)this.weightUrlConverter!=null?i.push(this.weightUrlConverter(l)):s.push(r+l+n);return this.weightUrlConverter&&s.push(...await Promise.all(i)),s}async loadWeights(e){let t=await this.getWeightUrls(e),a=d1(e),n=await C7(t,this.loadOptions);return[a,n]}};n3.URL_SCHEME_REGEX=/^https?:\/\//;function lF(e){let t=e.lastIndexOf("/"),a=e.lastIndexOf("?"),n=e.substring(0,t),r=a>t?e.substring(a):"";return[n+"/",r]}function x1(e){return e.match(n3.URL_SCHEME_REGEX)!=null}var N7=(e,t)=>{if(typeof fetch=="undefined"&&(t==null||t.fetchFunc==null))return null;{let a=!0;if(Array.isArray(e)?a=e.every(n=>x1(n)):a=x1(e),a)return r3(e,t)}return null};gn.registerSaveRouter(N7);gn.registerLoadRouter(N7);function r3(e,t){return new n3(e,t)}function uF(e,t){return r3(e,t)}var K2=class{constructor(e){this.modelArtifacts=e}load(){return this.modelArtifacts}},R7=class{constructor(e){this.saveHandler=e}save(e){return this.saveHandler(e)}},dF=class{constructor(e){e.load&&(this.load=()=>Promise.resolve(e.load())),e.save&&(this.save=t=>Promise.resolve(e.save(t)))}};function pF(e,t,a,n){let r=arguments;return new dF(E7(...r))}function E7(e,t,a,n){return arguments.length===1?e.modelTopology!=null||e.weightSpecs!=null?new K2(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 K2({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 K2({modelTopology:e,weightSpecs:t,weightData:a,trainingConfig:n}))}function cF(e){return new R7(e)}function hF(e){return new R7(e)}var M7={};Ze(M7,{confusionMatrix:()=>fF});function mF(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=fh(Ue(n,"int32"),a),i=fh(Ue(r,"int32"),a),o=Qs(s),l=pt(o,i);return Ue(l,"int32")}var fF=z({confusionMatrix_:mF}),Er={};Ze(Er,{draw:()=>kF,fromPixels:()=>IF,fromPixelsAsync:()=>bF,toPixels:()=>wF});var Os,s5=!1;function $7(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(Bd(Ld,L.backendName)!=null){let d={pixels:e},h={numChannels:t};return L.runKernel(Ld,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(Os==null)if(typeof document=="undefined")if(typeof OffscreenCanvas!="undefined"&&typeof OffscreenCanvasRenderingContext2D!="undefined")Os=new OffscreenCanvas(1,1).getContext("2d");else throw new Error("Cannot parse input in current context. Reason: OffscreenCanvas Context2D rendering is not supported.");else Os=document.createElement("canvas").getContext("2d",{willReadFrequently:!0});Os.canvas.width=l,Os.canvas.height=u,Os.drawImage(e,0,0,l,u),p=Os.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||t===2)throw new Error(`toPixels only supports depth of size 1, 3 or 4 but got ${t}`);if(e.dtype!=="float32"&&e.dtype!=="int32")throw new Error(`Unsupported type for toPixels: ${e.dtype}. Please use float32 or int32 tensors.`)}function vF(e){let t=(e==null?void 0:e.alpha)||1;if(t>1||t<0)throw new Error(`Alpha value ${t} is suppoed to be in range [0 - 1].`)}async function wF(e,t){let a=R(e,"img","toPixels");if(!(e instanceof yt)){let u=a;a=Ue(u,"int32"),u.dispose()}P7(a);let[n,r]=a.shape.slice(0,2),s=a.rank===2?1:a.shape[2],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){s5||Bd(gp,L.backendName)!=null&&(console.warn("tf.browser.toPixels is not efficient to draw tensor on canvas. Please try tf.browser.draw instead."),s5=!0),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}function kF(e,t,a){let n=R(e,"img","draw");if(!(e instanceof yt)){let i=n;n=Ue(i,"int32"),i.dispose()}P7(n),vF(a==null?void 0:a.imageOptions);let r={image:n},s={canvas:t,options:a};L.runKernel(gp,r,s)}var IF=z({fromPixels_:$7}),s3={};Ze(s3,{prepareAndValidate:()=>_7});function _7(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(mt(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 Nt={};Ze(Nt,{assertParamsValid:()=>CF,computeFlatOffset:()=>MF,computeOutShape:()=>NF,getNormalizedAxes:()=>RF,isSliceContinous:()=>EF,maskToAxes:()=>TF,parseSliceParams:()=>$F,sliceInfo:()=>PF,startForAxis:()=>B7,startIndicesWithElidedDims:()=>z7,stopForAxis:()=>V7,stopIndicesWithElidedDims:()=>L7,stridesForAxis:()=>W7,stridesWithElidedDims:()=>F7});var A1=-2,SF=-1;function CF(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 TF(e){let t=[],a=0;for(;e>0;)e&1&&t.push(a),e/=2,a++;return t}function NF(e,t,a){let n=[];for(let r=0;r0){let h=t[0],m=a+1;p=z7(i,h,m,n,e),c=L7(o,h,m,r,e),d=F7(s,h,m,e)}else for(let h=0;h-1)s[o]=0;else{let l=D7(t,a,o),u=n[l];e&1<-1)s[o]=Number.MAX_SAFE_INTEGER;else{let l=D7(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=zd(0,i,l-1),i}function V7(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=zd(0,i,l):i=zd(-1,i,l-1),i}function EF(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 MF(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 PF(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)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 x=0;x0?0:-1,d.strides[x]>0?b:b-1];if(A&&d.strides[x]<=0)throw Error("only stride 1 allowed on non-range indexing.");f=f&&d.strides[x]===1;let T=!!(d.beginMask&1<=b)throw Error(`slice index ${d.begin[x]} of dimension ${x} out of bounds.`)}else d.begin[x]=i5(d.begin[x],0,d.strides[x],b,w,I),d.end[x]=i5(d.end[x],1,d.strides[x],b,w,I);let $=d.strides[x]===1&&d.begin[x]===0&&d.end[x]===b;h=h&&$,m=m&&(x===0&&d.strides[x]===1||$)}else h=h&&d.strides[x]===1&&T,m=m&&(x===0&&d.strides[x]===1||T);let N,M=!1;if(d.beginValid&&d.endValid?(N=d.end[x]-d.begin[x],M=!0):A?(N=1,M=!0):T&&b>=0&&(d.strides[x]<0?N=-b:N=b,M=!0),M){let $;N===0||N<0!=d.strides[x]<0?$=0:$=Math.trunc(N/d.strides[x])+(N%d.strides[x]!==0?1:0),g.push($)}else g.push(-1)}for(let x=0;x=0?y.push(g[A]):A===A1&&y.push(1)}return{finalShapeSparse:y.filter((x,A)=>d.finalShapeGatherIndices[A]!==A1),finalShape:y,isIdentity:h,sliceDim0:m,isSimpleSlice:f,begin:d.begin,end:d.end,strides:d.strides}}function _F(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 i3="4.21.0",U7=class{static sgd(e){return new Qh(e)}static momentum(e,t,a=!1){return new t3(e,t,a)}static rmsprop(e,t=.9,a=0,n=null,r=!1){return new a3(e,t,a,n,r)}static adam(e=.001,t=.9,a=.999,n=null){return new Qg(e,t,a,n)}static adadelta(e=.001,t=.95,a=null){return new Zg(e,t,a)}static adamax(e=.002,t=.9,a=.999,n=null,r=0){return new e3(e,t,a,n,r)}static adagrad(e,t=.1){return new Jg(e,t)}},FF=U7,DF=typeof requestAnimationFrame!="undefined"?requestAnimationFrame:typeof setImmediate!="undefined"?setImmediate:e=>e();function G7(){return new Promise(e=>DF(()=>e()))}var C={};Ze(C,{ERF_A1:()=>QF,ERF_A2:()=>eD,ERF_A3:()=>tD,ERF_A4:()=>aD,ERF_A5:()=>nD,ERF_P:()=>JF,PARALLELIZE_THRESHOLD:()=>o3,RowPartitionType:()=>Xn,SELU_SCALE:()=>ZF,SELU_SCALEALPHA:()=>YF,applyActivation:()=>Zh,assertAndGetBroadcastShape:()=>Ut,assertAxesAreInnerMostDims:()=>SE,assertParamsConsistent:()=>OF,assignToTypedArray:()=>uD,axesAreInnerMostDims:()=>Ag,calculateShapes:()=>K4,checkEinsumDimSizes:()=>fD,checkPadOnDimRoundingMode:()=>Nn,combineLocations:()=>Hb,combineRaggedTensorToTensorShapes:()=>LF,complexWithEvenIndex:()=>iD,complexWithOddIndex:()=>oD,computeConv2DInfo:()=>Lp,computeConv3DInfo:()=>hb,computeDefaultPad:()=>cg,computeDilation2DInfo:()=>vR,computeOptimalWindowSize:()=>UF,computeOutAndReduceShapes:()=>IE,computeOutShape:()=>zF,computePool2DInfo:()=>cb,computePool3DInfo:()=>wR,convertConv2DDataFormat:()=>mb,decodeEinsumEquation:()=>hD,eitherStridesOrDilationsAreOne:()=>Nr,expandShapeToKeepDim:()=>Vp,exponent:()=>pD,exponents:()=>dD,fromStringArrayToUint8:()=>DD,fromUint8ToStringArray:()=>FD,getAxesPermutation:()=>CE,getBroadcastDims:()=>Wb,getComplexWithIndex:()=>lD,getEinsumComputePath:()=>gD,getEinsumPermutation:()=>mD,getFusedBiasGradient:()=>Yh,getFusedDyActivation:()=>Kh,getImageCenter:()=>GF,getInnerMostAxes:()=>NE,getPermuted:()=>jF,getRaggedRank:()=>BF,getReductionAxes:()=>gg,getReshaped:()=>HF,getReshapedPermuted:()=>qF,getRowPartitionTypesHelper:()=>WF,getSliceBeginCoords:()=>XF,getSliceSize:()=>KF,getSparseFillEmptyRowsIndicesDenseShapeMismatch:()=>bD,getSparseFillEmptyRowsNegativeIndexErrorMessage:()=>vD,getSparseFillEmptyRowsOutOfRangeIndexErrorMessage:()=>wD,getSparseReshapeEmptyTensorZeroOutputDimErrorMessage:()=>SD,getSparseReshapeInputOutputMismatchErrorMessage:()=>TD,getSparseReshapeInputOutputMultipleErrorMessage:()=>CD,getSparseReshapeMultipleNegativeOneOutputDimErrorMessage:()=>kD,getSparseReshapeNegativeOutputDimErrorMessage:()=>ID,getSparseSegmentReductionIndicesOutOfRangeErrorMessage:()=>MD,getSparseSegmentReductionNegativeSegmentIdsErrorMessage:()=>ND,getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage:()=>RD,getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage:()=>ED,getUndoAxesPermutation:()=>TE,isIdentityPermutation:()=>yD,log:()=>PT,mergeRealAndImagArrays:()=>rD,prepareAndValidate:()=>_7,prepareSplitSize:()=>AD,segment_util:()=>H7,shouldFuse:()=>Jh,slice_util:()=>Nt,splitRealAndImagArrays:()=>sD,stridesOrDilationsArePositive:()=>Js,tupleValuesAreOne:()=>qd,upcastType:()=>pa,validateDefaultValueShape:()=>VF,validateInput:()=>qh,validateUpdateShape:()=>jg,warn:()=>Vr});function OF(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 zF(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 WF(e){let t={FIRST_DIM_SIZE:Xn.FIRST_DIM_SIZE,VALUE_ROWIDS:Xn.VALUE_ROWIDS,ROW_LENGTHS:Xn.ROW_LENGTHS,ROW_SPLITS:Xn.ROW_SPLITS,ROW_LIMITS:Xn.ROW_LIMITS,ROW_STARTS:Xn.ROW_STARTS},a=[];for(let n of e)if(n in t)a.push(t[n]);else break;return a}function BF(e){return e.length===0?0:e[0]===Xn.FIRST_DIM_SIZE?e.length-1:e.length}function VF(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 o3=30;function UF(e){return e<=o3?e:ph(e,Math.floor(Math.sqrt(e)))}function GF(e,t,a){let n=a*(typeof e=="number"?e:e[0]),r=t*(typeof e=="number"?e:e[1]);return[n,r]}function HF(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 qF(e,t,a,n=!0){let r=[];n?r.push(e[0]/a):r.push(e[0]*a);for(let s=1;s/g,o5=",",l5="...";function hD(e,t){e=e.replace(/\s/g,"");let a=(e.length-e.replace(cD,"").length)/Y2.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 ("${Y2}").`);let[n,r]=e.split(Y2);F(n.indexOf(l5)===-1,()=>`The ellipsis notation ("${l5}") is not supported yet.`);let s=n.split(o5),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;dm.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 fD(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 gD(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 xD(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 bD(e){return`Received SparseTensor with denseShape[0] = 0 but + indices.shape[0] = ${e}`}function vD(e,t){return`indices(${e}, 0) is invalid: ${t} < 0`}function wD(e,t,a){return`indices(${e}, 0) is invalid: ${t} >= ${a}`}function kD(e,t){return`only one output dimension may be -1, not both ${e} and ${t}`}function ID(e,t){return`size ${e} must be non-negative, not ${t}`}function SD(){return"reshape cannot infer the missing input size for an empty tensor unless all specified input sizes are non-zero"}function CD(e,t){let a=mt(e),n=mt(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 TD(e,t){let a=mt(e),n=mt(t);return`Input to reshape is a tensor with ${a} dense values, but the requested shape has ${n}. inputShape=${e} outputShape=${t}`}function ND(){return"segment ids must be >= 0"}function RD(){return"segment ids are not increasing"}function ED(e,t){return`Segment id ${e} out of range [0, ${t}), possibly because segmentIds input is not sorted.`}function MD(e,t,a){return`Bad: indices[${e}] == ${t} out of range [0, ${a})`}var H7={};Ze(H7,{collectGatherOpShapeInfo:()=>_D,computeOutShape:()=>PD,segOpComputeOptimalWindowSize:()=>$D});function $D(e,t){let a=!1,n;for(e<=o3?(n=e,a=!0):n=ph(e,Math.floor(Math.sqrt(e)));!a;)n>t||n===e?a=!0:n=ph(e,n+1);return n}function PD(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(ach(t))}catch(t){throw new Error(`Failed to decode encoded string bytes into utf-8, error: ${t}`)}}function DD(e){return e.map(t=>$p(t))}var Rn={};Ze(Rn,{nonMaxSuppressionV3Impl:()=>h7,nonMaxSuppressionV4Impl:()=>m7,nonMaxSuppressionV5Impl:()=>f7,whereImpl:()=>n7});Y_();var OD=B();OD.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 Ka;(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"})(Ka||(Ka={}));var u5;(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={}))})(u5||(u5={}));var l3={};function zD(e,t){let a={tfOpName:e,category:"custom",inputs:[],attrs:[],customExecutor:t};l3[e]=a}function j7(e){return l3[e]}function LD(e){delete l3[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,u=o<0?t.inputNames.length+o:o;if(s.type==="tensor")return ua(t.inputNames[u],a,n,r);if(s.type==="tensors"){let d=t.inputs.slice(o,l);return t.inputNames.slice(o,l).filter((h,m)=>{var f;return((f=d[m])===null||f===void 0?void 0:f.op)!=="NoOp"}).map(h=>ua(h,a,n,r))}let p=ua(t.inputNames[u],a,n,r),c=p.dataSync();return s.type==="number"?c[0]:v.toNestedArray(p.shape,c)}let i=t.attrParams[e];return i&&i.value}function ua(e,t,a,n){let[r,s]=Ya(e,a);if(n!=null){let o=n.getHashTableHandleByName(r);if(o!=null)return o}let i=a.currentContextIds.find(o=>!!t[yh(r,o)]);return i!==void 0?t[yh(r,i)][s]:void 0}function d5(e,t,a){return t[yh(e,a.currentContextId)]}function Ar(e,t){let[a,n,r]=Ya(e,t);return[yh(a,t&&t.currentContextId),n,r]}function yh(e,t){return t?`${e}-${t}`:e}function Ya(e,t){if(e==="")return["",0,void 0];let a=t!=null&&t.parseNodeNameCache!=null;if(a){let s=t.parseNodeNameCache.get(e);if(s!=null)return s}let n=e.split(":"),r;if(n.length===1)r=[e,0,void 0];else{let s=n[0],i=n.length===3?n[1]:void 0,o=Number(n[n.length-1]);r=[s,o,i]}return a&&t.parseNodeNameCache.set(e,r),r}function ah(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 br(e){return e.kept?e:Ia(e)}var q7={};Ze(q7,{json:()=>WD});var WD=[{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}]}],X7={};Ze(X7,{json:()=>BD});var BD=[{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:"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}]},{tfOpName:"IsFinite",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"IsInf",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]}],K7={};Ze(K7,{json:()=>VD});var VD=[{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"}]}],Y7={};Ze(Y7,{json:()=>UD});var UD=[{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"}]}],Z7={};Ze(Z7,{json:()=>GD});var GD=[{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:"RandomUniformInt",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"minval",name:"minval",type:"number"},{tfName:"maxval",name:"maxval",type:"number"},{tfName:"seed",name:"seed",type:"number",defaultValue:0},{tfName:"seed2",name:"seed2",type:"number",defaultValue:0,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"}]}],J7={};Ze(J7,{json:()=>HD});var HD=[{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}]}],Q7={};Ze(Q7,{json:()=>jD});var jD=[{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"}]}],e6={};Ze(e6,{json:()=>qD});var qD=[{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"}]}],t6={};Ze(t6,{json:()=>XD});var XD=[{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"}]}],a6={};Ze(a6,{json:()=>KD});var KD=[{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"}]}],n6={};Ze(n6,{json:()=>YD});var YD=[{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}]},{tfOpName:"BitwiseAnd",category:"logical",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"y",type:"tensor"}]}],r6={};Ze(r6,{json:()=>ZD});var ZD=[{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"}]},{tfOpName:"MatrixBandPart",category:"matrices",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"numLower",type:"tensor"},{start:1,name:"numUpper",type:"tensor"}]}],s6={};Ze(s6,{json:()=>JD});var JD=[{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"}]}],i6={};Ze(i6,{json:()=>QD});var QD=[{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"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{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"}]}],o6={};Ze(o6,{json:()=>eO});var eO=[{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}]},{tfOpName:"TensorScatterUpdate",category:"slice_join",inputs:[{start:0,name:"tensor",type:"tensor"},{start:1,name:"indices",type:"tensor"},{start:2,name:"values",type:"tensor"}]}],l6={};Ze(l6,{json:()=>tO});var tO=[{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"}]}],u6={};Ze(u6,{json:()=>aO});var aO=[{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}]}],d6={};Ze(d6,{json:()=>nO});var nO=[{tfOpName:"StaticRegexReplace",category:"string",inputs:[{start:0,name:"input",type:"tensor"}],attrs:[{tfName:"pattern",name:"pattern",type:"string"},{tfName:"rewrite",name:"rewrite",type:"string"},{tfName:"replace_global",name:"replaceGlobal",type:"bool"}]},{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"}]}],p6={};Ze(p6,{json:()=>rO});var rO=[{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:"EnsureShape",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:[]}],p5=class{static get Instance(){return this._instance||(this._instance=new this)}constructor(){let e=[q7,X7,K7,Y7,Z7,J7,Q7,e6,t6,a6,n6,r6,s6,i6,o6,l6,u6,d6,p6],t=[].concat(...e.map(a=>a.json));this.opMappers=t.reduce((a,n)=>(a[n.tfOpName]=n,a),{})}transformGraph(e,t={}){let a=e.node,n=[],r=[],s=[],i=a.reduce((m,f)=>(m[f.name]=this.mapNode(f),f.op.startsWith("Placeholder")?n.push(m[f.name]):f.op==="Const"?r.push(m[f.name]):(f.input==null||f.input.length===0)&&s.push(m[f.name]),m),{}),o=[],l=[],u={},p={};t!=null&&(u=this.mapSignatureEntries(t.inputs),p=this.mapSignatureEntries(t.outputs));let c=Object.keys(i);c.forEach(m=>{let f=i[m];f.inputNames.forEach((g,y)=>{let[x,,A]=Ar(g),b=i[x];if(b.outputs!=null){let w=b.outputs.indexOf(A);if(w!==-1){let I=`${x}:${w}`;f.inputNames[y]=I}}f.inputs.push(b),b.children.push(f)})}),Object.keys(p).length===0?c.forEach(m=>{let f=i[m];f.children.length===0&&l.push(f)}):Object.keys(p).forEach(m=>{let[f]=Ar(m),g=i[f];g!=null&&(g.signatureKey=p[m],l.push(g))}),Object.keys(u).length>0?Object.keys(u).forEach(m=>{let[f]=Ar(m),g=i[f];g&&(g.signatureKey=u[m],o.push(g))}):o=n;let d={};e.library!=null&&e.library.function!=null&&(d=e.library.function.reduce((m,f)=>(m[f.signature.name]=this.mapFunction(f),m),{}));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=j7(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=b1(e.attr,r.tfName,r.defaultValue),i===void 0&&r.tfDeprecatedName&&(i=b1(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"string[]":i=T1(e.attr,r.tfName,r.defaultValue),i===void 0&&r.tfDeprecatedName&&(i=T1(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"number":i=w1(e.attr,r.tfName,r.defaultValue||0),i===void 0&&r.tfDeprecatedName&&(i=w1(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=v1(e.attr,r.tfName,r.defaultValue),i===void 0&&r.tfDeprecatedName&&(i=v1(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"bool[]":i=R1(e.attr,r.tfName,r.defaultValue),i===void 0&&r.tfDeprecatedName&&(i=R1(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"shape":i=S1(e.attr,r.tfName,r.defaultValue),i===void 0&&r.tfDeprecatedName&&(i=S1(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"shape[]":i=N1(e.attr,r.tfName,r.defaultValue),i===void 0&&r.tfDeprecatedName&&(i=N1(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"dtype":i=k1(e.attr,r.tfName,r.defaultValue),i===void 0&&r.tfDeprecatedName&&(i=k1(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"dtype[]":i=I1(e.attr,r.tfName,r.defaultValue),i===void 0&&r.tfDeprecatedName&&(i=I1(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"func":i=c5(e.attr,r.tfName,r.defaultValue),i===void 0&&r.tfDeprecatedName&&(i=c5(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]=Ar(u.name),c={name:p,op:"Placeholder",inputs:[],inputNames:[],category:"graph",inputParams:{},attrParams:{dtype:{value:u3(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,,m]=Ar(c),f=r[h];if(f.outputs!=null){let g=f.outputs.indexOf(m);if(g!==-1){let y=`${h}:${g}`;p.inputNames[d]=y}}p.inputs.push(f),f.children.push(p)})});let o=e.ret;e.signature.outputArg.forEach(u=>{let[p,c]=Ar(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 sO(e){let t=B().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 c6(e,t){let a=Array.isArray(e)?String.fromCharCode.apply(null,e):sO(e);return t?a:a.toLowerCase()}function b1(e,t,a,n=!1){let r=e[t];return r!=null?c6(r.s,n):a}function v1(e,t,a){let n=e[t];return n?n.b:a}function w1(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 u3(e){switch(typeof e=="string"&&(e=Ka[e]),e){case Ka.DT_FLOAT:case Ka.DT_HALF:return"float32";case Ka.DT_INT32:case Ka.DT_INT64:case Ka.DT_INT8:case Ka.DT_UINT8:return"int32";case Ka.DT_BOOL:return"bool";case Ka.DT_DOUBLE:return"float32";case Ka.DT_STRING:return"string";case Ka.DT_COMPLEX64:case Ka.DT_COMPLEX128:return"complex64";default:return null}}function c5(e,t,a){let n=e[t];return n&&n.func?n.func.name:a}function k1(e,t,a){let n=e[t];return n&&n.type?u3(n.type):a}function I1(e,t,a){let n=e[t];return n&&n.list&&n.list.type?n.list.type.map(r=>u3(r)):a}function h6(e){if(!e.unknownRank)return e.dim!=null?e.dim.map(t=>typeof t.size=="number"?t.size:parseInt(t.size,10)):[]}function S1(e,t,a){let n=e[t];return n&&n.shape?h6(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 T1(e,t,a,n=!1){let r=e[t];return r&&r.list&&r.list.s?r.list.s.map(s=>c6(s,n)):a}function N1(e,t,a){let n=e[t];return n&&n.list&&n.list.shape?n.list.shape.map(r=>h6(r)):a}function R1(e,t,a){let n=e[t];return n&&n.list&&n.list.b?n.list.b:a}var iO=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 ua(e,this.tensorMap,this.context)}getAttr(e,t){let a=this.node.rawAttrs[e];if(a.tensor!=null)return ua(e,this.tensorMap,this.context);if(a.i!=null||a.f!=null)return w1(this.node.rawAttrs,e,t);if(a.s!=null)return b1(this.node.rawAttrs,e,t);if(a.b!=null)return v1(this.node.rawAttrs,e,t);if(a.shape!=null)return S1(this.node.rawAttrs,e,t);if(a.type!=null)return k1(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 T1(this.node.rawAttrs,e,t);if(a.list.shape!=null)return N1(this.node.rawAttrs,e,t);if(a.list.b!=null)return R1(this.node.rawAttrs,e,t);if(a.list.type!=null)return I1(this.node.rawAttrs,e,t)}return t}},ea={};Ze(ea,{OP_SCOPE_SUFFIX:()=>sg,abs:()=>Za,acos:()=>ab,acosh:()=>nb,add:()=>we,addN:()=>Dh,all:()=>rb,any:()=>sb,argMax:()=>rr,argMin:()=>ib,asin:()=>ob,asinh:()=>lb,atan:()=>ub,atan2:()=>db,atanh:()=>pb,avgPool:()=>hg,avgPool3d:()=>fb,basicLSTMCell:()=>gb,batchNorm:()=>Wp,batchNorm2d:()=>yb,batchNorm3d:()=>xb,batchNorm4d:()=>Ab,batchToSpaceND:()=>mg,bincount:()=>fg,bitwiseAnd:()=>bb,booleanMaskAsync:()=>r7,broadcastArgs:()=>vb,broadcastTo:()=>Ul,buffer:()=>_e,cast:()=>Ue,ceil:()=>wb,clipByValue:()=>kb,clone:()=>Ia,complex:()=>Sr,concat:()=>lt,concat1d:()=>Ib,concat2d:()=>Vu,concat3d:()=>Sb,concat4d:()=>Cb,conv1d:()=>Tb,conv2d:()=>Bp,conv2dTranspose:()=>Rb,conv3d:()=>Eb,conv3dTranspose:()=>Mb,cos:()=>$b,cosh:()=>Pb,cosineWindow:()=>Xh,cumprod:()=>_b,cumsum:()=>Fb,denseBincount:()=>Db,depthToSpace:()=>Ob,depthwiseConv2d:()=>Oh,diag:()=>zb,dilation2d:()=>Lb,div:()=>ve,divNoNan:()=>Bb,dot:()=>Vb,dropout:()=>u7,einsum:()=>Vs,elu:()=>xg,enclosingPowerOfTwo:()=>Xg,ensureShape:()=>Ub,equal:()=>yg,erf:()=>Gb,euclideanNorm:()=>qb,exp:()=>ns,expandDims:()=>Wt,expm1:()=>Xb,eye:()=>bg,fft:()=>Gh,fill:()=>sr,floor:()=>vg,floorDiv:()=>zp,fused:()=>Kg,gather:()=>wg,gatherND:()=>l7,greater:()=>Gp,greaterEqual:()=>kg,ifft:()=>Zd,imag:()=>Hp,image:()=>fe,inTopKAsync:()=>d7,irfft:()=>Vg,isFinite:()=>Kb,isInf:()=>Yb,isNaN:()=>Zb,leakyRelu:()=>Ig,less:()=>mh,lessEqual:()=>zh,linalg:()=>x7,linspace:()=>Jb,localResponseNormalization:()=>Qb,log:()=>Yl,log1p:()=>Sg,logSigmoid:()=>t4,logSoftmax:()=>a4,logSumExp:()=>Tg,logicalAnd:()=>Xd,logicalNot:()=>Ng,logicalOr:()=>Rg,logicalXor:()=>n4,losses:()=>A7,lowerBound:()=>r4,matMul:()=>pt,max:()=>fa,maxPool:()=>Eg,maxPool3d:()=>s4,maxPoolWithArgmax:()=>i4,maximum:()=>Mg,mean:()=>Kd,meshgrid:()=>o4,min:()=>as,minimum:()=>Yd,mirrorPad:()=>l4,mod:()=>Uu,moments:()=>u4,movingAverage:()=>s7,mul:()=>te,multiRNNCell:()=>d4,multinomial:()=>p4,neg:()=>Ln,norm:()=>Up,notEqual:()=>$g,oneHot:()=>fh,ones:()=>Hr,onesLike:()=>c4,op:()=>z,outerProduct:()=>h4,pad:()=>ir,pad1d:()=>m4,pad2d:()=>f4,pad3d:()=>g4,pad4d:()=>y4,pool:()=>x4,pow:()=>Kl,prelu:()=>_g,print:()=>pg,prod:()=>A4,raggedGather:()=>b4,raggedRange:()=>v4,raggedTensorToTensor:()=>w4,rand:()=>k4,randomGamma:()=>T4,randomNormal:()=>Lg,randomStandardNormal:()=>N4,randomUniform:()=>Bh,randomUniformInt:()=>R4,range:()=>Zl,real:()=>Jl,reciprocal:()=>E4,relu:()=>jp,relu6:()=>Wg,reshape:()=>Q,reverse:()=>rs,reverse1d:()=>M4,reverse2d:()=>$4,reverse3d:()=>P4,reverse4d:()=>_4,rfft:()=>Hh,round:()=>Bg,rsqrt:()=>F4,scalar:()=>Ge,scatterND:()=>i7,searchSorted:()=>Wh,selu:()=>D4,separableConv2d:()=>O4,setdiff1dAsync:()=>z4,sigmoid:()=>za,sign:()=>L4,signal:()=>y7,sin:()=>W4,sinh:()=>B4,slice:()=>Fe,slice1d:()=>V4,slice2d:()=>U4,slice3d:()=>qp,slice4d:()=>Vh,softmax:()=>Uh,softplus:()=>Cg,spaceToBatchND:()=>Pg,sparse:()=>b7,sparseToDense:()=>o7,spectral:()=>g7,split:()=>Sa,sqrt:()=>er,square:()=>Tn,squaredDifference:()=>Ug,squeeze:()=>Oe,stack:()=>ca,step:()=>Gg,stridedSlice:()=>G4,string:()=>v7,sub:()=>xe,sum:()=>ot,tan:()=>H4,tanh:()=>hh,tensor:()=>Ve,tensor1d:()=>Bt,tensor2d:()=>Zn,tensor3d:()=>Hg,tensor4d:()=>j4,tensor5d:()=>q4,tensor6d:()=>X4,tensorScatterUpdate:()=>Y4,tile:()=>Xr,topk:()=>Z4,transpose:()=>Qs,truncatedNormal:()=>J4,unique:()=>Q4,unsortedSegmentSum:()=>e7,unstack:()=>Na,upperBound:()=>t7,variable:()=>a7,where:()=>kr,whereAsync:()=>qg,zeros:()=>yn,zerosLike:()=>Qa});var oO=(e,t,a,n=ea)=>{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`)}},lO=(e,t,a,n=ea)=>{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(ua(e.inputNames[0],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(ua(e.inputNames[0],t,a))];case"IsInf":return[n.isInf(ua(e.inputNames[0],t,a))];case"IsFinite":return[n.isFinite(ua(e.inputNames[0],t,a))];default:throw TypeError(`Node type ${e.op} is not implemented`)}};function Cn(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 h5(e){return!(typeof e=="number"||e.some(t=>t<0))}function kd(e,t,a){let n=E1(e,a),r=!h5(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=E1(s.shape,n)}),!h5(n))throw new Error(`Non-fully-defined elementShape: ${n}`);return n}function E1(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 uO=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=Ge(0),zn(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),Cn(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,zn(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,Na(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=[];De(()=>{t=Q(t,[1,a,r]);for(let o=0;o{if(n!==s.dtype)throw new Error(`Invalid data types; op elements ${n}, but list elements ${s.dtype}`);Cn(a,s.shape,"TensorList shape mismatch: "),zn(s)}),this.idTensor=Ge(0),this.maxNumElements=r,zn(this.idTensor)}copy(){return new M1([...this.tensors],this.elementShape,this.elementDtype)}clearAndClose(t){this.tensors.forEach(a=>{(t==null||!t.has(a.id))&&a.dispose()}),this.tensors.length=0,this.idTensor.dispose()}size(){return this.tensors.length}stack(t,a,n=-1){if(a!==this.elementDtype)throw new Error(`Invalid data types; op elements ${a}, but list elements ${this.elementDtype}`);if(n!==-1&&this.tensors.length!==n)throw new Error(`Operation expected a list with ${n} elements but got a list with ${this.tensors.length} elements.`);Cn(t,this.elementShape,"TensorList shape mismatch: ");let r=kd(this.elementShape,this.tensors,t);return De(()=>{let s=this.tensors.map(i=>Q(i,r));return ca(s,0)})}popBack(t,a){if(a!==this.elementDtype)throw new Error(`Invalid data types; op elements ${a}, but list elements ${this.elementDtype}`);if(this.size()===0)throw new Error("Trying to pop from an empty list.");let n=kd(this.elementShape,this.tensors,t),r=this.tensors.pop();return r.kept=!1,Cn(r.shape,t,"TensorList shape mismatch: "),Q(r,n)}pushBack(t){if(t.dtype!==this.elementDtype)throw new Error(`Invalid data types; op elements ${t.dtype}, but list elements ${this.elementDtype}`);if(Cn(t.shape,this.elementShape,"TensorList shape mismatch: "),this.maxNumElements===this.size())throw new Error("Trying to push element into a full list.");zn(t),this.tensors.push(t)}resize(t){if(t<0)throw new Error(`TensorListResize expects size to be non-negative. Got: ${t}`);if(this.maxNumElements!==-1&&t>this.maxNumElements)throw new Error(`TensorListResize input size ${t} is greater maxNumElement ${this.maxNumElements}.`);let a=new M1([],this.elementShape,this.elementDtype,this.maxNumElements);a.tensors.length=t;for(let n=0;nthis.tensors.length)throw new Error(`Trying to access element ${t} in a list with ${this.tensors.length} elements.`);if(this.tensors[t]==null)throw new Error(`element at index ${t} is null.`);Cn(this.tensors[t].shape,a,"TensorList shape mismatch: ");let r=kd(this.elementShape,this.tensors,a);return Q(this.tensors[t],r)}setItem(t,a){if(a.dtype!==this.elementDtype)throw new Error(`Invalid data types; op elements ${a.dtype}, but list elements ${this.elementDtype}`);if(t<0||this.maxNumElements!==-1&&t>=this.maxNumElements)throw new Error(`Trying to set element ${t} in a list with max ${this.maxNumElements} elements.`);Cn(this.elementShape,a.shape,"TensorList shape mismatch: "),zn(a),this.tensors[t]!=null&&(this.tensors[t].kept=!1),this.tensors[t]=a}gather(t,a,n){if(a!==this.elementDtype)throw new Error(`Invalid data types; op elements ${a}, but list elements ${this.elementDtype}`);Cn(this.elementShape,n,"TensorList shape mismatch: "),t=t.slice(0,this.size());let r=kd(this.elementShape,this.tensors,n);return t.length===0?Ve([],[0].concat(r)):De(()=>{let s=t.map(i=>Q(this.tensors[i],r));return ca(s,0)})}concat(t,a){if(t&&t!==this.elementDtype)throw new Error(`TensorList dtype is ${this.elementDtype} but concat requested dtype ${t}`);Cn(this.elementShape,a,"TensorList shape mismatch: ");let n=kd(this.elementShape,this.tensors,a);return this.size()===0?Ve([],[0].concat(n)):De(()=>{let r=this.tensors.map(s=>Q(s,n));return lt(r,0)})}};function uO(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);Cn(r,t,"TensorList shape mismatch: ");let s=Na(e);return new e0(s,t,n)}function dO(e,t,a,n){return new e0([],e,t,n)}function pO(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 e0([],a,e.dtype,n),i=Na(e,0);return t.forEach((o,l)=>{s.setItem(o,i[l])}),s}function cO(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 + ${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=[];De(()=>{t=Q(t,[1,a,r]);for(let o=0;o{if(n!==s.dtype)throw new Error(`Invalid data types; op elements ${n}, but list elements ${s.dtype}`);Cn(a,s.shape,"TensorList shape mismatch: "),zn(s)}),this.idTensor=Ge(0),this.maxNumElements=r,zn(this.idTensor)}copy(){return new M1([...this.tensors],this.elementShape,this.elementDtype)}clearAndClose(t){this.tensors.forEach(a=>{(t==null||!t.has(a.id))&&a.dispose()}),this.tensors.length=0,this.idTensor.dispose()}size(){return this.tensors.length}stack(t,a,n=-1){if(a!==this.elementDtype)throw new Error(`Invalid data types; op elements ${a}, but list elements ${this.elementDtype}`);if(n!==-1&&this.tensors.length!==n)throw new Error(`Operation expected a list with ${n} elements but got a list with ${this.tensors.length} elements.`);Cn(t,this.elementShape,"TensorList shape mismatch: ");let r=kd(this.elementShape,this.tensors,t);return De(()=>{let s=this.tensors.map(i=>Q(i,r));return ca(s,0)})}popBack(t,a){if(a!==this.elementDtype)throw new Error(`Invalid data types; op elements ${a}, but list elements ${this.elementDtype}`);if(this.size()===0)throw new Error("Trying to pop from an empty list.");let n=kd(this.elementShape,this.tensors,t),r=this.tensors.pop();return r.kept=!1,Cn(r.shape,t,"TensorList shape mismatch: "),Q(r,n)}pushBack(t){if(t.dtype!==this.elementDtype)throw new Error(`Invalid data types; op elements ${t.dtype}, but list elements ${this.elementDtype}`);if(Cn(t.shape,this.elementShape,"TensorList shape mismatch: "),this.maxNumElements===this.size())throw new Error("Trying to push element into a full list.");zn(t),this.tensors.push(t)}resize(t){if(t<0)throw new Error(`TensorListResize expects size to be non-negative. Got: ${t}`);if(this.maxNumElements!==-1&&t>this.maxNumElements)throw new Error(`TensorListResize input size ${t} is greater maxNumElement ${this.maxNumElements}.`);let a=new M1([],this.elementShape,this.elementDtype,this.maxNumElements);a.tensors.length=t;for(let n=0;nthis.tensors.length)throw new Error(`Trying to access element ${t} in a list with ${this.tensors.length} elements.`);if(this.tensors[t]==null)throw new Error(`element at index ${t} is null.`);Cn(this.tensors[t].shape,a,"TensorList shape mismatch: ");let r=kd(this.elementShape,this.tensors,a);return Q(this.tensors[t],r)}setItem(t,a){if(a.dtype!==this.elementDtype)throw new Error(`Invalid data types; op elements ${a.dtype}, but list elements ${this.elementDtype}`);if(t<0||this.maxNumElements!==-1&&t>=this.maxNumElements)throw new Error(`Trying to set element ${t} in a list with max ${this.maxNumElements} elements.`);Cn(this.elementShape,a.shape,"TensorList shape mismatch: "),zn(a),this.tensors[t]!=null&&(this.tensors[t].kept=!1),this.tensors[t]=a}gather(t,a,n){if(a!==this.elementDtype)throw new Error(`Invalid data types; op elements ${a}, but list elements ${this.elementDtype}`);Cn(this.elementShape,n,"TensorList shape mismatch: "),t=t.slice(0,this.size());let r=kd(this.elementShape,this.tensors,n);return t.length===0?Ve([],[0].concat(r)):De(()=>{let s=t.map(i=>Q(this.tensors[i],r));return ca(s,0)})}concat(t,a){if(t&&t!==this.elementDtype)throw new Error(`TensorList dtype is ${this.elementDtype} but concat requested dtype ${t}`);Cn(this.elementShape,a,"TensorList shape mismatch: ");let n=kd(this.elementShape,this.tensors,a);return this.size()===0?Ve([],[0].concat(n)):De(()=>{let r=this.tensors.map(s=>Q(s,n));return lt(r,0)})}};function dO(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);Cn(r,t,"TensorList shape mismatch: ");let s=Na(e);return new e0(s,t,n)}function pO(e,t,a,n){return new e0([],e,t,n)}function cO(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 e0([],a,e.dtype,n),i=Na(e,0);return t.forEach((o,l)=>{s.setItem(o,i[l])}),s}function hO(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=E1(s,a),o=n===0?0:e.size/n,l=De(()=>{let p=[];e=Q(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[br(n)]}case"Switch":{let n=k("pred",e,t,a),r=k("data",e,t,a);return r.kept||(r=br(r)),(await n.data())[0]?[void 0,r]:[r,void 0]}case"Merge":{let n=e.inputNames.find(r=>ua(r,t,a)!==void 0);if(n){let r=ua(n,t,a);return[br(r)]}return}case"Enter":{let n=k("frameName",e,t,a),r=k("tensor",e,t,a);return a.enterFrame(n),[br(r)]}case"Exit":{let n=k("tensor",e,t,a);return a.exitFrame(),[br(n)]}case"NextIteration":{let n=k("tensor",e,t,a);return a.nextIteration(),[br(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 lO(u,r,n,s,l,i,o);return a.addTensorArray(p),[p.idTensor,Ge(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[Ge(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=pO(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=dO(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=uO(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=cO(n,s,r);return a.addTensorList(i),[i.idTensor]}case"TensorListLength":{let n=k("tensorListId",e,t,a),r=a.getTensorList(n.id);return[Ge(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 h5(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=ah(e,t,a),d=k("dataFormat",e,t,a).toUpperCase(),h=k("dilations",e,t,a),[m,f]=k("args",e,t,a);i&&(f=m,m=void 0);let g=k("leakyreluAlpha",e,t,a);return{stride:p,pad:c,dataFormat:d,dilations:h,biasArg:m,preluArg:f,activationFunc:r,leakyreluAlpha:g}}var mO=(e,t,a,n=ea)=>{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=ah(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}=h5(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}=h5(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=ah(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=ah(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`)}},fO=(e,t,a,n=ea)=>{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"RandomUniformInt":return[n.randomUniformInt(k("shape",e,t,a),k("minval",e,t,a),k("maxval",e,t,a),k("seed",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 Z2(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 gO=async(e,t,a,n,r=ea)=>{switch(e.op){case"NonMaxSuppressionV5":{let{boxes:s,scores:i,maxOutputSize:o,iouThreshold:l,scoreThreshold:u,softNmsSigma:p}=Z2(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}=Z2(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}=Z2(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`)}},yO=(e,t,a,n=ea)=>{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`)}},xO=(e,t,a,n=ea)=>{switch(e.op){case"Const":return t[e.name];case"PlaceholderWithDefault":let r=k("default",e,t,a);return[ua(e.name,t,a)||r];case"Placeholder":return[ua(e.name,t,a)];case"Identity":case"StopGradient":case"FakeQuantWithMinMaxVars":{let p=k("x",e,t,a);return[br(p)]}case"IdentityN":return k("x",e,t,a).map(p=>br(p));case"Snapshot":let s=k("x",e,t,a);return[br(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 Ge(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(),De(()=>{let n=Na(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 AO(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`)}},vO=(e,t,a,n=ea)=>{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`)}},wO=(e,t,a,n=ea)=>{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))];case"BitwiseAnd":return[n.bitwiseAnd(k("a",e,t,a),k("b",e,t,a))];default:throw TypeError(`Node type ${e.op} is not implemented`)}},kO=(e,t,a,n=ea)=>{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})];case"MatrixBandPart":return[n.linalg.bandPart(k("a",e,t,a),k("numLower",e,t,a),k("numUpper",e,t,a))];default:throw TypeError(`Node type ${e.op} is not implemented`)}},IO=(e,t,a,n=ea)=>{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))];default:throw TypeError(`Node type ${e.op} is not implemented`)}},SO=(e,t,a,n=ea)=>{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`)}},CO=(e,t,a,n=ea)=>{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`)}},TO=(e,t,a,n=ea)=>{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))]}case"TensorScatterUpdate":{let r=k("indices",e,t,a),s=k("values",e,t,a),i=k("tensor",e,t,a);return[n.tensorScatterUpdate(i,r,s)]}default:throw TypeError(`Node type ${e.op} is not implemented`)}},NO=(e,t,a,n=ea)=>{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`)}},RO=(e,t,a,n=ea)=>{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`)}},EO=(e,t,a,n=ea)=>{switch(e.op){case"StaticRegexReplace":return[n.string.staticRegexReplace(k("input",e,t,a),k("pattern",e,t,a),k("rewrite",e,t,a),k("replaceGlobal",e,t,a))];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`)}},MO=(e,t,a,n=ea)=>{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"EnsureShape":return[n.ensureShape(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 m5(e,t,a,n,r=De){let s=((i,o,l)=>{switch(i.category){case"arithmetic":return r(()=>iO(i,o,l));case"basic_math":return r(()=>oO(i,o,l));case"control":return hO(i,o,l);case"convolution":return r(()=>mO(i,o,l));case"creation":return r(()=>fO(i,o,l));case"dynamic":return gO(i,o,l);case"evaluation":return r(()=>yO(i,o,l));case"image":return r(()=>vO(i,o,l));case"graph":return r(()=>xO(i,o,l));case"logical":return r(()=>wO(i,o,l));case"matrices":return r(()=>kO(i,o,l));case"normalization":return r(()=>IO(i,o,l));case"ragged":return r(()=>SO(i,o,l));case"reduction":return r(()=>CO(i,o,l));case"slice_join":return r(()=>TO(i,o,l));case"sparse":return r(()=>NO(i,o,l));case"spectral":return r(()=>RO(i,o,l));case"string":return r(()=>EO(i,o,l));case"transformation":return r(()=>MO(i,o,l));case"hash_table":return bO(i,o,l,n);case"custom":let u=H7(i.op);if(u&&u.customExecutor)return u.customExecutor(new sO(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 f5=class{constructor(e={},t={},a={},n={},r){this.weightMap=e,this.tensorArrayMap=t,this.tensorListMap=a,this.functionMap=n,this.parseNodeNameCache=r,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 g5(e,t,a,n){let r=new Set,s=[],i=null,o=null,l=new Set,u=new Set(Object.keys(e).map(d=>Ya(d)[0]));n=n||[];let p=new Set(n.map(d=>Ya(d.name)[0])),c=[...t];for(;c.length>0;){let d=c.pop();if((Us(d)||LO(d)||WO(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.has(d.name)&&!p.has(d.name)){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 $O(e,t){let{usedNodes:a,inputs:n}=t,r=Object.keys(n).map(g=>Ya(g)[0]).map(g=>e.nodes[g]),s=e.initNodes||[],i=g=>a.has(typeof g=="string"?g:g.name);function o(g){return[...new Map(g.map(y=>[y.name,y])).values()]}let l=o([...r,...e.weights,...s]).filter(i),u=o([...l,...Object.values(e.nodes)]).filter(i),p=new Map(u.map(g=>[g.name,g])),c={};for(let g of u){c[g.name]=c[g.name]||0;for(let y of g.children)i(y)||(c[y.name]=Number.POSITIVE_INFINITY),c[y.name]=(c[y.name]||0)+1}let d=Object.entries(c).filter(([,g])=>g===0).map(([g])=>g),h=[...d];for(;d.length>0;){let g=d.pop(),y=p.get(g);for(let x of y.children.filter(i))--c[x.name]===0&&(h.push(x.name),d.push(x.name))}let m=h.map(g=>p.get(g)),f=PO(m,l);return _O(f,l),f}function PO(e,t){let a=new Map(e.map(s=>[s.name,s])),n=t.map(s=>s.name),r=new Set(n);for(;n.length>0;){let s=n.pop(),i=a.get(s);for(let o of i.children)!a.has(o.name)||r.has(o.name)||(r.add(o.name),n.push(o.name))}return e.filter(s=>r.has(s.name))}var Kc=class extends Error{constructor(e){super(`NodesExecutionOrderError: ${e}`)}};function _O(e,t){let a=new Map(e.map((o,l)=>[o.name,l])),n=new Set(t.map(o=>o.name)),r=o=>n.has(typeof o=="string"?o:o.name),s=new Set(e.map(o=>o.name)),i=o=>s.has(typeof o=="string"?o:o.name);for(let o of e){for(let l of o.children.filter(i)){if(!a.has(l.name))throw new Kc(`Child ${l.name} of node ${o.name} is unreachable.`);if(a.get(o.name)>a.get(l.name))throw new Kc(`Node ${o.name} is scheduled to run after its child ${l.name}.`)}if(!r(o))for(let l of o.inputs){if(!a.has(l.name))throw new Kc(`Input ${l.name} of node ${o.name} is unreachable.`);if(a.get(l.name)>a.get(o.name))throw new Kc(`Node ${o.name} is scheduled to run before its input ${l.name}.`)}}}function FO(e){let t=new Map(e.map((o,l)=>[o.name,l])),a=Number.MAX_SAFE_INTEGER,n=e.map((o,l)=>Us(o)?a:l),r=o=>{let l=n[t.get(o.name)];return l==null?-1:l},s=e.map((o,l)=>o.children.map(r).reduce((u,p)=>Math.max(u,p),n[l])),i=new Map;for(let o=0;ot[n].map(r=>r.id));this._weightIds=[].concat(...a),this._weightMap=t}set resourceManager(t){this._resourceManager=t}get inputs(){return this._inputs.map(t=>({name:t.name,shape:t.attrParams.shape?t.attrParams.shape.value:void 0,dtype:t.attrParams.dtype?t.attrParams.dtype.value:void 0}))}get outputs(){return this._outputs.map(t=>({name:t.name,shape:t.attrParams.shape?t.attrParams.shape.value:void 0,dtype:t.attrParams.dtype?t.attrParams.dtype.value:void 0}))}get inputNodes(){return this._inputs.map(t=>t.signatureKey||t.name)}get outputNodes(){return this._outputs.map(t=>{let a=t.signatureKey||t.name;return t.defaultOutput?`${a}:${t.defaultOutput}`:a})}get functions(){return Object.keys(this._functions).reduce((t,a)=>(t[a]=this._functions[a].signature,t),{})}constructor(t,a){this.graph=t,this.parent=a,this.compiledMap=new Map,this.parseNodeNameCache=new Map,this._weightMap={},this.SEPARATOR=",",this._functions={},this._functionExecutorMap={},this.keepIntermediateTensors=!1,this._outputs=t.outputs,this._inputs=t.inputs,this._initNodes=t.initNodes,this._signature=t.signature,this._functions=t.functions,t.functions!=null&&Object.keys(t.functions).forEach(n=>{this._functionExecutorMap[n]=new h6(t.functions[n],this)})}getCompilationKey(t,a){let n=t.map(s=>s.name).sort(),r=a.map(s=>s.name).sort();return n.join(this.SEPARATOR)+"--"+r.join(this.SEPARATOR)}compile(t,a){let n=g5(t,a,this.weightMap,this._initNodes),{missingInputs:r,dynamicNode:s,syncInputs:i}=n;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 [${i}]`);if(r.length>0){let u=a.map(c=>c.name),p=Object.keys(t);throw new Error(`Cannot compute the outputs [${u}] from the provided inputs [${p}]. Missing the following inputs: [${r}]`)}let o=$O(this.graph,n),l=FO(o);return{orderedNodes:o,nodeLiveUntilMap:l}}cloneAndKeepTensor(t){if(t==null)return null;let a=t.clone();return zn(a),a}cloneTensorList(t){return t?t.map(a=>this.cloneAndKeepTensor(a)):null}cloneTensorMap(t){return Object.fromEntries(Object.entries(t).map(([a,n])=>[a,this.cloneTensorList(n)]))}execute(t,a){this.disposeIntermediateTensors(),t=this.mapInputs(t);let n=Object.keys(t).sort();this.checkInputs(t),this.checkInputShapeAndType(t),a=this.mapOutputs(a),this.checkOutputs(a);let r=n.map(d=>this.graph.nodes[Ya(d)[0]]),s=a.map(d=>Ya(d)[0]),i=new Set(s),o=s.map(d=>this.graph.nodes[d]);o.length===0&&(o=this._outputs);let l=this.getCompilationKey(r,o),u=this.compiledMap.get(l);u==null&&(u=this.compile(t,o),this.compiledMap.set(l,u));try{this.keepIntermediateTensors=B().getBool("KEEP_INTERMEDIATE_TENSORS")}catch(d){this.keepIntermediateTensors=!1,console.warn(d.message)}let p={},c={};return De(()=>{let d=new f5(this.weightMap,p,c,this.functionExecutorMap,this.parseNodeNameCache),h=Object.assign({},this.weightMap);this.keepIntermediateTensors&&(this.clonedTensorsMap=this.cloneTensorMap(this.weightMap)),Object.keys(t).forEach(y=>{let[x,A]=Ya(y,d),b=[];b[A]=t[y],h[x]=b,this.keepIntermediateTensors&&(this.clonedTensorsMap[x]=this.cloneTensorList(b))});let m=this.getFrozenTensorIds(h),{orderedNodes:f,nodeLiveUntilMap:g}=u;for(let y of f){if(h[y.name])continue;let x=m5(y,h,d,this._resourceManager);if(v.isPromise(x))throw new Error(`The execution of the op '${y.op}' returned a promise. Please use model.executeAsync() instead.`);h[y.name]=x,this.keepIntermediateTensors&&(this.clonedTensorsMap[y.name]=this.cloneTensorList(x)),this.checkTensorForDisposalWithNodeLiveUntilInfo(y,h,d,m,i,g.get(y.name))}return this.parent==null&&d.dispose(m),a.map(y=>ua(y,h,d))})}getFrozenTensorIds(t){let a=[].concat.apply([],Object.keys(t).map(n=>t[n]).map(n=>n.map(r=>r.id)));return new Set(a)}checkTensorForDisposal(t,a,n,r,s,i,o){if(!(Us(a)||i.has(t))){for(let l of n[t])l!=null&&(o[l.id]=(o[l.id]||0)+a.children.length);for(let l of a.inputs){if(Us(l))continue;let u=u5(l.name,n,r);if(u!=null)for(let p of u){if(!p||p.kept||s.has(p.id))continue;let c=o[p.id];c===1?(p.dispose(),delete o[p.id]):c!=null&&o[p.id]--}}}}checkTensorForDisposalWithNodeLiveUntilInfo(t,a,n,r,s,i){function o(l){return Us(l)||s.has(l.name)}if(!(Us(t)||i==null))for(let l of i){if(o(l))continue;let u=u5(l.name,a,n);for(let p of u)!p||p.kept||r.has(p.id)||p.dispose()}}async executeAsync(t,a){return this._executeAsync(t,a)}disposeIntermediateTensors(){this.clonedTensorsMap&&(Object.values(this.clonedTensorsMap).forEach(t=>{for(let a of t)a&&!a.isDisposed&&a.dispose()}),this.clonedTensorsMap=null)}getIntermediateTensors(){return this.clonedTensorsMap}async _executeAsync(t,a,n=!1,r={},s={}){this.disposeIntermediateTensors(),n||(t=this.mapInputs(t),this.checkInputs(t),this.checkInputShapeAndType(t),a=this.mapOutputs(a),this.checkOutputs(a));try{this.keepIntermediateTensors=B().getBool("KEEP_INTERMEDIATE_TENSORS")}catch(d){this.keepIntermediateTensors=!1,console.warn(d.message)}let i=new f5(this.weightMap,r,s,this.functionExecutorMap,this.parseNodeNameCache);this.keepIntermediateTensors&&(this.clonedTensorsMap=this.cloneTensorMap(this.weightMap));let o=await this.executeWithControlFlow(t,i,a,n),l=a.map(d=>ua(d,o,i)),u=l.map(d=>d.id),p=Object.keys(t).map(d=>t[d].id),c=new Set([...u,...p,...this.weightIds]);return Object.values(o).forEach(d=>{d.forEach(h=>{h&&!h.isDisposed&&!c.has(h.id)&&h.dispose()})}),this.parent==null&&i.dispose(c),l}async executeFunctionAsync(t,a,n){let r=t.reduce((s,i,o)=>(s[this.inputs[o].name]=i,s),{});return this._executeAsync(r,this.outputNodes,!0,a,n)}async executeWithControlFlow(t,a,n,r){let s=Object.keys(t),i=s.map(b=>this.graph.nodes[Ya(b)[0]]),o=n.map(b=>Ya(b)[0]),l=new Set(o),u=o.map(b=>this.graph.nodes[b]);u.length===0&&(u=this._outputs);let{usedNodes:p,missingInputs:c,dynamicNode:d,syncInputs:h}=g5(t,u,this.weightMap,this._initNodes),m=[...i,...this.graph.weights,...this._initNodes||[]].map(b=>({node:b,contexts:a.currentContext})),f=Object.assign({},this.weightMap);Object.keys(t).forEach(b=>{let[w,I]=Ya(b),T=[];T[I]=t[b],f[w]=T});let g={},y=this.getFrozenTensorIds(f),x={};for(;m.length>0;){let b=this.processStack(i,m,a,f,x,y,l,g,p);await Promise.all(b)}d==null&&!r&&console.warn("This model execution did not contain any nodes with control flow or dynamic output shapes. You can use model.execute() instead.");let A=u.filter(b=>!Us(b)&&!ua(b.name,f,a)).map(b=>b.name);if(A.length>0){let b="";throw d!=null&&(b=`Alternatively, to avoid the dynamic ops, use model.execute() and specify the inputs [${h}]`),new Error(`Cannot compute the outputs [${A}] from the provided inputs [${s}]. Consider providing the following inputs: [${c}]. ${b}`)}return f}processStack(t,a,n,r,s,i,o,l,u){let p=[];for(;a.length>0;){let c=a.pop();n.currentContext=c.contexts;let d="";if(c.node.op==="Enter"&&k("isConstant",c.node,r,n)&&([d]=Ar(c.node.name,n)),r[c.node.name]==null){let h=m5(c.node,r,n,this._resourceManager);d||([d]=Ar(c.node.name,n));let m=n.currentContext;v.isPromise(h)?p.push(h.then(f=>(r[d]=f,this.keepIntermediateTensors&&(this.clonedTensorsMap[d]=this.cloneTensorList(f)),n.currentContext=m,this.checkTensorForDisposal(d,c.node,r,n,i,o,l),this.processChildNodes(c.node,a,n,r,s,u),f))):(r[d]=h,this.keepIntermediateTensors&&(this.clonedTensorsMap[d]=this.cloneTensorList(h)),this.checkTensorForDisposal(d,c.node,r,n,i,o,l),this.processChildNodes(c.node,a,n,r,s,u))}else this.processChildNodes(c.node,a,n,r,s,u)}return p}processChildNodes(t,a,n,r,s,i){t.children.forEach(o=>{let[l]=Ar(o.name,n);s[l]||!i.has(o.name)||(o.op==="Merge"?o.inputNames.some(u=>!!ua(u,r,n))&&(s[l]=!0,a.push({contexts:n.currentContext,node:o})):o.inputNames.every(u=>!!ua(u,r,n))&&(s[l]=!0,a.push({contexts:n.currentContext,node:o})))})}dispose(){Object.keys(this.weightMap).forEach(t=>this.weightMap[t].forEach(a=>a.dispose()))}checkInputShapeAndType(t){Object.keys(t).forEach(a=>{let n=t[a],[r]=Ya(a),s=this.graph.nodes[r];if(s.attrParams.shape&&s.attrParams.shape.value){let i=s.attrParams.shape.value,o=i.length===n.shape.length&&n.shape.every((l,u)=>i[u]===-1||i[u]===l);v.assert(o,()=>`The shape of dict['${s.name}'] provided in model.execute(dict) must be [${i}], but was [${n.shape}]`)}s.attrParams.dtype&&s.attrParams.dtype.value&&v.assert(n.dtype===s.attrParams.dtype.value,()=>`The dtype of dict['${s.name}'] provided in model.execute(dict) must be ${s.attrParams.dtype.value}, but was ${n.dtype}`)})}mapInputs(t){var a,n;let r={};for(let s in t){let i=(n=(a=this._signature)===null||a===void 0?void 0:a.inputs)===null||n===void 0?void 0:n[s];i!=null?r[i.name]=t[s]:r[s]=t[s]}return r}checkInputs(t){let a=Object.keys(t).filter(n=>{let[r]=Ya(n);return this.graph.nodes[r]==null});if(a.length>0)throw new Error(`The dict provided in model.execute(dict) has keys: [${a}] that are not part of graph`)}mapOutputs(t){return t.map(a=>{var n,r;let s=(r=(n=this._signature)===null||n===void 0?void 0:n.outputs)===null||r===void 0?void 0:r[a];return s!=null?s.name:a},{})}checkOutputs(t){t.forEach(a=>{let[n]=Ya(a);if(!this.graph.nodes[n])throw new Error(`The output '${a}' is not found in the graph`)})}},BO=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]}},VO="?tfjs-format=file",UO="model.json",Xp=class{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}constructor(e,t={},a=Kn){this.modelUrl=e,this.loadOptions=t,this.version="n/a",this.io=a,t==null&&(this.loadOptions={}),this.resourceManager=new BO}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=>t.getWeightStream==null?this.loadSync(t):this.loadStreaming(t)):this.loadSync(e)}loadSync(e){let t=this.io.decodeWeights(e.weightData,e.weightSpecs);return this.loadWithWeightMap(e,t)}async loadStreaming(e){if(e.getWeightStream==null)throw new Error("Model artifacts missing streamWeights function");let t=await HA(e.getWeightStream(),e.weightSpecs);return this.loadWithWeightMap(e,t)}loadWithWeightMap(e,t){this.artifacts=e;let a=this.artifacts.modelTopology,n=this.artifacts.signature;if(this.artifacts.userDefinedMetadata!=null){let r=this.artifacts.userDefinedMetadata;r.signature!=null&&(n=r.signature),r.structuredOutputKeys!=null&&(this.structuredOutputKeys=r.structuredOutputKeys)}if(this.signature=n,this.version=`${a.versions.producer}.${a.versions.minConsumer}`,this.executor=new y5(d5.Instance.transformGraph(a,this.signature)),this.executor.weightMap=this.convertTensorMapToTensorsMap(t),this.executor.resourceManager=this.resourceManager,e.modelInitializer!=null&&e.modelInitializer.node!=null){let r=d5.Instance.transformGraph(e.modelInitializer);this.initializer=new y5(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 yt?[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 yt)&&!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&&J(this.resourceIdToCapturedInput)),this.resourceManager.dispose()}};async function d3(e,t={},a=Kn){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=HO(e));let n=new Xp(e,t,a);return await n.load(),n}function GO(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=Kn.getWeightSpecs(n.weightsManifest),i=Kn.getModelArtifactsForJSONSync(n,s,r);t=Kn.fromMemorySync(i)}else if("load"in e)t=e;else if("modelTopology"in e&&"weightSpecs"in e&&"weightData"in e)t=Kn.fromMemorySync(e);else throw new Error("Unknown model format");let a=new Xp(t);return a.load(),a}function HO(e){return e.endsWith("/")||(e=e+"/"),`${e}${UO}${VO}`}var jO="4.17.0";function Ie(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 qO=Rn.whereImpl,p3=class m6 extends ru{nextDataId(){return m6.nextDataId++}constructor(){super(),this.blockSize=48,this.firstUse=!0,this.data=new ip(this,It())}write(t,a,n){this.firstUse&&(this.firstUse=!1,B().get("IS_NODE")&&C.warn(` + ${n}, and tensor's shape is: ${e.shape}`);let s=e.shape.slice(1),i=E1(s,a),o=n===0?0:e.size/n,l=De(()=>{let p=[];e=Q(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[br(n)]}case"Switch":{let n=k("pred",e,t,a),r=k("data",e,t,a);return r.kept||(r=br(r)),(await n.data())[0]?[void 0,r]:[r,void 0]}case"Merge":{let n=e.inputNames.find(r=>ua(r,t,a)!==void 0);if(n){let r=ua(n,t,a);return[br(r)]}return}case"Enter":{let n=k("frameName",e,t,a),r=k("tensor",e,t,a);return a.enterFrame(n),[br(r)]}case"Exit":{let n=k("tensor",e,t,a);return a.exitFrame(),[br(n)]}case"NextIteration":{let n=k("tensor",e,t,a);return a.nextIteration(),[br(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 uO(u,r,n,s,l,i,o);return a.addTensorArray(p),[p.idTensor,Ge(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[Ge(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=cO(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=pO(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=dO(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=hO(n,s,r);return a.addTensorList(i),[i.idTensor]}case"TensorListLength":{let n=k("tensorListId",e,t,a),r=a.getTensorList(n.id);return[Ge(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 m5(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=ah(e,t,a),d=k("dataFormat",e,t,a).toUpperCase(),h=k("dilations",e,t,a),[m,f]=k("args",e,t,a);i&&(f=m,m=void 0);let g=k("leakyreluAlpha",e,t,a);return{stride:p,pad:c,dataFormat:d,dilations:h,biasArg:m,preluArg:f,activationFunc:r,leakyreluAlpha:g}}var fO=(e,t,a,n=ea)=>{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=ah(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}=m5(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}=m5(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=ah(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=ah(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`)}},gO=(e,t,a,n=ea)=>{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"RandomUniformInt":return[n.randomUniformInt(k("shape",e,t,a),k("minval",e,t,a),k("maxval",e,t,a),k("seed",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 Z2(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 yO=async(e,t,a,n,r=ea)=>{switch(e.op){case"NonMaxSuppressionV5":{let{boxes:s,scores:i,maxOutputSize:o,iouThreshold:l,scoreThreshold:u,softNmsSigma:p}=Z2(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}=Z2(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}=Z2(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`)}},xO=(e,t,a,n=ea)=>{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`)}},AO=(e,t,a,n=ea)=>{switch(e.op){case"Const":return t[e.name];case"PlaceholderWithDefault":let r=k("default",e,t,a);return[ua(e.name,t,a)||r];case"Placeholder":return[ua(e.name,t,a)];case"Identity":case"StopGradient":case"FakeQuantWithMinMaxVars":{let p=k("x",e,t,a);return[br(p)]}case"IdentityN":return k("x",e,t,a).map(p=>br(p));case"Snapshot":let s=k("x",e,t,a);return[br(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 Ge(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(),De(()=>{let n=Na(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 bO(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`)}},wO=(e,t,a,n=ea)=>{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`)}},kO=(e,t,a,n=ea)=>{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))];case"BitwiseAnd":return[n.bitwiseAnd(k("a",e,t,a),k("b",e,t,a))];default:throw TypeError(`Node type ${e.op} is not implemented`)}},IO=(e,t,a,n=ea)=>{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})];case"MatrixBandPart":return[n.linalg.bandPart(k("a",e,t,a),k("numLower",e,t,a),k("numUpper",e,t,a))];default:throw TypeError(`Node type ${e.op} is not implemented`)}},SO=(e,t,a,n=ea)=>{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))];default:throw TypeError(`Node type ${e.op} is not implemented`)}},CO=(e,t,a,n=ea)=>{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`)}},TO=(e,t,a,n=ea)=>{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`)}},NO=(e,t,a,n=ea)=>{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))]}case"TensorScatterUpdate":{let r=k("indices",e,t,a),s=k("values",e,t,a),i=k("tensor",e,t,a);return[n.tensorScatterUpdate(i,r,s)]}default:throw TypeError(`Node type ${e.op} is not implemented`)}},RO=(e,t,a,n=ea)=>{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`)}},EO=(e,t,a,n=ea)=>{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`)}},MO=(e,t,a,n=ea)=>{switch(e.op){case"StaticRegexReplace":return[n.string.staticRegexReplace(k("input",e,t,a),k("pattern",e,t,a),k("rewrite",e,t,a),k("replaceGlobal",e,t,a))];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`)}},$O=(e,t,a,n=ea)=>{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"EnsureShape":return[n.ensureShape(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 f5(e,t,a,n,r=De){let s=((i,o,l)=>{switch(i.category){case"arithmetic":return r(()=>oO(i,o,l));case"basic_math":return r(()=>lO(i,o,l));case"control":return mO(i,o,l);case"convolution":return r(()=>fO(i,o,l));case"creation":return r(()=>gO(i,o,l));case"dynamic":return yO(i,o,l);case"evaluation":return r(()=>xO(i,o,l));case"image":return r(()=>wO(i,o,l));case"graph":return r(()=>AO(i,o,l));case"logical":return r(()=>kO(i,o,l));case"matrices":return r(()=>IO(i,o,l));case"normalization":return r(()=>SO(i,o,l));case"ragged":return r(()=>CO(i,o,l));case"reduction":return r(()=>TO(i,o,l));case"slice_join":return r(()=>NO(i,o,l));case"sparse":return r(()=>RO(i,o,l));case"spectral":return r(()=>EO(i,o,l));case"string":return r(()=>MO(i,o,l));case"transformation":return r(()=>$O(i,o,l));case"hash_table":return vO(i,o,l,n);case"custom":let u=j7(i.op);if(u&&u.customExecutor)return u.customExecutor(new iO(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 g5=class{constructor(e={},t={},a={},n={},r){this.weightMap=e,this.tensorArrayMap=t,this.tensorListMap=a,this.functionMap=n,this.parseNodeNameCache=r,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 y5(e,t,a,n){let r=new Set,s=[],i=null,o=null,l=new Set,u=new Set(Object.keys(e).map(d=>Ya(d)[0]));n=n||[];let p=new Set(n.map(d=>Ya(d.name)[0])),c=[...t];for(;c.length>0;){let d=c.pop();if((Us(d)||WO(d)||BO(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.has(d.name)&&!p.has(d.name)){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 PO(e,t){let{usedNodes:a,inputs:n}=t,r=Object.keys(n).map(g=>Ya(g)[0]).map(g=>e.nodes[g]),s=e.initNodes||[],i=g=>a.has(typeof g=="string"?g:g.name);function o(g){return[...new Map(g.map(y=>[y.name,y])).values()]}let l=o([...r,...e.weights,...s]).filter(i),u=o([...l,...Object.values(e.nodes)]).filter(i),p=new Map(u.map(g=>[g.name,g])),c={};for(let g of u){c[g.name]=c[g.name]||0;for(let y of g.children)i(y)||(c[y.name]=Number.POSITIVE_INFINITY),c[y.name]=(c[y.name]||0)+1}let d=Object.entries(c).filter(([,g])=>g===0).map(([g])=>g),h=[...d];for(;d.length>0;){let g=d.pop(),y=p.get(g);for(let x of y.children.filter(i))--c[x.name]===0&&(h.push(x.name),d.push(x.name))}let m=h.map(g=>p.get(g)),f=_O(m,l);return FO(f,l),f}function _O(e,t){let a=new Map(e.map(s=>[s.name,s])),n=t.map(s=>s.name),r=new Set(n);for(;n.length>0;){let s=n.pop(),i=a.get(s);for(let o of i.children)!a.has(o.name)||r.has(o.name)||(r.add(o.name),n.push(o.name))}return e.filter(s=>r.has(s.name))}var Kc=class extends Error{constructor(e){super(`NodesExecutionOrderError: ${e}`)}};function FO(e,t){let a=new Map(e.map((o,l)=>[o.name,l])),n=new Set(t.map(o=>o.name)),r=o=>n.has(typeof o=="string"?o:o.name),s=new Set(e.map(o=>o.name)),i=o=>s.has(typeof o=="string"?o:o.name);for(let o of e){for(let l of o.children.filter(i)){if(!a.has(l.name))throw new Kc(`Child ${l.name} of node ${o.name} is unreachable.`);if(a.get(o.name)>a.get(l.name))throw new Kc(`Node ${o.name} is scheduled to run after its child ${l.name}.`)}if(!r(o))for(let l of o.inputs){if(!a.has(l.name))throw new Kc(`Input ${l.name} of node ${o.name} is unreachable.`);if(a.get(l.name)>a.get(o.name))throw new Kc(`Node ${o.name} is scheduled to run before its input ${l.name}.`)}}}function DO(e){let t=new Map(e.map((o,l)=>[o.name,l])),a=Number.MAX_SAFE_INTEGER,n=e.map((o,l)=>Us(o)?a:l),r=o=>{let l=n[t.get(o.name)];return l==null?-1:l},s=e.map((o,l)=>o.children.map(r).reduce((u,p)=>Math.max(u,p),n[l])),i=new Map;for(let o=0;ot[n].map(r=>r.id));this._weightIds=[].concat(...a),this._weightMap=t}set resourceManager(t){this._resourceManager=t}get inputs(){return this._inputs.map(t=>({name:t.name,shape:t.attrParams.shape?t.attrParams.shape.value:void 0,dtype:t.attrParams.dtype?t.attrParams.dtype.value:void 0}))}get outputs(){return this._outputs.map(t=>({name:t.name,shape:t.attrParams.shape?t.attrParams.shape.value:void 0,dtype:t.attrParams.dtype?t.attrParams.dtype.value:void 0}))}get inputNodes(){return this._inputs.map(t=>t.signatureKey||t.name)}get outputNodes(){return this._outputs.map(t=>{let a=t.signatureKey||t.name;return t.defaultOutput?`${a}:${t.defaultOutput}`:a})}get functions(){return Object.keys(this._functions).reduce((t,a)=>(t[a]=this._functions[a].signature,t),{})}constructor(t,a){this.graph=t,this.parent=a,this.compiledMap=new Map,this.parseNodeNameCache=new Map,this._weightMap={},this.SEPARATOR=",",this._functions={},this._functionExecutorMap={},this.keepIntermediateTensors=!1,this._outputs=t.outputs,this._inputs=t.inputs,this._initNodes=t.initNodes,this._signature=t.signature,this._functions=t.functions,t.functions!=null&&Object.keys(t.functions).forEach(n=>{this._functionExecutorMap[n]=new m6(t.functions[n],this)})}getCompilationKey(t,a){let n=t.map(s=>s.name).sort(),r=a.map(s=>s.name).sort();return n.join(this.SEPARATOR)+"--"+r.join(this.SEPARATOR)}compile(t,a){let n=y5(t,a,this.weightMap,this._initNodes),{missingInputs:r,dynamicNode:s,syncInputs:i}=n;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 [${i}]`);if(r.length>0){let u=a.map(c=>c.name),p=Object.keys(t);throw new Error(`Cannot compute the outputs [${u}] from the provided inputs [${p}]. Missing the following inputs: [${r}]`)}let o=PO(this.graph,n),l=DO(o);return{orderedNodes:o,nodeLiveUntilMap:l}}cloneAndKeepTensor(t){if(t==null)return null;let a=t.clone();return zn(a),a}cloneTensorList(t){return t?t.map(a=>this.cloneAndKeepTensor(a)):null}cloneTensorMap(t){return Object.fromEntries(Object.entries(t).map(([a,n])=>[a,this.cloneTensorList(n)]))}execute(t,a){this.disposeIntermediateTensors(),t=this.mapInputs(t);let n=Object.keys(t).sort();this.checkInputs(t),this.checkInputShapeAndType(t),a=this.mapOutputs(a),this.checkOutputs(a);let r=n.map(d=>this.graph.nodes[Ya(d)[0]]),s=a.map(d=>Ya(d)[0]),i=new Set(s),o=s.map(d=>this.graph.nodes[d]);o.length===0&&(o=this._outputs);let l=this.getCompilationKey(r,o),u=this.compiledMap.get(l);u==null&&(u=this.compile(t,o),this.compiledMap.set(l,u));try{this.keepIntermediateTensors=B().getBool("KEEP_INTERMEDIATE_TENSORS")}catch(d){this.keepIntermediateTensors=!1,console.warn(d.message)}let p={},c={};return De(()=>{let d=new g5(this.weightMap,p,c,this.functionExecutorMap,this.parseNodeNameCache),h=Object.assign({},this.weightMap);this.keepIntermediateTensors&&(this.clonedTensorsMap=this.cloneTensorMap(this.weightMap)),Object.keys(t).forEach(y=>{let[x,A]=Ya(y,d),b=[];b[A]=t[y],h[x]=b,this.keepIntermediateTensors&&(this.clonedTensorsMap[x]=this.cloneTensorList(b))});let m=this.getFrozenTensorIds(h),{orderedNodes:f,nodeLiveUntilMap:g}=u;for(let y of f){if(h[y.name])continue;let x=f5(y,h,d,this._resourceManager);if(v.isPromise(x))throw new Error(`The execution of the op '${y.op}' returned a promise. Please use model.executeAsync() instead.`);h[y.name]=x,this.keepIntermediateTensors&&(this.clonedTensorsMap[y.name]=this.cloneTensorList(x)),this.checkTensorForDisposalWithNodeLiveUntilInfo(y,h,d,m,i,g.get(y.name))}return this.parent==null&&d.dispose(m),a.map(y=>ua(y,h,d))})}getFrozenTensorIds(t){let a=[].concat.apply([],Object.keys(t).map(n=>t[n]).map(n=>n.map(r=>r.id)));return new Set(a)}checkTensorForDisposal(t,a,n,r,s,i,o){if(!(Us(a)||i.has(t))){for(let l of n[t])l!=null&&(o[l.id]=(o[l.id]||0)+a.children.length);for(let l of a.inputs){if(Us(l))continue;let u=d5(l.name,n,r);if(u!=null)for(let p of u){if(!p||p.kept||s.has(p.id))continue;let c=o[p.id];c===1?(p.dispose(),delete o[p.id]):c!=null&&o[p.id]--}}}}checkTensorForDisposalWithNodeLiveUntilInfo(t,a,n,r,s,i){function o(l){return Us(l)||s.has(l.name)}if(!(Us(t)||i==null))for(let l of i){if(o(l))continue;let u=d5(l.name,a,n);for(let p of u)!p||p.kept||r.has(p.id)||p.dispose()}}async executeAsync(t,a){return this._executeAsync(t,a)}disposeIntermediateTensors(){this.clonedTensorsMap&&(Object.values(this.clonedTensorsMap).forEach(t=>{for(let a of t)a&&!a.isDisposed&&a.dispose()}),this.clonedTensorsMap=null)}getIntermediateTensors(){return this.clonedTensorsMap}async _executeAsync(t,a,n=!1,r={},s={}){this.disposeIntermediateTensors(),n||(t=this.mapInputs(t),this.checkInputs(t),this.checkInputShapeAndType(t),a=this.mapOutputs(a),this.checkOutputs(a));try{this.keepIntermediateTensors=B().getBool("KEEP_INTERMEDIATE_TENSORS")}catch(d){this.keepIntermediateTensors=!1,console.warn(d.message)}let i=new g5(this.weightMap,r,s,this.functionExecutorMap,this.parseNodeNameCache);this.keepIntermediateTensors&&(this.clonedTensorsMap=this.cloneTensorMap(this.weightMap));let o=await this.executeWithControlFlow(t,i,a,n),l=a.map(d=>ua(d,o,i)),u=l.map(d=>d.id),p=Object.keys(t).map(d=>t[d].id),c=new Set([...u,...p,...this.weightIds]);return Object.values(o).forEach(d=>{d.forEach(h=>{h&&!h.isDisposed&&!c.has(h.id)&&h.dispose()})}),this.parent==null&&i.dispose(c),l}async executeFunctionAsync(t,a,n){let r=t.reduce((s,i,o)=>(s[this.inputs[o].name]=i,s),{});return this._executeAsync(r,this.outputNodes,!0,a,n)}async executeWithControlFlow(t,a,n,r){let s=Object.keys(t),i=s.map(b=>this.graph.nodes[Ya(b)[0]]),o=n.map(b=>Ya(b)[0]),l=new Set(o),u=o.map(b=>this.graph.nodes[b]);u.length===0&&(u=this._outputs);let{usedNodes:p,missingInputs:c,dynamicNode:d,syncInputs:h}=y5(t,u,this.weightMap,this._initNodes),m=[...i,...this.graph.weights,...this._initNodes||[]].map(b=>({node:b,contexts:a.currentContext})),f=Object.assign({},this.weightMap);Object.keys(t).forEach(b=>{let[w,I]=Ya(b),T=[];T[I]=t[b],f[w]=T});let g={},y=this.getFrozenTensorIds(f),x={};for(;m.length>0;){let b=this.processStack(i,m,a,f,x,y,l,g,p);await Promise.all(b)}d==null&&!r&&console.warn("This model execution did not contain any nodes with control flow or dynamic output shapes. You can use model.execute() instead.");let A=u.filter(b=>!Us(b)&&!ua(b.name,f,a)).map(b=>b.name);if(A.length>0){let b="";throw d!=null&&(b=`Alternatively, to avoid the dynamic ops, use model.execute() and specify the inputs [${h}]`),new Error(`Cannot compute the outputs [${A}] from the provided inputs [${s}]. Consider providing the following inputs: [${c}]. ${b}`)}return f}processStack(t,a,n,r,s,i,o,l,u){let p=[];for(;a.length>0;){let c=a.pop();n.currentContext=c.contexts;let d="";if(c.node.op==="Enter"&&k("isConstant",c.node,r,n)&&([d]=Ar(c.node.name,n)),r[c.node.name]==null){let h=f5(c.node,r,n,this._resourceManager);d||([d]=Ar(c.node.name,n));let m=n.currentContext;v.isPromise(h)?p.push(h.then(f=>(r[d]=f,this.keepIntermediateTensors&&(this.clonedTensorsMap[d]=this.cloneTensorList(f)),n.currentContext=m,this.checkTensorForDisposal(d,c.node,r,n,i,o,l),this.processChildNodes(c.node,a,n,r,s,u),f))):(r[d]=h,this.keepIntermediateTensors&&(this.clonedTensorsMap[d]=this.cloneTensorList(h)),this.checkTensorForDisposal(d,c.node,r,n,i,o,l),this.processChildNodes(c.node,a,n,r,s,u))}else this.processChildNodes(c.node,a,n,r,s,u)}return p}processChildNodes(t,a,n,r,s,i){t.children.forEach(o=>{let[l]=Ar(o.name,n);s[l]||!i.has(o.name)||(o.op==="Merge"?o.inputNames.some(u=>!!ua(u,r,n))&&(s[l]=!0,a.push({contexts:n.currentContext,node:o})):o.inputNames.every(u=>!!ua(u,r,n))&&(s[l]=!0,a.push({contexts:n.currentContext,node:o})))})}dispose(){Object.keys(this.weightMap).forEach(t=>this.weightMap[t].forEach(a=>a.dispose()))}checkInputShapeAndType(t){Object.keys(t).forEach(a=>{let n=t[a],[r]=Ya(a),s=this.graph.nodes[r];if(s.attrParams.shape&&s.attrParams.shape.value){let i=s.attrParams.shape.value,o=i.length===n.shape.length&&n.shape.every((l,u)=>i[u]===-1||i[u]===l);v.assert(o,()=>`The shape of dict['${s.name}'] provided in model.execute(dict) must be [${i}], but was [${n.shape}]`)}s.attrParams.dtype&&s.attrParams.dtype.value&&v.assert(n.dtype===s.attrParams.dtype.value,()=>`The dtype of dict['${s.name}'] provided in model.execute(dict) must be ${s.attrParams.dtype.value}, but was ${n.dtype}`)})}mapInputs(t){var a,n;let r={};for(let s in t){let i=(n=(a=this._signature)===null||a===void 0?void 0:a.inputs)===null||n===void 0?void 0:n[s];i!=null?r[i.name]=t[s]:r[s]=t[s]}return r}checkInputs(t){let a=Object.keys(t).filter(n=>{let[r]=Ya(n);return this.graph.nodes[r]==null});if(a.length>0)throw new Error(`The dict provided in model.execute(dict) has keys: [${a}] that are not part of graph`)}mapOutputs(t){return t.map(a=>{var n,r;let s=(r=(n=this._signature)===null||n===void 0?void 0:n.outputs)===null||r===void 0?void 0:r[a];return s!=null?s.name:a},{})}checkOutputs(t){t.forEach(a=>{let[n]=Ya(a);if(!this.graph.nodes[n])throw new Error(`The output '${a}' is not found in the graph`)})}},VO=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]}},UO="?tfjs-format=file",GO="model.json",Xp=class{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}constructor(e,t={},a=Kn){this.modelUrl=e,this.loadOptions=t,this.version="n/a",this.io=a,t==null&&(this.loadOptions={}),this.resourceManager=new VO}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=>t.getWeightStream==null?this.loadSync(t):this.loadStreaming(t)):this.loadSync(e)}loadSync(e){let t=this.io.decodeWeights(e.weightData,e.weightSpecs);return this.loadWithWeightMap(e,t)}async loadStreaming(e){if(e.getWeightStream==null)throw new Error("Model artifacts missing streamWeights function");let t=await jA(e.getWeightStream(),e.weightSpecs);return this.loadWithWeightMap(e,t)}loadWithWeightMap(e,t){this.artifacts=e;let a=this.artifacts.modelTopology,n=this.artifacts.signature;if(this.artifacts.userDefinedMetadata!=null){let r=this.artifacts.userDefinedMetadata;r.signature!=null&&(n=r.signature),r.structuredOutputKeys!=null&&(this.structuredOutputKeys=r.structuredOutputKeys)}if(this.signature=n,this.version=`${a.versions.producer}.${a.versions.minConsumer}`,this.executor=new x5(p5.Instance.transformGraph(a,this.signature)),this.executor.weightMap=this.convertTensorMapToTensorsMap(t),this.executor.resourceManager=this.resourceManager,e.modelInitializer!=null&&e.modelInitializer.node!=null){let r=p5.Instance.transformGraph(e.modelInitializer);this.initializer=new x5(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 yt?[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 yt)&&!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&&J(this.resourceIdToCapturedInput)),this.resourceManager.dispose()}};async function d3(e,t={},a=Kn){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=jO(e));let n=new Xp(e,t,a);return await n.load(),n}function HO(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=Kn.getWeightSpecs(n.weightsManifest),i=Kn.getModelArtifactsForJSONSync(n,s,r);t=Kn.fromMemorySync(i)}else if("load"in e)t=e;else if("modelTopology"in e&&"weightSpecs"in e&&"weightData"in e)t=Kn.fromMemorySync(e);else throw new Error("Unknown model format");let a=new Xp(t);return a.load(),a}function jO(e){return e.endsWith("/")||(e=e+"/"),`${e}${GO}${UO}`}var qO="4.21.0";function Ie(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 XO=Rn.whereImpl,p3=class f6 extends ru{nextDataId(){return f6.nextDataId++}constructor(){super(),this.blockSize=48,this.firstUse=!0,this.data=new ip(this,It())}write(t,a,n){this.firstUse&&(this.firstUse=!1,B().get("IS_NODE")&&C.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 r={id:this.nextDataId()};return this.data.set(r,{values:t,dtype:n,refCount:1}),r}makeTensorInfo(t,a,n){let r;if(a==="string"&&n!=null&&n.length>0&&v.isString(n[0])){let s=n.map(i=>v.encodeString(i));r=this.write(s,t,a)}else r=this.write(n,t,a);return{dataId:r,shape:t,dtype:a}}refCount(t){return this.data.has(t)?this.data.get(t).refCount:0}incRef(t){let a=this.data.get(t);a.refCount++}decRef(t){if(this.data.has(t)){let a=this.data.get(t);a.refCount--}}move(t,a,n,r,s){this.data.set(t,{values:a,dtype:r,refCount:s})}numDataIds(){return this.data.numDataIds()}async read(t){return this.readSync(t)}readSync(t){let{dtype:a,complexTensorInfos:n}=this.data.get(t);if(a==="complex64"){let r=this.readSync(n.real.dataId),s=this.readSync(n.imag.dataId);return C.mergeRealAndImagArrays(r,s)}return v.convertBackendValuesAndArrayBuffer(this.data.get(t).values,a)}bufferSync(t){let a=this.readSync(t.dataId);if(t.dtype==="string")try{let n=a.map(r=>v.decodeString(r));return _e(t.shape,t.dtype,n)}catch(n){throw new Error("Failed to decode encoded string bytes into utf-8")}return _e(t.shape,t.dtype,a)}makeOutput(t,a,n){return It().makeTensorFromTensorInfo(this.makeTensorInfo(a,n,t),this)}disposeData(t,a=!1){if(this.data.has(t)){if(this.data.get(t).refCount--,!a&&this.data.get(t).refCount>0)return!1;let{complexTensorInfos:n}=this.data.get(t);n!=null&&(this.disposeData(n.real.dataId,!0),this.disposeData(n.imag.dataId,!0)),this.data.delete(t)}return!0}disposeIntermediateTensorInfo(t){this.disposeData(t.dataId)}async time(t){let a=v.now();return t(),{kernelMs:v.now()-a}}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(t){Ie([t],"where");let a=this.readSync(t.dataId);return qO(t.shape,a)}dispose(){}floatPrecision(){return 32}epsilon(){return super.epsilon()}};p3.nextDataId=0;var t0={};Ze(t0,{addImpl:()=>y6,bincountImpl:()=>h3,bincountReduceImpl:()=>x6,bitwiseAndImpl:()=>A6,castImpl:()=>g6,ceilImpl:()=>b6,concatImpl:()=>m3,equalImpl:()=>v6,expImpl:()=>k6,expm1Impl:()=>S6,floorDivImpl:()=>T6,floorImpl:()=>C6,gatherNdImpl:()=>N6,gatherV2Impl:()=>R6,greaterEqualImpl:()=>M6,greaterImpl:()=>E6,lessEqualImpl:()=>P6,lessImpl:()=>$6,linSpaceImpl:()=>_6,logImpl:()=>F6,maxImpl:()=>D6,maximumImpl:()=>O6,minimumImpl:()=>z6,multiplyImpl:()=>f3,negImpl:()=>L6,notEqualImpl:()=>W6,prodImpl:()=>B6,raggedGatherImpl:()=>V6,raggedRangeImpl:()=>U6,raggedTensorToTensorImpl:()=>G6,rangeImpl:()=>y3,rsqrtImpl:()=>H6,scatterImpl:()=>qs,sigmoidImpl:()=>jz,simpleAbsImpl:()=>f6,sliceImpl:()=>Ah,sparseFillEmptyRowsImpl:()=>q6,sparseReshapeImpl:()=>X6,sparseSegmentReductionImpl:()=>x3,sqrtImpl:()=>Kz,squaredDifferenceImpl:()=>K6,staticRegexReplaceImpl:()=>Y6,stridedSliceImpl:()=>Z6,stringNGramsImpl:()=>A3,stringSplitImpl:()=>b3,stringToHashBucketFastImpl:()=>v3,subImpl:()=>J6,tileImpl:()=>Q6,topKImpl:()=>tv,transposeImpl:()=>g3,uniqueImpl:()=>k3});function f6(e){let t=new Float32Array(e.length);for(let a=0;a{let{x:t}=e.inputs,a=e.backend;Ie(t,"abs");let n=new Float32Array(v.sizeFromShape(t.shape)),r=a.data.get(t.dataId).values;return n=f6(r),a.makeOutput(n,t.shape,t.dtype)},KO={kernelName:iu,backendName:"cpu",kernelFunc:XO};function _t(e){return(t,a,n,r,s)=>{let i=C.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),m=v.computeStrides(a),f=C.getBroadcastDims(t,i),g=C.getBroadcastDims(a,i);if(f.length+g.length===0)for(let y=0;yA[T]=0);let b=v.locToIndex(A,c,h),w=x.slice(-d);g.forEach(T=>w[T]=0);let I=v.locToIndex(w,d,m);p[y]=e(n[b],r[I])}return[p,i]}}function Ja(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 YO={kernelName:pp,backendName:"cpu",kernelFunc:Ja};function xh(e,t,a="float32"){if(a==="complex64"){let r=xh(e,t,"float32"),s=xh(e,t,"float32");return Ja({inputs:{real:r,imag:s},backend:e})}let n=v.makeZerosTypedArray(v.sizeFromShape(t),a);return e.makeTensorInfo(t,a,n)}function ar(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 ZO={kernelName:qi,backendName:"cpu",kernelFunc:ar};function ei(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 JO={kernelName:kp,backendName:"cpu",kernelFunc:ei};function g6(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]=_t((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 ss(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{dtype:s}=n;if(s==="complex64"){if(r.dtype==="complex64")return ar({inputs:{x:r},backend:a});let p=xh(a,r.shape,r.dtype),c=ss({inputs:{x:r},backend:a,attrs:{dtype:"float32"}}),d=Ja({inputs:{real:c,imag:p},backend:a});return a.disposeIntermediateTensorInfo(p),a.disposeIntermediateTensorInfo(c),d}if(r.dtype==="complex64"){let p=ei({inputs:{input:r},backend:a}),c=ss({inputs:{x:p},backend:a,attrs:{dtype:s}});return a.disposeIntermediateTensorInfo(p),c}if(!v.hasEncodingLoss(r.dtype,s)){let p=ar({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]=g6(i,r.shape,r.dtype,s);return a.makeTensorInfo(o,l,u)}var QO={kernelName:bi,backendName:"cpu",kernelFunc:ss};function Kt(e,t,a,n){return a==null?({inputs:r,backend:s})=>{let{a:i,b:o}=r,l=s;Ie([i,o],e);let u=l.data.get(i.dataId).values,p=l.data.get(o.dataId).values,c=i.dtype==="string"?C.fromUint8ToStringArray(u):u,d=i.dtype==="string"?C.fromUint8ToStringArray(p):p,h=n||i.dtype,[m,f]=t(i.shape,o.shape,c,d,h);return l.makeTensorInfo(f,h,m)}:({inputs:r,backend:s})=>{let{a:i,b:o}=r,l=s;if(i.dtype==="complex64"||o.dtype==="complex64"){let u=ss({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,m=l.data.get(d.dataId).values,f=ss({inputs:{x:o},backend:l,attrs:{dtype:"complex64"}}),g=l.data.get(f.dataId),y=g.complexTensorInfos.real,x=g.complexTensorInfos.imag,A=l.data.get(y.dataId).values,b=l.data.get(x.dataId).values,[w,I,T]=a(i.shape,o.shape,h,m,A,b),N=l.makeTensorInfo(T,"float32",w),M=l.makeTensorInfo(T,"float32",I),$=Ja({inputs:{real:N,imag:M},backend:l});return l.disposeIntermediateTensorInfo(u),l.disposeIntermediateTensorInfo(f),l.disposeIntermediateTensorInfo(N),l.disposeIntermediateTensorInfo(M),$}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 c3(e){return(t,a,n,r,s,i)=>{let o=C.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=C.getBroadcastDims(t,o),m=C.getBroadcastDims(a,o),f=C.mergeRealAndImagArrays(n,r),g=C.mergeRealAndImagArrays(s,i),y=t.length,x=v.computeStrides(t),A=a.length,b=v.computeStrides(a);if(h.length+m.length===0)for(let w=0;wT[S]=0);let N=v.locToIndex(T,y,x),M=I.slice(-A);m.forEach(S=>M[S]=0);let $=v.locToIndex(M,A,b),E=e(f[N*2],f[N*2+1],g[$*2],g[$*2+1]);c[w]=E.real,d[w]=E.imag}return[c,d,o]}}var y6=_t((e,t)=>e+t),ez=c3((e,t,a,n)=>({real:e+a,imag:t+n})),Ql=Kt(os,y6,ez),tz={kernelName:os,backendName:"cpu",kernelFunc:Ql};function h3(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 x6(e,t,a,n=!1){let r=e.shape[0],s=e.shape[1],i=_e([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}var A6=_t((e,t)=>e&t),az=Kt(pu,A6),nz={kernelName:pu,backendName:"cpu",kernelFunc:az};function or(e){return(t,a,n)=>{let r=v.getArrayFromDType(a,t.length);for(let s=0;s{let{x:i}=n;Ie(i,e);let o=s,l=o.data.get(i.dataId).values,u;if(i.dtype==="string"){if(!Array.isArray(l))throw new Error("String tensor's value was not an instance of Array");u=C.fromUint8ToStringArray(l)}else u=l;let p=a||i.dtype,c=t(u,p,r);return o.makeTensorInfo(i.shape,p,c)}}var b6=or(e=>Math.ceil(e)),rz=hs(vi,b6),sz={kernelName:vi,backendName:"cpu",kernelFunc:rz};function m3(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"?C.fromUint8ToStringArray(i.vals):i.vals,l=0;for(let u=0;ue===t?1:0),w6=Kt(Oi,v6,null,"bool"),iz={kernelName:Oi,backendName:"cpu",kernelFunc:w6},k6=or(e=>Math.exp(e)),I6=hs(zi,k6,"float32"),oz={kernelName:zi,backendName:"cpu",kernelFunc:I6},S6=or(e=>Math.expm1(e)),lz=hs(Li,S6),uz={kernelName:Li,backendName:"cpu",kernelFunc:lz},C6=or(e=>Math.floor(e)),dz=hs(Bi,C6),pz={kernelName:Bi,backendName:"cpu",kernelFunc:dz},T6=_t((e,t)=>Math.floor(e/t)),cz=Kt(Vi,T6,null,"int32"),hz={kernelName:Vi,backendName:"cpu",kernelFunc:cz};function N6(e,t,a,n,r,s,i,o,l){let u=_e([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),mz=Kt(Hi,E6,null,"bool"),fz={kernelName:Hi,backendName:"cpu",kernelFunc:mz},M6=_t((e,t)=>e>=t?1:0),gz=Kt(ji,M6,null,"bool"),yz={kernelName:ji,backendName:"cpu",kernelFunc:gz},$6=_t((e,t)=>ee<=t?1:0),bz=Kt(Qi,P6,null,"bool"),vz={kernelName:Qi,backendName:"cpu",kernelFunc:bz};function _6(e,t,a){let n=(t-e)/(a-1),r=v.makeZerosTypedArray(a,"float32");r[0]=e;for(let s=1;sMath.log(e)),wz=hs(to,F6),kz={kernelName:to,backendName:"cpu",kernelFunc:wz};function D6(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 O6=_t((e,t)=>Math.max(e,t)),Iz=Kt(lo,O6),Sz={kernelName:lo,backendName:"cpu",kernelFunc:Iz},z6=_t((e,t)=>Math.min(e,t)),Cz=Kt(ho,z6),Tz={kernelName:ho,backendName:"cpu",kernelFunc:Cz},f3=_t((e,t)=>e*t),Nz=c3((e,t,a,n)=>({real:e*a-t*n,imag:e*n+t*a})),a0=Kt(yo,f3,Nz),Rz={kernelName:yo,backendName:"cpu",kernelFunc:a0};function L6(e,t,a){let n=v.createScalarValue(-1,a);return f3([],t,n,e,a)}function Ez(e){let{inputs:t,backend:a}=e,{x:n}=t;Ie(n,"neg");let r=a.data.get(n.dataId).values,[s,i]=L6(r,n.shape,n.dtype);return a.makeTensorInfo(i,n.dtype,s)}var Mz={kernelName:Iu,backendName:"cpu",kernelFunc:Ez},W6=_t((e,t)=>e!==t?1:0),$z=Kt(xo,W6,null,"bool"),Pz={kernelName:xo,backendName:"cpu",kernelFunc:$z};function g3(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(x)),a.makeTensorInfo(y,g,m)}var Dz={kernelName:So,backendName:"cpu",kernelFunc:Fz};function Oz(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 zz(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 Lz(e,t,a,n){let r=[],s=0,i=t.length-1+a.length,o=new Array(i).fill(null).map(()=>[0]);zz(a,n);let l=1;for(let u=0;u=0){let f=o[m],g=f[f.length-1]-h[p];for(let y=p;yr[i]=s)}return t}function x5(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&&xy)b=0;else if(b=Math.ceil(Math.abs((x-y)/A)),b>A5)throw new Error(`Requires ((limit - start) / delta) <= ${A5}`);d[g+1]=d[g]+b}let h=d[c],m=v.getArrayFromDType(a,h),f=0;for(let g=0;gn&&(n=s)}return n}static getMaxWidthValueRowID(t){let a=t.length;if(a===0)return 0;let n=0,r=t[0],s=0;for(let i=1;i"Final length of result must be equal to firstDimension."),s}calculateOutputIndexRowSplit(t,a,n,r){let s=t.length,i=[];for(let o=0;o0&&i.length!==t[s-1])throw new Error("Invalid row split size.");return i}calculateOutputIndexValueRowID(t,a,n,r){let s=t.length,i=[];if(s===0)return[];let o=0,l=t[0];if(l>=a.length)throw new Error(`Got currentValueRowId=${l}, which is not less than ${a.length}`);let u=a[l];i.push(u);for(let p=1;p=0&&(++o,o=a.length)throw new Error(`Got nextValueRowId=${c} which is not less than ${a.length}`);u=a[c]}i.push(u)}if(i.length!==t.length)throw new Error("Invalid row ids.");return i}calculateOutputIndex(t,a,n,r){let s=this.getRowPartitionTensor(t),i=this.getRowPartitionTypeByDimension(t);switch(i){case Sn.VALUE_ROWIDS:return this.calculateOutputIndexValueRowID(s,a,n,r);case Sn.ROW_SPLITS:if(s.length-1>a.length)throw new Error(`Row partition size is greater than output size: ${s.length-1} > ${a.length}`);return this.calculateOutputIndexRowSplit(s,a,n,r);default:throw new Error(`Unsupported partition type: ${Sn[i]}`)}}getFirstDimensionSize(){let t=this.rowPartitionValues[0];if(this.rowPartitionTypes.length===0)throw new Error("No row_partition_types given.");let a=this.rowPartitionTypes[0];switch(a){case Sn.FIRST_DIM_SIZE:return t[0];case Sn.VALUE_ROWIDS:throw new Error("Cannot handle VALUE_ROWIDS in first dimension.");case Sn.ROW_SPLITS:return this.rowPartitionValuesShapes[0][0]-1;default:throw new Error(`Cannot handle type ${Sn[a]}`)}}compute(){if(this.rowPartitionValues[0].length<=0)throw new Error("Invalid first partition input. Tensor requires at least one element.");let t=this.getFirstDimensionSize(),a=this.calculateOutputSize(t),n=new Array(this.raggedRank+1);n[n.length-1]=1;for(let i=n.length-2;i>=0;--i)n[i]=n[i+1]*a[i+1];let r=v5(a,!1),s=v.getArrayFromDType(this.valuesDType,v.sizeFromShape(r));if(n[0]*a[0]>0){let i=this.calculateFirstParentOutputIndex(t,n[0],a[0]);for(let o=1;o<=this.raggedRank;++o)i=this.calculateOutputIndex(o-1,i,n[o],a[o]);this.setOutput(this.raggedRank,i,s,r)}return[r,s]}setOutput(t,a,n,r){if(n.length===0)return;let s=this.values,i=n,o=r.slice();o=o.slice(t+1);let l=v.sizeFromShape(o),u=a.length,p=this.defaultValue;if(p.length!==l&&p.length!==1){let m=this.defaultValueShape;De(()=>{let f=Q(p,m);p=Ul(f,o).dataSync()})}let c=0,d=0,h=0;for(let m=0;m<=u;++m){let f=m=u){let g=n.length;f=Math.floor(g/l)}if(f>h)if(this.defaultValue.length===1)i.subarray(h*l,f*l).fill(this.defaultValue[0]),h=f;else for(;f>h;){let g=i.slice(h*l);b5(g,p,l),++h}f<0?(c=m+1,d=h):(c=m,d=h,h=d+1)}}};function b5(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 G6(e,t,a,n,r,s,i,o,l,u){return new Uz(e,t,a,n,r,s,i,o,l,u).compute()}function y3(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)),Gz=hs(Po,H6),Hz={kernelName:Po,backendName:"cpu",kernelFunc:Gz};function qs(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 _e(a,t.dtype);let h=l instanceof Vt?l:_e(p,t.dtype);typeof l=="string"||typeof l=="number"?h.values.fill(l):typeof l=="boolean"&&h.values.fill(+l);for(let m=0;m=n/r)throw new Error(`Invalid indices: ${f} does not index into ${a}`);for(let y=0;y1/(1+Math.exp(-e))),j6=ct(Bo,e=>1/(1+Math.exp(-e))),qz={kernelName:Bo,backendName:"cpu",kernelFunc:j6};function Ah(e,t,a,n,r){let s=Nt.isSliceContinous(n,t,a),i=v.sizeFromShape(a),o=v.computeStrides(n);if(s){let c=Nt.computeFlatOffset(t,o);return r==="string"?e.slice(c,c+i):e.subarray(c,c+i)}let l=r==="string"?C.fromUint8ToStringArray(e):e,u=_e(n,r,l),p=_e(a,r);for(let c=0;cm+t[f]);p.set(u.get(...h),...d)}return r==="string"?C.fromStringArrayToUint8(p.values):p.values}function ti(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{begin:s,size:i}=n;Ie(r,"slice");let[o,l]=Nt.parseSliceParams(r,s,i);Nt.assertParamsValid(r,o,l);let u=a.data.get(r.dataId).values,p=Ah(u,o,l,r.shape,r.dtype);return a.makeTensorInfo(l,r.dtype,p)}var Xz={kernelName:Pu,backendName:"cpu",kernelFunc:ti};function q6(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(C.getSparseFillEmptyRowsIndicesDenseShapeMismatch(o));let g=v.getArrayFromDType(a,0),y=v.getArrayFromDType(r,0);return[g,[0,c],y,u,p]}let d=!0,h=0,m=new Array(l).fill(0);for(let g=0;g=l)throw new Error(C.getSparseFillEmptyRowsOutOfRangeIndexErrorMessage(g,y,l));++m[y],d=d&&y>=h,h=y}let f=!0;for(let g=0;g0&&(m[g]+=m[g-1])}if(f&&d){let g=e,y=n;for(let x=0;x0){d[c-1]=1;for(let f=c-2;f>=0;--f)d[f]=d[f+1]*n[f+1]}let h=[];if(o>0){h[o-1]=1;for(let f=o-2;f>=0;--f)h[f]=h[f+1]*l[f+1]}let m=v.getArrayFromDType(a,i*o);for(let f=0;f0?r[o-1]+1:0;if(p<0)throw new Error(C.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());let c=t.slice();c[0]=p;let d=c.reduce((x,A)=>x*A,1),h=v.getArrayFromDType(a,d);if(o===0)return p>0&&h.fill(i),[h,c];if(p<=0)throw new Error(C.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());let m=0,f=1,g=0,y=r[m];for(;;){let x=0;if(f=x)throw new Error(C.getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage())}if(y<0||y>=p)throw new Error(C.getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage(y,p));y>g&&h.fill(i,g*u,y*u);for(let A=m;A=l[0])throw new Error(C.getSparseSegmentReductionIndicesOutOfRangeErrorMessage(A,n[A],l[0]));for(let w=0;wo)break}return gMath.sqrt(e)),Yz=ct(Uo,e=>Math.sqrt(e)),Zz={kernelName:Uo,backendName:"cpu",kernelFunc:Yz},K6=_t((e,t)=>{let a=e-t;return a*a}),Jz=Kt(qo,K6),Qz={kernelName:qo,backendName:"cpu",kernelFunc:Jz},Y6=or((e,t)=>{let{pattern:a,replaceGlobal:n,rewrite:r}=t;return e.replace(new RegExp(a,n?"g":""),r)}),eL=hs(Cp,Y6),tL={kernelName:Cp,backendName:"cpu",kernelFunc:eL};function Z6(e,t,a,n){let r=_e(e,t.dtype);for(let s=0;s0?0:i-o),d=0;d+=l*this.leftPad.length;for(let y=0;yy.forEach(x=>m[f++]=x);for(let y=0;y0){g(e[c+p-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(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;this.createNGrams(e,l,i,u,1,c)}}return[i,s]}};function A3(e,t,a,n,r,s,i,o){return new aL(a,n,r,s,i,o).compute(e,t)}function nL(e,t,a,n){if(!e.length)return;if(t.length===0){for(let s=0;se-t),rL=c3((e,t,a,n)=>({real:e-a,imag:t-n})),w3=Kt(Ko,J6,rL),sL={kernelName:Ko,backendName:"cpu",kernelFunc:w3};function Q6(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 ev(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));ev(e,t,d,h)}let r=e[t],s=a,i=n;for(v.swap(e,a,t),Cd(e[n],r)>0&&v.swap(e,a,n);s0;)i=i-1}Cd(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 tv(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;cm[A]={value:x,index:A}),n{for(let g=0;gnew p3,1);var av=ct(Fi,e=>e>=0?e:Math.exp(e)-1),oL={kernelName:Fi,backendName:"cpu",kernelFunc:av};function nv(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{alpha:s}=n;Ie([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 rv(e){let{inputs:t,backend:a}=e,{x:n,alpha:r}=t;Ie([n,r],"prelu");let s=a.data.get(n.dataId).values,i=a.data.get(r.dataId).values,[o,l]=uL(n.shape,r.shape,s,i,"float32");return a.makeTensorInfo(l,"float32",o)}var dL={kernelName:Io,backendName:"cpu",kernelFunc:rv},sv=ct(To,e=>Math.max(0,e)),pL={kernelName:To,backendName:"cpu",kernelFunc:sv},iv=ct(Eo,e=>Math.min(Math.max(0,e),6)),cL={kernelName:Eo,backendName:"cpu",kernelFunc:iv};function bh(e,t,a,n,r){if(a==="linear")return ar({inputs:{x:t},backend:e});if(a==="relu")return sv({inputs:{x:t},backend:e});if(a==="elu")return av({inputs:{x:t},backend:e});if(a==="relu6")return iv({inputs:{x:t},backend:e});if(a==="prelu")return rv({inputs:{x:t,alpha:n},backend:e});if(a==="leakyrelu")return nv({inputs:{x:t},backend:e,attrs:{alpha:r}});if(a==="sigmoid")return j6({inputs:{x:t},backend:e});throw new Error(`Activation ${a} has not been implemented for the CPU backend.`)}function bt(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 hL={kernelName:Ru,backendName:"cpu",kernelFunc:bt};function ov(e){let{inputs:t,backend:a,attrs:n}=e,{a:r,b:s}=t,{transposeA:i,transposeB:o}=n;Ie([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],m=r.shape.slice(0,-2),f=s.shape.slice(0,-2),g=v.sizeFromShape(m),y=v.sizeFromShape(f),x=al.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 A=i?[g,p,d]:[g,d,p],b=o?[y,h,c]:[y,c,h],w=bt({inputs:{x:r},backend:a,attrs:{shape:A}}),I=bt({inputs:{x:s},backend:a,attrs:{shape:b}}),T=i?w.shape[1]:w.shape[2],N=i?w.shape[2]:w.shape[1],M=o?I.shape[1]:I.shape[2],$=Math.max(g,y),E=a.data.get(w.dataId).values,S=a.data.get(I.dataId).values,_=v.computeStrides(w.shape),O=v.computeStrides(I.shape),[W,P,U]=i?[_[0],1,_[1]]:[_[0],_[1],1],[G,q,H]=o?[1,O[1],O[0]]:[O[1],1,O[0]],V=N*M,Z=_e([$,N,M],w.dtype),X=Z.values,re=a.blockSize;for(let ee=0;ee<$;ee++){let ge=ee%g,ie=ee%y;for(let be=0;beMath.acos(e)),xL={kernelName:oi,backendName:"cpu",kernelFunc:yL},AL=ct(li,e=>Math.acosh(e)),bL={kernelName:li,backendName:"cpu",kernelFunc:AL};function vL(e){let{inputs:t,backend:a}=e,n=t;Ie(t,"addN");let r=n.map(o=>a.data.get(o.dataId).values),s=_e(n[0].shape,n[0].dtype),i=s.values;for(let o=0;ox&&(x=w,A=b)}h[g]=A}return u.forEach(g=>a.disposeIntermediateTensorInfo(g)),a.makeTensorInfo(p,"int32",h)}var NL={kernelName:ou,backendName:"cpu",kernelFunc:TL};function RL(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s}=n;Ie(r,"argMin");let i=v.parseAxisParam(s,r.shape),o=C.getAxesPermutation(i,r.shape.length),l=r,u=[];o!=null&&(l=Va({inputs:{x:r},backend:a,attrs:{perm:o}}),u.push(l),i=C.getInnerMostAxes(i.length,l.shape.length)),i=[i[0]],C.assertAxesAreInnerMostDims("argMin",i,l.shape.length);let[p,c]=C.computeOutAndReduceShapes(l.shape,i),d=v.sizeFromShape(p),h=v.makeZerosTypedArray(d,"int32"),m=v.sizeFromShape(c),f=a.data.get(l.dataId).values;for(let g=0;ga.disposeIntermediateTensorInfo(g)),a.makeTensorInfo(p,"int32",h)}var EL={kernelName:lu,backendName:"cpu",kernelFunc:RL},ML=ct(ci,e=>Math.asin(e)),$L={kernelName:ci,backendName:"cpu",kernelFunc:ML},PL=ct(hi,e=>Math.asinh(e)),_L={kernelName:hi,backendName:"cpu",kernelFunc:PL},FL=ct(mi,e=>Math.atan(e)),DL={kernelName:mi,backendName:"cpu",kernelFunc:FL},OL=_t((e,t)=>Math.atan2(e,t)),zL=Kt(gi,OL),LL={kernelName:gi,backendName:"cpu",kernelFunc:zL},WL=ct(fi,e=>Math.atanh(e)),BL={kernelName:fi,backendName:"cpu",kernelFunc:WL};function I3(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,m=s==="max"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,f=_e(r.outShape,a),g=f.values,y=r.outShape[1]*r.outShape[2]*r.outShape[3],x=r.outShape[2]*r.outShape[3],A=r.outShape[3];for(let b=0;bU?U=ee:s==="avg"&&(G+=ee,q++)}if(isNaN(U))break}let H=S+_*A+T;g[H]=s==="avg"?G/q:U}}}return f}function lv(e,t,a,n,r=!1,s=!1){let i=_e(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,m=n.padInfo.left,f=_e(t,a,e);for(let g=0;g$&&($=P,r?E=s?((g*n.inHeight+S)*n.inWidth+O)*n.inChannels+y:(S*n.inWidth+O)*n.inChannels+y:E=_*d+W)}}i.set(E,g,x,I,y)}}return i}function uv(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,m=r.effectiveFilterWidth,f=r.padInfo.front,g=r.padInfo.top,y=r.padInfo.left,x=s==="max"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,A=_e(r.outShape,a),b=A.values,w=r.outShape[1]*r.outShape[2]*r.outShape[3]*r.outShape[4],I=r.outShape[2]*r.outShape[3]*r.outShape[4],T=r.outShape[3]*r.outShape[4],N=r.outShape[4];for(let M=0;Mbe?be=xt:s==="avg"&&(Ce+=xt,Re++),isNaN(be))break}if(isNaN(be))break}if(isNaN(be))break}let Le=ie+S;b[Le]=s==="avg"?Ce/Math.max(Re,1):be}}}}return A}function VL(e,t){let a=_e(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,m=t.padInfo.left;for(let f=0;f=_&&(_=V,O=P*p*c+G*p+H)}}}a.set(O,f,y,w,M,g)}}}return a}function UL(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t;Ie(r,"avgPool");let{filterSize:s,strides:i,pad:o,dimRoundingMode:l}=n,u=1;v.assert(C.eitherStridesOrDilationsAreOne(i,u),()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${i} and dilations '${u}'`);let p=C.computePool2DInfo(r.shape,s,i,u,o,l),c;if(p.filterWidth===1&&p.filterHeight===1&&v.arraysEqual(p.inShape,p.outShape))c=ar({inputs:{x:r},backend:a});else{let d=a.data.get(r.dataId).values,h=v.computeStrides(r.shape),m=I3(d,r.shape,r.dtype,h,p,"avg");c=a.makeTensorInfo(p.outShape,r.dtype,m.values)}return c}var GL={kernelName:yi,backendName:"cpu",kernelFunc:UL};function HL(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{filterSize:s,strides:i,pad:o,dimRoundingMode:l,dataFormat:u}=n;Ie(r,"avgPool3d");let p=C.computePool3DInfo(r.shape,s,i,1,o,l,u),c=a.data.get(r.dataId).values,d=uv(c,r.shape,r.dtype,v.computeStrides(r.shape),p,"avg");return a.makeTensorInfo(d.shape,"float32",d.values)}var jL={kernelName:uu,backendName:"cpu",kernelFunc:HL};function qL(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,input:s}=t,{filterSize:i,strides:o,pad:l,dimRoundingMode:u}=n;Ie([r,s],"avgPool3DGrad");let p=C.computePool3DInfo(s.shape,i,o,1,l,u),c=p.strideDepth,d=p.strideHeight,h=p.strideWidth,m=p.filterDepth,f=p.filterHeight,g=p.filterWidth,y=p.dilationDepth,x=p.dilationHeight,A=p.dilationWidth,b=p.effectiveFilterDepth,w=p.effectiveFilterHeight,I=p.effectiveFilterWidth,T=b-1-p.padInfo.front,N=I-1-p.padInfo.left,M=w-1-p.padInfo.top,$=_e(s.shape,"float32"),E=1/(m*f*g),S=a.bufferSync(r);for(let _=0;_=p.outDepth||Math.floor(X)!==X))for(let re=0;re=p.outHeight||Math.floor(ee)!==ee))for(let ge=0;ge=p.outWidth||Math.floor(ie)!==ie)continue;let be=S.get(_,X,ee,ie,O);V+=be}}}$.set(V*E,_,W,P,U,O)}return a.makeTensorInfo($.shape,$.dtype,$.values)}var XL={kernelName:dp,backendName:"cpu",kernelFunc:qL};function KL(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,input:s}=t,i=s;Ie([r,s],"avgPoolGrad");let{filterSize:o,strides:l,pad:u}=n,p=C.computePool2DInfo(i.shape,o,l,1,u),c=p.strideHeight,d=p.strideWidth,h=p.filterHeight,m=p.filterWidth,f=p.dilationHeight,g=p.dilationWidth,y=p.effectiveFilterHeight,x=p.effectiveFilterWidth,A=x-1-p.padInfo.left,b=y-1-p.padInfo.top,w=_e(i.shape,"float32"),I=1/(h*m),T=a.data.get(r.dataId).values,N=_e(r.shape,"float32",T);for(let M=0;M=p.outHeight||Math.floor(U)!==U))for(let G=0;G=p.outWidth||Math.floor(q)!==q)continue;let H=N.get(M,U,q,$);W+=H}}w.set(W*I,M,E,S,$)}return a.makeTensorInfo(w.shape,w.dtype,w.values)}var YL={kernelName:up,backendName:"cpu",kernelFunc:KL};function ZL(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."),Ie([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]),m=i?a.data.get(i.dataId).values:new Float32Array([0]),f=new Float32Array(p.length),g=m.length,y=h.length,x=d.length,A=c.length,b=0,w=0,I=0,T=0;for(let N=0;N=g&&(b=0),w>=A&&(w=0),I>=y&&(I=0),T>=x&&(T=0);return a.makeTensorInfo(r.shape,r.dtype,f)}var JL={kernelName:Ui,backendName:"cpu",kernelFunc:ZL};function QL(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{blockShape:s,crops:i}=n;Ie([r],"batchToSpaceND");let o=s.reduce((y,x)=>y*x),l=C.getReshaped(r.shape,s,o),u=C.getPermuted(l.length,s.length),p=C.getReshapedPermuted(r.shape,s,o),c=C.getSliceBeginCoords(i,s.length),d=C.getSliceSize(p,i,s.length),h=bt({inputs:{x:r},backend:a,attrs:{shape:l}}),m=Va({inputs:{x:h},backend:a,attrs:{perm:u}}),f=bt({inputs:{x:m},backend:a,attrs:{shape:p}}),g=ti({inputs:{x:f},backend:a,attrs:{begin:c,size:d}});return a.disposeIntermediateTensorInfo(h),a.disposeIntermediateTensorInfo(m),a.disposeIntermediateTensorInfo(f),g}var eW={kernelName:du,backendName:"cpu",kernelFunc:QL};function tW(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=h3(o,l,s.dtype,s.shape,i);return a.makeTensorInfo([i],s.dtype,u)}var aW={kernelName:Ai,backendName:"cpu",kernelFunc:tW};function nW(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=C.assertAndGetBroadcastShape(Array.from(s),Array.from(i));return a.makeTensorInfo([o.length],"int32",Int32Array.from(o))}var rW={kernelName:cu,backendName:"cpu",kernelFunc:nW},sW=ct(ls,(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;uf.shape);C.assertParamsConsistent(i,s);let o=C.computeOutShape(t.map(f=>f.shape),s);if(v.sizeFromShape(o)===0)return a.makeTensorInfo(o,t[0].dtype,[]);let l=t.filter(f=>v.sizeFromShape(f.shape)>0);if(l.length===1)return ar({inputs:{x:l[0]},backend:a});if(l[0].dtype==="complex64"){let f=l.map(b=>ei({inputs:{input:b},backend:a})),g=l.map(b=>eu({inputs:{input:b},backend:a})),y=tu({inputs:f,backend:a,attrs:{axis:s}}),x=tu({inputs:g,backend:a,attrs:{axis:s}}),A=Ja({inputs:{real:y,imag:x},backend:a});return f.forEach(b=>a.disposeIntermediateTensorInfo(b)),g.forEach(b=>a.disposeIntermediateTensorInfo(b)),a.disposeIntermediateTensorInfo(y),a.disposeIntermediateTensorInfo(x),A}let u=l.map(f=>{let g=[-1,v.sizeFromShape(f.shape.slice(s))];return bt({inputs:{x:f},backend:a,attrs:{shape:g}})}),p=u.map(f=>({vals:a.data.get(f.dataId).values,shape:f.shape}));o=C.computeOutShape(u.map(f=>f.shape),1);let c=u[0].shape[0]===1,d=m3(p,o,t[0].dtype,c),h=C.computeOutShape(l.map(f=>f.shape),s),m=a.makeTensorInfo(h,t[0].dtype,d);return u.forEach(f=>a.disposeIntermediateTensorInfo(f)),m}var dW={kernelName:hu,backendName:"cpu",kernelFunc:tu};function dv(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;Ie([r,s],"conv2d");let c=C.convertConv2DDataFormat(l),d=C.computeConv2DInfo(r.shape,s.shape,i,u,o,p,!1,c),h=d.filterHeight,m=d.filterWidth,f=d.dilationHeight,g=d.dilationWidth,y=d.padInfo.left,x=d.padInfo.top,A=d.dataFormat==="channelsLast",b=new Vt(d.outShape,r.dtype),w=v.computeStrides(r.shape),I=v.computeStrides(s.shape),T=w[0],N=A?w[1]:w[2],M=A?w[2]:1,$=A?1:w[1],E=b.strides[0],S=A?b.strides[1]:b.strides[2],_=A?b.strides[2]:1,O=A?1:b.strides[1],W=a.data.get(r.dataId).values,P=a.data.get(s.dataId).values,U=b.values;for(let G=0;G=d.inHeight)continue;let ge=re*I[0],ie=q+ee*N;for(let be=0;be=d.inWidth)continue;let gt=ge+Le*I[1],dt=ie+qe*M,st=gt;for(let it=0;it=u.inDepth)continue;let G=P*M[0],q=E+U*N[1];for(let H=0;H=u.inHeight)continue;let ee=G+X*M[1],ge=q+re*N[2];for(let ie=0;ie=u.inWidth)continue;let qe=ee+Re*M[2],gt=ge+Le*u.inChannels,dt=qe;for(let st=0;stMath.cos(e)),kW={kernelName:Ci,backendName:"cpu",kernelFunc:wW},IW=ct(Ti,e=>Math.cosh(e)),SW={kernelName:Ti,backendName:"cpu",kernelFunc:IW};function CW(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,m=s.shape[0],[f,g]=o,y=_e([m,f,g,h],"float32"),x=a.data.get(s.dataId).values,A=a.data.get(i.dataId).values,b=a.data.get(r.dataId).values,w=v.computeStrides(r.shape),I=v.computeStrides(y.shape);for(let T=0;T=p)continue;let O=f>1?(E-M)*(c-1)/(f-1):0,W=g>1?(S-$)*(d-1)/(g-1):0;for(let P=0;P1?M*(c-1)+P*O:.5*(M+E)*(c-1);if(U<0||U>c-1){for(let G=0;G1?$*(d-1)+V*W:.5*($+S)*(d-1);if(Z<0||Z>d-1){for(let ge=0;ge1?$*(d-1)+G*W:.5*($+S)*(d-1);if(q<0||q>d-1){for(let Z=0;Zy+m-x-1:(y,x)=>y+x;for(let y=0;yy+m-x-1:(y,x)=>y+x;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],p=r.shape[3],c=l*s,d=u*s,h=p/(s*s),m=a.data.get(r.dataId).values,f=new Float32Array(o*c*d*h),g=0;for(let y=0;y`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${i} and dilations '${d}'`);let h=C.computeConv2DInfo(r.shape,s.shape,i,d,o,u,!0),{filterHeight:m,filterWidth:f,dilationHeight:g,dilationWidth:y,padInfo:x}=h,A=x.left,b=x.top,w=h.outChannels/h.inChannels,I=new Vt(h.outShape,r.dtype),T=a.data.get(r.dataId).values,N=a.data.get(s.dataId).values,M=I.values;for(let $=0;$=h.inHeight)continue;let G=P*c[0],q=E+U*p[1];for(let H=0;H=h.inWidth)continue;let ee=G+X*c[1],ge=q+re*h.inChannels,ie=V,be=ee;for(let Ce=0;Ce{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:m,inWidth:f,inChannels:g,outHeight:y,outWidth:x,padInfo:A,strideHeight:b,strideWidth:w,filterHeight:I,filterWidth:T,dilationHeight:N,dilationWidth:M,outShape:$}=C.computeDilation2DInfo(n.shape,r.shape,s,i,"NHWC",o),E=v.sizeFromShape($),S=$.length,_=v.getArrayFromDType(n.dtype,E);for(let O=0;O=0&&X=0&&eeH&&(H=be)}}}let V=v.locToIndex([O,W,U,q],S,v.computeStrides($));_[V]=H}}}return{dataId:l.write(v.toTypedArray(_,n.dtype),$,n.dtype),shape:$,dtype:n.dtype}}},GW={kernelName:ql,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:m,inChannels:f,outHeight:g,outWidth:y,padInfo:x,strideHeight:A,strideWidth:b,filterHeight:w,filterWidth:I,dilationHeight:T,dilationWidth:N,outShape:M}=C.computeDilation2DInfo(n.shape,r.shape,i,o,"NHWC",l);v.assert(s.rank===M.length,()=>`Error in ${ql}, dy must have the same rank as output ${M.length}, but got ${s.rank}`);let $=v.toNestedArray(M,u.data.get(s.dataId).values),E=v.makeZerosNestedTypedArray(r.shape,r.dtype);for(let S=0;S=0&&Z=0&&reG&&(G=ee,q=V,H=X)}}}E[q][H][U]+=$[S][_][W][U]}}}return{dataId:u.write(v.toTypedArray(E,n.dtype),r.shape,r.dtype),shape:r.shape,dtype:r.dtype}}},HW={kernelName:jl,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:m,inChannels:f,outHeight:g,outWidth:y,padInfo:x,strideHeight:A,strideWidth:b,filterHeight:w,filterWidth:I,dilationHeight:T,dilationWidth:N,outShape:M}=C.computeDilation2DInfo(n.shape,r.shape,i,o,"NHWC",l);v.assert(s.rank===M.length,()=>`Error in ${jl}, dy must have the same rank as output ${M.length}, but got ${s.rank}`);let $=v.toNestedArray(M,u.data.get(s.dataId).values),E=v.makeZerosNestedTypedArray(n.shape,n.dtype);for(let S=0;S=0&&Z=0&&reG&&(G=ee,q=Z,H=re)}}}E[S][q][H][U]+=$[S][_][W][U]}}}return{dataId:u.write(v.toTypedArray(E,n.dtype),n.shape,n.dtype),shape:n.shape,dtype:n.dtype}}};function jW(e){let{inputs:t,backend:a,attrs:n}=e,{image:r}=t,{canvas:s,options:i}=n,{contextOptions:o,imageOptions:l}=i||{},u=(l==null?void 0:l.alpha)||1,p=(o==null?void 0:o.contextType)||"2d";if(p!=="2d")throw new Error(`Context type ${o.contextType} is not supported by the CPU backend.`);let c=s.getContext(p,(o==null?void 0:o.contextAttributes)||{});if(c==null)throw new Error(`Could not get the context with ${p} type.`);let[d,h]=r.shape.slice(0,2),m=r.shape.length===2?1:r.shape[2],f=a.data.get(r.dataId).values,g=r.dtype==="float32"?255:1,y=new Uint8ClampedArray(h*d*4);for(let A=0;A1)throw new Error(`Tensor values for a float32 Tensor must be in the range [0 - 1] but encountered ${T}.`)}else if(r.dtype==="int32"&&(T<0||T>255))throw new Error(`Tensor values for a int32 Tensor must be in the range [0 - 255] but encountered ${T}.`);m===1?(b[0]=T*g,b[1]=T*g,b[2]=T*g):b[I]=T*g}let w=A*4;y[w+0]=Math.round(b[0]),y[w+1]=Math.round(b[1]),y[w+2]=Math.round(b[2]),y[w+3]=Math.round(b[3])}s.width=h,s.height=d;let x=new ImageData(y,h,d);return c.putImageData(x,0,0),r}var qW={kernelName:gp,backendName:"cpu",kernelFunc:jW};function Kp(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,keepDims:i}=n;Ie(r,"sum");let o;r.dtype==="bool"?o=ss({inputs:{x:r},backend:a,attrs:{dtype:"int32"}}):o=ar({inputs:{x:r},backend:a});let l=o.shape.length,u=v.parseAxisParam(s,o.shape),p=C.getAxesPermutation(u,l),c=u,d=o;p!=null&&(d=Va({inputs:{x:o},backend:a,attrs:{perm:p}}),c=C.getInnerMostAxes(c.length,l)),C.assertAxesAreInnerMostDims("sum",c,d.shape.length);let[h,m]=C.computeOutAndReduceShapes(d.shape,c),f=C.upcastType(d.dtype,"int32"),g=xh(a,h,f),y=v.sizeFromShape(m),x=a.data.get(g.dataId).values,A=a.data.get(d.dataId).values;for(let b=0;b=0&&(d=Kp({inputs:{x:d},backend:a,attrs:{axis:u[f]-(i.length-h),keepDims:!1}}),m.push(d)),h--)}for(let f of m)f!==d&&a.disposeIntermediateTensorInfo(f);return d}var YW={kernelName:yp,backendName:"cpu",kernelFunc:KW};function ZW(e){let{inputs:t,backend:a}=e,{dy:n,y:r}=t;Ie([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=0?s[l]=o[l]:s[l]=o[l]*(u+1)}return a.makeTensorInfo(r.shape,"float32",s)}var JW={kernelName:yu,backendName:"cpu",kernelFunc:ZW},QW=C.ERF_P,eB=C.ERF_A1,tB=C.ERF_A2,aB=C.ERF_A3,nB=C.ERF_A4,rB=C.ERF_A5,sB=ct(Di,e=>{let t=Math.sign(e),a=Math.abs(e),n=1/(1+QW*a);return t*(1-((((rB*n+nB)*n+aB)*n+tB)*n+eB)*n*Math.exp(-a*a))}),iB={kernelName:Di,backendName:"cpu",kernelFunc:sB};function vh(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),bt({inputs:{x:r},backend:a,attrs:{shape:o}})}var oB={kernelName:xu,backendName:"cpu",kernelFunc:vh},lB=_t((e,t)=>e/t),S3=Kt(_i,lB),P1={kernelName:_i,backendName:"cpu",kernelFunc:S3};function cv(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&&x=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=C.segment_util.collectGatherOpShapeInfo(r,s,l,c),m=bt({inputs:{x:r},backend:a,attrs:{shape:[h.batchSize,h.outerSize,h.dimSize,h.sliceSize]}}),f=bt({inputs:{x:s},backend:a,attrs:{shape:[h.batchSize,d/h.batchSize]}}),g=[h.batchSize,h.outerSize,d/h.batchSize,h.sliceSize],y=a.bufferSync(f),x=a.bufferSync(m),A=R6(x,y,g);return a.disposeIntermediateTensorInfo(m),a.disposeIntermediateTensorInfo(f),a.makeTensorInfo(h.outputShape,A.dtype,A.values)}var IB={kernelName:bu,backendName:"cpu",kernelFunc:kB};function SB(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=bt({inputs:{x:n},backend:a,attrs:{shape:[i,s]}}),l=cv(o,!0,a),u=bt({inputs:{x:l},backend:a,attrs:{shape:n.shape}});return a.disposeIntermediateTensorInfo(o),a.disposeIntermediateTensorInfo(l),u}var CB={kernelName:Ap,backendName:"cpu",kernelFunc:SB},TB=ct(Xi,e=>Number.isFinite(e)?1:0,"bool"),NB={kernelName:Xi,backendName:"cpu",kernelFunc:TB},RB=ct(Ki,e=>Math.abs(e)===1/0?1:0,"bool"),EB={kernelName:Ki,backendName:"cpu",kernelFunc:RB},MB=ct(Yi,e=>Number.isNaN(e)?1:0,"bool"),$B={kernelName:Yi,backendName:"cpu",kernelFunc:MB};function PB(e){let{backend:t,attrs:a}=e,{start:n,stop:r,num:s}=a,i=_6(n,r,s);return t.makeTensorInfo([i.length],"float32",i)}var _B={kernelName:eo,backendName:"cpu",kernelFunc:PB},FB=ct(ao,e=>Math.log1p(e)),DB={kernelName:ao,backendName:"cpu",kernelFunc:FB},OB=_t((e,t)=>e&&t),zB=Kt(no,OB,null,"bool"),LB={kernelName:no,backendName:"cpu",kernelFunc:zB},WB=ct(ro,e=>e?0:1,"bool"),BB={kernelName:ro,backendName:"cpu",kernelFunc:WB},VB=_t((e,t)=>e||t),UB=Kt(so,VB,null,"bool"),GB={kernelName:so,backendName:"cpu",kernelFunc:UB};function HB(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{depthRadius:s,bias:i,alpha:o,beta:l}=n;Ie(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 m(f){let g=f%u,y=f-g+Math.max(0,g-s),x=f-g+Math.min(g+s,p),A=0;for(;y<=x;y++){let b=c[y];A+=b*b}return A}for(let f=0;f`Error in maxPool: Either strides or dilations must be 1. Got strides ${i} and dilations '${u}'`);let p=C.computePool2DInfo(r.shape,s,i,u,o,l),c;if(p.filterWidth===1&&p.filterHeight===1&&v.arraysEqual(p.inShape,p.outShape))c=ar({inputs:{x:r},backend:a});else{let d=a.data.get(r.dataId).values,h=v.computeStrides(r.shape),m=I3(d,r.shape,r.dtype,h,p,"max");c=a.makeTensorInfo(p.outShape,r.dtype,m.values)}return c}var ZB={kernelName:uo,backendName:"cpu",kernelFunc:YB};function JB(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{filterSize:s,strides:i,pad:o,dimRoundingMode:l,dataFormat:u}=n;Ie(r,"maxPool3d");let p=C.computePool3DInfo(r.shape,s,i,1,o,l,u),c=a.data.get(r.dataId).values,d=uv(c,r.shape,r.dtype,v.computeStrides(r.shape),p,"max");return a.makeTensorInfo(d.shape,"float32",d.values)}var QB={kernelName:wu,backendName:"cpu",kernelFunc:JB};function eV(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,input:s}=t,{filterSize:i,strides:o,pad:l,dimRoundingMode:u}=n;Ie([r,s],"maxPool3DGrad");let p=C.computePool3DInfo(s.shape,i,o,1,l,u),c=a.bufferSync(s),d=VL(c,p),h=p.strideDepth,m=p.strideHeight,f=p.strideWidth,g=p.dilationDepth,y=p.dilationHeight,x=p.dilationWidth,A=p.effectiveFilterDepth,b=p.effectiveFilterHeight,w=p.effectiveFilterWidth,I=A-1-p.padInfo.front,T=w-1-p.padInfo.left,N=b-1-p.padInfo.top,M=_e(s.shape,"float32"),$=a.bufferSync(r);for(let E=0;E=p.outDepth||Math.floor(V)!==V))for(let Z=0;Z=p.outHeight||Math.floor(X)!==X))for(let re=0;re=p.outWidth||Math.floor(ee)!==ee)continue;let ge=A*b*w-1-d.get(E,V,X,ee,S),ie=H*b*w+Z*w+re,be=ge===ie?1:0;if(be===0)continue;let Ce=$.get(E,V,X,ee,S);q+=Ce*be}}}M.set(q,E,_,O,W,S)}return a.makeTensorInfo(M.shape,M.dtype,M.values)}var tV={kernelName:wp,backendName:"cpu",kernelFunc:eV};function aV(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,input:s,output:i}=t,o=s;Ie([s,i],"maxPoolGrad");let{filterSize:l,strides:u,pad:p,dimRoundingMode:c}=n,d=C.computePool2DInfo(o.shape,l,u,1,p,c),h=a.data.get(o.dataId).values,m=_e(d.outShape,o.dtype,lv(h,o.shape,o.dtype,d).values),f=d.strideHeight,g=d.strideWidth,y=d.dilationHeight,x=d.dilationWidth,A=d.effectiveFilterHeight,b=d.effectiveFilterWidth,w=b-1-d.padInfo.left,I=A-1-d.padInfo.top,T=_e(o.shape,"float32"),N=a.data.get(r.dataId).values,M=_e(r.shape,"float32",N);for(let $=0;$=d.outHeight||Math.floor(G)!==G))for(let q=0;q=d.outWidth||Math.floor(H)!==H)continue;let V=A*b-1-m.get($,G,H,E),Z=U*b+q,X=V===Z?1:0;if(X===0)continue;let re=M.get($,G,H,E);P+=re*X}}T.set(P,$,S,_,E)}return a.makeTensorInfo(T.shape,T.dtype,T.values)}var nV={kernelName:vp,backendName:"cpu",kernelFunc:aV};function rV(e,t,a,n,r){let s=v.computeStrides(t),i=I3(e,t,a,s,r,"max"),o=lv(e,t,a,r,!0,n);return[i.values,o.values]}var sV={kernelName:ku,backendName:"cpu",kernelFunc:({inputs:e,attrs:t,backend:a})=>{let{x:n}=e,{filterSize:r,strides:s,pad:i,includeBatchInIndex:o}=t,l=a;Ie(n,"MaxPoolWithArgmax");let u=l.data.get(n.dataId).values,p=C.computePool2DInfo(n.shape,r,s,[1,1],i),[c,d]=rV(u,n.shape,n.dtype,o,p),h=l.write(c,p.outShape,n.dtype),m=l.write(d,p.outShape,n.dtype);return[{dataId:h,shape:p.outShape,dtype:n.dtype},{dataId:m,shape:p.outShape,dtype:"int32"}]}};function iV(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,keepDims:i}=n,o=v.parseAxisParam(s,r.shape),l=C.computeOutAndReduceShapes(r.shape,o)[1],u=v.sizeFromShape(l),p=[],c=a.makeTensorInfo([],"float32",new Float32Array([u]));p.push(c);let d=ss({inputs:{x:r},backend:a,attrs:{dtype:"float32"}});p.push(d);let h=S3({inputs:{a:d,b:c},backend:a});p.push(h);let m=Kp({inputs:{x:h},backend:a,attrs:{axis:s,keepDims:i}});return p.forEach(f=>a.disposeIntermediateTensorInfo(f)),m}var oV={kernelName:po,backendName:"cpu",kernelFunc:iV};function lV(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,keepDims:i}=n;Ie(r,"min");let o=v.parseAxisParam(s,r.shape),l=o,u=C.getAxesPermutation(l,r.shape.length),p=r;u!=null&&(p=Va({inputs:{x:r},backend:a,attrs:{perm:u}}),l=C.getInnerMostAxes(l.length,r.shape.length)),C.assertAxesAreInnerMostDims("min",l,p.shape.length);let[c,d]=C.computeOutAndReduceShapes(p.shape,l),h=v.sizeFromShape(d),m=v.makeZerosTypedArray(v.sizeFromShape(c),p.dtype),f=a.data.get(p.dataId).values;for(let y=0;yx[0]+r.shape[A]+x[1]),l=s.map(x=>x[0]),u=s.map((x,A)=>x[0]+r.shape[A]),p=i==="reflect"?0:1,c=a.data.get(r.dataId).values,d=r.shape.length,h=v.computeStrides(r.shape),m=v.sizeFromShape(o),f=o.length,g=v.computeStrides(o),y=v.getTypedArrayFromDType(r.dtype,m);for(let x=0;x=u[w]&&(A[w]=(u[w]-1)*2-A[w]+p);A=A.map((w,I)=>w-l[I]);let b=v.locToIndex(A,d,h);y[x]=c[b]}return{dataId:a.write(y,o,r.dtype),shape:o,dtype:r.dtype}}var pV={kernelName:mo,backendName:"cpu",kernelFunc:dV},cV=_t((e,t)=>{let a=e%t;return e<0&&t<0||e>=0&&t>=0?a:(a+t)%t}),hV=Kt(fo,cV),mV={kernelName:fo,backendName:"cpu",kernelFunc:hV},fV=nu(hA());function mv(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=hv({inputs:{x:r},backend:a,attrs:{reductionIndices:l,keepDims:!1}}),p=C.expandShapeToKeepDim(u.shape,l),c=bt({inputs:{x:u},backend:a,attrs:{shape:p}}),d=w3({inputs:{a:r,b:c},backend:a}),h=I6({inputs:{x:d},backend:a}),m=Kp({inputs:{x:h},backend:a,attrs:{axis:l,keepDims:!1}}),f=bt({inputs:{x:m},backend:a,attrs:{shape:p}}),g=S3({inputs:{a:h,b:f},backend:a});return a.disposeIntermediateTensorInfo(u),a.disposeIntermediateTensorInfo(c),a.disposeIntermediateTensorInfo(d),a.disposeIntermediateTensorInfo(h),a.disposeIntermediateTensorInfo(m),a.disposeIntermediateTensorInfo(f),g}var gV={kernelName:Ho,backendName:"cpu",kernelFunc:mv};function yV(e){let{inputs:t,backend:a,attrs:n}=e,{logits:r}=t,{numSamples:s,seed:i,normalized:o}=n;Ie(r,"multinomial");let l=o?r:mv({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 m=0;m=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=vh({inputs:{input:p},backend:a,attrs:{dim:r}});return o.push(c),c}),u=tu({inputs:l,backend:a,attrs:{axis:r}});return o.forEach(p=>a.disposeIntermediateTensorInfo(p)),u}var $V={kernelName:Tu,backendName:"cpu",kernelFunc:gv};function PV(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{paddings:s,constantValue:i}=n;Ie(r,"pad");let o=s.map((y,x)=>y[0]+r.shape[x]+y[1]),l=s.map(y=>y[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),m=o.length,f=v.computeStrides(o),g=v.getTypedArrayFromDType(r.dtype,h);i!==0&&g.fill(i);for(let y=0;yb+l[w]),A=v.locToIndex(x,m,f);g[A]=u[y]}return{dataId:a.write(g,o,r.dtype),shape:o,dtype:r.dtype}}var yv={kernelName:wo,backendName:"cpu",kernelFunc:PV},_V=_t((e,t)=>Math.pow(e,t)),FV=Kt(ko,_V),DV={kernelName:ko,backendName:"cpu",kernelFunc:FV};function OV(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),p=a.data.get(s.dataId).values,c=a.data.get(i.dataId).values,[d,h,m]=V6(l,u,p,s.shape,s.dtype,c,i.shape,o),f=d.map(y=>a.makeTensorInfo([y.length],"int32",y)),g=a.makeTensorInfo(m,s.dtype,h);return f.concat([g])}var zV={kernelName:$h,backendName:"cpu",kernelFunc:OV};function LV(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]=U6(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 WV={kernelName:Ph,backendName:"cpu",kernelFunc:LV};function BV(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),[m,f]=G6(u,r.shape,p,s.shape,s.dtype,c,i.shape,d,h,l);return a.makeTensorInfo(m,s.dtype,f)}var VV={kernelName:_h,backendName:"cpu",kernelFunc:BV};function UV(e){let{backend:t,attrs:a}=e,{start:n,stop:r,dtype:s,step:i}=a,o=y3(n,r,i,s);return t.makeTensorInfo([o.length],s,o)}var GV={kernelName:Nu,backendName:"cpu",kernelFunc:UV},HV=ct(Co,e=>1/e),jV={kernelName:Co,backendName:"cpu",kernelFunc:HV};function qV(e){let{inputs:t,backend:a,attrs:n}=e,{images:r}=t,{alignCorners:s,halfPixelCenters:i,size:o}=n;Ie(r,"resizeBilinear");let l=v.computeStrides(r.shape),[u,p]=o,[c,d,h,m]=r.shape,f=a.data.get(r.dataId).values,g=new Float32Array(v.sizeFromShape([c,u,p,m])),y=[s&&u>1?d-1:d,s&&p>1?h-1:h],x=[s&&u>1?u-1:u,s&&p>1?p-1:p],A=0,b=y[0]/x[0],w=y[1]/x[1];for(let I=0;I1?u-1:u,i&&h>1?p-1:p],g=[i&&d>1?d-1:d,i&&h>1?h-1:h],y=f[0]/g[0],x=f[1]/g[1],A=a.data.get(s.dataId).values,b=0;for(let w=0;w1?d-1:d,s&&p>1?h-1:h],x=[s&&u>1?u-1:u,s&&p>1?p-1:p],A=y[0]/x[0],b=y[1]/x[1],w=0;for(let I=0;I1?p-1:p,i&&m>1?c-1:c],x=[i&&h>1?h-1:h,i&&m>1?m-1:m],A=y[0]/x[0],b=y[1]/x[1],w=1/A,I=1/b,T=Math.ceil(w)*2+2,N=Math.ceil(I)*2+2;for(let M=0;M=h)continue;let X=$+Z*l[1],re=Z*A,ee=Math.min(p-1,i?Math.round(re):Math.floor(re));if(E===ee)for(let ge=0;ge=m)continue;let be=X+ie*l[2],Ce=ie*b,Re=Math.min(c-1,i?Math.round(Ce):Math.floor(Ce));W===Re&&(H+=g[be+q])}}f[P+q]=H}}}}return a.makeTensorInfo(r.shape,r.dtype,f)}var eU={kernelName:Eu,backendName:"cpu",kernelFunc:QV};function tU(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{dims:s}=n;Ie(r,"reverse");let i=r.shape.length,o=v.parseAxisParam(s,r.shape);if(i===0)return ar({inputs:{x:r},backend:a});let l=new Vt(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 aU={kernelName:Mo,backendName:"cpu",kernelFunc:tU},nU={kernelName:el,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,m]=C.getImageCenter(i,p,c),f=255,g=Math.sin(r),y=Math.cos(r),x=o.data.get(n.dataId).values;for(let A=0;A=0&&_=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}),sU={kernelName:$o,backendName:"cpu",kernelFunc:rU};function iU(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}=C.calculateShapes(s,r,i),d=!0,h=a.bufferSync(r),m=a.bufferSync(s),f=qs(h,m,i,c,u,l,o,p,0,d);return a.makeTensorInfo(i,f.dtype,f.values)}var oU={kernelName:_o,backendName:"cpu",kernelFunc:iU};function lU(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 m=0;me>=0?gU*e:fU*(Math.exp(e)-1)),xU={kernelName:Oo,backendName:"cpu",kernelFunc:yU},AU=ct(Wo,e=>e<0?-1:e>0?1:0),bU={kernelName:Wo,backendName:"cpu",kernelFunc:AU},vU=ct(zo,e=>Math.sin(e)),wU={kernelName:zo,backendName:"cpu",kernelFunc:vU},kU=ct(Lo,e=>Math.sinh(e)),IU={kernelName:Lo,backendName:"cpu",kernelFunc:kU},SU=11920928955078125e-23,w5=Math.log(SU)+2,CU=ct(Vo,e=>{let t=e>-w5,a=e0&&v.isString(n[0])){let s=n.map(i=>v.encodeString(i));r=this.write(s,t,a)}else r=this.write(n,t,a);return{dataId:r,shape:t,dtype:a}}refCount(t){return this.data.has(t)?this.data.get(t).refCount:0}incRef(t){let a=this.data.get(t);a.refCount++}decRef(t){if(this.data.has(t)){let a=this.data.get(t);a.refCount--}}move(t,a,n,r,s){this.data.set(t,{values:a,dtype:r,refCount:s})}numDataIds(){return this.data.numDataIds()}async read(t){return this.readSync(t)}readSync(t){let{dtype:a,complexTensorInfos:n}=this.data.get(t);if(a==="complex64"){let r=this.readSync(n.real.dataId),s=this.readSync(n.imag.dataId);return C.mergeRealAndImagArrays(r,s)}return v.convertBackendValuesAndArrayBuffer(this.data.get(t).values,a)}bufferSync(t){let a=this.readSync(t.dataId);if(t.dtype==="string")try{let n=a.map(r=>v.decodeString(r));return _e(t.shape,t.dtype,n)}catch(n){throw new Error("Failed to decode encoded string bytes into utf-8")}return _e(t.shape,t.dtype,a)}makeOutput(t,a,n){return It().makeTensorFromTensorInfo(this.makeTensorInfo(a,n,t),this)}disposeData(t,a=!1){if(this.data.has(t)){if(this.data.get(t).refCount--,!a&&this.data.get(t).refCount>0)return!1;let{complexTensorInfos:n}=this.data.get(t);n!=null&&(this.disposeData(n.real.dataId,!0),this.disposeData(n.imag.dataId,!0)),this.data.delete(t)}return!0}disposeIntermediateTensorInfo(t){this.disposeData(t.dataId)}async time(t){let a=v.now();return t(),{kernelMs:v.now()-a}}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(t){Ie([t],"where");let a=this.readSync(t.dataId);return XO(t.shape,a)}dispose(){}floatPrecision(){return 32}epsilon(){return super.epsilon()}};p3.nextDataId=0;var t0={};Ze(t0,{addImpl:()=>x6,bincountImpl:()=>h3,bincountReduceImpl:()=>A6,bitwiseAndImpl:()=>b6,castImpl:()=>y6,ceilImpl:()=>v6,concatImpl:()=>m3,equalImpl:()=>w6,expImpl:()=>I6,expm1Impl:()=>C6,floorDivImpl:()=>N6,floorImpl:()=>T6,gatherNdImpl:()=>R6,gatherV2Impl:()=>E6,greaterEqualImpl:()=>$6,greaterImpl:()=>M6,lessEqualImpl:()=>_6,lessImpl:()=>P6,linSpaceImpl:()=>F6,logImpl:()=>D6,maxImpl:()=>O6,maximumImpl:()=>z6,minimumImpl:()=>L6,multiplyImpl:()=>f3,negImpl:()=>W6,notEqualImpl:()=>B6,prodImpl:()=>V6,raggedGatherImpl:()=>U6,raggedRangeImpl:()=>G6,raggedTensorToTensorImpl:()=>H6,rangeImpl:()=>y3,rsqrtImpl:()=>j6,scatterImpl:()=>qs,sigmoidImpl:()=>qz,simpleAbsImpl:()=>g6,sliceImpl:()=>Ah,sparseFillEmptyRowsImpl:()=>X6,sparseReshapeImpl:()=>K6,sparseSegmentReductionImpl:()=>x3,sqrtImpl:()=>Yz,squaredDifferenceImpl:()=>Y6,staticRegexReplaceImpl:()=>Z6,stridedSliceImpl:()=>J6,stringNGramsImpl:()=>A3,stringSplitImpl:()=>b3,stringToHashBucketFastImpl:()=>v3,subImpl:()=>Q6,tileImpl:()=>ev,topKImpl:()=>av,transposeImpl:()=>g3,uniqueImpl:()=>k3});function g6(e){let t=new Float32Array(e.length);for(let a=0;a{let{x:t}=e.inputs,a=e.backend;Ie(t,"abs");let n=new Float32Array(v.sizeFromShape(t.shape)),r=a.data.get(t.dataId).values;return n=g6(r),a.makeOutput(n,t.shape,t.dtype)},YO={kernelName:iu,backendName:"cpu",kernelFunc:KO};function _t(e){return(t,a,n,r,s)=>{let i=C.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),m=v.computeStrides(a),f=C.getBroadcastDims(t,i),g=C.getBroadcastDims(a,i);if(f.length+g.length===0)for(let y=0;yA[T]=0);let b=v.locToIndex(A,c,h),w=x.slice(-d);g.forEach(T=>w[T]=0);let I=v.locToIndex(w,d,m);p[y]=e(n[b],r[I])}return[p,i]}}function Ja(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 ZO={kernelName:pp,backendName:"cpu",kernelFunc:Ja};function xh(e,t,a="float32"){if(a==="complex64"){let r=xh(e,t,"float32"),s=xh(e,t,"float32");return Ja({inputs:{real:r,imag:s},backend:e})}let n=v.makeZerosTypedArray(v.sizeFromShape(t),a);return e.makeTensorInfo(t,a,n)}function ar(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 JO={kernelName:qi,backendName:"cpu",kernelFunc:ar};function ei(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 QO={kernelName:kp,backendName:"cpu",kernelFunc:ei};function y6(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]=_t((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 ss(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{dtype:s}=n;if(s==="complex64"){if(r.dtype==="complex64")return ar({inputs:{x:r},backend:a});let p=xh(a,r.shape,r.dtype),c=ss({inputs:{x:r},backend:a,attrs:{dtype:"float32"}}),d=Ja({inputs:{real:c,imag:p},backend:a});return a.disposeIntermediateTensorInfo(p),a.disposeIntermediateTensorInfo(c),d}if(r.dtype==="complex64"){let p=ei({inputs:{input:r},backend:a}),c=ss({inputs:{x:p},backend:a,attrs:{dtype:s}});return a.disposeIntermediateTensorInfo(p),c}if(!v.hasEncodingLoss(r.dtype,s)){let p=ar({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]=y6(i,r.shape,r.dtype,s);return a.makeTensorInfo(o,l,u)}var ez={kernelName:bi,backendName:"cpu",kernelFunc:ss};function Kt(e,t,a,n){return a==null?({inputs:r,backend:s})=>{let{a:i,b:o}=r,l=s;Ie([i,o],e);let u=l.data.get(i.dataId).values,p=l.data.get(o.dataId).values,c=i.dtype==="string"?C.fromUint8ToStringArray(u):u,d=i.dtype==="string"?C.fromUint8ToStringArray(p):p,h=n||i.dtype,[m,f]=t(i.shape,o.shape,c,d,h);return l.makeTensorInfo(f,h,m)}:({inputs:r,backend:s})=>{let{a:i,b:o}=r,l=s;if(i.dtype==="complex64"||o.dtype==="complex64"){let u=ss({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,m=l.data.get(d.dataId).values,f=ss({inputs:{x:o},backend:l,attrs:{dtype:"complex64"}}),g=l.data.get(f.dataId),y=g.complexTensorInfos.real,x=g.complexTensorInfos.imag,A=l.data.get(y.dataId).values,b=l.data.get(x.dataId).values,[w,I,T]=a(i.shape,o.shape,h,m,A,b),N=l.makeTensorInfo(T,"float32",w),M=l.makeTensorInfo(T,"float32",I),$=Ja({inputs:{real:N,imag:M},backend:l});return l.disposeIntermediateTensorInfo(u),l.disposeIntermediateTensorInfo(f),l.disposeIntermediateTensorInfo(N),l.disposeIntermediateTensorInfo(M),$}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 c3(e){return(t,a,n,r,s,i)=>{let o=C.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=C.getBroadcastDims(t,o),m=C.getBroadcastDims(a,o),f=C.mergeRealAndImagArrays(n,r),g=C.mergeRealAndImagArrays(s,i),y=t.length,x=v.computeStrides(t),A=a.length,b=v.computeStrides(a);if(h.length+m.length===0)for(let w=0;wT[S]=0);let N=v.locToIndex(T,y,x),M=I.slice(-A);m.forEach(S=>M[S]=0);let $=v.locToIndex(M,A,b),E=e(f[N*2],f[N*2+1],g[$*2],g[$*2+1]);c[w]=E.real,d[w]=E.imag}return[c,d,o]}}var x6=_t((e,t)=>e+t),tz=c3((e,t,a,n)=>({real:e+a,imag:t+n})),Ql=Kt(os,x6,tz),az={kernelName:os,backendName:"cpu",kernelFunc:Ql};function h3(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 A6(e,t,a,n=!1){let r=e.shape[0],s=e.shape[1],i=_e([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}var b6=_t((e,t)=>e&t),nz=Kt(pu,b6),rz={kernelName:pu,backendName:"cpu",kernelFunc:nz};function or(e){return(t,a,n)=>{let r=v.getArrayFromDType(a,t.length);for(let s=0;s{let{x:i}=n;Ie(i,e);let o=s,l=o.data.get(i.dataId).values,u;if(i.dtype==="string"){if(!Array.isArray(l))throw new Error("String tensor's value was not an instance of Array");u=C.fromUint8ToStringArray(l)}else u=l;let p=a||i.dtype,c=t(u,p,r);return o.makeTensorInfo(i.shape,p,c)}}var v6=or(e=>Math.ceil(e)),sz=hs(vi,v6),iz={kernelName:vi,backendName:"cpu",kernelFunc:sz};function m3(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"?C.fromUint8ToStringArray(i.vals):i.vals,l=0;for(let u=0;ue===t?1:0),k6=Kt(Oi,w6,null,"bool"),oz={kernelName:Oi,backendName:"cpu",kernelFunc:k6},I6=or(e=>Math.exp(e)),S6=hs(zi,I6,"float32"),lz={kernelName:zi,backendName:"cpu",kernelFunc:S6},C6=or(e=>Math.expm1(e)),uz=hs(Li,C6),dz={kernelName:Li,backendName:"cpu",kernelFunc:uz},T6=or(e=>Math.floor(e)),pz=hs(Bi,T6),cz={kernelName:Bi,backendName:"cpu",kernelFunc:pz},N6=_t((e,t)=>Math.floor(e/t)),hz=Kt(Vi,N6,null,"int32"),mz={kernelName:Vi,backendName:"cpu",kernelFunc:hz};function R6(e,t,a,n,r,s,i,o,l){let u=_e([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),fz=Kt(Hi,M6,null,"bool"),gz={kernelName:Hi,backendName:"cpu",kernelFunc:fz},$6=_t((e,t)=>e>=t?1:0),yz=Kt(ji,$6,null,"bool"),xz={kernelName:ji,backendName:"cpu",kernelFunc:yz},P6=_t((e,t)=>ee<=t?1:0),vz=Kt(Qi,_6,null,"bool"),wz={kernelName:Qi,backendName:"cpu",kernelFunc:vz};function F6(e,t,a){let n=(t-e)/(a-1),r=v.makeZerosTypedArray(a,"float32");r[0]=e;for(let s=1;sMath.log(e)),kz=hs(to,D6),Iz={kernelName:to,backendName:"cpu",kernelFunc:kz};function O6(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 z6=_t((e,t)=>Math.max(e,t)),Sz=Kt(lo,z6),Cz={kernelName:lo,backendName:"cpu",kernelFunc:Sz},L6=_t((e,t)=>Math.min(e,t)),Tz=Kt(ho,L6),Nz={kernelName:ho,backendName:"cpu",kernelFunc:Tz},f3=_t((e,t)=>e*t),Rz=c3((e,t,a,n)=>({real:e*a-t*n,imag:e*n+t*a})),a0=Kt(yo,f3,Rz),Ez={kernelName:yo,backendName:"cpu",kernelFunc:a0};function W6(e,t,a){let n=v.createScalarValue(-1,a);return f3([],t,n,e,a)}function Mz(e){let{inputs:t,backend:a}=e,{x:n}=t;Ie(n,"neg");let r=a.data.get(n.dataId).values,[s,i]=W6(r,n.shape,n.dtype);return a.makeTensorInfo(i,n.dtype,s)}var $z={kernelName:Iu,backendName:"cpu",kernelFunc:Mz},B6=_t((e,t)=>e!==t?1:0),Pz=Kt(xo,B6,null,"bool"),_z={kernelName:xo,backendName:"cpu",kernelFunc:Pz};function g3(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(x)),a.makeTensorInfo(y,g,m)}var Oz={kernelName:So,backendName:"cpu",kernelFunc:Dz};function zz(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 Lz(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 Wz(e,t,a,n){let r=[],s=0,i=t.length-1+a.length,o=new Array(i).fill(null).map(()=>[0]);Lz(a,n);let l=1;for(let u=0;u=0){let f=o[m],g=f[f.length-1]-h[p];for(let y=p;yr[i]=s)}return t}function A5(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&&xy)b=0;else if(b=Math.ceil(Math.abs((x-y)/A)),b>b5)throw new Error(`Requires ((limit - start) / delta) <= ${b5}`);d[g+1]=d[g]+b}let h=d[c],m=v.getArrayFromDType(a,h),f=0;for(let g=0;gn&&(n=s)}return n}static getMaxWidthValueRowID(t){let a=t.length;if(a===0)return 0;let n=0,r=t[0],s=0;for(let i=1;i"Final length of result must be equal to firstDimension."),s}calculateOutputIndexRowSplit(t,a,n,r){let s=t.length,i=[];for(let o=0;o0&&i.length!==t[s-1])throw new Error("Invalid row split size.");return i}calculateOutputIndexValueRowID(t,a,n,r){let s=t.length,i=[];if(s===0)return[];let o=0,l=t[0];if(l>=a.length)throw new Error(`Got currentValueRowId=${l}, which is not less than ${a.length}`);let u=a[l];i.push(u);for(let p=1;p=0&&(++o,o=a.length)throw new Error(`Got nextValueRowId=${c} which is not less than ${a.length}`);u=a[c]}i.push(u)}if(i.length!==t.length)throw new Error("Invalid row ids.");return i}calculateOutputIndex(t,a,n,r){let s=this.getRowPartitionTensor(t),i=this.getRowPartitionTypeByDimension(t);switch(i){case Sn.VALUE_ROWIDS:return this.calculateOutputIndexValueRowID(s,a,n,r);case Sn.ROW_SPLITS:if(s.length-1>a.length)throw new Error(`Row partition size is greater than output size: ${s.length-1} > ${a.length}`);return this.calculateOutputIndexRowSplit(s,a,n,r);default:throw new Error(`Unsupported partition type: ${Sn[i]}`)}}getFirstDimensionSize(){let t=this.rowPartitionValues[0];if(this.rowPartitionTypes.length===0)throw new Error("No row_partition_types given.");let a=this.rowPartitionTypes[0];switch(a){case Sn.FIRST_DIM_SIZE:return t[0];case Sn.VALUE_ROWIDS:throw new Error("Cannot handle VALUE_ROWIDS in first dimension.");case Sn.ROW_SPLITS:return this.rowPartitionValuesShapes[0][0]-1;default:throw new Error(`Cannot handle type ${Sn[a]}`)}}compute(){if(this.rowPartitionValues[0].length<=0)throw new Error("Invalid first partition input. Tensor requires at least one element.");let t=this.getFirstDimensionSize(),a=this.calculateOutputSize(t),n=new Array(this.raggedRank+1);n[n.length-1]=1;for(let i=n.length-2;i>=0;--i)n[i]=n[i+1]*a[i+1];let r=w5(a,!1),s=v.getArrayFromDType(this.valuesDType,v.sizeFromShape(r));if(n[0]*a[0]>0){let i=this.calculateFirstParentOutputIndex(t,n[0],a[0]);for(let o=1;o<=this.raggedRank;++o)i=this.calculateOutputIndex(o-1,i,n[o],a[o]);this.setOutput(this.raggedRank,i,s,r)}return[r,s]}setOutput(t,a,n,r){if(n.length===0)return;let s=this.values,i=n,o=r.slice();o=o.slice(t+1);let l=v.sizeFromShape(o),u=a.length,p=this.defaultValue;if(p.length!==l&&p.length!==1){let m=this.defaultValueShape;De(()=>{let f=Q(p,m);p=Ul(f,o).dataSync()})}let c=0,d=0,h=0;for(let m=0;m<=u;++m){let f=m=u){let g=n.length;f=Math.floor(g/l)}if(f>h)if(this.defaultValue.length===1)i.subarray(h*l,f*l).fill(this.defaultValue[0]),h=f;else for(;f>h;){let g=i.slice(h*l);v5(g,p,l),++h}f<0?(c=m+1,d=h):(c=m,d=h,h=d+1)}}};function v5(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 H6(e,t,a,n,r,s,i,o,l,u){return new Gz(e,t,a,n,r,s,i,o,l,u).compute()}function y3(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)),Hz=hs(Po,j6),jz={kernelName:Po,backendName:"cpu",kernelFunc:Hz};function qs(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 _e(a,t.dtype);let h=l instanceof Vt?l:_e(p,t.dtype);typeof l=="string"||typeof l=="number"?h.values.fill(l):typeof l=="boolean"&&h.values.fill(+l);for(let m=0;m=n/r)throw new Error(`Invalid indices: ${f} does not index into ${a}`);for(let y=0;y1/(1+Math.exp(-e))),q6=ct(Bo,e=>1/(1+Math.exp(-e))),Xz={kernelName:Bo,backendName:"cpu",kernelFunc:q6};function Ah(e,t,a,n,r){let s=Nt.isSliceContinous(n,t,a),i=v.sizeFromShape(a),o=v.computeStrides(n);if(s){let c=Nt.computeFlatOffset(t,o);return r==="string"?e.slice(c,c+i):e.subarray(c,c+i)}let l=r==="string"?C.fromUint8ToStringArray(e):e,u=_e(n,r,l),p=_e(a,r);for(let c=0;cm+t[f]);p.set(u.get(...h),...d)}return r==="string"?C.fromStringArrayToUint8(p.values):p.values}function ti(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{begin:s,size:i}=n;Ie(r,"slice");let[o,l]=Nt.parseSliceParams(r,s,i);Nt.assertParamsValid(r,o,l);let u=a.data.get(r.dataId).values,p=Ah(u,o,l,r.shape,r.dtype);return a.makeTensorInfo(l,r.dtype,p)}var Kz={kernelName:Pu,backendName:"cpu",kernelFunc:ti};function X6(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(C.getSparseFillEmptyRowsIndicesDenseShapeMismatch(o));let g=v.getArrayFromDType(a,0),y=v.getArrayFromDType(r,0);return[g,[0,c],y,u,p]}let d=!0,h=0,m=new Array(l).fill(0);for(let g=0;g=l)throw new Error(C.getSparseFillEmptyRowsOutOfRangeIndexErrorMessage(g,y,l));++m[y],d=d&&y>=h,h=y}let f=!0;for(let g=0;g0&&(m[g]+=m[g-1])}if(f&&d){let g=e,y=n;for(let x=0;x0){d[c-1]=1;for(let f=c-2;f>=0;--f)d[f]=d[f+1]*n[f+1]}let h=[];if(o>0){h[o-1]=1;for(let f=o-2;f>=0;--f)h[f]=h[f+1]*l[f+1]}let m=v.getArrayFromDType(a,i*o);for(let f=0;f0?r[o-1]+1:0;if(p<0)throw new Error(C.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());let c=t.slice();c[0]=p;let d=c.reduce((x,A)=>x*A,1),h=v.getArrayFromDType(a,d);if(o===0)return p>0&&h.fill(i),[h,c];if(p<=0)throw new Error(C.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());let m=0,f=1,g=0,y=r[m];for(;;){let x=0;if(f=x)throw new Error(C.getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage())}if(y<0||y>=p)throw new Error(C.getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage(y,p));y>g&&h.fill(i,g*u,y*u);for(let A=m;A=l[0])throw new Error(C.getSparseSegmentReductionIndicesOutOfRangeErrorMessage(A,n[A],l[0]));for(let w=0;wo)break}return gMath.sqrt(e)),Zz=ct(Uo,e=>Math.sqrt(e)),Jz={kernelName:Uo,backendName:"cpu",kernelFunc:Zz},Y6=_t((e,t)=>{let a=e-t;return a*a}),Qz=Kt(qo,Y6),eL={kernelName:qo,backendName:"cpu",kernelFunc:Qz},Z6=or((e,t)=>{let{pattern:a,replaceGlobal:n,rewrite:r}=t;return e.replace(new RegExp(a,n?"g":""),r)}),tL=hs(Cp,Z6),aL={kernelName:Cp,backendName:"cpu",kernelFunc:tL};function J6(e,t,a,n){let r=_e(e,t.dtype);for(let s=0;s0?0:i-o),d=0;d+=l*this.leftPad.length;for(let y=0;yy.forEach(x=>m[f++]=x);for(let y=0;y0){g(e[c+p-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(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;this.createNGrams(e,l,i,u,1,c)}}return[i,s]}};function A3(e,t,a,n,r,s,i,o){return new nL(a,n,r,s,i,o).compute(e,t)}function rL(e,t,a,n){if(!e.length)return;if(t.length===0){for(let s=0;se-t),sL=c3((e,t,a,n)=>({real:e-a,imag:t-n})),w3=Kt(Ko,Q6,sL),iL={kernelName:Ko,backendName:"cpu",kernelFunc:w3};function ev(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 tv(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));tv(e,t,d,h)}let r=e[t],s=a,i=n;for(v.swap(e,a,t),Cd(e[n],r)>0&&v.swap(e,a,n);s0;)i=i-1}Cd(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 av(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;cm[A]={value:x,index:A}),n{for(let g=0;gnew p3,1);var nv=ct(Fi,e=>e>=0?e:Math.exp(e)-1),lL={kernelName:Fi,backendName:"cpu",kernelFunc:nv};function rv(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{alpha:s}=n;Ie([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 sv(e){let{inputs:t,backend:a}=e,{x:n,alpha:r}=t;Ie([n,r],"prelu");let s=a.data.get(n.dataId).values,i=a.data.get(r.dataId).values,[o,l]=dL(n.shape,r.shape,s,i,"float32");return a.makeTensorInfo(l,"float32",o)}var pL={kernelName:Io,backendName:"cpu",kernelFunc:sv},iv=ct(To,e=>Math.max(0,e)),cL={kernelName:To,backendName:"cpu",kernelFunc:iv},ov=ct(Eo,e=>Math.min(Math.max(0,e),6)),hL={kernelName:Eo,backendName:"cpu",kernelFunc:ov};function bh(e,t,a,n,r){if(a==="linear")return ar({inputs:{x:t},backend:e});if(a==="relu")return iv({inputs:{x:t},backend:e});if(a==="elu")return nv({inputs:{x:t},backend:e});if(a==="relu6")return ov({inputs:{x:t},backend:e});if(a==="prelu")return sv({inputs:{x:t,alpha:n},backend:e});if(a==="leakyrelu")return rv({inputs:{x:t},backend:e,attrs:{alpha:r}});if(a==="sigmoid")return q6({inputs:{x:t},backend:e});throw new Error(`Activation ${a} has not been implemented for the CPU backend.`)}function bt(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 mL={kernelName:Ru,backendName:"cpu",kernelFunc:bt};function lv(e){let{inputs:t,backend:a,attrs:n}=e,{a:r,b:s}=t,{transposeA:i,transposeB:o}=n;Ie([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],m=r.shape.slice(0,-2),f=s.shape.slice(0,-2),g=v.sizeFromShape(m),y=v.sizeFromShape(f),x=al.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 A=i?[g,p,d]:[g,d,p],b=o?[y,h,c]:[y,c,h],w=bt({inputs:{x:r},backend:a,attrs:{shape:A}}),I=bt({inputs:{x:s},backend:a,attrs:{shape:b}}),T=i?w.shape[1]:w.shape[2],N=i?w.shape[2]:w.shape[1],M=o?I.shape[1]:I.shape[2],$=Math.max(g,y),E=a.data.get(w.dataId).values,S=a.data.get(I.dataId).values,_=v.computeStrides(w.shape),O=v.computeStrides(I.shape),[W,P,U]=i?[_[0],1,_[1]]:[_[0],_[1],1],[G,q,H]=o?[1,O[1],O[0]]:[O[1],1,O[0]],V=N*M,Z=_e([$,N,M],w.dtype),X=Z.values,re=a.blockSize;for(let ee=0;ee<$;ee++){let ge=ee%g,ie=ee%y;for(let be=0;beMath.acos(e)),AL={kernelName:oi,backendName:"cpu",kernelFunc:xL},bL=ct(li,e=>Math.acosh(e)),vL={kernelName:li,backendName:"cpu",kernelFunc:bL};function wL(e){let{inputs:t,backend:a}=e,n=t;Ie(t,"addN");let r=n.map(o=>a.data.get(o.dataId).values),s=_e(n[0].shape,n[0].dtype),i=s.values;for(let o=0;ox&&(x=w,A=b)}h[g]=A}return u.forEach(g=>a.disposeIntermediateTensorInfo(g)),a.makeTensorInfo(p,"int32",h)}var RL={kernelName:ou,backendName:"cpu",kernelFunc:NL};function EL(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s}=n;Ie(r,"argMin");let i=v.parseAxisParam(s,r.shape),o=C.getAxesPermutation(i,r.shape.length),l=r,u=[];o!=null&&(l=Va({inputs:{x:r},backend:a,attrs:{perm:o}}),u.push(l),i=C.getInnerMostAxes(i.length,l.shape.length)),i=[i[0]],C.assertAxesAreInnerMostDims("argMin",i,l.shape.length);let[p,c]=C.computeOutAndReduceShapes(l.shape,i),d=v.sizeFromShape(p),h=v.makeZerosTypedArray(d,"int32"),m=v.sizeFromShape(c),f=a.data.get(l.dataId).values;for(let g=0;ga.disposeIntermediateTensorInfo(g)),a.makeTensorInfo(p,"int32",h)}var ML={kernelName:lu,backendName:"cpu",kernelFunc:EL},$L=ct(ci,e=>Math.asin(e)),PL={kernelName:ci,backendName:"cpu",kernelFunc:$L},_L=ct(hi,e=>Math.asinh(e)),FL={kernelName:hi,backendName:"cpu",kernelFunc:_L},DL=ct(mi,e=>Math.atan(e)),OL={kernelName:mi,backendName:"cpu",kernelFunc:DL},zL=_t((e,t)=>Math.atan2(e,t)),LL=Kt(gi,zL),WL={kernelName:gi,backendName:"cpu",kernelFunc:LL},BL=ct(fi,e=>Math.atanh(e)),VL={kernelName:fi,backendName:"cpu",kernelFunc:BL};function I3(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,m=s==="max"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,f=_e(r.outShape,a),g=f.values,y=r.outShape[1]*r.outShape[2]*r.outShape[3],x=r.outShape[2]*r.outShape[3],A=r.outShape[3];for(let b=0;bU?U=ee:s==="avg"&&(G+=ee,q++)}if(isNaN(U))break}let H=S+_*A+T;g[H]=s==="avg"?G/q:U}}}return f}function uv(e,t,a,n,r=!1,s=!1){let i=_e(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,m=n.padInfo.left,f=_e(t,a,e);for(let g=0;g$&&($=P,r?E=s?((g*n.inHeight+S)*n.inWidth+O)*n.inChannels+y:(S*n.inWidth+O)*n.inChannels+y:E=_*d+W)}}i.set(E,g,x,I,y)}}return i}function dv(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,m=r.effectiveFilterWidth,f=r.padInfo.front,g=r.padInfo.top,y=r.padInfo.left,x=s==="max"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,A=_e(r.outShape,a),b=A.values,w=r.outShape[1]*r.outShape[2]*r.outShape[3]*r.outShape[4],I=r.outShape[2]*r.outShape[3]*r.outShape[4],T=r.outShape[3]*r.outShape[4],N=r.outShape[4];for(let M=0;Mbe?be=xt:s==="avg"&&(Ce+=xt,Re++),isNaN(be))break}if(isNaN(be))break}if(isNaN(be))break}let Le=ie+S;b[Le]=s==="avg"?Ce/Math.max(Re,1):be}}}}return A}function UL(e,t){let a=_e(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,m=t.padInfo.left;for(let f=0;f=_&&(_=V,O=P*p*c+G*p+H)}}}a.set(O,f,y,w,M,g)}}}return a}function GL(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t;Ie(r,"avgPool");let{filterSize:s,strides:i,pad:o,dimRoundingMode:l}=n,u=1;v.assert(C.eitherStridesOrDilationsAreOne(i,u),()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${i} and dilations '${u}'`);let p=C.computePool2DInfo(r.shape,s,i,u,o,l),c;if(p.filterWidth===1&&p.filterHeight===1&&v.arraysEqual(p.inShape,p.outShape))c=ar({inputs:{x:r},backend:a});else{let d=a.data.get(r.dataId).values,h=v.computeStrides(r.shape),m=I3(d,r.shape,r.dtype,h,p,"avg");c=a.makeTensorInfo(p.outShape,r.dtype,m.values)}return c}var HL={kernelName:yi,backendName:"cpu",kernelFunc:GL};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;Ie(r,"avgPool3d");let p=C.computePool3DInfo(r.shape,s,i,1,o,l,u),c=a.data.get(r.dataId).values,d=dv(c,r.shape,r.dtype,v.computeStrides(r.shape),p,"avg");return a.makeTensorInfo(d.shape,"float32",d.values)}var qL={kernelName:uu,backendName:"cpu",kernelFunc:jL};function XL(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,input:s}=t,{filterSize:i,strides:o,pad:l,dimRoundingMode:u}=n;Ie([r,s],"avgPool3DGrad");let p=C.computePool3DInfo(s.shape,i,o,1,l,u),c=p.strideDepth,d=p.strideHeight,h=p.strideWidth,m=p.filterDepth,f=p.filterHeight,g=p.filterWidth,y=p.dilationDepth,x=p.dilationHeight,A=p.dilationWidth,b=p.effectiveFilterDepth,w=p.effectiveFilterHeight,I=p.effectiveFilterWidth,T=b-1-p.padInfo.front,N=I-1-p.padInfo.left,M=w-1-p.padInfo.top,$=_e(s.shape,"float32"),E=1/(m*f*g),S=a.bufferSync(r);for(let _=0;_=p.outDepth||Math.floor(X)!==X))for(let re=0;re=p.outHeight||Math.floor(ee)!==ee))for(let ge=0;ge=p.outWidth||Math.floor(ie)!==ie)continue;let be=S.get(_,X,ee,ie,O);V+=be}}}$.set(V*E,_,W,P,U,O)}return a.makeTensorInfo($.shape,$.dtype,$.values)}var KL={kernelName:dp,backendName:"cpu",kernelFunc:XL};function YL(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,input:s}=t,i=s;Ie([r,s],"avgPoolGrad");let{filterSize:o,strides:l,pad:u}=n,p=C.computePool2DInfo(i.shape,o,l,1,u),c=p.strideHeight,d=p.strideWidth,h=p.filterHeight,m=p.filterWidth,f=p.dilationHeight,g=p.dilationWidth,y=p.effectiveFilterHeight,x=p.effectiveFilterWidth,A=x-1-p.padInfo.left,b=y-1-p.padInfo.top,w=_e(i.shape,"float32"),I=1/(h*m),T=a.data.get(r.dataId).values,N=_e(r.shape,"float32",T);for(let M=0;M=p.outHeight||Math.floor(U)!==U))for(let G=0;G=p.outWidth||Math.floor(q)!==q)continue;let H=N.get(M,U,q,$);W+=H}}w.set(W*I,M,E,S,$)}return a.makeTensorInfo(w.shape,w.dtype,w.values)}var ZL={kernelName:up,backendName:"cpu",kernelFunc:YL};function JL(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."),Ie([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]),m=i?a.data.get(i.dataId).values:new Float32Array([0]),f=new Float32Array(p.length),g=m.length,y=h.length,x=d.length,A=c.length,b=0,w=0,I=0,T=0;for(let N=0;N=g&&(b=0),w>=A&&(w=0),I>=y&&(I=0),T>=x&&(T=0);return a.makeTensorInfo(r.shape,r.dtype,f)}var QL={kernelName:Ui,backendName:"cpu",kernelFunc:JL};function eW(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{blockShape:s,crops:i}=n;Ie([r],"batchToSpaceND");let o=s.reduce((y,x)=>y*x),l=C.getReshaped(r.shape,s,o),u=C.getPermuted(l.length,s.length),p=C.getReshapedPermuted(r.shape,s,o),c=C.getSliceBeginCoords(i,s.length),d=C.getSliceSize(p,i,s.length),h=bt({inputs:{x:r},backend:a,attrs:{shape:l}}),m=Va({inputs:{x:h},backend:a,attrs:{perm:u}}),f=bt({inputs:{x:m},backend:a,attrs:{shape:p}}),g=ti({inputs:{x:f},backend:a,attrs:{begin:c,size:d}});return a.disposeIntermediateTensorInfo(h),a.disposeIntermediateTensorInfo(m),a.disposeIntermediateTensorInfo(f),g}var tW={kernelName:du,backendName:"cpu",kernelFunc:eW};function aW(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=h3(o,l,s.dtype,s.shape,i);return a.makeTensorInfo([i],s.dtype,u)}var nW={kernelName:Ai,backendName:"cpu",kernelFunc:aW};function rW(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=C.assertAndGetBroadcastShape(Array.from(s),Array.from(i));return a.makeTensorInfo([o.length],"int32",Int32Array.from(o))}var sW={kernelName:cu,backendName:"cpu",kernelFunc:rW},iW=ct(ls,(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;uf.shape);C.assertParamsConsistent(i,s);let o=C.computeOutShape(t.map(f=>f.shape),s);if(v.sizeFromShape(o)===0)return a.makeTensorInfo(o,t[0].dtype,[]);let l=t.filter(f=>v.sizeFromShape(f.shape)>0);if(l.length===1)return ar({inputs:{x:l[0]},backend:a});if(l[0].dtype==="complex64"){let f=l.map(b=>ei({inputs:{input:b},backend:a})),g=l.map(b=>eu({inputs:{input:b},backend:a})),y=tu({inputs:f,backend:a,attrs:{axis:s}}),x=tu({inputs:g,backend:a,attrs:{axis:s}}),A=Ja({inputs:{real:y,imag:x},backend:a});return f.forEach(b=>a.disposeIntermediateTensorInfo(b)),g.forEach(b=>a.disposeIntermediateTensorInfo(b)),a.disposeIntermediateTensorInfo(y),a.disposeIntermediateTensorInfo(x),A}let u=l.map(f=>{let g=[-1,v.sizeFromShape(f.shape.slice(s))];return bt({inputs:{x:f},backend:a,attrs:{shape:g}})}),p=u.map(f=>({vals:a.data.get(f.dataId).values,shape:f.shape}));o=C.computeOutShape(u.map(f=>f.shape),1);let c=u[0].shape[0]===1,d=m3(p,o,t[0].dtype,c),h=C.computeOutShape(l.map(f=>f.shape),s),m=a.makeTensorInfo(h,t[0].dtype,d);return u.forEach(f=>a.disposeIntermediateTensorInfo(f)),m}var pW={kernelName:hu,backendName:"cpu",kernelFunc:tu};function pv(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;Ie([r,s],"conv2d");let c=C.convertConv2DDataFormat(l),d=C.computeConv2DInfo(r.shape,s.shape,i,u,o,p,!1,c),h=d.filterHeight,m=d.filterWidth,f=d.dilationHeight,g=d.dilationWidth,y=d.padInfo.left,x=d.padInfo.top,A=d.dataFormat==="channelsLast",b=new Vt(d.outShape,r.dtype),w=v.computeStrides(r.shape),I=v.computeStrides(s.shape),T=w[0],N=A?w[1]:w[2],M=A?w[2]:1,$=A?1:w[1],E=b.strides[0],S=A?b.strides[1]:b.strides[2],_=A?b.strides[2]:1,O=A?1:b.strides[1],W=a.data.get(r.dataId).values,P=a.data.get(s.dataId).values,U=b.values;for(let G=0;G=d.inHeight)continue;let ge=re*I[0],ie=q+ee*N;for(let be=0;be=d.inWidth)continue;let gt=ge+Le*I[1],dt=ie+qe*M,st=gt;for(let it=0;it=u.inDepth)continue;let G=P*M[0],q=E+U*N[1];for(let H=0;H=u.inHeight)continue;let ee=G+X*M[1],ge=q+re*N[2];for(let ie=0;ie=u.inWidth)continue;let qe=ee+Re*M[2],gt=ge+Le*u.inChannels,dt=qe;for(let st=0;stMath.cos(e)),IW={kernelName:Ci,backendName:"cpu",kernelFunc:kW},SW=ct(Ti,e=>Math.cosh(e)),CW={kernelName:Ti,backendName:"cpu",kernelFunc:SW};function TW(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,m=s.shape[0],[f,g]=o,y=_e([m,f,g,h],"float32"),x=a.data.get(s.dataId).values,A=a.data.get(i.dataId).values,b=a.data.get(r.dataId).values,w=v.computeStrides(r.shape),I=v.computeStrides(y.shape);for(let T=0;T=p)continue;let O=f>1?(E-M)*(c-1)/(f-1):0,W=g>1?(S-$)*(d-1)/(g-1):0;for(let P=0;P1?M*(c-1)+P*O:.5*(M+E)*(c-1);if(U<0||U>c-1){for(let G=0;G1?$*(d-1)+V*W:.5*($+S)*(d-1);if(Z<0||Z>d-1){for(let ge=0;ge1?$*(d-1)+G*W:.5*($+S)*(d-1);if(q<0||q>d-1){for(let Z=0;Zy+m-x-1:(y,x)=>y+x;for(let y=0;yy+m-x-1:(y,x)=>y+x;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],p=r.shape[3],c=l*s,d=u*s,h=p/(s*s),m=a.data.get(r.dataId).values,f=new Float32Array(o*c*d*h),g=0;for(let y=0;y`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${i} and dilations '${d}'`);let h=C.computeConv2DInfo(r.shape,s.shape,i,d,o,u,!0),{filterHeight:m,filterWidth:f,dilationHeight:g,dilationWidth:y,padInfo:x}=h,A=x.left,b=x.top,w=h.outChannels/h.inChannels,I=new Vt(h.outShape,r.dtype),T=a.data.get(r.dataId).values,N=a.data.get(s.dataId).values,M=I.values;for(let $=0;$=h.inHeight)continue;let G=P*c[0],q=E+U*p[1];for(let H=0;H=h.inWidth)continue;let ee=G+X*c[1],ge=q+re*h.inChannels,ie=V,be=ee;for(let Ce=0;Ce{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:m,inWidth:f,inChannels:g,outHeight:y,outWidth:x,padInfo:A,strideHeight:b,strideWidth:w,filterHeight:I,filterWidth:T,dilationHeight:N,dilationWidth:M,outShape:$}=C.computeDilation2DInfo(n.shape,r.shape,s,i,"NHWC",o),E=v.sizeFromShape($),S=$.length,_=v.getArrayFromDType(n.dtype,E);for(let O=0;O=0&&X=0&&eeH&&(H=be)}}}let V=v.locToIndex([O,W,U,q],S,v.computeStrides($));_[V]=H}}}return{dataId:l.write(v.toTypedArray(_,n.dtype),$,n.dtype),shape:$,dtype:n.dtype}}},HW={kernelName:ql,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:m,inChannels:f,outHeight:g,outWidth:y,padInfo:x,strideHeight:A,strideWidth:b,filterHeight:w,filterWidth:I,dilationHeight:T,dilationWidth:N,outShape:M}=C.computeDilation2DInfo(n.shape,r.shape,i,o,"NHWC",l);v.assert(s.rank===M.length,()=>`Error in ${ql}, dy must have the same rank as output ${M.length}, but got ${s.rank}`);let $=v.toNestedArray(M,u.data.get(s.dataId).values),E=v.makeZerosNestedTypedArray(r.shape,r.dtype);for(let S=0;S=0&&Z=0&&reG&&(G=ee,q=V,H=X)}}}E[q][H][U]+=$[S][_][W][U]}}}return{dataId:u.write(v.toTypedArray(E,n.dtype),r.shape,r.dtype),shape:r.shape,dtype:r.dtype}}},jW={kernelName:jl,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:m,inChannels:f,outHeight:g,outWidth:y,padInfo:x,strideHeight:A,strideWidth:b,filterHeight:w,filterWidth:I,dilationHeight:T,dilationWidth:N,outShape:M}=C.computeDilation2DInfo(n.shape,r.shape,i,o,"NHWC",l);v.assert(s.rank===M.length,()=>`Error in ${jl}, dy must have the same rank as output ${M.length}, but got ${s.rank}`);let $=v.toNestedArray(M,u.data.get(s.dataId).values),E=v.makeZerosNestedTypedArray(n.shape,n.dtype);for(let S=0;S=0&&Z=0&&reG&&(G=ee,q=Z,H=re)}}}E[S][q][H][U]+=$[S][_][W][U]}}}return{dataId:u.write(v.toTypedArray(E,n.dtype),n.shape,n.dtype),shape:n.shape,dtype:n.dtype}}};function qW(e){let{inputs:t,backend:a,attrs:n}=e,{image:r}=t,{canvas:s,options:i}=n,{contextOptions:o,imageOptions:l}=i||{},u=(l==null?void 0:l.alpha)||1,p=(o==null?void 0:o.contextType)||"2d";if(p!=="2d")throw new Error(`Context type ${o.contextType} is not supported by the CPU backend.`);let c=s.getContext(p,(o==null?void 0:o.contextAttributes)||{});if(c==null)throw new Error(`Could not get the context with ${p} type.`);let[d,h]=r.shape.slice(0,2),m=r.shape.length===2?1:r.shape[2],f=a.data.get(r.dataId).values,g=r.dtype==="float32"?255:1,y=new Uint8ClampedArray(h*d*4);for(let A=0;A1)throw new Error(`Tensor values for a float32 Tensor must be in the range [0 - 1] but encountered ${T}.`)}else if(r.dtype==="int32"&&(T<0||T>255))throw new Error(`Tensor values for a int32 Tensor must be in the range [0 - 255] but encountered ${T}.`);m===1?(b[0]=T*g,b[1]=T*g,b[2]=T*g):b[I]=T*g}let w=A*4;y[w+0]=Math.round(b[0]),y[w+1]=Math.round(b[1]),y[w+2]=Math.round(b[2]),y[w+3]=Math.round(b[3])}s.width=h,s.height=d;let x=new ImageData(y,h,d);return c.putImageData(x,0,0),r}var XW={kernelName:gp,backendName:"cpu",kernelFunc:qW};function Kp(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,keepDims:i}=n;Ie(r,"sum");let o;r.dtype==="bool"?o=ss({inputs:{x:r},backend:a,attrs:{dtype:"int32"}}):o=ar({inputs:{x:r},backend:a});let l=o.shape.length,u=v.parseAxisParam(s,o.shape),p=C.getAxesPermutation(u,l),c=u,d=o;p!=null&&(d=Va({inputs:{x:o},backend:a,attrs:{perm:p}}),c=C.getInnerMostAxes(c.length,l)),C.assertAxesAreInnerMostDims("sum",c,d.shape.length);let[h,m]=C.computeOutAndReduceShapes(d.shape,c),f=C.upcastType(d.dtype,"int32"),g=xh(a,h,f),y=v.sizeFromShape(m),x=a.data.get(g.dataId).values,A=a.data.get(d.dataId).values;for(let b=0;b=0&&(d=Kp({inputs:{x:d},backend:a,attrs:{axis:u[f]-(i.length-h),keepDims:!1}}),m.push(d)),h--)}for(let f of m)f!==d&&a.disposeIntermediateTensorInfo(f);return d}var ZW={kernelName:yp,backendName:"cpu",kernelFunc:YW};function JW(e){let{inputs:t,backend:a}=e,{dy:n,y:r}=t;Ie([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=0?s[l]=o[l]:s[l]=o[l]*(u+1)}return a.makeTensorInfo(r.shape,"float32",s)}var QW={kernelName:yu,backendName:"cpu",kernelFunc:JW},eB=C.ERF_P,tB=C.ERF_A1,aB=C.ERF_A2,nB=C.ERF_A3,rB=C.ERF_A4,sB=C.ERF_A5,iB=ct(Di,e=>{let t=Math.sign(e),a=Math.abs(e),n=1/(1+eB*a);return t*(1-((((sB*n+rB)*n+nB)*n+aB)*n+tB)*n*Math.exp(-a*a))}),oB={kernelName:Di,backendName:"cpu",kernelFunc:iB};function vh(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),bt({inputs:{x:r},backend:a,attrs:{shape:o}})}var lB={kernelName:xu,backendName:"cpu",kernelFunc:vh},uB=_t((e,t)=>e/t),S3=Kt(_i,uB),P1={kernelName:_i,backendName:"cpu",kernelFunc:S3};function hv(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&&x=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=C.segment_util.collectGatherOpShapeInfo(r,s,l,c),m=bt({inputs:{x:r},backend:a,attrs:{shape:[h.batchSize,h.outerSize,h.dimSize,h.sliceSize]}}),f=bt({inputs:{x:s},backend:a,attrs:{shape:[h.batchSize,d/h.batchSize]}}),g=[h.batchSize,h.outerSize,d/h.batchSize,h.sliceSize],y=a.bufferSync(f),x=a.bufferSync(m),A=E6(x,y,g);return a.disposeIntermediateTensorInfo(m),a.disposeIntermediateTensorInfo(f),a.makeTensorInfo(h.outputShape,A.dtype,A.values)}var SB={kernelName:bu,backendName:"cpu",kernelFunc:IB};function CB(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=bt({inputs:{x:n},backend:a,attrs:{shape:[i,s]}}),l=hv(o,!0,a),u=bt({inputs:{x:l},backend:a,attrs:{shape:n.shape}});return a.disposeIntermediateTensorInfo(o),a.disposeIntermediateTensorInfo(l),u}var TB={kernelName:Ap,backendName:"cpu",kernelFunc:CB},NB=ct(Xi,e=>Number.isFinite(e)?1:0,"bool"),RB={kernelName:Xi,backendName:"cpu",kernelFunc:NB},EB=ct(Ki,e=>Math.abs(e)===1/0?1:0,"bool"),MB={kernelName:Ki,backendName:"cpu",kernelFunc:EB},$B=ct(Yi,e=>Number.isNaN(e)?1:0,"bool"),PB={kernelName:Yi,backendName:"cpu",kernelFunc:$B};function _B(e){let{backend:t,attrs:a}=e,{start:n,stop:r,num:s}=a,i=F6(n,r,s);return t.makeTensorInfo([i.length],"float32",i)}var FB={kernelName:eo,backendName:"cpu",kernelFunc:_B},DB=ct(ao,e=>Math.log1p(e)),OB={kernelName:ao,backendName:"cpu",kernelFunc:DB},zB=_t((e,t)=>e&&t),LB=Kt(no,zB,null,"bool"),WB={kernelName:no,backendName:"cpu",kernelFunc:LB},BB=ct(ro,e=>e?0:1,"bool"),VB={kernelName:ro,backendName:"cpu",kernelFunc:BB},UB=_t((e,t)=>e||t),GB=Kt(so,UB,null,"bool"),HB={kernelName:so,backendName:"cpu",kernelFunc:GB};function jB(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{depthRadius:s,bias:i,alpha:o,beta:l}=n;Ie(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 m(f){let g=f%u,y=f-g+Math.max(0,g-s),x=f-g+Math.min(g+s,p),A=0;for(;y<=x;y++){let b=c[y];A+=b*b}return A}for(let f=0;f`Error in maxPool: Either strides or dilations must be 1. Got strides ${i} and dilations '${u}'`);let p=C.computePool2DInfo(r.shape,s,i,u,o,l),c;if(p.filterWidth===1&&p.filterHeight===1&&v.arraysEqual(p.inShape,p.outShape))c=ar({inputs:{x:r},backend:a});else{let d=a.data.get(r.dataId).values,h=v.computeStrides(r.shape),m=I3(d,r.shape,r.dtype,h,p,"max");c=a.makeTensorInfo(p.outShape,r.dtype,m.values)}return c}var JB={kernelName:uo,backendName:"cpu",kernelFunc:ZB};function QB(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{filterSize:s,strides:i,pad:o,dimRoundingMode:l,dataFormat:u}=n;Ie(r,"maxPool3d");let p=C.computePool3DInfo(r.shape,s,i,1,o,l,u),c=a.data.get(r.dataId).values,d=dv(c,r.shape,r.dtype,v.computeStrides(r.shape),p,"max");return a.makeTensorInfo(d.shape,"float32",d.values)}var eV={kernelName:wu,backendName:"cpu",kernelFunc:QB};function tV(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,input:s}=t,{filterSize:i,strides:o,pad:l,dimRoundingMode:u}=n;Ie([r,s],"maxPool3DGrad");let p=C.computePool3DInfo(s.shape,i,o,1,l,u),c=a.bufferSync(s),d=UL(c,p),h=p.strideDepth,m=p.strideHeight,f=p.strideWidth,g=p.dilationDepth,y=p.dilationHeight,x=p.dilationWidth,A=p.effectiveFilterDepth,b=p.effectiveFilterHeight,w=p.effectiveFilterWidth,I=A-1-p.padInfo.front,T=w-1-p.padInfo.left,N=b-1-p.padInfo.top,M=_e(s.shape,"float32"),$=a.bufferSync(r);for(let E=0;E=p.outDepth||Math.floor(V)!==V))for(let Z=0;Z=p.outHeight||Math.floor(X)!==X))for(let re=0;re=p.outWidth||Math.floor(ee)!==ee)continue;let ge=A*b*w-1-d.get(E,V,X,ee,S),ie=H*b*w+Z*w+re,be=ge===ie?1:0;if(be===0)continue;let Ce=$.get(E,V,X,ee,S);q+=Ce*be}}}M.set(q,E,_,O,W,S)}return a.makeTensorInfo(M.shape,M.dtype,M.values)}var aV={kernelName:wp,backendName:"cpu",kernelFunc:tV};function nV(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,input:s,output:i}=t,o=s;Ie([s,i],"maxPoolGrad");let{filterSize:l,strides:u,pad:p,dimRoundingMode:c}=n,d=C.computePool2DInfo(o.shape,l,u,1,p,c),h=a.data.get(o.dataId).values,m=_e(d.outShape,o.dtype,uv(h,o.shape,o.dtype,d).values),f=d.strideHeight,g=d.strideWidth,y=d.dilationHeight,x=d.dilationWidth,A=d.effectiveFilterHeight,b=d.effectiveFilterWidth,w=b-1-d.padInfo.left,I=A-1-d.padInfo.top,T=_e(o.shape,"float32"),N=a.data.get(r.dataId).values,M=_e(r.shape,"float32",N);for(let $=0;$=d.outHeight||Math.floor(G)!==G))for(let q=0;q=d.outWidth||Math.floor(H)!==H)continue;let V=A*b-1-m.get($,G,H,E),Z=U*b+q,X=V===Z?1:0;if(X===0)continue;let re=M.get($,G,H,E);P+=re*X}}T.set(P,$,S,_,E)}return a.makeTensorInfo(T.shape,T.dtype,T.values)}var rV={kernelName:vp,backendName:"cpu",kernelFunc:nV};function sV(e,t,a,n,r){let s=v.computeStrides(t),i=I3(e,t,a,s,r,"max"),o=uv(e,t,a,r,!0,n);return[i.values,o.values]}var iV={kernelName:ku,backendName:"cpu",kernelFunc:({inputs:e,attrs:t,backend:a})=>{let{x:n}=e,{filterSize:r,strides:s,pad:i,includeBatchInIndex:o}=t,l=a;Ie(n,"MaxPoolWithArgmax");let u=l.data.get(n.dataId).values,p=C.computePool2DInfo(n.shape,r,s,[1,1],i),[c,d]=sV(u,n.shape,n.dtype,o,p),h=l.write(c,p.outShape,n.dtype),m=l.write(d,p.outShape,n.dtype);return[{dataId:h,shape:p.outShape,dtype:n.dtype},{dataId:m,shape:p.outShape,dtype:"int32"}]}};function oV(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,keepDims:i}=n,o=v.parseAxisParam(s,r.shape),l=C.computeOutAndReduceShapes(r.shape,o)[1],u=v.sizeFromShape(l),p=[],c=a.makeTensorInfo([],"float32",new Float32Array([u]));p.push(c);let d=ss({inputs:{x:r},backend:a,attrs:{dtype:"float32"}});p.push(d);let h=S3({inputs:{a:d,b:c},backend:a});p.push(h);let m=Kp({inputs:{x:h},backend:a,attrs:{axis:s,keepDims:i}});return p.forEach(f=>a.disposeIntermediateTensorInfo(f)),m}var lV={kernelName:po,backendName:"cpu",kernelFunc:oV};function uV(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,keepDims:i}=n;Ie(r,"min");let o=v.parseAxisParam(s,r.shape),l=o,u=C.getAxesPermutation(l,r.shape.length),p=r;u!=null&&(p=Va({inputs:{x:r},backend:a,attrs:{perm:u}}),l=C.getInnerMostAxes(l.length,r.shape.length)),C.assertAxesAreInnerMostDims("min",l,p.shape.length);let[c,d]=C.computeOutAndReduceShapes(p.shape,l),h=v.sizeFromShape(d),m=v.makeZerosTypedArray(v.sizeFromShape(c),p.dtype),f=a.data.get(p.dataId).values;for(let y=0;yx[0]+r.shape[A]+x[1]),l=s.map(x=>x[0]),u=s.map((x,A)=>x[0]+r.shape[A]),p=i==="reflect"?0:1,c=a.data.get(r.dataId).values,d=r.shape.length,h=v.computeStrides(r.shape),m=v.sizeFromShape(o),f=o.length,g=v.computeStrides(o),y=v.getTypedArrayFromDType(r.dtype,m);for(let x=0;x=u[w]&&(A[w]=(u[w]-1)*2-A[w]+p);A=A.map((w,I)=>w-l[I]);let b=v.locToIndex(A,d,h);y[x]=c[b]}return{dataId:a.write(y,o,r.dtype),shape:o,dtype:r.dtype}}var cV={kernelName:mo,backendName:"cpu",kernelFunc:pV},hV=_t((e,t)=>{let a=e%t;return e<0&&t<0||e>=0&&t>=0?a:(a+t)%t}),mV=Kt(fo,hV),fV={kernelName:fo,backendName:"cpu",kernelFunc:mV},gV=nu(mA());function fv(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=mv({inputs:{x:r},backend:a,attrs:{reductionIndices:l,keepDims:!1}}),p=C.expandShapeToKeepDim(u.shape,l),c=bt({inputs:{x:u},backend:a,attrs:{shape:p}}),d=w3({inputs:{a:r,b:c},backend:a}),h=S6({inputs:{x:d},backend:a}),m=Kp({inputs:{x:h},backend:a,attrs:{axis:l,keepDims:!1}}),f=bt({inputs:{x:m},backend:a,attrs:{shape:p}}),g=S3({inputs:{a:h,b:f},backend:a});return a.disposeIntermediateTensorInfo(u),a.disposeIntermediateTensorInfo(c),a.disposeIntermediateTensorInfo(d),a.disposeIntermediateTensorInfo(h),a.disposeIntermediateTensorInfo(m),a.disposeIntermediateTensorInfo(f),g}var yV={kernelName:Ho,backendName:"cpu",kernelFunc:fv};function xV(e){let{inputs:t,backend:a,attrs:n}=e,{logits:r}=t,{numSamples:s,seed:i,normalized:o}=n;Ie(r,"multinomial");let l=o?r:fv({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 m=0;m=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=vh({inputs:{input:p},backend:a,attrs:{dim:r}});return o.push(c),c}),u=tu({inputs:l,backend:a,attrs:{axis:r}});return o.forEach(p=>a.disposeIntermediateTensorInfo(p)),u}var PV={kernelName:Tu,backendName:"cpu",kernelFunc:yv};function _V(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{paddings:s,constantValue:i}=n;Ie(r,"pad");let o=s.map((y,x)=>y[0]+r.shape[x]+y[1]),l=s.map(y=>y[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),m=o.length,f=v.computeStrides(o),g=v.getTypedArrayFromDType(r.dtype,h);i!==0&&g.fill(i);for(let y=0;yb+l[w]),A=v.locToIndex(x,m,f);g[A]=u[y]}return{dataId:a.write(g,o,r.dtype),shape:o,dtype:r.dtype}}var xv={kernelName:wo,backendName:"cpu",kernelFunc:_V},FV=_t((e,t)=>Math.pow(e,t)),DV=Kt(ko,FV),OV={kernelName:ko,backendName:"cpu",kernelFunc:DV};function zV(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),p=a.data.get(s.dataId).values,c=a.data.get(i.dataId).values,[d,h,m]=U6(l,u,p,s.shape,s.dtype,c,i.shape,o),f=d.map(y=>a.makeTensorInfo([y.length],"int32",y)),g=a.makeTensorInfo(m,s.dtype,h);return f.concat([g])}var LV={kernelName:$h,backendName:"cpu",kernelFunc:zV};function WV(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]=G6(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 BV={kernelName:Ph,backendName:"cpu",kernelFunc:WV};function VV(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),[m,f]=H6(u,r.shape,p,s.shape,s.dtype,c,i.shape,d,h,l);return a.makeTensorInfo(m,s.dtype,f)}var UV={kernelName:_h,backendName:"cpu",kernelFunc:VV};function GV(e){let{backend:t,attrs:a}=e,{start:n,stop:r,dtype:s,step:i}=a,o=y3(n,r,i,s);return t.makeTensorInfo([o.length],s,o)}var HV={kernelName:Nu,backendName:"cpu",kernelFunc:GV},jV=ct(Co,e=>1/e),qV={kernelName:Co,backendName:"cpu",kernelFunc:jV};function XV(e){let{inputs:t,backend:a,attrs:n}=e,{images:r}=t,{alignCorners:s,halfPixelCenters:i,size:o}=n;Ie(r,"resizeBilinear");let l=v.computeStrides(r.shape),[u,p]=o,[c,d,h,m]=r.shape,f=a.data.get(r.dataId).values,g=new Float32Array(v.sizeFromShape([c,u,p,m])),y=[s&&u>1?d-1:d,s&&p>1?h-1:h],x=[s&&u>1?u-1:u,s&&p>1?p-1:p],A=0,b=y[0]/x[0],w=y[1]/x[1];for(let I=0;I1?u-1:u,i&&h>1?p-1:p],g=[i&&d>1?d-1:d,i&&h>1?h-1:h],y=f[0]/g[0],x=f[1]/g[1],A=a.data.get(s.dataId).values,b=0;for(let w=0;w1?d-1:d,s&&p>1?h-1:h],x=[s&&u>1?u-1:u,s&&p>1?p-1:p],A=y[0]/x[0],b=y[1]/x[1],w=0;for(let I=0;I1?p-1:p,i&&m>1?c-1:c],x=[i&&h>1?h-1:h,i&&m>1?m-1:m],A=y[0]/x[0],b=y[1]/x[1],w=1/A,I=1/b,T=Math.ceil(w)*2+2,N=Math.ceil(I)*2+2;for(let M=0;M=h)continue;let X=$+Z*l[1],re=Z*A,ee=Math.min(p-1,i?Math.round(re):Math.floor(re));if(E===ee)for(let ge=0;ge=m)continue;let be=X+ie*l[2],Ce=ie*b,Re=Math.min(c-1,i?Math.round(Ce):Math.floor(Ce));W===Re&&(H+=g[be+q])}}f[P+q]=H}}}}return a.makeTensorInfo(r.shape,r.dtype,f)}var tU={kernelName:Eu,backendName:"cpu",kernelFunc:eU};function aU(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{dims:s}=n;Ie(r,"reverse");let i=r.shape.length,o=v.parseAxisParam(s,r.shape);if(i===0)return ar({inputs:{x:r},backend:a});let l=new Vt(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 nU={kernelName:Mo,backendName:"cpu",kernelFunc:aU},rU={kernelName:el,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,m]=C.getImageCenter(i,p,c),f=255,g=Math.sin(r),y=Math.cos(r),x=o.data.get(n.dataId).values;for(let A=0;A=0&&_=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}),iU={kernelName:$o,backendName:"cpu",kernelFunc:sU};function oU(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}=C.calculateShapes(s,r,i),d=!0,h=a.bufferSync(r),m=a.bufferSync(s),f=qs(h,m,i,c,u,l,o,p,0,d);return a.makeTensorInfo(i,f.dtype,f.values)}var lU={kernelName:_o,backendName:"cpu",kernelFunc:oU};function uU(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 m=0;me>=0?yU*e:gU*(Math.exp(e)-1)),AU={kernelName:Oo,backendName:"cpu",kernelFunc:xU},bU=ct(Wo,e=>e<0?-1:e>0?1:0),vU={kernelName:Wo,backendName:"cpu",kernelFunc:bU},wU=ct(zo,e=>Math.sin(e)),kU={kernelName:zo,backendName:"cpu",kernelFunc:wU},IU=ct(Lo,e=>Math.sinh(e)),SU={kernelName:Lo,backendName:"cpu",kernelFunc:IU},CU=11920928955078125e-23,k5=Math.log(CU)+2,TU=ct(Vo,e=>{let t=e>-k5,a=eNumber(g)))),a.makeTensorInfo([f.length],n.dtype,new Int32Array(f))]}var MU={kernelName:Ip,backendName:"cpu",kernelFunc:EU};function $U(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,m,f]=X6(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([m.length],"bool",new Uint8Array(m.map(g=>Number(g)))),a.makeTensorInfo([f.length],n.dtype,new Int32Array(f))]}var $U={kernelName:Ip,backendName:"cpu",kernelFunc:MU};function PU(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,p,c]=X6(o,n.shape,n.dtype,i,l);return[a.makeTensorInfo(p,n.dtype,u),a.makeTensorInfo([c.length],s.dtype,new Int32Array(c))]}var PU={kernelName:Du,backendName:"cpu",kernelFunc:$U};function _U(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]=K6(o,n.shape,n.dtype,i,l);return[a.makeTensorInfo(p,n.dtype,u),a.makeTensorInfo([c.length],s.dtype,new Int32Array(c))]}var _U={kernelName:Du,backendName:"cpu",kernelFunc:PU};function FU(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,p]=x3(i,n.shape,n.dtype,o,l,!0);return a.makeTensorInfo(p,n.dtype,u)}var FU={kernelName:Ou,backendName:"cpu",kernelFunc:_U};function DU(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]=x3(i,n.shape,n.dtype,o,l,!0);return a.makeTensorInfo(p,n.dtype,u)}var DU={kernelName:Ou,backendName:"cpu",kernelFunc:FU};function OU(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,p]=x3(i,n.shape,n.dtype,o,l);return a.makeTensorInfo(p,n.dtype,u)}var OU={kernelName:zu,backendName:"cpu",kernelFunc:DU};function zU(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}=C.calculateShapes(s,r,o),h=!1,m=a.bufferSync(r),f;switch(s.dtype){case"bool":{let g=a.bufferSync(s),y=!!a.data.get(i.dataId).values[0];f=qs(m,g,o,d,p,u,l,c,y,h);break}case"float32":{let g=a.bufferSync(s),y=a.data.get(i.dataId).values[0];f=qs(m,g,o,d,p,u,l,c,y,h);break}case"int32":{let g=a.bufferSync(s),y=a.data.get(i.dataId).values[0];f=qs(m,g,o,d,p,u,l,c,y,h);break}case"string":{let g=a.bufferSync(s),y=v.decodeString(a.data.get(i.dataId).values[0]);f=qs(m,g,o,d,p,u,l,c,y,h);break}default:throw new Error(`Unsupported type ${s.dtype}`)}return a.makeTensorInfo(o,f.dtype,f.values)}var LU={kernelName:jo,backendName:"cpu",kernelFunc:zU};function WU(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=C.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=ti({inputs:{x:r},backend:a,attrs:{begin:u,size:d}});return u[o]+=c,h})}var BU={kernelName:Fu,backendName:"cpu",kernelFunc:WU},VU={kernelName:Sp,backendName:"cpu",kernelFunc:({inputs:e,backend:t})=>{let{x:a}=e,n=t;Ie(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}),GU={kernelName:ds,backendName:"cpu",kernelFunc:UU};function HU(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;Ie(r,"stridedSlice");let{finalShapeSparse:h,finalShape:m,isIdentity:f,sliceDim0:g,isSimpleSlice:y,begin:x,end:A,strides:b}=Nt.sliceInfo(r.shape,s,i,o,l,u,p,c,d),w;if(f)w=bt({inputs:{x:r},backend:a,attrs:{shape:m}});else if(g||y){v.assert(r.shape.length>=1,()=>`Input must have rank at least 1, got: ${r.shape.length}`);let I=Nt.computeOutShape(x,A,b),T=ti({inputs:{x:r},backend:a,attrs:{begin:x,size:I}});w=bt({inputs:{x:T},backend:a,attrs:{shape:m}}),a.disposeIntermediateTensorInfo(T)}else{let I=a.bufferSync(r),T=Z6(h,I,b,x);w=a.makeTensorInfo(m,T.dtype,T.values)}return w}var jU={kernelName:Xo,backendName:"cpu",kernelFunc:HU};function qU(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,[m,f]=A3(d,h,r,s,i,o,l,u);return[a.makeTensorInfo([m.length],"string",m),a.makeTensorInfo(c.shape,"int32",f)]}var XU={kernelName:Lu,backendName:"cpu",kernelFunc:qU};function KU(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]=b3(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 YU={kernelName:Tp,backendName:"cpu",kernelFunc:KU};function ZU(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=v3(i,r);return a.makeTensorInfo(s.shape,"int32",o)}var JU={kernelName:Np,backendName:"cpu",kernelFunc:ZU},QU=ct(Yo,e=>Math.tan(e)),eG={kernelName:Yo,backendName:"cpu",kernelFunc:QU},tG=ct(Zo,e=>Math.tanh(e)),aG={kernelName:Zo,backendName:"cpu",kernelFunc:tG};function nG(e){let{inputs:t,backend:a}=e,{tensor:n,indices:r,updates:s}=t,{sliceRank:i,numUpdates:o,sliceSize:l,strides:u,outputSize:p}=C.calculateShapes(s,r,n.shape),c=!1,d=a.bufferSync(r),h=a.bufferSync(s),m=a.bufferSync(n),f=qs(d,h,n.shape,p,l,o,i,u,m,c);return a.makeTensorInfo(n.shape,f.dtype,f.values)}var rG={kernelName:Fo,backendName:"cpu",kernelFunc:nG};function sG(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{reps:s}=n;Ie(r,"tile");let i=Q6(a.bufferSync(r),s);return a.makeTensorInfo(i.shape,i.dtype,i.values)}var iG={kernelName:us,backendName:"cpu",kernelFunc:sG};function oG(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{k:s,sorted:i}=n;Ie(r,"topk");let o=a.data.get(r.dataId).values,[l,u]=tv(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 lG={kernelName:Jo,backendName:"cpu",kernelFunc:oG};function uG(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,[m,f]=u!=null?u:[c,d],g=[p,m,f,h],y=v.computeStrides(r.shape),x=y[0],A=y[1],b=y[2],w=v.computeStrides(g),I=w[0],T=w[1],N=w[2],M=v.getTypedArrayFromDType(r.dtype,v.sizeFromShape(g));M.fill(l);let $=n.data.get(r.dataId).values,E=n.data.get(s.dataId).values;for(let S=0;St-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 cG(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 hG(e,t){return e}function mG(e,t){return v.clamp(0,e,t-1)}function Td(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(m)),h}var wG={kernelName:Ep,backendName:"cpu",kernelFunc:vG},kG=[gL,KO,xL,bL,tz,wL,IL,CL,NL,EL,$L,_L,DL,LL,BL,GL,jL,XL,YL,mL,JL,eW,aW,nz,rW,QO,sz,iW,YO,lW,dW,pW,hW,fW,yW,AW,vW,kW,SW,TW,RW,MW,PW,FW,DW,zW,WW,VW,UW,GW,HW,qW,YW,oL,JW,iz,iB,oz,oB,uz,hB,mB,gB,pz,hz,xB,bB,wB,IB,fz,yz,ZO,CB,uW,NB,EB,$B,lL,Az,vz,_B,kz,DB,LB,BB,GB,jB,XB,KB,Sz,ZB,QB,tV,nV,sV,oV,uV,Tz,pV,mV,xV,Rz,Mz,vV,IV,TV,Pz,RV,MV,$V,yv,DV,dL,Dz,zV,WV,VV,GV,JO,P1,jV,pL,cL,hL,XV,YV,JV,eU,aU,nU,sU,Hz,oU,cU,mU,xU,qz,bU,wU,IU,Xz,gV,TU,RU,MU,PU,FU,OU,LU,BU,Zz,VU,Qz,tL,GU,jU,XU,YU,JU,sL,XW,eG,aG,rG,iG,lG,dG,_z,xG,bG,wG,EV];for(let e of kG)xn(e);var xv={};Ze(xv,{assertNotComplex:()=>ju,bindCanvasToFramebuffer:()=>_G,bindColorTextureToFramebuffer:()=>rh,bindTextureToProgramUniformSampler:()=>Pv,bindTextureUnit:()=>Ev,bindVertexBufferToProgramAttribute:()=>F1,callAndCheck:()=>ce,canBeRepresented:()=>Av,createFragmentShader:()=>wv,createFramebuffer:()=>Rv,createProgram:()=>kv,createStaticIndexBuffer:()=>Cv,createStaticVertexBuffer:()=>Sv,createTexture:()=>Tv,createVertexShader:()=>vv,getBatchDim:()=>ai,getExtensionOrThrow:()=>Nd,getFramebufferErrorMessage:()=>_v,getMaxTexturesInShader:()=>zv,getNumChannels:()=>$G,getProgramUniformLocation:()=>$v,getProgramUniformLocationOrThrow:()=>Mv,getRowsCols:()=>ni,getShapeAs3D:()=>Ed,getTextureShapeFromLogicalShape:()=>Dv,getWebGLDisjointQueryTimerVersion:()=>Lv,getWebGLErrorMessage:()=>bv,getWebGLMaxTextureSize:()=>Ov,hasExtension:()=>fn,isCapableOfRenderingToFloatTexture:()=>Wv,isDownloadFloatTextureEnabled:()=>Bv,isReshapeFree:()=>Qd,isWebGLFenceEnabled:()=>Vv,isWebGLVersionEnabled:()=>O1,linkProgram:()=>Iv,logShaderSourceAndInfoLog:()=>N3,resetMaxTextureSize:()=>FG,resetMaxTexturesInShader:()=>DG,unbindColorTextureFromFramebuffer:()=>D1,unbindTextureUnit:()=>PG,validateFramebuffer:()=>Rd,validateProgram:()=>nh,validateTextureSize:()=>Nv});var Gs={},Yc={alpha:!1,antialias:!1,premultipliedAlpha:!1,preserveDrawingBuffer:!1,depth:!1,stencil:!1,failIfMajorPerformanceCaveat:!0};function n0(e,t){Gs[e]=t}function Wn(e,t){if(!(e in Gs)||t!=null){let n=SG(e,t);if(n!==null)Gs[e]=n;else return console.log("Could not get context for WebGL version",e),null}let a=Gs[e];return a==null||a.isContextLost()?(delete Gs[e],Wn(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),Gs[e])}function IG(e){if(!B().getBool("IS_SAFARI")&&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 SG(e,t){if(e!==1&&e!==2)throw new Error("Cannot get WebGL rendering context, WebGL is disabled.");let a=t==null?IG(e):t;return a.addEventListener("webglcontextlost",n=>{n.preventDefault(),delete Gs[e]},!1),B().getBool("SOFTWARE_WEBGL_ENABLED")&&(Yc.failIfMajorPerformanceCaveat=!1),e===1?a.getContext("webgl",Yc)||a.getContext("experimental-webgl",Yc):a.getContext("webgl2",Yc)}var Jd;(function(e){e[e.DENSE=0]="DENSE",e[e.SHARED_BATCH=1]="SHARED_BATCH"})(Jd||(Jd={}));var mn;(function(e){e[e.RENDER=0]="RENDER",e[e.UPLOAD=1]="UPLOAD",e[e.PIXELS=2]="PIXELS",e[e.DOWNLOAD=3]="DOWNLOAD"})(mn||(mn={}));var da;(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"})(da||(da={}));function Yp(e,t){return[t,e]}function CG(e,t){return e*t}function Zc(e){let t=v.sizeFromShape(e),a=Math.ceil(t/4);return v.sizeToSquarishShape(a)}function Hu(e,t){return[Math.max(1,Math.ceil(t/2)),Math.max(1,Math.ceil(e/2))]}function TG(e,t){let[a,n]=Hu(e,t);return a*n*4}function T3(e,t){let a=e,n,r,s,i,o,l,u,p,c,d;return B().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 ce(e,t){let a=t();return B().getBool("DEBUG")&&NG(e),a}function NG(e){let t=e.getError();if(t!==e.NO_ERROR)throw new Error("WebGL Error: "+bv(e,t))}var RG=596e-10,EG=65504;function Av(e){return!!(B().getBool("WEBGL_RENDER_FLOAT32_ENABLED")||e===0||RGe.getExtension(t),'Extension "'+t+'" not supported on this browser.')}function vv(e,t){let a=Mr(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 wv(e,t){let a=Mr(e,()=>e.createShader(e.FRAGMENT_SHADER),"Unable to create fragment WebGLShader.");if(ce(e,()=>e.shaderSource(a,t)),ce(e,()=>e.compileShader(a)),B().get("ENGINE_COMPILE_ONLY"))return a;if(e.getShaderParameter(a,e.COMPILE_STATUS)===!1)throw N3(t,e.getShaderInfoLog(a)),new Error("Failed to compile fragment shader.");return a}var MG=/ERROR: [0-9]+:([0-9]+):/g;function N3(e,t){let a=MG.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.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]=x3(i,n.shape,n.dtype,o,l);return a.makeTensorInfo(p,n.dtype,u)}var zU={kernelName:zu,backendName:"cpu",kernelFunc:OU};function LU(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}=C.calculateShapes(s,r,o),h=!1,m=a.bufferSync(r),f;switch(s.dtype){case"bool":{let g=a.bufferSync(s),y=!!a.data.get(i.dataId).values[0];f=qs(m,g,o,d,p,u,l,c,y,h);break}case"float32":{let g=a.bufferSync(s),y=a.data.get(i.dataId).values[0];f=qs(m,g,o,d,p,u,l,c,y,h);break}case"int32":{let g=a.bufferSync(s),y=a.data.get(i.dataId).values[0];f=qs(m,g,o,d,p,u,l,c,y,h);break}case"string":{let g=a.bufferSync(s),y=v.decodeString(a.data.get(i.dataId).values[0]);f=qs(m,g,o,d,p,u,l,c,y,h);break}default:throw new Error(`Unsupported type ${s.dtype}`)}return a.makeTensorInfo(o,f.dtype,f.values)}var WU={kernelName:jo,backendName:"cpu",kernelFunc:LU};function BU(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=C.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=ti({inputs:{x:r},backend:a,attrs:{begin:u,size:d}});return u[o]+=c,h})}var VU={kernelName:Fu,backendName:"cpu",kernelFunc:BU},UU={kernelName:Sp,backendName:"cpu",kernelFunc:({inputs:e,backend:t})=>{let{x:a}=e,n=t;Ie(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}),HU={kernelName:ds,backendName:"cpu",kernelFunc:GU};function jU(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;Ie(r,"stridedSlice");let{finalShapeSparse:h,finalShape:m,isIdentity:f,sliceDim0:g,isSimpleSlice:y,begin:x,end:A,strides:b}=Nt.sliceInfo(r.shape,s,i,o,l,u,p,c,d),w;if(f)w=bt({inputs:{x:r},backend:a,attrs:{shape:m}});else if(g||y){v.assert(r.shape.length>=1,()=>`Input must have rank at least 1, got: ${r.shape.length}`);let I=Nt.computeOutShape(x,A,b),T=ti({inputs:{x:r},backend:a,attrs:{begin:x,size:I}});w=bt({inputs:{x:T},backend:a,attrs:{shape:m}}),a.disposeIntermediateTensorInfo(T)}else{let I=a.bufferSync(r),T=J6(h,I,b,x);w=a.makeTensorInfo(m,T.dtype,T.values)}return w}var qU={kernelName:Xo,backendName:"cpu",kernelFunc:jU};function XU(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,[m,f]=A3(d,h,r,s,i,o,l,u);return[a.makeTensorInfo([m.length],"string",m),a.makeTensorInfo(c.shape,"int32",f)]}var KU={kernelName:Lu,backendName:"cpu",kernelFunc:XU};function YU(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]=b3(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 ZU={kernelName:Tp,backendName:"cpu",kernelFunc:YU};function JU(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=v3(i,r);return a.makeTensorInfo(s.shape,"int32",o)}var QU={kernelName:Np,backendName:"cpu",kernelFunc:JU},eG=ct(Yo,e=>Math.tan(e)),tG={kernelName:Yo,backendName:"cpu",kernelFunc:eG},aG=ct(Zo,e=>Math.tanh(e)),nG={kernelName:Zo,backendName:"cpu",kernelFunc:aG};function rG(e){let{inputs:t,backend:a}=e,{tensor:n,indices:r,updates:s}=t,{sliceRank:i,numUpdates:o,sliceSize:l,strides:u,outputSize:p}=C.calculateShapes(s,r,n.shape),c=!1,d=a.bufferSync(r),h=a.bufferSync(s),m=a.bufferSync(n),f=qs(d,h,n.shape,p,l,o,i,u,m,c);return a.makeTensorInfo(n.shape,f.dtype,f.values)}var sG={kernelName:Fo,backendName:"cpu",kernelFunc:rG};function iG(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{reps:s}=n;Ie(r,"tile");let i=ev(a.bufferSync(r),s);return a.makeTensorInfo(i.shape,i.dtype,i.values)}var oG={kernelName:us,backendName:"cpu",kernelFunc:iG};function lG(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{k:s,sorted:i}=n;Ie(r,"topk");let o=a.data.get(r.dataId).values,[l,u]=av(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 uG={kernelName:Jo,backendName:"cpu",kernelFunc:lG};function dG(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,[m,f]=u!=null?u:[c,d],g=[p,m,f,h],y=v.computeStrides(r.shape),x=y[0],A=y[1],b=y[2],w=v.computeStrides(g),I=w[0],T=w[1],N=w[2],M=v.getTypedArrayFromDType(r.dtype,v.sizeFromShape(g));M.fill(l);let $=n.data.get(r.dataId).values,E=n.data.get(s.dataId).values;for(let S=0;St-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 hG(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 mG(e,t){return e}function fG(e,t){return v.clamp(0,e,t-1)}function Td(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(m)),h}var kG={kernelName:Ep,backendName:"cpu",kernelFunc:wG},IG=[yL,YO,AL,vL,az,kL,SL,TL,RL,ML,PL,FL,OL,WL,VL,HL,qL,KL,ZL,fL,QL,tW,nW,rz,sW,ez,iz,oW,ZO,uW,pW,cW,mW,gW,xW,bW,wW,IW,CW,NW,EW,$W,_W,DW,OW,LW,BW,UW,GW,HW,jW,XW,ZW,lL,QW,oz,oB,lz,lB,dz,mB,fB,yB,cz,mz,AB,vB,kB,SB,gz,xz,JO,TB,dW,RB,MB,PB,uL,bz,wz,FB,Iz,OB,WB,VB,HB,qB,KB,YB,Cz,JB,eV,aV,rV,iV,lV,dV,Nz,cV,fV,AV,Ez,$z,wV,SV,NV,_z,EV,$V,PV,xv,OV,pL,Oz,LV,BV,UV,HV,QO,P1,qV,cL,hL,mL,KV,ZV,QV,tU,nU,rU,iU,jz,lU,hU,fU,AU,Xz,vU,kU,SU,Kz,yV,NU,EU,$U,_U,DU,zU,WU,VU,Jz,UU,eL,aL,HU,qU,KU,ZU,QU,iL,KW,tG,nG,sG,oG,uG,pG,Fz,AG,vG,kG,MV];for(let e of IG)xn(e);var Av={};Ze(Av,{assertNotComplex:()=>ju,bindCanvasToFramebuffer:()=>FG,bindColorTextureToFramebuffer:()=>rh,bindTextureToProgramUniformSampler:()=>_v,bindTextureUnit:()=>Mv,bindVertexBufferToProgramAttribute:()=>F1,callAndCheck:()=>ce,canBeRepresented:()=>bv,createFragmentShader:()=>kv,createFramebuffer:()=>Ev,createProgram:()=>Iv,createStaticIndexBuffer:()=>Tv,createStaticVertexBuffer:()=>Cv,createTexture:()=>Nv,createVertexShader:()=>wv,getBatchDim:()=>ai,getExtensionOrThrow:()=>Nd,getFramebufferErrorMessage:()=>Fv,getMaxTexturesInShader:()=>Lv,getNumChannels:()=>PG,getProgramUniformLocation:()=>Pv,getProgramUniformLocationOrThrow:()=>$v,getRowsCols:()=>ni,getShapeAs3D:()=>Ed,getTextureShapeFromLogicalShape:()=>Ov,getWebGLDisjointQueryTimerVersion:()=>Wv,getWebGLErrorMessage:()=>vv,getWebGLMaxTextureSize:()=>zv,hasExtension:()=>fn,isCapableOfRenderingToFloatTexture:()=>Bv,isDownloadFloatTextureEnabled:()=>Vv,isReshapeFree:()=>Qd,isWebGLFenceEnabled:()=>Uv,isWebGLVersionEnabled:()=>O1,linkProgram:()=>Sv,logShaderSourceAndInfoLog:()=>N3,resetMaxTextureSize:()=>DG,resetMaxTexturesInShader:()=>OG,unbindColorTextureFromFramebuffer:()=>D1,unbindTextureUnit:()=>_G,validateFramebuffer:()=>Rd,validateProgram:()=>nh,validateTextureSize:()=>Rv});var Gs={},Yc={alpha:!1,antialias:!1,premultipliedAlpha:!1,preserveDrawingBuffer:!1,depth:!1,stencil:!1,failIfMajorPerformanceCaveat:!0};function n0(e,t){Gs[e]=t}function Wn(e,t){if(!(e in Gs)||t!=null){let n=CG(e,t);if(n!==null)Gs[e]=n;else return console.log("Could not get context for WebGL version",e),null}let a=Gs[e];return a==null||a.isContextLost()?(delete Gs[e],Wn(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),Gs[e])}function SG(e){if(!B().getBool("IS_SAFARI")&&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 CG(e,t){if(e!==1&&e!==2)throw new Error("Cannot get WebGL rendering context, WebGL is disabled.");let a=t==null?SG(e):t;return a.addEventListener("webglcontextlost",n=>{n.preventDefault(),delete Gs[e]},!1),B().getBool("SOFTWARE_WEBGL_ENABLED")&&(Yc.failIfMajorPerformanceCaveat=!1),e===1?a.getContext("webgl",Yc)||a.getContext("experimental-webgl",Yc):a.getContext("webgl2",Yc)}var Jd;(function(e){e[e.DENSE=0]="DENSE",e[e.SHARED_BATCH=1]="SHARED_BATCH"})(Jd||(Jd={}));var mn;(function(e){e[e.RENDER=0]="RENDER",e[e.UPLOAD=1]="UPLOAD",e[e.PIXELS=2]="PIXELS",e[e.DOWNLOAD=3]="DOWNLOAD"})(mn||(mn={}));var da;(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"})(da||(da={}));function Yp(e,t){return[t,e]}function TG(e,t){return e*t}function Zc(e){let t=v.sizeFromShape(e),a=Math.ceil(t/4);return v.sizeToSquarishShape(a)}function Hu(e,t){return[Math.max(1,Math.ceil(t/2)),Math.max(1,Math.ceil(e/2))]}function NG(e,t){let[a,n]=Hu(e,t);return a*n*4}function T3(e,t){let a=e,n,r,s,i,o,l,u,p,c,d;return B().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 ce(e,t){let a=t();return B().getBool("DEBUG")&&RG(e),a}function RG(e){let t=e.getError();if(t!==e.NO_ERROR)throw new Error("WebGL Error: "+vv(e,t))}var EG=596e-10,MG=65504;function bv(e){return!!(B().getBool("WEBGL_RENDER_FLOAT32_ENABLED")||e===0||EGe.getExtension(t),'Extension "'+t+'" not supported on this browser.')}function wv(e,t){let a=Mr(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 kv(e,t){let a=Mr(e,()=>e.createShader(e.FRAGMENT_SHADER),"Unable to create fragment WebGLShader.");if(ce(e,()=>e.shaderSource(a,t)),ce(e,()=>e.compileShader(a)),B().get("ENGINE_COMPILE_ONLY"))return a;if(e.getShaderParameter(a,e.COMPILE_STATUS)===!1)throw N3(t,e.getShaderInfoLog(a)),new Error("Failed to compile fragment shader.");return a}var $G=/ERROR: [0-9]+:([0-9]+):/g;function N3(e,t){let a=$G.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 Iv(e,t){if(ce(e,()=>e.linkProgram(t)),!B().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 nh(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 Sv(e,t){let a=Mr(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 Cv(e,t){let a=Mr(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 $G(){return B().getNumber("WEBGL_VERSION")===2?1:4}function Tv(e){return Mr(e,()=>e.createTexture(),"Unable to create WebGLTexture.")}function Nv(e,t){let a=B().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 Rv(e){return Mr(e,()=>e.createFramebuffer(),"Unable to create WebGLFramebuffer.")}function F1(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 Ev(e,t,a){Fv(e,a),ce(e,()=>e.activeTexture(e.TEXTURE0+a)),ce(e,()=>e.bindTexture(e.TEXTURE_2D,t))}function PG(e,t){Fv(e,t),ce(e,()=>e.activeTexture(e.TEXTURE0+t)),ce(e,()=>e.bindTexture(e.TEXTURE_2D,null))}function Mv(e,t,a){return Mr(e,()=>e.getUniformLocation(t,a),'uniform "'+a+'" not present in program.')}function $v(e,t,a){return e.getUniformLocation(t,a)}function Pv(e,t,a,n){ce(e,()=>Ev(e,t,n)),ce(e,()=>e.uniform1i(a,n))}function _G(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 rh(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 D1(e,t){ce(e,()=>e.bindFramebuffer(e.FRAMEBUFFER,t)),ce(e,()=>e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,null,0))}function Rd(e){let t=e.checkFramebufferStatus(e.FRAMEBUFFER);if(t!==e.FRAMEBUFFER_COMPLETE)throw new Error("Error binding framebuffer: "+_v(e,t))}function _v(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 Mr(e,t,a){let n=ce(e,()=>t());if(n==null)throw new Error(a);return n}function Fv(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 ai(e,t=2){return v.sizeFromShape(e.slice(0,e.length-t))}function ni(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 Ed(e){let t=[1,1,1];return e.length===0||e.length===1&&e[0]===1||(t=[ai(e),...ni(e)]),t}function Dv(e,t=!1){let a=B().getNumber("WEBGL_MAX_TEXTURE_SIZE"),n=B().getNumber("WEBGL_MAX_SIZE_FOR_NARROW_TEXTURE");n===1/0&&B().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=ai(e),l=2,u=2;e.length&&([l,u]=ni(e)),r=o*(l/2)*(u/2),s=v.sizeToSquarishShape(r).map(p=>p*2)}else s=v.sizeToSquarishShape(r);return s}function Jc(e){return e%2===0}function Qd(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[e.length-1],n=t[t.length-1];if(a===n||Jc(a)&&Jc(n)&&(e[0]===1||t[0]===1))return!0}return e[1]===t[1]&&Jc(e[0])&&Jc(t[0])}var sh,ih;function Ov(e){if(sh==null){let t=Wn(e);sh=t.getParameter(t.MAX_TEXTURE_SIZE)}return sh}function FG(){sh=null}function DG(){ih=null}function zv(e){if(ih==null){let t=Wn(e);ih=t.getParameter(t.MAX_TEXTURE_IMAGE_UNITS)}return Math.min(16,ih)}function Lv(e){if(e===0)return 0;let t,a=Wn(e);return fn(a,"EXT_disjoint_timer_query_webgl2")&&e===2?t=2:fn(a,"EXT_disjoint_timer_query")?t=1:t=0,t}function fn(e,t){return e.getExtension(t)!=null}function O1(e){try{if(Wn(e)!=null)return!0}catch(t){return console.log("Error when getting WebGL context: ",t),!1}return!1}function Wv(e){if(e===0)return!1;let t=Wn(e);if(e===1){if(!fn(t,"OES_texture_float"))return!1}else if(!fn(t,"EXT_color_buffer_float"))return!1;return z1(t)}function Bv(e){if(e===0)return!1;let t=Wn(e);if(e===1){if(!fn(t,"OES_texture_float")||!fn(t,"WEBGL_color_buffer_float"))return!1}else{if(fn(t,"EXT_color_buffer_float"))return z1(t);let a="EXT_color_buffer_half_float";if(fn(t,a)){let n=t.getExtension(a);return OG(t,n)}return!1}return z1(t)}function z1(e){let t=T3(e),a=e.createTexture();e.bindTexture(e.TEXTURE_2D,a),e.texImage2D(e.TEXTURE_2D,0,t.internalFormatFloat,1,1,0,t.textureFormatFloat,t.textureTypeFloat,null);let n=e.createFramebuffer();e.bindFramebuffer(e.FRAMEBUFFER,n),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,a,0);let r=e.checkFramebufferStatus(e.FRAMEBUFFER)===e.FRAMEBUFFER_COMPLETE;return e.bindTexture(e.TEXTURE_2D,null),e.bindFramebuffer(e.FRAMEBUFFER,null),e.deleteTexture(a),e.deleteFramebuffer(n),r}function OG(e,t){let a=T3(e,t),n=e.createTexture();e.bindTexture(e.TEXTURE_2D,n),e.texImage2D(e.TEXTURE_2D,0,a.internalFormatHalfFloat,1,1,0,a.textureFormatFloat,a.textureTypeHalfFloat,null);let r=e.createFramebuffer();e.bindFramebuffer(e.FRAMEBUFFER,r),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,n,0);let s=e.checkFramebufferStatus(e.FRAMEBUFFER)===e.FRAMEBUFFER_COMPLETE;return e.bindTexture(e.TEXTURE_2D,null),e.bindFramebuffer(e.FRAMEBUFFER,null),e.deleteTexture(n),e.deleteFramebuffer(r),s}function Vv(e){return e!==2?!1:Wn(e).fenceSync!=null}function ju(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 Se=B();Se.registerFlag("HAS_WEBGL",()=>Se.getNumber("WEBGL_VERSION")>0);Se.registerFlag("WEBGL_VERSION",()=>O1(2)?2:O1(1)?1:0);Se.registerFlag("WEBGL_CHECK_NUMERICAL_PROBLEMS",()=>!1);Se.registerFlag("WEBGL_BUFFER_SUPPORTED",()=>Se.get("WEBGL_VERSION")===2);Se.registerFlag("WEBGL_CPU_FORWARD",()=>!0);Se.registerFlag("WEBGL_FORCE_F16_TEXTURES",()=>!1);Se.registerFlag("WEBGL_PACK",()=>Se.getBool("HAS_WEBGL"));Se.registerFlag("WEBGL_PACK_NORMALIZATION",()=>Se.getBool("WEBGL_PACK"));Se.registerFlag("WEBGL_PACK_CLIP",()=>Se.getBool("WEBGL_PACK"));Se.registerFlag("WEBGL_PACK_DEPTHWISECONV",()=>Se.getBool("WEBGL_PACK"));Se.registerFlag("WEBGL_PACK_BINARY_OPERATIONS",()=>Se.getBool("WEBGL_PACK"));Se.registerFlag("WEBGL_PACK_UNARY_OPERATIONS",()=>Se.getBool("WEBGL_PACK"));Se.registerFlag("WEBGL_PACK_ARRAY_OPERATIONS",()=>Se.getBool("WEBGL_PACK"));Se.registerFlag("WEBGL_PACK_IMAGE_OPERATIONS",()=>Se.getBool("WEBGL_PACK"));Se.registerFlag("WEBGL_PACK_REDUCE",()=>Se.getBool("WEBGL_PACK"));Se.registerFlag("WEBGL_LAZILY_UNPACK",()=>Se.getBool("WEBGL_PACK"));Se.registerFlag("WEBGL_CONV_IM2COL",()=>Se.getBool("WEBGL_PACK"));Se.registerFlag("WEBGL_PACK_CONV2DTRANSPOSE",()=>Se.getBool("WEBGL_PACK"));Se.registerFlag("WEBGL_MAX_TEXTURE_SIZE",()=>Ov(Se.getNumber("WEBGL_VERSION")));Se.registerFlag("WEBGL_MAX_TEXTURES_IN_SHADER",()=>zv(Se.getNumber("WEBGL_VERSION")));Se.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION",()=>{let e=Se.getNumber("WEBGL_VERSION");return e===0?0:Lv(e)});Se.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE",()=>Se.getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")>0&&!_p.isMobile());Se.registerFlag("WEBGL_RENDER_FLOAT32_CAPABLE",()=>Wv(Se.getNumber("WEBGL_VERSION")));Se.registerFlag("WEBGL_RENDER_FLOAT32_ENABLED",()=>Se.getBool("WEBGL_FORCE_F16_TEXTURES")?!1:Se.getBool("WEBGL_RENDER_FLOAT32_CAPABLE"));Se.registerFlag("WEBGL_DOWNLOAD_FLOAT_ENABLED",()=>Bv(Se.getNumber("WEBGL_VERSION")));Se.registerFlag("WEBGL_FENCE_API_ENABLED",()=>Vv(Se.getNumber("WEBGL_VERSION")));Se.registerFlag("WEBGL_SIZE_UPLOAD_UNIFORM",()=>Se.getBool("WEBGL_RENDER_FLOAT32_ENABLED")?4:0);Se.registerFlag("WEBGL_DELETE_TEXTURE_THRESHOLD",()=>-1,e=>{if(typeof e!="number")throw new Error(`WEBGL_DELETE_TEXTURE_THRESHOLD must be a number but got ${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}.`)});Se.registerFlag("WEBGL_FLUSH_THRESHOLD",()=>_p.isMobile()?1:-1,e=>{if(typeof e!="number")throw new Error(`WEBGL_FLUSH_THRESHOLD must be a number but got ${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}.`)});Se.registerFlag("CPU_HANDOFF_SIZE_THRESHOLD",()=>128);Se.registerFlag("WEBGL_USE_SHAPES_UNIFORMS",()=>!1);Se.registerFlag("TOPK_LAST_DIM_CPU_HANDOFF_SIZE_THRESHOLD",()=>1e5);Se.registerFlag("TOPK_K_CPU_HANDOFF_THRESHOLD",()=>128);Se.registerFlag("WEBGL_EXP_CONV",()=>!1);Se.registerFlag("SOFTWARE_WEBGL_ENABLED",()=>Se.getBool("IS_TEST"));Se.registerFlag("WEBGL_MAX_SIZE_FOR_NARROW_TEXTURE",()=>1/0);Se.registerFlag("WEBGL_AUTO_SQUARIFY_NARROW_TEXTURE_SHAPE",()=>!1);Se.registerFlag("WEBGL2_ISNAN_CUSTOM",()=>!1);Se.registerFlag("ENGINE_COMPILE_ONLY",()=>!1);function Ra(){let e,t,a,n,r,s,i,o,l,u;return B().getNumber("WEBGL_VERSION")===2?(e="#version 300 es",t="in",a="out",n="in",r="texture",s="outputColor",i="out vec4 outputColor;",o=B().getBool("WEBGL2_ISNAN_CUSTOM")?` +`))}function Iv(e){return Mr(e,()=>e.createProgram(),"Unable to create WebGLProgram.")}function Sv(e,t){if(ce(e,()=>e.linkProgram(t)),!B().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 nh(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 Cv(e,t){let a=Mr(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 Tv(e,t){let a=Mr(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 PG(){return B().getNumber("WEBGL_VERSION")===2?1:4}function Nv(e){return Mr(e,()=>e.createTexture(),"Unable to create WebGLTexture.")}function Rv(e,t){let a=B().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 Ev(e){return Mr(e,()=>e.createFramebuffer(),"Unable to create WebGLFramebuffer.")}function F1(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 Mv(e,t,a){Dv(e,a),ce(e,()=>e.activeTexture(e.TEXTURE0+a)),ce(e,()=>e.bindTexture(e.TEXTURE_2D,t))}function _G(e,t){Dv(e,t),ce(e,()=>e.activeTexture(e.TEXTURE0+t)),ce(e,()=>e.bindTexture(e.TEXTURE_2D,null))}function $v(e,t,a){return Mr(e,()=>e.getUniformLocation(t,a),'uniform "'+a+'" not present in program.')}function Pv(e,t,a){return e.getUniformLocation(t,a)}function _v(e,t,a,n){ce(e,()=>Mv(e,t,n)),ce(e,()=>e.uniform1i(a,n))}function FG(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 rh(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 D1(e,t){ce(e,()=>e.bindFramebuffer(e.FRAMEBUFFER,t)),ce(e,()=>e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,null,0))}function Rd(e){let t=e.checkFramebufferStatus(e.FRAMEBUFFER);if(t!==e.FRAMEBUFFER_COMPLETE)throw new Error("Error binding framebuffer: "+Fv(e,t))}function Fv(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 Mr(e,t,a){let n=ce(e,()=>t());if(n==null)throw new Error(a);return n}function Dv(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 ai(e,t=2){return v.sizeFromShape(e.slice(0,e.length-t))}function ni(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 Ed(e){let t=[1,1,1];return e.length===0||e.length===1&&e[0]===1||(t=[ai(e),...ni(e)]),t}function Ov(e,t=!1){let a=B().getNumber("WEBGL_MAX_TEXTURE_SIZE"),n=B().getNumber("WEBGL_MAX_SIZE_FOR_NARROW_TEXTURE");n===1/0&&B().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=ai(e),l=2,u=2;e.length&&([l,u]=ni(e)),r=o*(l/2)*(u/2),s=v.sizeToSquarishShape(r).map(p=>p*2)}else s=v.sizeToSquarishShape(r);return s}function Jc(e){return e%2===0}function Qd(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[e.length-1],n=t[t.length-1];if(a===n||Jc(a)&&Jc(n)&&(e[0]===1||t[0]===1))return!0}return e[1]===t[1]&&Jc(e[0])&&Jc(t[0])}var sh,ih;function zv(e){if(sh==null){let t=Wn(e);sh=t.getParameter(t.MAX_TEXTURE_SIZE)}return sh}function DG(){sh=null}function OG(){ih=null}function Lv(e){if(ih==null){let t=Wn(e);ih=t.getParameter(t.MAX_TEXTURE_IMAGE_UNITS)}return Math.min(16,ih)}function Wv(e){if(e===0)return 0;let t,a=Wn(e);return fn(a,"EXT_disjoint_timer_query_webgl2")&&e===2?t=2:fn(a,"EXT_disjoint_timer_query")?t=1:t=0,t}function fn(e,t){return e.getExtension(t)!=null}function O1(e){try{if(Wn(e)!=null)return!0}catch(t){return console.log("Error when getting WebGL context: ",t),!1}return!1}function Bv(e){if(e===0)return!1;let t=Wn(e);if(e===1){if(!fn(t,"OES_texture_float"))return!1}else if(!fn(t,"EXT_color_buffer_float"))return!1;return z1(t)}function Vv(e){if(e===0)return!1;let t=Wn(e);if(e===1){if(!fn(t,"OES_texture_float")||!fn(t,"WEBGL_color_buffer_float"))return!1}else{if(fn(t,"EXT_color_buffer_float"))return z1(t);let a="EXT_color_buffer_half_float";if(fn(t,a)){let n=t.getExtension(a);return zG(t,n)}return!1}return z1(t)}function z1(e){let t=T3(e),a=e.createTexture();e.bindTexture(e.TEXTURE_2D,a),e.texImage2D(e.TEXTURE_2D,0,t.internalFormatFloat,1,1,0,t.textureFormatFloat,t.textureTypeFloat,null);let n=e.createFramebuffer();e.bindFramebuffer(e.FRAMEBUFFER,n),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,a,0);let r=e.checkFramebufferStatus(e.FRAMEBUFFER)===e.FRAMEBUFFER_COMPLETE;return e.bindTexture(e.TEXTURE_2D,null),e.bindFramebuffer(e.FRAMEBUFFER,null),e.deleteTexture(a),e.deleteFramebuffer(n),r}function zG(e,t){let a=T3(e,t),n=e.createTexture();e.bindTexture(e.TEXTURE_2D,n),e.texImage2D(e.TEXTURE_2D,0,a.internalFormatHalfFloat,1,1,0,a.textureFormatFloat,a.textureTypeHalfFloat,null);let r=e.createFramebuffer();e.bindFramebuffer(e.FRAMEBUFFER,r),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,n,0);let s=e.checkFramebufferStatus(e.FRAMEBUFFER)===e.FRAMEBUFFER_COMPLETE;return e.bindTexture(e.TEXTURE_2D,null),e.bindFramebuffer(e.FRAMEBUFFER,null),e.deleteTexture(n),e.deleteFramebuffer(r),s}function Uv(e){return e!==2?!1:Wn(e).fenceSync!=null}function ju(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 Se=B();Se.registerFlag("HAS_WEBGL",()=>Se.getNumber("WEBGL_VERSION")>0);Se.registerFlag("WEBGL_VERSION",()=>O1(2)?2:O1(1)?1:0);Se.registerFlag("WEBGL_CHECK_NUMERICAL_PROBLEMS",()=>!1);Se.registerFlag("WEBGL_BUFFER_SUPPORTED",()=>Se.get("WEBGL_VERSION")===2);Se.registerFlag("WEBGL_CPU_FORWARD",()=>!0);Se.registerFlag("WEBGL_FORCE_F16_TEXTURES",()=>!1);Se.registerFlag("WEBGL_PACK",()=>Se.getBool("HAS_WEBGL"));Se.registerFlag("WEBGL_PACK_NORMALIZATION",()=>Se.getBool("WEBGL_PACK"));Se.registerFlag("WEBGL_PACK_CLIP",()=>Se.getBool("WEBGL_PACK"));Se.registerFlag("WEBGL_PACK_DEPTHWISECONV",()=>Se.getBool("WEBGL_PACK"));Se.registerFlag("WEBGL_PACK_BINARY_OPERATIONS",()=>Se.getBool("WEBGL_PACK"));Se.registerFlag("WEBGL_PACK_UNARY_OPERATIONS",()=>Se.getBool("WEBGL_PACK"));Se.registerFlag("WEBGL_PACK_ARRAY_OPERATIONS",()=>Se.getBool("WEBGL_PACK"));Se.registerFlag("WEBGL_PACK_IMAGE_OPERATIONS",()=>Se.getBool("WEBGL_PACK"));Se.registerFlag("WEBGL_PACK_REDUCE",()=>Se.getBool("WEBGL_PACK"));Se.registerFlag("WEBGL_LAZILY_UNPACK",()=>Se.getBool("WEBGL_PACK"));Se.registerFlag("WEBGL_CONV_IM2COL",()=>Se.getBool("WEBGL_PACK"));Se.registerFlag("WEBGL_PACK_CONV2DTRANSPOSE",()=>Se.getBool("WEBGL_PACK"));Se.registerFlag("WEBGL_MAX_TEXTURE_SIZE",()=>zv(Se.getNumber("WEBGL_VERSION")));Se.registerFlag("WEBGL_MAX_TEXTURES_IN_SHADER",()=>Lv(Se.getNumber("WEBGL_VERSION")));Se.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION",()=>{let e=Se.getNumber("WEBGL_VERSION");return e===0?0:Wv(e)});Se.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE",()=>Se.getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")>0&&!_p.isMobile());Se.registerFlag("WEBGL_RENDER_FLOAT32_CAPABLE",()=>Bv(Se.getNumber("WEBGL_VERSION")));Se.registerFlag("WEBGL_RENDER_FLOAT32_ENABLED",()=>Se.getBool("WEBGL_FORCE_F16_TEXTURES")?!1:Se.getBool("WEBGL_RENDER_FLOAT32_CAPABLE"));Se.registerFlag("WEBGL_DOWNLOAD_FLOAT_ENABLED",()=>Vv(Se.getNumber("WEBGL_VERSION")));Se.registerFlag("WEBGL_FENCE_API_ENABLED",()=>Uv(Se.getNumber("WEBGL_VERSION")));Se.registerFlag("WEBGL_SIZE_UPLOAD_UNIFORM",()=>Se.getBool("WEBGL_RENDER_FLOAT32_ENABLED")?4:0);Se.registerFlag("WEBGL_DELETE_TEXTURE_THRESHOLD",()=>-1,e=>{if(typeof e!="number")throw new Error(`WEBGL_DELETE_TEXTURE_THRESHOLD must be a number but got ${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}.`)});Se.registerFlag("WEBGL_FLUSH_THRESHOLD",()=>_p.isMobile()?1:-1,e=>{if(typeof e!="number")throw new Error(`WEBGL_FLUSH_THRESHOLD must be a number but got ${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}.`)});Se.registerFlag("CPU_HANDOFF_SIZE_THRESHOLD",()=>128);Se.registerFlag("WEBGL_USE_SHAPES_UNIFORMS",()=>!1);Se.registerFlag("TOPK_LAST_DIM_CPU_HANDOFF_SIZE_THRESHOLD",()=>1e5);Se.registerFlag("TOPK_K_CPU_HANDOFF_THRESHOLD",()=>128);Se.registerFlag("WEBGL_EXP_CONV",()=>!1);Se.registerFlag("SOFTWARE_WEBGL_ENABLED",()=>Se.getBool("IS_TEST"));Se.registerFlag("WEBGL_MAX_SIZE_FOR_NARROW_TEXTURE",()=>1/0);Se.registerFlag("WEBGL_AUTO_SQUARIFY_NARROW_TEXTURE_SHAPE",()=>!1);Se.registerFlag("WEBGL2_ISNAN_CUSTOM",()=>!1);Se.registerFlag("ENGINE_COMPILE_ONLY",()=>!1);function Ra(){let e,t,a,n,r,s,i,o,l,u;return B().getNumber("WEBGL_VERSION")===2?(e="#version 300 es",t="in",a="out",n="in",r="texture",s="outputColor",i="out vec4 outputColor;",o=B().getBool("WEBGL2_ISNAN_CUSTOM")?` bool isnan_custom(float val) { uint floatToUint = floatBitsToUint(val); return (floatToUint & 0x7fffffffu) > 0x7f800000u; @@ -100,7 +100,7 @@ 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 nl(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 r0(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 zG(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 LG(e,t,a="index"){let n=e.map((s,i)=>i),r=zG(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 R3(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 nl(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 r0(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 LG(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 WG(e,t,a="index"){let n=e.map((s,i)=>i),r=LG(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 R3(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; } @@ -108,7 +108,7 @@ Hi, looks like you are running TensorFlow.js in Node.js. To speed things up dram int getFlatIndex(ivec3 coords) { return coords.x * outShapeStrides[0] + coords.y * outShapeStrides[1] + coords.z; } -`}var Uv=` +`}var Gv=` 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:Gv}=C;function WG(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:m}=M3(a.packedInputs,d.shapeInfo.logicalShape,d.shapeInfo.texShape);switch(m.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=>BG(d,t,a.packedInputs,a.enableShapeUniforms)).join(` -`),i=t.texShape,o=Ra(),l=GG(o),u,p,c=qG(o);return t.isPacked?(u=VG(t.logicalShape,i,a.enableShapeUniforms),p=jG(o)):(u=UG(t.logicalShape,i,a.enableShapeUniforms),p=HG(o)),a.packedInputs&&(c+=ZG),[c,l,p,r,u,s,a.userCode].join(` -`)}function qu(e,t=!1){let a=e.shapeInfo.logicalShape;switch(a.length){case 0:return uH(e,t);case 1:return pH(e,t);case 2:return hH(e,t);case 3:return fH(e,t);case 4:return yH(e,t);case 5:return xH(e);case 6:return AH(e);default:throw new Error(`${a.length}-D input sampling is not yet supported`)}}function Hv(e,t){switch(e.shapeInfo.logicalShape.length){case 0:return lH(e);case 1:return dH(e,t);case 2:return cH(e,t);case 3:return mH(e,t);default:return gH(e,t)}}function BG(e,t,a=!1,n){let r="";a?r+=Hv(e,n):r+=qu(e,n);let s=e.shapeInfo.logicalShape,i=t.logicalShape;return s.length<=i.length&&(a?r+=bH(e,t):r+=vH(e,t)),r}function VG(e,t,a){switch(e.length){case 0:return jv();case 1:return JG(e,t,a);case 2:return iH(e,t,a);case 3:return eH(e,t,a);default:return aH(e,t,a)}}function UG(e,t,a){switch(e.length){case 0:return jv();case 1:return QG(e,t,a);case 2:return oH(e,t,a);case 3:return tH(e,t,a);case 4:return nH(e,t,a);case 5:return rH(e,t);case 6:return sH(e,t);default:throw new Error(`${e.length}-D output sampling is not yet supported`)}}function GG(e){return` +`,{getBroadcastDims:Hv}=C;function BG(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:m}=M3(a.packedInputs,d.shapeInfo.logicalShape,d.shapeInfo.texShape);switch(m.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=>VG(d,t,a.packedInputs,a.enableShapeUniforms)).join(` +`),i=t.texShape,o=Ra(),l=HG(o),u,p,c=XG(o);return t.isPacked?(u=UG(t.logicalShape,i,a.enableShapeUniforms),p=qG(o)):(u=GG(t.logicalShape,i,a.enableShapeUniforms),p=jG(o)),a.packedInputs&&(c+=JG),[c,l,p,r,u,s,a.userCode].join(` +`)}function qu(e,t=!1){let a=e.shapeInfo.logicalShape;switch(a.length){case 0:return dH(e,t);case 1:return cH(e,t);case 2:return mH(e,t);case 3:return gH(e,t);case 4:return xH(e,t);case 5:return AH(e);case 6:return bH(e);default:throw new Error(`${a.length}-D input sampling is not yet supported`)}}function jv(e,t){switch(e.shapeInfo.logicalShape.length){case 0:return uH(e);case 1:return pH(e,t);case 2:return hH(e,t);case 3:return fH(e,t);default:return yH(e,t)}}function VG(e,t,a=!1,n){let r="";a?r+=jv(e,n):r+=qu(e,n);let s=e.shapeInfo.logicalShape,i=t.logicalShape;return s.length<=i.length&&(a?r+=vH(e,t):r+=wH(e,t)),r}function UG(e,t,a){switch(e.length){case 0:return qv();case 1:return QG(e,t,a);case 2:return oH(e,t,a);case 3:return tH(e,t,a);default:return nH(e,t,a)}}function GG(e,t,a){switch(e.length){case 0:return qv();case 1:return eH(e,t,a);case 2:return lH(e,t,a);case 3:return aH(e,t,a);case 4:return rH(e,t,a);case 5:return sH(e,t);case 6:return iH(e,t);default:throw new Error(`${e.length}-D output sampling is not yet supported`)}}function HG(e){return` float sampleTexture(sampler2D textureSampler, vec2 uv) { return ${e.texture2D}(textureSampler, uv).r; } - `}function HG(e){return` + `}function jG(e){return` void setOutput(float val) { ${e.output} = vec4(val, 0, 0, 0); } - `}function jG(e){return` + `}function qG(e){return` void setOutput(vec4 val) { ${e.output} = val; } - `}function qG(e){return`${e.version} + `}function XG(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); } - ${XG} ${KG} ${YG} - `}var XG=` + ${ZG} + `}var KG=` 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); } -`,KG=` +`,YG=` 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); } -`,YG=` +`,ZG=` 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); } -`,ZG=` +`,JG=` 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 jv(){return` +`;function qv(){return` int getOutputCoords() { return 0; } - `}function JG(e,t,a){let n=[Math.ceil(t[0]/2),Math.ceil(t[1]/2)];return n[0]===1?a?` + `}function QG(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 QG(e,t,a){return t[0]===1?a?` + `}function eH(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 eH(e,t,a){if(a)return` + `}function tH(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,7 +352,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, return ivec3(b, r, c); } - `}function tH(e,t,a){if(a)return` + `}function aH(e,t,a){if(a)return` ivec3 getOutputCoords() { ivec2 resTexRC = ivec2(resultUV.yx * vec2(outTexShape[0], outTexShape[1])); @@ -368,7 +368,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, ${n} return ivec3(r, c, d); } - `}function aH(e,t,a){if(a)return` + `}function nH(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,7 +409,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, return ivec${e.length}(${l}); } - `}function nH(e,t,a){if(a)return` + `}function rH(e,t,a){if(a)return` ivec4 getOutputCoords() { ivec2 resTexRC = ivec2(resultUV.yx * vec2(outTexShape[0], outTexShape[1])); @@ -425,7 +425,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, ${n} return ivec4(r, c, d, d2); } - `}function rH(e,t){let a=nl(["r","c","d","d2","d3"],e);return` + `}function sH(e,t){let a=nl(["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 sH(e,t){let a=nl(["r","c","d","d2","d3","d4"],e);return` + `}function iH(e,t){let a=nl(["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 iH(e,t,a){let n=[Math.ceil(t[0]/2),Math.ceil(t[1]/2)];if(v.arraysEqual(e,t))return a?` + `}function oH(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 oH(e,t,a){return v.arraysEqual(e,t)?a?` + `}function lH(e,t,a){return v.arraysEqual(e,t)?a?` ivec2 getOutputCoords() { return ivec2(resultUV.yx * vec2(outTexShape[0], outTexShape[1])); } @@ -535,11 +535,11 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, int c = index - r * ${e[1]}; return ivec2(r, c); } - `}function rl(e){return`offset${e}`}function lH(e){let t=e.name,a="get"+t.charAt(0).toUpperCase()+t.slice(1),n=Ra();return` + `}function rl(e){return`offset${e}`}function uH(e){let t=e.name,a="get"+t.charAt(0).toUpperCase()+t.slice(1),n=Ra();return` vec4 ${a}() { return ${n.texture2D}(${t}, halfCR); } - `}function uH(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 dH(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); } @@ -553,7 +553,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, vec2 uv = uvFromFlat(${o}, ${l}, ${i}); return sampleTexture(${a}, uv); } - `}function dH(e,t){let a=e.name,n="get"+a.charAt(0).toUpperCase()+a.slice(1),r=e.shapeInfo.texShape,s=Ra();if(t)return` + `}function pH(e,t){let a=e.name,n="get"+a.charAt(0).toUpperCase()+a.slice(1),r=e.shapeInfo.texShape,s=Ra();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,7 +566,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, ${i[0]}, ${i[1]}, index); return ${s.texture2D}(${a}, uv); } - `}function pH(e,t){let a=e.name,n="get"+a.charAt(0).toUpperCase()+a.slice(1);if(e.shapeInfo.isUniform)return` + `}function cH(e,t){let a=e.name,n="get"+a.charAt(0).toUpperCase()+a.slice(1);if(e.shapeInfo.isUniform)return` float ${n}(int index) { ${Xu(e)} } @@ -604,7 +604,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, vec2 uv = uvFromFlat(${s}, ${i}, index + ${o}); return sampleTexture(${a}, uv); } - `}function cH(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=Ra();if(s!=null&&v.arraysEqual(a,s))return t?` + `}function hH(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=Ra();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]); @@ -628,7 +628,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, vec2 uv = packedUVfrom2D(${p}, ${u[0]}, ${u[1]}, row, col); return ${l.texture2D}(${n}, uv); } - `}function hH(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 mH(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); @@ -686,8 +686,8 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, vec2 uv = uvFromFlat(${u}, ${p}, index); return sampleTexture(${n}, uv); } -`}function mH(e,t){let a=e.shapeInfo.logicalShape,n=e.name,r="get"+n.charAt(0).toUpperCase()+n.slice(1),s=e.shapeInfo.texShape,i=[Math.ceil(s[0]/2),Math.ceil(s[1]/2)];if(a[0]===1){let d=a.slice(1),h=[1,2],m=Ku(e,d),f=["b","row","col"];return` - ${Hv(m,t)} +`}function fH(e,t){let a=e.shapeInfo.logicalShape,n=e.name,r="get"+n.charAt(0).toUpperCase()+n.slice(1),s=e.shapeInfo.texShape,i=[Math.ceil(s[0]/2),Math.ceil(s[1]/2)];if(a[0]===1){let d=a.slice(1),h=[1,2],m=Ku(e,d),f=["b","row","col"];return` + ${jv(m,t)} vec4 ${r}(int b, int row, int col) { return ${r}(${Yu(f,h)}); } @@ -706,7 +706,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, ${l}, ${u}, ${c}, ${p}, b, row, col); return ${o.texture2D}(${n}, uv); } - `}function fH(e,t){let a=e.shapeInfo.logicalShape,n=e.name,r="get"+n.charAt(0).toUpperCase()+n.slice(1),s=a[1]*a[2],i=a[2],{newShape:o,keptDims:l}=v.squeezeShape(a),u=o;if(u.length=1?p="coords = 0;":p=o.map(g=>`coords.${c[g+u]} = 0;`).join(` + `}function vH(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=Hv(e.shapeInfo.logicalShape,t.logicalShape),l=ft(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,y)=>`coords.${c[y+u]}`).join(", ");let h="return outputValue;",m=v.sizeFromShape(e.shapeInfo.logicalShape)===1,f=v.sizeFromShape(t.logicalShape)===1;if(s===1&&!m&&!f)h=` return vec4(outputValue.xy, outputValue.xy); `;else if(m&&!f)i===1?h=` @@ -965,18 +965,18 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, vec4 outputValue = get${n}(${d}); ${h} } - `}function vH(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 wH(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=ft(l),p=Gv(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(f=>`coords.${h[f+c]} = 0;`).join(` + `;let u=ft(l),p=Hv(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(f=>`coords.${h[f+c]} = 0;`).join(` `);let m="";return l<2&&o>0?m="coords":m=e.shapeInfo.logicalShape.map((f,g)=>`coords.${h[g+c]}`).join(", "),` float ${r}() { ${u} coords = getOutputCoords(); ${d} return get${n}(${m}); } - `}function ft(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 M3(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 wH(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=WG(r,i,t),l=wv(e.gl,o),u=e.createProgram(l);return B().get("ENGINE_COMPILE_ONLY")?{program:t,fragmentShader:l,source:o,webGLProgram:u,inShapeInfos:s,outShapeInfo:i,variablesLocations:null,customUniformLocations:null,infLoc:null,nanLoc:null,outShapeLocation:null,outShapeStridesLocation:null,outTexShapeLocation:null}:(e.buildVao(u),Object.assign({program:t,fragmentShader:l,source:o,webGLProgram:u,inShapeInfos:s,outShapeInfo:i},qv(e,t,u)))}function qv(e,t,a){let n=[],r=[],s,i,o,l=null,u=null;u=e.getUniformLocation(a,"NAN",!1),B().getNumber("WEBGL_VERSION")===1&&(l=e.getUniformLocation(a,"INFINITY",!1));let p=!1;for(let c of t.variableNames){let d={name:c,uniform:e.getUniformLocation(a,c,p),offset:e.getUniformLocation(a,`offset${c}`,p)};t.enableShapeUniforms&&(d.shape=e.getUniformLocation(a,`${c}Shape`,p),d.texShape=e.getUniformLocation(a,`${c}TexShape`,p)),n.push(d)}if(t.enableShapeUniforms&&(s=e.getUniformLocation(a,"outShape",p),o=e.getUniformLocation(a,"outShapeStrides",p),i=e.getUniformLocation(a,"outTexShape",p)),t.customUniforms)for(let c of t.customUniforms)r.push(e.getUniformLocation(a,c.name,p));return{variablesLocations:n,customUniformLocations:r,infLoc:l,nanLoc:u,outShapeLocation:s,outShapeStridesLocation:o,outTexShapeLocation:i}}function I5(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 kH(e,t,a,n,r){t.program.enableShapeUniforms||(I5(t.inShapeInfos,a),I5([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),e.bindVertexArray(t.webGLProgram.vao),B().getNumber("WEBGL_VERSION")===1&&t.infLoc!==null&&e.gl.uniform1f(t.infLoc,1/0),t.nanLoc!==null&&e.gl.uniform1f(t.nanLoc,NaN);for(let l=0;l{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}=M3(e.packedInputs,i.shape,l),d="",h="",m="";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);m=`${w[0]===l[1]}_${w[w.length-1]===l[1]}`}let f=i.shape.length,g=p.length===2&&v.arraysEqual(i.shape,l),y=v.sizeFromShape(i.shape)===1,x=C.getBroadcastDims(i.shape,a.shape),A=!e.packedInputs&&f===a.shape.length&&v.arraysEqual(l,a.texData.texShape),b=e.packedInputs||p.length>2?"":`${l[0]>1}_${l[1]>1}`;n+=`${f}_${A}_${u?c:""}_${p.length}_${y}_${x}_${g}_${d}_${h}_${m}_${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+`${B().getNumber("WEBGL_VERSION")}`,s}function ga(e){return B().getBool("WEBGL_USE_SHAPES_UNIFORMS")&&e<=4}var SH=class{constructor(e){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0,this.outPackingScheme=Jd.DENSE,this.customUniforms=[{name:"texShape",type:"ivec2"}];let t=Ra();this.outputShape=e,this.enableShapeUniforms=ga(this.outputShape.length),this.userCode=` + `}function ft(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 M3(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 kH(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=BG(r,i,t),l=kv(e.gl,o),u=e.createProgram(l);return B().get("ENGINE_COMPILE_ONLY")?{program:t,fragmentShader:l,source:o,webGLProgram:u,inShapeInfos:s,outShapeInfo:i,variablesLocations:null,customUniformLocations:null,infLoc:null,nanLoc:null,outShapeLocation:null,outShapeStridesLocation:null,outTexShapeLocation:null}:(e.buildVao(u),Object.assign({program:t,fragmentShader:l,source:o,webGLProgram:u,inShapeInfos:s,outShapeInfo:i},Xv(e,t,u)))}function Xv(e,t,a){let n=[],r=[],s,i,o,l=null,u=null;u=e.getUniformLocation(a,"NAN",!1),B().getNumber("WEBGL_VERSION")===1&&(l=e.getUniformLocation(a,"INFINITY",!1));let p=!1;for(let c of t.variableNames){let d={name:c,uniform:e.getUniformLocation(a,c,p),offset:e.getUniformLocation(a,`offset${c}`,p)};t.enableShapeUniforms&&(d.shape=e.getUniformLocation(a,`${c}Shape`,p),d.texShape=e.getUniformLocation(a,`${c}TexShape`,p)),n.push(d)}if(t.enableShapeUniforms&&(s=e.getUniformLocation(a,"outShape",p),o=e.getUniformLocation(a,"outShapeStrides",p),i=e.getUniformLocation(a,"outTexShape",p)),t.customUniforms)for(let c of t.customUniforms)r.push(e.getUniformLocation(a,c.name,p));return{variablesLocations:n,customUniformLocations:r,infLoc:l,nanLoc:u,outShapeLocation:s,outShapeStridesLocation:o,outTexShapeLocation:i}}function S5(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 IH(e,t,a,n,r){t.program.enableShapeUniforms||(S5(t.inShapeInfos,a),S5([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),e.bindVertexArray(t.webGLProgram.vao),B().getNumber("WEBGL_VERSION")===1&&t.infLoc!==null&&e.gl.uniform1f(t.infLoc,1/0),t.nanLoc!==null&&e.gl.uniform1f(t.nanLoc,NaN);for(let l=0;l{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}=M3(e.packedInputs,i.shape,l),d="",h="",m="";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);m=`${w[0]===l[1]}_${w[w.length-1]===l[1]}`}let f=i.shape.length,g=p.length===2&&v.arraysEqual(i.shape,l),y=v.sizeFromShape(i.shape)===1,x=C.getBroadcastDims(i.shape,a.shape),A=!e.packedInputs&&f===a.shape.length&&v.arraysEqual(l,a.texData.texShape),b=e.packedInputs||p.length>2?"":`${l[0]>1}_${l[1]>1}`;n+=`${f}_${A}_${u?c:""}_${p.length}_${y}_${x}_${g}_${d}_${h}_${m}_${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+`${B().getNumber("WEBGL_VERSION")}`,s}function ga(e){return B().getBool("WEBGL_USE_SHAPES_UNIFORMS")&&e<=4}var CH=class{constructor(e){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0,this.outPackingScheme=Jd.DENSE,this.customUniforms=[{name:"texShape",type:"ivec2"}];let t=Ra();this.outputShape=e,this.enableShapeUniforms=ga(this.outputShape.length),this.userCode=` ivec3 outCoordsFromFlatIndex(int index) { ${this.enableShapeUniforms?r0(["r","c","d"],e):nl(["r","c","d"],e)} return ivec3(r, c, d); @@ -996,7 +996,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, ${t.output} = result; } - `}},CH=class{constructor(e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outPackingScheme=Jd.DENSE,this.customUniforms=[{name:"texShape",type:"ivec2"}];let t=Ra();this.outputShape=e,this.enableShapeUniforms=ga(this.outputShape.length),this.userCode=` + `}},TH=class{constructor(e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outPackingScheme=Jd.DENSE,this.customUniforms=[{name:"texShape",type:"ivec2"}];let t=Ra();this.outputShape=e,this.enableShapeUniforms=ga(this.outputShape.length),this.userCode=` ivec3 outCoordsFromFlatIndex(int index) { ${this.enableShapeUniforms?r0(["r","c","d"],e):nl(["r","c","d"],e)} return ivec3(r, c, d); @@ -1016,24 +1016,24 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, ${t.output} = result; } - `}},TH=class{constructor(e){this.variableNames=["A"],this.outTexUsage=mn.DOWNLOAD;let t=Ra();this.outputShape=e,this.userCode=` - ${Uv} + `}},NH=class{constructor(e){this.variableNames=["A"],this.outTexUsage=mn.DOWNLOAD;let t=Ra();this.outputShape=e,this.userCode=` + ${Gv} void main() { float x = getAAtOutCoords(); ${t.output} = encode_float(x); } - `}},NH=class{constructor(e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!1,this.outTexUsage=mn.DOWNLOAD;let t=Ra();this.outputShape=e,this.userCode=` - ${Uv} + `}},RH=class{constructor(e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!1,this.outTexUsage=mn.DOWNLOAD;let t=Ra();this.outputShape=e,this.userCode=` + ${Gv} void main() { ivec3 coords = getOutputCoords(); float x = getChannel(getAAtOutCoords(), vec2(coords.y, coords.z)); ${t.output} = encode_float(x); } - `}},RH={R:0,G:1,B:2,A:3},S5=class{constructor(e,t=!1,a="RGBA"){this.variableNames=["A"],this.customUniforms=[{name:"texShape",type:"ivec2"}];let n=Ra();this.outputShape=e,this.enableShapeUniforms=ga(this.outputShape.length);let r="result";t&&(r="floor(result * 255. + 0.5)");let s="";for(let i=0;in8,createBufferFromOutputTexture:()=>i8,createFloat16MatrixTexture:()=>Qv,createFloat16PackedMatrixTexture:()=>a8,createFloat32MatrixTexture:()=>Jv,createIndexBuffer:()=>Zv,createPackedMatrixTexture:()=>t8,createUnsignedBytesMatrixTexture:()=>e8,createVertexBuffer:()=>Yv,createVertexShader:()=>Kv,downloadByteEncodedFloatMatrixFromOutputTexture:()=>l8,downloadFloat32MatrixFromBuffer:()=>o8,downloadMatrixFromPackedOutputTexture:()=>d8,downloadPackedMatrixFromBuffer:()=>u8,getInternalFormatForFloat16MatrixTexture:()=>P3,getInternalFormatForFloat16PackedMatrixTexture:()=>D3,getInternalFormatForFloat32MatrixTexture:()=>$3,getInternalFormatForPackedMatrixTexture:()=>F3,getInternalFormatForUnsignedBytesMatrixTexture:()=>_3,uploadDenseMatrixToTexture:()=>r8,uploadPixelDataToTexture:()=>s8});function Kv(e){let t=Ra(),a=`${t.version} + `}},Kv={};Ze(Kv,{bindVertexProgramAttributeStreams:()=>r8,createBufferFromOutputTexture:()=>o8,createFloat16MatrixTexture:()=>e8,createFloat16PackedMatrixTexture:()=>n8,createFloat32MatrixTexture:()=>Qv,createIndexBuffer:()=>Jv,createPackedMatrixTexture:()=>a8,createUnsignedBytesMatrixTexture:()=>t8,createVertexBuffer:()=>Zv,createVertexShader:()=>Yv,downloadByteEncodedFloatMatrixFromOutputTexture:()=>u8,downloadFloat32MatrixFromBuffer:()=>l8,downloadMatrixFromPackedOutputTexture:()=>p8,downloadPackedMatrixFromBuffer:()=>d8,getInternalFormatForFloat16MatrixTexture:()=>P3,getInternalFormatForFloat16PackedMatrixTexture:()=>D3,getInternalFormatForFloat32MatrixTexture:()=>$3,getInternalFormatForPackedMatrixTexture:()=>F3,getInternalFormatForUnsignedBytesMatrixTexture:()=>_3,uploadDenseMatrixToTexture:()=>s8,uploadPixelDataToTexture:()=>i8});function Yv(e){let t=Ra(),a=`${t.version} precision highp float; ${t.attribute} vec3 clipSpacePos; ${t.attribute} vec2 uv; @@ -1107,7 +1107,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, void main() { gl_Position = vec4(clipSpacePos, 1); resultUV = uv; - }`;return vv(e,a)}function Yv(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 Sv(e,t)}function Zv(e){let t=new Uint16Array([0,1,2,2,1,3]);return Cv(e,t)}function Zp(e,t,a,n,r,s){Nv(t,a);let i=Tv(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)),B().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 $3(e){return e.internalFormatFloat}function Jv(e,t,a,n){let[r,s]=Yp(t,a);return Zp(e,r,s,$3(n),n.textureFormatFloat,e.FLOAT)}function P3(e){return e.internalFormatHalfFloat}function Qv(e,t,a,n){let[r,s]=Yp(t,a);return Zp(e,r,s,P3(n),n.textureFormatFloat,n.textureTypeHalfFloat)}function _3(e){return e.downloadTextureFormat}function e8(e,t,a,n){let[r,s]=Yp(t,a);return Zp(e,r,s,_3(n),e.RGBA,e.UNSIGNED_BYTE)}function F3(e){return e.internalFormatPackedFloat}function t8(e,t,a,n){let[r,s]=Hu(t,a);return Zp(e,r,s,F3(n),e.RGBA,e.FLOAT)}function D3(e){return e.internalFormatPackedHalfFloat}function a8(e,t,a,n){let[r,s]=Hu(t,a);return Zp(e,r,s,D3(n),e.RGBA,n.textureTypeHalfFloat)}function n8(e,t,a){return ce(e,()=>e.bindBuffer(e.ARRAY_BUFFER,a)),F1(e,t,"clipSpacePos",a,3,20,0)&&F1(e,t,"uv",a,2,20,12)}function r8(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),B().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 s8(e,t,a){ce(e,()=>e.bindTexture(e.TEXTURE_2D,t)),a.data instanceof Uint8Array?B().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)):B().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 i8(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 o8(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 l8(e,t,a,n){let[r,s]=Yp(t,a),i=4,o=new Uint8Array(CG(t*a,i));return ce(e,()=>e.readPixels(0,0,r,s,n.downloadTextureFormat,e.UNSIGNED_BYTE,o)),new Float32Array(o.buffer)}function u8(e,t,a,n,r,s,i,o){let l=e,u=new Float32Array(TG(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 d8(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 Gl=class{constructor(e){this.outputTexture=null,this.program=null,this.disposed=!1,this.itemsToPoll=[];let t=B().getNumber("WEBGL_VERSION");if(e!=null?(this.gl=e,n0(t,e)):this.gl=Wn(t),e=this.gl,B().getNumber("WEBGL_VERSION")===2){let r=e;this.createVertexArray=()=>ce(r,()=>r.createVertexArray()),this.bindVertexArray=s=>ce(r,()=>r.bindVertexArray(s)),this.deleteVertexArray=s=>ce(r,()=>r.deleteVertexArray(s)),this.getVertexArray=()=>ce(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=()=>ce(e,()=>r.createVertexArrayOES()),this.bindVertexArray=s=>ce(e,()=>r.bindVertexArrayOES(s)),this.deleteVertexArray=s=>ce(e,()=>r.deleteVertexArrayOES(s)),this.getVertexArray=()=>ce(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"),B().getNumber("WEBGL_VERSION")===1){let r="OES_texture_float",s="OES_texture_half_float";if(this.textureFloatExtension=Nd(this.gl,r),fn(this.gl,s))this.textureHalfFloatExtension=Nd(this.gl,s);else if(B().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),fn(this.gl,n))this.colorBufferHalfFloatExtension=Nd(this.gl,n);else if(B().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",fn(this.gl,a))this.colorBufferFloatExtension=this.gl.getExtension(a);else if(fn(this.gl,n))this.colorBufferHalfFloatExtension=this.gl.getExtension(n);else throw new Error("GL context does not support color renderable floats");this.vertexBuffer=Yv(this.gl),this.indexBuffer=Zv(this.gl),this.framebuffer=Rv(this.gl),this.textureConfig=T3(this.gl,this.textureHalfFloatExtension)}get debug(){return B().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(),Jv(this.gl,e,t,this.textureConfig)}createFloat16MatrixTexture(e,t){return this.throwIfDisposed(),Qv(this.gl,e,t,this.textureConfig)}createUnsignedBytesMatrixTexture(e,t){return this.throwIfDisposed(),e8(this.gl,e,t,this.textureConfig)}uploadPixelDataToTexture(e,t){this.throwIfDisposed(),s8(this.gl,e,t)}uploadDenseMatrixToTexture(e,t,a,n){this.throwIfDisposed(),r8(this.gl,e,t,a,n,this.textureConfig)}createFloat16PackedMatrixTexture(e,t){return this.throwIfDisposed(),a8(this.gl,e,t,this.textureConfig)}createPackedMatrixTexture(e,t){return this.throwIfDisposed(),t8(this.gl,e,t,this.textureConfig)}deleteMatrixTexture(e){this.throwIfDisposed(),this.outputTexture===e&&(D1(this.gl,this.framebuffer),this.outputTexture=null),ce(this.gl,()=>this.gl.deleteTexture(e))}downloadByteEncodedFloatMatrixFromOutputTexture(e,t,a){return this.downloadMatrixDriver(e,()=>l8(this.gl,t,a,this.textureConfig))}downloadPackedMatrixFromBuffer(e,t,a,n,r,s){return u8(this.gl,e,t,a,n,r,s,this.textureConfig)}downloadFloat32MatrixFromBuffer(e,t){return o8(this.gl,e,t)}createBufferFromTexture(e,t,a){this.bindTextureToFrameBuffer(e);let n=i8(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(B().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 B().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")>0?(t=this.beginQuery(),this.endQuery(),a=()=>this.isQueryAvailable(t,B().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))):a=()=>!0;return{query:t,isFencePassed:a}}downloadMatrixFromPackedTexture(e,t,a){return this.downloadMatrixDriver(e,()=>d8(this.gl,t,a))}createProgram(e){this.throwIfDisposed();let t=this.gl;this.vertexShader==null&&(this.vertexShader=Kv(t));let a=kv(t);ce(t,()=>t.attachShader(a,this.vertexShader)),ce(t,()=>t.attachShader(a,e)),Iv(t,a);let n=Object.assign(a,{vao:this.createVertexArray()});return this.debug&&nh(t,n),n}buildVao(e){this.setProgram(e),this.bindVertexArray(e.vao);let t=this.gl;ce(t,()=>t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer)),n8(t,e,this.vertexBuffer)}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&&nh(this.gl,this.program),ce(this.gl,()=>this.gl.useProgram(e))}getUniformLocation(e,t,a=!0){return this.throwIfDisposed(),a?Mv(this.gl,e,t):$v(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(),Pv(this.gl,e,t,a)}setOutputMatrixTexture(e,t,a){this.setOutputMatrixTextureDriver(e,a,t)}setOutputPackedMatrixTexture(e,t,a){this.throwIfDisposed();let[n,r]=Hu(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&&nh(this.gl,this.program),Rd(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=Nd(this.gl,B().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(B().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(B().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,B().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))),this.getQueryTime(e,B().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=MH(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 B().platform&&(a=B().platform.setTimeoutCustom.bind(B().platform)),v.repeatedTry(()=>(this.pollItems(),this.itemsToPoll.length===0),()=>0,null,a)}bindTextureToFrameBuffer(e){this.throwIfDisposed(),rh(this.gl,e,this.framebuffer),this.debug&&Rd(this.gl)}unbindTextureToFrameBuffer(){this.outputTexture!=null?(rh(this.gl,this.outputTexture,this.framebuffer),this.debug&&Rd(this.gl)):D1(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;rh(n,e,this.framebuffer),this.debug&&Rd(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 MH(e){let t=0;for(;t`${e}.${a}`)}function ka(e,t){return t===1?[e]:m8(e,t)}function kj(e,t){if(e===1)return"rc";let a="";for(let n=0;ne.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)),B().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 $3(e){return e.internalFormatFloat}function Qv(e,t,a,n){let[r,s]=Yp(t,a);return Zp(e,r,s,$3(n),n.textureFormatFloat,e.FLOAT)}function P3(e){return e.internalFormatHalfFloat}function e8(e,t,a,n){let[r,s]=Yp(t,a);return Zp(e,r,s,P3(n),n.textureFormatFloat,n.textureTypeHalfFloat)}function _3(e){return e.downloadTextureFormat}function t8(e,t,a,n){let[r,s]=Yp(t,a);return Zp(e,r,s,_3(n),e.RGBA,e.UNSIGNED_BYTE)}function F3(e){return e.internalFormatPackedFloat}function a8(e,t,a,n){let[r,s]=Hu(t,a);return Zp(e,r,s,F3(n),e.RGBA,e.FLOAT)}function D3(e){return e.internalFormatPackedHalfFloat}function n8(e,t,a,n){let[r,s]=Hu(t,a);return Zp(e,r,s,D3(n),e.RGBA,n.textureTypeHalfFloat)}function r8(e,t,a){return ce(e,()=>e.bindBuffer(e.ARRAY_BUFFER,a)),F1(e,t,"clipSpacePos",a,3,20,0)&&F1(e,t,"uv",a,2,20,12)}function s8(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),B().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 i8(e,t,a){ce(e,()=>e.bindTexture(e.TEXTURE_2D,t)),a.data instanceof Uint8Array?B().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)):B().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 o8(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 l8(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 u8(e,t,a,n){let[r,s]=Yp(t,a),i=4,o=new Uint8Array(TG(t*a,i));return ce(e,()=>e.readPixels(0,0,r,s,n.downloadTextureFormat,e.UNSIGNED_BYTE,o)),new Float32Array(o.buffer)}function d8(e,t,a,n,r,s,i,o){let l=e,u=new Float32Array(NG(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 p8(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 Gl=class{constructor(e){this.outputTexture=null,this.program=null,this.disposed=!1,this.itemsToPoll=[];let t=B().getNumber("WEBGL_VERSION");if(e!=null?(this.gl=e,n0(t,e)):this.gl=Wn(t),e=this.gl,B().getNumber("WEBGL_VERSION")===2){let r=e;this.createVertexArray=()=>ce(r,()=>r.createVertexArray()),this.bindVertexArray=s=>ce(r,()=>r.bindVertexArray(s)),this.deleteVertexArray=s=>ce(r,()=>r.deleteVertexArray(s)),this.getVertexArray=()=>ce(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=()=>ce(e,()=>r.createVertexArrayOES()),this.bindVertexArray=s=>ce(e,()=>r.bindVertexArrayOES(s)),this.deleteVertexArray=s=>ce(e,()=>r.deleteVertexArrayOES(s)),this.getVertexArray=()=>ce(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"),B().getNumber("WEBGL_VERSION")===1){let r="OES_texture_float",s="OES_texture_half_float";if(this.textureFloatExtension=Nd(this.gl,r),fn(this.gl,s))this.textureHalfFloatExtension=Nd(this.gl,s);else if(B().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),fn(this.gl,n))this.colorBufferHalfFloatExtension=Nd(this.gl,n);else if(B().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",fn(this.gl,a))this.colorBufferFloatExtension=this.gl.getExtension(a);else if(fn(this.gl,n))this.colorBufferHalfFloatExtension=this.gl.getExtension(n);else throw new Error("GL context does not support color renderable floats");this.vertexBuffer=Zv(this.gl),this.indexBuffer=Jv(this.gl),this.framebuffer=Ev(this.gl),this.textureConfig=T3(this.gl,this.textureHalfFloatExtension)}get debug(){return B().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(),Qv(this.gl,e,t,this.textureConfig)}createFloat16MatrixTexture(e,t){return this.throwIfDisposed(),e8(this.gl,e,t,this.textureConfig)}createUnsignedBytesMatrixTexture(e,t){return this.throwIfDisposed(),t8(this.gl,e,t,this.textureConfig)}uploadPixelDataToTexture(e,t){this.throwIfDisposed(),i8(this.gl,e,t)}uploadDenseMatrixToTexture(e,t,a,n){this.throwIfDisposed(),s8(this.gl,e,t,a,n,this.textureConfig)}createFloat16PackedMatrixTexture(e,t){return this.throwIfDisposed(),n8(this.gl,e,t,this.textureConfig)}createPackedMatrixTexture(e,t){return this.throwIfDisposed(),a8(this.gl,e,t,this.textureConfig)}deleteMatrixTexture(e){this.throwIfDisposed(),this.outputTexture===e&&(D1(this.gl,this.framebuffer),this.outputTexture=null),ce(this.gl,()=>this.gl.deleteTexture(e))}downloadByteEncodedFloatMatrixFromOutputTexture(e,t,a){return this.downloadMatrixDriver(e,()=>u8(this.gl,t,a,this.textureConfig))}downloadPackedMatrixFromBuffer(e,t,a,n,r,s){return d8(this.gl,e,t,a,n,r,s,this.textureConfig)}downloadFloat32MatrixFromBuffer(e,t){return l8(this.gl,e,t)}createBufferFromTexture(e,t,a){this.bindTextureToFrameBuffer(e);let n=o8(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(B().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 B().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")>0?(t=this.beginQuery(),this.endQuery(),a=()=>this.isQueryAvailable(t,B().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))):a=()=>!0;return{query:t,isFencePassed:a}}downloadMatrixFromPackedTexture(e,t,a){return this.downloadMatrixDriver(e,()=>p8(this.gl,t,a))}createProgram(e){this.throwIfDisposed();let t=this.gl;this.vertexShader==null&&(this.vertexShader=Yv(t));let a=Iv(t);ce(t,()=>t.attachShader(a,this.vertexShader)),ce(t,()=>t.attachShader(a,e)),Sv(t,a);let n=Object.assign(a,{vao:this.createVertexArray()});return this.debug&&nh(t,n),n}buildVao(e){this.setProgram(e),this.bindVertexArray(e.vao);let t=this.gl;ce(t,()=>t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer)),r8(t,e,this.vertexBuffer)}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&&nh(this.gl,this.program),ce(this.gl,()=>this.gl.useProgram(e))}getUniformLocation(e,t,a=!0){return this.throwIfDisposed(),a?$v(this.gl,e,t):Pv(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(),_v(this.gl,e,t,a)}setOutputMatrixTexture(e,t,a){this.setOutputMatrixTextureDriver(e,a,t)}setOutputPackedMatrixTexture(e,t,a){this.throwIfDisposed();let[n,r]=Hu(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&&nh(this.gl,this.program),Rd(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=Nd(this.gl,B().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(B().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(B().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,B().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))),this.getQueryTime(e,B().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=$H(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 B().platform&&(a=B().platform.setTimeoutCustom.bind(B().platform)),v.repeatedTry(()=>(this.pollItems(),this.itemsToPoll.length===0),()=>0,null,a)}bindTextureToFrameBuffer(e){this.throwIfDisposed(),rh(this.gl,e,this.framebuffer),this.debug&&Rd(this.gl)}unbindTextureToFrameBuffer(){this.outputTexture!=null?(rh(this.gl,this.outputTexture,this.framebuffer),this.debug&&Rd(this.gl)):D1(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;rh(n,e,this.framebuffer),this.debug&&Rd(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 $H(e){let t=0;for(;t`${e}.${a}`)}function ka(e,t){return t===1?[e]:f8(e,t)}function Ij(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]})`}},f8=class{constructor(e,t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"inputShape",type:"ivec3"}],this.outputShape=e,this.enableShapeUniforms=ga(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]})`}},g8=class{constructor(e,t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"inputShape",type:"ivec3"}],this.outputShape=e,this.enableShapeUniforms=ga(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,7 +1146,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, getChannel(getA(inputRC.x, inputRC.y, inputRC.z), inputRCInnerDims); ${n>0?"}":""} `}this.userCode=` - ${Sj(t,this.enableShapeUniforms)} + ${Cj(t,this.enableShapeUniforms)} ${this.enableShapeUniforms?E3():R3(e)} void main() { @@ -1162,12 +1162,12 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, setOutput(result); } - `}};function Sj(e,t){return` + `}};function Cj(e,t){return` ivec3 inputCoordsFromReshapedOutCoords(int index) { - ${t?LG(["r","c","d"],"inputShape"):nl(["r","c","d"],e)} + ${t?WG(["r","c","d"],"inputShape"):nl(["r","c","d"],e)} return ivec3(r, c, d); } - `}var Cj=class{constructor(e){this.gpgpu=e,this.numUsedTextures=0,this.numFreeTextures=0,this._numBytesAllocated=0,this._numBytesFree=0,this.freeTextures={},this.usedTextures={},this.logEnabled=!1}acquireTexture(e,t,a){let n=T5(t,a),r=N5(e,n,a);r in this.freeTextures||(this.freeTextures[r]=[]),r in this.usedTextures||(this.usedTextures[r]=[]);let s=C5(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].pop();return this.usedTextures[r].push(o),o}let i;return n===da.PACKED_2X2_FLOAT32?i=this.gpgpu.createPackedMatrixTexture(e[0],e[1]):n===da.PACKED_2X2_FLOAT16?i=this.gpgpu.createFloat16PackedMatrixTexture(e[0],e[1]):n===da.UNPACKED_FLOAT32?i=this.gpgpu.createFloat32MatrixTexture(e[0],e[1]):n===da.UNPACKED_FLOAT16?i=this.gpgpu.createFloat16MatrixTexture(e[0],e[1]):n===da.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=T5(a,n),s=N5(t,r,n);s in this.freeTextures||(this.freeTextures[s]=[]);let i=C5(t,r,this.gpgpu.gl,this.gpgpu.textureConfig,n),o=B().getNumber("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&&l.indexOf(e);if(u==null||u<0)throw new Error("Cannot release a texture that was never provided by this texture manager");l[u]=l[l.length-1],l.pop(),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 Tj(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 C5(e,t,a,n,r){let s=Nj(t,n),i;if(r){let[l,u]=Hu(e[0],e[1]);i=l*u}else{let[l,u]=Yp(e[0],e[1]);i=l*u}let o=Tj(a,s);return i*o}function Nj(e,t){switch(e){case da.PACKED_2X2_FLOAT32:return F3(t);case da.PACKED_2X2_FLOAT16:return D3(t);case da.UNPACKED_FLOAT32:return $3(t);case da.UNPACKED_FLOAT16:return P3(t);case da.PACKED_4X1_UNSIGNED_BYTE:return _3(t);default:throw new Error(`Unknown physical texture type ${e}`)}}function Rj(e){return B().getBool("WEBGL_RENDER_FLOAT32_ENABLED")?e?da.PACKED_2X2_FLOAT32:da.UNPACKED_FLOAT32:e?da.PACKED_2X2_FLOAT16:da.UNPACKED_FLOAT16}function T5(e,t){if(e===mn.UPLOAD)return da.PACKED_2X2_FLOAT32;if(e===mn.RENDER||e==null)return Rj(t);if(e===mn.DOWNLOAD||e===mn.PIXELS)return da.PACKED_4X1_UNSIGNED_BYTE;throw new Error(`Unknown logical texture type ${e}`)}function N5(e,t,a){return`${e[0]}_${e[1]}_${t}_${a}`}var Yn=class{constructor(e,t){this.variableNames=["A"],this.outputShape=e,this.enableShapeUniforms=ga(this.outputShape.length),this.userCode=` + `}var Tj=class{constructor(e){this.gpgpu=e,this.numUsedTextures=0,this.numFreeTextures=0,this._numBytesAllocated=0,this._numBytesFree=0,this.freeTextures={},this.usedTextures={},this.logEnabled=!1}acquireTexture(e,t,a){let n=N5(t,a),r=R5(e,n,a);r in this.freeTextures||(this.freeTextures[r]=[]),r in this.usedTextures||(this.usedTextures[r]=[]);let s=T5(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].pop();return this.usedTextures[r].push(o),o}let i;return n===da.PACKED_2X2_FLOAT32?i=this.gpgpu.createPackedMatrixTexture(e[0],e[1]):n===da.PACKED_2X2_FLOAT16?i=this.gpgpu.createFloat16PackedMatrixTexture(e[0],e[1]):n===da.UNPACKED_FLOAT32?i=this.gpgpu.createFloat32MatrixTexture(e[0],e[1]):n===da.UNPACKED_FLOAT16?i=this.gpgpu.createFloat16MatrixTexture(e[0],e[1]):n===da.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=N5(a,n),s=R5(t,r,n);s in this.freeTextures||(this.freeTextures[s]=[]);let i=T5(t,r,this.gpgpu.gl,this.gpgpu.textureConfig,n),o=B().getNumber("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&&l.indexOf(e);if(u==null||u<0)throw new Error("Cannot release a texture that was never provided by this texture manager");l[u]=l[l.length-1],l.pop(),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 Nj(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 T5(e,t,a,n,r){let s=Rj(t,n),i;if(r){let[l,u]=Hu(e[0],e[1]);i=l*u}else{let[l,u]=Yp(e[0],e[1]);i=l*u}let o=Nj(a,s);return i*o}function Rj(e,t){switch(e){case da.PACKED_2X2_FLOAT32:return F3(t);case da.PACKED_2X2_FLOAT16:return D3(t);case da.UNPACKED_FLOAT32:return $3(t);case da.UNPACKED_FLOAT16:return P3(t);case da.PACKED_4X1_UNSIGNED_BYTE:return _3(t);default:throw new Error(`Unknown physical texture type ${e}`)}}function Ej(e){return B().getBool("WEBGL_RENDER_FLOAT32_ENABLED")?e?da.PACKED_2X2_FLOAT32:da.UNPACKED_FLOAT32:e?da.PACKED_2X2_FLOAT16:da.UNPACKED_FLOAT16}function N5(e,t){if(e===mn.UPLOAD)return da.PACKED_2X2_FLOAT32;if(e===mn.RENDER||e==null)return Ej(t);if(e===mn.DOWNLOAD||e===mn.PIXELS)return da.PACKED_4X1_UNSIGNED_BYTE;throw new Error(`Unknown logical texture type ${e}`)}function R5(e,t,a){return`${e[0]}_${e[1]}_${t}_${a}`}var Yn=class{constructor(e,t){this.variableNames=["A"],this.outputShape=e,this.enableShapeUniforms=ga(this.outputShape.length),this.userCode=` float unaryOperation(float x) { ${t} } @@ -1178,11 +1178,11 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, setOutput(y); } - `}},En="if (isnan(x)) return x;",Ej="return x;",R5="return abs(x);",Mj="return (x >= 0.0) ? x : (exp(x) - 1.0);",$j=En+` + `}},En="if (isnan(x)) return x;",Mj="return x;",E5="return abs(x);",$j="return (x >= 0.0) ? x : (exp(x) - 1.0);",Pj=En+` return (x < 0.0) ? 0.0 : x; -`,Pj=En+` +`,_j=En+` return (x < 0.0) ? 0.0 : min(6.0, x); -`,Br="return x;",_j="return 1.0 / (1.0 + exp(-1.0 * x));",Fj="return x;",Dj=` +`,Br="return x;",Fj="return 1.0 / (1.0 + exp(-1.0 * x));",Dj="return x;",Oj=` 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; -`,Oj=` +`,zj=` 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; -`,zj=` +`,Lj=` 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; -`,Lj="return 1.0 / (1.0 + exp(-1.0 * x));",jr=class{constructor(e,t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e,this.enableShapeUniforms=ga(this.outputShape.length),this.userCode=` +`,Wj="return 1.0 / (1.0 + exp(-1.0 * x));",jr=class{constructor(e,t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e,this.enableShapeUniforms=ga(this.outputShape.length),this.userCode=` vec4 unaryOperation(vec4 x) { ${t} } @@ -1222,14 +1222,14 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, setOutput(y); } - `}},Wj=class{constructor(e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!1,this.outputShape=e,this.enableShapeUniforms=ga(this.outputShape.length);let t=e.length,a=ka("rc",t),n=ft(t),r=kj(t,a),s=a.slice(-2),i=t<=1?"rc":`vec2(${s.join(",")})`;this.userCode=` + `}},Bj=class{constructor(e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!1,this.outputShape=e,this.enableShapeUniforms=ga(this.outputShape.length);let t=e.length,a=ka("rc",t),n=ft(t),r=Ij(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})); } - `}},Bj=Rn.whereImpl,Vj=1e-7,Uj=1e-4,J2={};function Gj(e){return e in J2||(J2[e]={}),J2[e]}var Hj=B().getNumber("CPU_HANDOFF_SIZE_THRESHOLD"),jj=600;function qj(){return B().global.screen==null?1024:B().global.screen.height*B().global.screen.width*window.devicePixelRatio*jj/1024/1024}var Jp=class g8 extends ru{nextDataId(){return g8.nextDataId++}constructor(t){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,!B().getBool("HAS_WEBGL"))throw new Error("WebGL is not supported on this device");let a;if(t!=null){if(t instanceof Gl)a=t;else{let n=Wn(B().getNumber("WEBGL_VERSION"),t);a=new Gl(n)}this.binaryCache={},this.gpgpuCreatedLocally=!1}else{let n=Wn(B().getNumber("WEBGL_VERSION"));a=new Gl(n),this.binaryCache=Gj(B().getNumber("WEBGL_VERSION")),this.gpgpuCreatedLocally=!0}this.gpgpu=a,this.canvas=this.gpgpu.gl.canvas,this.textureManager=new Cj(this.gpgpu),this.numMBBeforeWarning=qj(),this.texData=new ip(this,It())}numDataIds(){return this.texData.numDataIds()-this.pendingDeletes}writeTexture(t,a,n,r,s,i){let o=this.makeTensorInfo(a,n),l=this.texData.get(o.dataId);l.isPacked=!1,l.texture={texture:t,texShape:[r,s]},l.texShape=[r,s];let u=Ed(a),p=new S5(u,!1,i),c=this.runWebGLProgram(p,[o],n,[[r,s]]);return c.shape=a,l.texture=null,this.disposeIntermediateTensorInfo(o),c.dataId}write(t,a,n){if((B().getBool("WEBGL_CHECK_NUMERICAL_PROBLEMS")||B().getBool("DEBUG"))&&this.checkNumericalProblems(t),n==="complex64"&&t!=null)throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag).");let r={id:this.nextDataId()};return this.texData.set(r,{shape:a,dtype:n,values:t,usage:mn.UPLOAD,refCount:1}),r}refCount(t){return this.texData.has(t)?this.texData.get(t).refCount:0}incRef(t){let a=this.texData.get(t);a.refCount++}decRef(t){if(this.texData.has(t)){let a=this.texData.get(t);a.refCount--}}move(t,a,n,r,s){if(B().getBool("DEBUG")&&this.checkNumericalProblems(a),r==="complex64")throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag).");this.texData.set(t,{shape:n,dtype:r,values:a,usage:mn.UPLOAD,refCount:s})}disposeIntermediateTensorInfo(t){this.disposeData(t.dataId)}readSync(t){let a=this.texData.get(t),{values:n,dtype:r,complexTensorInfos:s,slice:i,shape:o,isPacked:l}=a;if(i!=null){let d;l?d=new jr(o,Br):d=new Yn(o,Br);let h=this.runWebGLProgram(d,[{dataId:t,shape:o,dtype:r}],r),m=this.readSync(h.dataId);return this.disposeIntermediateTensorInfo(h),m}if(n!=null)return this.convertAndCacheOnCPU(t);if(r==="string")return n;let u=this.activeTimers!=null,p;u&&(p=v.now());let c;if(r==="complex64"){let d=this.readSync(s.real.dataId),h=this.readSync(s.imag.dataId);c=C.mergeRealAndImagArrays(d,h)}else c=this.getValuesFromTexture(t);return u&&(this.downloadWaitMs+=v.now()-p),this.convertAndCacheOnCPU(t,c)}async read(t){if(this.pendingRead.has(t)){let m=this.pendingRead.get(t);return new Promise(f=>m.push(f))}let a=this.texData.get(t),{values:n,shape:r,slice:s,dtype:i,complexTensorInfos:o,isPacked:l}=a;if(s!=null){let m;l?m=new jr(r,Br):m=new Yn(r,Br);let f=this.runWebGLProgram(m,[{dataId:t,shape:r,dtype:i}],i),g=this.read(f.dataId);return this.disposeIntermediateTensorInfo(f),g}if(n!=null)return this.convertAndCacheOnCPU(t);if(B().getBool("DEBUG")&&!B().getBool("WEBGL_DOWNLOAD_FLOAT_ENABLED")&&B().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,p;if(i!=="complex64"&&B().get("WEBGL_BUFFER_SUPPORTED")){p=this.decode(t);let m=this.texData.get(p.dataId);u=this.gpgpu.createBufferFromTexture(m.texture.texture,...Zc(r))}this.pendingRead.set(t,[]),i!=="complex64"&&await this.gpgpu.createAndWaitForFence();let c;if(i==="complex64"){let m=await Promise.all([this.read(o.real.dataId),this.read(o.imag.dataId)]),f=m[0],g=m[1];c=C.mergeRealAndImagArrays(f,g)}else if(u==null)c=this.getValuesFromTexture(t);else{let m=v.sizeFromShape(r);c=this.gpgpu.downloadFloat32MatrixFromBuffer(u,m)}if(p!=null&&this.disposeIntermediateTensorInfo(p),u!=null){let m=this.gpgpu.gl;ce(m,()=>m.deleteBuffer(u))}let d=this.convertAndCacheOnCPU(t,c),h=this.pendingRead.get(t);return this.pendingRead.delete(t),h.forEach(m=>m(d)),this.pendingDisposal.has(t)&&(this.pendingDisposal.delete(t),this.disposeData(t)&&It().removeDataId(t,this),this.pendingDeletes--),d}readToGPU(t,a={}){let n=this.texData.get(t),{values:r,shape:s,slice:i,dtype:o,isPacked:l,texture:u}=n;if(o==="complex64")throw new Error("Does not support reading texture for complex64 dtype.");if(i!=null){let h;l?h=new jr(s,Br):h=new Yn(s,Br);let m=this.runWebGLProgram(h,[{dataId:t,shape:s,dtype:o}],o),f=this.readToGPU(m,a);return this.disposeIntermediateTensorInfo(m),f}if(u==null)throw r!=null?new Error("Data is not on GPU but on CPU."):new Error("There is no data on GPU or CPU.");let p=this.decode(t,a.customTexShape),c=It().makeTensorFromTensorInfo(p),d=this.texData.get(p.dataId);return Object.assign({tensorRef:c},d.texture)}bufferSync(t){let a=this.readSync(t.dataId);if(t.dtype==="string")try{let n=a.map(r=>v.decodeString(r));return _e(t.shape,t.dtype,n)}catch(n){throw new Error("Failed to decode encoded string bytes into utf-8")}return _e(t.shape,t.dtype,a)}checkNumericalProblems(t){if(t!=null)for(let a=0;a0}time(t){let a=this.activeTimers,n=[],r=!1;this.programTimersStack==null?(this.programTimersStack=n,r=!0):this.activeTimers.push(n),this.activeTimers=n,t();let s=v.flatten(this.activeTimers.map(l=>l.query)).filter(l=>l!=null),i=v.flatten(this.activeTimers.map(l=>l.name)).filter(l=>l!=null);this.activeTimers=a,r&&(this.programTimersStack=null);let o={uploadWaitMs:this.uploadWaitMs,downloadWaitMs:this.downloadWaitMs,kernelMs:null,wallMs:null};return(async()=>{if(B().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0){let l=await Promise.all(s);o.kernelMs=v.sum(l),o.getExtraProfileInfo=()=>l.map((u,p)=>({name:i[p],ms:u})).map(u=>`${u.name}: ${u.ms}`).join(", ")}else o.kernelMs={error:"WebGL query timers are not supported in this environment."};return this.uploadWaitMs=0,this.downloadWaitMs=0,o})()}memory(){return{unreliable:!1,numBytesInGPU:this.numBytesInGPU,numBytesInGPUAllocated:this.textureManager.numBytesAllocated,numBytesInGPUFree:this.textureManager.numBytesFree}}startTimer(){return B().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0?this.gpgpu.beginQuery():{startMs:v.now(),endMs:null}}endTimer(t){return B().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0?(this.gpgpu.endQuery(),t):(t.endMs=v.now(),t)}async getQueryTime(t){if(B().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0)return this.gpgpu.waitForQueryAndGetTime(t);let a=t;return a.endMs-a.startMs}disposeData(t,a=!1){if(this.pendingDisposal.has(t))return!1;if(!this.texData.has(t))return!0;if(a?this.texData.get(t).refCount=0:this.texData.get(t).refCount--,!a&&this.texData.get(t).refCount>0)return!1;if(this.pendingRead.has(t))return this.pendingDisposal.add(t),this.pendingDeletes++,!1;this.releaseGPUData(t);let{complexTensorInfos:n}=this.texData.get(t);return n!=null&&(this.disposeData(n.real.dataId,a),this.disposeData(n.imag.dataId,a)),this.texData.delete(t),!0}releaseGPUData(t){let{texture:a,dtype:n,texShape:r,usage:s,isPacked:i,slice:o}=this.texData.get(t),l=o&&o.origDataId||t,u=this.dataRefCount.get(l);u>1?this.dataRefCount.set(l,u-1):(this.dataRefCount.delete(l),a!=null&&(this.numBytesInGPU-=this.computeBytes(r,n),this.textureManager.releaseTexture(a,r,s,i)));let p=this.texData.get(t);p.texture=null,p.texShape=null,p.isPacked=!1,p.slice=null}getTexture(t){return this.uploadToGPU(t),this.texData.get(t).texture.texture}getDataInfo(t){return this.texData.get(t)}shouldExecuteOnCPU(t,a=Hj){return B().getBool("WEBGL_CPU_FORWARD")&&t.every(n=>this.texData.get(n.dataId).texture==null&&v.sizeFromShape(n.shape)0&&v.isString(n[0])){let s=n.map(i=>v.encodeString(i));r=this.write(s,t,a)}else r=this.write(n,t,a);return this.texData.get(r).usage=null,{dataId:r,shape:t,dtype:a}}makeOutput(t,a,n){return It().makeTensorFromTensorInfo(this.makeTensorInfo(t,a,n),this)}unpackTensor(t){let a=new Wj(t.shape);return this.runWebGLProgram(a,[t],t.dtype)}packTensor(t){let a=new Ij(t.shape);return this.runWebGLProgram(a,[t],t.dtype,null,!0)}packedReshape(t,a){let n=[ai(t.shape),...ni(t.shape)],r={dtype:t.dtype,shape:n,dataId:t.dataId},s=[ai(a),...ni(a)],i=new f8(s,n),o=!0,l=[n],u=this.runWebGLProgram(i,[r],t.dtype,l,o);return{dataId:u.dataId,shape:a,dtype:u.dtype}}decode(t,a){let n=this.texData.get(t),{isPacked:r,shape:s,dtype:i}=n;if(a!=null){let d=v.sizeFromShape(s),h=a[0]*a[1]*4;v.assert(d<=h,()=>"customTexShape is too small. Row * Column * 4 should be equal or larger than the size of the tensor data.")}let o=Ed(s),l;r?l=new CH(o):l=new SH(o);let u=!0,p=[a!=null?a:Zc(o)],c=this.runWebGLProgram(l,[{shape:o,dtype:i,dataId:t}],i,p,u,a);return{dtype:i,shape:s,dataId:c.dataId}}runWebGLProgram(t,a,n,r,s=!1,i){let o=this.makeTensorInfo(t.outputShape,n),l=this.texData.get(o.dataId);if(t.packedOutput&&(l.isPacked=!0),t.outPackingScheme===Jd.DENSE){let y=i!=null?i:Zc(t.outputShape);l.texShape=y.map(x=>x*2)}if(t.outTexUsage!=null&&(l.usage=t.outTexUsage),v.sizeFromShape(o.shape)===0)return l.values=v.getTypedArrayFromDType(o.dtype,0),o;let u=[],p=a.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 x=this.texData.get(y.dataId);if(x.texture==null){if(!t.packedInputs&&v.sizeFromShape(y.shape)<=B().getNumber("WEBGL_SIZE_UPLOAD_UNIFORM"))return{shape:y.shape,texData:null,isUniform:!0,uniformValues:x.values};t.packedInputs&&(x.isPacked=!0,x.shape=y.shape)}if(this.uploadToGPU(y.dataId),!!x.isPacked!=!!t.packedInputs)y=x.isPacked?this.unpackTensor(y):this.packTensor(y),u.push(y),x=this.texData.get(y.dataId);else if(x.isPacked&&!Qd(x.shape,y.shape)){let A=y,b=y.shape;y.shape=x.shape,y=this.packedReshape(y,b),u.push(y),x=this.texData.get(y.dataId),A.shape=b}return{shape:y.shape,texData:x,isUniform:!1}});this.uploadToGPU(o.dataId);let c={shape:o.shape,texData:l,isUniform:!1},d=IH(t,p,c),h=this.getAndSaveBinary(d,()=>wH(this.gpgpu,t,p,c)),m=this.activeTimers!=null,f;m&&(f=this.startTimer()),B().get("ENGINE_COMPILE_ONLY")||kH(this.gpgpu,h,p,c,r),u.forEach(y=>this.disposeIntermediateTensorInfo(y)),m&&(f=this.endTimer(f),this.activeTimers.push({name:t.constructor.name,query:this.getQueryTime(f)}));let g=B().getNumber("WEBGL_FLUSH_THRESHOLD");if(g>0){let y=v.now();y-this.lastGlFlushTime>g&&(this.gpgpu.gl.flush(),this.lastGlFlushTime=y)}if(!B().getBool("WEBGL_LAZILY_UNPACK")&&l.isPacked&&s===!1){let y=this.unpackTensor(o);return this.disposeIntermediateTensorInfo(o),y}return o}compileAndRun(t,a,n,r,s=!1){return n=n||a[0].dtype,this.runWebGLProgram(t,a,n,r,s)}getAndSaveBinary(t,a){return t in this.binaryCache||(this.binaryCache[t]=a()),this.binaryCache[t]}getTextureManager(){return this.textureManager}dispose(){this.disposed||(B().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=De(()=>{if(!B().get("WEBGL_RENDER_FLOAT32_ENABLED")){let t=B().getBool("DEBUG");B().set("DEBUG",!1);let a=this.abs(Ge(1e-8)).dataSync()[0];if(B().set("DEBUG",t),a>0)return 32}return 16})),this.floatPrecisionValue}epsilon(){return this.floatPrecision()===32?Vj:Uj}uploadToGPU(t){let a=this.texData.get(t),{shape:n,dtype:r,values:s,texture:i,usage:o,isPacked:l}=a;if(i!=null)return;let u=this.activeTimers!=null,p;u&&(p=v.now());let c=a.texShape;if(c==null&&(c=Dv(n,l),a.texShape=c),s!=null){let d=Ed(n),h,m=c[1],f=c[0],g=s instanceof Uint8Array||s instanceof Uint8ClampedArray;(l||!g)&&([m,f]=Hu(c[0],c[1])),l?h=new EH(d,g):h=new S5(d,g);let y=g?[f,m]:c,x=this.makeTensorInfo(y,r),A=this.texData.get(x.dataId);g?A.usage=mn.PIXELS:A.usage=mn.UPLOAD,A.texShape=y,this.gpgpu.uploadDenseMatrixToTexture(this.getTexture(x.dataId),m,f,s);let b=[[f,m]],w=this.runWebGLProgram(h,[x],r,b,!0),I=this.texData.get(w.dataId);a.texShape=I.texShape,a.isPacked=I.isPacked,a.usage=I.usage,B().get("ENGINE_COMPILE_ONLY")?this.disposeData(w.dataId):(a.texture=I.texture,a.values=null,this.texData.delete(w.dataId)),this.disposeIntermediateTensorInfo(x),u&&(this.uploadWaitMs+=v.now()-p)}else{let d=this.acquireTexture(c,o,r,l);a.texture=d}}convertAndCacheOnCPU(t,a){let n=this.texData.get(t),{dtype:r}=n;return a!=null&&(n.values=Xj(a,r)),n.values}acquireTexture(t,a,n,r){if(this.numBytesInGPU+=this.computeBytes(t,n),!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(t,a,r)}computeBytes(t,a){return t[0]*t[1]*v.bytesPerElement(a)}checkCompileCompletion(){for(let[,t]of Object.entries(this.binaryCache))this.checkCompletion_(t)}async checkCompileCompletionAsync(){let t=[];if(this.gpgpu.parallelCompilationExtension){for(let[,a]of Object.entries(this.binaryCache))t.push(this.checkCompletionAsync_(a));return Promise.all(t)}else{for(let[,a]of Object.entries(this.binaryCache)){let n=new Promise(r=>{try{this.checkCompletion_(a),r(!0)}catch(s){throw s}});t.push(n)}return Promise.all(t)}}async checkCompletionAsync_(t){return this.gpgpu.gl.getProgramParameter(t.webGLProgram,this.gpgpu.parallelCompilationExtension.COMPLETION_STATUS_KHR)?this.checkCompletion_(t):(await U7(),this.checkCompletionAsync_(t))}checkCompletion_(t){if(this.gpgpu.gl.getProgramParameter(t.webGLProgram,this.gpgpu.gl.LINK_STATUS)===!1)throw console.log(this.gpgpu.gl.getProgramInfoLog(t.webGLProgram)),this.gpgpu.gl.getShaderParameter(t.fragmentShader,this.gpgpu.gl.COMPILE_STATUS)===!1?(N3(t.source,this.gpgpu.gl.getShaderInfoLog(t.fragmentShader)),new Error("Failed to compile fragment shader.")):new Error("Failed to link vertex and fragment shaders.");return!0}getUniformLocations(){for(let t of Object.values(this.binaryCache)){this.gpgpu.buildVao(t.webGLProgram);let{variablesLocations:a,customUniformLocations:n,infLoc:r,nanLoc:s,outShapeLocation:i,outShapeStridesLocation:o,outTexShapeLocation:l}=qv(this.gpgpu,t.program,t.webGLProgram);t.variablesLocations=a,t.customUniformLocations=n,t.infLoc=r,t.nanLoc=s,t.outShapeLocation=i,t.outShapeStridesLocation=o,t.outTexShapeLocation=l}}createTensorFromGPUData(t,a,n){t.channels=t.channels||"RGBA";let{texture:r,height:s,width:i,channels:o}=t,l=It().backend;if(!l.gpgpu.gl.isTexture(r))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=l.writeTexture(r,a,n,s,i,o);return It().makeTensorFromDataId(u,a,n,l)}};Jp.nextDataId=0;function Xj(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 Jp,2);var Yj={forceHalfFloat:y8},z3=` + `}},Vj=Rn.whereImpl,Uj=1e-7,Gj=1e-4,J2={};function Hj(e){return e in J2||(J2[e]={}),J2[e]}var jj=B().getNumber("CPU_HANDOFF_SIZE_THRESHOLD"),qj=600;function Xj(){return B().global.screen==null?1024:B().global.screen.height*B().global.screen.width*window.devicePixelRatio*qj/1024/1024}var Jp=class y8 extends ru{nextDataId(){return y8.nextDataId++}constructor(t){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,!B().getBool("HAS_WEBGL"))throw new Error("WebGL is not supported on this device");let a;if(t!=null){if(t instanceof Gl)a=t;else{let n=Wn(B().getNumber("WEBGL_VERSION"),t);a=new Gl(n)}this.binaryCache={},this.gpgpuCreatedLocally=!1}else{let n=Wn(B().getNumber("WEBGL_VERSION"));a=new Gl(n),this.binaryCache=Hj(B().getNumber("WEBGL_VERSION")),this.gpgpuCreatedLocally=!0}this.gpgpu=a,this.canvas=this.gpgpu.gl.canvas,this.textureManager=new Tj(this.gpgpu),this.numMBBeforeWarning=Xj(),this.texData=new ip(this,It())}numDataIds(){return this.texData.numDataIds()-this.pendingDeletes}writeTexture(t,a,n,r,s,i){let o=this.makeTensorInfo(a,n),l=this.texData.get(o.dataId);l.isPacked=!1,l.texture={texture:t,texShape:[r,s]},l.texShape=[r,s];let u=Ed(a),p=new C5(u,!1,i),c=this.runWebGLProgram(p,[o],n,[[r,s]]);return c.shape=a,l.texture=null,this.disposeIntermediateTensorInfo(o),c.dataId}write(t,a,n){if((B().getBool("WEBGL_CHECK_NUMERICAL_PROBLEMS")||B().getBool("DEBUG"))&&this.checkNumericalProblems(t),n==="complex64"&&t!=null)throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag).");let r={id:this.nextDataId()};return this.texData.set(r,{shape:a,dtype:n,values:t,usage:mn.UPLOAD,refCount:1}),r}refCount(t){return this.texData.has(t)?this.texData.get(t).refCount:0}incRef(t){let a=this.texData.get(t);a.refCount++}decRef(t){if(this.texData.has(t)){let a=this.texData.get(t);a.refCount--}}move(t,a,n,r,s){if(B().getBool("DEBUG")&&this.checkNumericalProblems(a),r==="complex64")throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag).");this.texData.set(t,{shape:n,dtype:r,values:a,usage:mn.UPLOAD,refCount:s})}disposeIntermediateTensorInfo(t){this.disposeData(t.dataId)}readSync(t){let a=this.texData.get(t),{values:n,dtype:r,complexTensorInfos:s,slice:i,shape:o,isPacked:l}=a;if(i!=null){let d;l?d=new jr(o,Br):d=new Yn(o,Br);let h=this.runWebGLProgram(d,[{dataId:t,shape:o,dtype:r}],r),m=this.readSync(h.dataId);return this.disposeIntermediateTensorInfo(h),m}if(n!=null)return this.convertAndCacheOnCPU(t);if(r==="string")return n;let u=this.activeTimers!=null,p;u&&(p=v.now());let c;if(r==="complex64"){let d=this.readSync(s.real.dataId),h=this.readSync(s.imag.dataId);c=C.mergeRealAndImagArrays(d,h)}else c=this.getValuesFromTexture(t);return u&&(this.downloadWaitMs+=v.now()-p),this.convertAndCacheOnCPU(t,c)}async read(t){if(this.pendingRead.has(t)){let m=this.pendingRead.get(t);return new Promise(f=>m.push(f))}let a=this.texData.get(t),{values:n,shape:r,slice:s,dtype:i,complexTensorInfos:o,isPacked:l}=a;if(s!=null){let m;l?m=new jr(r,Br):m=new Yn(r,Br);let f=this.runWebGLProgram(m,[{dataId:t,shape:r,dtype:i}],i),g=this.read(f.dataId);return this.disposeIntermediateTensorInfo(f),g}if(n!=null)return this.convertAndCacheOnCPU(t);if(B().getBool("DEBUG")&&!B().getBool("WEBGL_DOWNLOAD_FLOAT_ENABLED")&&B().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,p;if(i!=="complex64"&&B().get("WEBGL_BUFFER_SUPPORTED")){p=this.decode(t);let m=this.texData.get(p.dataId);u=this.gpgpu.createBufferFromTexture(m.texture.texture,...Zc(r))}this.pendingRead.set(t,[]),i!=="complex64"&&await this.gpgpu.createAndWaitForFence();let c;if(i==="complex64"){let m=await Promise.all([this.read(o.real.dataId),this.read(o.imag.dataId)]),f=m[0],g=m[1];c=C.mergeRealAndImagArrays(f,g)}else if(u==null)c=this.getValuesFromTexture(t);else{let m=v.sizeFromShape(r);c=this.gpgpu.downloadFloat32MatrixFromBuffer(u,m)}if(p!=null&&this.disposeIntermediateTensorInfo(p),u!=null){let m=this.gpgpu.gl;ce(m,()=>m.deleteBuffer(u))}let d=this.convertAndCacheOnCPU(t,c),h=this.pendingRead.get(t);return this.pendingRead.delete(t),h.forEach(m=>m(d)),this.pendingDisposal.has(t)&&(this.pendingDisposal.delete(t),this.disposeData(t)&&It().removeDataId(t,this),this.pendingDeletes--),d}readToGPU(t,a={}){let n=this.texData.get(t),{values:r,shape:s,slice:i,dtype:o,isPacked:l,texture:u}=n;if(o==="complex64")throw new Error("Does not support reading texture for complex64 dtype.");if(i!=null){let h;l?h=new jr(s,Br):h=new Yn(s,Br);let m=this.runWebGLProgram(h,[{dataId:t,shape:s,dtype:o}],o),f=this.readToGPU(m,a);return this.disposeIntermediateTensorInfo(m),f}if(u==null)throw r!=null?new Error("Data is not on GPU but on CPU."):new Error("There is no data on GPU or CPU.");let p=this.decode(t,a.customTexShape),c=It().makeTensorFromTensorInfo(p),d=this.texData.get(p.dataId);return Object.assign({tensorRef:c},d.texture)}bufferSync(t){let a=this.readSync(t.dataId);if(t.dtype==="string")try{let n=a.map(r=>v.decodeString(r));return _e(t.shape,t.dtype,n)}catch(n){throw new Error("Failed to decode encoded string bytes into utf-8")}return _e(t.shape,t.dtype,a)}checkNumericalProblems(t){if(t!=null)for(let a=0;a0}time(t){let a=this.activeTimers,n=[],r=!1;this.programTimersStack==null?(this.programTimersStack=n,r=!0):this.activeTimers.push(n),this.activeTimers=n,t();let s=v.flatten(this.activeTimers.map(l=>l.query)).filter(l=>l!=null),i=v.flatten(this.activeTimers.map(l=>l.name)).filter(l=>l!=null);this.activeTimers=a,r&&(this.programTimersStack=null);let o={uploadWaitMs:this.uploadWaitMs,downloadWaitMs:this.downloadWaitMs,kernelMs:null,wallMs:null};return(async()=>{if(B().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0){let l=await Promise.all(s);o.kernelMs=v.sum(l),o.getExtraProfileInfo=()=>l.map((u,p)=>({name:i[p],ms:u})).map(u=>`${u.name}: ${u.ms}`).join(", ")}else o.kernelMs={error:"WebGL query timers are not supported in this environment."};return this.uploadWaitMs=0,this.downloadWaitMs=0,o})()}memory(){return{unreliable:!1,numBytesInGPU:this.numBytesInGPU,numBytesInGPUAllocated:this.textureManager.numBytesAllocated,numBytesInGPUFree:this.textureManager.numBytesFree}}startTimer(){return B().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0?this.gpgpu.beginQuery():{startMs:v.now(),endMs:null}}endTimer(t){return B().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0?(this.gpgpu.endQuery(),t):(t.endMs=v.now(),t)}async getQueryTime(t){if(B().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0)return this.gpgpu.waitForQueryAndGetTime(t);let a=t;return a.endMs-a.startMs}disposeData(t,a=!1){if(this.pendingDisposal.has(t))return!1;if(!this.texData.has(t))return!0;if(a?this.texData.get(t).refCount=0:this.texData.get(t).refCount--,!a&&this.texData.get(t).refCount>0)return!1;if(this.pendingRead.has(t))return this.pendingDisposal.add(t),this.pendingDeletes++,!1;this.releaseGPUData(t);let{complexTensorInfos:n}=this.texData.get(t);return n!=null&&(this.disposeData(n.real.dataId,a),this.disposeData(n.imag.dataId,a)),this.texData.delete(t),!0}releaseGPUData(t){let{texture:a,dtype:n,texShape:r,usage:s,isPacked:i,slice:o}=this.texData.get(t),l=o&&o.origDataId||t,u=this.dataRefCount.get(l);u>1?this.dataRefCount.set(l,u-1):(this.dataRefCount.delete(l),a!=null&&(this.numBytesInGPU-=this.computeBytes(r,n),this.textureManager.releaseTexture(a,r,s,i)));let p=this.texData.get(t);p.texture=null,p.texShape=null,p.isPacked=!1,p.slice=null}getTexture(t){return this.uploadToGPU(t),this.texData.get(t).texture.texture}getDataInfo(t){return this.texData.get(t)}shouldExecuteOnCPU(t,a=jj){return B().getBool("WEBGL_CPU_FORWARD")&&t.every(n=>this.texData.get(n.dataId).texture==null&&v.sizeFromShape(n.shape)0&&v.isString(n[0])){let s=n.map(i=>v.encodeString(i));r=this.write(s,t,a)}else r=this.write(n,t,a);return this.texData.get(r).usage=null,{dataId:r,shape:t,dtype:a}}makeOutput(t,a,n){return It().makeTensorFromTensorInfo(this.makeTensorInfo(t,a,n),this)}unpackTensor(t){let a=new Bj(t.shape);return this.runWebGLProgram(a,[t],t.dtype)}packTensor(t){let a=new Sj(t.shape);return this.runWebGLProgram(a,[t],t.dtype,null,!0)}packedReshape(t,a){let n=[ai(t.shape),...ni(t.shape)],r={dtype:t.dtype,shape:n,dataId:t.dataId},s=[ai(a),...ni(a)],i=new g8(s,n),o=!0,l=[n],u=this.runWebGLProgram(i,[r],t.dtype,l,o);return{dataId:u.dataId,shape:a,dtype:u.dtype}}decode(t,a){let n=this.texData.get(t),{isPacked:r,shape:s,dtype:i}=n;if(a!=null){let d=v.sizeFromShape(s),h=a[0]*a[1]*4;v.assert(d<=h,()=>"customTexShape is too small. Row * Column * 4 should be equal or larger than the size of the tensor data.")}let o=Ed(s),l;r?l=new TH(o):l=new CH(o);let u=!0,p=[a!=null?a:Zc(o)],c=this.runWebGLProgram(l,[{shape:o,dtype:i,dataId:t}],i,p,u,a);return{dtype:i,shape:s,dataId:c.dataId}}runWebGLProgram(t,a,n,r,s=!1,i){let o=this.makeTensorInfo(t.outputShape,n),l=this.texData.get(o.dataId);if(t.packedOutput&&(l.isPacked=!0),t.outPackingScheme===Jd.DENSE){let y=i!=null?i:Zc(t.outputShape);l.texShape=y.map(x=>x*2)}if(t.outTexUsage!=null&&(l.usage=t.outTexUsage),v.sizeFromShape(o.shape)===0)return l.values=v.getTypedArrayFromDType(o.dtype,0),o;let u=[],p=a.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 x=this.texData.get(y.dataId);if(x.texture==null){if(!t.packedInputs&&v.sizeFromShape(y.shape)<=B().getNumber("WEBGL_SIZE_UPLOAD_UNIFORM"))return{shape:y.shape,texData:null,isUniform:!0,uniformValues:x.values};t.packedInputs&&(x.isPacked=!0,x.shape=y.shape)}if(this.uploadToGPU(y.dataId),!!x.isPacked!=!!t.packedInputs)y=x.isPacked?this.unpackTensor(y):this.packTensor(y),u.push(y),x=this.texData.get(y.dataId);else if(x.isPacked&&!Qd(x.shape,y.shape)){let A=y,b=y.shape;y.shape=x.shape,y=this.packedReshape(y,b),u.push(y),x=this.texData.get(y.dataId),A.shape=b}return{shape:y.shape,texData:x,isUniform:!1}});this.uploadToGPU(o.dataId);let c={shape:o.shape,texData:l,isUniform:!1},d=SH(t,p,c),h=this.getAndSaveBinary(d,()=>kH(this.gpgpu,t,p,c)),m=this.activeTimers!=null,f;m&&(f=this.startTimer()),B().get("ENGINE_COMPILE_ONLY")||IH(this.gpgpu,h,p,c,r),u.forEach(y=>this.disposeIntermediateTensorInfo(y)),m&&(f=this.endTimer(f),this.activeTimers.push({name:t.constructor.name,query:this.getQueryTime(f)}));let g=B().getNumber("WEBGL_FLUSH_THRESHOLD");if(g>0){let y=v.now();y-this.lastGlFlushTime>g&&(this.gpgpu.gl.flush(),this.lastGlFlushTime=y)}if(!B().getBool("WEBGL_LAZILY_UNPACK")&&l.isPacked&&s===!1){let y=this.unpackTensor(o);return this.disposeIntermediateTensorInfo(o),y}return o}compileAndRun(t,a,n,r,s=!1){return n=n||a[0].dtype,this.runWebGLProgram(t,a,n,r,s)}getAndSaveBinary(t,a){return t in this.binaryCache||(this.binaryCache[t]=a()),this.binaryCache[t]}getTextureManager(){return this.textureManager}dispose(){this.disposed||(B().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=De(()=>{if(!B().get("WEBGL_RENDER_FLOAT32_ENABLED")){let t=B().getBool("DEBUG");B().set("DEBUG",!1);let a=this.abs(Ge(1e-8)).dataSync()[0];if(B().set("DEBUG",t),a>0)return 32}return 16})),this.floatPrecisionValue}epsilon(){return this.floatPrecision()===32?Uj:Gj}uploadToGPU(t){let a=this.texData.get(t),{shape:n,dtype:r,values:s,texture:i,usage:o,isPacked:l}=a;if(i!=null)return;let u=this.activeTimers!=null,p;u&&(p=v.now());let c=a.texShape;if(c==null&&(c=Ov(n,l),a.texShape=c),s!=null){let d=Ed(n),h,m=c[1],f=c[0],g=s instanceof Uint8Array||s instanceof Uint8ClampedArray;(l||!g)&&([m,f]=Hu(c[0],c[1])),l?h=new MH(d,g):h=new C5(d,g);let y=g?[f,m]:c,x=this.makeTensorInfo(y,r),A=this.texData.get(x.dataId);g?A.usage=mn.PIXELS:A.usage=mn.UPLOAD,A.texShape=y,this.gpgpu.uploadDenseMatrixToTexture(this.getTexture(x.dataId),m,f,s);let b=[[f,m]],w=this.runWebGLProgram(h,[x],r,b,!0),I=this.texData.get(w.dataId);a.texShape=I.texShape,a.isPacked=I.isPacked,a.usage=I.usage,B().get("ENGINE_COMPILE_ONLY")?this.disposeData(w.dataId):(a.texture=I.texture,a.values=null,this.texData.delete(w.dataId)),this.disposeIntermediateTensorInfo(x),u&&(this.uploadWaitMs+=v.now()-p)}else{let d=this.acquireTexture(c,o,r,l);a.texture=d}}convertAndCacheOnCPU(t,a){let n=this.texData.get(t),{dtype:r}=n;return a!=null&&(n.values=Kj(a,r)),n.values}acquireTexture(t,a,n,r){if(this.numBytesInGPU+=this.computeBytes(t,n),!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(t,a,r)}computeBytes(t,a){return t[0]*t[1]*v.bytesPerElement(a)}checkCompileCompletion(){for(let[,t]of Object.entries(this.binaryCache))this.checkCompletion_(t)}async checkCompileCompletionAsync(){let t=[];if(this.gpgpu.parallelCompilationExtension){for(let[,a]of Object.entries(this.binaryCache))t.push(this.checkCompletionAsync_(a));return Promise.all(t)}else{for(let[,a]of Object.entries(this.binaryCache)){let n=new Promise(r=>{try{this.checkCompletion_(a),r(!0)}catch(s){throw s}});t.push(n)}return Promise.all(t)}}async checkCompletionAsync_(t){return this.gpgpu.gl.getProgramParameter(t.webGLProgram,this.gpgpu.parallelCompilationExtension.COMPLETION_STATUS_KHR)?this.checkCompletion_(t):(await G7(),this.checkCompletionAsync_(t))}checkCompletion_(t){if(this.gpgpu.gl.getProgramParameter(t.webGLProgram,this.gpgpu.gl.LINK_STATUS)===!1)throw console.log(this.gpgpu.gl.getProgramInfoLog(t.webGLProgram)),this.gpgpu.gl.getShaderParameter(t.fragmentShader,this.gpgpu.gl.COMPILE_STATUS)===!1?(N3(t.source,this.gpgpu.gl.getShaderInfoLog(t.fragmentShader)),new Error("Failed to compile fragment shader.")):new Error("Failed to link vertex and fragment shaders.");return!0}getUniformLocations(){for(let t of Object.values(this.binaryCache)){this.gpgpu.buildVao(t.webGLProgram);let{variablesLocations:a,customUniformLocations:n,infLoc:r,nanLoc:s,outShapeLocation:i,outShapeStridesLocation:o,outTexShapeLocation:l}=Xv(this.gpgpu,t.program,t.webGLProgram);t.variablesLocations=a,t.customUniformLocations=n,t.infLoc=r,t.nanLoc=s,t.outShapeLocation=i,t.outShapeStridesLocation=o,t.outTexShapeLocation=l}}createTensorFromGPUData(t,a,n){t.channels=t.channels||"RGBA";let{texture:r,height:s,width:i,channels:o}=t,l=It().backend;if(!l.gpgpu.gl.isTexture(r))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=l.writeTexture(r,a,n,s,i,o);return It().makeTensorFromDataId(u,a,n,l)}};Jp.nextDataId=0;function Kj(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 Jp,2);var Zj={forceHalfFloat:x8},z3=` if (isnan(a)) return a; if (isnan(b)) return b; `,ri=class{constructor(e,t,a){this.variableNames=["A","B"],this.outputShape=C.assertAndGetBroadcastShape(t,a),this.enableShapeUniforms=ga(this.outputShape.length),this.userCode=` @@ -1291,13 +1291,13 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, setOutput(result); } - `}};function en(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 Zj={kernelName:qi,backendName:"webgl",kernelFunc:en};function ms(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=en({inputs:{x:n},backend:a}),l=en({inputs:{x:r},backend:a});return i.complexTensorInfos={real:o,imag:l},s}var Jj={kernelName:pp,backendName:"webgl",kernelFunc:ms},x8="return (a < 0.) ? b * a : a;",A8=` + `}};function en(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 Jj={kernelName:qi,backendName:"webgl",kernelFunc:en};function ms(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=en({inputs:{x:n},backend:a}),l=en({inputs:{x:r},backend:a});return i.complexTensorInfos={real:o,imag:l},s}var Qj={kernelName:pp,backendName:"webgl",kernelFunc:ms},A8="return (a < 0.) ? b * a : a;",b8=` vec4 aLessThanZero = vec4(lessThan(a, vec4(0.))); return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a); -`;function Qj(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{alpha:s}=n,i=a.makeTensorInfo([],"float32",v.createScalarValue(s,"float32")),o=B().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new Zu(A8,r.shape,i.shape):new ri(x8,r.shape,i.shape),l=a.runWebGLProgram(o,[r,i],"float32");return a.disposeIntermediateTensorInfo(i),l}var eq={kernelName:Zi,backendName:"webgl",kernelFunc:Qj},b8="return (a < 0.) ? b * a : a;",v8=` +`;function eq(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{alpha:s}=n,i=a.makeTensorInfo([],"float32",v.createScalarValue(s,"float32")),o=B().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new Zu(b8,r.shape,i.shape):new ri(A8,r.shape,i.shape),l=a.runWebGLProgram(o,[r,i],"float32");return a.disposeIntermediateTensorInfo(i),l}var tq={kernelName:Zi,backendName:"webgl",kernelFunc:eq},v8="return (a < 0.) ? b * a : a;",w8=` vec4 aLessThanZero = vec4(lessThan(a, vec4(0.))); return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a); -`;function tq(e){let{inputs:t,backend:a}=e,{x:n,alpha:r}=t,s=B().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new Zu(v8,n.shape,r.shape):new ri(b8,n.shape,r.shape);return a.runWebGLProgram(s,[n,r],"float32")}var aq={kernelName:Io,backendName:"webgl",kernelFunc:tq},Ju="if (isnan(x)) return x;";function tt({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=B().getBool("WEBGL_PACK_UNARY_OPERATIONS")&&t!=null,p;return u?p=new jr(i.shape,t):p=new Yn(i.shape,e),o.runWebGLProgram(p,[i],l)}}function ha({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 m=p.texData.get(l.dataId),f=p.texData.get(u.dataId),[g,y]=[[m.complexTensorInfos.real,f.complexTensorInfos.real],[m.complexTensorInfos.imag,f.complexTensorInfos.imag]].map(A=>{let[b,w]=A,I={dataId:b.dataId,dtype:b.dtype,shape:l.shape},T={dataId:w.dataId,dtype:w.dtype,shape:u.shape},N=new ri(e,l.shape,u.shape);return p.runWebGLProgram(N,[I,T],pa(b.dtype,w.dtype))}),x=ms({inputs:{real:g,imag:y},backend:p});return p.disposeIntermediateTensorInfo(g),p.disposeIntermediateTensorInfo(y),x}let c=s||pa(l.dtype,u.dtype);if((l.dtype==="string"||u.dtype==="string"||p.shouldExecuteOnCPU([l,u]))&&r!=null){let m=p.texData.get(l.dataId).values,f=p.texData.get(u.dataId).values,g=l.dtype==="string"?C.fromUint8ToStringArray(m):m,y=l.dtype==="string"?C.fromUint8ToStringArray(f):f,[x,A]=r(l.shape,u.shape,g,y,c),b=p.makeTensorInfo(A,c),w=p.texData.get(b.dataId);return w.values=x,b}let d=B().getBool("WEBGL_PACK_BINARY_OPERATIONS")&&t!=null,h;return d?h=new Zu(t,l.shape,u.shape,a):h=new ri(e,l.shape,u.shape),p.runWebGLProgram(h,[l,u],c)}}function ep(e,t=!1){if(e==="linear")return t?Fj:Ej;if(e==="relu")return t?Oj:$j;if(e==="elu")return t?Dj:Mj;if(e==="relu6")return t?zj:Pj;if(e==="prelu")return t?v8:b8;if(e==="leakyrelu")return t?A8:x8;if(e==="sigmoid")return t?Lj:_j;throw new Error(`Activation ${e} has not been implemented for the WebGL backend.`)}var w8=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=ga(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"],m=r?["b.xzxz","b.ywyw"]:["b.xyxy","b.zwzw"],f="",g="";i&&(o?f=`vec4 activation(vec4 a) { +`;function aq(e){let{inputs:t,backend:a}=e,{x:n,alpha:r}=t,s=B().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new Zu(w8,n.shape,r.shape):new ri(v8,n.shape,r.shape);return a.runWebGLProgram(s,[n,r],"float32")}var nq={kernelName:Io,backendName:"webgl",kernelFunc:aq},Ju="if (isnan(x)) return x;";function tt({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=B().getBool("WEBGL_PACK_UNARY_OPERATIONS")&&t!=null,p;return u?p=new jr(i.shape,t):p=new Yn(i.shape,e),o.runWebGLProgram(p,[i],l)}}function ha({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 m=p.texData.get(l.dataId),f=p.texData.get(u.dataId),[g,y]=[[m.complexTensorInfos.real,f.complexTensorInfos.real],[m.complexTensorInfos.imag,f.complexTensorInfos.imag]].map(A=>{let[b,w]=A,I={dataId:b.dataId,dtype:b.dtype,shape:l.shape},T={dataId:w.dataId,dtype:w.dtype,shape:u.shape},N=new ri(e,l.shape,u.shape);return p.runWebGLProgram(N,[I,T],pa(b.dtype,w.dtype))}),x=ms({inputs:{real:g,imag:y},backend:p});return p.disposeIntermediateTensorInfo(g),p.disposeIntermediateTensorInfo(y),x}let c=s||pa(l.dtype,u.dtype);if((l.dtype==="string"||u.dtype==="string"||p.shouldExecuteOnCPU([l,u]))&&r!=null){let m=p.texData.get(l.dataId).values,f=p.texData.get(u.dataId).values,g=l.dtype==="string"?C.fromUint8ToStringArray(m):m,y=l.dtype==="string"?C.fromUint8ToStringArray(f):f,[x,A]=r(l.shape,u.shape,g,y,c),b=p.makeTensorInfo(A,c),w=p.texData.get(b.dataId);return w.values=x,b}let d=B().getBool("WEBGL_PACK_BINARY_OPERATIONS")&&t!=null,h;return d?h=new Zu(t,l.shape,u.shape,a):h=new ri(e,l.shape,u.shape),p.runWebGLProgram(h,[l,u],c)}}function ep(e,t=!1){if(e==="linear")return t?Dj:Mj;if(e==="relu")return t?zj:Pj;if(e==="elu")return t?Oj:$j;if(e==="relu6")return t?Lj:_j;if(e==="prelu")return t?w8:v8;if(e==="leakyrelu")return t?b8:A8;if(e==="sigmoid")return t?Wj:Fj;throw new Error(`Activation ${e} has not been implemented for the WebGL backend.`)}var k8=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=ga(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"],m=r?["b.xzxz","b.ywyw"]:["b.xyxy","b.zwzw"],f="",g="";i&&(o?f=`vec4 activation(vec4 a) { vec4 b = getPreluActivationWeightsAtOutCoords(); ${i} }`:l?f=`vec4 activation(vec4 a) { @@ -1336,7 +1336,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, setOutput(result); } - `}},E5={REAL:"return areal * breal - aimag * bimag;",IMAG:"return areal * bimag + aimag * breal;"},M5=class{constructor(e,t,a){this.variableNames=["AReal","AImag","BReal","BImag"],this.outputShape=C.assertAndGetBroadcastShape(t,a),this.userCode=` + `}},M5={REAL:"return areal * breal - aimag * bimag;",IMAG:"return areal * bimag + aimag * breal;"},$5=class{constructor(e,t,a){this.variableNames=["AReal","AImag","BReal","BImag"],this.outputShape=C.assertAndGetBroadcastShape(t,a),this.userCode=` float binaryOpComplex( float areal, float aimag, float breal, float bimag) { ${e} @@ -1349,7 +1349,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, float bimag = getBImagAtOutCoords(); setOutput(binaryOpComplex(areal, aimag, breal, bimag)); } - `}},$5="return a * b;";function L3(e){let{inputs:t,backend:a}=e,{a:n,b:r}=t,s=C.upcastType(n.dtype,r.dtype);if(n.dtype==="complex64"){let o=a.texData.get(n.dataId),l=a.texData.get(r.dataId),u=new M5(E5.REAL,n.shape,r.shape),p=new M5(E5.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"),m=ms({inputs:{real:d,imag:h},backend:a});return a.disposeIntermediateTensorInfo(d),a.disposeIntermediateTensorInfo(h),m}if(a.shouldExecuteOnCPU([n,r])){let o=a.texData.get(n.dataId),l=a.texData.get(r.dataId),[u,p]=QH(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 B().getBool("WEBGL_PACK_BINARY_OPERATIONS")?i=new Zu($5,n.shape,r.shape):i=new ri($5,n.shape,r.shape),a.runWebGLProgram(i,[n,r],s)}var nq={kernelName:yo,backendName:"webgl",kernelFunc:L3};function rq(e,t,a){let n=[ai(e.shape),...ni(e.shape)],r={dtype:e.dtype,shape:n,dataId:e.dataId},s=[ai(t),...ni(t)],i=new f8(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 pe(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&&!Qd(r.shape,l)&&!(p.texture!==null&&Qd(p.shape,l))?rq(r,l,i):(i.incRef(r.dataId),{dataId:r.dataId,shape:l,dtype:r.dtype})}var sq={kernelName:Ru,backendName:"webgl",kernelFunc:pe},P5=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=` + `}},P5="return a * b;";function L3(e){let{inputs:t,backend:a}=e,{a:n,b:r}=t,s=C.upcastType(n.dtype,r.dtype);if(n.dtype==="complex64"){let o=a.texData.get(n.dataId),l=a.texData.get(r.dataId),u=new $5(M5.REAL,n.shape,r.shape),p=new $5(M5.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"),m=ms({inputs:{real:d,imag:h},backend:a});return a.disposeIntermediateTensorInfo(d),a.disposeIntermediateTensorInfo(h),m}if(a.shouldExecuteOnCPU([n,r])){let o=a.texData.get(n.dataId),l=a.texData.get(r.dataId),[u,p]=ej(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 B().getBool("WEBGL_PACK_BINARY_OPERATIONS")?i=new Zu(P5,n.shape,r.shape):i=new ri(P5,n.shape,r.shape),a.runWebGLProgram(i,[n,r],s)}var rq={kernelName:yo,backendName:"webgl",kernelFunc:L3};function sq(e,t,a){let n=[ai(e.shape),...ni(e.shape)],r={dtype:e.dtype,shape:n,dataId:e.dataId},s=[ai(t),...ni(t)],i=new g8(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 pe(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&&!Qd(r.shape,l)&&!(p.texture!==null&&Qd(p.shape,l))?sq(r,l,i):(i.incRef(r.dataId),{dataId:r.dataId,shape:l,dtype:r.dtype})}var iq={kernelName:Ru,backendName:"webgl",kernelFunc:pe},_5=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); } - `}},iq=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=` + `}},oq=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"}) { @@ -1494,12 +1494,12 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, } setOutput(${l}); } - `}};function oq(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=C.computeOptimalWindowSize(a);t.push({inSize:a,windowSize:n,outSize:Math.ceil(a/n)})}return t}function il(e,t,a,n){let r=oq(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=ft(this.rank),r=m8("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=ft(this.rank),r=f8("rc",this.rank),s=new Array(this.rank);for(let u=0;u`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?[y,c,h]:[y,h,c],w=n?[x,m,d]:[x,d,m],I=pe({inputs:{x:e},backend:r,attrs:{shape:b}}),T=pe({inputs:{x:t},backend:r,attrs:{shape:w}}),N=[I,T],M=Math.max(y,x),$=a?I.shape[1]:I.shape[2],E=s!=null,S=i!=null,_=l==="leakyrelu",O=l!=null?ep(l,!0):null,W=E||S||_||O!=null,P;if((h===1||m===1)&&$>k8&&W===!1){let G=I,q=T;a&&(G=Ca({inputs:{x:I},backend:r,attrs:{perm:[0,2,1]}}),N.push(G)),n&&(q=Ca({inputs:{x:T},backend:r,attrs:{perm:[0,2,1]}}),N.push(q));let H=m!==1,V=m===1,Z=G;H&&(Z=pe({inputs:{x:G},backend:r,attrs:{shape:[M,$,1]}}),N.push(Z));let X=m===1?2:1,re=q;V&&(re=pe({inputs:{x:q},backend:r,attrs:{shape:[M,1,$]}}),N.push(re));let ee=L3({inputs:{a:Z,b:re},backend:r});P=i0({inputs:{x:ee},backend:r,attrs:{axis:X,keepDims:!0}}),N.push(ee)}else{let G=pa(e.dtype,t.dtype),q=new w8(b,w,[M,h,m],a,n,E,O,S,_),H=[I,T];if(s!=null&&H.push(s),S&&H.push(i),_){let V=r.makeTensorInfo([],"float32",v.createScalarValue(o,"float32"));H.push(V),N.push(V)}P=r.runWebGLProgram(q,H,G)}let U=pe({inputs:{x:P},backend:r,attrs:{shape:A}});N.push(P);for(let G of N)r.disposeIntermediateTensorInfo(G);return U}function mq(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 kh({a:r,b:s,transposeA:l,transposeB:u,backend:a,bias:i,preluActivationWeights:o,leakyreluAlpha:c,activation:p})}var fq={kernelName:Yr,backendName:"webgl",kernelFunc:mq},_5="return abs(x);";function gq(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=c8(s.values);return a.makeTensorInfo(n.shape,n.dtype,i)}let r;return B().getBool("WEBGL_PACK_UNARY_OPERATIONS")?r=new jr(n.shape,_5):r=new Yn(n.shape,_5),a.runWebGLProgram(r,[n],n.dtype)}var yq={kernelName:iu,backendName:"webgl",kernelFunc:gq},xq=En+` + `}};function s0(e,t,a){let n=B().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new pq(e.shape,t):new uq(e.shape,t);return a.runWebGLProgram(n,[e],e.dtype)}function cq(e,t,a,n){let r=t,s=e.shape.length,i=v.parseAxisParam(r,e.shape),o=i,l=C.getAxesPermutation(o,s),u=l!=null,p=e;u&&(p=s0(e,l,n),o=C.getInnerMostAxes(o.length,s)),C.assertAxesAreInnerMostDims("sum",o,s);let[c,d]=C.computeOutAndReduceShapes(p.shape,o),h=c;a&&(h=C.expandShapeToKeepDim(c,i));let m=v.sizeFromShape(d),f=v.sizeFromShape(e.shape)/m,g=pe({inputs:{x:p},attrs:{shape:[f,m]},backend:n}),y=Pp(e.dtype),x=il(g,y,"sum",n),A=pe({inputs:{x},attrs:{shape:h},backend:n});return n.disposeIntermediateTensorInfo(g),n.disposeIntermediateTensorInfo(x),u&&n.disposeIntermediateTensorInfo(p),A}function i0(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,keepDims:i}=n;return cq(r,s,i,a)}var hq={kernelName:Go,backendName:"webgl",kernelFunc:i0};function Ca(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?[y,c,h]:[y,h,c],w=n?[x,m,d]:[x,d,m],I=pe({inputs:{x:e},backend:r,attrs:{shape:b}}),T=pe({inputs:{x:t},backend:r,attrs:{shape:w}}),N=[I,T],M=Math.max(y,x),$=a?I.shape[1]:I.shape[2],E=s!=null,S=i!=null,_=l==="leakyrelu",O=l!=null?ep(l,!0):null,W=E||S||_||O!=null,P;if((h===1||m===1)&&$>I8&&W===!1){let G=I,q=T;a&&(G=Ca({inputs:{x:I},backend:r,attrs:{perm:[0,2,1]}}),N.push(G)),n&&(q=Ca({inputs:{x:T},backend:r,attrs:{perm:[0,2,1]}}),N.push(q));let H=m!==1,V=m===1,Z=G;H&&(Z=pe({inputs:{x:G},backend:r,attrs:{shape:[M,$,1]}}),N.push(Z));let X=m===1?2:1,re=q;V&&(re=pe({inputs:{x:q},backend:r,attrs:{shape:[M,1,$]}}),N.push(re));let ee=L3({inputs:{a:Z,b:re},backend:r});P=i0({inputs:{x:ee},backend:r,attrs:{axis:X,keepDims:!0}}),N.push(ee)}else{let G=pa(e.dtype,t.dtype),q=new k8(b,w,[M,h,m],a,n,E,O,S,_),H=[I,T];if(s!=null&&H.push(s),S&&H.push(i),_){let V=r.makeTensorInfo([],"float32",v.createScalarValue(o,"float32"));H.push(V),N.push(V)}P=r.runWebGLProgram(q,H,G)}let U=pe({inputs:{x:P},backend:r,attrs:{shape:A}});N.push(P);for(let G of N)r.disposeIntermediateTensorInfo(G);return U}function fq(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 kh({a:r,b:s,transposeA:l,transposeB:u,backend:a,bias:i,preluActivationWeights:o,leakyreluAlpha:c,activation:p})}var gq={kernelName:Yr,backendName:"webgl",kernelFunc:fq},F5="return abs(x);";function yq(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=h8(s.values);return a.makeTensorInfo(n.shape,n.dtype,i)}let r;return B().getBool("WEBGL_PACK_UNARY_OPERATIONS")?r=new jr(n.shape,F5):r=new Yn(n.shape,F5),a.runWebGLProgram(r,[n],n.dtype)}var xq={kernelName:iu,backendName:"webgl",kernelFunc:yq},Aq=En+` if (abs(x) > 1.) { return NAN; } return acos(x); -`,Aq=tt({opSnippet:xq}),bq={kernelName:oi,backendName:"webgl",kernelFunc:Aq},vq=En+` +`,bq=tt({opSnippet:Aq}),vq={kernelName:oi,backendName:"webgl",kernelFunc:bq},wq=En+` if (x < 1.0) return NAN; -return log(x + sqrt(x * x - 1.0));`,wq=tt({opSnippet:vq}),kq={kernelName:li,backendName:"webgl",kernelFunc:wq},F5="return a + b;",Iq=ha({opSnippet:F5,packedOpSnippet:F5,supportsComplex:!0,cpuKernelImpl:$H}),Sq={kernelName:os,backendName:"webgl",kernelFunc:Iq},Cq=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));`,kq=tt({opSnippet:wq}),Iq={kernelName:li,backendName:"webgl",kernelFunc:kq},D5="return a + b;",Sq=ha({opSnippet:D5,packedOpSnippet:D5,supportsComplex:!0,cpuKernelImpl:PH}),Cq={kernelName:os,backendName:"webgl",kernelFunc:Sq},Tq=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));`,wq=tt({opSnippet:vq}),kq={kernelName:li,back float result = ${n}; setOutput(result); } - `}},Tq=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=` + `}},Nq=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));`,wq=tt({opSnippet:vq}),kq={kernelName:li,back vec4 result = ${n}; setOutput(result); } - `}};function oh(e){let{inputs:t,backend:a}=e,n=t;if(n.length===1)return en({inputs:{x:n[0]},backend:a});if(n.length>B().getNumber("WEBGL_MAX_TEXTURES_IN_SHADER")){let o=Math.floor(n.length/2),l=oh({inputs:n.slice(0,o),backend:a}),u=oh({inputs:n.slice(o),backend:a});return oh({inputs:[l,u],backend:a})}let r=n.map(o=>o.dtype).reduce((o,l)=>pa(o,l)),s=n.map(o=>o.shape),i=B().getBool("WEBGL_PACK")?new Tq(n[0].shape,s):new Cq(n[0].shape,s);return a.runWebGLProgram(i,n,r)}var Nq={kernelName:ui,backendName:"webgl",kernelFunc:oh};function Rq(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=C.getAxesPermutation(u,o),c=r;p!=null&&(c=Ca({inputs:{x:r},backend:a,attrs:{perm:p}}),u=C.getInnerMostAxes(u.length,o)),C.assertAxesAreInnerMostDims("all",u,o);let[d,h]=C.computeOutAndReduceShapes(c.shape,u),m=v.sizeFromShape(h),f=pe({inputs:{x:c},backend:a,attrs:{shape:[-1,m]}}),g=il(f,f.dtype,"all",a),y;if(i){let x=C.expandShapeToKeepDim(d,l);y=pe({inputs:{x:g},backend:a,attrs:{shape:x}})}else y=pe({inputs:{x:g},backend:a,attrs:{shape:d}});return a.disposeIntermediateTensorInfo(f),a.disposeIntermediateTensorInfo(g),p!=null&&a.disposeIntermediateTensorInfo(c),y}var Eq={kernelName:di,backendName:"webgl",kernelFunc:Rq};function Mq(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=C.getAxesPermutation(u,o),c=r;p!=null&&(c=Ca({inputs:{x:r},backend:a,attrs:{perm:p}}),u=C.getInnerMostAxes(u.length,o)),C.assertAxesAreInnerMostDims("any",u,o);let[d,h]=C.computeOutAndReduceShapes(c.shape,u),m=v.sizeFromShape(h),f=pe({inputs:{x:c},backend:a,attrs:{shape:[-1,m]}}),g=il(f,f.dtype,"any",a),y;if(i){let x=C.expandShapeToKeepDim(d,l);y=pe({inputs:{x:g},backend:a,attrs:{shape:x}})}else y=pe({inputs:{x:g},backend:a,attrs:{shape:d}});return a.disposeIntermediateTensorInfo(f),a.disposeIntermediateTensorInfo(g),p!=null&&a.disposeIntermediateTensorInfo(c),y}var $q={kernelName:pi,backendName:"webgl",kernelFunc:Mq},Pq=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 oh(e){let{inputs:t,backend:a}=e,n=t;if(n.length===1)return en({inputs:{x:n[0]},backend:a});if(n.length>B().getNumber("WEBGL_MAX_TEXTURES_IN_SHADER")){let o=Math.floor(n.length/2),l=oh({inputs:n.slice(0,o),backend:a}),u=oh({inputs:n.slice(o),backend:a});return oh({inputs:[l,u],backend:a})}let r=n.map(o=>o.dtype).reduce((o,l)=>pa(o,l)),s=n.map(o=>o.shape),i=B().getBool("WEBGL_PACK")?new Nq(n[0].shape,s):new Tq(n[0].shape,s);return a.runWebGLProgram(i,n,r)}var Rq={kernelName:ui,backendName:"webgl",kernelFunc:oh};function Eq(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=C.getAxesPermutation(u,o),c=r;p!=null&&(c=Ca({inputs:{x:r},backend:a,attrs:{perm:p}}),u=C.getInnerMostAxes(u.length,o)),C.assertAxesAreInnerMostDims("all",u,o);let[d,h]=C.computeOutAndReduceShapes(c.shape,u),m=v.sizeFromShape(h),f=pe({inputs:{x:c},backend:a,attrs:{shape:[-1,m]}}),g=il(f,f.dtype,"all",a),y;if(i){let x=C.expandShapeToKeepDim(d,l);y=pe({inputs:{x:g},backend:a,attrs:{shape:x}})}else y=pe({inputs:{x:g},backend:a,attrs:{shape:d}});return a.disposeIntermediateTensorInfo(f),a.disposeIntermediateTensorInfo(g),p!=null&&a.disposeIntermediateTensorInfo(c),y}var Mq={kernelName:di,backendName:"webgl",kernelFunc:Eq};function $q(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=C.getAxesPermutation(u,o),c=r;p!=null&&(c=Ca({inputs:{x:r},backend:a,attrs:{perm:p}}),u=C.getInnerMostAxes(u.length,o)),C.assertAxesAreInnerMostDims("any",u,o);let[d,h]=C.computeOutAndReduceShapes(c.shape,u),m=v.sizeFromShape(h),f=pe({inputs:{x:c},backend:a,attrs:{shape:[-1,m]}}),g=il(f,f.dtype,"any",a),y;if(i){let x=C.expandShapeToKeepDim(d,l);y=pe({inputs:{x:g},backend:a,attrs:{shape:x}})}else y=pe({inputs:{x:g},backend:a,attrs:{shape:d}});return a.disposeIntermediateTensorInfo(f),a.disposeIntermediateTensorInfo(g),p!=null&&a.disposeIntermediateTensorInfo(c),y}var Pq={kernelName:pi,backendName:"webgl",kernelFunc:$q},_q=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));`,wq=tt({opSnippet:vq}),kq={kernelName:li,back } setOutput(float(bestIndex)); } - `}},_q=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=ft(o),u=ka("coords",o),p,c;if(s===1){c=o+1;let T=ft(c);p=` + `}},Fq=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=ft(o),u=ka("coords",o),p,c;if(s===1){c=o+1;let T=ft(c);p=` ${T} sourceLocR = ${T}(${u.join()}, 0); ++${u[o-1]}; ${T} sourceLocG = ${T}(${u.join()}, 0); @@ -1621,25 +1621,25 @@ return log(x + sqrt(x * x - 1.0));`,wq=tt({opSnippet:vq}),kq={kernelName:li,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=C.computeOptimalWindowSize(s),o={windowSize:i,inSize:s,batchSize:r,outSize:Math.ceil(s/i)},l=new Pq(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=I8(e,t,a,p);return e.disposeIntermediateTensorInfo(p),c}function S8(e,t,a,n=null){let r=n!=null?n.shape:t.shape,s=r[r.length-1],i=C.computeOptimalWindowSize(s),o=new _q(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=S8(e,t,a,u);return e.disposeIntermediateTensorInfo(u),p}return u}function C8(e,t,a,n){let r=[a];if(C.assertAxesAreInnerMostDims("arg"+n.charAt(0).toUpperCase()+n.slice(1),r,t.shape.length),!B().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]=C.computeOutAndReduceShapes(l.shape,r),c=v.sizeFromShape(p),d=pe({inputs:{x:l},backend:e,attrs:{shape:[-1,c]}});s.push(d);let h=I8(e,d,n);s.push(h);let m=pe({inputs:{x:h},backend:e,attrs:{shape:u}});return s.forEach(f=>e.disposeIntermediateTensorInfo(f)),m}return S8(e,t,n)}function Fq(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s}=n,i=v.parseAxisParam(s,r.shape),o=C.getAxesPermutation(i,r.shape.length),l=r,u=[];o!=null&&(l=Ca({inputs:{x:r},backend:a,attrs:{perm:o}}),u.push(l),i=C.getInnerMostAxes(i.length,l.shape.length)),C.assertAxesAreInnerMostDims("argMax",[i[0]],l.shape.length);let p=C8(a,l,i[0],"max");return u.forEach(c=>a.disposeIntermediateTensorInfo(c)),p}var Dq={kernelName:ou,backendName:"webgl",kernelFunc:Fq};function Oq(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s}=n,i=v.parseAxisParam(s,r.shape),o=C.getAxesPermutation(i,r.shape.length),l=r,u=[];o!=null&&(l=Ca({inputs:{x:r},backend:a,attrs:{perm:o}}),u.push(l),i=C.getInnerMostAxes(i.length,l.shape.length)),C.assertAxesAreInnerMostDims("argMin",[i[0]],l.shape.length);let p=C8(a,l,i[0],"min");return u.forEach(c=>a.disposeIntermediateTensorInfo(c)),p}var zq={kernelName:lu,backendName:"webgl",kernelFunc:Oq},Lq=En+` + `}};function S8(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=C.computeOptimalWindowSize(s),o={windowSize:i,inSize:s,batchSize:r,outSize:Math.ceil(s/i)},l=new _q(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=S8(e,t,a,p);return e.disposeIntermediateTensorInfo(p),c}function C8(e,t,a,n=null){let r=n!=null?n.shape:t.shape,s=r[r.length-1],i=C.computeOptimalWindowSize(s),o=new Fq(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=C8(e,t,a,u);return e.disposeIntermediateTensorInfo(u),p}return u}function T8(e,t,a,n){let r=[a];if(C.assertAxesAreInnerMostDims("arg"+n.charAt(0).toUpperCase()+n.slice(1),r,t.shape.length),!B().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]=C.computeOutAndReduceShapes(l.shape,r),c=v.sizeFromShape(p),d=pe({inputs:{x:l},backend:e,attrs:{shape:[-1,c]}});s.push(d);let h=S8(e,d,n);s.push(h);let m=pe({inputs:{x:h},backend:e,attrs:{shape:u}});return s.forEach(f=>e.disposeIntermediateTensorInfo(f)),m}return C8(e,t,n)}function Dq(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s}=n,i=v.parseAxisParam(s,r.shape),o=C.getAxesPermutation(i,r.shape.length),l=r,u=[];o!=null&&(l=Ca({inputs:{x:r},backend:a,attrs:{perm:o}}),u.push(l),i=C.getInnerMostAxes(i.length,l.shape.length)),C.assertAxesAreInnerMostDims("argMax",[i[0]],l.shape.length);let p=T8(a,l,i[0],"max");return u.forEach(c=>a.disposeIntermediateTensorInfo(c)),p}var Oq={kernelName:ou,backendName:"webgl",kernelFunc:Dq};function zq(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s}=n,i=v.parseAxisParam(s,r.shape),o=C.getAxesPermutation(i,r.shape.length),l=r,u=[];o!=null&&(l=Ca({inputs:{x:r},backend:a,attrs:{perm:o}}),u.push(l),i=C.getInnerMostAxes(i.length,l.shape.length)),C.assertAxesAreInnerMostDims("argMin",[i[0]],l.shape.length);let p=T8(a,l,i[0],"min");return u.forEach(c=>a.disposeIntermediateTensorInfo(c)),p}var Lq={kernelName:lu,backendName:"webgl",kernelFunc:zq},Wq=En+` if (abs(x) > 1.) { return NAN; } return asin(x); -`,Wq=tt({opSnippet:Lq}),Bq={kernelName:ci,backendName:"webgl",kernelFunc:Wq},Vq=En+"return log(x + sqrt(x * x + 1.0));",Uq=tt({opSnippet:Vq}),Gq={kernelName:hi,backendName:"webgl",kernelFunc:Uq},Hq=En+` +`,Bq=tt({opSnippet:Wq}),Vq={kernelName:ci,backendName:"webgl",kernelFunc:Bq},Uq=En+"return log(x + sqrt(x * x + 1.0));",Gq=tt({opSnippet:Uq}),Hq={kernelName:hi,backendName:"webgl",kernelFunc:Gq},jq=En+` return atan(x); -`,jq=tt({opSnippet:Hq}),qq={kernelName:mi,backendName:"webgl",kernelFunc:jq},Xq=z3+` +`,qq=tt({opSnippet:jq}),Xq={kernelName:mi,backendName:"webgl",kernelFunc:qq},Kq=z3+` return atan(a, b); -`,Kq=` +`,Yq=` 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); `+sl+` return result; -`,Yq=ha({opSnippet:Xq,packedOpSnippet:Kq}),Zq={kernelName:gi,backendName:"webgl",kernelFunc:Yq},Jq=En+` +`,Zq=ha({opSnippet:Kq,packedOpSnippet:Yq}),Jq={kernelName:gi,backendName:"webgl",kernelFunc:Zq},Qq=En+` if ((x < -1.0) || (x > 1.0)) return NAN; -return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Qq=tt({opSnippet:Jq}),eX={kernelName:fi,backendName:"webgl",kernelFunc:Qq},tp=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 m=t==="avg",f=`((batch * ${e.inHeight} + xR) * ${e.inWidth} + xC) * ${e.inChannels} + d`,g=`(xR * ${e.inWidth} + xC) * ${e.inChannels} + d`,y="0.0";if(m||(y="-1.0 / 1e-20"),a){let T=">=";this.userCode=` +return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,eX=tt({opSnippet:Qq}),tX={kernelName:fi,backendName:"webgl",kernelFunc:eX},tp=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 m=t==="avg",f=`((batch * ${e.inHeight} + xR) * ${e.inWidth} + xC) * ${e.inChannels} + d`,g=`(xR * ${e.inWidth} + xC) * ${e.inChannels} + d`,y="0.0";if(m||(y="-1.0 / 1e-20"),a){let T=">=";this.userCode=` const ivec2 strides = ivec2(${i}, ${o}); const ivec2 pads = ivec2(${d}, ${h}); @@ -1943,7 +1943,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Qq=tt({opSnippet:Jq}),eX={kernelNam } setOutput(${w}); } - `}};function tX(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t;ju(r,"avgPool");let{filterSize:s,strides:i,pad:o,dimRoundingMode:l}=n,u=1;v.assert(C.eitherStridesOrDilationsAreOne(i,u),()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${i} and dilations '${u}'`);let p=C.computePool2DInfo(r.shape,s,i,u,o,l);if(p.filterWidth===1&&p.filterHeight===1&&v.arraysEqual(p.inShape,p.outShape))return en({inputs:{x:r},backend:a});let c=new tp(p,"avg",!1);return a.runWebGLProgram(c,[r],"float32")}var aX={kernelName:yi,backendName:"webgl",kernelFunc:tX};function nX(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=C.computePool3DInfo(r.shape,s,i,p,o,l,u),d=new W3(c,"avg",!1);return a.runWebGLProgram(d,[r],"float32")}var rX={kernelName:uu,backendName:"webgl",kernelFunc:nX},sX=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=` + `}};function aX(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t;ju(r,"avgPool");let{filterSize:s,strides:i,pad:o,dimRoundingMode:l}=n,u=1;v.assert(C.eitherStridesOrDilationsAreOne(i,u),()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${i} and dilations '${u}'`);let p=C.computePool2DInfo(r.shape,s,i,u,o,l);if(p.filterWidth===1&&p.filterHeight===1&&v.arraysEqual(p.inShape,p.outShape))return en({inputs:{x:r},backend:a});let c=new tp(p,"avg",!1);return a.runWebGLProgram(c,[r],"float32")}var nX={kernelName:yi,backendName:"webgl",kernelFunc:aX};function rX(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=C.computePool3DInfo(r.shape,s,i,p,o,l,u),d=new W3(c,"avg",!1);return a.runWebGLProgram(d,[r],"float32")}var sX={kernelName:uu,backendName:"webgl",kernelFunc:rX},iX=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}); @@ -1985,7 +1985,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Qq=tt({opSnippet:Jq}),eX={kernelNam } setOutput(dotProd); } - `}},iX=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,m=c-1-e.padInfo.top,f=d-1-e.padInfo.left,g=1/(t*a*n);this.userCode=` + `}},oX=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,m=c-1-e.padInfo.top,f=d-1-e.padInfo.left,g=1/(t*a*n);this.userCode=` const ivec3 pads = ivec3(${h}, ${m}, ${f}); const float avgMultiplier = float(${g}); @@ -2041,7 +2041,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Qq=tt({opSnippet:Jq}),eX={kernelNam } setOutput(dotProd); } - `}};function oX(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=C.computePool3DInfo(i.shape,o,l,c,u,p),h=new iX(d);return a.runWebGLProgram(h,[r],i.dtype)}var lX={kernelName:dp,backendName:"webgl",kernelFunc:oX};function uX(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,input:s}=t,i=s;ju([r,s],"avgPoolGrad");let{filterSize:o,strides:l,pad:u}=n,p=C.computePool2DInfo(i.shape,o,l,1,u),c=new sX(p);return a.runWebGLProgram(c,[r],i.dtype)}var dX={kernelName:up,backendName:"webgl",kernelFunc:uX};function pX(e){let{inputs:t,backend:a,attrs:n}=e,{a:r,b:s}=t,{transposeA:i,transposeB:o}=n;return kh({a:r,b:s,transposeA:i,transposeB:o,backend:a})}var cX={kernelName:xi,backendName:"webgl",kernelFunc:pX},hX=class{constructor(e,t,a,n,r,s){this.outputShape=[],this.variableNames=["x","mean","variance"],C.assertAndGetBroadcastShape(e,t),C.assertAndGetBroadcastShape(e,a);let i="0.0";n!=null&&(C.assertAndGetBroadcastShape(e,n),this.variableNames.push("offset"),i="getOffsetAtOutCoords()");let o="1.0";r!=null&&(C.assertAndGetBroadcastShape(e,r),this.variableNames.push("scale"),o="getScaleAtOutCoords()"),this.outputShape=e,this.userCode=` + `}};function lX(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=C.computePool3DInfo(i.shape,o,l,c,u,p),h=new oX(d);return a.runWebGLProgram(h,[r],i.dtype)}var uX={kernelName:dp,backendName:"webgl",kernelFunc:lX};function dX(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,input:s}=t,i=s;ju([r,s],"avgPoolGrad");let{filterSize:o,strides:l,pad:u}=n,p=C.computePool2DInfo(i.shape,o,l,1,u),c=new iX(p);return a.runWebGLProgram(c,[r],i.dtype)}var pX={kernelName:up,backendName:"webgl",kernelFunc:dX};function cX(e){let{inputs:t,backend:a,attrs:n}=e,{a:r,b:s}=t,{transposeA:i,transposeB:o}=n;return kh({a:r,b:s,transposeA:i,transposeB:o,backend:a})}var hX={kernelName:xi,backendName:"webgl",kernelFunc:cX},mX=class{constructor(e,t,a,n,r,s){this.outputShape=[],this.variableNames=["x","mean","variance"],C.assertAndGetBroadcastShape(e,t),C.assertAndGetBroadcastShape(e,a);let i="0.0";n!=null&&(C.assertAndGetBroadcastShape(e,n),this.variableNames.push("offset"),i="getOffsetAtOutCoords()");let o="1.0";r!=null&&(C.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;`,Qq=tt({opSnippet:Jq}),eX={kernelNam float inv = scale * inversesqrt(variance + float(${s})); setOutput(dot(vec3(x, -mean, offset), vec3(inv, inv, 1))); } - `}},mX=class{constructor(e,t,a,n,r,s){this.packedInputs=!0,this.packedOutput=!0,this.variableNames=["x","mean","variance"],C.assertAndGetBroadcastShape(e,t),C.assertAndGetBroadcastShape(e,a);let i="vec4(0.0)";n!=null&&(C.assertAndGetBroadcastShape(e,n),this.variableNames.push("offset"),i="getOffsetAtOutCoords()");let o="vec4(1.0)";r!=null&&(C.assertAndGetBroadcastShape(e,r),this.variableNames.push("scale"),o="getScaleAtOutCoords()"),this.outputShape=e,this.userCode=` + `}},fX=class{constructor(e,t,a,n,r,s){this.packedInputs=!0,this.packedOutput=!0,this.variableNames=["x","mean","variance"],C.assertAndGetBroadcastShape(e,t),C.assertAndGetBroadcastShape(e,a);let i="vec4(0.0)";n!=null&&(C.assertAndGetBroadcastShape(e,n),this.variableNames.push("offset"),i="getOffsetAtOutCoords()");let o="vec4(1.0)";r!=null&&(C.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;`,Qq=tt({opSnippet:Jq}),eX={kernelNam setOutput((x - mean) * inv + offset); } - `}},fX=({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=B().getBool("WEBGL_PACK_NORMALIZATION")?new mX(n.shape,r.shape,s.shape,p,c,l):new hX(n.shape,r.shape,s.shape,p,c,l);return t.runWebGLProgram(d,u,u[0].dtype)},gX={kernelName:Ui,backendName:"webgl",kernelFunc:fX},yX=class{constructor(e){this.variableNames=["source"],this.outputShape=e,this.rank=e.length;let t=ft(this.rank);this.customUniforms=[{name:"start",arrayIndex:this.rank,type:"int"}];let a=xX(this.rank),n,r=e.map((s,i)=>`sourceLoc.${L1[i]} = start[${i}] + coords.${L1[i]};`);n=` + `}},gX=({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=B().getBool("WEBGL_PACK_NORMALIZATION")?new fX(n.shape,r.shape,s.shape,p,c,l):new mX(n.shape,r.shape,s.shape,p,c,l);return t.runWebGLProgram(d,u,u[0].dtype)},yX={kernelName:Ui,backendName:"webgl",kernelFunc:gX},xX=class{constructor(e){this.variableNames=["source"],this.outputShape=e,this.rank=e.length;let t=ft(this.rank);this.customUniforms=[{name:"start",arrayIndex:this.rank,type:"int"}];let a=AX(this.rank),n,r=e.map((s,i)=>`sourceLoc.${L1[i]} = start[${i}] + coords.${L1[i]};`);n=` ${t} sourceLoc; ${t} coords = getOutputCoords(); ${r.join(` @@ -2074,7 +2074,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Qq=tt({opSnippet:Jq}),eX={kernelNam ${n} setOutput(getSource(${a})); } - `}},L1=["x","y","z","w","u","v"];function xX(e){if(e===1)return"sourceLoc";if(e<=6)return L1.slice(0,e).map(t=>"sourceLoc."+t).join(",");throw Error(`Slicing for rank ${e} is not yet supported`)}var AX=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=ft(this.rank),a=ka("coords",this.rank),n=ka("sourceLoc",this.rank),r=this.rank===1?"sourceLoc":`vec2(${n.slice(-2).join()})`,s=`getChannel(getSource(${n.join()}), ${r})`,i=` + `}},L1=["x","y","z","w","u","v"];function AX(e){if(e===1)return"sourceLoc";if(e<=6)return L1.slice(0,e).map(t=>"sourceLoc."+t).join(",");throw Error(`Slicing for rank ${e} is not yet supported`)}var bX=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=ft(this.rank),a=ka("coords",this.rank),n=ka("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]}; @@ -2103,15 +2103,15 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Qq=tt({opSnippet:Jq}),eX={kernelNam ${o} setOutput(result); } - `}};function bX(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=Nt.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 Qu(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{begin:s,size:i}=n,[o,l]=Nt.parseSliceParams(r,s,i);if(Nt.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=dj(c.values,o,l,r.shape,r.dtype);return a.makeTensorInfo(l,r.dtype,d)}let{isPacked:u}=a.texData.get(r.dataId),p=Nt.isSliceContinous(r.shape,o,l);if(u||!p){let c=B().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new AX(l):new yX(l),d=[o];return a.runWebGLProgram(c,[r],r.dtype,d)}return a.uploadToGPU(r.dataId),bX(r,o,l,a)}var vX={kernelName:Pu,backendName:"webgl",kernelFunc:Qu},wX=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((x,A)=>x*A),l=C.getReshaped(r.shape,s,o),u=C.getPermuted(l.length,s.length),p=C.getReshapedPermuted(r.shape,s,o),c=C.getSliceBeginCoords(i,s.length),d=C.getSliceSize(p,i,s.length),h=[],m=pe({inputs:{x:r},backend:a,attrs:{shape:l}}),f=Ca({inputs:{x:m},backend:a,attrs:{perm:u}}),g=pe({inputs:{x:f},backend:a,attrs:{shape:p}}),y=Qu({inputs:{x:g},backend:a,attrs:{begin:c,size:d}});return h.push(m),h.push(f),h.push(g),h.forEach(x=>a.disposeIntermediateTensorInfo(x)),y},kX={kernelName:du,backendName:"webgl",kernelFunc:wX};function IX(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=p8(o,l,s.dtype,s.shape,i);return a.makeTensorInfo([i],s.dtype,u)}var SX={kernelName:Ai,backendName:"webgl",kernelFunc:IX},CX=` + `}};function vX(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=Nt.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 Qu(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{begin:s,size:i}=n,[o,l]=Nt.parseSliceParams(r,s,i);if(Nt.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=pj(c.values,o,l,r.shape,r.dtype);return a.makeTensorInfo(l,r.dtype,d)}let{isPacked:u}=a.texData.get(r.dataId),p=Nt.isSliceContinous(r.shape,o,l);if(u||!p){let c=B().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new bX(l):new xX(l),d=[o];return a.runWebGLProgram(c,[r],r.dtype,d)}return a.uploadToGPU(r.dataId),vX(r,o,l,a)}var wX={kernelName:Pu,backendName:"webgl",kernelFunc:Qu},kX=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((x,A)=>x*A),l=C.getReshaped(r.shape,s,o),u=C.getPermuted(l.length,s.length),p=C.getReshapedPermuted(r.shape,s,o),c=C.getSliceBeginCoords(i,s.length),d=C.getSliceSize(p,i,s.length),h=[],m=pe({inputs:{x:r},backend:a,attrs:{shape:l}}),f=Ca({inputs:{x:m},backend:a,attrs:{perm:u}}),g=pe({inputs:{x:f},backend:a,attrs:{shape:p}}),y=Qu({inputs:{x:g},backend:a,attrs:{begin:c,size:d}});return h.push(m),h.push(f),h.push(g),h.forEach(x=>a.disposeIntermediateTensorInfo(x)),y},IX={kernelName:du,backendName:"webgl",kernelFunc:kX};function SX(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=c8(o,l,s.dtype,s.shape,i);return a.makeTensorInfo([i],s.dtype,u)}var CX={kernelName:Ai,backendName:"webgl",kernelFunc:SX},TX=` int r = int(a.r) & int(b.r); int g = int(a.g) & int(b.g); int rb = int(a.b) & int(b.b); int ra = int(a.a) & int(b.a); return vec4(r, g, rb, ra); -`,TX=` +`,NX=` return float(int(a.r) & int(b.r)); -`;function NX(e){let{inputs:t,backend:a}=e,{a:n,b:r}=t,s=B().getBool("WEBGL_PACK_BINARY_OPERATIONS"),i=B().getNumber("WEBGL_VERSION");if(a.shouldExecuteOnCPU([n,r])||i===1){let l=a.texData.get(n.dataId).values,u=a.texData.get(r.dataId).values,[p,c]=_H(n.shape,r.shape,l,u,n.dtype),d=a.makeTensorInfo(c,n.dtype),h=a.texData.get(d.dataId);return h.values=p,d}let o;return s?o=new Zu(CX,n.shape,r.shape,!1):o=new ri(TX,n.shape,r.shape),a.runWebGLProgram(o,[n,r],n.dtype)}var RX={kernelName:pu,backendName:"webgl",kernelFunc:NX};function EX(e){let{inputs:t,backend:a}=e,{s0:n,s1:r}=t,s=a.readSync(n.dataId),i=a.readSync(r.dataId),o=C.assertAndGetBroadcastShape(Array.from(s),Array.from(i));return a.makeTensorInfo([o.length],"int32",Int32Array.from(o))}var MX={kernelName:cu,backendName:"webgl",kernelFunc:EX},$X="return float(a != b);",T8=ha({opSnippet:$X,cpuKernelImpl:tj,dtype:"bool"}),PX={kernelName:xo,backendName:"webgl",kernelFunc:T8};function Qp(e){let{inputs:t,backend:a}=e,{input:n}=t,r=a.texData.get(n.dataId);return en({inputs:{x:r.complexTensorInfos.real},backend:a})}var _X={kernelName:kp,backendName:"webgl",kernelFunc:Qp},FX="return float(int(x));";function DX(e,t){let a=new Yn(e.shape,FX),n=t.runWebGLProgram(a,[e],"int32");return{dataId:n.dataId,shape:n.shape,dtype:n.dtype}}function W1(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{dtype:s}=n;if(s==="complex64"){if(r.dtype==="complex64")return en({inputs:{x:r},backend:a});let i=yn(r.shape),o=W1({inputs:{x:r},backend:a,attrs:{dtype:"float32"}}),l=ms({inputs:{real:o,imag:i},backend:a});return i.dispose(),a.disposeIntermediateTensorInfo(o),l}if(r.dtype==="complex64"){let i=Qp({inputs:{input:r},backend:a}),o=W1({inputs:{x:i},backend:a,attrs:{dtype:s}});return a.disposeIntermediateTensorInfo(i),o}if(!v.hasEncodingLoss(r.dtype,s)){let i=en({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]=FH(i,r.shape,r.dtype,s);return a.makeTensorInfo(o,l,u)}if(s==="int32")return DX(r,a);if(s==="bool"){let i=a.makeTensorInfo([],"bool",v.getTypedArrayFromDType("bool",1)),o=T8({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 OX={kernelName:bi,backendName:"webgl",kernelFunc:W1},D5="return ceil(x);",zX=tt({opSnippet:D5,packedOpSnippet:D5,cpuKernelImpl:DH}),LX={kernelName:vi,backendName:"webgl",kernelFunc:zX},WX=class{constructor(e){this.variableNames=["A"],this.customUniforms=[{name:"minVal",type:"float"},{name:"maxVal",type:"float"}],this.outputShape=e,this.userCode=` +`;function RX(e){let{inputs:t,backend:a}=e,{a:n,b:r}=t,s=B().getBool("WEBGL_PACK_BINARY_OPERATIONS"),i=B().getNumber("WEBGL_VERSION");if(a.shouldExecuteOnCPU([n,r])||i===1){let l=a.texData.get(n.dataId).values,u=a.texData.get(r.dataId).values,[p,c]=FH(n.shape,r.shape,l,u,n.dtype),d=a.makeTensorInfo(c,n.dtype),h=a.texData.get(d.dataId);return h.values=p,d}let o;return s?o=new Zu(TX,n.shape,r.shape,!1):o=new ri(NX,n.shape,r.shape),a.runWebGLProgram(o,[n,r],n.dtype)}var EX={kernelName:pu,backendName:"webgl",kernelFunc:RX};function MX(e){let{inputs:t,backend:a}=e,{s0:n,s1:r}=t,s=a.readSync(n.dataId),i=a.readSync(r.dataId),o=C.assertAndGetBroadcastShape(Array.from(s),Array.from(i));return a.makeTensorInfo([o.length],"int32",Int32Array.from(o))}var $X={kernelName:cu,backendName:"webgl",kernelFunc:MX},PX="return float(a != b);",N8=ha({opSnippet:PX,cpuKernelImpl:aj,dtype:"bool"}),_X={kernelName:xo,backendName:"webgl",kernelFunc:N8};function Qp(e){let{inputs:t,backend:a}=e,{input:n}=t,r=a.texData.get(n.dataId);return en({inputs:{x:r.complexTensorInfos.real},backend:a})}var FX={kernelName:kp,backendName:"webgl",kernelFunc:Qp},DX="return float(int(x));";function OX(e,t){let a=new Yn(e.shape,DX),n=t.runWebGLProgram(a,[e],"int32");return{dataId:n.dataId,shape:n.shape,dtype:n.dtype}}function W1(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{dtype:s}=n;if(s==="complex64"){if(r.dtype==="complex64")return en({inputs:{x:r},backend:a});let i=yn(r.shape),o=W1({inputs:{x:r},backend:a,attrs:{dtype:"float32"}}),l=ms({inputs:{real:o,imag:i},backend:a});return i.dispose(),a.disposeIntermediateTensorInfo(o),l}if(r.dtype==="complex64"){let i=Qp({inputs:{input:r},backend:a}),o=W1({inputs:{x:i},backend:a,attrs:{dtype:s}});return a.disposeIntermediateTensorInfo(i),o}if(!v.hasEncodingLoss(r.dtype,s)){let i=en({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]=DH(i,r.shape,r.dtype,s);return a.makeTensorInfo(o,l,u)}if(s==="int32")return OX(r,a);if(s==="bool"){let i=a.makeTensorInfo([],"bool",v.getTypedArrayFromDType("bool",1)),o=N8({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 zX={kernelName:bi,backendName:"webgl",kernelFunc:W1},O5="return ceil(x);",LX=tt({opSnippet:O5,packedOpSnippet:O5,cpuKernelImpl:OH}),WX={kernelName:vi,backendName:"webgl",kernelFunc:LX},BX=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(); @@ -2122,7 +2122,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Qq=tt({opSnippet:Jq}),eX={kernelNam setOutput(clamp(value, minVal, maxVal)); } - `}},BX=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=` + `}},VX=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(); @@ -2133,7 +2133,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Qq=tt({opSnippet:Jq}),eX={kernelNam setOutput(clamp(value, vec4(minVal), vec4(maxVal))); } - `}};function VX(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{clipValueMin:s,clipValueMax:i}=n,o;B().getBool("WEBGL_PACK_CLIP")?o=new BX(r.shape):o=new WX(r.shape);let l=[[s],[i]];return a.runWebGLProgram(o,[r],r.dtype,l)}var UX={kernelName:ls,backendName:"webgl",kernelFunc:VX},GX=class{constructor(e){this.variableNames=["real","imag"],this.outputShape=e,this.userCode=` + `}};function UX(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{clipValueMin:s,clipValueMax:i}=n,o;B().getBool("WEBGL_PACK_CLIP")?o=new VX(r.shape):o=new BX(r.shape);let l=[[s],[i]];return a.runWebGLProgram(o,[r],r.dtype,l)}var GX={kernelName:ls,backendName:"webgl",kernelFunc:UX},HX=class{constructor(e){this.variableNames=["real","imag"],this.outputShape=e,this.userCode=` void main() { float re = abs(getRealAtOutCoords()); float im = abs(getImagAtOutCoords()); @@ -2146,7 +2146,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Qq=tt({opSnippet:Jq}),eX={kernelNam mx == 0.0 ? 0.0 : mx * length(vec2(1, min(re, im)/mx)) ); } - `}};function O5(e,t){return{dataId:t.dataId,dtype:t.dtype,shape:e.shape}}function HX(e){let{inputs:t,backend:a}=e,{x:n}=t,r=a.texData.get(n.dataId),s=new GX(n.shape),i=[O5(n,r.complexTensorInfos.real),O5(n,r.complexTensorInfos.imag)];return a.runWebGLProgram(s,i,i[0].dtype)}var jX={kernelName:cp,backendName:"webgl",kernelFunc:HX},qX=class{constructor(e){this.outputShape=[],this.outputShape=C.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${f}`);let o=new Array(e.length-1);o[0]=e[0][t];for(let m=1;m`T${f}`);let o=new Array(e.length-1);o[0]=e[0][t];for(let m=1;ms===n?`${r} - ${a}`:r).join()}function o0(e){let{inputs:t,backend:a}=e,{input:n}=t,r=a.texData.get(n.dataId);return en({inputs:{x:r.complexTensorInfos.imag},backend:a})}var KX={kernelName:bp,backendName:"webgl",kernelFunc:o0};function Md(e,t,a){let n=e[0].dtype;if(n==="complex64"){let h=e.map(x=>Qp({inputs:{input:x},backend:a})),m=e.map(x=>o0({inputs:{input:x},backend:a})),f=Md(h,t,a),g=Md(m,t,a),y=ms({inputs:{real:f,imag:g},backend:a});return h.forEach(x=>a.disposeIntermediateTensorInfo(x)),m.forEach(x=>a.disposeIntermediateTensorInfo(x)),a.disposeIntermediateTensorInfo(f),a.disposeIntermediateTensorInfo(g),y}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 pe({inputs:{x:b},backend:a,attrs:{shape:w}})}),m=h.map(b=>({vals:a.readSync(b.dataId),shape:b.shape})),f=C.computeOutShape(h.map(b=>b.shape),1),g=h[0].shape[0]===1,y=OH(m,f,n,g),x=C.computeOutShape(e.map(b=>b.shape),t),A=a.makeTensorInfo(x,n,y);return h.forEach(b=>a.disposeIntermediateTensorInfo(b)),A}let s=e.filter(h=>v.sizeFromShape(h.shape)>0),i=B().getBool("WEBGL_PACK_ARRAY_OPERATIONS")&&s[0].shape.length>1;if(s.length===1){let h=i?new Yn(e[0].shape,Br):new jr(e[0].shape,Br);return a.runWebGLProgram(h,e,n)}let o=B().getNumber("WEBGL_MAX_TEXTURES_IN_SHADER");if(s.length>o){let h=[];for(let f=0;fm.shape),t);return a.runWebGLProgram(h,s,n)}let{tensors2D:l,outShape:u}=YX(s,t,a),p=new qX(l.map(h=>h.shape)),c=a.runWebGLProgram(p,l,n);l.forEach(h=>a.disposeIntermediateTensorInfo(h));let d=pe({inputs:{x:c},attrs:{shape:u},backend:a});return a.disposeIntermediateTensorInfo(c),d}function YX(e,t,a){let n=C.computeOutShape(e.map(r=>r.shape),t);return{tensors2D:e.map(r=>pe({inputs:{x:r},attrs:{shape:[-1,v.sizeFromShape(r.shape.slice(t))]},backend:a})),outShape:n}}function N8(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);C.assertParamsConsistent(i,s);let o=C.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?en({inputs:{x:l[0]},backend:a}):Md(l,s,a)}var ZX={kernelName:hu,backendName:"webgl",kernelFunc:N8},R8=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,m=e.inChannels%4,f=e.dataFormat==="channelsLast",g=f?1:2,y=f?2:3,x=f?3:1,A="",b="";a&&(n?A=`float activation(float a) { + `}};function Qc(e,t,a){let n=e.indexOf(t);return e.map((r,s)=>s===n?`${r} - ${a}`:r).join()}function o0(e){let{inputs:t,backend:a}=e,{input:n}=t,r=a.texData.get(n.dataId);return en({inputs:{x:r.complexTensorInfos.imag},backend:a})}var YX={kernelName:bp,backendName:"webgl",kernelFunc:o0};function Md(e,t,a){let n=e[0].dtype;if(n==="complex64"){let h=e.map(x=>Qp({inputs:{input:x},backend:a})),m=e.map(x=>o0({inputs:{input:x},backend:a})),f=Md(h,t,a),g=Md(m,t,a),y=ms({inputs:{real:f,imag:g},backend:a});return h.forEach(x=>a.disposeIntermediateTensorInfo(x)),m.forEach(x=>a.disposeIntermediateTensorInfo(x)),a.disposeIntermediateTensorInfo(f),a.disposeIntermediateTensorInfo(g),y}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 pe({inputs:{x:b},backend:a,attrs:{shape:w}})}),m=h.map(b=>({vals:a.readSync(b.dataId),shape:b.shape})),f=C.computeOutShape(h.map(b=>b.shape),1),g=h[0].shape[0]===1,y=zH(m,f,n,g),x=C.computeOutShape(e.map(b=>b.shape),t),A=a.makeTensorInfo(x,n,y);return h.forEach(b=>a.disposeIntermediateTensorInfo(b)),A}let s=e.filter(h=>v.sizeFromShape(h.shape)>0),i=B().getBool("WEBGL_PACK_ARRAY_OPERATIONS")&&s[0].shape.length>1;if(s.length===1){let h=i?new Yn(e[0].shape,Br):new jr(e[0].shape,Br);return a.runWebGLProgram(h,e,n)}let o=B().getNumber("WEBGL_MAX_TEXTURES_IN_SHADER");if(s.length>o){let h=[];for(let f=0;fm.shape),t);return a.runWebGLProgram(h,s,n)}let{tensors2D:l,outShape:u}=ZX(s,t,a),p=new XX(l.map(h=>h.shape)),c=a.runWebGLProgram(p,l,n);l.forEach(h=>a.disposeIntermediateTensorInfo(h));let d=pe({inputs:{x:c},attrs:{shape:u},backend:a});return a.disposeIntermediateTensorInfo(c),d}function ZX(e,t,a){let n=C.computeOutShape(e.map(r=>r.shape),t);return{tensors2D:e.map(r=>pe({inputs:{x:r},attrs:{shape:[-1,v.sizeFromShape(r.shape.slice(t))]},backend:a})),outShape:n}}function R8(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);C.assertParamsConsistent(i,s);let o=C.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?en({inputs:{x:l[0]},backend:a}):Md(l,s,a)}var JX={kernelName:hu,backendName:"webgl",kernelFunc:R8},E8=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,m=e.inChannels%4,f=e.dataFormat==="channelsLast",g=f?1:2,y=f?2:3,x=f?3:1,A="",b="";a&&(n?A=`float activation(float a) { float b = getPreluActivationWeightsAtOutCoords(); ${a} }`:r?A=`float activation(float a) { @@ -2326,7 +2326,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Qq=tt({opSnippet:Jq}),eX={kernelNam ${b} setOutput(result); } - `}},JX=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,m=e.inChannels%4;this.userCode=` + `}},QX=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,m=e.inChannels%4;this.userCode=` const ivec3 strides = ivec3(${r}, ${s}, ${i}); const ivec3 pads = ivec3(${t}, ${a}, ${n}); @@ -2414,7 +2414,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Qq=tt({opSnippet:Jq}),eX={kernelNam } setOutput(dotProd); } - `}},E8=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=ga(this.outputShape.length);let s=e.padInfo.left,i=e.strideWidth,o=e.dilationWidth,l=e.filterHeight,u=e.filterWidth,p=u,c=` + `}},M8=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=ga(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 f=0;f=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 M8({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",m=!1,f=!1,g,y=[];if(s!=null){let x=Ih(s.shape,h);x!=null&&(s=pe({inputs:{x:s},backend:n,attrs:{shape:x}}),y.push(s))}if(r!=null){let x=Ih(r.shape,h);x!=null&&(r=pe({inputs:{x:r},backend:n,attrs:{shape:x}}),y.push(r))}if(!((c===1||d===1)&&p>k8)&&u.isPacked&&h&&u.texture!=null&&l[2]%2!==0&&v.arraysEqual(u.shape.slice(-3),l.slice(-3))){let x=l[0]*l[1]*(l[2]+1),A={dataId:e.dataId,shape:[1,x,a.inChannels],dtype:e.dtype},b=u.shape;u.shape=u.shape.slice(),u.shape[u.shape.length-2]++,v.assert(Qd(u.shape,A.shape),()=>`packed reshape ${u.shape} to ${A.shape} isn't free`);let w=pe({inputs:{x:t},backend:n,attrs:{shape:[1,a.inChannels,a.outChannels]}});y.push(w);let I=kh({a:A,b:w,backend:n,transposeA:m,transposeB:f,bias:r,activation:o,preluActivationWeights:s,leakyreluAlpha:i}),T=n.texData.get(I.dataId);v.assert(T.isPacked,()=>"batchMatMul result is expected to be packed"),u.shape=b,T.shape=a.outShape,g=en({inputs:{x:I},backend:n}),g.shape=a.outShape,y.push(I)}else{let x=a.outHeight*a.outWidth,A=pe({inputs:{x:e},backend:n,attrs:{shape:h?[a.batchSize,x,a.inChannels]:[a.batchSize,a.inChannels,x]}}),b=pe({inputs:{x:t},backend:n,attrs:{shape:[1,a.inChannels,a.outChannels]}}),w=kh({a:h?A:b,b:h?b:A,transposeA:!h,transposeB:f,backend:n,bias:r,activation:o,preluActivationWeights:s,leakyreluAlpha:i});g=pe({inputs:{x:w},backend:n,attrs:{shape:a.outShape}}),y.push(A),y.push(b),y.push(w)}for(let x of y)n.disposeIntermediateTensorInfo(x);return g}function $8({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,m=h==="channelsLast",f=l*u*p,g=d*c,y=[a.batchSize,f,g],x=!0,A=!1,b=[];if(s!=null){let G=Ih(s.shape,m);G!=null&&(s=pe({inputs:{x:s},backend:n,attrs:{shape:G}}),b.push(s))}if(r!=null){let G=Ih(r.shape,m);G!=null&&(r=pe({inputs:{x:r},backend:n,attrs:{shape:G}}),b.push(r))}let w=pe({inputs:{x:t},backend:n,attrs:{shape:[1,f,v.sizeFromShape(t.shape)/f]}});b.push(w);let I=new QX(y,a),T=[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(I,[e],"float32",T),M=pe({inputs:{x:N},backend:n,attrs:{shape:y}});b.push(N),b.push(M);let $=r!=null,E=s!=null,S=o==="leakyrelu",_=o?ep(o,!0):null,O=new w8(m?M.shape:w.shape,m?w.shape:M.shape,m?[a.batchSize,g,a.outChannels]:[a.batchSize,a.outChannels,g],x,A,$,_,E,S),W=m?[M,w]:[w,M];if(r&&W.push(r),E&&W.push(s),S){let G=n.makeTensorInfo([],"float32",v.createScalarValue(i,"float32"));W.push(G),b.push(G)}let P=n.runWebGLProgram(O,W,"float32"),U=pe({inputs:{x:P},backend:n,attrs:{shape:a.outShape}});b.push(P);for(let G of b)n.disposeIntermediateTensorInfo(G);return U}function eK(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=C.convertConv2DDataFormat(l),d=C.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=M8({x:r,filter:s,convInfo:d,backend:a});else if(d.strideWidth<=2&&c==="channelsLast"&&B().getBool("WEBGL_EXP_CONV")){let f=new E8(d),g=[[d.padInfo.top,d.padInfo.left],[d.strideHeight,d.strideWidth],[d.dilationHeight,d.dilationWidth],[d.inHeight,d.inWidth]];h=a.runWebGLProgram(f,[r,s],"float32",g)}else if(B().getBool("WEBGL_CONV_IM2COL"))h=$8({x:r,filter:s,convInfo:d,backend:a});else{let f=new R8(d);h=a.runWebGLProgram(f,[r,s],"float32")}let m=pe({inputs:{x:h},backend:a,attrs:{shape:d.outShape}});return a.disposeIntermediateTensorInfo(h),m}var tK={kernelName:wi,backendName:"webgl",kernelFunc:eK},aK=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 Ih(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 $8({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",m=!1,f=!1,g,y=[];if(s!=null){let x=Ih(s.shape,h);x!=null&&(s=pe({inputs:{x:s},backend:n,attrs:{shape:x}}),y.push(s))}if(r!=null){let x=Ih(r.shape,h);x!=null&&(r=pe({inputs:{x:r},backend:n,attrs:{shape:x}}),y.push(r))}if(!((c===1||d===1)&&p>I8)&&u.isPacked&&h&&u.texture!=null&&l[2]%2!==0&&v.arraysEqual(u.shape.slice(-3),l.slice(-3))){let x=l[0]*l[1]*(l[2]+1),A={dataId:e.dataId,shape:[1,x,a.inChannels],dtype:e.dtype},b=u.shape;u.shape=u.shape.slice(),u.shape[u.shape.length-2]++,v.assert(Qd(u.shape,A.shape),()=>`packed reshape ${u.shape} to ${A.shape} isn't free`);let w=pe({inputs:{x:t},backend:n,attrs:{shape:[1,a.inChannels,a.outChannels]}});y.push(w);let I=kh({a:A,b:w,backend:n,transposeA:m,transposeB:f,bias:r,activation:o,preluActivationWeights:s,leakyreluAlpha:i}),T=n.texData.get(I.dataId);v.assert(T.isPacked,()=>"batchMatMul result is expected to be packed"),u.shape=b,T.shape=a.outShape,g=en({inputs:{x:I},backend:n}),g.shape=a.outShape,y.push(I)}else{let x=a.outHeight*a.outWidth,A=pe({inputs:{x:e},backend:n,attrs:{shape:h?[a.batchSize,x,a.inChannels]:[a.batchSize,a.inChannels,x]}}),b=pe({inputs:{x:t},backend:n,attrs:{shape:[1,a.inChannels,a.outChannels]}}),w=kh({a:h?A:b,b:h?b:A,transposeA:!h,transposeB:f,backend:n,bias:r,activation:o,preluActivationWeights:s,leakyreluAlpha:i});g=pe({inputs:{x:w},backend:n,attrs:{shape:a.outShape}}),y.push(A),y.push(b),y.push(w)}for(let x of y)n.disposeIntermediateTensorInfo(x);return g}function P8({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,m=h==="channelsLast",f=l*u*p,g=d*c,y=[a.batchSize,f,g],x=!0,A=!1,b=[];if(s!=null){let G=Ih(s.shape,m);G!=null&&(s=pe({inputs:{x:s},backend:n,attrs:{shape:G}}),b.push(s))}if(r!=null){let G=Ih(r.shape,m);G!=null&&(r=pe({inputs:{x:r},backend:n,attrs:{shape:G}}),b.push(r))}let w=pe({inputs:{x:t},backend:n,attrs:{shape:[1,f,v.sizeFromShape(t.shape)/f]}});b.push(w);let I=new eK(y,a),T=[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(I,[e],"float32",T),M=pe({inputs:{x:N},backend:n,attrs:{shape:y}});b.push(N),b.push(M);let $=r!=null,E=s!=null,S=o==="leakyrelu",_=o?ep(o,!0):null,O=new k8(m?M.shape:w.shape,m?w.shape:M.shape,m?[a.batchSize,g,a.outChannels]:[a.batchSize,a.outChannels,g],x,A,$,_,E,S),W=m?[M,w]:[w,M];if(r&&W.push(r),E&&W.push(s),S){let G=n.makeTensorInfo([],"float32",v.createScalarValue(i,"float32"));W.push(G),b.push(G)}let P=n.runWebGLProgram(O,W,"float32"),U=pe({inputs:{x:P},backend:n,attrs:{shape:a.outShape}});b.push(P);for(let G of b)n.disposeIntermediateTensorInfo(G);return U}function tK(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=C.convertConv2DDataFormat(l),d=C.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=$8({x:r,filter:s,convInfo:d,backend:a});else if(d.strideWidth<=2&&c==="channelsLast"&&B().getBool("WEBGL_EXP_CONV")){let f=new M8(d),g=[[d.padInfo.top,d.padInfo.left],[d.strideHeight,d.strideWidth],[d.dilationHeight,d.dilationWidth],[d.inHeight,d.inWidth]];h=a.runWebGLProgram(f,[r,s],"float32",g)}else if(B().getBool("WEBGL_CONV_IM2COL"))h=P8({x:r,filter:s,convInfo:d,backend:a});else{let f=new E8(d);h=a.runWebGLProgram(f,[r,s],"float32")}let m=pe({inputs:{x:h},backend:a,attrs:{shape:d.outShape}});return a.disposeIntermediateTensorInfo(h),m}var aK={kernelName:wi,backendName:"webgl",kernelFunc:tK},nK=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; @@ -2694,7 +2694,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Qq=tt({opSnippet:Jq}),eX={kernelNam } setOutput(dotProd); } - `}},nK=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=` + `}},rK=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() { @@ -2747,7 +2747,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Qq=tt({opSnippet:Jq}),eX={kernelNam } setOutput(dotProd); } - `}},rK=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=` + `}},sK=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; @@ -2789,7 +2789,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Qq=tt({opSnippet:Jq}),eX={kernelNam } setOutput(dotProd); } - `}},sK=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=` + `}},iK=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() { @@ -2846,7 +2846,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Qq=tt({opSnippet:Jq}),eX={kernelNam } setOutput(dotProd); } - `}};function iK(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=C.convertConv2DDataFormat(l),d=C.computeConv2DInfo(r.shape,p,i,1,o,u,!1,c),h=new aK(d);return a.runWebGLProgram(h,[r,s],"float32")}var oK={kernelName:hp,backendName:"webgl",kernelFunc:iK},lK=class{constructor(e){this.variableNames=["dy","W"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"strides",type:"vec2"}],this.outputShape=e.inShape,this.enableShapeUniforms=ga(this.outputShape.length);let t=e.filterHeight,a=e.filterWidth,n=t-1-e.padInfo.top,r=a-1-e.padInfo.left;this.userCode=` + `}};function oK(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=C.convertConv2DDataFormat(l),d=C.computeConv2DInfo(r.shape,p,i,1,o,u,!1,c),h=new nK(d);return a.runWebGLProgram(h,[r,s],"float32")}var lK={kernelName:hp,backendName:"webgl",kernelFunc:oK},uK=class{constructor(e){this.variableNames=["dy","W"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"strides",type:"vec2"}],this.outputShape=e.inShape,this.enableShapeUniforms=ga(this.outputShape.length);let t=e.filterHeight,a=e.filterWidth,n=t-1-e.padInfo.top,r=a-1-e.padInfo.left;this.userCode=` const ivec2 pads = ivec2(${n}, ${r}); void main() { @@ -2920,17 +2920,17 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Qq=tt({opSnippet:Jq}),eX={kernelNam } setOutput(result); } - `}};function uK(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=C.convertConv2DDataFormat(u),d=C.computeConv2DInfo(i,s.shape,o,1,l,p,!1,c);if(B().getBool("WEBGL_PACK_CONV2DTRANSPOSE")&&c==="channelsLast"){let h=[[d.strideHeight,d.strideWidth]],m=new lK(d);return a.runWebGLProgram(m,[r,s],"float32",h)}else{let h=new nK(d);return a.runWebGLProgram(h,[r,s],"float32")}}var dK={kernelName:ki,backendName:"webgl",kernelFunc:uK};function pK(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,filter:s}=t,{strides:i,pad:o,dilations:l}=n,u=C.computeConv3DInfo(r.shape,s.shape,i,l,o),p=new JX(u);return a.runWebGLProgram(p,[r,s],"float32")}var cK={kernelName:Ii,backendName:"webgl",kernelFunc:pK};function hK(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,dy:s}=t,{strides:i,pad:o,filterShape:l}=n,u=C.computeConv3DInfo(r.shape,l,i,1,o),p=new rK(u);return a.runWebGLProgram(p,[r,s],"float32")}var mK={kernelName:mu,backendName:"webgl",kernelFunc:hK};function fK(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,filter:s}=t,{pad:i,strides:o,inputShape:l}=n,u=C.computeConv3DInfo(l,s.shape,o,1,i),p=new sK(u);return a.runWebGLProgram(p,[r,s],"float32")}var gK={kernelName:Si,backendName:"webgl",kernelFunc:fK},yK=Ju+` + `}};function dK(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=C.convertConv2DDataFormat(u),d=C.computeConv2DInfo(i,s.shape,o,1,l,p,!1,c);if(B().getBool("WEBGL_PACK_CONV2DTRANSPOSE")&&c==="channelsLast"){let h=[[d.strideHeight,d.strideWidth]],m=new uK(d);return a.runWebGLProgram(m,[r,s],"float32",h)}else{let h=new rK(d);return a.runWebGLProgram(h,[r,s],"float32")}}var pK={kernelName:ki,backendName:"webgl",kernelFunc:dK};function cK(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,filter:s}=t,{strides:i,pad:o,dilations:l}=n,u=C.computeConv3DInfo(r.shape,s.shape,i,l,o),p=new QX(u);return a.runWebGLProgram(p,[r,s],"float32")}var hK={kernelName:Ii,backendName:"webgl",kernelFunc:cK};function mK(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,dy:s}=t,{strides:i,pad:o,filterShape:l}=n,u=C.computeConv3DInfo(r.shape,l,i,1,o),p=new sK(u);return a.runWebGLProgram(p,[r,s],"float32")}var fK={kernelName:mu,backendName:"webgl",kernelFunc:mK};function gK(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,filter:s}=t,{pad:i,strides:o,inputShape:l}=n,u=C.computeConv3DInfo(l,s.shape,o,1,i),p=new iK(u);return a.runWebGLProgram(p,[r,s],"float32")}var yK={kernelName:Si,backendName:"webgl",kernelFunc:gK},xK=Ju+` return cos(x); -`,xK=` +`,AK=` vec4 result = cos(x); bvec4 isNaN = isnan(x); ${sl} return result; -`,AK=tt({opSnippet:yK,packedOpSnippet:xK}),bK={kernelName:Ci,backendName:"webgl",kernelFunc:AK},vK=` +`,bK=tt({opSnippet:xK,packedOpSnippet:AK}),vK={kernelName:Ci,backendName:"webgl",kernelFunc:bK},wK=` float e2x = exp(-x); return (e2x + 1.0 / e2x) / 2.0; -`,wK=tt({opSnippet:vK}),kK={kernelName:Ti,backendName:"webgl",kernelFunc:wK},IK=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,m]=[`${i-1}.0`,`${o-1}.0`],[f,g,y]=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}`],[x,A,b]=c>1?[`${(o-1)/(c-1)}`,"(x2-x1) * width_ratio",`x1*${m} + float(x)*(width_scale)`]:["0.0","0.0",`0.5 * (x1+x2) * ${m}`];this.userCode=` +`,kK=tt({opSnippet:wK}),IK={kernelName:Ti,backendName:"webgl",kernelFunc:kK},SK=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,m]=[`${i-1}.0`,`${o-1}.0`],[f,g,y]=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}`],[x,A,b]=c>1?[`${(o-1)/(c-1)}`,"(x2-x1) * width_ratio",`x1*${m} + float(x)*(width_scale)`]:["0.0","0.0",`0.5 * (x1+x2) * ${m}`];this.userCode=` const float height_ratio = float(${f}); const float width_ratio = float(${x}); void main() { @@ -2991,20 +2991,20 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Qq=tt({opSnippet:Jq}),eX={kernelNam setOutput(newValue); } } - `}},SK=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 IK(r.shape,s.shape,o,l,u);return a.runWebGLProgram(p,[r,s,i],"float32")},CK={kernelName:Ei,backendName:"webgl",kernelFunc:SK},ap;(function(e){e.Prod="*",e.Sum="+"})(ap||(ap={}));var z5=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===ap.Prod?"1.0":"0.0",i=a?s:`getX(${L5(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=` + `}},CK=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 SK(r.shape,s.shape,o,l,u);return a.runWebGLProgram(p,[r,s,i],"float32")},TK={kernelName:Ei,backendName:"webgl",kernelFunc:CK},ap;(function(e){e.Prod="*",e.Sum="+"})(ap||(ap={}));var L5=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===ap.Prod?"1.0":"0.0",i=a?s:`getX(${W5(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() { ${ft(r)} coords = getOutputCoords(); - int end = ${W5(r,"coords",this.op)}; + int end = ${B5(r,"coords",this.op)}; float val = ${i}; int pow2 = int(pow(2.0, index)); if (${l}) { int idx = ${u}; - ${W5(r,"coords",this.op)} = idx; - val ${this.op}= getX(${L5(r,"coords",this.op)}); + ${B5(r,"coords",this.op)} = idx; + val ${this.op}= getX(${W5(r,"coords",this.op)}); } setOutput(val); } - `}};function L5(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 W5(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 P8(e,t,a,n,r,s){let i=t.shape.length,o=C.getAxesPermutation([n],i),l=t;o!=null&&(l=Ca({inputs:{x:t},backend:a,attrs:{perm:o}}));let u=C.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=en({inputs:{x:l},backend:a});for(let d=0;d<=Math.ceil(Math.log2(p))-1;d++){let h=new z5(e,l.shape,!1,s),m=[[d]],f=c;c=a.runWebGLProgram(h,[c],c.dtype,m),a.disposeIntermediateTensorInfo(f)}if(r){let d=new z5(e,l.shape,r,s),h=c;c=a.runWebGLProgram(d,[c],c.dtype),a.disposeIntermediateTensorInfo(h)}if(o!=null){let d=C.getUndoAxesPermutation(o),h=Ca({inputs:{x:c},backend:a,attrs:{perm:d}});return a.disposeIntermediateTensorInfo(c),a.disposeIntermediateTensorInfo(l),h}return c}function TK(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,exclusive:i,reverse:o}=n;return P8(ap.Prod,r,a,s,i,o)}var NK={kernelName:Ni,backendName:"webgl",kernelFunc:TK};function RK(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,exclusive:i,reverse:o}=n;return P8(ap.Sum,r,a,s,i,o)}var EK={kernelName:Ri,backendName:"webgl",kernelFunc:RK};function MK(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=p8(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=PH(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 $K={kernelName:fu,backendName:"webgl",kernelFunc:MK},PK=class{constructor(e,t,a){this.variableNames=["x"],this.outputShape=[],this.outputShape=e,this.blockSize=t,this.dataFormat=a,this.userCode=` + `}};function W5(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 B5(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 _8(e,t,a,n,r,s){let i=t.shape.length,o=C.getAxesPermutation([n],i),l=t;o!=null&&(l=Ca({inputs:{x:t},backend:a,attrs:{perm:o}}));let u=C.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=en({inputs:{x:l},backend:a});for(let d=0;d<=Math.ceil(Math.log2(p))-1;d++){let h=new L5(e,l.shape,!1,s),m=[[d]],f=c;c=a.runWebGLProgram(h,[c],c.dtype,m),a.disposeIntermediateTensorInfo(f)}if(r){let d=new L5(e,l.shape,r,s),h=c;c=a.runWebGLProgram(d,[c],c.dtype),a.disposeIntermediateTensorInfo(h)}if(o!=null){let d=C.getUndoAxesPermutation(o),h=Ca({inputs:{x:c},backend:a,attrs:{perm:d}});return a.disposeIntermediateTensorInfo(c),a.disposeIntermediateTensorInfo(l),h}return c}function NK(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,exclusive:i,reverse:o}=n;return _8(ap.Prod,r,a,s,i,o)}var RK={kernelName:Ni,backendName:"webgl",kernelFunc:NK};function EK(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,exclusive:i,reverse:o}=n;return _8(ap.Sum,r,a,s,i,o)}var MK={kernelName:Ri,backendName:"webgl",kernelFunc:EK};function $K(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=c8(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=_H(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 PK={kernelName:fu,backendName:"webgl",kernelFunc:$K},_K=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]; @@ -3023,7 +3023,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Qq=tt({opSnippet:Jq}),eX={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 _K(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),m=i==="NHWC"?[o,c,d,h]:[o,h,c,d],f=new PK(m,s,i);return a.runWebGLProgram(f,[r],r.dtype)}var FK={kernelName:Mi,backendName:"webgl",kernelFunc:_K},_8=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=ga(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 FK(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),m=i==="NHWC"?[o,c,d,h]:[o,h,c,d],f=new _K(m,s,i);return a.runWebGLProgram(f,[r],r.dtype)}var DK={kernelName:Mi,backendName:"webgl",kernelFunc:FK},F8=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=ga(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) { @@ -3076,7 +3076,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Qq=tt({opSnippet:Jq}),eX={kernelNam ${u} setOutput(result); } - `}},F8=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=ga(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=` + `}},D8=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=ga(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`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${i} and dilations '${p}'`);let c=C.computeConv2DInfo(r.shape,s.shape,i,p,o,u,!0),d;B().getBool("WEBGL_PACK_DEPTHWISECONV")&&c.strideWidth<=2&&c.outChannels/c.inChannels===1?d=new F8(c):d=new _8(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 OK={kernelName:$i,backendName:"webgl",kernelFunc:DK},zK=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 OK(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(C.eitherStridesOrDilationsAreOne(i,p),()=>`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${i} and dilations '${p}'`);let c=C.computeConv2DInfo(r.shape,s.shape,i,p,o,u,!0),d;B().getBool("WEBGL_PACK_DEPTHWISECONV")&&c.strideWidth<=2&&c.outChannels/c.inChannels===1?d=new D8(c):d=new F8(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 zK={kernelName:$i,backendName:"webgl",kernelFunc:OK},LK=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; @@ -3300,7 +3300,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Qq=tt({opSnippet:Jq}),eX={kernelNam } setOutput(dotProd); } - `}},LK=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=` + `}},WK=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() { @@ -3345,13 +3345,13 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Qq=tt({opSnippet:Jq}),eX={kernelNam } setOutput(dotProd); } - `}};function WK(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=C.computeConv2DInfo(r.shape,p,i,o,l,u,!0),d=new zK(c);return a.runWebGLProgram(d,[r,s],"float32")}var BK={kernelName:mp,backendName:"webgl",kernelFunc:WK};function VK(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=C.computeConv2DInfo(p,s.shape,i,o,l,u,!0),d=new LK(c);return a.runWebGLProgram(d,[r,s],"float32")}var UK={kernelName:fp,backendName:"webgl",kernelFunc:VK},GK=class{constructor(e){this.variableNames=["X"],this.outputShape=[e,e],this.userCode=` + `}};function BK(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=C.computeConv2DInfo(r.shape,p,i,o,l,u,!0),d=new LK(c);return a.runWebGLProgram(d,[r,s],"float32")}var VK={kernelName:mp,backendName:"webgl",kernelFunc:BK};function UK(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=C.computeConv2DInfo(p,s.shape,i,o,l,u,!0),d=new WK(c);return a.runWebGLProgram(d,[r,s],"float32")}var GK={kernelName:fp,backendName:"webgl",kernelFunc:UK},HK=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 HK(e){let{inputs:t,backend:a}=e,{x:n}=t,r=[...n.shape,...n.shape],s=v.sizeFromShape(n.shape),i=pe({inputs:{x:n},backend:a,attrs:{shape:[s]}}),o=new GK(s),l=a.runWebGLProgram(o,[i],i.dtype),u=pe({inputs:{x:l},backend:a,attrs:{shape:r}});return a.disposeIntermediateTensorInfo(i),a.disposeIntermediateTensorInfo(l),u}var jK={kernelName:gu,backendName:"webgl",kernelFunc:HK},qK=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=` + `}};function jK(e){let{inputs:t,backend:a}=e,{x:n}=t,r=[...n.shape,...n.shape],s=v.sizeFromShape(n.shape),i=pe({inputs:{x:n},backend:a,attrs:{shape:[s]}}),o=new HK(s),l=a.runWebGLProgram(o,[i],i.dtype),u=pe({inputs:{x:l},backend:a,attrs:{shape:r}});return a.disposeIntermediateTensorInfo(i),a.disposeIntermediateTensorInfo(l),u}var qK={kernelName:gu,backendName:"webgl",kernelFunc:jK},XK=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(${p}, ${c}); const float neg_infinity = -3.4e38; @@ -3389,7 +3389,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Qq=tt({opSnippet:Jq}),eX={kernelNam float result = curVal; setOutput(result); } - `}};function XK(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,filter:s}=t,{strides:i,pad:o,dilations:l}=n,u=C.computeDilation2DInfo(r.shape,s.shape,i,o,"NHWC",l),p,c=new qK(u);p=a.runWebGLProgram(c,[r,s],"float32");let d=pe({inputs:{x:p},backend:a,attrs:{shape:u.outShape}});return a.disposeIntermediateTensorInfo(p),d}var KK={kernelName:Pi,backendName:"webgl",kernelFunc:XK};function YK(e){let{inputs:t,backend:a,attrs:n}=e,{equation:r}=n,s=t,{allDims:i,summedDims:o,idDims:l}=C.decodeEinsumEquation(r,s.length);C.checkEinsumDimSizes(i.length,l,s);let{path:u,steps:p}=C.getEinsumComputePath(o,l),c=p.length,d=null,h=i.length,m=[];for(let f=0;f=0&&(d=i0({inputs:{x:d},backend:a,attrs:{axis:u[f]-(i.length-h),keepDims:!1}}),m.push(d)),h--)}for(let f of m)f!==d&&a.disposeIntermediateTensorInfo(f);return d}var ZK={kernelName:yp,backendName:"webgl",kernelFunc:YK},JK="return (x >= 0.0) ? x : (exp(x) - 1.0);",QK=` + `}};function KK(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,filter:s}=t,{strides:i,pad:o,dilations:l}=n,u=C.computeDilation2DInfo(r.shape,s.shape,i,o,"NHWC",l),p,c=new XK(u);p=a.runWebGLProgram(c,[r,s],"float32");let d=pe({inputs:{x:p},backend:a,attrs:{shape:u.outShape}});return a.disposeIntermediateTensorInfo(p),d}var YK={kernelName:Pi,backendName:"webgl",kernelFunc:KK};function ZK(e){let{inputs:t,backend:a,attrs:n}=e,{equation:r}=n,s=t,{allDims:i,summedDims:o,idDims:l}=C.decodeEinsumEquation(r,s.length);C.checkEinsumDimSizes(i.length,l,s);let{path:u,steps:p}=C.getEinsumComputePath(o,l),c=p.length,d=null,h=i.length,m=[];for(let f=0;f=0&&(d=i0({inputs:{x:d},backend:a,attrs:{axis:u[f]-(i.length-h),keepDims:!1}}),m.push(d)),h--)}for(let f of m)f!==d&&a.disposeIntermediateTensorInfo(f);return d}var JK={kernelName:yp,backendName:"webgl",kernelFunc:ZK},QK="return (x >= 0.0) ? x : (exp(x) - 1.0);",eY=` vec4 result; result.r = (x.r >= 0.0) ? x.r : (exp(x.r) - 1.0); @@ -3398,12 +3398,12 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Qq=tt({opSnippet:Jq}),eX={kernelNam result.a = (x.a >= 0.0) ? x.a : (exp(x.a) - 1.0); return result; -`,eY=tt({opSnippet:JK,packedOpSnippet:QK}),tY={kernelName:Fi,backendName:"webgl",kernelFunc:eY},aY="return (b >= 0.0) ? a : a * (b + 1.0);",nY=` +`,tY=tt({opSnippet:QK,packedOpSnippet:eY}),aY={kernelName:Fi,backendName:"webgl",kernelFunc:tY},nY="return (b >= 0.0) ? a : a * (b + 1.0);",rY=` vec4 bGTEZero = vec4(greaterThanEqual(b, vec4(0.))); return (bGTEZero * a) + ((vec4(1.0) - bGTEZero) * (a * (b + vec4(1.0)))); -`,rY=e=>{let{inputs:t,backend:a}=e,{dy:n,y:r}=t,s=B().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new Zu(nY,n.shape,r.shape):new ri(aY,n.shape,r.shape);return a.runWebGLProgram(s,[n,r],n.dtype)},sY={kernelName:yu,backendName:"webgl",kernelFunc:rY},iY=` +`,sY=e=>{let{inputs:t,backend:a}=e,{dy:n,y:r}=t,s=B().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new Zu(rY,n.shape,r.shape):new ri(nY,n.shape,r.shape);return a.runWebGLProgram(s,[n,r],n.dtype)},iY={kernelName:yu,backendName:"webgl",kernelFunc:sY},oY=` return vec4(equal(a, b)); -`,oY="return float(a == b);",lY=ha({opSnippet:oY,packedOpSnippet:iY,dtype:"bool",cpuKernelImpl:zH}),uY={kernelName:Oi,backendName:"webgl",kernelFunc:lY},dY=` +`,lY="return float(a == b);",uY=ha({opSnippet:lY,packedOpSnippet:oY,dtype:"bool",cpuKernelImpl:LH}),dY={kernelName:Oi,backendName:"webgl",kernelFunc:uY},pY=` // Error function is calculated approximately with elementary function. // See "Handbook of Mathematical Functions with Formulas, // Graphs, and Mathematical Tables", Abramowitz and Stegun. @@ -3418,9 +3418,9 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Qq=tt({opSnippet:Jq}),eX={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)); -`,pY=tt({opSnippet:dY}),cY={kernelName:Di,backendName:"webgl",kernelFunc:pY},hY=Ju+` +`,cY=tt({opSnippet:pY}),hY={kernelName:Di,backendName:"webgl",kernelFunc:cY},mY=Ju+` return exp(x); -`,mY=` +`,fY=` vec4 result = exp(x); bvec4 isNaN = isnan(x); result.r = isNaN.r ? x.r : result.r; @@ -3429,7 +3429,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Qq=tt({opSnippet:Jq}),eX={kernelNam result.a = isNaN.a ? x.a : result.a; return result; -`,D8=tt({opSnippet:hY,packedOpSnippet:mY,cpuKernelImpl:LH,dtype:"float32"}),fY={kernelName:zi,backendName:"webgl",kernelFunc:D8};function B1(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),pe({inputs:{x:s},backend:n,attrs:{shape:o}})}var gY={kernelName:xu,backendName:"webgl",kernelFunc:B1},B5="return exp(x) - 1.0;",yY=tt({opSnippet:B5,packedOpSnippet:B5,cpuKernelImpl:WH}),xY={kernelName:Li,backendName:"webgl",kernelFunc:yY},V5=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=` +`,O8=tt({opSnippet:mY,packedOpSnippet:fY,cpuKernelImpl:WH,dtype:"float32"}),gY={kernelName:zi,backendName:"webgl",kernelFunc:O8};function B1(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),pe({inputs:{x:s},backend:n,attrs:{shape:o}})}var yY={kernelName:xu,backendName:"webgl",kernelFunc:B1},V5="return exp(x) - 1.0;",xY=tt({opSnippet:V5,packedOpSnippet:V5,cpuKernelImpl:BH}),AY={kernelName:Li,backendName:"webgl",kernelFunc:xY},U5=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) { @@ -3462,12 +3462,12 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Qq=tt({opSnippet:Jq}),eX={kernelNam ivec2 coords = getOutputCoords(); setOutput(mulMatDFT(coords[0], coords[1])); } - `}};function O8(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=pe({inputs:{x:e},backend:a,attrs:{shape:[i,s]}}),l=o.shape,u=new V5("real",l,t),p=new V5("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"),m=ms({inputs:{real:d,imag:h},backend:a});a.disposeIntermediateTensorInfo(d),a.disposeIntermediateTensorInfo(h);let f=pe({inputs:{x:m},backend:a,attrs:{shape:e.shape}});return a.disposeIntermediateTensorInfo(o),a.disposeIntermediateTensorInfo(m),f}function AY(e){let{inputs:t,backend:a}=e,{input:n}=t;return O8(n,!1,a)}var bY={kernelName:xp,backendName:"webgl",kernelFunc:AY},vY=class{constructor(e,t){this.outputShape=[],this.customUniforms=[{name:"value",type:"float"}],this.variableNames=["x"],this.outputShape=e,this.userCode=` + `}};function z8(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=pe({inputs:{x:e},backend:a,attrs:{shape:[i,s]}}),l=o.shape,u=new U5("real",l,t),p=new U5("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"),m=ms({inputs:{real:d,imag:h},backend:a});a.disposeIntermediateTensorInfo(d),a.disposeIntermediateTensorInfo(h);let f=pe({inputs:{x:m},backend:a,attrs:{shape:e.shape}});return a.disposeIntermediateTensorInfo(o),a.disposeIntermediateTensorInfo(m),f}function bY(e){let{inputs:t,backend:a}=e,{input:n}=t;return z8(n,!1,a)}var vY={kernelName:xp,backendName:"webgl",kernelFunc:bY},wY=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 ec(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 vY(n,r),o=[[r]];return t.runWebGLProgram(i,[],s,o)}}var wY={kernelName:Au,backendName:"webgl",kernelFunc:ec},kY=class{constructor(e){this.variableNames=["Image"],this.outputShape=[];let t=e[2];this.outputShape=e,this.userCode=` + `}};function ec(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 wY(n,r),o=[[r]];return t.runWebGLProgram(i,[],s,o)}}var kY={kernelName:Au,backendName:"webgl",kernelFunc:ec},IY=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]; @@ -3481,7 +3481,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Qq=tt({opSnippet:Jq}),eX={kernelNam } setOutput(outputValue); } - `}},IY={kernelName:Wi,backendName:"webgl",kernelFunc:({inputs:e,backend:t})=>{let{image:a}=e,n=t,r=new kY(a.shape);return n.runWebGLProgram(r,[a],a.dtype)}},U5="return floor(x);",SY=tt({opSnippet:U5,packedOpSnippet:U5,cpuKernelImpl:BH}),CY={kernelName:Bi,backendName:"webgl",kernelFunc:SY},TY=` + `}},SY={kernelName:Wi,backendName:"webgl",kernelFunc:({inputs:e,backend:t})=>{let{image:a}=e,n=t,r=new IY(a.shape);return n.runWebGLProgram(r,[a],a.dtype)}},G5="return floor(x);",CY=tt({opSnippet:G5,packedOpSnippet:G5,cpuKernelImpl:VH}),TY={kernelName:Bi,backendName:"webgl",kernelFunc:CY},NY=` float s = sign(a) * sign(b); int ia = round(a); int ib = round(b); @@ -3491,7 +3491,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Qq=tt({opSnippet:Jq}),eX={kernelNam } else { return NAN; } -`,NY=` +`,RY=` ivec4 ia = round(a); ivec4 ib = round(b); bvec4 cond = notEqual(ib, ivec4(0)); @@ -3512,7 +3512,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Qq=tt({opSnippet:Jq}),eX={kernelNam result[3] = idiv(ia[3], ib[3], s[3]); } return vec4(result); -`,RY=ha({opSnippet:TY,packedOpSnippet:NY,dtype:"int32"}),EY={kernelName:Vi,backendName:"webgl",kernelFunc:RY},MY=class{constructor(e){this.variableNames=["A"];let t=Ra(),[a,n]=e;this.outputShape=e,this.userCode=` +`,EY=ha({opSnippet:NY,packedOpSnippet:RY,dtype:"int32"}),MY={kernelName:Vi,backendName:"webgl",kernelFunc:EY},$Y=class{constructor(e){this.variableNames=["A"];let t=Ra(),[a,n]=e;this.outputShape=e,this.userCode=` void main() { ivec3 coords = getOutputCoords(); int texR = coords[0]; @@ -3534,7 +3534,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Qq=tt({opSnippet:Jq}),eX={kernelNam setOutput(floor(value * 255.0 + 0.5)); } - `}},$Y=class{constructor(e){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0;let t=Ra(),[a,n]=e;this.outputShape=e,this.userCode=` + `}},PY=class{constructor(e){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0;let t=Ra(),[a,n]=e;this.outputShape=e,this.userCode=` void main() { ivec3 coords = getOutputCoords(); int texR = coords[0]; @@ -3568,7 +3568,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Qq=tt({opSnippet:Jq}),eX={kernelNam ${t.output} = result; } - `}},PY={kernelName:Ld,backendName:"webgl",kernelFunc:_Y},_l,Q2=B().getBool("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU");function _Y(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 f=B().getBool("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU");(_l==null||f!==Q2)&&(Q2=f,_l=document.createElement("canvas").getContext("2d",{willReadFrequently:Q2})),_l.canvas.width=l,_l.canvas.height=u,_l.drawImage(r,0,0,l,u),r=_l.canvas}let d=a.makeTensorInfo(p,"int32");a.texData.get(d.dataId).usage=mn.PIXELS,a.gpgpu.uploadPixelDataToTexture(a.getTexture(d.dataId),r);let h=B().getBool("WEBGL_PACK")?new $Y(c):new MY(c),m=a.runWebGLProgram(h,[d],"int32");return a.disposeData(d.dataId),m}function FY(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:m}=n,f=C.convertConv2DDataFormat(p),g=C.computeConv2DInfo(r.shape,s.shape,l,c,u,d,!1,f),y,x=[],A=i!=null,b=o!=null,w=h==="leakyrelu",I=()=>{let N=[r,s],M=($,E)=>{if(E==="NCHW"&&$.shape.length===1&&$.shape[0]!==1){let S=pe({inputs:{x:$},backend:a,attrs:{shape:[$.shape[0],1,1]}});return x.push(S),S}return $};if(A&&N.push(M(i,p)),b&&N.push(M(o,p)),w){let $=a.makeTensorInfo([],"float32",v.createScalarValue(m,"float32"));N.push($),x.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=M8({x:r,filter:s,convInfo:g,backend:a,bias:i,activation:h,preluActivationWeights:o,leakyreluAlpha:m});else if(g.strideWidth<=2&&f==="channelsLast"&&B().getBool("WEBGL_EXP_CONV")){let N=h?ep(h,!0):null,M=new E8(g,A,N,b,w),$=[[g.padInfo.top,g.padInfo.left],[g.strideHeight,g.strideWidth],[g.dilationHeight,g.dilationWidth],[g.inHeight,g.inWidth]],E=I();y=a.runWebGLProgram(M,E,"float32",$)}else if(B().getBool("WEBGL_CONV_IM2COL"))y=$8({x:r,filter:s,convInfo:g,backend:a,bias:i,activation:h,preluActivationWeights:o,leakyreluAlpha:m});else{let N=h?ep(h,!1):null,M=new R8(g,A,N,b,w),$=I();y=a.runWebGLProgram(M,$,"float32")}let T=pe({inputs:{x:y},backend:a,attrs:{shape:g.outShape}});return x.push(y),x.forEach(N=>a.disposeIntermediateTensorInfo(N)),T}var DY={kernelName:Zr,backendName:"webgl",kernelFunc:FY};function OY(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,m=[],f=p;f==null&&(f=[1,1]),v.assert(C.eitherStridesOrDilationsAreOne(l,f),()=>`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${l} and dilations '${f}'`);let g=C.computeConv2DInfo(r.shape,s.shape,l,f,u,c,!0),y=B().getBool("WEBGL_PACK_DEPTHWISECONV")&&g.strideWidth<=2&&g.outChannels/g.inChannels===1,x=d?ep(d,y):null,A=[r,s],b=i!=null,w=o!=null,I=d==="leakyrelu";if(b&&A.push(i),w&&A.push(o),I){let $=a.makeTensorInfo([],"float32",v.createScalarValue(h,"float32"));A.push($),m.push($)}let T;y?T=new F8(g,b,x,w,I):T=new _8(g,b,x,w,I);let N=[[g.padInfo.top,g.padInfo.left],[g.strideHeight,g.strideWidth],[g.dilationHeight,g.dilationWidth],[g.inHeight,g.inWidth]],M=a.runWebGLProgram(T,A,"float32",N);return m.forEach($=>a.disposeIntermediateTensorInfo($)),M}var zY={kernelName:Jr,backendName:"webgl",kernelFunc:OY},LY=class{constructor(e,t,a,n){this.sliceDim=e,this.strides=t,this.paramsShape=n,this.variableNames=["x","indices"],this.outputShape=a;let r=ft(a.length),s=` + `}},_Y={kernelName:Ld,backendName:"webgl",kernelFunc:FY},_l,Q2=B().getBool("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU");function FY(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 f=B().getBool("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU");(_l==null||f!==Q2)&&(Q2=f,_l=document.createElement("canvas").getContext("2d",{willReadFrequently:Q2})),_l.canvas.width=l,_l.canvas.height=u,_l.drawImage(r,0,0,l,u),r=_l.canvas}let d=a.makeTensorInfo(p,"int32");a.texData.get(d.dataId).usage=mn.PIXELS,a.gpgpu.uploadPixelDataToTexture(a.getTexture(d.dataId),r);let h=B().getBool("WEBGL_PACK")?new PY(c):new $Y(c),m=a.runWebGLProgram(h,[d],"int32");return a.disposeData(d.dataId),m}function DY(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:m}=n,f=C.convertConv2DDataFormat(p),g=C.computeConv2DInfo(r.shape,s.shape,l,c,u,d,!1,f),y,x=[],A=i!=null,b=o!=null,w=h==="leakyrelu",I=()=>{let N=[r,s],M=($,E)=>{if(E==="NCHW"&&$.shape.length===1&&$.shape[0]!==1){let S=pe({inputs:{x:$},backend:a,attrs:{shape:[$.shape[0],1,1]}});return x.push(S),S}return $};if(A&&N.push(M(i,p)),b&&N.push(M(o,p)),w){let $=a.makeTensorInfo([],"float32",v.createScalarValue(m,"float32"));N.push($),x.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=$8({x:r,filter:s,convInfo:g,backend:a,bias:i,activation:h,preluActivationWeights:o,leakyreluAlpha:m});else if(g.strideWidth<=2&&f==="channelsLast"&&B().getBool("WEBGL_EXP_CONV")){let N=h?ep(h,!0):null,M=new M8(g,A,N,b,w),$=[[g.padInfo.top,g.padInfo.left],[g.strideHeight,g.strideWidth],[g.dilationHeight,g.dilationWidth],[g.inHeight,g.inWidth]],E=I();y=a.runWebGLProgram(M,E,"float32",$)}else if(B().getBool("WEBGL_CONV_IM2COL"))y=P8({x:r,filter:s,convInfo:g,backend:a,bias:i,activation:h,preluActivationWeights:o,leakyreluAlpha:m});else{let N=h?ep(h,!1):null,M=new E8(g,A,N,b,w),$=I();y=a.runWebGLProgram(M,$,"float32")}let T=pe({inputs:{x:y},backend:a,attrs:{shape:g.outShape}});return x.push(y),x.forEach(N=>a.disposeIntermediateTensorInfo(N)),T}var OY={kernelName:Zr,backendName:"webgl",kernelFunc:DY};function zY(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,m=[],f=p;f==null&&(f=[1,1]),v.assert(C.eitherStridesOrDilationsAreOne(l,f),()=>`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${l} and dilations '${f}'`);let g=C.computeConv2DInfo(r.shape,s.shape,l,f,u,c,!0),y=B().getBool("WEBGL_PACK_DEPTHWISECONV")&&g.strideWidth<=2&&g.outChannels/g.inChannels===1,x=d?ep(d,y):null,A=[r,s],b=i!=null,w=o!=null,I=d==="leakyrelu";if(b&&A.push(i),w&&A.push(o),I){let $=a.makeTensorInfo([],"float32",v.createScalarValue(h,"float32"));A.push($),m.push($)}let T;y?T=new D8(g,b,x,w,I):T=new F8(g,b,x,w,I);let N=[[g.padInfo.top,g.padInfo.left],[g.strideHeight,g.strideWidth],[g.dilationHeight,g.dilationWidth],[g.inHeight,g.inWidth]],M=a.runWebGLProgram(T,A,"float32",N);return m.forEach($=>a.disposeIntermediateTensorInfo($)),M}var LY={kernelName:Jr,backendName:"webgl",kernelFunc:zY},WY=class{constructor(e,t,a,n){this.sliceDim=e,this.strides=t,this.paramsShape=n,this.variableNames=["x","indices"],this.outputShape=a;let r=ft(a.length),s=` int index;`;for(let i=0;i= 0) && (index < ${e[2]}) ? 1.0 : 0.0; setOutput(inBounds * getA(${n})); } - `}};function UY(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, ${A-1}]`)}}let u=C.segment_util.collectGatherOpShapeInfo(r,s,l,o),p=v.sizeFromShape(s.shape),c=[],d=pe({inputs:{x:r},backend:a,attrs:{shape:[u.batchSize,u.outerSize,u.dimSize,u.sliceSize]}}),h=pe({inputs:{x:s},backend:a,attrs:{shape:[u.batchSize,p/u.batchSize]}});c.push(d),c.push(h);let m=[u.batchSize,u.outerSize,p/u.batchSize,u.sliceSize];if(a.shouldExecuteOnCPU([r,s])||r.dtype==="string"){let x=a.bufferSync(h),A=a.bufferSync(d),b=UH(A,x,m);return c.forEach(w=>a.disposeIntermediateTensorInfo(w)),a.makeTensorInfo(u.outputShape,b.dtype,b.values)}let f=new VY(d.shape,m),g=a.runWebGLProgram(f,[d,h],d.dtype);c.push(g);let y=pe({inputs:{x:g},backend:a,attrs:{shape:u.outputShape}});return c.forEach(x=>a.disposeIntermediateTensorInfo(x)),y}var GY={kernelName:bu,backendName:"webgl",kernelFunc:z8},HY="return float(a > b);",jY=` + `}};function GY(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, ${A-1}]`)}}let u=C.segment_util.collectGatherOpShapeInfo(r,s,l,o),p=v.sizeFromShape(s.shape),c=[],d=pe({inputs:{x:r},backend:a,attrs:{shape:[u.batchSize,u.outerSize,u.dimSize,u.sliceSize]}}),h=pe({inputs:{x:s},backend:a,attrs:{shape:[u.batchSize,p/u.batchSize]}});c.push(d),c.push(h);let m=[u.batchSize,u.outerSize,p/u.batchSize,u.sliceSize];if(a.shouldExecuteOnCPU([r,s])||r.dtype==="string"){let x=a.bufferSync(h),A=a.bufferSync(d),b=GH(A,x,m);return c.forEach(w=>a.disposeIntermediateTensorInfo(w)),a.makeTensorInfo(u.outputShape,b.dtype,b.values)}let f=new UY(d.shape,m),g=a.runWebGLProgram(f,[d,h],d.dtype);c.push(g);let y=pe({inputs:{x:g},backend:a,attrs:{shape:u.outputShape}});return c.forEach(x=>a.disposeIntermediateTensorInfo(x)),y}var HY={kernelName:bu,backendName:"webgl",kernelFunc:L8},jY="return float(a > b);",qY=` return vec4(greaterThan(a, b)); -`,qY=ha({opSnippet:HY,packedOpSnippet:jY,cpuKernelImpl:GH,dtype:"bool"}),XY={kernelName:Hi,backendName:"webgl",kernelFunc:qY},KY="return float(a >= b);",YY=` +`,XY=ha({opSnippet:jY,packedOpSnippet:qY,cpuKernelImpl:HH,dtype:"bool"}),KY={kernelName:Hi,backendName:"webgl",kernelFunc:XY},YY="return float(a >= b);",ZY=` return vec4(greaterThanEqual(a, b)); -`,ZY=ha({opSnippet:KY,packedOpSnippet:YY,dtype:"bool",cpuKernelImpl:HH}),JY={kernelName:ji,backendName:"webgl",kernelFunc:ZY};function QY(e){let{inputs:t,backend:a}=e,{input:n}=t;return O8(n,!0,a)}var eZ={kernelName:Ap,backendName:"webgl",kernelFunc:QY},tZ="return float(!isnan(x) && !isinf(x));",aZ=tt({opSnippet:tZ,dtype:"bool"}),nZ={kernelName:Xi,backendName:"webgl",kernelFunc:aZ},rZ="return float(isinf(x));",sZ=tt({opSnippet:rZ,dtype:"bool"}),iZ={kernelName:Ki,backendName:"webgl",kernelFunc:sZ},oZ="return float(isnan(x));",lZ=tt({opSnippet:oZ,dtype:"bool"}),uZ={kernelName:Yi,backendName:"webgl",kernelFunc:lZ},dZ="return float(a < b);",pZ=` +`,JY=ha({opSnippet:YY,packedOpSnippet:ZY,dtype:"bool",cpuKernelImpl:jH}),QY={kernelName:ji,backendName:"webgl",kernelFunc:JY};function eZ(e){let{inputs:t,backend:a}=e,{input:n}=t;return z8(n,!0,a)}var tZ={kernelName:Ap,backendName:"webgl",kernelFunc:eZ},aZ="return float(!isnan(x) && !isinf(x));",nZ=tt({opSnippet:aZ,dtype:"bool"}),rZ={kernelName:Xi,backendName:"webgl",kernelFunc:nZ},sZ="return float(isinf(x));",iZ=tt({opSnippet:sZ,dtype:"bool"}),oZ={kernelName:Ki,backendName:"webgl",kernelFunc:iZ},lZ="return float(isnan(x));",uZ=tt({opSnippet:lZ,dtype:"bool"}),dZ={kernelName:Yi,backendName:"webgl",kernelFunc:uZ},pZ="return float(a < b);",cZ=` return vec4(lessThan(a, b)); -`,cZ=ha({opSnippet:dZ,packedOpSnippet:pZ,cpuKernelImpl:jH,dtype:"bool"}),hZ={kernelName:Ji,backendName:"webgl",kernelFunc:cZ},mZ="return float(a <= b);",fZ=` +`,hZ=ha({opSnippet:pZ,packedOpSnippet:cZ,cpuKernelImpl:qH,dtype:"bool"}),mZ={kernelName:Ji,backendName:"webgl",kernelFunc:hZ},fZ="return float(a <= b);",gZ=` return vec4(lessThanEqual(a, b)); -`,gZ=ha({opSnippet:mZ,packedOpSnippet:fZ,cpuKernelImpl:qH,dtype:"bool"}),yZ={kernelName:Qi,backendName:"webgl",kernelFunc:gZ};function xZ(e){let{backend:t,attrs:a}=e,{start:n,stop:r,num:s}=a,i=XH(n,r,s);return t.makeTensorInfo([i.length],"float32",i)}var AZ={kernelName:eo,backendName:"webgl",kernelFunc:xZ},bZ=Ju+` +`,yZ=ha({opSnippet:fZ,packedOpSnippet:gZ,cpuKernelImpl:XH,dtype:"bool"}),xZ={kernelName:Qi,backendName:"webgl",kernelFunc:yZ};function AZ(e){let{backend:t,attrs:a}=e,{start:n,stop:r,num:s}=a,i=KH(n,r,s);return t.makeTensorInfo([i.length],"float32",i)}var bZ={kernelName:eo,backendName:"webgl",kernelFunc:AZ},vZ=Ju+` return x < 0.0 ? 0./0. : log(x); -`,vZ=` +`,wZ=` vec4 result = log(x); bvec4 isNaN = isnan(x); result.r = isNaN.r ? x.r : (x.r < 0.0 ? 0./0. : result.r); @@ -3608,18 +3608,18 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Qq=tt({opSnippet:Jq}),eX={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; -`,wZ=tt({opSnippet:bZ,packedOpSnippet:vZ,cpuKernelImpl:KH}),kZ={kernelName:to,backendName:"webgl",kernelFunc:wZ},IZ=Ju+` +`,kZ=tt({opSnippet:vZ,packedOpSnippet:wZ,cpuKernelImpl:YH}),IZ={kernelName:to,backendName:"webgl",kernelFunc:kZ},SZ=Ju+` return log(1.0 + x); -`,SZ=tt({opSnippet:IZ}),CZ={kernelName:ao,backendName:"webgl",kernelFunc:SZ},TZ="return float(a >= 1.0 && b >= 1.0);",NZ=` +`,CZ=tt({opSnippet:SZ}),TZ={kernelName:ao,backendName:"webgl",kernelFunc:CZ},NZ="return float(a >= 1.0 && b >= 1.0);",RZ=` return vec4( vec4(greaterThanEqual(a, vec4(1.0))) * vec4(greaterThanEqual(b, vec4(1.0)))); -`,RZ=ha({opSnippet:TZ,packedOpSnippet:NZ,dtype:"bool"}),EZ={kernelName:no,backendName:"webgl",kernelFunc:RZ},MZ="return float(!(x >= 1.0));",$Z=tt({opSnippet:MZ}),PZ={kernelName:ro,backendName:"webgl",kernelFunc:$Z},_Z="return float(a >= 1.0 || b >= 1.0);",FZ=` +`,EZ=ha({opSnippet:NZ,packedOpSnippet:RZ,dtype:"bool"}),MZ={kernelName:no,backendName:"webgl",kernelFunc:EZ},$Z="return float(!(x >= 1.0));",PZ=tt({opSnippet:$Z}),_Z={kernelName:ro,backendName:"webgl",kernelFunc:PZ},FZ="return float(a >= 1.0 || b >= 1.0);",DZ=` return min( vec4(greaterThanEqual(a, vec4(1.0))) + vec4(greaterThanEqual(b, vec4(1.0))), vec4(1.0)); -`,DZ=ha({opSnippet:_Z,packedOpSnippet:FZ,dtype:"bool"}),OZ={kernelName:so,backendName:"webgl",kernelFunc:DZ},zZ=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=` +`,OZ=ha({opSnippet:FZ,packedOpSnippet:DZ,dtype:"bool"}),zZ={kernelName:so,backendName:"webgl",kernelFunc:OZ},LZ=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]; @@ -3638,7 +3638,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Qq=tt({opSnippet:Jq}),eX={kernelNam float val = x * ${o}; setOutput(val); } - `}},LZ=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=` + `}},WZ=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; @@ -3700,7 +3700,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Qq=tt({opSnippet:Jq}),eX={kernelNam vec4 result = xAtOutputCoords * ${o}; setOutput(result); } - `}},WZ=e=>{let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{depthRadius:s,bias:i,alpha:o,beta:l}=n,u=B().getBool("WEBGL_PACK_NORMALIZATION")?new LZ(r.shape,s,i,o,l):new zZ(r.shape,s,i,o,l);return a.runWebGLProgram(u,[r],r.dtype)},BZ={kernelName:io,backendName:"webgl",kernelFunc:WZ},VZ=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=` + `}},BZ=e=>{let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{depthRadius:s,bias:i,alpha:o,beta:l}=n,u=B().getBool("WEBGL_PACK_NORMALIZATION")?new WZ(r.shape,s,i,o,l):new LZ(r.shape,s,i,o,l);return a.runWebGLProgram(u,[r],r.dtype)},VZ={kernelName:io,backendName:"webgl",kernelFunc:BZ},UZ=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]; @@ -3755,16 +3755,16 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Qq=tt({opSnippet:Jq}),eX={kernelNam } setOutput(result); } - `}},UZ=e=>{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 VZ(r.shape,o,l,u,p);return a.runWebGLProgram(c,[r,s,i],r.dtype)},GZ={kernelName:vu,backendName:"webgl",kernelFunc:UZ};function HZ(e,t,a,n){let r=v.sizeFromShape(t),s=v.sizeFromShape(e.shape)/r,i=pe({inputs:{x:e},attrs:{shape:[s,r]},backend:n}),o=il(i,e.dtype,"max",n),l=pe({inputs:{x:o},attrs:{shape:a},backend:n});return n.disposeIntermediateTensorInfo(i),n.disposeIntermediateTensorInfo(o),l}function L8(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=C.getAxesPermutation(u,o),c=p!=null,d=a.shouldExecuteOnCPU([r]),h=r;if(c){if(d){let x=a.texData.get(h.dataId).values,A=new Array(o);for(let I=0;I{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 UZ(r.shape,o,l,u,p);return a.runWebGLProgram(c,[r,s,i],r.dtype)},HZ={kernelName:vu,backendName:"webgl",kernelFunc:GZ};function jZ(e,t,a,n){let r=v.sizeFromShape(t),s=v.sizeFromShape(e.shape)/r,i=pe({inputs:{x:e},attrs:{shape:[s,r]},backend:n}),o=il(i,e.dtype,"max",n),l=pe({inputs:{x:o},attrs:{shape:a},backend:n});return n.disposeIntermediateTensorInfo(i),n.disposeIntermediateTensorInfo(o),l}function W8(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=C.getAxesPermutation(u,o),c=p!=null,d=a.shouldExecuteOnCPU([r]),h=r;if(c){if(d){let x=a.texData.get(h.dataId).values,A=new Array(o);for(let I=0;I`Error in maxPool: Either strides or dilations must be 1. Got strides ${i} and dilations '${u}'`);let p=C.computePool2DInfo(r.shape,s,i,u,o,l);if(p.filterWidth===1&&p.filterHeight===1&&v.arraysEqual(p.inShape,p.outShape))return en({inputs:{x:r},backend:a});let c=new tp(p,"max",!1);return a.runWebGLProgram(c,[r],r.dtype)}var JZ={kernelName:uo,backendName:"webgl",kernelFunc:ZZ};function QZ(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=C.computePool3DInfo(r.shape,s,i,p,o,u,l),d=new W3(c,"max",!1);return a.runWebGLProgram(d,[r],r.dtype)}var eJ={kernelName:wu,backendName:"webgl",kernelFunc:QZ},tJ=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=` +`,YZ=ha({opSnippet:XZ,packedOpSnippet:KZ,cpuKernelImpl:JH}),ZZ={kernelName:lo,backendName:"webgl",kernelFunc:YZ};function JZ(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t;ju(r,"maxPool");let{filterSize:s,strides:i,pad:o,dimRoundingMode:l}=n,u=1;v.assert(C.eitherStridesOrDilationsAreOne(i,u),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${i} and dilations '${u}'`);let p=C.computePool2DInfo(r.shape,s,i,u,o,l);if(p.filterWidth===1&&p.filterHeight===1&&v.arraysEqual(p.inShape,p.outShape))return en({inputs:{x:r},backend:a});let c=new tp(p,"max",!1);return a.runWebGLProgram(c,[r],r.dtype)}var QZ={kernelName:uo,backendName:"webgl",kernelFunc:JZ};function eJ(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=C.computePool3DInfo(r.shape,s,i,p,o,u,l),d=new W3(c,"max",!1);return a.runWebGLProgram(d,[r],r.dtype)}var tJ={kernelName:wu,backendName:"webgl",kernelFunc:eJ},aJ=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() { @@ -3810,7 +3810,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Qq=tt({opSnippet:Jq}),eX={kernelNam } setOutput(dotProd); } - `}},aJ=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=` + `}},nJ=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() { @@ -3874,16 +3874,16 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Qq=tt({opSnippet:Jq}),eX={kernelNam } setOutput(dotProd); } - `}};function nJ(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=C.computePool3DInfo(i.shape,o,l,c,u,p),h=new W3(d,"max",!0),m=a.runWebGLProgram(h,[i],i.dtype),f=new aJ(d),g=a.runWebGLProgram(f,[r,m],i.dtype);return a.disposeIntermediateTensorInfo(m),g}var rJ={kernelName:wp,backendName:"webgl",kernelFunc:nJ};function sJ(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,input:s,output:i}=t,o=s;ju([s,i],"maxPoolGrad");let{filterSize:l,strides:u,pad:p,dimRoundingMode:c}=n,d=C.computePool2DInfo(o.shape,l,u,1,p,c),h=!0,m=new tp(d,"max",h),f=a.runWebGLProgram(m,[o],o.dtype),g=new tJ(d),y=a.runWebGLProgram(g,[r,f],o.dtype);return a.disposeIntermediateTensorInfo(f),y}var iJ={kernelName:vp,backendName:"webgl",kernelFunc:sJ};function oJ(e,t,a,n){let r=new tp(a,"max",!1),s=n.runWebGLProgram(r,[e],"float32");r=new tp(a,"max",!0,!0,t);let i=n.runWebGLProgram(r,[e],"float32");return[s,i]}var lJ={kernelName:ku,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(C.eitherStridesOrDilationsAreOne(s,u),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${s} and dilations '${u}'`);let p=C.computePool2DInfo(n.shape,r,s,u,i),[c,d]=oJ(n,o,p,l);return[c,d]}};function uJ(e,t,a,n){let r=v.sizeFromShape(t),s=v.sizeFromShape(e.shape)/r,i=pe({inputs:{x:e},attrs:{shape:[s,r]},backend:n}),o=il(i,"float32","mean",n),l=pe({inputs:{x:o},attrs:{shape:a},backend:n});return n.disposeIntermediateTensorInfo(i),n.disposeIntermediateTensorInfo(o),l}var dJ={kernelName:po,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=C.getAxesPermutation(u,o),c=p!=null,d=i.shouldExecuteOnCPU([n]),h=[],m=n;if(c){if(d){let A=i.texData.get(m.dataId).values,b=new Array(o);for(let T=0;T{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(C.eitherStridesOrDilationsAreOne(s,u),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${s} and dilations '${u}'`);let p=C.computePool2DInfo(n.shape,r,s,u,i),[c,d]=lJ(n,o,p,l);return[c,d]}};function dJ(e,t,a,n){let r=v.sizeFromShape(t),s=v.sizeFromShape(e.shape)/r,i=pe({inputs:{x:e},attrs:{shape:[s,r]},backend:n}),o=il(i,"float32","mean",n),l=pe({inputs:{x:o},attrs:{shape:a},backend:n});return n.disposeIntermediateTensorInfo(i),n.disposeIntermediateTensorInfo(o),l}var pJ={kernelName:po,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=C.getAxesPermutation(u,o),c=p!=null,d=i.shouldExecuteOnCPU([n]),h=[],m=n;if(c){if(d){let A=i.texData.get(m.dataId).values,b=new Array(o);for(let T=0;Tu[0]+e[p]+u[1]);let n=e.length,r=ft(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=` +`,gJ=ha({opSnippet:mJ,packedOpSnippet:fJ,cpuKernelImpl:QH}),yJ={kernelName:ho,backendName:"webgl",kernelFunc:gJ},xJ=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=ft(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}; @@ -3912,7 +3912,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Qq=tt({opSnippet:Jq}),eX={kernelNam ${r} coords = outC - start; setOutput(getX(${o})); } - `}},xJ=class{constructor(e,t,a){this.variableNames=["x"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=t.map((h,m)=>h[0]+e[m]+h[1]);let n=e.length,r=ft(n),s=t.map(h=>h[0]).join(","),i=t.map((h,m)=>h[0]+e[m]).join(","),o=ka("rc",n),l=ka("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=` + `}},AJ=class{constructor(e,t,a){this.variableNames=["x"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=t.map((h,m)=>h[0]+e[m]+h[1]);let n=e.length,r=ft(n),s=t.map(h=>h[0]).join(","),i=t.map((h,m)=>h[0]+e[m]).join(","),o=ka("rc",n),l=ka("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}; @@ -3968,13 +3968,13 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Qq=tt({opSnippet:Jq}),eX={kernelNam ${d} setOutput(result); } - `}},AJ=({inputs:e,backend:t,attrs:a})=>{let{x:n}=e,{paddings:r,mode:s}=a,i=B().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new xJ(n.shape,r,s):new yJ(n.shape,r,s);return t.runWebGLProgram(i,[n],n.dtype)},bJ={kernelName:mo,backendName:"webgl",kernelFunc:AJ},vJ=`if (b == 0.0) return NAN; - return mod(a, b);`,wJ=` + `}},bJ=({inputs:e,backend:t,attrs:a})=>{let{x:n}=e,{paddings:r,mode:s}=a,i=B().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new AJ(n.shape,r,s):new xJ(n.shape,r,s);return t.runWebGLProgram(i,[n],n.dtype)},vJ={kernelName:mo,backendName:"webgl",kernelFunc:bJ},wJ=`if (b == 0.0) return NAN; + return mod(a, b);`,kJ=` vec4 result = mod(a, b); bvec4 isNaN = equal(b, vec4(0.0)); `+sl+` return result; -`,kJ=ha({opSnippet:vJ,packedOpSnippet:wJ}),IJ={kernelName:fo,backendName:"webgl",kernelFunc:kJ},SJ=class{constructor(e,t,a){this.variableNames=["probs"],this.customUniforms=[{name:"seed",type:"float"}],this.outputShape=[e,a],this.userCode=` +`,IJ=ha({opSnippet:wJ,packedOpSnippet:kJ}),SJ={kernelName:fo,backendName:"webgl",kernelFunc:IJ},CJ=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]; @@ -3994,11 +3994,11 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Qq=tt({opSnippet:Jq}),eX={kernelNam // If no other event happened, last event happened. setOutput(float(${t-1})); } - `}},CJ=` + `}},TJ=` if (a == b) { return 1.0; }; -return a / b;`,TJ=` +return a / b;`,NJ=` // vec4 one = vec4(equal(a, b)); // return one + (vec4(1.0) - one) * a / b; vec4 result = a / b; @@ -4016,9 +4016,9 @@ return a / b;`,TJ=` } return result; -`,W8=ha({opSnippet:CJ,packedOpSnippet:TJ,checkOutOfBounds:!0}),NJ={kernelName:_i,backendName:"webgl",kernelFunc:W8},G5="return a - b;",B8=ha({opSnippet:G5,packedOpSnippet:G5,supportsComplex:!0,cpuKernelImpl:Aj}),RJ={kernelName:Ko,backendName:"webgl",kernelFunc:B8};function V8(e){let{inputs:t,backend:a,attrs:n}=e,{logits:r}=t,{dim:s}=n,i=v.parseAxisParam([s],r.shape),o=L8({inputs:{x:r},backend:a,attrs:{reductionIndices:i,keepDims:!1}}),l=C.expandShapeToKeepDim(o.shape,i),u=pe({inputs:{x:o},backend:a,attrs:{shape:l}}),p=B8({inputs:{a:r,b:u},backend:a}),c=D8({inputs:{x:p},backend:a}),d=i0({inputs:{x:c},backend:a,attrs:{axis:i,keepDims:!1}}),h=pe({inputs:{x:d},backend:a,attrs:{shape:l}}),m=W8({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),m}var EJ={kernelName:Ho,backendName:"webgl",kernelFunc:V8};function MJ(e){let{inputs:t,backend:a,attrs:n}=e,{logits:r}=t,{numSamples:s,seed:i,normalized:o}=n,l=o?r:V8({inputs:{logits:r},backend:a,attrs:{dim:r.shape.length-1}}),u=l.shape[0],p=l.shape[1],c=new SJ(u,p,s),d=[[i]],h=a.runWebGLProgram(c,[l],"int32",d);return o||a.disposeIntermediateTensorInfo(l),h}var $J={kernelName:go,backendName:"webgl",kernelFunc:MJ},PJ=En+` +`,B8=ha({opSnippet:TJ,packedOpSnippet:NJ,checkOutOfBounds:!0}),RJ={kernelName:_i,backendName:"webgl",kernelFunc:B8},H5="return a - b;",V8=ha({opSnippet:H5,packedOpSnippet:H5,supportsComplex:!0,cpuKernelImpl:bj}),EJ={kernelName:Ko,backendName:"webgl",kernelFunc:V8};function U8(e){let{inputs:t,backend:a,attrs:n}=e,{logits:r}=t,{dim:s}=n,i=v.parseAxisParam([s],r.shape),o=W8({inputs:{x:r},backend:a,attrs:{reductionIndices:i,keepDims:!1}}),l=C.expandShapeToKeepDim(o.shape,i),u=pe({inputs:{x:o},backend:a,attrs:{shape:l}}),p=V8({inputs:{a:r,b:u},backend:a}),c=O8({inputs:{x:p},backend:a}),d=i0({inputs:{x:c},backend:a,attrs:{axis:i,keepDims:!1}}),h=pe({inputs:{x:d},backend:a,attrs:{shape:l}}),m=B8({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),m}var MJ={kernelName:Ho,backendName:"webgl",kernelFunc:U8};function $J(e){let{inputs:t,backend:a,attrs:n}=e,{logits:r}=t,{numSamples:s,seed:i,normalized:o}=n,l=o?r:U8({inputs:{logits:r},backend:a,attrs:{dim:r.shape.length-1}}),u=l.shape[0],p=l.shape[1],c=new CJ(u,p,s),d=[[i]],h=a.runWebGLProgram(c,[l],"int32",d);return o||a.disposeIntermediateTensorInfo(l),h}var PJ={kernelName:go,backendName:"webgl",kernelFunc:$J},_J=En+` return -x; -`,_J=` +`,FJ=` vec4 result = -x; bvec4 isNaN = isnan(x); @@ -4028,14 +4028,14 @@ return a / b;`,TJ=` result.a = isNaN.a ? x.a : result.a; return result; -`;function FJ(e){let{inputs:t,backend:a}=e,{x:n}=t;if(a.shouldExecuteOnCPU([n])){let s=a.texData.get(n.dataId),[i,o]=ej(s.values,n.shape,n.dtype);return a.makeTensorInfo(o,n.dtype,i)}let r;return B().getBool("WEBGL_PACK_UNARY_OPERATIONS")?r=new jr(n.shape,_J):r=new Yn(n.shape,PJ),a.runWebGLProgram(r,[n],n.dtype)}var DJ={kernelName:Iu,backendName:"webgl",kernelFunc:FJ},OJ=Rn.nonMaxSuppressionV3Impl;function zJ(e){C.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}=OJ(u,p,i,o,l);return a.makeTensorInfo([c.length],"int32",new Int32Array(c))}var LJ={kernelName:Ao,backendName:"webgl",kernelFunc:zJ},WJ=Rn.nonMaxSuppressionV4Impl;function BJ(e){C.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}=WJ(p,c,i,o,l,u);return[a.makeTensorInfo([d.length],"int32",new Int32Array(d)),a.makeTensorInfo([],"int32",new Int32Array([h]))]}var VJ={kernelName:Su,backendName:"webgl",kernelFunc:BJ},UJ=Rn.nonMaxSuppressionV5Impl;function GJ(e){C.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,m=l,f=u,{selectedIndices:g,selectedScores:y}=UJ(p,c,d,h,m,f);return[a.makeTensorInfo([g.length],"int32",new Int32Array(g)),a.makeTensorInfo([y.length],"float32",new Float32Array(y))]}var HJ={kernelName:bo,backendName:"webgl",kernelFunc:GJ},jJ=class{constructor(e,t,a,n){this.variableNames=["indices"],this.outputShape=[e,t],this.userCode=` +`;function DJ(e){let{inputs:t,backend:a}=e,{x:n}=t;if(a.shouldExecuteOnCPU([n])){let s=a.texData.get(n.dataId),[i,o]=tj(s.values,n.shape,n.dtype);return a.makeTensorInfo(o,n.dtype,i)}let r;return B().getBool("WEBGL_PACK_UNARY_OPERATIONS")?r=new jr(n.shape,FJ):r=new Yn(n.shape,_J),a.runWebGLProgram(r,[n],n.dtype)}var OJ={kernelName:Iu,backendName:"webgl",kernelFunc:DJ},zJ=Rn.nonMaxSuppressionV3Impl;function LJ(e){C.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}=zJ(u,p,i,o,l);return a.makeTensorInfo([c.length],"int32",new Int32Array(c))}var WJ={kernelName:Ao,backendName:"webgl",kernelFunc:LJ},BJ=Rn.nonMaxSuppressionV4Impl;function VJ(e){C.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}=BJ(p,c,i,o,l,u);return[a.makeTensorInfo([d.length],"int32",new Int32Array(d)),a.makeTensorInfo([],"int32",new Int32Array([h]))]}var UJ={kernelName:Su,backendName:"webgl",kernelFunc:VJ},GJ=Rn.nonMaxSuppressionV5Impl;function HJ(e){C.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,m=l,f=u,{selectedIndices:g,selectedScores:y}=GJ(p,c,d,h,m,f);return[a.makeTensorInfo([g.length],"int32",new Int32Array(g)),a.makeTensorInfo([y.length],"float32",new Float32Array(y))]}var jJ={kernelName:bo,backendName:"webgl",kernelFunc:HJ},qJ=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))); } - `}},qJ=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 jJ(u,i,o,l),c=pe({inputs:{x:r},backend:a,attrs:{shape:[u]}}),d=a.runWebGLProgram(p,[c],s);a.disposeIntermediateTensorInfo(c);let h=[...r.shape,i],m=pe({inputs:{x:d},backend:a,attrs:{shape:h}});return a.disposeIntermediateTensorInfo(d),m},XJ={kernelName:vo,backendName:"webgl",kernelFunc:qJ};function Sh(e){let{inputs:t,backend:a}=e,{x:n}=t;if(n.dtype==="complex64"){let r=Qp({inputs:{input:n},backend:a}),s=Sh({inputs:{x:r},backend:a}),i=o0({inputs:{input:n},backend:a}),o=Sh({inputs:{x:i},backend:a}),l=ms({inputs:{real:s,imag:o},backend:a});return a.disposeIntermediateTensorInfo(r),a.disposeIntermediateTensorInfo(s),a.disposeIntermediateTensorInfo(i),a.disposeIntermediateTensorInfo(o),l}else return ec({attrs:{shape:n.shape,dtype:n.dtype,value:n.dtype==="string"?"":0},backend:a})}var KJ={kernelName:Bu,backendName:"webgl",kernelFunc:Sh};function U8(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=Qp({inputs:{input:n},backend:a}),s=U8({inputs:{x:r},backend:a}),i=o0({inputs:{input:n},backend:a}),o=Sh({inputs:{x:i},backend:a}),l=ms({inputs:{real:s,imag:o},backend:a});return a.disposeIntermediateTensorInfo(r),a.disposeIntermediateTensorInfo(s),a.disposeIntermediateTensorInfo(i),a.disposeIntermediateTensorInfo(o),l}else return ec({attrs:{shape:n.shape,dtype:n.dtype,value:1},backend:a})}var YJ={kernelName:Cu,backendName:"webgl",kernelFunc:U8};function ZJ(e){let{inputs:t,backend:a,attrs:n}=e,{axis:r}=n;if(t.length===1)return B1({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=B1({inputs:{input:p},backend:a,attrs:{dim:r}});return o.push(c),c}),u=N8({inputs:l,backend:a,attrs:{axis:r}});return o.forEach(p=>a.disposeIntermediateTensorInfo(p)),u}var JJ={kernelName:Tu,backendName:"webgl",kernelFunc:ZJ},QJ=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=ft(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=` + `}},XJ=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 qJ(u,i,o,l),c=pe({inputs:{x:r},backend:a,attrs:{shape:[u]}}),d=a.runWebGLProgram(p,[c],s);a.disposeIntermediateTensorInfo(c);let h=[...r.shape,i],m=pe({inputs:{x:d},backend:a,attrs:{shape:h}});return a.disposeIntermediateTensorInfo(d),m},KJ={kernelName:vo,backendName:"webgl",kernelFunc:XJ};function Sh(e){let{inputs:t,backend:a}=e,{x:n}=t;if(n.dtype==="complex64"){let r=Qp({inputs:{input:n},backend:a}),s=Sh({inputs:{x:r},backend:a}),i=o0({inputs:{input:n},backend:a}),o=Sh({inputs:{x:i},backend:a}),l=ms({inputs:{real:s,imag:o},backend:a});return a.disposeIntermediateTensorInfo(r),a.disposeIntermediateTensorInfo(s),a.disposeIntermediateTensorInfo(i),a.disposeIntermediateTensorInfo(o),l}else return ec({attrs:{shape:n.shape,dtype:n.dtype,value:n.dtype==="string"?"":0},backend:a})}var YJ={kernelName:Bu,backendName:"webgl",kernelFunc:Sh};function G8(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=Qp({inputs:{input:n},backend:a}),s=G8({inputs:{x:r},backend:a}),i=o0({inputs:{input:n},backend:a}),o=Sh({inputs:{x:i},backend:a}),l=ms({inputs:{real:s,imag:o},backend:a});return a.disposeIntermediateTensorInfo(r),a.disposeIntermediateTensorInfo(s),a.disposeIntermediateTensorInfo(i),a.disposeIntermediateTensorInfo(o),l}else return ec({attrs:{shape:n.shape,dtype:n.dtype,value:1},backend:a})}var ZJ={kernelName:Cu,backendName:"webgl",kernelFunc:G8};function JJ(e){let{inputs:t,backend:a,attrs:n}=e,{axis:r}=n;if(t.length===1)return B1({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=B1({inputs:{input:p},backend:a,attrs:{dim:r}});return o.push(c),c}),u=R8({inputs:l,backend:a,attrs:{axis:r}});return o.forEach(p=>a.disposeIntermediateTensorInfo(p)),u}var QJ={kernelName:Tu,backendName:"webgl",kernelFunc:JJ},eQ=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=ft(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}; @@ -4060,7 +4060,7 @@ return a / b;`,TJ=` setOutput(getX(${o})); } } - `}},eQ=class{constructor(e,t,a){this.variableNames=["x"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"value",type:"float"}],this.outputShape=t.map((m,f)=>m[0]+e[f]+m[1]);let n=e.length,r=ft(n),s=t.map(m=>m[0]).join(","),i=t.map((m,f)=>m[0]+e[f]).join(","),o=ka("rc",n),l=ka("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; + `}},tQ=class{constructor(e,t,a){this.variableNames=["x"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"value",type:"float"}],this.outputShape=t.map((m,f)=>m[0]+e[f]+m[1]);let n=e.length,r=ft(n),s=t.map(m=>m[0]).join(","),i=t.map((m,f)=>m[0]+e[f]).join(","),o=ka("rc",n),l=ka("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; @@ -4084,7 +4084,7 @@ return a / b;`,TJ=` ${h} setOutput(result); } - `}},G8=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 ec({backend:a,attrs:{shape:u,value:i,dtype:r.dtype}})}let o=B().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new eQ(r.shape,s,i):new QJ(r.shape,s,i),l=[[i]];return a.runWebGLProgram(o,[r],r.dtype,l)},tQ={kernelName:wo,backendName:"webgl",kernelFunc:G8},aQ=` + `}},H8=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 ec({backend:a,attrs:{shape:u,value:i,dtype:r.dtype}})}let o=B().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new tQ(r.shape,s,i):new eQ(r.shape,s,i),l=[[i]];return a.runWebGLProgram(o,[r],r.dtype,l)},aQ={kernelName:wo,backendName:"webgl",kernelFunc:H8},nQ=` if(a < 0.0 && floor(b) < b){ return NAN; } @@ -4093,7 +4093,7 @@ return a / b;`,TJ=` } return (round(mod(b, 2.0)) != 1) ? pow(abs(a), b) : sign(a) * pow(abs(a), b); -`,nQ=` +`,rQ=` // 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); @@ -4111,9 +4111,9 @@ return a / b;`,TJ=` bvec4 isNaN = bvec4(isNaN1.x && isNaN2.x, isNaN1.y && isNaN2.y, isNaN1.z && isNaN2.z, isNaN1.w && isNaN2.w); `+sl+` return result; -`,rQ=ha({opSnippet:aQ,packedOpSnippet:nQ}),sQ={kernelName:ko,backendName:"webgl",kernelFunc:rQ};function iQ(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=C.getAxesPermutation(p,o),d=r;c!=null&&(d=Ca({inputs:{x:r},backend:a,attrs:{perm:c}}),p=C.getInnerMostAxes(p.length,o),l.push(d)),C.assertAxesAreInnerMostDims("prod",p,o);let h;if(a.shouldExecuteOnCPU([d])){let m=a.texData.get(d.dataId).values,{outVals:f,outShape:g,outDtype:y}=aj(d.shape,d.dtype,m,p);h=a.makeTensorInfo(g,y,f)}else{let[m,f]=C.computeOutAndReduceShapes(d.shape,p),g=v.sizeFromShape(f),y=pe({inputs:{x:d},backend:a,attrs:{shape:[-1,g]}}),x=Pp(r.dtype),A=il(y,x,"prod",a);h=pe({inputs:{x:A},backend:a,attrs:{shape:m}}),l.push(y),l.push(A)}if(i){l.push(h);let m=C.expandShapeToKeepDim(h.shape,u);h=pe({inputs:{x:h},backend:a,attrs:{shape:m}})}return l.forEach(m=>a.disposeIntermediateTensorInfo(m)),h}var oQ={kernelName:So,backendName:"webgl",kernelFunc:iQ};function lQ(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),p=a.readSync(s.dataId),c=a.readSync(i.dataId),[d,h,m]=nj(l,u,p,s.shape,s.dtype,c,i.shape,o),f=d.map(y=>a.makeTensorInfo([y.length],"int32",y)),g=a.makeTensorInfo(m,s.dtype,h);return f.concat([g])}var uQ={kernelName:$h,backendName:"webgl",kernelFunc:lQ};function dQ(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]=rj(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 pQ={kernelName:Ph,backendName:"webgl",kernelFunc:dQ};function cQ(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),[m,f]=sj(u,r.shape,p,s.shape,s.dtype,c,i.shape,d,h,l);return a.makeTensorInfo(m,s.dtype,f)}var hQ={kernelName:_h,backendName:"webgl",kernelFunc:cQ},H8=e=>{let{backend:t,attrs:a}=e,{start:n,stop:r,step:s,dtype:i}=a,o=ij(n,r,s,i);return t.makeTensorInfo([o.length],i,o)},mQ={kernelName:Nu,backendName:"webgl",kernelFunc:H8},fQ="return 1.0 / x;",gQ=tt({opSnippet:fQ}),yQ={kernelName:Co,backendName:"webgl",kernelFunc:gQ},xQ=En+` +`,sQ=ha({opSnippet:nQ,packedOpSnippet:rQ}),iQ={kernelName:ko,backendName:"webgl",kernelFunc:sQ};function oQ(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=C.getAxesPermutation(p,o),d=r;c!=null&&(d=Ca({inputs:{x:r},backend:a,attrs:{perm:c}}),p=C.getInnerMostAxes(p.length,o),l.push(d)),C.assertAxesAreInnerMostDims("prod",p,o);let h;if(a.shouldExecuteOnCPU([d])){let m=a.texData.get(d.dataId).values,{outVals:f,outShape:g,outDtype:y}=nj(d.shape,d.dtype,m,p);h=a.makeTensorInfo(g,y,f)}else{let[m,f]=C.computeOutAndReduceShapes(d.shape,p),g=v.sizeFromShape(f),y=pe({inputs:{x:d},backend:a,attrs:{shape:[-1,g]}}),x=Pp(r.dtype),A=il(y,x,"prod",a);h=pe({inputs:{x:A},backend:a,attrs:{shape:m}}),l.push(y),l.push(A)}if(i){l.push(h);let m=C.expandShapeToKeepDim(h.shape,u);h=pe({inputs:{x:h},backend:a,attrs:{shape:m}})}return l.forEach(m=>a.disposeIntermediateTensorInfo(m)),h}var lQ={kernelName:So,backendName:"webgl",kernelFunc:oQ};function uQ(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),p=a.readSync(s.dataId),c=a.readSync(i.dataId),[d,h,m]=rj(l,u,p,s.shape,s.dtype,c,i.shape,o),f=d.map(y=>a.makeTensorInfo([y.length],"int32",y)),g=a.makeTensorInfo(m,s.dtype,h);return f.concat([g])}var dQ={kernelName:$h,backendName:"webgl",kernelFunc:uQ};function pQ(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]=sj(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 cQ={kernelName:Ph,backendName:"webgl",kernelFunc:pQ};function hQ(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),[m,f]=ij(u,r.shape,p,s.shape,s.dtype,c,i.shape,d,h,l);return a.makeTensorInfo(m,s.dtype,f)}var mQ={kernelName:_h,backendName:"webgl",kernelFunc:hQ},j8=e=>{let{backend:t,attrs:a}=e,{start:n,stop:r,step:s,dtype:i}=a,o=oj(n,r,s,i);return t.makeTensorInfo([o.length],i,o)},fQ={kernelName:Nu,backendName:"webgl",kernelFunc:j8},gQ="return 1.0 / x;",yQ=tt({opSnippet:gQ}),xQ={kernelName:Co,backendName:"webgl",kernelFunc:yQ},AQ=En+` return (x < 0.0) ? 0.0 : x; -`,AQ=` +`,bQ=` vec4 result = x * vec4(greaterThanEqual(x, vec4(0.0))); bvec4 isNaN = isnan(x); @@ -4123,9 +4123,9 @@ return a / b;`,TJ=` result.a = isNaN.a ? x.a : result.a; return result; -`,bQ=tt({opSnippet:xQ,packedOpSnippet:AQ}),vQ={kernelName:To,backendName:"webgl",kernelFunc:bQ},wQ=En+` +`,vQ=tt({opSnippet:AQ,packedOpSnippet:bQ}),wQ={kernelName:To,backendName:"webgl",kernelFunc:vQ},kQ=En+` return (x < 0.0) ? 0.0 : min(6.0, x); -`,kQ=` +`,IQ=` vec4 result = min(x, vec4(6.)) * vec4(greaterThanEqual(x, vec4(0.0))); bvec4 isNaN = isnan(x); @@ -4135,7 +4135,7 @@ return a / b;`,TJ=` result.a = isNaN.a ? x.a : result.a; return result; -`,IQ=tt({opSnippet:wQ,packedOpSnippet:kQ}),SQ={kernelName:Eo,backendName:"webgl",kernelFunc:IQ},CQ=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=` +`,SQ=tt({opSnippet:kQ,packedOpSnippet:IQ}),CQ={kernelName:Eo,backendName:"webgl",kernelFunc:SQ},TQ=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]/p[0]}, ${u[1]/p[1]}); @@ -4168,7 +4168,7 @@ return a / b;`,TJ=` setOutput(newValue); } - `}},TQ=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=` + `}},NQ=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]/p[0]}, ${u[1]/p[1]}, @@ -4245,7 +4245,7 @@ return a / b;`,TJ=` setOutput(newValue); } - `}};function NQ(e){let{inputs:t,backend:a,attrs:n}=e,{images:r}=t,{alignCorners:s,halfPixelCenters:i,size:o}=n,[l,u]=o,p=B().getBool("WEBGL_PACK_IMAGE_OPERATIONS")?new TQ(r.shape,l,u,s,i):new CQ(r.shape,l,u,s,i);return a.runWebGLProgram(p,[r],"float32")}var RQ={kernelName:Ro,backendName:"webgl",kernelFunc:NQ},EQ=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,m=Math.ceil(d)*2+2;this.userCode=` + `}};function RQ(e){let{inputs:t,backend:a,attrs:n}=e,{images:r}=t,{alignCorners:s,halfPixelCenters:i,size:o}=n,[l,u]=o,p=B().getBool("WEBGL_PACK_IMAGE_OPERATIONS")?new NQ(r.shape,l,u,s,i):new TQ(r.shape,l,u,s,i);return a.runWebGLProgram(p,[r],"float32")}var EQ={kernelName:Ro,backendName:"webgl",kernelFunc:RQ},MQ=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,m=Math.ceil(d)*2+2;this.userCode=` void main() { ivec4 coords = getOutputCoords(); int b = coords[0]; @@ -4326,7 +4326,7 @@ return a / b;`,TJ=` setOutput(accumulator); } - `}};function MQ(e){let{inputs:t,backend:a,attrs:n}=e,{images:r,dy:s}=t,{alignCorners:i}=n,o=new EQ(s.shape,r.shape,i);return a.runWebGLProgram(o,[s],s.dtype)}var $Q={kernelName:Mu,backendName:"webgl",kernelFunc:MQ},PQ=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=` + `}};function $Q(e){let{inputs:t,backend:a,attrs:n}=e,{images:r,dy:s}=t,{alignCorners:i}=n,o=new MQ(s.shape,r.shape,i);return a.runWebGLProgram(o,[s],s.dtype)}var PQ={kernelName:Mu,backendName:"webgl",kernelFunc:$Q},_Q=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]/p[0]}, ${u[1]/p[1]}); @@ -4348,7 +4348,7 @@ return a / b;`,TJ=` setOutput(newValue); } - `}},_Q=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=` + `}},FQ=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]/p[0]}, ${u[1]/p[1]}, @@ -4389,7 +4389,7 @@ return a / b;`,TJ=` setOutput(newValue); } - `}};function FQ(e){let{inputs:t,backend:a,attrs:n}=e,{images:r}=t,{alignCorners:s,halfPixelCenters:i,size:o}=n,[l,u]=o,p=B().getBool("WEBGL_PACK_IMAGE_OPERATIONS")?new _Q(r.shape,l,u,s,i):new PQ(r.shape,l,u,s,i);return a.runWebGLProgram(p,[r],r.dtype)}var DQ={kernelName:No,backendName:"webgl",kernelFunc:FQ},OQ=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,m=Math.ceil(d)*2+2;this.userCode=` + `}};function DQ(e){let{inputs:t,backend:a,attrs:n}=e,{images:r}=t,{alignCorners:s,halfPixelCenters:i,size:o}=n,[l,u]=o,p=B().getBool("WEBGL_PACK_IMAGE_OPERATIONS")?new FQ(r.shape,l,u,s,i):new _Q(r.shape,l,u,s,i);return a.runWebGLProgram(p,[r],r.dtype)}var OQ={kernelName:No,backendName:"webgl",kernelFunc:DQ},zQ=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,m=Math.ceil(d)*2+2;this.userCode=` void main() { ivec4 coords = getOutputCoords(); int b = coords[0]; @@ -4459,7 +4459,7 @@ return a / b;`,TJ=` setOutput(accumulator); } - `}};function zQ(e){let{inputs:t,backend:a,attrs:n}=e,{images:r,dy:s}=t,{alignCorners:i}=n,o=new OQ(s.shape,r.shape,i);return a.runWebGLProgram(o,[s],s.dtype)}var LQ={kernelName:Eu,backendName:"webgl",kernelFunc:zQ},WQ=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 LQ(e){let{inputs:t,backend:a,attrs:n}=e,{images:r,dy:s}=t,{alignCorners:i}=n,o=new zQ(s.shape,r.shape,i);return a.runWebGLProgram(o,[s],s.dtype)}var WQ={kernelName:Eu,backendName:"webgl",kernelFunc:LQ},BQ=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)); @@ -4469,7 +4469,7 @@ return a / b;`,TJ=` ${s} coords = getOutputCoords(); setOutput(getX(${r})); } - `}},BQ=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=ka("rc",a),r=`${n[a-1]} + 1 < ${this.outputShape[a-1]}`,s=`${n[a-2]} + 1 < ${this.outputShape[a-2]}`,i=ft(a);a===1?this.userCode=` + `}},VQ=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=ka("rc",a),r=`${n[a-1]} + 1 < ${this.outputShape[a-1]}`,s=`${n[a-2]} + 1 < ${this.outputShape[a-2]}`,i=ft(a);a===1?this.userCode=` void main(){ int rc = getOutputCoords(); vec4 result = vec4(0.); @@ -4497,7 +4497,7 @@ return a / b;`,TJ=` } 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 p(h){return h[a-1]="("+h[a-1]+" + 1)",h[a-2]="("+h[a-2]+" + 1)",c(h)}function c(h){let m=e.map((y,x)=>d(x,h)),f=m.join(","),g=m.slice(-2).join(",");return`getChannel(getX(${f}), vec2(${g}))`}function d(h,m){return t.indexOf(h)!==-1&&e[h]!==1?`${e[h]} - ${m[h]} - 1`:`${m[h]}`}}};function VQ(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 en({inputs:{x:r},backend:a});let l=B().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new BQ(r.shape,o):new WQ(r.shape,o);return a.runWebGLProgram(l,[r],r.dtype)}var UQ={kernelName:Mo,backendName:"webgl",kernelFunc:VQ},GQ=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 m=e.map((y,x)=>d(x,h)),f=m.join(","),g=m.slice(-2).join(",");return`getChannel(getX(${f}), vec2(${g}))`}function d(h,m){return t.indexOf(h)!==-1&&e[h]!==1?`${e[h]} - ${m[h]} - 1`:`${m[h]}`}}};function UQ(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 en({inputs:{x:r},backend:a});let l=B().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new VQ(r.shape,o):new BQ(r.shape,o);return a.runWebGLProgram(l,[r],r.dtype)}var GQ={kernelName:Mo,backendName:"webgl",kernelFunc:UQ},HQ=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() { @@ -4516,7 +4516,7 @@ return a / b;`,TJ=` } setOutput(outputValue); } - `}},HQ={kernelName:el,backendName:"webgl",kernelFunc:({inputs:e,attrs:t,backend:a})=>{let{image:n}=e,{radians:r,fillValue:s,center:i}=t,o=a,l=new GQ(n.shape,s),[u,p]=C.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)}},jQ=` + `}},jQ={kernelName:el,backendName:"webgl",kernelFunc:({inputs:e,attrs:t,backend:a})=>{let{image:n}=e,{radians:r,fillValue:s,center:i}=t,o=a,l=new HQ(n.shape,s),[u,p]=C.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)}},qQ=` // OpenGL ES does not support round function. // The algorithm is based on banker's rounding. float base = floor(x); @@ -4531,7 +4531,7 @@ return a / b;`,TJ=` return base + 1.0; } } -`,qQ=tt({opSnippet:jQ}),XQ={kernelName:$o,backendName:"webgl",kernelFunc:qQ},KQ="return inversesqrt(x);",YQ=tt({opSnippet:KQ,cpuKernelImpl:oj}),ZQ={kernelName:Po,backendName:"webgl",kernelFunc:YQ},B3=class{constructor(e,t,a,n,r,s,i=!0,o=!1){this.variableNames=["updates","indices","defaultValue"],this.outputShape=s;let l=ft(r.length),u=ft(s.length),p="";a===1?p="i":a===2&&(p="i, j");let c=`getIndices(${p})`,d="";n===1?d="i":n===2&&(d="i, coords[1]");let h=`getUpdates(${d})`,m="";o&&(m="coords[0], coords[1]");let f=`getDefaultValue(${m})`,g=t>1?"strides[j]":"strides";this.userCode=` +`,XQ=tt({opSnippet:qQ}),KQ={kernelName:$o,backendName:"webgl",kernelFunc:XQ},YQ="return inversesqrt(x);",ZQ=tt({opSnippet:YQ,cpuKernelImpl:lj}),JQ={kernelName:Po,backendName:"webgl",kernelFunc:ZQ},B3=class{constructor(e,t,a,n,r,s,i=!0,o=!1){this.variableNames=["updates","indices","defaultValue"],this.outputShape=s;let l=ft(r.length),u=ft(s.length),p="";a===1?p="i":a===2&&(p="i, j");let c=`getIndices(${p})`,d="";n===1?d="i":n===2&&(d="i, coords[1]");let h=`getUpdates(${d})`,m="";o&&(m="coords[0], coords[1]");let f=`getDefaultValue(${m})`,g=t>1?"strides[j]":"strides";this.userCode=` ${l} strides = ${l}(${r}); void main() { @@ -4551,7 +4551,7 @@ return a / b;`,TJ=` } setOutput(mix(${f}, sum, float(found))); } - `}},JQ=class{constructor(e,t,a,n,r,s,i=!0,o=!1){this.variableNames=["updates","indices","defaultValue"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=s;let l=ft(r.length),u=ft(s.length),p="";a===1?p="i":a===2&&(p="i, j");let c=`getIndices(${p})`,d="";n===1?d="i":n===2&&(d="i, coords[1]");let h=`getUpdates(${d})`,m="";o&&(m="coords[0], coords[1]");let f=`getDefaultValue(${m})`,g=t>1?"strides[j]":"strides",y=t>1?"strides[j + 1]":"strides";this.userCode=` + `}},QQ=class{constructor(e,t,a,n,r,s,i=!0,o=!1){this.variableNames=["updates","indices","defaultValue"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=s;let l=ft(r.length),u=ft(s.length),p="";a===1?p="i":a===2&&(p="i, j");let c=`getIndices(${p})`,d="";n===1?d="i":n===2&&(d="i, coords[1]");let h=`getUpdates(${d})`,m="";o&&(m="coords[0], coords[1]");let f=`getDefaultValue(${m})`,g=t>1?"strides[j]":"strides",y=t>1?"strides[j + 1]":"strides";this.userCode=` ${l} strides = ${l}(${r}); void main() { @@ -4588,7 +4588,7 @@ return a / b;`,TJ=` } setOutput(mix(${f}, sum, found)); } - `}};function QQ(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}=C.calculateShapes(s,r,i),d=[c/u,u];if(c===0)return a.makeTensorInfo(i,r.dtype);let h=pe({inputs:{x:r},backend:a,attrs:{shape:[l,o]}}),m=pe({inputs:{x:s},backend:a,attrs:{shape:[l,u]}}),f=a.makeTensorInfo([],"float32",new Float32Array([0])),g;B().getBool("WEBGL_PACK")?g=new JQ(l,o,h.shape.length,m.shape.length,p,d):g=new B3(l,o,h.shape.length,m.shape.length,p,d);let y=a.runWebGLProgram(g,[m,h,f],m.dtype),x=pe({inputs:{x:y},backend:a,attrs:{shape:i}});return a.disposeIntermediateTensorInfo(h),a.disposeIntermediateTensorInfo(m),a.disposeIntermediateTensorInfo(y),a.disposeIntermediateTensorInfo(f),x}var eee={kernelName:_o,backendName:"webgl",kernelFunc:QQ},tee=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=B().getNumber("WEBGL_VERSION")===2?r:s,o=n==="left"?"<":"<=";this.userCode=` + `}};function eee(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}=C.calculateShapes(s,r,i),d=[c/u,u];if(c===0)return a.makeTensorInfo(i,r.dtype);let h=pe({inputs:{x:r},backend:a,attrs:{shape:[l,o]}}),m=pe({inputs:{x:s},backend:a,attrs:{shape:[l,u]}}),f=a.makeTensorInfo([],"float32",new Float32Array([0])),g;B().getBool("WEBGL_PACK")?g=new QQ(l,o,h.shape.length,m.shape.length,p,d):g=new B3(l,o,h.shape.length,m.shape.length,p,d);let y=a.runWebGLProgram(g,[m,h,f],m.dtype),x=pe({inputs:{x:y},backend:a,attrs:{shape:i}});return a.disposeIntermediateTensorInfo(h),a.disposeIntermediateTensorInfo(m),a.disposeIntermediateTensorInfo(y),a.disposeIntermediateTensorInfo(f),x}var tee={kernelName:_o,backendName:"webgl",kernelFunc:eee},aee=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=B().getNumber("WEBGL_VERSION")===2?r:s,o=n==="left"?"<":"<=";this.userCode=` int findBound(int batch, float value) { int left = 0; int right = numInputs; @@ -4613,7 +4613,7 @@ return a / b;`,TJ=` setOutput(float(findBound(batch, value))); } - `}};function aee(e){let{inputs:t,backend:a,attrs:n}=e,{sortedSequence:r,values:s}=t,{side:i}=n,o=new tee(r.shape[0],r.shape[1],s.shape[1],i),l=[[r.shape[1]]];return a.runWebGLProgram(o,[r,s],"int32",l)}var nee={kernelName:Do,backendName:"webgl",kernelFunc:aee},ree=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); -`,lee=tt({opSnippet:oee}),uee={kernelName:Oo,backendName:"webgl",kernelFunc:lee},dee=Ju+` +`,uee=tt({opSnippet:lee}),dee={kernelName:Oo,backendName:"webgl",kernelFunc:uee},pee=Ju+` return 1.0 / (1.0 + exp(-1.0 * x)); -`,pee=` +`,cee=` vec4 result = 1.0 / (1.0 + exp(-1.0 * x)); bvec4 isNaN = isnan(x); @@ -4641,20 +4641,20 @@ return a / b;`,TJ=` result.a = isNaN.a ? x.a : result.a; return result; -`,cee=tt({opSnippet:dee,packedOpSnippet:pee,cpuKernelImpl:uj}),hee={kernelName:Bo,backendName:"webgl",kernelFunc:cee},mee=` +`,hee=tt({opSnippet:pee,packedOpSnippet:cee,cpuKernelImpl:dj}),mee={kernelName:Bo,backendName:"webgl",kernelFunc:hee},fee=` if (isnan(x)) { return 0.0; } return sign(x); -`,fee=tt({opSnippet:mee}),gee={kernelName:Wo,backendName:"webgl",kernelFunc:fee},yee=Ju+` +`,gee=tt({opSnippet:fee}),yee={kernelName:Wo,backendName:"webgl",kernelFunc:gee},xee=Ju+` return sin(x); -`,xee=` +`,Aee=` vec4 result = sin(x); bvec4 isNaN = isnan(x); ${sl} return result; -`,Aee=tt({opSnippet:yee,packedOpSnippet:xee}),bee={kernelName:zo,backendName:"webgl",kernelFunc:Aee},vee=` +`,bee=tt({opSnippet:xee,packedOpSnippet:Aee}),vee={kernelName:zo,backendName:"webgl",kernelFunc:bee},wee=` float e2x = exp(x); return (e2x - 1.0 / e2x) / 2.0; -`,wee=tt({opSnippet:vee}),kee={kernelName:Lo,backendName:"webgl",kernelFunc:wee},Iee=` +`,kee=tt({opSnippet:wee}),Iee={kernelName:Lo,backendName:"webgl",kernelFunc:kee},See=` float epsilon = 1.1920928955078125e-7; float threshold = log(epsilon) + 2.0; @@ -4674,17 +4674,17 @@ return a / b;`,TJ=` result = log(exp_x + 1.0); } return result; -`,See=tt({opSnippet:Iee}),Cee={kernelName:Vo,backendName:"webgl",kernelFunc:See},Tee=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,x)=>y*x),l=[[0,0]];l.push(...i);for(let y=1+s.length;ya.disposeIntermediateTensorInfo(y)),g},Nee={kernelName:_u,backendName:"webgl",kernelFunc:Tee};function Ree(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: +`,Cee=tt({opSnippet:See}),Tee={kernelName:Vo,backendName:"webgl",kernelFunc:Cee},Nee=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,x)=>y*x),l=[[0,0]];l.push(...i);for(let y=1+s.length;ya.disposeIntermediateTensorInfo(y)),g},Ree={kernelName:_u,backendName:"webgl",kernelFunc:Nee};function Eee(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),p=a.readSync(i.dataId)[0],[c,d,h,m,f]=pj(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([m.length],"bool",new Uint8Array(m.map(g=>Number(g)))),a.makeTensorInfo([f.length],n.dtype,new Int32Array(f))]}var Eee={kernelName:Ip,backendName:"webgl",kernelFunc:Ree};function Mee(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]=cj(o,n.shape,n.dtype,i,l);return[a.makeTensorInfo(p,n.dtype,u),a.makeTensorInfo([c.length],s.dtype,new Int32Array(c))]}var $ee={kernelName:Du,backendName:"webgl",kernelFunc:Mee};function Pee(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,m,f]=cj(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([m.length],"bool",new Uint8Array(m.map(g=>Number(g)))),a.makeTensorInfo([f.length],n.dtype,new Int32Array(f))]}var Mee={kernelName:Ip,backendName:"webgl",kernelFunc:Eee};function $ee(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]=hj(o,n.shape,n.dtype,i,l);return[a.makeTensorInfo(p,n.dtype,u),a.makeTensorInfo([c.length],s.dtype,new Int32Array(c))]}var Pee={kernelName:Du,backendName:"webgl",kernelFunc:$ee};function _ee(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,p]=h8(i,n.shape,n.dtype,o,l,!0);return a.makeTensorInfo(p,n.dtype,u)}var _ee={kernelName:Ou,backendName:"webgl",kernelFunc:Pee};function Fee(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]=m8(i,n.shape,n.dtype,o,l,!0);return a.makeTensorInfo(p,n.dtype,u)}var Fee={kernelName:Ou,backendName:"webgl",kernelFunc:_ee};function Dee(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,p]=h8(i,n.shape,n.dtype,o,l);return a.makeTensorInfo(p,n.dtype,u)}var Dee={kernelName:zu,backendName:"webgl",kernelFunc:Fee};function Oee(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}=C.calculateShapes(s,r,o),h=!1;if(s.dtype==="string"){let y=a.bufferSync(r),x=a.bufferSync(s),A=v.decodeString(a.readSync(i.dataId)[0]),b=lj(y,x,o,d,p,u,l,c,A,h);return a.makeTensorInfo(o,b.dtype,b.values)}let m=new B3(u,l,r.shape.length,s.shape.length,c,[d,1],h),f=a.runWebGLProgram(m,[s,r,i],s.dtype),g=pe({inputs:{x:f},backend:a,attrs:{shape:o}});return a.disposeIntermediateTensorInfo(f),g}var zee={kernelName:jo,backendName:"webgl",kernelFunc:Oee};function Lee(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=C.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 m=Qu({inputs:{x:r},backend:a,attrs:{begin:p,size:h}});return p[o]+=d,m})}var Wee={kernelName:Fu,backendName:"webgl",kernelFunc:Lee},H5="return sqrt(x);",Bee=tt({opSnippet:H5,packedOpSnippet:H5,cpuKernelImpl:hj}),Vee={kernelName:Uo,backendName:"webgl",kernelFunc:Bee},Uee="return x * x;",Gee=tt({opSnippet:Uee}),Hee={kernelName:Sp,backendName:"webgl",kernelFunc:Gee},j5="return (a - b) * (a - b);",jee=ha({opSnippet:j5,packedOpSnippet:j5}),qee={kernelName:qo,backendName:"webgl",kernelFunc:jee};function Xee(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t;if(r.dtype!=="string")throw new Error("Input must be of datatype string");let s=a.readSync(r.dataId),i=C.fromUint8ToStringArray(s),o=mj(i,"string",n);return a.makeTensorInfo(r.shape,"string",o)}var Kee={kernelName:Cp,backendName:"webgl",kernelFunc:Xee};function Yee({inputs:e,attrs:t,backend:a}){let{x:n}=e,r=En+` + ${s.shape}`);let i=a.readSync(n.dataId),o=a.readSync(r.dataId),l=a.readSync(s.dataId),[u,p]=m8(i,n.shape,n.dtype,o,l);return a.makeTensorInfo(p,n.dtype,u)}var Oee={kernelName:zu,backendName:"webgl",kernelFunc:Dee};function zee(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}=C.calculateShapes(s,r,o),h=!1;if(s.dtype==="string"){let y=a.bufferSync(r),x=a.bufferSync(s),A=v.decodeString(a.readSync(i.dataId)[0]),b=uj(y,x,o,d,p,u,l,c,A,h);return a.makeTensorInfo(o,b.dtype,b.values)}let m=new B3(u,l,r.shape.length,s.shape.length,c,[d,1],h),f=a.runWebGLProgram(m,[s,r,i],s.dtype),g=pe({inputs:{x:f},backend:a,attrs:{shape:o}});return a.disposeIntermediateTensorInfo(f),g}var Lee={kernelName:jo,backendName:"webgl",kernelFunc:zee};function Wee(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=C.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 m=Qu({inputs:{x:r},backend:a,attrs:{begin:p,size:h}});return p[o]+=d,m})}var Bee={kernelName:Fu,backendName:"webgl",kernelFunc:Wee},j5="return sqrt(x);",Vee=tt({opSnippet:j5,packedOpSnippet:j5,cpuKernelImpl:mj}),Uee={kernelName:Uo,backendName:"webgl",kernelFunc:Vee},Gee="return x * x;",Hee=tt({opSnippet:Gee}),jee={kernelName:Sp,backendName:"webgl",kernelFunc:Hee},q5="return (a - b) * (a - b);",qee=ha({opSnippet:q5,packedOpSnippet:q5}),Xee={kernelName:qo,backendName:"webgl",kernelFunc:qee};function Kee(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t;if(r.dtype!=="string")throw new Error("Input must be of datatype string");let s=a.readSync(r.dataId),i=C.fromUint8ToStringArray(s),o=fj(i,"string",n);return a.makeTensorInfo(r.shape,"string",o)}var Yee={kernelName:Cp,backendName:"webgl",kernelFunc:Kee};function Zee({inputs:e,attrs:t,backend:a}){let{x:n}=e,r=En+` return x > 0.0 ? 1.0 : float(${t.alpha}); - `,s=new Yn(n.shape,r);return a.runWebGLProgram(s,[n],n.dtype)}var Zee={kernelName:ds,backendName:"webgl",kernelFunc:Yee},Jee=class{constructor(e,t,a){this.variableNames=["x"],this.outputShape=a;let n=a.length,r=ft(a.length),s=ft(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 Yn(n.shape,r);return a.runWebGLProgram(s,[n],n.dtype)}var Jee={kernelName:ds,backendName:"webgl",kernelFunc:Zee},Qee=class{constructor(e,t,a){this.variableNames=["x"],this.outputShape=a;let n=a.length,r=ft(a.length),s=ft(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}); @@ -4692,15 +4692,15 @@ return a / b;`,TJ=` ${s} coords = getOutputCoords(); setOutput(getX(${i})); } - `}};function Qee(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:m,isIdentity:f,sliceDim0:g,isSimpleSlice:y,begin:x,end:A,strides:b}=Nt.sliceInfo(r.shape,s,i,o,l,u,p,c,d),w;if(f)w=pe({inputs:{x:r},backend:a,attrs:{shape:m}});else if(g||y){v.assert(r.shape.length>=1,()=>`Input must have rank at least 1, got: ${r.shape.length}`);let T=Nt.computeOutShape(x,A,b),N=Qu({inputs:{x:r},backend:a,attrs:{begin:x,size:T}});w=pe({inputs:{x:N},backend:a,attrs:{shape:m}}),a.disposeIntermediateTensorInfo(N)}else if(a.shouldExecuteOnCPU([r])){let T=a.readSync(r.dataId),N=_e(r.shape,r.dtype,T),M=fj(h,N,b,x);w=a.makeTensorInfo(m,r.dtype,M.values)}else{let T=new Jee(x,b,h);w=a.runWebGLProgram(T,[r],r.dtype)}let I=pe({inputs:{x:w},backend:a,attrs:{shape:m}});return a.disposeIntermediateTensorInfo(w),I}var ete={kernelName:Xo,backendName:"webgl",kernelFunc:Qee};function tte(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),[m,f]=gj(d,h,r,s,i,o,l,u);return[a.makeTensorInfo([m.length],"string",m),a.makeTensorInfo(c.shape,"int32",f)]}var ate={kernelName:Lu,backendName:"webgl",kernelFunc:tte};function nte(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]=yj(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 rte={kernelName:Tp,backendName:"webgl",kernelFunc:nte};function ste(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=xj(i,r);return a.makeTensorInfo(s.shape,"int32",o)}var ite={kernelName:Np,backendName:"webgl",kernelFunc:ste},ote="return tan(x);",lte=tt({opSnippet:ote}),ute={kernelName:Yo,backendName:"webgl",kernelFunc:lte},dte=` + `}};function ete(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:m,isIdentity:f,sliceDim0:g,isSimpleSlice:y,begin:x,end:A,strides:b}=Nt.sliceInfo(r.shape,s,i,o,l,u,p,c,d),w;if(f)w=pe({inputs:{x:r},backend:a,attrs:{shape:m}});else if(g||y){v.assert(r.shape.length>=1,()=>`Input must have rank at least 1, got: ${r.shape.length}`);let T=Nt.computeOutShape(x,A,b),N=Qu({inputs:{x:r},backend:a,attrs:{begin:x,size:T}});w=pe({inputs:{x:N},backend:a,attrs:{shape:m}}),a.disposeIntermediateTensorInfo(N)}else if(a.shouldExecuteOnCPU([r])){let T=a.readSync(r.dataId),N=_e(r.shape,r.dtype,T),M=gj(h,N,b,x);w=a.makeTensorInfo(m,r.dtype,M.values)}else{let T=new Qee(x,b,h);w=a.runWebGLProgram(T,[r],r.dtype)}let I=pe({inputs:{x:w},backend:a,attrs:{shape:m}});return a.disposeIntermediateTensorInfo(w),I}var tte={kernelName:Xo,backendName:"webgl",kernelFunc:ete};function ate(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),[m,f]=yj(d,h,r,s,i,o,l,u);return[a.makeTensorInfo([m.length],"string",m),a.makeTensorInfo(c.shape,"int32",f)]}var nte={kernelName:Lu,backendName:"webgl",kernelFunc:ate};function rte(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]=xj(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 ste={kernelName:Tp,backendName:"webgl",kernelFunc:rte};function ite(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=Aj(i,r);return a.makeTensorInfo(s.shape,"int32",o)}var ote={kernelName:Np,backendName:"webgl",kernelFunc:ite},lte="return tan(x);",ute=tt({opSnippet:lte}),dte={kernelName:Yo,backendName:"webgl",kernelFunc:ute},pte=` float e2x = exp(-2.0 * abs(x)); return sign(x) * (1.0 - e2x) / (1.0 + e2x); -`,pte=tt({opSnippet:dte}),cte={kernelName:Zo,backendName:"webgl",kernelFunc:pte};function hte(e){let{inputs:t,backend:a,attrs:n}=e,{tensor:r,indices:s,updates:i}=t,{}=n,{sliceRank:o,numUpdates:l,sliceSize:u,strides:p,outputSize:c}=C.calculateShapes(i,s,r.shape),d=[c/u,u];if(c===0)return a.makeTensorInfo(r.shape,s.dtype);let h=pe({inputs:{x:s},backend:a,attrs:{shape:[l,o]}}),m=pe({inputs:{x:i},backend:a,attrs:{shape:[l,u]}}),f=pe({inputs:{x:r},backend:a,attrs:{shape:d}}),g=new B3(l,o,h.shape.length,m.shape.length,p,d,!1,!0),y=a.runWebGLProgram(g,[m,h,f],f.dtype),x=pe({inputs:{x:y},backend:a,attrs:{shape:r.shape}});return a.disposeIntermediateTensorInfo(h),a.disposeIntermediateTensorInfo(m),a.disposeIntermediateTensorInfo(f),a.disposeIntermediateTensorInfo(y),x}var mte={kernelName:Fo,backendName:"webgl",kernelFunc:hte},fte=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=_e(r.shape,r.dtype,l),p=bj(u,s);return a.makeTensorInfo(p.shape,p.dtype,p.values)}let i=new fte(r.shape,s);return a.runWebGLProgram(i,[r],r.dtype)}var yte={kernelName:us,backendName:"webgl",kernelFunc:j8},xte=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 yte(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=_e(r.shape,r.dtype,l),p=vj(u,s);return a.makeTensorInfo(p.shape,p.dtype,p.values)}let i=new gte(r.shape,s);return a.runWebGLProgram(i,[r],r.dtype)}var xte={kernelName:us,backendName:"webgl",kernelFunc:q8},Ate=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]; @@ -4740,7 +4740,7 @@ return a / b;`,TJ=` setOutput(float(i1)); } } - `}},Ate=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=` + `}},bte=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(); @@ -4774,7 +4774,7 @@ return a / b;`,TJ=` setOutput(x0 >= x1 ? float(i0) : float(i1)); } - `}};function zs(e,t){t!==null&&e.disposeIntermediateTensorInfo(t)}function q5(e){let t=1;for(;tl){let M=a.readSync(r.dataId),[$,E]=vj(M,u,r.dtype,s,i);return[a.makeTensorInfo($.shape,$.dtype,$.values),a.makeTensorInfo(E.shape,E.dtype,E.values)]}if(s===0)return u[u.length-1]=0,[a.makeTensorInfo(u,r.dtype,[]),a.makeTensorInfo(u,"int32",[])];if(p===1)return[r,ec({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,m=v.sizeFromShape(u)/p,f=pe({inputs:{x:h},attrs:{shape:[m,p]},backend:a});d&&zs(a,h);let g=q5(s),y=q5(p),x=null,A=()=>x===null?[f,f]:[f,x],b=(M,$,E)=>{let S=A(),_=new xte(E),O=[[p],[x===null?1:0],[Number.NEGATIVE_INFINITY],[M],[$]],W=x;x=a.runWebGLProgram(_,S,"int32",O),zs(a,W)};for(let M=1;M=1;E/=2)b($,E,[m,y])}for(let M=y;M>g;M/=2){let $=A(),E=new Ate([m,M/2]),S=[[p],[x===null?1:0],[g]],_=x;x=a.runWebGLProgram(E,$,"int32",S),zs(a,_);let O=g/2,W=O*2;for(let P=O;P>=1;P/=2)b(W,P,x.shape)}let w=x;x=Qu({inputs:{x},backend:a,attrs:{begin:0,size:[m,s]}}),zs(a,w);let I=z8({inputs:{x:f,indices:x},backend:a,attrs:{axis:1,batchDims:1}});zs(a,f);let T=u.slice(0,-1);T.push(s),w=x,x=pe({inputs:{x},attrs:{shape:T},backend:a}),zs(a,w);let N=I;return I=pe({inputs:{x:I},attrs:{shape:T},backend:a}),zs(a,N),[I,x]}var vte={kernelName:Jo,backendName:"webgl",kernelFunc:bte},wte=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 zs(e,t){t!==null&&e.disposeIntermediateTensorInfo(t)}function X5(e){let t=1;for(;tl){let M=a.readSync(r.dataId),[$,E]=wj(M,u,r.dtype,s,i);return[a.makeTensorInfo($.shape,$.dtype,$.values),a.makeTensorInfo(E.shape,E.dtype,E.values)]}if(s===0)return u[u.length-1]=0,[a.makeTensorInfo(u,r.dtype,[]),a.makeTensorInfo(u,"int32",[])];if(p===1)return[r,ec({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,m=v.sizeFromShape(u)/p,f=pe({inputs:{x:h},attrs:{shape:[m,p]},backend:a});d&&zs(a,h);let g=X5(s),y=X5(p),x=null,A=()=>x===null?[f,f]:[f,x],b=(M,$,E)=>{let S=A(),_=new Ate(E),O=[[p],[x===null?1:0],[Number.NEGATIVE_INFINITY],[M],[$]],W=x;x=a.runWebGLProgram(_,S,"int32",O),zs(a,W)};for(let M=1;M=1;E/=2)b($,E,[m,y])}for(let M=y;M>g;M/=2){let $=A(),E=new bte([m,M/2]),S=[[p],[x===null?1:0],[g]],_=x;x=a.runWebGLProgram(E,$,"int32",S),zs(a,_);let O=g/2,W=O*2;for(let P=O;P>=1;P/=2)b(W,P,x.shape)}let w=x;x=Qu({inputs:{x},backend:a,attrs:{begin:0,size:[m,s]}}),zs(a,w);let I=L8({inputs:{x:f,indices:x},backend:a,attrs:{axis:1,batchDims:1}});zs(a,f);let T=u.slice(0,-1);T.push(s),w=x,x=pe({inputs:{x},attrs:{shape:T},backend:a}),zs(a,w);let N=I;return I=pe({inputs:{x:I},attrs:{shape:T},backend:a}),zs(a,N),[I,x]}var wte={kernelName:Jo,backendName:"webgl",kernelFunc:vte},kte=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) { @@ -4886,7 +4886,7 @@ return a / b;`,TJ=` } setOutput(outputValue); } - `}};function kte(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,[m,f]=u!=null?u:[c,d],g=[p,m,f,h],y=new wte(c,d,i,o,l,g);return a.runWebGLProgram(y,[r,s],"float32")}var Ite={kernelName:Qo,backendName:"webgl",kernelFunc:kte};function Ste(e){let{inputs:t,attrs:a,backend:n}=e,{axis:r}=a,{x:s}=t;ju(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}=wj(i,r,s.shape,s.dtype);return[n.makeTensorInfo(l,s.dtype,o),n.makeTensorInfo([u.length],"int32",u)]}var Cte={kernelName:Rp,backendName:"webgl",kernelFunc:Ste};function Tte(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 f=0;fa.disposeIntermediateTensorInfo(f)),m}var Nte={kernelName:Wu,backendName:"webgl",kernelFunc:Tte},Rte=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=` + `}};function Ite(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,[m,f]=u!=null?u:[c,d],g=[p,m,f,h],y=new kte(c,d,i,o,l,g);return a.runWebGLProgram(y,[r,s],"float32")}var Ste={kernelName:Qo,backendName:"webgl",kernelFunc:Ite};function Cte(e){let{inputs:t,attrs:a,backend:n}=e,{axis:r}=a,{x:s}=t;ju(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}=kj(i,r,s.shape,s.dtype);return[n.makeTensorInfo(l,s.dtype,o),n.makeTensorInfo([u.length],"int32",u)]}var Tte={kernelName:Rp,backendName:"webgl",kernelFunc:Cte};function Nte(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 f=0;fa.disposeIntermediateTensorInfo(f)),m}var Rte={kernelName:Wu,backendName:"webgl",kernelFunc:Nte},Ete=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); `,d="";r%a>0&&(d=` if (inIdx < 0 || inIdx >= ${r}) { @@ -4992,9 +4992,9 @@ return a / b;`,TJ=` } setOutput(${l}); } - `}};function Ete(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,segmentIds:s}=t,{numSegments:i}=n,o=r.shape.length,l=[],u=0,p=C.getAxesPermutation([u],o),c=r;p!=null&&(c=Ca({inputs:{x:r},backend:a,attrs:{perm:p}}),l.push(c),u=C.getInnerMostAxes(1,o)[0]);let d=C.segment_util.computeOutShape(c.shape,u,i),h=v.sizeFromShape([c.shape[u]]),m=pe({inputs:{x:c},backend:a,attrs:{shape:[-1,h]}});l.push(m);let f=Pp(r.dtype),g=(b,w,I,T,N)=>{let M=b.shape[0],$=b.shape[1],E=C.segment_util.segOpComputeOptimalWindowSize($,N),S={windowSize:E,inSize:$,batchSize:M,numSegments:N},_=new Rte(S,w),O=a.compileAndRun(_,[b,I],T);if(l.push(O),O.shape[1]===N)return O;let W=H8({backend:a,attrs:{start:0,stop:N,step:1,dtype:"float32"}}),P=j8({inputs:{x:W},backend:a,attrs:{reps:[$/E]}});return l.push(W),l.push(P),g(O,w,P,T,N)},y=g(m,"unsortedSegmentSum",s,f,i),x=pe({inputs:{x:y},backend:a,attrs:{shape:d}}),A=x;if(p!=null){l.push(x);let b=C.getUndoAxesPermutation(p);A=Ca({inputs:{x:A},backend:a,attrs:{perm:b}})}return l.forEach(b=>a.disposeIntermediateTensorInfo(b)),A}var Mte={kernelName:Ep,backendName:"webgl",kernelFunc:Ete},$te=[fq,yq,bq,kq,Sq,Nq,Eq,$q,Dq,zq,Bq,Gq,qq,Zq,eX,aX,rX,lX,dX,cX,gX,kX,SX,RX,MX,OX,LX,UX,Jj,jX,ZX,tK,oK,dK,cK,mK,gK,bK,kK,CK,NK,EK,$K,FK,OK,BK,UK,jK,KK,ZK,tY,sY,uY,cY,fY,gY,xY,bY,wY,IY,CY,EY,PY,DY,zY,BY,GY,XY,JY,Zj,eZ,KX,nZ,iZ,uZ,eq,hZ,yZ,AZ,kZ,CZ,EZ,PZ,OZ,BZ,GZ,jZ,YZ,JZ,eJ,rJ,iJ,lJ,dJ,cJ,gJ,bJ,IJ,$J,nq,DJ,LJ,VJ,HJ,PX,XJ,YJ,JJ,tQ,sQ,aq,oQ,uQ,pQ,hQ,mQ,_X,NJ,yQ,vQ,SQ,sq,RQ,$Q,DQ,LQ,UQ,HQ,XQ,ZQ,eee,nee,iee,uee,hee,gee,bee,kee,vX,EJ,Cee,Nee,Eee,$ee,_ee,Dee,zee,Wee,Vee,Hee,qee,Kee,Zee,ete,ate,rte,ite,RJ,cq,ute,cte,mte,yte,vte,Ite,hq,Cte,Nte,Mte,KJ];for(let e of $te)xn(e);var nt;(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"})(nt||(nt={}));var np;(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"})(np||(np={}));var q8;function Pte(e){q8=e.wasm.cwrap(Yr,null,["number","array","number","number","array","number","number","number","number","number","number","number","number"])}function _te(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,m=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}.`);m=N.id}let f=o==null?0:a.dataIdMap.get(o.dataId).id,g=np[p];if(g==null)throw new Error(`${p} activation not yet supported for FusedConv2D in the wasm backend.`);let y=l?r.shape[2]:r.shape[1],x=u?s.shape[1]:s.shape[2],A=al.assertAndGetBroadcastShape(r.shape.slice(0,-2),s.shape.slice(0,-2)),b=a.makeOutput([...A,y,x],r.dtype),w=a.dataIdMap.get(b.dataId).id,I=new Uint8Array(new Int32Array(r.shape).buffer),T=new Uint8Array(new Int32Array(s.shape).buffer);return q8(d,I,r.shape.length,h,T,s.shape.length,l,u,g,m,f,c||0,w),b}var Fte={kernelName:Yr,backendName:"wasm",setupFunc:Pte,kernelFunc:_te};function Qe(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,nt[o.dtype],p),u}return{kernelName:e,backendName:"wasm",setupFunc:n,kernelFunc:r}}var Dte=Qe(iu),Ote=Qe(oi),zte=Qe(li);function Gt(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,m=C.assertAndGetBroadcastShape(u.shape,p.shape),f=o.makeOutput(m,h);if(v.sizeFromShape(m)===0)return f;let g=new Uint8Array(new Int32Array(u.shape).buffer),y=new Uint8Array(new Int32Array(p.shape).buffer),x=o.dataIdMap.get(f.dataId).id;return n(c,g,u.shape.length,d,y,p.shape.length,nt[u.dtype],x),f}return{kernelName:e,backendName:"wasm",setupFunc:r,kernelFunc:s}}var Lte=!0,Wte=Gt(os,Lte),X8;function Bte(e){X8=e.wasm.cwrap(ui,null,["array","number","number","number"])}function Vte(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 X8(s,r.length,nt[n.dtype],i),n}var Ute={kernelName:ui,backendName:"wasm",setupFunc:Bte,kernelFunc:Vte};function l0(e){let{inputs:{x:t},backend:a}=e;if(t.dtype==="string")return Ve(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 Gte={kernelName:qi,backendName:"wasm",kernelFunc:l0},K8;function Hte(e){K8=e.wasm.cwrap(wr,null,["number","array","number","number","number","array","number"])}function is(e){let{inputs:t,backend:a,attrs:n}=e,[r,s]=qte(t.x.shape,n.perm),i=!0;for(let m=0;m=r&&(s===-1||n[s]>n[i])&&(s=i);n[s]=r}return[a,n]}var Xte={kernelName:wr,backendName:"wasm",kernelFunc:is,setupFunc:Hte};function fs(e,t,a){let n=e.shape,r=e.shape.length,s=v.parseAxisParam(t,n),i=s,o=C.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 bae={kernelName:Ru,backendName:"wasm",kernelFunc:La},nw;function vae(e){nw=e.wasm.cwrap(xi,null,["number","array","number","number","array","number","number","number","number"])}function wae(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],m=r.shape.slice(0,-2),f=s.shape.slice(0,-2),g=v.sizeFromShape(m),y=v.sizeFromShape(f),x=al.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 A=i?[g,p,d]:[g,d,p],b=o?[y,h,c]:[y,c,h],w=La({inputs:{x:r},backend:a,attrs:{shape:A}}),I=La({inputs:{x:s},backend:a,attrs:{shape:b}}),T=a.dataIdMap.get(w.dataId).id,N=a.dataIdMap.get(I.dataId).id,M=i?w.shape[2]:w.shape[1],$=o?I.shape[1]:I.shape[2],E=Math.max(g,y),S=a.makeOutput([E,M,$],w.dtype),_=a.dataIdMap.get(S.dataId).id,O=new Uint8Array(new Int32Array(w.shape).buffer),W=new Uint8Array(new Int32Array(I.shape).buffer);return nw(T,O,w.shape.length,N,W,I.shape.length,i,o,_),a.disposeData(w.dataId),a.disposeData(I.dataId),S.shape=x,S}var kae={kernelName:xi,backendName:"wasm",setupFunc:vae,kernelFunc:wae};function si(e){let{inputs:{x:t},attrs:{begin:a,size:n},backend:r}=e,[s,i]=Nt.parseSliceParams(t,a,n),o=Nt.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 m=Nt.computeFlatOffset(s,p);return t.dtype==="string"?c.stringBytes=l.slice(m,m+v.sizeFromShape(i)):r.typedArrayFromHeap(u).set(l.subarray(m,m+v.sizeFromShape(i))),u}if(t.dtype==="string"){let m=Ah(l,s,i,t.shape,t.dtype);return c.stringBytes=m,u}let d=r.typedArrayFromHeap(u),h=t.shape.length;if(h===2)Iae(l,p[0],d,s,i);else if(h===3)Sae(l,p[0],p[1],d,s,i);else if(h===4)Cae(l,p[0],p[1],p[2],d,s,i);else{let m=Ah(l,s,i,t.shape,t.dtype);d.set(m)}return u}function Iae(e,t,a,n,r){let s=0,i=n[0],o=n[1],l=i+r[0];for(let u=i;uy*x),l=C.getReshaped(r.shape,s,o),u=C.getPermuted(l.length,s.length),p=C.getReshapedPermuted(r.shape,s,o),c=C.getSliceBeginCoords(i,s.length),d=C.getSliceSize(p,i,s.length),h=La({inputs:{x:r},backend:a,attrs:{shape:l}}),m=is({inputs:{x:h},backend:a,attrs:{perm:u}}),f=La({inputs:{x:m},backend:a,attrs:{shape:p}}),g=si({inputs:{x:f},backend:a,attrs:{begin:c,size:d}});return a.disposeData(h.dataId),a.disposeData(m.dataId),a.disposeData(f.dataId),g}var Rae={kernelName:du,backendName:"wasm",kernelFunc:Nae},rw;function Eae(e){rw=e.wasm.cwrap(Ai,null,["number","number","boolean","number","number","number"])}function Mae(e){let{backend:t,inputs:a,attrs:n}=e,{x:r,weights:s}=a,{size:i}=n,o=s.shape.reduce((c,d)=>c*d,1)!==0,l=r.shape.length===1?[i]:[r.shape[0],i],u=t.makeOutput(l,s.dtype);function p(c){return t.dataIdMap.get(c.dataId).id}return rw(p(r),i,o,p(s),nt[s.dtype],p(u)),u}var $ae={kernelName:Ai,backendName:"wasm",setupFunc:Eae,kernelFunc:Mae},Pae=!0,_ae=Gt(pu,Pae);function Fae(e){let{inputs:t,backend:a}=e,{s0:n,s1:r}=t,s=a.typedArrayFromHeap(n),i=a.typedArrayFromHeap(r),o=C.assertAndGetBroadcastShape(Array.from(s),Array.from(i));return a.makeOutput([o.length],"int32",void 0,new Int32Array(o))}var Dae={kernelName:cu,backendName:"wasm",kernelFunc:Fae};function gs(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 Oae={kernelName:bi,backendName:"wasm",kernelFunc:gs},zae=Qe(vi),sw;function Lae(e){sw=e.wasm.cwrap(ls,null,["number","number","number","number"])}function Wae(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 sw(o,s,i,u),l}var Bae={kernelName:ls,backendName:"wasm",setupFunc:Lae,kernelFunc:Wae};function iw(e){let{inputs:t,backend:a}=e,n=v.parseAxisParam(e.attrs.axis,t[0].shape)[0],r=t.map(h=>h.shape);C.assertParamsConsistent(r,n);let s=C.computeOutShape(t.map(h=>h.shape),n),i=t.filter(h=>v.sizeFromShape(h.shape)>0);if(i.length===1)return l0({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(A=>{let b=[-1,v.sizeFromShape(A.shape.slice(n))];return La({inputs:{x:A},backend:a,attrs:{shape:b}})}),m=h.map(A=>({vals:a.readSync(A.dataId),shape:A.shape}));s=C.computeOutShape(h.map(A=>A.shape),1);let f=h[0].shape[0]===1,g=m3(m,s,t[0].dtype,f),y=C.computeOutShape(i.map(A=>A.shape),n);o.shape=y;let x=a.dataIdMap.get(o.dataId);return x.stringBytes=C.fromStringArrayToUint8(g),h.forEach(A=>a.disposeData(A.dataId)),o}let l=v.sizeFromShape(i[0].shape.slice(0,n)),u=0,p=i.map(h=>{let m=v.sizeFromShape(h.shape.slice(n));return u+=m,m}),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=C.getAxesPermutation([s],l),p=r;u!==null&&(p=is({inputs:{x:r},attrs:{perm:u},backend:a}));let c=C.getInnerMostAxes(1,l)[0];C.assertAxesAreInnerMostDims("cumprod",[c],l);let d=a.makeOutput(p.shape,p.dtype),h=p.shape[c],m=a.dataIdMap.get(p.dataId).id,f=a.dataIdMap.get(d.dataId).id;hw(m,i?1:0,o?1:0,h,f,nt[r.dtype]);let g=d;if(u!==null){let y=C.getUndoAxesPermutation(u);g=is({inputs:{x:d},attrs:{perm:y},backend:a}),a.disposeData(p.dataId),a.disposeData(d.dataId)}return g}var pne={kernelName:Ni,backendName:"wasm",setupFunc:une,kernelFunc:dne},mw;function cne(e){mw=e.wasm.cwrap(Ri,null,["number","number","number","number","number","number"])}function hne(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=C.getAxesPermutation([s],l),p=r;u!==null&&(p=is({inputs:{x:r},attrs:{perm:u},backend:a}));let c=C.getInnerMostAxes(1,l)[0];C.assertAxesAreInnerMostDims("cumsum",[c],l);let d=a.makeOutput(p.shape,p.dtype),h=p.shape[c],m=a.dataIdMap.get(p.dataId).id,f=a.dataIdMap.get(d.dataId).id;mw(m,i?1:0,o?1:0,h,f,nt[r.dtype]);let g=d;if(u!==null){let y=C.getUndoAxesPermutation(u);g=is({inputs:{x:d},attrs:{perm:y},backend:a}),a.disposeData(p.dataId),a.disposeData(d.dataId)}return g}var mne={kernelName:Ri,backendName:"wasm",setupFunc:cne,kernelFunc:hne},fw;function fne(e){fw=e.wasm.cwrap("DenseBincount",null,["number","array","number","number","boolean","number","number","boolean","number"])}function gne(e){let{backend:t,inputs:a,attrs:n}=e,{x:r,weights:s}=a,{size:i,binaryOutput:o}=n,l=s.shape.reduce((d,h)=>d*h,1)!==0,u=r.shape.length===1?[i]:[r.shape[0],i],p=t.makeOutput(u,s.dtype);function c(d){return t.dataIdMap.get(d.dataId).id}return fw(c(r),new Uint8Array(new Int32Array(r.shape).buffer),r.shape.length,i,l,c(s),nt[s.dtype],o,c(p)),p}var yne={kernelName:fu,backendName:"wasm",setupFunc:fne,kernelFunc:gne},gw;function xne(e){gw=e.wasm.cwrap(Mi,null,["number","number","number","array","number","array","array","number","number"])}function Ane(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),m=i==="NHWC"?[o,c,d,h]:[o,h,c,d],f=t.makeOutput(m,"float32"),g=t.dataIdMap.get(r.dataId).id,y=new Uint8Array(new Int32Array(v.computeStrides(r.shape)).buffer),x=new Uint8Array(new Int32Array(m).buffer),A=new Uint8Array(new Int32Array(v.computeStrides(m)).buffer),b=t.dataIdMap.get(f.dataId).id;return gw(g,s,i==="NHWC"?1:0,y,r.shape.length-1,x,A,m.length,b),f}var bne={kernelName:Mi,backendName:"wasm",setupFunc:xne,kernelFunc:Ane},yw;function vne(e){yw=e.wasm.cwrap($i,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function wne(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=C.computeConv2DInfo(r.shape,s.shape,l,d,p,c,!0),m=h.filterHeight,f=h.filterWidth,g=h.padInfo.top,y=h.padInfo.right,x=h.padInfo.bottom,A=h.padInfo.left,b=h.dilationHeight,w=h.dilationWidth,I=h.strideHeight,T=h.strideWidth,N=h.inChannels,M=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 E=n.makeOutput(h.outShape,"float32"),S=n.dataIdMap.get(E.dataId).id;return yw(i,r.shape[0],r.shape[1],r.shape[2],o,m,f,g,y,x,A,$,b,w,I,T,N,M,S),E}var kne={kernelName:$i,backendName:"wasm",setupFunc:vne,kernelFunc:wne},xw;function Ine(e){xw=e.wasm.cwrap("Diag",null,["number","number","number","number"])}function Sne(e){let{inputs:t,backend:a}=e,{x:n}=t,r=v.sizeFromShape(n.shape),s=a.makeOutput([...n.shape,...n.shape],n.dtype);return xw(a.dataIdMap.get(n.dataId).id,nt[n.dtype],r,a.dataIdMap.get(s.dataId).id),s}var Cne={kernelName:gu,backendName:"wasm",setupFunc:Ine,kernelFunc:Sne},Aw;function Tne(e){Aw=e.wasm.cwrap(Pi,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function Nne(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,filter:s}=t,{strides:i,pad:o,dilations:l}=n;if(r.dtype!==s.dtype)throw new Error(`Dilation2D error: x must have the same dtype as filter. Got ${r.dtype} and ${s.dtype}`);let u=C.computeDilation2DInfo(r.shape,s.shape,i,o,"NHWC",l),p=a.makeOutput(u.outShape,r.dtype);return Aw(a.dataIdMap.get(r.dataId).id,a.dataIdMap.get(s.dataId).id,a.dataIdMap.get(p.dataId).id,nt[r.dtype],u.batchSize,u.inChannels,u.inHeight,u.inWidth,u.outHeight,u.outWidth,u.strideHeight,u.strideWidth,u.dilationHeight,u.dilationWidth,u.filterHeight,u.filterWidth,u.padInfo.top,u.padInfo.left),p}var Rne={kernelName:Pi,backendName:"wasm",setupFunc:Tne,kernelFunc:Nne},bw;function Ene(e){bw=e.wasm.cwrap(ql,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function Mne(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,filter:s,dy:i}=t,{strides:o,pad:l,dilations:u}=n;if(r.dtype!==s.dtype||r.dtype!==i.dtype)throw new Error(`Dilation2DBackpropFilter error: x must have the same dtype as filter and dy. Got ${r.dtype}, ${s.dtype}, and ${i.dtype}`);let p=C.computeDilation2DInfo(r.shape,s.shape,o,l,"NHWC",u),c=a.makeOutput(s.shape,s.dtype);return bw(a.dataIdMap.get(r.dataId).id,a.dataIdMap.get(s.dataId).id,a.dataIdMap.get(i.dataId).id,a.dataIdMap.get(c.dataId).id,nt[r.dtype],p.batchSize,p.inChannels,p.inHeight,p.inWidth,p.outHeight,p.outWidth,p.strideHeight,p.strideWidth,p.dilationHeight,p.dilationWidth,p.filterHeight,p.filterWidth,p.padInfo.top,p.padInfo.left),c}var $ne={kernelName:ql,backendName:"wasm",setupFunc:Ene,kernelFunc:Mne},vw;function Pne(e){vw=e.wasm.cwrap(jl,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function _ne(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,filter:s,dy:i}=t,{strides:o,pad:l,dilations:u}=n;if(r.dtype!==s.dtype||r.dtype!==i.dtype)throw new Error(`Dilation2DBackpropInput error: x must have the same dtype as filter and dy. Got ${r.dtype}, ${s.dtype}, and ${i.dtype}`);let p=C.computeDilation2DInfo(r.shape,s.shape,o,l,"NHWC",u),c=a.makeOutput(r.shape,r.dtype);return vw(a.dataIdMap.get(r.dataId).id,a.dataIdMap.get(s.dataId).id,a.dataIdMap.get(i.dataId).id,a.dataIdMap.get(c.dataId).id,nt[r.dtype],p.batchSize,p.inChannels,p.inHeight,p.inWidth,p.outHeight,p.outWidth,p.strideHeight,p.strideWidth,p.dilationHeight,p.dilationWidth,p.filterHeight,p.filterWidth,p.padInfo.top,p.padInfo.left),c}var Fne={kernelName:jl,backendName:"wasm",setupFunc:Pne,kernelFunc:_ne},Dne=Qe(Fi),ww;function One(e){ww=e.wasm.cwrap(yu,null,["number","number","number"])}function zne(e){let{inputs:t,backend:a}=e,{dy:n,y:r}=t,s=a.makeOutput(r.shape,"float32"),i=o=>a.dataIdMap.get(o.dataId).id;return ww(i(r),i(n),i(s)),s}var Lne={kernelName:yu,backendName:"wasm",setupFunc:One,kernelFunc:zne},Wne=!1,Bne=Gt(Oi,Wne,"bool"),Vne=Qe(Di),Une=Qe(zi,"float32");function U1(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),La({inputs:{x:r},backend:n,attrs:{shape:o}})}var Gne={kernelName:xu,backendName:"wasm",kernelFunc:U1},Hne=Qe(Li,"float32");function kw(e){let{attrs:{shape:t,value:a},backend:n}=e,{attrs:{dtype:r}}=e;r=r||v.inferDtype(a);let s=n.makeOutput(t,r);return n.typedArrayFromHeap(s).fill(a),s}var jne={kernelName:Au,backendName:"wasm",kernelFunc:kw},Iw;function qne(e){Iw=e.wasm.cwrap(Wi,null,["number","number","number","number","number","number"])}function Xne(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 Iw(s,o,l,u,p,i),r}var Kne={kernelName:Wi,backendName:"wasm",kernelFunc:Xne,setupFunc:qne},Yne=Qe(Bi),Zne=!1,Jne=Gt(Vi,Zne),Sw;function Qne(e){Sw=e.wasm.cwrap(Ui,null,["number","number","number","number","number","number","number"])}function ere(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,m=u!=null?t.dataIdMap.get(u.dataId).id:0,f=t.makeOutput(s.shape,s.dtype);if(v.sizeFromShape(s.shape)===0)return f;let g=t.dataIdMap.get(f.dataId).id;return Sw(p,c,d,h,m,r,g),f}var tre={kernelName:Ui,backendName:"wasm",setupFunc:Qne,kernelFunc:ere},Cw;function are(e){Cw=e.wasm.cwrap(Zr,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 nre(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:m}=a,f=C.computeConv2DInfo(r.shape,s.shape,l,p,u,d),g=np[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,x=n.dataIdMap.get(s.dataId).id,A=f.outChannels,b=0;if(i!=null){let X=n.dataIdMap.get(i.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]!==A)throw new Error(`FusedConv2D bias shape (${X.shape}) does not match the number of output channels (${A})`);b=X.id}let w=f.filterHeight,I=f.filterWidth,T=f.padInfo.top,N=f.padInfo.right,M=f.padInfo.bottom,$=f.padInfo.left,E=f.dilationHeight,S=f.dilationWidth,_=f.strideHeight,O=f.strideWidth,W=f.inChannels,P=f.padInfo.type==="SAME"?1:0,U=f.batchSize,G=f.inHeight,q=f.inWidth;if(c!=="NHWC")throw new Error(`wasm backend FusedConv2D does not support dataFormat:'${c}'. Please use 'NHWC'.`);let H=n.makeOutput(f.outShape,"float32"),V=n.dataIdMap.get(H.dataId).id,Z=o==null?0:n.dataIdMap.get(o.dataId).id;return Cw(y,U,G,q,x,w,I,b,T,N,M,$,P,E,S,_,O,W,A,g,Z,m||0,V),H}var rre={kernelName:Zr,backendName:"wasm",setupFunc:are,kernelFunc:nre},Tw;function sre(e){Tw=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 ire(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:m}=a,f=C.computeConv2DInfo(r.shape,s.shape,l,p,u,d,!0),g=np[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,x=n.dataIdMap.get(s.dataId).id,A=f.outChannels,b=0;if(i!=null){let X=n.dataIdMap.get(i.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]!==A)throw new Error(`FusedDepthwiseConv2D bias shape (${X.shape}) does not match the number of output channels (${A})`);b=X.id}let w=f.filterHeight,I=f.filterWidth,T=f.padInfo.top,N=f.padInfo.right,M=f.padInfo.bottom,$=f.padInfo.left,E=f.dilationHeight,S=f.dilationWidth,_=f.strideHeight,O=f.strideWidth,W=f.inChannels,P=f.padInfo.type==="SAME"?1:0,U=f.batchSize,G=f.inHeight,q=f.inWidth;if(c!=="NHWC")throw new Error(`wasm backend FusedDepthwiseConv2D does not support dataFormat:'${c}'. Please use 'NHWC'.`);let H=n.makeOutput(f.outShape,"float32"),V=n.dataIdMap.get(H.dataId).id,Z=o==null?0:n.dataIdMap.get(o.dataId).id;return Tw(y,U,G,q,x,w,I,b,T,N,M,$,P,E,S,_,O,W,A,g,Z,m||0,V),H}var ore={kernelName:Jr,backendName:"wasm",setupFunc:sre,kernelFunc:ire},Nw;function lre(e){Nw=e.wasm.cwrap(Gi,null,["number","number","number","number","number","number","array","number"])}function ure(e){let{backend:t,inputs:a}=e,{params:n,indices:r}=a,[s,i,o,l]=s3.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,m=new Uint8Array(new Int32Array(l).buffer),f=t.dataIdMap.get(u.dataId).id;return Nw(d,nt[n.dtype],h,i,c,o,m,f),u}var dre={kernelName:Gi,backendName:"wasm",setupFunc:lre,kernelFunc:ure},Rw;function pre(e){Rw=e.wasm.cwrap("Gather",null,["number","number","array","number","number","number","array","number"])}function cre(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 T=0;T=0,()=>`GatherV2: the index value ${N} is not in [0, ${p-1}]`)}let c=C.segment_util.collectGatherOpShapeInfo(r,s,l,o),d=La({inputs:{x:r},attrs:{shape:[c.batchSize,c.outerSize,c.dimSize,c.sliceSize]},backend:t}),h=v.sizeFromShape(s.shape),m=La({inputs:{x:s},attrs:{shape:[c.batchSize,h/c.batchSize]},backend:t}),f=[c.batchSize,c.outerSize,h/c.batchSize,c.sliceSize],g=t.makeOutput(f,r.dtype);if(v.sizeFromShape(r.shape)===0)return g;let y=d.shape.length-1,x=t.dataIdMap.get(d.dataId).id,A=t.dataIdMap.get(m.dataId).id,b=t.dataIdMap.get(g.dataId).id,w=new Uint8Array(new Int32Array(v.computeStrides(d.shape)).buffer),I=new Uint8Array(new Int32Array(v.computeStrides(f)).buffer);return Rw(x,nt[r.dtype],w,y,A,c.batchSize,I,b),t.disposeData(d.dataId),t.disposeData(m.dataId),g.shape=c.outputShape,g}var hre={kernelName:bu,backendName:"wasm",setupFunc:pre,kernelFunc:cre},mre=!1,fre=Gt(Hi,mre,"bool"),gre=!1,yre=Gt(ji,gre,"bool"),xre=Qe(Xi,"bool"),Are=Qe(Ki,"bool"),bre=Qe(Yi,"bool"),Ew;function vre(e){Ew=e.wasm.cwrap(Zi,null,["number","number","number","number"])}function wre(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;Ew(r,nt[t.dtype],a,i)}return s}var kre={kernelName:Zi,backendName:"wasm",setupFunc:vre,kernelFunc:wre},Ire=!1,Sre=Gt(Ji,Ire,"bool"),Cre=!1,Tre=Gt(Qi,Cre,"bool"),Mw;function Nre(e){Mw=e.wasm.cwrap(eo,null,["number","number","number","number"])}function Rre(e){let{attrs:t,backend:a}=e,{start:n,stop:r,num:s}=t,i=Math.floor(s),o=a.makeOutput([i],"float32");return Mw(a.dataIdMap.get(o.dataId).id,n,r,i),o}var Ere={kernelName:eo,backendName:"wasm",setupFunc:Nre,kernelFunc:Rre},Mre=Qe(to),$re=Qe(ao),Pre=!1,_re=Gt(no,Pre,"bool"),Fre=Qe(ro),Dre=!1,Ore=Gt(so,Dre,"bool"),zre=!1,Lre=Gt(NA,zre,"bool"),$w;function Wre(e){$w=e.wasm.cwrap(io,null,["number","number","number","number","number","number","number"])}function Bre(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{depthRadius:s,bias:i,alpha:o,beta:l}=n;if(r.dtype!=="float32")throw new Error("LRN error: x must have dtype float32");let u=a.makeOutput(r.shape,r.dtype);return $w(a.dataIdMap.get(r.dataId).id,a.dataIdMap.get(u.dataId).id,r.shape[3],s,i,o,l),u}var Vre={kernelName:io,backendName:"wasm",setupFunc:Wre,kernelFunc:Bre},Pw;function Ure(e){Pw=e.wasm.cwrap(vu,null,["number","number","number","number","number","number","number","number","number"])}function Gre(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,y:s,dy:i}=t,{depthRadius:o,bias:l,alpha:u,beta:p}=n;if(r.dtype!=="float32"||s.dtype!=="float32"||i.dtype!=="float32")throw new Error("LRNGrad error: x, y, and dy must have dtype float32");let c=a.makeOutput(r.shape,r.dtype);return Pw(a.dataIdMap.get(r.dataId).id,a.dataIdMap.get(s.dataId).id,a.dataIdMap.get(i.dataId).id,a.dataIdMap.get(c.dataId).id,i.shape[3],o,l,u,p),c}var Hre={kernelName:vu,backendName:"wasm",setupFunc:Ure,kernelFunc:Gre},_w;function jre(e){_w=e.wasm.cwrap(oo,null,["number","number","number","number"])}function qre(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}=fs(i,r,t);if(d){let x=t.dataIdMap.get(u.dataId).id;l=u,o=x}let h=l.shape.length;C.assertAxesAreInnerMostDims("max",p,h);let[m,f]=C.computeOutAndReduceShapes(l.shape,p),g=v.sizeFromShape(f),y=t.makeOutput(m,i.dtype);if(v.sizeFromShape(l.shape)!==0){let x=t.dataIdMap.get(y.dataId).id;_w(o,nt[i.dtype],g,x)}if(d&&t.disposeData(u.dataId),s){let x=C.expandShapeToKeepDim(y.shape,c);y.shape=x}return y}var Xre={kernelName:oo,backendName:"wasm",setupFunc:jre,kernelFunc:qre},Kre=!1,Yre=Gt(lo,Kre),Fw;function Zre(e){Fw=e.wasm.cwrap(uo,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function Jre(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=C.computePool2DInfo(r.shape,i,o,1,l,u),c=p.filterHeight,d=p.filterWidth,h=p.padInfo.top,m=p.padInfo.right,f=p.padInfo.bottom,g=p.padInfo.left,y=p.dilationHeight,x=p.dilationWidth,A=p.strideHeight,b=p.strideWidth,w=p.inChannels,I=p.outChannels;if(p.dataFormat!=="channelsLast")throw new Error(`wasm backend does not support dataFormat:'${p.dataFormat}'. Please use 'channelsLast'.`);let T=n.makeOutput(p.outShape,"float32"),N=n.dataIdMap.get(T.dataId).id;return Fw(s,r.shape[0],r.shape[1],r.shape[2],c,d,h,m,f,g,y,x,A,b,w,I,N),T}var Qre={kernelName:uo,backendName:"wasm",setupFunc:Zre,kernelFunc:Jre},Dw;function ese(e){Dw=e.wasm.cwrap("MaxPool3D",null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function tse(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{filterSize:s,strides:i,pad:o,dimRoundingMode:l,dataFormat:u}=n,p=C.computePool3DInfo(r.shape,s,i,1,o,l,u),c=a.makeOutput(p.outShape,r.dtype);return Dw(a.dataIdMap.get(r.dataId).id,a.dataIdMap.get(c.dataId).id,p.batchSize,p.inChannels,p.inDepth,p.inHeight,p.inWidth,p.outDepth,p.outHeight,p.outWidth,p.strideDepth,p.strideHeight,p.strideWidth,p.dilationDepth,p.dilationHeight,p.dilationWidth,p.effectiveFilterDepth,p.effectiveFilterHeight,p.effectiveFilterWidth,p.padInfo.front,p.padInfo.top,p.padInfo.left),c}var ase={kernelName:wu,backendName:"wasm",setupFunc:ese,kernelFunc:tse},Ow;function nse(e){Ow=e.wasm.cwrap("MaxPool3DGrad",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 rse(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,input:s}=t,{filterSize:i,strides:o,pad:l,dimRoundingMode:u}=n,p=C.computePool3DInfo(s.shape,i,o,1,l,u),c=a.makeOutput(s.shape,s.dtype);return Ow(a.dataIdMap.get(s.dataId).id,a.dataIdMap.get(r.dataId).id,a.dataIdMap.get(c.dataId).id,p.batchSize,p.inChannels,p.inDepth,p.inHeight,p.inWidth,p.outDepth,p.outHeight,p.outWidth,p.strideDepth,p.strideHeight,p.strideWidth,p.dilationDepth,p.dilationHeight,p.dilationWidth,p.effectiveFilterDepth,p.effectiveFilterHeight,p.effectiveFilterWidth,p.padInfo.front,p.padInfo.top,p.padInfo.left),c}var sse={kernelName:wp,backendName:"wasm",setupFunc:nse,kernelFunc:rse},zw;function ise(e){zw=e.wasm.cwrap("MaxPoolGrad",null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function ose(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,input:s}=t,{filterSize:i,strides:o,pad:l,dimRoundingMode:u}=n,p=C.computePool2DInfo(s.shape,i,o,1,l,u),c=a.makeOutput(s.shape,s.dtype);return zw(a.dataIdMap.get(s.dataId).id,a.dataIdMap.get(r.dataId).id,a.dataIdMap.get(c.dataId).id,p.batchSize,p.inChannels,p.inHeight,p.inWidth,p.outHeight,p.outWidth,p.strideHeight,p.strideWidth,p.dilationHeight,p.dilationWidth,p.effectiveFilterHeight,p.effectiveFilterWidth,p.padInfo.top,p.padInfo.left),c}var lse={kernelName:vp,backendName:"wasm",setupFunc:ise,kernelFunc:ose},Lw;function use(e){Lw=e.wasm.cwrap("MaxPoolWithArgmax",null,["number","number","number","number","boolean","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function dse(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{filterSize:s,strides:i,pad:o,includeBatchInIndex:l}=n;v.assert(r.shape.length===4,()=>`Error in maxPool: input must be rank 4 but got rank ${r.shape.length}.`);let u=[1,1];v.assert(C.eitherStridesOrDilationsAreOne(i,u),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${i} and dilations '${u}'`);let p=C.computePool2DInfo(r.shape,s,i,[1,1],o),c=a.makeOutput(p.outShape,r.dtype),d=a.makeOutput(p.outShape,"int32");return Lw(a.dataIdMap.get(r.dataId).id,a.dataIdMap.get(c.dataId).id,a.dataIdMap.get(d.dataId).id,nt[r.dtype],l,p.batchSize,p.inChannels,p.inHeight,p.inWidth,p.outHeight,p.outWidth,p.strideHeight,p.strideWidth,p.dilationHeight,p.dilationWidth,p.effectiveFilterHeight,p.effectiveFilterWidth,p.padInfo.top,p.padInfo.left),[c,d]}var pse={kernelName:ku,backendName:"wasm",setupFunc:use,kernelFunc:dse},Ww;function cse(e){Ww=e.wasm.cwrap(po,null,["number, number, number"])}function hse(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}=fs(i,r,t),m=c;if(h){let b=t.dataIdMap.get(p.dataId).id;b!==o&&(u=p,l=b,m=C.getInnerMostAxes(m.length,u.shape.length))}C.assertAxesAreInnerMostDims("mean",m,u.shape.length);let[f,g]=C.computeOutAndReduceShapes(u.shape,m),y=v.sizeFromShape(g),x=u;u.dtype!=="float32"&&(x=gs({backend:t,inputs:{x:u},attrs:{dtype:"float32"}}),l=t.dataIdMap.get(x.dataId).id);let A=t.makeOutput(f,"float32");if(v.sizeFromShape(u.shape)!==0){let b=t.dataIdMap.get(A.dataId).id;Ww(l,y,b)}if(h&&t.disposeData(p.dataId),s){let b=C.expandShapeToKeepDim(A.shape,d);A.shape=b}return u.dtype!=="float32"&&t.disposeData(x.dataId),A}var mse={kernelName:po,backendName:"wasm",setupFunc:cse,kernelFunc:hse},Bw;function fse(e){Bw=e.wasm.cwrap(co,null,["number","number","number","number"])}function gse(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}=fs(i,r,t);if(h){let A=t.dataIdMap.get(p.dataId).id;A!==o&&(u=p,l=A)}let m=u.shape.length;C.assertAxesAreInnerMostDims("min",c,m);let[f,g]=C.computeOutAndReduceShapes(u.shape,c),y=v.sizeFromShape(g),x=t.makeOutput(f,u.dtype);if(v.sizeFromShape(u.shape)!==0){let A=t.dataIdMap.get(x.dataId).id;Bw(l,nt[i.dtype],y,A)}if(h&&t.disposeData(p.dataId),s){let A=C.expandShapeToKeepDim(x.shape,d);x.shape=A}return x}var yse={kernelName:co,backendName:"wasm",setupFunc:fse,kernelFunc:gse},xse=!1,Ase=Gt(ho,xse),G1;(function(e){e[e.reflect=0]="reflect",e[e.symmetric=1]="symmetric"})(G1||(G1={}));var Vw;function bse(e){Vw=e.wasm.cwrap(mo,null,["number","array","number","number","array","array","number","number"])}function vse(e){let{inputs:{x:t},backend:a,attrs:{paddings:n,mode:r}}=e,s=n.map((m,f)=>m[0]+t.shape[f]+m[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(m=>m[0]),c=n.map(m=>m[1]),d=new Uint8Array(new Int32Array(p).buffer),h=new Uint8Array(new Int32Array(c).buffer);return Vw(i,u,t.shape.length,nt[t.dtype],d,h,G1[r],l),o}var wse={kernelName:mo,backendName:"wasm",kernelFunc:vse,setupFunc:bse},Uw;function kse(e){Uw=e.wasm.cwrap(Ho,null,["number","number","number","number"])}function Gw(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||Uw(r,i,o,l),s}var Ise={kernelName:Ho,backendName:"wasm",setupFunc:kse,kernelFunc:Gw},Hw;function Sse(e){Hw=e.wasm.cwrap(go,null,["number","number","number","number","number","number"])}function Cse(e){let{inputs:t,backend:a,attrs:n}=e,{logits:r}=t,{numSamples:s,seed:i,normalized:o}=n;if(r.dtype!=="float32")throw new Error(`Tensor logits must have dtype float32, got ${r.dtype}`);let l=o?r:Gw({inputs:{logits:r},backend:a,attrs:{dim:r.shape.length-1}}),[u,p]=l.shape,c=a.makeOutput([u,s],"int32");return Hw(a.dataIdMap.get(l.dataId).id,u,p,s,i,a.dataIdMap.get(c.dataId).id),o||a.disposeData(l.dataId),c}var Tse={kernelName:go,backendName:"wasm",setupFunc:Sse,kernelFunc:Cse},Nse=Gt(fo,!0),Rse=!0,Ese=Gt(yo,Rse),Mse=Qe(Iu);function V3(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 jw;function $se(e){jw=e.wasm.cwrap(Ao,"number",["number","number","number","number","number"])}function Pse(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=jw(u,p,s,r,i),{pSelectedIndices:d,selectedSize:h,pSelectedScores:m,pValidOutputs:f}=V3(t,c);return t.wasm._free(m),t.wasm._free(f),t.makeOutput([h],"int32",d)}var _se={kernelName:Ao,backendName:"wasm",setupFunc:$se,kernelFunc:Pse},qw;function Fse(e){qw=e.wasm.cwrap(Su,"number",["number","number","number","number","number","bool"])}function Dse(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=qw(p,c,s,r,i,o),{pSelectedIndices:h,selectedSize:m,pSelectedScores:f,pValidOutputs:g}=V3(t,d);t.wasm._free(f);let y=t.makeOutput([m],"int32",h),x=t.makeOutput([],"int32",g);return[y,x]}var Ose={kernelName:Su,backendName:"wasm",setupFunc:Fse,kernelFunc:Dse},Xw;function zse(e){Xw=e.wasm.cwrap(bo,"number",["number","number","number","number","number","number"])}function Lse(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=Xw(p,c,s,r,i,o),{pSelectedIndices:h,selectedSize:m,pSelectedScores:f,pValidOutputs:g}=V3(t,d);t.wasm._free(g);let y=t.makeOutput([m],"int32",h),x=t.makeOutput([m],"float32",f);return[y,x]}var Wse={kernelName:bo,backendName:"wasm",setupFunc:zse,kernelFunc:Lse},Bse=!1,Vse=Gt(xo,Bse,"bool"),Kw;function Use(e){Kw=e.wasm.cwrap(vo,null,["number","number","number","number","number"])}function Gse(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 Kw(c,i,o,l,p),u}var Hse={kernelName:vo,backendName:"wasm",setupFunc:Use,kernelFunc:Gse};function jse(e){let{inputs:{x:t},backend:a}=e,n=a.makeOutput(t.shape,t.dtype);return a.typedArrayFromHeap(n).fill(1),n}var qse={kernelName:Cu,backendName:"wasm",kernelFunc:jse};function Xse(e){let{inputs:t,backend:a,attrs:n}=e,{axis:r}=n;if(t.length===1)return U1({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=U1({inputs:{input:p},backend:a,attrs:{dim:r}});return o.push(c),c}),u=iw({inputs:l,backend:a,attrs:{axis:r}});return o.forEach(p=>a.disposeData(p.dataId)),u}var Kse={kernelName:Tu,backendName:"wasm",kernelFunc:Xse},Yw;function Yse(e){Yw=e.wasm.cwrap(wo,null,["number","array","number","number","array","array","number","number"])}function Zse(e){let{inputs:{x:t},backend:a,attrs:{paddings:n,constantValue:r}}=e,s=n.map((m,f)=>m[0]+t.shape[f]+m[1]);if(v.sizeFromShape(t.shape)===0)return kw({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(m=>m[0]),c=n.map(m=>m[1]),d=new Uint8Array(new Int32Array(p).buffer),h=new Uint8Array(new Int32Array(c).buffer);return Yw(i,u,t.shape.length,nt[t.dtype],d,h,r,l),o}var Zw={kernelName:wo,backendName:"wasm",kernelFunc:Zse,setupFunc:Yse},Jse=!1,Qse=Gt(ko,Jse),Jw;function eie(e){Jw=e.wasm.cwrap(Io,null,["number","number","number"])}function tie(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=gs({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 Jw(o,i,c),l.dtype!=="float32"&&a.disposeData(u.dataId),p}var aie={kernelName:Io,backendName:"wasm",setupFunc:eie,kernelFunc:tie},Qw;function nie(e){Qw=e.wasm.cwrap(So,null,["number","number","number","number"])}function rie(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}=fs(i,r,t),m=c;if(h){let A=t.dataIdMap.get(p.dataId).id;A!==o&&(u=p,l=A,m=C.getInnerMostAxes(m.length,u.shape.length))}C.assertAxesAreInnerMostDims("prod",m,u.shape.length);let[f,g]=C.computeOutAndReduceShapes(u.shape,m),y=v.sizeFromShape(g),x=t.makeOutput(f,u.dtype);if(v.sizeFromShape(u.shape)!==0){let A=t.dataIdMap.get(x.dataId).id;Qw(l,y,nt[x.dtype],A)}if(h&&t.disposeData(p.dataId),s){let A=C.expandShapeToKeepDim(x.shape,d);x.shape=A}return x}var sie={kernelName:So,backendName:"wasm",setupFunc:nie,kernelFunc:rie},iie=e=>{let{backend:t,attrs:a}=e,{start:n,stop:r,step:s,dtype:i}=a,o=y3(n,r,s,i),l=t.makeOutput([o.length],i);return t.typedArrayFromHeap(l).set(o),l},oie={kernelName:Nu,backendName:"wasm",kernelFunc:iie},lie=!0,uie=Gt(_i,lie),die=Qe(Co),pie=Qe(To),cie=Qe(Eo),ek;function hie(e){ek=e.wasm.cwrap(Ro,null,["number","number","number","number","number","number","number","number","number","number"])}function mie(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,m=[p,l,u,h],f=t.dataIdMap.get(r.dataId),g;f.dtype!=="float32"&&(g=gs({backend:t,inputs:{x:r},attrs:{dtype:"float32"}}),f=t.dataIdMap.get(g.dataId));let y=f.id,x=t.makeOutput(m,"float32");if(v.sizeFromShape(r.shape)===0)return x;let A=t.dataIdMap.get(x.dataId).id;return ek(y,p,c,d,h,l,u,s?1:0,i?1:0,A),g!=null&&t.disposeData(g.dataId),x}var fie={kernelName:Ro,backendName:"wasm",setupFunc:hie,kernelFunc:mie},tk;function gie(e){tk=e.wasm.cwrap(Mu,null,["number","number","number","array","array","boolean"])}function yie(e){let{inputs:t,backend:a,attrs:n}=e,{images:r,dy:s}=t,{alignCorners:i}=n,o=a.makeOutput(r.shape,"float32"),l=a.dataIdMap.get(r.dataId),u;return l.dtype!=="float32"&&(u=gs({backend:a,inputs:{x:r},attrs:{dtype:"float32"}}),l=a.dataIdMap.get(u.dataId)),tk(a.dataIdMap.get(r.dataId).id,a.dataIdMap.get(s.dataId).id,a.dataIdMap.get(o.dataId).id,new Uint8Array(new Int32Array(r.shape).buffer),new Uint8Array(new Int32Array(s.shape).buffer),i),u!=null&&a.disposeData(u.dataId),o}var xie={kernelName:Mu,backendName:"wasm",setupFunc:gie,kernelFunc:yie},ak;function Aie(e){ak=e.wasm.cwrap(No,null,["number","number","number","number","number","number","number","number","number","number"])}function bie(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,m=[p,l,u,h],f=t.makeOutput(m,"float32");if(v.sizeFromShape(r.shape)===0)return f;let g=t.dataIdMap.get(r.dataId),y;g.dtype!=="float32"&&(y=gs({backend:t,inputs:{x:r},attrs:{dtype:"float32"}}),g=t.dataIdMap.get(y.dataId));let x=g.id,A=t.dataIdMap.get(f.dataId).id;return ak(x,p,c,d,h,l,u,s?1:0,i?1:0,A),y!=null&&t.disposeData(y.dataId),f}var vie={kernelName:No,backendName:"wasm",setupFunc:Aie,kernelFunc:bie},nk;function wie(e){nk=e.wasm.cwrap(Eu,null,["number","number","number","array","array","boolean"])}function kie(e){let{inputs:t,backend:a,attrs:n}=e,{images:r,dy:s}=t,{alignCorners:i}=n,o=a.makeOutput(r.shape,"float32"),l=a.dataIdMap.get(r.dataId),u;return l.dtype!=="float32"&&(u=gs({backend:a,inputs:{x:r},attrs:{dtype:"float32"}}),l=a.dataIdMap.get(u.dataId)),nk(a.dataIdMap.get(r.dataId).id,a.dataIdMap.get(s.dataId).id,a.dataIdMap.get(o.dataId).id,new Uint8Array(new Int32Array(r.shape).buffer),new Uint8Array(new Int32Array(s.shape).buffer),i),u!=null&&a.disposeData(u.dataId),o}var Iie={kernelName:Eu,backendName:"wasm",setupFunc:wie,kernelFunc:kie},rk;function Sie(e){rk=e.wasm.cwrap(Mo,null,["number","array","number","array","number","number"])}function Cie(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 l0({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);rk(l,p,i.length,c,r.shape.length,u);let d=La({inputs:{x:o},attrs:{shape:r.shape},backend:a});return a.disposeData(o.dataId),d}var Tie={kernelName:Mo,backendName:"wasm",kernelFunc:Cie,setupFunc:Sie},sk;function Nie(e){sk=e.wasm.cwrap(el,null,["number","number","number","number","number","number","number","number","array","number","number"])}function Rie(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,m]=r.shape,[f,g]=C.getImageCenter(o,d,h),y=i===0,x=255,A=typeof i=="number"?[i,i,i,y?0:x]:[...i,x],b=new Uint8Array(new Int32Array(A).buffer);return sk(u,c,d,h,m,s,f,g,b,A.length,p),l}var Eie={kernelName:el,backendName:"wasm",kernelFunc:Rie,setupFunc:Nie},Mie=Qe($o),$ie=Qe(Po),ik;function Pie(e){ik=e.wasm.cwrap(_o,null,["number","number","number","number","number","number","array","number","number"])}function _ie(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}=jh.calculateShapes(s,r,i),h=t.dataIdMap.get(r.dataId).id,m=t.dataIdMap.get(s.dataId).id,f=new Uint8Array(new Int32Array(c).buffer),g=t.dataIdMap.get(o.dataId).id;return ik(h,m,nt[s.dtype],l,u,p,f,d,g),o}var Fie={kernelName:_o,backendName:"wasm",setupFunc:Pie,kernelFunc:_ie},ok;function Die(e){ok=e.wasm.cwrap(Do,null,["number","number","number","number","number","number","bool","number"])}function Oie(e){let{inputs:t,backend:a,attrs:n}=e,{sortedSequence:r,values:s}=t,{side:i}=n;if(r.dtype!==s.dtype)throw new Error(`SearchSorted error: sorted_sequence must have the same dtype as values. Got ${r.dtype} and ${s.dtype}`);let o=a.makeOutput(s.shape,"int32");function l(u){return a.dataIdMap.get(u.dataId).id}return ok(l(r),l(s),r.shape[0],r.shape[1],s.shape[1],nt[r.dtype],i==="left",l(o)),o}var zie={kernelName:Do,backendName:"wasm",setupFunc:Die,kernelFunc:Oie},lk;function Lie(e){lk=e.wasm.cwrap("SelectV2",null,["number","number","number","number","number"])}function Wie(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 lk(i,o,l,h,p),u}var Bie={kernelName:$u,backendName:"wasm",kernelFunc:Wie,setupFunc:Lie},Vie=Qe(Oo),uk;function Uie(e){uk=e.wasm.cwrap(Bo,null,["number","number"])}function Gie(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||uk(n,s),r}var Hie={kernelName:"Sigmoid",backendName:"wasm",setupFunc:Uie,kernelFunc:Gie},jie=Qe(Wo),qie=Qe(zo),Xie=Qe(Lo),Kie=Qe(Vo);function Yie(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 M=b.shape[0],$=b.shape[1],E=C.segment_util.segOpComputeOptimalWindowSize($,N),S={windowSize:E,inSize:$,batchSize:M,numSegments:N},_=new Ete(S,w),O=a.compileAndRun(_,[b,I],T);if(l.push(O),O.shape[1]===N)return O;let W=j8({backend:a,attrs:{start:0,stop:N,step:1,dtype:"float32"}}),P=q8({inputs:{x:W},backend:a,attrs:{reps:[$/E]}});return l.push(W),l.push(P),g(O,w,P,T,N)},y=g(m,"unsortedSegmentSum",s,f,i),x=pe({inputs:{x:y},backend:a,attrs:{shape:d}}),A=x;if(p!=null){l.push(x);let b=C.getUndoAxesPermutation(p);A=Ca({inputs:{x:A},backend:a,attrs:{perm:b}})}return l.forEach(b=>a.disposeIntermediateTensorInfo(b)),A}var $te={kernelName:Ep,backendName:"webgl",kernelFunc:Mte},Pte=[gq,xq,vq,Iq,Cq,Rq,Mq,Pq,Oq,Lq,Vq,Hq,Xq,Jq,tX,nX,sX,uX,pX,hX,yX,IX,CX,EX,$X,zX,WX,GX,Qj,qX,JX,aK,lK,pK,hK,fK,yK,vK,IK,TK,RK,MK,PK,DK,zK,VK,GK,qK,YK,JK,aY,iY,dY,hY,gY,yY,AY,vY,kY,SY,TY,MY,_Y,OY,LY,VY,HY,KY,QY,Jj,tZ,YX,rZ,oZ,dZ,tq,mZ,xZ,bZ,IZ,TZ,MZ,_Z,zZ,VZ,HZ,qZ,ZZ,QZ,tJ,sJ,oJ,uJ,pJ,hJ,yJ,vJ,SJ,PJ,rq,OJ,WJ,UJ,jJ,_X,KJ,ZJ,QJ,aQ,iQ,nq,lQ,dQ,cQ,mQ,fQ,FX,RJ,xQ,wQ,CQ,iq,EQ,PQ,OQ,WQ,GQ,jQ,KQ,JQ,tee,ree,oee,dee,mee,yee,vee,Iee,wX,MJ,Tee,Ree,Mee,Pee,Fee,Oee,Lee,Bee,Uee,jee,Xee,Yee,Jee,tte,nte,ste,ote,EJ,hq,dte,hte,fte,xte,wte,Ste,mq,Tte,Rte,$te,YJ];for(let e of Pte)xn(e);var nt;(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"})(nt||(nt={}));var np;(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"})(np||(np={}));var X8;function _te(e){X8=e.wasm.cwrap(Yr,null,["number","array","number","number","array","number","number","number","number","number","number","number","number"])}function Fte(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,m=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}.`);m=N.id}let f=o==null?0:a.dataIdMap.get(o.dataId).id,g=np[p];if(g==null)throw new Error(`${p} activation not yet supported for FusedConv2D in the wasm backend.`);let y=l?r.shape[2]:r.shape[1],x=u?s.shape[1]:s.shape[2],A=al.assertAndGetBroadcastShape(r.shape.slice(0,-2),s.shape.slice(0,-2)),b=a.makeOutput([...A,y,x],r.dtype),w=a.dataIdMap.get(b.dataId).id,I=new Uint8Array(new Int32Array(r.shape).buffer),T=new Uint8Array(new Int32Array(s.shape).buffer);return X8(d,I,r.shape.length,h,T,s.shape.length,l,u,g,m,f,c||0,w),b}var Dte={kernelName:Yr,backendName:"wasm",setupFunc:_te,kernelFunc:Fte};function Qe(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,nt[o.dtype],p),u}return{kernelName:e,backendName:"wasm",setupFunc:n,kernelFunc:r}}var Ote=Qe(iu),zte=Qe(oi),Lte=Qe(li);function Gt(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,m=C.assertAndGetBroadcastShape(u.shape,p.shape),f=o.makeOutput(m,h);if(v.sizeFromShape(m)===0)return f;let g=new Uint8Array(new Int32Array(u.shape).buffer),y=new Uint8Array(new Int32Array(p.shape).buffer),x=o.dataIdMap.get(f.dataId).id;return n(c,g,u.shape.length,d,y,p.shape.length,nt[u.dtype],x),f}return{kernelName:e,backendName:"wasm",setupFunc:r,kernelFunc:s}}var Wte=!0,Bte=Gt(os,Wte),K8;function Vte(e){K8=e.wasm.cwrap(ui,null,["array","number","number","number"])}function Ute(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 K8(s,r.length,nt[n.dtype],i),n}var Gte={kernelName:ui,backendName:"wasm",setupFunc:Vte,kernelFunc:Ute};function l0(e){let{inputs:{x:t},backend:a}=e;if(t.dtype==="string")return Ve(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 Hte={kernelName:qi,backendName:"wasm",kernelFunc:l0},Y8;function jte(e){Y8=e.wasm.cwrap(wr,null,["number","array","number","number","number","array","number"])}function is(e){let{inputs:t,backend:a,attrs:n}=e,[r,s]=Xte(t.x.shape,n.perm),i=!0;for(let m=0;m=r&&(s===-1||n[s]>n[i])&&(s=i);n[s]=r}return[a,n]}var Kte={kernelName:wr,backendName:"wasm",kernelFunc:is,setupFunc:jte};function fs(e,t,a){let n=e.shape,r=e.shape.length,s=v.parseAxisParam(t,n),i=s,o=C.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 vae={kernelName:Ru,backendName:"wasm",kernelFunc:La},rw;function wae(e){rw=e.wasm.cwrap(xi,null,["number","array","number","number","array","number","number","number","number"])}function kae(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],m=r.shape.slice(0,-2),f=s.shape.slice(0,-2),g=v.sizeFromShape(m),y=v.sizeFromShape(f),x=al.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 A=i?[g,p,d]:[g,d,p],b=o?[y,h,c]:[y,c,h],w=La({inputs:{x:r},backend:a,attrs:{shape:A}}),I=La({inputs:{x:s},backend:a,attrs:{shape:b}}),T=a.dataIdMap.get(w.dataId).id,N=a.dataIdMap.get(I.dataId).id,M=i?w.shape[2]:w.shape[1],$=o?I.shape[1]:I.shape[2],E=Math.max(g,y),S=a.makeOutput([E,M,$],w.dtype),_=a.dataIdMap.get(S.dataId).id,O=new Uint8Array(new Int32Array(w.shape).buffer),W=new Uint8Array(new Int32Array(I.shape).buffer);return rw(T,O,w.shape.length,N,W,I.shape.length,i,o,_),a.disposeData(w.dataId),a.disposeData(I.dataId),S.shape=x,S}var Iae={kernelName:xi,backendName:"wasm",setupFunc:wae,kernelFunc:kae};function si(e){let{inputs:{x:t},attrs:{begin:a,size:n},backend:r}=e,[s,i]=Nt.parseSliceParams(t,a,n),o=Nt.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 m=Nt.computeFlatOffset(s,p);return t.dtype==="string"?c.stringBytes=l.slice(m,m+v.sizeFromShape(i)):r.typedArrayFromHeap(u).set(l.subarray(m,m+v.sizeFromShape(i))),u}if(t.dtype==="string"){let m=Ah(l,s,i,t.shape,t.dtype);return c.stringBytes=m,u}let d=r.typedArrayFromHeap(u),h=t.shape.length;if(h===2)Sae(l,p[0],d,s,i);else if(h===3)Cae(l,p[0],p[1],d,s,i);else if(h===4)Tae(l,p[0],p[1],p[2],d,s,i);else{let m=Ah(l,s,i,t.shape,t.dtype);d.set(m)}return u}function Sae(e,t,a,n,r){let s=0,i=n[0],o=n[1],l=i+r[0];for(let u=i;uy*x),l=C.getReshaped(r.shape,s,o),u=C.getPermuted(l.length,s.length),p=C.getReshapedPermuted(r.shape,s,o),c=C.getSliceBeginCoords(i,s.length),d=C.getSliceSize(p,i,s.length),h=La({inputs:{x:r},backend:a,attrs:{shape:l}}),m=is({inputs:{x:h},backend:a,attrs:{perm:u}}),f=La({inputs:{x:m},backend:a,attrs:{shape:p}}),g=si({inputs:{x:f},backend:a,attrs:{begin:c,size:d}});return a.disposeData(h.dataId),a.disposeData(m.dataId),a.disposeData(f.dataId),g}var Eae={kernelName:du,backendName:"wasm",kernelFunc:Rae},sw;function Mae(e){sw=e.wasm.cwrap(Ai,null,["number","number","boolean","number","number","number"])}function $ae(e){let{backend:t,inputs:a,attrs:n}=e,{x:r,weights:s}=a,{size:i}=n,o=s.shape.reduce((c,d)=>c*d,1)!==0,l=r.shape.length===1?[i]:[r.shape[0],i],u=t.makeOutput(l,s.dtype);function p(c){return t.dataIdMap.get(c.dataId).id}return sw(p(r),i,o,p(s),nt[s.dtype],p(u)),u}var Pae={kernelName:Ai,backendName:"wasm",setupFunc:Mae,kernelFunc:$ae},_ae=!0,Fae=Gt(pu,_ae);function Dae(e){let{inputs:t,backend:a}=e,{s0:n,s1:r}=t,s=a.typedArrayFromHeap(n),i=a.typedArrayFromHeap(r),o=C.assertAndGetBroadcastShape(Array.from(s),Array.from(i));return a.makeOutput([o.length],"int32",void 0,new Int32Array(o))}var Oae={kernelName:cu,backendName:"wasm",kernelFunc:Dae};function gs(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 zae={kernelName:bi,backendName:"wasm",kernelFunc:gs},Lae=Qe(vi),iw;function Wae(e){iw=e.wasm.cwrap(ls,null,["number","number","number","number"])}function Bae(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 iw(o,s,i,u),l}var Vae={kernelName:ls,backendName:"wasm",setupFunc:Wae,kernelFunc:Bae};function ow(e){let{inputs:t,backend:a}=e,n=v.parseAxisParam(e.attrs.axis,t[0].shape)[0],r=t.map(h=>h.shape);C.assertParamsConsistent(r,n);let s=C.computeOutShape(t.map(h=>h.shape),n),i=t.filter(h=>v.sizeFromShape(h.shape)>0);if(i.length===1)return l0({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(A=>{let b=[-1,v.sizeFromShape(A.shape.slice(n))];return La({inputs:{x:A},backend:a,attrs:{shape:b}})}),m=h.map(A=>({vals:a.readSync(A.dataId),shape:A.shape}));s=C.computeOutShape(h.map(A=>A.shape),1);let f=h[0].shape[0]===1,g=m3(m,s,t[0].dtype,f),y=C.computeOutShape(i.map(A=>A.shape),n);o.shape=y;let x=a.dataIdMap.get(o.dataId);return x.stringBytes=C.fromStringArrayToUint8(g),h.forEach(A=>a.disposeData(A.dataId)),o}let l=v.sizeFromShape(i[0].shape.slice(0,n)),u=0,p=i.map(h=>{let m=v.sizeFromShape(h.shape.slice(n));return u+=m,m}),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=C.getAxesPermutation([s],l),p=r;u!==null&&(p=is({inputs:{x:r},attrs:{perm:u},backend:a}));let c=C.getInnerMostAxes(1,l)[0];C.assertAxesAreInnerMostDims("cumprod",[c],l);let d=a.makeOutput(p.shape,p.dtype),h=p.shape[c],m=a.dataIdMap.get(p.dataId).id,f=a.dataIdMap.get(d.dataId).id;mw(m,i?1:0,o?1:0,h,f,nt[r.dtype]);let g=d;if(u!==null){let y=C.getUndoAxesPermutation(u);g=is({inputs:{x:d},attrs:{perm:y},backend:a}),a.disposeData(p.dataId),a.disposeData(d.dataId)}return g}var cne={kernelName:Ni,backendName:"wasm",setupFunc:dne,kernelFunc:pne},fw;function hne(e){fw=e.wasm.cwrap(Ri,null,["number","number","number","number","number","number"])}function mne(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=C.getAxesPermutation([s],l),p=r;u!==null&&(p=is({inputs:{x:r},attrs:{perm:u},backend:a}));let c=C.getInnerMostAxes(1,l)[0];C.assertAxesAreInnerMostDims("cumsum",[c],l);let d=a.makeOutput(p.shape,p.dtype),h=p.shape[c],m=a.dataIdMap.get(p.dataId).id,f=a.dataIdMap.get(d.dataId).id;fw(m,i?1:0,o?1:0,h,f,nt[r.dtype]);let g=d;if(u!==null){let y=C.getUndoAxesPermutation(u);g=is({inputs:{x:d},attrs:{perm:y},backend:a}),a.disposeData(p.dataId),a.disposeData(d.dataId)}return g}var fne={kernelName:Ri,backendName:"wasm",setupFunc:hne,kernelFunc:mne},gw;function gne(e){gw=e.wasm.cwrap("DenseBincount",null,["number","array","number","number","boolean","number","number","boolean","number"])}function yne(e){let{backend:t,inputs:a,attrs:n}=e,{x:r,weights:s}=a,{size:i,binaryOutput:o}=n,l=s.shape.reduce((d,h)=>d*h,1)!==0,u=r.shape.length===1?[i]:[r.shape[0],i],p=t.makeOutput(u,s.dtype);function c(d){return t.dataIdMap.get(d.dataId).id}return gw(c(r),new Uint8Array(new Int32Array(r.shape).buffer),r.shape.length,i,l,c(s),nt[s.dtype],o,c(p)),p}var xne={kernelName:fu,backendName:"wasm",setupFunc:gne,kernelFunc:yne},yw;function Ane(e){yw=e.wasm.cwrap(Mi,null,["number","number","number","array","number","array","array","number","number"])}function bne(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),m=i==="NHWC"?[o,c,d,h]:[o,h,c,d],f=t.makeOutput(m,"float32"),g=t.dataIdMap.get(r.dataId).id,y=new Uint8Array(new Int32Array(v.computeStrides(r.shape)).buffer),x=new Uint8Array(new Int32Array(m).buffer),A=new Uint8Array(new Int32Array(v.computeStrides(m)).buffer),b=t.dataIdMap.get(f.dataId).id;return yw(g,s,i==="NHWC"?1:0,y,r.shape.length-1,x,A,m.length,b),f}var vne={kernelName:Mi,backendName:"wasm",setupFunc:Ane,kernelFunc:bne},xw;function wne(e){xw=e.wasm.cwrap($i,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function kne(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=C.computeConv2DInfo(r.shape,s.shape,l,d,p,c,!0),m=h.filterHeight,f=h.filterWidth,g=h.padInfo.top,y=h.padInfo.right,x=h.padInfo.bottom,A=h.padInfo.left,b=h.dilationHeight,w=h.dilationWidth,I=h.strideHeight,T=h.strideWidth,N=h.inChannels,M=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 E=n.makeOutput(h.outShape,"float32"),S=n.dataIdMap.get(E.dataId).id;return xw(i,r.shape[0],r.shape[1],r.shape[2],o,m,f,g,y,x,A,$,b,w,I,T,N,M,S),E}var Ine={kernelName:$i,backendName:"wasm",setupFunc:wne,kernelFunc:kne},Aw;function Sne(e){Aw=e.wasm.cwrap("Diag",null,["number","number","number","number"])}function Cne(e){let{inputs:t,backend:a}=e,{x:n}=t,r=v.sizeFromShape(n.shape),s=a.makeOutput([...n.shape,...n.shape],n.dtype);return Aw(a.dataIdMap.get(n.dataId).id,nt[n.dtype],r,a.dataIdMap.get(s.dataId).id),s}var Tne={kernelName:gu,backendName:"wasm",setupFunc:Sne,kernelFunc:Cne},bw;function Nne(e){bw=e.wasm.cwrap(Pi,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function Rne(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,filter:s}=t,{strides:i,pad:o,dilations:l}=n;if(r.dtype!==s.dtype)throw new Error(`Dilation2D error: x must have the same dtype as filter. Got ${r.dtype} and ${s.dtype}`);let u=C.computeDilation2DInfo(r.shape,s.shape,i,o,"NHWC",l),p=a.makeOutput(u.outShape,r.dtype);return bw(a.dataIdMap.get(r.dataId).id,a.dataIdMap.get(s.dataId).id,a.dataIdMap.get(p.dataId).id,nt[r.dtype],u.batchSize,u.inChannels,u.inHeight,u.inWidth,u.outHeight,u.outWidth,u.strideHeight,u.strideWidth,u.dilationHeight,u.dilationWidth,u.filterHeight,u.filterWidth,u.padInfo.top,u.padInfo.left),p}var Ene={kernelName:Pi,backendName:"wasm",setupFunc:Nne,kernelFunc:Rne},vw;function Mne(e){vw=e.wasm.cwrap(ql,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function $ne(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,filter:s,dy:i}=t,{strides:o,pad:l,dilations:u}=n;if(r.dtype!==s.dtype||r.dtype!==i.dtype)throw new Error(`Dilation2DBackpropFilter error: x must have the same dtype as filter and dy. Got ${r.dtype}, ${s.dtype}, and ${i.dtype}`);let p=C.computeDilation2DInfo(r.shape,s.shape,o,l,"NHWC",u),c=a.makeOutput(s.shape,s.dtype);return vw(a.dataIdMap.get(r.dataId).id,a.dataIdMap.get(s.dataId).id,a.dataIdMap.get(i.dataId).id,a.dataIdMap.get(c.dataId).id,nt[r.dtype],p.batchSize,p.inChannels,p.inHeight,p.inWidth,p.outHeight,p.outWidth,p.strideHeight,p.strideWidth,p.dilationHeight,p.dilationWidth,p.filterHeight,p.filterWidth,p.padInfo.top,p.padInfo.left),c}var Pne={kernelName:ql,backendName:"wasm",setupFunc:Mne,kernelFunc:$ne},ww;function _ne(e){ww=e.wasm.cwrap(jl,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function Fne(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,filter:s,dy:i}=t,{strides:o,pad:l,dilations:u}=n;if(r.dtype!==s.dtype||r.dtype!==i.dtype)throw new Error(`Dilation2DBackpropInput error: x must have the same dtype as filter and dy. Got ${r.dtype}, ${s.dtype}, and ${i.dtype}`);let p=C.computeDilation2DInfo(r.shape,s.shape,o,l,"NHWC",u),c=a.makeOutput(r.shape,r.dtype);return ww(a.dataIdMap.get(r.dataId).id,a.dataIdMap.get(s.dataId).id,a.dataIdMap.get(i.dataId).id,a.dataIdMap.get(c.dataId).id,nt[r.dtype],p.batchSize,p.inChannels,p.inHeight,p.inWidth,p.outHeight,p.outWidth,p.strideHeight,p.strideWidth,p.dilationHeight,p.dilationWidth,p.filterHeight,p.filterWidth,p.padInfo.top,p.padInfo.left),c}var Dne={kernelName:jl,backendName:"wasm",setupFunc:_ne,kernelFunc:Fne},One=Qe(Fi),kw;function zne(e){kw=e.wasm.cwrap(yu,null,["number","number","number"])}function Lne(e){let{inputs:t,backend:a}=e,{dy:n,y:r}=t,s=a.makeOutput(r.shape,"float32"),i=o=>a.dataIdMap.get(o.dataId).id;return kw(i(r),i(n),i(s)),s}var Wne={kernelName:yu,backendName:"wasm",setupFunc:zne,kernelFunc:Lne},Bne=!1,Vne=Gt(Oi,Bne,"bool"),Une=Qe(Di),Gne=Qe(zi,"float32");function U1(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),La({inputs:{x:r},backend:n,attrs:{shape:o}})}var Hne={kernelName:xu,backendName:"wasm",kernelFunc:U1},jne=Qe(Li,"float32");function Iw(e){let{attrs:{shape:t,value:a},backend:n}=e,{attrs:{dtype:r}}=e;r=r||v.inferDtype(a);let s=n.makeOutput(t,r);return n.typedArrayFromHeap(s).fill(a),s}var qne={kernelName:Au,backendName:"wasm",kernelFunc:Iw},Sw;function Xne(e){Sw=e.wasm.cwrap(Wi,null,["number","number","number","number","number","number"])}function Kne(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 Sw(s,o,l,u,p,i),r}var Yne={kernelName:Wi,backendName:"wasm",kernelFunc:Kne,setupFunc:Xne},Zne=Qe(Bi),Jne=!1,Qne=Gt(Vi,Jne),Cw;function ere(e){Cw=e.wasm.cwrap(Ui,null,["number","number","number","number","number","number","number"])}function tre(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,m=u!=null?t.dataIdMap.get(u.dataId).id:0,f=t.makeOutput(s.shape,s.dtype);if(v.sizeFromShape(s.shape)===0)return f;let g=t.dataIdMap.get(f.dataId).id;return Cw(p,c,d,h,m,r,g),f}var are={kernelName:Ui,backendName:"wasm",setupFunc:ere,kernelFunc:tre},Tw;function nre(e){Tw=e.wasm.cwrap(Zr,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 rre(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:m}=a,f=C.computeConv2DInfo(r.shape,s.shape,l,p,u,d),g=np[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,x=n.dataIdMap.get(s.dataId).id,A=f.outChannels,b=0;if(i!=null){let X=n.dataIdMap.get(i.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]!==A)throw new Error(`FusedConv2D bias shape (${X.shape}) does not match the number of output channels (${A})`);b=X.id}let w=f.filterHeight,I=f.filterWidth,T=f.padInfo.top,N=f.padInfo.right,M=f.padInfo.bottom,$=f.padInfo.left,E=f.dilationHeight,S=f.dilationWidth,_=f.strideHeight,O=f.strideWidth,W=f.inChannels,P=f.padInfo.type==="SAME"?1:0,U=f.batchSize,G=f.inHeight,q=f.inWidth;if(c!=="NHWC")throw new Error(`wasm backend FusedConv2D does not support dataFormat:'${c}'. Please use 'NHWC'.`);let H=n.makeOutput(f.outShape,"float32"),V=n.dataIdMap.get(H.dataId).id,Z=o==null?0:n.dataIdMap.get(o.dataId).id;return Tw(y,U,G,q,x,w,I,b,T,N,M,$,P,E,S,_,O,W,A,g,Z,m||0,V),H}var sre={kernelName:Zr,backendName:"wasm",setupFunc:nre,kernelFunc:rre},Nw;function ire(e){Nw=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 ore(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:m}=a,f=C.computeConv2DInfo(r.shape,s.shape,l,p,u,d,!0),g=np[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,x=n.dataIdMap.get(s.dataId).id,A=f.outChannels,b=0;if(i!=null){let X=n.dataIdMap.get(i.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]!==A)throw new Error(`FusedDepthwiseConv2D bias shape (${X.shape}) does not match the number of output channels (${A})`);b=X.id}let w=f.filterHeight,I=f.filterWidth,T=f.padInfo.top,N=f.padInfo.right,M=f.padInfo.bottom,$=f.padInfo.left,E=f.dilationHeight,S=f.dilationWidth,_=f.strideHeight,O=f.strideWidth,W=f.inChannels,P=f.padInfo.type==="SAME"?1:0,U=f.batchSize,G=f.inHeight,q=f.inWidth;if(c!=="NHWC")throw new Error(`wasm backend FusedDepthwiseConv2D does not support dataFormat:'${c}'. Please use 'NHWC'.`);let H=n.makeOutput(f.outShape,"float32"),V=n.dataIdMap.get(H.dataId).id,Z=o==null?0:n.dataIdMap.get(o.dataId).id;return Nw(y,U,G,q,x,w,I,b,T,N,M,$,P,E,S,_,O,W,A,g,Z,m||0,V),H}var lre={kernelName:Jr,backendName:"wasm",setupFunc:ire,kernelFunc:ore},Rw;function ure(e){Rw=e.wasm.cwrap(Gi,null,["number","number","number","number","number","number","array","number"])}function dre(e){let{backend:t,inputs:a}=e,{params:n,indices:r}=a,[s,i,o,l]=s3.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,m=new Uint8Array(new Int32Array(l).buffer),f=t.dataIdMap.get(u.dataId).id;return Rw(d,nt[n.dtype],h,i,c,o,m,f),u}var pre={kernelName:Gi,backendName:"wasm",setupFunc:ure,kernelFunc:dre},Ew;function cre(e){Ew=e.wasm.cwrap("Gather",null,["number","number","array","number","number","number","array","number"])}function hre(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 T=0;T=0,()=>`GatherV2: the index value ${N} is not in [0, ${p-1}]`)}let c=C.segment_util.collectGatherOpShapeInfo(r,s,l,o),d=La({inputs:{x:r},attrs:{shape:[c.batchSize,c.outerSize,c.dimSize,c.sliceSize]},backend:t}),h=v.sizeFromShape(s.shape),m=La({inputs:{x:s},attrs:{shape:[c.batchSize,h/c.batchSize]},backend:t}),f=[c.batchSize,c.outerSize,h/c.batchSize,c.sliceSize],g=t.makeOutput(f,r.dtype);if(v.sizeFromShape(r.shape)===0)return g;let y=d.shape.length-1,x=t.dataIdMap.get(d.dataId).id,A=t.dataIdMap.get(m.dataId).id,b=t.dataIdMap.get(g.dataId).id,w=new Uint8Array(new Int32Array(v.computeStrides(d.shape)).buffer),I=new Uint8Array(new Int32Array(v.computeStrides(f)).buffer);return Ew(x,nt[r.dtype],w,y,A,c.batchSize,I,b),t.disposeData(d.dataId),t.disposeData(m.dataId),g.shape=c.outputShape,g}var mre={kernelName:bu,backendName:"wasm",setupFunc:cre,kernelFunc:hre},fre=!1,gre=Gt(Hi,fre,"bool"),yre=!1,xre=Gt(ji,yre,"bool"),Are=Qe(Xi,"bool"),bre=Qe(Ki,"bool"),vre=Qe(Yi,"bool"),Mw;function wre(e){Mw=e.wasm.cwrap(Zi,null,["number","number","number","number"])}function kre(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;Mw(r,nt[t.dtype],a,i)}return s}var Ire={kernelName:Zi,backendName:"wasm",setupFunc:wre,kernelFunc:kre},Sre=!1,Cre=Gt(Ji,Sre,"bool"),Tre=!1,Nre=Gt(Qi,Tre,"bool"),$w;function Rre(e){$w=e.wasm.cwrap(eo,null,["number","number","number","number"])}function Ere(e){let{attrs:t,backend:a}=e,{start:n,stop:r,num:s}=t,i=Math.floor(s),o=a.makeOutput([i],"float32");return $w(a.dataIdMap.get(o.dataId).id,n,r,i),o}var Mre={kernelName:eo,backendName:"wasm",setupFunc:Rre,kernelFunc:Ere},$re=Qe(to),Pre=Qe(ao),_re=!1,Fre=Gt(no,_re,"bool"),Dre=Qe(ro),Ore=!1,zre=Gt(so,Ore,"bool"),Lre=!1,Wre=Gt(RA,Lre,"bool"),Pw;function Bre(e){Pw=e.wasm.cwrap(io,null,["number","number","number","number","number","number","number"])}function Vre(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{depthRadius:s,bias:i,alpha:o,beta:l}=n;if(r.dtype!=="float32")throw new Error("LRN error: x must have dtype float32");let u=a.makeOutput(r.shape,r.dtype);return Pw(a.dataIdMap.get(r.dataId).id,a.dataIdMap.get(u.dataId).id,r.shape[3],s,i,o,l),u}var Ure={kernelName:io,backendName:"wasm",setupFunc:Bre,kernelFunc:Vre},_w;function Gre(e){_w=e.wasm.cwrap(vu,null,["number","number","number","number","number","number","number","number","number"])}function Hre(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,y:s,dy:i}=t,{depthRadius:o,bias:l,alpha:u,beta:p}=n;if(r.dtype!=="float32"||s.dtype!=="float32"||i.dtype!=="float32")throw new Error("LRNGrad error: x, y, and dy must have dtype float32");let c=a.makeOutput(r.shape,r.dtype);return _w(a.dataIdMap.get(r.dataId).id,a.dataIdMap.get(s.dataId).id,a.dataIdMap.get(i.dataId).id,a.dataIdMap.get(c.dataId).id,i.shape[3],o,l,u,p),c}var jre={kernelName:vu,backendName:"wasm",setupFunc:Gre,kernelFunc:Hre},Fw;function qre(e){Fw=e.wasm.cwrap(oo,null,["number","number","number","number"])}function Xre(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}=fs(i,r,t);if(d){let x=t.dataIdMap.get(u.dataId).id;l=u,o=x}let h=l.shape.length;C.assertAxesAreInnerMostDims("max",p,h);let[m,f]=C.computeOutAndReduceShapes(l.shape,p),g=v.sizeFromShape(f),y=t.makeOutput(m,i.dtype);if(v.sizeFromShape(l.shape)!==0){let x=t.dataIdMap.get(y.dataId).id;Fw(o,nt[i.dtype],g,x)}if(d&&t.disposeData(u.dataId),s){let x=C.expandShapeToKeepDim(y.shape,c);y.shape=x}return y}var Kre={kernelName:oo,backendName:"wasm",setupFunc:qre,kernelFunc:Xre},Yre=!1,Zre=Gt(lo,Yre),Dw;function Jre(e){Dw=e.wasm.cwrap(uo,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function Qre(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=C.computePool2DInfo(r.shape,i,o,1,l,u),c=p.filterHeight,d=p.filterWidth,h=p.padInfo.top,m=p.padInfo.right,f=p.padInfo.bottom,g=p.padInfo.left,y=p.dilationHeight,x=p.dilationWidth,A=p.strideHeight,b=p.strideWidth,w=p.inChannels,I=p.outChannels;if(p.dataFormat!=="channelsLast")throw new Error(`wasm backend does not support dataFormat:'${p.dataFormat}'. Please use 'channelsLast'.`);let T=n.makeOutput(p.outShape,"float32"),N=n.dataIdMap.get(T.dataId).id;return Dw(s,r.shape[0],r.shape[1],r.shape[2],c,d,h,m,f,g,y,x,A,b,w,I,N),T}var ese={kernelName:uo,backendName:"wasm",setupFunc:Jre,kernelFunc:Qre},Ow;function tse(e){Ow=e.wasm.cwrap("MaxPool3D",null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function ase(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{filterSize:s,strides:i,pad:o,dimRoundingMode:l,dataFormat:u}=n,p=C.computePool3DInfo(r.shape,s,i,1,o,l,u),c=a.makeOutput(p.outShape,r.dtype);return Ow(a.dataIdMap.get(r.dataId).id,a.dataIdMap.get(c.dataId).id,p.batchSize,p.inChannels,p.inDepth,p.inHeight,p.inWidth,p.outDepth,p.outHeight,p.outWidth,p.strideDepth,p.strideHeight,p.strideWidth,p.dilationDepth,p.dilationHeight,p.dilationWidth,p.effectiveFilterDepth,p.effectiveFilterHeight,p.effectiveFilterWidth,p.padInfo.front,p.padInfo.top,p.padInfo.left),c}var nse={kernelName:wu,backendName:"wasm",setupFunc:tse,kernelFunc:ase},zw;function rse(e){zw=e.wasm.cwrap("MaxPool3DGrad",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 sse(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,input:s}=t,{filterSize:i,strides:o,pad:l,dimRoundingMode:u}=n,p=C.computePool3DInfo(s.shape,i,o,1,l,u),c=a.makeOutput(s.shape,s.dtype);return zw(a.dataIdMap.get(s.dataId).id,a.dataIdMap.get(r.dataId).id,a.dataIdMap.get(c.dataId).id,p.batchSize,p.inChannels,p.inDepth,p.inHeight,p.inWidth,p.outDepth,p.outHeight,p.outWidth,p.strideDepth,p.strideHeight,p.strideWidth,p.dilationDepth,p.dilationHeight,p.dilationWidth,p.effectiveFilterDepth,p.effectiveFilterHeight,p.effectiveFilterWidth,p.padInfo.front,p.padInfo.top,p.padInfo.left),c}var ise={kernelName:wp,backendName:"wasm",setupFunc:rse,kernelFunc:sse},Lw;function ose(e){Lw=e.wasm.cwrap("MaxPoolGrad",null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function lse(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,input:s}=t,{filterSize:i,strides:o,pad:l,dimRoundingMode:u}=n,p=C.computePool2DInfo(s.shape,i,o,1,l,u),c=a.makeOutput(s.shape,s.dtype);return Lw(a.dataIdMap.get(s.dataId).id,a.dataIdMap.get(r.dataId).id,a.dataIdMap.get(c.dataId).id,p.batchSize,p.inChannels,p.inHeight,p.inWidth,p.outHeight,p.outWidth,p.strideHeight,p.strideWidth,p.dilationHeight,p.dilationWidth,p.effectiveFilterHeight,p.effectiveFilterWidth,p.padInfo.top,p.padInfo.left),c}var use={kernelName:vp,backendName:"wasm",setupFunc:ose,kernelFunc:lse},Ww;function dse(e){Ww=e.wasm.cwrap("MaxPoolWithArgmax",null,["number","number","number","number","boolean","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function pse(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{filterSize:s,strides:i,pad:o,includeBatchInIndex:l}=n;v.assert(r.shape.length===4,()=>`Error in maxPool: input must be rank 4 but got rank ${r.shape.length}.`);let u=[1,1];v.assert(C.eitherStridesOrDilationsAreOne(i,u),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${i} and dilations '${u}'`);let p=C.computePool2DInfo(r.shape,s,i,[1,1],o),c=a.makeOutput(p.outShape,r.dtype),d=a.makeOutput(p.outShape,"int32");return Ww(a.dataIdMap.get(r.dataId).id,a.dataIdMap.get(c.dataId).id,a.dataIdMap.get(d.dataId).id,nt[r.dtype],l,p.batchSize,p.inChannels,p.inHeight,p.inWidth,p.outHeight,p.outWidth,p.strideHeight,p.strideWidth,p.dilationHeight,p.dilationWidth,p.effectiveFilterHeight,p.effectiveFilterWidth,p.padInfo.top,p.padInfo.left),[c,d]}var cse={kernelName:ku,backendName:"wasm",setupFunc:dse,kernelFunc:pse},Bw;function hse(e){Bw=e.wasm.cwrap(po,null,["number, number, number"])}function mse(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}=fs(i,r,t),m=c;if(h){let b=t.dataIdMap.get(p.dataId).id;b!==o&&(u=p,l=b,m=C.getInnerMostAxes(m.length,u.shape.length))}C.assertAxesAreInnerMostDims("mean",m,u.shape.length);let[f,g]=C.computeOutAndReduceShapes(u.shape,m),y=v.sizeFromShape(g),x=u;u.dtype!=="float32"&&(x=gs({backend:t,inputs:{x:u},attrs:{dtype:"float32"}}),l=t.dataIdMap.get(x.dataId).id);let A=t.makeOutput(f,"float32");if(v.sizeFromShape(u.shape)!==0){let b=t.dataIdMap.get(A.dataId).id;Bw(l,y,b)}if(h&&t.disposeData(p.dataId),s){let b=C.expandShapeToKeepDim(A.shape,d);A.shape=b}return u.dtype!=="float32"&&t.disposeData(x.dataId),A}var fse={kernelName:po,backendName:"wasm",setupFunc:hse,kernelFunc:mse},Vw;function gse(e){Vw=e.wasm.cwrap(co,null,["number","number","number","number"])}function yse(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}=fs(i,r,t);if(h){let A=t.dataIdMap.get(p.dataId).id;A!==o&&(u=p,l=A)}let m=u.shape.length;C.assertAxesAreInnerMostDims("min",c,m);let[f,g]=C.computeOutAndReduceShapes(u.shape,c),y=v.sizeFromShape(g),x=t.makeOutput(f,u.dtype);if(v.sizeFromShape(u.shape)!==0){let A=t.dataIdMap.get(x.dataId).id;Vw(l,nt[i.dtype],y,A)}if(h&&t.disposeData(p.dataId),s){let A=C.expandShapeToKeepDim(x.shape,d);x.shape=A}return x}var xse={kernelName:co,backendName:"wasm",setupFunc:gse,kernelFunc:yse},Ase=!1,bse=Gt(ho,Ase),G1;(function(e){e[e.reflect=0]="reflect",e[e.symmetric=1]="symmetric"})(G1||(G1={}));var Uw;function vse(e){Uw=e.wasm.cwrap(mo,null,["number","array","number","number","array","array","number","number"])}function wse(e){let{inputs:{x:t},backend:a,attrs:{paddings:n,mode:r}}=e,s=n.map((m,f)=>m[0]+t.shape[f]+m[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(m=>m[0]),c=n.map(m=>m[1]),d=new Uint8Array(new Int32Array(p).buffer),h=new Uint8Array(new Int32Array(c).buffer);return Uw(i,u,t.shape.length,nt[t.dtype],d,h,G1[r],l),o}var kse={kernelName:mo,backendName:"wasm",kernelFunc:wse,setupFunc:vse},Gw;function Ise(e){Gw=e.wasm.cwrap(Ho,null,["number","number","number","number"])}function Hw(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||Gw(r,i,o,l),s}var Sse={kernelName:Ho,backendName:"wasm",setupFunc:Ise,kernelFunc:Hw},jw;function Cse(e){jw=e.wasm.cwrap(go,null,["number","number","number","number","number","number"])}function Tse(e){let{inputs:t,backend:a,attrs:n}=e,{logits:r}=t,{numSamples:s,seed:i,normalized:o}=n;if(r.dtype!=="float32")throw new Error(`Tensor logits must have dtype float32, got ${r.dtype}`);let l=o?r:Hw({inputs:{logits:r},backend:a,attrs:{dim:r.shape.length-1}}),[u,p]=l.shape,c=a.makeOutput([u,s],"int32");return jw(a.dataIdMap.get(l.dataId).id,u,p,s,i,a.dataIdMap.get(c.dataId).id),o||a.disposeData(l.dataId),c}var Nse={kernelName:go,backendName:"wasm",setupFunc:Cse,kernelFunc:Tse},Rse=Gt(fo,!0),Ese=!0,Mse=Gt(yo,Ese),$se=Qe(Iu);function V3(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 qw;function Pse(e){qw=e.wasm.cwrap(Ao,"number",["number","number","number","number","number"])}function _se(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=qw(u,p,s,r,i),{pSelectedIndices:d,selectedSize:h,pSelectedScores:m,pValidOutputs:f}=V3(t,c);return t.wasm._free(m),t.wasm._free(f),t.makeOutput([h],"int32",d)}var Fse={kernelName:Ao,backendName:"wasm",setupFunc:Pse,kernelFunc:_se},Xw;function Dse(e){Xw=e.wasm.cwrap(Su,"number",["number","number","number","number","number","bool"])}function Ose(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=Xw(p,c,s,r,i,o),{pSelectedIndices:h,selectedSize:m,pSelectedScores:f,pValidOutputs:g}=V3(t,d);t.wasm._free(f);let y=t.makeOutput([m],"int32",h),x=t.makeOutput([],"int32",g);return[y,x]}var zse={kernelName:Su,backendName:"wasm",setupFunc:Dse,kernelFunc:Ose},Kw;function Lse(e){Kw=e.wasm.cwrap(bo,"number",["number","number","number","number","number","number"])}function Wse(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=Kw(p,c,s,r,i,o),{pSelectedIndices:h,selectedSize:m,pSelectedScores:f,pValidOutputs:g}=V3(t,d);t.wasm._free(g);let y=t.makeOutput([m],"int32",h),x=t.makeOutput([m],"float32",f);return[y,x]}var Bse={kernelName:bo,backendName:"wasm",setupFunc:Lse,kernelFunc:Wse},Vse=!1,Use=Gt(xo,Vse,"bool"),Yw;function Gse(e){Yw=e.wasm.cwrap(vo,null,["number","number","number","number","number"])}function Hse(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 Yw(c,i,o,l,p),u}var jse={kernelName:vo,backendName:"wasm",setupFunc:Gse,kernelFunc:Hse};function qse(e){let{inputs:{x:t},backend:a}=e,n=a.makeOutput(t.shape,t.dtype);return a.typedArrayFromHeap(n).fill(1),n}var Xse={kernelName:Cu,backendName:"wasm",kernelFunc:qse};function Kse(e){let{inputs:t,backend:a,attrs:n}=e,{axis:r}=n;if(t.length===1)return U1({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=U1({inputs:{input:p},backend:a,attrs:{dim:r}});return o.push(c),c}),u=ow({inputs:l,backend:a,attrs:{axis:r}});return o.forEach(p=>a.disposeData(p.dataId)),u}var Yse={kernelName:Tu,backendName:"wasm",kernelFunc:Kse},Zw;function Zse(e){Zw=e.wasm.cwrap(wo,null,["number","array","number","number","array","array","number","number"])}function Jse(e){let{inputs:{x:t},backend:a,attrs:{paddings:n,constantValue:r}}=e,s=n.map((m,f)=>m[0]+t.shape[f]+m[1]);if(v.sizeFromShape(t.shape)===0)return Iw({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(m=>m[0]),c=n.map(m=>m[1]),d=new Uint8Array(new Int32Array(p).buffer),h=new Uint8Array(new Int32Array(c).buffer);return Zw(i,u,t.shape.length,nt[t.dtype],d,h,r,l),o}var Jw={kernelName:wo,backendName:"wasm",kernelFunc:Jse,setupFunc:Zse},Qse=!1,eie=Gt(ko,Qse),Qw;function tie(e){Qw=e.wasm.cwrap(Io,null,["number","number","number"])}function aie(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=gs({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 Qw(o,i,c),l.dtype!=="float32"&&a.disposeData(u.dataId),p}var nie={kernelName:Io,backendName:"wasm",setupFunc:tie,kernelFunc:aie},ek;function rie(e){ek=e.wasm.cwrap(So,null,["number","number","number","number"])}function sie(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}=fs(i,r,t),m=c;if(h){let A=t.dataIdMap.get(p.dataId).id;A!==o&&(u=p,l=A,m=C.getInnerMostAxes(m.length,u.shape.length))}C.assertAxesAreInnerMostDims("prod",m,u.shape.length);let[f,g]=C.computeOutAndReduceShapes(u.shape,m),y=v.sizeFromShape(g),x=t.makeOutput(f,u.dtype);if(v.sizeFromShape(u.shape)!==0){let A=t.dataIdMap.get(x.dataId).id;ek(l,y,nt[x.dtype],A)}if(h&&t.disposeData(p.dataId),s){let A=C.expandShapeToKeepDim(x.shape,d);x.shape=A}return x}var iie={kernelName:So,backendName:"wasm",setupFunc:rie,kernelFunc:sie},oie=e=>{let{backend:t,attrs:a}=e,{start:n,stop:r,step:s,dtype:i}=a,o=y3(n,r,s,i),l=t.makeOutput([o.length],i);return t.typedArrayFromHeap(l).set(o),l},lie={kernelName:Nu,backendName:"wasm",kernelFunc:oie},uie=!0,die=Gt(_i,uie),pie=Qe(Co),cie=Qe(To),hie=Qe(Eo),tk;function mie(e){tk=e.wasm.cwrap(Ro,null,["number","number","number","number","number","number","number","number","number","number"])}function fie(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,m=[p,l,u,h],f=t.dataIdMap.get(r.dataId),g;f.dtype!=="float32"&&(g=gs({backend:t,inputs:{x:r},attrs:{dtype:"float32"}}),f=t.dataIdMap.get(g.dataId));let y=f.id,x=t.makeOutput(m,"float32");if(v.sizeFromShape(r.shape)===0)return x;let A=t.dataIdMap.get(x.dataId).id;return tk(y,p,c,d,h,l,u,s?1:0,i?1:0,A),g!=null&&t.disposeData(g.dataId),x}var gie={kernelName:Ro,backendName:"wasm",setupFunc:mie,kernelFunc:fie},ak;function yie(e){ak=e.wasm.cwrap(Mu,null,["number","number","number","array","array","boolean"])}function xie(e){let{inputs:t,backend:a,attrs:n}=e,{images:r,dy:s}=t,{alignCorners:i}=n,o=a.makeOutput(r.shape,"float32"),l=a.dataIdMap.get(r.dataId),u;return l.dtype!=="float32"&&(u=gs({backend:a,inputs:{x:r},attrs:{dtype:"float32"}}),l=a.dataIdMap.get(u.dataId)),ak(a.dataIdMap.get(r.dataId).id,a.dataIdMap.get(s.dataId).id,a.dataIdMap.get(o.dataId).id,new Uint8Array(new Int32Array(r.shape).buffer),new Uint8Array(new Int32Array(s.shape).buffer),i),u!=null&&a.disposeData(u.dataId),o}var Aie={kernelName:Mu,backendName:"wasm",setupFunc:yie,kernelFunc:xie},nk;function bie(e){nk=e.wasm.cwrap(No,null,["number","number","number","number","number","number","number","number","number","number"])}function vie(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,m=[p,l,u,h],f=t.makeOutput(m,"float32");if(v.sizeFromShape(r.shape)===0)return f;let g=t.dataIdMap.get(r.dataId),y;g.dtype!=="float32"&&(y=gs({backend:t,inputs:{x:r},attrs:{dtype:"float32"}}),g=t.dataIdMap.get(y.dataId));let x=g.id,A=t.dataIdMap.get(f.dataId).id;return nk(x,p,c,d,h,l,u,s?1:0,i?1:0,A),y!=null&&t.disposeData(y.dataId),f}var wie={kernelName:No,backendName:"wasm",setupFunc:bie,kernelFunc:vie},rk;function kie(e){rk=e.wasm.cwrap(Eu,null,["number","number","number","array","array","boolean"])}function Iie(e){let{inputs:t,backend:a,attrs:n}=e,{images:r,dy:s}=t,{alignCorners:i}=n,o=a.makeOutput(r.shape,"float32"),l=a.dataIdMap.get(r.dataId),u;return l.dtype!=="float32"&&(u=gs({backend:a,inputs:{x:r},attrs:{dtype:"float32"}}),l=a.dataIdMap.get(u.dataId)),rk(a.dataIdMap.get(r.dataId).id,a.dataIdMap.get(s.dataId).id,a.dataIdMap.get(o.dataId).id,new Uint8Array(new Int32Array(r.shape).buffer),new Uint8Array(new Int32Array(s.shape).buffer),i),u!=null&&a.disposeData(u.dataId),o}var Sie={kernelName:Eu,backendName:"wasm",setupFunc:kie,kernelFunc:Iie},sk;function Cie(e){sk=e.wasm.cwrap(Mo,null,["number","array","number","array","number","number"])}function Tie(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 l0({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);sk(l,p,i.length,c,r.shape.length,u);let d=La({inputs:{x:o},attrs:{shape:r.shape},backend:a});return a.disposeData(o.dataId),d}var Nie={kernelName:Mo,backendName:"wasm",kernelFunc:Tie,setupFunc:Cie},ik;function Rie(e){ik=e.wasm.cwrap(el,null,["number","number","number","number","number","number","number","number","array","number","number"])}function Eie(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,m]=r.shape,[f,g]=C.getImageCenter(o,d,h),y=i===0,x=255,A=typeof i=="number"?[i,i,i,y?0:x]:[...i,x],b=new Uint8Array(new Int32Array(A).buffer);return ik(u,c,d,h,m,s,f,g,b,A.length,p),l}var Mie={kernelName:el,backendName:"wasm",kernelFunc:Eie,setupFunc:Rie},$ie=Qe($o),Pie=Qe(Po),ok;function _ie(e){ok=e.wasm.cwrap(_o,null,["number","number","number","number","number","number","array","number","number"])}function Fie(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}=jh.calculateShapes(s,r,i),h=t.dataIdMap.get(r.dataId).id,m=t.dataIdMap.get(s.dataId).id,f=new Uint8Array(new Int32Array(c).buffer),g=t.dataIdMap.get(o.dataId).id;return ok(h,m,nt[s.dtype],l,u,p,f,d,g),o}var Die={kernelName:_o,backendName:"wasm",setupFunc:_ie,kernelFunc:Fie},lk;function Oie(e){lk=e.wasm.cwrap(Do,null,["number","number","number","number","number","number","bool","number"])}function zie(e){let{inputs:t,backend:a,attrs:n}=e,{sortedSequence:r,values:s}=t,{side:i}=n;if(r.dtype!==s.dtype)throw new Error(`SearchSorted error: sorted_sequence must have the same dtype as values. Got ${r.dtype} and ${s.dtype}`);let o=a.makeOutput(s.shape,"int32");function l(u){return a.dataIdMap.get(u.dataId).id}return lk(l(r),l(s),r.shape[0],r.shape[1],s.shape[1],nt[r.dtype],i==="left",l(o)),o}var Lie={kernelName:Do,backendName:"wasm",setupFunc:Oie,kernelFunc:zie},uk;function Wie(e){uk=e.wasm.cwrap("SelectV2",null,["number","number","number","number","number"])}function Bie(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 uk(i,o,l,h,p),u}var Vie={kernelName:$u,backendName:"wasm",kernelFunc:Bie,setupFunc:Wie},Uie=Qe(Oo),dk;function Gie(e){dk=e.wasm.cwrap(Bo,null,["number","number"])}function Hie(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||dk(n,s),r}var jie={kernelName:"Sigmoid",backendName:"wasm",setupFunc:Gie,kernelFunc:Hie},qie=Qe(Wo),Xie=Qe(zo),Kie=Qe(Lo),Yie=Qe(Vo);function Zie(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(C.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,m=a.makeOutput(p,r.dtype),f=a.dataIdMap.get(m.dataId).id,g=a.makeOutput([4],"int32"),y=a.dataIdMap.get(g.dataId).id;ck(c,nt[r.dtype],r.shape[0],d,h,f,y,t,0);let x=a.readSync(g.dataId),A;switch(x[0]){case 0:{A=C.getSparseSegmentReductionNegativeSegmentIdsErrorMessage();break}case 1:{A=C.getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage();break}case 2:A=C.getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage(x[1],x[2]);break;case 3:A=C.getSparseSegmentReductionIndicesOutOfRangeErrorMessage(x[1],x[2],x[3]);break;default:A=""}if(a.disposeData(g.dataId),A)throw a.disposeData(m.dataId),new Error(A);return m}function roe(e){return mk(e,!0)}var soe={kernelName:Ou,backendName:"wasm",setupFunc:hk,kernelFunc:roe};function ioe(e){return mk(e,!1)}var ooe={kernelName:zu,backendName:"wasm",setupFunc:hk,kernelFunc:ioe},fk;function loe(e){fk=e.wasm.cwrap(jo,null,["number","number","number","number","number","number","number","number","array","number","number"])}function uoe(e){let{backend:t,inputs:a,attrs:n}=e,{sparseIndices:r,sparseValues:s,defaultValue:i}=a,{outputShape:o}=n,l=t.makeOutput(o,i.dtype);if(v.sizeFromShape(o)===0)return l;let{sliceRank:u,numUpdates:p,sliceSize:c,strides:d,outputSize:h}=C.calculateShapes(s,r,o),m=t.dataIdMap.get(r.dataId).id,f=t.dataIdMap.get(s.dataId).id,g=t.dataIdMap.get(i.dataId).id,y=new Uint8Array(new Int32Array(d).buffer),x=t.dataIdMap.get(l.dataId).id;return fk(m,f,s.shape.length,g,nt[i.dtype],u,p,c,y,h,x),l}var doe={kernelName:jo,backendName:"wasm",setupFunc:loe,kernelFunc:uoe};function poe(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=C.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=si({inputs:{x:r},attrs:{begin:u,size:d},backend:n});return u[o]+=c,h})}var coe={kernelName:Fu,backendName:"wasm",kernelFunc:poe},hoe=Qe(Uo),moe=Qe(Sp),foe=!0,goe=Gt(qo,foe),gk;function yoe(e){gk=e.wasm.cwrap(ds,null,["number","number","number","number"])}function xoe(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 gk(i,r,nt[s.dtype],l),o}var Aoe={kernelName:ds,backendName:"wasm",setupFunc:yoe,kernelFunc:xoe},yk;function boe(e){yk=e.wasm.cwrap(Xo,null,["number","array","number","array","array","array","array","array","number","number"])}function voe(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:m,isIdentity:f,sliceDim0:g,isSimpleSlice:y,begin:x,end:A,strides:b}=Nt.sliceInfo(r.shape,s,i,o,l,u,p,c,d),w;if(f)w=La({inputs:{x:r},backend:t,attrs:{shape:m}});else if(g||y){v.assert(r.shape.length>=1,()=>`Input must have rank at least 1, got: ${r.shape.length}`);let I=Nt.computeOutShape(x,A,b),T=si({inputs:{x:r},backend:t,attrs:{begin:x,size:I}});w=La({inputs:{x:T},backend:t,attrs:{shape:m}}),t.disposeData(T.dataId)}else{let I=t.makeOutput(h,"float32"),T=t.dataIdMap.get(r.dataId).id,N=new Uint8Array(new Int32Array(v.computeStrides(r.shape)).buffer),M=new Uint8Array(new Int32Array(x).buffer),$=new Uint8Array(new Int32Array(A).buffer),E=new Uint8Array(new Int32Array(b).buffer),S=new Uint8Array(new Int32Array(h).buffer),_=new Uint8Array(new Int32Array(v.computeStrides(h)).buffer),O=t.dataIdMap.get(I.dataId).id;yk(T,N,r.shape.length,M,$,E,S,_,h.length,O),w=La({inputs:{x:I},backend:t,attrs:{shape:m}}),t.disposeData(I.dataId)}return w}var woe={kernelName:Xo,backendName:"wasm",setupFunc:boe,kernelFunc:voe};function koe(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),[m,f]=A3(d,h,i,o,l,u,p,c),g=t.makeOutput([m.length],"string"),y=t.dataIdMap.get(g.dataId);y.stringBytes=m;let x=t.makeOutput(s.shape,"int32");return t.typedArrayFromHeap(x).set(f),[g,x]}var Ioe={kernelName:Lu,backendName:"wasm",kernelFunc:koe};function Soe(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]=b3(o,l[0],i),d=p.length,h=t.makeOutput([d,2],"int32");t.typedArrayFromHeap(h).set(u);let m=t.makeOutput([d],"string"),f=t.dataIdMap.get(m.dataId);f.stringBytes=p;let g=t.makeOutput([2],"int32");return t.typedArrayFromHeap(g).set(c),[h,m,g]}var Coe={kernelName:Tp,backendName:"wasm",kernelFunc:Soe};function Toe(e){let{backend:t,inputs:a,attrs:n}=e,{input:r}=a,{numBuckets:s}=n,i=t.readSync(r.dataId),o=v3(i,s),l=t.makeOutput(r.shape,"int32");return t.typedArrayFromHeap(l).set(o),l}var Noe={kernelName:Np,backendName:"wasm",kernelFunc:Toe},Roe=!0,Eoe=Gt(Ko,Roe),xk;function Moe(e){xk=e.wasm.cwrap(Go,null,["number","number","number","number"])}function $oe(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}=fs(i,r,t),m=c;if(h){let A=t.dataIdMap.get(p.dataId).id;A!==o&&(u=p,l=A,m=C.getInnerMostAxes(m.length,u.shape.length))}C.assertAxesAreInnerMostDims("sum",m,u.shape.length);let[f,g]=C.computeOutAndReduceShapes(u.shape,m),y=v.sizeFromShape(g),x=t.makeOutput(f,u.dtype);if(v.sizeFromShape(u.shape)!==0){let A=t.dataIdMap.get(x.dataId).id;xk(l,y,nt[x.dtype],A)}if(h&&t.disposeData(p.dataId),s){let A=C.expandShapeToKeepDim(x.shape,d);x.shape=A}return x}var Poe={kernelName:Go,backendName:"wasm",setupFunc:Moe,kernelFunc:$oe},_oe=Qe(Yo),Foe=Qe(Zo),Ak;function Doe(e){Ak=e.wasm.cwrap(Fo,null,["number","number","number","number","number","number","array","number","number","number"])}function Ooe(e){let{backend:t,inputs:a,attrs:n}=e,{tensor:r,indices:s,updates:i}=a,{}=n,o=t.makeOutput(r.shape,r.dtype);if(v.sizeFromShape(r.shape)===0)return o;let{sliceRank:l,numUpdates:u,sliceSize:p,strides:c,outputSize:d}=jh.calculateShapes(i,s,r.shape),h=t.dataIdMap.get(s.dataId).id,m=t.dataIdMap.get(i.dataId).id,f=t.dataIdMap.get(r.dataId).id,g=new Uint8Array(new Int32Array(c).buffer),y=t.dataIdMap.get(o.dataId).id;return Ak(h,m,nt[i.dtype],l,u,p,g,d,y,f),o}var zoe={kernelName:Fo,backendName:"wasm",setupFunc:Doe,kernelFunc:Ooe},bk;function Loe(e){bk=e.wasm.cwrap(us,null,["number","array","number","array","number","number"])}function Woe(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 vk(i,o,n.shape.length,nt[n.dtype],r,s,p,d),[u,c]},Goe={kernelName:Jo,backendName:"wasm",setupFunc:Voe,kernelFunc:Uoe},wk;function Hoe(e){wk=e.wasm.cwrap(Qo,null,["number","number","bool","number","number","number","number","number","number","array","number","array","number","number","number","number","number"])}function joe(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,[m,f]=u!=null?u:[c,d],g=[p,m,f,h],y=new Uint8Array(new Int32Array(v.computeStrides(r.shape)).buffer),x=new Uint8Array(new Int32Array(v.computeStrides(g)).buffer),A=t.makeOutput(g,r.dtype),b=t.dataIdMap.get(A.dataId).id,w=t.dataIdMap.get(r.dataId).id,I=t.dataIdMap.get(s.dataId).id,T=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 wk(w,I,s.shape[0]>1,p,m,f,h,d,c,y,r.shape.length-1,x,g.length-1,T,N,l,b),A}var qoe={kernelName:Qo,backendName:"wasm",setupFunc:Hoe,kernelFunc:joe};function Xoe(e){let{inputs:t,attrs:a,backend:n}=e,{axis:r}=a,{x:s}=t,{outputValues:i,outputShape:o,indices:l}=k3(n.readSync(s.dataId),r,s.shape,s.dtype);return[n.makeOutput(o,s.dtype,void 0,i),n.makeOutput([l.length],"int32",void 0,l)]}var Koe={kernelName:Rp,backendName:"wasm",kernelFunc:Xoe};function Yoe(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:m,shape:l}))}var Zoe={kernelName:Wu,backendName:"wasm",kernelFunc:Yoe};function Joe(e){let{inputs:{x:t},backend:a}=e,n=a.makeOutput(t.shape,t.dtype);return a.typedArrayFromHeap(n).fill(0),n}var Qoe={kernelName:Bu,backendName:"wasm",kernelFunc:Joe},ele=[Fte,Dte,Ote,zte,Wte,Ute,Zte,eae,tae,aae,nae,rae,sae,iae,oae,dae,Aae,hae,gae,kae,Rae,$ae,_ae,Dae,Oae,zae,Bae,Vae,Hae,Xae,Zae,ene,nne,rne,sne,lne,pne,mne,yne,bne,kne,Cne,Rne,$ne,Fne,Dne,Lne,Bne,Vne,Une,Gne,Hne,jne,Kne,Yne,Jne,tre,rre,ore,dre,hre,fre,yre,Gte,xre,Are,bre,kre,Sre,Tre,Ere,$re,Mre,_re,Fre,Ore,Lre,Vre,Hre,Xre,Yre,Qre,ase,sse,lse,pse,mse,yse,Ase,wse,Tse,Nse,Ese,Mse,_se,Ose,Wse,Vse,Hse,qse,Kse,Zw,Qse,aie,sie,oie,uie,die,pie,cie,bae,fie,xie,vie,Iie,Tie,Eie,Mie,$ie,Fie,zie,Bie,Vie,Hie,jie,qie,Xie,Tae,Ise,Kie,Zie,eoe,noe,soe,ooe,doe,coe,hoe,moe,goe,Aoe,woe,Ioe,Coe,Noe,Eoe,Poe,_oe,Foe,zoe,Boe,Goe,qoe,Xte,Koe,Zoe,Qoe];for(let e of ele)xn(e);var H1=B();H1.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}});H1.registerFlag("WASM_HAS_MULTITHREAD_SUPPORT",async()=>{if(H1.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 X5=nu(aT()),tle=nu(nT()),K5=nu(rT()),Y5=X5.default||X5,ale=K5.default||K5,kk=class extends ru{constructor(e){super(),this.wasm=e,this.dataIdNextNumber=1,this.wasm.tfjs.initWithThreadsCount(Ik),j1=this.wasm.tfjs.getThreadsCount(),this.dataIdMap=new ip(this,It())}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)>>>0;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 sle(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,n){let r;if(a==null)r=this.write(n!=null?n:null,e,t);else{let s=this.dataIdNextNumber++;r={id:s},this.dataIdMap.set(r,{id:s,memoryOffset:a,shape:e,dtype:t,refCount:1});let i=v.sizeFromShape(e);this.wasm.tfjs.registerTensor(s,i,a)}return{dataId:r,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 nle(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 Z5(e,t,a){if(Ch!=null)return Ch;let n="tfjs-backend-wasm.wasm";return e&&t?n="tfjs-backend-wasm-threaded-simd.wasm":e&&(n="tfjs-backend-wasm-simd.wasm"),Fd!=null&&Fd[n]!=null?Fd[n]:a+n}async function rle(){let[e,t]=await Promise.all([B().getAsync("WASM_HAS_SIMD_SUPPORT"),B().getAsync("WASM_HAS_MULTITHREAD_SUPPORT")]);return new Promise((a,n)=>{let r={};r.locateFile=(o,l)=>{if(o.endsWith(".worker.js")){let u=tle.wasmWorkerContents.replace(/\n/g,"\\n"),p=new Blob([u],{type:"application/javascript"});return URL.createObjectURL(p)}return o.endsWith(".wasm")?Z5(e,t,$d!=null?$d:l):l+o},U3&&(r.instantiateWasm=nle(Z5(e,t,$d!=null?$d:"")));let s=!1;r.onAbort=()=>{s||Dd||(Dd=!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&&Ch==null?(r.mainScriptUrlOrBlob=new Blob(["var WasmBackendModuleThreadedSimd = "+Y5.toString()],{type:"text/javascript"}),i=Y5(r)):i=ale(r),i.then(o=>{s=!0,Dd=!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 sle(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 ile=["tfjs-backend-wasm.wasm","tfjs-backend-wasm-simd.wasm","tfjs-backend-wasm-threaded-simd.wasm"],Ch=null,$d=null,Fd={},Dd=!1,U3=!1;function ole(e,t=!1){if(og("setWasmPath has been deprecated in favor of setWasmPaths and will be removed in a future release."),Dd)throw new Error("The WASM backend was already initialized. Make sure you call `setWasmPath()` before you call `tf.setBackend()` or `tf.ready()`");Ch=e,U3=t}function u0(e,t=!1){if(Dd)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")$d=e;else{Fd=e;let a=ile.filter(n=>Fd[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.`)}U3=t}var Ik=-1,j1=-1;function lle(e){Ik=e}function ule(){if(j1===-1)throw new Error("WASM backend not initialized.");return j1}var dle="4.17.0",ple=2;tl("wasm",async()=>{let{wasm:e}=await rle();return new kk(e)},ple);var An=B();An.registerFlag("WEBGPU_DEFERRED_SUBMIT_BATCH_SIZE",()=>15);An.registerFlag("WEBGPU_CPU_FORWARD",()=>!0);An.registerFlag("WEBGPU_MATMUL_PROGRAM_TYPE",()=>-1);An.registerFlag("WEBGPU_USE_NAIVE_CONV2D_TRANSPOSE",()=>!0);An.registerFlag("WEBGPU_USE_LOW_POWER_GPU",()=>!1);An.registerFlag("WEBGPU_CPU_HANDOFF_SIZE_THRESHOLD",()=>1e3);An.registerFlag("WEBGPU_USE_PROFILE_TOOL",()=>!1);An.registerFlag("WEBGPU_IMPORT_EXTERNAL_TEXTURE",()=>!0);An.registerFlag("WEBGPU_USE_NAIVE_CONV2D_DEBUG",()=>!1);An.registerFlag("WEBGPU_THRESHOLD_TO_INCREASE_WORKGROUPS_FOR_MATMUL",()=>-1);An.registerFlag("WEBGPU_CONV_SEPARATE_IM2COL_SHADER",()=>!1);An.registerFlag("WEBGPU_PRINT_SHADER",()=>"");An.registerFlag("WEBGPU_ENGINE_COMPILE_ONLY",()=>!1);var cle=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"}},hle=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}acquireBuffer(e,t,a=!1,n=!0){let r,s=J5(e,t);return n?(this.freeBuffers.has(s)||this.freeBuffers.set(s,[]),this.freeBuffers.get(s).length>0?(r=this.freeBuffers.get(s).pop(),this.numFreeBuffers--):(r=this.device.createBuffer({size:e,usage:t,mappedAtCreation:a}),this.numBytesAllocated+=e)):(r=this.device.createBuffer({size:e,usage:t,mappedAtCreation:a}),this.numBytesAllocated+=e),this.usedBuffers.has(s)||this.usedBuffers.set(s,[]),this.usedBuffers.get(s).push(r),this.numUsedBuffers++,this.numBytesUsed+=e,r}releaseBuffer(e,t=!0){if(this.freeBuffers.size===0)return;let a=e.size,n=e.usage,r=J5(a,n),s=this.usedBuffers.get(r),i=s.indexOf(e);if(i<0)throw new Error("Cannot find the buffer in buffer manager");s[i]=s[s.length-1],s.pop(),this.numUsedBuffers--,this.numBytesUsed-=a,t?(this.freeBuffers.get(r).push(e),this.numFreeBuffers++):(e.destroy(),this.numBytesAllocated-=a)}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 J5(e,t){return`${e}_${t}`}var mle=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=eA(a),s=e*t*r,i=Q5(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){if(this.freeTextures.size===0)return;let t=e.width,a=e.height,n=e.format,r=e.usage,s=Q5(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=eA(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 Q5(e,t,a,n){return`${e}_${t}_${a}_${n}`}function eA(e){if(e==="rgba8unorm")return 16;throw new Error(`${e} is not supported!`)}function fle(e,t){if(Math.max(...e)>5)throw new Error("Cannot symbolically compute strides for rank > 6 tensor.");let a=e.length,n="xyzwuv",r=e.map(i=>`${t}.${n[i]}`),s=new Array(a-1);s[a-2]=r[a-1];for(let i=a-3;i>=0;--i)s[i]=`(${s[i+1]} * ${r[i+1]})`;return s}var ys=(e,t,a)=>a==="int32"?`atomicAdd(${e}, bitcast(${t}));`:` + ${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),m=t.dataIdMap.get(h.dataId).id,f=t.makeOutput([3],"int32"),g=t.dataIdMap.get(f.dataId).id;ck(i,o,l,u,d,m,g);let y=t.readSync(f.dataId),x;switch(y[0]){case 0:{x=C.getSparseReshapeMultipleNegativeOneOutputDimErrorMessage(y[1],y[2]);break}case 1:{x=C.getSparseReshapeNegativeOutputDimErrorMessage(y[1],y[2]);break}case 2:x=C.getSparseReshapeEmptyTensorZeroOutputDimErrorMessage();break;case 3:{let A=Array.from(t.readSync(r.dataId)),b=Array.from(t.readSync(h.dataId));x=C.getSparseReshapeInputOutputMultipleErrorMessage(A,b);break}case 4:{let A=Array.from(t.readSync(r.dataId)),b=Array.from(t.readSync(h.dataId));x=C.getSparseReshapeInputOutputMismatchErrorMessage(A,b);break}default:x=""}if(t.disposeData(f.dataId),x)throw t.disposeData(c.dataId),t.disposeData(h.dataId),new Error(x);return[c,h]}var roe={kernelName:Du,backendName:"wasm",setupFunc:aoe,kernelFunc:noe},hk;function mk(e){hk=e.wasm.cwrap("SparseSegmentReduction",null,["number","number","number","number","number","number","number","number","number"])}function fk(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(C.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,m=a.makeOutput(p,r.dtype),f=a.dataIdMap.get(m.dataId).id,g=a.makeOutput([4],"int32"),y=a.dataIdMap.get(g.dataId).id;hk(c,nt[r.dtype],r.shape[0],d,h,f,y,t,0);let x=a.readSync(g.dataId),A;switch(x[0]){case 0:{A=C.getSparseSegmentReductionNegativeSegmentIdsErrorMessage();break}case 1:{A=C.getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage();break}case 2:A=C.getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage(x[1],x[2]);break;case 3:A=C.getSparseSegmentReductionIndicesOutOfRangeErrorMessage(x[1],x[2],x[3]);break;default:A=""}if(a.disposeData(g.dataId),A)throw a.disposeData(m.dataId),new Error(A);return m}function soe(e){return fk(e,!0)}var ioe={kernelName:Ou,backendName:"wasm",setupFunc:mk,kernelFunc:soe};function ooe(e){return fk(e,!1)}var loe={kernelName:zu,backendName:"wasm",setupFunc:mk,kernelFunc:ooe},gk;function uoe(e){gk=e.wasm.cwrap(jo,null,["number","number","number","number","number","number","number","number","array","number","number"])}function doe(e){let{backend:t,inputs:a,attrs:n}=e,{sparseIndices:r,sparseValues:s,defaultValue:i}=a,{outputShape:o}=n,l=t.makeOutput(o,i.dtype);if(v.sizeFromShape(o)===0)return l;let{sliceRank:u,numUpdates:p,sliceSize:c,strides:d,outputSize:h}=C.calculateShapes(s,r,o),m=t.dataIdMap.get(r.dataId).id,f=t.dataIdMap.get(s.dataId).id,g=t.dataIdMap.get(i.dataId).id,y=new Uint8Array(new Int32Array(d).buffer),x=t.dataIdMap.get(l.dataId).id;return gk(m,f,s.shape.length,g,nt[i.dtype],u,p,c,y,h,x),l}var poe={kernelName:jo,backendName:"wasm",setupFunc:uoe,kernelFunc:doe};function coe(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=C.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=si({inputs:{x:r},attrs:{begin:u,size:d},backend:n});return u[o]+=c,h})}var hoe={kernelName:Fu,backendName:"wasm",kernelFunc:coe},moe=Qe(Uo),foe=Qe(Sp),goe=!0,yoe=Gt(qo,goe),yk;function xoe(e){yk=e.wasm.cwrap(ds,null,["number","number","number","number"])}function Aoe(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 yk(i,r,nt[s.dtype],l),o}var boe={kernelName:ds,backendName:"wasm",setupFunc:xoe,kernelFunc:Aoe},xk;function voe(e){xk=e.wasm.cwrap(Xo,null,["number","array","number","array","array","array","array","array","number","number"])}function woe(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:m,isIdentity:f,sliceDim0:g,isSimpleSlice:y,begin:x,end:A,strides:b}=Nt.sliceInfo(r.shape,s,i,o,l,u,p,c,d),w;if(f)w=La({inputs:{x:r},backend:t,attrs:{shape:m}});else if(g||y){v.assert(r.shape.length>=1,()=>`Input must have rank at least 1, got: ${r.shape.length}`);let I=Nt.computeOutShape(x,A,b),T=si({inputs:{x:r},backend:t,attrs:{begin:x,size:I}});w=La({inputs:{x:T},backend:t,attrs:{shape:m}}),t.disposeData(T.dataId)}else{let I=t.makeOutput(h,"float32"),T=t.dataIdMap.get(r.dataId).id,N=new Uint8Array(new Int32Array(v.computeStrides(r.shape)).buffer),M=new Uint8Array(new Int32Array(x).buffer),$=new Uint8Array(new Int32Array(A).buffer),E=new Uint8Array(new Int32Array(b).buffer),S=new Uint8Array(new Int32Array(h).buffer),_=new Uint8Array(new Int32Array(v.computeStrides(h)).buffer),O=t.dataIdMap.get(I.dataId).id;xk(T,N,r.shape.length,M,$,E,S,_,h.length,O),w=La({inputs:{x:I},backend:t,attrs:{shape:m}}),t.disposeData(I.dataId)}return w}var koe={kernelName:Xo,backendName:"wasm",setupFunc:voe,kernelFunc:woe};function Ioe(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),[m,f]=A3(d,h,i,o,l,u,p,c),g=t.makeOutput([m.length],"string"),y=t.dataIdMap.get(g.dataId);y.stringBytes=m;let x=t.makeOutput(s.shape,"int32");return t.typedArrayFromHeap(x).set(f),[g,x]}var Soe={kernelName:Lu,backendName:"wasm",kernelFunc:Ioe};function Coe(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]=b3(o,l[0],i),d=p.length,h=t.makeOutput([d,2],"int32");t.typedArrayFromHeap(h).set(u);let m=t.makeOutput([d],"string"),f=t.dataIdMap.get(m.dataId);f.stringBytes=p;let g=t.makeOutput([2],"int32");return t.typedArrayFromHeap(g).set(c),[h,m,g]}var Toe={kernelName:Tp,backendName:"wasm",kernelFunc:Coe};function Noe(e){let{backend:t,inputs:a,attrs:n}=e,{input:r}=a,{numBuckets:s}=n,i=t.readSync(r.dataId),o=v3(i,s),l=t.makeOutput(r.shape,"int32");return t.typedArrayFromHeap(l).set(o),l}var Roe={kernelName:Np,backendName:"wasm",kernelFunc:Noe},Eoe=!0,Moe=Gt(Ko,Eoe),Ak;function $oe(e){Ak=e.wasm.cwrap(Go,null,["number","number","number","number"])}function Poe(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}=fs(i,r,t),m=c;if(h){let A=t.dataIdMap.get(p.dataId).id;A!==o&&(u=p,l=A,m=C.getInnerMostAxes(m.length,u.shape.length))}C.assertAxesAreInnerMostDims("sum",m,u.shape.length);let[f,g]=C.computeOutAndReduceShapes(u.shape,m),y=v.sizeFromShape(g),x=t.makeOutput(f,u.dtype);if(v.sizeFromShape(u.shape)!==0){let A=t.dataIdMap.get(x.dataId).id;Ak(l,y,nt[x.dtype],A)}if(h&&t.disposeData(p.dataId),s){let A=C.expandShapeToKeepDim(x.shape,d);x.shape=A}return x}var _oe={kernelName:Go,backendName:"wasm",setupFunc:$oe,kernelFunc:Poe},Foe=Qe(Yo),Doe=Qe(Zo),bk;function Ooe(e){bk=e.wasm.cwrap(Fo,null,["number","number","number","number","number","number","array","number","number","number"])}function zoe(e){let{backend:t,inputs:a,attrs:n}=e,{tensor:r,indices:s,updates:i}=a,{}=n,o=t.makeOutput(r.shape,r.dtype);if(v.sizeFromShape(r.shape)===0)return o;let{sliceRank:l,numUpdates:u,sliceSize:p,strides:c,outputSize:d}=jh.calculateShapes(i,s,r.shape),h=t.dataIdMap.get(s.dataId).id,m=t.dataIdMap.get(i.dataId).id,f=t.dataIdMap.get(r.dataId).id,g=new Uint8Array(new Int32Array(c).buffer),y=t.dataIdMap.get(o.dataId).id;return bk(h,m,nt[i.dtype],l,u,p,g,d,y,f),o}var Loe={kernelName:Fo,backendName:"wasm",setupFunc:Ooe,kernelFunc:zoe},vk;function Woe(e){vk=e.wasm.cwrap(us,null,["number","array","number","array","number","number"])}function Boe(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 wk(i,o,n.shape.length,nt[n.dtype],r,s,p,d),[u,c]},Hoe={kernelName:Jo,backendName:"wasm",setupFunc:Uoe,kernelFunc:Goe},kk;function joe(e){kk=e.wasm.cwrap(Qo,null,["number","number","bool","number","number","number","number","number","number","array","number","array","number","number","number","number","number"])}function qoe(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,[m,f]=u!=null?u:[c,d],g=[p,m,f,h],y=new Uint8Array(new Int32Array(v.computeStrides(r.shape)).buffer),x=new Uint8Array(new Int32Array(v.computeStrides(g)).buffer),A=t.makeOutput(g,r.dtype),b=t.dataIdMap.get(A.dataId).id,w=t.dataIdMap.get(r.dataId).id,I=t.dataIdMap.get(s.dataId).id,T=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 kk(w,I,s.shape[0]>1,p,m,f,h,d,c,y,r.shape.length-1,x,g.length-1,T,N,l,b),A}var Xoe={kernelName:Qo,backendName:"wasm",setupFunc:joe,kernelFunc:qoe};function Koe(e){let{inputs:t,attrs:a,backend:n}=e,{axis:r}=a,{x:s}=t,{outputValues:i,outputShape:o,indices:l}=k3(n.readSync(s.dataId),r,s.shape,s.dtype);return[n.makeOutput(o,s.dtype,void 0,i),n.makeOutput([l.length],"int32",void 0,l)]}var Yoe={kernelName:Rp,backendName:"wasm",kernelFunc:Koe};function Zoe(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:m,shape:l}))}var Joe={kernelName:Wu,backendName:"wasm",kernelFunc:Zoe};function Qoe(e){let{inputs:{x:t},backend:a}=e,n=a.makeOutput(t.shape,t.dtype);return a.typedArrayFromHeap(n).fill(0),n}var ele={kernelName:Bu,backendName:"wasm",kernelFunc:Qoe},tle=[Dte,Ote,zte,Lte,Bte,Gte,Jte,tae,aae,nae,rae,sae,iae,oae,lae,pae,bae,mae,yae,Iae,Eae,Pae,Fae,Oae,zae,Lae,Vae,Uae,jae,Kae,Jae,tne,rne,sne,ine,une,cne,fne,xne,vne,Ine,Tne,Ene,Pne,Dne,One,Wne,Vne,Une,Gne,Hne,jne,qne,Yne,Zne,Qne,are,sre,lre,pre,mre,gre,xre,Hte,Are,bre,vre,Ire,Cre,Nre,Mre,Pre,$re,Fre,Dre,zre,Wre,Ure,jre,Kre,Zre,ese,nse,ise,use,cse,fse,xse,bse,kse,Nse,Rse,Mse,$se,Fse,zse,Bse,Use,jse,Xse,Yse,Jw,eie,nie,iie,lie,die,pie,cie,hie,vae,gie,Aie,wie,Sie,Nie,Mie,$ie,Pie,Die,Lie,Vie,Uie,jie,qie,Xie,Kie,Nae,Sse,Yie,Jie,toe,roe,ioe,loe,poe,hoe,moe,foe,yoe,boe,koe,Soe,Toe,Roe,Moe,_oe,Foe,Doe,Loe,Voe,Hoe,Xoe,Kte,Yoe,Joe,ele];for(let e of tle)xn(e);var H1=B();H1.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}});H1.registerFlag("WASM_HAS_MULTITHREAD_SUPPORT",async()=>{if(H1.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 K5=nu(nT()),ale=nu(rT()),Y5=nu(sT()),Z5=K5.default||K5,nle=Y5.default||Y5,Ik=class extends ru{constructor(e){super(),this.wasm=e,this.dataIdNextNumber=1,this.wasm.tfjs.initWithThreadsCount(Sk),j1=this.wasm.tfjs.getThreadsCount(),this.dataIdMap=new ip(this,It())}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)>>>0;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 ile(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,n){let r;if(a==null)r=this.write(n!=null?n:null,e,t);else{let s=this.dataIdNextNumber++;r={id:s},this.dataIdMap.set(r,{id:s,memoryOffset:a,shape:e,dtype:t,refCount:1});let i=v.sizeFromShape(e);this.wasm.tfjs.registerTensor(s,i,a)}return{dataId:r,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 rle(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 J5(e,t,a){if(Ch!=null)return Ch;let n="tfjs-backend-wasm.wasm";return e&&t?n="tfjs-backend-wasm-threaded-simd.wasm":e&&(n="tfjs-backend-wasm-simd.wasm"),Fd!=null&&Fd[n]!=null?Fd[n]:a+n}async function sle(){let[e,t]=await Promise.all([B().getAsync("WASM_HAS_SIMD_SUPPORT"),B().getAsync("WASM_HAS_MULTITHREAD_SUPPORT")]);return new Promise((a,n)=>{let r={};r.locateFile=(o,l)=>{if(o.endsWith(".worker.js")){let u=ale.wasmWorkerContents.replace(/\n/g,"\\n"),p=new Blob([u],{type:"application/javascript"});return URL.createObjectURL(p)}return o.endsWith(".wasm")?J5(e,t,$d!=null?$d:l):l+o},U3&&(r.instantiateWasm=rle(J5(e,t,$d!=null?$d:"")));let s=!1;r.onAbort=()=>{s||Dd||(Dd=!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&&Ch==null?(r.mainScriptUrlOrBlob=new Blob(["var WasmBackendModuleThreadedSimd = "+Z5.toString()],{type:"text/javascript"}),i=Z5(r)):i=nle(r),i.then(o=>{s=!0,Dd=!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 ile(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 ole=["tfjs-backend-wasm.wasm","tfjs-backend-wasm-simd.wasm","tfjs-backend-wasm-threaded-simd.wasm"],Ch=null,$d=null,Fd={},Dd=!1,U3=!1;function lle(e,t=!1){if(og("setWasmPath has been deprecated in favor of setWasmPaths and will be removed in a future release."),Dd)throw new Error("The WASM backend was already initialized. Make sure you call `setWasmPath()` before you call `tf.setBackend()` or `tf.ready()`");Ch=e,U3=t}function u0(e,t=!1){if(Dd)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")$d=e;else{Fd=e;let a=ole.filter(n=>Fd[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.`)}U3=t}var Sk=-1,j1=-1;function ule(e){Sk=e}function dle(){if(j1===-1)throw new Error("WASM backend not initialized.");return j1}var ple="4.21.0",cle=2;tl("wasm",async()=>{let{wasm:e}=await sle();return new Ik(e)},cle);var An=B();An.registerFlag("WEBGPU_DEFERRED_SUBMIT_BATCH_SIZE",()=>15);An.registerFlag("WEBGPU_CPU_FORWARD",()=>!0);An.registerFlag("WEBGPU_MATMUL_PROGRAM_TYPE",()=>-1);An.registerFlag("WEBGPU_USE_NAIVE_CONV2D_TRANSPOSE",()=>!0);An.registerFlag("WEBGPU_USE_LOW_POWER_GPU",()=>!1);An.registerFlag("WEBGPU_CPU_HANDOFF_SIZE_THRESHOLD",()=>1e3);An.registerFlag("WEBGPU_USE_PROFILE_TOOL",()=>!1);An.registerFlag("WEBGPU_IMPORT_EXTERNAL_TEXTURE",()=>!0);An.registerFlag("WEBGPU_USE_NAIVE_CONV2D_DEBUG",()=>!1);An.registerFlag("WEBGPU_THRESHOLD_TO_INCREASE_WORKGROUPS_FOR_MATMUL",()=>-1);An.registerFlag("WEBGPU_CONV_SEPARATE_IM2COL_SHADER",()=>!1);An.registerFlag("WEBGPU_PRINT_SHADER",()=>"");An.registerFlag("WEBGPU_ENGINE_COMPILE_ONLY",()=>!1);var hle=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"}},mle=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}acquireBuffer(e,t,a=!1,n=!0){let r,s=Q5(e,t);return n?(this.freeBuffers.has(s)||this.freeBuffers.set(s,[]),this.freeBuffers.get(s).length>0?(r=this.freeBuffers.get(s).pop(),this.numFreeBuffers--):(r=this.device.createBuffer({size:e,usage:t,mappedAtCreation:a}),this.numBytesAllocated+=e)):(r=this.device.createBuffer({size:e,usage:t,mappedAtCreation:a}),this.numBytesAllocated+=e),this.usedBuffers.has(s)||this.usedBuffers.set(s,[]),this.usedBuffers.get(s).push(r),this.numUsedBuffers++,this.numBytesUsed+=e,r}releaseBuffer(e,t=!0){if(this.freeBuffers.size===0)return;let a=e.size,n=e.usage,r=Q5(a,n),s=this.usedBuffers.get(r),i=s.indexOf(e);if(i<0)throw new Error("Cannot find the buffer in buffer manager");s[i]=s[s.length-1],s.pop(),this.numUsedBuffers--,this.numBytesUsed-=a,t?(this.freeBuffers.get(r).push(e),this.numFreeBuffers++):(e.destroy(),this.numBytesAllocated-=a)}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 Q5(e,t){return`${e}_${t}`}var fle=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=tA(a),s=e*t*r,i=eA(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){if(this.freeTextures.size===0)return;let t=e.width,a=e.height,n=e.format,r=e.usage,s=eA(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=tA(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 eA(e,t,a,n){return`${e}_${t}_${a}_${n}`}function tA(e){if(e==="rgba8unorm")return 16;throw new Error(`${e} is not supported!`)}function gle(e,t){if(Math.max(...e)>5)throw new Error("Cannot symbolically compute strides for rank > 6 tensor.");let a=e.length,n="xyzwuv",r=e.map(i=>`${t}.${n[i]}`),s=new Array(a-1);s[a-2]=r[a-1];for(let i=a-3;i>=0;--i)s[i]=`(${s[i+1]} * ${r[i+1]})`;return s}var ys=(e,t,a)=>a==="int32"?`atomicAdd(${e}, bitcast(${t}));`:` { var oldValue = 0; loop { @@ -5006,12 +5006,12 @@ return a / b;`,TJ=` } oldValue = res.old_value; } - }`,au;(function(e){e[e.FROM_PIXELS=0]="FROM_PIXELS",e[e.DRAW=1]="DRAW"})(au||(au={}));var gle=(e,t,a,n,r)=>{let s={dtype:n.dtype,shape:n.shape},i=xle(a,s,t),o=e.createShaderModule({code:i,label:t.constructor.name}),l=B().get("WEBGPU_PRINT_SHADER");if(l!==""){l=l.toLowerCase();let u=l.split(",");(l==="all"||u.some(p=>t.shaderKey.toLowerCase().includes(p)))&&(console.group(t.shaderKey),console.debug(i),console.groupEnd())}return r?e.createComputePipelineAsync({compute:{module:o,entryPoint:"_start"},label:t.constructor.name,layout:"auto"}):e.createComputePipeline({compute:{module:o,entryPoint:"_start"},label:t.constructor.name,layout:"auto"})},Xe=(e,t="f32")=>{switch(e){case 1:return`${t}`;case 2:return`vec2<${t}>`;case 3:return`vec3<${t}>`;case 4:return`vec4<${t}>`;default:throw new Error(`${e}-component ${t} is not supported.`)}};function Pt(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 Ir(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 ue(...e){let t;switch(e.length){case 0:t=` + }`,au;(function(e){e[e.FROM_PIXELS=0]="FROM_PIXELS",e[e.DRAW=1]="DRAW"})(au||(au={}));var yle=(e,t,a,n,r)=>{let s={dtype:n.dtype,shape:n.shape},i=Ale(a,s,t),o=e.createShaderModule({code:i,label:t.constructor.name}),l=B().get("WEBGPU_PRINT_SHADER");if(l!==""){l=l.toLowerCase();let u=l.split(",");(l==="all"||u.some(p=>t.shaderKey.toLowerCase().includes(p)))&&(console.group(t.shaderKey),console.debug(i),console.groupEnd())}return r?e.createComputePipelineAsync({compute:{module:o,entryPoint:"_start"},label:t.constructor.name,layout:"auto"}):e.createComputePipeline({compute:{module:o,entryPoint:"_start"},label:t.constructor.name,layout:"auto"})},Xe=(e,t="f32")=>{switch(e){case 1:return`${t}`;case 2:return`vec2<${t}>`;case 3:return`vec3<${t}>`;case 4:return`vec4<${t}>`;default:throw new Error(`${e}-component ${t} is not supported.`)}};function Pt(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 Ir(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 ue(...e){let t;switch(e.length){case 0:t=` fn main() `;break;case 1:t=` fn main(${e[0]} : i32) - `;break;default:throw Error("Unreachable")}return t}function tA(e,t){let a;return a=` - ${yle(t)} + `;break;default:throw Error("Unreachable")}return t}function aA(e,t){let a;return a=` + ${xle(t)} fn _start(@builtin(local_invocation_id) LocalId : vec3, @builtin(global_invocation_id) GlobalId : vec3, @builtin(local_invocation_index) LocalIndex: u32, @@ -5024,9 +5024,9 @@ return a / b;`,TJ=` workgroupId = WorkgroupId; ${e?"main(getGlobalIndex());":"main();"}; } - `,a}function yle(e){return` + `,a}function xle(e){return` @compute @workgroup_size(${e.workgroupSize[0]}, ${e.workgroupSize[1]}, ${e.workgroupSize[2]}) -`}function xle(e,t,a){let n=[],r=a.workgroupSize[0]*a.workgroupSize[1]*a.workgroupSize[2];if(a.outputComponent=a.outputComponent?a.outputComponent:1,n.push(` +`}function Ale(e,t,a){let n=[],r=a.workgroupSize[0]*a.workgroupSize[1]*a.workgroupSize[2];if(a.outputComponent=a.outputComponent?a.outputComponent:1,n.push(` var localId: vec3; var localIndex: u32; @@ -5036,7 +5036,7 @@ return a / b;`,TJ=` // Only used when the y/z dimension of workgroup size is 1. fn getGlobalIndex() -> i32 { - ${Sk(a)?" return i32(globalId.x);":` return i32((workgroupId.z * numWorkgroups.x * numWorkgroups.y + + ${Ck(a)?" return i32(globalId.x);":` return i32((workgroupId.z * numWorkgroups.x * numWorkgroups.y + workgroupId.y * numWorkgroups.x + workgroupId.x) * ${r}u + localIndex); `} @@ -5051,10 +5051,10 @@ return a / b;`,TJ=` ${h} @group(0) @binding(2) var uniforms: Uniform; - `);let f=nA(a);return[aA,n.join(` -`),lh(t.shape),a.getUserCode(),tA(f,a)].join(` + `);let f=rA(a);return[nA,n.join(` +`),lh(t.shape),a.getUserCode(),aA(f,a)].join(` `)}let s,i,o="struct Uniforms { NAN : f32, INFINITY : f32, ";a.variableNames.forEach((h,m)=>{let f=Pt(e[m].shape.length);o+=`${h.charAt(0).toLowerCase()+h.slice(1)}Shape : ${f}, `,s=e[m].shape.length-1,i=Pt(s),o+=`${h.charAt(0).toLowerCase()+h.slice(1)}ShapeStrides: ${i}, `});let l=Pt(t.shape.length);o+=`outShape : ${l}, `,s=t.shape.length-1,i=Pt(s),o+=` - outShapeStrides: ${i}, `,a.size&&(o+="size : i32, "),a.uniforms&&(o+=a.uniforms),o+="};",o=Tle(o),n.push(o),a.atomic?n.push(` + outShapeStrides: ${i}, `,a.size&&(o+="size : i32, "),a.uniforms&&(o+=a.uniforms),o+="};",o=Nle(o),n.push(o),a.atomic?n.push(` @group(0) @binding(0) var result: array>; `):n.push(` @group(0) @binding(0) var result: array<${Hs(t.dtype,a.outputComponent)}>; @@ -5062,10 +5062,10 @@ return a / b;`,TJ=` @group(0) @binding(${1+m}) var ${h}: array<${a.variableComponents?Hs(e[m].dtype,a.variableComponents[m]):Hs(e[m].dtype,a.outputComponent)}>; `)}),o!==""&&n.push(` @group(0) @binding(${1+a.variableNames.length}) var uniforms: Uniforms; - `);let u=Ile(t.shape,a.dispatchLayout),p=[aA,n.join(` -`)+ble,lh(t.shape),u,Sle(t.shape.length)];a.atomic||p.push(Cle(t.shape,t.dtype,a.outputComponent)),a.variableNames.forEach((h,m)=>{p.push(`${lh(e[m].shape,h)}`)});let c=e.map((h,m)=>kle(h,t.shape,a.variableComponents?a.variableComponents[m]:a.outputComponent,a.dispatchLayout.x.length===t.shape.length)).join(` -`);p.push(c),p.push(a.getUserCode());let d=nA(a);return p.push(tA(d,a)),p.join(` -`)}function Ale(e,t,a){let n=e.shaderKey;if(e.pixelsOpType!=null)return n;let r=[],s=[];t.forEach(p=>{r.push(p.shape),s.push(p.dtype)}),r.push(a.shape),s.push(a.dtype);let i=t.map(p=>C.getBroadcastDims(p.shape,a.shape)),o=t.map(p=>v.arraysEqual(p.shape,a.shape)).join("_"),l=i.map(p=>p.join("_")).join(";"),u=Sk(e)?"flatDispatch":"";return n+="_"+(e.workgroupSize?e.workgroupSize.join(","):"")+r.map(p=>p.length).join(",")+s.join(",")+e.variableNames.join(",")+l+o+u,n}var aA=` + `);let u=Sle(t.shape,a.dispatchLayout),p=[nA,n.join(` +`)+vle,lh(t.shape),u,Cle(t.shape.length)];a.atomic||p.push(Tle(t.shape,t.dtype,a.outputComponent)),a.variableNames.forEach((h,m)=>{p.push(`${lh(e[m].shape,h)}`)});let c=e.map((h,m)=>Ile(h,t.shape,a.variableComponents?a.variableComponents[m]:a.outputComponent,a.dispatchLayout.x.length===t.shape.length)).join(` +`);p.push(c),p.push(a.getUserCode());let d=rA(a);return p.push(aA(d,a)),p.join(` +`)}function ble(e,t,a){let n=e.shaderKey;if(e.pixelsOpType!=null)return n;let r=[],s=[];t.forEach(p=>{r.push(p.shape),s.push(p.dtype)}),r.push(a.shape),s.push(a.dtype);let i=t.map(p=>C.getBroadcastDims(p.shape,a.shape)),o=t.map(p=>v.arraysEqual(p.shape,a.shape)).join("_"),l=i.map(p=>p.join("_")).join(";"),u=Ck(e)?"flatDispatch":"";return n+="_"+(e.workgroupSize?e.workgroupSize.join(","):"")+r.map(p=>p.length).join(",")+s.join(",")+e.variableNames.join(",")+l+o+u,n}var nA=` 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}; @@ -5115,7 +5115,7 @@ return a / b;`,TJ=` let floatToUint: vec4 = bitcast>(val); return (floatToUint & vec4(0x7fffffffu)) > vec4(0x7f800000u); } -`,ble=` +`,vle=` fn isinf(val: f32) -> bool { return abs(val) == uniforms.INFINITY; } @@ -5127,7 +5127,7 @@ return a / b;`,TJ=` ${l} return ${i}(${o.join(",")}); } - `}function vle(e,t){let a=e.name,n=e.shape.length,r=Pt(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` + `}function wle(e,t){let a=e.name,n=e.shape.length,r=Pt(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` fn ${s}() -> ${Xe(t)} { return ${Xe(t)}(${a}[0]); } @@ -5136,7 +5136,7 @@ return a / b;`,TJ=` return ${Xe(t)}(${a}[getIndexFromCoords${u}(${r}(${i.join(",")}), ${l})${t===1?"":` / ${t}`}]); } - `}function wle(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=Pt(l);if(v.arraysEqual(e.shape,t)&&n)return` + `}function kle(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=Pt(l);if(v.arraysEqual(e.shape,t)&&n)return` fn ${i}Index(globalIndex : i32) -> ${Xe(a)} { return ${Xe(a)}(${r}[globalIndex]); } @@ -5165,13 +5165,13 @@ return a / b;`,TJ=` ${d} return ${Xe(a)}(${r}[getIndexFromCoords${f}(${h}, ${m})${a===1?"":` / ${a}`}]); } -`}function kle(e,t,a,n){let r=vle(e,a);return e.shape.length<=t.length&&(r+=wle(e,t,a,n)),r}function Ile(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() -> ${Pt(s)}{ +`}function Ile(e,t,a,n){let r=wle(e,a);return e.shape.length<=t.length&&(r+=kle(e,t,a,n)),r}function Sle(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() -> ${Pt(s)}{ let globalIndex = getGlobalIndex(); return getCoordsFromIndex(globalIndex); } - `;let o="",l=[a,n,r];for(let d=0;d ${p} { + `;let o="",l=[a,n,r];for(let d=0;d ${p} { ${o} -`;return u.length===0?c+=`return ${p}(0); }`:c+=`return ${p}(${u.join(",")}); }`,c}function Sle(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 Cle(e){let t="";switch(e){case 0:case 1:t+=` fn getOutputIndexFromCoords(coords : i32) -> i32 { return coords; } @@ -5205,7 +5205,7 @@ return a / b;`,TJ=` coords.u * uniforms.outShapeStrides.u + coords.v; } - `;break;default:v.assert(!1,()=>`Unsupported ${e}D shape`);break}return t}function Sk(e){return e.dispatch[1]===1&&e.dispatch[2]===1}function Hs(e,t=1){if(e==="float32")return Xe(t,"f32");if(e==="int32"||e==="bool")return Xe(t,"i32");throw new Error(`type ${e} is not supported.`)}function Cle(e,t,a){let n=e.length,r=Hs(t,a),s=`fn setOutputAtIndex(flatIndex : i32, value : ${Xe(a)}) { + `;break;default:v.assert(!1,()=>`Unsupported ${e}D shape`);break}return t}function Ck(e){return e.dispatch[1]===1&&e.dispatch[2]===1}function Hs(e,t=1){if(e==="float32")return Xe(t,"f32");if(e==="int32"||e==="bool")return Xe(t,"i32");throw new Error(`type ${e} is not supported.`)}function Tle(e,t,a){let n=e.length,r=Hs(t,a),s=`fn setOutputAtIndex(flatIndex : i32, value : ${Xe(a)}) { result[flatIndex] = ${r}(value); } @@ -5221,40 +5221,40 @@ return a / b;`,TJ=` let flatIndex = getOutputIndexFromCoords(${o}(${i.join(", ")})); setOutputAtIndexI32(flatIndex${a===1?"":` / ${a}`}, value); } - `}return s}function Tle(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 nA(e){return!(e.dispatchLayout.hasOwnProperty("y")&&e.dispatchLayout.y.length!==0||e.dispatchLayout.hasOwnProperty("z")&&e.dispatchLayout.z.length!==0)}var Ck={};Ze(Ck,{GPUBytesPerElement:()=>q1,MatMulProgramType:()=>Dn,assertNotComplex:()=>q3,computeDispatch:()=>de,computeWorkPerThreadForConv2d:()=>H3,computeWorkgroupInfoForMatMul:()=>Tk,computeWorkgroupSizeForConv2d:()=>G3,flatDispatchLayout:()=>me,isWebGPUSupported:()=>j3,tilesFitEvenlyIntoShape:()=>Nle});var Xs=e=>{let t=1;for(let a=0;aa%e[n]===0)}function de(e,t,a=[1,1,1],n=[1,1,1]){let[r,s,i]=[Math.ceil(Xs(e.x.map(o=>t[o]))/(a[0]*n[0])),e.y?Math.ceil(Xs(e.y.map(o=>t[o]))/(a[1]*n[1])):1,e.z?Math.ceil(Xs(e.z.map(o=>t[o]))/(a[2]*n[2])):1];return[r,s,i]}function Tk(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 G3(e,t,a=!1){if(a)return[8,8,1];let n=Xs(e.x.map(s=>t[s])),r=Xs(e.y.map(s=>t[s]));return n<=4?[4,16,1]:r<=4?[16,4,1]:[16,16,1]}function H3(e,t,a=!1){if(a)return[4,4,1];let n=Xs(e.x.map(s=>t[s])),r=Xs(e.y.map(s=>t[s]));return n<=4?[1,2,1]:r<=4?[2,1,1]:[2,2,1]}function me(e){return{x:e.map((t,a)=>a)}}function q1(e){if(e==="float32"||e==="int32"||e==="bool"||e==="string")return 4;if(e==="complex64")return 8;throw new Error(`Unknown dtype ${e}`)}function j3(){return!!(typeof globalThis!="undefined"&&globalThis.navigator&&globalThis.navigator.gpu)}function q3(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 WebGPU backend.`)})}var Dn;(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"})(Dn||(Dn={}));var Rle=B().getNumber("WEBGPU_CPU_HANDOFF_SIZE_THRESHOLD"),Ele=(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]},X3=class Nk extends ru{nextDataId(){return Nk.nextDataId++}constructor(t,a){if(super(),this.commandQueueOwnedIds=new WeakSet,this.dispatchCountInPass=0,this.disposed=!1,this.downloadWaitMs=0,this.tensorDataPendingDisposal=[],this.queryResolveBuffer=null,this.querySet=null,this.querySetCount=2,this.stagingPendingDisposal=[],this.uniformPendingDisposal=[],this.uploadWaitMs=0,this.hasReadSyncWarned=!1,this.hasTimestampQueryWarned=!1,!j3())throw new Error("WebGPU is not supported on this device");this.pipelineCache={},this.device=t,this.queue=t.queue,this.commandEncoder=null,this.computePassEncoder=null,this.adapterInfo=new cle(a),this.supportTimestampQuery=this.device.features.has("timestamp-query"),this.thresholdToIncreaseWorkgroups=this.adapterInfo.intelGPUGeneration>=12?16:8,this.bufferManager=new hle(this.device),this.textureManager=new mle(this.device),this.tensorMap=new ip(this,It()),B().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:t,format:"bgra8unorm"}),document.body.appendChild(this.dummyCanvas))}floatPrecision(){return 32}disposeData(t,a=!1){if(!this.tensorMap.has(t))return!0;let n=this.tensorMap.get(t);return a?n.refCount=0:n.refCount--,n.refCount>0?!1:(n.complexTensorInfos!=null&&(this.disposeData(n.complexTensorInfos.real.dataId),this.disposeData(n.complexTensorInfos.imag.dataId)),this.commandQueueOwnedIds.has(t)?(this.tensorDataPendingDisposal.push(t),!0):(this.releaseResource(t),this.tensorMap.delete(t),!0))}memory(){return{numBytesInGPU:this.bufferManager.numBytesUsed,numBytesAllocatedInGPU:this.bufferManager.numBytesAllocated,unreliable:!1}}releaseResource(t){let a=this.tensorMap.get(t);if(!(!a||!a.resource)){if(a.external){a.resource=null;return}a.resource instanceof GPUBuffer?this.bufferManager.releaseBuffer(a.resource):a.resource instanceof GPUTexture&&this.textureManager.releaseTexture(a.resource),a.resource=null}}refCount(t){return this.tensorMap.has(t)?this.tensorMap.get(t).refCount:0}incRef(t){let a=this.tensorMap.get(t);a.refCount++}decRef(t){if(this.tensorMap.has(t)){let a=this.tensorMap.get(t);a.refCount--}}write(t,a,n){if(n==="complex64"&&t!=null)throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag).");let r={id:this.nextDataId()};return this.tensorMap.set(r,{dtype:n,shape:a,values:t,refCount:1}),r}move(t,a,n,r,s){if(r==="complex64")throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag).");this.tensorMap.set(t,{dtype:r,shape:n,values:a,refCount:s})}submitQueue(){this.queue.submit([this.commandEncoder.finish()]),this.commandEncoder=null,this.dispatchCountInPass=0,this.commandQueueOwnedIds=new WeakSet,this.tensorDataPendingDisposal.forEach(t=>{this.releaseResource(t),this.tensorMap.delete(t)}),this.uniformPendingDisposal.forEach(t=>this.bufferManager.releaseBuffer(t)),this.stagingPendingDisposal.forEach(t=>this.bufferManager.releaseBuffer(t,!1)),this.tensorDataPendingDisposal=[],this.uniformPendingDisposal=[],this.stagingPendingDisposal=[]}ensureCommandEncoderReady(){this.commandEncoder||(this.commandEncoder=this.device.createCommandEncoder())}endComputePassEncoder(){this.computePassEncoder&&(this.computePassEncoder.end(),this.computePassEncoder=null)}async checkCompileCompletionAsync(){let t;try{t=await Promise.all(Object.values(this.pipelineCache))}catch(a){throw new Error(a.message)}Object.keys(this.pipelineCache).map((a,n)=>{this.pipelineCache[a]=t[n]})}async getBufferData(t){if(B().getBool("WEBGPU_ENGINE_COMPILE_ONLY"))return console.warn("The data may be invalid since WEBGPU_ENGINE_COMPILE_ONLY is true, this can only be called when WEBGPU_ENGINE_COMPILE_ONLY is false"),null;let a=t.size,n=this.bufferManager.acquireBuffer(a,GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ);this.ensureCommandEncoderReady(),this.endComputePassEncoder(),this.commandEncoder.copyBufferToBuffer(t,0,n,0,a),this.submitQueue(),await n.mapAsync(GPUMapMode.READ);let r=n.getMappedRange().slice(0);return n.unmap(),n!=null&&this.bufferManager.releaseBuffer(n),B().getBool("WEBGPU_USE_PROFILE_TOOL")&&(v.assert(this.dummyContext!==void 0,()=>"Fail to get context for profiling tool"),this.dummyContext.getCurrentTexture()),r}convertAndCacheOnCPU(t,a){let n=this.tensorMap.get(t);return n.values=a,n.values}readSync(t){let a=this.tensorMap.get(t),{values:n,complexTensorInfos:r}=a;if(n!=null||a.dtype==="string")return n;if(a.dtype==="complex64"){let f=this.readSync(r.real.dataId),g=this.readSync(r.imag.dataId),y=v.convertBackendValuesAndArrayBuffer(C.mergeRealAndImagArrays(f,g).buffer,"float32");return this.convertAndCacheOnCPU(t,y),y}this.hasReadSyncWarned||(this.hasReadSyncWarned=!0,console.warn("The performance of synchronously reading data from GPU to CPU is poor on the webgpu backend, please use asynchronous APIs instead."));let s=["opaque","premultiplied"],i=a.resource,o=i.size;v.assert(o%4===0,()=>"Because there is 4 bytes for one pixel, buffer size must be multiple of 4.");let l=o/4,u=new ArrayBuffer(o),p=256,c=256,d=s.map(f=>new OffscreenCanvas(p,c)),h=new OffscreenCanvas(p,c);this.endComputePassEncoder(),d.map((f,g)=>{let y=f.getContext("webgpu");return y.configure({device:this.device,format:"bgra8unorm",usage:GPUTextureUsage.COPY_DST,alphaMode:s[g]}),y.getCurrentTexture()}).map((f,g)=>{let y=p*4,x=(N,M,$)=>{this.ensureCommandEncoderReady(),this.commandEncoder.copyBufferToTexture({buffer:i,bytesPerRow:y,offset:$},{texture:f},{width:N,height:M}),this.submitQueue();let E=h.getContext("2d",{willReadFrequently:!0});E.clearRect(0,0,N,M),E.drawImage(d[g],0,0);let S=E.getImageData(0,0,N,M).data,_=s[g],O=new Uint8ClampedArray(u,$,N*M*4);for(let W=0;W0&&(x(b,w,I),I+=w*(p*4)),b=T%p,b>0&&x(b,1,I)});let m=v.convertBackendValuesAndArrayBuffer(u,a.dtype);return this.convertAndCacheOnCPU(t,m),m}async read(t){if(!this.tensorMap.has(t))throw new Error(`Tensor ${t} was not registered!`);let a=this.tensorMap.get(t),{values:n}=a;if(n!=null)return n;let r;if(a.dtype==="complex64"){let s=await Promise.all([this.read(a.complexTensorInfos.real.dataId),this.read(a.complexTensorInfos.imag.dataId)]),i=s[0],o=s[1];r=C.mergeRealAndImagArrays(i,o)}else{let s=await this.getBufferData(a.resource);r=v.convertBackendValuesAndArrayBuffer(s,a.dtype)}return this.convertAndCacheOnCPU(t,r),r}copyBuffer(t){let a=t.size,n=t.usage,r=this.bufferManager.acquireBuffer(a,n);return this.ensureCommandEncoderReady(),this.endComputePassEncoder(),this.commandEncoder.copyBufferToBuffer(t,0,r,0,a),this.submitQueue(),r}createTensorFromGPUData(t,a,n){let r=t.buffer;if(n==="complex64")throw new Error("Cannot write to a complex64 dtype. ");let s={id:this.nextDataId()};this.tensorMap.set(s,{dtype:n,shape:a,values:null,refCount:1,external:t.zeroCopy});let i=this.tensorMap.get(s),o=q1(i.dtype)*v.sizeFromShape(i.shape);if(t.buffer.sizev.decodeString(r));return _e(t.shape,t.dtype,n)}catch(n){throw new Error("Failed to decode encoded string bytes into utf-8")}return _e(t.shape,t.dtype,a)}async time(t){!this.supportTimestampQuery&&!this.hasTimestampQueryWarned&&(console.warn("This device doesn't support timestamp-query extension. Start Chrome browser with flag --enable-dawn-features=allow_unsafe_apis to try it again. Otherwise, zero will be shown for the kernel time when profiling mode is enabled."),this.hasTimestampQueryWarned=!0);let a=this.activeTimers,n=[],r=!1;this.programTimersStack==null?(this.programTimersStack=n,r=!0):this.activeTimers.push(n),this.activeTimers=n,t();let s=v.flatten(this.activeTimers.map(u=>u.query)).filter(u=>u!=null),i=v.flatten(this.activeTimers.map(u=>u.name)).filter(u=>u!=null);this.activeTimers=a,r&&(this.programTimersStack=null);let o={uploadWaitMs:this.uploadWaitMs,downloadWaitMs:this.downloadWaitMs,kernelMs:null,wallMs:null},l=await Promise.all(s);return o.kernelMs=v.sum(l),o.getExtraProfileInfo=()=>l.map((u,p)=>({name:i[p],ms:u})).map(u=>`${u.name}: ${u.ms}`).join(", "),this.uploadWaitMs=0,this.downloadWaitMs=0,o}makeTensorInfo(t,a,n){return a==="string"&&n!=null&&n.length>0&&v.isString(n[0])&&(n=n.map(r=>v.encodeString(r))),{dataId:this.write(n,t,a),shape:t,dtype:a}}tensorToBinding(t){if(!t)return null;let a=this.tensorMap.get(t.dataId).resource;return a instanceof GPUBuffer?{buffer:a}:a instanceof GPUTexture?a.createView():a}uploadToGPU(t){let a=this.tensorMap.get(t);if(a.resource!=null)return;let n=q1(a.dtype)*v.sizeFromShape(a.shape),r,s=GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC|GPUBufferUsage.COPY_DST;if(a.values){if(r=this.bufferManager.acquireBuffer(n,s,!0),r.mapState==="unmapped"){let i=this.bufferManager.acquireBuffer(n,GPUBufferUsage.MAP_WRITE|GPUBufferUsage.COPY_SRC,!0,!1),o=i.getMappedRange();a.dtype==="int32"||a.dtype==="bool"?new Int32Array(o).set(a.values):new Float32Array(o).set(a.values),i.unmap(),this.ensureCommandEncoderReady(),this.endComputePassEncoder(),this.commandEncoder.copyBufferToBuffer(i,0,r,0,n),this.stagingPendingDisposal.push(i)}else{let i=r.getMappedRange();a.dtype==="int32"||a.dtype==="bool"?new Int32Array(i).set(a.values):new Float32Array(i).set(a.values),r.unmap()}a.values=null}else r=this.bufferManager.acquireBuffer(n,s);a.resource=r}makeUniforms(t){let a=0,n=0,r=[],s=1;t.forEach(l=>{l.data.length===0&&(l.data=[1]);let u;switch(l.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:v.assert(!1,()=>`Unsupported ${l.data.length}D shape`)}(n===5||n===6)&&(u=16),u>s&&(s=u),a=Math.ceil(a/u)*u,n=l.data.length,r.push(a),a+=l.data.length*4}),a=Math.ceil(a/s)*s;let i=new ArrayBuffer(a);t.forEach((l,u)=>{let p=r[u];l.type==="int32"?new Int32Array(i,p,l.data.length).set(l.data):l.type==="uint32"?new Uint32Array(i,p,l.data.length).set(l.data):new Float32Array(i,p,l.data.length).set(l.data)});let o=this.bufferManager.acquireBuffer(a,GPUBufferUsage.COPY_DST|GPUBufferUsage.UNIFORM);return this.queue.writeBuffer(o,0,i,0,a),this.uniformPendingDisposal.push(o),{offset:0,size:a,buffer:o}}runWebGPUProgram(t,a,n,r,s){if(s||(s=this.makeTensorInfo(t.outputShape,n)),v.sizeFromShape(s.shape)===0)return this.tensorMap.get(s.dataId).values=v.getTypedArrayFromDType(s.dtype,0),s;this.uploadToGPU(s.dataId),t.dispatch=Ele(this.device,t);let i=a.map((l,u)=>{if(l.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(l.dataId),{dtype:this.tensorMap.get(l.dataId).dtype,shape:l.shape,name:t.variableNames[u]}});t.shaderKey=Ale(t,i,s);let o=B().getBool("WEBGPU_ENGINE_COMPILE_ONLY");return t.shaderKey in this.pipelineCache||(this.pipelineCache[t.shaderKey]=gle(this.device,t,i,s,o)),t.pipeline=this.pipelineCache[t.shaderKey],o||this.recordAndSubmit(t,s,a,r),s}recordAndSubmit(t,a,n,r){if(t.pipeline instanceof Promise)throw new Error("Please call checkCompileCompletionAsync to ensure parallel compilation is done!");let s=[],i=[],o="int32";if(t.pixelsOpType==null){s.push({type:"float32",data:[NaN]},{type:"float32",data:[1/0]}),i=n.concat(a).map(h=>h.shape);let d="int32";i.map(h=>{s.push({type:d,data:h});let m=v.computeStrides(h);s.push({type:d,data:m})})}else{let d=v.computeStrides(a.shape);s.push({type:o,data:d})}if(t.size){let d=v.sizeFromShape(t.outputShape);s.push({type:o,data:[t.outputComponent?d/t.outputComponent:d]})}r&&(s=[...s,...r]);let l=[this.tensorToBinding(a),...n.map(d=>this.tensorToBinding(d)),this.makeUniforms(s)];n.forEach(d=>{this.commandQueueOwnedIds.add(d.dataId)}),this.commandQueueOwnedIds.add(a.dataId);let u=this.device.createBindGroup({layout:t.pipeline.getBindGroupLayout(0),entries:l.map((d,h)=>({binding:h,resource:d}))}),p=this.activeTimers!=null;this.ensureCommandEncoderReady();let c={};p&&this.supportTimestampQuery?(this.endComputePassEncoder(),this.querySet==null&&(this.querySet=this.device.createQuerySet({type:"timestamp",count:this.querySetCount})),c.timestampWrites={querySet:this.querySet,beginningOfPassWriteIndex:0,endOfPassWriteIndex:1},this.computePassEncoder=this.commandEncoder.beginComputePass(c)):this.computePassEncoder||(this.computePassEncoder=this.commandEncoder.beginComputePass(c)),this.computePassEncoder.setPipeline(t.pipeline),this.computePassEncoder.setBindGroup(0,u),this.computePassEncoder.dispatchWorkgroups(t.dispatch[0],t.dispatch[1],t.dispatch[2]),this.dispatchCountInPass++,(p||B().get("WEBGPU_DEFERRED_SUBMIT_BATCH_SIZE")<=this.dispatchCountInPass||t.pixelsOpType===au.DRAW)&&(this.endComputePassEncoder(),p?this.activeTimers.push({name:t.constructor.name,query:this.getQueryTime()}):this.submitQueue())}async getQueryTime(){if(!this.supportTimestampQuery)return 0;this.queryResolveBuffer==null&&(this.queryResolveBuffer=this.bufferManager.acquireBuffer(this.querySetCount*8,GPUBufferUsage.COPY_SRC|GPUBufferUsage.COPY_DST|GPUBufferUsage.QUERY_RESOLVE)),this.commandEncoder.resolveQuerySet(this.querySet,0,this.querySetCount,this.queryResolveBuffer,0);let t=this.bufferManager.acquireBuffer(this.querySetCount*8,GPUBufferUsage.MAP_READ|GPUBufferUsage.COPY_DST);this.commandEncoder.copyBufferToBuffer(this.queryResolveBuffer,0,t,0,this.querySetCount*8),this.submitQueue(),await t.mapAsync(GPUMapMode.READ);let a=new BigUint64Array(t.getMappedRange()),n=Number(a[1]-a[0])/1e6;return t.unmap(),this.bufferManager.releaseBuffer(t),n}shouldExecuteOnCPU(t,a=Rle){return B().getBool("WEBGPU_CPU_FORWARD")&&t.every(n=>this.tensorMap.get(n.dataId).resource==null&&v.sizeFromShape(n.shape){let e={powerPreference:B().get("WEBGPU_USE_LOW_POWER_GPU")?"low-power":"high-performance"},t=await navigator.gpu.requestAdapter(e),a={},n=[];t.features.has("timestamp-query")&&n.push("timestamp-query"),t.features.has("bgra8unorm-storage")&&n.push(["bgra8unorm-storage"]),a.requiredFeatures=n;let r=t.limits;a.requiredLimits={maxComputeWorkgroupStorageSize:r.maxComputeWorkgroupStorageSize,maxComputeWorkgroupsPerDimension:r.maxComputeWorkgroupsPerDimension,maxStorageBufferBindingSize:r.maxStorageBufferBindingSize,maxBufferSize:r.maxBufferSize,maxComputeWorkgroupSizeX:r.maxComputeWorkgroupSizeX,maxComputeInvocationsPerWorkgroup:r.maxComputeInvocationsPerWorkgroup};let s=await t.requestDevice(a),i=await t.requestAdapterInfo();return new X3(s,i)},3);var Pe;(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.ELU_DER=5]="ELU_DER",e[e.EQUAL=6]="EQUAL",e[e.FLOOR_DIV=7]="FLOOR_DIV",e[e.GREATER=8]="GREATER",e[e.GREATER_EQUAL=9]="GREATER_EQUAL",e[e.LESS=10]="LESS",e[e.LESS_EQUAL=11]="LESS_EQUAL",e[e.LOGICAL_AND=12]="LOGICAL_AND",e[e.LOGICAL_OR=13]="LOGICAL_OR",e[e.MAX=14]="MAX",e[e.MIN=15]="MIN",e[e.MOD=16]="MOD",e[e.MUL=17]="MUL",e[e.NOT_EQUAL=18]="NOT_EQUAL",e[e.POW=19]="POW",e[e.PRELU=20]="PRELU",e[e.SQUARED_DIFFERENCE=21]="SQUARED_DIFFERENCE",e[e.SUB=22]="SUB"})(Pe||(Pe={}));var Mle="let resultTemp = a + b;",$le="let resultTemp = atan2(a, b);",Ple="let resultTemp = areal * breal - aimag * bimag;",_le="let resultTemp = areal * bimag + aimag * breal;",Fle="let resultTemp = a / b;",Dle="let resultTemp = select(a * (b + 1.0), a, b >= b - b);",Ole=` + `}return s}function Nle(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 rA(e){return!(e.dispatchLayout.hasOwnProperty("y")&&e.dispatchLayout.y.length!==0||e.dispatchLayout.hasOwnProperty("z")&&e.dispatchLayout.z.length!==0)}var Tk={};Ze(Tk,{GPUBytesPerElement:()=>q1,MatMulProgramType:()=>Dn,assertNotComplex:()=>q3,computeDispatch:()=>de,computeWorkPerThreadForConv2d:()=>H3,computeWorkgroupInfoForMatMul:()=>Nk,computeWorkgroupSizeForConv2d:()=>G3,flatDispatchLayout:()=>me,isWebGPUSupported:()=>j3,tilesFitEvenlyIntoShape:()=>Rle});var Xs=e=>{let t=1;for(let a=0;aa%e[n]===0)}function de(e,t,a=[1,1,1],n=[1,1,1]){let[r,s,i]=[Math.ceil(Xs(e.x.map(o=>t[o]))/(a[0]*n[0])),e.y?Math.ceil(Xs(e.y.map(o=>t[o]))/(a[1]*n[1])):1,e.z?Math.ceil(Xs(e.z.map(o=>t[o]))/(a[2]*n[2])):1];return[r,s,i]}function Nk(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 G3(e,t,a=!1){if(a)return[8,8,1];let n=Xs(e.x.map(s=>t[s])),r=Xs(e.y.map(s=>t[s]));return n<=4?[4,16,1]:r<=4?[16,4,1]:[16,16,1]}function H3(e,t,a=!1){if(a)return[4,4,1];let n=Xs(e.x.map(s=>t[s])),r=Xs(e.y.map(s=>t[s]));return n<=4?[1,2,1]:r<=4?[2,1,1]:[2,2,1]}function me(e){return{x:e.map((t,a)=>a)}}function q1(e){if(e==="float32"||e==="int32"||e==="bool"||e==="string")return 4;if(e==="complex64")return 8;throw new Error(`Unknown dtype ${e}`)}function j3(){return!!(typeof globalThis!="undefined"&&globalThis.navigator&&globalThis.navigator.gpu)}function q3(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 WebGPU backend.`)})}var Dn;(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"})(Dn||(Dn={}));var Ele=B().getNumber("WEBGPU_CPU_HANDOFF_SIZE_THRESHOLD"),Mle=(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]},X3=class Rk extends ru{nextDataId(){return Rk.nextDataId++}constructor(t,a){if(super(),this.commandQueueOwnedIds=new WeakSet,this.dispatchCountInPass=0,this.disposed=!1,this.downloadWaitMs=0,this.tensorDataPendingDisposal=[],this.queryResolveBuffer=null,this.querySet=null,this.querySetCount=2,this.stagingPendingDisposal=[],this.uniformPendingDisposal=[],this.uploadWaitMs=0,this.hasReadSyncWarned=!1,this.hasTimestampQueryWarned=!1,!j3())throw new Error("WebGPU is not supported on this device");this.pipelineCache={},this.device=t,this.queue=t.queue,this.commandEncoder=null,this.computePassEncoder=null,this.adapterInfo=new hle(a),this.supportTimestampQuery=this.device.features.has("timestamp-query"),this.thresholdToIncreaseWorkgroups=this.adapterInfo.intelGPUGeneration>=12?16:8,this.bufferManager=new mle(this.device),this.textureManager=new fle(this.device),this.tensorMap=new ip(this,It()),B().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:t,format:"bgra8unorm"}),document.body.appendChild(this.dummyCanvas))}floatPrecision(){return 32}disposeData(t,a=!1){if(!this.tensorMap.has(t))return!0;let n=this.tensorMap.get(t);return a?n.refCount=0:n.refCount--,n.refCount>0?!1:(n.complexTensorInfos!=null&&(this.disposeData(n.complexTensorInfos.real.dataId),this.disposeData(n.complexTensorInfos.imag.dataId)),this.commandQueueOwnedIds.has(t)?(this.tensorDataPendingDisposal.push(t),!0):(this.releaseResource(t),this.tensorMap.delete(t),!0))}memory(){return{numBytesInGPU:this.bufferManager.numBytesUsed,numBytesAllocatedInGPU:this.bufferManager.numBytesAllocated,unreliable:!1}}releaseResource(t){let a=this.tensorMap.get(t);if(!(!a||!a.resource)){if(a.external){a.resource=null;return}a.resource instanceof GPUBuffer?this.bufferManager.releaseBuffer(a.resource):a.resource instanceof GPUTexture&&this.textureManager.releaseTexture(a.resource),a.resource=null}}refCount(t){return this.tensorMap.has(t)?this.tensorMap.get(t).refCount:0}incRef(t){let a=this.tensorMap.get(t);a.refCount++}decRef(t){if(this.tensorMap.has(t)){let a=this.tensorMap.get(t);a.refCount--}}write(t,a,n){if(n==="complex64"&&t!=null)throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag).");let r={id:this.nextDataId()};return this.tensorMap.set(r,{dtype:n,shape:a,values:t,refCount:1}),r}move(t,a,n,r,s){if(r==="complex64")throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag).");this.tensorMap.set(t,{dtype:r,shape:n,values:a,refCount:s})}submitQueue(){this.queue.submit([this.commandEncoder.finish()]),this.commandEncoder=null,this.dispatchCountInPass=0,this.commandQueueOwnedIds=new WeakSet,this.tensorDataPendingDisposal.forEach(t=>{this.releaseResource(t),this.tensorMap.delete(t)}),this.uniformPendingDisposal.forEach(t=>this.bufferManager.releaseBuffer(t)),this.stagingPendingDisposal.forEach(t=>this.bufferManager.releaseBuffer(t,!1)),this.tensorDataPendingDisposal=[],this.uniformPendingDisposal=[],this.stagingPendingDisposal=[]}ensureCommandEncoderReady(){this.commandEncoder||(this.commandEncoder=this.device.createCommandEncoder())}endComputePassEncoder(){this.computePassEncoder&&(this.computePassEncoder.end(),this.computePassEncoder=null)}async checkCompileCompletionAsync(){let t;try{t=await Promise.all(Object.values(this.pipelineCache))}catch(a){throw new Error(a.message)}Object.keys(this.pipelineCache).map((a,n)=>{this.pipelineCache[a]=t[n]})}async getBufferData(t){if(B().getBool("WEBGPU_ENGINE_COMPILE_ONLY"))return console.warn("The data may be invalid since WEBGPU_ENGINE_COMPILE_ONLY is true, this can only be called when WEBGPU_ENGINE_COMPILE_ONLY is false"),null;let a=t.size,n=this.bufferManager.acquireBuffer(a,GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ);this.ensureCommandEncoderReady(),this.endComputePassEncoder(),this.commandEncoder.copyBufferToBuffer(t,0,n,0,a),this.submitQueue(),await n.mapAsync(GPUMapMode.READ);let r=n.getMappedRange().slice(0);return n.unmap(),n!=null&&this.bufferManager.releaseBuffer(n),B().getBool("WEBGPU_USE_PROFILE_TOOL")&&(v.assert(this.dummyContext!==void 0,()=>"Fail to get context for profiling tool"),this.dummyContext.getCurrentTexture()),r}convertAndCacheOnCPU(t,a){let n=this.tensorMap.get(t);return n.values=a,n.values}readSync(t){let a=this.tensorMap.get(t),{values:n,complexTensorInfos:r}=a;if(n!=null||a.dtype==="string")return n;if(a.dtype==="complex64"){let f=this.readSync(r.real.dataId),g=this.readSync(r.imag.dataId),y=v.convertBackendValuesAndArrayBuffer(C.mergeRealAndImagArrays(f,g).buffer,"float32");return this.convertAndCacheOnCPU(t,y),y}this.hasReadSyncWarned||(this.hasReadSyncWarned=!0,console.warn("The performance of synchronously reading data from GPU to CPU is poor on the webgpu backend, please use asynchronous APIs instead."));let s=["opaque","premultiplied"],i=a.resource,o=i.size;v.assert(o%4===0,()=>"Because there is 4 bytes for one pixel, buffer size must be multiple of 4.");let l=o/4,u=new ArrayBuffer(o),p=256,c=256,d=s.map(f=>new OffscreenCanvas(p,c)),h=new OffscreenCanvas(p,c);this.endComputePassEncoder(),d.map((f,g)=>{let y=f.getContext("webgpu");return y.configure({device:this.device,format:"bgra8unorm",usage:GPUTextureUsage.COPY_DST,alphaMode:s[g]}),y.getCurrentTexture()}).map((f,g)=>{let y=p*4,x=(N,M,$)=>{this.ensureCommandEncoderReady(),this.commandEncoder.copyBufferToTexture({buffer:i,bytesPerRow:y,offset:$},{texture:f},{width:N,height:M}),this.submitQueue();let E=h.getContext("2d",{willReadFrequently:!0});E.clearRect(0,0,N,M),E.drawImage(d[g],0,0);let S=E.getImageData(0,0,N,M).data,_=s[g],O=new Uint8ClampedArray(u,$,N*M*4);for(let W=0;W0&&(x(b,w,I),I+=w*(p*4)),b=T%p,b>0&&x(b,1,I)});let m=v.convertBackendValuesAndArrayBuffer(u,a.dtype);return this.convertAndCacheOnCPU(t,m),m}async read(t){if(!this.tensorMap.has(t))throw new Error(`Tensor ${t} was not registered!`);let a=this.tensorMap.get(t),{values:n}=a;if(n!=null)return n;let r;if(a.dtype==="complex64"){let s=await Promise.all([this.read(a.complexTensorInfos.real.dataId),this.read(a.complexTensorInfos.imag.dataId)]),i=s[0],o=s[1];r=C.mergeRealAndImagArrays(i,o)}else{let s=await this.getBufferData(a.resource);r=v.convertBackendValuesAndArrayBuffer(s,a.dtype)}return this.convertAndCacheOnCPU(t,r),r}copyBuffer(t){let a=t.size,n=t.usage,r=this.bufferManager.acquireBuffer(a,n);return this.ensureCommandEncoderReady(),this.endComputePassEncoder(),this.commandEncoder.copyBufferToBuffer(t,0,r,0,a),this.submitQueue(),r}createTensorFromGPUData(t,a,n){let r=t.buffer;if(n==="complex64")throw new Error("Cannot write to a complex64 dtype. ");let s={id:this.nextDataId()};this.tensorMap.set(s,{dtype:n,shape:a,values:null,refCount:1,external:t.zeroCopy});let i=this.tensorMap.get(s),o=q1(i.dtype)*v.sizeFromShape(i.shape);if(t.buffer.sizev.decodeString(r));return _e(t.shape,t.dtype,n)}catch(n){throw new Error("Failed to decode encoded string bytes into utf-8")}return _e(t.shape,t.dtype,a)}async time(t){!this.supportTimestampQuery&&!this.hasTimestampQueryWarned&&(console.warn("This device doesn't support timestamp-query extension. Start Chrome browser with flag --enable-dawn-features=allow_unsafe_apis to try it again. Otherwise, zero will be shown for the kernel time when profiling mode is enabled."),this.hasTimestampQueryWarned=!0);let a=this.activeTimers,n=[],r=!1;this.programTimersStack==null?(this.programTimersStack=n,r=!0):this.activeTimers.push(n),this.activeTimers=n,t();let s=v.flatten(this.activeTimers.map(u=>u.query)).filter(u=>u!=null),i=v.flatten(this.activeTimers.map(u=>u.name)).filter(u=>u!=null);this.activeTimers=a,r&&(this.programTimersStack=null);let o={uploadWaitMs:this.uploadWaitMs,downloadWaitMs:this.downloadWaitMs,kernelMs:null,wallMs:null},l=await Promise.all(s);return o.kernelMs=v.sum(l),o.getExtraProfileInfo=()=>l.map((u,p)=>({name:i[p],ms:u})).map(u=>`${u.name}: ${u.ms}`).join(", "),this.uploadWaitMs=0,this.downloadWaitMs=0,o}makeTensorInfo(t,a,n){return a==="string"&&n!=null&&n.length>0&&v.isString(n[0])&&(n=n.map(r=>v.encodeString(r))),{dataId:this.write(n,t,a),shape:t,dtype:a}}tensorToBinding(t){if(!t)return null;let a=this.tensorMap.get(t.dataId).resource;return a instanceof GPUBuffer?{buffer:a}:a instanceof GPUTexture?a.createView():a}uploadToGPU(t){let a=this.tensorMap.get(t);if(a.resource!=null)return;let n=q1(a.dtype)*v.sizeFromShape(a.shape),r,s=GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC|GPUBufferUsage.COPY_DST;if(a.values){if(r=this.bufferManager.acquireBuffer(n,s,!0),r.mapState==="unmapped"){let i=this.bufferManager.acquireBuffer(n,GPUBufferUsage.MAP_WRITE|GPUBufferUsage.COPY_SRC,!0,!1),o=i.getMappedRange();a.dtype==="int32"||a.dtype==="bool"?new Int32Array(o).set(a.values):new Float32Array(o).set(a.values),i.unmap(),this.ensureCommandEncoderReady(),this.endComputePassEncoder(),this.commandEncoder.copyBufferToBuffer(i,0,r,0,n),this.stagingPendingDisposal.push(i)}else{let i=r.getMappedRange();a.dtype==="int32"||a.dtype==="bool"?new Int32Array(i).set(a.values):new Float32Array(i).set(a.values),r.unmap()}a.values=null}else r=this.bufferManager.acquireBuffer(n,s);a.resource=r}makeUniforms(t){let a=0,n=0,r=[],s=1;t.forEach(l=>{l.data.length===0&&(l.data=[1]);let u;switch(l.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:v.assert(!1,()=>`Unsupported ${l.data.length}D shape`)}(n===5||n===6)&&(u=16),u>s&&(s=u),a=Math.ceil(a/u)*u,n=l.data.length,r.push(a),a+=l.data.length*4}),a=Math.ceil(a/s)*s;let i=new ArrayBuffer(a);t.forEach((l,u)=>{let p=r[u];l.type==="int32"?new Int32Array(i,p,l.data.length).set(l.data):l.type==="uint32"?new Uint32Array(i,p,l.data.length).set(l.data):new Float32Array(i,p,l.data.length).set(l.data)});let o=this.bufferManager.acquireBuffer(a,GPUBufferUsage.COPY_DST|GPUBufferUsage.UNIFORM);return this.queue.writeBuffer(o,0,i,0,a),this.uniformPendingDisposal.push(o),{offset:0,size:a,buffer:o}}runWebGPUProgram(t,a,n,r,s){if(s||(s=this.makeTensorInfo(t.outputShape,n)),v.sizeFromShape(s.shape)===0)return this.tensorMap.get(s.dataId).values=v.getTypedArrayFromDType(s.dtype,0),s;this.uploadToGPU(s.dataId),t.dispatch=Mle(this.device,t);let i=a.map((l,u)=>{if(l.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(l.dataId),{dtype:this.tensorMap.get(l.dataId).dtype,shape:l.shape,name:t.variableNames[u]}});t.shaderKey=ble(t,i,s);let o=B().getBool("WEBGPU_ENGINE_COMPILE_ONLY");return t.shaderKey in this.pipelineCache||(this.pipelineCache[t.shaderKey]=yle(this.device,t,i,s,o)),t.pipeline=this.pipelineCache[t.shaderKey],o||this.recordAndSubmit(t,s,a,r),s}recordAndSubmit(t,a,n,r){if(t.pipeline instanceof Promise)throw new Error("Please call checkCompileCompletionAsync to ensure parallel compilation is done!");let s=[],i=[],o="int32";if(t.pixelsOpType==null){s.push({type:"float32",data:[NaN]},{type:"float32",data:[1/0]}),i=n.concat(a).map(h=>h.shape);let d="int32";i.map(h=>{s.push({type:d,data:h});let m=v.computeStrides(h);s.push({type:d,data:m})})}else{let d=v.computeStrides(a.shape);s.push({type:o,data:d})}if(t.size){let d=v.sizeFromShape(t.outputShape);s.push({type:o,data:[t.outputComponent?d/t.outputComponent:d]})}r&&(s=[...s,...r]);let l=[this.tensorToBinding(a),...n.map(d=>this.tensorToBinding(d)),this.makeUniforms(s)];n.forEach(d=>{this.commandQueueOwnedIds.add(d.dataId)}),this.commandQueueOwnedIds.add(a.dataId);let u=this.device.createBindGroup({layout:t.pipeline.getBindGroupLayout(0),entries:l.map((d,h)=>({binding:h,resource:d}))}),p=this.activeTimers!=null;this.ensureCommandEncoderReady();let c={};p&&this.supportTimestampQuery?(this.endComputePassEncoder(),this.querySet==null&&(this.querySet=this.device.createQuerySet({type:"timestamp",count:this.querySetCount})),c.timestampWrites={querySet:this.querySet,beginningOfPassWriteIndex:0,endOfPassWriteIndex:1},this.computePassEncoder=this.commandEncoder.beginComputePass(c)):this.computePassEncoder||(this.computePassEncoder=this.commandEncoder.beginComputePass(c)),this.computePassEncoder.setPipeline(t.pipeline),this.computePassEncoder.setBindGroup(0,u),this.computePassEncoder.dispatchWorkgroups(t.dispatch[0],t.dispatch[1],t.dispatch[2]),this.dispatchCountInPass++,(p||B().get("WEBGPU_DEFERRED_SUBMIT_BATCH_SIZE")<=this.dispatchCountInPass||t.pixelsOpType===au.DRAW)&&(this.endComputePassEncoder(),p?this.activeTimers.push({name:t.constructor.name,query:this.getQueryTime()}):this.submitQueue())}async getQueryTime(){if(!this.supportTimestampQuery)return 0;this.queryResolveBuffer==null&&(this.queryResolveBuffer=this.bufferManager.acquireBuffer(this.querySetCount*8,GPUBufferUsage.COPY_SRC|GPUBufferUsage.COPY_DST|GPUBufferUsage.QUERY_RESOLVE)),this.commandEncoder.resolveQuerySet(this.querySet,0,this.querySetCount,this.queryResolveBuffer,0);let t=this.bufferManager.acquireBuffer(this.querySetCount*8,GPUBufferUsage.MAP_READ|GPUBufferUsage.COPY_DST);this.commandEncoder.copyBufferToBuffer(this.queryResolveBuffer,0,t,0,this.querySetCount*8),this.submitQueue(),await t.mapAsync(GPUMapMode.READ);let a=new BigUint64Array(t.getMappedRange()),n=Number(a[1]-a[0])/1e6;return t.unmap(),this.bufferManager.releaseBuffer(t),n}shouldExecuteOnCPU(t,a=Ele){return B().getBool("WEBGPU_CPU_FORWARD")&&t.every(n=>this.tensorMap.get(n.dataId).resource==null&&v.sizeFromShape(n.shape){let e={powerPreference:B().get("WEBGPU_USE_LOW_POWER_GPU")?"low-power":"high-performance"},t=await navigator.gpu.requestAdapter(e),a={},n=[];t.features.has("timestamp-query")&&n.push("timestamp-query"),t.features.has("bgra8unorm-storage")&&n.push(["bgra8unorm-storage"]),a.requiredFeatures=n;let r=t.limits;a.requiredLimits={maxComputeWorkgroupStorageSize:r.maxComputeWorkgroupStorageSize,maxComputeWorkgroupsPerDimension:r.maxComputeWorkgroupsPerDimension,maxStorageBufferBindingSize:r.maxStorageBufferBindingSize,maxBufferSize:r.maxBufferSize,maxComputeWorkgroupSizeX:r.maxComputeWorkgroupSizeX,maxComputeInvocationsPerWorkgroup:r.maxComputeInvocationsPerWorkgroup};let s=await t.requestDevice(a),i=await t.requestAdapterInfo();return new X3(s,i)},3);var Pe;(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.ELU_DER=5]="ELU_DER",e[e.EQUAL=6]="EQUAL",e[e.FLOOR_DIV=7]="FLOOR_DIV",e[e.GREATER=8]="GREATER",e[e.GREATER_EQUAL=9]="GREATER_EQUAL",e[e.LESS=10]="LESS",e[e.LESS_EQUAL=11]="LESS_EQUAL",e[e.LOGICAL_AND=12]="LOGICAL_AND",e[e.LOGICAL_OR=13]="LOGICAL_OR",e[e.MAX=14]="MAX",e[e.MIN=15]="MIN",e[e.MOD=16]="MOD",e[e.MUL=17]="MUL",e[e.NOT_EQUAL=18]="NOT_EQUAL",e[e.POW=19]="POW",e[e.PRELU=20]="PRELU",e[e.SQUARED_DIFFERENCE=21]="SQUARED_DIFFERENCE",e[e.SUB=22]="SUB"})(Pe||(Pe={}));var $le="let resultTemp = a + b;",Ple="let resultTemp = atan2(a, b);",_le="let resultTemp = areal * breal - aimag * bimag;",Fle="let resultTemp = areal * bimag + aimag * breal;",Dle="let resultTemp = a / b;",Ole="let resultTemp = select(a * (b + 1.0), a, b >= b - b);",zle=` let zero = sign(a) * 0 + 0; let one = sign(b) * 0 + 1; let resultTemp = select(zero, one, a == b); -`,zle=` +`,Lle=` let remainder = select(a % b, round(a % b), (round(a) == a) & (round(b) == b)); let quotient = (a - remainder) / b; let resultTemp = round(select(quotient, quotient - 1, sign(remainder) == -sign(b))); -`,Lle=` - let zero = sign(a) * 0 + 0; - let one = sign(b) * 0 + 1; - let resultTemp = select(zero, one, a > b); `,Wle=` let zero = sign(a) * 0 + 0; let one = sign(b) * 0 + 1; - let resultTemp = select(zero, one, a >= b); + let resultTemp = select(zero, one, a > b); `,Ble=` let zero = sign(a) * 0 + 0; let one = sign(b) * 0 + 1; - let resultTemp = select(zero, one, a < b); + let resultTemp = select(zero, one, a >= b); `,Vle=` + let zero = sign(a) * 0 + 0; + let one = sign(b) * 0 + 1; + let resultTemp = select(zero, one, a < b); +`,Ule=` let zero = sign(a) * 0 + 0; let one = sign(b) * 0 + 1; let resultTemp = select(zero, one, a <= b); -`,Ule="return f32(a >= 1.0 && b >= 1.0);",Gle=`return (vec4(a >= vec4(1.0)) * - vec4(b >= vec4(1.0)));`,Hle="return f32(a >= 1.0 || b >= 1.0);",jle=`return min(vec4(a >= vec4(1.0)) + - vec4(b >= vec4(1.0)), vec4(1.0));`,qle="let resultTemp = max(a, b);",Xle="let resultTemp = min(a, b);",Kle=` +`,Gle="return f32(a >= 1.0 && b >= 1.0);",Hle=`return (vec4(a >= vec4(1.0)) * + vec4(b >= vec4(1.0)));`,jle="return f32(a >= 1.0 || b >= 1.0);",qle=`return min(vec4(a >= vec4(1.0)) + + vec4(b >= vec4(1.0)), vec4(1.0));`,Xle="let resultTemp = max(a, b);",Kle="let resultTemp = min(a, b);",Yle=` let isNaN = b == 0.; var resultTemp = a % b; resultTemp = select((resultTemp + b) % b, resultTemp, (a < 0. && b < 0.) || (a >= 0. && b > 0.)); -`,Yle=` +`,Zle=` let isNaN = !vec4(b); var resultTemp = vec4(a % b); if (!((a[0] < 0. && b[0] < 0.) || (a[0] >= 0. && b[0] > 0.))) { @@ -5269,20 +5269,20 @@ return a / b;`,TJ=` if (!((a[3] < 0. && b[3] < 0.) || (a[3] >= 0. && b[3] > 0.))) { resultTemp[3] = (resultTemp[3] + b[3]) % b[3]; } -`,Zle="let resultTemp = a * b;",Jle=` +`,Jle="let resultTemp = a * b;",Qle=` var resultTemp = f32(a != b); let valueForNaN = 1.0; -`,Qle=` +`,eue=` var resultTemp = vec4(a != b); let valueForNaN = 1.0; -`,eue=` +`,tue=` let isNaN = a < 0.0 && floor(b) < b; if (b == 0.0) { return 1.0; } var resultTemp = select(sign(a) * pow(abs(a), b), pow(abs(a), b), round(abs(b) % 2.0) != 1.0); -`,tue=` +`,aue=` let isModRound1Bool = vec4(round(abs(b) % vec4(2.0))) == vec4(1); let isModRound1 = vec4(isModRound1Bool); let multiplier = sign(a) * isModRound1 + (vec4(1.0) - isModRound1); @@ -5303,10 +5303,10 @@ return a / b;`,TJ=` resultTemp.a = 1.0; } let isNaN = (a < vec4(0.0)) & (floor(b) < b); -`,aue="if (a < 0.0) { return b * a; } return a;",nue=` +`,nue="if (a < 0.0) { return b * a; } return a;",rue=` let aLessThanZero = vec4(a < vec4(0.0)); return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a); -`,rue="let resultTemp = (a - b) * (a - b);",sue="let resultTemp = a - b;";function K3(e,t){let a;do{switch(e){case Pe.ATAN2:a=$le;break;case Pe.MAX:a=qle;break;case Pe.MIN:a=Xle;break;case Pe.MOD:a=t?Yle:Kle;break;case Pe.NOT_EQUAL:a=t?Qle:Jle;break;case Pe.POW:a=t?tue:eue;break;default:continue}let n,r,s;return t?(n="isnanVec4",r="vec4",s="vec4"):(n="isnan",r="f32",s="bool"),` +`,sue="let resultTemp = (a - b) * (a - b);",iue="let resultTemp = a - b;";function K3(e,t){let a;do{switch(e){case Pe.ATAN2:a=Ple;break;case Pe.MAX:a=Xle;break;case Pe.MIN:a=Kle;break;case Pe.MOD:a=t?Zle:Yle;break;case Pe.NOT_EQUAL:a=t?eue:Qle;break;case Pe.POW:a=t?aue:tue;break;default:continue}let n,r,s;return t?(n="isnanVec4",r="vec4",s="vec4"):(n="isnan",r="f32",s="bool"),` let aIsNaN = ${n}(a); let aPostLegalization = select(a, ${r}(42), aIsNaN); let bIsNaN = ${n}(b); @@ -5321,30 +5321,30 @@ return a / b;`,TJ=` resultTemp, ${r}(valueForNaN), ${s}(isNaN) | aIsNaN | bIsNaN); } - `}while(!1);switch(e){case Pe.ADD:a=Mle;break;case Pe.COMPLEX_MULTIPLY_IMAG:a=_le;break;case Pe.COMPLEX_MULTIPLY_REAL:a=Ple;break;case Pe.DIV:a=Fle;break;case Pe.ELU_DER:a=Dle;break;case Pe.EQUAL:a=Ole;break;case Pe.FLOOR_DIV:a=zle;break;case Pe.GREATER:a=Lle;break;case Pe.GREATER_EQUAL:a=Wle;break;case Pe.LESS:a=Ble;break;case Pe.LESS_EQUAL:a=Vle;break;case Pe.LOGICAL_AND:return t?Gle:Ule;case Pe.LOGICAL_OR:return t?jle:Hle;case Pe.MUL:a=Zle;break;case Pe.PRELU:return t?nue:aue;case Pe.SQUARED_DIFFERENCE:a=rue;break;case Pe.SUB:a=sue;break;default:}return` + `}while(!1);switch(e){case Pe.ADD:a=$le;break;case Pe.COMPLEX_MULTIPLY_IMAG:a=Fle;break;case Pe.COMPLEX_MULTIPLY_REAL:a=_le;break;case Pe.DIV:a=Dle;break;case Pe.ELU_DER:a=Ole;break;case Pe.EQUAL:a=zle;break;case Pe.FLOOR_DIV:a=Lle;break;case Pe.GREATER:a=Wle;break;case Pe.GREATER_EQUAL:a=Ble;break;case Pe.LESS:a=Vle;break;case Pe.LESS_EQUAL:a=Ule;break;case Pe.LOGICAL_AND:return t?Hle:Gle;case Pe.LOGICAL_OR:return t?qle:jle;case Pe.MUL:a=Jle;break;case Pe.PRELU:return t?rue:nue;case Pe.SQUARED_DIFFERENCE:a=sue;break;case Pe.SUB:a=iue;break;default:}return` ${a} return resultTemp; - `}var le;(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.ROUND=27]="ROUND",e[e.RSQRT=28]="RSQRT",e[e.SELU=29]="SELU",e[e.SIGMOID=30]="SIGMOID",e[e.SIGN=31]="SIGN",e[e.SIN=32]="SIN",e[e.SINH=33]="SINH",e[e.SOFTPLUS=34]="SOFTPLUS",e[e.SQRT=35]="SQRT",e[e.SQUARE=36]="SQUARE",e[e.STEP=37]="STEP",e[e.TAN=38]="TAN",e[e.TANH=39]="TANH",e[e.TO_INT=40]="TO_INT"})(le||(le={}));var iue="return abs(a);",oue=` + `}var le;(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.ROUND=27]="ROUND",e[e.RSQRT=28]="RSQRT",e[e.SELU=29]="SELU",e[e.SIGMOID=30]="SIGMOID",e[e.SIGN=31]="SIGN",e[e.SIN=32]="SIN",e[e.SINH=33]="SINH",e[e.SOFTPLUS=34]="SOFTPLUS",e[e.SQRT=35]="SQRT",e[e.SQUARE=36]="SQUARE",e[e.STEP=37]="STEP",e[e.TAN=38]="TAN",e[e.TANH=39]="TANH",e[e.TO_INT=40]="TO_INT"})(le||(le={}));var oue="return abs(a);",lue=` if (abs(a) > 1.) { return uniforms.NAN; } return acos(a); -`,lue=` +`,uue=` if (a < 1.) { return uniforms.NAN; } return acosh(a); -`,uue=` +`,due=` if (abs(a) > 1.) { return uniforms.NAN; } return asin(a); -`,due="return asinh(a);",pue=` +`,pue="return asinh(a);",cue=` if (isnan(a)) { return uniforms.NAN; } return atan(a); -`,cue=` +`,hue=` if (abs(a) > 1.) { return uniforms.NAN; } @@ -5355,10 +5355,10 @@ return a / b;`,TJ=` return -uniforms.INFINITY; } return atanh(a); -`,hue="return ceil(a);",mue="return cos(a);",fue=` +`,mue="return ceil(a);",fue="return cos(a);",gue=` let e2x = exp(-a); return (e2x + 1.0 / e2x) / 2.0; -`,gue="return exp(a) - 1.0;",yue="if (a >= 0.0) { return a; } return (exp(a) - 1.0);",xue=` +`,yue="return exp(a) - 1.0;",xue="if (a >= 0.0) { return a; } return (exp(a) - 1.0);",Aue=` var resFloat = exp(a) - vec4(1.0); if (a.r >= 0.0) { resFloat.r = a.r; @@ -5373,7 +5373,7 @@ return a / b;`,TJ=` resFloat.a = a.a; } return resFloat; -`,Aue=` +`,bue=` // Error function is calculated approximately with elementary function. // See "Handbook of Mathematical Functions with Formulas, // Graphs, and Mathematical Tables", Abramowitz and Stegun. @@ -5388,25 +5388,25 @@ return a / b;`,TJ=` 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)); -`,bue="return exp(a);",vue="return floor(a);",wue="return f32(!isnan(a) && !isinf(a));",kue="return f32(isinf(a));",Iue="return f32(isnan(a));",Sue="return a;",Cue=`if (a < 0.0) { return uniforms.NAN; } - return log(a);`,Tue=` +`,vue="return exp(a);",wue="return floor(a);",kue="return f32(!isnan(a) && !isinf(a));",Iue="return f32(isinf(a));",Sue="return f32(isnan(a));",Cue="return a;",Tue=`if (a < 0.0) { return uniforms.NAN; } + return log(a);`,Nue=` if (isnan(a)) { return a; } return log(1.0 + a); -`,Nue="return f32(!(a >= 1.0));",Rue="return -a;",Eue="if (a < 0.0) { return uniforms.alpha * a; } return a;",Mue=` +`,Rue="return f32(!(a >= 1.0));",Eue="return -a;",Mue="if (a < 0.0) { return uniforms.alpha * a; } return a;",$ue=` let aLessThanZero = vec4(a < vec4(0.0)); return (aLessThanZero * (uniforms.alpha * a)) + ((vec4(1.0) - aLessThanZero) * a); -`,$ue="return 1.0 / a;",Pue="return select(a, 0.0, a < 0.0);",_ue="return clamp(a, 0.0, 6.0);",Fue="return clamp(a, vec4(0.0, 0.0, 0.0, 0.0), vec4(6.0, 6.0, 6.0, 6.0));",Due=` +`,Pue="return 1.0 / a;",_ue="return select(a, 0.0, a < 0.0);",Fue="return clamp(a, 0.0, 6.0);",Due="return clamp(a, vec4(0.0, 0.0, 0.0, 0.0), vec4(6.0, 6.0, 6.0, 6.0));",Oue=` return select(a, vec4(0.0), a < vec4(0.0)); -`,Oue="return round(a);",zue="return inverseSqrt(a);",Lue=` +`,zue="return round(a);",Lue="return inverseSqrt(a);",Wue=` if (a >= 0.0) { return ${C.SELU_SCALE} * a; } else { return ${C.SELU_SCALEALPHA} * (exp(a) - 1.0); } -`,Wue="return 1.0 / (1.0 + exp(-1.0 * a));",Bue="return sign(a);",Vue="return sin(a);",Uue=` +`,Bue="return 1.0 / (1.0 + exp(-1.0 * a));",Vue="return sign(a);",Uue="return sin(a);",Gue=` let e2x = exp(a); return (e2x - 1.0 / e2x) / 2.0; -`,Gue=` +`,Hue=` let epsilon = 1.1920928955078125e-7; let threshold = log(epsilon) + 2.0; @@ -5421,16 +5421,16 @@ return a / b;`,TJ=` } else { return log(exp_a + 1.0); } -`,Hue="return sqrt(a);",jue="return a * a;",que=` +`,jue="return sqrt(a);",que="return a * a;",Xue=` if (isnan(a)) { return a; } return select(uniforms.stepAlpha, 1.0, a > 0.0); -`,Xue="return tan(a);",Kue=` +`,Kue="return tan(a);",Yue=` let e2x = exp(-2.0 * abs(a)); return sign(a) * (1.0 - e2x) / (1.0 + e2x); -`,Yue="return f32(i32((a)));";function Ws(e,t){switch(e){case le.ABS:return iue;case le.ACOS:return oue;case le.ACOSH:return lue;case le.ASIN:return uue;case le.ASINH:return due;case le.ATAN:return pue;case le.ATANH:return cue;case le.COS:return mue;case le.COSH:return fue;case le.CEIL:return hue;case le.ELU:return t?xue:yue;case le.ERF:return Aue;case le.EXP:return bue;case le.EXPM1:return gue;case le.FLOOR:return vue;case le.IS_FINITE:return wue;case le.IS_INF:return kue;case le.IS_NAN:return Iue;case le.LINEAR:return Sue;case le.LOG:return Cue;case le.LOG1P:return Tue;case le.LOGICAL_NOT:return Nue;case le.NEG:return Rue;case le.LEAKYRELU:return t?Mue:Eue;case le.RECIPROCAL:return $ue;case le.RELU:return t?Due:Pue;case le.RELU6:return t?Fue:_ue;case le.ROUND:return Oue;case le.RSQRT:return zue;case le.SELU:return Lue;case le.SIGMOID:return Wue;case le.SIGN:return Bue;case le.SIN:return Vue;case le.SINH:return Uue;case le.SOFTPLUS:return Gue;case le.SQRT:return Hue;case le.SQUARE:return jue;case le.STEP:return que;case le.TAN:return Xue;case le.TANH:return Kue;case le.TO_INT:return Yue;default:throw new Error(`BinaryType ${e} is not implemented!`)}}function $r(e,t=!1,a=!1,n=3){if(e===null)return"";let r="";if(e==="linear")r=Ws(le.LINEAR);else if(e==="relu")r=Ws(le.RELU,a);else if(e==="elu")r=Ws(le.ELU,a);else if(e==="relu6")r=Ws(le.RELU6,a);else if(e==="prelu")r=K3(Pe.PRELU,a);else if(e==="sigmoid")r=Ws(le.SIGMOID,a);else if(e==="leakyrelu")r=Ws(le.LEAKYRELU,a);else throw new Error(`Activation ${e} has not been implemented for the WebGPU backend.`);let s=Xe(a?4:1),i="";return t?i=` +`,Zue="return f32(i32((a)));";function Ws(e,t){switch(e){case le.ABS:return oue;case le.ACOS:return lue;case le.ACOSH:return uue;case le.ASIN:return due;case le.ASINH:return pue;case le.ATAN:return cue;case le.ATANH:return hue;case le.COS:return fue;case le.COSH:return gue;case le.CEIL:return mue;case le.ELU:return t?Aue:xue;case le.ERF:return bue;case le.EXP:return vue;case le.EXPM1:return yue;case le.FLOOR:return wue;case le.IS_FINITE:return kue;case le.IS_INF:return Iue;case le.IS_NAN:return Sue;case le.LINEAR:return Cue;case le.LOG:return Tue;case le.LOG1P:return Nue;case le.LOGICAL_NOT:return Rue;case le.NEG:return Eue;case le.LEAKYRELU:return t?$ue:Mue;case le.RECIPROCAL:return Pue;case le.RELU:return t?Oue:_ue;case le.RELU6:return t?Due:Fue;case le.ROUND:return zue;case le.RSQRT:return Lue;case le.SELU:return Wue;case le.SIGMOID:return Bue;case le.SIGN:return Vue;case le.SIN:return Uue;case le.SINH:return Gue;case le.SOFTPLUS:return Hue;case le.SQRT:return jue;case le.SQUARE:return que;case le.STEP:return Xue;case le.TAN:return Kue;case le.TANH:return Yue;case le.TO_INT:return Zue;default:throw new Error(`BinaryType ${e} is not implemented!`)}}function $r(e,t=!1,a=!1,n=3){if(e===null)return"";let r="";if(e==="linear")r=Ws(le.LINEAR);else if(e==="relu")r=Ws(le.RELU,a);else if(e==="elu")r=Ws(le.ELU,a);else if(e==="relu6")r=Ws(le.RELU6,a);else if(e==="prelu")r=K3(Pe.PRELU,a);else if(e==="sigmoid")r=Ws(le.SIGMOID,a);else if(e==="leakyrelu")r=Ws(le.LEAKYRELU,a);else throw new Error(`Activation ${e} has not been implemented for the WebGPU backend.`);let s=Xe(a?4:1),i="";return t?i=` fn activation(a : ${s}, coords : vec${n}) -> ${s} { let b = getPreluActivationWeightsByOutputCoords(coords); ${r} @@ -5440,7 +5440,7 @@ return a / b;`,TJ=` }`,i}function ol(e,t){return` ${e?"value = value + getBiasByOutputCoords(coords);":""} ${t?"value = activation(value, coords);":""} - `}function Rk(e,t,a=!1,n=!1,r=!1,s=1){v.assert(e&&s===1||!e,()=>`transposeA ${e} is not compatible with component size ${s}`);let i=` + `}function Ek(e,t,a=!1,n=!1,r=!1,s=1){v.assert(e&&s===1||!e,()=>`transposeA ${e} is not compatible with component size ${s}`);let i=` ${e?"value = getA(batch, col, row);":"value = getA(batch, row, col);"} `,o=t?"value = getB(batch, col, row);":"value = getB(batch, row, col);";return` @@ -5461,7 +5461,7 @@ return a / b;`,TJ=` return value; } `}function Y3(e,t,a,n,r=!1,s=!1,i=!1,o=1){return` - ${Rk(a,n,r,s,i,o)} + ${Ek(a,n,r,s,i,o)} fn mm_write(batch: i32, row: i32, col: i32, valueIn: ${Xe(o)}) { ${r&&s?"":"if (row < uniforms.dimAOuter && col < uniforms.dimBOuter)"} { @@ -5471,7 +5471,7 @@ return a / b;`,TJ=` setOutputAtCoords(coords[0], coords[1], coords[2], value); } } - `}var Zue=(e,t)=>e?` + `}var Jue=(e,t)=>e?` mm_Asub[inputRow][inputCol] = mm_readA(batchA, kStart + inputRow, globalRowStart + inputCol * ${t}); @@ -5479,7 +5479,7 @@ return a / b;`,TJ=` mm_Asub[inputRow][inputCol] = mm_readA(batchA, globalRow + innerRow, kStart + inputCol * ${t}); - `,Jue=(e,t,a,n)=>{if(e)return` + `,Que=(e,t,a,n)=>{if(e)return` for (var k = 0; k < ${n}; k++) { let BCached0 = mm_Bsub[k][tileCol]; let ACached0 = mm_Asub[k][localRow]; @@ -5523,7 +5523,7 @@ return a / b;`,TJ=` for (var innerRow = 0; innerRow < ${h}; innerRow++) { let inputRow = tileRow + innerRow; let inputCol = tileCol; - ${Zue(a,c)} + ${Jue(a,c)} } // Load one tile of B into local memory. @@ -5536,14 +5536,14 @@ return a / b;`,TJ=` workgroupBarrier(); // Compute acc values for a single thread. - ${Jue(a,c,h,n)} + ${Que(a,c,h,n)} workgroupBarrier(); } for (var innerRow = 0; innerRow < ${h}; innerRow++) { mm_write(batch, globalRow + innerRow, globalCol, acc[innerRow]); } - }`}var rA=e=>e?` + }`}var sA=e=>e?` mm_Asub[inputRow][inputCol] = mm_readA(batchA, kStart + inputRow, globalRowStart + inputCol); @@ -5551,7 +5551,7 @@ return a / b;`,TJ=` mm_Asub[inputRow][inputCol] = mm_readA(batchA, globalRowStart + inputRow, kStart + inputCol); - `,Que=e=>e?"let ACached = mm_Asub[k][tileRow + innerRow];":"let ACached = mm_Asub[tileRow + innerRow][k];";function p0(e,t,a=!1,n=32,r=!1,s=32,i=!1,o=!1){let l=e[1]*t[1],u=e[0]*t[0],p=a?l:n,c=a?n:l;v.assert(c%t[1]===0&&p%t[0]===0&&n%t[1]===0,()=>`tileAHight ${c} must be divisible by workgroupSize[1]${t[1]}, tileAWidth ${p} must be divisible by workgroupSize[0]${t[0]}, tileInner ${n} must be divisible by workgroupSize[1]${t[1]}`);let d=c/t[1],h=p/t[0],m=n/t[1],f=e[1],g=e[0],y=i?` + `,ede=e=>e?"let ACached = mm_Asub[k][tileRow + innerRow];":"let ACached = mm_Asub[tileRow + innerRow][k];";function p0(e,t,a=!1,n=32,r=!1,s=32,i=!1,o=!1){let l=e[1]*t[1],u=e[0]*t[0],p=a?l:n,c=a?n:l;v.assert(c%t[1]===0&&p%t[0]===0&&n%t[1]===0,()=>`tileAHight ${c} must be divisible by workgroupSize[1]${t[1]}, tileAWidth ${p} must be divisible by workgroupSize[0]${t[0]}, tileInner ${n} must be divisible by workgroupSize[1]${t[1]}`);let d=c/t[1],h=p/t[0],m=n/t[1],f=e[1],g=e[0],y=i?` let localRow = i32(localId.y); let localCol = i32(localId.x); let globalRowStart = i32(workgroupId.y) * ${l}; @@ -5562,7 +5562,7 @@ return a / b;`,TJ=` // Load one tile of A into local memory. for (var inputRow = localRow; inputRow < ${c}; inputRow = inputRow + ${t[1]}) { for (var inputCol = localCol; inputCol < ${p}; inputCol = inputCol + ${t[0]}) { - ${rA(a)} + ${sA(a)} } } // Load one tile of B into local memory. @@ -5617,7 +5617,7 @@ return a / b;`,TJ=` for (var innerCol = 0; innerCol < ${h}; innerCol++) { let inputRow = tileRowA + innerRow; let inputCol = tileColA + innerCol; - ${rA(a)} + ${sA(a)} } } @@ -5642,7 +5642,7 @@ return a / b;`,TJ=` } for (var innerRow = 0; innerRow < ${f}; innerRow++) { - ${Que(a)} + ${ede(a)} for (var innerCol = 0; innerCol < ${g}; innerCol++) { acc[innerRow][innerCol] = fma(ACached, BCached[innerCol], acc[innerRow][innerCol]); @@ -5680,7 +5680,7 @@ return a / b;`,TJ=` } ${y} } - `}var ede=e=>e?` + `}var tde=e=>e?` mm_readA(batchA, colA, globalRow), mm_readA(batchA, colA + 1, globalRow), mm_readA(batchA, colA + 2, globalRow), @@ -5690,7 +5690,7 @@ return a / b;`,TJ=` mm_readA(batchA, globalRow, colA + 1), mm_readA(batchA, globalRow, colA + 2), mm_readA(batchA, globalRow, colA + 3) - `;function tde(e,t=!1){v.assert(e[1]===1&&e[2]===1,()=>`A linear work group size is required. But got ${e}.`);let a=e[0]*4;return` + `;function ade(e,t=!1){v.assert(e[1]===1&&e[2]===1,()=>`A linear work group size is required. But got ${e}.`);let a=e[0]*4;return` var mm_Asub : array, ${e[0]}>; ${ue()} { @@ -5709,7 +5709,7 @@ return a / b;`,TJ=` for (var t = 0; t < numTiles; t++) { // Load one tile of A into local memory. let colA = t * ${a} + tileCol * 4; - mm_Asub[tileCol] = vec4(${ede(t)}); + mm_Asub[tileCol] = vec4(${tde(t)}); workgroupBarrier(); // Compute acc values for a single thread. @@ -5729,11 +5729,11 @@ return a / b;`,TJ=` mm_write(batch, globalRow, globalCol, acc); } - `}var ade=class{constructor(e,t,a=!1,n=!1,r=null,s=null,i=null,o=!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=a?e[1]:e[2];if(this.isVec4=(l%4===0&&!a||t[1]%4===0&&a)&&t[2]%4===0&&!n,this.outputComponent=this.isVec4?4:1,this.isVectorA=t[1]===1&&!a,!this.isVec4&&this.isVectorA)this.elementsPerThread=[1,1,1],this.workgroupSize=[32,1,1];else{let c=Tk(t[1],l,t[2],a);this.workgroupSize=c.workgroupSize,this.elementsPerThread=c.elementsPerThread}this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize,this.elementsPerThread);let u=r!=null,p=i!=null;u&&this.variableNames.push("bias"),p&&this.variableNames.push("preluActivationWeights"),this.sequentialAccessByThreads=o,this.transposeA=a,this.transposeB=n,this.addBias=u,this.activation=s,this.hasPreluActivationWeights=p,[this.fitAOuter,this.fitBOuter,this.fitInner]=this.getShapeFit(t[1],t[2],l),this.shaderKey=`matMulPacked_${this.elementsPerThread}_${a}_${n}_${this.activation}_${this.fitAOuter}_${this.fitBOuter}_${this.fitInner}_${this.isVec4}_${this.isVectorA}_${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` + `}var nde=class{constructor(e,t,a=!1,n=!1,r=null,s=null,i=null,o=!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=a?e[1]:e[2];if(this.isVec4=(l%4===0&&!a||t[1]%4===0&&a)&&t[2]%4===0&&!n,this.outputComponent=this.isVec4?4:1,this.isVectorA=t[1]===1&&!a,!this.isVec4&&this.isVectorA)this.elementsPerThread=[1,1,1],this.workgroupSize=[32,1,1];else{let c=Nk(t[1],l,t[2],a);this.workgroupSize=c.workgroupSize,this.elementsPerThread=c.elementsPerThread}this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize,this.elementsPerThread);let u=r!=null,p=i!=null;u&&this.variableNames.push("bias"),p&&this.variableNames.push("preluActivationWeights"),this.sequentialAccessByThreads=o,this.transposeA=a,this.transposeB=n,this.addBias=u,this.activation=s,this.hasPreluActivationWeights=p,[this.fitAOuter,this.fitBOuter,this.fitInner]=this.getShapeFit(t[1],t[2],l),this.shaderKey=`matMulPacked_${this.elementsPerThread}_${a}_${n}_${this.activation}_${this.fitAOuter}_${this.fitBOuter}_${this.fitInner}_${this.isVec4}_${this.isVectorA}_${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` ${$r(this.activation,this.hasPreluActivationWeights,this.isVec4)} ${Y3(this.addBias,this.activation,!1,this.transposeB,this.fitAOuter,this.fitBOuter,this.fitInner,this.isVec4?4:1)} - ${this.isVec4?d0(this.elementsPerThread,this.workgroupSize,this.transposeA,this.tileInner,!1,null,!0):this.isVectorA?tde(this.workgroupSize,this.transposeA):p0(this.elementsPerThread,this.workgroupSize,this.transposeA,this.tileInner,!1,null,this.sequentialAccessByThreads,!0)} - `}};function nde(e){return` + ${this.isVec4?d0(this.elementsPerThread,this.workgroupSize,this.transposeA,this.tileInner,!1,null,!0):this.isVectorA?ade(this.workgroupSize,this.transposeA):p0(this.elementsPerThread,this.workgroupSize,this.transposeA,this.tileInner,!1,null,this.sequentialAccessByThreads,!0)} + `}};function rde(e){return` var sumValues : array; ${ue()} { let coords = getOutputCoords(); @@ -5766,11 +5766,11 @@ return a / b;`,TJ=` mm_write(batch, row, col, sum); } } - `}var rde=class{constructor(e,t=!1,a=!1,n=null,r=null,s=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=de(this.dispatchLayout,this.outputShape,this.workgroupSize);let i=n!=null,o=s!=null;i&&this.variableNames.push("bias"),o&&this.variableNames.push("preluActivationWeights"),this.transposeA=t,this.transposeB=a,this.addBias=i,this.activation=r,this.hasPreluActivationWeights=o,this.shaderKey=`matMulReduce_${this.activation}_${t}_${a}`}getUserCode(){return` + `}var sde=class{constructor(e,t=!1,a=!1,n=null,r=null,s=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=de(this.dispatchLayout,this.outputShape,this.workgroupSize);let i=n!=null,o=s!=null;i&&this.variableNames.push("bias"),o&&this.variableNames.push("preluActivationWeights"),this.transposeA=t,this.transposeB=a,this.addBias=i,this.activation=r,this.hasPreluActivationWeights=o,this.shaderKey=`matMulReduce_${this.activation}_${t}_${a}`}getUserCode(){return` ${$r(this.activation,this.hasPreluActivationWeights)} ${Y3(this.addBias,this.activation,this.transposeA,this.transposeB)} - ${nde(this.workgroupSize[0])} - `}};function sde(e){let t=e[1],a=e[0],n=t>a?t:a;return` + ${rde(this.workgroupSize[0])} + `}};function ide(e){let t=e[1],a=e[0],n=t>a?t:a;return` var mm_Asub : array, ${t}>; var mm_Bsub : array, ${n}>; @@ -5822,12 +5822,12 @@ return a / b;`,TJ=` mm_write(batch, globalRow, globalCol, acc); } - `}var ide=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.shaderKey=`matMulSmallOutputSize_${this.activation}_${n}_${r}`}getUserCode(){return` + `}var ode=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.shaderKey=`matMulSmallOutputSize_${this.activation}_${n}_${r}`}getUserCode(){return` ${$r(this.activation,this.hasPreluActivationWeights)} ${Y3(this.addBias,this.activation,this.transposeA,this.transposeB)} - ${sde(this.workgroupSize)} - `}},ode=class{constructor(e,t,a=!1,n=!1){this.variableNames=["A","B"],this.uniforms="dimAOuter : i32, dimBOuter : i32, dimInner : i32,",this.workgroupSize=[8,8,1],this.atomic=!0,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]};let r=(a&&this.outputShape[1]%4===0||!a&&t%4===0)&&this.outputShape[2]%4===0;this.elementsPerThread=[4,4,this.splitedDimInner],this.outputComponent=r?4:1,r||(this.outputShape[1]<16&&(this.elementsPerThread[1]=1),this.outputShape[2]<16&&(this.elementsPerThread[0]=1)),this.dispatch=de(this.dispatchLayout,[this.outputShape[0],this.outputShape[1],this.outputShape[2],t],this.workgroupSize,this.elementsPerThread),this.transposeA=a,this.transposeB=n,this.shaderKey=`matMulSplitK_${a}_${n}_${this.elementsPerThread}_${this.outputComponent}`}getUserCode(){let e=this.outputComponent;return` - ${Rk(!1,this.transposeB,!1,!1,!1,e)} + ${ide(this.workgroupSize)} + `}},lde=class{constructor(e,t,a=!1,n=!1){this.variableNames=["A","B"],this.uniforms="dimAOuter : i32, dimBOuter : i32, dimInner : i32,",this.workgroupSize=[8,8,1],this.atomic=!0,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]};let r=(a&&this.outputShape[1]%4===0||!a&&t%4===0)&&this.outputShape[2]%4===0;this.elementsPerThread=[4,4,this.splitedDimInner],this.outputComponent=r?4:1,r||(this.outputShape[1]<16&&(this.elementsPerThread[1]=1),this.outputShape[2]<16&&(this.elementsPerThread[0]=1)),this.dispatch=de(this.dispatchLayout,[this.outputShape[0],this.outputShape[1],this.outputShape[2],t],this.workgroupSize,this.elementsPerThread),this.transposeA=a,this.transposeB=n,this.shaderKey=`matMulSplitK_${a}_${n}_${this.elementsPerThread}_${this.outputComponent}`}getUserCode(){let e=this.outputComponent;return` + ${Ek(!1,this.transposeB,!1,!1,!1,e)} fn mm_write(batch: i32, row : i32, col : i32, value : ${Xe(e)}) { if (row < uniforms.dimAOuter && col < uniforms.dimBOuter) { let coords = vec3(batch, row, col); @@ -5840,7 +5840,7 @@ return a / b;`,TJ=` } } ${e===4?d0(this.elementsPerThread,this.workgroupSize,this.transposeA,32,!0,this.splitedDimInner):p0(this.elementsPerThread,this.workgroupSize,this.transposeA,32,!0,this.splitedDimInner)} - `}},lde=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=me(this.outputShape),this.dispatch=de(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` + `}},ude=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=me(this.outputShape),this.dispatch=de(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` ${$r(this.activation,this.hasPreluActivationWeights)} ${ue("index")} { if (index < uniforms.size) { @@ -5850,13 +5850,13 @@ return a / b;`,TJ=` setOutputAtIndex(index, value); } } - `}},ude=class{constructor(e){this.variableNames=[],this.outputShape=[],this.uniforms="value : f32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="fill"}getUserCode(){return` + `}},dde=class{constructor(e){this.variableNames=[],this.outputShape=[],this.uniforms="value : f32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="fill"}getUserCode(){return` ${ue("index")} { if (index < uniforms.size) { setOutputAtIndex(index, uniforms.value); } } - `}};function Wa(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 ude(n),o=[{type:"float32",data:[r]}];return t.runWebGPUProgram(i,[],s,o)}}var dde={kernelName:Au,backendName:"webgpu",kernelFunc:Wa};function ke(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 pde={kernelName:Ru,backendName:"webgpu",kernelFunc:ke};function c0({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],m=n?t.shape[p-2]:t.shape[p-1],f=e.shape.slice(0,-2),g=t.shape.slice(0,-2),y=v.sizeFromShape(f),x=v.sizeFromShape(g),A=al.assertAndGetBroadcastShape(e.shape.slice(0,-2),t.shape.slice(0,-2)).concat([h,m]);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?[y,c,h]:[y,h,c],w=n?[x,m,d]:[x,d,m],I=ke({inputs:{x:e},backend:r,attrs:{shape:b}}),T=ke({inputs:{x:t},backend:r,attrs:{shape:w}}),N=[I,T],M=Math.max(y,x),$=[I,T],E=[{type:"int32",data:[h]},{type:"int32",data:[m]},{type:"int32",data:[c]}],S,_,O=[M,h,m],W=B().get("WEBGPU_MATMUL_PROGRAM_TYPE");if(W<0){let U=B().getNumber("WEBGPU_THRESHOLD_TO_INCREASE_WORKGROUPS_FOR_MATMUL"),G=U>0?U:r.thresholdToIncreaseWorkgroups,q=M*Math.ceil(h/32)*Math.ceil(m/32);q<=G||h<=8&&q<=G*2?M*h*m<=128?W=Dn.MatMulReduceProgram:M===1&&d>=2e3?W=Dn.MatMulSplitKProgram:W=Dn.MatMulSmallOutputSizeProgram:W=Dn.MatMulPackedProgram}switch(W){case Dn.MatMulReduceProgram:S=new rde(O,a,n,s,l,i);break;case Dn.MatMulSplitKProgram:{if(_=Wa({backend:r,attrs:{shape:O,value:0,dtype:e.dtype}}),S=new ode(O,d,a,n),s||l){_=r.runWebGPUProgram(S,$,e.dtype,E,_);let G=new lde(_.shape,s,l,i),q=null,H=[_];s&&H.push(s),i&&H.push(i),l==="leakyrelu"&&(q=[{type:"float32",data:[o]}],G.uniforms+=" alpha : f32,");let V=r.runWebGPUProgram(G,H,_.dtype,q);N.push(_);let Z=ke({inputs:{x:V},backend:r,attrs:{shape:A}});N.push(V);for(let X of N)r.disposeData(X.dataId);return Z}break}case Dn.MatMulSmallOutputSizeProgram:S=new ide(b,w,O,a,n,s,l,i);break;case Dn.MatMulPackedProgram:let U=r.adapterInfo.isIntel();S=new ade(b,O,a,n,s,l,i,U);break;default:throw new Error(`Unsupported MatMulProgramType ${W}.`)}s&&$.push(s),i&&$.push(i),l==="leakyrelu"&&(E.push({type:"float32",data:[o]}),S.uniforms+=" alpha : f32,"),_=r.runWebGPUProgram(S,$,e.dtype,E,_);let P=ke({inputs:{x:_},backend:r,attrs:{shape:A}});N.push(_);for(let U of N)r.disposeData(U.dataId);return P}function cde(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 c0({a:r,b:s,transposeA:l,transposeB:u,backend:a,bias:i,preluActivationWeights:o,leakyreluAlpha:c,activation:p})}var hde={kernelName:Yr,backendName:"webgpu",kernelFunc:cde},sA=class{constructor(e,t,a){this.variableNames=["AReal","AImag","BReal","BImag"],this.workgroupSize=[128,1,1],this.size=!0,this.outputShape=C.assertAndGetBroadcastShape(t,a),this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=`binaryOpComplex_${e}`,this.op=e}getUserCode(){return` + `}};function Wa(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 dde(n),o=[{type:"float32",data:[r]}];return t.runWebGPUProgram(i,[],s,o)}}var pde={kernelName:Au,backendName:"webgpu",kernelFunc:Wa};function ke(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 cde={kernelName:Ru,backendName:"webgpu",kernelFunc:ke};function c0({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],m=n?t.shape[p-2]:t.shape[p-1],f=e.shape.slice(0,-2),g=t.shape.slice(0,-2),y=v.sizeFromShape(f),x=v.sizeFromShape(g),A=al.assertAndGetBroadcastShape(e.shape.slice(0,-2),t.shape.slice(0,-2)).concat([h,m]);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?[y,c,h]:[y,h,c],w=n?[x,m,d]:[x,d,m],I=ke({inputs:{x:e},backend:r,attrs:{shape:b}}),T=ke({inputs:{x:t},backend:r,attrs:{shape:w}}),N=[I,T],M=Math.max(y,x),$=[I,T],E=[{type:"int32",data:[h]},{type:"int32",data:[m]},{type:"int32",data:[c]}],S,_,O=[M,h,m],W=B().get("WEBGPU_MATMUL_PROGRAM_TYPE");if(W<0){let U=B().getNumber("WEBGPU_THRESHOLD_TO_INCREASE_WORKGROUPS_FOR_MATMUL"),G=U>0?U:r.thresholdToIncreaseWorkgroups,q=M*Math.ceil(h/32)*Math.ceil(m/32);q<=G||h<=8&&q<=G*2?M*h*m<=128?W=Dn.MatMulReduceProgram:M===1&&d>=2e3?W=Dn.MatMulSplitKProgram:W=Dn.MatMulSmallOutputSizeProgram:W=Dn.MatMulPackedProgram}switch(W){case Dn.MatMulReduceProgram:S=new sde(O,a,n,s,l,i);break;case Dn.MatMulSplitKProgram:{if(_=Wa({backend:r,attrs:{shape:O,value:0,dtype:e.dtype}}),S=new lde(O,d,a,n),s||l){_=r.runWebGPUProgram(S,$,e.dtype,E,_);let G=new ude(_.shape,s,l,i),q=null,H=[_];s&&H.push(s),i&&H.push(i),l==="leakyrelu"&&(q=[{type:"float32",data:[o]}],G.uniforms+=" alpha : f32,");let V=r.runWebGPUProgram(G,H,_.dtype,q);N.push(_);let Z=ke({inputs:{x:V},backend:r,attrs:{shape:A}});N.push(V);for(let X of N)r.disposeData(X.dataId);return Z}break}case Dn.MatMulSmallOutputSizeProgram:S=new ode(b,w,O,a,n,s,l,i);break;case Dn.MatMulPackedProgram:let U=r.adapterInfo.isIntel();S=new nde(b,O,a,n,s,l,i,U);break;default:throw new Error(`Unsupported MatMulProgramType ${W}.`)}s&&$.push(s),i&&$.push(i),l==="leakyrelu"&&(E.push({type:"float32",data:[o]}),S.uniforms+=" alpha : f32,"),_=r.runWebGPUProgram(S,$,e.dtype,E,_);let P=ke({inputs:{x:_},backend:r,attrs:{shape:A}});N.push(_);for(let U of N)r.disposeData(U.dataId);return P}function hde(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 c0({a:r,b:s,transposeA:l,transposeB:u,backend:a,bias:i,preluActivationWeights:o,leakyreluAlpha:c,activation:p})}var mde={kernelName:Yr,backendName:"webgpu",kernelFunc:hde},iA=class{constructor(e,t,a){this.variableNames=["AReal","AImag","BReal","BImag"],this.workgroupSize=[128,1,1],this.size=!0,this.outputShape=C.assertAndGetBroadcastShape(t,a),this.dispatchLayout=me(this.outputShape),this.dispatch=de(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 { ${K3(this.op,!1)} @@ -5904,7 +5904,7 @@ return a / b;`,TJ=` setOutputAtIndex(index, binaryOperation(a, b)); } } - `;return e}};function tn(e){let{inputs:t}=e,{x:a}=t;return e.backend.incRef(a.dataId),{dataId:a.dataId,shape:a.shape,dtype:a.dtype}}var mde={kernelName:qi,backendName:"webgpu",kernelFunc:tn};function ll(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=tn({inputs:{x:n},backend:a}),l=tn({inputs:{x:r},backend:a});return i.complexTensorInfos={real:o,imag:l},s}var fde={kernelName:pp,backendName:"webgpu",kernelFunc:ll},ed=class{constructor(e,t,a=""){this.variableNames=["A"],this.size=!0;let n=128;this.workgroupSize=[n,1,1],this.outputShape=e,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.op=t,a!==""&&(this.uniforms=a),this.shaderKey=`unary_${t}`}getUserCode(){return` + `;return e}};function tn(e){let{inputs:t}=e,{x:a}=t;return e.backend.incRef(a.dataId),{dataId:a.dataId,shape:a.shape,dtype:a.dtype}}var fde={kernelName:qi,backendName:"webgpu",kernelFunc:tn};function ll(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=tn({inputs:{x:n},backend:a}),l=tn({inputs:{x:r},backend:a});return i.complexTensorInfos={real:o,imag:l},s}var gde={kernelName:pp,backendName:"webgpu",kernelFunc:ll},ed=class{constructor(e,t,a=""){this.variableNames=["A"],this.size=!0;let n=128;this.workgroupSize=[n,1,1],this.outputShape=e,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.op=t,a!==""&&(this.uniforms=a),this.shaderKey=`unary_${t}`}getUserCode(){return` fn unaryOperation(a : f32) -> f32 { ${Ws(this.op,!1)} } @@ -5914,7 +5914,7 @@ return a / b;`,TJ=` setOutputAtIndex(index, unaryOperation(a)); } } - `}};function at({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 ed(s.shape,e);return i.runWebGPUProgram(l,[s],o)}}function ta({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,m;if(e!==Pe.MUL)[h,m]=[[c.complexTensorInfos.real,d.complexTensorInfos.real],[c.complexTensorInfos.imag,d.complexTensorInfos.imag]].map(g=>{let[y,x]=g,A={dataId:y.dataId,dtype:y.dtype,shape:i.shape},b={dataId:x.dataId,dtype:x.dtype,shape:o.shape},w=new Th(e,i.shape,o.shape);return l.runWebGPUProgram(w,[A,b],pa(y.dtype,x.dtype))});else{let g=new sA(Pe.COMPLEX_MULTIPLY_REAL,i.shape,o.shape),y=new sA(Pe.COMPLEX_MULTIPLY_IMAG,i.shape,o.shape),x=[{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,x,"float32"),m=l.runWebGPUProgram(y,x,"float32")}let f=ll({inputs:{real:h,imag:m},backend:l});return l.disposeData(h.dataId),l.disposeData(m.dataId),f}let u=n||pa(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"?C.fromUint8ToStringArray(c):c,m=i.dtype==="string"?C.fromUint8ToStringArray(d):d,[f,g]=t(i.shape,o.shape,h,m,u);return l.makeTensorInfo(g,u,f)}let p=new Th(e,i.shape,o.shape);return l.runWebGPUProgram(p,[i,o],u)}}var{addImpl:gde,castImpl:yde,ceilImpl:xde,concatImpl:Ade,equalImpl:bde,expImpl:vde,expm1Impl:wde,floorImpl:kde,floorDivImpl:Ide,gatherNdImpl:Sde,gatherV2Impl:Cde,greaterEqualImpl:Tde,greaterImpl:Nde,lessEqualImpl:Rde,lessImpl:Ede,logImpl:Mde,maxImpl:$de,maximumImpl:Pde,minimumImpl:_de,multiplyImpl:Fde,negImpl:Dde,notEqualImpl:Ode,prodImpl:zde,rangeImpl:Lde,rsqrtImpl:Wde,scatterImpl:Bde,simpleAbsImpl:Vde,sliceImpl:Ude,stridedSliceImpl:Gde,stringNGramsImpl:Hde,subImpl:jde,tileImpl:qde,topKImpl:Xde,transposeImpl:Kde,uniqueImpl:dye}=t0,Yde=at({opType:le.ABS,cpuKernelImpl:Vde}),Zde={kernelName:iu,backendName:"webgpu",kernelFunc:Yde},Jde=at({opType:le.ACOS}),Qde={kernelName:oi,backendName:"webgpu",kernelFunc:Jde},epe=at({opType:le.ACOSH}),tpe={kernelName:li,backendName:"webgpu",kernelFunc:epe},ape=ta({opType:Pe.ADD,cpuKernelImpl:gde,supportsComplex:!0}),npe={kernelName:os,backendName:"webgpu",kernelFunc:ape},rpe=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=me(this.outputShape),this.dispatch=de(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` + `}};function at({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 ed(s.shape,e);return i.runWebGPUProgram(l,[s],o)}}function ta({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,m;if(e!==Pe.MUL)[h,m]=[[c.complexTensorInfos.real,d.complexTensorInfos.real],[c.complexTensorInfos.imag,d.complexTensorInfos.imag]].map(g=>{let[y,x]=g,A={dataId:y.dataId,dtype:y.dtype,shape:i.shape},b={dataId:x.dataId,dtype:x.dtype,shape:o.shape},w=new Th(e,i.shape,o.shape);return l.runWebGPUProgram(w,[A,b],pa(y.dtype,x.dtype))});else{let g=new iA(Pe.COMPLEX_MULTIPLY_REAL,i.shape,o.shape),y=new iA(Pe.COMPLEX_MULTIPLY_IMAG,i.shape,o.shape),x=[{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,x,"float32"),m=l.runWebGPUProgram(y,x,"float32")}let f=ll({inputs:{real:h,imag:m},backend:l});return l.disposeData(h.dataId),l.disposeData(m.dataId),f}let u=n||pa(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"?C.fromUint8ToStringArray(c):c,m=i.dtype==="string"?C.fromUint8ToStringArray(d):d,[f,g]=t(i.shape,o.shape,h,m,u);return l.makeTensorInfo(g,u,f)}let p=new Th(e,i.shape,o.shape);return l.runWebGPUProgram(p,[i,o],u)}}var{addImpl:yde,castImpl:xde,ceilImpl:Ade,concatImpl:bde,equalImpl:vde,expImpl:wde,expm1Impl:kde,floorImpl:Ide,floorDivImpl:Sde,gatherNdImpl:Cde,gatherV2Impl:Tde,greaterEqualImpl:Nde,greaterImpl:Rde,lessEqualImpl:Ede,lessImpl:Mde,logImpl:$de,maxImpl:Pde,maximumImpl:_de,minimumImpl:Fde,multiplyImpl:Dde,negImpl:Ode,notEqualImpl:zde,prodImpl:Lde,rangeImpl:Wde,rsqrtImpl:Bde,scatterImpl:Vde,simpleAbsImpl:Ude,sliceImpl:Gde,stridedSliceImpl:Hde,stringNGramsImpl:jde,subImpl:qde,tileImpl:Xde,topKImpl:Kde,transposeImpl:Yde,uniqueImpl:pye}=t0,Zde=at({opType:le.ABS,cpuKernelImpl:Ude}),Jde={kernelName:iu,backendName:"webgpu",kernelFunc:Zde},Qde=at({opType:le.ACOS}),epe={kernelName:oi,backendName:"webgpu",kernelFunc:Qde},tpe=at({opType:le.ACOSH}),ape={kernelName:li,backendName:"webgpu",kernelFunc:tpe},npe=ta({opType:Pe.ADD,cpuKernelImpl:yde,supportsComplex:!0}),rpe={kernelName:os,backendName:"webgpu",kernelFunc:npe},spe=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=me(this.outputShape),this.dispatch=de(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` ${ue("index")} { for (var i = 0; i < ${this.workPerThread}; i = i + 1) { let flatIndex = index * ${this.workPerThread} + i; @@ -5926,7 +5926,7 @@ return a / b;`,TJ=` } } } - `}};function spe(e){let{inputs:t,backend:a}=e,n=t;if(n.length===1)return tn({inputs:{x:n[0]},backend:a});let r=n.map(o=>o.dtype).reduce((o,l)=>pa(o,l)),s=n.map(o=>o.shape),i=new rpe(s);return a.runWebGPUProgram(i,n,r)}var ipe={kernelName:ui,backendName:"webgpu",kernelFunc:spe},ope=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]}`);let e=this.workgroupSize[0];return` + `}};function ipe(e){let{inputs:t,backend:a}=e,n=t;if(n.length===1)return tn({inputs:{x:n[0]},backend:a});let r=n.map(o=>o.dtype).reduce((o,l)=>pa(o,l)),s=n.map(o=>o.shape),i=new spe(s);return a.runWebGPUProgram(i,n,r)}var ope={kernelName:ui,backendName:"webgpu",kernelFunc:ipe},lpe=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]}`);let e=this.workgroupSize[0];return` var tile : array, ${this.workgroupSize[0]}>; ${ue()} { var x = i32(workgroupId.x) * ${e} + i32(localId.x); @@ -5945,7 +5945,7 @@ return a / b;`,TJ=` [localId.y]); } } - `}},lpe=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=32768&&a>=512?this.workgroupSize=[512,1,1]:e.inSize>=4096?this.workgroupSize=[256,1,1]:this.workgroupSize=[64,1,1],this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,[1,1,1]),this.reduceType=t,this.shaderKey=`reduce_${t}`}getUserCode(){let e="",t="0.0",a=this.workgroupSize[0];this.reduceType==="min"||this.reduceType==="max"?(e=` + `}};function Mk(e){let t=e.length;if(t>6)throw Error(`Transpose for rank ${t} is not yet supported`);let a=new Array(t);for(let n=0;n=32768&&a>=512?this.workgroupSize=[512,1,1]:e.inSize>=4096?this.workgroupSize=[256,1,1]:this.workgroupSize=[64,1,1],this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,[1,1,1]),this.reduceType=t,this.shaderKey=`reduce_${t}`}getUserCode(){let e="",t="0.0",a=this.workgroupSize[0];this.reduceType==="min"||this.reduceType==="max"?(e=` if (isnan(candidate)) { bestValue = uniforms.NAN; } else if (!isnan(bestValue) && candidate ${this.reduceType==="min"?"<":">"} bestValue) @@ -6004,7 +6004,7 @@ return a / b;`,TJ=` ${n} } } - `}},ppe={mean:"float32",all:"bool",any:"bool"};function ul(e,t,a,n,r){let s=e.shape.length,i=[],o=v.parseAxisParam(t,e.shape),l=o,u=C.getAxesPermutation(l,s),p=e;u!=null&&(p=nr({inputs:{x:e},attrs:{perm:u},backend:r}),l=C.getInnerMostAxes(l.length,s),i.push(p)),C.assertAxesAreInnerMostDims(n,l,s);let[c,d]=C.computeOutAndReduceShapes(p.shape,l),h=c;a&&(h=C.expandShapeToKeepDim(c,o));let m;if((n==="max"||n==="prod")&&r.shouldExecuteOnCPU([p])){let f=r.tensorMap.get(p.dataId).values;switch(n){case"max":let g=$de(f,v.sizeFromShape(d),h,e.dtype);m=r.makeTensorInfo(h,e.dtype,g);break;case"prod":let{outVals:y,outShape:x,outDtype:A}=zde(p.shape,p.dtype,f,l);m=r.makeTensorInfo(x,A,y);break;default:throw new Error(`${n} CPU implementation is not yet supported.`)}}else{let f=v.sizeFromShape(d),g=v.sizeFromShape(p.shape)/f,y={windowSize:f,inSize:f,batchSize:g,outSize:1},x=ppe[n]||Pp(e.dtype),A=[{type:"int32",data:[f]}],b=new dpe(y,n,r.device.limits.maxComputeWorkgroupSizeX),w=r.runWebGPUProgram(b,[p],x,A);i.push(w),m=ke({inputs:{x:w},attrs:{shape:h},backend:r})}return i.forEach(f=>r.disposeData(f.dataId)),m}function cpe(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{keepDims:s,axis:i}=n;return ul(r,i,s,"all",a)}var hpe={kernelName:di,backendName:"webgpu",kernelFunc:cpe};function mpe(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{keepDims:s,axis:i}=n;return ul(r,i,s,"any",a)}var fpe={kernelName:pi,backendName:"webgpu",kernelFunc:mpe},Mk=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]=C.computeOutAndReduceShapes(e,n);this.outputShape=r.length===0?[1]:r,this.dispatchLayout=me(this.outputShape),v.sizeFromShape(s)<32?(this.type="plain",this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize)):(this.type="shared",this.dispatch=de(this.dispatchLayout,this.outputShape,[1,1,1])),this.inputShape=e,this.shaderKey=`argMinMax_${this.op}_${this.type}`}getUserCode(){let e=this.workgroupSize[0],t=()=>this.inputShape.length===1?"uniforms.xShape":`uniforms.xShape.${Ir(this.inputShape.length-1)}`,a=()=>{let n="";if(this.outputShape.length===1)this.inputShape.length!==1&&(n+="outputCoords,");else for(let r=0;rr.disposeData(f.dataId)),m}function hpe(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{keepDims:s,axis:i}=n;return ul(r,i,s,"all",a)}var mpe={kernelName:di,backendName:"webgpu",kernelFunc:hpe};function fpe(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{keepDims:s,axis:i}=n;return ul(r,i,s,"any",a)}var gpe={kernelName:pi,backendName:"webgpu",kernelFunc:fpe},$k=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]=C.computeOutAndReduceShapes(e,n);this.outputShape=r.length===0?[1]:r,this.dispatchLayout=me(this.outputShape),v.sizeFromShape(s)<32?(this.type="plain",this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize)):(this.type="shared",this.dispatch=de(this.dispatchLayout,this.outputShape,[1,1,1])),this.inputShape=e,this.shaderKey=`argMinMax_${this.op}_${this.type}`}getUserCode(){let e=this.workgroupSize[0],t=()=>this.inputShape.length===1?"uniforms.xShape":`uniforms.xShape.${Ir(this.inputShape.length-1)}`,a=()=>{let n="";if(this.outputShape.length===1)this.inputShape.length!==1&&(n+="outputCoords,");else for(let r=0;r u32 { return ((a - 1u) / b + 1u); } @@ -6070,7 +6070,7 @@ return a / b;`,TJ=` setOutputAtIndexI32(index, bestIndex); } } - `}};function gpe(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s}=n,i=v.parseAxisParam(s,r.shape),o=C.getAxesPermutation(i,r.shape.length),l=r,u=[];o!=null&&(l=nr({inputs:{x:r},backend:a,attrs:{perm:o}}),u.push(l),i=C.getInnerMostAxes(i.length,l.shape.length)),C.assertAxesAreInnerMostDims("argMax",[i[0]],l.shape.length);let p=new Mk(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 ype={kernelName:ou,backendName:"webgpu",kernelFunc:gpe};function xpe(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s}=n,i=v.parseAxisParam(s,r.shape),o=C.getAxesPermutation(i,r.shape.length),l=r,u=[];o!=null&&(l=nr({inputs:{x:r},backend:a,attrs:{perm:o}}),u.push(l),i=C.getInnerMostAxes(i.length,l.shape.length)),C.assertAxesAreInnerMostDims("argMin",[i[0]],l.shape.length);let p=new Mk(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 Ape={kernelName:lu,backendName:"webgpu",kernelFunc:xpe},bpe=at({opType:le.ASIN}),vpe={kernelName:ci,backendName:"webgpu",kernelFunc:bpe},wpe=at({opType:le.ASINH}),kpe={kernelName:hi,backendName:"webgpu",kernelFunc:wpe},Ipe=at({opType:le.ATAN}),Spe={kernelName:mi,backendName:"webgpu",kernelFunc:Ipe},Cpe=ta({opType:Pe.ATAN2}),Tpe={kernelName:gi,backendName:"webgpu",kernelFunc:Cpe},Npe=at({opType:le.ATANH}),Rpe={kernelName:fi,backendName:"webgpu",kernelFunc:Npe},Epe=class{constructor(e){this.variableNames=["x"],this.uniforms="strides : vec2,",this.workgroupSize=[256,1,1],this.size=!0,this.outputShape=e.outShape,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="poolWithFilterSizeEqualsOne"}getUserCode(){return` + `}};function ype(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s}=n,i=v.parseAxisParam(s,r.shape),o=C.getAxesPermutation(i,r.shape.length),l=r,u=[];o!=null&&(l=nr({inputs:{x:r},backend:a,attrs:{perm:o}}),u.push(l),i=C.getInnerMostAxes(i.length,l.shape.length)),C.assertAxesAreInnerMostDims("argMax",[i[0]],l.shape.length);let p=new $k(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 xpe={kernelName:ou,backendName:"webgpu",kernelFunc:ype};function Ape(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s}=n,i=v.parseAxisParam(s,r.shape),o=C.getAxesPermutation(i,r.shape.length),l=r,u=[];o!=null&&(l=nr({inputs:{x:r},backend:a,attrs:{perm:o}}),u.push(l),i=C.getInnerMostAxes(i.length,l.shape.length)),C.assertAxesAreInnerMostDims("argMin",[i[0]],l.shape.length);let p=new $k(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 bpe={kernelName:lu,backendName:"webgpu",kernelFunc:Ape},vpe=at({opType:le.ASIN}),wpe={kernelName:ci,backendName:"webgpu",kernelFunc:vpe},kpe=at({opType:le.ASINH}),Ipe={kernelName:hi,backendName:"webgpu",kernelFunc:kpe},Spe=at({opType:le.ATAN}),Cpe={kernelName:mi,backendName:"webgpu",kernelFunc:Spe},Tpe=ta({opType:Pe.ATAN2}),Npe={kernelName:gi,backendName:"webgpu",kernelFunc:Tpe},Rpe=at({opType:le.ATANH}),Epe={kernelName:fi,backendName:"webgpu",kernelFunc:Rpe},Mpe=class{constructor(e){this.variableNames=["x"],this.uniforms="strides : vec2,",this.workgroupSize=[256,1,1],this.size=!0,this.outputShape=e.outShape,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="poolWithFilterSizeEqualsOne"}getUserCode(){return` ${ue("index")} { if (index < uniforms.size) { let coords = getCoordsFromIndex(index); @@ -6175,7 +6175,7 @@ return a / b;`,TJ=` ${this.computePositions?"setOutputAtIndexI32(index, maxPosition);":`setOutputAtIndex(index, ${t});`} } } - `}};function $k(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{reductionIndices:s,keepDims:i}=n;return ul(r,s,i,"max",a)}var Mpe={kernelName:oo,backendName:"webgpu",kernelFunc:$k};function Pk(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{keepDims:s,axis:i}=n;return ul(r,i,s,"mean",a)}var $pe={kernelName:po,backendName:"webgpu",kernelFunc:Pk};function _k(e,t,a,n){if(t.filterWidth===1&&t.filterHeight===1&&v.arraysEqual(t.inShape,t.outShape))return tn({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=ke({inputs:{x:e},backend:n,attrs:{shape:[e.shape[i-3]*e.shape[i-2],e.shape[i-1]]}}),l;a==="avg"?l=Pk({inputs:{x:o},backend:n,attrs:{axis:0,keepDims:!1}}):(v.assert(a==="max",()=>`Invalid pool type ${a}`),l=$k({inputs:{x:o},backend:n,attrs:{reductionIndices:0,keepDims:!1}}));let u=ke({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 Epe(t):(a==="avg"?r=new rp(t,"avg"):(v.assert(a==="max",()=>`Invalid pool type ${a}`),r=new rp(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 Ppe(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{filterSize:s,strides:i,pad:o,dimRoundingMode:l}=n,u=C.computePool2DInfo(r.shape,s,i,1,o,l);return _k(r,u,"avg",a)}var _pe={kernelName:yi,backendName:"webgpu",kernelFunc:Ppe};function Fpe(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=C.computePool3DInfo(r.shape,s,i,p,o,u,l),d=new Z3(c,"avg"),h=[{type:"int32",data:[c.strideDepth,c.strideHeight,c.strideWidth]},{type:"int32",data:[c.padInfo.front,c.padInfo.top,c.padInfo.left]},{type:"int32",data:[c.inDepth,c.inHeight,c.inWidth]},{type:"int32",data:[c.effectiveFilterDepth,c.effectiveFilterHeight,c.effectiveFilterWidth]}];return a.runWebGPUProgram(d,[r],r.dtype,h)}var Dpe={kernelName:uu,backendName:"webgpu",kernelFunc:Fpe},Ope=class{constructor(e){this.variableNames=["dy"],this.uniforms=`strides : vec2, pads : vec2, dilations : vec2, filterDims : vec2, + `}};function Pk(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{reductionIndices:s,keepDims:i}=n;return ul(r,s,i,"max",a)}var $pe={kernelName:oo,backendName:"webgpu",kernelFunc:Pk};function _k(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{keepDims:s,axis:i}=n;return ul(r,i,s,"mean",a)}var Ppe={kernelName:po,backendName:"webgpu",kernelFunc:_k};function Fk(e,t,a,n){if(t.filterWidth===1&&t.filterHeight===1&&v.arraysEqual(t.inShape,t.outShape))return tn({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=ke({inputs:{x:e},backend:n,attrs:{shape:[e.shape[i-3]*e.shape[i-2],e.shape[i-1]]}}),l;a==="avg"?l=_k({inputs:{x:o},backend:n,attrs:{axis:0,keepDims:!1}}):(v.assert(a==="max",()=>`Invalid pool type ${a}`),l=Pk({inputs:{x:o},backend:n,attrs:{reductionIndices:0,keepDims:!1}}));let u=ke({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 Mpe(t):(a==="avg"?r=new rp(t,"avg"):(v.assert(a==="max",()=>`Invalid pool type ${a}`),r=new rp(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 _pe(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{filterSize:s,strides:i,pad:o,dimRoundingMode:l}=n,u=C.computePool2DInfo(r.shape,s,i,1,o,l);return Fk(r,u,"avg",a)}var Fpe={kernelName:yi,backendName:"webgpu",kernelFunc:_pe};function Dpe(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=C.computePool3DInfo(r.shape,s,i,p,o,u,l),d=new Z3(c,"avg"),h=[{type:"int32",data:[c.strideDepth,c.strideHeight,c.strideWidth]},{type:"int32",data:[c.padInfo.front,c.padInfo.top,c.padInfo.left]},{type:"int32",data:[c.inDepth,c.inHeight,c.inWidth]},{type:"int32",data:[c.effectiveFilterDepth,c.effectiveFilterHeight,c.effectiveFilterWidth]}];return a.runWebGPUProgram(d,[r],r.dtype,h)}var Ope={kernelName:uu,backendName:"webgpu",kernelFunc:Dpe},zpe=class{constructor(e){this.variableNames=["dy"],this.uniforms=`strides : vec2, pads : vec2, dilations : vec2, filterDims : vec2, outHeight : i32, outWidth : i32, avgMultiplier : f32,`,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.inShape,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="avgPool2DBackprop"}getUserCode(){return` ${ue("index")} { if (index < uniforms.size) { @@ -6214,7 +6214,7 @@ return a / b;`,TJ=` setOutputAtIndex(index, dotProd); } } - `}},zpe=class{constructor(e){this.variableNames=["dy"],this.uniforms=`strides : vec3, pads : vec3, filterDims : vec3, + `}},Lpe=class{constructor(e){this.variableNames=["dy"],this.uniforms=`strides : vec3, pads : vec3, filterDims : vec3, outDepth : i32, outHeight : i32, outWidth : i32, avgMultiplier : f32,`,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.inShape,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="avgPool3DBackprop"}getUserCode(){return` ${ue("index")} { if (index < uniforms.size) { @@ -6263,7 +6263,7 @@ return a / b;`,TJ=` setOutputAtIndex(index, dotProd); } } - `}};function Lpe(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=C.computePool3DInfo(i.shape,o,l,1,u,p),d=new zpe(c),h=1/(c.filterDepth*c.filterHeight*c.filterWidth),m=[{type:"int32",data:[c.strideDepth,c.strideHeight,c.strideWidth]},{type:"int32",data:[c.effectiveFilterDepth-1-c.padInfo.front,c.effectiveFilterHeight-1-c.padInfo.top,c.effectiveFilterWidth-1-c.padInfo.left]},{type:"int32",data:[c.effectiveFilterDepth,c.effectiveFilterHeight,c.effectiveFilterWidth]},{type:"int32",data:[c.outDepth]},{type:"int32",data:[c.outHeight]},{type:"int32",data:[c.outWidth]},{type:"float32",data:[h]}];return a.runWebGPUProgram(d,[r],i.dtype,m)}var Wpe={kernelName:dp,backendName:"webgpu",kernelFunc:Lpe};function Bpe(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,input:s}=t,i=s;q3([r,s],"avgPoolGrad");let{filterSize:o,strides:l,pad:u}=n,p=C.computePool2DInfo(i.shape,o,l,1,u),c=new Ope(p),d=1/(p.filterHeight*p.filterWidth),h=[{type:"int32",data:[p.strideHeight,p.strideWidth]},{type:"int32",data:[p.effectiveFilterHeight-1-p.padInfo.top,p.effectiveFilterWidth-1-p.padInfo.left]},{type:"int32",data:[p.dilationHeight,p.dilationWidth]},{type:"int32",data:[p.effectiveFilterHeight,p.effectiveFilterWidth]},{type:"int32",data:[p.outHeight]},{type:"int32",data:[p.outWidth]},{type:"float32",data:[d]}];return a.runWebGPUProgram(c,[r],i.dtype,h)}var Vpe={kernelName:up,backendName:"webgpu",kernelFunc:Bpe};function Upe(e){let{inputs:t,backend:a,attrs:n}=e,{a:r,b:s}=t,{transposeA:i,transposeB:o}=n;return c0({a:r,b:s,transposeA:i,transposeB:o,backend:a})}var Gpe={kernelName:xi,backendName:"webgpu",kernelFunc:Upe},Hpe=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=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize,[this.workPerThread,1,1]),this.start=e,this.uniforms=`start : ${Pt(e.length)}, `,this.shaderKey="slice"}getUserCode(){let e=Pt(this.rank),t=jpe(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.${X1[r]} = uniforms.start.${Ir(r)} + coords.${X1[r]};`),` + `}};function Wpe(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=C.computePool3DInfo(i.shape,o,l,1,u,p),d=new Lpe(c),h=1/(c.filterDepth*c.filterHeight*c.filterWidth),m=[{type:"int32",data:[c.strideDepth,c.strideHeight,c.strideWidth]},{type:"int32",data:[c.effectiveFilterDepth-1-c.padInfo.front,c.effectiveFilterHeight-1-c.padInfo.top,c.effectiveFilterWidth-1-c.padInfo.left]},{type:"int32",data:[c.effectiveFilterDepth,c.effectiveFilterHeight,c.effectiveFilterWidth]},{type:"int32",data:[c.outDepth]},{type:"int32",data:[c.outHeight]},{type:"int32",data:[c.outWidth]},{type:"float32",data:[h]}];return a.runWebGPUProgram(d,[r],i.dtype,m)}var Bpe={kernelName:dp,backendName:"webgpu",kernelFunc:Wpe};function Vpe(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,input:s}=t,i=s;q3([r,s],"avgPoolGrad");let{filterSize:o,strides:l,pad:u}=n,p=C.computePool2DInfo(i.shape,o,l,1,u),c=new zpe(p),d=1/(p.filterHeight*p.filterWidth),h=[{type:"int32",data:[p.strideHeight,p.strideWidth]},{type:"int32",data:[p.effectiveFilterHeight-1-p.padInfo.top,p.effectiveFilterWidth-1-p.padInfo.left]},{type:"int32",data:[p.dilationHeight,p.dilationWidth]},{type:"int32",data:[p.effectiveFilterHeight,p.effectiveFilterWidth]},{type:"int32",data:[p.outHeight]},{type:"int32",data:[p.outWidth]},{type:"float32",data:[d]}];return a.runWebGPUProgram(c,[r],i.dtype,h)}var Upe={kernelName:up,backendName:"webgpu",kernelFunc:Vpe};function Gpe(e){let{inputs:t,backend:a,attrs:n}=e,{a:r,b:s}=t,{transposeA:i,transposeB:o}=n;return c0({a:r,b:s,transposeA:i,transposeB:o,backend:a})}var Hpe={kernelName:xi,backendName:"webgpu",kernelFunc:Gpe},jpe=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=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize,[this.workPerThread,1,1]),this.start=e,this.uniforms=`start : ${Pt(e.length)}, `,this.shaderKey="slice"}getUserCode(){let e=Pt(this.rank),t=qpe(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.${X1[r]} = uniforms.start.${Ir(r)} + coords.${X1[r]};`),` ${ue("index")} { if (index < uniforms.size) { var sourceLoc : ${e}; @@ -6273,16 +6273,16 @@ return a / b;`,TJ=` setOutputAtIndex(index, getSource(${t})); } } - `}},X1=["x","y","z","w","u","v"];function jpe(e){if(e===1)return"sourceLoc";if(e<=6)return X1.slice(0,e).map(t=>`sourceLoc.${t}`).join(",");throw Error(`Slicing for rank ${e} is not yet supported`)}function td(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{begin:s,size:i}=n,[o,l]=Nt.parseSliceParams(r,s,i);if(Nt.assertParamsValid(r,o,l),a.shouldExecuteOnCPU([r])||r.dtype==="string"){let c=a.tensorMap.get(r.dataId),d=Ude(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 Hpe(o,l),p=[{type:"int32",data:o}];return a.runWebGPUProgram(u,[r],r.dtype,p)}var qpe={kernelName:Pu,backendName:"webgpu",kernelFunc:td},Xpe=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((x,A)=>x*A),l=C.getReshaped(r.shape,s,o),u=C.getPermuted(l.length,s.length),p=C.getReshapedPermuted(r.shape,s,o),c=C.getSliceBeginCoords(i,s.length),d=C.getSliceSize(p,i,s.length),h=[],m=ke({inputs:{x:r},backend:a,attrs:{shape:l}}),f=nr({inputs:{x:m},backend:a,attrs:{perm:u}}),g=ke({inputs:{x:f},backend:a,attrs:{shape:p}}),y=td({inputs:{x:g},backend:a,attrs:{begin:c,size:d}});return h.push(m),h.push(f),h.push(g),h.forEach(x=>a.disposeData(x.dataId)),y},Kpe={kernelName:du,backendName:"webgpu",kernelFunc:Xpe},Ype=` + `}},X1=["x","y","z","w","u","v"];function qpe(e){if(e===1)return"sourceLoc";if(e<=6)return X1.slice(0,e).map(t=>`sourceLoc.${t}`).join(",");throw Error(`Slicing for rank ${e} is not yet supported`)}function td(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{begin:s,size:i}=n,[o,l]=Nt.parseSliceParams(r,s,i);if(Nt.assertParamsValid(r,o,l),a.shouldExecuteOnCPU([r])||r.dtype==="string"){let c=a.tensorMap.get(r.dataId),d=Gde(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 jpe(o,l),p=[{type:"int32",data:o}];return a.runWebGPUProgram(u,[r],r.dtype,p)}var Xpe={kernelName:Pu,backendName:"webgpu",kernelFunc:td},Kpe=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((x,A)=>x*A),l=C.getReshaped(r.shape,s,o),u=C.getPermuted(l.length,s.length),p=C.getReshapedPermuted(r.shape,s,o),c=C.getSliceBeginCoords(i,s.length),d=C.getSliceSize(p,i,s.length),h=[],m=ke({inputs:{x:r},backend:a,attrs:{shape:l}}),f=nr({inputs:{x:m},backend:a,attrs:{perm:u}}),g=ke({inputs:{x:f},backend:a,attrs:{shape:p}}),y=td({inputs:{x:g},backend:a,attrs:{begin:c,size:d}});return h.push(m),h.push(f),h.push(g),h.forEach(x=>a.disposeData(x.dataId)),y},Ype={kernelName:du,backendName:"webgpu",kernelFunc:Kpe},Zpe=` fn bincount_write(index: i32, value: f32) { ${ys("&result[index]","value","float32")} } -`,Zpe=` +`,Jpe=` fn bincount_write(index: i32, value: f32) { atomicStore(&result[index], bitcast(value)); } -`,Fk=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=me(this.outputShape),this.dispatch=de(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?Zpe:Ype} +`,Dk=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=me(this.outputShape),this.dispatch=de(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?Jpe:Zpe} ${ue("index")} { ${this.rank===1?`if (index < uniforms.xShape) { let indexVal = i32(getX(index)); @@ -6299,7 +6299,7 @@ return a / b;`,TJ=` } }`} } - `}};function Jpe(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=Wa({backend:a,attrs:{shape:u,value:0,dtype:p}}),d=new Fk([o],l),h=[{type:"int32",data:[i]}],m=l?[r,s]:[r];return a.runWebGPUProgram(d,m,p,h,c)}var Qpe={kernelName:Ai,backendName:"webgpu",kernelFunc:Jpe},ece=class{constructor(e){this.outputShape=[],this.variableNames=["s0","s1"],this.uniforms="s0Size : i32, s1Size : i32, ",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=[e],this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="broadcastArgs"}getUserCode(){return` + `}};function Qpe(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=Wa({backend:a,attrs:{shape:u,value:0,dtype:p}}),d=new Dk([o],l),h=[{type:"int32",data:[i]}],m=l?[r,s]:[r];return a.runWebGPUProgram(d,m,p,h,c)}var ece={kernelName:Ai,backendName:"webgpu",kernelFunc:Qpe},tce=class{constructor(e){this.outputShape=[],this.variableNames=["s0","s1"],this.uniforms="s0Size : i32, s1Size : i32, ",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=[e],this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="broadcastArgs"}getUserCode(){return` ${ue("index")} { if (index < uniforms.size) { var s0 = 1.0; @@ -6324,7 +6324,7 @@ return a / b;`,TJ=` } } } - `}};function tce(e){let{inputs:t,backend:a}=e,{s0:n,s1:r}=t;if(a.shouldExecuteOnCPU([n,r])){let p=a.tensorMap.get(n.dataId),c=a.tensorMap.get(r.dataId),d=p.values,h=c.values,m=C.assertAndGetBroadcastShape(Array.from(d),Array.from(h));return a.makeTensorInfo([m.length],"int32",Int32Array.from(m))}let s=v.sizeFromShape(n.shape),i=v.sizeFromShape(r.shape),o=Math.max(s,i),l=new ece(o),u=[{type:"int32",data:[s]},{type:"int32",data:[i]}];return a.runWebGPUProgram(l,[n,r],"int32",u)}var ace={kernelName:cu,backendName:"webgpu",kernelFunc:tce},Dk=ta({opType:Pe.NOT_EQUAL,dtype:"bool",cpuKernelImpl:Ode}),nce={kernelName:xo,backendName:"webgpu",kernelFunc:Dk};function tc(e){let{inputs:t,backend:a}=e,{input:n}=t,r=a.tensorMap.get(n.dataId);return tn({inputs:{x:r.complexTensorInfos.real},backend:a})}var rce={kernelName:kp,backendName:"webgpu",kernelFunc:tc};function sce(e,t){let a=new ed(e.shape,le.TO_INT),n=t.runWebGPUProgram(a,[e],"int32");return{dataId:n.dataId,shape:n.shape,dtype:n.dtype}}function K1(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{dtype:s}=n;if(s==="complex64"){if(r.dtype==="complex64")return tn({inputs:{x:r},backend:a});let i=yn(r.shape),o=K1({inputs:{x:r},backend:a,attrs:{dtype:"float32"}}),l=ll({inputs:{real:o,imag:i},backend:a});return i.dispose(),a.disposeData(o.dataId),l}if(r.dtype==="complex64"){let i=tc({inputs:{input:r},backend:a}),o=K1({inputs:{x:i},backend:a,attrs:{dtype:s}});return a.disposeData(i.dataId),o}if(!v.hasEncodingLoss(r.dtype,s)){let i=tn({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]=yde(i,r.shape,r.dtype,s);return a.makeTensorInfo(o,l,u)}if(s==="int32")return sce(r,a);if(s==="bool"){let i=a.makeTensorInfo([],"bool",v.getTypedArrayFromDType("bool",1)),o=Dk({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 ice={kernelName:bi,backendName:"webgpu",kernelFunc:K1},oce=at({opType:le.CEIL,cpuKernelImpl:xde}),lce={kernelName:vi,backendName:"webgpu",kernelFunc:oce},uce=class{constructor(e){this.variableNames=["A"],this.uniforms="minVal : f32, maxVal : f32,",this.workPerThread=4,this.workgroupSize=[64,1,1],this.outputComponent=4,this.size=!0,this.outputShape=e,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize,[this.workPerThread,1,1]),this.shaderKey="clipVec4"}getUserCode(){return` + `}};function ace(e){let{inputs:t,backend:a}=e,{s0:n,s1:r}=t;if(a.shouldExecuteOnCPU([n,r])){let p=a.tensorMap.get(n.dataId),c=a.tensorMap.get(r.dataId),d=p.values,h=c.values,m=C.assertAndGetBroadcastShape(Array.from(d),Array.from(h));return a.makeTensorInfo([m.length],"int32",Int32Array.from(m))}let s=v.sizeFromShape(n.shape),i=v.sizeFromShape(r.shape),o=Math.max(s,i),l=new tce(o),u=[{type:"int32",data:[s]},{type:"int32",data:[i]}];return a.runWebGPUProgram(l,[n,r],"int32",u)}var nce={kernelName:cu,backendName:"webgpu",kernelFunc:ace},Ok=ta({opType:Pe.NOT_EQUAL,dtype:"bool",cpuKernelImpl:zde}),rce={kernelName:xo,backendName:"webgpu",kernelFunc:Ok};function tc(e){let{inputs:t,backend:a}=e,{input:n}=t,r=a.tensorMap.get(n.dataId);return tn({inputs:{x:r.complexTensorInfos.real},backend:a})}var sce={kernelName:kp,backendName:"webgpu",kernelFunc:tc};function ice(e,t){let a=new ed(e.shape,le.TO_INT),n=t.runWebGPUProgram(a,[e],"int32");return{dataId:n.dataId,shape:n.shape,dtype:n.dtype}}function K1(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{dtype:s}=n;if(s==="complex64"){if(r.dtype==="complex64")return tn({inputs:{x:r},backend:a});let i=yn(r.shape),o=K1({inputs:{x:r},backend:a,attrs:{dtype:"float32"}}),l=ll({inputs:{real:o,imag:i},backend:a});return i.dispose(),a.disposeData(o.dataId),l}if(r.dtype==="complex64"){let i=tc({inputs:{input:r},backend:a}),o=K1({inputs:{x:i},backend:a,attrs:{dtype:s}});return a.disposeData(i.dataId),o}if(!v.hasEncodingLoss(r.dtype,s)){let i=tn({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]=xde(i,r.shape,r.dtype,s);return a.makeTensorInfo(o,l,u)}if(s==="int32")return ice(r,a);if(s==="bool"){let i=a.makeTensorInfo([],"bool",v.getTypedArrayFromDType("bool",1)),o=Ok({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 oce={kernelName:bi,backendName:"webgpu",kernelFunc:K1},lce=at({opType:le.CEIL,cpuKernelImpl:Ade}),uce={kernelName:vi,backendName:"webgpu",kernelFunc:lce},dce=class{constructor(e){this.variableNames=["A"],this.uniforms="minVal : f32, maxVal : f32,",this.workPerThread=4,this.workgroupSize=[64,1,1],this.outputComponent=4,this.size=!0,this.outputShape=e,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize,[this.workPerThread,1,1]),this.shaderKey="clipVec4"}getUserCode(){return` ${ue("index")} { if(index < uniforms.size) { let value = getAByOutputIndex(index); @@ -6334,7 +6334,7 @@ return a / b;`,TJ=` setOutputAtIndex(index, clampedValue); } } - `}},dce=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=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="clip"}getUserCode(){return` + `}},pce=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=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="clip"}getUserCode(){return` ${ue("index")} { if(index < uniforms.size) { let value = getAByOutputIndex(index); @@ -6345,7 +6345,7 @@ return a / b;`,TJ=` setOutputAtIndex(index, clamp(value, uniforms.minVal, uniforms.maxVal)); } } - `}};function pce(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 uce(r.shape):o=new dce(r.shape),a.runWebGPUProgram(o,[r],r.dtype,l)}var cce={kernelName:ls,backendName:"webgpu",kernelFunc:pce},hce=class{constructor(e){this.outputShape=[],this.variableNames=["real","imag"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="complexAbs"}getUserCode(){return` + `}};function cce(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 dce(r.shape):o=new pce(r.shape),a.runWebGPUProgram(o,[r],r.dtype,l)}var hce={kernelName:ls,backendName:"webgpu",kernelFunc:cce},mce=class{constructor(e){this.outputShape=[],this.variableNames=["real","imag"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="complexAbs"}getUserCode(){return` ${ue("index")} { if (index < uniforms.size) { let re = abs(getRealByOutputIndex(index)); @@ -6357,7 +6357,7 @@ return a / b;`,TJ=` setOutputAtIndex(index, select(mx * length(vec2(1, min(re, im)/mx)), 0.0, mx == 0.0)); } } - `}};function iA(e,t){return{dataId:t.dataId,dtype:t.dtype,shape:e.shape}}function mce(e){let{inputs:t,backend:a}=e,{x:n}=t,r=a.tensorMap.get(n.dataId),s=new hce(n.shape),i=[iA(n,r.complexTensorInfos.real),iA(n,r.complexTensorInfos.imag)];return a.runWebGPUProgram(s,i,i[0].dtype)}var fce={kernelName:cp,backendName:"webgpu",kernelFunc:mce},gce=class{constructor(e){this.uniforms="",this.workPerThread=1,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=C.computeOutShape(e,1),this.variableNames=e.map((t,a)=>`T${a}`),this.dispatchLayout=me(this.outputShape),this.dispatch=de(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=me(this.outputShape),this.dispatch=de(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;ntc({inputs:{input:A},backend:a})),f=e.map(A=>h0({inputs:{input:A},backend:a})),g=Pd(m,t,a),y=Pd(f,t,a),x=ll({inputs:{real:g,imag:y},backend:a});return m.forEach(A=>a.disposeData(A.dataId)),f.forEach(A=>a.disposeData(A.dataId)),a.disposeData(g.dataId),a.disposeData(y.dataId),x}let r=a.shouldExecuteOnCPU(e);if(n==="string"&&(r=!0),r){let m=e.map(w=>{let I=[-1,v.sizeFromShape(w.shape.slice(t))];return ke({inputs:{x:w},backend:a,attrs:{shape:I}})}),f=m.map(w=>({vals:a.readSync(w.dataId),shape:w.shape})),g=C.computeOutShape(m.map(w=>w.shape),1),y=m[0].shape[0]===1,x=Ade(f,g,n,y),A=C.computeOutShape(e.map(w=>w.shape),t),b=a.makeTensorInfo(A,n,x);return m.forEach(w=>a.disposeData(w.dataId)),b}let s=a.device.limits.maxStorageBuffersPerShaderStage-1;if(e.length>s){let m=[];for(let g=0;gm.shape),u=new gce(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 m=1;ma.disposeData(m.dataId));let h=ke({inputs:{x:d},backend:a,attrs:{shape:o}});return a.disposeData(d.dataId),h}function xce(e,t,a){let n=C.computeOutShape(e.map(r=>r.shape),t);return{tensors2D:e.map(r=>ke({inputs:{x:r},backend:a,attrs:{shape:[v.sizeFromShape(r.shape.slice(0,t)),v.sizeFromShape(r.shape.slice(t))]}})),outShape:n}}function Ok(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);C.assertParamsConsistent(i,s);let o=C.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?tn({inputs:{x:l[0]},backend:a}):Pd(l,s,a)}var Ace={kernelName:hu,backendName:"webgpu",kernelFunc:Ok};function bce(e,t,a,n,r=!1,s=null,i=!1,o=4,l=4,u=4){let p=N=>{switch(N){case 1:return"resData = f32(x[xIndex]);";case 3:return"resData = vec3(x[xIndex], x[xIndex + 1], x[xIndex + 2]);";case 4:return"resData = vec4(x[xIndex / 4]);";default:throw new Error(`innerElementSize ${N} is not supported.`)}},c=N=>{switch(N){case 1:return"return f32(W[row * uniforms.wShape[3] + col]);";case 4:return"return vec4(W[(row * uniforms.wShape[3] + col) / 4]);";default:throw new Error(`innerElementSize ${N} is not supported.`)}},d=e?` + `}};function h0(e){let{inputs:t,backend:a}=e,{input:n}=t,r=a.tensorMap.get(n.dataId);return tn({inputs:{x:r.complexTensorInfos.imag},backend:a})}var xce={kernelName:bp,backendName:"webgpu",kernelFunc:h0};function Pd(e,t,a){let n=e[0].dtype;if(n==="complex64"){let m=e.map(A=>tc({inputs:{input:A},backend:a})),f=e.map(A=>h0({inputs:{input:A},backend:a})),g=Pd(m,t,a),y=Pd(f,t,a),x=ll({inputs:{real:g,imag:y},backend:a});return m.forEach(A=>a.disposeData(A.dataId)),f.forEach(A=>a.disposeData(A.dataId)),a.disposeData(g.dataId),a.disposeData(y.dataId),x}let r=a.shouldExecuteOnCPU(e);if(n==="string"&&(r=!0),r){let m=e.map(w=>{let I=[-1,v.sizeFromShape(w.shape.slice(t))];return ke({inputs:{x:w},backend:a,attrs:{shape:I}})}),f=m.map(w=>({vals:a.readSync(w.dataId),shape:w.shape})),g=C.computeOutShape(m.map(w=>w.shape),1),y=m[0].shape[0]===1,x=bde(f,g,n,y),A=C.computeOutShape(e.map(w=>w.shape),t),b=a.makeTensorInfo(A,n,x);return m.forEach(w=>a.disposeData(w.dataId)),b}let s=a.device.limits.maxStorageBuffersPerShaderStage-1;if(e.length>s){let m=[];for(let g=0;gm.shape),u=new yce(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 m=1;ma.disposeData(m.dataId));let h=ke({inputs:{x:d},backend:a,attrs:{shape:o}});return a.disposeData(d.dataId),h}function Ace(e,t,a){let n=C.computeOutShape(e.map(r=>r.shape),t);return{tensors2D:e.map(r=>ke({inputs:{x:r},backend:a,attrs:{shape:[v.sizeFromShape(r.shape.slice(0,t)),v.sizeFromShape(r.shape.slice(t))]}})),outShape:n}}function zk(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);C.assertParamsConsistent(i,s);let o=C.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?tn({inputs:{x:l[0]},backend:a}):Pd(l,s,a)}var bce={kernelName:hu,backendName:"webgpu",kernelFunc:zk};function vce(e,t,a,n,r=!1,s=null,i=!1,o=4,l=4,u=4){let p=N=>{switch(N){case 1:return"resData = f32(x[xIndex]);";case 3:return"resData = vec3(x[xIndex], x[xIndex + 1], x[xIndex + 2]);";case 4:return"resData = vec4(x[xIndex / 4]);";default:throw new Error(`innerElementSize ${N} is not supported.`)}},c=N=>{switch(N){case 1:return"return f32(W[row * uniforms.wShape[3] + col]);";case 4:return"return vec4(W[(row * uniforms.wShape[3] + col) / 4]);";default:throw new Error(`innerElementSize ${N} is not supported.`)}},d=e?` let coord = vec4(batch, xRow, xCol, xCh); `:` let coord = vec4(batch, xCh, xRow, xCol); @@ -6435,10 +6435,10 @@ return a / b;`,TJ=` ${ol(r,s)} setOutputAtCoords(coords[0], coords[1], coords[2], coords[3], value); } - }`}var vce=class{constructor(e,t,a,n,r=!1,s=null,i=!1,o=!1){this.variableNames=["x","W"],this.uniforms="filterDims : vec2, pads : vec2, strides : vec2, dilations : 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=G3(this.dispatchLayout,this.outputShape,this.isVec4),this.elementsPerThread=H3(this.dispatchLayout,this.outputShape,this.isVec4),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize,this.elementsPerThread),this.isVec4?(this.outputComponent=4,this.isChannelsLast&&e.inChannels%4!==0?(this.innerElementSize=3,this.variableComponents=[1,4]):(this.innerElementSize=4,this.variableComponents=[4,4]),r&&(this.variableNames.push("bias"),this.variableComponents.push(4)),i&&(this.variableNames.push("preluActivationWeights"),this.variableComponents.push(4))):(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?d0(this.elementsPerThread,this.workgroupSize,!this.isChannelsLast,this.tileInner):p0(this.elementsPerThread,this.workgroupSize,!this.isChannelsLast,this.tileInner,!1,null,this.sequentialAccessByThreads),t=this.isVec4?[this.innerElementSize,4,4]:[1,1,1];return` - ${bce(this.isChannelsLast,this.fitAOuter,this.fitBOuter,this.fitInner,this.addBias,this.activation,this.hasPreluActivationWeights,t[0],t[1],t[2])} + }`}var wce=class{constructor(e,t,a,n,r=!1,s=null,i=!1,o=!1){this.variableNames=["x","W"],this.uniforms="filterDims : vec2, pads : vec2, strides : vec2, dilations : 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=G3(this.dispatchLayout,this.outputShape,this.isVec4),this.elementsPerThread=H3(this.dispatchLayout,this.outputShape,this.isVec4),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize,this.elementsPerThread),this.isVec4?(this.outputComponent=4,this.isChannelsLast&&e.inChannels%4!==0?(this.innerElementSize=3,this.variableComponents=[1,4]):(this.innerElementSize=4,this.variableComponents=[4,4]),r&&(this.variableNames.push("bias"),this.variableComponents.push(4)),i&&(this.variableNames.push("preluActivationWeights"),this.variableComponents.push(4))):(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?d0(this.elementsPerThread,this.workgroupSize,!this.isChannelsLast,this.tileInner):p0(this.elementsPerThread,this.workgroupSize,!this.isChannelsLast,this.tileInner,!1,null,this.sequentialAccessByThreads),t=this.isVec4?[this.innerElementSize,4,4]:[1,1,1];return` + ${vce(this.isChannelsLast,this.fitAOuter,this.fitBOuter,this.fitInner,this.addBias,this.activation,this.hasPreluActivationWeights,t[0],t[1],t[2])} ${e} - `}},wce=class{constructor(e,t=!1,a=null,n=!1){this.variableNames=["x","W"],this.uniforms="filterDims: vec2, pads: vec2, strides: vec2, dilations: 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=de(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` + `}},kce=class{constructor(e,t=!1,a=null,n=!1){this.variableNames=["x","W"],this.uniforms="filterDims: vec2, pads: vec2, strides: vec2, dilations: 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=de(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` ${$r(this.activation,this.hasPreluActivationWeights,!1,4)} fn readInp(batch : i32, row : i32, col : i32, chan : i32) -> f32{ let coords = vec4(batch, row, col, chan); @@ -6484,7 +6484,7 @@ return a / b;`,TJ=` } writeResult(batch, outRow, outCol, outChannel, acc); } - `}},kce=class{constructor(e,t){this.variableNames=["x"],this.uniforms=`pads : vec2, strides : vec2, dilations : vec2, outWidth : i32, itemsPerBlockRow : i32, + `}},Ice=class{constructor(e,t){this.variableNames=["x"],this.uniforms=`pads : vec2, strides : vec2, dilations : vec2, outWidth : i32, itemsPerBlockRow : i32, inChannels : i32,`,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=me(this.outputShape),this.dispatch=de(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` ${ue("index")} { let coords = getCoordsFromIndex(index); @@ -6508,7 +6508,7 @@ return a / b;`,TJ=` setOutputAtIndex(index, value); } } - `}};function Nh(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 Ice({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,m;if(c){let y=a.inHeight*a.inWidth*a.inChannels;h=ke({inputs:{x:e},backend:n,attrs:{shape:[1,a.batchSize,y]}}),m=ke({inputs:{x:t},backend:n,attrs:{shape:[1,y,a.outChannels]}})}else h=ke({inputs:{x:e},backend:n,attrs:{shape:l?[a.batchSize,a.inHeight*a.inWidth,a.inChannels]:[a.batchSize,a.inChannels,a.inHeight*a.inWidth]}}),m=ke({inputs:{x:t},backend:n,attrs:{shape:[1,a.inChannels,a.outChannels]}});if(d.push(h),d.push(m),s!=null){let y=Nh(s.shape,l);y!=null&&(s=ke({inputs:{x:s},backend:n,attrs:{shape:y}}),d.push(s))}if(r!=null){let y=Nh(r.shape,l);y!=null&&(r=ke({inputs:{x:r},backend:n,attrs:{shape:y}}),d.push(r))}let f=c0({a:l?h:m,b:l?m:h,transposeA:u,transposeB:p,backend:n,bias:r,activation:o,preluActivationWeights:s,leakyreluAlpha:i}),g=ke({inputs:{x:f},backend:n,attrs:{shape:a.outShape}});d.push(f);for(let y of d)n.disposeData(y.dataId);return g}function Sce({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:m,outHeight:f,dilationWidth:g,dilationHeight:y,dataFormat:x}=a,A=x==="channelsLast",b=l*u*p,w=f*m,I=A?[a.batchSize,w,b]:[a.batchSize,b,w],T=new kce(I,A),N=[{type:"int32",data:[h.top,h.left]},{type:"int32",data:[d,c]},{type:"int32",data:[y,g]},{type:"int32",data:[m]},{type:"int32",data:[p*l]},{type:"int32",data:[p]}],M=n.runWebGPUProgram(T,[e],e.dtype,N),$=[];$.push(M);let E=ke({inputs:{x:t},backend:n,attrs:{shape:[1,b,-1]}});if($.push(E),s!=null){let O=Nh(s.shape,A);O!=null&&(s=ke({inputs:{x:s},backend:n,attrs:{shape:O}}),$.push(s))}if(r!=null){let O=Nh(r.shape,A);O!=null&&(r=ke({inputs:{x:r},backend:n,attrs:{shape:O}}),$.push(r))}let S=c0({a:A?M:E,b:A?E:M,transposeA:!A,transposeB:!1,backend:n,bias:r,activation:o,preluActivationWeights:s,leakyreluAlpha:i}),_=ke({inputs:{x:S},backend:n,attrs:{shape:a.outShape}});$.push(S);for(let O of $)n.disposeData(O.dataId);return _}function zk({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=B().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 Ice({x:e,filter:t,convInfo:a,backend:n,bias:r,activation:o,preluActivationWeights:s,leakyreluAlpha:i});let h=B().getNumber("WEBGPU_THRESHOLD_TO_INCREASE_WORKGROUPS_FOR_MATMUL"),m=h>-1?h:n.thresholdToIncreaseWorkgroups,f=a.batchSize*Math.ceil(a.outHeight*a.outWidth/32)*Math.ceil(a.outChannels/32);if(B().getBool("WEBGPU_CONV_SEPARATE_IM2COL_SHADER")||f<=m)return Sce({x:e,filter:t,convInfo:a,backend:n,bias:r,preluActivationWeights:s,leakyreluAlpha:i,activation:o});let g,y=[a.padInfo.top,a.padInfo.left],x=[{type:"int32",data:[a.filterHeight,a.filterWidth]},{type:"int32",data:[...y]},{type:"int32",data:[a.strideHeight,a.strideWidth]},{type:"int32",data:[a.dilationHeight,a.dilationWidth]}];if(d)g=new wce(a,l,o,u);else{let I=p?a.outHeight*a.outWidth:a.outChannels,T=p?a.outChannels:a.outHeight*a.outWidth,N=a.filterHeight*a.filterWidth*a.inChannels;x.push({type:"int32",data:[I]},{type:"int32",data:[T]},{type:"int32",data:[N]});let M=n.adapterInfo.isIntel();g=new vce(a,I,T,N,l,o,u,M)}let A=[],b=[e,t];l&&(!p&&r.shape.length===1&&(r=ke({inputs:{x:r},backend:n,attrs:{shape:[r.shape[0],1,1]}}),A.push(r)),b.push(r)),u&&(!p&&s.shape.length===1&&(s=ke({inputs:{x:s},backend:n,attrs:{shape:[s.shape[0],1,1]}}),A.push(s)),b.push(s)),o==="leakyrelu"&&(x.push({type:"float32",data:[i]}),g.uniforms+=" alpha : f32,");let w=n.runWebGPUProgram(g,b,e.dtype,x);for(let I of A)n.disposeData(I.dataId);return w}function Cce(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=C.convertConv2DDataFormat(l),d=C.computeConv2DInfo(r.shape,s.shape,i,u,o,p,!1,c);return zk({x:r,filter:s,convInfo:d,backend:n})}var Tce={kernelName:wi,backendName:"webgpu",kernelFunc:Cce},Nce=class{constructor(e){this.variableNames=["dy","W"],this.uniforms="filterDims : vec2, pads : vec2, strides : vec2, outBackprop : vec4,",this.workgroupSize=[64,1,1],this.size=!1,this.isVec4=!1,this.workPerThread=1,this.outputShape=e.inShape,this.isChannelsLast=e.dataFormat==="channelsLast",this.isVec4=this.isChannelsLast&&e.outChannels%4===0&&e.inChannels%4===0,this.isVec4?(this.workPerThread=2,this.outputComponent=4,this.workgroupSize=[4,4,4],this.dispatchLayout={x:[3],y:[2],z:[0,1]},this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize,[4,this.workPerThread,1])):(this.size=!0,this.workPerThread=1,this.workgroupSize=[64,1,1],this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize)),this.shaderKey=`conv2DDerInput_${this.isChannelsLast}_${this.isVec4}_${this.workPerThread}`}getUserCode(){let e=this.isChannelsLast?1:2,t=this.isChannelsLast?2:3,a=this.isChannelsLast?3:1,n=` + `}};function Nh(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 Sce({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,m;if(c){let y=a.inHeight*a.inWidth*a.inChannels;h=ke({inputs:{x:e},backend:n,attrs:{shape:[1,a.batchSize,y]}}),m=ke({inputs:{x:t},backend:n,attrs:{shape:[1,y,a.outChannels]}})}else h=ke({inputs:{x:e},backend:n,attrs:{shape:l?[a.batchSize,a.inHeight*a.inWidth,a.inChannels]:[a.batchSize,a.inChannels,a.inHeight*a.inWidth]}}),m=ke({inputs:{x:t},backend:n,attrs:{shape:[1,a.inChannels,a.outChannels]}});if(d.push(h),d.push(m),s!=null){let y=Nh(s.shape,l);y!=null&&(s=ke({inputs:{x:s},backend:n,attrs:{shape:y}}),d.push(s))}if(r!=null){let y=Nh(r.shape,l);y!=null&&(r=ke({inputs:{x:r},backend:n,attrs:{shape:y}}),d.push(r))}let f=c0({a:l?h:m,b:l?m:h,transposeA:u,transposeB:p,backend:n,bias:r,activation:o,preluActivationWeights:s,leakyreluAlpha:i}),g=ke({inputs:{x:f},backend:n,attrs:{shape:a.outShape}});d.push(f);for(let y of d)n.disposeData(y.dataId);return g}function Cce({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:m,outHeight:f,dilationWidth:g,dilationHeight:y,dataFormat:x}=a,A=x==="channelsLast",b=l*u*p,w=f*m,I=A?[a.batchSize,w,b]:[a.batchSize,b,w],T=new Ice(I,A),N=[{type:"int32",data:[h.top,h.left]},{type:"int32",data:[d,c]},{type:"int32",data:[y,g]},{type:"int32",data:[m]},{type:"int32",data:[p*l]},{type:"int32",data:[p]}],M=n.runWebGPUProgram(T,[e],e.dtype,N),$=[];$.push(M);let E=ke({inputs:{x:t},backend:n,attrs:{shape:[1,b,-1]}});if($.push(E),s!=null){let O=Nh(s.shape,A);O!=null&&(s=ke({inputs:{x:s},backend:n,attrs:{shape:O}}),$.push(s))}if(r!=null){let O=Nh(r.shape,A);O!=null&&(r=ke({inputs:{x:r},backend:n,attrs:{shape:O}}),$.push(r))}let S=c0({a:A?M:E,b:A?E:M,transposeA:!A,transposeB:!1,backend:n,bias:r,activation:o,preluActivationWeights:s,leakyreluAlpha:i}),_=ke({inputs:{x:S},backend:n,attrs:{shape:a.outShape}});$.push(S);for(let O of $)n.disposeData(O.dataId);return _}function Lk({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=B().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 Sce({x:e,filter:t,convInfo:a,backend:n,bias:r,activation:o,preluActivationWeights:s,leakyreluAlpha:i});let h=B().getNumber("WEBGPU_THRESHOLD_TO_INCREASE_WORKGROUPS_FOR_MATMUL"),m=h>-1?h:n.thresholdToIncreaseWorkgroups,f=a.batchSize*Math.ceil(a.outHeight*a.outWidth/32)*Math.ceil(a.outChannels/32);if(B().getBool("WEBGPU_CONV_SEPARATE_IM2COL_SHADER")||f<=m)return Cce({x:e,filter:t,convInfo:a,backend:n,bias:r,preluActivationWeights:s,leakyreluAlpha:i,activation:o});let g,y=[a.padInfo.top,a.padInfo.left],x=[{type:"int32",data:[a.filterHeight,a.filterWidth]},{type:"int32",data:[...y]},{type:"int32",data:[a.strideHeight,a.strideWidth]},{type:"int32",data:[a.dilationHeight,a.dilationWidth]}];if(d)g=new kce(a,l,o,u);else{let I=p?a.outHeight*a.outWidth:a.outChannels,T=p?a.outChannels:a.outHeight*a.outWidth,N=a.filterHeight*a.filterWidth*a.inChannels;x.push({type:"int32",data:[I]},{type:"int32",data:[T]},{type:"int32",data:[N]});let M=n.adapterInfo.isIntel();g=new wce(a,I,T,N,l,o,u,M)}let A=[],b=[e,t];l&&(!p&&r.shape.length===1&&(r=ke({inputs:{x:r},backend:n,attrs:{shape:[r.shape[0],1,1]}}),A.push(r)),b.push(r)),u&&(!p&&s.shape.length===1&&(s=ke({inputs:{x:s},backend:n,attrs:{shape:[s.shape[0],1,1]}}),A.push(s)),b.push(s)),o==="leakyrelu"&&(x.push({type:"float32",data:[i]}),g.uniforms+=" alpha : f32,");let w=n.runWebGPUProgram(g,b,e.dtype,x);for(let I of A)n.disposeData(I.dataId);return w}function Tce(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=C.convertConv2DDataFormat(l),d=C.computeConv2DInfo(r.shape,s.shape,i,u,o,p,!1,c);return Lk({x:r,filter:s,convInfo:d,backend:n})}var Nce={kernelName:wi,backendName:"webgpu",kernelFunc:Tce},Rce=class{constructor(e){this.variableNames=["dy","W"],this.uniforms="filterDims : vec2, pads : vec2, strides : vec2, outBackprop : vec4,",this.workgroupSize=[64,1,1],this.size=!1,this.isVec4=!1,this.workPerThread=1,this.outputShape=e.inShape,this.isChannelsLast=e.dataFormat==="channelsLast",this.isVec4=this.isChannelsLast&&e.outChannels%4===0&&e.inChannels%4===0,this.isVec4?(this.workPerThread=2,this.outputComponent=4,this.workgroupSize=[4,4,4],this.dispatchLayout={x:[3],y:[2],z:[0,1]},this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize,[4,this.workPerThread,1])):(this.size=!0,this.workPerThread=1,this.workgroupSize=[64,1,1],this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize)),this.shaderKey=`conv2DDerInput_${this.isChannelsLast}_${this.isVec4}_${this.workPerThread}`}getUserCode(){let e=this.isChannelsLast?1:2,t=this.isChannelsLast?2:3,a=this.isChannelsLast?3:1,n=` ${ue()} { let batch = i32(globalId.z) / uniforms.outShape[1]; let r = i32(globalId.z) % uniforms.outShape[1]; @@ -6651,7 +6651,7 @@ return a / b;`,TJ=` setOutputAtIndex(index, dotProd); } } - `}},Rce=class{constructor(e){this.variableNames=["x","dy"],this.uniforms="pads : vec2, strides : vec2, batchSize : i32, outHeight : i32, outWidth : i32, inHeight : i32, inWidth : i32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.filterShape,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.isChannelsLast=e.dataFormat==="channelsLast",this.shaderKey=`conv2DDerFilter_${this.isChannelsLast}`}getUserCode(){return` + `}},Ece=class{constructor(e){this.variableNames=["x","dy"],this.uniforms="pads : vec2, strides : vec2, batchSize : i32, outHeight : i32, outWidth : i32, inHeight : i32, inWidth : i32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.filterShape,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.isChannelsLast=e.dataFormat==="channelsLast",this.shaderKey=`conv2DDerFilter_${this.isChannelsLast}`}getUserCode(){return` ${ue("index")} { if(index < uniforms.size) { let coords = getCoordsFromIndex(index); @@ -6692,7 +6692,7 @@ return a / b;`,TJ=` setOutputAtIndex(index, dotProd); } } - `}},Ece=class{constructor(e){this.variableNames=["x","dy"],this.uniforms=`pads : vec3, strides : vec3, batchSize : i32, outDepth : i32, + `}},Mce=class{constructor(e){this.variableNames=["x","dy"],this.uniforms=`pads : vec3, strides : vec3, batchSize : i32, outDepth : i32, outHeight : i32, outWidth : i32, inDepth : i32, inHeight : i32, inWidth : i32,`,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.filterShape,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="conv3DDerFilter"}getUserCode(){return` ${ue("index")} { if(index < uniforms.size) { @@ -6733,7 +6733,7 @@ return a / b;`,TJ=` setOutputAtIndex(index, dotProd); } } - `}},Mce=class{constructor(e){this.variableNames=["dy","W"],this.uniforms=`filterDims : vec3, pads : vec3, strides : vec3, + `}},$ce=class{constructor(e){this.variableNames=["dy","W"],this.uniforms=`filterDims : vec3, pads : vec3, strides : vec3, outDepth : i32, outHeight : i32, outWidth : i32, outChannels : i32,`,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.inShape,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="conv3DDerInput"}getUserCode(){return` ${ue("index")} { if(index < uniforms.size) { @@ -6787,7 +6787,7 @@ return a / b;`,TJ=` setOutputAtIndex(index, dotProd); } } - `}};function $ce(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=C.convertConv2DDataFormat(l),d=C.computeConv2DInfo(r.shape,p,i,1,o,u,!1,c),h=new Rce(d),m=[{type:"int32",data:[d.padInfo.top,d.padInfo.left]},{type:"int32",data:[d.strideHeight,d.strideWidth]},{type:"int32",data:[d.batchSize]},{type:"int32",data:[d.outHeight]},{type:"int32",data:[d.outWidth]},{type:"int32",data:[d.inHeight]},{type:"int32",data:[d.inWidth]}];return a.runWebGPUProgram(h,[r,s],r.dtype,m)}var Pce={kernelName:hp,backendName:"webgpu",kernelFunc:$ce};function _ce(e=4){let t=n=>{switch(n){case 1:return"return W[getIndexFromCoords4D(coord, uniforms.wShape)];";case 4:return` + `}};function Pce(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=C.convertConv2DDataFormat(l),d=C.computeConv2DInfo(r.shape,p,i,1,o,u,!1,c),h=new Ece(d),m=[{type:"int32",data:[d.padInfo.top,d.padInfo.left]},{type:"int32",data:[d.strideHeight,d.strideWidth]},{type:"int32",data:[d.batchSize]},{type:"int32",data:[d.outHeight]},{type:"int32",data:[d.outWidth]},{type:"int32",data:[d.inHeight]},{type:"int32",data:[d.inWidth]}];return a.runWebGPUProgram(h,[r,s],r.dtype,m)}var _ce={kernelName:hp,backendName:"webgpu",kernelFunc:Pce};function Fce(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); @@ -6847,10 +6847,10 @@ return a / b;`,TJ=` col); result[getIndexFromCoords4D(outCoord, uniforms.outShape)/${e}] = value; } - }`}var Fce=class{constructor(e){this.variableNames=["x","W"],this.uniforms="filterDims : vec2, pads : vec2, strides : 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=G3(this.dispatchLayout,this.outputShape,this.isVec4),this.elementsPerThread=H3(this.dispatchLayout,this.outputShape,this.isVec4),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize,this.elementsPerThread),this.isVec4&&(this.outputComponent=4,this.variableComponents=[4,1]),this.shaderKey=`conv2DDerInputMM_${this.isVec4}_${this.elementsPerThread}`}getUserCode(){let e=this.isVec4?d0(this.elementsPerThread,this.workgroupSize):p0(this.elementsPerThread,this.workgroupSize);return` - ${_ce(this.isVec4?4:1)} + }`}var Dce=class{constructor(e){this.variableNames=["x","W"],this.uniforms="filterDims : vec2, pads : vec2, strides : 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=G3(this.dispatchLayout,this.outputShape,this.isVec4),this.elementsPerThread=H3(this.dispatchLayout,this.outputShape,this.isVec4),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize,this.elementsPerThread),this.isVec4&&(this.outputComponent=4,this.variableComponents=[4,1]),this.shaderKey=`conv2DDerInputMM_${this.isVec4}_${this.elementsPerThread}`}getUserCode(){let e=this.isVec4?d0(this.elementsPerThread,this.workgroupSize):p0(this.elementsPerThread,this.workgroupSize);return` + ${Fce(this.isVec4?4:1)} ${e} - `}};function Dce(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=C.convertConv2DDataFormat(u),d=C.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]}],m;if(B().getBool("WEBGPU_USE_NAIVE_CONV2D_TRANSPOSE")||d.dataFormat!=="channelsLast")m=new Nce(d);else{m=new Fce(d);let f=d.inHeight*d.inWidth,g=d.inChannels,y=d.filterHeight*d.filterWidth*d.outChannels;h.push({type:"uint32",data:[f]},{type:"uint32",data:[g]},{type:"uint32",data:[y]})}return a.runWebGPUProgram(m,[r,s],"float32",h)}var Oce={kernelName:ki,backendName:"webgpu",kernelFunc:Dce},zce=class{constructor(e){this.variableNames=["x","W"],this.uniforms="filterDims: vec3, pads: vec3, strides: vec3, dilations: vec3,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.outShape,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="conv3dnaive"}getUserCode(){return` + `}};function Oce(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=C.convertConv2DDataFormat(u),d=C.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]}],m;if(B().getBool("WEBGPU_USE_NAIVE_CONV2D_TRANSPOSE")||d.dataFormat!=="channelsLast")m=new Rce(d);else{m=new Dce(d);let f=d.inHeight*d.inWidth,g=d.inChannels,y=d.filterHeight*d.filterWidth*d.outChannels;h.push({type:"uint32",data:[f]},{type:"uint32",data:[g]},{type:"uint32",data:[y]})}return a.runWebGPUProgram(m,[r,s],"float32",h)}var zce={kernelName:ki,backendName:"webgpu",kernelFunc:Oce},Lce=class{constructor(e){this.variableNames=["x","W"],this.uniforms="filterDims: vec3, pads: vec3, strides: vec3, dilations: vec3,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.outShape,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="conv3dnaive"}getUserCode(){return` ${ue("index")} { if (index < uniforms.size) { let coords = getOutputCoords(); @@ -6932,7 +6932,7 @@ return a / b;`,TJ=` } setOutputAtIndex(index, dotProd); } - }`}};function Lce(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,filter:s}=t,{strides:i,pad:o,dilations:l}=n,u=C.computeConv3DInfo(r.shape,s.shape,i,l,o),p=[u.padInfo.front,u.padInfo.top,u.padInfo.left],c=[{type:"int32",data:[u.filterDepth,u.filterHeight,u.filterWidth]},{type:"int32",data:[...p]},{type:"int32",data:[u.strideDepth,u.strideHeight,u.strideWidth]},{type:"int32",data:[u.dilationDepth,u.dilationHeight,u.dilationWidth]}],d=new zce(u),h=pa(r.dtype,s.dtype);return a.runWebGPUProgram(d,[r,s],h,c)}var Wce={kernelName:Ii,backendName:"webgpu",kernelFunc:Lce};function Bce(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,dy:s}=t,{strides:i,pad:o,filterShape:l}=n,u=C.computeConv3DInfo(r.shape,l,i,1,o),p=new Ece(u),c=[{type:"int32",data:[u.padInfo.front,u.padInfo.top,u.padInfo.left]},{type:"int32",data:[u.strideDepth,u.strideHeight,u.strideWidth]},{type:"int32",data:[u.batchSize]},{type:"int32",data:[u.outDepth]},{type:"int32",data:[u.outHeight]},{type:"int32",data:[u.outWidth]},{type:"int32",data:[u.inDepth]},{type:"int32",data:[u.inHeight]},{type:"int32",data:[u.inWidth]}];return a.runWebGPUProgram(p,[r,s],s.dtype,c)}var Vce={kernelName:mu,backendName:"webgpu",kernelFunc:Bce};function Uce(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,filter:s}=t,{strides:i,pad:o,inputShape:l}=n,u=C.computeConv3DInfo(l,s.shape,i,1,o),p=new Mce(u),c=[{type:"int32",data:[u.filterDepth,u.filterHeight,u.filterWidth]},{type:"int32",data:[u.filterDepth-1-u.padInfo.front,u.filterHeight-1-u.padInfo.top,u.filterWidth-1-u.padInfo.left]},{type:"int32",data:[u.strideDepth,u.strideHeight,u.strideWidth]},{type:"int32",data:[u.outDepth]},{type:"int32",data:[u.outHeight]},{type:"int32",data:[u.outWidth]},{type:"int32",data:[u.outChannels]}];return a.runWebGPUProgram(p,[r,s],r.dtype,c)}var Gce={kernelName:Si,backendName:"webgpu",kernelFunc:Uce},Hce=at({opType:le.COS}),jce={kernelName:Ci,backendName:"webgpu",kernelFunc:Hce},qce=at({opType:le.COSH}),Xce={kernelName:Ti,backendName:"webgpu",kernelFunc:qce},Kce=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=me(this.outputShape),this.dispatch=de(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` + }`}};function Wce(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,filter:s}=t,{strides:i,pad:o,dilations:l}=n,u=C.computeConv3DInfo(r.shape,s.shape,i,l,o),p=[u.padInfo.front,u.padInfo.top,u.padInfo.left],c=[{type:"int32",data:[u.filterDepth,u.filterHeight,u.filterWidth]},{type:"int32",data:[...p]},{type:"int32",data:[u.strideDepth,u.strideHeight,u.strideWidth]},{type:"int32",data:[u.dilationDepth,u.dilationHeight,u.dilationWidth]}],d=new Lce(u),h=pa(r.dtype,s.dtype);return a.runWebGPUProgram(d,[r,s],h,c)}var Bce={kernelName:Ii,backendName:"webgpu",kernelFunc:Wce};function Vce(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,dy:s}=t,{strides:i,pad:o,filterShape:l}=n,u=C.computeConv3DInfo(r.shape,l,i,1,o),p=new Mce(u),c=[{type:"int32",data:[u.padInfo.front,u.padInfo.top,u.padInfo.left]},{type:"int32",data:[u.strideDepth,u.strideHeight,u.strideWidth]},{type:"int32",data:[u.batchSize]},{type:"int32",data:[u.outDepth]},{type:"int32",data:[u.outHeight]},{type:"int32",data:[u.outWidth]},{type:"int32",data:[u.inDepth]},{type:"int32",data:[u.inHeight]},{type:"int32",data:[u.inWidth]}];return a.runWebGPUProgram(p,[r,s],s.dtype,c)}var Uce={kernelName:mu,backendName:"webgpu",kernelFunc:Vce};function Gce(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,filter:s}=t,{strides:i,pad:o,inputShape:l}=n,u=C.computeConv3DInfo(l,s.shape,i,1,o),p=new $ce(u),c=[{type:"int32",data:[u.filterDepth,u.filterHeight,u.filterWidth]},{type:"int32",data:[u.filterDepth-1-u.padInfo.front,u.filterHeight-1-u.padInfo.top,u.filterWidth-1-u.padInfo.left]},{type:"int32",data:[u.strideDepth,u.strideHeight,u.strideWidth]},{type:"int32",data:[u.outDepth]},{type:"int32",data:[u.outHeight]},{type:"int32",data:[u.outWidth]},{type:"int32",data:[u.outChannels]}];return a.runWebGPUProgram(p,[r,s],r.dtype,c)}var Hce={kernelName:Si,backendName:"webgpu",kernelFunc:Gce},jce=at({opType:le.COS}),qce={kernelName:Ci,backendName:"webgpu",kernelFunc:jce},Xce=at({opType:le.COSH}),Kce={kernelName:Ti,backendName:"webgpu",kernelFunc:Xce},Yce=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=me(this.outputShape),this.dispatch=de(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` ${ue("index")} { if (index < uniforms.size) { let coords = getCoordsFromIndex(index); @@ -6988,23 +6988,23 @@ return a / b;`,TJ=` } } } - `}},Yce=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 Kce(r.shape[3],s.shape,o,l),c=[{type:"float32",data:[u]}];return a.runWebGPUProgram(p,[r,s,i],"float32",c)},Zce={kernelName:Ei,backendName:"webgpu",kernelFunc:Yce},sp;(function(e){e.Prod="*",e.Sum="+"})(sp||(sp={}));var oA=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=me(this.outputShape),this.dispatch=de(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===sp.Prod?"1.0":"0.0",a=this.exclusive?t:`getX(${lA(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"),` + `}},Zce=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 Yce(r.shape[3],s.shape,o,l),c=[{type:"float32",data:[u]}];return a.runWebGPUProgram(p,[r,s,i],"float32",c)},Jce={kernelName:Ei,backendName:"webgpu",kernelFunc:Zce},sp;(function(e){e.Prod="*",e.Sum="+"})(sp||(sp={}));var lA=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=me(this.outputShape),this.dispatch=de(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===sp.Prod?"1.0":"0.0",a=this.exclusive?t:`getX(${uA(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"),` ${ue("index")} { if (index < uniforms.size) { var coords = getCoordsFromIndex(index); - let end = ${uA(e,"coords",this.op)}; + let end = ${dA(e,"coords",this.op)}; var val = ${a}; let pow2 = i32(pow(2.0, uniforms.index)); if (${r}) { let idx = ${s}; - ${uA(e,"coords",this.op)} = idx; - val ${this.op}= getX(${lA(e,"coords",this.op)}); + ${dA(e,"coords",this.op)} = idx; + val ${this.op}= getX(${uA(e,"coords",this.op)}); } setOutputAtIndex(index, val); } } - `}};function lA(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 uA(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 Lk(e,t,a,n,r,s){let i=t.shape.length,o=C.getAxesPermutation([n],i),l=t;o!=null&&(l=nr({inputs:{x:t},backend:a,attrs:{perm:o}}));let u=C.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=tn({inputs:{x:l},backend:a});for(let d=0;d<=Math.ceil(Math.log2(p))-1;d++){let h=new oA(e,l.shape,!1,s),m=c,f=[{type:"float32",data:[d]}];c=a.runWebGPUProgram(h,[c],c.dtype,f),a.disposeData(m.dataId)}if(r){let d=new oA(e,l.shape,r,s),h=c,m=[{type:"float32",data:[0]}];c=a.runWebGPUProgram(d,[c],c.dtype,m),a.disposeData(h.dataId)}if(o!=null){let d=C.getUndoAxesPermutation(o),h=nr({inputs:{x:c},backend:a,attrs:{perm:d}});return a.disposeData(c.dataId),a.disposeData(l.dataId),h}return c}function Jce(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,exclusive:i,reverse:o}=n;return Lk(sp.Prod,r,a,s,i,o)}var Qce={kernelName:Ni,backendName:"webgpu",kernelFunc:Jce};function ehe(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,exclusive:i,reverse:o}=n;return Lk(sp.Sum,r,a,s,i,o)}var the={kernelName:Ri,backendName:"webgpu",kernelFunc:ehe};function ahe(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=Wa({backend:a,attrs:{shape:d,value:0,dtype:p}}),m=new Fk(c,u,o),f=[{type:"int32",data:[i]}],g=u?[r,s]:[r];return a.runWebGPUProgram(m,g,p,f,h)}var nhe={kernelName:fu,backendName:"webgpu",kernelFunc:ahe},rhe=class{constructor(e,t){this.variableNames=["x"],this.workgroupSize=[64,1,1],this.size=!0,this.uniforms="blockSize : i32,",this.outputShape=e,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=`depthToSpace_${t}`,this.dataFormat=t}getUserCode(){return` + `}};function uA(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 dA(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 Wk(e,t,a,n,r,s){let i=t.shape.length,o=C.getAxesPermutation([n],i),l=t;o!=null&&(l=nr({inputs:{x:t},backend:a,attrs:{perm:o}}));let u=C.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=tn({inputs:{x:l},backend:a});for(let d=0;d<=Math.ceil(Math.log2(p))-1;d++){let h=new lA(e,l.shape,!1,s),m=c,f=[{type:"float32",data:[d]}];c=a.runWebGPUProgram(h,[c],c.dtype,f),a.disposeData(m.dataId)}if(r){let d=new lA(e,l.shape,r,s),h=c,m=[{type:"float32",data:[0]}];c=a.runWebGPUProgram(d,[c],c.dtype,m),a.disposeData(h.dataId)}if(o!=null){let d=C.getUndoAxesPermutation(o),h=nr({inputs:{x:c},backend:a,attrs:{perm:d}});return a.disposeData(c.dataId),a.disposeData(l.dataId),h}return c}function Qce(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,exclusive:i,reverse:o}=n;return Wk(sp.Prod,r,a,s,i,o)}var ehe={kernelName:Ni,backendName:"webgpu",kernelFunc:Qce};function the(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,exclusive:i,reverse:o}=n;return Wk(sp.Sum,r,a,s,i,o)}var ahe={kernelName:Ri,backendName:"webgpu",kernelFunc:the};function nhe(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=Wa({backend:a,attrs:{shape:d,value:0,dtype:p}}),m=new Dk(c,u,o),f=[{type:"int32",data:[i]}],g=u?[r,s]:[r];return a.runWebGPUProgram(m,g,p,f,h)}var rhe={kernelName:fu,backendName:"webgpu",kernelFunc:nhe},she=class{constructor(e,t){this.variableNames=["x"],this.workgroupSize=[64,1,1],this.size=!0,this.uniforms="blockSize : i32,",this.outputShape=e,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=`depthToSpace_${t}`,this.dataFormat=t}getUserCode(){return` ${ue("index")} { if (index < uniforms.size) { let coords = getCoordsFromIndex(index); @@ -7024,7 +7024,7 @@ return a / b;`,TJ=` 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 she(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),m=i==="NHWC"?[o,c,d,h]:[o,h,c,d],f=[{type:"int32",data:[s]}],g=new rhe(m,i);return a.runWebGPUProgram(g,[r],r.dtype,f)}var ihe={kernelName:Mi,backendName:"webgpu",kernelFunc:she},ohe=class{constructor(e,t,a,n=!1,r=null,s=!1){this.variableNames=["x","W"],this.uniforms="pads : vec2, inDims : vec2,",this.workgroupSize=[16,16,1],this.outputShape=e,this.dispatchLayout={x:[3],y:[2],z:[0,1]},this.dispatch=de(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` + }`}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 ihe(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),m=i==="NHWC"?[o,c,d,h]:[o,h,c,d],f=[{type:"int32",data:[s]}],g=new she(m,i);return a.runWebGPUProgram(g,[r],r.dtype,f)}var ohe={kernelName:Mi,backendName:"webgpu",kernelFunc:ihe},lhe=class{constructor(e,t,a,n=!1,r=null,s=!1){this.variableNames=["x","W"],this.uniforms="pads : vec2, inDims : vec2,",this.workgroupSize=[16,16,1],this.outputShape=e,this.dispatchLayout={x:[3],y:[2],z:[0,1]},this.dispatch=de(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` ${$r(this.activation,this.hasPreluActivation,!1,4)} var mm_Asub : array, ${a}>; @@ -7086,7 +7086,7 @@ return a / b;`,TJ=` setOutputAtCoords(coords[0], coords[1], coords[2], coords[3], value); } } - `}},Wk=class{constructor(e,t=!1,a=null,n=!1){this.variableNames=["x","W"],this.uniforms="pads : vec2, inDims : vec2, virtualWidth : i32,",this.workgroupSize=[64,1,1],this.workPerThread=4,this.outputComponent=4,this.outputShape=e.outShape,this.virtualWidth=Math.ceil(this.outputShape[2]/this.workPerThread)*this.workPerThread;let r=[this.outputShape[0],this.outputShape[1],this.virtualWidth,this.outputShape[3]];this.dispatchLayout=me(r),this.dispatch=de(this.dispatchLayout,r,this.workgroupSize,[this.outputComponent*this.workPerThread,1,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,t=this.convInfo.strideHeight,a=this.convInfo.strideWidth;return` + `}},Bk=class{constructor(e,t=!1,a=null,n=!1){this.variableNames=["x","W"],this.uniforms="pads : vec2, inDims : vec2, virtualWidth : i32,",this.workgroupSize=[64,1,1],this.workPerThread=4,this.outputComponent=4,this.outputShape=e.outShape,this.virtualWidth=Math.ceil(this.outputShape[2]/this.workPerThread)*this.workPerThread;let r=[this.outputShape[0],this.outputShape[1],this.virtualWidth,this.outputShape[3]];this.dispatchLayout=me(r),this.dispatch=de(this.dispatchLayout,r,this.workgroupSize,[this.outputComponent*this.workPerThread,1,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,t=this.convInfo.strideHeight,a=this.convInfo.strideWidth;return` ${$r(this.activation,this.hasPreluActivation,!0,4)} fn readX(batch : i32, row : i32, col : i32, channel : i32) -> vec4 { var value = vec4(0.0); @@ -7141,7 +7141,7 @@ return a / b;`,TJ=` } } } - `}},Bk=class{constructor(e,t=!1,a=null,n=!1){this.variableNames=["x","W"],this.uniforms=`pads : vec2, inDims : vec2, filterHeight : i32, + `}},Vk=class{constructor(e,t=!1,a=null,n=!1){this.variableNames=["x","W"],this.uniforms=`pads : vec2, inDims : vec2, filterHeight : i32, filterWidth : i32, strides : vec2, dilations : vec2,`,this.workgroupSize=[256,1,1],this.size=!0,this.outputShape=e.outShape,this.dispatchLayout=me(this.outputShape),this.dispatch=de(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` ${$r(this.activation,this.hasPreluActivation,!1,4)} @@ -7208,7 +7208,7 @@ return a / b;`,TJ=` setOutputAtCoords(coords[0], coords[1], coords[2], coords[3], value); } } - `}};function lhe(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=C.convertConv2DDataFormat(l),d=u;d==null&&(d=[1,1]);let h=C.computeConv2DInfo(r.shape,s.shape,i,d,o,p,!0,c),m=[{type:"int32",data:[h.padInfo.top,h.padInfo.left]},{type:"int32",data:[h.inHeight,h.inWidth]}],f=h.dataFormat==="channelsLast",g;return!f&&h.inHeight>16&&h.inWidth>16&&h.strideHeight===1&&h.strideWidth===1&&h.dilationWidth===1&&h.dilationHeight===1&&h.inChannels===h.outChannels?g=new ohe(h.outShape,h.filterHeight,h.filterWidth):f&&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 Wk(h),m.push({type:"int32",data:[g.virtualWidth]})):(g=new Bk(h),m.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,m)}var uhe={kernelName:$i,backendName:"webgpu",kernelFunc:lhe},dhe=class{constructor(e){this.variableNames=["x","dy"],this.uniforms=`strides : vec2, pads : vec2, filterDims : vec2, outHeight : i32, + `}};function uhe(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=C.convertConv2DDataFormat(l),d=u;d==null&&(d=[1,1]);let h=C.computeConv2DInfo(r.shape,s.shape,i,d,o,p,!0,c),m=[{type:"int32",data:[h.padInfo.top,h.padInfo.left]},{type:"int32",data:[h.inHeight,h.inWidth]}],f=h.dataFormat==="channelsLast",g;return!f&&h.inHeight>16&&h.inWidth>16&&h.strideHeight===1&&h.strideWidth===1&&h.dilationWidth===1&&h.dilationHeight===1&&h.inChannels===h.outChannels?g=new lhe(h.outShape,h.filterHeight,h.filterWidth):f&&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 Bk(h),m.push({type:"int32",data:[g.virtualWidth]})):(g=new Vk(h),m.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,m)}var dhe={kernelName:$i,backendName:"webgpu",kernelFunc:uhe},phe=class{constructor(e){this.variableNames=["x","dy"],this.uniforms=`strides : vec2, pads : vec2, filterDims : vec2, outHeight : i32, outWidth : i32, inHeight : i32, inWidth : i32, batchSize : i32, channelMul : i32,`,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.filterShape,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="depthwise_conv2d_backprop_filter"}getUserCode(){return` ${ue("index")} { if (index < uniforms.size) { @@ -7244,7 +7244,7 @@ return a / b;`,TJ=` setOutputAtIndex(index, dotProd); } } - `}},phe=class{constructor(e){this.variableNames=["dy","W"],this.uniforms=`strides : vec2, pads : vec2, filterDims : vec2, + `}},che=class{constructor(e){this.variableNames=["dy","W"],this.uniforms=`strides : vec2, pads : vec2, filterDims : vec2, outHeight : i32, outWidth : i32, channelMul : i32,`,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.inShape,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="depthwise_conv2d_backprop_input"}getUserCode(){return` ${ue("index")} { if (index < uniforms.size) { @@ -7287,7 +7287,7 @@ return a / b;`,TJ=` setOutputAtIndex(index, dotProd); } } - `}};function che(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=C.computeConv2DInfo(r.shape,p,i,o,l,u,!0),d=new dhe(c),h=[{type:"int32",data:[c.strideHeight,c.strideWidth]},{type:"int32",data:[c.padInfo.top,c.padInfo.left]},{type:"int32",data:[c.filterHeight,c.filterWidth]},{type:"int32",data:[c.outHeight]},{type:"int32",data:[c.outWidth]},{type:"int32",data:[c.inHeight]},{type:"int32",data:[c.inWidth]},{type:"int32",data:[c.batchSize]},{type:"int32",data:[c.outChannels/c.inChannels]}];return a.runWebGPUProgram(d,[r,s],"float32",h)}var hhe={kernelName:mp,backendName:"webgpu",kernelFunc:che};function mhe(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=C.computeConv2DInfo(p,s.shape,i,o,l,u,!0),d=new phe(c),h=[{type:"int32",data:[c.strideHeight,c.strideWidth]},{type:"int32",data:[c.filterHeight-1-c.padInfo.top,c.filterWidth-1-c.padInfo.left]},{type:"int32",data:[c.filterHeight,c.filterWidth]},{type:"int32",data:[c.outHeight]},{type:"int32",data:[c.outWidth]},{type:"int32",data:[c.outChannels/c.inChannels]}];return a.runWebGPUProgram(d,[r,s],r.dtype,h)}var fhe={kernelName:fp,backendName:"webgpu",kernelFunc:mhe},ghe=class{constructor(e){this.variableNames=["x"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=[e,e],this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="diag"}getUserCode(){return` + `}};function hhe(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=C.computeConv2DInfo(r.shape,p,i,o,l,u,!0),d=new phe(c),h=[{type:"int32",data:[c.strideHeight,c.strideWidth]},{type:"int32",data:[c.padInfo.top,c.padInfo.left]},{type:"int32",data:[c.filterHeight,c.filterWidth]},{type:"int32",data:[c.outHeight]},{type:"int32",data:[c.outWidth]},{type:"int32",data:[c.inHeight]},{type:"int32",data:[c.inWidth]},{type:"int32",data:[c.batchSize]},{type:"int32",data:[c.outChannels/c.inChannels]}];return a.runWebGPUProgram(d,[r,s],"float32",h)}var mhe={kernelName:mp,backendName:"webgpu",kernelFunc:hhe};function fhe(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=C.computeConv2DInfo(p,s.shape,i,o,l,u,!0),d=new che(c),h=[{type:"int32",data:[c.strideHeight,c.strideWidth]},{type:"int32",data:[c.filterHeight-1-c.padInfo.top,c.filterWidth-1-c.padInfo.left]},{type:"int32",data:[c.filterHeight,c.filterWidth]},{type:"int32",data:[c.outHeight]},{type:"int32",data:[c.outWidth]},{type:"int32",data:[c.outChannels/c.inChannels]}];return a.runWebGPUProgram(d,[r,s],r.dtype,h)}var ghe={kernelName:fp,backendName:"webgpu",kernelFunc:fhe},yhe=class{constructor(e){this.variableNames=["x"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=[e,e],this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="diag"}getUserCode(){return` ${ue("index")} { if (index < uniforms.size) { let coords = getOutputCoords(); @@ -7295,7 +7295,7 @@ return a / b;`,TJ=` setOutputAtIndex(index, value); } } - `}};function yhe(e){let{inputs:t,backend:a}=e,{x:n}=t,r=[...n.shape,...n.shape],s=v.sizeFromShape(n.shape),i=ke({inputs:{x:n},backend:a,attrs:{shape:[s]}}),o=new ghe(s),l=a.runWebGPUProgram(o,[i],i.dtype),u=ke({inputs:{x:l},backend:a,attrs:{shape:r}});return a.disposeData(i.dataId),a.disposeData(l.dataId),u}var xhe={kernelName:gu,backendName:"webgpu",kernelFunc:yhe},Ahe=class{constructor(e){this.variableNames=["x","w"],this.uniforms="filterDims: vec2, pads: vec2, strides: vec2, dilations: vec2",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.outShape,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="dilation2d"}getUserCode(){return` + `}};function xhe(e){let{inputs:t,backend:a}=e,{x:n}=t,r=[...n.shape,...n.shape],s=v.sizeFromShape(n.shape),i=ke({inputs:{x:n},backend:a,attrs:{shape:[s]}}),o=new yhe(s),l=a.runWebGPUProgram(o,[i],i.dtype),u=ke({inputs:{x:l},backend:a,attrs:{shape:r}});return a.disposeData(i.dataId),a.disposeData(l.dataId),u}var Ahe={kernelName:gu,backendName:"webgpu",kernelFunc:xhe},bhe=class{constructor(e){this.variableNames=["x","w"],this.uniforms="filterDims: vec2, pads: vec2, strides: vec2, dilations: vec2",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.outShape,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="dilation2d"}getUserCode(){return` ${ue("index")} { if (index < uniforms.size) { let neg_infinity = -3.4e38; @@ -7327,7 +7327,7 @@ return a / b;`,TJ=` setOutputAtIndex(index, curVal); } } - `}};function bhe(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,filter:s}=t,{strides:i,pad:o,dilations:l}=n,u=C.computeDilation2DInfo(r.shape,s.shape,i,o,"NHWC",l),p=[u.padInfo.top,u.padInfo.left],c=[{type:"int32",data:[u.filterHeight,u.filterWidth]},{type:"int32",data:[...p]},{type:"int32",data:[u.strideHeight,u.strideWidth]},{type:"int32",data:[u.dilationHeight,u.dilationWidth]}],d=new Ahe(u);return a.runWebGPUProgram(d,[r,s],r.dtype,c)}var vhe={kernelName:Pi,backendName:"webgpu",kernelFunc:bhe},whe=class{constructor(e,t){if(this.variableNames=["x","w","dy"],this.uniforms="filterDims: vec2, pads: vec2, strides: vec2, dilations: vec2, dySize: i32,",this.workgroupSize=[64,1,1],this.atomic=!0,this.outputShape=e.inShape,this.dispatchLayout=me(e.outShape),this.dispatch=de(this.dispatchLayout,e.outShape,this.workgroupSize),t!=="float32"&&t!=="int32")throw new Error(`Dilation2DBackpropInput only supports float32 and int32 + `}};function vhe(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,filter:s}=t,{strides:i,pad:o,dilations:l}=n,u=C.computeDilation2DInfo(r.shape,s.shape,i,o,"NHWC",l),p=[u.padInfo.top,u.padInfo.left],c=[{type:"int32",data:[u.filterHeight,u.filterWidth]},{type:"int32",data:[...p]},{type:"int32",data:[u.strideHeight,u.strideWidth]},{type:"int32",data:[u.dilationHeight,u.dilationWidth]}],d=new bhe(u);return a.runWebGPUProgram(d,[r,s],r.dtype,c)}var whe={kernelName:Pi,backendName:"webgpu",kernelFunc:vhe},khe=class{constructor(e,t){if(this.variableNames=["x","w","dy"],this.uniforms="filterDims: vec2, pads: vec2, strides: vec2, dilations: vec2, dySize: i32,",this.workgroupSize=[64,1,1],this.atomic=!0,this.outputShape=e.inShape,this.dispatchLayout=me(e.outShape),this.dispatch=de(this.dispatchLayout,e.outShape,this.workgroupSize),t!=="float32"&&t!=="int32")throw new Error(`Dilation2DBackpropInput only supports float32 and int32 types, does not support ${t} type.`);this.type=t,this.shaderKey="dilation2DBackpropInput"}getUserCode(){return` ${ue("index")} { if (index < uniforms.dySize) { @@ -7371,7 +7371,7 @@ return a / b;`,TJ=` ${ys("&result[flatIndexIn]","value",this.type)} } } - `}},khe=class{constructor(e,t,a){if(this.variableNames=["x","w","dy"],this.uniforms="filterDims: vec2, pads: vec2, strides: vec2, dilations: vec2, dySize: i32,",this.workgroupSize=[64,1,1],this.atomic=!0,this.outputShape=e.filterShape,this.dispatchLayout=me(e.outShape),this.dispatch=de(this.dispatchLayout,e.outShape,this.workgroupSize),a!=="float32"&&a!=="int32")throw new Error(`Dilation2DBackpropFilter only supports float32 and int32 + `}},Ihe=class{constructor(e,t,a){if(this.variableNames=["x","w","dy"],this.uniforms="filterDims: vec2, pads: vec2, strides: vec2, dilations: vec2, dySize: i32,",this.workgroupSize=[64,1,1],this.atomic=!0,this.outputShape=e.filterShape,this.dispatchLayout=me(e.outShape),this.dispatch=de(this.dispatchLayout,e.outShape,this.workgroupSize),a!=="float32"&&a!=="int32")throw new Error(`Dilation2DBackpropFilter only supports float32 and int32 types, does not support ${a} type.`);this.type=a,this.shaderKey="dilation2DBackpropFilter"}getUserCode(){return` ${ue("index")} { if (index < uniforms.dySize) { @@ -7414,7 +7414,7 @@ return a / b;`,TJ=` ${ys("&result[flatIndexIn]","value",this.type)} } } - `}};function Ihe(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,filter:s,dy:i}=t,{strides:o,pad:l,dilations:u}=n,p=C.computeDilation2DInfo(r.shape,s.shape,o,l,"NHWC",u),c=s.dtype,d=new khe(p,s.shape,c),h=[{type:"int32",data:[p.filterHeight,p.filterWidth]},{type:"int32",data:[p.padInfo.top,p.padInfo.left]},{type:"int32",data:[p.strideHeight,p.strideWidth]},{type:"int32",data:[p.dilationHeight,p.dilationWidth]},{type:"int32",data:[v.sizeFromShape(p.outShape)]}],m=Wa({backend:a,attrs:{shape:s.shape,value:0,dtype:c}});return a.runWebGPUProgram(d,[r,s,i],c,h,m)}var She={kernelName:ql,backendName:"webgpu",kernelFunc:Ihe};function Che(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,filter:s,dy:i}=t,{strides:o,pad:l,dilations:u}=n,p=C.computeDilation2DInfo(r.shape,s.shape,o,l,"NHWC",u),c=r.dtype,d=new whe(p,c),h=[{type:"int32",data:[p.filterHeight,p.filterWidth]},{type:"int32",data:[p.padInfo.top,p.padInfo.left]},{type:"int32",data:[p.strideHeight,p.strideWidth]},{type:"int32",data:[p.dilationHeight,p.dilationWidth]},{type:"int32",data:[v.sizeFromShape(p.outShape)]}],m=Wa({backend:a,attrs:{shape:p.inShape,value:0,dtype:c}});return a.runWebGPUProgram(d,[r,s,i],c,h,m)}var The={kernelName:jl,backendName:"webgpu",kernelFunc:Che},Nhe=class{constructor(e,t,a){this.variableNames=["Image"],this.uniforms="alpha: f32,",this.workgroupSize=[64,1,1],this.pixelsOpType=au.DRAW,this.size=!0,this.outputShape=e,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.type=t,this.textureFormat=a,this.shaderKey=`draw_${t}_${a}`}getUserCode(){let e,t=this.type==="float32"?"value":"value / 255.0";return e=` + `}};function She(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,filter:s,dy:i}=t,{strides:o,pad:l,dilations:u}=n,p=C.computeDilation2DInfo(r.shape,s.shape,o,l,"NHWC",u),c=s.dtype,d=new Ihe(p,s.shape,c),h=[{type:"int32",data:[p.filterHeight,p.filterWidth]},{type:"int32",data:[p.padInfo.top,p.padInfo.left]},{type:"int32",data:[p.strideHeight,p.strideWidth]},{type:"int32",data:[p.dilationHeight,p.dilationWidth]},{type:"int32",data:[v.sizeFromShape(p.outShape)]}],m=Wa({backend:a,attrs:{shape:s.shape,value:0,dtype:c}});return a.runWebGPUProgram(d,[r,s,i],c,h,m)}var Che={kernelName:ql,backendName:"webgpu",kernelFunc:She};function The(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,filter:s,dy:i}=t,{strides:o,pad:l,dilations:u}=n,p=C.computeDilation2DInfo(r.shape,s.shape,o,l,"NHWC",u),c=r.dtype,d=new khe(p,c),h=[{type:"int32",data:[p.filterHeight,p.filterWidth]},{type:"int32",data:[p.padInfo.top,p.padInfo.left]},{type:"int32",data:[p.strideHeight,p.strideWidth]},{type:"int32",data:[p.dilationHeight,p.dilationWidth]},{type:"int32",data:[v.sizeFromShape(p.outShape)]}],m=Wa({backend:a,attrs:{shape:p.inShape,value:0,dtype:c}});return a.runWebGPUProgram(d,[r,s,i],c,h,m)}var Nhe={kernelName:jl,backendName:"webgpu",kernelFunc:The},Rhe=class{constructor(e,t,a){this.variableNames=["Image"],this.uniforms="alpha: f32,",this.workgroupSize=[64,1,1],this.pixelsOpType=au.DRAW,this.size=!0,this.outputShape=e,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.type=t,this.textureFormat=a,this.shaderKey=`draw_${t}_${a}`}getUserCode(){let e,t=this.type==="float32"?"value":"value / 255.0";return e=` if (uniforms.numChannels == 1) { rgba[0] = ${t}; rgba[1] = ${t}; @@ -7437,7 +7437,7 @@ return a / b;`,TJ=` textureStore(outImage, vec2(coords.yx), rgba); } } - `}};function Rhe(e){let{inputs:t,backend:a,attrs:n}=e,{image:r}=t,{canvas:s,options:i}=n,[o,l]=r.shape.slice(0,2),{imageOptions:u}=i||{},p=(u==null?void 0:u.alpha)||1,c=a.device.features.has("bgra8unorm-storage")?"bgra8unorm":"rgba8unorm",d=[o,l],h=new Nhe(d,r.dtype,c);s.width=l,s.height=o;let m="webgpu",f=s.getContext(m),g;f||(g=new OffscreenCanvas(l,o),f=g.getContext(m));let y=r.shape.length===3?r.shape[2]:1;f.configure({device:a.device,format:c,usage:GPUTextureUsage.STORAGE_BINDING,alphaMode:"premultiplied"});let x="int32",A=a.makeTensorInfo(d,x),b=a.tensorMap.get(A.dataId);b.resource=f.getCurrentTexture(),b.external=!0;let w=[{type:"uint32",data:[y]},{type:"float32",data:[p]}];if(a.runWebGPUProgram(h,[r],x,w,A),g){let I=s.getContext("2d");if(!I)throw new Error("Please make sure this canvas has only been used for 2d or webgpu context!");I.drawImage(g,0,0)}return a.disposeData(A.dataId),r}var Ehe={kernelName:gp,backendName:"webgpu",kernelFunc:Rhe},Vk=ta({opType:Pe.MUL,cpuKernelImpl:Fde,supportsComplex:!0}),Mhe={kernelName:yo,backendName:"webgpu",kernelFunc:Vk};function Uk(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,keepDims:i}=n;return ul(r,s,i,"sum",a)}var $he={kernelName:Go,backendName:"webgpu",kernelFunc:Uk};function Phe(e){let{inputs:t,backend:a,attrs:n}=e,{equation:r}=n,s=t,{allDims:i,summedDims:o,idDims:l}=C.decodeEinsumEquation(r,s.length);C.checkEinsumDimSizes(i.length,l,s);let{path:u,steps:p}=C.getEinsumComputePath(o,l),c=p.length,d=null,h=i.length,m=[];for(let f=0;f=0&&(d=Uk({inputs:{x:d},backend:a,attrs:{axis:u[f]-(i.length-h),keepDims:!1}}),m.push(d)),h--)}for(let f of m)f!==d&&a.disposeData(f.dataId);return d}var _he={kernelName:yp,backendName:"webgpu",kernelFunc:Phe},Fhe=at({opType:le.ELU}),Dhe={kernelName:Fi,backendName:"webgpu",kernelFunc:Fhe},Ohe=e=>{let{inputs:t,backend:a}=e,{dy:n,y:r}=t,s=new Th(Pe.ELU_DER,n.shape,r.shape);return a.runWebGPUProgram(s,[n,r],n.dtype)},zhe={kernelName:yu,backendName:"webgpu",kernelFunc:Ohe},Lhe=ta({opType:Pe.EQUAL,dtype:"bool",cpuKernelImpl:bde}),Whe={kernelName:Oi,backendName:"webgpu",kernelFunc:Lhe},Bhe=at({opType:le.ERF}),Vhe={kernelName:Di,backendName:"webgpu",kernelFunc:Bhe},Uhe=at({opType:le.EXP,cpuKernelImpl:vde,dtype:"float32"}),Ghe={kernelName:zi,backendName:"webgpu",kernelFunc:Uhe};function Y1(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),ke({inputs:{x:s},backend:n,attrs:{shape:o}})}var Hhe={kernelName:xu,backendName:"webgpu",kernelFunc:Y1},jhe=at({opType:le.EXPM1,cpuKernelImpl:wde}),qhe={kernelName:Li,backendName:"webgpu",kernelFunc:jhe},dA=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=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.component=e,this.shaderKey=`fft_${e}`}getUserCode(){return` + `}};function Ehe(e){let{inputs:t,backend:a,attrs:n}=e,{image:r}=t,{canvas:s,options:i}=n,[o,l]=r.shape.slice(0,2),{imageOptions:u}=i||{},p=(u==null?void 0:u.alpha)||1,c=a.device.features.has("bgra8unorm-storage")?"bgra8unorm":"rgba8unorm",d=[o,l],h=new Rhe(d,r.dtype,c);s.width=l,s.height=o;let m="webgpu",f=s.getContext(m),g;f||(g=new OffscreenCanvas(l,o),f=g.getContext(m));let y=r.shape.length===3?r.shape[2]:1;f.configure({device:a.device,format:c,usage:GPUTextureUsage.STORAGE_BINDING,alphaMode:"premultiplied"});let x="int32",A=a.makeTensorInfo(d,x),b=a.tensorMap.get(A.dataId);b.resource=f.getCurrentTexture(),b.external=!0;let w=[{type:"uint32",data:[y]},{type:"float32",data:[p]}];if(a.runWebGPUProgram(h,[r],x,w,A),g){let I=s.getContext("2d");if(!I)throw new Error("Please make sure this canvas has only been used for 2d or webgpu context!");I.drawImage(g,0,0)}return a.disposeData(A.dataId),r}var Mhe={kernelName:gp,backendName:"webgpu",kernelFunc:Ehe},Uk=ta({opType:Pe.MUL,cpuKernelImpl:Dde,supportsComplex:!0}),$he={kernelName:yo,backendName:"webgpu",kernelFunc:Uk};function Gk(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,keepDims:i}=n;return ul(r,s,i,"sum",a)}var Phe={kernelName:Go,backendName:"webgpu",kernelFunc:Gk};function _he(e){let{inputs:t,backend:a,attrs:n}=e,{equation:r}=n,s=t,{allDims:i,summedDims:o,idDims:l}=C.decodeEinsumEquation(r,s.length);C.checkEinsumDimSizes(i.length,l,s);let{path:u,steps:p}=C.getEinsumComputePath(o,l),c=p.length,d=null,h=i.length,m=[];for(let f=0;f=0&&(d=Gk({inputs:{x:d},backend:a,attrs:{axis:u[f]-(i.length-h),keepDims:!1}}),m.push(d)),h--)}for(let f of m)f!==d&&a.disposeData(f.dataId);return d}var Fhe={kernelName:yp,backendName:"webgpu",kernelFunc:_he},Dhe=at({opType:le.ELU}),Ohe={kernelName:Fi,backendName:"webgpu",kernelFunc:Dhe},zhe=e=>{let{inputs:t,backend:a}=e,{dy:n,y:r}=t,s=new Th(Pe.ELU_DER,n.shape,r.shape);return a.runWebGPUProgram(s,[n,r],n.dtype)},Lhe={kernelName:yu,backendName:"webgpu",kernelFunc:zhe},Whe=ta({opType:Pe.EQUAL,dtype:"bool",cpuKernelImpl:vde}),Bhe={kernelName:Oi,backendName:"webgpu",kernelFunc:Whe},Vhe=at({opType:le.ERF}),Uhe={kernelName:Di,backendName:"webgpu",kernelFunc:Vhe},Ghe=at({opType:le.EXP,cpuKernelImpl:wde,dtype:"float32"}),Hhe={kernelName:zi,backendName:"webgpu",kernelFunc:Ghe};function Y1(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),ke({inputs:{x:s},backend:n,attrs:{shape:o}})}var jhe={kernelName:xu,backendName:"webgpu",kernelFunc:Y1},qhe=at({opType:le.EXPM1,cpuKernelImpl:kde}),Xhe={kernelName:Li,backendName:"webgpu",kernelFunc:qhe},pA=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=me(this.outputShape),this.dispatch=de(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;"} } @@ -7470,7 +7470,7 @@ return a / b;`,TJ=` setOutputAtIndex(index, mulMatDFT(coords[0], coords[1])); } } - `}};function Gk(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=ke({inputs:{x:e},backend:a,attrs:{shape:[i,s]}});o.push(l);let u=l.shape,p=new dA("real",u),c=new dA("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,m=t?u[1]:1,f=[{type:"float32",data:[h]},{type:"float32",data:[m]}],g=a.runWebGPUProgram(p,d,"float32",f);o.push(g);let y=a.runWebGPUProgram(c,d,"float32",f);o.push(y);let x=ll({inputs:{real:g,imag:y},backend:a});o.push(x);let A=ke({inputs:{x},backend:a,attrs:{shape:e.shape}});return o.forEach(b=>a.disposeData(b.dataId)),A}function Xhe(e){let{inputs:t,backend:a}=e,{input:n}=t;return Gk(n,!1,a)}var Khe={kernelName:xp,backendName:"webgpu",kernelFunc:Xhe},Yhe=class{constructor(e){this.outputShape=[],this.variableNames=["x"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="flipLeftRight"}getUserCode(){return` + `}};function Hk(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=ke({inputs:{x:e},backend:a,attrs:{shape:[i,s]}});o.push(l);let u=l.shape,p=new pA("real",u),c=new pA("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,m=t?u[1]:1,f=[{type:"float32",data:[h]},{type:"float32",data:[m]}],g=a.runWebGPUProgram(p,d,"float32",f);o.push(g);let y=a.runWebGPUProgram(c,d,"float32",f);o.push(y);let x=ll({inputs:{real:g,imag:y},backend:a});o.push(x);let A=ke({inputs:{x},backend:a,attrs:{shape:e.shape}});return o.forEach(b=>a.disposeData(b.dataId)),A}function Khe(e){let{inputs:t,backend:a}=e,{input:n}=t;return Hk(n,!1,a)}var Yhe={kernelName:xp,backendName:"webgpu",kernelFunc:Khe},Zhe=class{constructor(e){this.outputShape=[],this.variableNames=["x"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="flipLeftRight"}getUserCode(){return` ${ue("index")} { if (index < uniforms.size) { let coords = getCoordsFromIndex(index); @@ -7479,7 +7479,7 @@ return a / b;`,TJ=` setOutputAtIndex(index, outputValue); } } - `}},Zhe={kernelName:Wi,backendName:"webgpu",kernelFunc:({inputs:e,backend:t})=>{let{image:a}=e,n=t,r=new Yhe(a.shape);return n.runWebGPUProgram(r,[a],a.dtype)}},Jhe=at({opType:le.FLOOR,cpuKernelImpl:kde}),Qhe={kernelName:Bi,backendName:"webgpu",kernelFunc:Jhe},e0e=ta({opType:Pe.FLOOR_DIV,cpuKernelImpl:Ide,dtype:"int32"}),t0e={kernelName:Vi,backendName:"webgpu",kernelFunc:e0e},a0e=class{constructor(e,t,a=!1){this.pixelsOpType=au.FROM_PIXELS,this.outputShape=[0],this.variableNames=[],this.workgroupSize=[256,1,1],this.outputShape=e,this.dispatchLayout=me(this.outputShape),this.dispatch=de(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` + `}},Jhe={kernelName:Wi,backendName:"webgpu",kernelFunc:({inputs:e,backend:t})=>{let{image:a}=e,n=t,r=new Zhe(a.shape);return n.runWebGPUProgram(r,[a],a.dtype)}},Qhe=at({opType:le.FLOOR,cpuKernelImpl:Ide}),e0e={kernelName:Bi,backendName:"webgpu",kernelFunc:Qhe},t0e=ta({opType:Pe.FLOOR_DIV,cpuKernelImpl:Sde,dtype:"int32"}),a0e={kernelName:Vi,backendName:"webgpu",kernelFunc:t0e},n0e=class{constructor(e,t,a=!1){this.pixelsOpType=au.FROM_PIXELS,this.outputShape=[0],this.variableNames=[],this.workgroupSize=[256,1,1],this.outputShape=e,this.dispatchLayout=me(this.outputShape),this.dispatch=de(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"}; ${ue("index")} { let flatIndex = index * uniforms.numChannels; @@ -7491,7 +7491,7 @@ return a / b;`,TJ=` } } } - `}},n0e={kernelName:Ld,backendName:"webgpu",kernelFunc:r0e},Fl,e1=B().getBool("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU");function r0e(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,[p,c]=i?[r.videoWidth,r.videoHeight]:[r.width,r.height],d=[c,p,s],h=B().getBool("WEBGPU_IMPORT_EXTERNAL_TEXTURE")&&i,m=i||o;if(u||l||m){let x;if(h)x=a.device.importExternalTexture({source:r});else{if(m){let S=B().getBool("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU");(Fl==null||S!==e1)&&(e1=S,Fl=document.createElement("canvas").getContext("2d",{willReadFrequently:e1})),Fl.canvas.width=p,Fl.canvas.height=c,Fl.drawImage(r,0,0,p,c),r=Fl.canvas}let $=GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.TEXTURE_BINDING,E=a.textureManager.acquireTexture(d[1],d[0],"rgba8unorm",$);a.queue.copyExternalImageToTexture({source:r},{texture:E},[d[1],d[0]]),x=E}let A=v.sizeFromShape(d),b=v.computeStrides(d),w=new a0e(d,s,h),I=[{type:"uint32",data:[A]},{type:"uint32",data:[s]},{type:"uint32",data:[...b]}],T=a.makeTensorInfo([c,p],"int32"),N=a.tensorMap.get(T.dataId);N.resource=x;let M=a.runWebGPUProgram(w,[T],"int32",I);return a.disposeData(T.dataId),M}let f=r.data,g=f;if(s!=null&&s!==4){g=new Uint8Array(r.width*r.height*s);let x=f.length,A=0;for(let b=0;b(xValue, -meanValue, offsetValue), vec3(inv, inv, 1.0))); } } - `}},i0e={kernelName:Ui,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 s0e(n.shape,i.shape,o.shape,c,d),m=[{type:"float32",data:[l]}];return u.runWebGPUProgram(h,p,n.dtype,m)}};function o0e(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:m}=n,f=C.convertConv2DDataFormat(p),g=C.computeConv2DInfo(r.shape,s.shape,l,c,u,d,!1,f);return zk({x:r,filter:s,convInfo:g,backend:a,bias:i,preluActivationWeights:o,leakyreluAlpha:m,activation:h})}var l0e={kernelName:Zr,backendName:"webgpu",kernelFunc:o0e};function u0e(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,m=p;m==null&&(m=[1,1]),v.assert(C.eitherStridesOrDilationsAreOne(l,m),()=>`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${l} and dilations '${m}'`);let f=C.computeConv2DInfo(r.shape,s.shape,l,m,u,c,!0),g=[r,s],y=i!=null,x=o!=null;y&&g.push(i),x&&g.push(o);let A=[{type:"int32",data:[f.padInfo.top,f.padInfo.left]},{type:"int32",data:[f.inHeight,f.inWidth]}],b;return f.outHeight>4&&f.outWidth>4&&f.strideWidth<=2&&f.inChannels===f.outChannels&&f.dilationHeight===1&&f.dilationWidth===1&&f.inChannels%4===0?(b=new Wk(f,y,d,x),A.push({type:"int32",data:[b.virtualWidth]})):(b=new Bk(f,y,d,x),A.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]})),d==="leakyrelu"&&(A.push({type:"float32",data:[h]}),b.uniforms+=" alpha : f32,"),a.runWebGPUProgram(b,g,"float32",A)}var d0e={kernelName:Jr,backendName:"webgpu",kernelFunc:u0e},p0e=class{constructor(e,t){this.variableNames=["A","indices"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=t,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=`gathernd_${e}`,this.sliceDim=e,this.uniforms=`sliceDim : i32, strides : ${Pt(e)},`}getUserCode(){let e;return this.sliceDim>1?e="uniforms.strides[j]":e="uniforms.strides",` + `}},o0e={kernelName:Ui,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 i0e(n.shape,i.shape,o.shape,c,d),m=[{type:"float32",data:[l]}];return u.runWebGPUProgram(h,p,n.dtype,m)}};function l0e(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:m}=n,f=C.convertConv2DDataFormat(p),g=C.computeConv2DInfo(r.shape,s.shape,l,c,u,d,!1,f);return Lk({x:r,filter:s,convInfo:g,backend:a,bias:i,preluActivationWeights:o,leakyreluAlpha:m,activation:h})}var u0e={kernelName:Zr,backendName:"webgpu",kernelFunc:l0e};function d0e(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,m=p;m==null&&(m=[1,1]),v.assert(C.eitherStridesOrDilationsAreOne(l,m),()=>`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${l} and dilations '${m}'`);let f=C.computeConv2DInfo(r.shape,s.shape,l,m,u,c,!0),g=[r,s],y=i!=null,x=o!=null;y&&g.push(i),x&&g.push(o);let A=[{type:"int32",data:[f.padInfo.top,f.padInfo.left]},{type:"int32",data:[f.inHeight,f.inWidth]}],b;return f.outHeight>4&&f.outWidth>4&&f.strideWidth<=2&&f.inChannels===f.outChannels&&f.dilationHeight===1&&f.dilationWidth===1&&f.inChannels%4===0?(b=new Bk(f,y,d,x),A.push({type:"int32",data:[b.virtualWidth]})):(b=new Vk(f,y,d,x),A.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]})),d==="leakyrelu"&&(A.push({type:"float32",data:[h]}),b.uniforms+=" alpha : f32,"),a.runWebGPUProgram(b,g,"float32",A)}var p0e={kernelName:Jr,backendName:"webgpu",kernelFunc:d0e},c0e=class{constructor(e,t){this.variableNames=["A","indices"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=t,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=`gathernd_${e}`,this.sliceDim=e,this.uniforms=`sliceDim : i32, strides : ${Pt(e)},`}getUserCode(){let e;return this.sliceDim>1?e="uniforms.strides[j]":e="uniforms.strides",` ${ue("index")} { if (index < uniforms.size) { let coords = getCoordsFromIndex(index); @@ -7518,7 +7518,7 @@ return a / b;`,TJ=` setOutputAtIndex(index, getA(flattenIndex, coords[1])); } } - `}};function c0e(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]=C.prepareAndValidate(n,r),d=ke({inputs:{x:r},backend:a,attrs:{shape:[u,i]}}),h=ke({inputs:{x:n},backend:a,attrs:{shape:[v.sizeFromShape(n.shape)/p,p]}});if(a.shouldExecuteOnCPU([n,r])||n.dtype==="string"){let x=a.readSync(r.dataId),A=a.bufferSync(n),b=Sde(x,A,n.dtype,u,i,p,c,n.shape,o);return a.makeTensorInfo(l,n.dtype,b.values)}let m=new p0e(i,[u,p]),f=[{type:"int32",data:[i]},{type:"int32",data:c}],g=a.runWebGPUProgram(m,[h,d],h.dtype,f),y=ke({inputs:{x:g},backend:a,attrs:{shape:l}});return a.disposeData(d.dataId),a.disposeData(h.dataId),a.disposeData(g.dataId),y}var h0e={kernelName:Gi,backendName:"webgpu",kernelFunc:c0e},m0e=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=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="gather"}getUserCode(){let e=f0e(this.aShape);return` + `}};function h0e(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]=C.prepareAndValidate(n,r),d=ke({inputs:{x:r},backend:a,attrs:{shape:[u,i]}}),h=ke({inputs:{x:n},backend:a,attrs:{shape:[v.sizeFromShape(n.shape)/p,p]}});if(a.shouldExecuteOnCPU([n,r])||n.dtype==="string"){let x=a.readSync(r.dataId),A=a.bufferSync(n),b=Cde(x,A,n.dtype,u,i,p,c,n.shape,o);return a.makeTensorInfo(l,n.dtype,b.values)}let m=new c0e(i,[u,p]),f=[{type:"int32",data:[i]},{type:"int32",data:c}],g=a.runWebGPUProgram(m,[h,d],h.dtype,f),y=ke({inputs:{x:g},backend:a,attrs:{shape:l}});return a.disposeData(d.dataId),a.disposeData(h.dataId),a.disposeData(g.dataId),y}var m0e={kernelName:Gi,backendName:"webgpu",kernelFunc:h0e},f0e=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=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="gather"}getUserCode(){let e=g0e(this.aShape);return` ${ue("index")} { if (index < uniforms.size) { let resRC = getCoordsFromIndex(index); @@ -7527,13 +7527,13 @@ return a / b;`,TJ=` setOutputAtIndex(index, inBounds * getA(${e})); } } - `}};function f0e(e){let t=["resRC.x","resRC.y","resRC.z","resRC.w"],a=[];for(let n=0;na.disposeData(T.dataId)),a.makeTensorInfo(u.outputShape,I.dtype,I.values)}let f=new m0e(d.shape,m),g=a.runWebGPUProgram(f,[d,h],d.dtype);c.push(g);let y=ke({inputs:{x:g},backend:a,attrs:{shape:u.outputShape}});return c.forEach(x=>a.disposeData(x.dataId)),y}var g0e={kernelName:bu,backendName:"webgpu",kernelFunc:Hk},y0e=ta({opType:Pe.GREATER,cpuKernelImpl:Nde,dtype:"bool"}),x0e={kernelName:Hi,backendName:"webgpu",kernelFunc:y0e},A0e=ta({opType:Pe.GREATER_EQUAL,dtype:"bool",cpuKernelImpl:Tde}),b0e={kernelName:ji,backendName:"webgpu",kernelFunc:A0e};function v0e(e){let{inputs:t,backend:a}=e,{input:n}=t;return Gk(n,!0,a)}var w0e={kernelName:Ap,backendName:"webgpu",kernelFunc:v0e},k0e=at({opType:le.IS_FINITE,dtype:"bool"}),I0e={kernelName:Xi,backendName:"webgpu",kernelFunc:k0e},S0e=at({opType:le.IS_INF,dtype:"bool"}),C0e={kernelName:Ki,backendName:"webgpu",kernelFunc:S0e},T0e=at({opType:le.IS_NAN,dtype:"bool"}),N0e={kernelName:Yi,backendName:"webgpu",kernelFunc:T0e};function R0e(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{alpha:s}=n,i=[{type:"float32",data:[s]}],o=new ed(r.shape,le.LEAKYRELU,"alpha : f32,");return a.runWebGPUProgram(o,[r],"float32",i)}var E0e={kernelName:Zi,backendName:"webgpu",kernelFunc:R0e},M0e=ta({opType:Pe.LESS,dtype:"bool",cpuKernelImpl:Ede}),$0e={kernelName:Ji,backendName:"webgpu",kernelFunc:M0e},P0e=ta({opType:Pe.LESS_EQUAL,dtype:"bool",cpuKernelImpl:Rde}),_0e={kernelName:Qi,backendName:"webgpu",kernelFunc:P0e},F0e=class{constructor(e){this.variableNames=[],this.outputShape=[],this.uniforms="start : f32, step : f32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=[e],this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="linSpace"}getUserCode(){return` + `}};function g0e(e){let t=["resRC.x","resRC.y","resRC.z","resRC.w"],a=[];for(let n=0;na.disposeData(T.dataId)),a.makeTensorInfo(u.outputShape,I.dtype,I.values)}let f=new f0e(d.shape,m),g=a.runWebGPUProgram(f,[d,h],d.dtype);c.push(g);let y=ke({inputs:{x:g},backend:a,attrs:{shape:u.outputShape}});return c.forEach(x=>a.disposeData(x.dataId)),y}var y0e={kernelName:bu,backendName:"webgpu",kernelFunc:jk},x0e=ta({opType:Pe.GREATER,cpuKernelImpl:Rde,dtype:"bool"}),A0e={kernelName:Hi,backendName:"webgpu",kernelFunc:x0e},b0e=ta({opType:Pe.GREATER_EQUAL,dtype:"bool",cpuKernelImpl:Nde}),v0e={kernelName:ji,backendName:"webgpu",kernelFunc:b0e};function w0e(e){let{inputs:t,backend:a}=e,{input:n}=t;return Hk(n,!0,a)}var k0e={kernelName:Ap,backendName:"webgpu",kernelFunc:w0e},I0e=at({opType:le.IS_FINITE,dtype:"bool"}),S0e={kernelName:Xi,backendName:"webgpu",kernelFunc:I0e},C0e=at({opType:le.IS_INF,dtype:"bool"}),T0e={kernelName:Ki,backendName:"webgpu",kernelFunc:C0e},N0e=at({opType:le.IS_NAN,dtype:"bool"}),R0e={kernelName:Yi,backendName:"webgpu",kernelFunc:N0e};function E0e(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{alpha:s}=n,i=[{type:"float32",data:[s]}],o=new ed(r.shape,le.LEAKYRELU,"alpha : f32,");return a.runWebGPUProgram(o,[r],"float32",i)}var M0e={kernelName:Zi,backendName:"webgpu",kernelFunc:E0e},$0e=ta({opType:Pe.LESS,dtype:"bool",cpuKernelImpl:Mde}),P0e={kernelName:Ji,backendName:"webgpu",kernelFunc:$0e},_0e=ta({opType:Pe.LESS_EQUAL,dtype:"bool",cpuKernelImpl:Ede}),F0e={kernelName:Qi,backendName:"webgpu",kernelFunc:_0e},D0e=class{constructor(e){this.variableNames=[],this.outputShape=[],this.uniforms="start : f32, step : f32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=[e],this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="linSpace"}getUserCode(){return` ${ue("index")} { if (index < uniforms.size) { setOutputAtIndex(index, uniforms.start + f32(index) * uniforms.step); } } - `}};function D0e(e){let{backend:t,attrs:a}=e,{start:n,stop:r,num:s}=a,i=(r-n)/(s-1),o=new F0e(s),l=[{type:"float32",data:[n]},{type:"float32",data:[i]}];return t.runWebGPUProgram(o,[],"float32",l)}var O0e={kernelName:eo,backendName:"webgpu",kernelFunc:D0e},z0e=at({opType:le.LOG,cpuKernelImpl:Mde}),L0e={kernelName:to,backendName:"webgpu",kernelFunc:z0e},W0e=at({opType:le.LOG1P}),B0e={kernelName:ao,backendName:"webgpu",kernelFunc:W0e},V0e=ta({opType:Pe.LOGICAL_AND,dtype:"bool"}),U0e={kernelName:no,backendName:"webgpu",kernelFunc:V0e},G0e=at({opType:le.LOGICAL_NOT}),H0e={kernelName:ro,backendName:"webgpu",kernelFunc:G0e},j0e=ta({opType:Pe.LOGICAL_OR}),q0e={kernelName:so,backendName:"webgpu",kernelFunc:j0e},jk=` + `}};function O0e(e){let{backend:t,attrs:a}=e,{start:n,stop:r,num:s}=a,i=(r-n)/(s-1),o=new D0e(s),l=[{type:"float32",data:[n]},{type:"float32",data:[i]}];return t.runWebGPUProgram(o,[],"float32",l)}var z0e={kernelName:eo,backendName:"webgpu",kernelFunc:O0e},L0e=at({opType:le.LOG,cpuKernelImpl:$de}),W0e={kernelName:to,backendName:"webgpu",kernelFunc:L0e},B0e=at({opType:le.LOG1P}),V0e={kernelName:ao,backendName:"webgpu",kernelFunc:B0e},U0e=ta({opType:Pe.LOGICAL_AND,dtype:"bool"}),G0e={kernelName:no,backendName:"webgpu",kernelFunc:U0e},H0e=at({opType:le.LOGICAL_NOT}),j0e={kernelName:ro,backendName:"webgpu",kernelFunc:H0e},q0e=ta({opType:Pe.LOGICAL_OR}),X0e={kernelName:so,backendName:"webgpu",kernelFunc:q0e},qk=` var powValue = 0.0; let basis = uniforms.bias + uniforms.alpha * sum; if (uniforms.beta == 0.5) { @@ -7543,7 +7543,7 @@ return a / b;`,TJ=` } else { powValue = exp(log(basis) * (-uniforms.beta)); } -`,X0e=class{constructor(e){this.outputShape=[],this.variableNames=["x"],this.uniforms="radius : i32, bias : f32, alpha : f32, beta : f32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="lrn"}getUserCode(){return` +`,K0e=class{constructor(e){this.outputShape=[],this.variableNames=["x"],this.uniforms="radius : i32, bias : f32, alpha : f32, beta : f32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="lrn"}getUserCode(){return` ${ue("index")} { if (index < uniforms.size) { let coords = getOutputCoords(); @@ -7561,12 +7561,12 @@ return a / b;`,TJ=` sum = sum + z * z; } } - ${jk} + ${qk} setOutputAtIndex(index, x * powValue); } } - `}},K0e=class{constructor(e,t){this.outputShape=[],this.variableNames=["x"],this.uniforms="radius : i32, bias : f32, alpha : f32, beta : f32,",this.workgroupSize=[256,1,1],this.maxAllowRadius=16,v.assert(t<=this.maxAllowRadius,()=>`Radius must be less than or equal to ${this.maxAllowRadius}, current radius is ${t}`),this.outputShape=e,this.elementsPerWorkgroup=this.workgroupSize[0]-2*this.maxAllowRadius,this.dispatchLayout={x:[3],y:[2],z:[0,1]},this.dispatch=de(this.dispatchLayout,this.outputShape,[this.elementsPerWorkgroup,this.workgroupSize[1],this.workgroupSize[2]]),this.shaderKey="lrn_shared"}getUserCode(){return` + `}},Y0e=class{constructor(e,t){this.outputShape=[],this.variableNames=["x"],this.uniforms="radius : i32, bias : f32, alpha : f32, beta : f32,",this.workgroupSize=[256,1,1],this.maxAllowRadius=16,v.assert(t<=this.maxAllowRadius,()=>`Radius must be less than or equal to ${this.maxAllowRadius}, current radius is ${t}`),this.outputShape=e,this.elementsPerWorkgroup=this.workgroupSize[0]-2*this.maxAllowRadius,this.dispatchLayout={x:[3],y:[2],z:[0,1]},this.dispatch=de(this.dispatchLayout,this.outputShape,[this.elementsPerWorkgroup,this.workgroupSize[1],this.workgroupSize[2]]),this.shaderKey="lrn_shared"}getUserCode(){return` var lrnSub: array; const elementsPerWorkgroup = ${this.elementsPerWorkgroup}; const maxAllowRadius = ${this.maxAllowRadius}; @@ -7594,11 +7594,11 @@ return a / b;`,TJ=` let z = lrnSub[index + i]; sum = sum + z * z; } - ${jk} + ${qk} setOutputAtCoords(b, r, c, d, lrnSub[index] * powValue); } - } `}};function Y0e(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{depthRadius:s,bias:i,alpha:o,beta:l}=n,u;s>16?u=new X0e(r.shape):u=new K0e(r.shape,s);let p=[{type:"int32",data:[s]},{type:"float32",data:[i]},{type:"float32",data:[o]},{type:"float32",data:[l]}];return a.runWebGPUProgram(u,[r],r.dtype,p)}var Z0e={kernelName:io,backendName:"webgpu",kernelFunc:Y0e},J0e=class{constructor(e){this.outputShape=[],this.variableNames=["inputImage","outputImage","dy"],this.uniforms="depthRadius : i32, bias : f32, alpha : f32, beta : f32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="lrn_grad"}getUserCode(){return` + } `}};function Z0e(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{depthRadius:s,bias:i,alpha:o,beta:l}=n,u;s>16?u=new K0e(r.shape):u=new Y0e(r.shape,s);let p=[{type:"int32",data:[s]},{type:"float32",data:[i]},{type:"float32",data:[o]},{type:"float32",data:[l]}];return a.runWebGPUProgram(u,[r],r.dtype,p)}var J0e={kernelName:io,backendName:"webgpu",kernelFunc:Z0e},Q0e=class{constructor(e){this.outputShape=[],this.variableNames=["inputImage","outputImage","dy"],this.uniforms="depthRadius : i32, bias : f32, alpha : f32, beta : f32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="lrn_grad"}getUserCode(){return` ${ue("index")} { if (index < uniforms.size) { let coords = getOutputCoords(); @@ -7648,7 +7648,7 @@ return a / b;`,TJ=` setOutputAtIndex(index, result); } } - `}};function Q0e(e){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 J0e(r.shape),d=[{type:"int32",data:[o]},{type:"float32",data:[l]},{type:"float32",data:[u]},{type:"float32",data:[p]}];return a.runWebGPUProgram(c,[r,s,i],r.dtype,d)}var eme={kernelName:vu,backendName:"webgpu",kernelFunc:Q0e},tme=ta({opType:Pe.MAX,cpuKernelImpl:Pde}),ame={kernelName:lo,backendName:"webgpu",kernelFunc:tme};function nme(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{filterSize:s,strides:i,pad:o,dimRoundingMode:l}=n,u=C.computePool2DInfo(r.shape,s,i,1,o,l);return _k(r,u,"max",a)}var rme={kernelName:uo,backendName:"webgpu",kernelFunc:nme};function sme(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=C.computePool3DInfo(r.shape,s,i,p,o,u,l),d=new Z3(c,"max"),h=[{type:"int32",data:[c.strideDepth,c.strideHeight,c.strideWidth]},{type:"int32",data:[c.padInfo.front,c.padInfo.top,c.padInfo.left]},{type:"int32",data:[c.inDepth,c.inHeight,c.inWidth]},{type:"int32",data:[c.effectiveFilterDepth,c.effectiveFilterHeight,c.effectiveFilterWidth]}];return a.runWebGPUProgram(d,[r],r.dtype,h)}var ime={kernelName:wu,backendName:"webgpu",kernelFunc:sme},ome=class{constructor(e){this.variableNames=["dy","maxPos"],this.uniforms=`strides : vec2, pads : vec2, dilations : vec2, filterDims : vec2, + `}};function eme(e){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 Q0e(r.shape),d=[{type:"int32",data:[o]},{type:"float32",data:[l]},{type:"float32",data:[u]},{type:"float32",data:[p]}];return a.runWebGPUProgram(c,[r,s,i],r.dtype,d)}var tme={kernelName:vu,backendName:"webgpu",kernelFunc:eme},ame=ta({opType:Pe.MAX,cpuKernelImpl:_de}),nme={kernelName:lo,backendName:"webgpu",kernelFunc:ame};function rme(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{filterSize:s,strides:i,pad:o,dimRoundingMode:l}=n,u=C.computePool2DInfo(r.shape,s,i,1,o,l);return Fk(r,u,"max",a)}var sme={kernelName:uo,backendName:"webgpu",kernelFunc:rme};function ime(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=C.computePool3DInfo(r.shape,s,i,p,o,u,l),d=new Z3(c,"max"),h=[{type:"int32",data:[c.strideDepth,c.strideHeight,c.strideWidth]},{type:"int32",data:[c.padInfo.front,c.padInfo.top,c.padInfo.left]},{type:"int32",data:[c.inDepth,c.inHeight,c.inWidth]},{type:"int32",data:[c.effectiveFilterDepth,c.effectiveFilterHeight,c.effectiveFilterWidth]}];return a.runWebGPUProgram(d,[r],r.dtype,h)}var ome={kernelName:wu,backendName:"webgpu",kernelFunc:ime},lme=class{constructor(e){this.variableNames=["dy","maxPos"],this.uniforms=`strides : vec2, pads : vec2, dilations : vec2, filterDims : vec2, outHeight : i32, outWidth : i32`,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.inShape,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="maxPool2DBackprop"}getUserCode(){return` ${ue("index")} { if (index < uniforms.size) { @@ -7693,7 +7693,7 @@ return a / b;`,TJ=` setOutputAtIndex(index, dotProd); } } - `}},lme=class{constructor(e){this.variableNames=["dy","maxPos"],this.uniforms=`strides : vec3, pads : vec3, filterDims : vec3, + `}},ume=class{constructor(e){this.variableNames=["dy","maxPos"],this.uniforms=`strides : vec3, pads : vec3, filterDims : vec3, outDepth : i32, outHeight : i32, outWidth : i32`,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.inShape,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="maxPool3DBackprop"}getUserCode(){return` ${ue("index")} { if (index < uniforms.size) { @@ -7751,7 +7751,7 @@ return a / b;`,TJ=` setOutputAtIndex(index, dotProd); } } - `}};function ume(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=C.computePool3DInfo(i.shape,o,l,c,u,p),h=new Z3(d,"max",!0),m=[{type:"int32",data:[d.strideDepth,d.strideHeight,d.strideWidth]},{type:"int32",data:[d.padInfo.front,d.padInfo.top,d.padInfo.left]},{type:"int32",data:[d.inDepth,d.inHeight,d.inWidth]},{type:"int32",data:[d.effectiveFilterDepth,d.effectiveFilterHeight,d.effectiveFilterWidth]}],f=a.runWebGPUProgram(h,[i],"int32",m),g=new lme(d);m=[{type:"int32",data:[d.strideDepth,d.strideHeight,d.strideWidth]},{type:"int32",data:[d.effectiveFilterDepth-1-d.padInfo.front,d.effectiveFilterHeight-1-d.padInfo.top,d.effectiveFilterWidth-1-d.padInfo.left]},{type:"int32",data:[d.effectiveFilterDepth,d.effectiveFilterHeight,d.effectiveFilterWidth]},{type:"int32",data:[d.outDepth]},{type:"int32",data:[d.outHeight]},{type:"int32",data:[d.outWidth]}];let y=a.runWebGPUProgram(g,[r,f],i.dtype,m);return a.disposeData(f.dataId),y}var dme={kernelName:wp,backendName:"webgpu",kernelFunc:ume};function pme(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,input:s,output:i}=t,o=s;q3([s,i],"maxPoolGrad");let{filterSize:l,strides:u,pad:p,dimRoundingMode:c}=n,d=C.computePool2DInfo(o.shape,l,u,1,p,c),h=new rp(d,"max",!0),m=[{type:"int32",data:[d.strideHeight,d.strideWidth]},{type:"int32",data:[d.padInfo.top,d.padInfo.left]},{type:"int32",data:[d.dilationHeight,d.dilationWidth]},{type:"int32",data:[d.inHeight,d.inWidth]},{type:"int32",data:[d.effectiveFilterHeight,d.effectiveFilterWidth]}],f=a.runWebGPUProgram(h,[o],"int32",m),g=new ome(d);m=[{type:"int32",data:[d.strideHeight,d.strideWidth]},{type:"int32",data:[d.effectiveFilterHeight-1-d.padInfo.top,d.effectiveFilterWidth-1-d.padInfo.left]},{type:"int32",data:[d.dilationHeight,d.dilationWidth]},{type:"int32",data:[d.effectiveFilterHeight,d.effectiveFilterWidth]},{type:"int32",data:[d.outHeight]},{type:"int32",data:[d.outWidth]}];let y=a.runWebGPUProgram(g,[r,f],o.dtype,m);return a.disposeData(f.dataId),y}var cme={kernelName:vp,backendName:"webgpu",kernelFunc:pme};function hme(e){let{inputs:t,backend:a,attrs:n}=e,{filterSize:r,strides:s,pad:i,includeBatchInIndex:o}=n,{x:l}=t;v.assert(l.shape.length===4,()=>`Error in maxPool: input must be rank 4 but got rank ${l.shape.length}.`);let u=[1,1];v.assert(C.eitherStridesOrDilationsAreOne(s,u),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${s} and dilations '${u}'`);let p=C.computePool2DInfo(l.shape,r,s,u,i),c=[{type:"int32",data:[p.strideHeight,p.strideWidth]},{type:"int32",data:[p.padInfo.top,p.padInfo.left]},{type:"int32",data:[p.dilationHeight,p.dilationWidth]},{type:"int32",data:[p.inHeight,p.inWidth]},{type:"int32",data:[p.effectiveFilterHeight,p.effectiveFilterWidth]}],d=new rp(p,"max",!1),h=a.runWebGPUProgram(d,[l],l.dtype,c);d=new rp(p,"max",!0,!0,o);let m=a.runWebGPUProgram(d,[l],"int32",c);return[h,m]}var mme={kernelName:ku,backendName:"webgpu",kernelFunc:hme};function fme(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,keepDims:i}=n;return ul(r,s,i,"min",a)}var gme={kernelName:co,backendName:"webgpu",kernelFunc:fme},yme=ta({opType:Pe.MIN,cpuKernelImpl:_de}),xme={kernelName:ho,backendName:"webgpu",kernelFunc:yme},Ame=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=me(this.outputShape),this.dispatch=de(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=Pt(e),o=e>1?["coords[0]","coords[1]","coords[2]","coords[3]"].slice(0,e):"coords";return` + `}};function dme(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=C.computePool3DInfo(i.shape,o,l,c,u,p),h=new Z3(d,"max",!0),m=[{type:"int32",data:[d.strideDepth,d.strideHeight,d.strideWidth]},{type:"int32",data:[d.padInfo.front,d.padInfo.top,d.padInfo.left]},{type:"int32",data:[d.inDepth,d.inHeight,d.inWidth]},{type:"int32",data:[d.effectiveFilterDepth,d.effectiveFilterHeight,d.effectiveFilterWidth]}],f=a.runWebGPUProgram(h,[i],"int32",m),g=new ume(d);m=[{type:"int32",data:[d.strideDepth,d.strideHeight,d.strideWidth]},{type:"int32",data:[d.effectiveFilterDepth-1-d.padInfo.front,d.effectiveFilterHeight-1-d.padInfo.top,d.effectiveFilterWidth-1-d.padInfo.left]},{type:"int32",data:[d.effectiveFilterDepth,d.effectiveFilterHeight,d.effectiveFilterWidth]},{type:"int32",data:[d.outDepth]},{type:"int32",data:[d.outHeight]},{type:"int32",data:[d.outWidth]}];let y=a.runWebGPUProgram(g,[r,f],i.dtype,m);return a.disposeData(f.dataId),y}var pme={kernelName:wp,backendName:"webgpu",kernelFunc:dme};function cme(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,input:s,output:i}=t,o=s;q3([s,i],"maxPoolGrad");let{filterSize:l,strides:u,pad:p,dimRoundingMode:c}=n,d=C.computePool2DInfo(o.shape,l,u,1,p,c),h=new rp(d,"max",!0),m=[{type:"int32",data:[d.strideHeight,d.strideWidth]},{type:"int32",data:[d.padInfo.top,d.padInfo.left]},{type:"int32",data:[d.dilationHeight,d.dilationWidth]},{type:"int32",data:[d.inHeight,d.inWidth]},{type:"int32",data:[d.effectiveFilterHeight,d.effectiveFilterWidth]}],f=a.runWebGPUProgram(h,[o],"int32",m),g=new lme(d);m=[{type:"int32",data:[d.strideHeight,d.strideWidth]},{type:"int32",data:[d.effectiveFilterHeight-1-d.padInfo.top,d.effectiveFilterWidth-1-d.padInfo.left]},{type:"int32",data:[d.dilationHeight,d.dilationWidth]},{type:"int32",data:[d.effectiveFilterHeight,d.effectiveFilterWidth]},{type:"int32",data:[d.outHeight]},{type:"int32",data:[d.outWidth]}];let y=a.runWebGPUProgram(g,[r,f],o.dtype,m);return a.disposeData(f.dataId),y}var hme={kernelName:vp,backendName:"webgpu",kernelFunc:cme};function mme(e){let{inputs:t,backend:a,attrs:n}=e,{filterSize:r,strides:s,pad:i,includeBatchInIndex:o}=n,{x:l}=t;v.assert(l.shape.length===4,()=>`Error in maxPool: input must be rank 4 but got rank ${l.shape.length}.`);let u=[1,1];v.assert(C.eitherStridesOrDilationsAreOne(s,u),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${s} and dilations '${u}'`);let p=C.computePool2DInfo(l.shape,r,s,u,i),c=[{type:"int32",data:[p.strideHeight,p.strideWidth]},{type:"int32",data:[p.padInfo.top,p.padInfo.left]},{type:"int32",data:[p.dilationHeight,p.dilationWidth]},{type:"int32",data:[p.inHeight,p.inWidth]},{type:"int32",data:[p.effectiveFilterHeight,p.effectiveFilterWidth]}],d=new rp(p,"max",!1),h=a.runWebGPUProgram(d,[l],l.dtype,c);d=new rp(p,"max",!0,!0,o);let m=a.runWebGPUProgram(d,[l],"int32",c);return[h,m]}var fme={kernelName:ku,backendName:"webgpu",kernelFunc:mme};function gme(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,keepDims:i}=n;return ul(r,s,i,"min",a)}var yme={kernelName:co,backendName:"webgpu",kernelFunc:gme},xme=ta({opType:Pe.MIN,cpuKernelImpl:Fde}),Ame={kernelName:ho,backendName:"webgpu",kernelFunc:xme},bme=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=me(this.outputShape),this.dispatch=de(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=Pt(e),o=e>1?["coords[0]","coords[1]","coords[2]","coords[3]"].slice(0,e):"coords";return` ${ue("index")} { if (index < uniforms.size) { let start = ${i}(${t}); @@ -7768,7 +7768,7 @@ return a / b;`,TJ=` setOutputAtIndex(index, getX(${o})); } } - `}},bme={kernelName:mo,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 Ame(n.shape,r,s);return i.runWebGPUProgram(l,[n],n.dtype,o)}},vme=ta({opType:Pe.MOD}),wme={kernelName:fo,backendName:"webgpu",kernelFunc:vme},kme=class{constructor(e,t){this.variableNames=["probs"],this.outputShape=[],this.uniforms="seed : f32, numOutcomes: i32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=[e,t],this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="multinomial"}getUserCode(){return` + `}},vme={kernelName:mo,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 bme(n.shape,r,s);return i.runWebGPUProgram(l,[n],n.dtype,o)}},wme=ta({opType:Pe.MOD}),kme={kernelName:fo,backendName:"webgpu",kernelFunc:wme},Ime=class{constructor(e,t){this.variableNames=["probs"],this.outputShape=[],this.uniforms="seed : f32, numOutcomes: i32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=[e,t],this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="multinomial"}getUserCode(){return` //Based on the work of Dave Hoskins //https://www.shadertoy.com/view/4djSRW fn random (seed : f32, resultUV : vec2) -> f32 { @@ -7801,7 +7801,7 @@ return a / b;`,TJ=` setOutputAtIndexI32(index, uniforms.numOutcomes - 1); } } - `}},Ime=class{constructor(e){this.variableNames=["logits"],this.outputShape=e,this.dispatchLayout=me(this.outputShape),this.dispatch=[this.outputShape[0],1,1],this.outputShape[1]>=4096?this.workgroupSize=[256,1,1]:this.workgroupSize=[64,1,1],this.shaderKey="softmax"}getUserCode(){return` + `}},Sme=class{constructor(e){this.variableNames=["logits"],this.outputShape=e,this.dispatchLayout=me(this.outputShape),this.dispatch=[this.outputShape[0],1,1],this.outputShape[1]>=4096?this.workgroupSize=[256,1,1]:this.workgroupSize=[64,1,1],this.shaderKey="softmax"}getUserCode(){return` var buf : array; var rowMaxShared : f32; var rowSumShared : f32; @@ -7860,7 +7860,7 @@ return a / b;`,TJ=` setOutputAtCoords(row, col, value); } } - `}};function qk(e){let{inputs:t,backend:a,attrs:n}=e,{logits:r}=t,{dim:s}=n,i=ke({inputs:{x:r},backend:a,attrs:{shape:[v.sizeFromShape(r.shape)/r.shape[s],r.shape[s]]}}),o=new Ime(i.shape),l=a.runWebGPUProgram(o,[i],r.dtype),u=ke({inputs:{x:l},backend:a,attrs:{shape:r.shape}});return a.disposeData(i.dataId),a.disposeData(l.dataId),u}var Sme={kernelName:Ho,backendName:"webgpu",kernelFunc:qk};function Cme(e){let{inputs:t,backend:a,attrs:n}=e,{logits:r}=t,{numSamples:s,seed:i,normalized:o}=n,l=o?r:qk({inputs:{logits:r},backend:a,attrs:{dim:r.shape.length-1}}),u=l.shape[0],p=l.shape[1],c=new kme(u,s),d=[{type:"float32",data:[i]},{type:"int32",data:[p]}],h=a.runWebGPUProgram(c,[l],"int32",d);return o||a.disposeData(l.dataId),h}var Tme={kernelName:go,backendName:"webgpu",kernelFunc:Cme};function Nme(e){let{inputs:t,backend:a}=e,{x:n}=t;if(a.shouldExecuteOnCPU([n])){let s=a.tensorMap.get(n.dataId),[i,o]=Dde(s.values,n.shape,n.dtype);return a.makeTensorInfo(o,n.dtype,i)}let r=new ed(n.shape,le.NEG);return a.runWebGPUProgram(r,[n],n.dtype)}var Rme={kernelName:Iu,backendName:"webgpu",kernelFunc:Nme};function Eme(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}=Rn.nonMaxSuppressionV3Impl(u,p,i,o,l);return a.makeTensorInfo([c.length],"int32",new Int32Array(c))}var Mme={kernelName:Ao,backendName:"webgpu",kernelFunc:Eme};function $me(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,m=l,f=u,{selectedIndices:g,selectedScores:y}=Rn.nonMaxSuppressionV5Impl(p,c,d,h,m,f);return[a.makeTensorInfo([g.length],"int32",new Int32Array(g)),a.makeTensorInfo([y.length],"float32",new Float32Array(y))]}var Pme={kernelName:bo,backendName:"webgpu",kernelFunc:$me},_me=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=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="onehot"}getUserCode(){return` + `}};function Xk(e){let{inputs:t,backend:a,attrs:n}=e,{logits:r}=t,{dim:s}=n,i=ke({inputs:{x:r},backend:a,attrs:{shape:[v.sizeFromShape(r.shape)/r.shape[s],r.shape[s]]}}),o=new Sme(i.shape),l=a.runWebGPUProgram(o,[i],r.dtype),u=ke({inputs:{x:l},backend:a,attrs:{shape:r.shape}});return a.disposeData(i.dataId),a.disposeData(l.dataId),u}var Cme={kernelName:Ho,backendName:"webgpu",kernelFunc:Xk};function Tme(e){let{inputs:t,backend:a,attrs:n}=e,{logits:r}=t,{numSamples:s,seed:i,normalized:o}=n,l=o?r:Xk({inputs:{logits:r},backend:a,attrs:{dim:r.shape.length-1}}),u=l.shape[0],p=l.shape[1],c=new Ime(u,s),d=[{type:"float32",data:[i]},{type:"int32",data:[p]}],h=a.runWebGPUProgram(c,[l],"int32",d);return o||a.disposeData(l.dataId),h}var Nme={kernelName:go,backendName:"webgpu",kernelFunc:Tme};function Rme(e){let{inputs:t,backend:a}=e,{x:n}=t;if(a.shouldExecuteOnCPU([n])){let s=a.tensorMap.get(n.dataId),[i,o]=Ode(s.values,n.shape,n.dtype);return a.makeTensorInfo(o,n.dtype,i)}let r=new ed(n.shape,le.NEG);return a.runWebGPUProgram(r,[n],n.dtype)}var Eme={kernelName:Iu,backendName:"webgpu",kernelFunc:Rme};function Mme(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}=Rn.nonMaxSuppressionV3Impl(u,p,i,o,l);return a.makeTensorInfo([c.length],"int32",new Int32Array(c))}var $me={kernelName:Ao,backendName:"webgpu",kernelFunc:Mme};function Pme(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,m=l,f=u,{selectedIndices:g,selectedScores:y}=Rn.nonMaxSuppressionV5Impl(p,c,d,h,m,f);return[a.makeTensorInfo([g.length],"int32",new Int32Array(g)),a.makeTensorInfo([y.length],"float32",new Float32Array(y))]}var _me={kernelName:bo,backendName:"webgpu",kernelFunc:Pme},Fme=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=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="onehot"}getUserCode(){return` ${ue("index")} { if(index < uniforms.size) { let coords = getCoordsFromIndex(index); @@ -7868,7 +7868,7 @@ return a / b;`,TJ=` f32(i32(round(getX(coords.x))) == coords.y))); } } - `}};function Fme(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 _me(u,i),c=ke({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 m=[...r.shape,i],f=ke({inputs:{x:h},backend:a,attrs:{shape:m}});return a.disposeData(h.dataId),f}var Dme={kernelName:vo,backendName:"webgpu",kernelFunc:Fme};function Rh(e){let{inputs:t,backend:a}=e,{x:n}=t;if(n.dtype==="complex64"){let r=tc({inputs:{input:n},backend:a}),s=Rh({inputs:{x:r},backend:a}),i=h0({inputs:{input:n},backend:a}),o=Rh({inputs:{x:i},backend:a}),l=ll({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 Wa({attrs:{shape:n.shape,dtype:n.dtype,value:n.dtype==="string"?"":0},backend:a})}var Ome={kernelName:Bu,backendName:"webgpu",kernelFunc:Rh};function Xk(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=tc({inputs:{input:n},backend:a}),s=Xk({inputs:{x:r},backend:a}),i=h0({inputs:{input:n},backend:a}),o=Rh({inputs:{x:i},backend:a}),l=ll({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 Wa({attrs:{shape:n.shape,dtype:n.dtype,value:1},backend:a})}var zme={kernelName:Cu,backendName:"webgpu",kernelFunc:Xk};function Lme(e){let{inputs:t,backend:a,attrs:n}=e,{axis:r}=n;if(t.length===1)return Y1({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=Y1({inputs:{input:p},backend:a,attrs:{dim:r}});return o.push(c),c}),u=Ok({inputs:l,backend:a,attrs:{axis:r}});return o.forEach(p=>a.disposeData(p.dataId)),u}var Wme={kernelName:Tu,backendName:"webgpu",kernelFunc:Lme};function Kk(e,t=!1){let a=e.length,n=Pt(a),r=e.map((c,d)=>`uniforms.pad${d}[0]`).join(","),s=e.map((c,d)=>`uniforms.pad${d}[0] + uniforms.xShape${a>1?`[${d}]`:""}`).join(","),i=a>1?`${n}(${r})`:`${r}`,o=a>1?`${n}(${s})`:`${s}`,l=a>1?"any(paddedCoords < start)":"paddedCoords < start",u=a>1?"any(paddedCoords >= end)":"paddedCoords >= end",p=a>1?["coords[0]","coords[1]","coords[2]","coords[3]"].slice(0,a):"coords";return` + `}};function Dme(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 Fme(u,i),c=ke({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 m=[...r.shape,i],f=ke({inputs:{x:h},backend:a,attrs:{shape:m}});return a.disposeData(h.dataId),f}var Ome={kernelName:vo,backendName:"webgpu",kernelFunc:Dme};function Rh(e){let{inputs:t,backend:a}=e,{x:n}=t;if(n.dtype==="complex64"){let r=tc({inputs:{input:n},backend:a}),s=Rh({inputs:{x:r},backend:a}),i=h0({inputs:{input:n},backend:a}),o=Rh({inputs:{x:i},backend:a}),l=ll({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 Wa({attrs:{shape:n.shape,dtype:n.dtype,value:n.dtype==="string"?"":0},backend:a})}var zme={kernelName:Bu,backendName:"webgpu",kernelFunc:Rh};function Kk(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=tc({inputs:{input:n},backend:a}),s=Kk({inputs:{x:r},backend:a}),i=h0({inputs:{input:n},backend:a}),o=Rh({inputs:{x:i},backend:a}),l=ll({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 Wa({attrs:{shape:n.shape,dtype:n.dtype,value:1},backend:a})}var Lme={kernelName:Cu,backendName:"webgpu",kernelFunc:Kk};function Wme(e){let{inputs:t,backend:a,attrs:n}=e,{axis:r}=n;if(t.length===1)return Y1({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=Y1({inputs:{input:p},backend:a,attrs:{dim:r}});return o.push(c),c}),u=zk({inputs:l,backend:a,attrs:{axis:r}});return o.forEach(p=>a.disposeData(p.dataId)),u}var Bme={kernelName:Tu,backendName:"webgpu",kernelFunc:Wme};function Yk(e,t=!1){let a=e.length,n=Pt(a),r=e.map((c,d)=>`uniforms.pad${d}[0]`).join(","),s=e.map((c,d)=>`uniforms.pad${d}[0] + uniforms.xShape${a>1?`[${d}]`:""}`).join(","),i=a>1?`${n}(${r})`:`${r}`,o=a>1?`${n}(${s})`:`${s}`,l=a>1?"any(paddedCoords < start)":"paddedCoords < start",u=a>1?"any(paddedCoords >= end)":"paddedCoords >= end",p=a>1?["coords[0]","coords[1]","coords[2]","coords[3]"].slice(0,a):"coords";return` let start = ${i}; let end = ${o}; if (${l} || ${u}) { @@ -7877,14 +7877,14 @@ return a / b;`,TJ=` let coords = paddedCoords - start; setOutputAtIndex(index, getX(${p})); } - `}var Bme=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=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),t.map((a,n)=>{this.uniforms+=` pad${n} : vec2,`}),this.xShape=e,this.shaderKey="pad"}getUserCode(){return` + `}var Vme=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=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),t.map((a,n)=>{this.uniforms+=` pad${n} : vec2,`}),this.xShape=e,this.shaderKey="pad"}getUserCode(){return` ${ue("index")} { if (index < uniforms.size) { let paddedCoords = getCoordsFromIndex(index); - ${Kk(this.xShape)} + ${Yk(this.xShape)} } } - `}},Vme=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 tn({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 Wa({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 Bme(r.shape,s);return a.runWebGPUProgram(l,[r],r.dtype,o)},Ume={kernelName:wo,backendName:"webgpu",kernelFunc:Vme},Gme=ta({opType:Pe.POW}),Hme={kernelName:ko,backendName:"webgpu",kernelFunc:Gme};function jme(e){let{inputs:t,backend:a}=e,{x:n,alpha:r}=t,s=new Th(Pe.PRELU,n.shape,r.shape);return a.runWebGPUProgram(s,[n,r],"float32")}var qme={kernelName:Io,backendName:"webgpu",kernelFunc:jme};function Xme(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,keepDims:i}=n;return ul(r,s,i,"prod",a)}var Kme={kernelName:So,backendName:"webgpu",kernelFunc:Xme},Yme=e=>{let{backend:t,attrs:a}=e,{start:n,stop:r,step:s,dtype:i}=a,o=Lde(n,r,s,i);return t.makeTensorInfo([o.length],i,o)},Zme={kernelName:Nu,backendName:"webgpu",kernelFunc:Yme},Jme=ta({opType:Pe.DIV}),Qme={kernelName:_i,backendName:"webgpu",kernelFunc:Jme},efe=at({opType:le.RECIPROCAL}),tfe={kernelName:Co,backendName:"webgpu",kernelFunc:efe},afe=at({opType:le.RELU}),nfe={kernelName:To,backendName:"webgpu",kernelFunc:afe},rfe=at({opType:le.RELU6}),sfe={kernelName:Eo,backendName:"webgpu",kernelFunc:rfe},ife=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=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="resizeBilinear"}getUserCode(){return` + `}},Ume=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 tn({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 Wa({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 Vme(r.shape,s);return a.runWebGPUProgram(l,[r],r.dtype,o)},Gme={kernelName:wo,backendName:"webgpu",kernelFunc:Ume},Hme=ta({opType:Pe.POW}),jme={kernelName:ko,backendName:"webgpu",kernelFunc:Hme};function qme(e){let{inputs:t,backend:a}=e,{x:n,alpha:r}=t,s=new Th(Pe.PRELU,n.shape,r.shape);return a.runWebGPUProgram(s,[n,r],"float32")}var Xme={kernelName:Io,backendName:"webgpu",kernelFunc:qme};function Kme(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,keepDims:i}=n;return ul(r,s,i,"prod",a)}var Yme={kernelName:So,backendName:"webgpu",kernelFunc:Kme},Zme=e=>{let{backend:t,attrs:a}=e,{start:n,stop:r,step:s,dtype:i}=a,o=Wde(n,r,s,i);return t.makeTensorInfo([o.length],i,o)},Jme={kernelName:Nu,backendName:"webgpu",kernelFunc:Zme},Qme=ta({opType:Pe.DIV}),efe={kernelName:_i,backendName:"webgpu",kernelFunc:Qme},tfe=at({opType:le.RECIPROCAL}),afe={kernelName:Co,backendName:"webgpu",kernelFunc:tfe},nfe=at({opType:le.RELU}),rfe={kernelName:To,backendName:"webgpu",kernelFunc:nfe},sfe=at({opType:le.RELU6}),ife={kernelName:Eo,backendName:"webgpu",kernelFunc:sfe},ofe=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=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="resizeBilinear"}getUserCode(){return` ${ue("index")} { if (index < uniforms.size) { let coords = getCoordsFromIndex(index); @@ -7927,7 +7927,7 @@ return a / b;`,TJ=` setOutputAtIndex(index, newValue); } } - `}};function ofe(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 ife(r.shape,l,u);return a.runWebGPUProgram(h,[r],"float32",d)}var lfe={kernelName:Ro,backendName:"webgpu",kernelFunc:ofe},ufe=class{constructor(e,t){this.variableNames=["dy"],this.uniforms=`effectiveXSize : vec2, effectiveYSize : vec2, heightScale : f32, widthScale : f32, + `}};function lfe(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 ofe(r.shape,l,u);return a.runWebGPUProgram(h,[r],"float32",d)}var ufe={kernelName:Ro,backendName:"webgpu",kernelFunc:lfe},dfe=class{constructor(e,t){this.variableNames=["dy"],this.uniforms=`effectiveXSize : vec2, effectiveYSize : vec2, heightScale : f32, widthScale : f32, invHeightScale : f32, invWidthScale : f32, winHeight : i32, winWidth : i32,`,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.alignCorners=t,this.shaderKey=`resizeBilinearBackprop_${t}`}getUserCode(){return` ${ue("index")} { if (index < uniforms.size) { @@ -8002,7 +8002,7 @@ return a / b;`,TJ=` setOutputAtIndex(index, accumulator); } } - `}};function dfe(e){let{inputs:t,backend:a,attrs:n}=e,{images:r,dy:s}=t,{alignCorners:i}=n,[,o,l]=r.shape,[,u,p]=s.shape,c=[i&&u>1?o-1:o,i&&p>1?l-1:l],d=[i&&u>1?u-1:u,i&&p>1?p-1:p],h=c[0]/d[0],m=c[1]/d[1],f=1/h,g=1/m,y=Math.ceil(f)*2+2,x=Math.ceil(g)*2+2,A=new ufe(r.shape,i),b=[{type:"int32",data:c},{type:"int32",data:d},{type:"float32",data:[h]},{type:"float32",data:[m]},{type:"float32",data:[f]},{type:"float32",data:[g]},{type:"int32",data:[y]},{type:"int32",data:[x]}];return a.runWebGPUProgram(A,[s],s.dtype,b)}var pfe={kernelName:Mu,backendName:"webgpu",kernelFunc:dfe},cfe=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=me(this.outputShape),this.dispatch=de(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",` + `}};function pfe(e){let{inputs:t,backend:a,attrs:n}=e,{images:r,dy:s}=t,{alignCorners:i}=n,[,o,l]=r.shape,[,u,p]=s.shape,c=[i&&u>1?o-1:o,i&&p>1?l-1:l],d=[i&&u>1?u-1:u,i&&p>1?p-1:p],h=c[0]/d[0],m=c[1]/d[1],f=1/h,g=1/m,y=Math.ceil(f)*2+2,x=Math.ceil(g)*2+2,A=new dfe(r.shape,i),b=[{type:"int32",data:c},{type:"int32",data:d},{type:"float32",data:[h]},{type:"float32",data:[m]},{type:"float32",data:[f]},{type:"float32",data:[g]},{type:"int32",data:[y]},{type:"int32",data:[x]}];return a.runWebGPUProgram(A,[s],s.dtype,b)}var cfe={kernelName:Mu,backendName:"webgpu",kernelFunc:pfe},hfe=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=me(this.outputShape),this.dispatch=de(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")} { if (index < uniforms.size) { let coords = getCoordsFromIndex(index); @@ -8033,7 +8033,7 @@ return a / b;`,TJ=` setOutputAtIndex(index, newValue); } } - `}};function hfe(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 cfe(r.shape,l,u,i);return a.runWebGPUProgram(h,[r],r.dtype,d)}var mfe={kernelName:No,backendName:"webgpu",kernelFunc:hfe},ffe=class{constructor(e,t){this.variableNames=["dy"],this.uniforms=`effectiveXSize : vec2, effectiveYSize : vec2, invHeightScale : f32, invWidthScale : f32, + `}};function mfe(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 hfe(r.shape,l,u,i);return a.runWebGPUProgram(h,[r],r.dtype,d)}var ffe={kernelName:No,backendName:"webgpu",kernelFunc:mfe},gfe=class{constructor(e,t){this.variableNames=["dy"],this.uniforms=`effectiveXSize : vec2, effectiveYSize : vec2, invHeightScale : f32, invWidthScale : f32, winHeight : i32, winWidth : i32,`,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.alignCorners=t,this.shaderKey=`resizeNearestNeigborBackprop_${t}`}getUserCode(){return` ${ue("index")} { if (index < uniforms.size) { @@ -8093,7 +8093,7 @@ return a / b;`,TJ=` setOutputAtIndex(index, accumulator); } } - `}};function gfe(e){let{inputs:t,backend:a,attrs:n}=e,{images:r,dy:s}=t,{alignCorners:i}=n,[,o,l]=r.shape,[,u,p]=s.shape,c=[i&&u>1?o-1:o,i&&p>1?l-1:l],d=[i&&u>1?u-1:u,i&&p>1?p-1:p],h=c[0]/d[0],m=c[1]/d[1],f=1/h,g=1/m,y=Math.ceil(f)*2+2,x=Math.ceil(g)*2+2,A=new ffe(r.shape,i),b=[{type:"int32",data:c},{type:"int32",data:d},{type:"float32",data:[f]},{type:"float32",data:[g]},{type:"int32",data:[y]},{type:"int32",data:[x]}];return a.runWebGPUProgram(A,[s],s.dtype,b)}var yfe={kernelName:Eu,backendName:"webgpu",kernelFunc:gfe},xfe=class{constructor(e){this.variableNames=["x"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.uniforms=" axis : vec4,",this.shaderKey="reverse"}getUserCode(){return` + `}};function yfe(e){let{inputs:t,backend:a,attrs:n}=e,{images:r,dy:s}=t,{alignCorners:i}=n,[,o,l]=r.shape,[,u,p]=s.shape,c=[i&&u>1?o-1:o,i&&p>1?l-1:l],d=[i&&u>1?u-1:u,i&&p>1?p-1:p],h=c[0]/d[0],m=c[1]/d[1],f=1/h,g=1/m,y=Math.ceil(f)*2+2,x=Math.ceil(g)*2+2,A=new gfe(r.shape,i),b=[{type:"int32",data:c},{type:"int32",data:d},{type:"float32",data:[f]},{type:"float32",data:[g]},{type:"int32",data:[y]},{type:"int32",data:[x]}];return a.runWebGPUProgram(A,[s],s.dtype,b)}var xfe={kernelName:Eu,backendName:"webgpu",kernelFunc:yfe},Afe=class{constructor(e){this.variableNames=["x"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=me(this.outputShape),this.dispatch=de(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. @@ -8123,7 +8123,7 @@ return a / b;`,TJ=` reverseCoords[1], reverseCoords[2], reverseCoords[3])); } } - `}};function Afe(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{dims:s}=n,i=r.shape.length;if(i===0)return tn({inputs:{x:r},backend:a});let o=r.shape,l=[1,1,1,1];o.forEach((g,y)=>{let x=y+4-i;l[x]=g});let u=v.parseAxisParam(s,r.shape),p=[0,0,0,0];u.forEach(g=>{let y=g+4-i;p[y]=1});let c=[{type:"int32",data:p}],d=ke({inputs:{x:r},backend:a,attrs:{shape:l}}),h=new xfe(l),m=a.runWebGPUProgram(h,[d],d.dtype,c);a.disposeData(d.dataId);let f=ke({inputs:{x:m},backend:a,attrs:{shape:o}});return a.disposeData(m.dataId),f}var bfe={kernelName:Mo,backendName:"webgpu",kernelFunc:Afe},vfe=class{constructor(e,t){this.outputShape=[],this.variableNames=["x"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.uniforms=`centerX : f32, centerY : f32, sinRadians : f32, + `}};function bfe(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{dims:s}=n,i=r.shape.length;if(i===0)return tn({inputs:{x:r},backend:a});let o=r.shape,l=[1,1,1,1];o.forEach((g,y)=>{let x=y+4-i;l[x]=g});let u=v.parseAxisParam(s,r.shape),p=[0,0,0,0];u.forEach(g=>{let y=g+4-i;p[y]=1});let c=[{type:"int32",data:p}],d=ke({inputs:{x:r},backend:a,attrs:{shape:l}}),h=new Afe(l),m=a.runWebGPUProgram(h,[d],d.dtype,c);a.disposeData(d.dataId);let f=ke({inputs:{x:m},backend:a,attrs:{shape:o}});return a.disposeData(m.dataId),f}var vfe={kernelName:Mo,backendName:"webgpu",kernelFunc:bfe},wfe=class{constructor(e,t){this.outputShape=[],this.variableNames=["x"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=me(this.outputShape),this.dispatch=de(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")} { if (index < uniforms.size) { @@ -8144,7 +8144,7 @@ return a / b;`,TJ=` setOutputAtIndex(index, outputValue); } } - `}},wfe={kernelName:el,backendName:"webgpu",kernelFunc:({inputs:e,attrs:t,backend:a})=>{let{image:n}=e,{radians:r,fillValue:s,center:i}=t,o=a,l=new vfe(n.shape,s),[u,p]=C.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)}},kfe=at({opType:le.ROUND}),Ife={kernelName:$o,backendName:"webgpu",kernelFunc:kfe},Sfe=at({opType:le.RSQRT,cpuKernelImpl:Wde}),Cfe={kernelName:Po,backendName:"webgpu",kernelFunc:Sfe},Od=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=me(e),this.dispatch=de(this.dispatchLayout,e,this.workgroupSize),this.sliceDimGreaterThanOne=t>1,this.shaderKey=`scatter_${a}_${n}_${this.sliceDimGreaterThanOne}_${i}_${o}_${r.length}`;let l=Pt(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=` + `}},kfe={kernelName:el,backendName:"webgpu",kernelFunc:({inputs:e,attrs:t,backend:a})=>{let{image:n}=e,{radians:r,fillValue:s,center:i}=t,o=a,l=new wfe(n.shape,s),[u,p]=C.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)}},Ife=at({opType:le.ROUND}),Sfe={kernelName:$o,backendName:"webgpu",kernelFunc:Ife},Cfe=at({opType:le.RSQRT,cpuKernelImpl:Bde}),Tfe={kernelName:Po,backendName:"webgpu",kernelFunc:Cfe},Od=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=me(e),this.dispatch=de(this.dispatchLayout,e,this.workgroupSize),this.sliceDimGreaterThanOne=t>1,this.shaderKey=`scatter_${a}_${n}_${this.sliceDimGreaterThanOne}_${i}_${o}_${r.length}`;let l=Pt(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; } @@ -8175,7 +8175,7 @@ return a / b;`,TJ=` ${this.sumDupeIndices?ys("&result[flatIndex]","updateValue",this.type):"atomicStore(&result[flatIndex], bitcast(updateValue));"} } - }`}};function Tfe(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}=C.calculateShapes(s,r,i),d=[c/u,u];if(c===0)return a.makeTensorInfo(i,r.dtype);let h=ke({inputs:{x:r},backend:a,attrs:{shape:[l,o]}}),m=ke({inputs:{x:s},backend:a,attrs:{shape:[l,u]}}),f=m.dtype,g=Wa({backend:a,attrs:{shape:d,value:0,dtype:f}}),y=v.sizeFromShape(m.shape),x=[{type:"int32",data:[o]},{type:"int32",data:p},{type:"int32",data:[y]}],A=new Od(m.shape,o,h.shape.length,m.shape.length,p,d,f),b=a.runWebGPUProgram(A,[m,h],f,x,g),w=ke({inputs:{x:b},backend:a,attrs:{shape:i}});return a.disposeData(h.dataId),a.disposeData(m.dataId),a.disposeData(b.dataId),w}var Nfe={kernelName:_o,backendName:"webgpu",kernelFunc:Tfe},Rfe=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=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.side=t,this.shaderKey=`search_sorted_${t}`}getUserCode(){return` + }`}};function Nfe(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}=C.calculateShapes(s,r,i),d=[c/u,u];if(c===0)return a.makeTensorInfo(i,r.dtype);let h=ke({inputs:{x:r},backend:a,attrs:{shape:[l,o]}}),m=ke({inputs:{x:s},backend:a,attrs:{shape:[l,u]}}),f=m.dtype,g=Wa({backend:a,attrs:{shape:d,value:0,dtype:f}}),y=v.sizeFromShape(m.shape),x=[{type:"int32",data:[o]},{type:"int32",data:p},{type:"int32",data:[y]}],A=new Od(m.shape,o,h.shape.length,m.shape.length,p,d,f),b=a.runWebGPUProgram(A,[m,h],f,x,g),w=ke({inputs:{x:b},backend:a,attrs:{shape:i}});return a.disposeData(h.dataId),a.disposeData(m.dataId),a.disposeData(b.dataId),w}var Rfe={kernelName:_o,backendName:"webgpu",kernelFunc:Nfe},Efe=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=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.side=t,this.shaderKey=`search_sorted_${t}`}getUserCode(){return` fn findBound(batch: i32, value: f32) -> i32 { var left = i32(0); var right = uniforms.numInputs; @@ -8197,7 +8197,7 @@ return a / b;`,TJ=` setOutputAtIndexI32(index, findBound(coords[0], value)); } } - `}};function Efe(e){let{inputs:t,backend:a,attrs:n}=e,{sortedSequence:r,values:s}=t,{side:i}=n,o=new Rfe([s.shape[0],s.shape[1]],i),l=[{type:"int32",data:[r.shape[1]]}];return a.runWebGPUProgram(o,[r,s],"int32",l)}var Mfe={kernelName:Do,backendName:"webgpu",kernelFunc:Efe},$fe=class{constructor(e,t,a){this.variableNames=["c","a","b"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=t,this.dispatchLayout=me(this.outputShape),this.dispatch=de(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;s4)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{this.uniforms+=` pad${l} : vec2,`}),this.shaderKey=`spaceToBatchND_${r}`}getUserCode(){let e=Pt(this.outputShape.length),t=Ek(this.newDim);return` + `}};function _fe(e){let{inputs:t,backend:a}=e,{condition:n,t:r,e:s}=t,i=new Pfe(n.shape.length,r.shape,r.shape.length);return a.runWebGPUProgram(i,[n,r,s],pa(r.dtype,s.dtype))}var Ffe={kernelName:$u,backendName:"webgpu",kernelFunc:_fe},Dfe=at({opType:le.SELU}),Ofe={kernelName:Oo,backendName:"webgpu",kernelFunc:Dfe},zfe=at({opType:le.SIGMOID}),Lfe={kernelName:Bo,backendName:"webgpu",kernelFunc:zfe},Wfe=at({opType:le.SIGN}),Bfe={kernelName:Wo,backendName:"webgpu",kernelFunc:Wfe},Vfe=at({opType:le.SIN}),Ufe={kernelName:zo,backendName:"webgpu",kernelFunc:Vfe},Gfe=at({opType:le.SINH}),Hfe={kernelName:Lo,backendName:"webgpu",kernelFunc:Gfe},jfe=at({opType:le.SOFTPLUS}),qfe={kernelName:Vo,backendName:"webgpu",kernelFunc:jfe},Xfe=class{constructor(e,t,a,n,r,s){this.variableNames=["x"],this.outputShape=[],this.uniforms="",this.workgroupSize=[64,1,1],this.size=!0;let i=new Array(n.length);for(let o=0;o{this.uniforms+=` pad${l} : vec2,`}),this.shaderKey=`spaceToBatchND_${r}`}getUserCode(){let e=Pt(this.outputShape.length),t=Mk(this.newDim);return` ${lh(this.paddedXShape,"PaddedX")} ${ue("index")} { if(index < uniforms.size) { let coords = getCoordsFromIndex(index); let switchedIndex = getIndexFromCoords${this.outputShape.length}D(${e}(${t}), uniforms.reshapedPaddedXShape); let paddedCoords = getPaddedXCoordsFromIndex(switchedIndex); - ${Kk(this.xShape,!0)} + ${Yk(this.xShape,!0)} } } - `}},Xfe=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 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;xx[0]+r.shape[A]+x[1]),p=C.getReshaped(u,s,o,!1),c=C.getPermuted(p.length,s.length,!1),d=C.getReshapedPermuted(u,s,o,!1),h=v.computeStrides(u),m=new qfe(r.shape,u,l,p,c,h.length),f=[{type:"int32",data:p},{type:"int32",data:h}];l.map(x=>f.push({type:"int32",data:[x[0],x[1]]}));let g=a.runWebGPUProgram(m,[r],r.dtype,f),y=ke({inputs:{x:g},backend:a,attrs:{shape:d}});return a.disposeData(g.dataId),y},Kfe={kernelName:_u,backendName:"webgpu",kernelFunc:Xfe},Yfe=class{constructor(e,t,a){this.variableNames=["input","indices","segmentIds"],this.outputShape=[],this.uniforms="segmentSize : i32, sparseSize : i32,",this.workgroupSize=[64,1,1],this.atomic=!0,this.outputShape=e,this.type=a,this.dispatchLayout=me([t]),this.dispatch=de(this.dispatchLayout,[t],this.workgroupSize),this.shaderKey="sparseSegmentSum"}getUserCode(){return` + `}},Kfe=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 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;xx[0]+r.shape[A]+x[1]),p=C.getReshaped(u,s,o,!1),c=C.getPermuted(p.length,s.length,!1),d=C.getReshapedPermuted(u,s,o,!1),h=v.computeStrides(u),m=new Xfe(r.shape,u,l,p,c,h.length),f=[{type:"int32",data:p},{type:"int32",data:h}];l.map(x=>f.push({type:"int32",data:[x[0],x[1]]}));let g=a.runWebGPUProgram(m,[r],r.dtype,f),y=ke({inputs:{x:g},backend:a,attrs:{shape:d}});return a.disposeData(g.dataId),y},Yfe={kernelName:_u,backendName:"webgpu",kernelFunc:Kfe},Zfe=class{constructor(e,t,a){this.variableNames=["input","indices","segmentIds"],this.outputShape=[],this.uniforms="segmentSize : i32, sparseSize : i32,",this.workgroupSize=[64,1,1],this.atomic=!0,this.outputShape=e,this.type=a,this.dispatchLayout=me([t]),this.dispatch=de(this.dispatchLayout,[t],this.workgroupSize),this.shaderKey="sparseSegmentSum"}getUserCode(){return` ${ue("index")} { if (index < uniforms.sparseSize) { let indexInSegmentIds = index / uniforms.segmentSize; @@ -8232,14 +8232,14 @@ return a / b;`,TJ=` ${ys("&result[outIndex]","value",this.type)} } } - `}},Zfe=class{constructor(e,t){this.variableNames=["segmentIds"],this.outputShape=[],this.workgroupSize=[64,1,1],this.atomic=!0,this.outputShape=[e],this.dispatchLayout=me(t),this.dispatch=de(this.dispatchLayout,t,this.workgroupSize),this.shaderKey="sparseSegmentIdCountProgram"}getUserCode(){return` + `}},Jfe=class{constructor(e,t){this.variableNames=["segmentIds"],this.outputShape=[],this.workgroupSize=[64,1,1],this.atomic=!0,this.outputShape=[e],this.dispatchLayout=me(t),this.dispatch=de(this.dispatchLayout,t,this.workgroupSize),this.shaderKey="sparseSegmentIdCountProgram"}getUserCode(){return` ${ue("index")} { if (index < uniforms.segmentIdsShape) { let segmentId = segmentIds[index]; ${ys("&result[segmentId]","1","int32")} } } - `}},Jfe=class{constructor(e,t){this.variableNames=["segmentSum","sameSegmentIdCount"],this.outputShape=[],this.uniforms="segmentSize : i32",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.type=t,this.dispatchLayout=me(e),this.dispatch=de(this.dispatchLayout,e,this.workgroupSize),this.shaderKey="sparseSegmentMean"}getUserCode(){return` + `}},Qfe=class{constructor(e,t){this.variableNames=["segmentSum","sameSegmentIdCount"],this.outputShape=[],this.uniforms="segmentSize : i32",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.type=t,this.dispatchLayout=me(e),this.dispatch=de(this.dispatchLayout,e,this.workgroupSize),this.shaderKey="sparseSegmentMean"}getUserCode(){return` ${ue("index")} { if (index < uniforms.size) { let segmentId = index / uniforms.segmentSize; @@ -8249,21 +8249,21 @@ return a / b;`,TJ=` } } } - `}};function Yk(e,t,a,n=!1,r){let s=v.sizeFromShape(e.shape)/e.shape[0],i=e.dtype,o=v.sizeFromShape(t.shape),l=r.readSync(a.dataId),u=o>0?l[o-1]+1:0,p,c=e.shape.slice();c[0]=u;let d=o*s,h=Wa({backend:r,attrs:{shape:c,value:0,dtype:i}});p=new Yfe(c,d,i);let m=[{type:"int32",data:[s]},{type:"int32",data:[d]}],f=r.runWebGPUProgram(p,[e,t,a],i,m,h);if(n)return f;let g=Wa({backend:r,attrs:{shape:[u],value:0,dtype:"int32"}});p=new Zfe(u,a.shape);let y=r.runWebGPUProgram(p,[a],"int32",null,g),x=Wa({backend:r,attrs:{shape:c,value:0,dtype:i}});p=new Jfe(c,i),m=[{type:"int32",data:[s]}];let A=r.runWebGPUProgram(p,[f,y],i,m,x);return r.disposeData(f.dataId),r.disposeData(y.dataId),A}function Qfe(e){let{inputs:t,backend:a}=e,{data:n,indices:r,segmentIds:s}=t;return Yk(n,r,s,!1,a)}var e2e={kernelName:Ou,backendName:"webgpu",kernelFunc:Qfe};function t2e(e){let{inputs:t,backend:a}=e,{data:n,indices:r,segmentIds:s}=t;return Yk(n,r,s,!0,a)}var a2e={kernelName:zu,backendName:"webgpu",kernelFunc:t2e},n2e=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;n0?l[o-1]+1:0,p,c=e.shape.slice();c[0]=u;let d=o*s,h=Wa({backend:r,attrs:{shape:c,value:0,dtype:i}});p=new Zfe(c,d,i);let m=[{type:"int32",data:[s]},{type:"int32",data:[d]}],f=r.runWebGPUProgram(p,[e,t,a],i,m,h);if(n)return f;let g=Wa({backend:r,attrs:{shape:[u],value:0,dtype:"int32"}});p=new Jfe(u,a.shape);let y=r.runWebGPUProgram(p,[a],"int32",null,g),x=Wa({backend:r,attrs:{shape:c,value:0,dtype:i}});p=new Qfe(c,i),m=[{type:"int32",data:[s]}];let A=r.runWebGPUProgram(p,[f,y],i,m,x);return r.disposeData(f.dataId),r.disposeData(y.dataId),A}function e2e(e){let{inputs:t,backend:a}=e,{data:n,indices:r,segmentIds:s}=t;return Zk(n,r,s,!1,a)}var t2e={kernelName:Ou,backendName:"webgpu",kernelFunc:e2e};function a2e(e){let{inputs:t,backend:a}=e,{data:n,indices:r,segmentIds:s}=t;return Zk(n,r,s,!0,a)}var n2e={kernelName:zu,backendName:"webgpu",kernelFunc:a2e},r2e=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=_e(r.shape,r.dtype,l),p=qde(u,s);return a.makeTensorInfo(p.shape,p.dtype,p.values)}let i=new n2e(r.shape,s);return a.runWebGPUProgram(i,[r],r.dtype)}var s2e={kernelName:us,backendName:"webgpu",kernelFunc:J3};function i2e(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}=C.calculateShapes(s,r,o),h=!1;if(s.dtype==="string"){let N=a.bufferSync(r),M=a.bufferSync(s),$=v.decodeString(a.readSync(i.dataId)[0]),E=Bde(N,M,o,d,p,u,l,c,$,h);return a.makeTensorInfo(o,E.dtype,E.values)}let m=[d/p,p],f=ke({inputs:{x:r},backend:a,attrs:{shape:[u,l]}}),g=s.shape.length?ke({inputs:{x:s},backend:a,attrs:{shape:[u,p]}}):tn({inputs:{x:s},backend:a}),y=g.dtype,x=a.makeTensorInfo([],y,v.makeZerosTypedArray(1,y)),A=ke({inputs:{x:i},backend:a,attrs:{shape:Array(m.length).fill(1)}}),b=J3({inputs:{x:A},backend:a,attrs:{reps:m}}),w=v.sizeFromShape([u,p]),I=[{type:"int32",data:[l]},{type:"int32",data:c},{type:"int32",data:[w]}];switch(u){case 0:break;case 1:{let N=new Od([u,p],l,f.shape.length,g.shape.length,c,m,y,h);a.runWebGPUProgram(N,[g,f],y,I,b)}break;default:{let N=new Od([u,p],l,f.shape.length,x.shape.length,c,m,y,h);a.runWebGPUProgram(N,[x,f],y,I,b)}{let N=new Od([u,p],l,f.shape.length,g.shape.length,c,m,y);a.runWebGPUProgram(N,[g,f],y,I,b)}}let T=ke({inputs:{x:b},backend:a,attrs:{shape:o}});return a.disposeData(f.dataId),a.disposeData(g.dataId),a.disposeData(A.dataId),a.disposeData(x.dataId),a.disposeData(b.dataId),T}var o2e={kernelName:jo,backendName:"webgpu",kernelFunc:i2e};function l2e(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=C.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 m=td({inputs:{x:r},backend:a,attrs:{begin:p,size:h}});return p[o]+=d,m})}var u2e={kernelName:Fu,backendName:"webgpu",kernelFunc:l2e},d2e=at({opType:le.SQRT}),p2e={kernelName:Uo,backendName:"webgpu",kernelFunc:d2e},c2e={kernelName:Sp,backendName:"webgpu",kernelFunc:({inputs:e,backend:t})=>{let{x:a}=e,n=t,r=new ed(a.shape,le.SQUARE);return n.runWebGPUProgram(r,[a],a.dtype)}},h2e=ta({opType:Pe.SQUARED_DIFFERENCE}),m2e={kernelName:qo,backendName:"webgpu",kernelFunc:h2e};function f2e({inputs:e,attrs:t,backend:a}){let{x:n}=e,r=new ed(n.shape,le.STEP,"stepAlpha : f32,"),s=[{type:"float32",data:[t.alpha]}];return a.runWebGPUProgram(r,[n],n.dtype,s)}var g2e={kernelName:ds,backendName:"webgpu",kernelFunc:f2e},y2e=class{constructor(e){this.variableNames=["x"],this.workPerThread=1,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize,[this.workPerThread,1,1]);let t=Pt(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` + `}};function s2e(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=_e(r.shape,r.dtype,l),p=Xde(u,s);return a.makeTensorInfo(p.shape,p.dtype,p.values)}let i=new r2e(r.shape,s);return a.runWebGPUProgram(i,[r],r.dtype)}var i2e={kernelName:us,backendName:"webgpu",kernelFunc:J3};function o2e(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}=C.calculateShapes(s,r,o),h=!1;if(s.dtype==="string"){let N=a.bufferSync(r),M=a.bufferSync(s),$=v.decodeString(a.readSync(i.dataId)[0]),E=Vde(N,M,o,d,p,u,l,c,$,h);return a.makeTensorInfo(o,E.dtype,E.values)}let m=[d/p,p],f=ke({inputs:{x:r},backend:a,attrs:{shape:[u,l]}}),g=s.shape.length?ke({inputs:{x:s},backend:a,attrs:{shape:[u,p]}}):tn({inputs:{x:s},backend:a}),y=g.dtype,x=a.makeTensorInfo([],y,v.makeZerosTypedArray(1,y)),A=ke({inputs:{x:i},backend:a,attrs:{shape:Array(m.length).fill(1)}}),b=J3({inputs:{x:A},backend:a,attrs:{reps:m}}),w=v.sizeFromShape([u,p]),I=[{type:"int32",data:[l]},{type:"int32",data:c},{type:"int32",data:[w]}];switch(u){case 0:break;case 1:{let N=new Od([u,p],l,f.shape.length,g.shape.length,c,m,y,h);a.runWebGPUProgram(N,[g,f],y,I,b)}break;default:{let N=new Od([u,p],l,f.shape.length,x.shape.length,c,m,y,h);a.runWebGPUProgram(N,[x,f],y,I,b)}{let N=new Od([u,p],l,f.shape.length,g.shape.length,c,m,y);a.runWebGPUProgram(N,[g,f],y,I,b)}}let T=ke({inputs:{x:b},backend:a,attrs:{shape:o}});return a.disposeData(f.dataId),a.disposeData(g.dataId),a.disposeData(A.dataId),a.disposeData(x.dataId),a.disposeData(b.dataId),T}var l2e={kernelName:jo,backendName:"webgpu",kernelFunc:o2e};function u2e(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=C.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 m=td({inputs:{x:r},backend:a,attrs:{begin:p,size:h}});return p[o]+=d,m})}var d2e={kernelName:Fu,backendName:"webgpu",kernelFunc:u2e},p2e=at({opType:le.SQRT}),c2e={kernelName:Uo,backendName:"webgpu",kernelFunc:p2e},h2e={kernelName:Sp,backendName:"webgpu",kernelFunc:({inputs:e,backend:t})=>{let{x:a}=e,n=t,r=new ed(a.shape,le.SQUARE);return n.runWebGPUProgram(r,[a],a.dtype)}},m2e=ta({opType:Pe.SQUARED_DIFFERENCE}),f2e={kernelName:qo,backendName:"webgpu",kernelFunc:m2e};function g2e({inputs:e,attrs:t,backend:a}){let{x:n}=e,r=new ed(n.shape,le.STEP,"stepAlpha : f32,"),s=[{type:"float32",data:[t.alpha]}];return a.runWebGPUProgram(r,[n],n.dtype,s)}var y2e={kernelName:ds,backendName:"webgpu",kernelFunc:g2e},x2e=class{constructor(e){this.variableNames=["x"],this.workPerThread=1,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize,[this.workPerThread,1,1]);let t=Pt(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` ${ue("index")} { if (index < uniforms.size) { let coords = getCoordsFromIndex(index); setOutputAtIndex(index, getX(${t})); } } - `}};function x2e(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:m,isIdentity:f,sliceDim0:g,isSimpleSlice:y,begin:x,end:A,strides:b}=Nt.sliceInfo(r.shape,s,i,o,l,u,p,c,d),w;if(f)w=ke({inputs:{x:r},backend:a,attrs:{shape:m}});else if(g||y){v.assert(r.shape.length>=1,()=>`Input must have rank at least 1, got: ${r.shape.length}`);let I=Nt.computeOutShape(x,A,b),T=td({inputs:{x:r},backend:a,attrs:{begin:x,size:I}});w=ke({inputs:{x:T},backend:a,attrs:{shape:m}}),a.disposeData(T.dataId)}else if(a.shouldExecuteOnCPU([r])){let I=a.readSync(r.dataId),T=_e(r.shape,r.dtype,I),N=Gde(h,T,b,x);w=a.makeTensorInfo(m,r.dtype,N.values)}else{let I=new y2e(h),T=[{type:"int32",data:x},{type:"int32",data:b}],N=a.runWebGPUProgram(I,[r],r.dtype,T);w=ke({inputs:{x:N},backend:a,attrs:{shape:m}}),a.disposeData(N.dataId)}return w}var A2e={kernelName:Xo,backendName:"webgpu",kernelFunc:x2e};function b2e(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),[m,f]=Hde(d,h,r,s,i,o,l,u);return[a.makeTensorInfo([m.length],"string",m),a.makeTensorInfo(c.shape,"int32",f)]}var v2e={kernelName:Lu,backendName:"webgpu",kernelFunc:b2e},w2e=ta({opType:Pe.SUB,cpuKernelImpl:jde,supportsComplex:!0}),k2e={kernelName:Ko,backendName:"webgpu",kernelFunc:w2e},I2e=at({opType:le.TAN}),S2e={kernelName:Yo,backendName:"webgpu",kernelFunc:I2e},C2e=at({opType:le.TANH}),T2e={kernelName:Zo,backendName:"webgpu",kernelFunc:C2e};function N2e(e){let{inputs:t,backend:a,attrs:n}=e,{tensor:r,indices:s,updates:i}=t,{}=n,{sliceRank:o,numUpdates:l,sliceSize:u,strides:p,outputSize:c}=C.calculateShapes(i,s,r.shape),d=[c/u,u];if(c===0)return a.makeTensorInfo(r.shape,s.dtype);let h=[],m=ke({inputs:{x:s},backend:a,attrs:{shape:[l,o]}});h.push(m);let f=ke({inputs:{x:i},backend:a,attrs:{shape:[l,u]}});h.push(f);let g=ke({inputs:{x:r},backend:a,attrs:{shape:d}});h.push(g);let y=J3({inputs:{x:g},backend:a,attrs:{reps:Array(d.length).fill(1)}}),x=new Od([l,u],o,m.shape.length,f.shape.length,p,d,r.dtype,!1),A=v.sizeFromShape([l,u]),b=[{type:"int32",data:[o]},{type:"int32",data:p},{type:"int32",data:[A]}],w=a.runWebGPUProgram(x,[f,m],g.dtype,b,y);h.push(w);let I=ke({inputs:{x:w},backend:a,attrs:{shape:r.shape}});return h.forEach(T=>a.disposeData(T.dataId)),I}var R2e={kernelName:Fo,backendName:"webgpu",kernelFunc:N2e},E2e=class{constructor(e){this.variableNames=["x","indices"],this.workgroupSize=[256,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.uniforms=`inputSize : i32, firstPass : i32, negativeInf : f32, + `}};function A2e(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:m,isIdentity:f,sliceDim0:g,isSimpleSlice:y,begin:x,end:A,strides:b}=Nt.sliceInfo(r.shape,s,i,o,l,u,p,c,d),w;if(f)w=ke({inputs:{x:r},backend:a,attrs:{shape:m}});else if(g||y){v.assert(r.shape.length>=1,()=>`Input must have rank at least 1, got: ${r.shape.length}`);let I=Nt.computeOutShape(x,A,b),T=td({inputs:{x:r},backend:a,attrs:{begin:x,size:I}});w=ke({inputs:{x:T},backend:a,attrs:{shape:m}}),a.disposeData(T.dataId)}else if(a.shouldExecuteOnCPU([r])){let I=a.readSync(r.dataId),T=_e(r.shape,r.dtype,I),N=Hde(h,T,b,x);w=a.makeTensorInfo(m,r.dtype,N.values)}else{let I=new x2e(h),T=[{type:"int32",data:x},{type:"int32",data:b}],N=a.runWebGPUProgram(I,[r],r.dtype,T);w=ke({inputs:{x:N},backend:a,attrs:{shape:m}}),a.disposeData(N.dataId)}return w}var b2e={kernelName:Xo,backendName:"webgpu",kernelFunc:A2e};function v2e(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),[m,f]=jde(d,h,r,s,i,o,l,u);return[a.makeTensorInfo([m.length],"string",m),a.makeTensorInfo(c.shape,"int32",f)]}var w2e={kernelName:Lu,backendName:"webgpu",kernelFunc:v2e},k2e=ta({opType:Pe.SUB,cpuKernelImpl:qde,supportsComplex:!0}),I2e={kernelName:Ko,backendName:"webgpu",kernelFunc:k2e},S2e=at({opType:le.TAN}),C2e={kernelName:Yo,backendName:"webgpu",kernelFunc:S2e},T2e=at({opType:le.TANH}),N2e={kernelName:Zo,backendName:"webgpu",kernelFunc:T2e};function R2e(e){let{inputs:t,backend:a,attrs:n}=e,{tensor:r,indices:s,updates:i}=t,{}=n,{sliceRank:o,numUpdates:l,sliceSize:u,strides:p,outputSize:c}=C.calculateShapes(i,s,r.shape),d=[c/u,u];if(c===0)return a.makeTensorInfo(r.shape,s.dtype);let h=[],m=ke({inputs:{x:s},backend:a,attrs:{shape:[l,o]}});h.push(m);let f=ke({inputs:{x:i},backend:a,attrs:{shape:[l,u]}});h.push(f);let g=ke({inputs:{x:r},backend:a,attrs:{shape:d}});h.push(g);let y=J3({inputs:{x:g},backend:a,attrs:{reps:Array(d.length).fill(1)}}),x=new Od([l,u],o,m.shape.length,f.shape.length,p,d,r.dtype,!1),A=v.sizeFromShape([l,u]),b=[{type:"int32",data:[o]},{type:"int32",data:p},{type:"int32",data:[A]}],w=a.runWebGPUProgram(x,[f,m],g.dtype,b,y);h.push(w);let I=ke({inputs:{x:w},backend:a,attrs:{shape:r.shape}});return h.forEach(T=>a.disposeData(T.dataId)),I}var E2e={kernelName:Fo,backendName:"webgpu",kernelFunc:R2e},M2e=class{constructor(e){this.variableNames=["x","indices"],this.workgroupSize=[256,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=me(this.outputShape),this.dispatch=de(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")} { if (index < uniforms.size) { @@ -8331,7 +8331,7 @@ return a / b;`,TJ=` } } } - `}},M2e=class{constructor(e){this.variableNames=["x","indices"],this.workgroupSize=[256,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.uniforms="inputSize : i32, firstPass : i32, k : i32,",this.shaderKey="merge"}getUserCode(){return` + `}},$2e=class{constructor(e){this.variableNames=["x","indices"],this.workgroupSize=[256,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.uniforms="inputSize : i32, firstPass : i32, k : i32,",this.shaderKey="merge"}getUserCode(){return` ${ue("index")} { if (index < uniforms.size) { let outC = getCoordsFromIndex(index); @@ -8390,7 +8390,7 @@ return a / b;`,TJ=` } } } - `}};function Dl(e,t){t!==null&&e.disposeData(t.dataId)}function pA(e){let t=1;for(;th===null?[p,p]:[p,h],f=(b,w,I)=>{let T=m(),N=new E2e(I),M=[{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,T,"int32",M),Dl(a,$)};for(let b=1;b=1;I/=2)f(w,I,[u,d])}for(let b=d;b>c;b/=2){let w=m(),I=new M2e([u,b/2]),T=[{type:"int32",data:[l]},{type:"int32",data:[h===null?1:0]},{type:"int32",data:[c]}],N=h;h=a.runWebGPUProgram(I,w,"int32",T),Dl(a,N);let M=c/2,$=M*2;for(let E=M;E>=1;E/=2)f($,E,h.shape)}let g=h;h=td({inputs:{x:h},backend:a,attrs:{begin:0,size:[u,s]}}),Dl(a,g);let y=Hk({inputs:{x:p,indices:h},backend:a,attrs:{axis:1,batchDims:1}});Dl(a,p);let x=o.slice(0,-1);x.push(s),g=h,h=ke({inputs:{x:h},attrs:{shape:x},backend:a}),Dl(a,g);let A=y;return y=ke({inputs:{x:y},attrs:{shape:x},backend:a}),Dl(a,A),[y,h]}var P2e={kernelName:Jo,backendName:"webgpu",kernelFunc:$2e},_2e=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=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="transform"}getUserCode(){return` + `}};function Dl(e,t){t!==null&&e.disposeData(t.dataId)}function cA(e){let t=1;for(;th===null?[p,p]:[p,h],f=(b,w,I)=>{let T=m(),N=new M2e(I),M=[{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,T,"int32",M),Dl(a,$)};for(let b=1;b=1;I/=2)f(w,I,[u,d])}for(let b=d;b>c;b/=2){let w=m(),I=new $2e([u,b/2]),T=[{type:"int32",data:[l]},{type:"int32",data:[h===null?1:0]},{type:"int32",data:[c]}],N=h;h=a.runWebGPUProgram(I,w,"int32",T),Dl(a,N);let M=c/2,$=M*2;for(let E=M;E>=1;E/=2)f($,E,h.shape)}let g=h;h=td({inputs:{x:h},backend:a,attrs:{begin:0,size:[u,s]}}),Dl(a,g);let y=jk({inputs:{x:p,indices:h},backend:a,attrs:{axis:1,batchDims:1}});Dl(a,p);let x=o.slice(0,-1);x.push(s),g=h,h=ke({inputs:{x:h},attrs:{shape:x},backend:a}),Dl(a,g);let A=y;return y=ke({inputs:{x:y},attrs:{shape:x},backend:a}),Dl(a,A),[y,h]}var _2e={kernelName:Jo,backendName:"webgpu",kernelFunc:P2e},F2e=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=me(this.outputShape),this.dispatch=de(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) { @@ -8506,7 +8506,7 @@ return a / b;`,TJ=` setOutputAtIndex(index, outputValue); } } - `}};function F2e(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,[m,f]=u!=null?u:[c,d],g=[p,m,f,h],y=new _2e(g),x=i==="nearest"?1:2,A;switch(o){case"constant":A=1;break;case"reflect":A=2;break;case"wrap":A=3;break;case"nearest":A=4;break;default:A=1;break}let b=[{type:"int32",data:[x]},{type:"int32",data:[A]},{type:"float32",data:[l]}];return a.runWebGPUProgram(y,[r,s],"float32",b)}var D2e={kernelName:Qo,backendName:"webgpu",kernelFunc:F2e};function O2e(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 f=0;fa.disposeData(f.dataId)),m}var z2e={kernelName:Wu,backendName:"webgpu",kernelFunc:O2e},L2e=class{constructor(e,t,a){if(this.outputShape=[],this.variableNames=["x","segmentIds"],this.uniforms="numSegments : i32, xSize: i32,",this.workgroupSize=[64,1,1],this.atomic=!0,this.outputShape=t,this.dispatchLayout=me(e),this.dispatch=de(this.dispatchLayout,e,this.workgroupSize),a!=="float32"&&a!=="int32")throw new Error(`UnsortedSegmentSum only supports float32 and int32 + `}};function D2e(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,[m,f]=u!=null?u:[c,d],g=[p,m,f,h],y=new F2e(g),x=i==="nearest"?1:2,A;switch(o){case"constant":A=1;break;case"reflect":A=2;break;case"wrap":A=3;break;case"nearest":A=4;break;default:A=1;break}let b=[{type:"int32",data:[x]},{type:"int32",data:[A]},{type:"float32",data:[l]}];return a.runWebGPUProgram(y,[r,s],"float32",b)}var O2e={kernelName:Qo,backendName:"webgpu",kernelFunc:D2e};function z2e(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 f=0;fa.disposeData(f.dataId)),m}var L2e={kernelName:Wu,backendName:"webgpu",kernelFunc:z2e},W2e=class{constructor(e,t,a){if(this.outputShape=[],this.variableNames=["x","segmentIds"],this.uniforms="numSegments : i32, xSize: i32,",this.workgroupSize=[64,1,1],this.atomic=!0,this.outputShape=t,this.dispatchLayout=me(e),this.dispatch=de(this.dispatchLayout,e,this.workgroupSize),a!=="float32"&&a!=="int32")throw new Error(`UnsortedSegmentSum only supports float32 and int32 types, does not support ${a} type.`);this.type=a,this.shaderKey="unsortedSegmentSum"}getUserCode(){return` ${ue("index")} { if (index < uniforms.xSize) { @@ -8523,7 +8523,7 @@ return a / b;`,TJ=` } } } - `}};function W2e(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,segmentIds:s}=t,{numSegments:i}=n,o=r.shape.length,l=[],u=0,p=C.getAxesPermutation([u],o),c=r;p!=null&&(c=nr({inputs:{x:r},backend:a,attrs:{perm:p}}),l.push(c),u=C.getInnerMostAxes(1,o)[0]);let d=C.segment_util.computeOutShape(c.shape,u,i),h=v.sizeFromShape([c.shape[u]]),m=ke({inputs:{x:c},backend:a,attrs:{shape:[-1,h]}});l.push(m);let f=r.dtype,g=[m.shape[0],i],y=Wa({backend:a,attrs:{shape:g,value:0,dtype:f}}),x=new L2e(m.shape,g,f),A=[{type:"int32",data:[i]},{type:"int32",data:[v.sizeFromShape(m.shape)]}],b=a.runWebGPUProgram(x,[m,s],f,A,y),w=ke({inputs:{x:b},backend:a,attrs:{shape:d}});l.push(b);let I=w;if(p!=null){l.push(w);let T=C.getUndoAxesPermutation(p);I=nr({inputs:{x:I},backend:a,attrs:{perm:T}})}return l.forEach(T=>a.disposeData(T.dataId)),I}var B2e={kernelName:Ep,backendName:"webgpu",kernelFunc:W2e},V2e=[hde,Zde,Qde,tpe,npe,ipe,hpe,fpe,ype,Ape,vpe,kpe,Spe,Tpe,Rpe,_pe,Dpe,Wpe,Vpe,Gpe,Kpe,Qpe,ace,ice,lce,cce,fde,fce,Ace,Tce,Pce,Oce,Wce,Vce,Gce,jce,Xce,Zce,Qce,the,nhe,ihe,hhe,fhe,uhe,xhe,vhe,She,The,Ehe,_he,Dhe,zhe,Whe,Vhe,Ghe,Hhe,qhe,Khe,dde,Zhe,n0e,Qhe,t0e,i0e,l0e,d0e,h0e,g0e,x0e,b0e,mde,w0e,yce,I0e,C0e,N0e,E0e,$0e,_0e,O0e,B0e,L0e,U0e,H0e,q0e,Z0e,eme,Mpe,ame,rme,cme,ime,dme,mme,$pe,gme,xme,bme,wme,Tme,Mhe,Rme,Mme,Pme,nce,Dme,zme,Wme,Ume,Hme,qme,Kme,Zme,rce,Qme,tfe,nfe,sfe,pde,lfe,pfe,mfe,yfe,bfe,wfe,Ife,Cfe,Nfe,Mfe,_fe,Dfe,zfe,Wfe,Vfe,Gfe,qpe,g2e,A2e,v2e,Sme,jfe,Kfe,e2e,a2e,o2e,u2e,p2e,c2e,m2e,k2e,$he,S2e,T2e,R2e,s2e,P2e,D2e,upe,z2e,B2e,Ome];for(let e of V2e)xn(e);var cA="4.17.0",U2e="4.17.0",G2e="4.17.0",H2e="4.17.0",j2e="4.17.0",q2e="4.17.0",ac={tfjs:cA,"tfjs-core":cA,"tfjs-converter":U2e,"tfjs-backend-cpu":G2e,"tfjs-backend-webgl":H2e,"tfjs-backend-wasm":j2e,"tfjs-backend-webgpu":q2e},Q3=void 0;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 Zk(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 ae=()=>typeof performance!="undefined"?performance.now():parseInt((Number(process.hrtime.bigint())/1e3/1e3).toString());function ey(e,t,a="config",n=[]){for(let r of Object.keys(t))if(typeof t[r]=="object")ey(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 Et(...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]=Et(s,i):a[r]=i}),a),{})}var dl={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:!1,maxDetected:1,skipFrames:99,skipTime:2500,minConfidence:.2,minSize:0,iouThreshold:.1,scale:1.4,mask:!1,return:!1},mesh:{enabled:!0,modelPath:"facemesh.json",keepInvalid:!1},attention:{enabled:!1,modelPath:"facemesh-attention.json"},iris:{enabled:!0,scale:2.3,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-lite.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 Jk=` + `}};function B2e(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,segmentIds:s}=t,{numSegments:i}=n,o=r.shape.length,l=[],u=0,p=C.getAxesPermutation([u],o),c=r;p!=null&&(c=nr({inputs:{x:r},backend:a,attrs:{perm:p}}),l.push(c),u=C.getInnerMostAxes(1,o)[0]);let d=C.segment_util.computeOutShape(c.shape,u,i),h=v.sizeFromShape([c.shape[u]]),m=ke({inputs:{x:c},backend:a,attrs:{shape:[-1,h]}});l.push(m);let f=r.dtype,g=[m.shape[0],i],y=Wa({backend:a,attrs:{shape:g,value:0,dtype:f}}),x=new W2e(m.shape,g,f),A=[{type:"int32",data:[i]},{type:"int32",data:[v.sizeFromShape(m.shape)]}],b=a.runWebGPUProgram(x,[m,s],f,A,y),w=ke({inputs:{x:b},backend:a,attrs:{shape:d}});l.push(b);let I=w;if(p!=null){l.push(w);let T=C.getUndoAxesPermutation(p);I=nr({inputs:{x:I},backend:a,attrs:{perm:T}})}return l.forEach(T=>a.disposeData(T.dataId)),I}var V2e={kernelName:Ep,backendName:"webgpu",kernelFunc:B2e},U2e=[mde,Jde,epe,ape,rpe,ope,mpe,gpe,xpe,bpe,wpe,Ipe,Cpe,Npe,Epe,Fpe,Ope,Bpe,Upe,Hpe,Ype,ece,nce,oce,uce,hce,gde,gce,bce,Nce,_ce,zce,Bce,Uce,Hce,qce,Kce,Jce,ehe,ahe,rhe,ohe,mhe,ghe,dhe,Ahe,whe,Che,Nhe,Mhe,Fhe,Ohe,Lhe,Bhe,Uhe,Hhe,jhe,Xhe,Yhe,pde,Jhe,r0e,e0e,a0e,o0e,u0e,p0e,m0e,y0e,A0e,v0e,fde,k0e,xce,S0e,T0e,R0e,M0e,P0e,F0e,z0e,V0e,W0e,G0e,j0e,X0e,J0e,tme,$pe,nme,sme,hme,ome,pme,fme,Ppe,yme,Ame,vme,kme,Nme,$he,Eme,$me,_me,rce,Ome,Lme,Bme,Gme,jme,Xme,Yme,Jme,sce,efe,afe,rfe,ife,cde,ufe,cfe,ffe,xfe,vfe,kfe,Sfe,Tfe,Rfe,$fe,Ffe,Ofe,Lfe,Bfe,Ufe,Hfe,Xpe,y2e,b2e,w2e,Cme,qfe,Yfe,t2e,n2e,l2e,d2e,c2e,h2e,f2e,I2e,Phe,C2e,N2e,E2e,i2e,_2e,O2e,dpe,L2e,V2e,zme];for(let e of U2e)xn(e);var hA="4.21.0",G2e="4.21.0",H2e="4.21.0",j2e="4.21.0",q2e="4.21.0",X2e="4.21.0",ac={tfjs:hA,"tfjs-core":hA,"tfjs-converter":G2e,"tfjs-backend-cpu":H2e,"tfjs-backend-webgl":j2e,"tfjs-backend-wasm":q2e,"tfjs-backend-webgpu":X2e},Q3=void 0;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 Jk(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 ae=()=>typeof performance!="undefined"?performance.now():parseInt((Number(process.hrtime.bigint())/1e3/1e3).toString());function ey(e,t,a="config",n=[]){for(let r of Object.keys(t))if(typeof t[r]=="object")ey(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 Et(...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]=Et(s,i):a[r]=i}),a),{})}var dl={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:!1,maxDetected:1,skipFrames:99,skipTime:2500,minConfidence:.2,minSize:0,iouThreshold:.1,scale:1.4,mask:!1,return:!1},mesh:{enabled:!0,modelPath:"facemesh.json",keepInvalid:!1},attention:{enabled:!1,modelPath:"facemesh-attention.json"},iris:{enabled:!0,scale:2.3,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-lite.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 Qk=` precision highp float; attribute vec2 pos; attribute vec2 uv; @@ -8533,7 +8533,7 @@ return a / b;`,TJ=` vUv = uv; gl_Position = vec4(pos.x, pos.y*flipY, 0.0, 1.); } -`;var Qk=` +`;var e9=` precision highp float; varying vec2 vUv; uniform sampler2D texture; @@ -8545,7 +8545,7 @@ return a / b;`,TJ=` 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]; } -`,e9=` +`,t9=` precision highp float; varying vec2 vUv; uniform sampler2D texture; @@ -8557,7 +8557,7 @@ return a / b;`,TJ=` gl_FragColor.b = m[10] * c.r + m[11] * c.g + m[12] * c.b + m[14]; gl_FragColor.a = c.a; } -`,t9=` +`,a9=` precision highp float; varying vec2 vUv; uniform vec2 size; @@ -8570,7 +8570,7 @@ return a / b;`,TJ=` vec2 coord = pixelate(vUv, size); gl_FragColor += texture2D(texture, coord); } -`,a9=` +`,n9=` precision highp float; varying vec2 vUv; uniform sampler2D texture; @@ -8593,7 +8593,7 @@ return a / b;`,TJ=` 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; } -`,n9=` +`,r9=` precision highp float; varying vec2 vUv; uniform sampler2D texture; @@ -8615,8 +8615,8 @@ return a / b;`,TJ=` c31 * m[6] + c32 * m[7] + c33 * m[8]; gl_FragColor.a = c22.a; } -`;var ty=(e,t,a)=>{let n=new RegExp("\\b"+t+" \\w+ (\\w+)","ig");e.replace(n,(r,s)=>(a[s]=0,r))},ay=class{constructor(t,a,n){he(this,"uniform",{});he(this,"attribute",{});he(this,"gl");he(this,"id");he(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),ty(a,"attribute",this.attribute);for(let i in this.attribute)this.attribute[i]=this.gl.getAttribLocation(this.id,i);ty(a,"uniform",this.uniform),ty(n,"uniform",this.uniform);for(let i in this.uniform)this.uniform[i]=this.gl.getUniformLocation(this.id,i)}}};function r9(){let e=0,t=null,a=!1,n=-1,r=[null,null],s=[],i=null,o=null,l=Mn(100,100),u={},p={INTERMEDIATE:1},c=l.getContext("webgl");if(!c){K("filter: cannot get webgl context");return}this.gl=c;function d(x,A){if(!(x===l.width&&A===l.height)){if(l.width=x,l.height=A,!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(x,A){let b=c.createFramebuffer();c.bindFramebuffer(c.FRAMEBUFFER,b);let w=c.createRenderbuffer();c.bindRenderbuffer(c.RENDERBUFFER,w);let I=c.createTexture();return c.bindTexture(c.TEXTURE_2D,I),c.texImage2D(c.TEXTURE_2D,0,c.RGBA,x,A,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,I,0),c.bindTexture(c.TEXTURE_2D,null),c.bindFramebuffer(c.FRAMEBUFFER,null),{fbo:b,texture:I}}function m(x){return r[x]=r[x]||h(l.width,l.height),r[x]}function f(x=0){if(!o)return;let A=null,b=null,w=!1;e===0?A=t:A=m(n).texture||null,e++,a&&!(x&p.INTERMEDIATE)?(b=null,w=e%2===0):(n=(n+1)%2,b=m(n).fbo||null),c.bindTexture(c.TEXTURE_2D,A),c.bindFramebuffer(c.FRAMEBUFFER,b),c.uniform1f(o.uniform.flipY,w?-1:1),c.drawArrays(c.TRIANGLES,0,6)}function g(x){if(u[x])return o=u[x],c.useProgram((o?o.id:null)||null),o;if(o=new ay(c,Jk,x),!o)return K("filter: could not get webgl program"),null;let A=Float32Array.BYTES_PER_ELEMENT,b=4*A;return c.enableVertexAttribArray(o.attribute.pos),c.vertexAttribPointer(o.attribute.pos,2,c.FLOAT,!1,b,0*A),c.enableVertexAttribArray(o.attribute.uv),c.vertexAttribPointer(o.attribute.uv,2,c.FLOAT,!1,b,2*A),u[x]=o,o}let y={colorMatrix:x=>{let A=new Float32Array(x);A[4]/=255,A[9]/=255,A[14]/=255,A[19]/=255;let b=A[18]===1&&A[3]===0&&A[8]===0&&A[13]===0&&A[15]===0&&A[16]===0&&A[17]===0&&A[19]===0?e9:Qk,w=g(b);w&&(c.uniform1fv(w.uniform.m,A),f())},brightness:x=>{let A=(x||0)+1;y.colorMatrix([A,0,0,0,0,0,A,0,0,0,0,0,A,0,0,0,0,0,1,0])},saturation:x=>{let A=(x||0)*2/3+1,b=(A-1)*-.5;y.colorMatrix([A,b,b,0,0,b,A,b,0,0,b,b,A,0,0,0,0,0,1,0])},desaturate:()=>{y.saturation(-1)},contrast:x=>{let A=(x||0)+1,b=-128*(A-1);y.colorMatrix([A,0,0,0,b,0,A,0,0,b,0,0,A,0,b,0,0,0,1,0])},negative:()=>{y.contrast(-2)},hue:x=>{x=(x||0)/180*Math.PI;let A=Math.cos(x),b=Math.sin(x),w=.213,I=.715,T=.072;y.colorMatrix([w+A*(1-w)+b*-w,I+A*-I+b*-I,T+A*-T+b*(1-T),0,0,w+A*-w+b*.143,I+A*(1-I)+b*.14,T+A*-T+b*-.283,0,0,w+A*-w+b*-(1-w),I+A*-I+b*I,T+A*(1-T)+b*T,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:x=>{let A=new Float32Array(x),b=1/l.width,w=1/l.height,I=g(n9);I&&(c.uniform1fv(I.uniform.m,A),c.uniform2f(I.uniform.px,b,w),f())},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:x=>{let A=x||1;y.convolution.call(this,[0,-1*A,0,-1*A,1+4*A,-1*A,0,-1*A,0])},emboss:x=>{let A=x||1;y.convolution.call(this,[-2*A,-1*A,0,-1*A,1,1*A,0,1*A,2*A])},blur:x=>{let A=x/7/l.width,b=x/7/l.height,w=g(a9);w&&(c.uniform2f(w.uniform.px,0,b),f(p.INTERMEDIATE),c.uniform2f(w.uniform.px,A,0),f())},pixelate:x=>{let A=x/l.width,b=x/l.height,w=g(t9);w&&(c.uniform2f(w.uniform.size,A,b),f())}};this.add=function(x){let A=Array.prototype.slice.call(arguments,1),b=y[x];s.push({func:b,args:A})},this.reset=function(){s=[]},this.get=function(){return s},this.apply=function(x){d(x.width,x.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,x);for(let A=0;Ap.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=[xe(a[0],n[0]),xe(a[1],n[1]),xe(a[2],n[2])],c=[xe(r[0],n[0]),xe(r[1],n[1]),xe(r[2],n[2])],d=[te(p[0],l),te(p[1],l),te(p[2],l)],h=ca([d[0],d[1],d[2]],2);u=Q(h,[1,t.shape[0]||0,t.shape[1]||0,3]),J([...p,...c,...d,h])}else u=Wt(t,0);return J([...a,...n,...r,a,t,e]),u}var f0=3840,aa=null,na=null,ad=null,vt,bn={inputSum:0,cacheDiff:1,sumMethod:0,inputTensor:void 0};function ny(){bn.inputSum=0,bn.cacheDiff=1,bn.sumMethod=0,bn.inputTensor=void 0}function Mn(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")a=document.createElement("canvas"),a.width=e,a.height=t;else if(typeof navigator!="undefined"&&navigator.product==="ReactNative")if(typeof ne.Canvas!="undefined")a=new ne.Canvas(e,t);else if(typeof globalThis.Canvas!="undefined")a=new globalThis.Canvas(e,t);else throw new Error("canvas error: attempted to use canvas in react-native without canvas support installed");else throw new Error("canvas error: attempted to run in browser but DOM is not defined");else typeof ne.Canvas!="undefined"?a=new ne.Canvas(e,t):typeof globalThis.Canvas!="undefined"&&(a=new globalThis.Canvas(e,t));return a}function g0(e,t){let a=t||Mn(e.width,e.height);return a.getContext("2d").drawImage(e,0,0),a}async function y0(e,t,a=!0){var d,h,m;if(!e)return t.debug&&K("input error: input is missing"),{tensor:null,canvas:null};if(!(e instanceof yt)&&!(typeof Image!="undefined"&&e instanceof Image)&&!(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 not recognized");if(e instanceof yt){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=Wt(e,0);else if(e.shape[2]===4){let g=qp(e,[0,0,0],[-1,-1,3]);f=Wt(g,0),J(g)}}else e.shape.length===4&&(e.shape[3]===3?f=Ia(e):e.shape[3]===4&&(f=Vh(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 g=Ue(f,"float32");J(f),f=g}return{tensor:f,canvas:t.filter.return?na:null}}if(typeof e.readyState!="undefined"&&e.readyState<=2)return t.debug&&K("input stream is not ready"),{tensor:null,canvas:aa};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:aa};let s=n,i=r;if(s>f0&&(s=f0,i=Math.trunc(s*r/n)),i>f0&&(i=f0,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");(!aa||aa.width!==s||aa.height!==i)&&(aa=Mn(s,i));let o=aa.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,aa.width,aa.height),o.setTransform(1,0,0,1,0,0)):o.drawImage(e,0,0,n,r,0,0,aa.width,aa.height),(!na||aa.width!==na.width||aa.height!==na.height)&&(na=Mn(aa.width,aa.height)),t.filter.enabled&&ne.webgl.supported?(vt||(vt=ne.browser?new r9:null),ne.filter=!!vt,vt!=null&&vt.add?(vt.reset(),t.filter.brightness!==0&&vt.add("brightness",t.filter.brightness),t.filter.contrast!==0&&vt.add("contrast",t.filter.contrast),t.filter.sharpness!==0&&vt.add("sharpen",t.filter.sharpness),t.filter.blur!==0&&vt.add("blur",t.filter.blur),t.filter.saturation!==0&&vt.add("saturation",t.filter.saturation),t.filter.hue!==0&&vt.add("hue",t.filter.hue),t.filter.negative&&vt.add("negative"),t.filter.sepia&&vt.add("sepia"),t.filter.vintage&&vt.add("brownie"),t.filter.sepia&&vt.add("sepia"),t.filter.kodachrome&&vt.add("kodachrome"),t.filter.technicolor&&vt.add("technicolor"),t.filter.polaroid&&vt.add("polaroid"),t.filter.pixelate!==0&&vt.add("pixelate",t.filter.pixelate),((m=vt.get())==null?void 0:m.length)>1?na=vt.apply(aa):na=vt.draw(aa)):(t.debug&&K("input process error: cannot initialize filters"),ne.webgl.supported=!1,t.filter.enabled=!1,g0(aa,na))):(g0(aa,na),vt&&(vt=null),ne.filter=!!vt),!a)return{tensor:null,canvas:na};if(!na)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&&Er)l=Er?Er.fromPixels(e):null;else{u=e.data.length/e.height/e.width;let f=new Uint8Array(e.data.buffer);l=Ve(f,[e.height,e.width,u],"int32")}else if((!ad||na.width!==ad.width||na.height!==ad.height)&&(ad=Mn(na.width,na.height)),Er&&ne.browser)t.backend==="webgl"||t.backend==="humangl"||t.backend==="webgpu"?l=Er.fromPixels(na):(ad=g0(na),l=Er.fromPixels(ad));else{let y=g0(na).getContext("2d").getImageData(0,0,s,i);u=y.data.length/s/i;let x=new Uint8Array(y.data.buffer);l=Ve(x,[s,i,u])}if(u===4){let f=qp(l,[0,0,0],[-1,-1,3]);J(l),l=f}if(!l)throw new Error("input error: cannot create tensor");let p=Ue(l,"float32"),c=t.filter.equalization?await m0(p):Wt(p,0);if(J([l,p]),t.filter.autoBrightness){let f=fa(c),g=await f.data();t.filter.brightness=g[0]>1?1-g[0]/255:1-g[0],J(f)}return{tensor:c,canvas:t.filter.return?na:null}}async function s9(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(!bn.inputTensor)bn.inputTensor=Ia(t);else if(bn.inputTensor.shape[1]!==t.shape[1]||bn.inputTensor.shape[2]!==t.shape[2])J(bn.inputTensor),bn.inputTensor=Ia(t);else{let n={};n.diff=xe(t,bn.inputTensor),n.squared=te(n.diff,n.diff),n.sum=ot(n.squared);let s=(await n.sum.data())[0]/(t.shape[1]||1)/(t.shape[2]||1)/255/3;J([bn.inputTensor,n.diff,n.squared,n.sum]),bn.inputTensor=Ia(t),a=s<=(e.cacheSensitivity||0)}return a}async function i9(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=Ia(t),n.input2=t.shape[1]!==a.shape[1]||t.shape[2]!==a.shape[2]?fe.resizeBilinear(a,[t.shape[1],t.shape[2]]):Ia(a),n.diff=xe(n.input1,n.input2),n.squared=te(n.diff,n.diff),n.sum=ot(n.squared);let s=(await n.sum.data())[0]/(t.shape[1]||1)/(t.shape[2]||1)/255/3;return J([n.input1,n.input2,n.diff,n.squared,n.sum]),s}var rc,sc,ic,nc=class{constructor(){he(this,"browser");he(this,"node");he(this,"worker");he(this,"platform","");he(this,"agent","");he(this,"backends",[]);he(this,"initial");he(this,"filter");he(this,"tfjs");he(this,"offscreen");he(this,"perfadd",!1);he(this,"tensorflow",{version:void 0,gpu:void 0});he(this,"wasm",{supported:void 0,backend:void 0,simd:void 0,multithread:void 0});he(this,"webgl",{supported:void 0,backend:void 0,version:void 0,renderer:void 0,shader:void 0,vendor:void 0});he(this,"webgpu",{supported:void 0,backend:void 0,adapter:void 0});he(this,"cpu",{model:void 0,flags:[]});he(this,"kernels",[]);qn(this,rc,void 0);qn(this,sc,void 0);qn(this,ic,void 0);if(this.browser=typeof navigator!="undefined"&&typeof navigator.appVersion!="undefined",this.node=typeof process!="undefined"&&typeof process.versions!="undefined"&&typeof process.versions.node!="undefined",this.tfjs={version:ac["tfjs-core"]},this.offscreen=typeof OffscreenCanvas!="undefined",this.initial=!0,this.worker=this.browser&&this.offscreen?typeof WorkerGlobalScope!="undefined":void 0,typeof navigator!="undefined"&&typeof navigator.userAgent!="undefined"){let t=navigator.userAgent||"",a=t.match(/\(([^()]+)\)/g);if(a!=null&&a[0]){let n=a[0].match(/\(([^()]+)\)/g);this.platform=n!=null&&n[0]?n[0].replace(/\(|\)/g,""):"",this.agent=t.replace(a[0],""),this.platform[1]&&(this.agent=this.agent.replace(a[1],"")),this.agent=this.agent.replace(/ /g," ")}}else typeof process!="undefined"&&(this.platform=`${process.platform} ${process.arch}`,this.agent=`NodeJS ${process.version}`)}get Canvas(){return qa(this,rc)}set Canvas(t){xr(this,rc,t),globalThis.Canvas=t}get Image(){return qa(this,sc)}set Image(t){xr(this,sc,t),globalThis.Image=t}get ImageData(){return qa(this,ic)}set ImageData(t){xr(this,ic,t),globalThis.ImageData=t}async updateBackend(){this.backends=Object.keys(It().registryFactory);try{this.tensorflow={version:Bn().binding?Bn().binding.TF_Version:void 0,gpu:Bn().binding?Bn().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 B().getAsync("WASM_HAS_SIMD_SUPPORT"),this.wasm.multithread=await B().getAsync("WASM_HAS_MULTITHREAD_SUPPORT"));let t=Mn(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!="undefined"&&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=Jn(Qt()).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})}};rc=new WeakMap,sc=new WeakMap,ic=new WeakMap;var ne=new nc;var A0=class{constructor(){he(this,"config");he(this,"element");he(this,"stream");he(this,"devices",[]);he(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});he(this,"start",async t=>{var r,s;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 i=document.getElementById(t.element);if(i&&i instanceof HTMLVideoElement)this.element=i;else return this.config.debug&&K("webcam","cannot get dom element",t.element),`webcam error: cannot get dom element: ${t.element}`}else if(t.element instanceof HTMLVideoElement)this.element=t.element;else return this.config.debug&&K("webcam","unknown dom element",t.element),`webcam error: unknown dom element: ${t.element}`;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"}};if(((r=this.config)==null?void 0:r.width)>0&&(a.video.width={ideal:this.config.width}),((s=this.config)==null?void 0:s.height)>0&&(a.video.height={ideal:this.config.height}),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))return this.config.debug&&K("webcam error","no devices"),"webcam error: no devices";try{this.stream=await navigator.mediaDevices.getUserMedia(a)}catch(i){return K("webcam",i),`webcam error: ${i}`}return this.stream?(this.element.srcObject=this.stream,await new Promise(i=>{this.element?this.element.onloadeddata=()=>i(!0):i(!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}),`webcam: ${this.label}`):(this.config.debug&&K("webcam error","no stream"),"webcam error no stream")});he(this,"pause",()=>{this.element&&this.element.pause()});he(this,"play",async()=>{this.element&&await this.element.play()});he(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 ry={};yr(ry,{"affectnet-mobilenet":()=>u1e,age:()=>d1e,"anti-spoofing":()=>V1e,antispoof:()=>Z2e,blazeface:()=>J2e,"blazeface-back":()=>p1e,"blazeface-front":()=>c1e,"blazepose-detector":()=>h1e,"blazepose-full":()=>m1e,"blazepose-heavy":()=>f1e,"blazepose-lite":()=>g1e,centernet:()=>Q2e,default:()=>tge,efficientpose:()=>y1e,"efficientpose-i-lite":()=>U1e,"efficientpose-ii-lite":()=>G1e,"efficientpose-iv":()=>H1e,emotion:()=>e1e,faceboxes:()=>x1e,facemesh:()=>t1e,"facemesh-attention":()=>b1e,"facemesh-attention-pinto":()=>A1e,"facemesh-detection-full":()=>v1e,"facemesh-detection-short":()=>w1e,faceres:()=>a1e,"faceres-deep":()=>k1e,gear:()=>C1e,"gear-e1":()=>I1e,"gear-e2":()=>S1e,gender:()=>N1e,"gender-ssrnet-imdb":()=>T1e,handdetect:()=>R1e,"handlandmark-full":()=>E1e,"handlandmark-lite":()=>n1e,"handlandmark-sparse":()=>M1e,handskeleton:()=>$1e,handtrack:()=>r1e,"insightface-efficientnet-b0":()=>j1e,"insightface-ghostnet-strides1":()=>q1e,"insightface-ghostnet-strides2":()=>X1e,"insightface-mobilenet-emore":()=>K1e,"insightface-mobilenet-swish":()=>Y1e,iris:()=>s1e,liveness:()=>i1e,meet:()=>P1e,mobileface:()=>_1e,mobilefacenet:()=>F1e,models:()=>o1e,"movenet-lightning":()=>l1e,"movenet-multipose":()=>D1e,"movenet-thunder":()=>O1e,nanodet:()=>z1e,"nanodet-e":()=>Z1e,"nanodet-g":()=>J1e,"nanodet-m":()=>Q1e,"nanodet-t":()=>ege,posenet:()=>L1e,rvm:()=>W1e,selfie:()=>B1e});var Z2e=853098,J2e=538928,Q2e=4030290,e1e=820516,t1e=1477958,a1e=6978814,n1e=2023432,r1e=2964837,s1e=2599092,i1e=592976,o1e=0,l1e=4650216,u1e=6920630,d1e=161240,p1e=538928,c1e=402048,h1e=5928856,m1e=6339202,f1e=27502466,g1e=2726402,y1e=5651240,x1e=2013002,A1e=2387598,b1e=2382414,v1e=1026192,w1e=201268,k1e=13957620,I1e=112438,S1e=112438,C1e=1498916,T1e=161236,N1e=201808,R1e=3515612,E1e=5431368,M1e=5286322,$1e=5502280,P1e=372228,_1e=2183192,F1e=5171976,D1e=9448838,O1e=12477112,z1e=7574558,L1e=5032780,W1e=3739355,B1e=212886,V1e=853098,U1e=2269064,G1e=5651240,H1e=25643252,j1e=13013224,q1e=8093408,X1e=8049584,K1e=6938536,Y1e=12168584,Z1e=12319156,J1e=7574558,Q1e=1887474,ege=5294216,tge={antispoof:Z2e,blazeface:J2e,centernet:Q2e,emotion:e1e,facemesh:t1e,faceres:a1e,"handlandmark-lite":n1e,handtrack:r1e,iris:s1e,liveness:i1e,models:o1e,"movenet-lightning":l1e,"affectnet-mobilenet":u1e,age:d1e,"blazeface-back":p1e,"blazeface-front":c1e,"blazepose-detector":h1e,"blazepose-full":m1e,"blazepose-heavy":f1e,"blazepose-lite":g1e,efficientpose:y1e,faceboxes:x1e,"facemesh-attention-pinto":A1e,"facemesh-attention":b1e,"facemesh-detection-full":v1e,"facemesh-detection-short":w1e,"faceres-deep":k1e,"gear-e1":I1e,"gear-e2":S1e,gear:C1e,"gender-ssrnet-imdb":T1e,gender:N1e,handdetect:R1e,"handlandmark-full":E1e,"handlandmark-sparse":M1e,handskeleton:$1e,meet:P1e,mobileface:_1e,mobilefacenet:F1e,"movenet-multipose":D1e,"movenet-thunder":O1e,nanodet:z1e,posenet:L1e,rvm:W1e,selfie:B1e,"anti-spoofing":V1e,"efficientpose-i-lite":U1e,"efficientpose-ii-lite":G1e,"efficientpose-iv":H1e,"insightface-efficientnet-b0":j1e,"insightface-ghostnet-strides1":q1e,"insightface-ghostnet-strides2":X1e,"insightface-mobilenet-emore":K1e,"insightface-mobilenet-swish":Y1e,"nanodet-e":Z1e,"nanodet-g":J1e,"nanodet-m":Q1e,"nanodet-t":ege};var Ea={cacheModels:!0,cacheSupported:!0,verbose:!0,debug:!1,modelBasePath:""},ya={};async function age(e,t){return Ea.debug&&K("load model fetch:",e,t),fetch(e,t)}function o9(e){Ea.cacheModels=e.cacheModels,Ea.verbose=e.debug,Ea.modelBasePath=e.modelBasePath}async function $e(e){var u,p,c,d;let t=Zk(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;ya[n]={name:n,sizeFromManifest:0,sizeLoadedWeights:0,sizeDesired:ry[n],inCache:!1,url:""},Ea.cacheSupported=typeof indexedDB!="undefined";let s={};try{s=Ea.cacheSupported&&Ea.cacheModels?await Kn.listModels():{}}catch(h){Ea.cacheSupported=!1}ya[n].inCache=Ea.cacheSupported&&Ea.cacheModels&&Object.keys(s).includes(r),ya[n].url=ya[n].inCache?r:t;let i=typeof fetch=="undefined"?{}:{fetchFunc:(h,m)=>age(h,m)},o=new Xp(ya[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;ya[n].sizeFromManifest=((p=h==null?void 0:h.weightData)==null?void 0:p.byteLength)||0,h?o.loadSync(h):o=await d3(ya[n].inCache?r:t,i),ya[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:ya[n].sizeLoadedWeights}),l=!0}catch(h){K("error loading model:",t,h)}if(l&&Ea.cacheModels&&Ea.cacheSupported&&!ya[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 sy="3.2.2";var St={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 sge(){let e=St.gl;e&&(St.extensions=e.getSupportedExtensions())}function l9(e){var t;if(e.config.backend==="humangl"&&(St.name in It().registry&&!((t=St==null?void 0:St.gl)!=null&&t.getParameter(St.gl.VERSION))&&(K("humangl error: backend invalid context"),e.models.reset()),!lg(St.name))){try{St.canvas=Mn(100,100)}catch(r){K("humangl error: cannot create canvas:",r);return}try{if(St.gl=St.canvas.getContext("webgl2",St.webGLattr),!St.gl){K("humangl error: cannot get webgl context");return}if(!St.gl.getParameter(St.gl.VERSION).includes("2.0")){K("backend override: using fallback webgl backend as webgl 2.0 is not detected"),e.config.backend="webgl";return}St.canvas&&(St.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")}),St.canvas.addEventListener("webglcontextrestored",s=>{K("humangl error: context restored:",s)}),St.canvas.addEventListener("webglcontextcreationerror",s=>{K("humangl error: context create:",s)}))}catch(r){K("humangl error: cannot get webgl context:",r);return}try{n0(2,St.gl)}catch(r){K("humangl error: cannot set webgl context:",r);return}try{let r=new Gl(St.gl);tl(St.name,()=>new Jp(r),St.priority)}catch(r){K("humangl error: cannot register webgl backend:",r);return}try{Jn("webgl").forEach(s=>{let i={...s,backendName:St.name};xn(i)})}catch(r){K("humangl error: cannot update webgl backend registration:",r);return}try{B().flagRegistry.WEBGL_VERSION&&B().set("WEBGL_VERSION",2)}catch(r){K("humangl error: cannot set WebGL backend flags:",r);return}sge();let a=Bn(),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,St.gl)}}var ze={tf255:255,tf1:1,tf2:2,tf05:.5,tf127:127.5,rgb:[.2989,.587,.114]};function u9(){ze.tf255=Ge(255,"float32"),ze.tf1=Ge(1,"float32"),ze.tf2=Ge(2,"float32"),ze.tf05=Ge(.5,"float32"),ze.tf127=Ge(127.5,"float32"),ze.rgb=Bt([.2989,.587,.114],"float32")}async function lge(){var e;return await ne.updateBackend(),(e=ne.tensorflow)!=null&&e.version?"tensorflow":ne.webgpu.supported&&ne.webgpu.backend?"webgpu":ne.webgl.supported&&ne.webgl.backend?"webgl":ne.wasm.supported&&ne.wasm.backend?"wasm":"cpu"}function uge(e){let t=[];if(!ne.kernels.includes("mod")){let a={kernelName:"Mod",backendName:Qt(),kernelFunc:n=>De(()=>xe(n.inputs.a,te(ve(n.inputs.a,n.inputs.b),n.inputs.b)))};xn(a),ne.kernels.push("mod"),t.push("mod")}if(!ne.kernels.includes("floormod")){let a={kernelName:"FloorMod",backendName:Qt(),kernelFunc:n=>De(()=>we(te(zp(n.inputs.a,n.inputs.b),n.inputs.b),Uu(n.inputs.a,n.inputs.b)))};xn(a),ne.kernels.push("floormod"),t.push("floormod")}if(!ne.kernels.includes("rotatewithoffset")&&e.softwareKernels){let a={kernelName:"RotateWithOffset",backendName:Qt(),kernelFunc:n=>De(()=>{let r=Qt();Fp("cpu");let s=fe.rotateWithOffset(n.inputs.image,n.attrs.radians,n.attrs.fillValue,n.attrs.center);return Fp(r),s})};xn(a),ne.kernels.push("rotatewithoffset"),t.push("rotatewithoffset")}t.length>0&&e.debug&&K("registered kernels:",t)}var d9={};async function oc(e,t=!1){var a,n;if(e.state="backend",((a=e.config.backend)==null?void 0:a.length)===0&&(e.config.backend=await lge()),t||ne.initial||e.config.backend&&e.config.backend.length>0&&Qt()!==e.config.backend){let r=ae();if(e.config.backend&&e.config.backend.length>0){typeof window=="undefined"&&typeof WorkerGlobalScope!="undefined"&&e.config.debug&&e.config.debug&&K("running inside web worker"),typeof navigator!="undefined"&&((n=navigator==null?void 0:navigator.userAgent)!=null&&n.toLowerCase().includes("electron"))&&e.config.debug&&K("running inside electron");let s=Object.keys(It().registryFactory);if(e.config.backend==="humangl"&&!s.includes("humangl")&&(l9(e),s=Object.keys(It().registryFactory)),e.config.debug&&K("available backends:",s),ne.browser&&!ne.node&&e.config.backend==="tensorflow"&&s.includes("webgl")&&(e.config.debug&&K("override: backend set to tensorflow while running in browser"),e.config.backend="webgl"),ne.node&&!ne.browser&&(e.config.backend==="webgl"||e.config.backend==="humangl")&&s.includes("tensorflow")&&(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 i=await navigator.gpu.requestAdapter();if(e.config.debug&&K("enumerated webgpu adapter:",i),!i)K("override: backend set to webgpu but browser reports no available gpu"),e.config.backend="webgl";else{let o="requestAdapterInfo"in i?await i.requestAdapterInfo():void 0;K("webgpu adapter info:",o)}}if(s.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(B().flagRegistry.CANVAS2D_WILL_READ_FREQUENTLY&&B().set("CANVAS2D_WILL_READ_FREQUENTLY",!0),e.config.debug&&K("wasm path:",e.config.wasmPath),typeof u0!="undefined")u0(e.config.wasmPath,e.config.wasmPlatformFetch);else throw new Error("backend error: attempting to use wasm backend but wasm path is not set");let i=!1,o=!1;try{i=await B().getAsync("WASM_HAS_MULTITHREAD_SUPPORT"),o=await B().getAsync("WASM_HAS_SIMD_SUPPORT"),e.config.debug&&K(`wasm execution: ${o?"simd":"no simd"} ${i?"multithreaded":"singlethreaded"}`),e.config.debug&&!o&&K("warning: wasm simd support is not enabled")}catch(l){K("wasm detection failed")}}try{await Fp(e.config.backend),await Dp()}catch(i){return K("error: cannot set backend:",e.config.backend,i),!1}e.config.debug&&(d9=JSON.parse(JSON.stringify(B().flags)))}if((Qt()==="humangl"||Qt()==="webgl")&&(B().flagRegistry.WEBGL_USE_SHAPES_UNIFORMS&&B().set("WEBGL_USE_SHAPES_UNIFORMS",!0),B().flagRegistry.WEBGL_EXP_CONV&&B().set("WEBGL_EXP_CONV",!0),e.config.debug&&typeof e.config.deallocate!="undefined"&&e.config.deallocate&&(K("changing webgl: WEBGL_DELETE_TEXTURE_THRESHOLD:",!0),B().set("WEBGL_DELETE_TEXTURE_THRESHOLD",0))),Qt(),e.config.debug){let s=B().flags,i={};for(let o of Object.keys(s))d9[o]!==s[o]&&(i[o]=s[o]);e.config.debug&&Object.keys(i).length>0&&K("backend:",Qt(),"flags:",i)}if(e.config.flags&&Object.keys(e.config.flags).length>0){e.config.debug&&K("flags:",e.config.flags);for(let[s,i]of Object.entries(e.config.flags))B().set(s,i)}ig(),u9(),e.performance.initBackend=Math.trunc(ae()-r),e.config.backend=Qt(),await ne.updateBackend(),uge(e.config)}return!0}function b0(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}};xn(n)}ne.kernels=Jn(Qt()).map(a=>a.kernelName.toLowerCase())}var C0={};yr(C0,{all:()=>Wge,body:()=>w0,canvas:()=>Lge,face:()=>v0,gesture:()=>S0,hand:()=>k0,init:()=>cy,object:()=>I0,options:()=>Ft,person:()=>zge});var vn=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",{willReadFrequently:!0});if(!t)K("draw error: cannot get canvas context");else return t}return null},pl=e=>Math.round(e*180/Math.PI),ut=(e,t,a)=>e.replace(t,typeof a=="number"?a.toFixed(1):a),cl=(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 wn(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 lr(e,t,a,n,r){e.fillStyle=cl(n,r),e.beginPath(),e.arc(t,a,r.pointSize,0,2*Math.PI),e.fill()}function ur(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 iy(e,t,a){if(!(t.length<2)){e.beginPath(),e.moveTo(t[0][0],t[0][1]);for(let n of t)e.strokeStyle=cl(n[2]||0,a),e.lineTo(Math.trunc(n[0]),Math.trunc(n[1]));e.stroke(),a.fillPolygons&&(e.closePath(),e.fill())}}function c9(e,t,a){if(!(t.length<2)){if(e.lineWidth=a.lineWidth,!a.useCurves||t.length<=2){iy(e,t,a);return}e.moveTo(t[0][0],t[0][1]);for(let n=0;nlc[e]),Lbe=pge.map(e=>lc[e]),Wbe=cge.map(e=>lc[e]);function xs(e){let t=e.map(a=>a[0]);return t.push(e[e.length-1][1]),t}var hge=[[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]],mge=[[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]],fge=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],gge=[[474,475],[475,476],[476,477],[477,474]],yge=[[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]],xge=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],Age=[[469,470],[470,471],[471,472],[472,469]],bge=[[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]],Bbe={lips:xs(hge),leftEye:xs(mge),leftEyebrow:xs(fge),leftIris:xs(gge),rightEye:xs(yge),rightEyebrow:xs(xge),rightIris:xs(Age),faceOval:xs(bge)};var vge=[[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]],wge=[[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]],kge=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],Ige=[[474,475],[475,476],[476,477],[477,474]],Sge=[[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]],Cge=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],Tge=[[469,470],[470,471],[471,472],[472,469]],Nge=[[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 As(e){let t=e.map(a=>a[0]);return t.push(e[e.length-1][1]),t}var Rge={lips:As(vge),leftEye:As(wge),leftEyebrow:As(kge),leftIris:As(Ige),rightEye:As(Sge),rightEyebrow:As(Cge),rightIris:As(Tge),faceOval:As(Nge)},Ege=Object.entries(Rge).map(([e,t])=>t.map(a=>[a,e])).flat(),Vbe=new Map(Ege),uc=[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],fl=[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],gl=[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 rt;function Mge(e,t){var n,r,s,i,o,l,u,p,c;if(!rt.drawLabels||((n=rt.faceLabels)==null?void 0:n.length)===0)return;let a=rt.faceLabels.slice();if(a=ut(a,"[id]",e.id.toFixed(0)),e.score&&(a=ut(a,"[score]",100*e.score)),e.gender&&(a=ut(a,"[gender]",e.gender)),e.genderScore&&(a=ut(a,"[genderScore]",100*e.genderScore)),e.age&&(a=ut(a,"[age]",e.age)),e.distance&&(a=ut(a,"[distance]",100*e.distance)),e.real&&(a=ut(a,"[real]",100*e.real)),e.live&&(a=ut(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=ut(a,"[emotions]",d.join(" "))}(s=(r=e.rotation)==null?void 0:r.angle)!=null&&s.roll&&(a=ut(a,"[roll]",pl(e.rotation.angle.roll))),(o=(i=e.rotation)==null?void 0:i.angle)!=null&&o.yaw&&(a=ut(a,"[yaw]",pl(e.rotation.angle.yaw))),(u=(l=e.rotation)==null?void 0:l.angle)!=null&&u.pitch&&(a=ut(a,"[pitch]",pl(e.rotation.angle.pitch))),(c=(p=e.rotation)==null?void 0:p.gaze)!=null&&c.bearing&&(a=ut(a,"[gaze]",pl(e.rotation.gaze.bearing))),wn(t,a,e.box[0],e.box[1],rt)}function $ge(e,t){var a,n,r,s;if((a=e.annotations)!=null&&a.leftEyeIris&&((n=e.annotations)!=null&&n.leftEyeIris[0])){t.strokeStyle=rt.useDepth?"rgba(255, 200, 255, 0.3)":rt.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(),rt.fillPolygons&&(t.fillStyle=rt.useDepth?"rgba(255, 255, 200, 0.3)":rt.color,t.fill())}if((r=e.annotations)!=null&&r.rightEyeIris&&((s=e.annotations)!=null&&s.rightEyeIris[0])){t.strokeStyle=rt.useDepth?"rgba(255, 200, 255, 0.3)":rt.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(),rt.fillPolygons&&(t.fillStyle=rt.useDepth?"rgba(255, 255, 200, 0.3)":rt.color,t.fill())}}function Pge(e,t){var a;if(rt.drawGaze&&((a=e.rotation)!=null&&a.angle)&&typeof Path2D!="undefined"){t.strokeStyle="pink";let n=e.box[0]+e.box[2]/2-e.box[3]*pl(e.rotation.angle.yaw)/90,r=e.box[1]+e.box[3]/2+e.box[2]*pl(e.rotation.angle.pitch)/90,s=new Path2D(` +`;var ty=(e,t,a)=>{let n=new RegExp("\\b"+t+" \\w+ (\\w+)","ig");e.replace(n,(r,s)=>(a[s]=0,r))},ay=class{constructor(t,a,n){he(this,"uniform",{});he(this,"attribute",{});he(this,"gl");he(this,"id");he(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),ty(a,"attribute",this.attribute);for(let i in this.attribute)this.attribute[i]=this.gl.getAttribLocation(this.id,i);ty(a,"uniform",this.uniform),ty(n,"uniform",this.uniform);for(let i in this.uniform)this.uniform[i]=this.gl.getUniformLocation(this.id,i)}}};function s9(){let e=0,t=null,a=!1,n=-1,r=[null,null],s=[],i=null,o=null,l=Mn(100,100),u={},p={INTERMEDIATE:1},c=l.getContext("webgl");if(!c){K("filter: cannot get webgl context");return}this.gl=c;function d(x,A){if(!(x===l.width&&A===l.height)){if(l.width=x,l.height=A,!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(x,A){let b=c.createFramebuffer();c.bindFramebuffer(c.FRAMEBUFFER,b);let w=c.createRenderbuffer();c.bindRenderbuffer(c.RENDERBUFFER,w);let I=c.createTexture();return c.bindTexture(c.TEXTURE_2D,I),c.texImage2D(c.TEXTURE_2D,0,c.RGBA,x,A,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,I,0),c.bindTexture(c.TEXTURE_2D,null),c.bindFramebuffer(c.FRAMEBUFFER,null),{fbo:b,texture:I}}function m(x){return r[x]=r[x]||h(l.width,l.height),r[x]}function f(x=0){if(!o)return;let A=null,b=null,w=!1;e===0?A=t:A=m(n).texture||null,e++,a&&!(x&p.INTERMEDIATE)?(b=null,w=e%2===0):(n=(n+1)%2,b=m(n).fbo||null),c.bindTexture(c.TEXTURE_2D,A),c.bindFramebuffer(c.FRAMEBUFFER,b),c.uniform1f(o.uniform.flipY,w?-1:1),c.drawArrays(c.TRIANGLES,0,6)}function g(x){if(u[x])return o=u[x],c.useProgram((o?o.id:null)||null),o;if(o=new ay(c,Qk,x),!o)return K("filter: could not get webgl program"),null;let A=Float32Array.BYTES_PER_ELEMENT,b=4*A;return c.enableVertexAttribArray(o.attribute.pos),c.vertexAttribPointer(o.attribute.pos,2,c.FLOAT,!1,b,0*A),c.enableVertexAttribArray(o.attribute.uv),c.vertexAttribPointer(o.attribute.uv,2,c.FLOAT,!1,b,2*A),u[x]=o,o}let y={colorMatrix:x=>{let A=new Float32Array(x);A[4]/=255,A[9]/=255,A[14]/=255,A[19]/=255;let b=A[18]===1&&A[3]===0&&A[8]===0&&A[13]===0&&A[15]===0&&A[16]===0&&A[17]===0&&A[19]===0?t9:e9,w=g(b);w&&(c.uniform1fv(w.uniform.m,A),f())},brightness:x=>{let A=(x||0)+1;y.colorMatrix([A,0,0,0,0,0,A,0,0,0,0,0,A,0,0,0,0,0,1,0])},saturation:x=>{let A=(x||0)*2/3+1,b=(A-1)*-.5;y.colorMatrix([A,b,b,0,0,b,A,b,0,0,b,b,A,0,0,0,0,0,1,0])},desaturate:()=>{y.saturation(-1)},contrast:x=>{let A=(x||0)+1,b=-128*(A-1);y.colorMatrix([A,0,0,0,b,0,A,0,0,b,0,0,A,0,b,0,0,0,1,0])},negative:()=>{y.contrast(-2)},hue:x=>{x=(x||0)/180*Math.PI;let A=Math.cos(x),b=Math.sin(x),w=.213,I=.715,T=.072;y.colorMatrix([w+A*(1-w)+b*-w,I+A*-I+b*-I,T+A*-T+b*(1-T),0,0,w+A*-w+b*.143,I+A*(1-I)+b*.14,T+A*-T+b*-.283,0,0,w+A*-w+b*-(1-w),I+A*-I+b*I,T+A*(1-T)+b*T,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:x=>{let A=new Float32Array(x),b=1/l.width,w=1/l.height,I=g(r9);I&&(c.uniform1fv(I.uniform.m,A),c.uniform2f(I.uniform.px,b,w),f())},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:x=>{let A=x||1;y.convolution.call(this,[0,-1*A,0,-1*A,1+4*A,-1*A,0,-1*A,0])},emboss:x=>{let A=x||1;y.convolution.call(this,[-2*A,-1*A,0,-1*A,1,1*A,0,1*A,2*A])},blur:x=>{let A=x/7/l.width,b=x/7/l.height,w=g(n9);w&&(c.uniform2f(w.uniform.px,0,b),f(p.INTERMEDIATE),c.uniform2f(w.uniform.px,A,0),f())},pixelate:x=>{let A=x/l.width,b=x/l.height,w=g(a9);w&&(c.uniform2f(w.uniform.size,A,b),f())}};this.add=function(x){let A=Array.prototype.slice.call(arguments,1),b=y[x];s.push({func:b,args:A})},this.reset=function(){s=[]},this.get=function(){return s},this.apply=function(x){d(x.width,x.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,x);for(let A=0;Ap.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=[xe(a[0],n[0]),xe(a[1],n[1]),xe(a[2],n[2])],c=[xe(r[0],n[0]),xe(r[1],n[1]),xe(r[2],n[2])],d=[te(p[0],l),te(p[1],l),te(p[2],l)],h=ca([d[0],d[1],d[2]],2);u=Q(h,[1,t.shape[0]||0,t.shape[1]||0,3]),J([...p,...c,...d,h])}else u=Wt(t,0);return J([...a,...n,...r,a,t,e]),u}var f0=3840,aa=null,na=null,ad=null,vt,bn={inputSum:0,cacheDiff:1,sumMethod:0,inputTensor:void 0};function ny(){bn.inputSum=0,bn.cacheDiff=1,bn.sumMethod=0,bn.inputTensor=void 0}function Mn(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")a=document.createElement("canvas"),a.width=e,a.height=t;else if(typeof navigator!="undefined"&&navigator.product==="ReactNative")if(typeof ne.Canvas!="undefined")a=new ne.Canvas(e,t);else if(typeof globalThis.Canvas!="undefined")a=new globalThis.Canvas(e,t);else throw new Error("canvas error: attempted to use canvas in react-native without canvas support installed");else throw new Error("canvas error: attempted to run in browser but DOM is not defined");else typeof ne.Canvas!="undefined"?a=new ne.Canvas(e,t):typeof globalThis.Canvas!="undefined"&&(a=new globalThis.Canvas(e,t));return a}function g0(e,t){let a=t||Mn(e.width,e.height);return a.getContext("2d").drawImage(e,0,0),a}async function y0(e,t,a=!0){var d,h,m;if(!e)return t.debug&&K("input error: input is missing"),{tensor:null,canvas:null};if(!(e instanceof yt)&&!(typeof Image!="undefined"&&e instanceof Image)&&!(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 not recognized");if(e instanceof yt){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=Wt(e,0);else if(e.shape[2]===4){let g=qp(e,[0,0,0],[-1,-1,3]);f=Wt(g,0),J(g)}}else e.shape.length===4&&(e.shape[3]===3?f=Ia(e):e.shape[3]===4&&(f=Vh(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 g=Ue(f,"float32");J(f),f=g}return{tensor:f,canvas:t.filter.return?na:null}}if(typeof e.readyState!="undefined"&&e.readyState<=2)return t.debug&&K("input stream is not ready"),{tensor:null,canvas:aa};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:aa};let s=n,i=r;if(s>f0&&(s=f0,i=Math.trunc(s*r/n)),i>f0&&(i=f0,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");(!aa||aa.width!==s||aa.height!==i)&&(aa=Mn(s,i));let o=aa.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,aa.width,aa.height),o.setTransform(1,0,0,1,0,0)):o.drawImage(e,0,0,n,r,0,0,aa.width,aa.height),(!na||aa.width!==na.width||aa.height!==na.height)&&(na=Mn(aa.width,aa.height)),t.filter.enabled&&ne.webgl.supported?(vt||(vt=ne.browser?new s9:null),ne.filter=!!vt,vt!=null&&vt.add?(vt.reset(),t.filter.brightness!==0&&vt.add("brightness",t.filter.brightness),t.filter.contrast!==0&&vt.add("contrast",t.filter.contrast),t.filter.sharpness!==0&&vt.add("sharpen",t.filter.sharpness),t.filter.blur!==0&&vt.add("blur",t.filter.blur),t.filter.saturation!==0&&vt.add("saturation",t.filter.saturation),t.filter.hue!==0&&vt.add("hue",t.filter.hue),t.filter.negative&&vt.add("negative"),t.filter.sepia&&vt.add("sepia"),t.filter.vintage&&vt.add("brownie"),t.filter.sepia&&vt.add("sepia"),t.filter.kodachrome&&vt.add("kodachrome"),t.filter.technicolor&&vt.add("technicolor"),t.filter.polaroid&&vt.add("polaroid"),t.filter.pixelate!==0&&vt.add("pixelate",t.filter.pixelate),((m=vt.get())==null?void 0:m.length)>1?na=vt.apply(aa):na=vt.draw(aa)):(t.debug&&K("input process error: cannot initialize filters"),ne.webgl.supported=!1,t.filter.enabled=!1,g0(aa,na))):(g0(aa,na),vt&&(vt=null),ne.filter=!!vt),!a)return{tensor:null,canvas:na};if(!na)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&&Er)l=Er?Er.fromPixels(e):null;else{u=e.data.length/e.height/e.width;let f=new Uint8Array(e.data.buffer);l=Ve(f,[e.height,e.width,u],"int32")}else if((!ad||na.width!==ad.width||na.height!==ad.height)&&(ad=Mn(na.width,na.height)),Er&&ne.browser)t.backend==="webgl"||t.backend==="humangl"||t.backend==="webgpu"?l=Er.fromPixels(na):(ad=g0(na),l=Er.fromPixels(ad));else{let y=g0(na).getContext("2d").getImageData(0,0,s,i);u=y.data.length/s/i;let x=new Uint8Array(y.data.buffer);l=Ve(x,[s,i,u])}if(u===4){let f=qp(l,[0,0,0],[-1,-1,3]);J(l),l=f}if(!l)throw new Error("input error: cannot create tensor");let p=Ue(l,"float32"),c=t.filter.equalization?await m0(p):Wt(p,0);if(J([l,p]),t.filter.autoBrightness){let f=fa(c),g=await f.data();t.filter.brightness=g[0]>1?1-g[0]/255:1-g[0],J(f)}return{tensor:c,canvas:t.filter.return?na:null}}async function i9(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(!bn.inputTensor)bn.inputTensor=Ia(t);else if(bn.inputTensor.shape[1]!==t.shape[1]||bn.inputTensor.shape[2]!==t.shape[2])J(bn.inputTensor),bn.inputTensor=Ia(t);else{let n={};n.diff=xe(t,bn.inputTensor),n.squared=te(n.diff,n.diff),n.sum=ot(n.squared);let s=(await n.sum.data())[0]/(t.shape[1]||1)/(t.shape[2]||1)/255/3;J([bn.inputTensor,n.diff,n.squared,n.sum]),bn.inputTensor=Ia(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=Ia(t),n.input2=t.shape[1]!==a.shape[1]||t.shape[2]!==a.shape[2]?fe.resizeBilinear(a,[t.shape[1],t.shape[2]]):Ia(a),n.diff=xe(n.input1,n.input2),n.squared=te(n.diff,n.diff),n.sum=ot(n.squared);let s=(await n.sum.data())[0]/(t.shape[1]||1)/(t.shape[2]||1)/255/3;return J([n.input1,n.input2,n.diff,n.squared,n.sum]),s}var rc,sc,ic,nc=class{constructor(){he(this,"browser");he(this,"node");he(this,"worker");he(this,"platform","");he(this,"agent","");he(this,"backends",[]);he(this,"initial");he(this,"filter");he(this,"tfjs");he(this,"offscreen");he(this,"perfadd",!1);he(this,"tensorflow",{version:void 0,gpu:void 0});he(this,"wasm",{supported:void 0,backend:void 0,simd:void 0,multithread:void 0});he(this,"webgl",{supported:void 0,backend:void 0,version:void 0,renderer:void 0,shader:void 0,vendor:void 0});he(this,"webgpu",{supported:void 0,backend:void 0,adapter:void 0});he(this,"cpu",{model:void 0,flags:[]});he(this,"kernels",[]);qn(this,rc);qn(this,sc);qn(this,ic);if(this.browser=typeof navigator!="undefined"&&typeof navigator.appVersion!="undefined",this.node=typeof process!="undefined"&&typeof process.versions!="undefined"&&typeof process.versions.node!="undefined",this.tfjs={version:ac["tfjs-core"]},this.offscreen=typeof OffscreenCanvas!="undefined",this.initial=!0,this.worker=this.browser&&this.offscreen?typeof WorkerGlobalScope!="undefined":void 0,typeof navigator!="undefined"&&typeof navigator.userAgent!="undefined"){let t=navigator.userAgent||"",a=t.match(/\(([^()]+)\)/g);if(a!=null&&a[0]){let n=a[0].match(/\(([^()]+)\)/g);this.platform=n!=null&&n[0]?n[0].replace(/\(|\)/g,""):"",this.agent=t.replace(a[0],""),this.platform[1]&&(this.agent=this.agent.replace(a[1],"")),this.agent=this.agent.replace(/ /g," ")}}else typeof process!="undefined"&&(this.platform=`${process.platform} ${process.arch}`,this.agent=`NodeJS ${process.version}`)}get Canvas(){return qa(this,rc)}set Canvas(t){xr(this,rc,t),globalThis.Canvas=t}get Image(){return qa(this,sc)}set Image(t){xr(this,sc,t),globalThis.Image=t}get ImageData(){return qa(this,ic)}set ImageData(t){xr(this,ic,t),globalThis.ImageData=t}async updateBackend(){this.backends=Object.keys(It().registryFactory);try{this.tensorflow={version:Bn().binding?Bn().binding.TF_Version:void 0,gpu:Bn().binding?Bn().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 B().getAsync("WASM_HAS_SIMD_SUPPORT"),this.wasm.multithread=await B().getAsync("WASM_HAS_MULTITHREAD_SUPPORT"));let t=Mn(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!="undefined"&&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=Jn(Qt()).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})}};rc=new WeakMap,sc=new WeakMap,ic=new WeakMap;var ne=new nc;var A0=class{constructor(){he(this,"config");he(this,"element");he(this,"stream");he(this,"devices",[]);he(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});he(this,"start",async t=>{var r,s;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 i=document.getElementById(t.element);if(i&&i instanceof HTMLVideoElement)this.element=i;else return this.config.debug&&K("webcam","cannot get dom element",t.element),`webcam error: cannot get dom element: ${t.element}`}else if(t.element instanceof HTMLVideoElement)this.element=t.element;else return this.config.debug&&K("webcam","unknown dom element",t.element),`webcam error: unknown dom element: ${t.element}`;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"}};if(((r=this.config)==null?void 0:r.width)>0&&(a.video.width={ideal:this.config.width}),((s=this.config)==null?void 0:s.height)>0&&(a.video.height={ideal:this.config.height}),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))return this.config.debug&&K("webcam error","no devices"),"webcam error: no devices";try{this.stream=await navigator.mediaDevices.getUserMedia(a)}catch(i){return K("webcam",i),`webcam error: ${i}`}return this.stream?(this.element.srcObject=this.stream,await new Promise(i=>{this.element?this.element.onloadeddata=()=>i(!0):i(!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}),`webcam: ${this.label}`):(this.config.debug&&K("webcam error","no stream"),"webcam error no stream")});he(this,"pause",()=>{this.element&&this.element.pause()});he(this,"play",async()=>{this.element&&await this.element.play()});he(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 ry={};yr(ry,{"affectnet-mobilenet":()=>d1e,age:()=>p1e,"anti-spoofing":()=>U1e,antispoof:()=>J2e,blazeface:()=>Q2e,"blazeface-back":()=>c1e,"blazeface-front":()=>h1e,"blazepose-detector":()=>m1e,"blazepose-full":()=>f1e,"blazepose-heavy":()=>g1e,"blazepose-lite":()=>y1e,centernet:()=>e1e,default:()=>age,efficientpose:()=>x1e,"efficientpose-i-lite":()=>G1e,"efficientpose-ii-lite":()=>H1e,"efficientpose-iv":()=>j1e,emotion:()=>t1e,faceboxes:()=>A1e,facemesh:()=>a1e,"facemesh-attention":()=>v1e,"facemesh-attention-pinto":()=>b1e,"facemesh-detection-full":()=>w1e,"facemesh-detection-short":()=>k1e,faceres:()=>n1e,"faceres-deep":()=>I1e,gear:()=>T1e,"gear-e1":()=>S1e,"gear-e2":()=>C1e,gender:()=>R1e,"gender-ssrnet-imdb":()=>N1e,handdetect:()=>E1e,"handlandmark-full":()=>M1e,"handlandmark-lite":()=>r1e,"handlandmark-sparse":()=>$1e,handskeleton:()=>P1e,handtrack:()=>s1e,"insightface-efficientnet-b0":()=>q1e,"insightface-ghostnet-strides1":()=>X1e,"insightface-ghostnet-strides2":()=>K1e,"insightface-mobilenet-emore":()=>Y1e,"insightface-mobilenet-swish":()=>Z1e,iris:()=>i1e,liveness:()=>o1e,meet:()=>_1e,mobileface:()=>F1e,mobilefacenet:()=>D1e,models:()=>l1e,"movenet-lightning":()=>u1e,"movenet-multipose":()=>O1e,"movenet-thunder":()=>z1e,nanodet:()=>L1e,"nanodet-e":()=>J1e,"nanodet-g":()=>Q1e,"nanodet-m":()=>ege,"nanodet-t":()=>tge,posenet:()=>W1e,rvm:()=>B1e,selfie:()=>V1e});var J2e=853098,Q2e=538928,e1e=4030290,t1e=820516,a1e=1477958,n1e=6978814,r1e=2023432,s1e=2964837,i1e=2599092,o1e=592976,l1e=0,u1e=4650216,d1e=6920630,p1e=161240,c1e=538928,h1e=402048,m1e=5928856,f1e=6339202,g1e=27502466,y1e=2726402,x1e=5651240,A1e=2013002,b1e=2387598,v1e=2382414,w1e=1026192,k1e=201268,I1e=13957620,S1e=112438,C1e=112438,T1e=1498916,N1e=161236,R1e=201808,E1e=3515612,M1e=5431368,$1e=5286322,P1e=5502280,_1e=372228,F1e=2183192,D1e=5171976,O1e=9448838,z1e=12477112,L1e=7574558,W1e=5032780,B1e=3739355,V1e=212886,U1e=853098,G1e=2269064,H1e=5651240,j1e=25643252,q1e=13013224,X1e=8093408,K1e=8049584,Y1e=6938536,Z1e=12168584,J1e=12319156,Q1e=7574558,ege=1887474,tge=5294216,age={antispoof:J2e,blazeface:Q2e,centernet:e1e,emotion:t1e,facemesh:a1e,faceres:n1e,"handlandmark-lite":r1e,handtrack:s1e,iris:i1e,liveness:o1e,models:l1e,"movenet-lightning":u1e,"affectnet-mobilenet":d1e,age:p1e,"blazeface-back":c1e,"blazeface-front":h1e,"blazepose-detector":m1e,"blazepose-full":f1e,"blazepose-heavy":g1e,"blazepose-lite":y1e,efficientpose:x1e,faceboxes:A1e,"facemesh-attention-pinto":b1e,"facemesh-attention":v1e,"facemesh-detection-full":w1e,"facemesh-detection-short":k1e,"faceres-deep":I1e,"gear-e1":S1e,"gear-e2":C1e,gear:T1e,"gender-ssrnet-imdb":N1e,gender:R1e,handdetect:E1e,"handlandmark-full":M1e,"handlandmark-sparse":$1e,handskeleton:P1e,meet:_1e,mobileface:F1e,mobilefacenet:D1e,"movenet-multipose":O1e,"movenet-thunder":z1e,nanodet:L1e,posenet:W1e,rvm:B1e,selfie:V1e,"anti-spoofing":U1e,"efficientpose-i-lite":G1e,"efficientpose-ii-lite":H1e,"efficientpose-iv":j1e,"insightface-efficientnet-b0":q1e,"insightface-ghostnet-strides1":X1e,"insightface-ghostnet-strides2":K1e,"insightface-mobilenet-emore":Y1e,"insightface-mobilenet-swish":Z1e,"nanodet-e":J1e,"nanodet-g":Q1e,"nanodet-m":ege,"nanodet-t":tge};var Ea={cacheModels:!0,cacheSupported:!0,verbose:!0,debug:!1,modelBasePath:""},ya={};async function nge(e,t){return Ea.debug&&K("load model fetch:",e,t),fetch(e,t)}function l9(e){Ea.cacheModels=e.cacheModels,Ea.verbose=e.debug,Ea.modelBasePath=e.modelBasePath}async function $e(e){var u,p,c,d;let t=Jk(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;ya[n]={name:n,sizeFromManifest:0,sizeLoadedWeights:0,sizeDesired:ry[n],inCache:!1,url:""},Ea.cacheSupported=typeof indexedDB!="undefined";let s={};try{s=Ea.cacheSupported&&Ea.cacheModels?await Kn.listModels():{}}catch(h){Ea.cacheSupported=!1}ya[n].inCache=Ea.cacheSupported&&Ea.cacheModels&&Object.keys(s).includes(r),ya[n].url=ya[n].inCache?r:t;let i=typeof fetch=="undefined"?{}:{fetchFunc:(h,m)=>nge(h,m)},o=new Xp(ya[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;ya[n].sizeFromManifest=((p=h==null?void 0:h.weightData)==null?void 0:p.byteLength)||0,h?o.loadSync(h):o=await d3(ya[n].inCache?r:t,i),ya[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:ya[n].sizeLoadedWeights}),l=!0}catch(h){K("error loading model:",t,h)}if(l&&Ea.cacheModels&&Ea.cacheSupported&&!ya[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 sy="3.3.0";var St={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 ige(){let e=St.gl;e&&(St.extensions=e.getSupportedExtensions())}function u9(e){var t;if(e.config.backend==="humangl"&&(St.name in It().registry&&!((t=St==null?void 0:St.gl)!=null&&t.getParameter(St.gl.VERSION))&&(K("humangl error: backend invalid context"),e.models.reset()),!lg(St.name))){try{St.canvas=Mn(100,100)}catch(r){K("humangl error: cannot create canvas:",r);return}try{if(St.gl=St.canvas.getContext("webgl2",St.webGLattr),!St.gl){K("humangl error: cannot get webgl context");return}if(!St.gl.getParameter(St.gl.VERSION).includes("2.0")){K("backend override: using fallback webgl backend as webgl 2.0 is not detected"),e.config.backend="webgl";return}St.canvas&&(St.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")}),St.canvas.addEventListener("webglcontextrestored",s=>{K("humangl error: context restored:",s)}),St.canvas.addEventListener("webglcontextcreationerror",s=>{K("humangl error: context create:",s)}))}catch(r){K("humangl error: cannot get webgl context:",r);return}try{n0(2,St.gl)}catch(r){K("humangl error: cannot set webgl context:",r);return}try{let r=new Gl(St.gl);tl(St.name,()=>new Jp(r),St.priority)}catch(r){K("humangl error: cannot register webgl backend:",r);return}try{Jn("webgl").forEach(s=>{let i={...s,backendName:St.name};xn(i)})}catch(r){K("humangl error: cannot update webgl backend registration:",r);return}try{B().flagRegistry.WEBGL_VERSION&&B().set("WEBGL_VERSION",2)}catch(r){K("humangl error: cannot set WebGL backend flags:",r);return}ige();let a=Bn(),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,St.gl)}}var ze={tf255:255,tf1:1,tf2:2,tf05:.5,tf127:127.5,rgb:[.2989,.587,.114]};function d9(){ze.tf255=Ge(255,"float32"),ze.tf1=Ge(1,"float32"),ze.tf2=Ge(2,"float32"),ze.tf05=Ge(.5,"float32"),ze.tf127=Ge(127.5,"float32"),ze.rgb=Bt([.2989,.587,.114],"float32")}async function uge(){var e;return await ne.updateBackend(),(e=ne.tensorflow)!=null&&e.version?"tensorflow":ne.webgpu.supported&&ne.webgpu.backend?"webgpu":ne.webgl.supported&&ne.webgl.backend?"webgl":ne.wasm.supported&&ne.wasm.backend?"wasm":"cpu"}function dge(e){let t=[];if(!ne.kernels.includes("mod")){let a={kernelName:"Mod",backendName:Qt(),kernelFunc:n=>De(()=>xe(n.inputs.a,te(ve(n.inputs.a,n.inputs.b),n.inputs.b)))};xn(a),ne.kernels.push("mod"),t.push("mod")}if(!ne.kernels.includes("floormod")){let a={kernelName:"FloorMod",backendName:Qt(),kernelFunc:n=>De(()=>we(te(zp(n.inputs.a,n.inputs.b),n.inputs.b),Uu(n.inputs.a,n.inputs.b)))};xn(a),ne.kernels.push("floormod"),t.push("floormod")}if(!ne.kernels.includes("rotatewithoffset")&&e.softwareKernels){let a={kernelName:"RotateWithOffset",backendName:Qt(),kernelFunc:n=>De(()=>{let r=Qt();Fp("cpu");let s=fe.rotateWithOffset(n.inputs.image,n.attrs.radians,n.attrs.fillValue,n.attrs.center);return Fp(r),s})};xn(a),ne.kernels.push("rotatewithoffset"),t.push("rotatewithoffset")}t.length>0&&e.debug&&K("registered kernels:",t)}var p9={};async function oc(e,t=!1){var a,n;if(e.state="backend",((a=e.config.backend)==null?void 0:a.length)===0&&(e.config.backend=await uge()),t||ne.initial||e.config.backend&&e.config.backend.length>0&&Qt()!==e.config.backend){let r=ae();if(e.config.backend&&e.config.backend.length>0){typeof window=="undefined"&&typeof WorkerGlobalScope!="undefined"&&e.config.debug&&e.config.debug&&K("running inside web worker"),typeof navigator!="undefined"&&((n=navigator==null?void 0:navigator.userAgent)!=null&&n.toLowerCase().includes("electron"))&&e.config.debug&&K("running inside electron");let s=Object.keys(It().registryFactory);if(e.config.backend==="humangl"&&!s.includes("humangl")&&(u9(e),s=Object.keys(It().registryFactory)),e.config.debug&&K("available backends:",s),ne.browser&&!ne.node&&e.config.backend==="tensorflow"&&s.includes("webgl")&&(e.config.debug&&K("override: backend set to tensorflow while running in browser"),e.config.backend="webgl"),ne.node&&!ne.browser&&(e.config.backend==="webgl"||e.config.backend==="humangl")&&s.includes("tensorflow")&&(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 i=await navigator.gpu.requestAdapter();if(e.config.debug&&K("enumerated webgpu adapter:",i),!i)K("override: backend set to webgpu but browser reports no available gpu"),e.config.backend="webgl";else{let o="requestAdapterInfo"in i?await i.requestAdapterInfo():void 0;K("webgpu adapter info:",o)}}if(s.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(B().flagRegistry.CANVAS2D_WILL_READ_FREQUENTLY&&B().set("CANVAS2D_WILL_READ_FREQUENTLY",!0),e.config.debug&&K("wasm path:",e.config.wasmPath),typeof u0!="undefined")u0(e.config.wasmPath,e.config.wasmPlatformFetch);else throw new Error("backend error: attempting to use wasm backend but wasm path is not set");let i=!1,o=!1;try{i=await B().getAsync("WASM_HAS_MULTITHREAD_SUPPORT"),o=await B().getAsync("WASM_HAS_SIMD_SUPPORT"),e.config.debug&&K(`wasm execution: ${o?"simd":"no simd"} ${i?"multithreaded":"singlethreaded"}`),e.config.debug&&!o&&K("warning: wasm simd support is not enabled")}catch(l){K("wasm detection failed")}}try{await Fp(e.config.backend),await Dp()}catch(i){return K("error: cannot set backend:",e.config.backend,i),!1}e.config.debug&&(p9=JSON.parse(JSON.stringify(B().flags)))}if((Qt()==="humangl"||Qt()==="webgl")&&(B().flagRegistry.WEBGL_USE_SHAPES_UNIFORMS&&B().set("WEBGL_USE_SHAPES_UNIFORMS",!0),B().flagRegistry.WEBGL_EXP_CONV&&B().set("WEBGL_EXP_CONV",!0),e.config.debug&&typeof e.config.deallocate!="undefined"&&e.config.deallocate&&(K("changing webgl: WEBGL_DELETE_TEXTURE_THRESHOLD:",!0),B().set("WEBGL_DELETE_TEXTURE_THRESHOLD",0))),Qt(),e.config.debug){let s=B().flags,i={};for(let o of Object.keys(s))p9[o]!==s[o]&&(i[o]=s[o]);e.config.debug&&Object.keys(i).length>0&&K("backend:",Qt(),"flags:",i)}if(e.config.flags&&Object.keys(e.config.flags).length>0){e.config.debug&&K("flags:",e.config.flags);for(let[s,i]of Object.entries(e.config.flags))B().set(s,i)}ig(),d9(),e.performance.initBackend=Math.trunc(ae()-r),e.config.backend=Qt(),await ne.updateBackend(),dge(e.config)}return!0}function b0(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}};xn(n)}ne.kernels=Jn(Qt()).map(a=>a.kernelName.toLowerCase())}var C0={};yr(C0,{all:()=>Bge,body:()=>w0,canvas:()=>Wge,face:()=>v0,gesture:()=>S0,hand:()=>k0,init:()=>cy,object:()=>I0,options:()=>Ft,person:()=>Lge});var vn=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",{willReadFrequently:!0});if(!t)K("draw error: cannot get canvas context");else return t}return null},pl=e=>Math.round(e*180/Math.PI),ut=(e,t,a)=>e.replace(t,typeof a=="number"?a.toFixed(1):a),cl=(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 wn(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 lr(e,t,a,n,r){e.fillStyle=cl(n,r),e.beginPath(),e.arc(t,a,r.pointSize,0,2*Math.PI),e.fill()}function ur(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 iy(e,t,a){if(!(t.length<2)){e.beginPath(),e.moveTo(t[0][0],t[0][1]);for(let n of t)e.strokeStyle=cl(n[2]||0,a),e.lineTo(Math.trunc(n[0]),Math.trunc(n[1]));e.stroke(),a.fillPolygons&&(e.closePath(),e.fill())}}function h9(e,t,a){if(!(t.length<2)){if(e.lineWidth=a.lineWidth,!a.useCurves||t.length<=2){iy(e,t,a);return}e.moveTo(t[0][0],t[0][1]);for(let n=0;nlc[e]),Wbe=cge.map(e=>lc[e]),Bbe=hge.map(e=>lc[e]);function xs(e){let t=e.map(a=>a[0]);return t.push(e[e.length-1][1]),t}var mge=[[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]],fge=[[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]],gge=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],yge=[[474,475],[475,476],[476,477],[477,474]],xge=[[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]],Age=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],bge=[[469,470],[470,471],[471,472],[472,469]],vge=[[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]],Vbe={lips:xs(mge),leftEye:xs(fge),leftEyebrow:xs(gge),leftIris:xs(yge),rightEye:xs(xge),rightEyebrow:xs(Age),rightIris:xs(bge),faceOval:xs(vge)};var wge=[[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]],kge=[[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]],Ige=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],Sge=[[474,475],[475,476],[476,477],[477,474]],Cge=[[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]],Tge=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],Nge=[[469,470],[470,471],[471,472],[472,469]],Rge=[[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 As(e){let t=e.map(a=>a[0]);return t.push(e[e.length-1][1]),t}var Ege={lips:As(wge),leftEye:As(kge),leftEyebrow:As(Ige),leftIris:As(Sge),rightEye:As(Cge),rightEyebrow:As(Tge),rightIris:As(Nge),faceOval:As(Rge)},Mge=Object.entries(Ege).map(([e,t])=>t.map(a=>[a,e])).flat(),Ube=new Map(Mge),uc=[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],fl=[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],gl=[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 rt;function $ge(e,t){var n,r,s,i,o,l,u,p,c;if(!rt.drawLabels||((n=rt.faceLabels)==null?void 0:n.length)===0)return;let a=rt.faceLabels.slice();if(a=ut(a,"[id]",e.id.toFixed(0)),e.score&&(a=ut(a,"[score]",100*e.score)),e.gender&&(a=ut(a,"[gender]",e.gender)),e.genderScore&&(a=ut(a,"[genderScore]",100*e.genderScore)),e.age&&(a=ut(a,"[age]",e.age)),e.distance&&(a=ut(a,"[distance]",100*e.distance)),e.real&&(a=ut(a,"[real]",100*e.real)),e.live&&(a=ut(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=ut(a,"[emotions]",d.join(" "))}(s=(r=e.rotation)==null?void 0:r.angle)!=null&&s.roll&&(a=ut(a,"[roll]",pl(e.rotation.angle.roll))),(o=(i=e.rotation)==null?void 0:i.angle)!=null&&o.yaw&&(a=ut(a,"[yaw]",pl(e.rotation.angle.yaw))),(u=(l=e.rotation)==null?void 0:l.angle)!=null&&u.pitch&&(a=ut(a,"[pitch]",pl(e.rotation.angle.pitch))),(c=(p=e.rotation)==null?void 0:p.gaze)!=null&&c.bearing&&(a=ut(a,"[gaze]",pl(e.rotation.gaze.bearing))),wn(t,a,e.box[0],e.box[1],rt)}function Pge(e,t){var a,n,r,s;if((a=e.annotations)!=null&&a.leftEyeIris&&((n=e.annotations)!=null&&n.leftEyeIris[0])){t.strokeStyle=rt.useDepth?"rgba(255, 200, 255, 0.3)":rt.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(),rt.fillPolygons&&(t.fillStyle=rt.useDepth?"rgba(255, 255, 200, 0.3)":rt.color,t.fill())}if((r=e.annotations)!=null&&r.rightEyeIris&&((s=e.annotations)!=null&&s.rightEyeIris[0])){t.strokeStyle=rt.useDepth?"rgba(255, 200, 255, 0.3)":rt.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(),rt.fillPolygons&&(t.fillStyle=rt.useDepth?"rgba(255, 255, 200, 0.3)":rt.color,t.fill())}}function _ge(e,t){var a;if(rt.drawGaze&&((a=e.rotation)!=null&&a.angle)&&typeof Path2D!="undefined"){t.strokeStyle="pink";let n=e.box[0]+e.box[2]/2-e.box[3]*pl(e.rotation.angle.yaw)/90,r=e.box[1]+e.box[3]/2+e.box[2]*pl(e.rotation.angle.pitch)/90,s=new Path2D(` M ${e.box[0]+e.box[2]/2} ${e.box[1]} C ${n} ${e.box[1]}, @@ -8628,7 +8628,7 @@ return a / b;`,TJ=` ${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 _ge(e,t){var a;if(rt.drawGaze&&((a=e.rotation)!=null&&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]];oy(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]];oy(t,[e.annotations.rightEyeIris[0][0],e.annotations.rightEyeIris[0][1]],[r[0],r[1]],4)}}function Fge(e,t){if(rt.drawPolygons&&e.mesh.length>=468){t.lineWidth=1;for(let a=0;ae.mesh[r]);iy(t,n,rt)}$ge(e,t)}}function Dge(e,t){if(rt.drawPoints)if((e==null?void 0:e.mesh.length)>=468)for(let a=0;a0&&(Dge(r,n),Fge(r,n),Pge(r,n),_ge(r,n))}}function w0(e,t,a){var s,i;let n=Et(Ft,a);if(!t||!e)return;let r=vn(e);if(r){r.lineJoin="round";for(let o=0;o0)){let l=n.bodyLabels.slice();l=ut(l,"[id]",t[o].id.toFixed(0)),l=ut(l,"[score]",100*t[o].score),wn(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=ut(u,"[label]",l.part),u=ut(u,"[score]",100*l.score),wn(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)c9(r,u,n)}}}function k0(e,t,a){var s,i;let n=Et(Ft,a);if(!t||!e)return;let r=vn(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,ur(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=ut(l,"[id]",o.id.toFixed(0)),l=ut(l,"[label]",o.label),l=ut(l,"[score]",100*o.score),wn(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=cl(l[2],n),lr(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=ut(p,"[label]",l),wn(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 I0(e,t,a){var s;let n=Et(Ft,a);if(!t||!e)return;let r=vn(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,ur(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=ut(o,"[id]",i.id.toFixed(0)),o=ut(o,"[label]",i.label),o=ut(o,"[score]",100*i.score),wn(r,o,i.box[0],i.box[1],n)}r.stroke()}}}function S0(e,t,a){var r;let n=Et(Ft,a);if(!(!t||!e)&&n.drawGestures&&((r=n.gestureLabels)==null?void 0:r.length)>0){let s=vn(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=ut(c,"[where]",l[0]),c=ut(c,"[who]",p),c=ut(c,"[what]",u[1]),wn(s,c,8,2+i*n.lineHeight,n),i+=1}}}}var bs={face:`face + `);t.stroke(i),t.stroke(s)}}function Fge(e,t){var a;if(rt.drawGaze&&((a=e.rotation)!=null&&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]];oy(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]];oy(t,[e.annotations.rightEyeIris[0][0],e.annotations.rightEyeIris[0][1]],[r[0],r[1]],4)}}function Dge(e,t){if(rt.drawPolygons&&e.mesh.length>=468){t.lineWidth=1;for(let a=0;ae.mesh[r]);iy(t,n,rt)}Pge(e,t)}}function Oge(e,t){if(rt.drawPoints)if((e==null?void 0:e.mesh.length)>=468)for(let a=0;a0&&(Oge(r,n),Dge(r,n),_ge(r,n),Fge(r,n))}}function w0(e,t,a){var s,i;let n=Et(Ft,a);if(!t||!e)return;let r=vn(e);if(r){r.lineJoin="round";for(let o=0;o0)){let l=n.bodyLabels.slice();l=ut(l,"[id]",t[o].id.toFixed(0)),l=ut(l,"[score]",100*t[o].score),wn(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=ut(u,"[label]",l.part),u=ut(u,"[score]",100*l.score),wn(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)h9(r,u,n)}}}function k0(e,t,a){var s,i;let n=Et(Ft,a);if(!t||!e)return;let r=vn(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,ur(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=ut(l,"[id]",o.id.toFixed(0)),l=ut(l,"[label]",o.label),l=ut(l,"[score]",100*o.score),wn(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=cl(l[2],n),lr(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=ut(p,"[label]",l),wn(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 I0(e,t,a){var s;let n=Et(Ft,a);if(!t||!e)return;let r=vn(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,ur(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=ut(o,"[id]",i.id.toFixed(0)),o=ut(o,"[label]",i.label),o=ut(o,"[score]",100*i.score),wn(r,o,i.box[0],i.box[1],n)}r.stroke()}}}function S0(e,t,a){var r;let n=Et(Ft,a);if(!(!t||!e)&&n.drawGestures&&((r=n.gestureLabels)==null?void 0:r.length)>0){let s=vn(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=ut(c,"[where]",l[0]),c=ut(c,"[who]",p),c=ut(c,"[what]",u[1]),wn(s,c,8,2+i*n.lineHeight,n),i+=1}}}}var bs={face:`face confidence: [score]% [gender] [genderScore]% age: [age] years @@ -8637,7 +8637,7 @@ return a / b;`,TJ=` 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 py=0;function zge(e,t,a){let n=Et(Ft,a);if(!t||!e)return;let r=vn(e);if(r){r.lineJoin="round",r.font=n.font;for(let s=0;smy,kpt:()=>hy});var hy=["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"],my={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 kn,yl=224,f9,Bge=5,N0=[8,16,32,32,32];function Vge(){let e=[],t=0;for(;ta.x)),y:Bt(e.map(a=>a.y))}}async function g9(e){if(ne.initial&&(kn=null),!kn&&e.body.detector&&e.body.detector.modelPath){kn=await $e(e.body.detector.modelPath);let t=kn!=null&&kn.executor?Object.values(kn.modelSignature.inputs):void 0;yl=Array.isArray(t)?parseInt(t[0].tensorShape.dim[1].size):0}else e.debug&&kn&&K("cached model:",kn.modelUrl);return Vge(),kn}var m9=[5,5];function Uge(e,t){return De(()=>{let a=Sa(e,12,1),n=Oe(a[0]),r=Oe(a[1]),s=Oe(a[2]),i=Oe(a[3]);n=we(ve(n,yl),t.x),r=we(ve(r,yl),t.y),s=te(ve(s,yl),m9[0]),i=te(ve(i,yl),m9[1]);let o=xe(n,ve(s,2)),l=xe(r,ve(i,2)),u=we(o,s),p=we(l,i);return ca([o,l,u,p],1)})}async function Gge(e,t,a,n){var u,p;let r=[],s={};s.boxes=Uge(e,f9),s.scores=za(t),s.nms=await fe.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],m=[Math.round(h[0]*n[0]),Math.round(h[1]*n[1]),Math.round(h[2]*n[0]),Math.round(h[3]*n[1])],f={score:d,boxRaw:h,box:m};r.push(f)}return Object.keys(s).forEach(c=>J(s[c])),r}async function y9(e,t,a){let n={};n.res=kn==null?void 0:kn.execute(e,["Identity"]),n.logitsRaw=Fe(n.res,[0,0,0],[1,-1,1]),n.boxesRaw=Fe(n.res,[0,0,1],[1,-1,-1]),n.logits=Oe(n.logitsRaw),n.boxes=Oe(n.boxesRaw);let r=await Gge(n.boxes,n.logits,t,a);return Object.keys(n).forEach(s=>J(n[s])),r}function vs(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 R0(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 Ua,gy=256,fy=Number.MAX_SAFE_INTEGER,Hge={landmarks:["ld_3d","activation_segmentation","activation_heatmap","world_3d","output_poseflag"],detector:[]},M0=[],ws=[[0,0],[0,0],[0,0],[0,0]],A9=0,b9=e=>1-1/(1+Math.exp(e)),w9=e=>g9(e);async function k9(e){if(ne.initial&&(Ua=null),Ua)e.debug&&K("cached model:",Ua.modelUrl);else{Ua=await $e(e.body.modelPath);let t=Ua!=null&&Ua.executor?Object.values(Ua.modelSignature.inputs):void 0;gy=Array.isArray(t)?parseInt(t[0].tensorShape.dim[1].size):0}return Ua}function v9(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=fe.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];ws=[[0,0],o,l,[0,0]],n.pad=ir(n.cropped||e,ws),n.resize=fe.resizeBilinear(n.pad,[t,t]),r=ve(n.resize,ze.tf255)}else e.shape[1]!==t?(n.resize=fe.resizeBilinear(n.cropped||e,[t,t]),r=ve(n.resize,ze.tf255)):r=ve(n.cropped||e,ze.tf255);return Object.keys(n).forEach(o=>J(n[o])),r}function jge(e,t,a){for(let n of e)n.position=[Math.trunc(n.position[0]*(t[0]+ws[2][0]+ws[2][1])/t[0]-ws[2][0]),Math.trunc(n.position[1]*(t[1]+ws[1][0]+ws[1][1])/t[1]-ws[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 qge(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 Xge(e,t,a){if(!(Ua!=null&&Ua.executor))return null;let n={};[n.ld,n.segmentation,n.heatmap,n.world,n.poseflag]=Ua==null?void 0:Ua.execute(e,Hge.landmarks);let r=(await n.poseflag.data())[0],s=await n.ld.data(),i=await n.world.data();Object.keys(n).forEach(m=>J(n[m]));let o=[],l=5;for(let m=0;mm.position),c=vs(p,[a[0],a[1]]),d={};for(let[m,f]of Object.entries(my)){let g=[];for(let y=0;yb.part===f[y]),A=u.find(b=>b.part===f[y+1]);x&&A&&g.push([x.position,A.position])}d[m]=g}return{id:0,score:Math.trunc(100*r)/100,box:c.box,boxRaw:c.boxRaw,keypoints:u,annotations:d}}async function yy(e,t){var s,i,o;let a=[e.shape[2]||0,e.shape[1]||0],n=(t.body.skipTime||0)>ae()-A9,r=fy<(t.body.skipFrames||0);if(t.skipAllowed&&n&&r&&M0!==null)fy++;else{let l=[];if((i=(s=t.body)==null?void 0:s.detector)!=null&&i.enabled){let u=v9(e,224);l=await y9(u,t,a),J(u)}else l=[{box:[0,0,0,0],boxRaw:[0,0,1,1],score:0}];for(let u=0;uJ(n[u])),r}async function by(e,t){if(!(Ga!=null&&Ga.executor))return[];let a=(t.object.skipTime||0)>ae()-S9,n=Ay<(t.object.skipFrames||0);return t.skipAllowed&&a&&n&&xy.length>0?(Ay++,xy):(Ay=0,new Promise(async r=>{let s=[e.shape[2]||0,e.shape[1]||0],i=fe.resizeBilinear(e,[xl,xl]),o=t.object.enabled?Ga==null?void 0:Ga.execute(i,["tower_0/detections"]):null;S9=ae(),J(i);let l=await Kge(o,s,t);xy=l,r(l)}))}var $0={};yr($0,{connected:()=>wy,kpt:()=>vy});var vy=["head","neck","rightShoulder","rightElbow","rightWrist","chest","leftShoulder","leftElbow","leftWrist","bodyCenter","rightHip","rightKnee","rightAnkle","leftHip","leftKnee","leftAnkle"],wy={leftLeg:["leftHip","leftKnee","leftAnkle"],rightLeg:["rightHip","rightKnee","rightAnkle"],torso:["leftShoulder","rightShoulder","rightHip","leftHip","leftShoulder"],leftArm:["leftShoulder","leftElbow","leftWrist"],rightArm:["rightShoulder","rightElbow","rightWrist"],head:[]};var Mt,N9=0,Ma={id:0,keypoints:[],box:[0,0,0,0],boxRaw:[0,0,0,0],score:0,annotations:{}},ky=Number.MAX_SAFE_INTEGER;async function R9(e){return ne.initial&&(Mt=null),Mt?e.debug&&K("cached model:",Mt.modelUrl):Mt=await $e(e.body.modelPath),Mt}async function Yge(e,t){let[a,n]=e.shape,r=Q(e,[n*a]),s=fa(r,0),i=(await s.data())[0];if(i>t){let o=rr(r,0),l=Uu(o,a),u=(await l.data())[0],p=ve(o,a),c=(await p.data())[0];return J([r,s,o,l,p]),[u,c,i]}return J([r,s]),[0,0,i]}async function Iy(e,t){if(!(Mt!=null&&Mt.executor)||!(Mt!=null&&Mt.inputs[0].shape))return[];let a=(t.body.skipTime||0)>ae()-N9,n=ky<(t.body.skipFrames||0);return t.skipAllowed&&a&&n&&Object.keys(Ma.keypoints).length>0?(ky++,[Ma]):(ky=0,new Promise(async r=>{let s=De(()=>{var m,f;let c=fe.resizeBilinear(e,[((m=Mt==null?void 0:Mt.inputs[0].shape)==null?void 0:m[2])||0,((f=Mt==null?void 0:Mt.inputs[0].shape)==null?void 0:f[1])||0],!1),d=te(c,ze.tf2);return xe(d,ze.tf1)}),i;if(t.body.enabled&&(i=Mt==null?void 0:Mt.execute(s)),N9=ae(),J(s),i){Ma.keypoints.length=0;let c=Oe(i);J(i);let d=Na(c,2);J(c);for(let h=0;h(t.body.minConfidence||0)&&Ma.keypoints.push({score:Math.round(100*g)/100,part:vy[h],positionRaw:[m/Mt.inputs[0].shape[2],f/Mt.inputs[0].shape[1]],position:[Math.round(e.shape[2]*m/Mt.inputs[0].shape[2]),Math.round(e.shape[1]*f/Mt.inputs[0].shape[1])]})}d.forEach(h=>J(h))}Ma.score=Ma.keypoints.reduce((c,d)=>d.score>c?d.score:c,0);let o=Ma.keypoints.map(c=>c.position[0]),l=Ma.keypoints.map(c=>c.position[1]);Ma.box=[Math.min(...o),Math.min(...l),Math.max(...o)-Math.min(...o),Math.max(...l)-Math.min(...l)];let u=Ma.keypoints.map(c=>c.positionRaw[0]),p=Ma.keypoints.map(c=>c.positionRaw[1]);Ma.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(wy)){let h=[];for(let m=0;my.part===d[m]),g=Ma.keypoints.find(y=>y.part===d[m+1]);f&&g&&f.score>(t.body.minConfidence||0)&&g.score>(t.body.minConfidence||0)&&h.push([f.position,g.position])}Ma.annotations[c]=h}r([Ma])}))}var rd=e=>[Math.abs(e.endPoint[0]-e.startPoint[0]),Math.abs(e.endPoint[1]-e.startPoint[1])],P0=e=>[e.startPoint[0]+(e.endPoint[0]-e.startPoint[0])/2,e.startPoint[1]+(e.endPoint[1]-e.startPoint[1])/2,1],_0=(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],F0=(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],P9=(e,t,a)=>{let n=[e.startPoint[0]*t[0],e.startPoint[1]*t[1]],r=[e.endPoint[0]*t[0],e.endPoint[1]*t[1]],s=e.landmarks.map(i=>[(i[0]+a[0])*t[0],(i[1]+a[1])*t[1]]);return{startPoint:n,endPoint:r,landmarks:s,confidence:e.confidence}},Sy=(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=fe.cropAndResize(t,[s],[0],a),o=ve(i,ze.tf255);return J(i),o},D0=(e,t)=>{let a=P0(e),n=rd(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,size:n}},O0=e=>{let t=P0(e),a=rd(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,size:[Math.round(a[0]),Math.round(a[1])]}},_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}},Cy=[[1,0,0],[0,1,0],[0,0,1]],Zge=e=>e-2*Math.PI*Math.floor((e+Math.PI)/(2*Math.PI)),Jge=(e,t)=>Zge(Math.PI/2-Math.atan2(-(t[1]-e[1]),t[0]-e[0]));var M9=(e,t)=>[[1,0,e],[0,1,t],[0,0,1]],Al=(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=M9(t[0],t[1]),i=$9(s,r),o=M9(-t[0],-t[1]);return $9(i,o)},e3e=e=>{let t=[[e[0][0],e[1][0]],[e[0][1],e[1][1]]],a=[e[0][2],e[1][2]],n=[-Al(t[0],a),-Al(t[1],a)];return[t[0].concat(n[0]),t[1].concat(n[1]),[0,0,1]]},t3e=(e,t)=>[Al(e,t[0]),Al(e,t[1])];function D9(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?F9(a,[0,0]):Cy,u=o?i.map(h=>[...t3e(h,l),h[2]]):i,p=o?e3e(n):Cy,c=P0(t),d=[Al(c,p[0]),Al(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 z9(e,t,a,n){let r=t.landmarks.length>=ly.count?ly.symmetryLine:hl.symmetryLine,s=0,i=Cy,o;if(e&&ne.kernels.includes("rotatewithoffset"))if(s=Jge(t.landmarks[r[0]],t.landmarks[r[1]]),s&&s!==0&&Math.abs(s)>.2){let u=P0(t),p=[u[0]/a.shape[2],u[1]/a.shape[1]],c=fe.rotateWithOffset(a,s,0,[p[0],p[1]]);i=F9(-s,u),o=Sy(t,c,[n,n]),J(c)}else o=Sy(t,a,[n,n]);else o=Sy(t,a,[n,n]);return[s,i,o]}var a3e=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]},L9=(e,t)=>{let a=a3e(e),n=rd(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 W9=6,Vn,z0=null,ks=0,sd=null,B9=()=>ks;async function V9(e){var t;return ne.initial&&(Vn=null),Vn?e.debug&&K("cached model:",Vn.modelUrl):Vn=await $e((t=e.face.detector)==null?void 0:t.modelPath),ks=Vn.executor&&Vn.inputs[0].shape?Vn.inputs[0].shape[2]:256,sd=Ge(ks,"int32"),z0=Zn(D9(ks)),Vn}function n3e(e){if(!z0||!sd)return yn([0,0]);let t={};t.boxStarts=Fe(e,[0,1],[-1,2]),t.centers=we(t.boxStarts,z0),t.boxSizes=Fe(e,[0,3],[-1,2]),t.boxSizesNormalized=ve(t.boxSizes,sd),t.centersNormalized=ve(t.centers,sd),t.halfBoxSize=ve(t.boxSizesNormalized,ze.tf2),t.starts=xe(t.centersNormalized,t.halfBoxSize),t.ends=we(t.centersNormalized,t.halfBoxSize),t.startNormalized=te(t.starts,sd),t.endNormalized=te(t.ends,sd);let a=Vu([t.startNormalized,t.endNormalized],1);return Object.keys(t).forEach(n=>J(t[n])),a}async function U9(e,t){var o,l,u,p,c,d,h;if(!e||e.isDisposedInternal||e.shape.length!==4||e.shape[1]<1||e.shape[2]<1)return[];let a={};a.resized=fe.resizeBilinear(e,[ks,ks]),a.div=ve(a.resized,ze.tf127),a.normalized=xe(a.div,ze.tf1);let n=Vn==null?void 0:Vn.execute(a.normalized);if(Array.isArray(n)&&n.length>2){let m=n.sort((f,g)=>f.size-g.size);a.concat384=lt([m[0],m[2]],2),a.concat512=lt([m[1],m[3]],2),a.concat=lt([a.concat512,a.concat384],1),a.batch=Oe(a.concat,[0])}else Array.isArray(n)?a.batch=Oe(n[0]):a.batch=Oe(n);J(n),a.boxes=n3e(a.batch),a.logits=Fe(a.batch,[0,0],[-1,1]),a.sigmoid=za(a.logits),a.scores=Oe(a.sigmoid),a.nms=await fe.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 m=0;m(((p=t.face.detector)==null?void 0:p.minConfidence)||0)){let g={};g.bbox=Fe(a.boxes,[r[m],0],[1,-1]),g.slice=Fe(a.batch,[r[m],W9-1],[1,-1]),g.squeeze=Oe(g.slice),g.landmarks=Q(g.squeeze,[W9,-1]);let y=await g.bbox.data(),x={startPoint:[y[0],y[1]],endPoint:[y[2],y[3]],landmarks:await g.landmarks.array(),confidence:f};g.anchor=Fe(z0,[r[m],0],[1,2]);let A=await g.anchor.data(),b=P9(x,[(e.shape[2]||0)/ks,(e.shape[1]||0)/ks],A),w=D0(b,((c=t.face.detector)==null?void 0:c.scale)||1.4),I=O0(w);I.size[0]>(((d=t.face.detector)==null?void 0:d.minSize)||0)&&I.size[1]>(((h=t.face.detector)==null?void 0:h.minSize)||0)&&s.push(I),Object.keys(g).forEach(T=>J(g[T]))}}return Object.keys(a).forEach(m=>J(a[m])),s}var nn,Is=0,Ny=$n.leftEyeLower0,Ry=$n.rightEyeLower0,id={leftBounds:[Ny[0],Ny[Ny.length-1]],rightBounds:[Ry[0],Ry[Ry.length-1]]},od={upperCenter:3,lowerCenter:4,index:71,numCoordinates:76};async function X9(e){var t,a;return ne.initial&&(nn=null),nn?e.debug&&K("cached model:",nn.modelUrl):nn=await $e((t=e.face.iris)==null?void 0:t.modelPath),Is=nn!=null&&nn.executor&&((a=nn.inputs)!=null&&a[0].shape)?nn.inputs[0].shape[2]:0,Is===-1&&(Is=64),nn}function L0(e,t,a,n){for(let r=0;r{let t=e[id.leftBounds[0]][2],a=e[id.rightBounds[0]][2];return t-a},H9=(e,t,a,n,r,s=!1,i=2.3)=>{let o=O0(D0(_9([e[a],e[n]]),i)),l=rd(o),u=fe.cropAndResize(t,[[o.startPoint[1]/r,o.startPoint[0]/r,o.endPoint[1]/r,o.endPoint[0]/r]],[0],[Is,Is]);if(s&&ne.kernels.includes("flipleftright")){let p=fe.flipLeftRight(u);J(u),u=p}return{box:o,boxSize:l,crop:u}},j9=(e,t,a,n=!1)=>{let r=[];for(let s=0;s{let n=e[$n[`${a}EyeUpper0`][od.upperCenter]][2],r=e[$n[`${a}EyeLower0`][od.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 K9(e,t,a,n){var T,N;if(!(nn!=null&&nn.executor))return e;let{box:r,boxSize:s,crop:i}=H9(e,t,id.leftBounds[0],id.leftBounds[1],a,!0,((T=n.face.iris)==null?void 0:T.scale)||2.3),{box:o,boxSize:l,crop:u}=H9(e,t,id.rightBounds[0],id.rightBounds[1],a,!0,((N=n.face.iris)==null?void 0:N.scale)||2.3),p=lt([i,u]);J(i),J(u);let c=nn.execute(p);J(p);let d=await c.data();J(c);let h=d.slice(0,od.numCoordinates*3),{rawCoords:m,iris:f}=j9(h,r,s,!0),g=d.slice(od.numCoordinates*3),{rawCoords:y,iris:x}=j9(g,o,l,!1),A=r3e(e);Math.abs(A)<30?(L0(e,m,"left",null),L0(e,y,"right",null)):A<1?L0(e,m,"left",["EyeUpper0","EyeLower0"]):L0(e,y,"right",["EyeUpper0","EyeLower0"]);let b=q9(e,f,"left"),w=q9(e,x,"right");return e.concat(b).concat(w)}async function Z9(e,t){var s,i,o,l,u,p,c,d,h,m;let a={lips:await((i=(s=t.filter(f=>f.size===160))==null?void 0:s[0])==null?void 0:i.data()),irisL:await((l=(o=t.filter(f=>f.size===10))==null?void 0:o[0])==null?void 0:l.data()),eyeL:await((p=(u=t.filter(f=>f.size===142))==null?void 0:u[0])==null?void 0:p.data()),irisR:await((d=(c=t.filter(f=>f.size===10))==null?void 0:c[1])==null?void 0:d.data()),eyeR:await((m=(h=t.filter(f=>f.size===142))==null?void 0:h[1])==null?void 0:m.data())};for(let f of Object.values(a))if(!f)return e;let n=fl.reduce((f,g)=>f+=e[g][2],0)/fl.length;for(let f=0;ff+=e[g][2],0)/gl.length;for(let f=0;fae()-dr.timestamp,n=dr.skipped<(((u=t.face.detector)==null?void 0:u.skipFrames)||0);!t.skipAllowed||!a||!n||dr.boxes.length===0?(dr.boxes=await U9(e,t),dr.timestamp=ae(),dr.skipped=0):dr.skipped++;let r=[],s=[],i=0,o=dc;for(let x=0;x[T[0]/(e.shape[2]||0),T[1]/(e.shape[1]||0),(T[2]||0)/o]);for(let T of Object.keys(hl))I.annotations[T]=[I.mesh[hl[T]]]}else if(!Ct)t.debug&&K("face mesh detection requested, but model is not loaded");else{if((h=t.face.attention)!=null&&h.enabled&&!ne.kernels.includes("atan2"))return t.face.attention.enabled=!1,J(I.tensor),r;let T=Ct.execute(I.tensor),M=await T.find($=>$.shape[$.shape.length-1]===1).data();if(I.faceScore=Math.round(100*M[0])/100,I.faceScore<(((m=t.face.detector)==null?void 0:m.minConfidence)||1)){if(A.confidence=I.faceScore,t.face.mesh.keepInvalid){I.box=_0(A,e),I.boxRaw=F0(A,e),I.size=A.size,I.score=I.boxScore,I.mesh=A.landmarks,I.meshRaw=I.mesh.map($=>[$[0]/(e.shape[2]||1),$[1]/(e.shape[1]||1),($[2]||0)/o]);for(let $ of Object.keys(hl))I.annotations[$]=[I.mesh[hl[$]]]}}else{let $=T.find(O=>O.shape[O.shape.length-1]===1404),E=Q($,[-1,3]),S=await E.array();J(E),(f=t.face.attention)!=null&&f.enabled?S=await Z9(S,T):(g=t.face.iris)!=null&&g.enabled&&(S=await K9(S,I.tensor,dc,t)),I.mesh=O9(S,A,b,w,dc),I.meshRaw=I.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($n))I.annotations[O]=$n[O].map(W=>I.mesh[W]);I.score=I.faceScore;let _={...L9(I.mesh,A),confidence:A.confidence,landmarks:A.landmarks,size:A.size};I.box=_0(_,e),I.boxRaw=F0(_,e),I.size=_.size,s.push(_)}J(T)}I.score>(((y=t.face.detector)==null?void 0:y.minConfidence)||1)?r.push(I):J(I.tensor)}return dr.boxes=s,r}async function Q9(e){var t,a,n,r,s,i;return ne.initial&&(Ct=null),(t=e.face.attention)!=null&&t.enabled&&(Ct!=null&&Ct.signature)&&Object.keys(((a=Ct==null?void 0:Ct.signature)==null?void 0:a.outputs)||{}).length<6&&(Ct=null),Ct?e.debug&&K("cached model:",Ct.modelUrl):(n=e.face.attention)!=null&&n.enabled?Ct=await $e(e.face.attention.modelPath):Ct=await $e((r=e.face.mesh)==null?void 0:r.modelPath),dc=Ct.executor&&((s=Ct==null?void 0:Ct.inputs)!=null&&s[0].shape)?(i=Ct==null?void 0:Ct.inputs)==null?void 0:i[0].shape[2]:256,Ct}var eI=ml,tI=lc;var $y=[],ra,W0=[],aI=0,nI=0,My=Number.MAX_SAFE_INTEGER,Py=!1;async function rI(e){var t,a,n;return ne.initial&&(ra=null),ra?e.debug&&K("cached model:",ra.modelUrl):(ra=await $e((t=e.face.emotion)==null?void 0:t.modelPath),Py=((n=(a=ra==null?void 0:ra.inputs)==null?void 0:a[0].shape)==null?void 0:n[3])===3,Py?$y=["angry","disgust","fear","happy","neutral","sad","surprise"]:$y=["angry","disgust","fear","happy","sad","surprise","neutral"]),ra}async function _y(e,t,a,n){var i,o;if(!ra)return[];let r=My<(((i=t.face.emotion)==null?void 0:i.skipFrames)||0),s=(((o=t.face.emotion)==null?void 0:o.skipTime)||0)>ae()-nI;return t.skipAllowed&&s&&r&&aI===n&&W0[a]&&W0[a].length>0?(My++,W0[a]):(My=0,new Promise(async l=>{var p,c,d;let u=[];if((p=t.face.emotion)!=null&&p.enabled){let h={},m=ra!=null&&ra.inputs[0].shape?ra.inputs[0].shape[2]:0;if(((c=t.face.emotion)==null?void 0:c.crop)>0){let g=(d=t.face.emotion)==null?void 0:d.crop,y=[[g,g,1-g,1-g]];h.resize=fe.cropAndResize(e,y,[0],[m,m])}else h.resize=fe.resizeBilinear(e,[m,m],!1);Py?(h.mul=te(h.resize,255),h.normalize=xe(h.mul,[103.939,116.779,123.68]),h.emotion=ra==null?void 0:ra.execute(h.normalize)):(h.channels=te(h.resize,ze.rgb),h.grayscale=ot(h.channels,3,!0),h.grayscaleSub=xe(h.grayscale,ze.tf05),h.grayscaleMul=te(h.grayscaleSub,ze.tf2),h.emotion=ra==null?void 0:ra.execute(h.grayscaleMul)),nI=ae();let f=await h.emotion.data();for(let g=0;g(t.face.emotion.minConfidence||0)&&u.push({score:Math.min(.99,Math.trunc(100*f[g])/100),emotion:$y[g]});u.sort((g,y)=>y.score-g.score),Object.keys(h).forEach(g=>J(h[g]))}W0[a]=u,aI=n,l(u)}))}var sa,Ss=[],iI=0,oI=0,Fy=Number.MAX_SAFE_INTEGER;async function lI(e){var t;return ne.initial&&(sa=null),sa?e.debug&&K("cached model:",sa.modelUrl):sa=await $e((t=e.face.description)==null?void 0:t.modelPath),sa}function i3e(e,t){var s,i;let a=e.image||e.tensor||e;if(!(sa!=null&&sa.inputs[0].shape))return a;let n;if(((s=t.face.description)==null?void 0:s.crop)>0){let o=(i=t.face.description)==null?void 0:i.crop,l=[[o,o,1-o,1-o]];n=fe.cropAndResize(a,l,[0],[sa.inputs[0].shape[2],sa.inputs[0].shape[1]])}else n=fe.resizeBilinear(a,[sa.inputs[0].shape[2],sa.inputs[0].shape[1]],!1);let r=te(n,ze.tf255);return J(n),r}async function Dy(e,t,a,n){var o,l,u,p;let r={age:0,gender:"unknown",genderScore:0,descriptor:[]};if(!(sa!=null&&sa.executor))return r;let s=Fy<(((o=t.face.description)==null?void 0:o.skipFrames)||0),i=(((l=t.face.description)==null?void 0:l.skipTime)||0)>ae()-iI;return t.skipAllowed&&s&&i&&oI===n&&((u=Ss==null?void 0:Ss[a])==null?void 0:u.age)>0&&((p=Ss==null?void 0:Ss[a])==null?void 0:p.genderScore)>0?(Fy++,Ss[a]):(Fy=0,new Promise(async c=>{var d;if((d=t.face.description)!=null&&d.enabled){let h=i3e(e,t),m=sa==null?void 0:sa.execute(h);iI=ae(),J(h);let g=await m.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 x=rr(m.find(N=>N.shape[1]===100),1),A=(await x.data())[0];J(x);let w=await m.find(N=>N.shape[1]===100).data();r.age=Math.round(w[A-1]>w[A+1]?10*A-100*w[A-1]:10*A+100*w[A+1])/10,(Number.isNaN(g[0])||Number.isNaN(w[0]))&&K("faceres error:",{model:sa,result:m});let I=m.find(N=>N.shape[1]===1024),T=I?await I.data():[];r.descriptor=Array.from(T),m.forEach(N=>J(N))}Ss[a]=r,oI=n,c(r)}))}var ld=.1,Oy=.5;function o3e(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 dI(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 $n.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]});ld&&ld>0&&(r=r.map(i=>({x:i.x>.5?i.x+ld:i.x-ld,y:i.y>.5?i.y+ld:i.y-ld})));for(let i=0;iae()-cI,s=zy<(((o=t.face.antispoof)==null?void 0:o.skipFrames)||0);return t.skipAllowed&&r&&s&&pI===n&&B0[a]?(zy++,B0[a]):(zy=0,new Promise(async l=>{let u=fe.resizeBilinear(e,[ia!=null&&ia.inputs[0].shape?ia.inputs[0].shape[2]:0,ia!=null&&ia.inputs[0].shape?ia.inputs[0].shape[1]:0],!1),p=ia==null?void 0:ia.execute(u),c=(await p.data())[0];B0[a]=Math.round(100*c)/100,pI=n,cI=ae(),J([u,p]),l(B0[a])}))}var oa,V0=[],Wy=Number.MAX_SAFE_INTEGER,fI=0,gI=0;async function yI(e){var t;return ne.initial&&(oa=null),oa?e.debug&&K("cached model:",oa.modelUrl):oa=await $e((t=e.face.liveness)==null?void 0:t.modelPath),oa}async function By(e,t,a,n){var i,o;if(!(oa!=null&&oa.executor))return 0;let r=(((i=t.face.liveness)==null?void 0:i.skipTime)||0)>ae()-gI,s=Wy<(((o=t.face.liveness)==null?void 0:o.skipFrames)||0);return t.skipAllowed&&r&&s&&fI===n&&V0[a]?(Wy++,V0[a]):(Wy=0,new Promise(async l=>{let u=fe.resizeBilinear(e,[oa!=null&&oa.inputs[0].shape?oa.inputs[0].shape[2]:0,oa!=null&&oa.inputs[0].shape?oa.inputs[0].shape[1]:0],!1),p=oa==null?void 0:oa.execute(u),c=(await p.data())[0];V0[a]=Math.round(100*c)/100,fI=n,gI=ae(),J([u,p]),l(V0[a])}))}var Pn,Vy=[],u3e=["white","black","asian","indian","other"],d3e=[15,23,28,35.5,45.5,55.5,65],AI=0,bI=0,Uy=Number.MAX_SAFE_INTEGER;async function vI(e){var t;return ne.initial&&(Pn=null),Pn?e.debug&&K("cached model:",Pn.modelUrl):Pn=await $e((t=e.face.gear)==null?void 0:t.modelPath),Pn}async function Gy(e,t,a,n){var i,o;if(!Pn)return{age:0,gender:"unknown",genderScore:0,race:[]};let r=Uy<(((i=t.face.gear)==null?void 0:i.skipFrames)||0),s=(((o=t.face.gear)==null?void 0:o.skipTime)||0)>ae()-bI;return t.skipAllowed&&s&&r&&AI===n&&Vy[a]?(Uy++,Vy[a]):(Uy=0,new Promise(async l=>{var y,x,A,b;if(!(Pn!=null&&Pn.inputs[0].shape))return;let u={},p=[[0,.1,.9,.9]];if(((y=t.face.gear)==null?void 0:y.crop)>0){let w=(x=t.face.gear)==null?void 0:x.crop;p=[[w,w,1-w,1-w]]}u.resize=fe.cropAndResize(e,p,[0],[Pn.inputs[0].shape[2],Pn.inputs[0].shape[1]]);let c={age:0,gender:"unknown",genderScore:0,race:[]};(A=t.face.gear)!=null&&A.enabled&&([u.age,u.gender,u.race]=Pn.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 w=0;w(((b=t.face.gear)==null?void 0:b.minConfidence)||.2)&&c.race.push({score:Math.round(100*h[w])/100,race:u3e[w]});c.race.sort((w,I)=>I.score-w.score);let f=Array.from(await u.age.data()).map((w,I)=>[d3e[I],w]).sort((w,I)=>I[1]-w[1]),g=f[0][0];for(let w=1;wJ(u[w])),Vy[a]=c,AI=n,bI=ae(),l(c)}))}var $a,U0=[],kI=0,II=0,Hy=Number.MAX_SAFE_INTEGER;async function SI(e){return ne.initial&&($a=null),$a?e.debug&&K("cached model:",$a.modelUrl):$a=await $e(e.face.ssrnet.modelPathAge),$a}async function jy(e,t,a,n){var i,o,l,u;if(!$a)return{age:0};let r=Hy<(((i=t.face.ssrnet)==null?void 0:i.skipFrames)||0),s=(((o=t.face.ssrnet)==null?void 0:o.skipTime)||0)>ae()-II;return t.skipAllowed&&r&&s&&kI===n&&((l=U0[a])!=null&&l.age)&&((u=U0[a])==null?void 0:u.age)>0?(Hy++,U0[a]):(Hy=0,new Promise(async p=>{var h,m,f;if(!($a!=null&&$a.inputs)||!$a.inputs[0]||!$a.inputs[0].shape)return;let c={};if(((h=t.face.ssrnet)==null?void 0:h.crop)>0){let g=(m=t.face.ssrnet)==null?void 0:m.crop,y=[[g,g,1-g,1-g]];c.resize=fe.cropAndResize(e,y,[0],[$a.inputs[0].shape[2],$a.inputs[0].shape[1]])}else c.resize=fe.resizeBilinear(e,[$a.inputs[0].shape[2],$a.inputs[0].shape[1]],!1);c.enhance=te(c.resize,ze.tf255);let d={age:0};if((f=t.face.ssrnet)!=null&&f.enabled&&(c.age=$a.execute(c.enhance)),c.age){let g=await c.age.data();d.age=Math.trunc(10*g[0])/10}Object.keys(c).forEach(g=>J(c[g])),U0[a]=d,kI=n,II=ae(),p(d)}))}var xa,G0=[],TI=0,NI=0,qy=Number.MAX_SAFE_INTEGER,Xy=[.2989,.587,.114];async function RI(e){var t;return ne.initial&&(xa=null),xa?e.debug&&K("cached model:",xa.modelUrl):xa=await $e((t=e.face.ssrnet)==null?void 0:t.modelPathGender),xa}async function Ky(e,t,a,n){var i,o,l,u;if(!xa)return{gender:"unknown",genderScore:0};let r=qy<(((i=t.face.ssrnet)==null?void 0:i.skipFrames)||0),s=(((o=t.face.ssrnet)==null?void 0:o.skipTime)||0)>ae()-NI;return t.skipAllowed&&r&&s&&TI===n&&((l=G0[a])!=null&&l.gender)&&((u=G0[a])==null?void 0:u.genderScore)>0?(qy++,G0[a]):(qy=0,new Promise(async p=>{var m,f,g;if(!(xa!=null&&xa.inputs[0].shape))return;let c={};if(((m=t.face.ssrnet)==null?void 0:m.crop)>0){let y=(f=t.face.ssrnet)==null?void 0:f.crop,x=[[y,y,1-y,1-y]];c.resize=fe.cropAndResize(e,x,[0],[xa.inputs[0].shape[2],xa.inputs[0].shape[1]])}else c.resize=fe.resizeBilinear(e,[xa.inputs[0].shape[2],xa.inputs[0].shape[1]],!1);c.enhance=De(()=>{var x,A;let y;if(((A=(x=xa==null?void 0:xa.inputs)==null?void 0:x[0].shape)==null?void 0:A[3])===1){let[b,w,I]=Sa(c.resize,3,3),T=te(b,Xy[0]),N=te(w,Xy[1]),M=te(I,Xy[2]),$=Dh([T,N,M]);y=te(xe($,ze.tf05),2)}else y=te(xe(c.resize,ze.tf05),2);return y});let d={gender:"unknown",genderScore:0};(g=t.face.ssrnet)!=null&&g.enabled&&(c.gender=xa.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(y=>J(c[y])),G0[a]=d,TI=n,NI=ae(),p(d)}))}var rn,Yy=[],MI=0,$I=0,PI=Number.MAX_SAFE_INTEGER;async function _I(e){var t;return ne.initial&&(rn=null),rn?e.debug&&K("cached model:",rn.modelUrl):rn=await $e((t=e.face.mobilefacenet)==null?void 0:t.modelPath),rn}async function Zy(e,t,a,n){var i,o;if(!(rn!=null&&rn.executor))return[];let r=PI<(((i=t.face.mobilefacenet)==null?void 0:i.skipFrames)||0),s=(((o=t.face.mobilefacenet)==null?void 0:o.skipTime)||0)>ae()-$I;return t.skipAllowed&&s&&r&&MI===n&&Yy[a]?(PI++,Yy[a]):new Promise(async l=>{var p;let u=[];if((p=t.face.mobilefacenet)!=null&&p.enabled&&(rn!=null&&rn.inputs[0].shape)){let c={};c.crop=fe.resizeBilinear(e,[rn.inputs[0].shape[2],rn.inputs[0].shape[1]],!1),c.data=rn.execute(c.crop);let d=await c.data.data();u=Array.from(d),Object.keys(c).forEach(h=>J(c[h]))}Yy[a]=u,MI=n,$I=ae(),l(u)})}var sn,Jy=[],DI=0,OI=0,zI=Number.MAX_SAFE_INTEGER;async function LI(e){return ne.initial&&(sn=null),sn?e.debug&&K("cached model:",sn.modelUrl):sn=await $e(e.face.insightface.modelPath),sn}async function Qy(e,t,a,n){var i,o;if(!(sn!=null&&sn.executor))return[];let r=zI<(((i=t.face.insightface)==null?void 0:i.skipFrames)||0),s=(((o=t.face.insightface)==null?void 0:o.skipTime)||0)>ae()-OI;return t.skipAllowed&&s&&r&&DI===n&&Jy[a]?(zI++,Jy[a]):new Promise(async l=>{var p;let u=[];if((p=t.face.insightface)!=null&&p.enabled&&(sn!=null&&sn.inputs[0].shape)){let c={};c.crop=fe.resizeBilinear(e,[sn.inputs[0].shape[2],sn.inputs[0].shape[1]],!1),c.data=sn.execute(c.crop);let d=await c.data.data();u=Array.from(d),Object.keys(c).forEach(h=>J(c[h]))}Jy[a]=u,DI=n,OI=ae(),l(u)})}var p3e=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}},BI=(e,t)=>{let a=f=>{let g=Math.sqrt(f[0]*f[0]+f[1]*f[1]+f[2]*f[2]);return f[0]/=g,f[1]/=g,f[2]/=g,f},n=(f,g)=>{let y=f[0]-g[0],x=f[1]-g[1],A=f[2]-g[2];return[y,x,A]},r=(f,g)=>{let y=f[1]*g[2]-f[2]*g[1],x=f[2]*g[0]-f[0]*g[2],A=f[0]*g[1]-f[1]*g[0];return[y,x,A]},s=f=>{let[g,y,x,A,b,w,I,T,N]=f,M,$,E;return A<1?A>-1?(E=Math.asin(A),$=Math.atan2(-I,g),M=Math.atan2(-w,b)):(E=-Math.PI/2,$=-Math.atan2(T,N),M=0):(E=Math.PI/2,$=Math.atan2(T,N),M=0),Number.isNaN(M)&&(M=0),Number.isNaN($)&&($=0),Number.isNaN(E)&&(E=0),{pitch:2*-M,yaw:2*-$,roll:2*-E}},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(f=>[f[0]*t[0]/o,f[1]*t[1]/o,f[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),m=i.length===478?p3e(e):{bearing:0,strength:0};return{angle:h,matrix:d,gaze:m}};function VI(e,t){let a=e==null?void 0:e.annotations;if(!(a!=null&&a.leftEyeIris)||!(a!=null&&a.rightEyeIris))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 ex=async(e,t)=>{var m,f,g,y,x,A,b,w,I,T,N,M,$,E,S,_,O,W,P,U,G,q,H;let a=ae(),n,r,s,i,o,l,u,p,c,d=[];e.state="run:face";let h=await J9(t,e.config);if(e.performance.face=ne.perfadd?(e.performance.face||0)+Math.trunc(ae()-a):Math.trunc(ae()-a),!t.shape||t.shape.length!==4)return[];if(!h)return[];for(let V=0;V200?BI(h[V],[t.shape[2],t.shape[1]]):null;e.analyze("Start Emotion:"),e.config.async?i=(f=e.config.face.emotion)!=null&&f.enabled?_y(h[V].tensor||Ve([]),e.config,V,h.length):[]:(e.state="run:emotion",a=ae(),i=(g=e.config.face.emotion)!=null&&g.enabled?await _y(h[V].tensor||Ve([]),e.config,V,h.length):[],e.performance.emotion=ne.perfadd?(e.performance.emotion||0)+Math.trunc(ae()-a):Math.trunc(ae()-a)),e.analyze("End Emotion:"),e.analyze("Start AntiSpoof:"),e.config.async?u=(y=e.config.face.antispoof)!=null&&y.enabled?Ly(h[V].tensor||Ve([]),e.config,V,h.length):0:(e.state="run:antispoof",a=ae(),u=(x=e.config.face.antispoof)!=null&&x.enabled?await Ly(h[V].tensor||Ve([]),e.config,V,h.length):0,e.performance.antispoof=ne.perfadd?(e.performance.antispoof||0)+Math.trunc(ae()-a):Math.trunc(ae()-a)),e.analyze("End AntiSpoof:"),e.analyze("Start Liveness:"),e.config.async?p=(A=e.config.face.liveness)!=null&&A.enabled?By(h[V].tensor||Ve([]),e.config,V,h.length):0:(e.state="run:liveness",a=ae(),p=(b=e.config.face.liveness)!=null&&b.enabled?await By(h[V].tensor||Ve([]),e.config,V,h.length):0,e.performance.liveness=ne.perfadd?(e.performance.antispoof||0)+Math.trunc(ae()-a):Math.trunc(ae()-a)),e.analyze("End Liveness:"),e.analyze("Start GEAR:"),e.config.async?r=(w=e.config.face.gear)!=null&&w.enabled?Gy(h[V].tensor||Ve([]),e.config,V,h.length):null:(e.state="run:gear",a=ae(),r=(I=e.config.face.gear)!=null&&I.enabled?await Gy(h[V].tensor||Ve([]),e.config,V,h.length):null,e.performance.gear=Math.trunc(ae()-a)),e.analyze("End GEAR:"),e.analyze("Start SSRNet:"),e.config.async?(n=(T=e.config.face.ssrnet)!=null&&T.enabled?jy(h[V].tensor||Ve([]),e.config,V,h.length):null,s=(N=e.config.face.ssrnet)!=null&&N.enabled?Ky(h[V].tensor||Ve([]),e.config,V,h.length):null):(e.state="run:ssrnet",a=ae(),n=(M=e.config.face.ssrnet)!=null&&M.enabled?await jy(h[V].tensor||Ve([]),e.config,V,h.length):null,s=($=e.config.face.ssrnet)!=null&&$.enabled?await Ky(h[V].tensor||Ve([]),e.config,V,h.length):null,e.performance.ssrnet=Math.trunc(ae()-a)),e.analyze("End SSRNet:"),e.analyze("Start MobileFaceNet:"),e.config.async?o=(E=e.config.face.mobilefacenet)!=null&&E.enabled?Zy(h[V].tensor||Ve([]),e.config,V,h.length):null:(e.state="run:mobilefacenet",a=ae(),o=(S=e.config.face.mobilefacenet)!=null&&S.enabled?await Zy(h[V].tensor||Ve([]),e.config,V,h.length):null,e.performance.mobilefacenet=Math.trunc(ae()-a)),e.analyze("End MobileFaceNet:"),e.analyze("Start InsightFace:"),e.config.async?l=(_=e.config.face.insightface)!=null&&_.enabled?Qy(h[V].tensor||Ve([]),e.config,V,h.length):null:(e.state="run:mobilefacenet",a=ae(),l=(O=e.config.face.insightface)!=null&&O.enabled?await Qy(h[V].tensor||Ve([]),e.config,V,h.length):null,e.performance.mobilefacenet=Math.trunc(ae()-a)),e.analyze("End InsightFace:"),e.analyze("Start Description:"),e.config.async?c=Dy(h[V].tensor||Ve([]),e.config,V,h.length):(e.state="run:description",a=ae(),c=await Dy(h[V].tensor||Ve([]),e.config,V,h.length),e.performance.description=ne.perfadd?(e.performance.description||0)+Math.trunc(ae()-a):Math.trunc(ae()-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:"),(W=e.config.face.ssrnet)!=null&&W.enabled&&n&&s&&(c={...c,age:n.age,gender:s.gender,genderScore:s.genderScore}),(P=e.config.face.gear)!=null&&P.enabled&&r&&(c={...c,age:r.age,gender:r.gender,genderScore:r.genderScore,race:r.race}),(U=e.config.face.mobilefacenet)!=null&&U.enabled&&o&&(c.descriptor=o),(G=e.config.face.insightface)!=null&&G.enabled&&l&&(c.descriptor=l);let X=(q=e.config.face.iris)!=null&&q.enabled?VI(h[V],t.shape[2]):0,re=(H=e.config.face.detector)!=null&&H.return?Oe(h[V].tensor):null;J(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),X>0&&(ee.distance=X),Z&&(ee.rotation=Z),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 Pa={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=>Pa.nameMapping[e],getPoints:e=>Pa.pointsMapping[e]},Ts={none:0,half:1,full:2,nameMapping:{0:"none",1:"half",2:"full"},getName:e=>Ts.nameMapping[e]},$t={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=>$t.nameMapping[e]},Cs=class{constructor(t){he(this,"name");he(this,"curls");he(this,"directions");he(this,"weights");he(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:Un,index:Pr,middle:_r,ring:bl,pinky:vl}=Pa,{none:Gn,half:h3e,full:Hn}=Ts,{verticalUp:ud,verticalDown:j7e,horizontalLeft:tx,horizontalRight:m3e,diagonalUpRight:f3e,diagonalUpLeft:dd,diagonalDownRight:q7e,diagonalDownLeft:X7e}=$t,Ns=new Cs("thumbs up");Ns.curl(Un,Gn,1);Ns.direction(Un,ud,1);Ns.direction(Un,dd,.25);Ns.direction(Un,f3e,.25);for(let e of[Pa.index,Pa.middle,Pa.ring,Pa.pinky])Ns.curl(e,Hn,1),Ns.direction(e,tx,1),Ns.direction(e,m3e,1);var Ht=new Cs("victory");Ht.curl(Un,h3e,.5);Ht.curl(Un,Gn,.5);Ht.direction(Un,ud,1);Ht.direction(Un,dd,1);Ht.curl(Pr,Gn,1);Ht.direction(Pr,ud,.75);Ht.direction(Pr,dd,1);Ht.curl(_r,Gn,1);Ht.direction(_r,ud,1);Ht.direction(_r,dd,.75);Ht.curl(bl,Hn,1);Ht.direction(bl,ud,.2);Ht.direction(bl,dd,1);Ht.direction(bl,tx,.2);Ht.curl(vl,Hn,1);Ht.direction(vl,ud,.2);Ht.direction(vl,dd,1);Ht.direction(vl,tx,.2);Ht.weight(Pr,2);Ht.weight(_r,2);var Rs=new Cs("point");Rs.curl(Un,Hn,1);Rs.curl(Pr,Gn,.5);Rs.curl(_r,Hn,.5);Rs.curl(bl,Hn,.5);Rs.curl(vl,Hn,.5);Rs.weight(Pr,2);Rs.weight(_r,2);var Es=new Cs("middle finger");Es.curl(Un,Gn,1);Es.curl(Pr,Hn,.5);Es.curl(_r,Hn,.5);Es.curl(bl,Hn,.5);Es.curl(vl,Hn,.5);Es.weight(Pr,2);Es.weight(_r,2);var pd=new Cs("open palm");pd.curl(Un,Gn,.75);pd.curl(Pr,Gn,.75);pd.curl(_r,Gn,.75);pd.curl(bl,Gn,.75);pd.curl(vl,Gn,.75);var UI=[Ns,Ht,Rs,Es,pd];var g3e=.7,wl={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 GI(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 jI(e,t){if(!e||!t)return[0,0];let a=GI(e[0],e[1],t[0],t[1]);if(e.length===2)return a;let n=GI(e[1],e[2],t[1],t[2]);return[a,n]}function HI(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 y3e(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),m=Math.sqrt(s*s+l*l+c*c),f=(m*m+d*d-h*h)/(2*m*d);f>1?f=1:f<-1&&(f=-1);let g=Math.acos(f);g=57.2958*g%180;let y;return g>wl.NO_CURL_START_LIMIT?y=Ts.none:g>wl.HALF_CURL_START_LIMIT?y=Ts.half:y=Ts.full,y}function qI(e,t,a,n){let r;return n===Math.abs(e)?e>0?r=$t.horizontalLeft:r=$t.horizontalRight:n===Math.abs(t)?t>0?r=$t.horizontalLeft:r=$t.horizontalRight:a>0?r=$t.horizontalLeft:r=$t.horizontalRight,r}function XI(e,t,a,n){let r;return n===Math.abs(e)?e<0?r=$t.verticalDown:r=$t.verticalUp:n===Math.abs(t)?t<0?r=$t.verticalDown:r=$t.verticalUp:a<0?r=$t.verticalDown:r=$t.verticalUp,r}function x3e(e,t,a,n,r,s,i,o){let l,u=XI(e,t,a,n),p=qI(r,s,i,o);return u===$t.verticalUp?p===$t.horizontalLeft?l=$t.diagonalUpLeft:l=$t.diagonalUpRight:p===$t.horizontalLeft?l=$t.diagonalDownLeft:l=$t.diagonalDownRight,l}function A3e(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,m=0,f=c/(p+1e-5);f>1.5?d+=wl.DISTANCE_VOTE_POWER:f>.66?h+=wl.DISTANCE_VOTE_POWER:m+=wl.DISTANCE_VOTE_POWER;let g=Math.sqrt(r*r+o*o),y=Math.sqrt(s*s+l*l),x=Math.sqrt(i*i+u*u),A=Math.max(g,y,x),b=e[0],w=e[1],I=a[0],T=a[1];A===g?(I=a[0],T=a[1]):A===x&&(b=t[0],w=t[1]);let $=jI([b,w],[I,T]),E=HI($,wl.TOTAL_ANGLE_VOTE_POWER);d+=E[0],h+=E[1],m+=E[2];for(let _ of n){let O=HI(_,wl.SINGLE_ANGLE_VOTE_POWER);d+=O[0],h+=O[1],m+=O[2]}let S;return d===Math.max(d,h,m)?S=XI(l,o,u,c):m===Math.max(h,m)?S=qI(s,r,i,p):S=x3e(l,o,u,c,s,r,i,p),S}function KI(e){let t=[],a=[],n=[],r=[];if(!e)return{curls:n,directions:r};for(let s of Pa.all){let i=Pa.getPoints(s),o=[],l=[];for(let u of i){let p=e[u[0]],c=e[u[1]],d=jI(p,c),h=d[0],m=d[1];o.push(h),l.push(m)}t.push(o),a.push(l)}for(let s of Pa.all){let i=s===Pa.thumb?1:0,o=Pa.getPoints(s),l=e[o[i][0]],u=e[o[i+1][1]],p=e[o[3][1]],c=y3e(l,u,p),d=A3e(l,u,p,t[s].slice(i));n[s]=c,r[s]=d}return{curls:n,directions:r}}function H0(e){if(!e||e.length===0)return null;let t=KI(e),a={};for(let n of Pa.all)a[Pa.getName(n)]={curl:Ts.getName(t.curls[n]),direction:$t.getName(t.directions[n])};return a}function YI(e){let t=[];if(!e||e.length===0)return t;let a=KI(e);for(let n of UI){let r=n.matchAgainst(a.curls,a.directions);r>=g3e&&t.push({name:n.name,confidence:r})}return t}var ZI=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},JI=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},QI=e=>{var a,n,r,s;if(!e)return[];let t=[];for(let i=0;i.06||g>.06)&&(h=!1),f>g?g>.04&&t.push({iris:i,gesture:"looking right"}):f>.04&&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],x=Math.abs(e[i].mesh[374][1]-e[i].annotations.leftEyeIris[0][1])/e[i].box[3];(x<.01||y<.01||x>.022||y>.022)&&(h=!1),(x<.01||y<.01)&&t.push({iris:i,gesture:"looking down"}),(x>.022||y>.022)&&t.push({iris:i,gesture:"looking up"}),h&&t.push({iris:i,gesture:"looking center"})}return t},eS=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 q0(e,t=1.5){let a=pc(e),n=j0(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 X0(e){let t=pc(e),a=j0(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 v3e(e){return e-2*Math.PI*Math.floor((e+Math.PI)/(2*Math.PI))}function sS(e,t){let a=Math.PI/2-Math.atan2(-(t[1]-e[1]),t[0]-e[0]);return v3e(a)}var tS=(e,t)=>[[1,0,e],[0,1,t],[0,0,1]];function Ms(e,t){let a=0;for(let n=0;n[i.x,i.y]),this.anchorsTensor=Zn(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=Bt([this.inputSize,this.inputSize]),this.doubleInputSizeTensor=Bt([this.inputSize*2,this.inputSize*2])}normalizeBoxes(t){let a={};a.boxOffsets=Fe(t,[0,0],[-1,2]),a.boxSizes=Fe(t,[0,2],[-1,2]),a.div=ve(a.boxOffsets,this.inputSizeTensor),a.boxCenterPoints=we(a.div,this.anchorsTensor),a.halfBoxSizes=ve(a.boxSizes,this.doubleInputSizeTensor),a.sub=xe(a.boxCenterPoints,a.halfBoxSizes),a.startPoints=te(a.sub,this.inputSizeTensor),a.add=we(a.boxCenterPoints,a.halfBoxSizes),a.endPoints=te(a.add,this.inputSizeTensor);let n=Vu([a.startPoints,a.endPoints],1);return Object.keys(a).forEach(r=>J(a[r])),n}normalizeLandmarks(t,a){let n={};n.reshape=Q(t,[-1,7,2]),n.div=ve(n.reshape,this.inputSizeTensor),n.landmarks=we(n.div,this.anchors[a]?this.anchors[a]:0);let r=te(n.landmarks,this.inputSizeTensor);return Object.keys(n).forEach(s=>J(n[s])),r}async predict(t,a){var o;let n={};n.resize=fe.resizeBilinear(t,[this.inputSize,this.inputSize]),n.div=ve(n.resize,ze.tf127),n.image=xe(n.div,ze.tf1),n.batched=this.model.execute(n.image),n.predictions=Oe(n.batched),n.slice=Fe(n.predictions,[0,0],[-1,1]),n.sigmoid=za(n.slice),n.scores=Oe(n.sigmoid);let r=await n.scores.data();n.boxes=Fe(n.predictions,[0,1],[-1,4]),n.norm=this.normalizeBoxes(n.boxes),n.nms=await fe.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=Fe(n.norm,[l,0],[1,-1]),u.slice=Fe(n.predictions,[l,5],[1,14]),u.norm=this.normalizeLandmarks(u.slice,l),u.palmLandmarks=Q(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(),m={startPoint:c,endPoint:d,palmLandmarks:h,confidence:r[l]},f=rS(m,[(t.shape[2]||1)/this.inputSize,(t.shape[1]||0)/this.inputSize]);i.push(f),Object.keys(u).forEach(g=>J(u[g]))}return Object.keys(n).forEach(l=>J(n[l])),i}};var S3e=5,uS=1.65,dS=[0,5,9,13,17,1,2],C3e=0,T3e=2,pS=0,Y0=class{constructor(t,a){he(this,"handDetector");he(this,"handPoseModel");he(this,"inputSize");he(this,"storedBoxes");he(this,"skipped");he(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=>rx([...s,1],a)),r=this.calculateLandmarksBoundingBox(n);return q0(X0(r),S3e)}getBoxForHandLandmarks(t){let a=this.calculateLandmarksBoundingBox(t),n=q0(X0(a),uS);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=nx(n,[0,0]),u=o.map(h=>[...rx(h,l),h[2]]),p=iS(r),c=[...pc(a),1],d=[Ms(c,p[0]),Ms(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)>ae()-pS,i=this.skipped<(a.hand.skipFrames||0);a.skipAllowed&&s&&i?this.skipped++:(r=await this.handDetector.predict(t,a),this.skipped=0),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=Q(A,[-1,3]),I=await w.array();J(A),J(w);let T=this.transformRawCoords(I,f,p,m),N=this.getBoxForHandLandmarks(T);this.storedBoxes[l]={...N,confidence:b};let M={landmarks:T,confidence:b,boxConfidence:u.confidence,fingerConfidence:b,box:{topLeft:N.startPoint,bottomRight:N.endPoint}};o.push(M)}else this.storedBoxes[l]=null;J(A)}else{let p=q0(X0(u),uS),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 cS={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]},kl,Il,sx;function R3e(){let e=kl?new K0(kl):void 0;e&&Il&&(sx=new Y0(e,Il))}async function ix(e,t){sx||R3e();let a=await sx.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=H0(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 hS(e){var t;return ne.initial&&(kl=null),kl?e.debug&&K("cached model:",kl.modelUrl):kl=await $e((t=e.hand.detector)==null?void 0:t.modelPath),kl}async function mS(e){var t;return ne.initial&&(Il=null),Il?e.debug&&K("cached model:",Il.modelUrl):Il=await $e((t=e.hand.skeleton)==null?void 0:t.modelPath),Il}var Ot=[null,null],E3e=["StatefulPartitionedCall/Postprocessor/Slice","StatefulPartitionedCall/Postprocessor/ExpandDims_1"],$s=[[0,0],[0,0]],M3e=["hand","fist","pinch","point","face","tip","pinchtip"],gS=4,yS=1.6,$3e=512,P3e=1.4,Z0=Number.MAX_SAFE_INTEGER,ox=0,Fr=[0,0],Dt={boxes:[],hands:[]},xS={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 AS(e){var t;if(ne.initial&&(Ot[0]=null),Ot[0])e.debug&&K("cached model:",Ot[0].modelUrl);else{b0(["tensorlistreserve","enter","tensorlistfromtensor","merge","loopcond","switch","exit","tensorliststack","nextiteration","tensorlistsetitem","tensorlistgetitem","reciprocal","shape","split","where"],e),Ot[0]=await $e((t=e.hand.detector)==null?void 0:t.modelPath);let a=Ot[0].executor?Object.values(Ot[0].modelSignature.inputs):void 0;$s[0][0]=Array.isArray(a)?parseInt(a[0].tensorShape.dim[1].size):0,$s[0][1]=Array.isArray(a)?parseInt(a[0].tensorShape.dim[2].size):0}return Ot[0]}async function bS(e){var t;if(ne.initial&&(Ot[1]=null),Ot[1])e.debug&&K("cached model:",Ot[1].modelUrl);else{Ot[1]=await $e((t=e.hand.skeleton)==null?void 0:t.modelPath);let a=Ot[1].executor?Object.values(Ot[1].modelSignature.inputs):void 0;$s[1][0]=Array.isArray(a)?parseInt(a[0].tensorShape.dim[1].size):0,$s[1][1]=Array.isArray(a)?parseInt(a[0].tensorShape.dim[2].size):0}return Ot[1]}async function _3e(e,t){let a=[];if(!e||!Ot[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,$3e),i=Math.round(s*r/8)*8;n.resize=fe.resizeBilinear(e,[s,i]),n.cast=Ue(n.resize,"int32"),[n.rawScores,n.rawBoxes]=await Ot[0].executeAsync(n.cast,E3e),n.boxes=Oe(n.rawBoxes,[0,2]),n.scores=Oe(n.rawScores,[0]);let o=Na(n.scores,1);J(o[gS]),o.splice(gS,1),n.filtered=ca(o,1),J(o),n.max=fa(n.filtered,1),n.argmax=rr(n.filtered,1);let l=0;n.nms=await fe.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=Fe(n.boxes,d,1),m=await h.data();J(h);let f=[m[1],m[0],m[3]-m[1],m[2]-m[0]],g=R0(f,P3e),y=[Math.trunc(f[0]*Fr[0]),Math.trunc(f[1]*Fr[1]),Math.trunc(f[2]*Fr[0]),Math.trunc(f[3]*Fr[1])],x=p[d],A=M3e[c[d]],b={id:l++,score:x,box:y,boxRaw:g,label:A};a.push(b)}return Object.keys(n).forEach(d=>J(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 lx(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&&Ot[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=fe.cropAndResize(e,[s],[0],[$s[1][0],$s[1][1]],"bilinear"),r.div=ve(r.crop,ze.tf255),[r.score,r.keypoints]=Ot[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=Q(r.keypoints,[-1,3]);let p=(await r.reshaped.array()).map(c=>[c[0]/$s[1][1],c[1]/$s[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=>[Fr[0]*(c[0]+t.boxRaw[0]),Fr[1]*(c[1]+t.boxRaw[1]),c[2]||0]),n.landmarks=H0(n.keypoints);for(let c of Object.keys(xS))n.annotations[c]=xS[c].map(d=>n.landmarks&&n.keypoints[d]?n.keypoints[d]:null)}Object.keys(r).forEach(l=>J(r[l]))}return n}async function ux(e,t){var r,s;if(!((r=Ot[0])!=null&&r.executor)||!((s=Ot[1])!=null&&s.executor)||!Ot[0].inputs[0].shape||!Ot[1].inputs[0].shape)return[];Fr=[e.shape[2]||0,e.shape[1]||0],Z0++;let a=(t.hand.skipTime||0)>ae()-ox,n=Z0<(t.hand.skipFrames||0);return t.skipAllowed&&a&&n?Dt.hands:new Promise(async i=>{let o=3*(t.hand.skipTime||0)>ae()-ox,l=Z0<3*(t.hand.skipFrames||0);t.skipAllowed&&Dt.hands.length===t.hand.maxDetected?Dt.hands=await Promise.all(Dt.boxes.map(p=>lx(e,p,t))):t.skipAllowed&&o&&l&&Dt.hands.length>0?Dt.hands=await Promise.all(Dt.boxes.map(p=>lx(e,p,t))):(Dt.boxes=await _3e(e,t),ox=ae(),Dt.hands=await Promise.all(Dt.boxes.map(p=>lx(e,p,t))),Z0=0);let u=[...Dt.boxes];if(Dt.boxes.length=0,t.cacheSensitivity>0)for(let p=0;p.05&&c.box[3]/(e.shape[1]||1)>.05&&Dt.hands[p].fingerScore&&Dt.hands[p].fingerScore>(t.hand.minConfidence||0)){let d=R0(c.box,yS),h=R0(c.boxRaw,yS);Dt.boxes.push({...u[p],box:d,boxRaw:h})}}for(let p=0;p({face:[],body:[],hand:[],gesture:[],object:[],persons:[],performance:{},timestamp:0,width:0,height:0,error:e});var cc={};yr(cc,{connected:()=>Q0,horizontal:()=>dx,kpt:()=>J0,relative:()=>cx,vertical:()=>px});var J0=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],dx=[["leftEye","rightEye"],["leftEar","rightEar"],["leftShoulder","rightShoulder"],["leftElbow","rightElbow"],["leftWrist","rightWrist"],["leftHip","rightHip"],["leftKnee","rightKnee"],["leftAnkle","rightAnkle"]],px=[["leftKnee","leftShoulder"],["rightKnee","rightShoulder"],["leftAnkle","leftKnee"],["rightAnkle","rightKnee"]],cx=[[["leftHip","rightHip"],["leftShoulder","rightShoulder"]],[["leftElbow","rightElbow"],["leftShoulder","rightShoulder"]]],Q0={leftLeg:["leftHip","leftKnee","leftAnkle"],rightLeg:["rightHip","rightKnee","rightAnkle"],torso:["leftShoulder","rightShoulder","rightHip","leftHip","leftShoulder"],leftArm:["leftShoulder","leftElbow","leftWrist"],rightArm:["rightShoulder","rightElbow","rightWrist"],head:[]};var Ae=pr(),hx=0;function wS(e,t){var i,o,l,u,p,c,d,h,m,f,g,y,x,A,b,w,I,T,N,M,$,E,S,_,O,W;let a=ae();if(!e)return pr();let n=Date.now()-e.timestamp,r=n<1e3?8-Math.log(n+1):1;if(e.canvas&&(Ae.canvas=e.canvas),e.error&&(Ae.error=e.error),!Ae.body||e.body.length!==Ae.body.length)Ae.body=JSON.parse(JSON.stringify(e.body));else for(let P=0;P((r-1)*Ae.body[P].box[X]+Z)/r),G=e.body[P].boxRaw.map((Z,X)=>((r-1)*Ae.body[P].boxRaw[X]+Z)/r),q=e.body[P].keypoints.map((Z,X)=>{var re,ee,ge,ie,be,Ce,Re,Le,qe;return{score:Z.score,part:Z.part,position:[Ae.body[P].keypoints[X]?((r-1)*(Ae.body[P].keypoints[X].position[0]||0)+(Z.position[0]||0))/r:Z.position[0],Ae.body[P].keypoints[X]?((r-1)*(Ae.body[P].keypoints[X].position[1]||0)+(Z.position[1]||0))/r:Z.position[1],Ae.body[P].keypoints[X]?((r-1)*(Ae.body[P].keypoints[X].position[2]||0)+(Z.position[2]||0))/r:Z.position[2]],positionRaw:[Ae.body[P].keypoints[X]?((r-1)*(Ae.body[P].keypoints[X].positionRaw[0]||0)+(Z.positionRaw[0]||0))/r:Z.positionRaw[0],Ae.body[P].keypoints[X]?((r-1)*(Ae.body[P].keypoints[X].positionRaw[1]||0)+(Z.positionRaw[1]||0))/r:Z.positionRaw[1],Ae.body[P].keypoints[X]?((r-1)*(Ae.body[P].keypoints[X].positionRaw[2]||0)+(Z.positionRaw[2]||0))/r:Z.positionRaw[2]],distance:[Ae.body[P].keypoints[X]?((r-1)*(((re=Ae.body[P].keypoints[X].distance)==null?void 0:re[0])||0)+(((ee=Z.distance)==null?void 0:ee[0])||0))/r:(ge=Z.distance)==null?void 0:ge[0],Ae.body[P].keypoints[X]?((r-1)*(((ie=Ae.body[P].keypoints[X].distance)==null?void 0:ie[1])||0)+(((be=Z.distance)==null?void 0:be[1])||0))/r:(Ce=Z.distance)==null?void 0:Ce[1],Ae.body[P].keypoints[X]?((r-1)*(((Re=Ae.body[P].keypoints[X].distance)==null?void 0:Re[2])||0)+(((Le=Z.distance)==null?void 0:Le[2])||0))/r:(qe=Z.distance)==null?void 0:qe[2]]}}),H={},V={connected:{}};(i=t.body.modelPath)!=null&&i.includes("efficientpose")?V=$0:(o=t.body.modelPath)!=null&&o.includes("blazepose")?V=T0:(l=t.body.modelPath)!=null&&l.includes("movenet")&&(V=cc);for(let[Z,X]of Object.entries(V.connected)){let re=[];for(let ee=0;eebe.part===X[ee]),ie=q.find(be=>be.part===X[ee+1]);ge&&ie&&re.push([ge.position,ie.position])}H[Z]=re}Ae.body[P]={...e.body[P],box:U,boxRaw:G,keypoints:q,annotations:H}}if(!Ae.hand||e.hand.length!==Ae.hand.length)Ae.hand=JSON.parse(JSON.stringify(e.hand));else for(let P=0;P((r-1)*Ae.hand[P].box[Z]+V)/r),G=e.hand[P].boxRaw.map((V,Z)=>((r-1)*Ae.hand[P].boxRaw[Z]+V)/r);Ae.hand[P].keypoints.length!==e.hand[P].keypoints.length&&(Ae.hand[P].keypoints=e.hand[P].keypoints);let q=e.hand[P].keypoints&&e.hand[P].keypoints.length>0?e.hand[P].keypoints.map((V,Z)=>V.map((X,re)=>((r-1)*(Ae.hand[P].keypoints[Z][re]||1)+(X||0))/r)):[],H={};if(Object.keys(Ae.hand[P].annotations).length!==Object.keys(e.hand[P].annotations).length)Ae.hand[P].annotations=e.hand[P].annotations,H=Ae.hand[P].annotations;else if(e.hand[P].annotations)for(let V of Object.keys(e.hand[P].annotations))H[V]=(c=(p=(u=e.hand[P])==null?void 0:u.annotations)==null?void 0:p[V])!=null&&c[0]?e.hand[P].annotations[V].map((Z,X)=>Z.map((re,ee)=>((r-1)*Ae.hand[P].annotations[V][X][ee]+re)/r)):null;Ae.hand[P]={...e.hand[P],box:U,boxRaw:G,keypoints:q,annotations:H}}if(!Ae.face||e.face.length!==Ae.face.length)Ae.face=JSON.parse(JSON.stringify(e.face));else for(let P=0;P((r-1)*Ae.face[P].box[V]+H)/r),G=e.face[P].boxRaw.map((H,V)=>((r-1)*Ae.face[P].boxRaw[V]+H)/r),q=e.face[P].annotations;if(Object.keys(Ae.face[P].annotations).length!==Object.keys(e.face[P].annotations).length)Ae.face[P].annotations=e.face[P].annotations,q=Ae.face[P].annotations;else if(e.face[P].annotations)for(let H of Object.keys(e.face[P].annotations))q[H]=(m=(h=(d=e.face[P])==null?void 0:d.annotations)==null?void 0:h[H])!=null&&m[0]?e.face[P].annotations[H].map((V,Z)=>V.map((X,re)=>((r-1)*Ae.face[P].annotations[H][Z][re]+X)/r)):null;if(e.face[P].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[P].rotation)==null?void 0:f.matrix,H.angle={roll:((r-1)*(((y=(g=Ae.face[P].rotation)==null?void 0:g.angle)==null?void 0:y.roll)||0)+(((A=(x=e.face[P].rotation)==null?void 0:x.angle)==null?void 0:A.roll)||0))/r,yaw:((r-1)*(((w=(b=Ae.face[P].rotation)==null?void 0:b.angle)==null?void 0:w.yaw)||0)+(((T=(I=e.face[P].rotation)==null?void 0:I.angle)==null?void 0:T.yaw)||0))/r,pitch:((r-1)*(((M=(N=Ae.face[P].rotation)==null?void 0:N.angle)==null?void 0:M.pitch)||0)+(((E=($=e.face[P].rotation)==null?void 0:$.angle)==null?void 0:E.pitch)||0))/r},H.gaze={bearing:((r-1)*(((S=Ae.face[P].rotation)==null?void 0:S.gaze.bearing)||0)+(((_=e.face[P].rotation)==null?void 0:_.gaze.bearing)||0))/r,strength:((r-1)*(((O=Ae.face[P].rotation)==null?void 0:O.gaze.strength)||0)+(((W=e.face[P].rotation)==null?void 0:W.gaze.strength)||0))/r},Ae.face[P]={...e.face[P],rotation:H,box:U,boxRaw:G,annotations:q}}else Ae.face[P]={...e.face[P],box:U,boxRaw:G,annotations:q}}if(!Ae.object||e.object.length!==Ae.object.length)Ae.object=JSON.parse(JSON.stringify(e.object));else for(let P=0;P((r-1)*Ae.object[P].box[H]+q)/r),G=e.object[P].boxRaw.map((q,H)=>((r-1)*Ae.object[P].boxRaw[H]+q)/r);Ae.object[P]={...e.object[P],box:U,boxRaw:G}}if(e.persons){let P=e.persons;if(!Ae.persons||P.length!==Ae.persons.length)Ae.persons=JSON.parse(JSON.stringify(P));else for(let U=0;U((r-1)*Ae.persons[U].box[q]+G)/r)}e.gesture&&(Ae.gesture=e.gesture),Ae.width=e.width,Ae.height=e.height;let s=ae();return hx=ne.perfadd?hx+Math.round(s-a):Math.round(s-a),e.performance&&(Ae.performance={...e.performance,interpolate:hx}),Ae}var Aa;async function mx(e){return!Aa||ne.initial?Aa=await $e(e.segmentation.modelPath):e.debug&&K("cached model:",Aa.modelUrl),Aa}async function kS(e,t){var r;if(Aa||(Aa=await mx(t)),!(Aa!=null&&Aa.executor)||!((r=Aa==null?void 0:Aa.inputs)!=null&&r[0].shape))return null;let a={};a.resize=fe.resizeBilinear(e,[Aa.inputs[0].shape?Aa.inputs[0].shape[1]:0,Aa.inputs[0].shape?Aa.inputs[0].shape[2]:0],!1),a.norm=ve(a.resize,ze.tf255),a.res=Aa.execute(a.norm),a.squeeze=Oe(a.res,[0]),[a.bgRaw,a.fgRaw]=Na(a.squeeze,2),a.fg=Uh(a.fgRaw),a.mul=te(a.fg,ze.tf255),a.expand=Wt(a.mul,2),a.output=fe.resizeBilinear(a.expand,[e.shape[1]||0,e.shape[2]||0]);let n;switch(t.segmentation.mode||"default"){case"default":a.input=Oe(e),a.concat=lt([a.input,a.output],-1),n=Ue(a.concat,"int32");break;case"alpha":n=Ue(a.output,"int32");break;default:n=Ve(0)}return Object.keys(a).forEach(s=>J(a[s])),n}var em={};yr(em,{distance:()=>fx,find:()=>O3e,similarity:()=>D3e});function fx(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 D3e(e,t,a={order:2,multiplier:25,min:.2,max:.8}){let n=fx(e,t,a);return SS(n,a.order||2,a.min||0,a.max||1)}function O3e(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;ifc,validateModel:()=>om});var CS=.005,on={keypoints:[],padding:[[0,0],[0,0],[0,0],[0,0]]};function gx(e){for(let t of dx){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 TS(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=ir(e,on.padding),a.resize=fe.resizeBilinear(a.pad,[t,t]);let n=Ue(a.resize,"int32");return Object.keys(a).forEach(i=>J(a[i])),n}function RS(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]+on.padding[2][0]+on.padding[2][1])/t[0]-on.padding[2][0],n.position[1]*(t[1]+on.padding[1][0]+on.padding[1][1])/t[1]-on.padding[1][0]],n.positionRaw=[n.position[0]/t[0],n.position[1]/t[1]];let a=vs(e.keypoints.map(n=>n.position),t);return e.box=a.box,e.boxRaw=a.boxRaw,e}var jt,tm=0,yx=Number.MAX_SAFE_INTEGER,Sl={boxes:[],bodies:[],last:0};async function ES(e){var t;return ne.initial&&(jt=null),jt?e.debug&&K("cached model:",jt.modelUrl):(b0(["size"],e),jt=await $e(e.body.modelPath)),tm=jt!=null&&jt.executor&&((t=jt==null?void 0:jt.inputs)!=null&&t[0].shape)?jt.inputs[0].shape[2]:0,tm<64&&(tm=256),B().flagRegistry.WEBGL_USE_SHAPES_UNIFORMS&&B().set("WEBGL_USE_SHAPES_UNIFORMS",!1),jt}function L3e(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:J0[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=vs(r.map(p=>p.position),[a.shape[2],a.shape[1]]),l={};for(let[p,c]of Object.entries(Q0)){let d=[];for(let h=0;hg.part===c[h]),f=r.find(g=>g.part===c[h+1]);m&&f&&m.score>(t.body.minConfidence||0)&&f.score>(t.body.minConfidence||0)&&d.push([m.position,f.position])}l[p]=d}let u={id:0,score:s,box:o.box,boxRaw:o.boxRaw,keypoints:r,annotations:l};return gx(u),i.push(u),i}function W3e(e,t,a){let n=[];for(let r=0;rt.body.minConfidence){let o=[];for(let d=0;d<17;d++){let h=s[3*d+2];if(h>t.body.minConfidence){let m=[s[3*d+1],s[3*d+0]];o.push({part:J0[d],score:Math.round(100*h)/100,positionRaw:m,position:[Math.round((a.shape[2]||0)*m[0]),Math.round((a.shape[1]||0)*m[1])]})}}let l=[s[52],s[51],s[54]-s[52],s[53]-s[51]],u=[Math.trunc(l[0]*(a.shape[2]||0)),Math.trunc(l[1]*(a.shape[1]||0)),Math.trunc(l[2]*(a.shape[2]||0)),Math.trunc(l[3]*(a.shape[1]||0))],p={};for(let[d,h]of Object.entries(Q0)){let m=[];for(let f=0;fx.part===h[f]),y=o.find(x=>x.part===h[f+1]);g&&y&&g.score>(t.body.minConfidence||0)&&y.score>(t.body.minConfidence||0)&&m.push([g.position,y.position])}p[d]=m}let c={id:r,score:i,box:u,boxRaw:l,keypoints:[...o],annotations:p};gx(c),n.push(c)}}return n.sort((r,s)=>s.score-r.score),n.length>t.body.maxDetected&&(n.length=t.body.maxDetected),n}async function xx(e,t){var r;if(!(jt!=null&&jt.executor)||!((r=jt==null?void 0:jt.inputs)!=null&&r[0].shape))return[];t.skipAllowed||(Sl.boxes.length=0),yx++;let a=(t.body.skipTime||0)>ae()-Sl.last,n=yx<(t.body.skipFrames||0);return t.skipAllowed&&a&&n?Sl.bodies:new Promise(async s=>{let i={};yx=0,i.input=NS(e,tm),i.res=jt==null?void 0:jt.execute(i.input),Sl.last=ae();let o=await i.res.array();Sl.bodies=i.res.shape[2]===17?L3e(o,t,e):W3e(o,t,e);for(let l of Sl.bodies)RS(l,[e.shape[2]||1,e.shape[1]||1]),TS(l.keypoints);Object.keys(i).forEach(l=>J(i[l])),s(Sl.bodies)})}var _n,am=[],$S=0,Ax=Number.MAX_SAFE_INTEGER,rm=0,nm=2.5;async function PS(e){if(!_n||ne.initial){_n=await $e(e.object.modelPath);let t=_n!=null&&_n.executor?Object.values(_n.modelSignature.inputs):void 0;rm=Array.isArray(t)?parseInt(t[0].tensorShape.dim[2].size):416}else e.debug&&K("cached model:",_n.modelUrl);return _n}async function B3e(e,t,a){var u,p;let n=0,r=[],s=rm;for(let c of[1,2,4]){let d=c*13,h=Oe(e.find(A=>A.shape[1]===d**2&&(A.shape[2]||0)===nd.length)),m=await h.array(),f=Oe(e.find(A=>A.shape[1]===d**2&&(A.shape[2]||0)(a.object.minConfidence||0)&&b!==61){let I=(.5+Math.trunc(A%d))/d,T=(.5+Math.trunc(A/d))/d,N=x[A].map(P=>P*(d/c/s)),[M,$]=[I-nm/c*N[0],T-nm/c*N[1]],[E,S]=[I+nm/c*N[2]-M,T+nm/c*N[3]-$],_=[M,$,E,S];_=_.map(P=>Math.max(0,Math.min(P,1)));let O=[_[0]*t[0],_[1]*t[1],_[2]*t[0],_[3]*t[1]],W={id:n++,score:Math.round(100*w)/100,class:b+1,label:nd[b].label,box:O.map(P=>Math.trunc(P)),boxRaw:_};r.push(W)}}J([h,f,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 fe.nonMaxSuppressionAsync(i,o,a.object.maxDetected||0,a.object.iouThreshold,a.object.minConfidence);l=Array.from(await c.data()),J(c)}return r=r.filter((c,d)=>l.includes(d)).sort((c,d)=>d.score-c.score),r}async function bx(e,t){if(!(_n!=null&&_n.executor))return[];let a=(t.object.skipTime||0)>ae()-$S,n=Ax<(t.object.skipFrames||0);return t.skipAllowed&&a&&n&&am.length>0?(Ax++,am):(Ax=0,!ne.kernels.includes("mod")||!ne.kernels.includes("sparsetodense")?am:new Promise(async r=>{let s=[e.shape[2]||0,e.shape[1]||0],i=fe.resizeBilinear(e,[rm,rm],!1),o=ve(i,ze.tf255),l=Qs(o,[0,3,1,2]),u;t.object.enabled&&(u=_n.execute(l)),$S=ae();let p=await B3e(u,s,t);am=p,J([i,o,l,...u]),r(p)}))}var mc=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],V3e=mc.length,hc=mc.reduce((e,t,a)=>(e[t]=a,e),{}),U3e=[["leftHip","leftShoulder"],["leftElbow","leftShoulder"],["leftElbow","leftWrist"],["leftHip","leftKnee"],["leftKnee","leftAnkle"],["rightHip","rightShoulder"],["rightElbow","rightShoulder"],["rightElbow","rightWrist"],["rightHip","rightKnee"],["rightKnee","rightAnkle"],["leftShoulder","rightShoulder"],["leftHip","rightHip"]],W6e=U3e.map(([e,t])=>[hc[e],hc[t]]),FS=[["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 DS(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 OS(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 sm=class{constructor(t,a){he(this,"priorityQueue");he(this,"numberOfElements");he(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 zS(e,t,a,n){let r=a-e,s=n-t;return r*r+s*s}function Ix(e,t){return{x:e.x+t.x,y:e.y+t.y}}var ln,H3e=["MobilenetV1/offset_2/BiasAdd","MobilenetV1/heatmap_2/BiasAdd","MobilenetV1/displacement_fwd_2/BiasAdd","MobilenetV1/displacement_bwd_2/BiasAdd"],im=1,cd=16,j3e=50**2;function LS(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,x,A)=>({y:kx(Math.round(y.y/cd),0,x-1),x:kx(Math.round(y.x/cd),0,A-1)}),[u,p]=n.shape,c=l(t.position,u,p),d=o(c),m=Ix(t.position,d);for(let y=0;y[hc[d],hc[h]]),i=s.map(([,d])=>d),o=s.map(([d])=>d),l=t.shape[2],u=i.length,p=new Array(l),c=wx(e.part,cd,a);p[e.part.id]={score:e.score,part:mc[e.part.id],position:c};for(let d=u-1;d>=0;--d){let h=i[d],m=o[d];p[h]&&!p[m]&&(p[m]=LS(d,p[h],m,t,a,r))}for(let d=0;dt){o=!1;break}if(!o)break}return o}function K3e(e,t){let[a,n,r]=t.shape,s=new sm(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?zS(a,t,s.y,s.x)<=j3e:!1})}function Y3e(e,t){return t.reduce((n,{position:r,score:s},i)=>(WS(e,r,i)||(n+=s),n),0)/t.length}function Z3e(e,t,a,n,r,s){let i=[],o=K3e(s,t);for(;i.lengthh.score>s);let c=Y3e(i,p),d=DS(p);c>s&&i.push({keypoints:p,box:d,score:Math.round(100*c)/100})}return i}async function Sx(e,t){if(!(ln!=null&&ln.executor))return[];let a=De(()=>{if(!ln.inputs[0].shape)return[];let i=fe.resizeBilinear(e,[ln.inputs[0].shape[2],ln.inputs[0].shape[1]]),o=xe(ve(Ue(i,"float32"),127.5),1),u=ln.execute(o,H3e).map(p=>Oe(p,[0]));return u[1]=za(u[1]),u}),n=await Promise.all(a.map(i=>i.buffer()));for(let i of a)J(i);let r=Z3e(n[0],n[1],n[2],n[3],t.body.maxDetected,t.body.minConfidence);return ln.inputs[0].shape?OS(r,[e.shape[1],e.shape[2]],[ln.inputs[0].shape[2],ln.inputs[0].shape[1]]):[]}async function BS(e){return!ln||ne.initial?ln=await $e(e.body.modelPath):e.debug&&K("cached model:",ln.modelUrl),ln}var cr,J3e=["fgr","pha","r1o","r2o","r3o","r4o"],qt={},Tx=0;function GS(e){J([qt.r1i,qt.r2i,qt.r3i,qt.r4i,qt.downsample_ratio]),qt.r1i=Ve(0),qt.r2i=Ve(0),qt.r3i=Ve(0),qt.r4i=Ve(0),Tx=e.segmentation.ratio||.5,qt.downsample_ratio=Ve(Tx)}async function Nx(e){return!cr||ne.initial?cr=await $e(e.segmentation.modelPath):e.debug&&K("cached model:",cr.modelUrl),GS(e),cr}var US=e=>De(()=>{let t=Oe(e,[0]),a=te(t,ze.tf255);return Ue(a,"int32")});function Cx(e,t){let a=e?US(e):sr([t.shape[1]||0,t.shape[2]||0,3],255,"int32"),n=t?US(t):sr([e.shape[1]||0,e.shape[2]||0,1],255,"int32"),r=lt([a,n],-1);return J([a,n]),r}function Q3e(e){return De(()=>{let t={};return t.unstack=Na(e,-1),t.concat=lt(t.unstack,1),t.split=Sa(t.concat,4,1),t.stack=lt(t.split,2),t.squeeze=Oe(t.stack,[0]),t.expand=Wt(t.squeeze,-1),t.add=we(t.expand,1),t.mul=te(t.add,127.5),t.cast=Ue(t.mul,"int32"),t.tile=Xr(t.cast,[1,1,3]),t.alpha=sr([t.tile.shape[0]||0,t.tile.shape[1]||0,1],255,"int32"),lt([t.tile,t.alpha],-1)})}async function HS(e,t){if(cr||(cr=await Nx(t)),!(cr!=null&&cr.executor))return null;qt.src=ve(e,255),Tx!==t.segmentation.ratio&&GS(t);let[a,n,r,s,i,o]=await cr.executeAsync(qt,J3e),l;switch(t.segmentation.mode||"default"){case"default":l=Cx(a,n);break;case"alpha":l=Cx(null,n);break;case"foreground":l=Cx(a,null);break;case"state":l=Q3e(r);break;default:l=Ve(0)}return J([qt.src,a,n,qt.r1i,qt.r2i,qt.r3i,qt.r4i]),[qt.r1i,qt.r2i,qt.r3i,qt.r4i]=[r,s,i,o],l}var ba;async function Rx(e){return!ba||ne.initial?ba=await $e(e.segmentation.modelPath):e.debug&&K("cached model:",ba.modelUrl),ba}async function qS(e,t){var r;if(ba||(ba=await Rx(t)),!(ba!=null&&ba.executor)||!((r=ba==null?void 0:ba.inputs)!=null&&r[0].shape))return null;let a={};a.resize=fe.resizeBilinear(e,[ba.inputs[0].shape?ba.inputs[0].shape[1]:0,ba.inputs[0].shape?ba.inputs[0].shape[2]:0],!1),a.norm=ve(a.resize,ze.tf255),a.res=ba.execute(a.norm),a.squeeze=Oe(a.res,[0]),a.alpha=fe.resizeBilinear(a.squeeze,[e.shape[1]||0,e.shape[2]||0]),a.mul=te(a.alpha,ze.tf255);let n;switch(t.segmentation.mode||"default"){case"default":a.input=Oe(e),a.concat=lt([a.input,a.mul],-1),n=Ue(a.concat,"int32");break;case"alpha":n=Ue(a.mul,"int32");break;default:n=Ve(0)}return Object.keys(a).forEach(s=>J(a[s])),n}function om(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 fc=class{constructor(t){he(this,"instance");he(this,"models",{});this.models={},this.instance=t}stats(){let t=0,a=0,n=0;for(let s of Object.values(ya))t+=s.sizeFromManifest,a+=s.sizeLoadedWeights,n+=s.sizeDesired;let r=n>0?a/n:0;return{numLoadedModels:Object.values(ya).length,numDefinedModels:Object.keys(this.models).length,percentageLoaded:r,totalSizeFromManifest:t,totalSizeWeights:a,totalSizeLoading:n,modelStats:Object.values(ya)}}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,m,f,g,y,x,A,b,w,I,T,N,M,$,E,S,_;ne.initial&&this.reset(),t&&(this.instance=t);let a={};a.blazeface=this.instance.config.face.enabled&&!this.models.blazeface?V9(this.instance.config):null,a.antispoof=this.instance.config.face.enabled&&((n=this.instance.config.face.antispoof)!=null&&n.enabled)&&!this.models.antispoof?hI(this.instance.config):null,a.liveness=this.instance.config.face.enabled&&((r=this.instance.config.face.liveness)!=null&&r.enabled)&&!this.models.liveness?yI(this.instance.config):null,a.faceres=this.instance.config.face.enabled&&((s=this.instance.config.face.description)!=null&&s.enabled)&&!this.models.faceres?lI(this.instance.config):null,a.emotion=this.instance.config.face.enabled&&((i=this.instance.config.face.emotion)!=null&&i.enabled)&&!this.models.emotion?rI(this.instance.config):null,a.iris=this.instance.config.face.enabled&&((o=this.instance.config.face.iris)!=null&&o.enabled)&&!((l=this.instance.config.face.attention)!=null&&l.enabled)&&!this.models.iris?X9(this.instance.config):null,a.facemesh=this.instance.config.face.enabled&&((u=this.instance.config.face.mesh)!=null&&u.enabled)&&!this.models.facemesh?Q9(this.instance.config):null,a.gear=this.instance.config.face.enabled&&((p=this.instance.config.face.gear)!=null&&p.enabled)&&!this.models.gear?vI(this.instance.config):null,a.ssrnetage=this.instance.config.face.enabled&&((c=this.instance.config.face.ssrnet)!=null&&c.enabled)&&!this.models.ssrnetage?SI(this.instance.config):null,a.ssrnetgender=this.instance.config.face.enabled&&((d=this.instance.config.face.ssrnet)!=null&&d.enabled)&&!this.models.ssrnetgender?RI(this.instance.config):null,a.mobilefacenet=this.instance.config.face.enabled&&((h=this.instance.config.face.mobilefacenet)!=null&&h.enabled)&&!this.models.mobilefacenet?_I(this.instance.config):null,a.insightface=this.instance.config.face.enabled&&((m=this.instance.config.face.insightface)!=null&&m.enabled)&&!this.models.insightface?LI(this.instance.config):null,a.blazepose=this.instance.config.body.enabled&&!this.models.blazepose&&((f=this.instance.config.body.modelPath)!=null&&f.includes("blazepose"))?k9(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?w9(this.instance.config):null,a.efficientpose=this.instance.config.body.enabled&&!this.models.efficientpose&&((g=this.instance.config.body.modelPath)!=null&&g.includes("efficientpose"))?R9(this.instance.config):null,a.movenet=this.instance.config.body.enabled&&!this.models.movenet&&((y=this.instance.config.body.modelPath)!=null&&y.includes("movenet"))?ES(this.instance.config):null,a.posenet=this.instance.config.body.enabled&&!this.models.posenet&&((x=this.instance.config.body.modelPath)!=null&&x.includes("posenet"))?BS(this.instance.config):null,a.handtrack=this.instance.config.hand.enabled&&!this.models.handtrack&&((b=(A=this.instance.config.hand.detector)==null?void 0:A.modelPath)!=null&&b.includes("handtrack"))?AS(this.instance.config):null,a.handskeleton=this.instance.config.hand.enabled&&this.instance.config.hand.landmarks&&!this.models.handskeleton&&((I=(w=this.instance.config.hand.detector)==null?void 0:w.modelPath)!=null&&I.includes("handtrack"))?bS(this.instance.config):null,this.instance.config.hand.enabled&&!this.models.handdetect&&((N=(T=this.instance.config.hand.detector)==null?void 0:T.modelPath)!=null&&N.includes("handdetect"))&&(a.handdetect=hS(this.instance.config),a.handskeleton=mS(this.instance.config)),a.centernet=this.instance.config.object.enabled&&!this.models.centernet&&((M=this.instance.config.object.modelPath)!=null&&M.includes("centernet"))?C9(this.instance.config):null,a.nanodet=this.instance.config.object.enabled&&!this.models.nanodet&&(($=this.instance.config.object.modelPath)!=null&&$.includes("nanodet"))?PS(this.instance.config):null,a.selfie=this.instance.config.segmentation.enabled&&!this.models.selfie&&((E=this.instance.config.segmentation.modelPath)!=null&&E.includes("selfie"))?Rx(this.instance.config):null,a.meet=this.instance.config.segmentation.enabled&&!this.models.meet&&((S=this.instance.config.segmentation.modelPath)!=null&&S.includes("meet"))?mx(this.instance.config):null,a.rvm=this.instance.config.segmentation.enabled&&!this.models.rvm&&((_=this.instance.config.segmentation.modelPath)!=null&&_.includes("rvm"))?Nx(this.instance.config):null;for(let[O,W]of Object.entries(a))W!=null&&W.then&&W.then(P=>this.models[O]=P);await Promise.all(Object.values(a))}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(ya).find(r=>r.startsWith(a.name));n&&(a.size=ya[n].sizeLoadedWeights,a.url=ya[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=om(this.instance,n,a);r&&t.push(r)}return t}};function KS(e,t,a,n,r){var o,l,u,p,c,d;let s=0,i=[];for(let h of e){let m={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]m.body.box[0]&&b.box[0]+b.box[2]m.body.box[1]&&b.box[1]+b.box[3]m.body.box[0]&&b.box[1]+b.box[3]>m.body.box[1]&&b.box[1]+b.box[3]{b&&b.length===4&&(f.push(b[0],b[0]+b[2]),g.push(b[1],b[1]+b[3]))};y(m.face.box),y((p=m.body)==null?void 0:p.box),y((c=m.hands.left)==null?void 0:c.box),y((d=m.hands.right)==null?void 0:d.box);let x=Math.min(...f),A=Math.min(...g);m.box=[x,A,Math.max(...f)-x,Math.max(...g)-A],r!=null&&r[1]&&(r!=null&&r[2])&&(m.boxRaw=[m.box[0]/r[2],m.box[1]/r[1],m.box[2]/r[2],m.box[3]/r[1]]),i.push(m)}return i}var lm=` + gaze: [gaze]\xB0`,body:"body [score]%",bodyPart:"[label] [score]%",object:"[label] [score]%",hand:"[label] [score]%",finger:"[label]",gesture:"[where] [who]: [what]"};var py=0;function Lge(e,t,a){let n=Et(Ft,a);if(!t||!e)return;let r=vn(e);if(r){r.lineJoin="round",r.font=n.font;for(let s=0;smy,kpt:()=>hy});var hy=["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"],my={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 kn,yl=224,g9,Vge=5,N0=[8,16,32,32,32];function Uge(){let e=[],t=0;for(;ta.x)),y:Bt(e.map(a=>a.y))}}async function y9(e){if(ne.initial&&(kn=null),!kn&&e.body.detector&&e.body.detector.modelPath){kn=await $e(e.body.detector.modelPath);let t=kn!=null&&kn.executor?Object.values(kn.modelSignature.inputs):void 0;yl=Array.isArray(t)?parseInt(t[0].tensorShape.dim[1].size):0}else e.debug&&kn&&K("cached model:",kn.modelUrl);return Uge(),kn}var f9=[5,5];function Gge(e,t){return De(()=>{let a=Sa(e,12,1),n=Oe(a[0]),r=Oe(a[1]),s=Oe(a[2]),i=Oe(a[3]);n=we(ve(n,yl),t.x),r=we(ve(r,yl),t.y),s=te(ve(s,yl),f9[0]),i=te(ve(i,yl),f9[1]);let o=xe(n,ve(s,2)),l=xe(r,ve(i,2)),u=we(o,s),p=we(l,i);return ca([o,l,u,p],1)})}async function Hge(e,t,a,n){var u,p;let r=[],s={};s.boxes=Gge(e,g9),s.scores=za(t),s.nms=await fe.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],m=[Math.round(h[0]*n[0]),Math.round(h[1]*n[1]),Math.round(h[2]*n[0]),Math.round(h[3]*n[1])],f={score:d,boxRaw:h,box:m};r.push(f)}return Object.keys(s).forEach(c=>J(s[c])),r}async function x9(e,t,a){let n={};n.res=kn==null?void 0:kn.execute(e,["Identity"]),n.logitsRaw=Fe(n.res,[0,0,0],[1,-1,1]),n.boxesRaw=Fe(n.res,[0,0,1],[1,-1,-1]),n.logits=Oe(n.logitsRaw),n.boxes=Oe(n.boxesRaw);let r=await Hge(n.boxes,n.logits,t,a);return Object.keys(n).forEach(s=>J(n[s])),r}function vs(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 A9(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 R0(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 Ua,gy=256,fy=Number.MAX_SAFE_INTEGER,jge={landmarks:["ld_3d","activation_segmentation","activation_heatmap","world_3d","output_poseflag"],detector:[]},M0=[],ws=[[0,0],[0,0],[0,0],[0,0]],b9=0,v9=e=>1-1/(1+Math.exp(e)),k9=e=>y9(e);async function I9(e){if(ne.initial&&(Ua=null),Ua)e.debug&&K("cached model:",Ua.modelUrl);else{Ua=await $e(e.body.modelPath);let t=Ua!=null&&Ua.executor?Object.values(Ua.modelSignature.inputs):void 0;gy=Array.isArray(t)?parseInt(t[0].tensorShape.dim[1].size):0}return Ua}function w9(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=fe.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];ws=[[0,0],o,l,[0,0]],n.pad=ir(n.cropped||e,ws),n.resize=fe.resizeBilinear(n.pad,[t,t]),r=ve(n.resize,ze.tf255)}else e.shape[1]!==t?(n.resize=fe.resizeBilinear(n.cropped||e,[t,t]),r=ve(n.resize,ze.tf255)):r=ve(n.cropped||e,ze.tf255);return Object.keys(n).forEach(o=>J(n[o])),r}function qge(e,t,a){for(let n of e)n.position=[Math.trunc(n.position[0]*(t[0]+ws[2][0]+ws[2][1])/t[0]-ws[2][0]),Math.trunc(n.position[1]*(t[1]+ws[1][0]+ws[1][1])/t[1]-ws[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 Xge(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 Kge(e,t,a){if(!(Ua!=null&&Ua.executor))return null;let n={};[n.ld,n.segmentation,n.heatmap,n.world,n.poseflag]=Ua==null?void 0:Ua.execute(e,jge.landmarks);let r=(await n.poseflag.data())[0],s=await n.ld.data(),i=await n.world.data();Object.keys(n).forEach(m=>J(n[m]));let o=[],l=5;for(let m=0;mm.position),c=vs(p,[a[0],a[1]]),d={};for(let[m,f]of Object.entries(my)){let g=[];for(let y=0;yb.part===f[y]),A=u.find(b=>b.part===f[y+1]);x&&A&&g.push([x.position,A.position])}d[m]=g}return{id:0,score:Math.trunc(100*r)/100,box:c.box,boxRaw:c.boxRaw,keypoints:u,annotations:d}}async function yy(e,t){var s,i,o;let a=[e.shape[2]||0,e.shape[1]||0],n=(t.body.skipTime||0)>ae()-b9,r=fy<(t.body.skipFrames||0);if(t.skipAllowed&&n&&r&&M0!==null)fy++;else{let l=[];if((i=(s=t.body)==null?void 0:s.detector)!=null&&i.enabled){let u=w9(e,224);l=await x9(u,t,a),J(u)}else l=[{box:[0,0,0,0],boxRaw:[0,0,1,1],score:0}];for(let u=0;uJ(n[u])),r}async function by(e,t){if(!(Ga!=null&&Ga.executor))return[];let a=(t.object.skipTime||0)>ae()-C9,n=Ay<(t.object.skipFrames||0);return t.skipAllowed&&a&&n&&xy.length>0?(Ay++,xy):(Ay=0,new Promise(async r=>{let s=[e.shape[2]||0,e.shape[1]||0],i=fe.resizeBilinear(e,[xl,xl]),o=t.object.enabled?Ga==null?void 0:Ga.execute(i,["tower_0/detections"]):null;C9=ae(),J(i);let l=await Yge(o,s,t);xy=l,r(l)}))}var $0={};yr($0,{connected:()=>wy,kpt:()=>vy});var vy=["head","neck","rightShoulder","rightElbow","rightWrist","chest","leftShoulder","leftElbow","leftWrist","bodyCenter","rightHip","rightKnee","rightAnkle","leftHip","leftKnee","leftAnkle"],wy={leftLeg:["leftHip","leftKnee","leftAnkle"],rightLeg:["rightHip","rightKnee","rightAnkle"],torso:["leftShoulder","rightShoulder","rightHip","leftHip","leftShoulder"],leftArm:["leftShoulder","leftElbow","leftWrist"],rightArm:["rightShoulder","rightElbow","rightWrist"],head:[]};var Mt,R9=0,Ma={id:0,keypoints:[],box:[0,0,0,0],boxRaw:[0,0,0,0],score:0,annotations:{}},ky=Number.MAX_SAFE_INTEGER;async function E9(e){return ne.initial&&(Mt=null),Mt?e.debug&&K("cached model:",Mt.modelUrl):Mt=await $e(e.body.modelPath),Mt}async function Zge(e,t){let[a,n]=e.shape,r=Q(e,[n*a]),s=fa(r,0),i=(await s.data())[0];if(i>t){let o=rr(r,0),l=Uu(o,a),u=(await l.data())[0],p=ve(o,a),c=(await p.data())[0];return J([r,s,o,l,p]),[u,c,i]}return J([r,s]),[0,0,i]}async function Iy(e,t){if(!(Mt!=null&&Mt.executor)||!(Mt!=null&&Mt.inputs[0].shape))return[];let a=(t.body.skipTime||0)>ae()-R9,n=ky<(t.body.skipFrames||0);return t.skipAllowed&&a&&n&&Object.keys(Ma.keypoints).length>0?(ky++,[Ma]):(ky=0,new Promise(async r=>{let s=De(()=>{var m,f;let c=fe.resizeBilinear(e,[((m=Mt==null?void 0:Mt.inputs[0].shape)==null?void 0:m[2])||0,((f=Mt==null?void 0:Mt.inputs[0].shape)==null?void 0:f[1])||0],!1),d=te(c,ze.tf2);return xe(d,ze.tf1)}),i;if(t.body.enabled&&(i=Mt==null?void 0:Mt.execute(s)),R9=ae(),J(s),i){Ma.keypoints.length=0;let c=Oe(i);J(i);let d=Na(c,2);J(c);for(let h=0;h(t.body.minConfidence||0)&&Ma.keypoints.push({score:Math.round(100*g)/100,part:vy[h],positionRaw:[m/Mt.inputs[0].shape[2],f/Mt.inputs[0].shape[1]],position:[Math.round(e.shape[2]*m/Mt.inputs[0].shape[2]),Math.round(e.shape[1]*f/Mt.inputs[0].shape[1])]})}d.forEach(h=>J(h))}Ma.score=Ma.keypoints.reduce((c,d)=>d.score>c?d.score:c,0);let o=Ma.keypoints.map(c=>c.position[0]),l=Ma.keypoints.map(c=>c.position[1]);Ma.box=[Math.min(...o),Math.min(...l),Math.max(...o)-Math.min(...o),Math.max(...l)-Math.min(...l)];let u=Ma.keypoints.map(c=>c.positionRaw[0]),p=Ma.keypoints.map(c=>c.positionRaw[1]);Ma.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(wy)){let h=[];for(let m=0;my.part===d[m]),g=Ma.keypoints.find(y=>y.part===d[m+1]);f&&g&&f.score>(t.body.minConfidence||0)&&g.score>(t.body.minConfidence||0)&&h.push([f.position,g.position])}Ma.annotations[c]=h}r([Ma])}))}var rd=e=>[Math.abs(e.endPoint[0]-e.startPoint[0]),Math.abs(e.endPoint[1]-e.startPoint[1])],P0=e=>[e.startPoint[0]+(e.endPoint[0]-e.startPoint[0])/2,e.startPoint[1]+(e.endPoint[1]-e.startPoint[1])/2,1],_0=(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],F0=(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,a)=>{let n=[e.startPoint[0]*t[0],e.startPoint[1]*t[1]],r=[e.endPoint[0]*t[0],e.endPoint[1]*t[1]],s=e.landmarks.map(i=>[(i[0]+a[0])*t[0],(i[1]+a[1])*t[1]]);return{startPoint:n,endPoint:r,landmarks:s,confidence:e.confidence}},Sy=(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=fe.cropAndResize(t,[s],[0],a),o=ve(i,ze.tf255);return J(i),o},D0=(e,t)=>{let a=P0(e),n=rd(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,size:n}},O0=e=>{let t=P0(e),a=rd(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,size:[Math.round(a[0]),Math.round(a[1])]}},F9=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}},Cy=[[1,0,0],[0,1,0],[0,0,1]],Jge=e=>e-2*Math.PI*Math.floor((e+Math.PI)/(2*Math.PI)),Qge=(e,t)=>Jge(Math.PI/2-Math.atan2(-(t[1]-e[1]),t[0]-e[0]));var $9=(e,t)=>[[1,0,e],[0,1,t],[0,0,1]],Al=(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=$9(t[0],t[1]),i=P9(s,r),o=$9(-t[0],-t[1]);return P9(i,o)},t3e=e=>{let t=[[e[0][0],e[1][0]],[e[0][1],e[1][1]]],a=[e[0][2],e[1][2]],n=[-Al(t[0],a),-Al(t[1],a)];return[t[0].concat(n[0]),t[1].concat(n[1]),[0,0,1]]},a3e=(e,t)=>[Al(e,t[0]),Al(e,t[1])];function O9(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?D9(a,[0,0]):Cy,u=o?i.map(h=>[...a3e(h,l),h[2]]):i,p=o?t3e(n):Cy,c=P0(t),d=[Al(c,p[0]),Al(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 L9(e,t,a,n){let r=t.landmarks.length>=ly.count?ly.symmetryLine:hl.symmetryLine,s=0,i=Cy,o;if(e&&ne.kernels.includes("rotatewithoffset"))if(s=Qge(t.landmarks[r[0]],t.landmarks[r[1]]),s&&s!==0&&Math.abs(s)>.2){let u=P0(t),p=[u[0]/a.shape[2],u[1]/a.shape[1]],c=fe.rotateWithOffset(a,s,0,[p[0],p[1]]);i=D9(-s,u),o=Sy(t,c,[n,n]),J(c)}else o=Sy(t,a,[n,n]);else o=Sy(t,a,[n,n]);return[s,i,o]}var n3e=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]},W9=(e,t)=>{let a=n3e(e),n=rd(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 B9=6,Vn,z0=null,ks=0,sd=null,V9=()=>ks;async function U9(e){var t;return ne.initial&&(Vn=null),Vn?e.debug&&K("cached model:",Vn.modelUrl):Vn=await $e((t=e.face.detector)==null?void 0:t.modelPath),ks=Vn.executor&&Vn.inputs[0].shape?Vn.inputs[0].shape[2]:256,sd=Ge(ks,"int32"),z0=Zn(O9(ks)),Vn}function r3e(e){if(!z0||!sd)return yn([0,0]);let t={};t.boxStarts=Fe(e,[0,1],[-1,2]),t.centers=we(t.boxStarts,z0),t.boxSizes=Fe(e,[0,3],[-1,2]),t.boxSizesNormalized=ve(t.boxSizes,sd),t.centersNormalized=ve(t.centers,sd),t.halfBoxSize=ve(t.boxSizesNormalized,ze.tf2),t.starts=xe(t.centersNormalized,t.halfBoxSize),t.ends=we(t.centersNormalized,t.halfBoxSize),t.startNormalized=te(t.starts,sd),t.endNormalized=te(t.ends,sd);let a=Vu([t.startNormalized,t.endNormalized],1);return Object.keys(t).forEach(n=>J(t[n])),a}async function G9(e,t){var o,l,u,p,c,d,h;if(!e||e.isDisposedInternal||e.shape.length!==4||e.shape[1]<1||e.shape[2]<1)return[];let a={};a.resized=fe.resizeBilinear(e,[ks,ks]),a.div=ve(a.resized,ze.tf127),a.normalized=xe(a.div,ze.tf1);let n=Vn==null?void 0:Vn.execute(a.normalized);if(Array.isArray(n)&&n.length>2){let m=n.sort((f,g)=>f.size-g.size);a.concat384=lt([m[0],m[2]],2),a.concat512=lt([m[1],m[3]],2),a.concat=lt([a.concat512,a.concat384],1),a.batch=Oe(a.concat,[0])}else Array.isArray(n)?a.batch=Oe(n[0]):a.batch=Oe(n);J(n),a.boxes=r3e(a.batch),a.logits=Fe(a.batch,[0,0],[-1,1]),a.sigmoid=za(a.logits),a.scores=Oe(a.sigmoid),a.nms=await fe.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 m=0;m(((p=t.face.detector)==null?void 0:p.minConfidence)||0)){let g={};g.bbox=Fe(a.boxes,[r[m],0],[1,-1]),g.slice=Fe(a.batch,[r[m],B9-1],[1,-1]),g.squeeze=Oe(g.slice),g.landmarks=Q(g.squeeze,[B9,-1]);let y=await g.bbox.data(),x={startPoint:[y[0],y[1]],endPoint:[y[2],y[3]],landmarks:await g.landmarks.array(),confidence:f};g.anchor=Fe(z0,[r[m],0],[1,2]);let A=await g.anchor.data(),b=_9(x,[(e.shape[2]||0)/ks,(e.shape[1]||0)/ks],A),w=D0(b,((c=t.face.detector)==null?void 0:c.scale)||1.4),I=O0(w);I.size[0]>(((d=t.face.detector)==null?void 0:d.minSize)||0)&&I.size[1]>(((h=t.face.detector)==null?void 0:h.minSize)||0)&&s.push(I),Object.keys(g).forEach(T=>J(g[T]))}}return Object.keys(a).forEach(m=>J(a[m])),s}var nn,Is=0,Ny=$n.leftEyeLower0,Ry=$n.rightEyeLower0,id={leftBounds:[Ny[0],Ny[Ny.length-1]],rightBounds:[Ry[0],Ry[Ry.length-1]]},od={upperCenter:3,lowerCenter:4,index:71,numCoordinates:76};async function K9(e){var t,a;return ne.initial&&(nn=null),nn?e.debug&&K("cached model:",nn.modelUrl):nn=await $e((t=e.face.iris)==null?void 0:t.modelPath),Is=nn!=null&&nn.executor&&((a=nn.inputs)!=null&&a[0].shape)?nn.inputs[0].shape[2]:0,Is===-1&&(Is=64),nn}function L0(e,t,a,n){for(let r=0;r{let t=e[id.leftBounds[0]][2],a=e[id.rightBounds[0]][2];return t-a},j9=(e,t,a,n,r,s=!1,i=2.3)=>{let o=O0(D0(F9([e[a],e[n]]),i)),l=rd(o),u=fe.cropAndResize(t,[[o.startPoint[1]/r,o.startPoint[0]/r,o.endPoint[1]/r,o.endPoint[0]/r]],[0],[Is,Is]);if(s&&ne.kernels.includes("flipleftright")){let p=fe.flipLeftRight(u);J(u),u=p}return{box:o,boxSize:l,crop:u}},q9=(e,t,a,n=!1)=>{let r=[];for(let s=0;s{let n=e[$n[`${a}EyeUpper0`][od.upperCenter]][2],r=e[$n[`${a}EyeLower0`][od.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 Y9(e,t,a,n){var T,N;if(!(nn!=null&&nn.executor))return e;let{box:r,boxSize:s,crop:i}=j9(e,t,id.leftBounds[0],id.leftBounds[1],a,!0,((T=n.face.iris)==null?void 0:T.scale)||2.3),{box:o,boxSize:l,crop:u}=j9(e,t,id.rightBounds[0],id.rightBounds[1],a,!0,((N=n.face.iris)==null?void 0:N.scale)||2.3),p=lt([i,u]);J(i),J(u);let c=nn.execute(p);J(p);let d=await c.data();J(c);let h=d.slice(0,od.numCoordinates*3),{rawCoords:m,iris:f}=q9(h,r,s,!0),g=d.slice(od.numCoordinates*3),{rawCoords:y,iris:x}=q9(g,o,l,!1),A=s3e(e);Math.abs(A)<30?(L0(e,m,"left",null),L0(e,y,"right",null)):A<1?L0(e,m,"left",["EyeUpper0","EyeLower0"]):L0(e,y,"right",["EyeUpper0","EyeLower0"]);let b=X9(e,f,"left"),w=X9(e,x,"right");return e.concat(b).concat(w)}async function J9(e,t){var s,i,o,l,u,p,c,d,h,m;let a={lips:await((i=(s=t.filter(f=>f.size===160))==null?void 0:s[0])==null?void 0:i.data()),irisL:await((l=(o=t.filter(f=>f.size===10))==null?void 0:o[0])==null?void 0:l.data()),eyeL:await((p=(u=t.filter(f=>f.size===142))==null?void 0:u[0])==null?void 0:p.data()),irisR:await((d=(c=t.filter(f=>f.size===10))==null?void 0:c[1])==null?void 0:d.data()),eyeR:await((m=(h=t.filter(f=>f.size===142))==null?void 0:h[1])==null?void 0:m.data())};for(let f of Object.values(a))if(!f)return e;let n=fl.reduce((f,g)=>f+=e[g][2],0)/fl.length;for(let f=0;ff+=e[g][2],0)/gl.length;for(let f=0;fae()-dr.timestamp,n=dr.skipped<(((u=t.face.detector)==null?void 0:u.skipFrames)||0);!t.skipAllowed||!a||!n||dr.boxes.length===0?(dr.boxes=await G9(e,t),dr.timestamp=ae(),dr.skipped=0):dr.skipped++;let r=[],s=[],i=0,o=dc;for(let x=0;x[T[0]/(e.shape[2]||0),T[1]/(e.shape[1]||0),(T[2]||0)/o]);for(let T of Object.keys(hl))I.annotations[T]=[I.mesh[hl[T]]]}else if(!Ct)t.debug&&K("face mesh detection requested, but model is not loaded");else{if((h=t.face.attention)!=null&&h.enabled&&!ne.kernels.includes("atan2"))return t.face.attention.enabled=!1,J(I.tensor),r;let T=Ct.execute(I.tensor),M=await T.find($=>$.shape[$.shape.length-1]===1).data();if(I.faceScore=Math.round(100*M[0])/100,I.faceScore<(((m=t.face.detector)==null?void 0:m.minConfidence)||1)){if(A.confidence=I.faceScore,t.face.mesh.keepInvalid){I.box=_0(A,e),I.boxRaw=F0(A,e),I.size=A.size,I.score=I.boxScore,I.mesh=A.landmarks,I.meshRaw=I.mesh.map($=>[$[0]/(e.shape[2]||1),$[1]/(e.shape[1]||1),($[2]||0)/o]);for(let $ of Object.keys(hl))I.annotations[$]=[I.mesh[hl[$]]]}}else{let $=T.find(O=>O.shape[O.shape.length-1]===1404),E=Q($,[-1,3]),S=await E.array();J(E),(f=t.face.attention)!=null&&f.enabled?S=await J9(S,T):(g=t.face.iris)!=null&&g.enabled&&(S=await Y9(S,I.tensor,dc,t)),I.mesh=z9(S,A,b,w,dc),I.meshRaw=I.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($n))I.annotations[O]=$n[O].map(W=>I.mesh[W]);I.score=I.faceScore;let _={...W9(I.mesh,A),confidence:A.confidence,landmarks:A.landmarks,size:A.size};I.box=_0(_,e),I.boxRaw=F0(_,e),I.size=_.size,s.push(_)}J(T)}I.score>(((y=t.face.detector)==null?void 0:y.minConfidence)||1)?r.push(I):J(I.tensor)}return dr.boxes=s,r}async function eI(e){var t,a,n,r,s,i;return ne.initial&&(Ct=null),(t=e.face.attention)!=null&&t.enabled&&(Ct!=null&&Ct.signature)&&Object.keys(((a=Ct==null?void 0:Ct.signature)==null?void 0:a.outputs)||{}).length<6&&(Ct=null),Ct?e.debug&&K("cached model:",Ct.modelUrl):(n=e.face.attention)!=null&&n.enabled?Ct=await $e(e.face.attention.modelPath):Ct=await $e((r=e.face.mesh)==null?void 0:r.modelPath),dc=Ct.executor&&((s=Ct==null?void 0:Ct.inputs)!=null&&s[0].shape)?(i=Ct==null?void 0:Ct.inputs)==null?void 0:i[0].shape[2]:256,Ct}var tI=ml,aI=lc;var $y=[],ra,W0=[],nI=0,rI=0,My=Number.MAX_SAFE_INTEGER,Py=!1;async function sI(e){var t,a,n;return ne.initial&&(ra=null),ra?e.debug&&K("cached model:",ra.modelUrl):(ra=await $e((t=e.face.emotion)==null?void 0:t.modelPath),Py=((n=(a=ra==null?void 0:ra.inputs)==null?void 0:a[0].shape)==null?void 0:n[3])===3,Py?$y=["angry","disgust","fear","happy","neutral","sad","surprise"]:$y=["angry","disgust","fear","happy","sad","surprise","neutral"]),ra}async function _y(e,t,a,n){var i,o;if(!ra)return[];let r=My<(((i=t.face.emotion)==null?void 0:i.skipFrames)||0),s=(((o=t.face.emotion)==null?void 0:o.skipTime)||0)>ae()-rI;return t.skipAllowed&&s&&r&&nI===n&&W0[a]&&W0[a].length>0?(My++,W0[a]):(My=0,new Promise(async l=>{var p,c,d;let u=[];if((p=t.face.emotion)!=null&&p.enabled){let h={},m=ra!=null&&ra.inputs[0].shape?ra.inputs[0].shape[2]:0;if(((c=t.face.emotion)==null?void 0:c.crop)>0){let g=(d=t.face.emotion)==null?void 0:d.crop,y=[[g,g,1-g,1-g]];h.resize=fe.cropAndResize(e,y,[0],[m,m])}else h.resize=fe.resizeBilinear(e,[m,m],!1);Py?(h.mul=te(h.resize,255),h.normalize=xe(h.mul,[103.939,116.779,123.68]),h.emotion=ra==null?void 0:ra.execute(h.normalize)):(h.channels=te(h.resize,ze.rgb),h.grayscale=ot(h.channels,3,!0),h.grayscaleSub=xe(h.grayscale,ze.tf05),h.grayscaleMul=te(h.grayscaleSub,ze.tf2),h.emotion=ra==null?void 0:ra.execute(h.grayscaleMul)),rI=ae();let f=await h.emotion.data();for(let g=0;g(t.face.emotion.minConfidence||0)&&u.push({score:Math.min(.99,Math.trunc(100*f[g])/100),emotion:$y[g]});u.sort((g,y)=>y.score-g.score),Object.keys(h).forEach(g=>J(h[g]))}W0[a]=u,nI=n,l(u)}))}var sa,Ss=[],oI=0,lI=0,Fy=Number.MAX_SAFE_INTEGER;async function uI(e){var t;return ne.initial&&(sa=null),sa?e.debug&&K("cached model:",sa.modelUrl):sa=await $e((t=e.face.description)==null?void 0:t.modelPath),sa}function o3e(e,t){var s,i;let a=e.image||e.tensor||e;if(!(sa!=null&&sa.inputs[0].shape))return a;let n;if(((s=t.face.description)==null?void 0:s.crop)>0){let o=(i=t.face.description)==null?void 0:i.crop,l=[[o,o,1-o,1-o]];n=fe.cropAndResize(a,l,[0],[sa.inputs[0].shape[2],sa.inputs[0].shape[1]])}else n=fe.resizeBilinear(a,[sa.inputs[0].shape[2],sa.inputs[0].shape[1]],!1);let r=te(n,ze.tf255);return J(n),r}async function Dy(e,t,a,n){var o,l,u,p;let r={age:0,gender:"unknown",genderScore:0,descriptor:[]};if(!(sa!=null&&sa.executor))return r;let s=Fy<(((o=t.face.description)==null?void 0:o.skipFrames)||0),i=(((l=t.face.description)==null?void 0:l.skipTime)||0)>ae()-oI;return t.skipAllowed&&s&&i&&lI===n&&((u=Ss==null?void 0:Ss[a])==null?void 0:u.age)>0&&((p=Ss==null?void 0:Ss[a])==null?void 0:p.genderScore)>0?(Fy++,Ss[a]):(Fy=0,new Promise(async c=>{var d;if((d=t.face.description)!=null&&d.enabled){let h=o3e(e,t),m=sa==null?void 0:sa.execute(h);oI=ae(),J(h);let g=await m.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 x=rr(m.find(N=>N.shape[1]===100),1),A=(await x.data())[0];J(x);let w=await m.find(N=>N.shape[1]===100).data();r.age=Math.round(w[A-1]>w[A+1]?10*A-100*w[A-1]:10*A+100*w[A+1])/10,(Number.isNaN(g[0])||Number.isNaN(w[0]))&&K("faceres error:",{model:sa,result:m});let I=m.find(N=>N.shape[1]===1024),T=I?await I.data():[];r.descriptor=Array.from(T),m.forEach(N=>J(N))}Ss[a]=r,lI=n,c(r)}))}var ld=.1,Oy=.5;function l3e(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 pI(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 $n.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]});ld&&ld>0&&(r=r.map(i=>({x:i.x>.5?i.x+ld:i.x-ld,y:i.y>.5?i.y+ld:i.y-ld})));for(let i=0;iae()-hI,s=zy<(((o=t.face.antispoof)==null?void 0:o.skipFrames)||0);return t.skipAllowed&&r&&s&&cI===n&&B0[a]?(zy++,B0[a]):(zy=0,new Promise(async l=>{let u=fe.resizeBilinear(e,[ia!=null&&ia.inputs[0].shape?ia.inputs[0].shape[2]:0,ia!=null&&ia.inputs[0].shape?ia.inputs[0].shape[1]:0],!1),p=ia==null?void 0:ia.execute(u),c=(await p.data())[0];B0[a]=Math.round(100*c)/100,cI=n,hI=ae(),J([u,p]),l(B0[a])}))}var oa,V0=[],Wy=Number.MAX_SAFE_INTEGER,gI=0,yI=0;async function xI(e){var t;return ne.initial&&(oa=null),oa?e.debug&&K("cached model:",oa.modelUrl):oa=await $e((t=e.face.liveness)==null?void 0:t.modelPath),oa}async function By(e,t,a,n){var i,o;if(!(oa!=null&&oa.executor))return 0;let r=(((i=t.face.liveness)==null?void 0:i.skipTime)||0)>ae()-yI,s=Wy<(((o=t.face.liveness)==null?void 0:o.skipFrames)||0);return t.skipAllowed&&r&&s&&gI===n&&V0[a]?(Wy++,V0[a]):(Wy=0,new Promise(async l=>{let u=fe.resizeBilinear(e,[oa!=null&&oa.inputs[0].shape?oa.inputs[0].shape[2]:0,oa!=null&&oa.inputs[0].shape?oa.inputs[0].shape[1]:0],!1),p=oa==null?void 0:oa.execute(u),c=(await p.data())[0];V0[a]=Math.round(100*c)/100,gI=n,yI=ae(),J([u,p]),l(V0[a])}))}var Pn,Vy=[],d3e=["white","black","asian","indian","other"],p3e=[15,23,28,35.5,45.5,55.5,65],bI=0,vI=0,Uy=Number.MAX_SAFE_INTEGER;async function wI(e){var t;return ne.initial&&(Pn=null),Pn?e.debug&&K("cached model:",Pn.modelUrl):Pn=await $e((t=e.face.gear)==null?void 0:t.modelPath),Pn}async function Gy(e,t,a,n){var i,o;if(!Pn)return{age:0,gender:"unknown",genderScore:0,race:[]};let r=Uy<(((i=t.face.gear)==null?void 0:i.skipFrames)||0),s=(((o=t.face.gear)==null?void 0:o.skipTime)||0)>ae()-vI;return t.skipAllowed&&s&&r&&bI===n&&Vy[a]?(Uy++,Vy[a]):(Uy=0,new Promise(async l=>{var y,x,A,b;if(!(Pn!=null&&Pn.inputs[0].shape))return;let u={},p=[[0,.1,.9,.9]];if(((y=t.face.gear)==null?void 0:y.crop)>0){let w=(x=t.face.gear)==null?void 0:x.crop;p=[[w,w,1-w,1-w]]}u.resize=fe.cropAndResize(e,p,[0],[Pn.inputs[0].shape[2],Pn.inputs[0].shape[1]]);let c={age:0,gender:"unknown",genderScore:0,race:[]};(A=t.face.gear)!=null&&A.enabled&&([u.age,u.gender,u.race]=Pn.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 w=0;w(((b=t.face.gear)==null?void 0:b.minConfidence)||.2)&&c.race.push({score:Math.round(100*h[w])/100,race:d3e[w]});c.race.sort((w,I)=>I.score-w.score);let f=Array.from(await u.age.data()).map((w,I)=>[p3e[I],w]).sort((w,I)=>I[1]-w[1]),g=f[0][0];for(let w=1;wJ(u[w])),Vy[a]=c,bI=n,vI=ae(),l(c)}))}var $a,U0=[],II=0,SI=0,Hy=Number.MAX_SAFE_INTEGER;async function CI(e){return ne.initial&&($a=null),$a?e.debug&&K("cached model:",$a.modelUrl):$a=await $e(e.face.ssrnet.modelPathAge),$a}async function jy(e,t,a,n){var i,o,l,u;if(!$a)return{age:0};let r=Hy<(((i=t.face.ssrnet)==null?void 0:i.skipFrames)||0),s=(((o=t.face.ssrnet)==null?void 0:o.skipTime)||0)>ae()-SI;return t.skipAllowed&&r&&s&&II===n&&((l=U0[a])!=null&&l.age)&&((u=U0[a])==null?void 0:u.age)>0?(Hy++,U0[a]):(Hy=0,new Promise(async p=>{var h,m,f;if(!($a!=null&&$a.inputs)||!$a.inputs[0]||!$a.inputs[0].shape)return;let c={};if(((h=t.face.ssrnet)==null?void 0:h.crop)>0){let g=(m=t.face.ssrnet)==null?void 0:m.crop,y=[[g,g,1-g,1-g]];c.resize=fe.cropAndResize(e,y,[0],[$a.inputs[0].shape[2],$a.inputs[0].shape[1]])}else c.resize=fe.resizeBilinear(e,[$a.inputs[0].shape[2],$a.inputs[0].shape[1]],!1);c.enhance=te(c.resize,ze.tf255);let d={age:0};if((f=t.face.ssrnet)!=null&&f.enabled&&(c.age=$a.execute(c.enhance)),c.age){let g=await c.age.data();d.age=Math.trunc(10*g[0])/10}Object.keys(c).forEach(g=>J(c[g])),U0[a]=d,II=n,SI=ae(),p(d)}))}var xa,G0=[],NI=0,RI=0,qy=Number.MAX_SAFE_INTEGER,Xy=[.2989,.587,.114];async function EI(e){var t;return ne.initial&&(xa=null),xa?e.debug&&K("cached model:",xa.modelUrl):xa=await $e((t=e.face.ssrnet)==null?void 0:t.modelPathGender),xa}async function Ky(e,t,a,n){var i,o,l,u;if(!xa)return{gender:"unknown",genderScore:0};let r=qy<(((i=t.face.ssrnet)==null?void 0:i.skipFrames)||0),s=(((o=t.face.ssrnet)==null?void 0:o.skipTime)||0)>ae()-RI;return t.skipAllowed&&r&&s&&NI===n&&((l=G0[a])!=null&&l.gender)&&((u=G0[a])==null?void 0:u.genderScore)>0?(qy++,G0[a]):(qy=0,new Promise(async p=>{var m,f,g;if(!(xa!=null&&xa.inputs[0].shape))return;let c={};if(((m=t.face.ssrnet)==null?void 0:m.crop)>0){let y=(f=t.face.ssrnet)==null?void 0:f.crop,x=[[y,y,1-y,1-y]];c.resize=fe.cropAndResize(e,x,[0],[xa.inputs[0].shape[2],xa.inputs[0].shape[1]])}else c.resize=fe.resizeBilinear(e,[xa.inputs[0].shape[2],xa.inputs[0].shape[1]],!1);c.enhance=De(()=>{var x,A;let y;if(((A=(x=xa==null?void 0:xa.inputs)==null?void 0:x[0].shape)==null?void 0:A[3])===1){let[b,w,I]=Sa(c.resize,3,3),T=te(b,Xy[0]),N=te(w,Xy[1]),M=te(I,Xy[2]),$=Dh([T,N,M]);y=te(xe($,ze.tf05),2)}else y=te(xe(c.resize,ze.tf05),2);return y});let d={gender:"unknown",genderScore:0};(g=t.face.ssrnet)!=null&&g.enabled&&(c.gender=xa.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(y=>J(c[y])),G0[a]=d,NI=n,RI=ae(),p(d)}))}var rn,Yy=[],$I=0,PI=0,_I=Number.MAX_SAFE_INTEGER;async function FI(e){var t;return ne.initial&&(rn=null),rn?e.debug&&K("cached model:",rn.modelUrl):rn=await $e((t=e.face.mobilefacenet)==null?void 0:t.modelPath),rn}async function Zy(e,t,a,n){var i,o;if(!(rn!=null&&rn.executor))return[];let r=_I<(((i=t.face.mobilefacenet)==null?void 0:i.skipFrames)||0),s=(((o=t.face.mobilefacenet)==null?void 0:o.skipTime)||0)>ae()-PI;return t.skipAllowed&&s&&r&&$I===n&&Yy[a]?(_I++,Yy[a]):new Promise(async l=>{var p;let u=[];if((p=t.face.mobilefacenet)!=null&&p.enabled&&(rn!=null&&rn.inputs[0].shape)){let c={};c.crop=fe.resizeBilinear(e,[rn.inputs[0].shape[2],rn.inputs[0].shape[1]],!1),c.data=rn.execute(c.crop);let d=await c.data.data();u=Array.from(d),Object.keys(c).forEach(h=>J(c[h]))}Yy[a]=u,$I=n,PI=ae(),l(u)})}var sn,Jy=[],OI=0,zI=0,LI=Number.MAX_SAFE_INTEGER;async function WI(e){return ne.initial&&(sn=null),sn?e.debug&&K("cached model:",sn.modelUrl):sn=await $e(e.face.insightface.modelPath),sn}async function Qy(e,t,a,n){var i,o;if(!(sn!=null&&sn.executor))return[];let r=LI<(((i=t.face.insightface)==null?void 0:i.skipFrames)||0),s=(((o=t.face.insightface)==null?void 0:o.skipTime)||0)>ae()-zI;return t.skipAllowed&&s&&r&&OI===n&&Jy[a]?(LI++,Jy[a]):new Promise(async l=>{var p;let u=[];if((p=t.face.insightface)!=null&&p.enabled&&(sn!=null&&sn.inputs[0].shape)){let c={};c.crop=fe.resizeBilinear(e,[sn.inputs[0].shape[2],sn.inputs[0].shape[1]],!1),c.data=sn.execute(c.crop);let d=await c.data.data();u=Array.from(d),Object.keys(c).forEach(h=>J(c[h]))}Jy[a]=u,OI=n,zI=ae(),l(u)})}var c3e=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}},VI=(e,t)=>{let a=f=>{let g=Math.sqrt(f[0]*f[0]+f[1]*f[1]+f[2]*f[2]);return f[0]/=g,f[1]/=g,f[2]/=g,f},n=(f,g)=>{let y=f[0]-g[0],x=f[1]-g[1],A=f[2]-g[2];return[y,x,A]},r=(f,g)=>{let y=f[1]*g[2]-f[2]*g[1],x=f[2]*g[0]-f[0]*g[2],A=f[0]*g[1]-f[1]*g[0];return[y,x,A]},s=f=>{let[g,y,x,A,b,w,I,T,N]=f,M,$,E;return A<1?A>-1?(E=Math.asin(A),$=Math.atan2(-I,g),M=Math.atan2(-w,b)):(E=-Math.PI/2,$=-Math.atan2(T,N),M=0):(E=Math.PI/2,$=Math.atan2(T,N),M=0),Number.isNaN(M)&&(M=0),Number.isNaN($)&&($=0),Number.isNaN(E)&&(E=0),{pitch:2*-M,yaw:2*-$,roll:2*-E}},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(f=>[f[0]*t[0]/o,f[1]*t[1]/o,f[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),m=i.length===478?c3e(e):{bearing:0,strength:0};return{angle:h,matrix:d,gaze:m}};function UI(e,t){let a=e==null?void 0:e.annotations;if(!(a!=null&&a.leftEyeIris)||!(a!=null&&a.rightEyeIris))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 ex=async(e,t)=>{var m,f,g,y,x,A,b,w,I,T,N,M,$,E,S,_,O,W,P,U,G,q,H;let a=ae(),n,r,s,i,o,l,u,p,c,d=[];e.state="run:face";let h=await Q9(t,e.config);if(e.performance.face=ne.perfadd?(e.performance.face||0)+Math.trunc(ae()-a):Math.trunc(ae()-a),!t.shape||t.shape.length!==4)return[];if(!h)return[];for(let V=0;V200?VI(h[V],[t.shape[2],t.shape[1]]):null;e.analyze("Start Emotion:"),e.config.async?i=(f=e.config.face.emotion)!=null&&f.enabled?_y(h[V].tensor||Ve([]),e.config,V,h.length):[]:(e.state="run:emotion",a=ae(),i=(g=e.config.face.emotion)!=null&&g.enabled?await _y(h[V].tensor||Ve([]),e.config,V,h.length):[],e.performance.emotion=ne.perfadd?(e.performance.emotion||0)+Math.trunc(ae()-a):Math.trunc(ae()-a)),e.analyze("End Emotion:"),e.analyze("Start AntiSpoof:"),e.config.async?u=(y=e.config.face.antispoof)!=null&&y.enabled?Ly(h[V].tensor||Ve([]),e.config,V,h.length):0:(e.state="run:antispoof",a=ae(),u=(x=e.config.face.antispoof)!=null&&x.enabled?await Ly(h[V].tensor||Ve([]),e.config,V,h.length):0,e.performance.antispoof=ne.perfadd?(e.performance.antispoof||0)+Math.trunc(ae()-a):Math.trunc(ae()-a)),e.analyze("End AntiSpoof:"),e.analyze("Start Liveness:"),e.config.async?p=(A=e.config.face.liveness)!=null&&A.enabled?By(h[V].tensor||Ve([]),e.config,V,h.length):0:(e.state="run:liveness",a=ae(),p=(b=e.config.face.liveness)!=null&&b.enabled?await By(h[V].tensor||Ve([]),e.config,V,h.length):0,e.performance.liveness=ne.perfadd?(e.performance.antispoof||0)+Math.trunc(ae()-a):Math.trunc(ae()-a)),e.analyze("End Liveness:"),e.analyze("Start GEAR:"),e.config.async?r=(w=e.config.face.gear)!=null&&w.enabled?Gy(h[V].tensor||Ve([]),e.config,V,h.length):null:(e.state="run:gear",a=ae(),r=(I=e.config.face.gear)!=null&&I.enabled?await Gy(h[V].tensor||Ve([]),e.config,V,h.length):null,e.performance.gear=Math.trunc(ae()-a)),e.analyze("End GEAR:"),e.analyze("Start SSRNet:"),e.config.async?(n=(T=e.config.face.ssrnet)!=null&&T.enabled?jy(h[V].tensor||Ve([]),e.config,V,h.length):null,s=(N=e.config.face.ssrnet)!=null&&N.enabled?Ky(h[V].tensor||Ve([]),e.config,V,h.length):null):(e.state="run:ssrnet",a=ae(),n=(M=e.config.face.ssrnet)!=null&&M.enabled?await jy(h[V].tensor||Ve([]),e.config,V,h.length):null,s=($=e.config.face.ssrnet)!=null&&$.enabled?await Ky(h[V].tensor||Ve([]),e.config,V,h.length):null,e.performance.ssrnet=Math.trunc(ae()-a)),e.analyze("End SSRNet:"),e.analyze("Start MobileFaceNet:"),e.config.async?o=(E=e.config.face.mobilefacenet)!=null&&E.enabled?Zy(h[V].tensor||Ve([]),e.config,V,h.length):null:(e.state="run:mobilefacenet",a=ae(),o=(S=e.config.face.mobilefacenet)!=null&&S.enabled?await Zy(h[V].tensor||Ve([]),e.config,V,h.length):null,e.performance.mobilefacenet=Math.trunc(ae()-a)),e.analyze("End MobileFaceNet:"),e.analyze("Start InsightFace:"),e.config.async?l=(_=e.config.face.insightface)!=null&&_.enabled?Qy(h[V].tensor||Ve([]),e.config,V,h.length):null:(e.state="run:mobilefacenet",a=ae(),l=(O=e.config.face.insightface)!=null&&O.enabled?await Qy(h[V].tensor||Ve([]),e.config,V,h.length):null,e.performance.mobilefacenet=Math.trunc(ae()-a)),e.analyze("End InsightFace:"),e.analyze("Start Description:"),e.config.async?c=Dy(h[V].tensor||Ve([]),e.config,V,h.length):(e.state="run:description",a=ae(),c=await Dy(h[V].tensor||Ve([]),e.config,V,h.length),e.performance.description=ne.perfadd?(e.performance.description||0)+Math.trunc(ae()-a):Math.trunc(ae()-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:"),(W=e.config.face.ssrnet)!=null&&W.enabled&&n&&s&&(c={...c,age:n.age,gender:s.gender,genderScore:s.genderScore}),(P=e.config.face.gear)!=null&&P.enabled&&r&&(c={...c,age:r.age,gender:r.gender,genderScore:r.genderScore,race:r.race}),(U=e.config.face.mobilefacenet)!=null&&U.enabled&&o&&(c.descriptor=o),(G=e.config.face.insightface)!=null&&G.enabled&&l&&(c.descriptor=l);let X=(q=e.config.face.iris)!=null&&q.enabled?UI(h[V],t.shape[2]):0,re=(H=e.config.face.detector)!=null&&H.return?Oe(h[V].tensor):null;J(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),X>0&&(ee.distance=X),Z&&(ee.rotation=Z),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 Pa={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=>Pa.nameMapping[e],getPoints:e=>Pa.pointsMapping[e]},Ts={none:0,half:1,full:2,nameMapping:{0:"none",1:"half",2:"full"},getName:e=>Ts.nameMapping[e]},$t={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=>$t.nameMapping[e]},Cs=class{constructor(t){he(this,"name");he(this,"curls");he(this,"directions");he(this,"weights");he(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:Un,index:Pr,middle:_r,ring:bl,pinky:vl}=Pa,{none:Gn,half:m3e,full:Hn}=Ts,{verticalUp:ud,verticalDown:q7e,horizontalLeft:tx,horizontalRight:f3e,diagonalUpRight:g3e,diagonalUpLeft:dd,diagonalDownRight:X7e,diagonalDownLeft:K7e}=$t,Ns=new Cs("thumbs up");Ns.curl(Un,Gn,1);Ns.direction(Un,ud,1);Ns.direction(Un,dd,.25);Ns.direction(Un,g3e,.25);for(let e of[Pa.index,Pa.middle,Pa.ring,Pa.pinky])Ns.curl(e,Hn,1),Ns.direction(e,tx,1),Ns.direction(e,f3e,1);var Ht=new Cs("victory");Ht.curl(Un,m3e,.5);Ht.curl(Un,Gn,.5);Ht.direction(Un,ud,1);Ht.direction(Un,dd,1);Ht.curl(Pr,Gn,1);Ht.direction(Pr,ud,.75);Ht.direction(Pr,dd,1);Ht.curl(_r,Gn,1);Ht.direction(_r,ud,1);Ht.direction(_r,dd,.75);Ht.curl(bl,Hn,1);Ht.direction(bl,ud,.2);Ht.direction(bl,dd,1);Ht.direction(bl,tx,.2);Ht.curl(vl,Hn,1);Ht.direction(vl,ud,.2);Ht.direction(vl,dd,1);Ht.direction(vl,tx,.2);Ht.weight(Pr,2);Ht.weight(_r,2);var Rs=new Cs("point");Rs.curl(Un,Hn,1);Rs.curl(Pr,Gn,.5);Rs.curl(_r,Hn,.5);Rs.curl(bl,Hn,.5);Rs.curl(vl,Hn,.5);Rs.weight(Pr,2);Rs.weight(_r,2);var Es=new Cs("middle finger");Es.curl(Un,Gn,1);Es.curl(Pr,Hn,.5);Es.curl(_r,Hn,.5);Es.curl(bl,Hn,.5);Es.curl(vl,Hn,.5);Es.weight(Pr,2);Es.weight(_r,2);var pd=new Cs("open palm");pd.curl(Un,Gn,.75);pd.curl(Pr,Gn,.75);pd.curl(_r,Gn,.75);pd.curl(bl,Gn,.75);pd.curl(vl,Gn,.75);var GI=[Ns,Ht,Rs,Es,pd];var y3e=.7,wl={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 HI(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 qI(e,t){if(!e||!t)return[0,0];let a=HI(e[0],e[1],t[0],t[1]);if(e.length===2)return a;let n=HI(e[1],e[2],t[1],t[2]);return[a,n]}function jI(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 x3e(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),m=Math.sqrt(s*s+l*l+c*c),f=(m*m+d*d-h*h)/(2*m*d);f>1?f=1:f<-1&&(f=-1);let g=Math.acos(f);g=57.2958*g%180;let y;return g>wl.NO_CURL_START_LIMIT?y=Ts.none:g>wl.HALF_CURL_START_LIMIT?y=Ts.half:y=Ts.full,y}function XI(e,t,a,n){let r;return n===Math.abs(e)?e>0?r=$t.horizontalLeft:r=$t.horizontalRight:n===Math.abs(t)?t>0?r=$t.horizontalLeft:r=$t.horizontalRight:a>0?r=$t.horizontalLeft:r=$t.horizontalRight,r}function KI(e,t,a,n){let r;return n===Math.abs(e)?e<0?r=$t.verticalDown:r=$t.verticalUp:n===Math.abs(t)?t<0?r=$t.verticalDown:r=$t.verticalUp:a<0?r=$t.verticalDown:r=$t.verticalUp,r}function A3e(e,t,a,n,r,s,i,o){let l,u=KI(e,t,a,n),p=XI(r,s,i,o);return u===$t.verticalUp?p===$t.horizontalLeft?l=$t.diagonalUpLeft:l=$t.diagonalUpRight:p===$t.horizontalLeft?l=$t.diagonalDownLeft:l=$t.diagonalDownRight,l}function b3e(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,m=0,f=c/(p+1e-5);f>1.5?d+=wl.DISTANCE_VOTE_POWER:f>.66?h+=wl.DISTANCE_VOTE_POWER:m+=wl.DISTANCE_VOTE_POWER;let g=Math.sqrt(r*r+o*o),y=Math.sqrt(s*s+l*l),x=Math.sqrt(i*i+u*u),A=Math.max(g,y,x),b=e[0],w=e[1],I=a[0],T=a[1];A===g?(I=a[0],T=a[1]):A===x&&(b=t[0],w=t[1]);let $=qI([b,w],[I,T]),E=jI($,wl.TOTAL_ANGLE_VOTE_POWER);d+=E[0],h+=E[1],m+=E[2];for(let _ of n){let O=jI(_,wl.SINGLE_ANGLE_VOTE_POWER);d+=O[0],h+=O[1],m+=O[2]}let S;return d===Math.max(d,h,m)?S=KI(l,o,u,c):m===Math.max(h,m)?S=XI(s,r,i,p):S=A3e(l,o,u,c,s,r,i,p),S}function YI(e){let t=[],a=[],n=[],r=[];if(!e)return{curls:n,directions:r};for(let s of Pa.all){let i=Pa.getPoints(s),o=[],l=[];for(let u of i){let p=e[u[0]],c=e[u[1]],d=qI(p,c),h=d[0],m=d[1];o.push(h),l.push(m)}t.push(o),a.push(l)}for(let s of Pa.all){let i=s===Pa.thumb?1:0,o=Pa.getPoints(s),l=e[o[i][0]],u=e[o[i+1][1]],p=e[o[3][1]],c=x3e(l,u,p),d=b3e(l,u,p,t[s].slice(i));n[s]=c,r[s]=d}return{curls:n,directions:r}}function H0(e){if(!e||e.length===0)return null;let t=YI(e),a={};for(let n of Pa.all)a[Pa.getName(n)]={curl:Ts.getName(t.curls[n]),direction:$t.getName(t.directions[n])};return a}function ZI(e){let t=[];if(!e||e.length===0)return t;let a=YI(e);for(let n of GI){let r=n.matchAgainst(a.curls,a.directions);r>=y3e&&t.push({name:n.name,confidence:r})}return t}var JI=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},QI=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},eS=e=>{var a,n,r,s;if(!e)return[];let t=[];for(let i=0;i.06||g>.06)&&(h=!1),f>g?g>.04&&t.push({iris:i,gesture:"looking right"}):f>.04&&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],x=Math.abs(e[i].mesh[374][1]-e[i].annotations.leftEyeIris[0][1])/e[i].box[3];(x<.01||y<.01||x>.022||y>.022)&&(h=!1),(x<.01||y<.01)&&t.push({iris:i,gesture:"looking down"}),(x>.022||y>.022)&&t.push({iris:i,gesture:"looking up"}),h&&t.push({iris:i,gesture:"looking center"})}return t},tS=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 q0(e,t=1.5){let a=pc(e),n=j0(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 X0(e){let t=pc(e),a=j0(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 w3e(e){return e-2*Math.PI*Math.floor((e+Math.PI)/(2*Math.PI))}function iS(e,t){let a=Math.PI/2-Math.atan2(-(t[1]-e[1]),t[0]-e[0]);return w3e(a)}var aS=(e,t)=>[[1,0,e],[0,1,t],[0,0,1]];function Ms(e,t){let a=0;for(let n=0;n[i.x,i.y]),this.anchorsTensor=Zn(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=Bt([this.inputSize,this.inputSize]),this.doubleInputSizeTensor=Bt([this.inputSize*2,this.inputSize*2])}normalizeBoxes(t){let a={};a.boxOffsets=Fe(t,[0,0],[-1,2]),a.boxSizes=Fe(t,[0,2],[-1,2]),a.div=ve(a.boxOffsets,this.inputSizeTensor),a.boxCenterPoints=we(a.div,this.anchorsTensor),a.halfBoxSizes=ve(a.boxSizes,this.doubleInputSizeTensor),a.sub=xe(a.boxCenterPoints,a.halfBoxSizes),a.startPoints=te(a.sub,this.inputSizeTensor),a.add=we(a.boxCenterPoints,a.halfBoxSizes),a.endPoints=te(a.add,this.inputSizeTensor);let n=Vu([a.startPoints,a.endPoints],1);return Object.keys(a).forEach(r=>J(a[r])),n}normalizeLandmarks(t,a){let n={};n.reshape=Q(t,[-1,7,2]),n.div=ve(n.reshape,this.inputSizeTensor),n.landmarks=we(n.div,this.anchors[a]?this.anchors[a]:0);let r=te(n.landmarks,this.inputSizeTensor);return Object.keys(n).forEach(s=>J(n[s])),r}async predict(t,a){var o;let n={};n.resize=fe.resizeBilinear(t,[this.inputSize,this.inputSize]),n.div=ve(n.resize,ze.tf127),n.image=xe(n.div,ze.tf1),n.batched=this.model.execute(n.image),n.predictions=Oe(n.batched),n.slice=Fe(n.predictions,[0,0],[-1,1]),n.sigmoid=za(n.slice),n.scores=Oe(n.sigmoid);let r=await n.scores.data();n.boxes=Fe(n.predictions,[0,1],[-1,4]),n.norm=this.normalizeBoxes(n.boxes),n.nms=await fe.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=Fe(n.norm,[l,0],[1,-1]),u.slice=Fe(n.predictions,[l,5],[1,14]),u.norm=this.normalizeLandmarks(u.slice,l),u.palmLandmarks=Q(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(),m={startPoint:c,endPoint:d,palmLandmarks:h,confidence:r[l]},f=sS(m,[(t.shape[2]||1)/this.inputSize,(t.shape[1]||0)/this.inputSize]);i.push(f),Object.keys(u).forEach(g=>J(u[g]))}return Object.keys(n).forEach(l=>J(n[l])),i}};var C3e=5,dS=1.65,pS=[0,5,9,13,17,1,2],T3e=0,N3e=2,cS=0,Y0=class{constructor(t,a){he(this,"handDetector");he(this,"handPoseModel");he(this,"inputSize");he(this,"storedBoxes");he(this,"skipped");he(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=>rx([...s,1],a)),r=this.calculateLandmarksBoundingBox(n);return q0(X0(r),C3e)}getBoxForHandLandmarks(t){let a=this.calculateLandmarksBoundingBox(t),n=q0(X0(a),dS);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=nx(n,[0,0]),u=o.map(h=>[...rx(h,l),h[2]]),p=oS(r),c=[...pc(a),1],d=[Ms(c,p[0]),Ms(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)>ae()-cS,i=this.skipped<(a.hand.skipFrames||0);a.skipAllowed&&s&&i?this.skipped++:(r=await this.handDetector.predict(t,a),this.skipped=0),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=Q(A,[-1,3]),I=await w.array();J(A),J(w);let T=this.transformRawCoords(I,f,p,m),N=this.getBoxForHandLandmarks(T);this.storedBoxes[l]={...N,confidence:b};let M={landmarks:T,confidence:b,boxConfidence:u.confidence,fingerConfidence:b,box:{topLeft:N.startPoint,bottomRight:N.endPoint}};o.push(M)}else this.storedBoxes[l]=null;J(A)}else{let p=q0(X0(u),dS),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 hS={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]},kl,Il,sx;function E3e(){let e=kl?new K0(kl):void 0;e&&Il&&(sx=new Y0(e,Il))}async function ix(e,t){sx||E3e();let a=await sx.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=H0(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 mS(e){var t;return ne.initial&&(kl=null),kl?e.debug&&K("cached model:",kl.modelUrl):kl=await $e((t=e.hand.detector)==null?void 0:t.modelPath),kl}async function fS(e){var t;return ne.initial&&(Il=null),Il?e.debug&&K("cached model:",Il.modelUrl):Il=await $e((t=e.hand.skeleton)==null?void 0:t.modelPath),Il}var Ot=[null,null],M3e=["StatefulPartitionedCall/Postprocessor/Slice","StatefulPartitionedCall/Postprocessor/ExpandDims_1"],$s=[[0,0],[0,0]],$3e=["hand","fist","pinch","point","face","tip","pinchtip"],yS=4,xS=1.6,P3e=512,_3e=1.4,Z0=Number.MAX_SAFE_INTEGER,ox=0,Fr=[0,0],Dt={boxes:[],hands:[]},AS={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 bS(e){var t;if(ne.initial&&(Ot[0]=null),Ot[0])e.debug&&K("cached model:",Ot[0].modelUrl);else{b0(["tensorlistreserve","enter","tensorlistfromtensor","merge","loopcond","switch","exit","tensorliststack","nextiteration","tensorlistsetitem","tensorlistgetitem","reciprocal","shape","split","where"],e),Ot[0]=await $e((t=e.hand.detector)==null?void 0:t.modelPath);let a=Ot[0].executor?Object.values(Ot[0].modelSignature.inputs):void 0;$s[0][0]=Array.isArray(a)?parseInt(a[0].tensorShape.dim[1].size):0,$s[0][1]=Array.isArray(a)?parseInt(a[0].tensorShape.dim[2].size):0}return Ot[0]}async function vS(e){var t;if(ne.initial&&(Ot[1]=null),Ot[1])e.debug&&K("cached model:",Ot[1].modelUrl);else{Ot[1]=await $e((t=e.hand.skeleton)==null?void 0:t.modelPath);let a=Ot[1].executor?Object.values(Ot[1].modelSignature.inputs):void 0;$s[1][0]=Array.isArray(a)?parseInt(a[0].tensorShape.dim[1].size):0,$s[1][1]=Array.isArray(a)?parseInt(a[0].tensorShape.dim[2].size):0}return Ot[1]}async function F3e(e,t){let a=[];if(!e||!Ot[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,P3e),i=Math.round(s*r/8)*8;n.resize=fe.resizeBilinear(e,[s,i]),n.cast=Ue(n.resize,"int32"),[n.rawScores,n.rawBoxes]=await Ot[0].executeAsync(n.cast,M3e),n.boxes=Oe(n.rawBoxes,[0,2]),n.scores=Oe(n.rawScores,[0]);let o=Na(n.scores,1);J(o[yS]),o.splice(yS,1),n.filtered=ca(o,1),J(o),n.max=fa(n.filtered,1),n.argmax=rr(n.filtered,1);let l=0;n.nms=await fe.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=Fe(n.boxes,d,1),m=await h.data();J(h);let f=[m[1],m[0],m[3]-m[1],m[2]-m[0]],g=R0(f,_3e),y=[Math.trunc(f[0]*Fr[0]),Math.trunc(f[1]*Fr[1]),Math.trunc(f[2]*Fr[0]),Math.trunc(f[3]*Fr[1])],x=p[d],A=$3e[c[d]],b={id:l++,score:x,box:y,boxRaw:g,label:A};a.push(b)}return Object.keys(n).forEach(d=>J(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 lx(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&&Ot[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=fe.cropAndResize(e,[s],[0],[$s[1][0],$s[1][1]],"bilinear"),r.div=ve(r.crop,ze.tf255),[r.score,r.keypoints]=Ot[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=Q(r.keypoints,[-1,3]);let p=(await r.reshaped.array()).map(c=>[c[0]/$s[1][1],c[1]/$s[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=>[Fr[0]*(c[0]+t.boxRaw[0]),Fr[1]*(c[1]+t.boxRaw[1]),c[2]||0]),n.landmarks=H0(n.keypoints);for(let c of Object.keys(AS))n.annotations[c]=AS[c].map(d=>n.landmarks&&n.keypoints[d]?n.keypoints[d]:null)}Object.keys(r).forEach(l=>J(r[l]))}return n}async function ux(e,t){var r,s;if(!((r=Ot[0])!=null&&r.executor)||!((s=Ot[1])!=null&&s.executor)||!Ot[0].inputs[0].shape||!Ot[1].inputs[0].shape)return[];Fr=[e.shape[2]||0,e.shape[1]||0],Z0++;let a=(t.hand.skipTime||0)>ae()-ox,n=Z0<(t.hand.skipFrames||0);return t.skipAllowed&&a&&n?Dt.hands:new Promise(async i=>{let o=3*(t.hand.skipTime||0)>ae()-ox,l=Z0<3*(t.hand.skipFrames||0);t.skipAllowed&&Dt.hands.length===t.hand.maxDetected?Dt.hands=await Promise.all(Dt.boxes.map(p=>lx(e,p,t))):t.skipAllowed&&o&&l&&Dt.hands.length>0?Dt.hands=await Promise.all(Dt.boxes.map(p=>lx(e,p,t))):(Dt.boxes=await F3e(e,t),ox=ae(),Dt.hands=await Promise.all(Dt.boxes.map(p=>lx(e,p,t))),Z0=0);let u=[...Dt.boxes];if(Dt.boxes.length=0,t.cacheSensitivity>0)for(let p=0;p.05&&c.box[3]/(e.shape[1]||1)>.05&&Dt.hands[p].fingerScore&&Dt.hands[p].fingerScore>(t.hand.minConfidence||0)){let d=R0(c.box,xS),h=R0(c.boxRaw,xS);Dt.boxes.push({...u[p],box:d,boxRaw:h})}}for(let p=0;p({face:[],body:[],hand:[],gesture:[],object:[],persons:[],performance:{},timestamp:0,width:0,height:0,error:e});var cc={};yr(cc,{connected:()=>Q0,horizontal:()=>dx,kpt:()=>J0,relative:()=>cx,vertical:()=>px});var J0=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],dx=[["leftEye","rightEye"],["leftEar","rightEar"],["leftShoulder","rightShoulder"],["leftElbow","rightElbow"],["leftWrist","rightWrist"],["leftHip","rightHip"],["leftKnee","rightKnee"],["leftAnkle","rightAnkle"]],px=[["leftKnee","leftShoulder"],["rightKnee","rightShoulder"],["leftAnkle","leftKnee"],["rightAnkle","rightKnee"]],cx=[[["leftHip","rightHip"],["leftShoulder","rightShoulder"]],[["leftElbow","rightElbow"],["leftShoulder","rightShoulder"]]],Q0={leftLeg:["leftHip","leftKnee","leftAnkle"],rightLeg:["rightHip","rightKnee","rightAnkle"],torso:["leftShoulder","rightShoulder","rightHip","leftHip","leftShoulder"],leftArm:["leftShoulder","leftElbow","leftWrist"],rightArm:["rightShoulder","rightElbow","rightWrist"],head:[]};var Ae=pr(),hx=0;function kS(e,t){var i,o,l,u,p,c,d,h,m,f,g,y,x,A,b,w,I,T,N,M,$,E,S,_,O,W;let a=ae();if(!e)return pr();let n=Date.now()-e.timestamp,r=n<1e3?8-Math.log(n+1):1;if(e.canvas&&(Ae.canvas=e.canvas),e.error&&(Ae.error=e.error),!Ae.body||e.body.length!==Ae.body.length)Ae.body=JSON.parse(JSON.stringify(e.body));else for(let P=0;P((r-1)*Ae.body[P].box[X]+Z)/r),G=e.body[P].boxRaw.map((Z,X)=>((r-1)*Ae.body[P].boxRaw[X]+Z)/r),q=e.body[P].keypoints.map((Z,X)=>{var re,ee,ge,ie,be,Ce,Re,Le,qe;return{score:Z.score,part:Z.part,position:[Ae.body[P].keypoints[X]?((r-1)*(Ae.body[P].keypoints[X].position[0]||0)+(Z.position[0]||0))/r:Z.position[0],Ae.body[P].keypoints[X]?((r-1)*(Ae.body[P].keypoints[X].position[1]||0)+(Z.position[1]||0))/r:Z.position[1],Ae.body[P].keypoints[X]?((r-1)*(Ae.body[P].keypoints[X].position[2]||0)+(Z.position[2]||0))/r:Z.position[2]],positionRaw:[Ae.body[P].keypoints[X]?((r-1)*(Ae.body[P].keypoints[X].positionRaw[0]||0)+(Z.positionRaw[0]||0))/r:Z.positionRaw[0],Ae.body[P].keypoints[X]?((r-1)*(Ae.body[P].keypoints[X].positionRaw[1]||0)+(Z.positionRaw[1]||0))/r:Z.positionRaw[1],Ae.body[P].keypoints[X]?((r-1)*(Ae.body[P].keypoints[X].positionRaw[2]||0)+(Z.positionRaw[2]||0))/r:Z.positionRaw[2]],distance:[Ae.body[P].keypoints[X]?((r-1)*(((re=Ae.body[P].keypoints[X].distance)==null?void 0:re[0])||0)+(((ee=Z.distance)==null?void 0:ee[0])||0))/r:(ge=Z.distance)==null?void 0:ge[0],Ae.body[P].keypoints[X]?((r-1)*(((ie=Ae.body[P].keypoints[X].distance)==null?void 0:ie[1])||0)+(((be=Z.distance)==null?void 0:be[1])||0))/r:(Ce=Z.distance)==null?void 0:Ce[1],Ae.body[P].keypoints[X]?((r-1)*(((Re=Ae.body[P].keypoints[X].distance)==null?void 0:Re[2])||0)+(((Le=Z.distance)==null?void 0:Le[2])||0))/r:(qe=Z.distance)==null?void 0:qe[2]]}}),H={},V={connected:{}};(i=t.body.modelPath)!=null&&i.includes("efficientpose")?V=$0:(o=t.body.modelPath)!=null&&o.includes("blazepose")?V=T0:(l=t.body.modelPath)!=null&&l.includes("movenet")&&(V=cc);for(let[Z,X]of Object.entries(V.connected)){let re=[];for(let ee=0;eebe.part===X[ee]),ie=q.find(be=>be.part===X[ee+1]);ge&&ie&&re.push([ge.position,ie.position])}H[Z]=re}Ae.body[P]={...e.body[P],box:U,boxRaw:G,keypoints:q,annotations:H}}if(!Ae.hand||e.hand.length!==Ae.hand.length)Ae.hand=JSON.parse(JSON.stringify(e.hand));else for(let P=0;P((r-1)*Ae.hand[P].box[Z]+V)/r),G=e.hand[P].boxRaw.map((V,Z)=>((r-1)*Ae.hand[P].boxRaw[Z]+V)/r);Ae.hand[P].keypoints.length!==e.hand[P].keypoints.length&&(Ae.hand[P].keypoints=e.hand[P].keypoints);let q=e.hand[P].keypoints&&e.hand[P].keypoints.length>0?e.hand[P].keypoints.map((V,Z)=>V.map((X,re)=>((r-1)*(Ae.hand[P].keypoints[Z][re]||1)+(X||0))/r)):[],H={};if(Object.keys(Ae.hand[P].annotations).length!==Object.keys(e.hand[P].annotations).length)Ae.hand[P].annotations=e.hand[P].annotations,H=Ae.hand[P].annotations;else if(e.hand[P].annotations)for(let V of Object.keys(e.hand[P].annotations))H[V]=(c=(p=(u=e.hand[P])==null?void 0:u.annotations)==null?void 0:p[V])!=null&&c[0]?e.hand[P].annotations[V].map((Z,X)=>Z.map((re,ee)=>((r-1)*Ae.hand[P].annotations[V][X][ee]+re)/r)):null;Ae.hand[P]={...e.hand[P],box:U,boxRaw:G,keypoints:q,annotations:H}}if(!Ae.face||e.face.length!==Ae.face.length)Ae.face=JSON.parse(JSON.stringify(e.face));else for(let P=0;P((r-1)*Ae.face[P].box[V]+H)/r),G=e.face[P].boxRaw.map((H,V)=>((r-1)*Ae.face[P].boxRaw[V]+H)/r),q=e.face[P].annotations;if(Object.keys(Ae.face[P].annotations).length!==Object.keys(e.face[P].annotations).length)Ae.face[P].annotations=e.face[P].annotations,q=Ae.face[P].annotations;else if(e.face[P].annotations)for(let H of Object.keys(e.face[P].annotations))q[H]=(m=(h=(d=e.face[P])==null?void 0:d.annotations)==null?void 0:h[H])!=null&&m[0]?e.face[P].annotations[H].map((V,Z)=>V.map((X,re)=>((r-1)*Ae.face[P].annotations[H][Z][re]+X)/r)):null;if(e.face[P].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[P].rotation)==null?void 0:f.matrix,H.angle={roll:((r-1)*(((y=(g=Ae.face[P].rotation)==null?void 0:g.angle)==null?void 0:y.roll)||0)+(((A=(x=e.face[P].rotation)==null?void 0:x.angle)==null?void 0:A.roll)||0))/r,yaw:((r-1)*(((w=(b=Ae.face[P].rotation)==null?void 0:b.angle)==null?void 0:w.yaw)||0)+(((T=(I=e.face[P].rotation)==null?void 0:I.angle)==null?void 0:T.yaw)||0))/r,pitch:((r-1)*(((M=(N=Ae.face[P].rotation)==null?void 0:N.angle)==null?void 0:M.pitch)||0)+(((E=($=e.face[P].rotation)==null?void 0:$.angle)==null?void 0:E.pitch)||0))/r},H.gaze={bearing:((r-1)*(((S=Ae.face[P].rotation)==null?void 0:S.gaze.bearing)||0)+(((_=e.face[P].rotation)==null?void 0:_.gaze.bearing)||0))/r,strength:((r-1)*(((O=Ae.face[P].rotation)==null?void 0:O.gaze.strength)||0)+(((W=e.face[P].rotation)==null?void 0:W.gaze.strength)||0))/r},Ae.face[P]={...e.face[P],rotation:H,box:U,boxRaw:G,annotations:q}}else Ae.face[P]={...e.face[P],box:U,boxRaw:G,annotations:q}}if(!Ae.object||e.object.length!==Ae.object.length)Ae.object=JSON.parse(JSON.stringify(e.object));else for(let P=0;P((r-1)*Ae.object[P].box[H]+q)/r),G=e.object[P].boxRaw.map((q,H)=>((r-1)*Ae.object[P].boxRaw[H]+q)/r);Ae.object[P]={...e.object[P],box:U,boxRaw:G}}if(e.persons){let P=e.persons;if(!Ae.persons||P.length!==Ae.persons.length)Ae.persons=JSON.parse(JSON.stringify(P));else for(let U=0;U((r-1)*Ae.persons[U].box[q]+G)/r)}e.gesture&&(Ae.gesture=e.gesture),Ae.width=e.width,Ae.height=e.height;let s=ae();return hx=ne.perfadd?hx+Math.round(s-a):Math.round(s-a),e.performance&&(Ae.performance={...e.performance,interpolate:hx}),Ae}var Aa;async function mx(e){return!Aa||ne.initial?Aa=await $e(e.segmentation.modelPath):e.debug&&K("cached model:",Aa.modelUrl),Aa}async function IS(e,t){var r;if(Aa||(Aa=await mx(t)),!(Aa!=null&&Aa.executor)||!((r=Aa==null?void 0:Aa.inputs)!=null&&r[0].shape))return null;let a={};a.resize=fe.resizeBilinear(e,[Aa.inputs[0].shape?Aa.inputs[0].shape[1]:0,Aa.inputs[0].shape?Aa.inputs[0].shape[2]:0],!1),a.norm=ve(a.resize,ze.tf255),a.res=Aa.execute(a.norm),a.squeeze=Oe(a.res,[0]),[a.bgRaw,a.fgRaw]=Na(a.squeeze,2),a.fg=Uh(a.fgRaw),a.mul=te(a.fg,ze.tf255),a.expand=Wt(a.mul,2),a.output=fe.resizeBilinear(a.expand,[e.shape[1]||0,e.shape[2]||0]);let n;switch(t.segmentation.mode||"default"){case"default":a.input=Oe(e),a.concat=lt([a.input,a.output],-1),n=Ue(a.concat,"int32");break;case"alpha":n=Ue(a.output,"int32");break;default:n=Ve(0)}return Object.keys(a).forEach(s=>J(a[s])),n}var em={};yr(em,{distance:()=>fx,find:()=>z3e,similarity:()=>O3e});function fx(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 O3e(e,t,a={order:2,multiplier:25,min:.2,max:.8}){let n=fx(e,t,a);return CS(n,a.order||2,a.min||0,a.max||1)}function z3e(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;ifc,validateModel:()=>om});var TS=.005,on={keypoints:[],padding:[[0,0],[0,0],[0,0],[0,0]]};function gx(e){for(let t of dx){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 NS(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=ir(e,on.padding),a.resize=fe.resizeBilinear(a.pad,[t,t]);let n=Ue(a.resize,"int32");return Object.keys(a).forEach(i=>J(a[i])),n}function ES(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]+on.padding[2][0]+on.padding[2][1])/t[0]-on.padding[2][0],n.position[1]*(t[1]+on.padding[1][0]+on.padding[1][1])/t[1]-on.padding[1][0]],n.positionRaw=[n.position[0]/t[0],n.position[1]/t[1]];let a=vs(e.keypoints.map(n=>n.position),t);return e.box=a.box,e.boxRaw=a.boxRaw,e}var jt,tm=0,yx=Number.MAX_SAFE_INTEGER,Sl={boxes:[],bodies:[],last:0};async function MS(e){var t;return ne.initial&&(jt=null),jt?e.debug&&K("cached model:",jt.modelUrl):(b0(["size"],e),jt=await $e(e.body.modelPath)),tm=jt!=null&&jt.executor&&((t=jt==null?void 0:jt.inputs)!=null&&t[0].shape)?jt.inputs[0].shape[2]:0,tm<64&&(tm=256),B().flagRegistry.WEBGL_USE_SHAPES_UNIFORMS&&B().set("WEBGL_USE_SHAPES_UNIFORMS",!1),jt}function W3e(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:J0[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=vs(r.map(p=>p.position),[a.shape[2],a.shape[1]]),l={};for(let[p,c]of Object.entries(Q0)){let d=[];for(let h=0;hg.part===c[h]),f=r.find(g=>g.part===c[h+1]);m&&f&&m.score>(t.body.minConfidence||0)&&f.score>(t.body.minConfidence||0)&&d.push([m.position,f.position])}l[p]=d}let u={id:0,score:s,box:o.box,boxRaw:o.boxRaw,keypoints:r,annotations:l};return gx(u),i.push(u),i}function B3e(e,t,a){let n=[];for(let r=0;rt.body.minConfidence){let o=[];for(let d=0;d<17;d++){let h=s[3*d+2];if(h>t.body.minConfidence){let m=[s[3*d+1],s[3*d+0]];o.push({part:J0[d],score:Math.round(100*h)/100,positionRaw:m,position:[Math.round((a.shape[2]||0)*m[0]),Math.round((a.shape[1]||0)*m[1])]})}}let l=[s[52],s[51],s[54]-s[52],s[53]-s[51]],u=[Math.trunc(l[0]*(a.shape[2]||0)),Math.trunc(l[1]*(a.shape[1]||0)),Math.trunc(l[2]*(a.shape[2]||0)),Math.trunc(l[3]*(a.shape[1]||0))],p={};for(let[d,h]of Object.entries(Q0)){let m=[];for(let f=0;fx.part===h[f]),y=o.find(x=>x.part===h[f+1]);g&&y&&g.score>(t.body.minConfidence||0)&&y.score>(t.body.minConfidence||0)&&m.push([g.position,y.position])}p[d]=m}let c={id:r,score:i,box:u,boxRaw:l,keypoints:[...o],annotations:p};gx(c),n.push(c)}}return n.sort((r,s)=>s.score-r.score),n.length>t.body.maxDetected&&(n.length=t.body.maxDetected),n}async function xx(e,t){var r;if(!(jt!=null&&jt.executor)||!((r=jt==null?void 0:jt.inputs)!=null&&r[0].shape))return[];t.skipAllowed||(Sl.boxes.length=0),yx++;let a=(t.body.skipTime||0)>ae()-Sl.last,n=yx<(t.body.skipFrames||0);return t.skipAllowed&&a&&n?Sl.bodies:new Promise(async s=>{let i={};yx=0,i.input=RS(e,tm),i.res=jt==null?void 0:jt.execute(i.input),Sl.last=ae();let o=await i.res.array();Sl.bodies=i.res.shape[2]===17?W3e(o,t,e):B3e(o,t,e);for(let l of Sl.bodies)ES(l,[e.shape[2]||1,e.shape[1]||1]),NS(l.keypoints);Object.keys(i).forEach(l=>J(i[l])),s(Sl.bodies)})}var _n,am=[],PS=0,Ax=Number.MAX_SAFE_INTEGER,rm=0,nm=2.5;async function _S(e){if(!_n||ne.initial){_n=await $e(e.object.modelPath);let t=_n!=null&&_n.executor?Object.values(_n.modelSignature.inputs):void 0;rm=Array.isArray(t)?parseInt(t[0].tensorShape.dim[2].size):416}else e.debug&&K("cached model:",_n.modelUrl);return _n}async function V3e(e,t,a){var u,p;let n=0,r=[],s=rm;for(let c of[1,2,4]){let d=c*13,h=Oe(e.find(A=>A.shape[1]===d**2&&(A.shape[2]||0)===nd.length)),m=await h.array(),f=Oe(e.find(A=>A.shape[1]===d**2&&(A.shape[2]||0)(a.object.minConfidence||0)&&b!==61){let I=(.5+Math.trunc(A%d))/d,T=(.5+Math.trunc(A/d))/d,N=x[A].map(P=>P*(d/c/s)),[M,$]=[I-nm/c*N[0],T-nm/c*N[1]],[E,S]=[I+nm/c*N[2]-M,T+nm/c*N[3]-$],_=[M,$,E,S];_=_.map(P=>Math.max(0,Math.min(P,1)));let O=[_[0]*t[0],_[1]*t[1],_[2]*t[0],_[3]*t[1]],W={id:n++,score:Math.round(100*w)/100,class:b+1,label:nd[b].label,box:O.map(P=>Math.trunc(P)),boxRaw:_};r.push(W)}}J([h,f,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 fe.nonMaxSuppressionAsync(i,o,a.object.maxDetected||0,a.object.iouThreshold,a.object.minConfidence);l=Array.from(await c.data()),J(c)}return r=r.filter((c,d)=>l.includes(d)).sort((c,d)=>d.score-c.score),r}async function bx(e,t){if(!(_n!=null&&_n.executor))return[];let a=(t.object.skipTime||0)>ae()-PS,n=Ax<(t.object.skipFrames||0);return t.skipAllowed&&a&&n&&am.length>0?(Ax++,am):(Ax=0,!ne.kernels.includes("mod")||!ne.kernels.includes("sparsetodense")?am:new Promise(async r=>{let s=[e.shape[2]||0,e.shape[1]||0],i=fe.resizeBilinear(e,[rm,rm],!1),o=ve(i,ze.tf255),l=Qs(o,[0,3,1,2]),u;t.object.enabled&&(u=_n.execute(l)),PS=ae();let p=await V3e(u,s,t);am=p,J([i,o,l,...u]),r(p)}))}var mc=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],U3e=mc.length,hc=mc.reduce((e,t,a)=>(e[t]=a,e),{}),G3e=[["leftHip","leftShoulder"],["leftElbow","leftShoulder"],["leftElbow","leftWrist"],["leftHip","leftKnee"],["leftKnee","leftAnkle"],["rightHip","rightShoulder"],["rightElbow","rightShoulder"],["rightElbow","rightWrist"],["rightHip","rightKnee"],["rightKnee","rightAnkle"],["leftShoulder","rightShoulder"],["leftHip","rightHip"]],B6e=G3e.map(([e,t])=>[hc[e],hc[t]]),DS=[["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 OS(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 zS(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 sm=class{constructor(t,a){he(this,"priorityQueue");he(this,"numberOfElements");he(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 LS(e,t,a,n){let r=a-e,s=n-t;return r*r+s*s}function Ix(e,t){return{x:e.x+t.x,y:e.y+t.y}}var ln,j3e=["MobilenetV1/offset_2/BiasAdd","MobilenetV1/heatmap_2/BiasAdd","MobilenetV1/displacement_fwd_2/BiasAdd","MobilenetV1/displacement_bwd_2/BiasAdd"],im=1,cd=16,q3e=50**2;function WS(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,x,A)=>({y:kx(Math.round(y.y/cd),0,x-1),x:kx(Math.round(y.x/cd),0,A-1)}),[u,p]=n.shape,c=l(t.position,u,p),d=o(c),m=Ix(t.position,d);for(let y=0;y[hc[d],hc[h]]),i=s.map(([,d])=>d),o=s.map(([d])=>d),l=t.shape[2],u=i.length,p=new Array(l),c=wx(e.part,cd,a);p[e.part.id]={score:e.score,part:mc[e.part.id],position:c};for(let d=u-1;d>=0;--d){let h=i[d],m=o[d];p[h]&&!p[m]&&(p[m]=WS(d,p[h],m,t,a,r))}for(let d=0;dt){o=!1;break}if(!o)break}return o}function Y3e(e,t){let[a,n,r]=t.shape,s=new sm(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?LS(a,t,s.y,s.x)<=q3e:!1})}function Z3e(e,t){return t.reduce((n,{position:r,score:s},i)=>(BS(e,r,i)||(n+=s),n),0)/t.length}function J3e(e,t,a,n,r,s){let i=[],o=Y3e(s,t);for(;i.lengthh.score>s);let c=Z3e(i,p),d=OS(p);c>s&&i.push({keypoints:p,box:d,score:Math.round(100*c)/100})}return i}async function Sx(e,t){if(!(ln!=null&&ln.executor))return[];let a=De(()=>{if(!ln.inputs[0].shape)return[];let i=fe.resizeBilinear(e,[ln.inputs[0].shape[2],ln.inputs[0].shape[1]]),o=xe(ve(Ue(i,"float32"),127.5),1),u=ln.execute(o,j3e).map(p=>Oe(p,[0]));return u[1]=za(u[1]),u}),n=await Promise.all(a.map(i=>i.buffer()));for(let i of a)J(i);let r=J3e(n[0],n[1],n[2],n[3],t.body.maxDetected,t.body.minConfidence);return ln.inputs[0].shape?zS(r,[e.shape[1],e.shape[2]],[ln.inputs[0].shape[2],ln.inputs[0].shape[1]]):[]}async function VS(e){return!ln||ne.initial?ln=await $e(e.body.modelPath):e.debug&&K("cached model:",ln.modelUrl),ln}var cr,Q3e=["fgr","pha","r1o","r2o","r3o","r4o"],qt={},Tx=0;function HS(e){J([qt.r1i,qt.r2i,qt.r3i,qt.r4i,qt.downsample_ratio]),qt.r1i=Ve(0),qt.r2i=Ve(0),qt.r3i=Ve(0),qt.r4i=Ve(0),Tx=e.segmentation.ratio||.5,qt.downsample_ratio=Ve(Tx)}async function Nx(e){return!cr||ne.initial?cr=await $e(e.segmentation.modelPath):e.debug&&K("cached model:",cr.modelUrl),HS(e),cr}var GS=e=>De(()=>{let t=Oe(e,[0]),a=te(t,ze.tf255);return Ue(a,"int32")});function Cx(e,t){let a=e?GS(e):sr([t.shape[1]||0,t.shape[2]||0,3],255,"int32"),n=t?GS(t):sr([e.shape[1]||0,e.shape[2]||0,1],255,"int32"),r=lt([a,n],-1);return J([a,n]),r}function eye(e){return De(()=>{let t={};return t.unstack=Na(e,-1),t.concat=lt(t.unstack,1),t.split=Sa(t.concat,4,1),t.stack=lt(t.split,2),t.squeeze=Oe(t.stack,[0]),t.expand=Wt(t.squeeze,-1),t.add=we(t.expand,1),t.mul=te(t.add,127.5),t.cast=Ue(t.mul,"int32"),t.tile=Xr(t.cast,[1,1,3]),t.alpha=sr([t.tile.shape[0]||0,t.tile.shape[1]||0,1],255,"int32"),lt([t.tile,t.alpha],-1)})}async function jS(e,t){if(cr||(cr=await Nx(t)),!(cr!=null&&cr.executor))return null;qt.src=ve(e,255),Tx!==t.segmentation.ratio&&HS(t);let[a,n,r,s,i,o]=await cr.executeAsync(qt,Q3e),l;switch(t.segmentation.mode||"default"){case"default":l=Cx(a,n);break;case"alpha":l=Cx(null,n);break;case"foreground":l=Cx(a,null);break;case"state":l=eye(r);break;default:l=Ve(0)}return J([qt.src,a,n,qt.r1i,qt.r2i,qt.r3i,qt.r4i]),[qt.r1i,qt.r2i,qt.r3i,qt.r4i]=[r,s,i,o],l}var ba;async function Rx(e){return!ba||ne.initial?ba=await $e(e.segmentation.modelPath):e.debug&&K("cached model:",ba.modelUrl),ba}async function XS(e,t){var r;if(ba||(ba=await Rx(t)),!(ba!=null&&ba.executor)||!((r=ba==null?void 0:ba.inputs)!=null&&r[0].shape))return null;let a={};a.resize=fe.resizeBilinear(e,[ba.inputs[0].shape?ba.inputs[0].shape[1]:0,ba.inputs[0].shape?ba.inputs[0].shape[2]:0],!1),a.norm=ve(a.resize,ze.tf255),a.res=ba.execute(a.norm),a.squeeze=Oe(a.res,[0]),a.alpha=fe.resizeBilinear(a.squeeze,[e.shape[1]||0,e.shape[2]||0]),a.mul=te(a.alpha,ze.tf255);let n;switch(t.segmentation.mode||"default"){case"default":a.input=Oe(e),a.concat=lt([a.input,a.mul],-1),n=Ue(a.concat,"int32");break;case"alpha":n=Ue(a.mul,"int32");break;default:n=Ve(0)}return Object.keys(a).forEach(s=>J(a[s])),n}function om(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 fc=class{constructor(t){he(this,"instance");he(this,"models",{});this.models={},this.instance=t}stats(){let t=0,a=0,n=0;for(let s of Object.values(ya))t+=s.sizeFromManifest,a+=s.sizeLoadedWeights,n+=s.sizeDesired;let r=n>0?a/n:0;return{numLoadedModels:Object.values(ya).length,numDefinedModels:Object.keys(this.models).length,percentageLoaded:r,totalSizeFromManifest:t,totalSizeWeights:a,totalSizeLoading:n,modelStats:Object.values(ya)}}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,m,f,g,y,x,A,b,w,I,T,N,M,$,E,S,_;ne.initial&&this.reset(),t&&(this.instance=t);let a={};a.blazeface=this.instance.config.face.enabled&&!this.models.blazeface?U9(this.instance.config):null,a.antispoof=this.instance.config.face.enabled&&((n=this.instance.config.face.antispoof)!=null&&n.enabled)&&!this.models.antispoof?mI(this.instance.config):null,a.liveness=this.instance.config.face.enabled&&((r=this.instance.config.face.liveness)!=null&&r.enabled)&&!this.models.liveness?xI(this.instance.config):null,a.faceres=this.instance.config.face.enabled&&((s=this.instance.config.face.description)!=null&&s.enabled)&&!this.models.faceres?uI(this.instance.config):null,a.emotion=this.instance.config.face.enabled&&((i=this.instance.config.face.emotion)!=null&&i.enabled)&&!this.models.emotion?sI(this.instance.config):null,a.iris=this.instance.config.face.enabled&&((o=this.instance.config.face.iris)!=null&&o.enabled)&&!((l=this.instance.config.face.attention)!=null&&l.enabled)&&!this.models.iris?K9(this.instance.config):null,a.facemesh=this.instance.config.face.enabled&&((u=this.instance.config.face.mesh)!=null&&u.enabled)&&!this.models.facemesh?eI(this.instance.config):null,a.gear=this.instance.config.face.enabled&&((p=this.instance.config.face.gear)!=null&&p.enabled)&&!this.models.gear?wI(this.instance.config):null,a.ssrnetage=this.instance.config.face.enabled&&((c=this.instance.config.face.ssrnet)!=null&&c.enabled)&&!this.models.ssrnetage?CI(this.instance.config):null,a.ssrnetgender=this.instance.config.face.enabled&&((d=this.instance.config.face.ssrnet)!=null&&d.enabled)&&!this.models.ssrnetgender?EI(this.instance.config):null,a.mobilefacenet=this.instance.config.face.enabled&&((h=this.instance.config.face.mobilefacenet)!=null&&h.enabled)&&!this.models.mobilefacenet?FI(this.instance.config):null,a.insightface=this.instance.config.face.enabled&&((m=this.instance.config.face.insightface)!=null&&m.enabled)&&!this.models.insightface?WI(this.instance.config):null,a.blazepose=this.instance.config.body.enabled&&!this.models.blazepose&&((f=this.instance.config.body.modelPath)!=null&&f.includes("blazepose"))?I9(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?k9(this.instance.config):null,a.efficientpose=this.instance.config.body.enabled&&!this.models.efficientpose&&((g=this.instance.config.body.modelPath)!=null&&g.includes("efficientpose"))?E9(this.instance.config):null,a.movenet=this.instance.config.body.enabled&&!this.models.movenet&&((y=this.instance.config.body.modelPath)!=null&&y.includes("movenet"))?MS(this.instance.config):null,a.posenet=this.instance.config.body.enabled&&!this.models.posenet&&((x=this.instance.config.body.modelPath)!=null&&x.includes("posenet"))?VS(this.instance.config):null,a.handtrack=this.instance.config.hand.enabled&&!this.models.handtrack&&((b=(A=this.instance.config.hand.detector)==null?void 0:A.modelPath)!=null&&b.includes("handtrack"))?bS(this.instance.config):null,a.handskeleton=this.instance.config.hand.enabled&&this.instance.config.hand.landmarks&&!this.models.handskeleton&&((I=(w=this.instance.config.hand.detector)==null?void 0:w.modelPath)!=null&&I.includes("handtrack"))?vS(this.instance.config):null,this.instance.config.hand.enabled&&!this.models.handdetect&&((N=(T=this.instance.config.hand.detector)==null?void 0:T.modelPath)!=null&&N.includes("handdetect"))&&(a.handdetect=mS(this.instance.config),a.handskeleton=fS(this.instance.config)),a.centernet=this.instance.config.object.enabled&&!this.models.centernet&&((M=this.instance.config.object.modelPath)!=null&&M.includes("centernet"))?T9(this.instance.config):null,a.nanodet=this.instance.config.object.enabled&&!this.models.nanodet&&(($=this.instance.config.object.modelPath)!=null&&$.includes("nanodet"))?_S(this.instance.config):null,a.selfie=this.instance.config.segmentation.enabled&&!this.models.selfie&&((E=this.instance.config.segmentation.modelPath)!=null&&E.includes("selfie"))?Rx(this.instance.config):null,a.meet=this.instance.config.segmentation.enabled&&!this.models.meet&&((S=this.instance.config.segmentation.modelPath)!=null&&S.includes("meet"))?mx(this.instance.config):null,a.rvm=this.instance.config.segmentation.enabled&&!this.models.rvm&&((_=this.instance.config.segmentation.modelPath)!=null&&_.includes("rvm"))?Nx(this.instance.config):null;for(let[O,W]of Object.entries(a))W!=null&&W.then&&W.then(P=>this.models[O]=P);await Promise.all(Object.values(a))}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(ya).find(r=>r.startsWith(a.name));n&&(a.size=ya[n].sizeLoadedWeights,a.url=ya[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=om(this.instance,n,a);r&&t.push(r)}return t}};function YS(e,t,a,n,r){var o,l,u,p,c,d;let s=0,i=[];for(let h of e){let m={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]m.body.box[0]&&b.box[0]+b.box[2]m.body.box[1]&&b.box[1]+b.box[3]m.body.box[0]&&b.box[1]+b.box[3]>m.body.box[1]&&b.box[1]+b.box[3]{b&&b.length===4&&(f.push(b[0],b[0]+b[2]),g.push(b[1],b[1]+b[3]))};y(m.face.box),y((p=m.body)==null?void 0:p.box),y((c=m.hands.left)==null?void 0:c.box),y((d=m.hands.right)==null?void 0:d.box);let x=Math.min(...f),A=Math.min(...g);m.box=[x,A,Math.max(...f)-x,Math.max(...g)-A],r!=null&&r[1]&&(r!=null&&r[2])&&(m.boxRaw=[m.box[0]/r[2],m.box[1]/r[1],m.box[2]/r[2],m.box[3]/r[1]]),i.push(m)}return i}var lm=` /9j/4AAQSkZJRgABAQEAYABgAAD/4QBoRXhpZgAATU0AKgAAAAgABAEaAAUAAAABAAAAPgEbAAUA AAABAAAARgEoAAMAAAABAAIAAAExAAIAAAARAAAATgAAAAAAAABgAAAAAQAAAGAAAAABcGFpbnQu bmV0IDQuMi4xMwAA/9sAQwAGBAUGBQQGBgUGBwcGCAoQCgoJCQoUDg8MEBcUGBgXFBYWGh0lHxob @@ -9356,4 +9356,4 @@ AAAAAAJAAAAAAAAAAAAAABAJEAAAAAAAAAAAAAAAIEoBKAAAAAAAAAAAAAAABAlAAAAAAAIAAAAA BAkBAkBAkBAlACEgMZjdjbFW8bWrEx8YWANb6Fp+bfwab+vLDKMFK9qxH5L0bAr8OPRPKz2AY7J2 SbAjYZAI2E7AIEgIEgIEgMdkSy2NgY7MdlmyNoBXsxmFuyNgVTVjNV3KjlBRNTlXTVHKCrlIqt5T lBhEMohlFerLlBjEMohMVTEARDKCITsAk2AEgAAAkAAAAAAAAAAAAAAAAAAAAAAAASAAAAAAAAD/ -2Q==`;async function aye(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(lm);break;case"body":case"full":a=await t(um);break;default:a=null}if(a){let r=await createImageBitmap(a);n=await e.detect(r,e.config),r.close()}return n}async function nye(e){return new Promise(t=>{let a;switch(e.config.warmup){case"face":a="data:image/jpeg;base64,"+lm;break;case"full":case"body":a="data:image/jpeg;base64,"+um;break;default:a=""}let n;if(typeof Image!="undefined")n=new Image;else if(ne.Image)n=new ne.Image;else{t(void 0);return}n.onload=async()=>{let r=Mn(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 rye(e){let t=r=>Buffer.from(r,"base64"),a;e.config.warmup==="face"?a=t(lm):a=t(um);let n;if("node"in Ke&&Qt()==="tensorflow"){let r=Q3.decodeJpeg(a),s=Wt(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 sye(e){let t;return typeof createImageBitmap=="function"?t=await aye(e):typeof Image!="undefined"||ne.Canvas!==void 0?t=await nye(e):t=await rye(e),t}async function iye(e){var o,l,u,p;if(!B().flagRegistry.ENGINE_COMPILE_ONLY)return;let t=Qt(),a=Bn();if(t!=="webgl"&&t!=="humangl"||!(a!=null&&a.checkCompileCompletion))return;B().set("ENGINE_COMPILE_ONLY",!0);let n=It().state.numTensors,r=[];for(let[c,d]of Object.entries(e.models.models)){if(!d)continue;let h=d!=null&&d.modelSignature&&((l=(o=d==null?void 0:d.inputs)==null?void 0:o[0])!=null&&l.shape)?[...d.inputs[0].shape]:[1,64,64,3],m=d!=null&&d.modelSignature&&((p=(u=d==null?void 0:d.inputs)==null?void 0:u[0])!=null&&p.dtype)?d.inputs[0].dtype:"float32";for(let g=0;gJ(y)):J(g)}catch(g){e.config.debug&&K("compile fail model:",c)}J(f)}let s=await a.checkCompileCompletionAsync();a.getUniformLocations(),e.config.debug&&K("compile pass:",{models:r,kernels:s.length}),B().set("ENGINE_COMPILE_ONLY",!1);let i=It().state.numTensors;i-n>0&&K("tensor leak:",i-n)}async function YS(e,t){await oc(e,!1);let a=ae();return e.state="warmup",t&&(e.config=Et(e.config,t)),!e.config.warmup||e.config.warmup.length===0||e.config.warmup==="none"?pr():new Promise(async n=>{await e.models.load(),await iye(e);let r=await sye(e),s=ae();e.config.debug&&K("warmup",e.config.warmup,Math.round(s-a),"ms"),e.emit("warmup"),n(r)})}var hd,gc,yc,dm,Ps,Mx=class{constructor(t){he(this,"version");he(this,"config");he(this,"result");he(this,"state");he(this,"process");he(this,"tf");he(this,"env",ne);he(this,"draw",C0);he(this,"match",em);he(this,"models");he(this,"events");he(this,"faceTriangulation");he(this,"faceUVMap");he(this,"performance");qn(this,hd,void 0);qn(this,gc,void 0);qn(this,yc,void 0);he(this,"analyze",(...t)=>{if(!qa(this,gc))return;let a=this.tf.engine().state.numTensors,n=qa(this,hd);xr(this,hd,a);let r=a-n;r!==0&&K(...t,r)});qn(this,dm,t=>{if(!qa(this,yc))return null;if(!t)return"input is not defined";if(this.env.node&&!(t instanceof yt))return"input must be a tensor";try{this.tf.getBackend()}catch(a){return"backend not loaded"}return null});he(this,"webcam",new A0);he(this,"emit",t=>{var a;(a=this.events)!=null&&a.dispatchEvent&&this.events.dispatchEvent(new Event(t))});qn(this,Ps,{});let a=(ac.tfjs||i3).replace(/-(.*)/,"");dl.wasmPath=`https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@${a}/dist/`,dl.modelBasePath=ne.browser?"../models/":"file://models/",this.version=sy,Object.defineProperty(this,"version",{value:sy}),this.config=JSON.parse(JSON.stringify(dl)),Object.seal(this.config),this.config.cacheModels=typeof indexedDB!="undefined",t&&(this.config=Et(this.config,t)),o9(this.config),this.tf=Ke,this.state="idle",xr(this,hd,0),xr(this,gc,!1),xr(this,yc,!1),this.performance={},this.events=typeof EventTarget!="undefined"?new EventTarget:void 0,this.models=new fc(this),cy(),this.result=pr(),this.process={tensor:null,canvas:null},this.faceTriangulation=eI,this.faceUVMap=tI,om(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(dl)),this.config.backend=t,ny(),ne.initial=!0}validate(t){let a=ey(dl,t||this.config);return a.length===0&&(this.config=Et(this.config,t)),a}now(){return ae()}image(t,a=!1){return y0(t,this.config,a)}async segmentation(t,a){var s,i,o;if(a&&(this.config=Et(this.config,a)),!this.config.segmentation.enabled)return null;let n=await y0(t,this.config);if(!n.tensor)return null;let r=null;return(s=this.config.segmentation.modelPath)!=null&&s.includes("rvm")&&(r=await HS(n.tensor,this.config)),(i=this.config.segmentation.modelPath)!=null&&i.includes("meet")&&(r=await kS(n.tensor,this.config)),(o=this.config.segmentation.modelPath)!=null&&o.includes("selfie")&&(r=await qS(n.tensor,this.config)),J(n.tensor),r}compare(t,a){return i9(this.config,t,a)}async init(){await oc(this,!0),await this.tf.ready(),ny()}async load(t){this.state="load";let a=ae(),n=Object.values(this.models.models).filter(i=>i).length;t&&(this.config=Et(this.config,t)),this.env.initial&&(await oc(this,!1)||K("error: backend check failed"),await Dp(),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(ae()-a);s>(this.performance.loadModels||0)&&(this.performance.loadModels=this.env.perfadd?(this.performance.loadModels||0)+s:s)}next(t=this.result){return wS(t,this.config)}async warmup(t){let a=ae(),n=await YS(this,t),r=ae();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,x,A,b,w,I,T,N,M,$,E,S,_,O,W,P,U,G,q,H;this.state="config";let r;this.config=Et(this.config,a),this.state="check";let s=qa(this,dm).call(this,t);s&&(K(s,t),this.emit("error"),n(pr(s)));let i=ae();await this.load(),r=ae(),this.state="image";let o=await y0(t,this.config);if(this.process=o,this.performance.inputProcess=this.env.perfadd?(this.performance.inputProcess||0)+Math.trunc(ae()-r):Math.trunc(ae()-r),this.analyze("Get Image:"),!o.tensor){this.config.debug&&K("could not convert input to tensor"),this.emit("error"),n(pr("could not convert input to tensor"));return}this.emit("image"),r=ae(),this.config.skipAllowed=await s9(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(ae()-r):Math.trunc(ae()-r),this.analyze("Check Changed:");let l=[],u=[],p=[],c=[];this.state="detect:face",this.config.async?(l=this.config.face.enabled?ex(this,o.tensor):[],this.performance.face&&delete this.performance.face):(r=ae(),l=this.config.face.enabled?await ex(this,o.tensor):[],this.performance.face=this.env.perfadd?(this.performance.face||0)+Math.trunc(ae()-r):Math.trunc(ae()-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?Et(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?Sx(o.tensor,d):[]:(y=this.config.body.modelPath)!=null&&y.includes("blazepose")?u=this.config.body.enabled?yy(o.tensor,d):[]:(x=this.config.body.modelPath)!=null&&x.includes("efficientpose")?u=this.config.body.enabled?Iy(o.tensor,d):[]:(A=this.config.body.modelPath)!=null&&A.includes("movenet")&&(u=this.config.body.enabled?xx(o.tensor,d):[]),this.performance.body&&delete this.performance.body):(r=ae(),(b=this.config.body.modelPath)!=null&&b.includes("posenet")?u=this.config.body.enabled?await Sx(o.tensor,d):[]:(w=this.config.body.modelPath)!=null&&w.includes("blazepose")?u=this.config.body.enabled?await yy(o.tensor,d):[]:(I=this.config.body.modelPath)!=null&&I.includes("efficientpose")?u=this.config.body.enabled?await Iy(o.tensor,d):[]:(T=this.config.body.modelPath)!=null&&T.includes("movenet")&&(u=this.config.body.enabled?await xx(o.tensor,d):[]),this.performance.body=this.env.perfadd?(this.performance.body||0)+Math.trunc(ae()-r):Math.trunc(ae()-r)),this.analyze("End Body:"),this.analyze("Start Hand:"),this.state="detect:hand";let h=this.config.hand.maxDetected===-1?Et(this.config,{hand:{maxDetected:this.config.face.enabled?2*l.length:1}}):this.config;this.config.async?((M=(N=this.config.hand.detector)==null?void 0:N.modelPath)!=null&&M.includes("handdetect")?p=this.config.hand.enabled?ix(o.tensor,h):[]:(E=($=this.config.hand.detector)==null?void 0:$.modelPath)!=null&&E.includes("handtrack")&&(p=this.config.hand.enabled?ux(o.tensor,h):[]),this.performance.hand&&delete this.performance.hand):(r=ae(),(_=(S=this.config.hand.detector)==null?void 0:S.modelPath)!=null&&_.includes("handdetect")?p=this.config.hand.enabled?await ix(o.tensor,h):[]:(W=(O=this.config.hand.detector)==null?void 0:O.modelPath)!=null&&W.includes("handtrack")&&(p=this.config.hand.enabled?await ux(o.tensor,h):[]),this.performance.hand=this.env.perfadd?(this.performance.hand||0)+Math.trunc(ae()-r):Math.trunc(ae()-r)),this.analyze("End Hand:"),this.analyze("Start Object:"),this.state="detect:object",this.config.async?((P=this.config.object.modelPath)!=null&&P.includes("nanodet")?c=this.config.object.enabled?bx(o.tensor,this.config):[]:(U=this.config.object.modelPath)!=null&&U.includes("centernet")&&(c=this.config.object.enabled?by(o.tensor,this.config):[]),this.performance.object&&delete this.performance.object):(r=ae(),(G=this.config.object.modelPath)!=null&&G.includes("nanodet")?c=this.config.object.enabled?await bx(o.tensor,this.config):[]:(q=this.config.object.modelPath)!=null&&q.includes("centernet")&&(c=this.config.object.enabled?await by(o.tensor,this.config):[]),this.performance.object=this.env.perfadd?(this.performance.object||0)+Math.trunc(ae()-r):Math.trunc(ae()-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 m=[];this.config.gesture.enabled&&(r=ae(),m=[...JI(l),...ZI(u),...eS(p),...QI(l)],this.config.async?this.performance.gesture&&delete this.performance.gesture:this.performance.gesture=this.env.perfadd?(this.performance.gesture||0)+Math.trunc(ae()-r):Math.trunc(ae()-r)),this.performance.total=this.env.perfadd?(this.performance.total||0)+Math.trunc(ae()-i):Math.trunc(ae()-i);let f=((H=this.process.tensor)==null?void 0:H.shape)||[0,0,0,0];this.result={face:l,body:u,hand:p,gesture:m,object:c,performance:this.performance,canvas:this.process.canvas,timestamp:Date.now(),error:null,width:f[2],height:f[1],get persons(){return KS(l,u,p,m,f)}},J(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?(qa(this,Ps)[t.id]||(this.config.debug&&K("video start",t.id),qa(this,Ps)[t.id]=!0),!t.paused&&qa(this,Ps)[t.id]&&t.readyState>=2&&await this.detect(t),n>0&&await this.sleep(n),qa(this,Ps)[t.id]&&requestAnimationFrame(()=>this.video(t,a,n))):(this.config.debug&&K("video stop",t.id),qa(this,Ps)[t.id]=!1)}};hd=new WeakMap,gc=new WeakMap,yc=new WeakMap,dm=new WeakMap,Ps=new WeakMap;return FC(lye);})(); +2Q==`;async function nye(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(lm);break;case"body":case"full":a=await t(um);break;default:a=null}if(a){let r=await createImageBitmap(a);n=await e.detect(r,e.config),r.close()}return n}async function rye(e){return new Promise(t=>{let a;switch(e.config.warmup){case"face":a="data:image/jpeg;base64,"+lm;break;case"full":case"body":a="data:image/jpeg;base64,"+um;break;default:a=""}let n;if(typeof Image!="undefined")n=new Image;else if(ne.Image)n=new ne.Image;else{t(void 0);return}n.onload=async()=>{let r=Mn(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 sye(e){let t=r=>Buffer.from(r,"base64"),a;e.config.warmup==="face"?a=t(lm):a=t(um);let n;if("node"in Ke&&Qt()==="tensorflow"){let r=Q3.decodeJpeg(a),s=Wt(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 iye(e){let t;return typeof createImageBitmap=="function"?t=await nye(e):typeof Image!="undefined"||ne.Canvas!==void 0?t=await rye(e):t=await sye(e),t}async function oye(e){var o,l,u,p;if(!B().flagRegistry.ENGINE_COMPILE_ONLY)return;let t=Qt(),a=Bn();if(t!=="webgl"&&t!=="humangl"||!(a!=null&&a.checkCompileCompletion))return;B().set("ENGINE_COMPILE_ONLY",!0);let n=It().state.numTensors,r=[];for(let[c,d]of Object.entries(e.models.models)){if(!d)continue;let h=d!=null&&d.modelSignature&&((l=(o=d==null?void 0:d.inputs)==null?void 0:o[0])!=null&&l.shape)?[...d.inputs[0].shape]:[1,64,64,3],m=d!=null&&d.modelSignature&&((p=(u=d==null?void 0:d.inputs)==null?void 0:u[0])!=null&&p.dtype)?d.inputs[0].dtype:"float32";for(let g=0;gJ(y)):J(g)}catch(g){e.config.debug&&K("compile fail model:",c)}J(f)}let s=await a.checkCompileCompletionAsync();a.getUniformLocations(),e.config.debug&&K("compile pass:",{models:r,kernels:s.length}),B().set("ENGINE_COMPILE_ONLY",!1);let i=It().state.numTensors;i-n>0&&K("tensor leak:",i-n)}async function ZS(e,t){await oc(e,!1);let a=ae();return e.state="warmup",t&&(e.config=Et(e.config,t)),!e.config.warmup||e.config.warmup.length===0||e.config.warmup==="none"?pr():new Promise(async n=>{await e.models.load(),await oye(e);let r=await iye(e),s=ae();e.config.debug&&K("warmup",e.config.warmup,Math.round(s-a),"ms"),e.emit("warmup"),n(r)})}var hd,gc,yc,dm,Ps,Mx=class{constructor(t){he(this,"version");he(this,"config");he(this,"result");he(this,"state");he(this,"process");he(this,"tf");he(this,"env",ne);he(this,"draw",C0);he(this,"match",em);he(this,"models");he(this,"events");he(this,"faceTriangulation");he(this,"faceUVMap");he(this,"performance");qn(this,hd);qn(this,gc);qn(this,yc);he(this,"analyze",(...t)=>{if(!qa(this,gc))return;let a=this.tf.engine().state.numTensors,n=qa(this,hd);xr(this,hd,a);let r=a-n;r!==0&&K(...t,r)});qn(this,dm,t=>{if(!qa(this,yc))return null;if(!t)return"input is not defined";if(this.env.node&&!(t instanceof yt))return"input must be a tensor";try{this.tf.getBackend()}catch(a){return"backend not loaded"}return null});he(this,"webcam",new A0);he(this,"emit",t=>{var a;(a=this.events)!=null&&a.dispatchEvent&&this.events.dispatchEvent(new Event(t))});qn(this,Ps,{});let a=(ac.tfjs||i3).replace(/-(.*)/,"");dl.wasmPath=`https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@${a}/dist/`,dl.modelBasePath=ne.browser?"../models/":"file://models/",this.version=sy,Object.defineProperty(this,"version",{value:sy}),this.config=JSON.parse(JSON.stringify(dl)),Object.seal(this.config),this.config.cacheModels=typeof indexedDB!="undefined",t&&(this.config=Et(this.config,t)),l9(this.config),this.tf=Ke,this.state="idle",xr(this,hd,0),xr(this,gc,!1),xr(this,yc,!1),this.performance={},this.events=typeof EventTarget!="undefined"?new EventTarget:void 0,this.models=new fc(this),cy(),this.result=pr(),this.process={tensor:null,canvas:null},this.faceTriangulation=tI,this.faceUVMap=aI,om(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(dl)),this.config.backend=t,ny(),ne.initial=!0}validate(t){let a=ey(dl,t||this.config);return a.length===0&&(this.config=Et(this.config,t)),a}now(){return ae()}image(t,a=!1){return y0(t,this.config,a)}async segmentation(t,a){var s,i,o;if(a&&(this.config=Et(this.config,a)),!this.config.segmentation.enabled)return null;let n=await y0(t,this.config);if(!n.tensor)return null;let r=null;return(s=this.config.segmentation.modelPath)!=null&&s.includes("rvm")&&(r=await jS(n.tensor,this.config)),(i=this.config.segmentation.modelPath)!=null&&i.includes("meet")&&(r=await IS(n.tensor,this.config)),(o=this.config.segmentation.modelPath)!=null&&o.includes("selfie")&&(r=await XS(n.tensor,this.config)),J(n.tensor),r}compare(t,a){return o9(this.config,t,a)}async init(){await oc(this,!0),await this.tf.ready(),ny()}async load(t){this.state="load";let a=ae(),n=Object.values(this.models.models).filter(i=>i).length;t&&(this.config=Et(this.config,t)),this.env.initial&&(await oc(this,!1)||K("error: backend check failed"),await Dp(),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(ae()-a);s>(this.performance.loadModels||0)&&(this.performance.loadModels=this.env.perfadd?(this.performance.loadModels||0)+s:s)}next(t=this.result){return kS(t,this.config)}async warmup(t){let a=ae(),n=await ZS(this,t),r=ae();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,x,A,b,w,I,T,N,M,$,E,S,_,O,W,P,U,G,q,H;this.state="config";let r;this.config=Et(this.config,a),this.state="check";let s=qa(this,dm).call(this,t);s&&(K(s,t),this.emit("error"),n(pr(s)));let i=ae();await this.load(),r=ae(),this.state="image";let o=await y0(t,this.config);if(this.process=o,this.performance.inputProcess=this.env.perfadd?(this.performance.inputProcess||0)+Math.trunc(ae()-r):Math.trunc(ae()-r),this.analyze("Get Image:"),!o.tensor){this.config.debug&&K("could not convert input to tensor"),this.emit("error"),n(pr("could not convert input to tensor"));return}this.emit("image"),r=ae(),this.config.skipAllowed=await i9(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(ae()-r):Math.trunc(ae()-r),this.analyze("Check Changed:");let l=[],u=[],p=[],c=[];this.state="detect:face",this.config.async?(l=this.config.face.enabled?ex(this,o.tensor):[],this.performance.face&&delete this.performance.face):(r=ae(),l=this.config.face.enabled?await ex(this,o.tensor):[],this.performance.face=this.env.perfadd?(this.performance.face||0)+Math.trunc(ae()-r):Math.trunc(ae()-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?Et(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?Sx(o.tensor,d):[]:(y=this.config.body.modelPath)!=null&&y.includes("blazepose")?u=this.config.body.enabled?yy(o.tensor,d):[]:(x=this.config.body.modelPath)!=null&&x.includes("efficientpose")?u=this.config.body.enabled?Iy(o.tensor,d):[]:(A=this.config.body.modelPath)!=null&&A.includes("movenet")&&(u=this.config.body.enabled?xx(o.tensor,d):[]),this.performance.body&&delete this.performance.body):(r=ae(),(b=this.config.body.modelPath)!=null&&b.includes("posenet")?u=this.config.body.enabled?await Sx(o.tensor,d):[]:(w=this.config.body.modelPath)!=null&&w.includes("blazepose")?u=this.config.body.enabled?await yy(o.tensor,d):[]:(I=this.config.body.modelPath)!=null&&I.includes("efficientpose")?u=this.config.body.enabled?await Iy(o.tensor,d):[]:(T=this.config.body.modelPath)!=null&&T.includes("movenet")&&(u=this.config.body.enabled?await xx(o.tensor,d):[]),this.performance.body=this.env.perfadd?(this.performance.body||0)+Math.trunc(ae()-r):Math.trunc(ae()-r)),this.analyze("End Body:"),this.analyze("Start Hand:"),this.state="detect:hand";let h=this.config.hand.maxDetected===-1?Et(this.config,{hand:{maxDetected:this.config.face.enabled?2*l.length:1}}):this.config;this.config.async?((M=(N=this.config.hand.detector)==null?void 0:N.modelPath)!=null&&M.includes("handdetect")?p=this.config.hand.enabled?ix(o.tensor,h):[]:(E=($=this.config.hand.detector)==null?void 0:$.modelPath)!=null&&E.includes("handtrack")&&(p=this.config.hand.enabled?ux(o.tensor,h):[]),this.performance.hand&&delete this.performance.hand):(r=ae(),(_=(S=this.config.hand.detector)==null?void 0:S.modelPath)!=null&&_.includes("handdetect")?p=this.config.hand.enabled?await ix(o.tensor,h):[]:(W=(O=this.config.hand.detector)==null?void 0:O.modelPath)!=null&&W.includes("handtrack")&&(p=this.config.hand.enabled?await ux(o.tensor,h):[]),this.performance.hand=this.env.perfadd?(this.performance.hand||0)+Math.trunc(ae()-r):Math.trunc(ae()-r)),this.analyze("End Hand:"),this.analyze("Start Object:"),this.state="detect:object",this.config.async?((P=this.config.object.modelPath)!=null&&P.includes("nanodet")?c=this.config.object.enabled?bx(o.tensor,this.config):[]:(U=this.config.object.modelPath)!=null&&U.includes("centernet")&&(c=this.config.object.enabled?by(o.tensor,this.config):[]),this.performance.object&&delete this.performance.object):(r=ae(),(G=this.config.object.modelPath)!=null&&G.includes("nanodet")?c=this.config.object.enabled?await bx(o.tensor,this.config):[]:(q=this.config.object.modelPath)!=null&&q.includes("centernet")&&(c=this.config.object.enabled?await by(o.tensor,this.config):[]),this.performance.object=this.env.perfadd?(this.performance.object||0)+Math.trunc(ae()-r):Math.trunc(ae()-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 m=[];this.config.gesture.enabled&&(r=ae(),m=[...QI(l),...JI(u),...tS(p),...eS(l)],this.config.async?this.performance.gesture&&delete this.performance.gesture:this.performance.gesture=this.env.perfadd?(this.performance.gesture||0)+Math.trunc(ae()-r):Math.trunc(ae()-r)),this.performance.total=this.env.perfadd?(this.performance.total||0)+Math.trunc(ae()-i):Math.trunc(ae()-i);let f=((H=this.process.tensor)==null?void 0:H.shape)||[0,0,0,0];this.result={face:l,body:u,hand:p,gesture:m,object:c,performance:this.performance,canvas:this.process.canvas,timestamp:Date.now(),error:null,width:f[2],height:f[1],get persons(){return YS(l,u,p,m,f)}},J(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?(qa(this,Ps)[t.id]||(this.config.debug&&K("video start",t.id),qa(this,Ps)[t.id]=!0),!t.paused&&qa(this,Ps)[t.id]&&t.readyState>=2&&await this.detect(t),n>0&&await this.sleep(n),qa(this,Ps)[t.id]&&requestAnimationFrame(()=>this.video(t,a,n))):(this.config.debug&&K("video stop",t.id),qa(this,Ps)[t.id]=!1)}};hd=new WeakMap,gc=new WeakMap,yc=new WeakMap,dm=new WeakMap,Ps=new WeakMap;return DC(uye);})(); diff --git a/dist/human.node-gpu.js b/dist/human.node-gpu.js index 0a7ee35c..f1056d98 100644 --- a/dist/human.node-gpu.js +++ b/dist/human.node-gpu.js @@ -4,7 +4,302 @@ author: ' */ -"use strict";var Do=Object.create;var w2=Object.defineProperty;var Fo=Object.getOwnPropertyDescriptor;var Bo=Object.getOwnPropertyNames;var Ho=Object.getPrototypeOf,Go=Object.prototype.hasOwnProperty;var Vo=(e,t,n)=>t in e?w2(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var Zo=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),ze=(e,t)=>{for(var n in t)w2(e,n,{get:t[n],enumerable:!0})},I1=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of Bo(t))!Go.call(e,r)&&r!==n&&w2(e,r,{get:()=>t[r],enumerable:!(o=Fo(t,r))||o.enumerable});return e};var V=(e,t,n)=>(n=e!=null?Do(Ho(e)):{},I1(t||!e||!e.__esModule?w2(n,"default",{value:e,enumerable:!0}):n,e)),Xo=e=>I1(w2({},"__esModule",{value:!0}),e);var w=(e,t,n)=>(Vo(e,typeof t!="symbol"?t+"":t,n),n),N1=(e,t,n)=>{if(!t.has(e))throw TypeError("Cannot "+n)};var Y0=(e,t,n)=>(N1(e,t,"read from private field"),n?n.call(e):t.get(e)),ue=(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)},Re=(e,t,n,o)=>(N1(e,t,"write to private field"),o?o.call(e,n):t.set(e,n),n);var G=Zo((ga,Kt)=>{"use strict";var Ut=Object.defineProperty,qo=Object.getOwnPropertyDescriptor,Uo=Object.getOwnPropertyNames,Yo=Object.prototype.hasOwnProperty,Ko=(e,t)=>{for(var n in t)Ut(e,n,{get:t[n],enumerable:!0})},qt=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of Uo(t))!Yo.call(e,r)&&r!==n&&Ut(e,r,{get:()=>t[r],enumerable:!(o=qo(t,r))||o.enumerable});return e},Jo=(e,t,n)=>(qt(e,t,"default"),n&&qt(n,t,"default")),Qo=e=>qt(Ut({},"__esModule",{value:!0}),e),Yt={};Ko(Yt,{version:()=>or});Kt.exports=Qo(Yt);Jo(Yt,require("@tensorflow/tfjs-node-gpu"),Kt.exports);var L1="4.17.0",_o="4.17.0",$o="4.17.0",er="4.17.0",tr="4.17.0",nr="4.17.0",or={tfjs:L1,"tfjs-core":L1,"tfjs-converter":_o,"tfjs-backend-cpu":$o,"tfjs-backend-webgl":er,"tfjs-backend-wasm":tr,"tfjs-backend-webgpu":nr}});var ha={};ze(ha,{Env:()=>E2,Human:()=>w1,default:()=>w1,defaults:()=>Ke,draw:()=>nt,empty:()=>Te,env:()=>R,match:()=>Ot,models:()=>k1});module.exports=Xo(ha);var de=V(G());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 O1(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 v=()=>typeof performance!="undefined"?performance.now():parseInt((Number(process.hrtime.bigint())/1e3/1e3).toString());function Jt(e,t,n="config",o=[]){for(let r of Object.keys(t))if(typeof t[r]=="object")Jt(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&&h("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 Ke={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:!1,maxDetected:1,skipFrames:99,skipTime:2500,minConfidence:.2,minSize:0,iouThreshold:.1,scale:1.4,mask:!1,return:!1},mesh:{enabled:!0,modelPath:"facemesh.json",keepInvalid:!1},attention:{enabled:!1,modelPath:"facemesh-attention.json"},iris:{enabled:!0,scale:2.3,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-lite.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 W0=V(G());var N=V(G());var C1=` +"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 __typeError = (msg) => { + throw TypeError(msg); +}; +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( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + 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); +var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg); +var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj)); +var __privateAdd = (obj, member, value) => member.has(obj) ? __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), value); + +// dist/tfjs.esm.js +var require_tfjs_esm = __commonJS({ + "dist/tfjs.esm.js"(exports2, 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.21.0"; + var version22 = "4.21.0"; + var version32 = "4.21.0"; + var version42 = "4.21.0"; + var version5 = "4.21.0"; + var version6 = "4.21.0"; + var version7 = { + tfjs: version4, + "tfjs-core": version4, + // 'tfjs-data': tfjsDataVersion, + // 'tfjs-layers': tfjsLayersVersion, + "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 = /* @__PURE__ */ 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: false, + maxDetected: 1, + skipFrames: 99, + skipTime: 2500, + minConfidence: 0.2, + minSize: 0, + iouThreshold: 0.1, + scale: 1.4, + mask: false, + return: false + }, + mesh: { + enabled: true, + modelPath: "facemesh.json", + keepInvalid: false + }, + attention: { + enabled: false, + modelPath: "facemesh-attention.json" + }, + iris: { + enabled: true, + scale: 2.3, + 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-lite.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 +309,8 @@ vUv = uv; gl_Position = vec4(pos.x, pos.y*flipY, 0.0, 1.); } -`;var W1=` +`; +var colorMatrixWithAlpha = ` precision highp float; varying vec2 vUv; uniform sampler2D texture; @@ -26,7 +322,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]; } -`,D1=` +`; +var colorMatrixWithoutAlpha = ` precision highp float; varying vec2 vUv; uniform sampler2D texture; @@ -38,7 +335,8 @@ gl_FragColor.b = m[10] * c.r + m[11] * c.g + m[12] * c.b + m[14]; gl_FragColor.a = c.a; } -`,F1=` +`; +var pixelate = ` precision highp float; varying vec2 vUv; uniform vec2 size; @@ -51,7 +349,8 @@ vec2 coord = pixelate(vUv, size); gl_FragColor += texture2D(texture, coord); } -`,B1=` +`; +var blur = ` precision highp float; varying vec2 vUv; uniform sampler2D texture; @@ -74,7 +373,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; } -`,H1=` +`; +var convolution = ` precision highp float; varying vec2 vUv; uniform sampler2D texture; @@ -96,20 +396,6030 @@ 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))},_t=class{constructor(t,n,o){w(this,"uniform",{});w(this,"attribute",{});w(this,"gl");w(this,"id");w(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 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){h("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)){h(`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 G1(){let e=0,t=null,n=!1,o=-1,r=[null,null],s=[],A=null,a=null,l=Ae(100,100),c={},x={INTERMEDIATE:1},i=l.getContext("webgl");if(!i){h("filter: cannot get webgl context");return}this.gl=i;function y(T,p){if(!(T===l.width&&p===l.height)){if(l.width=T,l.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=i.createBuffer(),i.bindBuffer(i.ARRAY_BUFFER,A),i.bufferData(i.ARRAY_BUFFER,b,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,p){let b=i.createFramebuffer();i.bindFramebuffer(i.FRAMEBUFFER,b);let k=i.createRenderbuffer();i.bindRenderbuffer(i.RENDERBUFFER,k);let P=i.createTexture();return i.bindTexture(i.TEXTURE_2D,P),i.texImage2D(i.TEXTURE_2D,0,i.RGBA,T,p,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:b,texture:P}}function m(T){return r[T]=r[T]||d(l.width,l.height),r[T]}function f(T=0){if(!a)return;let p=null,b=null,k=!1;e===0?p=t:p=m(o).texture||null,e++,n&&!(T&x.INTERMEDIATE)?(b=null,k=e%2===0):(o=(o+1)%2,b=m(o).fbo||null),i.bindTexture(i.TEXTURE_2D,p),i.bindFramebuffer(i.FRAMEBUFFER,b),i.uniform1f(a.uniform.flipY,k?-1:1),i.drawArrays(i.TRIANGLES,0,6)}function u(T){if(c[T])return a=c[T],i.useProgram((a?a.id:null)||null),a;if(a=new _t(i,C1,T),!a)return h("filter: could not get webgl program"),null;let p=Float32Array.BYTES_PER_ELEMENT,b=4*p;return i.enableVertexAttribArray(a.attribute.pos),i.vertexAttribPointer(a.attribute.pos,2,i.FLOAT,!1,b,0*p),i.enableVertexAttribArray(a.attribute.uv),i.vertexAttribPointer(a.attribute.uv,2,i.FLOAT,!1,b,2*p),c[T]=a,a}let g={colorMatrix:T=>{let p=new Float32Array(T);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?D1:W1,k=u(b);k&&(i.uniform1fv(k.uniform.m,p),f())},brightness:T=>{let p=(T||0)+1;g.colorMatrix([p,0,0,0,0,0,p,0,0,0,0,0,p,0,0,0,0,0,1,0])},saturation:T=>{let p=(T||0)*2/3+1,b=(p-1)*-.5;g.colorMatrix([p,b,b,0,0,b,p,b,0,0,b,b,p,0,0,0,0,0,1,0])},desaturate:()=>{g.saturation(-1)},contrast:T=>{let p=(T||0)+1,b=-128*(p-1);g.colorMatrix([p,0,0,0,b,0,p,0,0,b,0,0,p,0,b,0,0,0,1,0])},negative:()=>{g.contrast(-2)},hue:T=>{T=(T||0)/180*Math.PI;let p=Math.cos(T),b=Math.sin(T),k=.213,P=.715,I=.072;g.colorMatrix([k+p*(1-k)+b*-k,P+p*-P+b*-P,I+p*-I+b*(1-I),0,0,k+p*-k+b*.143,P+p*(1-P)+b*.14,I+p*-I+b*-.283,0,0,k+p*-k+b*-(1-k),P+p*-P+b*P,I+p*(1-I)+b*I,0,0,0,0,0,1,0])},desaturateLuminance:()=>{g.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:()=>{g.colorMatrix([.393,.7689999,.18899999,0,0,.349,.6859999,.16799999,0,0,.272,.5339999,.13099999,0,0,0,0,0,1,0])},brownie:()=>{g.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:()=>{g.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:()=>{g.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:()=>{g.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:()=>{g.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:()=>{g.colorMatrix([0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0])},convolution:T=>{let p=new Float32Array(T),b=1/l.width,k=1/l.height,P=u(H1);P&&(i.uniform1fv(P.uniform.m,p),i.uniform2f(P.uniform.px,b,k),f())},detectEdges:()=>{g.convolution.call(this,[0,1,0,1,-4,1,0,1,0])},sobelX:()=>{g.convolution.call(this,[-1,0,1,-2,0,2,-1,0,1])},sobelY:()=>{g.convolution.call(this,[-1,-2,-1,0,0,0,1,2,1])},sharpen:T=>{let p=T||1;g.convolution.call(this,[0,-1*p,0,-1*p,1+4*p,-1*p,0,-1*p,0])},emboss:T=>{let p=T||1;g.convolution.call(this,[-2*p,-1*p,0,-1*p,1,1*p,0,1*p,2*p])},blur:T=>{let p=T/7/l.width,b=T/7/l.height,k=u(B1);k&&(i.uniform2f(k.uniform.px,0,b),f(x.INTERMEDIATE),i.uniform2f(k.uniform.px,p,0),f())},pixelate:T=>{let p=T/l.width,b=T/l.height,k=u(F1);k&&(i.uniform2f(k.uniform.size,p,b),f())}};this.add=function(T){let p=Array.prototype.slice.call(arguments,1),b=g[T];s.push({func:b,args:p})},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 p=0;px.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=[U.sub(n[0],o[0]),U.sub(n[1],o[1]),U.sub(n[2],o[2])],i=[U.sub(r[0],o[0]),U.sub(r[1],o[1]),U.sub(r[2],o[2])],y=[U.mul(x[0],l),U.mul(x[1],l),U.mul(x[2],l)],d=U.stack([y[0],y[1],y[2]],2);c=U.reshape(d,[1,t.shape[0]||0,t.shape[1]||0,3]),U.dispose([...x,...i,...y,d])}else c=U.expandDims(t,0);return U.dispose([...n,...o,...r,n,t,e]),c}var X2=3840,R0=null,M0=null,y2=null,e0,ne={inputSum:0,cacheDiff:1,sumMethod:0,inputTensor:void 0};function $t(){ne.inputSum=0,ne.cacheDiff=1,ne.sumMethod=0,ne.inputTensor=void 0}function Ae(e,t){let n;if(R.browser)if(R.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")n=document.createElement("canvas"),n.width=e,n.height=t;else if(typeof navigator!="undefined"&&navigator.product==="ReactNative")if(typeof R.Canvas!="undefined")n=new R.Canvas(e,t);else if(typeof globalThis.Canvas!="undefined")n=new globalThis.Canvas(e,t);else throw new Error("canvas error: attempted to use canvas in react-native without canvas support installed");else throw new Error("canvas error: attempted to run in browser but DOM is not defined");else typeof R.Canvas!="undefined"?n=new R.Canvas(e,t):typeof globalThis.Canvas!="undefined"&&(n=new globalThis.Canvas(e,t));return n}function q2(e,t){let n=t||Ae(e.width,e.height);return n.getContext("2d").drawImage(e,0,0),n}async function U2(e,t,n=!0){var y,d,m;if(!e)return t.debug&&h("input error: input is missing"),{tensor:null,canvas:null};if(!(e instanceof N.Tensor)&&!(typeof Image!="undefined"&&e instanceof Image)&&!(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 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 u=N.slice3d(e,[0,0,0],[-1,-1,3]);f=N.expandDims(u,0),N.dispose(u)}}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 u=N.cast(f,"float32");N.dispose(f),f=u}return{tensor:f,canvas:t.filter.return?M0:null}}if(typeof e.readyState!="undefined"&&e.readyState<=2)return t.debug&&h("input stream is not ready"),{tensor:null,canvas:R0};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&&h("cannot determine input dimensions"),{tensor:null,canvas:R0};let s=o,A=r;if(s>X2&&(s=X2,A=Math.trunc(s*r/o)),A>X2&&(A=X2,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");(!R0||R0.width!==s||R0.height!==A)&&(R0=Ae(s,A));let a=R0.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,R0.width,R0.height),a.setTransform(1,0,0,1,0,0)):a.drawImage(e,0,0,o,r,0,0,R0.width,R0.height),(!M0||R0.width!==M0.width||R0.height!==M0.height)&&(M0=Ae(R0.width,R0.height)),t.filter.enabled&&R.webgl.supported?(e0||(e0=R.browser?new G1:null),R.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),((m=e0.get())==null?void 0:m.length)>1?M0=e0.apply(R0):M0=e0.draw(R0)):(t.debug&&h("input process error: cannot initialize filters"),R.webgl.supported=!1,t.filter.enabled=!1,q2(R0,M0))):(q2(R0,M0),e0&&(e0=null),R.filter=!!e0),!n)return{tensor:null,canvas:M0};if(!M0)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(R.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((!y2||M0.width!==y2.width||M0.height!==y2.height)&&(y2=Ae(M0.width,M0.height)),N.browser&&R.browser)t.backend==="webgl"||t.backend==="humangl"||t.backend==="webgpu"?l=N.browser.fromPixels(M0):(y2=q2(M0),l=N.browser.fromPixels(y2));else{let g=q2(M0).getContext("2d").getImageData(0,0,s,A);c=g.data.length/s/A;let T=new Uint8Array(g.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 Z2(x):N.expandDims(x,0);if(N.dispose([l,x]),t.filter.autoBrightness){let f=N.max(i),u=await f.data();t.filter.brightness=u[0]>1?1-u[0]/255:1-u[0],N.dispose(f)}return{tensor:i,canvas:t.filter.return?M0:null}}async function V1(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(!ne.inputTensor)ne.inputTensor=N.clone(t);else if(ne.inputTensor.shape[1]!==t.shape[1]||ne.inputTensor.shape[2]!==t.shape[2])N.dispose(ne.inputTensor),ne.inputTensor=N.clone(t);else{let o={};o.diff=N.sub(t,ne.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([ne.inputTensor,o.diff,o.squared,o.sum]),ne.inputTensor=N.clone(t),n=s<=(e.cacheSensitivity||0)}return n}async function Z1(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=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,S2,j2,E2=class{constructor(){w(this,"browser");w(this,"node");w(this,"worker");w(this,"platform","");w(this,"agent","");w(this,"backends",[]);w(this,"initial");w(this,"filter");w(this,"tfjs");w(this,"offscreen");w(this,"perfadd",!1);w(this,"tensorflow",{version:void 0,gpu:void 0});w(this,"wasm",{supported:void 0,backend:void 0,simd:void 0,multithread:void 0});w(this,"webgl",{supported:void 0,backend:void 0,version:void 0,renderer:void 0,shader:void 0,vendor:void 0});w(this,"webgpu",{supported:void 0,backend:void 0,adapter:void 0});w(this,"cpu",{model:void 0,flags:[]});w(this,"kernels",[]);ue(this,z2,void 0);ue(this,S2,void 0);ue(this,j2,void 0);if(this.browser=typeof navigator!="undefined"&&typeof navigator.appVersion!="undefined",this.node=typeof process!="undefined"&&typeof process.versions!="undefined"&&typeof process.versions.node!="undefined",this.tfjs={version:W0.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"&&typeof navigator.userAgent!="undefined"){let t=navigator.userAgent||"",n=t.match(/\(([^()]+)\)/g);if(n!=null&&n[0]){let o=n[0].match(/\(([^()]+)\)/g);this.platform=o!=null&&o[0]?o[0].replace(/\(|\)/g,""):"",this.agent=t.replace(n[0],""),this.platform[1]&&(this.agent=this.agent.replace(n[1],"")),this.agent=this.agent.replace(/ /g," ")}}else typeof process!="undefined"&&(this.platform=`${process.platform} ${process.arch}`,this.agent=`NodeJS ${process.version}`)}get Canvas(){return Y0(this,z2)}set Canvas(t){Re(this,z2,t),globalThis.Canvas=t}get Image(){return Y0(this,S2)}set Image(t){Re(this,S2,t),globalThis.Image=t}get ImageData(){return Y0(this,j2)}set ImageData(t){Re(this,j2,t),globalThis.ImageData=t}async updateBackend(){this.backends=Object.keys(W0.engine().registryFactory);try{this.tensorflow={version:W0.backend().binding?W0.backend().binding.TF_Version:void 0,gpu:W0.backend().binding?W0.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 W0.env().getAsync("WASM_HAS_SIMD_SUPPORT"),this.wasm.multithread=await W0.env().getAsync("WASM_HAS_MULTITHREAD_SUPPORT"));let t=Ae(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!="undefined"&&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=W0.getKernelsForBackend(W0.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})}};z2=new WeakMap,S2=new WeakMap,j2=new WeakMap;var R=new E2;var K2=class{constructor(){w(this,"config");w(this,"element");w(this,"stream");w(this,"devices",[]);w(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});w(this,"start",async t=>{var r,s;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 A=document.getElementById(t.element);if(A&&A instanceof HTMLVideoElement)this.element=A;else return this.config.debug&&h("webcam","cannot get dom element",t.element),`webcam error: cannot get dom element: ${t.element}`}else if(t.element instanceof HTMLVideoElement)this.element=t.element;else return this.config.debug&&h("webcam","unknown dom element",t.element),`webcam error: unknown dom element: ${t.element}`;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"}};if(((r=this.config)==null?void 0:r.width)>0&&(n.video.width={ideal:this.config.width}),((s=this.config)==null?void 0:s.height)>0&&(n.video.height={ideal:this.config.height}),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))return this.config.debug&&h("webcam error","no devices"),"webcam error: no devices";try{this.stream=await navigator.mediaDevices.getUserMedia(n)}catch(A){return h("webcam",A),`webcam error: ${A}`}return this.stream?(this.element.srcObject=this.stream,await new Promise(A=>{this.element?this.element.onloadeddata=()=>A(!0):A(!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}),`webcam: ${this.label}`):(this.config.debug&&h("webcam error","no stream"),"webcam error no stream")});w(this,"pause",()=>{this.element&&this.element.pause()});w(this,"play",async()=>{this.element&&await this.element.play()});w(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 f2=V(G());var e5={};ze(e5,{"affectnet-mobilenet":()=>br,age:()=>gr,"anti-spoofing":()=>_r,antispoof:()=>ar,blazeface:()=>ir,"blazeface-back":()=>Tr,"blazeface-front":()=>vr,"blazepose-detector":()=>Rr,"blazepose-full":()=>Mr,"blazepose-heavy":()=>Pr,"blazepose-lite":()=>kr,centernet:()=>lr,default:()=>ds,efficientpose:()=>wr,"efficientpose-i-lite":()=>$r,"efficientpose-ii-lite":()=>es,"efficientpose-iv":()=>ts,emotion:()=>cr,faceboxes:()=>Er,facemesh:()=>dr,"facemesh-attention":()=>Sr,"facemesh-attention-pinto":()=>zr,"facemesh-detection-full":()=>jr,"facemesh-detection-short":()=>Ir,faceres:()=>xr,"faceres-deep":()=>Nr,gear:()=>Cr,"gear-e1":()=>Lr,"gear-e2":()=>Or,gender:()=>Dr,"gender-ssrnet-imdb":()=>Wr,handdetect:()=>Fr,"handlandmark-full":()=>Br,"handlandmark-lite":()=>yr,"handlandmark-sparse":()=>Hr,handskeleton:()=>Gr,handtrack:()=>fr,"insightface-efficientnet-b0":()=>ns,"insightface-ghostnet-strides1":()=>os,"insightface-ghostnet-strides2":()=>rs,"insightface-mobilenet-emore":()=>ss,"insightface-mobilenet-swish":()=>As,iris:()=>mr,liveness:()=>pr,meet:()=>Vr,mobileface:()=>Zr,mobilefacenet:()=>Xr,models:()=>ur,"movenet-lightning":()=>hr,"movenet-multipose":()=>qr,"movenet-thunder":()=>Ur,nanodet:()=>Yr,"nanodet-e":()=>as,"nanodet-g":()=>is,"nanodet-m":()=>ls,"nanodet-t":()=>cs,posenet:()=>Kr,rvm:()=>Jr,selfie:()=>Qr});var ar=853098,ir=538928,lr=4030290,cr=820516,dr=1477958,xr=6978814,yr=2023432,fr=2964837,mr=2599092,pr=592976,ur=0,hr=4650216,br=6920630,gr=161240,Tr=538928,vr=402048,Rr=5928856,Mr=6339202,Pr=27502466,kr=2726402,wr=5651240,Er=2013002,zr=2387598,Sr=2382414,jr=1026192,Ir=201268,Nr=13957620,Lr=112438,Or=112438,Cr=1498916,Wr=161236,Dr=201808,Fr=3515612,Br=5431368,Hr=5286322,Gr=5502280,Vr=372228,Zr=2183192,Xr=5171976,qr=9448838,Ur=12477112,Yr=7574558,Kr=5032780,Jr=3739355,Qr=212886,_r=853098,$r=2269064,es=5651240,ts=25643252,ns=13013224,os=8093408,rs=8049584,ss=6938536,As=12168584,as=12319156,is=7574558,ls=1887474,cs=5294216,ds={antispoof:ar,blazeface:ir,centernet:lr,emotion:cr,facemesh:dr,faceres:xr,"handlandmark-lite":yr,handtrack:fr,iris:mr,liveness:pr,models:ur,"movenet-lightning":hr,"affectnet-mobilenet":br,age:gr,"blazeface-back":Tr,"blazeface-front":vr,"blazepose-detector":Rr,"blazepose-full":Mr,"blazepose-heavy":Pr,"blazepose-lite":kr,efficientpose:wr,faceboxes:Er,"facemesh-attention-pinto":zr,"facemesh-attention":Sr,"facemesh-detection-full":jr,"facemesh-detection-short":Ir,"faceres-deep":Nr,"gear-e1":Lr,"gear-e2":Or,gear:Cr,"gender-ssrnet-imdb":Wr,gender:Dr,handdetect:Fr,"handlandmark-full":Br,"handlandmark-sparse":Hr,handskeleton:Gr,meet:Vr,mobileface:Zr,mobilefacenet:Xr,"movenet-multipose":qr,"movenet-thunder":Ur,nanodet:Yr,posenet:Kr,rvm:Jr,selfie:Qr,"anti-spoofing":_r,"efficientpose-i-lite":$r,"efficientpose-ii-lite":es,"efficientpose-iv":ts,"insightface-efficientnet-b0":ns,"insightface-ghostnet-strides1":os,"insightface-ghostnet-strides2":rs,"insightface-mobilenet-emore":ss,"insightface-mobilenet-swish":As,"nanodet-e":as,"nanodet-g":is,"nanodet-m":ls,"nanodet-t":cs};var D0={cacheModels:!0,cacheSupported:!0,verbose:!0,debug:!1,modelBasePath:""},I0={};async function xs(e,t){return D0.debug&&h("load model fetch:",e,t),fetch(e,t)}function X1(e){D0.cacheModels=e.cacheModels,D0.verbose=e.debug,D0.modelBasePath=e.modelBasePath}async function L(e){var c,x,i,y;let t=O1(D0.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;I0[o]={name:o,sizeFromManifest:0,sizeLoadedWeights:0,sizeDesired:e5[o],inCache:!1,url:""},D0.cacheSupported=typeof indexedDB!="undefined";let s={};try{s=D0.cacheSupported&&D0.cacheModels?await f2.io.listModels():{}}catch(d){D0.cacheSupported=!1}I0[o].inCache=D0.cacheSupported&&D0.cacheModels&&Object.keys(s).includes(r),I0[o].url=I0[o].inCache?r:t;let A=typeof fetch=="undefined"?{}:{fetchFunc:(d,m)=>xs(d,m)},a=new f2.GraphModel(I0[o].url,A),l=!1;try{a.findIOHandler(),D0.debug&&h("model load handler:",a.handler)}catch(d){h("error finding model i/o handler:",t,d)}try{let d=await((c=a.handler)==null?void 0:c.load())||null;I0[o].sizeFromManifest=((x=d==null?void 0:d.weightData)==null?void 0:x.byteLength)||0,d?a.loadSync(d):a=await f2.loadGraphModel(I0[o].inCache?r:t,A),I0[o].sizeLoadedWeights=((y=(i=a.artifacts)==null?void 0:i.weightData)==null?void 0:y.byteLength)||0,D0.verbose&&h("load:",{model:o,url:a.modelUrl,bytes:I0[o].sizeLoadedWeights}),l=!0}catch(d){h("error loading model:",t,d)}if(l&&D0.cacheModels&&D0.cacheSupported&&!I0[o].inCache)try{let d=await a.save(r);D0.debug&&h("model saved:",r,d)}catch(d){h("error saving model:",t,d)}return a}var t5="3.2.2";var S=V(G());var u0=V(G());var o0={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 ms(){let e=o0.gl;e&&(o0.extensions=e.getSupportedExtensions())}function q1(e){var t;if(e.config.backend==="humangl"&&(o0.name in u0.engine().registry&&!((t=o0==null?void 0:o0.gl)!=null&&t.getParameter(o0.gl.VERSION))&&(h("humangl error: backend invalid context"),e.models.reset()),!u0.findBackend(o0.name))){try{o0.canvas=Ae(100,100)}catch(r){h("humangl error: cannot create canvas:",r);return}try{if(o0.gl=o0.canvas.getContext("webgl2",o0.webGLattr),!o0.gl){h("humangl error: cannot get webgl context");return}if(!o0.gl.getParameter(o0.gl.VERSION).includes("2.0")){h("backend override: using fallback webgl backend as webgl 2.0 is not detected"),e.config.backend="webgl";return}o0.canvas&&(o0.canvas.addEventListener("webglcontextlost",s=>{throw h("humangl error:",s.type),h("possible browser memory leak using webgl or conflict with multiple backend registrations"),e.emit("error"),new Error("backend error: webgl context lost")}),o0.canvas.addEventListener("webglcontextrestored",s=>{h("humangl error: context restored:",s)}),o0.canvas.addEventListener("webglcontextcreationerror",s=>{h("humangl error: context create:",s)}))}catch(r){h("humangl error: cannot get webgl context:",r);return}try{u0.setWebGLContext(2,o0.gl)}catch(r){h("humangl error: cannot set webgl context:",r);return}try{let r=new u0.GPGPUContext(o0.gl);u0.registerBackend(o0.name,()=>new u0.MathBackendWebGL(r),o0.priority)}catch(r){h("humangl error: cannot register webgl backend:",r);return}try{u0.getKernelsForBackend("webgl").forEach(s=>{let A={...s,backendName:o0.name};u0.registerKernel(A)})}catch(r){h("humangl error: cannot update webgl backend registration:",r);return}try{u0.env().flagRegistry.WEBGL_VERSION&&u0.env().set("WEBGL_VERSION",2)}catch(r){h("humangl error: cannot set WebGL backend flags:",r);return}ms();let n=u0.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,o0.gl)}}var Se=V(G()),C={tf255:255,tf1:1,tf2:2,tf05:.5,tf127:127.5,rgb:[.2989,.587,.114]};function U1(){C.tf255=Se.scalar(255,"float32"),C.tf1=Se.scalar(1,"float32"),C.tf2=Se.scalar(2,"float32"),C.tf05=Se.scalar(.5,"float32"),C.tf127=Se.scalar(127.5,"float32"),C.rgb=Se.tensor1d([.2989,.587,.114],"float32")}async function hs(){var e;return await R.updateBackend(),(e=R.tensorflow)!=null&&e.version?"tensorflow":R.webgpu.supported&&R.webgpu.backend?"webgpu":R.webgl.supported&&R.webgl.backend?"webgl":R.wasm.supported&&R.wasm.backend?"wasm":"cpu"}function bs(e){let t=[];if(!R.kernels.includes("mod")){let n={kernelName:"Mod",backendName:S.getBackend(),kernelFunc:o=>S.tidy(()=>S.sub(o.inputs.a,S.mul(S.div(o.inputs.a,o.inputs.b),o.inputs.b)))};S.registerKernel(n),R.kernels.push("mod"),t.push("mod")}if(!R.kernels.includes("floormod")){let n={kernelName:"FloorMod",backendName:S.getBackend(),kernelFunc:o=>S.tidy(()=>S.add(S.mul(S.floorDiv(o.inputs.a,o.inputs.b),o.inputs.b),S.mod(o.inputs.a,o.inputs.b)))};S.registerKernel(n),R.kernels.push("floormod"),t.push("floormod")}if(!R.kernels.includes("rotatewithoffset")&&e.softwareKernels){let n={kernelName:"RotateWithOffset",backendName:S.getBackend(),kernelFunc:o=>S.tidy(()=>{let r=S.getBackend();S.setBackend("cpu");let s=S.image.rotateWithOffset(o.inputs.image,o.attrs.radians,o.attrs.fillValue,o.attrs.center);return S.setBackend(r),s})};S.registerKernel(n),R.kernels.push("rotatewithoffset"),t.push("rotatewithoffset")}t.length>0&&e.debug&&h("registered kernels:",t)}var Y1={};async function I2(e,t=!1){var n,o;if(e.state="backend",((n=e.config.backend)==null?void 0:n.length)===0&&(e.config.backend=await hs()),t||R.initial||e.config.backend&&e.config.backend.length>0&&S.getBackend()!==e.config.backend){let r=v();if(e.config.backend&&e.config.backend.length>0){typeof window=="undefined"&&typeof WorkerGlobalScope!="undefined"&&e.config.debug&&e.config.debug&&h("running inside web worker"),typeof navigator!="undefined"&&((o=navigator==null?void 0:navigator.userAgent)!=null&&o.toLowerCase().includes("electron"))&&e.config.debug&&h("running inside electron");let s=Object.keys(S.engine().registryFactory);if(e.config.backend==="humangl"&&!s.includes("humangl")&&(q1(e),s=Object.keys(S.engine().registryFactory)),e.config.debug&&h("available backends:",s),R.browser&&!R.node&&e.config.backend==="tensorflow"&&s.includes("webgl")&&(e.config.debug&&h("override: backend set to tensorflow while running in browser"),e.config.backend="webgl"),R.node&&!R.browser&&(e.config.backend==="webgl"||e.config.backend==="humangl")&&s.includes("tensorflow")&&(e.config.debug&&h(`override: backend set to ${e.config.backend} while running in nodejs`),e.config.backend="tensorflow"),R.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)}}if(s.includes(e.config.backend)||(h(`error: backend ${e.config.backend} not found in registry`),e.config.backend=R.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(S.env().flagRegistry.CANVAS2D_WILL_READ_FREQUENTLY&&S.env().set("CANVAS2D_WILL_READ_FREQUENTLY",!0),e.config.debug&&h("wasm path:",e.config.wasmPath),typeof S.setWasmPaths!="undefined")S.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 S.env().getAsync("WASM_HAS_MULTITHREAD_SUPPORT"),a=await S.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(l){h("wasm detection failed")}}try{await S.setBackend(e.config.backend),await S.ready()}catch(A){return h("error: cannot set backend:",e.config.backend,A),!1}e.config.debug&&(Y1=JSON.parse(JSON.stringify(S.env().flags)))}if((S.getBackend()==="humangl"||S.getBackend()==="webgl")&&(S.env().flagRegistry.WEBGL_USE_SHAPES_UNIFORMS&&S.env().set("WEBGL_USE_SHAPES_UNIFORMS",!0),S.env().flagRegistry.WEBGL_EXP_CONV&&S.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),S.env().set("WEBGL_DELETE_TEXTURE_THRESHOLD",0))),S.getBackend(),e.config.debug){let s=S.env().flags,A={};for(let a of Object.keys(s))Y1[a]!==s[a]&&(A[a]=s[a]);e.config.debug&&Object.keys(A).length>0&&h("backend:",S.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))S.env().set(s,A)}S.enableProdMode(),U1(),e.performance.initBackend=Math.trunc(v()-r),e.config.backend=S.getBackend(),await R.updateBackend(),bs(e.config)}return!0}function J2(e,t){for(let n of e){let o={kernelName:n,backendName:t.backend,kernelFunc:r=>{var s;return t.debug&&h("kernelFunc",n,t.backend,r),(s=r==null?void 0:r.inputs)==null?void 0:s.info}};S.registerKernel(o)}R.kernels=S.getKernelsForBackend(S.getBackend()).map(n=>n.kernelName.toLowerCase())}var nt={};ze(nt,{all:()=>Js,body:()=>_2,canvas:()=>Ks,face:()=>Q2,gesture:()=>tt,hand:()=>$2,init:()=>i5,object:()=>et,options:()=>f0,person:()=>Ys});var oe=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",{willReadFrequently:!0});if(!t)h("draw error: cannot get canvas context");else return t}return null},Je=e=>Math.round(e*180/Math.PI),Y=(e,t,n)=>e.replace(t,typeof n=="number"?n.toFixed(1):n),Qe=(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 re(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 he(e,t,n,o,r){e.fillStyle=Qe(o,r),e.beginPath(),e.arc(t,n,r.pointSize,0,2*Math.PI),e.fill()}function be(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 n5(e,t,n){if(!(t.length<2)){e.beginPath(),e.moveTo(t[0][0],t[0][1]);for(let o of t)e.strokeStyle=Qe(o[2]||0,n),e.lineTo(Math.trunc(o[0]),Math.trunc(o[1]));e.stroke(),n.fillPolygons&&(e.closePath(),e.fill())}}function J1(e,t,n){if(!(t.length<2)){if(e.lineWidth=n.lineWidth,!n.useCurves||t.length<=2){n5(e,t,n);return}e.moveTo(t[0][0],t[0][1]);for(let o=0;oN2[e]),Ga=Ts.map(e=>N2[e]),Va=vs.map(e=>N2[e]);function je(e){let t=e.map(n=>n[0]);return t.push(e[e.length-1][1]),t}var Rs=[[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]],ks=[[474,475],[475,476],[476,477],[477,474]],ws=[[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]],Es=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],zs=[[469,470],[470,471],[471,472],[472,469]],Ss=[[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]],Za={lips:je(Rs),leftEye:je(Ms),leftEyebrow:je(Ps),leftIris:je(ks),rightEye:je(ws),rightEyebrow:je(Es),rightIris:je(zs),faceOval:je(Ss)};var js=[[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]],Is=[[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]],Ns=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],Ls=[[474,475],[475,476],[476,477],[477,474]],Os=[[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]],Cs=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],Ws=[[469,470],[470,471],[471,472],[472,469]],Ds=[[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 Ie(e){let t=e.map(n=>n[0]);return t.push(e[e.length-1][1]),t}var Fs={lips:Ie(js),leftEye:Ie(Is),leftEyebrow:Ie(Ns),leftIris:Ie(Ls),rightEye:Ie(Os),rightEyebrow:Ie(Cs),rightIris:Ie(Ws),faceOval:Ie(Ds)},Bs=Object.entries(Fs).map(([e,t])=>t.map(n=>[n,e])).flat(),Xa=new Map(Bs),L2=[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],e2=[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],t2=[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 q;function Hs(e,t){var o,r,s,A,a,l,c,x,i;if(!q.drawLabels||((o=q.faceLabels)==null?void 0:o.length)===0)return;let n=q.faceLabels.slice();if(n=Y(n,"[id]",e.id.toFixed(0)),e.score&&(n=Y(n,"[score]",100*e.score)),e.gender&&(n=Y(n,"[gender]",e.gender)),e.genderScore&&(n=Y(n,"[genderScore]",100*e.genderScore)),e.age&&(n=Y(n,"[age]",e.age)),e.distance&&(n=Y(n,"[distance]",100*e.distance)),e.real&&(n=Y(n,"[real]",100*e.real)),e.live&&(n=Y(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=Y(n,"[emotions]",y.join(" "))}(s=(r=e.rotation)==null?void 0:r.angle)!=null&&s.roll&&(n=Y(n,"[roll]",Je(e.rotation.angle.roll))),(a=(A=e.rotation)==null?void 0:A.angle)!=null&&a.yaw&&(n=Y(n,"[yaw]",Je(e.rotation.angle.yaw))),(c=(l=e.rotation)==null?void 0:l.angle)!=null&&c.pitch&&(n=Y(n,"[pitch]",Je(e.rotation.angle.pitch))),(i=(x=e.rotation)==null?void 0:x.gaze)!=null&&i.bearing&&(n=Y(n,"[gaze]",Je(e.rotation.gaze.bearing))),re(t,n,e.box[0],e.box[1],q)}function Gs(e,t){var n,o,r,s;if((n=e.annotations)!=null&&n.leftEyeIris&&((o=e.annotations)!=null&&o.leftEyeIris[0])){t.strokeStyle=q.useDepth?"rgba(255, 200, 255, 0.3)":q.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(),q.fillPolygons&&(t.fillStyle=q.useDepth?"rgba(255, 255, 200, 0.3)":q.color,t.fill())}if((r=e.annotations)!=null&&r.rightEyeIris&&((s=e.annotations)!=null&&s.rightEyeIris[0])){t.strokeStyle=q.useDepth?"rgba(255, 200, 255, 0.3)":q.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(),q.fillPolygons&&(t.fillStyle=q.useDepth?"rgba(255, 255, 200, 0.3)":q.color,t.fill())}}function Vs(e,t){var n;if(q.drawGaze&&((n=e.rotation)!=null&&n.angle)&&typeof Path2D!="undefined"){t.strokeStyle="pink";let o=e.box[0]+e.box[2]/2-e.box[3]*Je(e.rotation.angle.yaw)/90,r=e.box[1]+e.box[3]/2+e.box[2]*Je(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 rgb3 = tf.split(squeeze14, 3, 2); + const min2 = [tf.min(rgb3[0]), tf.min(rgb3[1]), tf.min(rgb3[2])]; + const max5 = [tf.max(rgb3[0]), tf.max(rgb3[1]), tf.max(rgb3[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(rgb3[0], min2[0]), tf.sub(rgb3[1], min2[1]), tf.sub(rgb3[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, stack5]); + } else { + final = tf.expandDims(squeeze14, 0); + } + tf.dispose([...rgb3, ...min2, ...max5, rgb3, 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") { + c = document.createElement("canvas"); + c.width = width; + c.height = height; + } else if (typeof navigator !== "undefined" && navigator.product === "ReactNative") { + if (typeof env.Canvas !== "undefined") c = new env.Canvas(width, height); + else if (typeof globalThis.Canvas !== "undefined") c = new globalThis.Canvas(width, height); + else throw new Error("canvas error: attempted to use canvas in react-native without canvas support installed"); + } else { + throw new Error("canvas error: attempted to run in browser but DOM is not defined"); + } + } + } 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 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 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 rgb3 = tf2.slice3d(input, [0, 0, 0], [-1, -1, 3]); + tensor7 = tf2.expandDims(rgb3, 0); + tf2.dispose(rgb3); + } + } 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 rgb3 = tf2.slice3d(pixels, [0, 0, 0], [-1, -1, 3]); + tf2.dispose(pixels); + pixels = rgb3; + } + 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 _canvas, _image, _imageData; +var Env = class { + constructor() { + /** Running in Browser */ + __publicField(this, "browser"); + /** Running in NodeJS */ + __publicField(this, "node"); + /** Running in WebWorker thread */ + __publicField(this, "worker"); + /** Detected platform */ + __publicField(this, "platform", ""); + /** Detected agent */ + __publicField(this, "agent", ""); + /** List of supported backends */ + __publicField(this, "backends", []); + /** Has any work been performed so far */ + __publicField(this, "initial"); + /** Are image filters supported? */ + __publicField(this, "filter"); + /** TFJS instance details */ + __publicField(this, "tfjs"); + /** Is offscreenCanvas supported? */ + __publicField(this, "offscreen"); + /** Are performance counter instant values or additive */ + __publicField(this, "perfadd", false); + /** If using tfjs-node get version of underlying tensorflow shared library and if gpu acceleration is enabled */ + __publicField(this, "tensorflow", { + version: void 0, + gpu: void 0 + }); + /** WASM detected capabilities */ + __publicField(this, "wasm", { + supported: void 0, + backend: void 0, + simd: void 0, + multithread: void 0 + }); + /** WebGL detected capabilities */ + __publicField(this, "webgl", { + supported: void 0, + backend: void 0, + version: void 0, + renderer: void 0, + shader: void 0, + vendor: void 0 + }); + /** WebGPU detected capabilities */ + __publicField(this, "webgpu", { + supported: void 0, + backend: void 0, + adapter: void 0 + }); + /** CPU info */ + __publicField(this, "cpu", { + model: void 0, + flags: [] + }); + /** List of supported kernels for current backend */ + __publicField(this, "kernels", []); + /** MonkeyPatch for Canvas/Image/ImageData */ + __privateAdd(this, _canvas); + __privateAdd(this, _image); + __privateAdd(this, _imageData); + this.browser = typeof navigator !== "undefined" && typeof navigator.appVersion !== "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" && typeof navigator.userAgent !== "undefined") { + const agent = navigator.userAgent || ""; + const raw = agent.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 = agent.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}`; + } + } + get Canvas() { + return __privateGet(this, _canvas); + } + set Canvas(val) { + __privateSet(this, _canvas, val); + globalThis.Canvas = val; + } + get Image() { + return __privateGet(this, _image); + } + // @ts-ignore monkey-patch; + set Image(val) { + __privateSet(this, _image, val); + globalThis.Image = val; + } + get ImageData() { + return __privateGet(this, _imageData); + } + // @ts-ignore monkey-patch; + set ImageData(val) { + __privateSet(this, _imageData, val); + globalThis.ImageData = val; + } + /** update backend information */ + 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 !== "undefined" && 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) { + } + } + /** update cpu information */ + 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; + } +}; +_canvas = new WeakMap(); +_image = new WeakMap(); +_imageData = new WeakMap(); +var env = new Env(); + +// src/util/webcam.ts +var WebCam = class { + constructor() { + // eslint-disable-line @typescript-eslint/no-extraneous-class + /** current webcam configuration */ + __publicField(this, "config"); + /** instance of dom element associated with webcam stream */ + __publicField(this, "element"); + /** active webcam stream */ + __publicField(this, "stream"); + /** enumerated video devices */ + __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; + }); + /** start method initializizes webcam stream and associates it with a dom video element */ + __publicField(this, "start", async (webcamConfig) => { + var _a, _b; + 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 `webcam error: cannot get dom element: ${webcamConfig.element}`; + } + } else if (webcamConfig.element instanceof HTMLVideoElement) { + this.element = webcamConfig.element; + } else { + if (this.config.debug) log("webcam", "unknown dom element", webcamConfig.element); + return `webcam error: unknown dom element: ${webcamConfig.element}`; + } + } else { + this.element = document.createElement("video"); + } + const requestedConstraints = { + audio: false, + video: { + facingMode: this.config.mode === "front" ? "user" : "environment", + // @ts-ignore // resizeMode is still not defined in tslib + resizeMode: this.config.crop ? "crop-and-scale" : "none" + } + }; + if (((_a = this.config) == null ? void 0 : _a.width) > 0) requestedConstraints.video.width = { ideal: this.config.width }; + if (((_b = this.config) == null ? void 0 : _b.height) > 0) requestedConstraints.video.height = { ideal: this.config.height }; + 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 error", "no devices"); + return "webcam error: no devices"; + } + try { + this.stream = await navigator.mediaDevices.getUserMedia(requestedConstraints); + } catch (err) { + log("webcam", err); + return `webcam error: ${err}`; + } + if (!this.stream) { + if (this.config.debug) log("webcam error", "no stream"); + return "webcam error no stream"; + } + 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 + }); + } + return `webcam: ${this.label}`; + }); + /** pause webcam video method */ + __publicField(this, "pause", () => { + if (this.element) this.element.pause(); + }); + /** play webcam video method */ + __publicField(this, "play", async () => { + if (this.element) await this.element.play(); + }); + /** stop method stops active webcam stream track and disconnects webcam */ + __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 active webcam stream track */ + get track() { + if (!this.stream) return void 0; + return this.stream.getVideoTracks()[0]; + } + /** get webcam capabilities */ + get capabilities() { + if (!this.track) return void 0; + return this.track.getCapabilities ? this.track.getCapabilities() : void 0; + } + /** get webcam constraints */ + get constraints() { + if (!this.track) return void 0; + return this.track.getConstraints ? this.track.getConstraints() : void 0; + } + /** get webcam settings */ + get settings() { + if (!this.stream) return void 0; + const track = this.stream.getVideoTracks()[0]; + return track.getSettings ? track.getSettings() : void 0; + } + /** get webcam label */ + get label() { + if (!this.track) return ""; + return this.track.label; + } + /** is webcam paused */ + get paused() { + var _a; + return ((_a = this.element) == null ? void 0 : _a.paused) || false; + } + /** webcam current width */ + get width() { + var _a; + return ((_a = this.element) == null ? void 0 : _a.videoWidth) || 0; + } + /** webcam current height */ + 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, { + "affectnet-mobilenet": () => affectnet_mobilenet, + age: () => age, + "anti-spoofing": () => anti_spoofing, + antispoof: () => antispoof, + blazeface: () => blazeface, + "blazeface-back": () => blazeface_back, + "blazeface-front": () => blazeface_front, + "blazepose-detector": () => blazepose_detector, + "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-pinto": () => facemesh_attention_pinto, + "facemesh-detection-full": () => facemesh_detection_full, + "facemesh-detection-short": () => facemesh_detection_short, + faceres: () => faceres, + "faceres-deep": () => faceres_deep, + gear: () => gear, + "gear-e1": () => gear_e1, + "gear-e2": () => gear_e2, + 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_lite = 2023432; +var handtrack = 2964837; +var iris = 2599092; +var liveness = 592976; +var models = 0; +var movenet_lightning = 4650216; +var affectnet_mobilenet = 6920630; +var age = 161240; +var blazeface_back = 538928; +var blazeface_front = 402048; +var blazepose_detector = 5928856; +var blazepose_full = 6339202; +var blazepose_heavy = 27502466; +var blazepose_lite = 2726402; +var efficientpose = 5651240; +var faceboxes = 2013002; +var facemesh_attention_pinto = 2387598; +var facemesh_attention = 2382414; +var facemesh_detection_full = 1026192; +var facemesh_detection_short = 201268; +var faceres_deep = 13957620; +var gear_e1 = 112438; +var gear_e2 = 112438; +var gear = 1498916; +var gender_ssrnet_imdb = 161236; +var gender = 201808; +var handdetect = 3515612; +var handlandmark_full = 5431368; +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 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-lite": handlandmark_lite, + handtrack, + iris, + liveness, + models, + "movenet-lightning": movenet_lightning, + "affectnet-mobilenet": affectnet_mobilenet, + age, + "blazeface-back": blazeface_back, + "blazeface-front": blazeface_front, + "blazepose-detector": blazepose_detector, + "blazepose-full": blazepose_full, + "blazepose-heavy": blazepose_heavy, + "blazepose-lite": blazepose_lite, + efficientpose, + faceboxes, + "facemesh-attention-pinto": facemesh_attention_pinto, + "facemesh-attention": facemesh_attention, + "facemesh-detection-full": facemesh_detection_full, + "facemesh-detection-short": facemesh_detection_short, + "faceres-deep": faceres_deep, + "gear-e1": gear_e1, + "gear-e2": gear_e2, + gear, + "gender-ssrnet-imdb": gender_ssrnet_imdb, + gender, + handdetect, + "handlandmark-full": handlandmark_full, + "handlandmark-sparse": handlandmark_sparse, + handskeleton, + meet, + mobileface, + mobilefacenet, + "movenet-multipose": movenet_multipose, + "movenet-thunder": movenet_thunder, + nanodet, + posenet, + rvm, + selfie, + "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.3.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: { + // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.2 + alpha: false, + antialias: false, + premultipliedAlpha: false, + preserveDrawingBuffer: false, + depth: false, + stencil: false, + failIfMajorPerformanceCaveat: false, + // default=true + desynchronized: true + // default=undefined + } +}; +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() { + var _a; + await env.updateBackend(); + if ((_a = env.tensorflow) == null ? void 0 : _a.version) 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, _b; + 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 (typeof navigator !== "undefined" && ((_b = navigator == null ? void 0 : navigator.userAgent) == null ? void 0 : _b.toLowerCase().includes("electron"))) { + if (instance.config.debug) log("running inside electron"); + } + 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 (env.browser && !env.node && instance.config.backend === "tensorflow" && available.includes("webgl")) { + if (instance.config.debug) log("override: backend set to tensorflow while running in browser"); + instance.config.backend = "webgl"; + } + if (env.node && !env.browser && (instance.config.backend === "webgl" || instance.config.backend === "humangl") && available.includes("tensorflow")) { + 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); + } + } + } + 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); + } + 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; + } + // setupFunc: () => { if (config.debug) log('kernelFunc', kernelName, config.backend); }, + // disposeFunc: () => { if (config.debug) log('kernelFunc', kernelName, config.backend); }, + }; + 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", { willReadFrequently: true }); + 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 rgb3 = Uint8ClampedArray.from([127 + 2 * z, 127 - 2 * z, 255]); + return `rgba(${rgb3[0]}, ${rgb3[1]}, ${rgb3[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)", + // 'lightblue' with light alpha channel + labelColor: "rgba(173, 216, 230, 1)", + // 'lightblue' with dark alpha channel + 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: [61, 185, 40, 39, 37, 0, 267, 269, 270, 409, 291], // 11 + // lipsLowerOuter: [146, 91, 181, 84, 17, 314, 405, 321, 375, 291], // 10 + // lipsUpperInner: [78, 191, 80, 81, 82, 13, 312, 311, 310, 415, 308], // 11 + // lipsLowerInner: [78, 95, 88, 178, 87, 14, 317, 402, 318, 324, 308], // 11 + 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], + // 7 + rightEyeLower0: [33, 7, 163, 144, 145, 153, 154, 155, 133], + // 9 + rightEyeUpper1: [247, 30, 29, 27, 28, 56, 190], + // 7 + rightEyeLower1: [130, 25, 110, 24, 23, 22, 26, 112, 243], + // 9 + rightEyeUpper2: [113, 225, 224, 223, 222, 221, 189], + // 7 + rightEyeLower2: [226, 31, 228, 229, 230, 231, 232, 233, 244], + // 9 + rightEyeLower3: [143, 111, 117, 118, 119, 120, 121, 128, 245], + // 9 + rightEyebrowUpper: [156, 70, 63, 105, 66, 107, 55, 193], + // 8 + rightEyebrowLower: [35, 124, 46, 53, 52, 65], + // 6 + rightEyeIris: [473, 474, 475, 476, 477], + // 5 + 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 = [ + // A mapping from facemesh model keypoints to iris model keypoints. + { key: "EyeUpper0", indices: [9, 10, 11, 12, 13, 14, 15] }, + // 7 x 3d + { key: "EyeUpper1", indices: [25, 26, 27, 28, 29, 30, 31] }, + // 7 x 3d + { key: "EyeUpper2", indices: [41, 42, 43, 44, 45, 46, 47] }, + // 7 x 3d + { key: "EyeLower0", indices: [0, 1, 2, 3, 4, 5, 6, 7, 8] }, + // 7 x 3d + { key: "EyeLower1", indices: [16, 17, 18, 19, 20, 21, 22, 23, 24] }, + // 9 x 3d + { key: "EyeLower2", indices: [32, 33, 34, 35, 36, 37, 38, 39, 40] }, + // 9 x 3d + { key: "EyeLower3", indices: [54, 55, 56, 57, 58, 59, 60, 61, 62] }, + // 9 x 3d + { key: "EyebrowUpper", indices: [63, 64, 65, 66, 67, 68, 69, 70] }, + // 8 x 3d + { key: "EyebrowLower", indices: [48, 49, 50, 51, 52, 53] } + // 6 x 3d +]; +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 = [ + /* cont */ + 127, + 234, + 132, + 58, + 172, + 150, + 149, + 148, + 152, + 377, + 378, + 379, + 397, + 288, + 361, + 454, + 356, + /* brows */ + 70, + 63, + 105, + 66, + 107, + 336, + 296, + 334, + 293, + 300, + /* nose */ + 168, + 6, + 195, + 4, + 98, + 97, + 2, + 326, + 327, + /* eyes */ + 33, + 160, + 158, + 133, + 153, + 144, + 362, + 385, + 387, + 263, + 373, + 380, + /* lip */ + 57, + 40, + 37, + 0, + 267, + 270, + 287, + 321, + 314, + 17, + 84, + 91, + /* mouth */ + 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, + // Lower outer. + 185, + 40, + 39, + 37, + 0, + 267, + 269, + 270, + 409, + // Upper outer(excluding corners). + 78, + 95, + 88, + 178, + 87, + 14, + 317, + 402, + 318, + 324, + 308, + // Lower inner. + 191, + 80, + 81, + 82, + 13, + 312, + 311, + 310, + 415, + // Upper inner(excluding corners). + 76, + 77, + 90, + 180, + 85, + 16, + 315, + 404, + 320, + 307, + 306, + // Lower semi - outer. + 184, + 74, + 73, + 72, + 11, + 302, + 303, + 304, + 408, + // Upper semi - outer(excluding corners). + 62, + 96, + 89, + 179, + 86, + 15, + 316, + 403, + 319, + 325, + 292, + // Lower semi - inner. + 183, + 42, + 41, + 38, + 12, + 268, + 271, + 272, + 407 + // Upper semi - inner(excluding corners). +]; +var LANDMARKS_REFINEMENT_LEFT_EYE_CONFIG = [ + 33, + 7, + 163, + 144, + 145, + 153, + 154, + 155, + 133, + // Lower contour. + 246, + 161, + 160, + 159, + 158, + 157, + 173, + // upper contour (excluding corners). + 130, + 25, + 110, + 24, + 23, + 22, + 26, + 112, + 243, + // Halo x2 lower contour. + 247, + 30, + 29, + 27, + 28, + 56, + 190, + // Halo x2 upper contour (excluding corners). + 226, + 31, + 228, + 229, + 230, + 231, + 232, + 233, + 244, + // Halo x3 lower contour. + 113, + 225, + 224, + 223, + 222, + 221, + 189, + // Halo x3 upper contour (excluding corners). + 35, + 124, + 46, + 53, + 52, + 65, + // Halo x4 upper contour (no lower because of mesh structure) or eyebrow inner contour. + 143, + 111, + 117, + 118, + 119, + 120, + 121, + 128, + 245, + // Halo x5 lower contour. + 156, + 70, + 63, + 105, + 66, + 107, + 55, + 193 + // Halo x5 upper contour (excluding corners) or eyebrow outer contour. +]; +var LANDMARKS_REFINEMENT_RIGHT_EYE_CONFIG = [ + 263, + 249, + 390, + 373, + 374, + 380, + 381, + 382, + 362, + // Lower contour. + 466, + 388, + 387, + 386, + 385, + 384, + 398, + // Upper contour (excluding corners). + 359, + 255, + 339, + 254, + 253, + 252, + 256, + 341, + 463, + // Halo x2 lower contour. + 467, + 260, + 259, + 257, + 258, + 286, + 414, + // Halo x2 upper contour (excluding corners). + 446, + 261, + 448, + 449, + 450, + 451, + 452, + 453, + 464, + // Halo x3 lower contour. + 342, + 445, + 444, + 443, + 442, + 441, + 413, + // Halo x3 upper contour (excluding corners). + 265, + 353, + 276, + 283, + 282, + 295, + // Halo x4 upper contour (no lower because of mesh structure) or/ eyebrow inner contour. + 372, + 340, + 346, + 347, + 348, + 349, + 350, + 357, + 465, + // Halo x5 lower contour. + 383, + 300, + 293, + 334, + 296, + 336, + 285, + 417 + // Halo x5 upper contour (excluding corners) or eyebrow outer contour. +]; + +// 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(); + l = replace(l, "[id]", f.id.toFixed(0)); + 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 Zs(e,t){var n;if(q.drawGaze&&((n=e.rotation)!=null&&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]];o5(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]];o5(t,[e.annotations.rightEyeIris[0][0],e.annotations.rightEyeIris[0][1]],[r[0],r[1]],4)}}function Xs(e,t){if(q.drawPolygons&&e.mesh.length>=468){t.lineWidth=1;for(let n=0;n<$e.length/3;n++){let o=[$e[n*3+0],$e[n*3+1],$e[n*3+2]].map(r=>e.mesh[r]);n5(t,o,q)}Gs(e,t)}}function qs(e,t){if(q.drawPoints)if((e==null?void 0:e.mesh.length)>=468)for(let n=0;n0&&(qs(r,o),Xs(r,o),Vs(r,o),Zs(r,o))}}function _2(e,t,n){var s,A;let o=a0(f0,n);if(!t||!e)return;let r=oe(e);if(r){r.lineJoin="round";for(let a=0;a0)){let l=o.bodyLabels.slice();l=Y(l,"[id]",t[a].id.toFixed(0)),l=Y(l,"[score]",100*t[a].score),re(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=Y(c,"[label]",l.part),c=Y(c,"[score]",100*l.score),re(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)J1(r,c,o)}}}function $2(e,t,n){var s,A;let o=a0(f0,n);if(!t||!e)return;let r=oe(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,be(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=Y(l,"[id]",a.id.toFixed(0)),l=Y(l,"[label]",a.label),l=Y(l,"[score]",100*a.score),re(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=Qe(l[2],o),he(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=Y(x,"[label]",l),re(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 et(e,t,n){var s;let o=a0(f0,n);if(!t||!e)return;let r=oe(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,be(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=Y(a,"[id]",A.id.toFixed(0)),a=Y(a,"[label]",A.label),a=Y(a,"[score]",100*A.score),re(r,a,A.box[0],A.box[1],o)}r.stroke()}}}function tt(e,t,n){var r;let o=a0(f0,n);if(!(!t||!e)&&o.drawGestures&&((r=o.gestureLabels)==null?void 0:r.length)>0){let s=oe(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=Y(i,"[where]",l[0]),i=Y(i,"[who]",x),i=Y(i,"[what]",c[1]),re(s,i,8,2+A*o.lineHeight,o),A+=1}}}}var Ne={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) { + if ((f == null ? void 0 : 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); + } + } + } else { + for (const [k, v] of Object.entries((f == null ? void 0 : f.annotations) || {})) { + if (!(v == null ? void 0 : v[0])) continue; + const pt = v[0]; + point(ctx, pt[0], pt[1], 0, localOptions); + if (localOptions.drawLabels) labels(ctx, k, pt[0], pt[1], 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, "[id]", result[i].id.toFixed(0)); + 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, "[id]", h.id.toFixed(0)); + 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, "[id]", h.id.toFixed(0)); + 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 +6428,7430 @@ 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 a5=0;function Ys(e,t,n){let o=a0(f0,n);if(!t||!e)return;let r=oe(e);if(r){r.lineJoin="round",r.font=o.font;for(let s=0;sc5,kpt:()=>l5});var l5=["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"],c5={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(G());var se,n2=224,$1,Qs=5,rt=[8,16,32,32,32];function _s(){let e=[],t=0;for(;tn.x)),y:D.tensor1d(e.map(n=>n.y))}}async function e3(e){if(R.initial&&(se=null),!se&&e.body.detector&&e.body.detector.modelPath){se=await L(e.body.detector.modelPath);let t=se!=null&&se.executor?Object.values(se.modelSignature.inputs):void 0;n2=Array.isArray(t)?parseInt(t[0].tensorShape.dim[1].size):0}else e.debug&&se&&h("cached model:",se.modelUrl);return _s(),se}var _1=[5,5];function $s(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,n2),t.x),r=D.add(D.div(r,n2),t.y),s=D.mul(D.div(s,n2),_1[0]),A=D.mul(D.div(A,n2),_1[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 eA(e,t,n,o){var c,x;let r=[],s={};s.boxes=$s(e,$1),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],m=[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:m};r.push(f)}return Object.keys(s).forEach(i=>D.dispose(s[i])),r}async function t3(e,t,n){let o={};o.res=se==null?void 0:se.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 eA(o.boxes,o.logits,t,n);return Object.keys(o).forEach(s=>D.dispose(o[s])),r}function Le(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 n3(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 st(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 Z0,x5=256,d5=Number.MAX_SAFE_INTEGER,tA={landmarks:["ld_3d","activation_segmentation","activation_heatmap","world_3d","output_poseflag"],detector:[]},at=[],Oe=[[0,0],[0,0],[0,0],[0,0]],o3=0,r3=e=>1-1/(1+Math.exp(e)),A3=e=>e3(e);async function a3(e){if(R.initial&&(Z0=null),Z0)e.debug&&h("cached model:",Z0.modelUrl);else{Z0=await L(e.body.modelPath);let t=Z0!=null&&Z0.executor?Object.values(Z0.modelSignature.inputs):void 0;x5=Array.isArray(t)?parseInt(t[0].tensorShape.dim[1].size):0}return Z0}function s3(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=X0.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];Oe=[[0,0],a,l,[0,0]],o.pad=X0.pad(o.cropped||e,Oe),o.resize=X0.image.resizeBilinear(o.pad,[t,t]),r=X0.div(o.resize,C.tf255)}else e.shape[1]!==t?(o.resize=X0.image.resizeBilinear(o.cropped||e,[t,t]),r=X0.div(o.resize,C.tf255)):r=X0.div(o.cropped||e,C.tf255);return Object.keys(o).forEach(a=>X0.dispose(o[a])),r}function nA(e,t,n){for(let o of e)o.position=[Math.trunc(o.position[0]*(t[0]+Oe[2][0]+Oe[2][1])/t[0]-Oe[2][0]),Math.trunc(o.position[1]*(t[1]+Oe[1][0]+Oe[1][1])/t[1]-Oe[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 oA(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 rA(e,t,n){if(!(Z0!=null&&Z0.executor))return null;let o={};[o.ld,o.segmentation,o.heatmap,o.world,o.poseflag]=Z0==null?void 0:Z0.execute(e,tA.landmarks);let r=(await o.poseflag.data())[0],s=await o.ld.data(),A=await o.world.data();Object.keys(o).forEach(m=>X0.dispose(o[m]));let a=[],l=5;for(let m=0;mm.position),i=Le(x,[n[0],n[1]]),y={};for(let[m,f]of Object.entries(c5)){let u=[];for(let g=0;gb.part===f[g]),p=c.find(b=>b.part===f[g+1]);T&&p&&u.push([T.position,p.position])}y[m]=u}return{id:0,score:Math.trunc(100*r)/100,box:i.box,boxRaw:i.boxRaw,keypoints:c,annotations:y}}async function y5(e,t){var s,A,a;let n=[e.shape[2]||0,e.shape[1]||0],o=(t.body.skipTime||0)>v()-o3,r=d5<(t.body.skipFrames||0);if(t.skipAllowed&&o&&r&&at!==null)d5++;else{let l=[];if((A=(s=t.body)==null?void 0:s.detector)!=null&&A.enabled){let c=s3(e,224);l=await t3(c,t,n),X0.dispose(c)}else l=[{box:[0,0,0,0],boxRaw:[0,0,1,1],score:0}];for(let c=0;cF0.dispose(o[c])),r}async function p5(e,t){if(!(q0!=null&&q0.executor))return[];let n=(t.object.skipTime||0)>v()-l3,o=m5<(t.object.skipFrames||0);return t.skipAllowed&&n&&o&&f5.length>0?(m5++,f5):(m5=0,new Promise(async r=>{let s=[e.shape[2]||0,e.shape[1]||0],A=F0.image.resizeBilinear(e,[o2,o2]),a=t.object.enabled?q0==null?void 0:q0.execute(A,["tower_0/detections"]):null;l3=v(),F0.dispose(A);let l=await sA(a,s,t);f5=l,r(l)}))}var J=V(G());var it={};ze(it,{connected:()=>h5,kpt:()=>u5});var u5=["head","neck","rightShoulder","rightElbow","rightWrist","chest","leftShoulder","leftElbow","leftWrist","bodyCenter","rightHip","rightKnee","rightAnkle","leftHip","leftKnee","leftAnkle"],h5={leftLeg:["leftHip","leftKnee","leftAnkle"],rightLeg:["rightHip","rightKnee","rightAnkle"],torso:["leftShoulder","rightShoulder","rightHip","leftHip","leftShoulder"],leftArm:["leftShoulder","leftElbow","leftWrist"],rightArm:["rightShoulder","rightElbow","rightWrist"],head:[]};var i0,x3=0,B0={id:0,keypoints:[],box:[0,0,0,0],boxRaw:[0,0,0,0],score:0,annotations:{}},b5=Number.MAX_SAFE_INTEGER;async function y3(e){return R.initial&&(i0=null),i0?e.debug&&h("cached model:",i0.modelUrl):i0=await L(e.body.modelPath),i0}async function AA(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 g5(e,t){if(!(i0!=null&&i0.executor)||!(i0!=null&&i0.inputs[0].shape))return[];let n=(t.body.skipTime||0)>v()-x3,o=b5<(t.body.skipFrames||0);return t.skipAllowed&&n&&o&&Object.keys(B0.keypoints).length>0?(b5++,[B0]):(b5=0,new Promise(async r=>{let s=J.tidy(()=>{var m,f;let i=J.image.resizeBilinear(e,[((m=i0==null?void 0:i0.inputs[0].shape)==null?void 0:m[2])||0,((f=i0==null?void 0:i0.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=i0==null?void 0:i0.execute(s)),x3=v(),J.dispose(s),A){B0.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)&&B0.keypoints.push({score:Math.round(100*u)/100,part:u5[d],positionRaw:[m/i0.inputs[0].shape[2],f/i0.inputs[0].shape[1]],position:[Math.round(e.shape[2]*m/i0.inputs[0].shape[2]),Math.round(e.shape[1]*f/i0.inputs[0].shape[1])]})}y.forEach(d=>J.dispose(d))}B0.score=B0.keypoints.reduce((i,y)=>y.score>i?y.score:i,0);let a=B0.keypoints.map(i=>i.position[0]),l=B0.keypoints.map(i=>i.position[1]);B0.box=[Math.min(...a),Math.min(...l),Math.max(...a)-Math.min(...a),Math.max(...l)-Math.min(...l)];let c=B0.keypoints.map(i=>i.positionRaw[0]),x=B0.keypoints.map(i=>i.positionRaw[1]);B0.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(h5)){let d=[];for(let m=0;mg.part===y[m]),u=B0.keypoints.find(g=>g.part===y[m+1]);f&&u&&f.score>(t.body.minConfidence||0)&&u.score>(t.body.minConfidence||0)&&d.push([f.position,u.position])}B0.annotations[i]=d}r([B0])}))}var l0=V(G());var De=V(G());var O=V(G());var Me=V(G());var p2=e=>[Math.abs(e.endPoint[0]-e.startPoint[0]),Math.abs(e.endPoint[1]-e.startPoint[1])],lt=e=>[e.startPoint[0]+(e.endPoint[0]-e.startPoint[0])/2,e.startPoint[1]+(e.endPoint[1]-e.startPoint[1])/2,1],ct=(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],dt=(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],u3=(e,t,n)=>{let o=[e.startPoint[0]*t[0],e.startPoint[1]*t[1]],r=[e.endPoint[0]*t[0],e.endPoint[1]*t[1]],s=e.landmarks.map(A=>[(A[0]+n[0])*t[0],(A[1]+n[1])*t[1]]);return{startPoint:o,endPoint:r,landmarks:s,confidence:e.confidence}},T5=(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=Me.image.cropAndResize(t,[s],[0],n),a=Me.div(A,C.tf255);return Me.dispose(A),a},xt=(e,t)=>{let n=lt(e),o=p2(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,size:o}},yt=e=>{let t=lt(e),n=p2(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,size:[Math.round(n[0]),Math.round(n[1])]}},h3=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}},v5=[[1,0,0],[0,1,0],[0,0,1]],aA=e=>e-2*Math.PI*Math.floor((e+Math.PI)/(2*Math.PI)),iA=(e,t)=>aA(Math.PI/2-Math.atan2(-(t[1]-e[1]),t[0]-e[0]));var m3=(e,t)=>[[1,0,e],[0,1,t],[0,0,1]],r2=(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=m3(t[0],t[1]),A=p3(s,r),a=m3(-t[0],-t[1]);return p3(A,a)},cA=e=>{let t=[[e[0][0],e[1][0]],[e[0][1],e[1][1]]],n=[e[0][2],e[1][2]],o=[-r2(t[0],n),-r2(t[1],n)];return[t[0].concat(o[0]),t[1].concat(o[1]),[0,0,1]]},dA=(e,t)=>[r2(e,t[0]),r2(e,t[1])];function g3(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?b3(n,[0,0]):v5,c=a?A.map(d=>[...dA(d,l),d[2]]):A,x=a?cA(o):v5,i=lt(t),y=[r2(i,x[0]),r2(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 v3(e,t,n,o){let r=t.landmarks.length>=r5.count?r5.symmetryLine:_e.symmetryLine,s=0,A=v5,a;if(e&&R.kernels.includes("rotatewithoffset"))if(s=iA(t.landmarks[r[0]],t.landmarks[r[1]]),s&&s!==0&&Math.abs(s)>.2){let c=lt(t),x=[c[0]/n.shape[2],c[1]/n.shape[1]],i=Me.image.rotateWithOffset(n,s,0,[x[0],x[1]]);A=b3(-s,c),a=T5(t,i,[o,o]),Me.dispose(i)}else a=T5(t,n,[o,o]);else a=T5(t,n,[o,o]);return[s,A,a]}var xA=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]},R3=(e,t)=>{let n=xA(e),o=p2(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,xe,ft=null,Ce=0,u2=null,P3=()=>Ce;async function k3(e){var t;return R.initial&&(xe=null),xe?e.debug&&h("cached model:",xe.modelUrl):xe=await L((t=e.face.detector)==null?void 0:t.modelPath),Ce=xe.executor&&xe.inputs[0].shape?xe.inputs[0].shape[2]:256,u2=O.scalar(Ce,"int32"),ft=O.tensor2d(g3(Ce)),xe}function yA(e){if(!ft||!u2)return O.zeros([0,0]);let t={};t.boxStarts=O.slice(e,[0,1],[-1,2]),t.centers=O.add(t.boxStarts,ft),t.boxSizes=O.slice(e,[0,3],[-1,2]),t.boxSizesNormalized=O.div(t.boxSizes,u2),t.centersNormalized=O.div(t.centers,u2),t.halfBoxSize=O.div(t.boxSizesNormalized,C.tf2),t.starts=O.sub(t.centersNormalized,t.halfBoxSize),t.ends=O.add(t.centersNormalized,t.halfBoxSize),t.startNormalized=O.mul(t.starts,u2),t.endNormalized=O.mul(t.ends,u2);let n=O.concat2d([t.startNormalized,t.endNormalized],1);return Object.keys(t).forEach(o=>O.dispose(t[o])),n}async function w3(e,t){var a,l,c,x,i,y,d;if(!e||e.isDisposedInternal||e.shape.length!==4||e.shape[1]<1||e.shape[2]<1)return[];let n={};n.resized=O.image.resizeBilinear(e,[Ce,Ce]),n.div=O.div(n.resized,C.tf127),n.normalized=O.sub(n.div,C.tf1);let o=xe==null?void 0:xe.execute(n.normalized);if(Array.isArray(o)&&o.length>2){let m=o.sort((f,u)=>f.size-u.size);n.concat384=O.concat([m[0],m[2]],2),n.concat512=O.concat([m[1],m[3]],2),n.concat=O.concat([n.concat512,n.concat384],1),n.batch=O.squeeze(n.concat,[0])}else Array.isArray(o)?n.batch=O.squeeze(o[0]):n.batch=O.squeeze(o);O.dispose(o),n.boxes=yA(n.batch),n.logits=O.slice(n.batch,[0,0],[-1,1]),n.sigmoid=O.sigmoid(n.logits),n.scores=O.squeeze(n.sigmoid),n.nms=await O.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 m=0;m(((x=t.face.detector)==null?void 0:x.minConfidence)||0)){let u={};u.bbox=O.slice(n.boxes,[r[m],0],[1,-1]),u.slice=O.slice(n.batch,[r[m],M3-1],[1,-1]),u.squeeze=O.squeeze(u.slice),u.landmarks=O.reshape(u.squeeze,[M3,-1]);let g=await u.bbox.data(),T={startPoint:[g[0],g[1]],endPoint:[g[2],g[3]],landmarks:await u.landmarks.array(),confidence:f};u.anchor=O.slice(ft,[r[m],0],[1,2]);let p=await u.anchor.data(),b=u3(T,[(e.shape[2]||0)/Ce,(e.shape[1]||0)/Ce],p),k=xt(b,((i=t.face.detector)==null?void 0:i.scale)||1.4),P=yt(k);P.size[0]>(((y=t.face.detector)==null?void 0:y.minSize)||0)&&P.size[1]>(((d=t.face.detector)==null?void 0:d.minSize)||0)&&s.push(P),Object.keys(u).forEach(I=>O.dispose(u[I]))}}return Object.keys(n).forEach(m=>O.dispose(n[m])),s}var ye=V(G());var K0,We=0,M5=ae.leftEyeLower0,P5=ae.rightEyeLower0,h2={leftBounds:[M5[0],M5[M5.length-1]],rightBounds:[P5[0],P5[P5.length-1]]},b2={upperCenter:3,lowerCenter:4,index:71,numCoordinates:76};async function I3(e){var t,n;return R.initial&&(K0=null),K0?e.debug&&h("cached model:",K0.modelUrl):K0=await L((t=e.face.iris)==null?void 0:t.modelPath),We=K0!=null&&K0.executor&&((n=K0.inputs)!=null&&n[0].shape)?K0.inputs[0].shape[2]:0,We===-1&&(We=64),K0}function mt(e,t,n,o){for(let r=0;r{let t=e[h2.leftBounds[0]][2],n=e[h2.rightBounds[0]][2];return t-n},z3=(e,t,n,o,r,s=!1,A=2.3)=>{let a=yt(xt(h3([e[n],e[o]]),A)),l=p2(a),c=ye.image.cropAndResize(t,[[a.startPoint[1]/r,a.startPoint[0]/r,a.endPoint[1]/r,a.endPoint[0]/r]],[0],[We,We]);if(s&&R.kernels.includes("flipleftright")){let x=ye.image.flipLeftRight(c);ye.dispose(c),c=x}return{box:a,boxSize:l,crop:c}},S3=(e,t,n,o=!1)=>{let r=[];for(let s=0;s{let o=e[ae[`${n}EyeUpper0`][b2.upperCenter]][2],r=e[ae[`${n}EyeLower0`][b2.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 N3(e,t,n,o){var I,B;if(!(K0!=null&&K0.executor))return e;let{box:r,boxSize:s,crop:A}=z3(e,t,h2.leftBounds[0],h2.leftBounds[1],n,!0,((I=o.face.iris)==null?void 0:I.scale)||2.3),{box:a,boxSize:l,crop:c}=z3(e,t,h2.rightBounds[0],h2.rightBounds[1],n,!0,((B=o.face.iris)==null?void 0:B.scale)||2.3),x=ye.concat([A,c]);ye.dispose(A),ye.dispose(c);let i=K0.execute(x);ye.dispose(x);let y=await i.data();ye.dispose(i);let d=y.slice(0,b2.numCoordinates*3),{rawCoords:m,iris:f}=S3(d,r,s,!0),u=y.slice(b2.numCoordinates*3),{rawCoords:g,iris:T}=S3(u,a,l,!1),p=fA(e);Math.abs(p)<30?(mt(e,m,"left",null),mt(e,g,"right",null)):p<1?mt(e,m,"left",["EyeUpper0","EyeLower0"]):mt(e,g,"right",["EyeUpper0","EyeLower0"]);let b=j3(e,f,"left"),k=j3(e,T,"right");return e.concat(b).concat(k)}async function O3(e,t){var s,A,a,l,c,x,i,y,d,m;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((m=(d=t.filter(f=>f.size===142))==null?void 0:d[1])==null?void 0:m.data())};for(let f of Object.values(n))if(!f)return e;let o=e2.reduce((f,u)=>f+=e[u][2],0)/e2.length;for(let f=0;ff+=e[u][2],0)/t2.length;for(let f=0;fv()-ge.timestamp,o=ge.skipped<(((c=t.face.detector)==null?void 0:c.skipFrames)||0);!t.skipAllowed||!n||!o||ge.boxes.length===0?(ge.boxes=await w3(e,t),ge.timestamp=v(),ge.skipped=0):ge.skipped++;let r=[],s=[],A=0,a=O2;for(let T=0;T[I[0]/(e.shape[2]||0),I[1]/(e.shape[1]||0),(I[2]||0)/a]);for(let I of Object.keys(_e))P.annotations[I]=[P.mesh[_e[I]]]}else if(!r0)t.debug&&h("face mesh detection requested, but model is not loaded");else{if((d=t.face.attention)!=null&&d.enabled&&!R.kernels.includes("atan2"))return t.face.attention.enabled=!1,De.dispose(P.tensor),r;let I=r0.execute(P.tensor),_=await I.find(Z=>Z.shape[Z.shape.length-1]===1).data();if(P.faceScore=Math.round(100*_[0])/100,P.faceScore<(((m=t.face.detector)==null?void 0:m.minConfidence)||1)){if(p.confidence=P.faceScore,t.face.mesh.keepInvalid){P.box=ct(p,e),P.boxRaw=dt(p,e),P.size=p.size,P.score=P.boxScore,P.mesh=p.landmarks,P.meshRaw=P.mesh.map(Z=>[Z[0]/(e.shape[2]||1),Z[1]/(e.shape[1]||1),(Z[2]||0)/a]);for(let Z of Object.keys(_e))P.annotations[Z]=[P.mesh[_e[Z]]]}}else{let Z=I.find(n0=>n0.shape[n0.shape.length-1]===1404),$=De.reshape(Z,[-1,3]),A0=await $.array();De.dispose($),(f=t.face.attention)!=null&&f.enabled?A0=await O3(A0,I):(u=t.face.iris)!=null&&u.enabled&&(A0=await N3(A0,P.tensor,O2,t)),P.mesh=T3(A0,p,b,k,O2),P.meshRaw=P.mesh.map(n0=>[n0[0]/(e.shape[2]||0),n0[1]/(e.shape[1]||0),(n0[2]||0)/a]);for(let n0 of Object.keys(ae))P.annotations[n0]=ae[n0].map(j0=>P.mesh[j0]);P.score=P.faceScore;let t0={...R3(P.mesh,p),confidence:p.confidence,landmarks:p.landmarks,size:p.size};P.box=ct(t0,e),P.boxRaw=dt(t0,e),P.size=t0.size,s.push(t0)}De.dispose(I)}P.score>(((g=t.face.detector)==null?void 0:g.minConfidence)||1)?r.push(P):De.dispose(P.tensor)}return ge.boxes=s,r}async function W3(e){var t,n,o,r,s,A;return R.initial&&(r0=null),(t=e.face.attention)!=null&&t.enabled&&(r0!=null&&r0.signature)&&Object.keys(((n=r0==null?void 0:r0.signature)==null?void 0:n.outputs)||{}).length<6&&(r0=null),r0?e.debug&&h("cached model:",r0.modelUrl):(o=e.face.attention)!=null&&o.enabled?r0=await L(e.face.attention.modelPath):r0=await L((r=e.face.mesh)==null?void 0:r.modelPath),O2=r0.executor&&((s=r0==null?void 0:r0.inputs)!=null&&s[0].shape)?(A=r0==null?void 0:r0.inputs)==null?void 0:A[0].shape[2]:256,r0}var D3=$e,F3=N2;var J0=V(G());var E5=[],P0,pt=[],B3=0,H3=0,w5=Number.MAX_SAFE_INTEGER,z5=!1;async function G3(e){var t,n,o;return R.initial&&(P0=null),P0?e.debug&&h("cached model:",P0.modelUrl):(P0=await L((t=e.face.emotion)==null?void 0:t.modelPath),z5=((o=(n=P0==null?void 0:P0.inputs)==null?void 0:n[0].shape)==null?void 0:o[3])===3,z5?E5=["angry","disgust","fear","happy","neutral","sad","surprise"]:E5=["angry","disgust","fear","happy","sad","surprise","neutral"]),P0}async function S5(e,t,n,o){var A,a;if(!P0)return[];let r=w5<(((A=t.face.emotion)==null?void 0:A.skipFrames)||0),s=(((a=t.face.emotion)==null?void 0:a.skipTime)||0)>v()-H3;return t.skipAllowed&&s&&r&&B3===o&&pt[n]&&pt[n].length>0?(w5++,pt[n]):(w5=0,new Promise(async l=>{var x,i,y;let c=[];if((x=t.face.emotion)!=null&&x.enabled){let d={},m=P0!=null&&P0.inputs[0].shape?P0.inputs[0].shape[2]:0;if(((i=t.face.emotion)==null?void 0:i.crop)>0){let u=(y=t.face.emotion)==null?void 0:y.crop,g=[[u,u,1-u,1-u]];d.resize=J0.image.cropAndResize(e,g,[0],[m,m])}else d.resize=J0.image.resizeBilinear(e,[m,m],!1);z5?(d.mul=J0.mul(d.resize,255),d.normalize=J0.sub(d.mul,[103.939,116.779,123.68]),d.emotion=P0==null?void 0:P0.execute(d.normalize)):(d.channels=J0.mul(d.resize,C.rgb),d.grayscale=J0.sum(d.channels,3,!0),d.grayscaleSub=J0.sub(d.grayscale,C.tf05),d.grayscaleMul=J0.mul(d.grayscaleSub,C.tf2),d.emotion=P0==null?void 0:P0.execute(d.grayscaleMul)),H3=v();let f=await d.emotion.data();for(let u=0;u(t.face.emotion.minConfidence||0)&&c.push({score:Math.min(.99,Math.trunc(100*f[u])/100),emotion:E5[u]});c.sort((u,g)=>g.score-u.score),Object.keys(d).forEach(u=>J0.dispose(d[u]))}pt[n]=c,B3=o,l(c)}))}var ie=V(G());var k0,Fe=[],Z3=0,X3=0,j5=Number.MAX_SAFE_INTEGER;async function q3(e){var t;return R.initial&&(k0=null),k0?e.debug&&h("cached model:",k0.modelUrl):k0=await L((t=e.face.description)==null?void 0:t.modelPath),k0}function pA(e,t){var s,A;let n=e.image||e.tensor||e;if(!(k0!=null&&k0.inputs[0].shape))return n;let o;if(((s=t.face.description)==null?void 0:s.crop)>0){let a=(A=t.face.description)==null?void 0:A.crop,l=[[a,a,1-a,1-a]];o=ie.image.cropAndResize(n,l,[0],[k0.inputs[0].shape[2],k0.inputs[0].shape[1]])}else o=ie.image.resizeBilinear(n,[k0.inputs[0].shape[2],k0.inputs[0].shape[1]],!1);let r=ie.mul(o,C.tf255);return ie.dispose(o),r}async function I5(e,t,n,o){var a,l,c,x;let r={age:0,gender:"unknown",genderScore:0,descriptor:[]};if(!(k0!=null&&k0.executor))return r;let s=j5<(((a=t.face.description)==null?void 0:a.skipFrames)||0),A=(((l=t.face.description)==null?void 0:l.skipTime)||0)>v()-Z3;return t.skipAllowed&&s&&A&&X3===o&&((c=Fe==null?void 0:Fe[n])==null?void 0:c.age)>0&&((x=Fe==null?void 0:Fe[n])==null?void 0:x.genderScore)>0?(j5++,Fe[n]):(j5=0,new Promise(async i=>{var y;if((y=t.face.description)!=null&&y.enabled){let d=pA(e,t),m=k0==null?void 0:k0.execute(d);Z3=v(),ie.dispose(d);let u=await m.find(B=>B.shape[1]===1).data(),g=Math.trunc(200*Math.abs(u[0]-.5))/100;g>(t.face.description.minConfidence||0)&&(r.gender=u[0]<=.5?"female":"male",r.genderScore=Math.min(.99,g));let T=ie.argMax(m.find(B=>B.shape[1]===100),1),p=(await T.data())[0];ie.dispose(T);let k=await m.find(B=>B.shape[1]===100).data();r.age=Math.round(k[p-1]>k[p+1]?10*p-100*k[p-1]:10*p+100*k[p+1])/10,(Number.isNaN(u[0])||Number.isNaN(k[0]))&&h("faceres error:",{model:k0,result:m});let P=m.find(B=>B.shape[1]===1024),I=P?await P.data():[];r.descriptor=Array.from(I),m.forEach(B=>ie.dispose(B))}Fe[n]=r,X3=o,i(r)}))}var g2=.1,N5=.5;function uA(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 Y3(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 ae.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]});g2&&g2>0&&(r=r.map(A=>({x:A.x>.5?A.x+g2:A.x-g2,y:A.y>.5?A.y+g2:A.y-g2})));for(let A=0;Av()-J3,s=L5<(((a=t.face.antispoof)==null?void 0:a.skipFrames)||0);return t.skipAllowed&&r&&s&&K3===o&&ut[n]?(L5++,ut[n]):(L5=0,new Promise(async l=>{let c=ht.image.resizeBilinear(e,[w0!=null&&w0.inputs[0].shape?w0.inputs[0].shape[2]:0,w0!=null&&w0.inputs[0].shape?w0.inputs[0].shape[1]:0],!1),x=w0==null?void 0:w0.execute(c),i=(await x.data())[0];ut[n]=Math.round(100*i)/100,K3=o,J3=v(),ht.dispose([c,x]),l(ut[n])}))}var gt=V(G());var E0,bt=[],C5=Number.MAX_SAFE_INTEGER,$3=0,en=0;async function tn(e){var t;return R.initial&&(E0=null),E0?e.debug&&h("cached model:",E0.modelUrl):E0=await L((t=e.face.liveness)==null?void 0:t.modelPath),E0}async function W5(e,t,n,o){var A,a;if(!(E0!=null&&E0.executor))return 0;let r=(((A=t.face.liveness)==null?void 0:A.skipTime)||0)>v()-en,s=C5<(((a=t.face.liveness)==null?void 0:a.skipFrames)||0);return t.skipAllowed&&r&&s&&$3===o&&bt[n]?(C5++,bt[n]):(C5=0,new Promise(async l=>{let c=gt.image.resizeBilinear(e,[E0!=null&&E0.inputs[0].shape?E0.inputs[0].shape[2]:0,E0!=null&&E0.inputs[0].shape?E0.inputs[0].shape[1]:0],!1),x=E0==null?void 0:E0.execute(c),i=(await x.data())[0];bt[n]=Math.round(100*i)/100,$3=o,en=v(),gt.dispose([c,x]),l(bt[n])}))}var Tt=V(G());var le,D5=[],bA=["white","black","asian","indian","other"],gA=[15,23,28,35.5,45.5,55.5,65],on=0,rn=0,F5=Number.MAX_SAFE_INTEGER;async function sn(e){var t;return R.initial&&(le=null),le?e.debug&&h("cached model:",le.modelUrl):le=await L((t=e.face.gear)==null?void 0:t.modelPath),le}async function B5(e,t,n,o){var A,a;if(!le)return{age:0,gender:"unknown",genderScore:0,race:[]};let r=F5<(((A=t.face.gear)==null?void 0:A.skipFrames)||0),s=(((a=t.face.gear)==null?void 0:a.skipTime)||0)>v()-rn;return t.skipAllowed&&s&&r&&on===o&&D5[n]?(F5++,D5[n]):(F5=0,new Promise(async l=>{var g,T,p,b;if(!(le!=null&&le.inputs[0].shape))return;let c={},x=[[0,.1,.9,.9]];if(((g=t.face.gear)==null?void 0:g.crop)>0){let k=(T=t.face.gear)==null?void 0:T.crop;x=[[k,k,1-k,1-k]]}c.resize=Tt.image.cropAndResize(e,x,[0],[le.inputs[0].shape[2],le.inputs[0].shape[1]]);let i={age:0,gender:"unknown",genderScore:0,race:[]};(p=t.face.gear)!=null&&p.enabled&&([c.age,c.gender,c.race]=le.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 k=0;k(((b=t.face.gear)==null?void 0:b.minConfidence)||.2)&&i.race.push({score:Math.round(100*d[k])/100,race:bA[k]});i.race.sort((k,P)=>P.score-k.score);let f=Array.from(await c.age.data()).map((k,P)=>[gA[P],k]).sort((k,P)=>P[1]-k[1]),u=f[0][0];for(let k=1;kTt.dispose(c[k])),D5[n]=i,on=o,rn=v(),l(i)}))}var s2=V(G());var H0,vt=[],an=0,ln=0,H5=Number.MAX_SAFE_INTEGER;async function cn(e){return R.initial&&(H0=null),H0?e.debug&&h("cached model:",H0.modelUrl):H0=await L(e.face.ssrnet.modelPathAge),H0}async function G5(e,t,n,o){var A,a,l,c;if(!H0)return{age:0};let r=H5<(((A=t.face.ssrnet)==null?void 0:A.skipFrames)||0),s=(((a=t.face.ssrnet)==null?void 0:a.skipTime)||0)>v()-ln;return t.skipAllowed&&r&&s&&an===o&&((l=vt[n])!=null&&l.age)&&((c=vt[n])==null?void 0:c.age)>0?(H5++,vt[n]):(H5=0,new Promise(async x=>{var d,m,f;if(!(H0!=null&&H0.inputs)||!H0.inputs[0]||!H0.inputs[0].shape)return;let i={};if(((d=t.face.ssrnet)==null?void 0:d.crop)>0){let u=(m=t.face.ssrnet)==null?void 0:m.crop,g=[[u,u,1-u,1-u]];i.resize=s2.image.cropAndResize(e,g,[0],[H0.inputs[0].shape[2],H0.inputs[0].shape[1]])}else i.resize=s2.image.resizeBilinear(e,[H0.inputs[0].shape[2],H0.inputs[0].shape[1]],!1);i.enhance=s2.mul(i.resize,C.tf255);let y={age:0};if((f=t.face.ssrnet)!=null&&f.enabled&&(i.age=H0.execute(i.enhance)),i.age){let u=await i.age.data();y.age=Math.trunc(10*u[0])/10}Object.keys(i).forEach(u=>s2.dispose(i[u])),vt[n]=y,an=o,ln=v(),x(y)}))}var v0=V(G());var N0,Rt=[],xn=0,yn=0,V5=Number.MAX_SAFE_INTEGER,Z5=[.2989,.587,.114];async function fn(e){var t;return R.initial&&(N0=null),N0?e.debug&&h("cached model:",N0.modelUrl):N0=await L((t=e.face.ssrnet)==null?void 0:t.modelPathGender),N0}async function X5(e,t,n,o){var A,a,l,c;if(!N0)return{gender:"unknown",genderScore:0};let r=V5<(((A=t.face.ssrnet)==null?void 0:A.skipFrames)||0),s=(((a=t.face.ssrnet)==null?void 0:a.skipTime)||0)>v()-yn;return t.skipAllowed&&r&&s&&xn===o&&((l=Rt[n])!=null&&l.gender)&&((c=Rt[n])==null?void 0:c.genderScore)>0?(V5++,Rt[n]):(V5=0,new Promise(async x=>{var m,f,u;if(!(N0!=null&&N0.inputs[0].shape))return;let i={};if(((m=t.face.ssrnet)==null?void 0:m.crop)>0){let g=(f=t.face.ssrnet)==null?void 0:f.crop,T=[[g,g,1-g,1-g]];i.resize=v0.image.cropAndResize(e,T,[0],[N0.inputs[0].shape[2],N0.inputs[0].shape[1]])}else i.resize=v0.image.resizeBilinear(e,[N0.inputs[0].shape[2],N0.inputs[0].shape[1]],!1);i.enhance=v0.tidy(()=>{var T,p;let g;if(((p=(T=N0==null?void 0:N0.inputs)==null?void 0:T[0].shape)==null?void 0:p[3])===1){let[b,k,P]=v0.split(i.resize,3,3),I=v0.mul(b,Z5[0]),B=v0.mul(k,Z5[1]),_=v0.mul(P,Z5[2]),Z=v0.addN([I,B,_]);g=v0.mul(v0.sub(Z,C.tf05),2)}else g=v0.mul(v0.sub(i.resize,C.tf05),2);return g});let y={gender:"unknown",genderScore:0};(u=t.face.ssrnet)!=null&&u.enabled&&(i.gender=N0.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(g=>v0.dispose(i[g])),Rt[n]=y,xn=o,yn=v(),x(y)}))}var Mt=V(G());var Q0,q5=[],pn=0,un=0,hn=Number.MAX_SAFE_INTEGER;async function bn(e){var t;return R.initial&&(Q0=null),Q0?e.debug&&h("cached model:",Q0.modelUrl):Q0=await L((t=e.face.mobilefacenet)==null?void 0:t.modelPath),Q0}async function U5(e,t,n,o){var A,a;if(!(Q0!=null&&Q0.executor))return[];let r=hn<(((A=t.face.mobilefacenet)==null?void 0:A.skipFrames)||0),s=(((a=t.face.mobilefacenet)==null?void 0:a.skipTime)||0)>v()-un;return t.skipAllowed&&s&&r&&pn===o&&q5[n]?(hn++,q5[n]):new Promise(async l=>{var x;let c=[];if((x=t.face.mobilefacenet)!=null&&x.enabled&&(Q0!=null&&Q0.inputs[0].shape)){let i={};i.crop=Mt.image.resizeBilinear(e,[Q0.inputs[0].shape[2],Q0.inputs[0].shape[1]],!1),i.data=Q0.execute(i.crop);let y=await i.data.data();c=Array.from(y),Object.keys(i).forEach(d=>Mt.dispose(i[d]))}q5[n]=c,pn=o,un=v(),l(c)})}var Pt=V(G());var _0,Y5=[],Tn=0,vn=0,Rn=Number.MAX_SAFE_INTEGER;async function Mn(e){return R.initial&&(_0=null),_0?e.debug&&h("cached model:",_0.modelUrl):_0=await L(e.face.insightface.modelPath),_0}async function K5(e,t,n,o){var A,a;if(!(_0!=null&&_0.executor))return[];let r=Rn<(((A=t.face.insightface)==null?void 0:A.skipFrames)||0),s=(((a=t.face.insightface)==null?void 0:a.skipTime)||0)>v()-vn;return t.skipAllowed&&s&&r&&Tn===o&&Y5[n]?(Rn++,Y5[n]):new Promise(async l=>{var x;let c=[];if((x=t.face.insightface)!=null&&x.enabled&&(_0!=null&&_0.inputs[0].shape)){let i={};i.crop=Pt.image.resizeBilinear(e,[_0.inputs[0].shape[2],_0.inputs[0].shape[1]],!1),i.data=_0.execute(i.crop);let y=await i.data.data();c=Array.from(y),Object.keys(i).forEach(d=>Pt.dispose(i[d]))}Y5[n]=c,Tn=o,vn=v(),l(c)})}var TA=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}},kn=(e,t)=>{let n=f=>{let u=Math.sqrt(f[0]*f[0]+f[1]*f[1]+f[2]*f[2]);return f[0]/=u,f[1]/=u,f[2]/=u,f},o=(f,u)=>{let g=f[0]-u[0],T=f[1]-u[1],p=f[2]-u[2];return[g,T,p]},r=(f,u)=>{let g=f[1]*u[2]-f[2]*u[1],T=f[2]*u[0]-f[0]*u[2],p=f[0]*u[1]-f[1]*u[0];return[g,T,p]},s=f=>{let[u,g,T,p,b,k,P,I,B]=f,_,Z,$;return p<1?p>-1?($=Math.asin(p),Z=Math.atan2(-P,u),_=Math.atan2(-k,b)):($=-Math.PI/2,Z=-Math.atan2(I,B),_=0):($=Math.PI/2,Z=Math.atan2(I,B),_=0),Number.isNaN(_)&&(_=0),Number.isNaN(Z)&&(Z=0),Number.isNaN($)&&($=0),{pitch:2*-_,yaw:2*-Z,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),m=A.length===478?TA(e):{bearing:0,strength:0};return{angle:d,matrix:y,gaze:m}};function wn(e,t){let n=e==null?void 0:e.annotations;if(!(n!=null&&n.leftEyeIris)||!(n!=null&&n.rightEyeIris))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 J5=async(e,t)=>{var m,f,u,g,T,p,b,k,P,I,B,_,Z,$,A0,t0,n0,j0,M,T0,C0,x0,K;let n=v(),o,r,s,A,a,l,c,x,i,y=[];e.state="run:face";let d=await C3(t,e.config);if(e.performance.face=R.perfadd?(e.performance.face||0)+Math.trunc(v()-n):Math.trunc(v()-n),!t.shape||t.shape.length!==4)return[];if(!d)return[];for(let E=0;E200?kn(d[E],[t.shape[2],t.shape[1]]):null;e.analyze("Start Emotion:"),e.config.async?A=(f=e.config.face.emotion)!=null&&f.enabled?S5(d[E].tensor||l0.tensor([]),e.config,E,d.length):[]:(e.state="run:emotion",n=v(),A=(u=e.config.face.emotion)!=null&&u.enabled?await S5(d[E].tensor||l0.tensor([]),e.config,E,d.length):[],e.performance.emotion=R.perfadd?(e.performance.emotion||0)+Math.trunc(v()-n):Math.trunc(v()-n)),e.analyze("End Emotion:"),e.analyze("Start AntiSpoof:"),e.config.async?c=(g=e.config.face.antispoof)!=null&&g.enabled?O5(d[E].tensor||l0.tensor([]),e.config,E,d.length):0:(e.state="run:antispoof",n=v(),c=(T=e.config.face.antispoof)!=null&&T.enabled?await O5(d[E].tensor||l0.tensor([]),e.config,E,d.length):0,e.performance.antispoof=R.perfadd?(e.performance.antispoof||0)+Math.trunc(v()-n):Math.trunc(v()-n)),e.analyze("End AntiSpoof:"),e.analyze("Start Liveness:"),e.config.async?x=(p=e.config.face.liveness)!=null&&p.enabled?W5(d[E].tensor||l0.tensor([]),e.config,E,d.length):0:(e.state="run:liveness",n=v(),x=(b=e.config.face.liveness)!=null&&b.enabled?await W5(d[E].tensor||l0.tensor([]),e.config,E,d.length):0,e.performance.liveness=R.perfadd?(e.performance.antispoof||0)+Math.trunc(v()-n):Math.trunc(v()-n)),e.analyze("End Liveness:"),e.analyze("Start GEAR:"),e.config.async?r=(k=e.config.face.gear)!=null&&k.enabled?B5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null:(e.state="run:gear",n=v(),r=(P=e.config.face.gear)!=null&&P.enabled?await B5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null,e.performance.gear=Math.trunc(v()-n)),e.analyze("End GEAR:"),e.analyze("Start SSRNet:"),e.config.async?(o=(I=e.config.face.ssrnet)!=null&&I.enabled?G5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null,s=(B=e.config.face.ssrnet)!=null&&B.enabled?X5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null):(e.state="run:ssrnet",n=v(),o=(_=e.config.face.ssrnet)!=null&&_.enabled?await G5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null,s=(Z=e.config.face.ssrnet)!=null&&Z.enabled?await X5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null,e.performance.ssrnet=Math.trunc(v()-n)),e.analyze("End SSRNet:"),e.analyze("Start MobileFaceNet:"),e.config.async?a=($=e.config.face.mobilefacenet)!=null&&$.enabled?U5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null:(e.state="run:mobilefacenet",n=v(),a=(A0=e.config.face.mobilefacenet)!=null&&A0.enabled?await U5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null,e.performance.mobilefacenet=Math.trunc(v()-n)),e.analyze("End MobileFaceNet:"),e.analyze("Start InsightFace:"),e.config.async?l=(t0=e.config.face.insightface)!=null&&t0.enabled?K5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null:(e.state="run:mobilefacenet",n=v(),l=(n0=e.config.face.insightface)!=null&&n0.enabled?await K5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null,e.performance.mobilefacenet=Math.trunc(v()-n)),e.analyze("End InsightFace:"),e.analyze("Start Description:"),e.config.async?i=I5(d[E].tensor||l0.tensor([]),e.config,E,d.length):(e.state="run:description",n=v(),i=await I5(d[E].tensor||l0.tensor([]),e.config,E,d.length),e.performance.description=R.perfadd?(e.performance.description||0)+Math.trunc(v()-n):Math.trunc(v()-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:"),(j0=e.config.face.ssrnet)!=null&&j0.enabled&&o&&s&&(i={...i,age:o.age,gender:s.gender,genderScore:s.genderScore}),(M=e.config.face.gear)!=null&&M.enabled&&r&&(i={...i,age:r.age,gender:r.gender,genderScore:r.genderScore,race:r.race}),(T0=e.config.face.mobilefacenet)!=null&&T0.enabled&&a&&(i.descriptor=a),(C0=e.config.face.insightface)!=null&&C0.enabled&&l&&(i.descriptor=l);let X=(x0=e.config.face.iris)!=null&&x0.enabled?wn(d[E],t.shape[2]):0,U0=(K=e.config.face.detector)!=null&&K.return?l0.squeeze(d[E].tensor):null;l0.dispose(d[E].tensor),d[E].tensor&&delete d[E].tensor;let y0={...d[E],id:E};i.age&&(y0.age=i.age),i.gender&&(y0.gender=i.gender),i.genderScore&&(y0.genderScore=i.genderScore),i.descriptor&&(y0.embedding=i.descriptor),i.race&&(y0.race=i.race),A&&(y0.emotion=A),c&&(y0.real=c),x&&(y0.live=x),X>0&&(y0.distance=X),H&&(y0.rotation=H),U0&&(y0.tensor=U0),y.push(y0),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 G0={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=>G0.nameMapping[e],getPoints:e=>G0.pointsMapping[e]},He={none:0,half:1,full:2,nameMapping:{0:"none",1:"half",2:"full"},getName:e=>He.nameMapping[e]},c0={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=>c0.nameMapping[e]},Be=class{constructor(t){w(this,"name");w(this,"curls");w(this,"directions");w(this,"weights");w(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:fe,index:Pe,middle:ke,ring:A2,pinky:a2}=G0,{none:me,half:RA,full:pe}=He,{verticalUp:T2,verticalDown:Ki,horizontalLeft:Q5,horizontalRight:MA,diagonalUpRight:PA,diagonalUpLeft:v2,diagonalDownRight:Ji,diagonalDownLeft:Qi}=c0,Ge=new Be("thumbs up");Ge.curl(fe,me,1);Ge.direction(fe,T2,1);Ge.direction(fe,v2,.25);Ge.direction(fe,PA,.25);for(let e of[G0.index,G0.middle,G0.ring,G0.pinky])Ge.curl(e,pe,1),Ge.direction(e,Q5,1),Ge.direction(e,MA,1);var h0=new Be("victory");h0.curl(fe,RA,.5);h0.curl(fe,me,.5);h0.direction(fe,T2,1);h0.direction(fe,v2,1);h0.curl(Pe,me,1);h0.direction(Pe,T2,.75);h0.direction(Pe,v2,1);h0.curl(ke,me,1);h0.direction(ke,T2,1);h0.direction(ke,v2,.75);h0.curl(A2,pe,1);h0.direction(A2,T2,.2);h0.direction(A2,v2,1);h0.direction(A2,Q5,.2);h0.curl(a2,pe,1);h0.direction(a2,T2,.2);h0.direction(a2,v2,1);h0.direction(a2,Q5,.2);h0.weight(Pe,2);h0.weight(ke,2);var Ve=new Be("point");Ve.curl(fe,pe,1);Ve.curl(Pe,me,.5);Ve.curl(ke,pe,.5);Ve.curl(A2,pe,.5);Ve.curl(a2,pe,.5);Ve.weight(Pe,2);Ve.weight(ke,2);var Ze=new Be("middle finger");Ze.curl(fe,me,1);Ze.curl(Pe,pe,.5);Ze.curl(ke,pe,.5);Ze.curl(A2,pe,.5);Ze.curl(a2,pe,.5);Ze.weight(Pe,2);Ze.weight(ke,2);var R2=new Be("open palm");R2.curl(fe,me,.75);R2.curl(Pe,me,.75);R2.curl(ke,me,.75);R2.curl(A2,me,.75);R2.curl(a2,me,.75);var En=[Ge,h0,Ve,Ze,R2];var kA=.7,i2={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 zn(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 jn(e,t){if(!e||!t)return[0,0];let n=zn(e[0],e[1],t[0],t[1]);if(e.length===2)return n;let o=zn(e[1],e[2],t[1],t[2]);return[n,o]}function Sn(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 wA(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),m=Math.sqrt(s*s+l*l+i*i),f=(m*m+y*y-d*d)/(2*m*y);f>1?f=1:f<-1&&(f=-1);let u=Math.acos(f);u=57.2958*u%180;let g;return u>i2.NO_CURL_START_LIMIT?g=He.none:u>i2.HALF_CURL_START_LIMIT?g=He.half:g=He.full,g}function In(e,t,n,o){let r;return o===Math.abs(e)?e>0?r=c0.horizontalLeft:r=c0.horizontalRight:o===Math.abs(t)?t>0?r=c0.horizontalLeft:r=c0.horizontalRight:n>0?r=c0.horizontalLeft:r=c0.horizontalRight,r}function Nn(e,t,n,o){let r;return o===Math.abs(e)?e<0?r=c0.verticalDown:r=c0.verticalUp:o===Math.abs(t)?t<0?r=c0.verticalDown:r=c0.verticalUp:n<0?r=c0.verticalDown:r=c0.verticalUp,r}function EA(e,t,n,o,r,s,A,a){let l,c=Nn(e,t,n,o),x=In(r,s,A,a);return c===c0.verticalUp?x===c0.horizontalLeft?l=c0.diagonalUpLeft:l=c0.diagonalUpRight:x===c0.horizontalLeft?l=c0.diagonalDownLeft:l=c0.diagonalDownRight,l}function zA(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,m=0,f=i/(x+1e-5);f>1.5?y+=i2.DISTANCE_VOTE_POWER:f>.66?d+=i2.DISTANCE_VOTE_POWER:m+=i2.DISTANCE_VOTE_POWER;let u=Math.sqrt(r*r+a*a),g=Math.sqrt(s*s+l*l),T=Math.sqrt(A*A+c*c),p=Math.max(u,g,T),b=e[0],k=e[1],P=n[0],I=n[1];p===u?(P=n[0],I=n[1]):p===T&&(b=t[0],k=t[1]);let Z=jn([b,k],[P,I]),$=Sn(Z,i2.TOTAL_ANGLE_VOTE_POWER);y+=$[0],d+=$[1],m+=$[2];for(let t0 of o){let n0=Sn(t0,i2.SINGLE_ANGLE_VOTE_POWER);y+=n0[0],d+=n0[1],m+=n0[2]}let A0;return y===Math.max(y,d,m)?A0=Nn(l,a,c,i):m===Math.max(d,m)?A0=In(s,r,A,x):A0=EA(l,a,c,i,s,r,A,x),A0}function Ln(e){let t=[],n=[],o=[],r=[];if(!e)return{curls:o,directions:r};for(let s of G0.all){let A=G0.getPoints(s),a=[],l=[];for(let c of A){let x=e[c[0]],i=e[c[1]],y=jn(x,i),d=y[0],m=y[1];a.push(d),l.push(m)}t.push(a),n.push(l)}for(let s of G0.all){let A=s===G0.thumb?1:0,a=G0.getPoints(s),l=e[a[A][0]],c=e[a[A+1][1]],x=e[a[3][1]],i=wA(l,c,x),y=zA(l,c,x,t[s].slice(A));o[s]=i,r[s]=y}return{curls:o,directions:r}}function kt(e){if(!e||e.length===0)return null;let t=Ln(e),n={};for(let o of G0.all)n[G0.getName(o)]={curl:He.getName(t.curls[o]),direction:c0.getName(t.directions[o])};return n}function On(e){let t=[];if(!e||e.length===0)return t;let n=Ln(e);for(let o of En){let r=o.matchAgainst(n.curls,n.directions);r>=kA&&t.push({name:o.name,confidence:r})}return t}var Cn=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},Dn=e=>{var n,o,r,s;if(!e)return[];let t=[];for(let A=0;A.06||u>.06)&&(d=!1),f>u?u>.04&&t.push({iris:A,gesture:"looking right"}):f>.04&&t.push({iris:A,gesture:"looking left"});let g=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||g<.01||T>.022||g>.022)&&(d=!1),(T<.01||g<.01)&&t.push({iris:A,gesture:"looking down"}),(T>.022||g>.022)&&t.push({iris:A,gesture:"looking up"}),d&&t.push({iris:A,gesture:"looking center"})}return t},Fn=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 Et(e,t=1.5){let n=C2(e),o=wt(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 zt(e){let t=C2(e),n=wt(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 jA(e){return e-2*Math.PI*Math.floor((e+Math.PI)/(2*Math.PI))}function Xn(e,t){let n=Math.PI/2-Math.atan2(-(t[1]-e[1]),t[0]-e[0]);return jA(n)}var Bn=(e,t)=>[[1,0,e],[0,1,t],[0,0,1]];function Xe(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(),m={startPoint:i,endPoint:y,palmLandmarks:d,confidence:r[l]},f=Zn(m,[(t.shape[2]||1)/this.inputSize,(t.shape[1]||0)/this.inputSize]);A.push(f),Object.keys(c).forEach(u=>W.dispose(c[u]))}return Object.keys(o).forEach(l=>W.dispose(o[l])),A}};var $0=V(G());var OA=5,Kn=1.65,Jn=[0,5,9,13,17,1,2],CA=0,WA=2,Qn=0,jt=class{constructor(t,n){w(this,"handDetector");w(this,"handPoseModel");w(this,"inputSize");w(this,"storedBoxes");w(this,"skipped");w(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=>e1([...s,1],n)),r=this.calculateLandmarksBoundingBox(o);return Et(zt(r),OA)}getBoxForHandLandmarks(t){let n=this.calculateLandmarksBoundingBox(t),o=Et(zt(n),Kn);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=$5(o,[0,0]),c=a.map(d=>[...e1(d,l),d[2]]),x=qn(r),i=[...C2(n),1],y=[Xe(i,x[0]),Xe(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)>v()-Qn,A=this.skipped<(n.hand.skipFrames||0);n.skipAllowed&&s&&A?this.skipped++:(r=await this.handDetector.predict(t,n),this.skipped=0),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 k=$0.reshape(p,[-1,3]),P=await k.array();$0.dispose(p),$0.dispose(k);let I=this.transformRawCoords(P,f,x,m),B=this.getBoxForHandLandmarks(I);this.storedBoxes[l]={...B,confidence:b};let _={landmarks:I,confidence:b,boxConfidence:c.confidence,fingerConfidence:b,box:{topLeft:B.startPoint,bottomRight:B.endPoint}};a.push(_)}else this.storedBoxes[l]=null;$0.dispose(p)}else{let x=Et(zt(c),Kn),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 _n={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]},l2,c2,t1;function FA(){let e=l2?new St(l2):void 0;e&&c2&&(t1=new jt(e,c2))}async function n1(e,t){t1||FA();let n=await t1.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=kt(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 $n(e){var t;return R.initial&&(l2=null),l2?e.debug&&h("cached model:",l2.modelUrl):l2=await L((t=e.hand.detector)==null?void 0:t.modelPath),l2}async function eo(e){var t;return R.initial&&(c2=null),c2?e.debug&&h("cached model:",c2.modelUrl):c2=await L((t=e.hand.skeleton)==null?void 0:t.modelPath),c2}var Q=V(G());var p0=[null,null],BA=["StatefulPartitionedCall/Postprocessor/Slice","StatefulPartitionedCall/Postprocessor/ExpandDims_1"],qe=[[0,0],[0,0]],HA=["hand","fist","pinch","point","face","tip","pinchtip"],no=4,oo=1.6,GA=512,VA=1.4,It=Number.MAX_SAFE_INTEGER,o1=0,we=[0,0],m0={boxes:[],hands:[]},ro={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 so(e){var t;if(R.initial&&(p0[0]=null),p0[0])e.debug&&h("cached model:",p0[0].modelUrl);else{J2(["tensorlistreserve","enter","tensorlistfromtensor","merge","loopcond","switch","exit","tensorliststack","nextiteration","tensorlistsetitem","tensorlistgetitem","reciprocal","shape","split","where"],e),p0[0]=await L((t=e.hand.detector)==null?void 0:t.modelPath);let n=p0[0].executor?Object.values(p0[0].modelSignature.inputs):void 0;qe[0][0]=Array.isArray(n)?parseInt(n[0].tensorShape.dim[1].size):0,qe[0][1]=Array.isArray(n)?parseInt(n[0].tensorShape.dim[2].size):0}return p0[0]}async function Ao(e){var t;if(R.initial&&(p0[1]=null),p0[1])e.debug&&h("cached model:",p0[1].modelUrl);else{p0[1]=await L((t=e.hand.skeleton)==null?void 0:t.modelPath);let n=p0[1].executor?Object.values(p0[1].modelSignature.inputs):void 0;qe[1][0]=Array.isArray(n)?parseInt(n[0].tensorShape.dim[1].size):0,qe[1][1]=Array.isArray(n)?parseInt(n[0].tensorShape.dim[2].size):0}return p0[1]}async function ZA(e,t){let n=[];if(!e||!p0[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,GA),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 p0[0].executeAsync(o.cast,BA),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[no]),a.splice(no,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),m=await d.data();Q.dispose(d);let f=[m[1],m[0],m[3]-m[1],m[2]-m[0]],u=st(f,VA),g=[Math.trunc(f[0]*we[0]),Math.trunc(f[1]*we[1]),Math.trunc(f[2]*we[0]),Math.trunc(f[3]*we[1])],T=x[y],p=HA[i[y]],b={id:l++,score:T,box:g,boxRaw:u,label:p};n.push(b)}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 r1(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&&p0[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],[qe[1][0],qe[1][1]],"bilinear"),r.div=Q.div(r.crop,C.tf255),[r.score,r.keypoints]=p0[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]/qe[1][1],i[1]/qe[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=>[we[0]*(i[0]+t.boxRaw[0]),we[1]*(i[1]+t.boxRaw[1]),i[2]||0]),o.landmarks=kt(o.keypoints);for(let i of Object.keys(ro))o.annotations[i]=ro[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 s1(e,t){var r,s;if(!((r=p0[0])!=null&&r.executor)||!((s=p0[1])!=null&&s.executor)||!p0[0].inputs[0].shape||!p0[1].inputs[0].shape)return[];we=[e.shape[2]||0,e.shape[1]||0],It++;let n=(t.hand.skipTime||0)>v()-o1,o=It<(t.hand.skipFrames||0);return t.skipAllowed&&n&&o?m0.hands:new Promise(async A=>{let a=3*(t.hand.skipTime||0)>v()-o1,l=It<3*(t.hand.skipFrames||0);t.skipAllowed&&m0.hands.length===t.hand.maxDetected?m0.hands=await Promise.all(m0.boxes.map(x=>r1(e,x,t))):t.skipAllowed&&a&&l&&m0.hands.length>0?m0.hands=await Promise.all(m0.boxes.map(x=>r1(e,x,t))):(m0.boxes=await ZA(e,t),o1=v(),m0.hands=await Promise.all(m0.boxes.map(x=>r1(e,x,t))),It=0);let c=[...m0.boxes];if(m0.boxes.length=0,t.cacheSensitivity>0)for(let x=0;x.05&&i.box[3]/(e.shape[1]||1)>.05&&m0.hands[x].fingerScore&&m0.hands[x].fingerScore>(t.hand.minConfidence||0)){let y=st(i.box,oo),d=st(i.boxRaw,oo);m0.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 W2={};ze(W2,{connected:()=>Lt,horizontal:()=>A1,kpt:()=>Nt,relative:()=>i1,vertical:()=>a1});var Nt=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],A1=[["leftEye","rightEye"],["leftEar","rightEar"],["leftShoulder","rightShoulder"],["leftElbow","rightElbow"],["leftWrist","rightWrist"],["leftHip","rightHip"],["leftKnee","rightKnee"],["leftAnkle","rightAnkle"]],a1=[["leftKnee","leftShoulder"],["rightKnee","rightShoulder"],["leftAnkle","leftKnee"],["rightAnkle","rightKnee"]],i1=[[["leftHip","rightHip"],["leftShoulder","rightShoulder"]],[["leftElbow","rightElbow"],["leftShoulder","rightShoulder"]]],Lt={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=Te(),l1=0;function io(e,t){var A,a,l,c,x,i,y,d,m,f,u,g,T,p,b,k,P,I,B,_,Z,$,A0,t0,n0,j0;let n=v();if(!e)return Te();let o=Date.now()-e.timestamp,r=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 M=0;M((r-1)*z.body[M].box[X]+H)/r),C0=e.body[M].boxRaw.map((H,X)=>((r-1)*z.body[M].boxRaw[X]+H)/r),x0=e.body[M].keypoints.map((H,X)=>{var U0,y0,Ee,k2,x2,E1,z1,S1,j1;return{score:H.score,part:H.part,position:[z.body[M].keypoints[X]?((r-1)*(z.body[M].keypoints[X].position[0]||0)+(H.position[0]||0))/r:H.position[0],z.body[M].keypoints[X]?((r-1)*(z.body[M].keypoints[X].position[1]||0)+(H.position[1]||0))/r:H.position[1],z.body[M].keypoints[X]?((r-1)*(z.body[M].keypoints[X].position[2]||0)+(H.position[2]||0))/r:H.position[2]],positionRaw:[z.body[M].keypoints[X]?((r-1)*(z.body[M].keypoints[X].positionRaw[0]||0)+(H.positionRaw[0]||0))/r:H.positionRaw[0],z.body[M].keypoints[X]?((r-1)*(z.body[M].keypoints[X].positionRaw[1]||0)+(H.positionRaw[1]||0))/r:H.positionRaw[1],z.body[M].keypoints[X]?((r-1)*(z.body[M].keypoints[X].positionRaw[2]||0)+(H.positionRaw[2]||0))/r:H.positionRaw[2]],distance:[z.body[M].keypoints[X]?((r-1)*(((U0=z.body[M].keypoints[X].distance)==null?void 0:U0[0])||0)+(((y0=H.distance)==null?void 0:y0[0])||0))/r:(Ee=H.distance)==null?void 0:Ee[0],z.body[M].keypoints[X]?((r-1)*(((k2=z.body[M].keypoints[X].distance)==null?void 0:k2[1])||0)+(((x2=H.distance)==null?void 0:x2[1])||0))/r:(E1=H.distance)==null?void 0:E1[1],z.body[M].keypoints[X]?((r-1)*(((z1=z.body[M].keypoints[X].distance)==null?void 0:z1[2])||0)+(((S1=H.distance)==null?void 0:S1[2])||0))/r:(j1=H.distance)==null?void 0:j1[2]]}}),K={},E={connected:{}};(A=t.body.modelPath)!=null&&A.includes("efficientpose")?E=it:(a=t.body.modelPath)!=null&&a.includes("blazepose")?E=ot:(l=t.body.modelPath)!=null&&l.includes("movenet")&&(E=W2);for(let[H,X]of Object.entries(E.connected)){let U0=[];for(let y0=0;y0x2.part===X[y0]),k2=x0.find(x2=>x2.part===X[y0+1]);Ee&&k2&&U0.push([Ee.position,k2.position])}K[H]=U0}z.body[M]={...e.body[M],box:T0,boxRaw:C0,keypoints:x0,annotations:K}}if(!z.hand||e.hand.length!==z.hand.length)z.hand=JSON.parse(JSON.stringify(e.hand));else for(let M=0;M((r-1)*z.hand[M].box[H]+E)/r),C0=e.hand[M].boxRaw.map((E,H)=>((r-1)*z.hand[M].boxRaw[H]+E)/r);z.hand[M].keypoints.length!==e.hand[M].keypoints.length&&(z.hand[M].keypoints=e.hand[M].keypoints);let x0=e.hand[M].keypoints&&e.hand[M].keypoints.length>0?e.hand[M].keypoints.map((E,H)=>E.map((X,U0)=>((r-1)*(z.hand[M].keypoints[H][U0]||1)+(X||0))/r)):[],K={};if(Object.keys(z.hand[M].annotations).length!==Object.keys(e.hand[M].annotations).length)z.hand[M].annotations=e.hand[M].annotations,K=z.hand[M].annotations;else if(e.hand[M].annotations)for(let E of Object.keys(e.hand[M].annotations))K[E]=(i=(x=(c=e.hand[M])==null?void 0:c.annotations)==null?void 0:x[E])!=null&&i[0]?e.hand[M].annotations[E].map((H,X)=>H.map((U0,y0)=>((r-1)*z.hand[M].annotations[E][X][y0]+U0)/r)):null;z.hand[M]={...e.hand[M],box:T0,boxRaw:C0,keypoints:x0,annotations:K}}if(!z.face||e.face.length!==z.face.length)z.face=JSON.parse(JSON.stringify(e.face));else for(let M=0;M((r-1)*z.face[M].box[E]+K)/r),C0=e.face[M].boxRaw.map((K,E)=>((r-1)*z.face[M].boxRaw[E]+K)/r),x0=e.face[M].annotations;if(Object.keys(z.face[M].annotations).length!==Object.keys(e.face[M].annotations).length)z.face[M].annotations=e.face[M].annotations,x0=z.face[M].annotations;else if(e.face[M].annotations)for(let K of Object.keys(e.face[M].annotations))x0[K]=(m=(d=(y=e.face[M])==null?void 0:y.annotations)==null?void 0:d[K])!=null&&m[0]?e.face[M].annotations[K].map((E,H)=>E.map((X,U0)=>((r-1)*z.face[M].annotations[K][H][U0]+X)/r)):null;if(e.face[M].rotation){let K={matrix:[0,0,0,0,0,0,0,0,0],angle:{roll:0,yaw:0,pitch:0},gaze:{bearing:0,strength:0}};K.matrix=(f=e.face[M].rotation)==null?void 0:f.matrix,K.angle={roll:((r-1)*(((g=(u=z.face[M].rotation)==null?void 0:u.angle)==null?void 0:g.roll)||0)+(((p=(T=e.face[M].rotation)==null?void 0:T.angle)==null?void 0:p.roll)||0))/r,yaw:((r-1)*(((k=(b=z.face[M].rotation)==null?void 0:b.angle)==null?void 0:k.yaw)||0)+(((I=(P=e.face[M].rotation)==null?void 0:P.angle)==null?void 0:I.yaw)||0))/r,pitch:((r-1)*(((_=(B=z.face[M].rotation)==null?void 0:B.angle)==null?void 0:_.pitch)||0)+((($=(Z=e.face[M].rotation)==null?void 0:Z.angle)==null?void 0:$.pitch)||0))/r},K.gaze={bearing:((r-1)*(((A0=z.face[M].rotation)==null?void 0:A0.gaze.bearing)||0)+(((t0=e.face[M].rotation)==null?void 0:t0.gaze.bearing)||0))/r,strength:((r-1)*(((n0=z.face[M].rotation)==null?void 0:n0.gaze.strength)||0)+(((j0=e.face[M].rotation)==null?void 0:j0.gaze.strength)||0))/r},z.face[M]={...e.face[M],rotation:K,box:T0,boxRaw:C0,annotations:x0}}else z.face[M]={...e.face[M],box:T0,boxRaw:C0,annotations:x0}}if(!z.object||e.object.length!==z.object.length)z.object=JSON.parse(JSON.stringify(e.object));else for(let M=0;M((r-1)*z.object[M].box[K]+x0)/r),C0=e.object[M].boxRaw.map((x0,K)=>((r-1)*z.object[M].boxRaw[K]+x0)/r);z.object[M]={...e.object[M],box:T0,boxRaw:C0}}if(e.persons){let M=e.persons;if(!z.persons||M.length!==z.persons.length)z.persons=JSON.parse(JSON.stringify(M));else for(let T0=0;T0((r-1)*z.persons[T0].box[x0]+C0)/r)}e.gesture&&(z.gesture=e.gesture),z.width=e.width,z.height=e.height;let s=v();return l1=R.perfadd?l1+Math.round(s-n):Math.round(s-n),e.performance&&(z.performance={...e.performance,interpolate:l1}),z}var s0=V(G());var L0;async function c1(e){return!L0||R.initial?L0=await L(e.segmentation.modelPath):e.debug&&h("cached model:",L0.modelUrl),L0}async function lo(e,t){var r;if(L0||(L0=await c1(t)),!(L0!=null&&L0.executor)||!((r=L0==null?void 0:L0.inputs)!=null&&r[0].shape))return null;let n={};n.resize=s0.image.resizeBilinear(e,[L0.inputs[0].shape?L0.inputs[0].shape[1]:0,L0.inputs[0].shape?L0.inputs[0].shape[2]:0],!1),n.norm=s0.div(n.resize,C.tf255),n.res=L0.execute(n.norm),n.squeeze=s0.squeeze(n.res,[0]),[n.bgRaw,n.fgRaw]=s0.unstack(n.squeeze,2),n.fg=s0.softmax(n.fgRaw),n.mul=s0.mul(n.fg,C.tf255),n.expand=s0.expandDims(n.mul,2),n.output=s0.image.resizeBilinear(n.expand,[e.shape[1]||0,e.shape[2]||0]);let o;switch(t.segmentation.mode||"default"){case"default":n.input=s0.squeeze(e),n.concat=s0.concat([n.input,n.output],-1),o=s0.cast(n.concat,"int32");break;case"alpha":o=s0.cast(n.output,"int32");break;default:o=s0.tensor(0)}return Object.keys(n).forEach(s=>s0.dispose(n[s])),o}var Ot={};ze(Ot,{distance:()=>d1,find:()=>UA,similarity:()=>qA});function d1(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 qA(e,t,n={order:2,multiplier:25,min:.2,max:.8}){let o=d1(e,t,n);return xo(o,n.order||2,n.min||0,n.max||1)}function UA(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;AH2,validateModel:()=>Gt});var D2=V(G());var Ue=V(G());var yo=.005,ee={keypoints:[],padding:[[0,0],[0,0],[0,0],[0,0]]};function x1(e){for(let t of A1){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 fo(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=Ue.pad(e,ee.padding),n.resize=Ue.image.resizeBilinear(n.pad,[t,t]);let o=Ue.cast(n.resize,"int32");return Object.keys(n).forEach(A=>Ue.dispose(n[A])),o}function po(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]+ee.padding[2][0]+ee.padding[2][1])/t[0]-ee.padding[2][0],o.position[1]*(t[1]+ee.padding[1][0]+ee.padding[1][1])/t[1]-ee.padding[1][0]],o.positionRaw=[o.position[0]/t[0],o.position[1]/t[1]];let n=Le(e.keypoints.map(o=>o.position),t);return e.box=n.box,e.boxRaw=n.boxRaw,e}var b0,Ct=0,y1=Number.MAX_SAFE_INTEGER,d2={boxes:[],bodies:[],last:0};async function uo(e){var t;return R.initial&&(b0=null),b0?e.debug&&h("cached model:",b0.modelUrl):(J2(["size"],e),b0=await L(e.body.modelPath)),Ct=b0!=null&&b0.executor&&((t=b0==null?void 0:b0.inputs)!=null&&t[0].shape)?b0.inputs[0].shape[2]:0,Ct<64&&(Ct=256),D2.env().flagRegistry.WEBGL_USE_SHAPES_UNIFORMS&&D2.env().set("WEBGL_USE_SHAPES_UNIFORMS",!1),b0}function KA(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:Nt[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=Le(r.map(x=>x.position),[n.shape[2],n.shape[1]]),l={};for(let[x,i]of Object.entries(Lt)){let y=[];for(let d=0;du.part===i[d]),f=r.find(u=>u.part===i[d+1]);m&&f&&m.score>(t.body.minConfidence||0)&&f.score>(t.body.minConfidence||0)&&y.push([m.position,f.position])}l[x]=y}let c={id:0,score:s,box:a.box,boxRaw:a.boxRaw,keypoints:r,annotations:l};return x1(c),A.push(c),A}function JA(e,t,n){let o=[];for(let r=0;rt.body.minConfidence){let a=[];for(let y=0;y<17;y++){let d=s[3*y+2];if(d>t.body.minConfidence){let m=[s[3*y+1],s[3*y+0]];a.push({part:Nt[y],score:Math.round(100*d)/100,positionRaw:m,position:[Math.round((n.shape[2]||0)*m[0]),Math.round((n.shape[1]||0)*m[1])]})}}let l=[s[52],s[51],s[54]-s[52],s[53]-s[51]],c=[Math.trunc(l[0]*(n.shape[2]||0)),Math.trunc(l[1]*(n.shape[1]||0)),Math.trunc(l[2]*(n.shape[2]||0)),Math.trunc(l[3]*(n.shape[1]||0))],x={};for(let[y,d]of Object.entries(Lt)){let m=[];for(let f=0;fT.part===d[f]),g=a.find(T=>T.part===d[f+1]);u&&g&&u.score>(t.body.minConfidence||0)&&g.score>(t.body.minConfidence||0)&&m.push([u.position,g.position])}x[y]=m}let i={id:r,score:A,box:c,boxRaw:l,keypoints:[...a],annotations:x};x1(i),o.push(i)}}return o.sort((r,s)=>s.score-r.score),o.length>t.body.maxDetected&&(o.length=t.body.maxDetected),o}async function f1(e,t){var r;if(!(b0!=null&&b0.executor)||!((r=b0==null?void 0:b0.inputs)!=null&&r[0].shape))return[];t.skipAllowed||(d2.boxes.length=0),y1++;let n=(t.body.skipTime||0)>v()-d2.last,o=y1<(t.body.skipFrames||0);return t.skipAllowed&&n&&o?d2.bodies:new Promise(async s=>{let A={};y1=0,A.input=mo(e,Ct),A.res=b0==null?void 0:b0.execute(A.input),d2.last=v();let a=await A.res.array();d2.bodies=A.res.shape[2]===17?KA(a,t,e):JA(a,t,e);for(let l of d2.bodies)po(l,[e.shape[2]||1,e.shape[1]||1]),fo(l.keypoints);Object.keys(A).forEach(l=>D2.dispose(A[l])),s(d2.bodies)})}var S0=V(G());var ce,Wt=[],bo=0,m1=Number.MAX_SAFE_INTEGER,Ft=0,Dt=2.5;async function go(e){if(!ce||R.initial){ce=await L(e.object.modelPath);let t=ce!=null&&ce.executor?Object.values(ce.modelSignature.inputs):void 0;Ft=Array.isArray(t)?parseInt(t[0].tensorShape.dim[2].size):416}else e.debug&&h("cached model:",ce.modelUrl);return ce}async function QA(e,t,n){var c,x;let o=0,r=[],s=Ft;for(let i of[1,2,4]){let y=i*13,d=S0.squeeze(e.find(p=>p.shape[1]===y**2&&(p.shape[2]||0)===m2.length)),m=await d.array(),f=S0.squeeze(e.find(p=>p.shape[1]===y**2&&(p.shape[2]||0)(n.object.minConfidence||0)&&b!==61){let P=(.5+Math.trunc(p%y))/y,I=(.5+Math.trunc(p/y))/y,B=T[p].map(M=>M*(y/i/s)),[_,Z]=[P-Dt/i*B[0],I-Dt/i*B[1]],[$,A0]=[P+Dt/i*B[2]-_,I+Dt/i*B[3]-Z],t0=[_,Z,$,A0];t0=t0.map(M=>Math.max(0,Math.min(M,1)));let n0=[t0[0]*t[0],t0[1]*t[1],t0[2]*t[0],t0[3]*t[1]],j0={id:o++,score:Math.round(100*k)/100,class:b+1,label:m2[b].label,box:n0.map(M=>Math.trunc(M)),boxRaw:t0};r.push(j0)}}S0.dispose([d,f,u,g])}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 S0.image.nonMaxSuppressionAsync(A,a,n.object.maxDetected||0,n.object.iouThreshold,n.object.minConfidence);l=Array.from(await i.data()),S0.dispose(i)}return r=r.filter((i,y)=>l.includes(y)).sort((i,y)=>y.score-i.score),r}async function p1(e,t){if(!(ce!=null&&ce.executor))return[];let n=(t.object.skipTime||0)>v()-bo,o=m1<(t.object.skipFrames||0);return t.skipAllowed&&n&&o&&Wt.length>0?(m1++,Wt):(m1=0,!R.kernels.includes("mod")||!R.kernels.includes("sparsetodense")?Wt:new Promise(async r=>{let s=[e.shape[2]||0,e.shape[1]||0],A=S0.image.resizeBilinear(e,[Ft,Ft],!1),a=S0.div(A,C.tf255),l=S0.transpose(a,[0,3,1,2]),c;t.object.enabled&&(c=ce.execute(l)),bo=v();let x=await QA(c,s,t);Wt=x,S0.dispose([A,a,l,...c]),r(x)}))}var V0=V(G());var B2=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],_A=B2.length,F2=B2.reduce((e,t,n)=>(e[t]=n,e),{}),$A=[["leftHip","leftShoulder"],["leftElbow","leftShoulder"],["leftElbow","leftWrist"],["leftHip","leftKnee"],["leftKnee","leftAnkle"],["rightHip","rightShoulder"],["rightElbow","rightShoulder"],["rightElbow","rightWrist"],["rightHip","rightKnee"],["rightKnee","rightAnkle"],["leftShoulder","rightShoulder"],["leftHip","rightHip"]],V7=$A.map(([e,t])=>[F2[e],F2[t]]),vo=[["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 Ro(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 Bt=class{constructor(t,n){w(this,"priorityQueue");w(this,"numberOfElements");w(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 g1(e,t){return{x:e.x+t.x,y:e.y+t.y}}var te,ta=["MobilenetV1/offset_2/BiasAdd","MobilenetV1/heatmap_2/BiasAdd","MobilenetV1/displacement_fwd_2/BiasAdd","MobilenetV1/displacement_bwd_2/BiasAdd"],Ht=1,M2=16,na=50**2;function ko(e,t,n,o,r,s,A=2){let a=g=>({y:s.get(g.y,g.x,e),x:s.get(g.y,g.x,s.shape[2]/2+e)}),l=(g,T,p)=>({y:b1(Math.round(g.y/M2),0,T-1),x:b1(Math.round(g.x/M2),0,p-1)}),[c,x]=o.shape,i=l(t.position,c,x),y=a(i),m=g1(t.position,y);for(let g=0;g[F2[y],F2[d]]),A=s.map(([,y])=>y),a=s.map(([y])=>y),l=t.shape[2],c=A.length,x=new Array(l),i=h1(e.part,M2,n);x[e.part.id]={score:e.score,part:B2[e.part.id],position:i};for(let y=c-1;y>=0;--y){let d=A[y],m=a[y];x[d]&&!x[m]&&(x[m]=ko(y,x[d],m,t,n,r))}for(let y=0;yt){a=!1;break}if(!a)break}return a}function sa(e,t){let[n,o,r]=t.shape,s=new Bt(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)<=na:!1})}function Aa(e,t){return t.reduce((o,{position:r,score:s},A)=>(wo(e,r,A)||(o+=s),o),0)/t.length}function aa(e,t,n,o,r,s){let A=[],a=sa(s,t);for(;A.lengthd.score>s);let i=Aa(A,x),y=Ro(x);i>s&&A.push({keypoints:x,box:y,score:Math.round(100*i)/100})}return A}async function T1(e,t){if(!(te!=null&&te.executor))return[];let n=V0.tidy(()=>{if(!te.inputs[0].shape)return[];let A=V0.image.resizeBilinear(e,[te.inputs[0].shape[2],te.inputs[0].shape[1]]),a=V0.sub(V0.div(V0.cast(A,"float32"),127.5),1),c=te.execute(a,ta).map(x=>V0.squeeze(x,[0]));return c[1]=V0.sigmoid(c[1]),c}),o=await Promise.all(n.map(A=>A.buffer()));for(let A of n)V0.dispose(A);let r=aa(o[0],o[1],o[2],o[3],t.body.maxDetected,t.body.minConfidence);return te.inputs[0].shape?Mo(r,[e.shape[1],e.shape[2]],[te.inputs[0].shape[2],te.inputs[0].shape[1]]):[]}async function Eo(e){return!te||R.initial?te=await L(e.body.modelPath):e.debug&&h("cached model:",te.modelUrl),te}var F=V(G());var ve,ia=["fgr","pha","r1o","r2o","r3o","r4o"],g0={},R1=0;function jo(e){F.dispose([g0.r1i,g0.r2i,g0.r3i,g0.r4i,g0.downsample_ratio]),g0.r1i=F.tensor(0),g0.r2i=F.tensor(0),g0.r3i=F.tensor(0),g0.r4i=F.tensor(0),R1=e.segmentation.ratio||.5,g0.downsample_ratio=F.tensor(R1)}async function M1(e){return!ve||R.initial?ve=await L(e.segmentation.modelPath):e.debug&&h("cached model:",ve.modelUrl),jo(e),ve}var So=e=>F.tidy(()=>{let t=F.squeeze(e,[0]),n=F.mul(t,C.tf255);return F.cast(n,"int32")});function v1(e,t){let n=e?So(e):F.fill([t.shape[1]||0,t.shape[2]||0,3],255,"int32"),o=t?So(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 la(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 Io(e,t){if(ve||(ve=await M1(t)),!(ve!=null&&ve.executor))return null;g0.src=F.div(e,255),R1!==t.segmentation.ratio&&jo(t);let[n,o,r,s,A,a]=await ve.executeAsync(g0,ia),l;switch(t.segmentation.mode||"default"){case"default":l=v1(n,o);break;case"alpha":l=v1(null,o);break;case"foreground":l=v1(n,null);break;case"state":l=la(r);break;default:l=F.tensor(0)}return F.dispose([g0.src,n,o,g0.r1i,g0.r2i,g0.r3i,g0.r4i]),[g0.r1i,g0.r2i,g0.r3i,g0.r4i]=[r,s,A,a],l}var z0=V(G());var O0;async function P1(e){return!O0||R.initial?O0=await L(e.segmentation.modelPath):e.debug&&h("cached model:",O0.modelUrl),O0}async function Lo(e,t){var r;if(O0||(O0=await P1(t)),!(O0!=null&&O0.executor)||!((r=O0==null?void 0:O0.inputs)!=null&&r[0].shape))return null;let n={};n.resize=z0.image.resizeBilinear(e,[O0.inputs[0].shape?O0.inputs[0].shape[1]:0,O0.inputs[0].shape?O0.inputs[0].shape[2]:0],!1),n.norm=z0.div(n.resize,C.tf255),n.res=O0.execute(n.norm),n.squeeze=z0.squeeze(n.res,[0]),n.alpha=z0.image.resizeBilinear(n.squeeze,[e.shape[1]||0,e.shape[2]||0]),n.mul=z0.mul(n.alpha,C.tf255);let o;switch(t.segmentation.mode||"default"){case"default":n.input=z0.squeeze(e),n.concat=z0.concat([n.input,n.mul],-1),o=z0.cast(n.concat,"int32");break;case"alpha":o=z0.cast(n.mul,"int32");break;default:o=z0.tensor(0)}return Object.keys(n).forEach(s=>z0.dispose(n[s])),o}function Gt(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&&h("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&&h("model validation failed:",n,A),A.length>0?{name:n,missing:A,ops:s,url:a}:null}var H2=class{constructor(t){w(this,"instance");w(this,"models",{});this.models={},this.instance=t}stats(){let t=0,n=0,o=0;for(let s of Object.values(I0))t+=s.sizeFromManifest,n+=s.sizeLoadedWeights,o+=s.sizeDesired;let r=o>0?n/o:0;return{numLoadedModels:Object.values(I0).length,numDefinedModels:Object.keys(this.models).length,percentageLoaded:r,totalSizeFromManifest:t,totalSizeWeights:n,totalSizeLoading:o,modelStats:Object.values(I0)}}reset(){for(let t of Object.keys(this.models))this.models[t]=null}async load(t){var o,r,s,A,a,l,c,x,i,y,d,m,f,u,g,T,p,b,k,P,I,B,_,Z,$,A0,t0;R.initial&&this.reset(),t&&(this.instance=t);let n={};n.blazeface=this.instance.config.face.enabled&&!this.models.blazeface?k3(this.instance.config):null,n.antispoof=this.instance.config.face.enabled&&((o=this.instance.config.face.antispoof)!=null&&o.enabled)&&!this.models.antispoof?Q3(this.instance.config):null,n.liveness=this.instance.config.face.enabled&&((r=this.instance.config.face.liveness)!=null&&r.enabled)&&!this.models.liveness?tn(this.instance.config):null,n.faceres=this.instance.config.face.enabled&&((s=this.instance.config.face.description)!=null&&s.enabled)&&!this.models.faceres?q3(this.instance.config):null,n.emotion=this.instance.config.face.enabled&&((A=this.instance.config.face.emotion)!=null&&A.enabled)&&!this.models.emotion?G3(this.instance.config):null,n.iris=this.instance.config.face.enabled&&((a=this.instance.config.face.iris)!=null&&a.enabled)&&!((l=this.instance.config.face.attention)!=null&&l.enabled)&&!this.models.iris?I3(this.instance.config):null,n.facemesh=this.instance.config.face.enabled&&((c=this.instance.config.face.mesh)!=null&&c.enabled)&&!this.models.facemesh?W3(this.instance.config):null,n.gear=this.instance.config.face.enabled&&((x=this.instance.config.face.gear)!=null&&x.enabled)&&!this.models.gear?sn(this.instance.config):null,n.ssrnetage=this.instance.config.face.enabled&&((i=this.instance.config.face.ssrnet)!=null&&i.enabled)&&!this.models.ssrnetage?cn(this.instance.config):null,n.ssrnetgender=this.instance.config.face.enabled&&((y=this.instance.config.face.ssrnet)!=null&&y.enabled)&&!this.models.ssrnetgender?fn(this.instance.config):null,n.mobilefacenet=this.instance.config.face.enabled&&((d=this.instance.config.face.mobilefacenet)!=null&&d.enabled)&&!this.models.mobilefacenet?bn(this.instance.config):null,n.insightface=this.instance.config.face.enabled&&((m=this.instance.config.face.insightface)!=null&&m.enabled)&&!this.models.insightface?Mn(this.instance.config):null,n.blazepose=this.instance.config.body.enabled&&!this.models.blazepose&&((f=this.instance.config.body.modelPath)!=null&&f.includes("blazepose"))?a3(this.instance.config):null,n.blazeposedetect=this.instance.config.body.enabled&&!this.models.blazeposedetect&&this.instance.config.body.detector&&this.instance.config.body.detector.modelPath?A3(this.instance.config):null,n.efficientpose=this.instance.config.body.enabled&&!this.models.efficientpose&&((u=this.instance.config.body.modelPath)!=null&&u.includes("efficientpose"))?y3(this.instance.config):null,n.movenet=this.instance.config.body.enabled&&!this.models.movenet&&((g=this.instance.config.body.modelPath)!=null&&g.includes("movenet"))?uo(this.instance.config):null,n.posenet=this.instance.config.body.enabled&&!this.models.posenet&&((T=this.instance.config.body.modelPath)!=null&&T.includes("posenet"))?Eo(this.instance.config):null,n.handtrack=this.instance.config.hand.enabled&&!this.models.handtrack&&((b=(p=this.instance.config.hand.detector)==null?void 0:p.modelPath)!=null&&b.includes("handtrack"))?so(this.instance.config):null,n.handskeleton=this.instance.config.hand.enabled&&this.instance.config.hand.landmarks&&!this.models.handskeleton&&((P=(k=this.instance.config.hand.detector)==null?void 0:k.modelPath)!=null&&P.includes("handtrack"))?Ao(this.instance.config):null,this.instance.config.hand.enabled&&!this.models.handdetect&&((B=(I=this.instance.config.hand.detector)==null?void 0:I.modelPath)!=null&&B.includes("handdetect"))&&(n.handdetect=$n(this.instance.config),n.handskeleton=eo(this.instance.config)),n.centernet=this.instance.config.object.enabled&&!this.models.centernet&&((_=this.instance.config.object.modelPath)!=null&&_.includes("centernet"))?c3(this.instance.config):null,n.nanodet=this.instance.config.object.enabled&&!this.models.nanodet&&((Z=this.instance.config.object.modelPath)!=null&&Z.includes("nanodet"))?go(this.instance.config):null,n.selfie=this.instance.config.segmentation.enabled&&!this.models.selfie&&(($=this.instance.config.segmentation.modelPath)!=null&&$.includes("selfie"))?P1(this.instance.config):null,n.meet=this.instance.config.segmentation.enabled&&!this.models.meet&&((A0=this.instance.config.segmentation.modelPath)!=null&&A0.includes("meet"))?c1(this.instance.config):null,n.rvm=this.instance.config.segmentation.enabled&&!this.models.rvm&&((t0=this.instance.config.segmentation.modelPath)!=null&&t0.includes("rvm"))?M1(this.instance.config):null;for(let[n0,j0]of Object.entries(n))j0!=null&&j0.then&&j0.then(M=>this.models[n0]=M);await Promise.all(Object.values(n))}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(I0).find(r=>r.startsWith(n.name));o&&(n.size=I0[o].sizeLoadedWeights,n.url=I0[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=Gt(this.instance,o,n);r&&t.push(r)}return t}};function Co(e,t,n,o,r){var a,l,c,x,i,y;let s=0,A=[];for(let d of e){let m={id:s++,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]m.body.box[0]&&b.box[0]+b.box[2]m.body.box[1]&&b.box[1]+b.box[3]m.body.box[0]&&b.box[1]+b.box[3]>m.body.box[1]&&b.box[1]+b.box[3]{b&&b.length===4&&(f.push(b[0],b[0]+b[2]),u.push(b[1],b[1]+b[3]))};g(m.face.box),g((x=m.body)==null?void 0:x.box),g((i=m.hands.left)==null?void 0:i.box),g((y=m.hands.right)==null?void 0:y.box);let T=Math.min(...f),p=Math.min(...u);m.box=[T,p,Math.max(...f)-T,Math.max(...u)-p],r!=null&&r[1]&&(r!=null&&r[2])&&(m.boxRaw=[m.box[0]/r[2],m.box[1]/r[1],m.box[2]/r[2],m.box[3]/r[1]]),A.push(m)}return A}var d0=V(G());var Vt=` + 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) + // gestures do not have buffering + // person(inCanvas, result.persons, localOptions); // already included above + ]); + 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", + // 0 + "leftEyeInside", + // 1 + "leftEye", + // 2 + "leftEyeOutside", + // 3 + "rightEyeInside", + // 4 + "rightEye", + // 5 + "rightEyeOutside", + // 6 + "leftEar", + // 7 + "rightEar", + // 8 + "leftMouth", + // 9 + "rightMouth", + // 10 + "leftShoulder", + // 11 + "rightShoulder", + // 12 + "leftElbow", + // 13 + "rightElbow", + // 14 + "leftWrist", + // 15 + "rightWrist", + // 16 + "leftPinky", + // 17 + "rightPinky", + // 18 + "leftIndex", + // 19 + "rightIndex", + // 20 + "leftThumb", + // 21 + "rightThumb", + // 22 + "leftHip", + // 23 + "rightHip", + // 24 + "leftKnee", + // 25 + "rightKnee", + // 26 + "leftAnkle", + // 27 + "rightAnkle", + // 28 + "leftHeel", + // 29 + "rightHeel", + // 30 + "leftFoot", + // 31 + "rightFoot", + // 32 + "bodyCenter", + // 33 + "bodyTop", + // 34 + "leftPalm", + // 35 // z-coord not ok + "leftHand", + // 36 // similar to wrist but z-coord not ok + "rightPalm", + // 37 // z-coord not ok + "rightHand" + // 38 // similar to wrist but z-coord not ok +]; +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], + // dont touch batch + height, + // height before&after + width, + // width before&after + [0, 0] + // dont touch rbg + ]; + 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], + // correct offset due to crop + kpt4.positionRaw[1] / width + cropBox[0], + // correct offset due to crop + 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 + /* 1,1 */ + ] = 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: [ + // normalized to 0..1 + // @ts-ignore model is not undefined here + x2 / model4.inputs[0].shape[2], + y2 / model4.inputs[0].shape[1] + ], + position: [ + // normalized to input image size + // @ts-ignore model is not undefined here + 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, anchor) => { + 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 landmarks = box.landmarks.map((pt) => [(pt[0] + anchor[0]) * factor[0], (pt[1] + anchor[1]) * factor[1]]); + return { startPoint, endPoint, 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, + size: size2 + }; +}; +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, + size: [Math.round(size2[0]), Math.round(size2[1])] + }; +}; +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) => [ + // scaled around zero-point + 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 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, _e, _f, _g; + 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.tf1); + 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 + }; + b.anchor = tf13.slice(anchors, [nms[i], 0], [1, 2]); + const anchor = await b.anchor.data(); + const scaledBox = scaleBoxCoordinates(rawBox, [(inputImage.shape[2] || 0) / inputSize4, (inputImage.shape[1] || 0) / inputSize4], anchor); + const enlargedBox = enlargeBox(scaledBox, ((_e = config3.face.detector) == null ? void 0 : _e.scale) || 1.4); + const squaredBox = squarifyBox(enlargedBox); + if (squaredBox.size[0] > (((_f = config3.face.detector) == null ? void 0 : _f["minSize"]) || 0) && squaredBox.size[1] > (((_g = config3.face.detector) == null ? void 0 : _g["minSize"]) || 0)) 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 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, scale2 = 2.3) => { + const box = squarifyBox(enlargeBox(calculateLandmarksBoundingBox([rawCoords[eyeInnerCornerIndex], rawCoords[eyeOuterCornerIndex]]), scale2)); + 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, config3) { + var _a, _b; + 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, ((_a = config3.face.iris) == null ? void 0 : _a.scale) || 2.3); + const { box: rightEyeBox, boxSize: rightEyeBoxSize, crop: rightEyeCrop } = getEyeBox(rawCoords, face4, eyeLandmarks.rightBounds[0], eyeLandmarks.rightBounds[1], meshSize, true, ((_b = config3.face.iris) == null ? void 0 : _b.scale) || 2.3); + 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 = { + // all attention models produce 2d results so it needs to be later augmented with correct z-coords + // mesh: results[0], // already have it in rawCoords // output_mesh_identity + // flag: results[1], // already processed in parent // conv_faceflag + lips: await ((_b = (_a = results.filter((r) => r.size === 160)) == null ? void 0 : _a[0]) == null ? void 0 : _b.data()), + // 80 x 2d = 160 // output_lips + irisL: await ((_d = (_c = results.filter((r) => r.size === 10)) == null ? void 0 : _c[0]) == null ? void 0 : _d.data()), + // 5 x 2d = 10 // output_right_iris + eyeL: await ((_f = (_e = results.filter((r) => r.size === 142)) == null ? void 0 : _e[0]) == null ? void 0 : _f.data()), + // 71 x 2d = 142 // output_right_eye + irisR: await ((_h = (_g = results.filter((r) => r.size === 10)) == null ? void 0 : _g[1]) == null ? void 0 : _h.data()), + // 5 x 2d = 10 // output_left_iris + eyeR: await ((_j = (_i = results.filter((r) => r.size === 142)) == null ? void 0 : _i[1]) == null ? void 0 : _j.data()) + // 71 x 2d = 142// output_left_eye + }; + 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; + 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 = { + // init face result + id: id++, + mesh: [], + meshRaw: [], + box: [0, 0, 0, 0], + boxRaw: [0, 0, 0, 0], + score: 0, + boxScore: 0, + faceScore: 0, + size: [0, 0], + // contoursRaw: [], + // contours: [], + 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) || !(model7 == null ? void 0 : model7["executor"])) { + face4.box = clampBox(box, input); + face4.boxRaw = getRawBox(box, input); + face4.score = face4.boxScore; + face4.size = box.size; + face4.mesh = box.landmarks; + 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.size = box.size; + face4.score = face4.boxScore; + face4.mesh = box.landmarks; + 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, config3); + } + 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, + size: box.size + }; + face4.box = clampBox(calculatedBox, input); + face4.boxRaw = getRawBox(calculatedBox, input); + face4.size = calculatedBox.size; + 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 = []; +var model8; +var last3 = []; +var lastCount = 0; +var lastTime4 = 0; +var skipped4 = Number.MAX_SAFE_INTEGER; +var rgb = false; +async function load6(config3) { + var _a, _b, _c; + if (env.initial) model8 = null; + if (!model8) { + model8 = await loadModel((_a = config3.face.emotion) == null ? void 0 : _a.modelPath); + rgb = ((_c = (_b = model8 == null ? void 0 : model8.inputs) == null ? void 0 : _b[0].shape) == null ? void 0 : _c[3]) === 3; + if (!rgb) annotations = ["angry", "disgust", "fear", "happy", "sad", "surprise", "neutral"]; + else annotations = ["angry", "disgust", "fear", "happy", "neutral", "sad", "surprise"]; + } 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, _b2, _c; + 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; + if (((_b2 = config3.face.emotion) == null ? void 0 : _b2["crop"]) > 0) { + const crop = (_c = config3.face.emotion) == null ? void 0 : _c["crop"]; + const box = [[crop, crop, 1 - crop, 1 - crop]]; + t2.resize = tf16.image.cropAndResize(image28, box, [0], [inputSize10, inputSize10]); + } else { + t2.resize = tf16.image.resizeBilinear(image28, [inputSize10, inputSize10], false); + } + if (rgb) { + t2.mul = tf16.mul(t2.resize, 255); + t2.normalize = tf16.sub(t2.mul, [103.939, 116.779, 123.68]); + t2.emotion = model8 == null ? void 0 : model8.execute(t2.normalize); + } else { + 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, config3) { + var _a, _b; + const tensor6 = input.image || input.tensor || input; + if (!(model9 == null ? void 0 : model9.inputs[0].shape)) return tensor6; + let crop; + if (((_a = config3.face.description) == null ? void 0 : _a["crop"]) > 0) { + const cropval = (_b = config3.face.description) == null ? void 0 : _b["crop"]; + const box = [[cropval, cropval, 1 - cropval, 1 - cropval]]; + crop = tf17.image.cropAndResize(tensor6, box, [0], [model9.inputs[0].shape[2], model9.inputs[0].shape[1]]); + } else { + 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, config3); + 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, _c, _d; + if (!(model12 == null ? void 0 : model12.inputs[0].shape)) return; + const t2 = {}; + let box = [[0, 0.1, 0.9, 0.9]]; + if (((_a2 = config3.face.gear) == null ? void 0 : _a2["crop"]) > 0) { + const crop = (_b2 = config3.face.gear) == null ? void 0 : _b2["crop"]; + box = [[crop, crop, 1 - crop, 1 - crop]]; + } + 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 ((_c = config3.face.gear) == null ? void 0 : _c.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] > (((_d = config3.face.gear) == null ? void 0 : _d.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, _b2, _c2; + if (!(model13 == null ? void 0 : model13.inputs) || !model13.inputs[0] || !model13.inputs[0].shape) return; + const t2 = {}; + if (((_a2 = config3.face["ssrnet"]) == null ? void 0 : _a2["crop"]) > 0) { + const crop = (_b2 = config3.face["ssrnet"]) == null ? void 0 : _b2["crop"]; + const box = [[crop, crop, 1 - crop, 1 - crop]]; + t2.resize = tf21.image.cropAndResize(image28, box, [0], [model13.inputs[0].shape[2], model13.inputs[0].shape[1]]); + } else { + 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 ((_c2 = config3.face["ssrnet"]) == null ? void 0 : _c2.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 rgb2 = [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, _b2, _c2; + if (!(model14 == null ? void 0 : model14.inputs[0].shape)) return; + const t2 = {}; + if (((_a2 = config3.face["ssrnet"]) == null ? void 0 : _a2["crop"]) > 0) { + const crop = (_b2 = config3.face["ssrnet"]) == null ? void 0 : _b2["crop"]; + const box = [[crop, crop, 1 - crop, 1 - crop]]; + t2.resize = tf22.image.cropAndResize(image28, box, [0], [model14.inputs[0].shape[2], model14.inputs[0].shape[1]]); + } else { + t2.resize = tf22.image.resizeBilinear(image28, [model14.inputs[0].shape[2], model14.inputs[0].shape[1]], false); + } + t2.enhance = tf22.tidy(() => { + var _a3, _b3; + let normalize2; + if (((_b3 = (_a3 = model14 == null ? void 0 : model14.inputs) == null ? void 0 : _a3[0].shape) == null ? void 0 : _b3[3]) === 1) { + const [red, green, blue] = tf22.split(t2.resize, 3, 3); + const redNorm = tf22.mul(red, rgb2[0]); + const greenNorm = tf22.mul(green, rgb2[1]); + const blueNorm = tf22.mul(blue, rgb2[2]); + const grayscale = tf22.addN([redNorm, greenNorm, blueNorm]); + normalize2 = tf22.mul(tf22.sub(grayscale, constants.tf05), 2); + } else { + normalize2 = tf22.mul(tf22.sub(t2.resize, constants.tf05), 2); + } + return normalize2; + }); + const obj = { gender: "unknown", genderScore: 0 }; + if ((_c2 = config3.face["ssrnet"]) == null ? void 0 : _c2.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 = [ + // x distance between extreme point and center point normalized with eye size + (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 == null ? void 0 : f.leftEyeIris) || !(f == null ? void 0 : f.rightEyeIris)) 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], + // just for convenience + nameMapping: { 0: "thumb", 1: "index", 2: "middle", 3: "ring", 4: "pinky" }, + // Describes mapping of joints based on the 21 points returned by handpose. + // [0] Palm + // [1-4] Thumb + // [5-8] Index + // [9-12] Middle + // [13-16] Ring + // [17-20] 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 = { + // curl estimation + HALF_CURL_START_LIMIT: 60, + NO_CURL_START_LIMIT: 130, + // direction estimation + 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 (rightIrisCenterX > 0.04) gestures.push({ iris: i, gesture: "looking right" }); + } else { + if (leftIrisCenterX > 0.04) 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) { + this.skipped++; + } else { + boxes = await this.handDetector.predict(image28, config3); + this.skipped = 0; + } + 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; +function initPipeline() { + const handDetector = handDetectorModel ? new HandDetector(handDetectorModel) : void 0; + if (handDetector && handPoseModel) handPipeline = new HandPipeline(handDetector, handPoseModel); +} +async function predict14(input, config3) { + if (!handPipeline) initPipeline(); + 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 loadDetect2(config3) { + var _a; + if (env.initial) handDetectorModel = null; + if (!handDetectorModel) handDetectorModel = await loadModel((_a = config3.hand.detector) == null ? void 0 : _a.modelPath); + else if (config3.debug) log("cached model:", handDetectorModel["modelUrl"]); + return handDetectorModel; +} +async function loadSkeleton(config3) { + var _a; + if (env.initial) handPoseModel = null; + if (!handPoseModel) handPoseModel = await loadModel((_a = config3.hand.skeleton) == null ? void 0 : _a.modelPath); + else if (config3.debug) log("cached model:", handPoseModel["modelUrl"]); + return 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: [0, 1, 2, 3, 4], + index: [0, 5, 6, 7, 8], + middle: [0, 9, 10, 11, 12], + ring: [0, 13, 14, 15, 16], + pinky: [0, 17, 18, 19, 20], + palm: [0], + */ + 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 loadDetect3(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 loadSkeleton2(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 = { + // initial values inherited from hand detect + 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 = [ + // used to create part labels + "nose", + "leftEye", + "rightEye", + "leftEar", + "rightEar", + "leftShoulder", + "rightShoulder", + "leftElbow", + "rightElbow", + "leftWrist", + "rightWrist", + "leftHip", + "rightHip", + "leftKnee", + "rightKnee", + "leftAnkle", + "rightAnkle" +]; +var horizontal = [ + // used to fix left vs right + ["leftEye", "rightEye"], + ["leftEar", "rightEar"], + ["leftShoulder", "rightShoulder"], + ["leftElbow", "rightElbow"], + ["leftWrist", "rightWrist"], + ["leftHip", "rightHip"], + ["leftKnee", "rightKnee"], + ["leftAnkle", "rightAnkle"] +]; +var vertical = [ + // used to remove unlikely keypoint positions + ["leftKnee", "leftShoulder"], + ["rightKnee", "rightShoulder"], + ["leftAnkle", "leftKnee"], + ["rightAnkle", "rightKnee"] +]; +var relative = [ + // used to match relative body parts + [["leftHip", "rightHip"], ["leftShoulder", "rightShoulder"]], + [["leftElbow", "rightElbow"], ["leftShoulder", "rightShoulder"]] +]; +var connected3 = { + // used to create body outline in annotations + 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, _x, _y, _z; + 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); + let annotations2 = newResult.face[i].annotations; + if (Object.keys(bufferedResult.face[i].annotations).length !== Object.keys(newResult.face[i].annotations).length) { + bufferedResult.face[i].annotations = newResult.face[i].annotations; + annotations2 = bufferedResult.face[i].annotations; + } else if (newResult.face[i].annotations) { + for (const key of Object.keys(newResult.face[i].annotations)) { + annotations2[key] = ((_i = (_h = (_g = newResult.face[i]) == null ? void 0 : _g.annotations) == null ? void 0 : _h[key]) == null ? void 0 : _i[0]) ? newResult.face[i].annotations[key].map((val, j) => val.map((coord, k) => ((bufferedFactor - 1) * bufferedResult.face[i].annotations[key][j][k] + coord) / bufferedFactor)) : null; + } + } + 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 = (_j = newResult.face[i].rotation) == null ? void 0 : _j.matrix; + rotation.angle = { + roll: ((bufferedFactor - 1) * (((_l = (_k = bufferedResult.face[i].rotation) == null ? void 0 : _k.angle) == null ? void 0 : _l.roll) || 0) + (((_n = (_m = newResult.face[i].rotation) == null ? void 0 : _m.angle) == null ? void 0 : _n.roll) || 0)) / bufferedFactor, + yaw: ((bufferedFactor - 1) * (((_p = (_o = bufferedResult.face[i].rotation) == null ? void 0 : _o.angle) == null ? void 0 : _p.yaw) || 0) + (((_r = (_q = newResult.face[i].rotation) == null ? void 0 : _q.angle) == null ? void 0 : _r.yaw) || 0)) / bufferedFactor, + pitch: ((bufferedFactor - 1) * (((_t = (_s = bufferedResult.face[i].rotation) == null ? void 0 : _s.angle) == null ? void 0 : _t.pitch) || 0) + (((_v = (_u = newResult.face[i].rotation) == null ? void 0 : _u.angle) == null ? void 0 : _v.pitch) || 0)) / bufferedFactor + }; + rotation.gaze = { + // not fully correct due projection on circle, also causes wrap-around draw on jump from negative to positive + bearing: ((bufferedFactor - 1) * (((_w = bufferedResult.face[i].rotation) == null ? void 0 : _w.gaze.bearing) || 0) + (((_x = newResult.face[i].rotation) == null ? void 0 : _x.gaze.bearing) || 0)) / bufferedFactor, + strength: ((bufferedFactor - 1) * (((_y = bufferedResult.face[i].rotation) == null ? void 0 : _y.gaze.strength) || 0) + (((_z = newResult.face[i].rotation) == null ? void 0 : _z.gaze.strength) || 0)) / bufferedFactor + }; + bufferedResult.face[i] = { ...newResult.face[i], rotation, box, boxRaw, annotations: annotations2 }; + } else { + bufferedResult.face[i] = { ...newResult.face[i], box, boxRaw, annotations: annotations2 }; + } + } + } + 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 load15(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 load15(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], + // dont touch batch + [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 + [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 + [0, 0] + // dont touch rbg + ]; + 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 load16(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; + if (tf32.env().flagRegistry.WEBGL_USE_SHAPES_UNIFORMS) tf32.env().set("WEBGL_USE_SHAPES_UNIFORMS", false); + 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: [ + // normalized to input image size + 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 boxScore = Math.round(100 * kpt4[51 + 4]) / 100; + if (boxScore > 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 boxRaw = [kpt4[51 + 1], kpt4[51 + 0], kpt4[51 + 3] - kpt4[51 + 1], kpt4[51 + 2] - kpt4[51 + 0]]; + const boxNorm = [Math.trunc(boxRaw[0] * (image28.shape[2] || 0)), Math.trunc(boxRaw[1] * (image28.shape[1] || 0)), Math.trunc(boxRaw[2] * (image28.shape[2] || 0)), Math.trunc(boxRaw[3] * (image28.shape[1] || 0))]; + 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: boxScore, box: boxNorm, 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 load17(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 = [ + // results normalized to input image pixels + boxRaw[0] * outputShape[0], + boxRaw[1] * outputShape[1], + boxRaw[2] * outputShape[0], + boxRaw[3] * outputShape[1] + ]; + const result = { + id: id++, + // strideSize, + score: Math.round(100 * score) / 100, + class: j + 1, + label: labels2[j].label, + // center: [Math.trunc(outputShape[0] * cx), Math.trunc(outputShape[1] * cy)], + // centerRaw: [cx, cy], + 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 { + // function call + constructor(maxSize2, getElementValue) { + __publicField(this, "priorityQueue"); + // don't touch + __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" + /* displacementBwd */ +]; +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 load18(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 load19(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 rgb3 = 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([rgb3, a], -1); + tf35.dispose([rgb3, 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 load19(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 load20(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 load20(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")) ? load16(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")) ? load18(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")) ? loadDetect3(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")) ? loadSkeleton2(this.instance.config) : null; + if (this.instance.config.hand.enabled && !this.models.handdetect && ((_v = (_u = this.instance.config.hand.detector) == null ? void 0 : _u.modelPath) == null ? void 0 : _v.includes("handdetect"))) { + m.handdetect = loadDetect2(this.instance.config); + m.handskeleton = loadSkeleton(this.instance.config); + } + 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")) ? load17(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")) ? load20(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")) ? load15(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")) ? load19(this.instance.config) : null; + for (const [model23, promise] of Object.entries(m)) { + if (promise == null ? void 0 : promise["then"]) promise["then"]((val) => this.models[model23] = val); + } + await Promise.all(Object.values(m)); + } + 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 +14002,8 @@ PQ4GJ+ashuK0MhWaoWcA0AaOmASMK7jRNPWYBmHyiuepO2x10qfcv6vYxCzYqoGK4HVYVTJrmb5l c6oaM5TUJ8EgGsG4kLNUHT0M64OaqMMikSRsuKbnFMRLG3zVehOaGNE445NNlnVFpDMu6uie9Vo1 8z5mOAOST2pDK91cNN+5tsrH3PrW54a06KxT7fdrlh/q1Pc+tJ6IUdZGvHPLezMcnBOWbsPap5r3 ylFtbdT1xUWNWzU0/Zbwlgfmx8zGsHWtRHmMqE59aAMyNifvHPc1f0gtPdqkY5JosJHeNci2tktY -euPnNY+oXWZEVJNrZ9aun8SIq/CzodHuriIokhDIR1ronbKZr0o6o8ipoz//2Q==`,Zt=` +euPnNY+oXWZEVJNrZ9aun8SIq/CzodHuriIokhDIR1ronbKZr0o6o8ipoz//2Q==`; +var body3 = ` /9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAsICAoIBwsKCQoNDAsNERwSEQ8PESIZGhQcKSQrKigk JyctMkA3LTA9MCcnOEw5PUNFSElIKzZPVU5GVEBHSEX/2wBDAQwNDREPESESEiFFLicuRUVFRUVF RUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUX/wAARCASwBLADASIA @@ -837,4 +14571,606 @@ AAAAAAJAAAAAAAAAAAAAABAJEAAAAAAAAAAAAAAAIEoBKAAAAAAAAAAAAAAABAlAAAAAAAIAAAAA BAkBAkBAkBAlACEgMZjdjbFW8bWrEx8YWANb6Fp+bfwab+vLDKMFK9qxH5L0bAr8OPRPKz2AY7J2 SbAjYZAI2E7AIEgIEgIEgMdkSy2NgY7MdlmyNoBXsxmFuyNgVTVjNV3KjlBRNTlXTVHKCrlIqt5T lBhEMohlFerLlBjEMohMVTEARDKCITsAk2AEgAAAkAAAAAAAAAAAAAAAAAAAAAAAASAAAAAAAAD/ -2Q==`;async function xa(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(Vt);break;case"body":case"full":n=await t(Zt);break;default:n=null}if(n){let r=await createImageBitmap(n);o=await e.detect(r,e.config),r.close()}return o}async function ya(e){return new Promise(t=>{let n;switch(e.config.warmup){case"face":n="data:image/jpeg;base64,"+Vt;break;case"full":case"body":n="data:image/jpeg;base64,"+Zt;break;default:n=""}let o;if(typeof Image!="undefined")o=new Image;else if(R.Image)o=new R.Image;else{t(void 0);return}o.onload=async()=>{let r=Ae(o.naturalWidth,o.naturalHeight);if(!r)h("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 fa(e){let t=r=>Buffer.from(r,"base64"),n;e.config.warmup==="face"?n=t(Vt):n=t(Zt);let o;if("node"in d0&&d0.getBackend()==="tensorflow"){let r=d0.node.decodeJpeg(n),s=d0.expandDims(r,0);e.tf.dispose(r),o=await e.detect(s,e.config),e.tf.dispose(s)}else e.config.debug&&h("Warmup tfjs-node not loaded");return o}async function ma(e){let t;return typeof createImageBitmap=="function"?t=await xa(e):typeof Image!="undefined"||R.Canvas!==void 0?t=await ya(e):t=await fa(e),t}async function pa(e){var a,l,c,x;if(!d0.env().flagRegistry.ENGINE_COMPILE_ONLY)return;let t=d0.getBackend(),n=d0.backend();if(t!=="webgl"&&t!=="humangl"||!(n!=null&&n.checkCompileCompletion))return;d0.env().set("ENGINE_COMPILE_ONLY",!0);let o=d0.engine().state.numTensors,r=[];for(let[i,y]of Object.entries(e.models.models)){if(!y)continue;let d=y!=null&&y.modelSignature&&((l=(a=y==null?void 0:y.inputs)==null?void 0:a[0])!=null&&l.shape)?[...y.inputs[0].shape]:[1,64,64,3],m=y!=null&&y.modelSignature&&((x=(c=y==null?void 0:y.inputs)==null?void 0:c[0])!=null&&x.dtype)?y.inputs[0].dtype:"float32";for(let u=0;ud0.dispose(g)):d0.dispose(u)}catch(u){e.config.debug&&h("compile fail model:",i)}d0.dispose(f)}let s=await n.checkCompileCompletionAsync();n.getUniformLocations(),e.config.debug&&h("compile pass:",{models:r,kernels:s.length}),d0.env().set("ENGINE_COMPILE_ONLY",!1);let A=d0.engine().state.numTensors;A-o>0&&h("tensor leak:",A-o)}async function Wo(e,t){await I2(e,!1);let n=v();return e.state="warmup",t&&(e.config=a0(e.config,t)),!e.config.warmup||e.config.warmup.length===0||e.config.warmup==="none"?Te():new Promise(async o=>{await e.models.load(),await pa(e);let r=await ma(e),s=v();e.config.debug&&h("warmup",e.config.warmup,Math.round(s-n),"ms"),e.emit("warmup"),o(r)})}var P2,G2,V2,Xt,Ye,w1=class{constructor(t){w(this,"version");w(this,"config");w(this,"result");w(this,"state");w(this,"process");w(this,"tf");w(this,"env",R);w(this,"draw",nt);w(this,"match",Ot);w(this,"models");w(this,"events");w(this,"faceTriangulation");w(this,"faceUVMap");w(this,"performance");ue(this,P2,void 0);ue(this,G2,void 0);ue(this,V2,void 0);w(this,"analyze",(...t)=>{if(!Y0(this,G2))return;let n=this.tf.engine().state.numTensors,o=Y0(this,P2);Re(this,P2,n);let r=n-o;r!==0&&h(...t,r)});ue(this,Xt,t=>{if(!Y0(this,V2))return null;if(!t)return"input is not defined";if(this.env.node&&!(t instanceof de.Tensor))return"input must be a tensor";try{this.tf.getBackend()}catch(n){return"backend not loaded"}return null});w(this,"webcam",new K2);w(this,"emit",t=>{var n;(n=this.events)!=null&&n.dispatchEvent&&this.events.dispatchEvent(new Event(t))});ue(this,Ye,{});let n=(de.version.tfjs||de.version_core).replace(/-(.*)/,"");Ke.wasmPath=`https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@${n}/dist/`,Ke.modelBasePath=R.browser?"../models/":"file://models/",this.version=t5,Object.defineProperty(this,"version",{value:t5}),this.config=JSON.parse(JSON.stringify(Ke)),Object.seal(this.config),this.config.cacheModels=typeof indexedDB!="undefined",t&&(this.config=a0(this.config,t)),X1(this.config),this.tf=de,this.state="idle",Re(this,P2,0),Re(this,G2,!1),Re(this,V2,!1),this.performance={},this.events=typeof EventTarget!="undefined"?new EventTarget:void 0,this.models=new H2(this),i5(),this.result=Te(),this.process={tensor:null,canvas:null},this.faceTriangulation=D3,this.faceUVMap=F3,Gt(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(Ke)),this.config.backend=t,$t(),R.initial=!0}validate(t){let n=Jt(Ke,t||this.config);return n.length===0&&(this.config=a0(this.config,t)),n}now(){return v()}image(t,n=!1){return U2(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 U2(t,this.config);if(!o.tensor)return null;let r=null;return(s=this.config.segmentation.modelPath)!=null&&s.includes("rvm")&&(r=await Io(o.tensor,this.config)),(A=this.config.segmentation.modelPath)!=null&&A.includes("meet")&&(r=await lo(o.tensor,this.config)),(a=this.config.segmentation.modelPath)!=null&&a.includes("selfie")&&(r=await Lo(o.tensor,this.config)),de.dispose(o.tensor),r}compare(t,n){return Z1(this.config,t,n)}async init(){await I2(this,!0),await this.tf.ready(),$t()}async load(t){this.state="load";let n=v(),o=Object.values(this.models.models).filter(A=>A).length;t&&(this.config=a0(this.config,t)),this.env.initial&&(await I2(this,!1)||h("error: backend check failed"),await de.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),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.models).filter(A=>A).length!==o&&(this.models.validate(),this.emit("load"));let s=Math.trunc(v()-n);s>(this.performance.loadModels||0)&&(this.performance.loadModels=this.env.perfadd?(this.performance.loadModels||0)+s:s)}next(t=this.result){return io(t,this.config)}async warmup(t){let n=v(),o=await Wo(this,t),r=v();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 u,g,T,p,b,k,P,I,B,_,Z,$,A0,t0,n0,j0,M,T0,C0,x0,K;this.state="config";let r;this.config=a0(this.config,n),this.state="check";let s=Y0(this,Xt).call(this,t);s&&(h(s,t),this.emit("error"),o(Te(s)));let A=v();await this.load(),r=v(),this.state="image";let a=await U2(t,this.config);if(this.process=a,this.performance.inputProcess=this.env.perfadd?(this.performance.inputProcess||0)+Math.trunc(v()-r):Math.trunc(v()-r),this.analyze("Get Image:"),!a.tensor){this.config.debug&&h("could not convert input to tensor"),this.emit("error"),o(Te("could not convert input to tensor"));return}this.emit("image"),r=v(),this.config.skipAllowed=await V1(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(v()-r):Math.trunc(v()-r),this.analyze("Check Changed:");let l=[],c=[],x=[],i=[];this.state="detect:face",this.config.async?(l=this.config.face.enabled?J5(this,a.tensor):[],this.performance.face&&delete this.performance.face):(r=v(),l=this.config.face.enabled?await J5(this,a.tensor):[],this.performance.face=this.env.perfadd?(this.performance.face||0)+Math.trunc(v()-r):Math.trunc(v()-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?((u=this.config.body.modelPath)!=null&&u.includes("posenet")?c=this.config.body.enabled?T1(a.tensor,y):[]:(g=this.config.body.modelPath)!=null&&g.includes("blazepose")?c=this.config.body.enabled?y5(a.tensor,y):[]:(T=this.config.body.modelPath)!=null&&T.includes("efficientpose")?c=this.config.body.enabled?g5(a.tensor,y):[]:(p=this.config.body.modelPath)!=null&&p.includes("movenet")&&(c=this.config.body.enabled?f1(a.tensor,y):[]),this.performance.body&&delete this.performance.body):(r=v(),(b=this.config.body.modelPath)!=null&&b.includes("posenet")?c=this.config.body.enabled?await T1(a.tensor,y):[]:(k=this.config.body.modelPath)!=null&&k.includes("blazepose")?c=this.config.body.enabled?await y5(a.tensor,y):[]:(P=this.config.body.modelPath)!=null&&P.includes("efficientpose")?c=this.config.body.enabled?await g5(a.tensor,y):[]:(I=this.config.body.modelPath)!=null&&I.includes("movenet")&&(c=this.config.body.enabled?await f1(a.tensor,y):[]),this.performance.body=this.env.perfadd?(this.performance.body||0)+Math.trunc(v()-r):Math.trunc(v()-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?((_=(B=this.config.hand.detector)==null?void 0:B.modelPath)!=null&&_.includes("handdetect")?x=this.config.hand.enabled?n1(a.tensor,d):[]:($=(Z=this.config.hand.detector)==null?void 0:Z.modelPath)!=null&&$.includes("handtrack")&&(x=this.config.hand.enabled?s1(a.tensor,d):[]),this.performance.hand&&delete this.performance.hand):(r=v(),(t0=(A0=this.config.hand.detector)==null?void 0:A0.modelPath)!=null&&t0.includes("handdetect")?x=this.config.hand.enabled?await n1(a.tensor,d):[]:(j0=(n0=this.config.hand.detector)==null?void 0:n0.modelPath)!=null&&j0.includes("handtrack")&&(x=this.config.hand.enabled?await s1(a.tensor,d):[]),this.performance.hand=this.env.perfadd?(this.performance.hand||0)+Math.trunc(v()-r):Math.trunc(v()-r)),this.analyze("End Hand:"),this.analyze("Start Object:"),this.state="detect:object",this.config.async?((M=this.config.object.modelPath)!=null&&M.includes("nanodet")?i=this.config.object.enabled?p1(a.tensor,this.config):[]:(T0=this.config.object.modelPath)!=null&&T0.includes("centernet")&&(i=this.config.object.enabled?p5(a.tensor,this.config):[]),this.performance.object&&delete this.performance.object):(r=v(),(C0=this.config.object.modelPath)!=null&&C0.includes("nanodet")?i=this.config.object.enabled?await p1(a.tensor,this.config):[]:(x0=this.config.object.modelPath)!=null&&x0.includes("centernet")&&(i=this.config.object.enabled?await p5(a.tensor,this.config):[]),this.performance.object=this.env.perfadd?(this.performance.object||0)+Math.trunc(v()-r):Math.trunc(v()-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 m=[];this.config.gesture.enabled&&(r=v(),m=[...Wn(l),...Cn(c),...Fn(x),...Dn(l)],this.config.async?this.performance.gesture&&delete this.performance.gesture:this.performance.gesture=this.env.perfadd?(this.performance.gesture||0)+Math.trunc(v()-r):Math.trunc(v()-r)),this.performance.total=this.env.perfadd?(this.performance.total||0)+Math.trunc(v()-A):Math.trunc(v()-A);let f=((K=this.process.tensor)==null?void 0:K.shape)||[0,0,0,0];this.result={face:l,body:c,hand:x,gesture:m,object:i,performance:this.performance,canvas:this.process.canvas,timestamp:Date.now(),error:null,width:f[2],height:f[1],get persons(){return Co(l,c,x,m,f)}},de.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?(Y0(this,Ye)[t.id]||(this.config.debug&&h("video start",t.id),Y0(this,Ye)[t.id]=!0),!t.paused&&Y0(this,Ye)[t.id]&&t.readyState>=2&&await this.detect(t),o>0&&await this.sleep(o),Y0(this,Ye)[t.id]&&requestAnimationFrame(()=>this.video(t,n,o))):(this.config.debug&&h("video stop",t.id),Y0(this,Ye)[t.id]=!1)}};P2=new WeakMap,G2=new WeakMap,V2=new WeakMap,Xt=new WeakMap,Ye=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 { + resolve(void 0); + 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.models)) { + if (!model23) continue; + 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 { + // definition end + /** Constructor for **Human** library that is futher used for all operations + * @param userConfig - user configuration object {@link Config} + */ + constructor(userConfig) { + /** Current version of Human library in *semver* format */ + __publicField(this, "version"); + /** Current configuration + * - Defaults: [config](https://github.com/vladmandic/human/blob/main/src/config.ts#L262) + */ + __publicField(this, "config"); + /** Last known result of detect run + * - Can be accessed anytime after initial detection + */ + __publicField(this, "result"); + /** Current state of Human library + * - Can be polled to determine operations that are currently executed + * - Progresses through: 'config', 'check', 'backend', 'load', 'run:', 'idle' + */ + __publicField(this, "state"); + /** currenty processed image tensor and canvas */ + __publicField(this, "process"); + /** Instance of TensorFlow/JS used by Human + * - Can be embedded or externally provided + * [TFJS API](https://js.tensorflow.org/api/latest/) + */ + __publicField(this, "tf"); + /** Object containing environment information used for diagnostics */ + __publicField(this, "env", env); + /** Draw helper classes that can draw detected objects on canvas using specified draw + * - canvas: draws input to canvas + * - options: are global settings for all draw operations, can be overriden for each draw method {@link DrawOptions} + * - face, body, hand, gesture, object, person: draws detected results as overlays on canvas + */ + // 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 }; + __publicField(this, "draw", draw_exports); + /** Face Matching + * - similarity: compare two face descriptors and return similarity index + * - distance: compare two face descriptors and return raw calculated differences + * - find: compare face descriptor to array of face descriptors and return best match + */ + __publicField(this, "match", match_exports); + /** Currently loaded models + * @internal + * {@link models#Models} + */ + __publicField(this, "models"); + /** Container for events dispatched by Human + * Possible events: + * - `create`: triggered when Human object is instantiated + * - `load`: triggered when models are loaded (explicitly or on-demand) + * - `image`: triggered when input image is processed + * - `result`: triggered when detection is complete + * - `warmup`: triggered when warmup is complete + * - `error`: triggered on some errors + */ + __publicField(this, "events"); + /** Reference face triangualtion array of 468 points, used for triangle references between points */ + __publicField(this, "faceTriangulation"); + /** Refernce UV map of 468 values, used for 3D mapping of the face mesh */ + __publicField(this, "faceUVMap"); + /** Performance object that contains values for all recently performed operations */ + __publicField(this, "performance"); + // perf members are dynamically defined as needed + __privateAdd(this, _numTensors); + __privateAdd(this, _analyzeMemoryLeaks); + __privateAdd(this, _checkSanity); + /** internal function to measure tensor leaks */ + __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); + }); + /** internal function for quick sanity check on inputs @hidden */ + __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; + }); + /** WebCam helper methods + * + */ + __publicField(this, "webcam", new WebCam()); + /** emit event */ + __publicField(this, "emit", (event) => { + var _a; + if ((_a = this.events) == null ? void 0 : _a.dispatchEvent) this.events.dispatchEvent(new Event(event)); + }); + /** internal structure that keeps track of processed videos @hidden */ + __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 configuration to default values */ + reset() { + const currentBackend = this.config.backend; + this.config = JSON.parse(JSON.stringify(config)); + this.config.backend = currentBackend; + reset(); + env.initial = true; + } + /** Validate current configuration schema */ + validate(userConfig) { + const msgs = validate(config, userConfig || this.config); + if (msgs.length === 0) this.config = mergeDeep(this.config, userConfig); + return msgs; + } + /** Utility wrapper for performance.now() */ + now() { + return now(); + } + /** Process input as return canvas and tensor + * + * @param input - any input {@link Input} + * @param getTensor - should image processing also return tensor or just canvas + * Returns object with `tensor` and `canvas` + */ + image(input, getTensor = false) { + return process2(input, this.config, getTensor); + } + /** Segmentation method takes any input and returns RGBA tensor + * Note: Segmentation is not triggered as part of detect process + * + * @param input - {@link Input} + * Returns tensor which contains image data in RGBA format + */ + 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 two input tensors for pixel similarity + * - use `human.image` to process any valid input and get a tensor that can be used for compare + * - when passing manually generated tensors: + * - both input tensors must be in format [1, height, width, 3] + * - if resolution of tensors does not match, second tensor will be resized to match resolution of the first tensor + * - return value is pixel similarity score normalized by input resolution and rgb channels + */ + compare(firstImageTensor, secondImageTensor) { + return compare(this.config, firstImageTensor, secondImageTensor); + } + /** Explicit backend initialization + * - Normally done implicitly during initial load phase + * - Call to explictly register and initialize TFJS backend without any other operations + * - Use when changing backend during runtime + */ + async init() { + await check(this, true); + await this.tf.ready(); + reset(); + } + /** Load method preloads all configured models on-demand + * - Not explicitly required as any required model is load implicitly on it's first run + * + * @param userConfig - {@link Config} + */ + 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; + } + /** Runs interpolation using last known result and returns smoothened result + * Interpolation is based on time since last known result so can be called independently + * + * @param result - {@link Result} optional use specific result set to run interpolation on + * @returns result - {@link Result} + */ + next(result = this.result) { + return calc2(result, this.config); + } + /** Warmup method pre-initializes all configured models for faster inference + * - can take significant time on startup + * - only used for `webgl` and `humangl` backends + * @param userConfig - {@link Config} + * @returns result - {@link Result} + */ + async warmup(userConfig) { + const t0 = now(); + const res = await warmup(this, userConfig); + const t1 = now(); + this.performance.warmup = Math.trunc(t1 - t0); + return res; + } + /** Run detect with tensorflow profiling + * - result object will contain total exeuction time information for top-20 kernels + * - actual detection object can be accessed via `human.result` + */ + 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; + } + /** Main detection method + * - Analyze configuration: {@link Config} + * - Pre-process input: {@link Input} + * - Run inference for all configured models + * - Process and return result: {@link Result} + * + * @param input - {@link Input} + * @param userConfig - {@link Config} + * @returns result - {@link Result} + */ + 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); + }); + } + /** Helper function + * @param ms - sleep time in miliseconds + */ + async sleep(ms) { + return new Promise((resolve) => { + setTimeout(resolve, ms); + }); + } + /** Continously detect video frames + * @param element - HTMLVideoElement input + * @param run - boolean run continously or stop if already running, default true + * @param delay - number delay detection between frames for number of miliseconds, default 0 + */ + 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 257d46e3..5e5a23a5 100644 --- a/dist/human.node-wasm.js +++ b/dist/human.node-wasm.js @@ -4,7 +4,304 @@ author: ' */ -"use strict";var Fo=Object.create;var w2=Object.defineProperty;var Bo=Object.getOwnPropertyDescriptor;var Ho=Object.getOwnPropertyNames;var Go=Object.getPrototypeOf,Vo=Object.prototype.hasOwnProperty;var Zo=(e,t,n)=>t in e?w2(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var qo=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),ze=(e,t)=>{for(var n in t)w2(e,n,{get:t[n],enumerable:!0})},N1=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of Ho(t))!Vo.call(e,r)&&r!==n&&w2(e,r,{get:()=>t[r],enumerable:!(o=Bo(t,r))||o.enumerable});return e};var V=(e,t,n)=>(n=e!=null?Fo(Go(e)):{},N1(t||!e||!e.__esModule?w2(n,"default",{value:e,enumerable:!0}):n,e)),Xo=e=>N1(w2({},"__esModule",{value:!0}),e);var w=(e,t,n)=>(Zo(e,typeof t!="symbol"?t+"":t,n),n),O1=(e,t,n)=>{if(!t.has(e))throw TypeError("Cannot "+n)};var Y0=(e,t,n)=>(O1(e,t,"read from private field"),n?n.call(e):t.get(e)),ue=(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)},Re=(e,t,n,o)=>(O1(e,t,"write to private field"),o?o.call(e,n):t.set(e,n),n);var G=qo((ga,z2)=>{"use strict";var Kt=Object.defineProperty,Uo=Object.getOwnPropertyDescriptor,Yo=Object.getOwnPropertyNames,Ko=Object.prototype.hasOwnProperty,Jo=(e,t)=>{for(var n in t)Kt(e,n,{get:t[n],enumerable:!0})},Yt=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of Yo(t))!Ko.call(e,r)&&r!==n&&Kt(e,r,{get:()=>t[r],enumerable:!(o=Uo(t,r))||o.enumerable});return e},Jt=(e,t,n)=>(Yt(e,t,"default"),n&&Yt(n,t,"default")),Qo=e=>Yt(Kt({},"__esModule",{value:!0}),e),E2={};Jo(E2,{version:()=>or});z2.exports=Qo(E2);Jt(E2,require("@tensorflow/tfjs-core"),z2.exports);Jt(E2,require("@tensorflow/tfjs-converter"),z2.exports);Jt(E2,require("@tensorflow/tfjs-backend-wasm"),z2.exports);var L1="4.17.0",_o="4.17.0",$o="4.17.0",er="4.17.0",tr="4.17.0",nr="4.17.0",or={tfjs:L1,"tfjs-core":L1,"tfjs-converter":_o,"tfjs-backend-cpu":$o,"tfjs-backend-webgl":er,"tfjs-backend-wasm":tr,"tfjs-backend-webgpu":nr}});var ha={};ze(ha,{Env:()=>S2,Human:()=>E1,default:()=>E1,defaults:()=>Ke,draw:()=>rt,empty:()=>Te,env:()=>R,match:()=>Wt,models:()=>w1});module.exports=Xo(ha);var de=V(G());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 C1(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 v=()=>typeof performance!="undefined"?performance.now():parseInt((Number(process.hrtime.bigint())/1e3/1e3).toString());function Qt(e,t,n="config",o=[]){for(let r of Object.keys(t))if(typeof t[r]=="object")Qt(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&&h("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 Ke={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:!1,maxDetected:1,skipFrames:99,skipTime:2500,minConfidence:.2,minSize:0,iouThreshold:.1,scale:1.4,mask:!1,return:!1},mesh:{enabled:!0,modelPath:"facemesh.json",keepInvalid:!1},attention:{enabled:!1,modelPath:"facemesh-attention.json"},iris:{enabled:!0,scale:2.3,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-lite.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 W0=V(G());var N=V(G());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 __typeError = (msg) => { + throw TypeError(msg); +}; +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( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + 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); +var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg); +var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj)); +var __privateAdd = (obj, member, value) => member.has(obj) ? __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), value); + +// dist/tfjs.esm.js +var require_tfjs_esm = __commonJS({ + "dist/tfjs.esm.js"(exports2, 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.21.0"; + var version22 = "4.21.0"; + var version32 = "4.21.0"; + var version42 = "4.21.0"; + var version5 = "4.21.0"; + var version6 = "4.21.0"; + var version7 = { + tfjs: version4, + "tfjs-core": version4, + // 'tfjs-data': tfjsDataVersion, + // 'tfjs-layers': tfjsLayersVersion, + "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 = /* @__PURE__ */ 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: false, + maxDetected: 1, + skipFrames: 99, + skipTime: 2500, + minConfidence: 0.2, + minSize: 0, + iouThreshold: 0.1, + scale: 1.4, + mask: false, + return: false + }, + mesh: { + enabled: true, + modelPath: "facemesh.json", + keepInvalid: false + }, + attention: { + enabled: false, + modelPath: "facemesh-attention.json" + }, + iris: { + enabled: true, + scale: 2.3, + 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-lite.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 +311,8 @@ vUv = uv; gl_Position = vec4(pos.x, pos.y*flipY, 0.0, 1.); } -`;var D1=` +`; +var colorMatrixWithAlpha = ` precision highp float; varying vec2 vUv; uniform sampler2D texture; @@ -26,7 +324,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]; } -`,F1=` +`; +var colorMatrixWithoutAlpha = ` precision highp float; varying vec2 vUv; uniform sampler2D texture; @@ -38,7 +337,8 @@ gl_FragColor.b = m[10] * c.r + m[11] * c.g + m[12] * c.b + m[14]; gl_FragColor.a = c.a; } -`,B1=` +`; +var pixelate = ` precision highp float; varying vec2 vUv; uniform vec2 size; @@ -51,7 +351,8 @@ vec2 coord = pixelate(vUv, size); gl_FragColor += texture2D(texture, coord); } -`,H1=` +`; +var blur = ` precision highp float; varying vec2 vUv; uniform sampler2D texture; @@ -74,7 +375,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; } -`,G1=` +`; +var convolution = ` precision highp float; varying vec2 vUv; uniform sampler2D texture; @@ -96,20 +398,6030 @@ c31 * m[6] + c32 * m[7] + c33 * m[8]; gl_FragColor.a = c22.a; } -`;var _t=(e,t,n)=>{let o=new RegExp("\\b"+t+" \\w+ (\\w+)","ig");e.replace(o,(r,s)=>(n[s]=0,r))},$t=class{constructor(t,n,o){w(this,"uniform",{});w(this,"attribute",{});w(this,"gl");w(this,"id");w(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 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){h("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)){h(`filter: gl link failed: ${this.gl.getProgramInfoLog(this.id)||"unknown"}`);return}this.gl.useProgram(this.id),_t(n,"attribute",this.attribute);for(let A in this.attribute)this.attribute[A]=this.gl.getAttribLocation(this.id,A);_t(n,"uniform",this.uniform),_t(o,"uniform",this.uniform);for(let A in this.uniform)this.uniform[A]=this.gl.getUniformLocation(this.id,A)}}};function V1(){let e=0,t=null,n=!1,o=-1,r=[null,null],s=[],A=null,a=null,l=Ae(100,100),c={},x={INTERMEDIATE:1},i=l.getContext("webgl");if(!i){h("filter: cannot get webgl context");return}this.gl=i;function y(T,p){if(!(T===l.width&&p===l.height)){if(l.width=T,l.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=i.createBuffer(),i.bindBuffer(i.ARRAY_BUFFER,A),i.bufferData(i.ARRAY_BUFFER,b,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,p){let b=i.createFramebuffer();i.bindFramebuffer(i.FRAMEBUFFER,b);let k=i.createRenderbuffer();i.bindRenderbuffer(i.RENDERBUFFER,k);let P=i.createTexture();return i.bindTexture(i.TEXTURE_2D,P),i.texImage2D(i.TEXTURE_2D,0,i.RGBA,T,p,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:b,texture:P}}function m(T){return r[T]=r[T]||d(l.width,l.height),r[T]}function f(T=0){if(!a)return;let p=null,b=null,k=!1;e===0?p=t:p=m(o).texture||null,e++,n&&!(T&x.INTERMEDIATE)?(b=null,k=e%2===0):(o=(o+1)%2,b=m(o).fbo||null),i.bindTexture(i.TEXTURE_2D,p),i.bindFramebuffer(i.FRAMEBUFFER,b),i.uniform1f(a.uniform.flipY,k?-1:1),i.drawArrays(i.TRIANGLES,0,6)}function u(T){if(c[T])return a=c[T],i.useProgram((a?a.id:null)||null),a;if(a=new $t(i,W1,T),!a)return h("filter: could not get webgl program"),null;let p=Float32Array.BYTES_PER_ELEMENT,b=4*p;return i.enableVertexAttribArray(a.attribute.pos),i.vertexAttribPointer(a.attribute.pos,2,i.FLOAT,!1,b,0*p),i.enableVertexAttribArray(a.attribute.uv),i.vertexAttribPointer(a.attribute.uv,2,i.FLOAT,!1,b,2*p),c[T]=a,a}let g={colorMatrix:T=>{let p=new Float32Array(T);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?F1:D1,k=u(b);k&&(i.uniform1fv(k.uniform.m,p),f())},brightness:T=>{let p=(T||0)+1;g.colorMatrix([p,0,0,0,0,0,p,0,0,0,0,0,p,0,0,0,0,0,1,0])},saturation:T=>{let p=(T||0)*2/3+1,b=(p-1)*-.5;g.colorMatrix([p,b,b,0,0,b,p,b,0,0,b,b,p,0,0,0,0,0,1,0])},desaturate:()=>{g.saturation(-1)},contrast:T=>{let p=(T||0)+1,b=-128*(p-1);g.colorMatrix([p,0,0,0,b,0,p,0,0,b,0,0,p,0,b,0,0,0,1,0])},negative:()=>{g.contrast(-2)},hue:T=>{T=(T||0)/180*Math.PI;let p=Math.cos(T),b=Math.sin(T),k=.213,P=.715,I=.072;g.colorMatrix([k+p*(1-k)+b*-k,P+p*-P+b*-P,I+p*-I+b*(1-I),0,0,k+p*-k+b*.143,P+p*(1-P)+b*.14,I+p*-I+b*-.283,0,0,k+p*-k+b*-(1-k),P+p*-P+b*P,I+p*(1-I)+b*I,0,0,0,0,0,1,0])},desaturateLuminance:()=>{g.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:()=>{g.colorMatrix([.393,.7689999,.18899999,0,0,.349,.6859999,.16799999,0,0,.272,.5339999,.13099999,0,0,0,0,0,1,0])},brownie:()=>{g.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:()=>{g.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:()=>{g.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:()=>{g.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:()=>{g.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:()=>{g.colorMatrix([0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0])},convolution:T=>{let p=new Float32Array(T),b=1/l.width,k=1/l.height,P=u(G1);P&&(i.uniform1fv(P.uniform.m,p),i.uniform2f(P.uniform.px,b,k),f())},detectEdges:()=>{g.convolution.call(this,[0,1,0,1,-4,1,0,1,0])},sobelX:()=>{g.convolution.call(this,[-1,0,1,-2,0,2,-1,0,1])},sobelY:()=>{g.convolution.call(this,[-1,-2,-1,0,0,0,1,2,1])},sharpen:T=>{let p=T||1;g.convolution.call(this,[0,-1*p,0,-1*p,1+4*p,-1*p,0,-1*p,0])},emboss:T=>{let p=T||1;g.convolution.call(this,[-2*p,-1*p,0,-1*p,1,1*p,0,1*p,2*p])},blur:T=>{let p=T/7/l.width,b=T/7/l.height,k=u(H1);k&&(i.uniform2f(k.uniform.px,0,b),f(x.INTERMEDIATE),i.uniform2f(k.uniform.px,p,0),f())},pixelate:T=>{let p=T/l.width,b=T/l.height,k=u(B1);k&&(i.uniform2f(k.uniform.size,p,b),f())}};this.add=function(T){let p=Array.prototype.slice.call(arguments,1),b=g[T];s.push({func:b,args:p})},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 p=0;px.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=[U.sub(n[0],o[0]),U.sub(n[1],o[1]),U.sub(n[2],o[2])],i=[U.sub(r[0],o[0]),U.sub(r[1],o[1]),U.sub(r[2],o[2])],y=[U.mul(x[0],l),U.mul(x[1],l),U.mul(x[2],l)],d=U.stack([y[0],y[1],y[2]],2);c=U.reshape(d,[1,t.shape[0]||0,t.shape[1]||0,3]),U.dispose([...x,...i,...y,d])}else c=U.expandDims(t,0);return U.dispose([...n,...o,...r,n,t,e]),c}var U2=3840,R0=null,M0=null,y2=null,e0,ne={inputSum:0,cacheDiff:1,sumMethod:0,inputTensor:void 0};function e5(){ne.inputSum=0,ne.cacheDiff=1,ne.sumMethod=0,ne.inputTensor=void 0}function Ae(e,t){let n;if(R.browser)if(R.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")n=document.createElement("canvas"),n.width=e,n.height=t;else if(typeof navigator!="undefined"&&navigator.product==="ReactNative")if(typeof R.Canvas!="undefined")n=new R.Canvas(e,t);else if(typeof globalThis.Canvas!="undefined")n=new globalThis.Canvas(e,t);else throw new Error("canvas error: attempted to use canvas in react-native without canvas support installed");else throw new Error("canvas error: attempted to run in browser but DOM is not defined");else typeof R.Canvas!="undefined"?n=new R.Canvas(e,t):typeof globalThis.Canvas!="undefined"&&(n=new globalThis.Canvas(e,t));return n}function Y2(e,t){let n=t||Ae(e.width,e.height);return n.getContext("2d").drawImage(e,0,0),n}async function K2(e,t,n=!0){var y,d,m;if(!e)return t.debug&&h("input error: input is missing"),{tensor:null,canvas:null};if(!(e instanceof N.Tensor)&&!(typeof Image!="undefined"&&e instanceof Image)&&!(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 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 u=N.slice3d(e,[0,0,0],[-1,-1,3]);f=N.expandDims(u,0),N.dispose(u)}}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 u=N.cast(f,"float32");N.dispose(f),f=u}return{tensor:f,canvas:t.filter.return?M0:null}}if(typeof e.readyState!="undefined"&&e.readyState<=2)return t.debug&&h("input stream is not ready"),{tensor:null,canvas:R0};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&&h("cannot determine input dimensions"),{tensor:null,canvas:R0};let s=o,A=r;if(s>U2&&(s=U2,A=Math.trunc(s*r/o)),A>U2&&(A=U2,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");(!R0||R0.width!==s||R0.height!==A)&&(R0=Ae(s,A));let a=R0.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,R0.width,R0.height),a.setTransform(1,0,0,1,0,0)):a.drawImage(e,0,0,o,r,0,0,R0.width,R0.height),(!M0||R0.width!==M0.width||R0.height!==M0.height)&&(M0=Ae(R0.width,R0.height)),t.filter.enabled&&R.webgl.supported?(e0||(e0=R.browser?new V1:null),R.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),((m=e0.get())==null?void 0:m.length)>1?M0=e0.apply(R0):M0=e0.draw(R0)):(t.debug&&h("input process error: cannot initialize filters"),R.webgl.supported=!1,t.filter.enabled=!1,Y2(R0,M0))):(Y2(R0,M0),e0&&(e0=null),R.filter=!!e0),!n)return{tensor:null,canvas:M0};if(!M0)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(R.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((!y2||M0.width!==y2.width||M0.height!==y2.height)&&(y2=Ae(M0.width,M0.height)),N.browser&&R.browser)t.backend==="webgl"||t.backend==="humangl"||t.backend==="webgpu"?l=N.browser.fromPixels(M0):(y2=Y2(M0),l=N.browser.fromPixels(y2));else{let g=Y2(M0).getContext("2d").getImageData(0,0,s,A);c=g.data.length/s/A;let T=new Uint8Array(g.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 X2(x):N.expandDims(x,0);if(N.dispose([l,x]),t.filter.autoBrightness){let f=N.max(i),u=await f.data();t.filter.brightness=u[0]>1?1-u[0]/255:1-u[0],N.dispose(f)}return{tensor:i,canvas:t.filter.return?M0:null}}async function Z1(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(!ne.inputTensor)ne.inputTensor=N.clone(t);else if(ne.inputTensor.shape[1]!==t.shape[1]||ne.inputTensor.shape[2]!==t.shape[2])N.dispose(ne.inputTensor),ne.inputTensor=N.clone(t);else{let o={};o.diff=N.sub(t,ne.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([ne.inputTensor,o.diff,o.squared,o.sum]),ne.inputTensor=N.clone(t),n=s<=(e.cacheSensitivity||0)}return n}async function q1(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=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 j2,I2,N2,S2=class{constructor(){w(this,"browser");w(this,"node");w(this,"worker");w(this,"platform","");w(this,"agent","");w(this,"backends",[]);w(this,"initial");w(this,"filter");w(this,"tfjs");w(this,"offscreen");w(this,"perfadd",!1);w(this,"tensorflow",{version:void 0,gpu:void 0});w(this,"wasm",{supported:void 0,backend:void 0,simd:void 0,multithread:void 0});w(this,"webgl",{supported:void 0,backend:void 0,version:void 0,renderer:void 0,shader:void 0,vendor:void 0});w(this,"webgpu",{supported:void 0,backend:void 0,adapter:void 0});w(this,"cpu",{model:void 0,flags:[]});w(this,"kernels",[]);ue(this,j2,void 0);ue(this,I2,void 0);ue(this,N2,void 0);if(this.browser=typeof navigator!="undefined"&&typeof navigator.appVersion!="undefined",this.node=typeof process!="undefined"&&typeof process.versions!="undefined"&&typeof process.versions.node!="undefined",this.tfjs={version:W0.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"&&typeof navigator.userAgent!="undefined"){let t=navigator.userAgent||"",n=t.match(/\(([^()]+)\)/g);if(n!=null&&n[0]){let o=n[0].match(/\(([^()]+)\)/g);this.platform=o!=null&&o[0]?o[0].replace(/\(|\)/g,""):"",this.agent=t.replace(n[0],""),this.platform[1]&&(this.agent=this.agent.replace(n[1],"")),this.agent=this.agent.replace(/ /g," ")}}else typeof process!="undefined"&&(this.platform=`${process.platform} ${process.arch}`,this.agent=`NodeJS ${process.version}`)}get Canvas(){return Y0(this,j2)}set Canvas(t){Re(this,j2,t),globalThis.Canvas=t}get Image(){return Y0(this,I2)}set Image(t){Re(this,I2,t),globalThis.Image=t}get ImageData(){return Y0(this,N2)}set ImageData(t){Re(this,N2,t),globalThis.ImageData=t}async updateBackend(){this.backends=Object.keys(W0.engine().registryFactory);try{this.tensorflow={version:W0.backend().binding?W0.backend().binding.TF_Version:void 0,gpu:W0.backend().binding?W0.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 W0.env().getAsync("WASM_HAS_SIMD_SUPPORT"),this.wasm.multithread=await W0.env().getAsync("WASM_HAS_MULTITHREAD_SUPPORT"));let t=Ae(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!="undefined"&&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=W0.getKernelsForBackend(W0.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})}};j2=new WeakMap,I2=new WeakMap,N2=new WeakMap;var R=new S2;var Q2=class{constructor(){w(this,"config");w(this,"element");w(this,"stream");w(this,"devices",[]);w(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});w(this,"start",async t=>{var r,s;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 A=document.getElementById(t.element);if(A&&A instanceof HTMLVideoElement)this.element=A;else return this.config.debug&&h("webcam","cannot get dom element",t.element),`webcam error: cannot get dom element: ${t.element}`}else if(t.element instanceof HTMLVideoElement)this.element=t.element;else return this.config.debug&&h("webcam","unknown dom element",t.element),`webcam error: unknown dom element: ${t.element}`;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"}};if(((r=this.config)==null?void 0:r.width)>0&&(n.video.width={ideal:this.config.width}),((s=this.config)==null?void 0:s.height)>0&&(n.video.height={ideal:this.config.height}),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))return this.config.debug&&h("webcam error","no devices"),"webcam error: no devices";try{this.stream=await navigator.mediaDevices.getUserMedia(n)}catch(A){return h("webcam",A),`webcam error: ${A}`}return this.stream?(this.element.srcObject=this.stream,await new Promise(A=>{this.element?this.element.onloadeddata=()=>A(!0):A(!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}),`webcam: ${this.label}`):(this.config.debug&&h("webcam error","no stream"),"webcam error no stream")});w(this,"pause",()=>{this.element&&this.element.pause()});w(this,"play",async()=>{this.element&&await this.element.play()});w(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 f2=V(G());var t5={};ze(t5,{"affectnet-mobilenet":()=>br,age:()=>gr,"anti-spoofing":()=>_r,antispoof:()=>ar,blazeface:()=>ir,"blazeface-back":()=>Tr,"blazeface-front":()=>vr,"blazepose-detector":()=>Rr,"blazepose-full":()=>Mr,"blazepose-heavy":()=>Pr,"blazepose-lite":()=>kr,centernet:()=>lr,default:()=>ds,efficientpose:()=>wr,"efficientpose-i-lite":()=>$r,"efficientpose-ii-lite":()=>es,"efficientpose-iv":()=>ts,emotion:()=>cr,faceboxes:()=>Er,facemesh:()=>dr,"facemesh-attention":()=>Sr,"facemesh-attention-pinto":()=>zr,"facemesh-detection-full":()=>jr,"facemesh-detection-short":()=>Ir,faceres:()=>xr,"faceres-deep":()=>Nr,gear:()=>Cr,"gear-e1":()=>Or,"gear-e2":()=>Lr,gender:()=>Dr,"gender-ssrnet-imdb":()=>Wr,handdetect:()=>Fr,"handlandmark-full":()=>Br,"handlandmark-lite":()=>yr,"handlandmark-sparse":()=>Hr,handskeleton:()=>Gr,handtrack:()=>fr,"insightface-efficientnet-b0":()=>ns,"insightface-ghostnet-strides1":()=>os,"insightface-ghostnet-strides2":()=>rs,"insightface-mobilenet-emore":()=>ss,"insightface-mobilenet-swish":()=>As,iris:()=>mr,liveness:()=>pr,meet:()=>Vr,mobileface:()=>Zr,mobilefacenet:()=>qr,models:()=>ur,"movenet-lightning":()=>hr,"movenet-multipose":()=>Xr,"movenet-thunder":()=>Ur,nanodet:()=>Yr,"nanodet-e":()=>as,"nanodet-g":()=>is,"nanodet-m":()=>ls,"nanodet-t":()=>cs,posenet:()=>Kr,rvm:()=>Jr,selfie:()=>Qr});var ar=853098,ir=538928,lr=4030290,cr=820516,dr=1477958,xr=6978814,yr=2023432,fr=2964837,mr=2599092,pr=592976,ur=0,hr=4650216,br=6920630,gr=161240,Tr=538928,vr=402048,Rr=5928856,Mr=6339202,Pr=27502466,kr=2726402,wr=5651240,Er=2013002,zr=2387598,Sr=2382414,jr=1026192,Ir=201268,Nr=13957620,Or=112438,Lr=112438,Cr=1498916,Wr=161236,Dr=201808,Fr=3515612,Br=5431368,Hr=5286322,Gr=5502280,Vr=372228,Zr=2183192,qr=5171976,Xr=9448838,Ur=12477112,Yr=7574558,Kr=5032780,Jr=3739355,Qr=212886,_r=853098,$r=2269064,es=5651240,ts=25643252,ns=13013224,os=8093408,rs=8049584,ss=6938536,As=12168584,as=12319156,is=7574558,ls=1887474,cs=5294216,ds={antispoof:ar,blazeface:ir,centernet:lr,emotion:cr,facemesh:dr,faceres:xr,"handlandmark-lite":yr,handtrack:fr,iris:mr,liveness:pr,models:ur,"movenet-lightning":hr,"affectnet-mobilenet":br,age:gr,"blazeface-back":Tr,"blazeface-front":vr,"blazepose-detector":Rr,"blazepose-full":Mr,"blazepose-heavy":Pr,"blazepose-lite":kr,efficientpose:wr,faceboxes:Er,"facemesh-attention-pinto":zr,"facemesh-attention":Sr,"facemesh-detection-full":jr,"facemesh-detection-short":Ir,"faceres-deep":Nr,"gear-e1":Or,"gear-e2":Lr,gear:Cr,"gender-ssrnet-imdb":Wr,gender:Dr,handdetect:Fr,"handlandmark-full":Br,"handlandmark-sparse":Hr,handskeleton:Gr,meet:Vr,mobileface:Zr,mobilefacenet:qr,"movenet-multipose":Xr,"movenet-thunder":Ur,nanodet:Yr,posenet:Kr,rvm:Jr,selfie:Qr,"anti-spoofing":_r,"efficientpose-i-lite":$r,"efficientpose-ii-lite":es,"efficientpose-iv":ts,"insightface-efficientnet-b0":ns,"insightface-ghostnet-strides1":os,"insightface-ghostnet-strides2":rs,"insightface-mobilenet-emore":ss,"insightface-mobilenet-swish":As,"nanodet-e":as,"nanodet-g":is,"nanodet-m":ls,"nanodet-t":cs};var D0={cacheModels:!0,cacheSupported:!0,verbose:!0,debug:!1,modelBasePath:""},I0={};async function xs(e,t){return D0.debug&&h("load model fetch:",e,t),fetch(e,t)}function X1(e){D0.cacheModels=e.cacheModels,D0.verbose=e.debug,D0.modelBasePath=e.modelBasePath}async function O(e){var c,x,i,y;let t=C1(D0.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;I0[o]={name:o,sizeFromManifest:0,sizeLoadedWeights:0,sizeDesired:t5[o],inCache:!1,url:""},D0.cacheSupported=typeof indexedDB!="undefined";let s={};try{s=D0.cacheSupported&&D0.cacheModels?await f2.io.listModels():{}}catch(d){D0.cacheSupported=!1}I0[o].inCache=D0.cacheSupported&&D0.cacheModels&&Object.keys(s).includes(r),I0[o].url=I0[o].inCache?r:t;let A=typeof fetch=="undefined"?{}:{fetchFunc:(d,m)=>xs(d,m)},a=new f2.GraphModel(I0[o].url,A),l=!1;try{a.findIOHandler(),D0.debug&&h("model load handler:",a.handler)}catch(d){h("error finding model i/o handler:",t,d)}try{let d=await((c=a.handler)==null?void 0:c.load())||null;I0[o].sizeFromManifest=((x=d==null?void 0:d.weightData)==null?void 0:x.byteLength)||0,d?a.loadSync(d):a=await f2.loadGraphModel(I0[o].inCache?r:t,A),I0[o].sizeLoadedWeights=((y=(i=a.artifacts)==null?void 0:i.weightData)==null?void 0:y.byteLength)||0,D0.verbose&&h("load:",{model:o,url:a.modelUrl,bytes:I0[o].sizeLoadedWeights}),l=!0}catch(d){h("error loading model:",t,d)}if(l&&D0.cacheModels&&D0.cacheSupported&&!I0[o].inCache)try{let d=await a.save(r);D0.debug&&h("model saved:",r,d)}catch(d){h("error saving model:",t,d)}return a}var n5="3.2.2";var S=V(G());var u0=V(G());var o0={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 ms(){let e=o0.gl;e&&(o0.extensions=e.getSupportedExtensions())}function U1(e){var t;if(e.config.backend==="humangl"&&(o0.name in u0.engine().registry&&!((t=o0==null?void 0:o0.gl)!=null&&t.getParameter(o0.gl.VERSION))&&(h("humangl error: backend invalid context"),e.models.reset()),!u0.findBackend(o0.name))){try{o0.canvas=Ae(100,100)}catch(r){h("humangl error: cannot create canvas:",r);return}try{if(o0.gl=o0.canvas.getContext("webgl2",o0.webGLattr),!o0.gl){h("humangl error: cannot get webgl context");return}if(!o0.gl.getParameter(o0.gl.VERSION).includes("2.0")){h("backend override: using fallback webgl backend as webgl 2.0 is not detected"),e.config.backend="webgl";return}o0.canvas&&(o0.canvas.addEventListener("webglcontextlost",s=>{throw h("humangl error:",s.type),h("possible browser memory leak using webgl or conflict with multiple backend registrations"),e.emit("error"),new Error("backend error: webgl context lost")}),o0.canvas.addEventListener("webglcontextrestored",s=>{h("humangl error: context restored:",s)}),o0.canvas.addEventListener("webglcontextcreationerror",s=>{h("humangl error: context create:",s)}))}catch(r){h("humangl error: cannot get webgl context:",r);return}try{u0.setWebGLContext(2,o0.gl)}catch(r){h("humangl error: cannot set webgl context:",r);return}try{let r=new u0.GPGPUContext(o0.gl);u0.registerBackend(o0.name,()=>new u0.MathBackendWebGL(r),o0.priority)}catch(r){h("humangl error: cannot register webgl backend:",r);return}try{u0.getKernelsForBackend("webgl").forEach(s=>{let A={...s,backendName:o0.name};u0.registerKernel(A)})}catch(r){h("humangl error: cannot update webgl backend registration:",r);return}try{u0.env().flagRegistry.WEBGL_VERSION&&u0.env().set("WEBGL_VERSION",2)}catch(r){h("humangl error: cannot set WebGL backend flags:",r);return}ms();let n=u0.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,o0.gl)}}var Se=V(G()),C={tf255:255,tf1:1,tf2:2,tf05:.5,tf127:127.5,rgb:[.2989,.587,.114]};function Y1(){C.tf255=Se.scalar(255,"float32"),C.tf1=Se.scalar(1,"float32"),C.tf2=Se.scalar(2,"float32"),C.tf05=Se.scalar(.5,"float32"),C.tf127=Se.scalar(127.5,"float32"),C.rgb=Se.tensor1d([.2989,.587,.114],"float32")}async function hs(){var e;return await R.updateBackend(),(e=R.tensorflow)!=null&&e.version?"tensorflow":R.webgpu.supported&&R.webgpu.backend?"webgpu":R.webgl.supported&&R.webgl.backend?"webgl":R.wasm.supported&&R.wasm.backend?"wasm":"cpu"}function bs(e){let t=[];if(!R.kernels.includes("mod")){let n={kernelName:"Mod",backendName:S.getBackend(),kernelFunc:o=>S.tidy(()=>S.sub(o.inputs.a,S.mul(S.div(o.inputs.a,o.inputs.b),o.inputs.b)))};S.registerKernel(n),R.kernels.push("mod"),t.push("mod")}if(!R.kernels.includes("floormod")){let n={kernelName:"FloorMod",backendName:S.getBackend(),kernelFunc:o=>S.tidy(()=>S.add(S.mul(S.floorDiv(o.inputs.a,o.inputs.b),o.inputs.b),S.mod(o.inputs.a,o.inputs.b)))};S.registerKernel(n),R.kernels.push("floormod"),t.push("floormod")}if(!R.kernels.includes("rotatewithoffset")&&e.softwareKernels){let n={kernelName:"RotateWithOffset",backendName:S.getBackend(),kernelFunc:o=>S.tidy(()=>{let r=S.getBackend();S.setBackend("cpu");let s=S.image.rotateWithOffset(o.inputs.image,o.attrs.radians,o.attrs.fillValue,o.attrs.center);return S.setBackend(r),s})};S.registerKernel(n),R.kernels.push("rotatewithoffset"),t.push("rotatewithoffset")}t.length>0&&e.debug&&h("registered kernels:",t)}var K1={};async function O2(e,t=!1){var n,o;if(e.state="backend",((n=e.config.backend)==null?void 0:n.length)===0&&(e.config.backend=await hs()),t||R.initial||e.config.backend&&e.config.backend.length>0&&S.getBackend()!==e.config.backend){let r=v();if(e.config.backend&&e.config.backend.length>0){typeof window=="undefined"&&typeof WorkerGlobalScope!="undefined"&&e.config.debug&&e.config.debug&&h("running inside web worker"),typeof navigator!="undefined"&&((o=navigator==null?void 0:navigator.userAgent)!=null&&o.toLowerCase().includes("electron"))&&e.config.debug&&h("running inside electron");let s=Object.keys(S.engine().registryFactory);if(e.config.backend==="humangl"&&!s.includes("humangl")&&(U1(e),s=Object.keys(S.engine().registryFactory)),e.config.debug&&h("available backends:",s),R.browser&&!R.node&&e.config.backend==="tensorflow"&&s.includes("webgl")&&(e.config.debug&&h("override: backend set to tensorflow while running in browser"),e.config.backend="webgl"),R.node&&!R.browser&&(e.config.backend==="webgl"||e.config.backend==="humangl")&&s.includes("tensorflow")&&(e.config.debug&&h(`override: backend set to ${e.config.backend} while running in nodejs`),e.config.backend="tensorflow"),R.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)}}if(s.includes(e.config.backend)||(h(`error: backend ${e.config.backend} not found in registry`),e.config.backend=R.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(S.env().flagRegistry.CANVAS2D_WILL_READ_FREQUENTLY&&S.env().set("CANVAS2D_WILL_READ_FREQUENTLY",!0),e.config.debug&&h("wasm path:",e.config.wasmPath),typeof S.setWasmPaths!="undefined")S.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 S.env().getAsync("WASM_HAS_MULTITHREAD_SUPPORT"),a=await S.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(l){h("wasm detection failed")}}try{await S.setBackend(e.config.backend),await S.ready()}catch(A){return h("error: cannot set backend:",e.config.backend,A),!1}e.config.debug&&(K1=JSON.parse(JSON.stringify(S.env().flags)))}if((S.getBackend()==="humangl"||S.getBackend()==="webgl")&&(S.env().flagRegistry.WEBGL_USE_SHAPES_UNIFORMS&&S.env().set("WEBGL_USE_SHAPES_UNIFORMS",!0),S.env().flagRegistry.WEBGL_EXP_CONV&&S.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),S.env().set("WEBGL_DELETE_TEXTURE_THRESHOLD",0))),S.getBackend(),e.config.debug){let s=S.env().flags,A={};for(let a of Object.keys(s))K1[a]!==s[a]&&(A[a]=s[a]);e.config.debug&&Object.keys(A).length>0&&h("backend:",S.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))S.env().set(s,A)}S.enableProdMode(),Y1(),e.performance.initBackend=Math.trunc(v()-r),e.config.backend=S.getBackend(),await R.updateBackend(),bs(e.config)}return!0}function _2(e,t){for(let n of e){let o={kernelName:n,backendName:t.backend,kernelFunc:r=>{var s;return t.debug&&h("kernelFunc",n,t.backend,r),(s=r==null?void 0:r.inputs)==null?void 0:s.info}};S.registerKernel(o)}R.kernels=S.getKernelsForBackend(S.getBackend()).map(n=>n.kernelName.toLowerCase())}var rt={};ze(rt,{all:()=>Js,body:()=>et,canvas:()=>Ks,face:()=>$2,gesture:()=>ot,hand:()=>tt,init:()=>l5,object:()=>nt,options:()=>f0,person:()=>Ys});var oe=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",{willReadFrequently:!0});if(!t)h("draw error: cannot get canvas context");else return t}return null},Je=e=>Math.round(e*180/Math.PI),Y=(e,t,n)=>e.replace(t,typeof n=="number"?n.toFixed(1):n),Qe=(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 re(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 he(e,t,n,o,r){e.fillStyle=Qe(o,r),e.beginPath(),e.arc(t,n,r.pointSize,0,2*Math.PI),e.fill()}function be(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 o5(e,t,n){if(!(t.length<2)){e.beginPath(),e.moveTo(t[0][0],t[0][1]);for(let o of t)e.strokeStyle=Qe(o[2]||0,n),e.lineTo(Math.trunc(o[0]),Math.trunc(o[1]));e.stroke(),n.fillPolygons&&(e.closePath(),e.fill())}}function Q1(e,t,n){if(!(t.length<2)){if(e.lineWidth=n.lineWidth,!n.useCurves||t.length<=2){o5(e,t,n);return}e.moveTo(t[0][0],t[0][1]);for(let o=0;oL2[e]),Ga=Ts.map(e=>L2[e]),Va=vs.map(e=>L2[e]);function je(e){let t=e.map(n=>n[0]);return t.push(e[e.length-1][1]),t}var Rs=[[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]],ks=[[474,475],[475,476],[476,477],[477,474]],ws=[[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]],Es=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],zs=[[469,470],[470,471],[471,472],[472,469]],Ss=[[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]],Za={lips:je(Rs),leftEye:je(Ms),leftEyebrow:je(Ps),leftIris:je(ks),rightEye:je(ws),rightEyebrow:je(Es),rightIris:je(zs),faceOval:je(Ss)};var js=[[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]],Is=[[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]],Ns=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],Os=[[474,475],[475,476],[476,477],[477,474]],Ls=[[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]],Cs=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],Ws=[[469,470],[470,471],[471,472],[472,469]],Ds=[[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 Ie(e){let t=e.map(n=>n[0]);return t.push(e[e.length-1][1]),t}var Fs={lips:Ie(js),leftEye:Ie(Is),leftEyebrow:Ie(Ns),leftIris:Ie(Os),rightEye:Ie(Ls),rightEyebrow:Ie(Cs),rightIris:Ie(Ws),faceOval:Ie(Ds)},Bs=Object.entries(Fs).map(([e,t])=>t.map(n=>[n,e])).flat(),qa=new Map(Bs),C2=[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],e2=[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],t2=[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 X;function Hs(e,t){var o,r,s,A,a,l,c,x,i;if(!X.drawLabels||((o=X.faceLabels)==null?void 0:o.length)===0)return;let n=X.faceLabels.slice();if(n=Y(n,"[id]",e.id.toFixed(0)),e.score&&(n=Y(n,"[score]",100*e.score)),e.gender&&(n=Y(n,"[gender]",e.gender)),e.genderScore&&(n=Y(n,"[genderScore]",100*e.genderScore)),e.age&&(n=Y(n,"[age]",e.age)),e.distance&&(n=Y(n,"[distance]",100*e.distance)),e.real&&(n=Y(n,"[real]",100*e.real)),e.live&&(n=Y(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=Y(n,"[emotions]",y.join(" "))}(s=(r=e.rotation)==null?void 0:r.angle)!=null&&s.roll&&(n=Y(n,"[roll]",Je(e.rotation.angle.roll))),(a=(A=e.rotation)==null?void 0:A.angle)!=null&&a.yaw&&(n=Y(n,"[yaw]",Je(e.rotation.angle.yaw))),(c=(l=e.rotation)==null?void 0:l.angle)!=null&&c.pitch&&(n=Y(n,"[pitch]",Je(e.rotation.angle.pitch))),(i=(x=e.rotation)==null?void 0:x.gaze)!=null&&i.bearing&&(n=Y(n,"[gaze]",Je(e.rotation.gaze.bearing))),re(t,n,e.box[0],e.box[1],X)}function Gs(e,t){var n,o,r,s;if((n=e.annotations)!=null&&n.leftEyeIris&&((o=e.annotations)!=null&&o.leftEyeIris[0])){t.strokeStyle=X.useDepth?"rgba(255, 200, 255, 0.3)":X.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(),X.fillPolygons&&(t.fillStyle=X.useDepth?"rgba(255, 255, 200, 0.3)":X.color,t.fill())}if((r=e.annotations)!=null&&r.rightEyeIris&&((s=e.annotations)!=null&&s.rightEyeIris[0])){t.strokeStyle=X.useDepth?"rgba(255, 200, 255, 0.3)":X.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(),X.fillPolygons&&(t.fillStyle=X.useDepth?"rgba(255, 255, 200, 0.3)":X.color,t.fill())}}function Vs(e,t){var n;if(X.drawGaze&&((n=e.rotation)!=null&&n.angle)&&typeof Path2D!="undefined"){t.strokeStyle="pink";let o=e.box[0]+e.box[2]/2-e.box[3]*Je(e.rotation.angle.yaw)/90,r=e.box[1]+e.box[3]/2+e.box[2]*Je(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 rgb3 = tf.split(squeeze14, 3, 2); + const min2 = [tf.min(rgb3[0]), tf.min(rgb3[1]), tf.min(rgb3[2])]; + const max5 = [tf.max(rgb3[0]), tf.max(rgb3[1]), tf.max(rgb3[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(rgb3[0], min2[0]), tf.sub(rgb3[1], min2[1]), tf.sub(rgb3[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, stack5]); + } else { + final = tf.expandDims(squeeze14, 0); + } + tf.dispose([...rgb3, ...min2, ...max5, rgb3, 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") { + c = document.createElement("canvas"); + c.width = width; + c.height = height; + } else if (typeof navigator !== "undefined" && navigator.product === "ReactNative") { + if (typeof env.Canvas !== "undefined") c = new env.Canvas(width, height); + else if (typeof globalThis.Canvas !== "undefined") c = new globalThis.Canvas(width, height); + else throw new Error("canvas error: attempted to use canvas in react-native without canvas support installed"); + } else { + throw new Error("canvas error: attempted to run in browser but DOM is not defined"); + } + } + } 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 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 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 rgb3 = tf2.slice3d(input, [0, 0, 0], [-1, -1, 3]); + tensor7 = tf2.expandDims(rgb3, 0); + tf2.dispose(rgb3); + } + } 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 rgb3 = tf2.slice3d(pixels, [0, 0, 0], [-1, -1, 3]); + tf2.dispose(pixels); + pixels = rgb3; + } + 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 _canvas, _image, _imageData; +var Env = class { + constructor() { + /** Running in Browser */ + __publicField(this, "browser"); + /** Running in NodeJS */ + __publicField(this, "node"); + /** Running in WebWorker thread */ + __publicField(this, "worker"); + /** Detected platform */ + __publicField(this, "platform", ""); + /** Detected agent */ + __publicField(this, "agent", ""); + /** List of supported backends */ + __publicField(this, "backends", []); + /** Has any work been performed so far */ + __publicField(this, "initial"); + /** Are image filters supported? */ + __publicField(this, "filter"); + /** TFJS instance details */ + __publicField(this, "tfjs"); + /** Is offscreenCanvas supported? */ + __publicField(this, "offscreen"); + /** Are performance counter instant values or additive */ + __publicField(this, "perfadd", false); + /** If using tfjs-node get version of underlying tensorflow shared library and if gpu acceleration is enabled */ + __publicField(this, "tensorflow", { + version: void 0, + gpu: void 0 + }); + /** WASM detected capabilities */ + __publicField(this, "wasm", { + supported: void 0, + backend: void 0, + simd: void 0, + multithread: void 0 + }); + /** WebGL detected capabilities */ + __publicField(this, "webgl", { + supported: void 0, + backend: void 0, + version: void 0, + renderer: void 0, + shader: void 0, + vendor: void 0 + }); + /** WebGPU detected capabilities */ + __publicField(this, "webgpu", { + supported: void 0, + backend: void 0, + adapter: void 0 + }); + /** CPU info */ + __publicField(this, "cpu", { + model: void 0, + flags: [] + }); + /** List of supported kernels for current backend */ + __publicField(this, "kernels", []); + /** MonkeyPatch for Canvas/Image/ImageData */ + __privateAdd(this, _canvas); + __privateAdd(this, _image); + __privateAdd(this, _imageData); + this.browser = typeof navigator !== "undefined" && typeof navigator.appVersion !== "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" && typeof navigator.userAgent !== "undefined") { + const agent = navigator.userAgent || ""; + const raw = agent.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 = agent.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}`; + } + } + get Canvas() { + return __privateGet(this, _canvas); + } + set Canvas(val) { + __privateSet(this, _canvas, val); + globalThis.Canvas = val; + } + get Image() { + return __privateGet(this, _image); + } + // @ts-ignore monkey-patch; + set Image(val) { + __privateSet(this, _image, val); + globalThis.Image = val; + } + get ImageData() { + return __privateGet(this, _imageData); + } + // @ts-ignore monkey-patch; + set ImageData(val) { + __privateSet(this, _imageData, val); + globalThis.ImageData = val; + } + /** update backend information */ + 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 !== "undefined" && 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) { + } + } + /** update cpu information */ + 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; + } +}; +_canvas = new WeakMap(); +_image = new WeakMap(); +_imageData = new WeakMap(); +var env = new Env(); + +// src/util/webcam.ts +var WebCam = class { + constructor() { + // eslint-disable-line @typescript-eslint/no-extraneous-class + /** current webcam configuration */ + __publicField(this, "config"); + /** instance of dom element associated with webcam stream */ + __publicField(this, "element"); + /** active webcam stream */ + __publicField(this, "stream"); + /** enumerated video devices */ + __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; + }); + /** start method initializizes webcam stream and associates it with a dom video element */ + __publicField(this, "start", async (webcamConfig) => { + var _a, _b; + 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 `webcam error: cannot get dom element: ${webcamConfig.element}`; + } + } else if (webcamConfig.element instanceof HTMLVideoElement) { + this.element = webcamConfig.element; + } else { + if (this.config.debug) log("webcam", "unknown dom element", webcamConfig.element); + return `webcam error: unknown dom element: ${webcamConfig.element}`; + } + } else { + this.element = document.createElement("video"); + } + const requestedConstraints = { + audio: false, + video: { + facingMode: this.config.mode === "front" ? "user" : "environment", + // @ts-ignore // resizeMode is still not defined in tslib + resizeMode: this.config.crop ? "crop-and-scale" : "none" + } + }; + if (((_a = this.config) == null ? void 0 : _a.width) > 0) requestedConstraints.video.width = { ideal: this.config.width }; + if (((_b = this.config) == null ? void 0 : _b.height) > 0) requestedConstraints.video.height = { ideal: this.config.height }; + 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 error", "no devices"); + return "webcam error: no devices"; + } + try { + this.stream = await navigator.mediaDevices.getUserMedia(requestedConstraints); + } catch (err) { + log("webcam", err); + return `webcam error: ${err}`; + } + if (!this.stream) { + if (this.config.debug) log("webcam error", "no stream"); + return "webcam error no stream"; + } + 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 + }); + } + return `webcam: ${this.label}`; + }); + /** pause webcam video method */ + __publicField(this, "pause", () => { + if (this.element) this.element.pause(); + }); + /** play webcam video method */ + __publicField(this, "play", async () => { + if (this.element) await this.element.play(); + }); + /** stop method stops active webcam stream track and disconnects webcam */ + __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 active webcam stream track */ + get track() { + if (!this.stream) return void 0; + return this.stream.getVideoTracks()[0]; + } + /** get webcam capabilities */ + get capabilities() { + if (!this.track) return void 0; + return this.track.getCapabilities ? this.track.getCapabilities() : void 0; + } + /** get webcam constraints */ + get constraints() { + if (!this.track) return void 0; + return this.track.getConstraints ? this.track.getConstraints() : void 0; + } + /** get webcam settings */ + get settings() { + if (!this.stream) return void 0; + const track = this.stream.getVideoTracks()[0]; + return track.getSettings ? track.getSettings() : void 0; + } + /** get webcam label */ + get label() { + if (!this.track) return ""; + return this.track.label; + } + /** is webcam paused */ + get paused() { + var _a; + return ((_a = this.element) == null ? void 0 : _a.paused) || false; + } + /** webcam current width */ + get width() { + var _a; + return ((_a = this.element) == null ? void 0 : _a.videoWidth) || 0; + } + /** webcam current height */ + 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, { + "affectnet-mobilenet": () => affectnet_mobilenet, + age: () => age, + "anti-spoofing": () => anti_spoofing, + antispoof: () => antispoof, + blazeface: () => blazeface, + "blazeface-back": () => blazeface_back, + "blazeface-front": () => blazeface_front, + "blazepose-detector": () => blazepose_detector, + "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-pinto": () => facemesh_attention_pinto, + "facemesh-detection-full": () => facemesh_detection_full, + "facemesh-detection-short": () => facemesh_detection_short, + faceres: () => faceres, + "faceres-deep": () => faceres_deep, + gear: () => gear, + "gear-e1": () => gear_e1, + "gear-e2": () => gear_e2, + 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_lite = 2023432; +var handtrack = 2964837; +var iris = 2599092; +var liveness = 592976; +var models = 0; +var movenet_lightning = 4650216; +var affectnet_mobilenet = 6920630; +var age = 161240; +var blazeface_back = 538928; +var blazeface_front = 402048; +var blazepose_detector = 5928856; +var blazepose_full = 6339202; +var blazepose_heavy = 27502466; +var blazepose_lite = 2726402; +var efficientpose = 5651240; +var faceboxes = 2013002; +var facemesh_attention_pinto = 2387598; +var facemesh_attention = 2382414; +var facemesh_detection_full = 1026192; +var facemesh_detection_short = 201268; +var faceres_deep = 13957620; +var gear_e1 = 112438; +var gear_e2 = 112438; +var gear = 1498916; +var gender_ssrnet_imdb = 161236; +var gender = 201808; +var handdetect = 3515612; +var handlandmark_full = 5431368; +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 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-lite": handlandmark_lite, + handtrack, + iris, + liveness, + models, + "movenet-lightning": movenet_lightning, + "affectnet-mobilenet": affectnet_mobilenet, + age, + "blazeface-back": blazeface_back, + "blazeface-front": blazeface_front, + "blazepose-detector": blazepose_detector, + "blazepose-full": blazepose_full, + "blazepose-heavy": blazepose_heavy, + "blazepose-lite": blazepose_lite, + efficientpose, + faceboxes, + "facemesh-attention-pinto": facemesh_attention_pinto, + "facemesh-attention": facemesh_attention, + "facemesh-detection-full": facemesh_detection_full, + "facemesh-detection-short": facemesh_detection_short, + "faceres-deep": faceres_deep, + "gear-e1": gear_e1, + "gear-e2": gear_e2, + gear, + "gender-ssrnet-imdb": gender_ssrnet_imdb, + gender, + handdetect, + "handlandmark-full": handlandmark_full, + "handlandmark-sparse": handlandmark_sparse, + handskeleton, + meet, + mobileface, + mobilefacenet, + "movenet-multipose": movenet_multipose, + "movenet-thunder": movenet_thunder, + nanodet, + posenet, + rvm, + selfie, + "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.3.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: { + // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.2 + alpha: false, + antialias: false, + premultipliedAlpha: false, + preserveDrawingBuffer: false, + depth: false, + stencil: false, + failIfMajorPerformanceCaveat: false, + // default=true + desynchronized: true + // default=undefined + } +}; +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() { + var _a; + await env.updateBackend(); + if ((_a = env.tensorflow) == null ? void 0 : _a.version) 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, _b; + 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 (typeof navigator !== "undefined" && ((_b = navigator == null ? void 0 : navigator.userAgent) == null ? void 0 : _b.toLowerCase().includes("electron"))) { + if (instance.config.debug) log("running inside electron"); + } + 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 (env.browser && !env.node && instance.config.backend === "tensorflow" && available.includes("webgl")) { + if (instance.config.debug) log("override: backend set to tensorflow while running in browser"); + instance.config.backend = "webgl"; + } + if (env.node && !env.browser && (instance.config.backend === "webgl" || instance.config.backend === "humangl") && available.includes("tensorflow")) { + 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); + } + } + } + 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); + } + 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; + } + // setupFunc: () => { if (config.debug) log('kernelFunc', kernelName, config.backend); }, + // disposeFunc: () => { if (config.debug) log('kernelFunc', kernelName, config.backend); }, + }; + 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", { willReadFrequently: true }); + 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 rgb3 = Uint8ClampedArray.from([127 + 2 * z, 127 - 2 * z, 255]); + return `rgba(${rgb3[0]}, ${rgb3[1]}, ${rgb3[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)", + // 'lightblue' with light alpha channel + labelColor: "rgba(173, 216, 230, 1)", + // 'lightblue' with dark alpha channel + 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: [61, 185, 40, 39, 37, 0, 267, 269, 270, 409, 291], // 11 + // lipsLowerOuter: [146, 91, 181, 84, 17, 314, 405, 321, 375, 291], // 10 + // lipsUpperInner: [78, 191, 80, 81, 82, 13, 312, 311, 310, 415, 308], // 11 + // lipsLowerInner: [78, 95, 88, 178, 87, 14, 317, 402, 318, 324, 308], // 11 + 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], + // 7 + rightEyeLower0: [33, 7, 163, 144, 145, 153, 154, 155, 133], + // 9 + rightEyeUpper1: [247, 30, 29, 27, 28, 56, 190], + // 7 + rightEyeLower1: [130, 25, 110, 24, 23, 22, 26, 112, 243], + // 9 + rightEyeUpper2: [113, 225, 224, 223, 222, 221, 189], + // 7 + rightEyeLower2: [226, 31, 228, 229, 230, 231, 232, 233, 244], + // 9 + rightEyeLower3: [143, 111, 117, 118, 119, 120, 121, 128, 245], + // 9 + rightEyebrowUpper: [156, 70, 63, 105, 66, 107, 55, 193], + // 8 + rightEyebrowLower: [35, 124, 46, 53, 52, 65], + // 6 + rightEyeIris: [473, 474, 475, 476, 477], + // 5 + 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 = [ + // A mapping from facemesh model keypoints to iris model keypoints. + { key: "EyeUpper0", indices: [9, 10, 11, 12, 13, 14, 15] }, + // 7 x 3d + { key: "EyeUpper1", indices: [25, 26, 27, 28, 29, 30, 31] }, + // 7 x 3d + { key: "EyeUpper2", indices: [41, 42, 43, 44, 45, 46, 47] }, + // 7 x 3d + { key: "EyeLower0", indices: [0, 1, 2, 3, 4, 5, 6, 7, 8] }, + // 7 x 3d + { key: "EyeLower1", indices: [16, 17, 18, 19, 20, 21, 22, 23, 24] }, + // 9 x 3d + { key: "EyeLower2", indices: [32, 33, 34, 35, 36, 37, 38, 39, 40] }, + // 9 x 3d + { key: "EyeLower3", indices: [54, 55, 56, 57, 58, 59, 60, 61, 62] }, + // 9 x 3d + { key: "EyebrowUpper", indices: [63, 64, 65, 66, 67, 68, 69, 70] }, + // 8 x 3d + { key: "EyebrowLower", indices: [48, 49, 50, 51, 52, 53] } + // 6 x 3d +]; +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 = [ + /* cont */ + 127, + 234, + 132, + 58, + 172, + 150, + 149, + 148, + 152, + 377, + 378, + 379, + 397, + 288, + 361, + 454, + 356, + /* brows */ + 70, + 63, + 105, + 66, + 107, + 336, + 296, + 334, + 293, + 300, + /* nose */ + 168, + 6, + 195, + 4, + 98, + 97, + 2, + 326, + 327, + /* eyes */ + 33, + 160, + 158, + 133, + 153, + 144, + 362, + 385, + 387, + 263, + 373, + 380, + /* lip */ + 57, + 40, + 37, + 0, + 267, + 270, + 287, + 321, + 314, + 17, + 84, + 91, + /* mouth */ + 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, + // Lower outer. + 185, + 40, + 39, + 37, + 0, + 267, + 269, + 270, + 409, + // Upper outer(excluding corners). + 78, + 95, + 88, + 178, + 87, + 14, + 317, + 402, + 318, + 324, + 308, + // Lower inner. + 191, + 80, + 81, + 82, + 13, + 312, + 311, + 310, + 415, + // Upper inner(excluding corners). + 76, + 77, + 90, + 180, + 85, + 16, + 315, + 404, + 320, + 307, + 306, + // Lower semi - outer. + 184, + 74, + 73, + 72, + 11, + 302, + 303, + 304, + 408, + // Upper semi - outer(excluding corners). + 62, + 96, + 89, + 179, + 86, + 15, + 316, + 403, + 319, + 325, + 292, + // Lower semi - inner. + 183, + 42, + 41, + 38, + 12, + 268, + 271, + 272, + 407 + // Upper semi - inner(excluding corners). +]; +var LANDMARKS_REFINEMENT_LEFT_EYE_CONFIG = [ + 33, + 7, + 163, + 144, + 145, + 153, + 154, + 155, + 133, + // Lower contour. + 246, + 161, + 160, + 159, + 158, + 157, + 173, + // upper contour (excluding corners). + 130, + 25, + 110, + 24, + 23, + 22, + 26, + 112, + 243, + // Halo x2 lower contour. + 247, + 30, + 29, + 27, + 28, + 56, + 190, + // Halo x2 upper contour (excluding corners). + 226, + 31, + 228, + 229, + 230, + 231, + 232, + 233, + 244, + // Halo x3 lower contour. + 113, + 225, + 224, + 223, + 222, + 221, + 189, + // Halo x3 upper contour (excluding corners). + 35, + 124, + 46, + 53, + 52, + 65, + // Halo x4 upper contour (no lower because of mesh structure) or eyebrow inner contour. + 143, + 111, + 117, + 118, + 119, + 120, + 121, + 128, + 245, + // Halo x5 lower contour. + 156, + 70, + 63, + 105, + 66, + 107, + 55, + 193 + // Halo x5 upper contour (excluding corners) or eyebrow outer contour. +]; +var LANDMARKS_REFINEMENT_RIGHT_EYE_CONFIG = [ + 263, + 249, + 390, + 373, + 374, + 380, + 381, + 382, + 362, + // Lower contour. + 466, + 388, + 387, + 386, + 385, + 384, + 398, + // Upper contour (excluding corners). + 359, + 255, + 339, + 254, + 253, + 252, + 256, + 341, + 463, + // Halo x2 lower contour. + 467, + 260, + 259, + 257, + 258, + 286, + 414, + // Halo x2 upper contour (excluding corners). + 446, + 261, + 448, + 449, + 450, + 451, + 452, + 453, + 464, + // Halo x3 lower contour. + 342, + 445, + 444, + 443, + 442, + 441, + 413, + // Halo x3 upper contour (excluding corners). + 265, + 353, + 276, + 283, + 282, + 295, + // Halo x4 upper contour (no lower because of mesh structure) or/ eyebrow inner contour. + 372, + 340, + 346, + 347, + 348, + 349, + 350, + 357, + 465, + // Halo x5 lower contour. + 383, + 300, + 293, + 334, + 296, + 336, + 285, + 417 + // Halo x5 upper contour (excluding corners) or eyebrow outer contour. +]; + +// 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(); + l = replace(l, "[id]", f.id.toFixed(0)); + 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 Zs(e,t){var n;if(X.drawGaze&&((n=e.rotation)!=null&&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]];r5(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]];r5(t,[e.annotations.rightEyeIris[0][0],e.annotations.rightEyeIris[0][1]],[r[0],r[1]],4)}}function qs(e,t){if(X.drawPolygons&&e.mesh.length>=468){t.lineWidth=1;for(let n=0;n<$e.length/3;n++){let o=[$e[n*3+0],$e[n*3+1],$e[n*3+2]].map(r=>e.mesh[r]);o5(t,o,X)}Gs(e,t)}}function Xs(e,t){if(X.drawPoints)if((e==null?void 0:e.mesh.length)>=468)for(let n=0;n0&&(Xs(r,o),qs(r,o),Vs(r,o),Zs(r,o))}}function et(e,t,n){var s,A;let o=a0(f0,n);if(!t||!e)return;let r=oe(e);if(r){r.lineJoin="round";for(let a=0;a0)){let l=o.bodyLabels.slice();l=Y(l,"[id]",t[a].id.toFixed(0)),l=Y(l,"[score]",100*t[a].score),re(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=Y(c,"[label]",l.part),c=Y(c,"[score]",100*l.score),re(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)Q1(r,c,o)}}}function tt(e,t,n){var s,A;let o=a0(f0,n);if(!t||!e)return;let r=oe(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,be(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=Y(l,"[id]",a.id.toFixed(0)),l=Y(l,"[label]",a.label),l=Y(l,"[score]",100*a.score),re(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=Qe(l[2],o),he(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=Y(x,"[label]",l),re(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 nt(e,t,n){var s;let o=a0(f0,n);if(!t||!e)return;let r=oe(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,be(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=Y(a,"[id]",A.id.toFixed(0)),a=Y(a,"[label]",A.label),a=Y(a,"[score]",100*A.score),re(r,a,A.box[0],A.box[1],o)}r.stroke()}}}function ot(e,t,n){var r;let o=a0(f0,n);if(!(!t||!e)&&o.drawGestures&&((r=o.gestureLabels)==null?void 0:r.length)>0){let s=oe(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=Y(i,"[where]",l[0]),i=Y(i,"[who]",x),i=Y(i,"[what]",c[1]),re(s,i,8,2+A*o.lineHeight,o),A+=1}}}}var Ne={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) { + if ((f == null ? void 0 : 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); + } + } + } else { + for (const [k, v] of Object.entries((f == null ? void 0 : f.annotations) || {})) { + if (!(v == null ? void 0 : v[0])) continue; + const pt = v[0]; + point(ctx, pt[0], pt[1], 0, localOptions); + if (localOptions.drawLabels) labels(ctx, k, pt[0], pt[1], 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, "[id]", result[i].id.toFixed(0)); + 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, "[id]", h.id.toFixed(0)); + 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, "[id]", h.id.toFixed(0)); + 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 +6430,7430 @@ 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 i5=0;function Ys(e,t,n){let o=a0(f0,n);if(!t||!e)return;let r=oe(e);if(r){r.lineJoin="round",r.font=o.font;for(let s=0;sd5,kpt:()=>c5});var c5=["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"],d5={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(G());var se,n2=224,e3,Qs=5,At=[8,16,32,32,32];function _s(){let e=[],t=0;for(;tn.x)),y:D.tensor1d(e.map(n=>n.y))}}async function t3(e){if(R.initial&&(se=null),!se&&e.body.detector&&e.body.detector.modelPath){se=await O(e.body.detector.modelPath);let t=se!=null&&se.executor?Object.values(se.modelSignature.inputs):void 0;n2=Array.isArray(t)?parseInt(t[0].tensorShape.dim[1].size):0}else e.debug&&se&&h("cached model:",se.modelUrl);return _s(),se}var $1=[5,5];function $s(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,n2),t.x),r=D.add(D.div(r,n2),t.y),s=D.mul(D.div(s,n2),$1[0]),A=D.mul(D.div(A,n2),$1[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 eA(e,t,n,o){var c,x;let r=[],s={};s.boxes=$s(e,e3),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],m=[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:m};r.push(f)}return Object.keys(s).forEach(i=>D.dispose(s[i])),r}async function n3(e,t,n){let o={};o.res=se==null?void 0:se.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 eA(o.boxes,o.logits,t,n);return Object.keys(o).forEach(s=>D.dispose(o[s])),r}function Oe(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 o3(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 at(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 Z0,y5=256,x5=Number.MAX_SAFE_INTEGER,tA={landmarks:["ld_3d","activation_segmentation","activation_heatmap","world_3d","output_poseflag"],detector:[]},lt=[],Le=[[0,0],[0,0],[0,0],[0,0]],r3=0,s3=e=>1-1/(1+Math.exp(e)),a3=e=>t3(e);async function i3(e){if(R.initial&&(Z0=null),Z0)e.debug&&h("cached model:",Z0.modelUrl);else{Z0=await O(e.body.modelPath);let t=Z0!=null&&Z0.executor?Object.values(Z0.modelSignature.inputs):void 0;y5=Array.isArray(t)?parseInt(t[0].tensorShape.dim[1].size):0}return Z0}function A3(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=q0.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];Le=[[0,0],a,l,[0,0]],o.pad=q0.pad(o.cropped||e,Le),o.resize=q0.image.resizeBilinear(o.pad,[t,t]),r=q0.div(o.resize,C.tf255)}else e.shape[1]!==t?(o.resize=q0.image.resizeBilinear(o.cropped||e,[t,t]),r=q0.div(o.resize,C.tf255)):r=q0.div(o.cropped||e,C.tf255);return Object.keys(o).forEach(a=>q0.dispose(o[a])),r}function nA(e,t,n){for(let o of e)o.position=[Math.trunc(o.position[0]*(t[0]+Le[2][0]+Le[2][1])/t[0]-Le[2][0]),Math.trunc(o.position[1]*(t[1]+Le[1][0]+Le[1][1])/t[1]-Le[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 oA(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 rA(e,t,n){if(!(Z0!=null&&Z0.executor))return null;let o={};[o.ld,o.segmentation,o.heatmap,o.world,o.poseflag]=Z0==null?void 0:Z0.execute(e,tA.landmarks);let r=(await o.poseflag.data())[0],s=await o.ld.data(),A=await o.world.data();Object.keys(o).forEach(m=>q0.dispose(o[m]));let a=[],l=5;for(let m=0;mm.position),i=Oe(x,[n[0],n[1]]),y={};for(let[m,f]of Object.entries(d5)){let u=[];for(let g=0;gb.part===f[g]),p=c.find(b=>b.part===f[g+1]);T&&p&&u.push([T.position,p.position])}y[m]=u}return{id:0,score:Math.trunc(100*r)/100,box:i.box,boxRaw:i.boxRaw,keypoints:c,annotations:y}}async function f5(e,t){var s,A,a;let n=[e.shape[2]||0,e.shape[1]||0],o=(t.body.skipTime||0)>v()-r3,r=x5<(t.body.skipFrames||0);if(t.skipAllowed&&o&&r&<!==null)x5++;else{let l=[];if((A=(s=t.body)==null?void 0:s.detector)!=null&&A.enabled){let c=A3(e,224);l=await n3(c,t,n),q0.dispose(c)}else l=[{box:[0,0,0,0],boxRaw:[0,0,1,1],score:0}];for(let c=0;cF0.dispose(o[c])),r}async function u5(e,t){if(!(X0!=null&&X0.executor))return[];let n=(t.object.skipTime||0)>v()-c3,o=p5<(t.object.skipFrames||0);return t.skipAllowed&&n&&o&&m5.length>0?(p5++,m5):(p5=0,new Promise(async r=>{let s=[e.shape[2]||0,e.shape[1]||0],A=F0.image.resizeBilinear(e,[o2,o2]),a=t.object.enabled?X0==null?void 0:X0.execute(A,["tower_0/detections"]):null;c3=v(),F0.dispose(A);let l=await sA(a,s,t);m5=l,r(l)}))}var J=V(G());var ct={};ze(ct,{connected:()=>b5,kpt:()=>h5});var h5=["head","neck","rightShoulder","rightElbow","rightWrist","chest","leftShoulder","leftElbow","leftWrist","bodyCenter","rightHip","rightKnee","rightAnkle","leftHip","leftKnee","leftAnkle"],b5={leftLeg:["leftHip","leftKnee","leftAnkle"],rightLeg:["rightHip","rightKnee","rightAnkle"],torso:["leftShoulder","rightShoulder","rightHip","leftHip","leftShoulder"],leftArm:["leftShoulder","leftElbow","leftWrist"],rightArm:["rightShoulder","rightElbow","rightWrist"],head:[]};var i0,y3=0,B0={id:0,keypoints:[],box:[0,0,0,0],boxRaw:[0,0,0,0],score:0,annotations:{}},g5=Number.MAX_SAFE_INTEGER;async function f3(e){return R.initial&&(i0=null),i0?e.debug&&h("cached model:",i0.modelUrl):i0=await O(e.body.modelPath),i0}async function AA(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 T5(e,t){if(!(i0!=null&&i0.executor)||!(i0!=null&&i0.inputs[0].shape))return[];let n=(t.body.skipTime||0)>v()-y3,o=g5<(t.body.skipFrames||0);return t.skipAllowed&&n&&o&&Object.keys(B0.keypoints).length>0?(g5++,[B0]):(g5=0,new Promise(async r=>{let s=J.tidy(()=>{var m,f;let i=J.image.resizeBilinear(e,[((m=i0==null?void 0:i0.inputs[0].shape)==null?void 0:m[2])||0,((f=i0==null?void 0:i0.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=i0==null?void 0:i0.execute(s)),y3=v(),J.dispose(s),A){B0.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)&&B0.keypoints.push({score:Math.round(100*u)/100,part:h5[d],positionRaw:[m/i0.inputs[0].shape[2],f/i0.inputs[0].shape[1]],position:[Math.round(e.shape[2]*m/i0.inputs[0].shape[2]),Math.round(e.shape[1]*f/i0.inputs[0].shape[1])]})}y.forEach(d=>J.dispose(d))}B0.score=B0.keypoints.reduce((i,y)=>y.score>i?y.score:i,0);let a=B0.keypoints.map(i=>i.position[0]),l=B0.keypoints.map(i=>i.position[1]);B0.box=[Math.min(...a),Math.min(...l),Math.max(...a)-Math.min(...a),Math.max(...l)-Math.min(...l)];let c=B0.keypoints.map(i=>i.positionRaw[0]),x=B0.keypoints.map(i=>i.positionRaw[1]);B0.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(b5)){let d=[];for(let m=0;mg.part===y[m]),u=B0.keypoints.find(g=>g.part===y[m+1]);f&&u&&f.score>(t.body.minConfidence||0)&&u.score>(t.body.minConfidence||0)&&d.push([f.position,u.position])}B0.annotations[i]=d}r([B0])}))}var l0=V(G());var De=V(G());var L=V(G());var Me=V(G());var p2=e=>[Math.abs(e.endPoint[0]-e.startPoint[0]),Math.abs(e.endPoint[1]-e.startPoint[1])],dt=e=>[e.startPoint[0]+(e.endPoint[0]-e.startPoint[0])/2,e.startPoint[1]+(e.endPoint[1]-e.startPoint[1])/2,1],xt=(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],yt=(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],h3=(e,t,n)=>{let o=[e.startPoint[0]*t[0],e.startPoint[1]*t[1]],r=[e.endPoint[0]*t[0],e.endPoint[1]*t[1]],s=e.landmarks.map(A=>[(A[0]+n[0])*t[0],(A[1]+n[1])*t[1]]);return{startPoint:o,endPoint:r,landmarks:s,confidence:e.confidence}},v5=(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=Me.image.cropAndResize(t,[s],[0],n),a=Me.div(A,C.tf255);return Me.dispose(A),a},ft=(e,t)=>{let n=dt(e),o=p2(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,size:o}},mt=e=>{let t=dt(e),n=p2(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,size:[Math.round(n[0]),Math.round(n[1])]}},b3=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}},R5=[[1,0,0],[0,1,0],[0,0,1]],aA=e=>e-2*Math.PI*Math.floor((e+Math.PI)/(2*Math.PI)),iA=(e,t)=>aA(Math.PI/2-Math.atan2(-(t[1]-e[1]),t[0]-e[0]));var p3=(e,t)=>[[1,0,e],[0,1,t],[0,0,1]],r2=(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=p3(t[0],t[1]),A=u3(s,r),a=p3(-t[0],-t[1]);return u3(A,a)},cA=e=>{let t=[[e[0][0],e[1][0]],[e[0][1],e[1][1]]],n=[e[0][2],e[1][2]],o=[-r2(t[0],n),-r2(t[1],n)];return[t[0].concat(o[0]),t[1].concat(o[1]),[0,0,1]]},dA=(e,t)=>[r2(e,t[0]),r2(e,t[1])];function T3(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?g3(n,[0,0]):R5,c=a?A.map(d=>[...dA(d,l),d[2]]):A,x=a?cA(o):R5,i=dt(t),y=[r2(i,x[0]),r2(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 R3(e,t,n,o){let r=t.landmarks.length>=s5.count?s5.symmetryLine:_e.symmetryLine,s=0,A=R5,a;if(e&&R.kernels.includes("rotatewithoffset"))if(s=iA(t.landmarks[r[0]],t.landmarks[r[1]]),s&&s!==0&&Math.abs(s)>.2){let c=dt(t),x=[c[0]/n.shape[2],c[1]/n.shape[1]],i=Me.image.rotateWithOffset(n,s,0,[x[0],x[1]]);A=g3(-s,c),a=v5(t,i,[o,o]),Me.dispose(i)}else a=v5(t,n,[o,o]);else a=v5(t,n,[o,o]);return[s,A,a]}var xA=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=xA(e),o=p2(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,xe,pt=null,Ce=0,u2=null,k3=()=>Ce;async function w3(e){var t;return R.initial&&(xe=null),xe?e.debug&&h("cached model:",xe.modelUrl):xe=await O((t=e.face.detector)==null?void 0:t.modelPath),Ce=xe.executor&&xe.inputs[0].shape?xe.inputs[0].shape[2]:256,u2=L.scalar(Ce,"int32"),pt=L.tensor2d(T3(Ce)),xe}function yA(e){if(!pt||!u2)return L.zeros([0,0]);let t={};t.boxStarts=L.slice(e,[0,1],[-1,2]),t.centers=L.add(t.boxStarts,pt),t.boxSizes=L.slice(e,[0,3],[-1,2]),t.boxSizesNormalized=L.div(t.boxSizes,u2),t.centersNormalized=L.div(t.centers,u2),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,u2),t.endNormalized=L.mul(t.ends,u2);let n=L.concat2d([t.startNormalized,t.endNormalized],1);return Object.keys(t).forEach(o=>L.dispose(t[o])),n}async function E3(e,t){var a,l,c,x,i,y,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,[Ce,Ce]),n.div=L.div(n.resized,C.tf127),n.normalized=L.sub(n.div,C.tf1);let o=xe==null?void 0:xe.execute(n.normalized);if(Array.isArray(o)&&o.length>2){let m=o.sort((f,u)=>f.size-u.size);n.concat384=L.concat([m[0],m[2]],2),n.concat512=L.concat([m[1],m[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=yA(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 m=0;m(((x=t.face.detector)==null?void 0:x.minConfidence)||0)){let u={};u.bbox=L.slice(n.boxes,[r[m],0],[1,-1]),u.slice=L.slice(n.batch,[r[m],P3-1],[1,-1]),u.squeeze=L.squeeze(u.slice),u.landmarks=L.reshape(u.squeeze,[P3,-1]);let g=await u.bbox.data(),T={startPoint:[g[0],g[1]],endPoint:[g[2],g[3]],landmarks:await u.landmarks.array(),confidence:f};u.anchor=L.slice(pt,[r[m],0],[1,2]);let p=await u.anchor.data(),b=h3(T,[(e.shape[2]||0)/Ce,(e.shape[1]||0)/Ce],p),k=ft(b,((i=t.face.detector)==null?void 0:i.scale)||1.4),P=mt(k);P.size[0]>(((y=t.face.detector)==null?void 0:y.minSize)||0)&&P.size[1]>(((d=t.face.detector)==null?void 0:d.minSize)||0)&&s.push(P),Object.keys(u).forEach(I=>L.dispose(u[I]))}}return Object.keys(n).forEach(m=>L.dispose(n[m])),s}var ye=V(G());var K0,We=0,P5=ae.leftEyeLower0,k5=ae.rightEyeLower0,h2={leftBounds:[P5[0],P5[P5.length-1]],rightBounds:[k5[0],k5[k5.length-1]]},b2={upperCenter:3,lowerCenter:4,index:71,numCoordinates:76};async function N3(e){var t,n;return R.initial&&(K0=null),K0?e.debug&&h("cached model:",K0.modelUrl):K0=await O((t=e.face.iris)==null?void 0:t.modelPath),We=K0!=null&&K0.executor&&((n=K0.inputs)!=null&&n[0].shape)?K0.inputs[0].shape[2]:0,We===-1&&(We=64),K0}function ut(e,t,n,o){for(let r=0;r{let t=e[h2.leftBounds[0]][2],n=e[h2.rightBounds[0]][2];return t-n},S3=(e,t,n,o,r,s=!1,A=2.3)=>{let a=mt(ft(b3([e[n],e[o]]),A)),l=p2(a),c=ye.image.cropAndResize(t,[[a.startPoint[1]/r,a.startPoint[0]/r,a.endPoint[1]/r,a.endPoint[0]/r]],[0],[We,We]);if(s&&R.kernels.includes("flipleftright")){let x=ye.image.flipLeftRight(c);ye.dispose(c),c=x}return{box:a,boxSize:l,crop:c}},j3=(e,t,n,o=!1)=>{let r=[];for(let s=0;s{let o=e[ae[`${n}EyeUpper0`][b2.upperCenter]][2],r=e[ae[`${n}EyeLower0`][b2.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 O3(e,t,n,o){var I,B;if(!(K0!=null&&K0.executor))return e;let{box:r,boxSize:s,crop:A}=S3(e,t,h2.leftBounds[0],h2.leftBounds[1],n,!0,((I=o.face.iris)==null?void 0:I.scale)||2.3),{box:a,boxSize:l,crop:c}=S3(e,t,h2.rightBounds[0],h2.rightBounds[1],n,!0,((B=o.face.iris)==null?void 0:B.scale)||2.3),x=ye.concat([A,c]);ye.dispose(A),ye.dispose(c);let i=K0.execute(x);ye.dispose(x);let y=await i.data();ye.dispose(i);let d=y.slice(0,b2.numCoordinates*3),{rawCoords:m,iris:f}=j3(d,r,s,!0),u=y.slice(b2.numCoordinates*3),{rawCoords:g,iris:T}=j3(u,a,l,!1),p=fA(e);Math.abs(p)<30?(ut(e,m,"left",null),ut(e,g,"right",null)):p<1?ut(e,m,"left",["EyeUpper0","EyeLower0"]):ut(e,g,"right",["EyeUpper0","EyeLower0"]);let b=I3(e,f,"left"),k=I3(e,T,"right");return e.concat(b).concat(k)}async function C3(e,t){var s,A,a,l,c,x,i,y,d,m;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((m=(d=t.filter(f=>f.size===142))==null?void 0:d[1])==null?void 0:m.data())};for(let f of Object.values(n))if(!f)return e;let o=e2.reduce((f,u)=>f+=e[u][2],0)/e2.length;for(let f=0;ff+=e[u][2],0)/t2.length;for(let f=0;fv()-ge.timestamp,o=ge.skipped<(((c=t.face.detector)==null?void 0:c.skipFrames)||0);!t.skipAllowed||!n||!o||ge.boxes.length===0?(ge.boxes=await E3(e,t),ge.timestamp=v(),ge.skipped=0):ge.skipped++;let r=[],s=[],A=0,a=W2;for(let T=0;T[I[0]/(e.shape[2]||0),I[1]/(e.shape[1]||0),(I[2]||0)/a]);for(let I of Object.keys(_e))P.annotations[I]=[P.mesh[_e[I]]]}else if(!r0)t.debug&&h("face mesh detection requested, but model is not loaded");else{if((d=t.face.attention)!=null&&d.enabled&&!R.kernels.includes("atan2"))return t.face.attention.enabled=!1,De.dispose(P.tensor),r;let I=r0.execute(P.tensor),_=await I.find(Z=>Z.shape[Z.shape.length-1]===1).data();if(P.faceScore=Math.round(100*_[0])/100,P.faceScore<(((m=t.face.detector)==null?void 0:m.minConfidence)||1)){if(p.confidence=P.faceScore,t.face.mesh.keepInvalid){P.box=xt(p,e),P.boxRaw=yt(p,e),P.size=p.size,P.score=P.boxScore,P.mesh=p.landmarks,P.meshRaw=P.mesh.map(Z=>[Z[0]/(e.shape[2]||1),Z[1]/(e.shape[1]||1),(Z[2]||0)/a]);for(let Z of Object.keys(_e))P.annotations[Z]=[P.mesh[_e[Z]]]}}else{let Z=I.find(n0=>n0.shape[n0.shape.length-1]===1404),$=De.reshape(Z,[-1,3]),A0=await $.array();De.dispose($),(f=t.face.attention)!=null&&f.enabled?A0=await C3(A0,I):(u=t.face.iris)!=null&&u.enabled&&(A0=await O3(A0,P.tensor,W2,t)),P.mesh=v3(A0,p,b,k,W2),P.meshRaw=P.mesh.map(n0=>[n0[0]/(e.shape[2]||0),n0[1]/(e.shape[1]||0),(n0[2]||0)/a]);for(let n0 of Object.keys(ae))P.annotations[n0]=ae[n0].map(j0=>P.mesh[j0]);P.score=P.faceScore;let t0={...M3(P.mesh,p),confidence:p.confidence,landmarks:p.landmarks,size:p.size};P.box=xt(t0,e),P.boxRaw=yt(t0,e),P.size=t0.size,s.push(t0)}De.dispose(I)}P.score>(((g=t.face.detector)==null?void 0:g.minConfidence)||1)?r.push(P):De.dispose(P.tensor)}return ge.boxes=s,r}async function D3(e){var t,n,o,r,s,A;return R.initial&&(r0=null),(t=e.face.attention)!=null&&t.enabled&&(r0!=null&&r0.signature)&&Object.keys(((n=r0==null?void 0:r0.signature)==null?void 0:n.outputs)||{}).length<6&&(r0=null),r0?e.debug&&h("cached model:",r0.modelUrl):(o=e.face.attention)!=null&&o.enabled?r0=await O(e.face.attention.modelPath):r0=await O((r=e.face.mesh)==null?void 0:r.modelPath),W2=r0.executor&&((s=r0==null?void 0:r0.inputs)!=null&&s[0].shape)?(A=r0==null?void 0:r0.inputs)==null?void 0:A[0].shape[2]:256,r0}var F3=$e,B3=L2;var J0=V(G());var z5=[],P0,ht=[],H3=0,G3=0,E5=Number.MAX_SAFE_INTEGER,S5=!1;async function V3(e){var t,n,o;return R.initial&&(P0=null),P0?e.debug&&h("cached model:",P0.modelUrl):(P0=await O((t=e.face.emotion)==null?void 0:t.modelPath),S5=((o=(n=P0==null?void 0:P0.inputs)==null?void 0:n[0].shape)==null?void 0:o[3])===3,S5?z5=["angry","disgust","fear","happy","neutral","sad","surprise"]:z5=["angry","disgust","fear","happy","sad","surprise","neutral"]),P0}async function j5(e,t,n,o){var A,a;if(!P0)return[];let r=E5<(((A=t.face.emotion)==null?void 0:A.skipFrames)||0),s=(((a=t.face.emotion)==null?void 0:a.skipTime)||0)>v()-G3;return t.skipAllowed&&s&&r&&H3===o&&ht[n]&&ht[n].length>0?(E5++,ht[n]):(E5=0,new Promise(async l=>{var x,i,y;let c=[];if((x=t.face.emotion)!=null&&x.enabled){let d={},m=P0!=null&&P0.inputs[0].shape?P0.inputs[0].shape[2]:0;if(((i=t.face.emotion)==null?void 0:i.crop)>0){let u=(y=t.face.emotion)==null?void 0:y.crop,g=[[u,u,1-u,1-u]];d.resize=J0.image.cropAndResize(e,g,[0],[m,m])}else d.resize=J0.image.resizeBilinear(e,[m,m],!1);S5?(d.mul=J0.mul(d.resize,255),d.normalize=J0.sub(d.mul,[103.939,116.779,123.68]),d.emotion=P0==null?void 0:P0.execute(d.normalize)):(d.channels=J0.mul(d.resize,C.rgb),d.grayscale=J0.sum(d.channels,3,!0),d.grayscaleSub=J0.sub(d.grayscale,C.tf05),d.grayscaleMul=J0.mul(d.grayscaleSub,C.tf2),d.emotion=P0==null?void 0:P0.execute(d.grayscaleMul)),G3=v();let f=await d.emotion.data();for(let u=0;u(t.face.emotion.minConfidence||0)&&c.push({score:Math.min(.99,Math.trunc(100*f[u])/100),emotion:z5[u]});c.sort((u,g)=>g.score-u.score),Object.keys(d).forEach(u=>J0.dispose(d[u]))}ht[n]=c,H3=o,l(c)}))}var ie=V(G());var k0,Fe=[],q3=0,X3=0,I5=Number.MAX_SAFE_INTEGER;async function U3(e){var t;return R.initial&&(k0=null),k0?e.debug&&h("cached model:",k0.modelUrl):k0=await O((t=e.face.description)==null?void 0:t.modelPath),k0}function pA(e,t){var s,A;let n=e.image||e.tensor||e;if(!(k0!=null&&k0.inputs[0].shape))return n;let o;if(((s=t.face.description)==null?void 0:s.crop)>0){let a=(A=t.face.description)==null?void 0:A.crop,l=[[a,a,1-a,1-a]];o=ie.image.cropAndResize(n,l,[0],[k0.inputs[0].shape[2],k0.inputs[0].shape[1]])}else o=ie.image.resizeBilinear(n,[k0.inputs[0].shape[2],k0.inputs[0].shape[1]],!1);let r=ie.mul(o,C.tf255);return ie.dispose(o),r}async function N5(e,t,n,o){var a,l,c,x;let r={age:0,gender:"unknown",genderScore:0,descriptor:[]};if(!(k0!=null&&k0.executor))return r;let s=I5<(((a=t.face.description)==null?void 0:a.skipFrames)||0),A=(((l=t.face.description)==null?void 0:l.skipTime)||0)>v()-q3;return t.skipAllowed&&s&&A&&X3===o&&((c=Fe==null?void 0:Fe[n])==null?void 0:c.age)>0&&((x=Fe==null?void 0:Fe[n])==null?void 0:x.genderScore)>0?(I5++,Fe[n]):(I5=0,new Promise(async i=>{var y;if((y=t.face.description)!=null&&y.enabled){let d=pA(e,t),m=k0==null?void 0:k0.execute(d);q3=v(),ie.dispose(d);let u=await m.find(B=>B.shape[1]===1).data(),g=Math.trunc(200*Math.abs(u[0]-.5))/100;g>(t.face.description.minConfidence||0)&&(r.gender=u[0]<=.5?"female":"male",r.genderScore=Math.min(.99,g));let T=ie.argMax(m.find(B=>B.shape[1]===100),1),p=(await T.data())[0];ie.dispose(T);let k=await m.find(B=>B.shape[1]===100).data();r.age=Math.round(k[p-1]>k[p+1]?10*p-100*k[p-1]:10*p+100*k[p+1])/10,(Number.isNaN(u[0])||Number.isNaN(k[0]))&&h("faceres error:",{model:k0,result:m});let P=m.find(B=>B.shape[1]===1024),I=P?await P.data():[];r.descriptor=Array.from(I),m.forEach(B=>ie.dispose(B))}Fe[n]=r,X3=o,i(r)}))}var g2=.1,O5=.5;function uA(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 K3(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 ae.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]});g2&&g2>0&&(r=r.map(A=>({x:A.x>.5?A.x+g2:A.x-g2,y:A.y>.5?A.y+g2:A.y-g2})));for(let A=0;Av()-Q3,s=L5<(((a=t.face.antispoof)==null?void 0:a.skipFrames)||0);return t.skipAllowed&&r&&s&&J3===o&&bt[n]?(L5++,bt[n]):(L5=0,new Promise(async l=>{let c=gt.image.resizeBilinear(e,[w0!=null&&w0.inputs[0].shape?w0.inputs[0].shape[2]:0,w0!=null&&w0.inputs[0].shape?w0.inputs[0].shape[1]:0],!1),x=w0==null?void 0:w0.execute(c),i=(await x.data())[0];bt[n]=Math.round(100*i)/100,J3=o,Q3=v(),gt.dispose([c,x]),l(bt[n])}))}var vt=V(G());var E0,Tt=[],W5=Number.MAX_SAFE_INTEGER,en=0,tn=0;async function nn(e){var t;return R.initial&&(E0=null),E0?e.debug&&h("cached model:",E0.modelUrl):E0=await O((t=e.face.liveness)==null?void 0:t.modelPath),E0}async function D5(e,t,n,o){var A,a;if(!(E0!=null&&E0.executor))return 0;let r=(((A=t.face.liveness)==null?void 0:A.skipTime)||0)>v()-tn,s=W5<(((a=t.face.liveness)==null?void 0:a.skipFrames)||0);return t.skipAllowed&&r&&s&&en===o&&Tt[n]?(W5++,Tt[n]):(W5=0,new Promise(async l=>{let c=vt.image.resizeBilinear(e,[E0!=null&&E0.inputs[0].shape?E0.inputs[0].shape[2]:0,E0!=null&&E0.inputs[0].shape?E0.inputs[0].shape[1]:0],!1),x=E0==null?void 0:E0.execute(c),i=(await x.data())[0];Tt[n]=Math.round(100*i)/100,en=o,tn=v(),vt.dispose([c,x]),l(Tt[n])}))}var Rt=V(G());var le,F5=[],bA=["white","black","asian","indian","other"],gA=[15,23,28,35.5,45.5,55.5,65],rn=0,sn=0,B5=Number.MAX_SAFE_INTEGER;async function An(e){var t;return R.initial&&(le=null),le?e.debug&&h("cached model:",le.modelUrl):le=await O((t=e.face.gear)==null?void 0:t.modelPath),le}async function H5(e,t,n,o){var A,a;if(!le)return{age:0,gender:"unknown",genderScore:0,race:[]};let r=B5<(((A=t.face.gear)==null?void 0:A.skipFrames)||0),s=(((a=t.face.gear)==null?void 0:a.skipTime)||0)>v()-sn;return t.skipAllowed&&s&&r&&rn===o&&F5[n]?(B5++,F5[n]):(B5=0,new Promise(async l=>{var g,T,p,b;if(!(le!=null&&le.inputs[0].shape))return;let c={},x=[[0,.1,.9,.9]];if(((g=t.face.gear)==null?void 0:g.crop)>0){let k=(T=t.face.gear)==null?void 0:T.crop;x=[[k,k,1-k,1-k]]}c.resize=Rt.image.cropAndResize(e,x,[0],[le.inputs[0].shape[2],le.inputs[0].shape[1]]);let i={age:0,gender:"unknown",genderScore:0,race:[]};(p=t.face.gear)!=null&&p.enabled&&([c.age,c.gender,c.race]=le.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 k=0;k(((b=t.face.gear)==null?void 0:b.minConfidence)||.2)&&i.race.push({score:Math.round(100*d[k])/100,race:bA[k]});i.race.sort((k,P)=>P.score-k.score);let f=Array.from(await c.age.data()).map((k,P)=>[gA[P],k]).sort((k,P)=>P[1]-k[1]),u=f[0][0];for(let k=1;kRt.dispose(c[k])),F5[n]=i,rn=o,sn=v(),l(i)}))}var s2=V(G());var H0,Mt=[],ln=0,cn=0,G5=Number.MAX_SAFE_INTEGER;async function dn(e){return R.initial&&(H0=null),H0?e.debug&&h("cached model:",H0.modelUrl):H0=await O(e.face.ssrnet.modelPathAge),H0}async function V5(e,t,n,o){var A,a,l,c;if(!H0)return{age:0};let r=G5<(((A=t.face.ssrnet)==null?void 0:A.skipFrames)||0),s=(((a=t.face.ssrnet)==null?void 0:a.skipTime)||0)>v()-cn;return t.skipAllowed&&r&&s&&ln===o&&((l=Mt[n])!=null&&l.age)&&((c=Mt[n])==null?void 0:c.age)>0?(G5++,Mt[n]):(G5=0,new Promise(async x=>{var d,m,f;if(!(H0!=null&&H0.inputs)||!H0.inputs[0]||!H0.inputs[0].shape)return;let i={};if(((d=t.face.ssrnet)==null?void 0:d.crop)>0){let u=(m=t.face.ssrnet)==null?void 0:m.crop,g=[[u,u,1-u,1-u]];i.resize=s2.image.cropAndResize(e,g,[0],[H0.inputs[0].shape[2],H0.inputs[0].shape[1]])}else i.resize=s2.image.resizeBilinear(e,[H0.inputs[0].shape[2],H0.inputs[0].shape[1]],!1);i.enhance=s2.mul(i.resize,C.tf255);let y={age:0};if((f=t.face.ssrnet)!=null&&f.enabled&&(i.age=H0.execute(i.enhance)),i.age){let u=await i.age.data();y.age=Math.trunc(10*u[0])/10}Object.keys(i).forEach(u=>s2.dispose(i[u])),Mt[n]=y,ln=o,cn=v(),x(y)}))}var v0=V(G());var N0,Pt=[],yn=0,fn=0,Z5=Number.MAX_SAFE_INTEGER,q5=[.2989,.587,.114];async function mn(e){var t;return R.initial&&(N0=null),N0?e.debug&&h("cached model:",N0.modelUrl):N0=await O((t=e.face.ssrnet)==null?void 0:t.modelPathGender),N0}async function X5(e,t,n,o){var A,a,l,c;if(!N0)return{gender:"unknown",genderScore:0};let r=Z5<(((A=t.face.ssrnet)==null?void 0:A.skipFrames)||0),s=(((a=t.face.ssrnet)==null?void 0:a.skipTime)||0)>v()-fn;return t.skipAllowed&&r&&s&&yn===o&&((l=Pt[n])!=null&&l.gender)&&((c=Pt[n])==null?void 0:c.genderScore)>0?(Z5++,Pt[n]):(Z5=0,new Promise(async x=>{var m,f,u;if(!(N0!=null&&N0.inputs[0].shape))return;let i={};if(((m=t.face.ssrnet)==null?void 0:m.crop)>0){let g=(f=t.face.ssrnet)==null?void 0:f.crop,T=[[g,g,1-g,1-g]];i.resize=v0.image.cropAndResize(e,T,[0],[N0.inputs[0].shape[2],N0.inputs[0].shape[1]])}else i.resize=v0.image.resizeBilinear(e,[N0.inputs[0].shape[2],N0.inputs[0].shape[1]],!1);i.enhance=v0.tidy(()=>{var T,p;let g;if(((p=(T=N0==null?void 0:N0.inputs)==null?void 0:T[0].shape)==null?void 0:p[3])===1){let[b,k,P]=v0.split(i.resize,3,3),I=v0.mul(b,q5[0]),B=v0.mul(k,q5[1]),_=v0.mul(P,q5[2]),Z=v0.addN([I,B,_]);g=v0.mul(v0.sub(Z,C.tf05),2)}else g=v0.mul(v0.sub(i.resize,C.tf05),2);return g});let y={gender:"unknown",genderScore:0};(u=t.face.ssrnet)!=null&&u.enabled&&(i.gender=N0.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(g=>v0.dispose(i[g])),Pt[n]=y,yn=o,fn=v(),x(y)}))}var kt=V(G());var Q0,U5=[],un=0,hn=0,bn=Number.MAX_SAFE_INTEGER;async function gn(e){var t;return R.initial&&(Q0=null),Q0?e.debug&&h("cached model:",Q0.modelUrl):Q0=await O((t=e.face.mobilefacenet)==null?void 0:t.modelPath),Q0}async function Y5(e,t,n,o){var A,a;if(!(Q0!=null&&Q0.executor))return[];let r=bn<(((A=t.face.mobilefacenet)==null?void 0:A.skipFrames)||0),s=(((a=t.face.mobilefacenet)==null?void 0:a.skipTime)||0)>v()-hn;return t.skipAllowed&&s&&r&&un===o&&U5[n]?(bn++,U5[n]):new Promise(async l=>{var x;let c=[];if((x=t.face.mobilefacenet)!=null&&x.enabled&&(Q0!=null&&Q0.inputs[0].shape)){let i={};i.crop=kt.image.resizeBilinear(e,[Q0.inputs[0].shape[2],Q0.inputs[0].shape[1]],!1),i.data=Q0.execute(i.crop);let y=await i.data.data();c=Array.from(y),Object.keys(i).forEach(d=>kt.dispose(i[d]))}U5[n]=c,un=o,hn=v(),l(c)})}var wt=V(G());var _0,K5=[],vn=0,Rn=0,Mn=Number.MAX_SAFE_INTEGER;async function Pn(e){return R.initial&&(_0=null),_0?e.debug&&h("cached model:",_0.modelUrl):_0=await O(e.face.insightface.modelPath),_0}async function J5(e,t,n,o){var A,a;if(!(_0!=null&&_0.executor))return[];let r=Mn<(((A=t.face.insightface)==null?void 0:A.skipFrames)||0),s=(((a=t.face.insightface)==null?void 0:a.skipTime)||0)>v()-Rn;return t.skipAllowed&&s&&r&&vn===o&&K5[n]?(Mn++,K5[n]):new Promise(async l=>{var x;let c=[];if((x=t.face.insightface)!=null&&x.enabled&&(_0!=null&&_0.inputs[0].shape)){let i={};i.crop=wt.image.resizeBilinear(e,[_0.inputs[0].shape[2],_0.inputs[0].shape[1]],!1),i.data=_0.execute(i.crop);let y=await i.data.data();c=Array.from(y),Object.keys(i).forEach(d=>wt.dispose(i[d]))}K5[n]=c,vn=o,Rn=v(),l(c)})}var TA=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}},wn=(e,t)=>{let n=f=>{let u=Math.sqrt(f[0]*f[0]+f[1]*f[1]+f[2]*f[2]);return f[0]/=u,f[1]/=u,f[2]/=u,f},o=(f,u)=>{let g=f[0]-u[0],T=f[1]-u[1],p=f[2]-u[2];return[g,T,p]},r=(f,u)=>{let g=f[1]*u[2]-f[2]*u[1],T=f[2]*u[0]-f[0]*u[2],p=f[0]*u[1]-f[1]*u[0];return[g,T,p]},s=f=>{let[u,g,T,p,b,k,P,I,B]=f,_,Z,$;return p<1?p>-1?($=Math.asin(p),Z=Math.atan2(-P,u),_=Math.atan2(-k,b)):($=-Math.PI/2,Z=-Math.atan2(I,B),_=0):($=Math.PI/2,Z=Math.atan2(I,B),_=0),Number.isNaN(_)&&(_=0),Number.isNaN(Z)&&(Z=0),Number.isNaN($)&&($=0),{pitch:2*-_,yaw:2*-Z,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),m=A.length===478?TA(e):{bearing:0,strength:0};return{angle:d,matrix:y,gaze:m}};function En(e,t){let n=e==null?void 0:e.annotations;if(!(n!=null&&n.leftEyeIris)||!(n!=null&&n.rightEyeIris))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 Q5=async(e,t)=>{var m,f,u,g,T,p,b,k,P,I,B,_,Z,$,A0,t0,n0,j0,M,T0,C0,x0,K;let n=v(),o,r,s,A,a,l,c,x,i,y=[];e.state="run:face";let d=await W3(t,e.config);if(e.performance.face=R.perfadd?(e.performance.face||0)+Math.trunc(v()-n):Math.trunc(v()-n),!t.shape||t.shape.length!==4)return[];if(!d)return[];for(let E=0;E200?wn(d[E],[t.shape[2],t.shape[1]]):null;e.analyze("Start Emotion:"),e.config.async?A=(f=e.config.face.emotion)!=null&&f.enabled?j5(d[E].tensor||l0.tensor([]),e.config,E,d.length):[]:(e.state="run:emotion",n=v(),A=(u=e.config.face.emotion)!=null&&u.enabled?await j5(d[E].tensor||l0.tensor([]),e.config,E,d.length):[],e.performance.emotion=R.perfadd?(e.performance.emotion||0)+Math.trunc(v()-n):Math.trunc(v()-n)),e.analyze("End Emotion:"),e.analyze("Start AntiSpoof:"),e.config.async?c=(g=e.config.face.antispoof)!=null&&g.enabled?C5(d[E].tensor||l0.tensor([]),e.config,E,d.length):0:(e.state="run:antispoof",n=v(),c=(T=e.config.face.antispoof)!=null&&T.enabled?await C5(d[E].tensor||l0.tensor([]),e.config,E,d.length):0,e.performance.antispoof=R.perfadd?(e.performance.antispoof||0)+Math.trunc(v()-n):Math.trunc(v()-n)),e.analyze("End AntiSpoof:"),e.analyze("Start Liveness:"),e.config.async?x=(p=e.config.face.liveness)!=null&&p.enabled?D5(d[E].tensor||l0.tensor([]),e.config,E,d.length):0:(e.state="run:liveness",n=v(),x=(b=e.config.face.liveness)!=null&&b.enabled?await D5(d[E].tensor||l0.tensor([]),e.config,E,d.length):0,e.performance.liveness=R.perfadd?(e.performance.antispoof||0)+Math.trunc(v()-n):Math.trunc(v()-n)),e.analyze("End Liveness:"),e.analyze("Start GEAR:"),e.config.async?r=(k=e.config.face.gear)!=null&&k.enabled?H5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null:(e.state="run:gear",n=v(),r=(P=e.config.face.gear)!=null&&P.enabled?await H5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null,e.performance.gear=Math.trunc(v()-n)),e.analyze("End GEAR:"),e.analyze("Start SSRNet:"),e.config.async?(o=(I=e.config.face.ssrnet)!=null&&I.enabled?V5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null,s=(B=e.config.face.ssrnet)!=null&&B.enabled?X5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null):(e.state="run:ssrnet",n=v(),o=(_=e.config.face.ssrnet)!=null&&_.enabled?await V5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null,s=(Z=e.config.face.ssrnet)!=null&&Z.enabled?await X5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null,e.performance.ssrnet=Math.trunc(v()-n)),e.analyze("End SSRNet:"),e.analyze("Start MobileFaceNet:"),e.config.async?a=($=e.config.face.mobilefacenet)!=null&&$.enabled?Y5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null:(e.state="run:mobilefacenet",n=v(),a=(A0=e.config.face.mobilefacenet)!=null&&A0.enabled?await Y5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null,e.performance.mobilefacenet=Math.trunc(v()-n)),e.analyze("End MobileFaceNet:"),e.analyze("Start InsightFace:"),e.config.async?l=(t0=e.config.face.insightface)!=null&&t0.enabled?J5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null:(e.state="run:mobilefacenet",n=v(),l=(n0=e.config.face.insightface)!=null&&n0.enabled?await J5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null,e.performance.mobilefacenet=Math.trunc(v()-n)),e.analyze("End InsightFace:"),e.analyze("Start Description:"),e.config.async?i=N5(d[E].tensor||l0.tensor([]),e.config,E,d.length):(e.state="run:description",n=v(),i=await N5(d[E].tensor||l0.tensor([]),e.config,E,d.length),e.performance.description=R.perfadd?(e.performance.description||0)+Math.trunc(v()-n):Math.trunc(v()-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:"),(j0=e.config.face.ssrnet)!=null&&j0.enabled&&o&&s&&(i={...i,age:o.age,gender:s.gender,genderScore:s.genderScore}),(M=e.config.face.gear)!=null&&M.enabled&&r&&(i={...i,age:r.age,gender:r.gender,genderScore:r.genderScore,race:r.race}),(T0=e.config.face.mobilefacenet)!=null&&T0.enabled&&a&&(i.descriptor=a),(C0=e.config.face.insightface)!=null&&C0.enabled&&l&&(i.descriptor=l);let q=(x0=e.config.face.iris)!=null&&x0.enabled?En(d[E],t.shape[2]):0,U0=(K=e.config.face.detector)!=null&&K.return?l0.squeeze(d[E].tensor):null;l0.dispose(d[E].tensor),d[E].tensor&&delete d[E].tensor;let y0={...d[E],id:E};i.age&&(y0.age=i.age),i.gender&&(y0.gender=i.gender),i.genderScore&&(y0.genderScore=i.genderScore),i.descriptor&&(y0.embedding=i.descriptor),i.race&&(y0.race=i.race),A&&(y0.emotion=A),c&&(y0.real=c),x&&(y0.live=x),q>0&&(y0.distance=q),H&&(y0.rotation=H),U0&&(y0.tensor=U0),y.push(y0),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 G0={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=>G0.nameMapping[e],getPoints:e=>G0.pointsMapping[e]},He={none:0,half:1,full:2,nameMapping:{0:"none",1:"half",2:"full"},getName:e=>He.nameMapping[e]},c0={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=>c0.nameMapping[e]},Be=class{constructor(t){w(this,"name");w(this,"curls");w(this,"directions");w(this,"weights");w(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:fe,index:Pe,middle:ke,ring:A2,pinky:a2}=G0,{none:me,half:RA,full:pe}=He,{verticalUp:T2,verticalDown:Ki,horizontalLeft:_5,horizontalRight:MA,diagonalUpRight:PA,diagonalUpLeft:v2,diagonalDownRight:Ji,diagonalDownLeft:Qi}=c0,Ge=new Be("thumbs up");Ge.curl(fe,me,1);Ge.direction(fe,T2,1);Ge.direction(fe,v2,.25);Ge.direction(fe,PA,.25);for(let e of[G0.index,G0.middle,G0.ring,G0.pinky])Ge.curl(e,pe,1),Ge.direction(e,_5,1),Ge.direction(e,MA,1);var h0=new Be("victory");h0.curl(fe,RA,.5);h0.curl(fe,me,.5);h0.direction(fe,T2,1);h0.direction(fe,v2,1);h0.curl(Pe,me,1);h0.direction(Pe,T2,.75);h0.direction(Pe,v2,1);h0.curl(ke,me,1);h0.direction(ke,T2,1);h0.direction(ke,v2,.75);h0.curl(A2,pe,1);h0.direction(A2,T2,.2);h0.direction(A2,v2,1);h0.direction(A2,_5,.2);h0.curl(a2,pe,1);h0.direction(a2,T2,.2);h0.direction(a2,v2,1);h0.direction(a2,_5,.2);h0.weight(Pe,2);h0.weight(ke,2);var Ve=new Be("point");Ve.curl(fe,pe,1);Ve.curl(Pe,me,.5);Ve.curl(ke,pe,.5);Ve.curl(A2,pe,.5);Ve.curl(a2,pe,.5);Ve.weight(Pe,2);Ve.weight(ke,2);var Ze=new Be("middle finger");Ze.curl(fe,me,1);Ze.curl(Pe,pe,.5);Ze.curl(ke,pe,.5);Ze.curl(A2,pe,.5);Ze.curl(a2,pe,.5);Ze.weight(Pe,2);Ze.weight(ke,2);var R2=new Be("open palm");R2.curl(fe,me,.75);R2.curl(Pe,me,.75);R2.curl(ke,me,.75);R2.curl(A2,me,.75);R2.curl(a2,me,.75);var zn=[Ge,h0,Ve,Ze,R2];var kA=.7,i2={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 Sn(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 In(e,t){if(!e||!t)return[0,0];let n=Sn(e[0],e[1],t[0],t[1]);if(e.length===2)return n;let o=Sn(e[1],e[2],t[1],t[2]);return[n,o]}function jn(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 wA(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),m=Math.sqrt(s*s+l*l+i*i),f=(m*m+y*y-d*d)/(2*m*y);f>1?f=1:f<-1&&(f=-1);let u=Math.acos(f);u=57.2958*u%180;let g;return u>i2.NO_CURL_START_LIMIT?g=He.none:u>i2.HALF_CURL_START_LIMIT?g=He.half:g=He.full,g}function Nn(e,t,n,o){let r;return o===Math.abs(e)?e>0?r=c0.horizontalLeft:r=c0.horizontalRight:o===Math.abs(t)?t>0?r=c0.horizontalLeft:r=c0.horizontalRight:n>0?r=c0.horizontalLeft:r=c0.horizontalRight,r}function On(e,t,n,o){let r;return o===Math.abs(e)?e<0?r=c0.verticalDown:r=c0.verticalUp:o===Math.abs(t)?t<0?r=c0.verticalDown:r=c0.verticalUp:n<0?r=c0.verticalDown:r=c0.verticalUp,r}function EA(e,t,n,o,r,s,A,a){let l,c=On(e,t,n,o),x=Nn(r,s,A,a);return c===c0.verticalUp?x===c0.horizontalLeft?l=c0.diagonalUpLeft:l=c0.diagonalUpRight:x===c0.horizontalLeft?l=c0.diagonalDownLeft:l=c0.diagonalDownRight,l}function zA(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,m=0,f=i/(x+1e-5);f>1.5?y+=i2.DISTANCE_VOTE_POWER:f>.66?d+=i2.DISTANCE_VOTE_POWER:m+=i2.DISTANCE_VOTE_POWER;let u=Math.sqrt(r*r+a*a),g=Math.sqrt(s*s+l*l),T=Math.sqrt(A*A+c*c),p=Math.max(u,g,T),b=e[0],k=e[1],P=n[0],I=n[1];p===u?(P=n[0],I=n[1]):p===T&&(b=t[0],k=t[1]);let Z=In([b,k],[P,I]),$=jn(Z,i2.TOTAL_ANGLE_VOTE_POWER);y+=$[0],d+=$[1],m+=$[2];for(let t0 of o){let n0=jn(t0,i2.SINGLE_ANGLE_VOTE_POWER);y+=n0[0],d+=n0[1],m+=n0[2]}let A0;return y===Math.max(y,d,m)?A0=On(l,a,c,i):m===Math.max(d,m)?A0=Nn(s,r,A,x):A0=EA(l,a,c,i,s,r,A,x),A0}function Ln(e){let t=[],n=[],o=[],r=[];if(!e)return{curls:o,directions:r};for(let s of G0.all){let A=G0.getPoints(s),a=[],l=[];for(let c of A){let x=e[c[0]],i=e[c[1]],y=In(x,i),d=y[0],m=y[1];a.push(d),l.push(m)}t.push(a),n.push(l)}for(let s of G0.all){let A=s===G0.thumb?1:0,a=G0.getPoints(s),l=e[a[A][0]],c=e[a[A+1][1]],x=e[a[3][1]],i=wA(l,c,x),y=zA(l,c,x,t[s].slice(A));o[s]=i,r[s]=y}return{curls:o,directions:r}}function Et(e){if(!e||e.length===0)return null;let t=Ln(e),n={};for(let o of G0.all)n[G0.getName(o)]={curl:He.getName(t.curls[o]),direction:c0.getName(t.directions[o])};return n}function Cn(e){let t=[];if(!e||e.length===0)return t;let n=Ln(e);for(let o of zn){let r=o.matchAgainst(n.curls,n.directions);r>=kA&&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},Dn=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},Fn=e=>{var n,o,r,s;if(!e)return[];let t=[];for(let A=0;A.06||u>.06)&&(d=!1),f>u?u>.04&&t.push({iris:A,gesture:"looking right"}):f>.04&&t.push({iris:A,gesture:"looking left"});let g=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||g<.01||T>.022||g>.022)&&(d=!1),(T<.01||g<.01)&&t.push({iris:A,gesture:"looking down"}),(T>.022||g>.022)&&t.push({iris:A,gesture:"looking up"}),d&&t.push({iris:A,gesture:"looking center"})}return t},Bn=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 St(e,t=1.5){let n=D2(e),o=zt(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 jt(e){let t=D2(e),n=zt(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 jA(e){return e-2*Math.PI*Math.floor((e+Math.PI)/(2*Math.PI))}function Xn(e,t){let n=Math.PI/2-Math.atan2(-(t[1]-e[1]),t[0]-e[0]);return jA(n)}var Hn=(e,t)=>[[1,0,e],[0,1,t],[0,0,1]];function qe(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(),m={startPoint:i,endPoint:y,palmLandmarks:d,confidence:r[l]},f=qn(m,[(t.shape[2]||1)/this.inputSize,(t.shape[1]||0)/this.inputSize]);A.push(f),Object.keys(c).forEach(u=>W.dispose(c[u]))}return Object.keys(o).forEach(l=>W.dispose(o[l])),A}};var $0=V(G());var LA=5,Jn=1.65,Qn=[0,5,9,13,17,1,2],CA=0,WA=2,_n=0,Nt=class{constructor(t,n){w(this,"handDetector");w(this,"handPoseModel");w(this,"inputSize");w(this,"storedBoxes");w(this,"skipped");w(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=>t1([...s,1],n)),r=this.calculateLandmarksBoundingBox(o);return St(jt(r),LA)}getBoxForHandLandmarks(t){let n=this.calculateLandmarksBoundingBox(t),o=St(jt(n),Jn);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=e1(o,[0,0]),c=a.map(d=>[...t1(d,l),d[2]]),x=Un(r),i=[...D2(n),1],y=[qe(i,x[0]),qe(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)>v()-_n,A=this.skipped<(n.hand.skipFrames||0);n.skipAllowed&&s&&A?this.skipped++:(r=await this.handDetector.predict(t,n),this.skipped=0),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 k=$0.reshape(p,[-1,3]),P=await k.array();$0.dispose(p),$0.dispose(k);let I=this.transformRawCoords(P,f,x,m),B=this.getBoxForHandLandmarks(I);this.storedBoxes[l]={...B,confidence:b};let _={landmarks:I,confidence:b,boxConfidence:c.confidence,fingerConfidence:b,box:{topLeft:B.startPoint,bottomRight:B.endPoint}};a.push(_)}else this.storedBoxes[l]=null;$0.dispose(p)}else{let x=St(jt(c),Jn),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 $n={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]},l2,c2,n1;function FA(){let e=l2?new It(l2):void 0;e&&c2&&(n1=new Nt(e,c2))}async function o1(e,t){n1||FA();let n=await n1.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=Et(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 eo(e){var t;return R.initial&&(l2=null),l2?e.debug&&h("cached model:",l2.modelUrl):l2=await O((t=e.hand.detector)==null?void 0:t.modelPath),l2}async function to(e){var t;return R.initial&&(c2=null),c2?e.debug&&h("cached model:",c2.modelUrl):c2=await O((t=e.hand.skeleton)==null?void 0:t.modelPath),c2}var Q=V(G());var p0=[null,null],BA=["StatefulPartitionedCall/Postprocessor/Slice","StatefulPartitionedCall/Postprocessor/ExpandDims_1"],Xe=[[0,0],[0,0]],HA=["hand","fist","pinch","point","face","tip","pinchtip"],oo=4,ro=1.6,GA=512,VA=1.4,Ot=Number.MAX_SAFE_INTEGER,r1=0,we=[0,0],m0={boxes:[],hands:[]},so={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 Ao(e){var t;if(R.initial&&(p0[0]=null),p0[0])e.debug&&h("cached model:",p0[0].modelUrl);else{_2(["tensorlistreserve","enter","tensorlistfromtensor","merge","loopcond","switch","exit","tensorliststack","nextiteration","tensorlistsetitem","tensorlistgetitem","reciprocal","shape","split","where"],e),p0[0]=await O((t=e.hand.detector)==null?void 0:t.modelPath);let n=p0[0].executor?Object.values(p0[0].modelSignature.inputs):void 0;Xe[0][0]=Array.isArray(n)?parseInt(n[0].tensorShape.dim[1].size):0,Xe[0][1]=Array.isArray(n)?parseInt(n[0].tensorShape.dim[2].size):0}return p0[0]}async function ao(e){var t;if(R.initial&&(p0[1]=null),p0[1])e.debug&&h("cached model:",p0[1].modelUrl);else{p0[1]=await O((t=e.hand.skeleton)==null?void 0:t.modelPath);let n=p0[1].executor?Object.values(p0[1].modelSignature.inputs):void 0;Xe[1][0]=Array.isArray(n)?parseInt(n[0].tensorShape.dim[1].size):0,Xe[1][1]=Array.isArray(n)?parseInt(n[0].tensorShape.dim[2].size):0}return p0[1]}async function ZA(e,t){let n=[];if(!e||!p0[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,GA),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 p0[0].executeAsync(o.cast,BA),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[oo]),a.splice(oo,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),m=await d.data();Q.dispose(d);let f=[m[1],m[0],m[3]-m[1],m[2]-m[0]],u=at(f,VA),g=[Math.trunc(f[0]*we[0]),Math.trunc(f[1]*we[1]),Math.trunc(f[2]*we[0]),Math.trunc(f[3]*we[1])],T=x[y],p=HA[i[y]],b={id:l++,score:T,box:g,boxRaw:u,label:p};n.push(b)}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 s1(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&&p0[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],[Xe[1][0],Xe[1][1]],"bilinear"),r.div=Q.div(r.crop,C.tf255),[r.score,r.keypoints]=p0[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]/Xe[1][1],i[1]/Xe[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=>[we[0]*(i[0]+t.boxRaw[0]),we[1]*(i[1]+t.boxRaw[1]),i[2]||0]),o.landmarks=Et(o.keypoints);for(let i of Object.keys(so))o.annotations[i]=so[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 A1(e,t){var r,s;if(!((r=p0[0])!=null&&r.executor)||!((s=p0[1])!=null&&s.executor)||!p0[0].inputs[0].shape||!p0[1].inputs[0].shape)return[];we=[e.shape[2]||0,e.shape[1]||0],Ot++;let n=(t.hand.skipTime||0)>v()-r1,o=Ot<(t.hand.skipFrames||0);return t.skipAllowed&&n&&o?m0.hands:new Promise(async A=>{let a=3*(t.hand.skipTime||0)>v()-r1,l=Ot<3*(t.hand.skipFrames||0);t.skipAllowed&&m0.hands.length===t.hand.maxDetected?m0.hands=await Promise.all(m0.boxes.map(x=>s1(e,x,t))):t.skipAllowed&&a&&l&&m0.hands.length>0?m0.hands=await Promise.all(m0.boxes.map(x=>s1(e,x,t))):(m0.boxes=await ZA(e,t),r1=v(),m0.hands=await Promise.all(m0.boxes.map(x=>s1(e,x,t))),Ot=0);let c=[...m0.boxes];if(m0.boxes.length=0,t.cacheSensitivity>0)for(let x=0;x.05&&i.box[3]/(e.shape[1]||1)>.05&&m0.hands[x].fingerScore&&m0.hands[x].fingerScore>(t.hand.minConfidence||0)){let y=at(i.box,ro),d=at(i.boxRaw,ro);m0.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 F2={};ze(F2,{connected:()=>Ct,horizontal:()=>a1,kpt:()=>Lt,relative:()=>l1,vertical:()=>i1});var Lt=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],a1=[["leftEye","rightEye"],["leftEar","rightEar"],["leftShoulder","rightShoulder"],["leftElbow","rightElbow"],["leftWrist","rightWrist"],["leftHip","rightHip"],["leftKnee","rightKnee"],["leftAnkle","rightAnkle"]],i1=[["leftKnee","leftShoulder"],["rightKnee","rightShoulder"],["leftAnkle","leftKnee"],["rightAnkle","rightKnee"]],l1=[[["leftHip","rightHip"],["leftShoulder","rightShoulder"]],[["leftElbow","rightElbow"],["leftShoulder","rightShoulder"]]],Ct={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=Te(),c1=0;function lo(e,t){var A,a,l,c,x,i,y,d,m,f,u,g,T,p,b,k,P,I,B,_,Z,$,A0,t0,n0,j0;let n=v();if(!e)return Te();let o=Date.now()-e.timestamp,r=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 M=0;M((r-1)*z.body[M].box[q]+H)/r),C0=e.body[M].boxRaw.map((H,q)=>((r-1)*z.body[M].boxRaw[q]+H)/r),x0=e.body[M].keypoints.map((H,q)=>{var U0,y0,Ee,k2,x2,z1,S1,j1,I1;return{score:H.score,part:H.part,position:[z.body[M].keypoints[q]?((r-1)*(z.body[M].keypoints[q].position[0]||0)+(H.position[0]||0))/r:H.position[0],z.body[M].keypoints[q]?((r-1)*(z.body[M].keypoints[q].position[1]||0)+(H.position[1]||0))/r:H.position[1],z.body[M].keypoints[q]?((r-1)*(z.body[M].keypoints[q].position[2]||0)+(H.position[2]||0))/r:H.position[2]],positionRaw:[z.body[M].keypoints[q]?((r-1)*(z.body[M].keypoints[q].positionRaw[0]||0)+(H.positionRaw[0]||0))/r:H.positionRaw[0],z.body[M].keypoints[q]?((r-1)*(z.body[M].keypoints[q].positionRaw[1]||0)+(H.positionRaw[1]||0))/r:H.positionRaw[1],z.body[M].keypoints[q]?((r-1)*(z.body[M].keypoints[q].positionRaw[2]||0)+(H.positionRaw[2]||0))/r:H.positionRaw[2]],distance:[z.body[M].keypoints[q]?((r-1)*(((U0=z.body[M].keypoints[q].distance)==null?void 0:U0[0])||0)+(((y0=H.distance)==null?void 0:y0[0])||0))/r:(Ee=H.distance)==null?void 0:Ee[0],z.body[M].keypoints[q]?((r-1)*(((k2=z.body[M].keypoints[q].distance)==null?void 0:k2[1])||0)+(((x2=H.distance)==null?void 0:x2[1])||0))/r:(z1=H.distance)==null?void 0:z1[1],z.body[M].keypoints[q]?((r-1)*(((S1=z.body[M].keypoints[q].distance)==null?void 0:S1[2])||0)+(((j1=H.distance)==null?void 0:j1[2])||0))/r:(I1=H.distance)==null?void 0:I1[2]]}}),K={},E={connected:{}};(A=t.body.modelPath)!=null&&A.includes("efficientpose")?E=ct:(a=t.body.modelPath)!=null&&a.includes("blazepose")?E=st:(l=t.body.modelPath)!=null&&l.includes("movenet")&&(E=F2);for(let[H,q]of Object.entries(E.connected)){let U0=[];for(let y0=0;y0x2.part===q[y0]),k2=x0.find(x2=>x2.part===q[y0+1]);Ee&&k2&&U0.push([Ee.position,k2.position])}K[H]=U0}z.body[M]={...e.body[M],box:T0,boxRaw:C0,keypoints:x0,annotations:K}}if(!z.hand||e.hand.length!==z.hand.length)z.hand=JSON.parse(JSON.stringify(e.hand));else for(let M=0;M((r-1)*z.hand[M].box[H]+E)/r),C0=e.hand[M].boxRaw.map((E,H)=>((r-1)*z.hand[M].boxRaw[H]+E)/r);z.hand[M].keypoints.length!==e.hand[M].keypoints.length&&(z.hand[M].keypoints=e.hand[M].keypoints);let x0=e.hand[M].keypoints&&e.hand[M].keypoints.length>0?e.hand[M].keypoints.map((E,H)=>E.map((q,U0)=>((r-1)*(z.hand[M].keypoints[H][U0]||1)+(q||0))/r)):[],K={};if(Object.keys(z.hand[M].annotations).length!==Object.keys(e.hand[M].annotations).length)z.hand[M].annotations=e.hand[M].annotations,K=z.hand[M].annotations;else if(e.hand[M].annotations)for(let E of Object.keys(e.hand[M].annotations))K[E]=(i=(x=(c=e.hand[M])==null?void 0:c.annotations)==null?void 0:x[E])!=null&&i[0]?e.hand[M].annotations[E].map((H,q)=>H.map((U0,y0)=>((r-1)*z.hand[M].annotations[E][q][y0]+U0)/r)):null;z.hand[M]={...e.hand[M],box:T0,boxRaw:C0,keypoints:x0,annotations:K}}if(!z.face||e.face.length!==z.face.length)z.face=JSON.parse(JSON.stringify(e.face));else for(let M=0;M((r-1)*z.face[M].box[E]+K)/r),C0=e.face[M].boxRaw.map((K,E)=>((r-1)*z.face[M].boxRaw[E]+K)/r),x0=e.face[M].annotations;if(Object.keys(z.face[M].annotations).length!==Object.keys(e.face[M].annotations).length)z.face[M].annotations=e.face[M].annotations,x0=z.face[M].annotations;else if(e.face[M].annotations)for(let K of Object.keys(e.face[M].annotations))x0[K]=(m=(d=(y=e.face[M])==null?void 0:y.annotations)==null?void 0:d[K])!=null&&m[0]?e.face[M].annotations[K].map((E,H)=>E.map((q,U0)=>((r-1)*z.face[M].annotations[K][H][U0]+q)/r)):null;if(e.face[M].rotation){let K={matrix:[0,0,0,0,0,0,0,0,0],angle:{roll:0,yaw:0,pitch:0},gaze:{bearing:0,strength:0}};K.matrix=(f=e.face[M].rotation)==null?void 0:f.matrix,K.angle={roll:((r-1)*(((g=(u=z.face[M].rotation)==null?void 0:u.angle)==null?void 0:g.roll)||0)+(((p=(T=e.face[M].rotation)==null?void 0:T.angle)==null?void 0:p.roll)||0))/r,yaw:((r-1)*(((k=(b=z.face[M].rotation)==null?void 0:b.angle)==null?void 0:k.yaw)||0)+(((I=(P=e.face[M].rotation)==null?void 0:P.angle)==null?void 0:I.yaw)||0))/r,pitch:((r-1)*(((_=(B=z.face[M].rotation)==null?void 0:B.angle)==null?void 0:_.pitch)||0)+((($=(Z=e.face[M].rotation)==null?void 0:Z.angle)==null?void 0:$.pitch)||0))/r},K.gaze={bearing:((r-1)*(((A0=z.face[M].rotation)==null?void 0:A0.gaze.bearing)||0)+(((t0=e.face[M].rotation)==null?void 0:t0.gaze.bearing)||0))/r,strength:((r-1)*(((n0=z.face[M].rotation)==null?void 0:n0.gaze.strength)||0)+(((j0=e.face[M].rotation)==null?void 0:j0.gaze.strength)||0))/r},z.face[M]={...e.face[M],rotation:K,box:T0,boxRaw:C0,annotations:x0}}else z.face[M]={...e.face[M],box:T0,boxRaw:C0,annotations:x0}}if(!z.object||e.object.length!==z.object.length)z.object=JSON.parse(JSON.stringify(e.object));else for(let M=0;M((r-1)*z.object[M].box[K]+x0)/r),C0=e.object[M].boxRaw.map((x0,K)=>((r-1)*z.object[M].boxRaw[K]+x0)/r);z.object[M]={...e.object[M],box:T0,boxRaw:C0}}if(e.persons){let M=e.persons;if(!z.persons||M.length!==z.persons.length)z.persons=JSON.parse(JSON.stringify(M));else for(let T0=0;T0((r-1)*z.persons[T0].box[x0]+C0)/r)}e.gesture&&(z.gesture=e.gesture),z.width=e.width,z.height=e.height;let s=v();return c1=R.perfadd?c1+Math.round(s-n):Math.round(s-n),e.performance&&(z.performance={...e.performance,interpolate:c1}),z}var s0=V(G());var O0;async function d1(e){return!O0||R.initial?O0=await O(e.segmentation.modelPath):e.debug&&h("cached model:",O0.modelUrl),O0}async function co(e,t){var r;if(O0||(O0=await d1(t)),!(O0!=null&&O0.executor)||!((r=O0==null?void 0:O0.inputs)!=null&&r[0].shape))return null;let n={};n.resize=s0.image.resizeBilinear(e,[O0.inputs[0].shape?O0.inputs[0].shape[1]:0,O0.inputs[0].shape?O0.inputs[0].shape[2]:0],!1),n.norm=s0.div(n.resize,C.tf255),n.res=O0.execute(n.norm),n.squeeze=s0.squeeze(n.res,[0]),[n.bgRaw,n.fgRaw]=s0.unstack(n.squeeze,2),n.fg=s0.softmax(n.fgRaw),n.mul=s0.mul(n.fg,C.tf255),n.expand=s0.expandDims(n.mul,2),n.output=s0.image.resizeBilinear(n.expand,[e.shape[1]||0,e.shape[2]||0]);let o;switch(t.segmentation.mode||"default"){case"default":n.input=s0.squeeze(e),n.concat=s0.concat([n.input,n.output],-1),o=s0.cast(n.concat,"int32");break;case"alpha":o=s0.cast(n.output,"int32");break;default:o=s0.tensor(0)}return Object.keys(n).forEach(s=>s0.dispose(n[s])),o}var Wt={};ze(Wt,{distance:()=>x1,find:()=>UA,similarity:()=>XA});function x1(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 XA(e,t,n={order:2,multiplier:25,min:.2,max:.8}){let o=x1(e,t,n);return yo(o,n.order||2,n.min||0,n.max||1)}function UA(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;AV2,validateModel:()=>Zt});var B2=V(G());var Ue=V(G());var fo=.005,ee={keypoints:[],padding:[[0,0],[0,0],[0,0],[0,0]]};function y1(e){for(let t of a1){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 mo(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=Ue.pad(e,ee.padding),n.resize=Ue.image.resizeBilinear(n.pad,[t,t]);let o=Ue.cast(n.resize,"int32");return Object.keys(n).forEach(A=>Ue.dispose(n[A])),o}function uo(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]+ee.padding[2][0]+ee.padding[2][1])/t[0]-ee.padding[2][0],o.position[1]*(t[1]+ee.padding[1][0]+ee.padding[1][1])/t[1]-ee.padding[1][0]],o.positionRaw=[o.position[0]/t[0],o.position[1]/t[1]];let n=Oe(e.keypoints.map(o=>o.position),t);return e.box=n.box,e.boxRaw=n.boxRaw,e}var b0,Dt=0,f1=Number.MAX_SAFE_INTEGER,d2={boxes:[],bodies:[],last:0};async function ho(e){var t;return R.initial&&(b0=null),b0?e.debug&&h("cached model:",b0.modelUrl):(_2(["size"],e),b0=await O(e.body.modelPath)),Dt=b0!=null&&b0.executor&&((t=b0==null?void 0:b0.inputs)!=null&&t[0].shape)?b0.inputs[0].shape[2]:0,Dt<64&&(Dt=256),B2.env().flagRegistry.WEBGL_USE_SHAPES_UNIFORMS&&B2.env().set("WEBGL_USE_SHAPES_UNIFORMS",!1),b0}function KA(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:Lt[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=Oe(r.map(x=>x.position),[n.shape[2],n.shape[1]]),l={};for(let[x,i]of Object.entries(Ct)){let y=[];for(let d=0;du.part===i[d]),f=r.find(u=>u.part===i[d+1]);m&&f&&m.score>(t.body.minConfidence||0)&&f.score>(t.body.minConfidence||0)&&y.push([m.position,f.position])}l[x]=y}let c={id:0,score:s,box:a.box,boxRaw:a.boxRaw,keypoints:r,annotations:l};return y1(c),A.push(c),A}function JA(e,t,n){let o=[];for(let r=0;rt.body.minConfidence){let a=[];for(let y=0;y<17;y++){let d=s[3*y+2];if(d>t.body.minConfidence){let m=[s[3*y+1],s[3*y+0]];a.push({part:Lt[y],score:Math.round(100*d)/100,positionRaw:m,position:[Math.round((n.shape[2]||0)*m[0]),Math.round((n.shape[1]||0)*m[1])]})}}let l=[s[52],s[51],s[54]-s[52],s[53]-s[51]],c=[Math.trunc(l[0]*(n.shape[2]||0)),Math.trunc(l[1]*(n.shape[1]||0)),Math.trunc(l[2]*(n.shape[2]||0)),Math.trunc(l[3]*(n.shape[1]||0))],x={};for(let[y,d]of Object.entries(Ct)){let m=[];for(let f=0;fT.part===d[f]),g=a.find(T=>T.part===d[f+1]);u&&g&&u.score>(t.body.minConfidence||0)&&g.score>(t.body.minConfidence||0)&&m.push([u.position,g.position])}x[y]=m}let i={id:r,score:A,box:c,boxRaw:l,keypoints:[...a],annotations:x};y1(i),o.push(i)}}return o.sort((r,s)=>s.score-r.score),o.length>t.body.maxDetected&&(o.length=t.body.maxDetected),o}async function m1(e,t){var r;if(!(b0!=null&&b0.executor)||!((r=b0==null?void 0:b0.inputs)!=null&&r[0].shape))return[];t.skipAllowed||(d2.boxes.length=0),f1++;let n=(t.body.skipTime||0)>v()-d2.last,o=f1<(t.body.skipFrames||0);return t.skipAllowed&&n&&o?d2.bodies:new Promise(async s=>{let A={};f1=0,A.input=po(e,Dt),A.res=b0==null?void 0:b0.execute(A.input),d2.last=v();let a=await A.res.array();d2.bodies=A.res.shape[2]===17?KA(a,t,e):JA(a,t,e);for(let l of d2.bodies)uo(l,[e.shape[2]||1,e.shape[1]||1]),mo(l.keypoints);Object.keys(A).forEach(l=>B2.dispose(A[l])),s(d2.bodies)})}var S0=V(G());var ce,Ft=[],go=0,p1=Number.MAX_SAFE_INTEGER,Ht=0,Bt=2.5;async function To(e){if(!ce||R.initial){ce=await O(e.object.modelPath);let t=ce!=null&&ce.executor?Object.values(ce.modelSignature.inputs):void 0;Ht=Array.isArray(t)?parseInt(t[0].tensorShape.dim[2].size):416}else e.debug&&h("cached model:",ce.modelUrl);return ce}async function QA(e,t,n){var c,x;let o=0,r=[],s=Ht;for(let i of[1,2,4]){let y=i*13,d=S0.squeeze(e.find(p=>p.shape[1]===y**2&&(p.shape[2]||0)===m2.length)),m=await d.array(),f=S0.squeeze(e.find(p=>p.shape[1]===y**2&&(p.shape[2]||0)(n.object.minConfidence||0)&&b!==61){let P=(.5+Math.trunc(p%y))/y,I=(.5+Math.trunc(p/y))/y,B=T[p].map(M=>M*(y/i/s)),[_,Z]=[P-Bt/i*B[0],I-Bt/i*B[1]],[$,A0]=[P+Bt/i*B[2]-_,I+Bt/i*B[3]-Z],t0=[_,Z,$,A0];t0=t0.map(M=>Math.max(0,Math.min(M,1)));let n0=[t0[0]*t[0],t0[1]*t[1],t0[2]*t[0],t0[3]*t[1]],j0={id:o++,score:Math.round(100*k)/100,class:b+1,label:m2[b].label,box:n0.map(M=>Math.trunc(M)),boxRaw:t0};r.push(j0)}}S0.dispose([d,f,u,g])}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 S0.image.nonMaxSuppressionAsync(A,a,n.object.maxDetected||0,n.object.iouThreshold,n.object.minConfidence);l=Array.from(await i.data()),S0.dispose(i)}return r=r.filter((i,y)=>l.includes(y)).sort((i,y)=>y.score-i.score),r}async function u1(e,t){if(!(ce!=null&&ce.executor))return[];let n=(t.object.skipTime||0)>v()-go,o=p1<(t.object.skipFrames||0);return t.skipAllowed&&n&&o&&Ft.length>0?(p1++,Ft):(p1=0,!R.kernels.includes("mod")||!R.kernels.includes("sparsetodense")?Ft:new Promise(async r=>{let s=[e.shape[2]||0,e.shape[1]||0],A=S0.image.resizeBilinear(e,[Ht,Ht],!1),a=S0.div(A,C.tf255),l=S0.transpose(a,[0,3,1,2]),c;t.object.enabled&&(c=ce.execute(l)),go=v();let x=await QA(c,s,t);Ft=x,S0.dispose([A,a,l,...c]),r(x)}))}var V0=V(G());var G2=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],_A=G2.length,H2=G2.reduce((e,t,n)=>(e[t]=n,e),{}),$A=[["leftHip","leftShoulder"],["leftElbow","leftShoulder"],["leftElbow","leftWrist"],["leftHip","leftKnee"],["leftKnee","leftAnkle"],["rightHip","rightShoulder"],["rightElbow","rightShoulder"],["rightElbow","rightWrist"],["rightHip","rightKnee"],["rightKnee","rightAnkle"],["leftShoulder","rightShoulder"],["leftHip","rightHip"]],V7=$A.map(([e,t])=>[H2[e],H2[t]]),Ro=[["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,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 Gt=class{constructor(t,n){w(this,"priorityQueue");w(this,"numberOfElements");w(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 ko(e,t,n,o){let r=n-e,s=o-t;return r*r+s*s}function T1(e,t){return{x:e.x+t.x,y:e.y+t.y}}var te,ta=["MobilenetV1/offset_2/BiasAdd","MobilenetV1/heatmap_2/BiasAdd","MobilenetV1/displacement_fwd_2/BiasAdd","MobilenetV1/displacement_bwd_2/BiasAdd"],Vt=1,M2=16,na=50**2;function wo(e,t,n,o,r,s,A=2){let a=g=>({y:s.get(g.y,g.x,e),x:s.get(g.y,g.x,s.shape[2]/2+e)}),l=(g,T,p)=>({y:g1(Math.round(g.y/M2),0,T-1),x:g1(Math.round(g.x/M2),0,p-1)}),[c,x]=o.shape,i=l(t.position,c,x),y=a(i),m=T1(t.position,y);for(let g=0;g[H2[y],H2[d]]),A=s.map(([,y])=>y),a=s.map(([y])=>y),l=t.shape[2],c=A.length,x=new Array(l),i=b1(e.part,M2,n);x[e.part.id]={score:e.score,part:G2[e.part.id],position:i};for(let y=c-1;y>=0;--y){let d=A[y],m=a[y];x[d]&&!x[m]&&(x[m]=wo(y,x[d],m,t,n,r))}for(let y=0;yt){a=!1;break}if(!a)break}return a}function sa(e,t){let[n,o,r]=t.shape,s=new Gt(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?ko(n,t,s.y,s.x)<=na:!1})}function Aa(e,t){return t.reduce((o,{position:r,score:s},A)=>(Eo(e,r,A)||(o+=s),o),0)/t.length}function aa(e,t,n,o,r,s){let A=[],a=sa(s,t);for(;A.lengthd.score>s);let i=Aa(A,x),y=Mo(x);i>s&&A.push({keypoints:x,box:y,score:Math.round(100*i)/100})}return A}async function v1(e,t){if(!(te!=null&&te.executor))return[];let n=V0.tidy(()=>{if(!te.inputs[0].shape)return[];let A=V0.image.resizeBilinear(e,[te.inputs[0].shape[2],te.inputs[0].shape[1]]),a=V0.sub(V0.div(V0.cast(A,"float32"),127.5),1),c=te.execute(a,ta).map(x=>V0.squeeze(x,[0]));return c[1]=V0.sigmoid(c[1]),c}),o=await Promise.all(n.map(A=>A.buffer()));for(let A of n)V0.dispose(A);let r=aa(o[0],o[1],o[2],o[3],t.body.maxDetected,t.body.minConfidence);return te.inputs[0].shape?Po(r,[e.shape[1],e.shape[2]],[te.inputs[0].shape[2],te.inputs[0].shape[1]]):[]}async function zo(e){return!te||R.initial?te=await O(e.body.modelPath):e.debug&&h("cached model:",te.modelUrl),te}var F=V(G());var ve,ia=["fgr","pha","r1o","r2o","r3o","r4o"],g0={},M1=0;function Io(e){F.dispose([g0.r1i,g0.r2i,g0.r3i,g0.r4i,g0.downsample_ratio]),g0.r1i=F.tensor(0),g0.r2i=F.tensor(0),g0.r3i=F.tensor(0),g0.r4i=F.tensor(0),M1=e.segmentation.ratio||.5,g0.downsample_ratio=F.tensor(M1)}async function P1(e){return!ve||R.initial?ve=await O(e.segmentation.modelPath):e.debug&&h("cached model:",ve.modelUrl),Io(e),ve}var jo=e=>F.tidy(()=>{let t=F.squeeze(e,[0]),n=F.mul(t,C.tf255);return F.cast(n,"int32")});function R1(e,t){let n=e?jo(e):F.fill([t.shape[1]||0,t.shape[2]||0,3],255,"int32"),o=t?jo(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 la(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 No(e,t){if(ve||(ve=await P1(t)),!(ve!=null&&ve.executor))return null;g0.src=F.div(e,255),M1!==t.segmentation.ratio&&Io(t);let[n,o,r,s,A,a]=await ve.executeAsync(g0,ia),l;switch(t.segmentation.mode||"default"){case"default":l=R1(n,o);break;case"alpha":l=R1(null,o);break;case"foreground":l=R1(n,null);break;case"state":l=la(r);break;default:l=F.tensor(0)}return F.dispose([g0.src,n,o,g0.r1i,g0.r2i,g0.r3i,g0.r4i]),[g0.r1i,g0.r2i,g0.r3i,g0.r4i]=[r,s,A,a],l}var z0=V(G());var L0;async function k1(e){return!L0||R.initial?L0=await O(e.segmentation.modelPath):e.debug&&h("cached model:",L0.modelUrl),L0}async function Lo(e,t){var r;if(L0||(L0=await k1(t)),!(L0!=null&&L0.executor)||!((r=L0==null?void 0:L0.inputs)!=null&&r[0].shape))return null;let n={};n.resize=z0.image.resizeBilinear(e,[L0.inputs[0].shape?L0.inputs[0].shape[1]:0,L0.inputs[0].shape?L0.inputs[0].shape[2]:0],!1),n.norm=z0.div(n.resize,C.tf255),n.res=L0.execute(n.norm),n.squeeze=z0.squeeze(n.res,[0]),n.alpha=z0.image.resizeBilinear(n.squeeze,[e.shape[1]||0,e.shape[2]||0]),n.mul=z0.mul(n.alpha,C.tf255);let o;switch(t.segmentation.mode||"default"){case"default":n.input=z0.squeeze(e),n.concat=z0.concat([n.input,n.mul],-1),o=z0.cast(n.concat,"int32");break;case"alpha":o=z0.cast(n.mul,"int32");break;default:o=z0.tensor(0)}return Object.keys(n).forEach(s=>z0.dispose(n[s])),o}function Zt(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&&h("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&&h("model validation failed:",n,A),A.length>0?{name:n,missing:A,ops:s,url:a}:null}var V2=class{constructor(t){w(this,"instance");w(this,"models",{});this.models={},this.instance=t}stats(){let t=0,n=0,o=0;for(let s of Object.values(I0))t+=s.sizeFromManifest,n+=s.sizeLoadedWeights,o+=s.sizeDesired;let r=o>0?n/o:0;return{numLoadedModels:Object.values(I0).length,numDefinedModels:Object.keys(this.models).length,percentageLoaded:r,totalSizeFromManifest:t,totalSizeWeights:n,totalSizeLoading:o,modelStats:Object.values(I0)}}reset(){for(let t of Object.keys(this.models))this.models[t]=null}async load(t){var o,r,s,A,a,l,c,x,i,y,d,m,f,u,g,T,p,b,k,P,I,B,_,Z,$,A0,t0;R.initial&&this.reset(),t&&(this.instance=t);let n={};n.blazeface=this.instance.config.face.enabled&&!this.models.blazeface?w3(this.instance.config):null,n.antispoof=this.instance.config.face.enabled&&((o=this.instance.config.face.antispoof)!=null&&o.enabled)&&!this.models.antispoof?_3(this.instance.config):null,n.liveness=this.instance.config.face.enabled&&((r=this.instance.config.face.liveness)!=null&&r.enabled)&&!this.models.liveness?nn(this.instance.config):null,n.faceres=this.instance.config.face.enabled&&((s=this.instance.config.face.description)!=null&&s.enabled)&&!this.models.faceres?U3(this.instance.config):null,n.emotion=this.instance.config.face.enabled&&((A=this.instance.config.face.emotion)!=null&&A.enabled)&&!this.models.emotion?V3(this.instance.config):null,n.iris=this.instance.config.face.enabled&&((a=this.instance.config.face.iris)!=null&&a.enabled)&&!((l=this.instance.config.face.attention)!=null&&l.enabled)&&!this.models.iris?N3(this.instance.config):null,n.facemesh=this.instance.config.face.enabled&&((c=this.instance.config.face.mesh)!=null&&c.enabled)&&!this.models.facemesh?D3(this.instance.config):null,n.gear=this.instance.config.face.enabled&&((x=this.instance.config.face.gear)!=null&&x.enabled)&&!this.models.gear?An(this.instance.config):null,n.ssrnetage=this.instance.config.face.enabled&&((i=this.instance.config.face.ssrnet)!=null&&i.enabled)&&!this.models.ssrnetage?dn(this.instance.config):null,n.ssrnetgender=this.instance.config.face.enabled&&((y=this.instance.config.face.ssrnet)!=null&&y.enabled)&&!this.models.ssrnetgender?mn(this.instance.config):null,n.mobilefacenet=this.instance.config.face.enabled&&((d=this.instance.config.face.mobilefacenet)!=null&&d.enabled)&&!this.models.mobilefacenet?gn(this.instance.config):null,n.insightface=this.instance.config.face.enabled&&((m=this.instance.config.face.insightface)!=null&&m.enabled)&&!this.models.insightface?Pn(this.instance.config):null,n.blazepose=this.instance.config.body.enabled&&!this.models.blazepose&&((f=this.instance.config.body.modelPath)!=null&&f.includes("blazepose"))?i3(this.instance.config):null,n.blazeposedetect=this.instance.config.body.enabled&&!this.models.blazeposedetect&&this.instance.config.body.detector&&this.instance.config.body.detector.modelPath?a3(this.instance.config):null,n.efficientpose=this.instance.config.body.enabled&&!this.models.efficientpose&&((u=this.instance.config.body.modelPath)!=null&&u.includes("efficientpose"))?f3(this.instance.config):null,n.movenet=this.instance.config.body.enabled&&!this.models.movenet&&((g=this.instance.config.body.modelPath)!=null&&g.includes("movenet"))?ho(this.instance.config):null,n.posenet=this.instance.config.body.enabled&&!this.models.posenet&&((T=this.instance.config.body.modelPath)!=null&&T.includes("posenet"))?zo(this.instance.config):null,n.handtrack=this.instance.config.hand.enabled&&!this.models.handtrack&&((b=(p=this.instance.config.hand.detector)==null?void 0:p.modelPath)!=null&&b.includes("handtrack"))?Ao(this.instance.config):null,n.handskeleton=this.instance.config.hand.enabled&&this.instance.config.hand.landmarks&&!this.models.handskeleton&&((P=(k=this.instance.config.hand.detector)==null?void 0:k.modelPath)!=null&&P.includes("handtrack"))?ao(this.instance.config):null,this.instance.config.hand.enabled&&!this.models.handdetect&&((B=(I=this.instance.config.hand.detector)==null?void 0:I.modelPath)!=null&&B.includes("handdetect"))&&(n.handdetect=eo(this.instance.config),n.handskeleton=to(this.instance.config)),n.centernet=this.instance.config.object.enabled&&!this.models.centernet&&((_=this.instance.config.object.modelPath)!=null&&_.includes("centernet"))?d3(this.instance.config):null,n.nanodet=this.instance.config.object.enabled&&!this.models.nanodet&&((Z=this.instance.config.object.modelPath)!=null&&Z.includes("nanodet"))?To(this.instance.config):null,n.selfie=this.instance.config.segmentation.enabled&&!this.models.selfie&&(($=this.instance.config.segmentation.modelPath)!=null&&$.includes("selfie"))?k1(this.instance.config):null,n.meet=this.instance.config.segmentation.enabled&&!this.models.meet&&((A0=this.instance.config.segmentation.modelPath)!=null&&A0.includes("meet"))?d1(this.instance.config):null,n.rvm=this.instance.config.segmentation.enabled&&!this.models.rvm&&((t0=this.instance.config.segmentation.modelPath)!=null&&t0.includes("rvm"))?P1(this.instance.config):null;for(let[n0,j0]of Object.entries(n))j0!=null&&j0.then&&j0.then(M=>this.models[n0]=M);await Promise.all(Object.values(n))}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(I0).find(r=>r.startsWith(n.name));o&&(n.size=I0[o].sizeLoadedWeights,n.url=I0[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=Zt(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 m={id:s++,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]m.body.box[0]&&b.box[0]+b.box[2]m.body.box[1]&&b.box[1]+b.box[3]m.body.box[0]&&b.box[1]+b.box[3]>m.body.box[1]&&b.box[1]+b.box[3]{b&&b.length===4&&(f.push(b[0],b[0]+b[2]),u.push(b[1],b[1]+b[3]))};g(m.face.box),g((x=m.body)==null?void 0:x.box),g((i=m.hands.left)==null?void 0:i.box),g((y=m.hands.right)==null?void 0:y.box);let T=Math.min(...f),p=Math.min(...u);m.box=[T,p,Math.max(...f)-T,Math.max(...u)-p],r!=null&&r[1]&&(r!=null&&r[2])&&(m.boxRaw=[m.box[0]/r[2],m.box[1]/r[1],m.box[2]/r[2],m.box[3]/r[1]]),A.push(m)}return A}var d0=V(G());var qt=` + 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) + // gestures do not have buffering + // person(inCanvas, result.persons, localOptions); // already included above + ]); + 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", + // 0 + "leftEyeInside", + // 1 + "leftEye", + // 2 + "leftEyeOutside", + // 3 + "rightEyeInside", + // 4 + "rightEye", + // 5 + "rightEyeOutside", + // 6 + "leftEar", + // 7 + "rightEar", + // 8 + "leftMouth", + // 9 + "rightMouth", + // 10 + "leftShoulder", + // 11 + "rightShoulder", + // 12 + "leftElbow", + // 13 + "rightElbow", + // 14 + "leftWrist", + // 15 + "rightWrist", + // 16 + "leftPinky", + // 17 + "rightPinky", + // 18 + "leftIndex", + // 19 + "rightIndex", + // 20 + "leftThumb", + // 21 + "rightThumb", + // 22 + "leftHip", + // 23 + "rightHip", + // 24 + "leftKnee", + // 25 + "rightKnee", + // 26 + "leftAnkle", + // 27 + "rightAnkle", + // 28 + "leftHeel", + // 29 + "rightHeel", + // 30 + "leftFoot", + // 31 + "rightFoot", + // 32 + "bodyCenter", + // 33 + "bodyTop", + // 34 + "leftPalm", + // 35 // z-coord not ok + "leftHand", + // 36 // similar to wrist but z-coord not ok + "rightPalm", + // 37 // z-coord not ok + "rightHand" + // 38 // similar to wrist but z-coord not ok +]; +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], + // dont touch batch + height, + // height before&after + width, + // width before&after + [0, 0] + // dont touch rbg + ]; + 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], + // correct offset due to crop + kpt4.positionRaw[1] / width + cropBox[0], + // correct offset due to crop + 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 + /* 1,1 */ + ] = 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: [ + // normalized to 0..1 + // @ts-ignore model is not undefined here + x2 / model4.inputs[0].shape[2], + y2 / model4.inputs[0].shape[1] + ], + position: [ + // normalized to input image size + // @ts-ignore model is not undefined here + 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, anchor) => { + 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 landmarks = box.landmarks.map((pt) => [(pt[0] + anchor[0]) * factor[0], (pt[1] + anchor[1]) * factor[1]]); + return { startPoint, endPoint, 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, + size: size2 + }; +}; +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, + size: [Math.round(size2[0]), Math.round(size2[1])] + }; +}; +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) => [ + // scaled around zero-point + 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 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, _e, _f, _g; + 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.tf1); + 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 + }; + b.anchor = tf13.slice(anchors, [nms[i], 0], [1, 2]); + const anchor = await b.anchor.data(); + const scaledBox = scaleBoxCoordinates(rawBox, [(inputImage.shape[2] || 0) / inputSize4, (inputImage.shape[1] || 0) / inputSize4], anchor); + const enlargedBox = enlargeBox(scaledBox, ((_e = config3.face.detector) == null ? void 0 : _e.scale) || 1.4); + const squaredBox = squarifyBox(enlargedBox); + if (squaredBox.size[0] > (((_f = config3.face.detector) == null ? void 0 : _f["minSize"]) || 0) && squaredBox.size[1] > (((_g = config3.face.detector) == null ? void 0 : _g["minSize"]) || 0)) 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 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, scale2 = 2.3) => { + const box = squarifyBox(enlargeBox(calculateLandmarksBoundingBox([rawCoords[eyeInnerCornerIndex], rawCoords[eyeOuterCornerIndex]]), scale2)); + 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, config3) { + var _a, _b; + 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, ((_a = config3.face.iris) == null ? void 0 : _a.scale) || 2.3); + const { box: rightEyeBox, boxSize: rightEyeBoxSize, crop: rightEyeCrop } = getEyeBox(rawCoords, face4, eyeLandmarks.rightBounds[0], eyeLandmarks.rightBounds[1], meshSize, true, ((_b = config3.face.iris) == null ? void 0 : _b.scale) || 2.3); + 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 = { + // all attention models produce 2d results so it needs to be later augmented with correct z-coords + // mesh: results[0], // already have it in rawCoords // output_mesh_identity + // flag: results[1], // already processed in parent // conv_faceflag + lips: await ((_b = (_a = results.filter((r) => r.size === 160)) == null ? void 0 : _a[0]) == null ? void 0 : _b.data()), + // 80 x 2d = 160 // output_lips + irisL: await ((_d = (_c = results.filter((r) => r.size === 10)) == null ? void 0 : _c[0]) == null ? void 0 : _d.data()), + // 5 x 2d = 10 // output_right_iris + eyeL: await ((_f = (_e = results.filter((r) => r.size === 142)) == null ? void 0 : _e[0]) == null ? void 0 : _f.data()), + // 71 x 2d = 142 // output_right_eye + irisR: await ((_h = (_g = results.filter((r) => r.size === 10)) == null ? void 0 : _g[1]) == null ? void 0 : _h.data()), + // 5 x 2d = 10 // output_left_iris + eyeR: await ((_j = (_i = results.filter((r) => r.size === 142)) == null ? void 0 : _i[1]) == null ? void 0 : _j.data()) + // 71 x 2d = 142// output_left_eye + }; + 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; + 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 = { + // init face result + id: id++, + mesh: [], + meshRaw: [], + box: [0, 0, 0, 0], + boxRaw: [0, 0, 0, 0], + score: 0, + boxScore: 0, + faceScore: 0, + size: [0, 0], + // contoursRaw: [], + // contours: [], + 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) || !(model7 == null ? void 0 : model7["executor"])) { + face4.box = clampBox(box, input); + face4.boxRaw = getRawBox(box, input); + face4.score = face4.boxScore; + face4.size = box.size; + face4.mesh = box.landmarks; + 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.size = box.size; + face4.score = face4.boxScore; + face4.mesh = box.landmarks; + 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, config3); + } + 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, + size: box.size + }; + face4.box = clampBox(calculatedBox, input); + face4.boxRaw = getRawBox(calculatedBox, input); + face4.size = calculatedBox.size; + 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 = []; +var model8; +var last3 = []; +var lastCount = 0; +var lastTime4 = 0; +var skipped4 = Number.MAX_SAFE_INTEGER; +var rgb = false; +async function load6(config3) { + var _a, _b, _c; + if (env.initial) model8 = null; + if (!model8) { + model8 = await loadModel((_a = config3.face.emotion) == null ? void 0 : _a.modelPath); + rgb = ((_c = (_b = model8 == null ? void 0 : model8.inputs) == null ? void 0 : _b[0].shape) == null ? void 0 : _c[3]) === 3; + if (!rgb) annotations = ["angry", "disgust", "fear", "happy", "sad", "surprise", "neutral"]; + else annotations = ["angry", "disgust", "fear", "happy", "neutral", "sad", "surprise"]; + } 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, _b2, _c; + 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; + if (((_b2 = config3.face.emotion) == null ? void 0 : _b2["crop"]) > 0) { + const crop = (_c = config3.face.emotion) == null ? void 0 : _c["crop"]; + const box = [[crop, crop, 1 - crop, 1 - crop]]; + t2.resize = tf16.image.cropAndResize(image28, box, [0], [inputSize10, inputSize10]); + } else { + t2.resize = tf16.image.resizeBilinear(image28, [inputSize10, inputSize10], false); + } + if (rgb) { + t2.mul = tf16.mul(t2.resize, 255); + t2.normalize = tf16.sub(t2.mul, [103.939, 116.779, 123.68]); + t2.emotion = model8 == null ? void 0 : model8.execute(t2.normalize); + } else { + 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, config3) { + var _a, _b; + const tensor6 = input.image || input.tensor || input; + if (!(model9 == null ? void 0 : model9.inputs[0].shape)) return tensor6; + let crop; + if (((_a = config3.face.description) == null ? void 0 : _a["crop"]) > 0) { + const cropval = (_b = config3.face.description) == null ? void 0 : _b["crop"]; + const box = [[cropval, cropval, 1 - cropval, 1 - cropval]]; + crop = tf17.image.cropAndResize(tensor6, box, [0], [model9.inputs[0].shape[2], model9.inputs[0].shape[1]]); + } else { + 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, config3); + 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, _c, _d; + if (!(model12 == null ? void 0 : model12.inputs[0].shape)) return; + const t2 = {}; + let box = [[0, 0.1, 0.9, 0.9]]; + if (((_a2 = config3.face.gear) == null ? void 0 : _a2["crop"]) > 0) { + const crop = (_b2 = config3.face.gear) == null ? void 0 : _b2["crop"]; + box = [[crop, crop, 1 - crop, 1 - crop]]; + } + 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 ((_c = config3.face.gear) == null ? void 0 : _c.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] > (((_d = config3.face.gear) == null ? void 0 : _d.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, _b2, _c2; + if (!(model13 == null ? void 0 : model13.inputs) || !model13.inputs[0] || !model13.inputs[0].shape) return; + const t2 = {}; + if (((_a2 = config3.face["ssrnet"]) == null ? void 0 : _a2["crop"]) > 0) { + const crop = (_b2 = config3.face["ssrnet"]) == null ? void 0 : _b2["crop"]; + const box = [[crop, crop, 1 - crop, 1 - crop]]; + t2.resize = tf21.image.cropAndResize(image28, box, [0], [model13.inputs[0].shape[2], model13.inputs[0].shape[1]]); + } else { + 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 ((_c2 = config3.face["ssrnet"]) == null ? void 0 : _c2.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 rgb2 = [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, _b2, _c2; + if (!(model14 == null ? void 0 : model14.inputs[0].shape)) return; + const t2 = {}; + if (((_a2 = config3.face["ssrnet"]) == null ? void 0 : _a2["crop"]) > 0) { + const crop = (_b2 = config3.face["ssrnet"]) == null ? void 0 : _b2["crop"]; + const box = [[crop, crop, 1 - crop, 1 - crop]]; + t2.resize = tf22.image.cropAndResize(image28, box, [0], [model14.inputs[0].shape[2], model14.inputs[0].shape[1]]); + } else { + t2.resize = tf22.image.resizeBilinear(image28, [model14.inputs[0].shape[2], model14.inputs[0].shape[1]], false); + } + t2.enhance = tf22.tidy(() => { + var _a3, _b3; + let normalize2; + if (((_b3 = (_a3 = model14 == null ? void 0 : model14.inputs) == null ? void 0 : _a3[0].shape) == null ? void 0 : _b3[3]) === 1) { + const [red, green, blue] = tf22.split(t2.resize, 3, 3); + const redNorm = tf22.mul(red, rgb2[0]); + const greenNorm = tf22.mul(green, rgb2[1]); + const blueNorm = tf22.mul(blue, rgb2[2]); + const grayscale = tf22.addN([redNorm, greenNorm, blueNorm]); + normalize2 = tf22.mul(tf22.sub(grayscale, constants.tf05), 2); + } else { + normalize2 = tf22.mul(tf22.sub(t2.resize, constants.tf05), 2); + } + return normalize2; + }); + const obj = { gender: "unknown", genderScore: 0 }; + if ((_c2 = config3.face["ssrnet"]) == null ? void 0 : _c2.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 = [ + // x distance between extreme point and center point normalized with eye size + (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 == null ? void 0 : f.leftEyeIris) || !(f == null ? void 0 : f.rightEyeIris)) 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], + // just for convenience + nameMapping: { 0: "thumb", 1: "index", 2: "middle", 3: "ring", 4: "pinky" }, + // Describes mapping of joints based on the 21 points returned by handpose. + // [0] Palm + // [1-4] Thumb + // [5-8] Index + // [9-12] Middle + // [13-16] Ring + // [17-20] 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 = { + // curl estimation + HALF_CURL_START_LIMIT: 60, + NO_CURL_START_LIMIT: 130, + // direction estimation + 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 (rightIrisCenterX > 0.04) gestures.push({ iris: i, gesture: "looking right" }); + } else { + if (leftIrisCenterX > 0.04) 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) { + this.skipped++; + } else { + boxes = await this.handDetector.predict(image28, config3); + this.skipped = 0; + } + 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; +function initPipeline() { + const handDetector = handDetectorModel ? new HandDetector(handDetectorModel) : void 0; + if (handDetector && handPoseModel) handPipeline = new HandPipeline(handDetector, handPoseModel); +} +async function predict14(input, config3) { + if (!handPipeline) initPipeline(); + 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 loadDetect2(config3) { + var _a; + if (env.initial) handDetectorModel = null; + if (!handDetectorModel) handDetectorModel = await loadModel((_a = config3.hand.detector) == null ? void 0 : _a.modelPath); + else if (config3.debug) log("cached model:", handDetectorModel["modelUrl"]); + return handDetectorModel; +} +async function loadSkeleton(config3) { + var _a; + if (env.initial) handPoseModel = null; + if (!handPoseModel) handPoseModel = await loadModel((_a = config3.hand.skeleton) == null ? void 0 : _a.modelPath); + else if (config3.debug) log("cached model:", handPoseModel["modelUrl"]); + return 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: [0, 1, 2, 3, 4], + index: [0, 5, 6, 7, 8], + middle: [0, 9, 10, 11, 12], + ring: [0, 13, 14, 15, 16], + pinky: [0, 17, 18, 19, 20], + palm: [0], + */ + 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 loadDetect3(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 loadSkeleton2(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 = { + // initial values inherited from hand detect + 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 = [ + // used to create part labels + "nose", + "leftEye", + "rightEye", + "leftEar", + "rightEar", + "leftShoulder", + "rightShoulder", + "leftElbow", + "rightElbow", + "leftWrist", + "rightWrist", + "leftHip", + "rightHip", + "leftKnee", + "rightKnee", + "leftAnkle", + "rightAnkle" +]; +var horizontal = [ + // used to fix left vs right + ["leftEye", "rightEye"], + ["leftEar", "rightEar"], + ["leftShoulder", "rightShoulder"], + ["leftElbow", "rightElbow"], + ["leftWrist", "rightWrist"], + ["leftHip", "rightHip"], + ["leftKnee", "rightKnee"], + ["leftAnkle", "rightAnkle"] +]; +var vertical = [ + // used to remove unlikely keypoint positions + ["leftKnee", "leftShoulder"], + ["rightKnee", "rightShoulder"], + ["leftAnkle", "leftKnee"], + ["rightAnkle", "rightKnee"] +]; +var relative = [ + // used to match relative body parts + [["leftHip", "rightHip"], ["leftShoulder", "rightShoulder"]], + [["leftElbow", "rightElbow"], ["leftShoulder", "rightShoulder"]] +]; +var connected3 = { + // used to create body outline in annotations + 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, _x, _y, _z; + 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); + let annotations2 = newResult.face[i].annotations; + if (Object.keys(bufferedResult.face[i].annotations).length !== Object.keys(newResult.face[i].annotations).length) { + bufferedResult.face[i].annotations = newResult.face[i].annotations; + annotations2 = bufferedResult.face[i].annotations; + } else if (newResult.face[i].annotations) { + for (const key of Object.keys(newResult.face[i].annotations)) { + annotations2[key] = ((_i = (_h = (_g = newResult.face[i]) == null ? void 0 : _g.annotations) == null ? void 0 : _h[key]) == null ? void 0 : _i[0]) ? newResult.face[i].annotations[key].map((val, j) => val.map((coord, k) => ((bufferedFactor - 1) * bufferedResult.face[i].annotations[key][j][k] + coord) / bufferedFactor)) : null; + } + } + 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 = (_j = newResult.face[i].rotation) == null ? void 0 : _j.matrix; + rotation.angle = { + roll: ((bufferedFactor - 1) * (((_l = (_k = bufferedResult.face[i].rotation) == null ? void 0 : _k.angle) == null ? void 0 : _l.roll) || 0) + (((_n = (_m = newResult.face[i].rotation) == null ? void 0 : _m.angle) == null ? void 0 : _n.roll) || 0)) / bufferedFactor, + yaw: ((bufferedFactor - 1) * (((_p = (_o = bufferedResult.face[i].rotation) == null ? void 0 : _o.angle) == null ? void 0 : _p.yaw) || 0) + (((_r = (_q = newResult.face[i].rotation) == null ? void 0 : _q.angle) == null ? void 0 : _r.yaw) || 0)) / bufferedFactor, + pitch: ((bufferedFactor - 1) * (((_t = (_s = bufferedResult.face[i].rotation) == null ? void 0 : _s.angle) == null ? void 0 : _t.pitch) || 0) + (((_v = (_u = newResult.face[i].rotation) == null ? void 0 : _u.angle) == null ? void 0 : _v.pitch) || 0)) / bufferedFactor + }; + rotation.gaze = { + // not fully correct due projection on circle, also causes wrap-around draw on jump from negative to positive + bearing: ((bufferedFactor - 1) * (((_w = bufferedResult.face[i].rotation) == null ? void 0 : _w.gaze.bearing) || 0) + (((_x = newResult.face[i].rotation) == null ? void 0 : _x.gaze.bearing) || 0)) / bufferedFactor, + strength: ((bufferedFactor - 1) * (((_y = bufferedResult.face[i].rotation) == null ? void 0 : _y.gaze.strength) || 0) + (((_z = newResult.face[i].rotation) == null ? void 0 : _z.gaze.strength) || 0)) / bufferedFactor + }; + bufferedResult.face[i] = { ...newResult.face[i], rotation, box, boxRaw, annotations: annotations2 }; + } else { + bufferedResult.face[i] = { ...newResult.face[i], box, boxRaw, annotations: annotations2 }; + } + } + } + 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 load15(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 load15(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], + // dont touch batch + [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 + [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 + [0, 0] + // dont touch rbg + ]; + 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 load16(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; + if (tf32.env().flagRegistry.WEBGL_USE_SHAPES_UNIFORMS) tf32.env().set("WEBGL_USE_SHAPES_UNIFORMS", false); + 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: [ + // normalized to input image size + 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 boxScore = Math.round(100 * kpt4[51 + 4]) / 100; + if (boxScore > 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 boxRaw = [kpt4[51 + 1], kpt4[51 + 0], kpt4[51 + 3] - kpt4[51 + 1], kpt4[51 + 2] - kpt4[51 + 0]]; + const boxNorm = [Math.trunc(boxRaw[0] * (image28.shape[2] || 0)), Math.trunc(boxRaw[1] * (image28.shape[1] || 0)), Math.trunc(boxRaw[2] * (image28.shape[2] || 0)), Math.trunc(boxRaw[3] * (image28.shape[1] || 0))]; + 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: boxScore, box: boxNorm, 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 load17(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 = [ + // results normalized to input image pixels + boxRaw[0] * outputShape[0], + boxRaw[1] * outputShape[1], + boxRaw[2] * outputShape[0], + boxRaw[3] * outputShape[1] + ]; + const result = { + id: id++, + // strideSize, + score: Math.round(100 * score) / 100, + class: j + 1, + label: labels2[j].label, + // center: [Math.trunc(outputShape[0] * cx), Math.trunc(outputShape[1] * cy)], + // centerRaw: [cx, cy], + 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 { + // function call + constructor(maxSize2, getElementValue) { + __publicField(this, "priorityQueue"); + // don't touch + __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" + /* displacementBwd */ +]; +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 load18(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 load19(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 rgb3 = 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([rgb3, a], -1); + tf35.dispose([rgb3, 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 load19(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 load20(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 load20(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")) ? load16(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")) ? load18(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")) ? loadDetect3(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")) ? loadSkeleton2(this.instance.config) : null; + if (this.instance.config.hand.enabled && !this.models.handdetect && ((_v = (_u = this.instance.config.hand.detector) == null ? void 0 : _u.modelPath) == null ? void 0 : _v.includes("handdetect"))) { + m.handdetect = loadDetect2(this.instance.config); + m.handskeleton = loadSkeleton(this.instance.config); + } + 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")) ? load17(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")) ? load20(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")) ? load15(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")) ? load19(this.instance.config) : null; + for (const [model23, promise] of Object.entries(m)) { + if (promise == null ? void 0 : promise["then"]) promise["then"]((val) => this.models[model23] = val); + } + await Promise.all(Object.values(m)); + } + 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 +14004,8 @@ PQ4GJ+ashuK0MhWaoWcA0AaOmASMK7jRNPWYBmHyiuepO2x10qfcv6vYxCzYqoGK4HVYVTJrmb5l c6oaM5TUJ8EgGsG4kLNUHT0M64OaqMMikSRsuKbnFMRLG3zVehOaGNE445NNlnVFpDMu6uie9Vo1 8z5mOAOST2pDK91cNN+5tsrH3PrW54a06KxT7fdrlh/q1Pc+tJ6IUdZGvHPLezMcnBOWbsPap5r3 ylFtbdT1xUWNWzU0/Zbwlgfmx8zGsHWtRHmMqE59aAMyNifvHPc1f0gtPdqkY5JosJHeNci2tktY -euPnNY+oXWZEVJNrZ9aun8SIq/CzodHuriIokhDIR1ronbKZr0o6o8ipoz//2Q==`,Xt=` +euPnNY+oXWZEVJNrZ9aun8SIq/CzodHuriIokhDIR1ronbKZr0o6o8ipoz//2Q==`; +var body3 = ` /9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAsICAoIBwsKCQoNDAsNERwSEQ8PESIZGhQcKSQrKigk JyctMkA3LTA9MCcnOEw5PUNFSElIKzZPVU5GVEBHSEX/2wBDAQwNDREPESESEiFFLicuRUVFRUVF RUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUX/wAARCASwBLADASIA @@ -837,4 +14573,606 @@ AAAAAAJAAAAAAAAAAAAAABAJEAAAAAAAAAAAAAAAIEoBKAAAAAAAAAAAAAAABAlAAAAAAAIAAAAA BAkBAkBAkBAlACEgMZjdjbFW8bWrEx8YWANb6Fp+bfwab+vLDKMFK9qxH5L0bAr8OPRPKz2AY7J2 SbAjYZAI2E7AIEgIEgIEgMdkSy2NgY7MdlmyNoBXsxmFuyNgVTVjNV3KjlBRNTlXTVHKCrlIqt5T lBhEMohlFerLlBjEMohMVTEARDKCITsAk2AEgAAAkAAAAAAAAAAAAAAAAAAAAAAAASAAAAAAAAD/ -2Q==`;async function xa(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(qt);break;case"body":case"full":n=await t(Xt);break;default:n=null}if(n){let r=await createImageBitmap(n);o=await e.detect(r,e.config),r.close()}return o}async function ya(e){return new Promise(t=>{let n;switch(e.config.warmup){case"face":n="data:image/jpeg;base64,"+qt;break;case"full":case"body":n="data:image/jpeg;base64,"+Xt;break;default:n=""}let o;if(typeof Image!="undefined")o=new Image;else if(R.Image)o=new R.Image;else{t(void 0);return}o.onload=async()=>{let r=Ae(o.naturalWidth,o.naturalHeight);if(!r)h("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 fa(e){let t=r=>Buffer.from(r,"base64"),n;e.config.warmup==="face"?n=t(qt):n=t(Xt);let o;if("node"in d0&&d0.getBackend()==="tensorflow"){let r=d0.node.decodeJpeg(n),s=d0.expandDims(r,0);e.tf.dispose(r),o=await e.detect(s,e.config),e.tf.dispose(s)}else e.config.debug&&h("Warmup tfjs-node not loaded");return o}async function ma(e){let t;return typeof createImageBitmap=="function"?t=await xa(e):typeof Image!="undefined"||R.Canvas!==void 0?t=await ya(e):t=await fa(e),t}async function pa(e){var a,l,c,x;if(!d0.env().flagRegistry.ENGINE_COMPILE_ONLY)return;let t=d0.getBackend(),n=d0.backend();if(t!=="webgl"&&t!=="humangl"||!(n!=null&&n.checkCompileCompletion))return;d0.env().set("ENGINE_COMPILE_ONLY",!0);let o=d0.engine().state.numTensors,r=[];for(let[i,y]of Object.entries(e.models.models)){if(!y)continue;let d=y!=null&&y.modelSignature&&((l=(a=y==null?void 0:y.inputs)==null?void 0:a[0])!=null&&l.shape)?[...y.inputs[0].shape]:[1,64,64,3],m=y!=null&&y.modelSignature&&((x=(c=y==null?void 0:y.inputs)==null?void 0:c[0])!=null&&x.dtype)?y.inputs[0].dtype:"float32";for(let u=0;ud0.dispose(g)):d0.dispose(u)}catch(u){e.config.debug&&h("compile fail model:",i)}d0.dispose(f)}let s=await n.checkCompileCompletionAsync();n.getUniformLocations(),e.config.debug&&h("compile pass:",{models:r,kernels:s.length}),d0.env().set("ENGINE_COMPILE_ONLY",!1);let A=d0.engine().state.numTensors;A-o>0&&h("tensor leak:",A-o)}async function Do(e,t){await O2(e,!1);let n=v();return e.state="warmup",t&&(e.config=a0(e.config,t)),!e.config.warmup||e.config.warmup.length===0||e.config.warmup==="none"?Te():new Promise(async o=>{await e.models.load(),await pa(e);let r=await ma(e),s=v();e.config.debug&&h("warmup",e.config.warmup,Math.round(s-n),"ms"),e.emit("warmup"),o(r)})}var P2,Z2,q2,Ut,Ye,E1=class{constructor(t){w(this,"version");w(this,"config");w(this,"result");w(this,"state");w(this,"process");w(this,"tf");w(this,"env",R);w(this,"draw",rt);w(this,"match",Wt);w(this,"models");w(this,"events");w(this,"faceTriangulation");w(this,"faceUVMap");w(this,"performance");ue(this,P2,void 0);ue(this,Z2,void 0);ue(this,q2,void 0);w(this,"analyze",(...t)=>{if(!Y0(this,Z2))return;let n=this.tf.engine().state.numTensors,o=Y0(this,P2);Re(this,P2,n);let r=n-o;r!==0&&h(...t,r)});ue(this,Ut,t=>{if(!Y0(this,q2))return null;if(!t)return"input is not defined";if(this.env.node&&!(t instanceof de.Tensor))return"input must be a tensor";try{this.tf.getBackend()}catch(n){return"backend not loaded"}return null});w(this,"webcam",new Q2);w(this,"emit",t=>{var n;(n=this.events)!=null&&n.dispatchEvent&&this.events.dispatchEvent(new Event(t))});ue(this,Ye,{});let n=(de.version.tfjs||de.version_core).replace(/-(.*)/,"");Ke.wasmPath=`https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@${n}/dist/`,Ke.modelBasePath=R.browser?"../models/":"file://models/",this.version=n5,Object.defineProperty(this,"version",{value:n5}),this.config=JSON.parse(JSON.stringify(Ke)),Object.seal(this.config),this.config.cacheModels=typeof indexedDB!="undefined",t&&(this.config=a0(this.config,t)),X1(this.config),this.tf=de,this.state="idle",Re(this,P2,0),Re(this,Z2,!1),Re(this,q2,!1),this.performance={},this.events=typeof EventTarget!="undefined"?new EventTarget:void 0,this.models=new V2(this),l5(),this.result=Te(),this.process={tensor:null,canvas:null},this.faceTriangulation=F3,this.faceUVMap=B3,Zt(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(Ke)),this.config.backend=t,e5(),R.initial=!0}validate(t){let n=Qt(Ke,t||this.config);return n.length===0&&(this.config=a0(this.config,t)),n}now(){return v()}image(t,n=!1){return K2(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 K2(t,this.config);if(!o.tensor)return null;let r=null;return(s=this.config.segmentation.modelPath)!=null&&s.includes("rvm")&&(r=await No(o.tensor,this.config)),(A=this.config.segmentation.modelPath)!=null&&A.includes("meet")&&(r=await co(o.tensor,this.config)),(a=this.config.segmentation.modelPath)!=null&&a.includes("selfie")&&(r=await Lo(o.tensor,this.config)),de.dispose(o.tensor),r}compare(t,n){return q1(this.config,t,n)}async init(){await O2(this,!0),await this.tf.ready(),e5()}async load(t){this.state="load";let n=v(),o=Object.values(this.models.models).filter(A=>A).length;t&&(this.config=a0(this.config,t)),this.env.initial&&(await O2(this,!1)||h("error: backend check failed"),await de.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),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.models).filter(A=>A).length!==o&&(this.models.validate(),this.emit("load"));let s=Math.trunc(v()-n);s>(this.performance.loadModels||0)&&(this.performance.loadModels=this.env.perfadd?(this.performance.loadModels||0)+s:s)}next(t=this.result){return lo(t,this.config)}async warmup(t){let n=v(),o=await Do(this,t),r=v();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 u,g,T,p,b,k,P,I,B,_,Z,$,A0,t0,n0,j0,M,T0,C0,x0,K;this.state="config";let r;this.config=a0(this.config,n),this.state="check";let s=Y0(this,Ut).call(this,t);s&&(h(s,t),this.emit("error"),o(Te(s)));let A=v();await this.load(),r=v(),this.state="image";let a=await K2(t,this.config);if(this.process=a,this.performance.inputProcess=this.env.perfadd?(this.performance.inputProcess||0)+Math.trunc(v()-r):Math.trunc(v()-r),this.analyze("Get Image:"),!a.tensor){this.config.debug&&h("could not convert input to tensor"),this.emit("error"),o(Te("could not convert input to tensor"));return}this.emit("image"),r=v(),this.config.skipAllowed=await Z1(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(v()-r):Math.trunc(v()-r),this.analyze("Check Changed:");let l=[],c=[],x=[],i=[];this.state="detect:face",this.config.async?(l=this.config.face.enabled?Q5(this,a.tensor):[],this.performance.face&&delete this.performance.face):(r=v(),l=this.config.face.enabled?await Q5(this,a.tensor):[],this.performance.face=this.env.perfadd?(this.performance.face||0)+Math.trunc(v()-r):Math.trunc(v()-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?((u=this.config.body.modelPath)!=null&&u.includes("posenet")?c=this.config.body.enabled?v1(a.tensor,y):[]:(g=this.config.body.modelPath)!=null&&g.includes("blazepose")?c=this.config.body.enabled?f5(a.tensor,y):[]:(T=this.config.body.modelPath)!=null&&T.includes("efficientpose")?c=this.config.body.enabled?T5(a.tensor,y):[]:(p=this.config.body.modelPath)!=null&&p.includes("movenet")&&(c=this.config.body.enabled?m1(a.tensor,y):[]),this.performance.body&&delete this.performance.body):(r=v(),(b=this.config.body.modelPath)!=null&&b.includes("posenet")?c=this.config.body.enabled?await v1(a.tensor,y):[]:(k=this.config.body.modelPath)!=null&&k.includes("blazepose")?c=this.config.body.enabled?await f5(a.tensor,y):[]:(P=this.config.body.modelPath)!=null&&P.includes("efficientpose")?c=this.config.body.enabled?await T5(a.tensor,y):[]:(I=this.config.body.modelPath)!=null&&I.includes("movenet")&&(c=this.config.body.enabled?await m1(a.tensor,y):[]),this.performance.body=this.env.perfadd?(this.performance.body||0)+Math.trunc(v()-r):Math.trunc(v()-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?((_=(B=this.config.hand.detector)==null?void 0:B.modelPath)!=null&&_.includes("handdetect")?x=this.config.hand.enabled?o1(a.tensor,d):[]:($=(Z=this.config.hand.detector)==null?void 0:Z.modelPath)!=null&&$.includes("handtrack")&&(x=this.config.hand.enabled?A1(a.tensor,d):[]),this.performance.hand&&delete this.performance.hand):(r=v(),(t0=(A0=this.config.hand.detector)==null?void 0:A0.modelPath)!=null&&t0.includes("handdetect")?x=this.config.hand.enabled?await o1(a.tensor,d):[]:(j0=(n0=this.config.hand.detector)==null?void 0:n0.modelPath)!=null&&j0.includes("handtrack")&&(x=this.config.hand.enabled?await A1(a.tensor,d):[]),this.performance.hand=this.env.perfadd?(this.performance.hand||0)+Math.trunc(v()-r):Math.trunc(v()-r)),this.analyze("End Hand:"),this.analyze("Start Object:"),this.state="detect:object",this.config.async?((M=this.config.object.modelPath)!=null&&M.includes("nanodet")?i=this.config.object.enabled?u1(a.tensor,this.config):[]:(T0=this.config.object.modelPath)!=null&&T0.includes("centernet")&&(i=this.config.object.enabled?u5(a.tensor,this.config):[]),this.performance.object&&delete this.performance.object):(r=v(),(C0=this.config.object.modelPath)!=null&&C0.includes("nanodet")?i=this.config.object.enabled?await u1(a.tensor,this.config):[]:(x0=this.config.object.modelPath)!=null&&x0.includes("centernet")&&(i=this.config.object.enabled?await u5(a.tensor,this.config):[]),this.performance.object=this.env.perfadd?(this.performance.object||0)+Math.trunc(v()-r):Math.trunc(v()-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 m=[];this.config.gesture.enabled&&(r=v(),m=[...Dn(l),...Wn(c),...Bn(x),...Fn(l)],this.config.async?this.performance.gesture&&delete this.performance.gesture:this.performance.gesture=this.env.perfadd?(this.performance.gesture||0)+Math.trunc(v()-r):Math.trunc(v()-r)),this.performance.total=this.env.perfadd?(this.performance.total||0)+Math.trunc(v()-A):Math.trunc(v()-A);let f=((K=this.process.tensor)==null?void 0:K.shape)||[0,0,0,0];this.result={face:l,body:c,hand:x,gesture:m,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,m,f)}},de.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?(Y0(this,Ye)[t.id]||(this.config.debug&&h("video start",t.id),Y0(this,Ye)[t.id]=!0),!t.paused&&Y0(this,Ye)[t.id]&&t.readyState>=2&&await this.detect(t),o>0&&await this.sleep(o),Y0(this,Ye)[t.id]&&requestAnimationFrame(()=>this.video(t,n,o))):(this.config.debug&&h("video stop",t.id),Y0(this,Ye)[t.id]=!1)}};P2=new WeakMap,Z2=new WeakMap,q2=new WeakMap,Ut=new WeakMap,Ye=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 { + resolve(void 0); + 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.models)) { + if (!model23) continue; + 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 { + // definition end + /** Constructor for **Human** library that is futher used for all operations + * @param userConfig - user configuration object {@link Config} + */ + constructor(userConfig) { + /** Current version of Human library in *semver* format */ + __publicField(this, "version"); + /** Current configuration + * - Defaults: [config](https://github.com/vladmandic/human/blob/main/src/config.ts#L262) + */ + __publicField(this, "config"); + /** Last known result of detect run + * - Can be accessed anytime after initial detection + */ + __publicField(this, "result"); + /** Current state of Human library + * - Can be polled to determine operations that are currently executed + * - Progresses through: 'config', 'check', 'backend', 'load', 'run:', 'idle' + */ + __publicField(this, "state"); + /** currenty processed image tensor and canvas */ + __publicField(this, "process"); + /** Instance of TensorFlow/JS used by Human + * - Can be embedded or externally provided + * [TFJS API](https://js.tensorflow.org/api/latest/) + */ + __publicField(this, "tf"); + /** Object containing environment information used for diagnostics */ + __publicField(this, "env", env); + /** Draw helper classes that can draw detected objects on canvas using specified draw + * - canvas: draws input to canvas + * - options: are global settings for all draw operations, can be overriden for each draw method {@link DrawOptions} + * - face, body, hand, gesture, object, person: draws detected results as overlays on canvas + */ + // 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 }; + __publicField(this, "draw", draw_exports); + /** Face Matching + * - similarity: compare two face descriptors and return similarity index + * - distance: compare two face descriptors and return raw calculated differences + * - find: compare face descriptor to array of face descriptors and return best match + */ + __publicField(this, "match", match_exports); + /** Currently loaded models + * @internal + * {@link models#Models} + */ + __publicField(this, "models"); + /** Container for events dispatched by Human + * Possible events: + * - `create`: triggered when Human object is instantiated + * - `load`: triggered when models are loaded (explicitly or on-demand) + * - `image`: triggered when input image is processed + * - `result`: triggered when detection is complete + * - `warmup`: triggered when warmup is complete + * - `error`: triggered on some errors + */ + __publicField(this, "events"); + /** Reference face triangualtion array of 468 points, used for triangle references between points */ + __publicField(this, "faceTriangulation"); + /** Refernce UV map of 468 values, used for 3D mapping of the face mesh */ + __publicField(this, "faceUVMap"); + /** Performance object that contains values for all recently performed operations */ + __publicField(this, "performance"); + // perf members are dynamically defined as needed + __privateAdd(this, _numTensors); + __privateAdd(this, _analyzeMemoryLeaks); + __privateAdd(this, _checkSanity); + /** internal function to measure tensor leaks */ + __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); + }); + /** internal function for quick sanity check on inputs @hidden */ + __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; + }); + /** WebCam helper methods + * + */ + __publicField(this, "webcam", new WebCam()); + /** emit event */ + __publicField(this, "emit", (event) => { + var _a; + if ((_a = this.events) == null ? void 0 : _a.dispatchEvent) this.events.dispatchEvent(new Event(event)); + }); + /** internal structure that keeps track of processed videos @hidden */ + __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 configuration to default values */ + reset() { + const currentBackend = this.config.backend; + this.config = JSON.parse(JSON.stringify(config)); + this.config.backend = currentBackend; + reset(); + env.initial = true; + } + /** Validate current configuration schema */ + validate(userConfig) { + const msgs = validate(config, userConfig || this.config); + if (msgs.length === 0) this.config = mergeDeep(this.config, userConfig); + return msgs; + } + /** Utility wrapper for performance.now() */ + now() { + return now(); + } + /** Process input as return canvas and tensor + * + * @param input - any input {@link Input} + * @param getTensor - should image processing also return tensor or just canvas + * Returns object with `tensor` and `canvas` + */ + image(input, getTensor = false) { + return process2(input, this.config, getTensor); + } + /** Segmentation method takes any input and returns RGBA tensor + * Note: Segmentation is not triggered as part of detect process + * + * @param input - {@link Input} + * Returns tensor which contains image data in RGBA format + */ + 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 two input tensors for pixel similarity + * - use `human.image` to process any valid input and get a tensor that can be used for compare + * - when passing manually generated tensors: + * - both input tensors must be in format [1, height, width, 3] + * - if resolution of tensors does not match, second tensor will be resized to match resolution of the first tensor + * - return value is pixel similarity score normalized by input resolution and rgb channels + */ + compare(firstImageTensor, secondImageTensor) { + return compare(this.config, firstImageTensor, secondImageTensor); + } + /** Explicit backend initialization + * - Normally done implicitly during initial load phase + * - Call to explictly register and initialize TFJS backend without any other operations + * - Use when changing backend during runtime + */ + async init() { + await check(this, true); + await this.tf.ready(); + reset(); + } + /** Load method preloads all configured models on-demand + * - Not explicitly required as any required model is load implicitly on it's first run + * + * @param userConfig - {@link Config} + */ + 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; + } + /** Runs interpolation using last known result and returns smoothened result + * Interpolation is based on time since last known result so can be called independently + * + * @param result - {@link Result} optional use specific result set to run interpolation on + * @returns result - {@link Result} + */ + next(result = this.result) { + return calc2(result, this.config); + } + /** Warmup method pre-initializes all configured models for faster inference + * - can take significant time on startup + * - only used for `webgl` and `humangl` backends + * @param userConfig - {@link Config} + * @returns result - {@link Result} + */ + async warmup(userConfig) { + const t0 = now(); + const res = await warmup(this, userConfig); + const t1 = now(); + this.performance.warmup = Math.trunc(t1 - t0); + return res; + } + /** Run detect with tensorflow profiling + * - result object will contain total exeuction time information for top-20 kernels + * - actual detection object can be accessed via `human.result` + */ + 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; + } + /** Main detection method + * - Analyze configuration: {@link Config} + * - Pre-process input: {@link Input} + * - Run inference for all configured models + * - Process and return result: {@link Result} + * + * @param input - {@link Input} + * @param userConfig - {@link Config} + * @returns result - {@link Result} + */ + 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); + }); + } + /** Helper function + * @param ms - sleep time in miliseconds + */ + async sleep(ms) { + return new Promise((resolve) => { + setTimeout(resolve, ms); + }); + } + /** Continously detect video frames + * @param element - HTMLVideoElement input + * @param run - boolean run continously or stop if already running, default true + * @param delay - number delay detection between frames for number of miliseconds, default 0 + */ + 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 7e8b779f..d5eb291d 100644 --- a/dist/human.node.js +++ b/dist/human.node.js @@ -4,7 +4,302 @@ author: ' */ -"use strict";var Do=Object.create;var w2=Object.defineProperty;var Fo=Object.getOwnPropertyDescriptor;var Bo=Object.getOwnPropertyNames;var Ho=Object.getPrototypeOf,Go=Object.prototype.hasOwnProperty;var Vo=(e,t,n)=>t in e?w2(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var Zo=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),ze=(e,t)=>{for(var n in t)w2(e,n,{get:t[n],enumerable:!0})},I1=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of Bo(t))!Go.call(e,r)&&r!==n&&w2(e,r,{get:()=>t[r],enumerable:!(o=Fo(t,r))||o.enumerable});return e};var V=(e,t,n)=>(n=e!=null?Do(Ho(e)):{},I1(t||!e||!e.__esModule?w2(n,"default",{value:e,enumerable:!0}):n,e)),Xo=e=>I1(w2({},"__esModule",{value:!0}),e);var w=(e,t,n)=>(Vo(e,typeof t!="symbol"?t+"":t,n),n),N1=(e,t,n)=>{if(!t.has(e))throw TypeError("Cannot "+n)};var Y0=(e,t,n)=>(N1(e,t,"read from private field"),n?n.call(e):t.get(e)),ue=(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)},Re=(e,t,n,o)=>(N1(e,t,"write to private field"),o?o.call(e,n):t.set(e,n),n);var G=Zo((ga,Kt)=>{"use strict";var Ut=Object.defineProperty,qo=Object.getOwnPropertyDescriptor,Uo=Object.getOwnPropertyNames,Yo=Object.prototype.hasOwnProperty,Ko=(e,t)=>{for(var n in t)Ut(e,n,{get:t[n],enumerable:!0})},qt=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of Uo(t))!Yo.call(e,r)&&r!==n&&Ut(e,r,{get:()=>t[r],enumerable:!(o=qo(t,r))||o.enumerable});return e},Jo=(e,t,n)=>(qt(e,t,"default"),n&&qt(n,t,"default")),Qo=e=>qt(Ut({},"__esModule",{value:!0}),e),Yt={};Ko(Yt,{version:()=>or});Kt.exports=Qo(Yt);Jo(Yt,require("@tensorflow/tfjs-node"),Kt.exports);var L1="4.17.0",_o="4.17.0",$o="4.17.0",er="4.17.0",tr="4.17.0",nr="4.17.0",or={tfjs:L1,"tfjs-core":L1,"tfjs-converter":_o,"tfjs-backend-cpu":$o,"tfjs-backend-webgl":er,"tfjs-backend-wasm":tr,"tfjs-backend-webgpu":nr}});var ha={};ze(ha,{Env:()=>E2,Human:()=>w1,default:()=>w1,defaults:()=>Ke,draw:()=>nt,empty:()=>Te,env:()=>R,match:()=>Ot,models:()=>k1});module.exports=Xo(ha);var de=V(G());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 O1(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 v=()=>typeof performance!="undefined"?performance.now():parseInt((Number(process.hrtime.bigint())/1e3/1e3).toString());function Jt(e,t,n="config",o=[]){for(let r of Object.keys(t))if(typeof t[r]=="object")Jt(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&&h("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 Ke={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:!1,maxDetected:1,skipFrames:99,skipTime:2500,minConfidence:.2,minSize:0,iouThreshold:.1,scale:1.4,mask:!1,return:!1},mesh:{enabled:!0,modelPath:"facemesh.json",keepInvalid:!1},attention:{enabled:!1,modelPath:"facemesh-attention.json"},iris:{enabled:!0,scale:2.3,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-lite.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 W0=V(G());var N=V(G());var C1=` +"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 __typeError = (msg) => { + throw TypeError(msg); +}; +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( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + 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); +var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg); +var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj)); +var __privateAdd = (obj, member, value) => member.has(obj) ? __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), value); + +// dist/tfjs.esm.js +var require_tfjs_esm = __commonJS({ + "dist/tfjs.esm.js"(exports2, 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.21.0"; + var version22 = "4.21.0"; + var version32 = "4.21.0"; + var version42 = "4.21.0"; + var version5 = "4.21.0"; + var version6 = "4.21.0"; + var version7 = { + tfjs: version4, + "tfjs-core": version4, + // 'tfjs-data': tfjsDataVersion, + // 'tfjs-layers': tfjsLayersVersion, + "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 = /* @__PURE__ */ 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: false, + maxDetected: 1, + skipFrames: 99, + skipTime: 2500, + minConfidence: 0.2, + minSize: 0, + iouThreshold: 0.1, + scale: 1.4, + mask: false, + return: false + }, + mesh: { + enabled: true, + modelPath: "facemesh.json", + keepInvalid: false + }, + attention: { + enabled: false, + modelPath: "facemesh-attention.json" + }, + iris: { + enabled: true, + scale: 2.3, + 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-lite.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 +309,8 @@ vUv = uv; gl_Position = vec4(pos.x, pos.y*flipY, 0.0, 1.); } -`;var W1=` +`; +var colorMatrixWithAlpha = ` precision highp float; varying vec2 vUv; uniform sampler2D texture; @@ -26,7 +322,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]; } -`,D1=` +`; +var colorMatrixWithoutAlpha = ` precision highp float; varying vec2 vUv; uniform sampler2D texture; @@ -38,7 +335,8 @@ gl_FragColor.b = m[10] * c.r + m[11] * c.g + m[12] * c.b + m[14]; gl_FragColor.a = c.a; } -`,F1=` +`; +var pixelate = ` precision highp float; varying vec2 vUv; uniform vec2 size; @@ -51,7 +349,8 @@ vec2 coord = pixelate(vUv, size); gl_FragColor += texture2D(texture, coord); } -`,B1=` +`; +var blur = ` precision highp float; varying vec2 vUv; uniform sampler2D texture; @@ -74,7 +373,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; } -`,H1=` +`; +var convolution = ` precision highp float; varying vec2 vUv; uniform sampler2D texture; @@ -96,20 +396,6030 @@ 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))},_t=class{constructor(t,n,o){w(this,"uniform",{});w(this,"attribute",{});w(this,"gl");w(this,"id");w(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 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){h("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)){h(`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 G1(){let e=0,t=null,n=!1,o=-1,r=[null,null],s=[],A=null,a=null,l=Ae(100,100),c={},x={INTERMEDIATE:1},i=l.getContext("webgl");if(!i){h("filter: cannot get webgl context");return}this.gl=i;function y(T,p){if(!(T===l.width&&p===l.height)){if(l.width=T,l.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=i.createBuffer(),i.bindBuffer(i.ARRAY_BUFFER,A),i.bufferData(i.ARRAY_BUFFER,b,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,p){let b=i.createFramebuffer();i.bindFramebuffer(i.FRAMEBUFFER,b);let k=i.createRenderbuffer();i.bindRenderbuffer(i.RENDERBUFFER,k);let P=i.createTexture();return i.bindTexture(i.TEXTURE_2D,P),i.texImage2D(i.TEXTURE_2D,0,i.RGBA,T,p,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:b,texture:P}}function m(T){return r[T]=r[T]||d(l.width,l.height),r[T]}function f(T=0){if(!a)return;let p=null,b=null,k=!1;e===0?p=t:p=m(o).texture||null,e++,n&&!(T&x.INTERMEDIATE)?(b=null,k=e%2===0):(o=(o+1)%2,b=m(o).fbo||null),i.bindTexture(i.TEXTURE_2D,p),i.bindFramebuffer(i.FRAMEBUFFER,b),i.uniform1f(a.uniform.flipY,k?-1:1),i.drawArrays(i.TRIANGLES,0,6)}function u(T){if(c[T])return a=c[T],i.useProgram((a?a.id:null)||null),a;if(a=new _t(i,C1,T),!a)return h("filter: could not get webgl program"),null;let p=Float32Array.BYTES_PER_ELEMENT,b=4*p;return i.enableVertexAttribArray(a.attribute.pos),i.vertexAttribPointer(a.attribute.pos,2,i.FLOAT,!1,b,0*p),i.enableVertexAttribArray(a.attribute.uv),i.vertexAttribPointer(a.attribute.uv,2,i.FLOAT,!1,b,2*p),c[T]=a,a}let g={colorMatrix:T=>{let p=new Float32Array(T);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?D1:W1,k=u(b);k&&(i.uniform1fv(k.uniform.m,p),f())},brightness:T=>{let p=(T||0)+1;g.colorMatrix([p,0,0,0,0,0,p,0,0,0,0,0,p,0,0,0,0,0,1,0])},saturation:T=>{let p=(T||0)*2/3+1,b=(p-1)*-.5;g.colorMatrix([p,b,b,0,0,b,p,b,0,0,b,b,p,0,0,0,0,0,1,0])},desaturate:()=>{g.saturation(-1)},contrast:T=>{let p=(T||0)+1,b=-128*(p-1);g.colorMatrix([p,0,0,0,b,0,p,0,0,b,0,0,p,0,b,0,0,0,1,0])},negative:()=>{g.contrast(-2)},hue:T=>{T=(T||0)/180*Math.PI;let p=Math.cos(T),b=Math.sin(T),k=.213,P=.715,I=.072;g.colorMatrix([k+p*(1-k)+b*-k,P+p*-P+b*-P,I+p*-I+b*(1-I),0,0,k+p*-k+b*.143,P+p*(1-P)+b*.14,I+p*-I+b*-.283,0,0,k+p*-k+b*-(1-k),P+p*-P+b*P,I+p*(1-I)+b*I,0,0,0,0,0,1,0])},desaturateLuminance:()=>{g.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:()=>{g.colorMatrix([.393,.7689999,.18899999,0,0,.349,.6859999,.16799999,0,0,.272,.5339999,.13099999,0,0,0,0,0,1,0])},brownie:()=>{g.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:()=>{g.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:()=>{g.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:()=>{g.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:()=>{g.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:()=>{g.colorMatrix([0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0])},convolution:T=>{let p=new Float32Array(T),b=1/l.width,k=1/l.height,P=u(H1);P&&(i.uniform1fv(P.uniform.m,p),i.uniform2f(P.uniform.px,b,k),f())},detectEdges:()=>{g.convolution.call(this,[0,1,0,1,-4,1,0,1,0])},sobelX:()=>{g.convolution.call(this,[-1,0,1,-2,0,2,-1,0,1])},sobelY:()=>{g.convolution.call(this,[-1,-2,-1,0,0,0,1,2,1])},sharpen:T=>{let p=T||1;g.convolution.call(this,[0,-1*p,0,-1*p,1+4*p,-1*p,0,-1*p,0])},emboss:T=>{let p=T||1;g.convolution.call(this,[-2*p,-1*p,0,-1*p,1,1*p,0,1*p,2*p])},blur:T=>{let p=T/7/l.width,b=T/7/l.height,k=u(B1);k&&(i.uniform2f(k.uniform.px,0,b),f(x.INTERMEDIATE),i.uniform2f(k.uniform.px,p,0),f())},pixelate:T=>{let p=T/l.width,b=T/l.height,k=u(F1);k&&(i.uniform2f(k.uniform.size,p,b),f())}};this.add=function(T){let p=Array.prototype.slice.call(arguments,1),b=g[T];s.push({func:b,args:p})},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 p=0;px.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=[U.sub(n[0],o[0]),U.sub(n[1],o[1]),U.sub(n[2],o[2])],i=[U.sub(r[0],o[0]),U.sub(r[1],o[1]),U.sub(r[2],o[2])],y=[U.mul(x[0],l),U.mul(x[1],l),U.mul(x[2],l)],d=U.stack([y[0],y[1],y[2]],2);c=U.reshape(d,[1,t.shape[0]||0,t.shape[1]||0,3]),U.dispose([...x,...i,...y,d])}else c=U.expandDims(t,0);return U.dispose([...n,...o,...r,n,t,e]),c}var X2=3840,R0=null,M0=null,y2=null,e0,ne={inputSum:0,cacheDiff:1,sumMethod:0,inputTensor:void 0};function $t(){ne.inputSum=0,ne.cacheDiff=1,ne.sumMethod=0,ne.inputTensor=void 0}function Ae(e,t){let n;if(R.browser)if(R.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")n=document.createElement("canvas"),n.width=e,n.height=t;else if(typeof navigator!="undefined"&&navigator.product==="ReactNative")if(typeof R.Canvas!="undefined")n=new R.Canvas(e,t);else if(typeof globalThis.Canvas!="undefined")n=new globalThis.Canvas(e,t);else throw new Error("canvas error: attempted to use canvas in react-native without canvas support installed");else throw new Error("canvas error: attempted to run in browser but DOM is not defined");else typeof R.Canvas!="undefined"?n=new R.Canvas(e,t):typeof globalThis.Canvas!="undefined"&&(n=new globalThis.Canvas(e,t));return n}function q2(e,t){let n=t||Ae(e.width,e.height);return n.getContext("2d").drawImage(e,0,0),n}async function U2(e,t,n=!0){var y,d,m;if(!e)return t.debug&&h("input error: input is missing"),{tensor:null,canvas:null};if(!(e instanceof N.Tensor)&&!(typeof Image!="undefined"&&e instanceof Image)&&!(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 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 u=N.slice3d(e,[0,0,0],[-1,-1,3]);f=N.expandDims(u,0),N.dispose(u)}}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 u=N.cast(f,"float32");N.dispose(f),f=u}return{tensor:f,canvas:t.filter.return?M0:null}}if(typeof e.readyState!="undefined"&&e.readyState<=2)return t.debug&&h("input stream is not ready"),{tensor:null,canvas:R0};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&&h("cannot determine input dimensions"),{tensor:null,canvas:R0};let s=o,A=r;if(s>X2&&(s=X2,A=Math.trunc(s*r/o)),A>X2&&(A=X2,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");(!R0||R0.width!==s||R0.height!==A)&&(R0=Ae(s,A));let a=R0.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,R0.width,R0.height),a.setTransform(1,0,0,1,0,0)):a.drawImage(e,0,0,o,r,0,0,R0.width,R0.height),(!M0||R0.width!==M0.width||R0.height!==M0.height)&&(M0=Ae(R0.width,R0.height)),t.filter.enabled&&R.webgl.supported?(e0||(e0=R.browser?new G1:null),R.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),((m=e0.get())==null?void 0:m.length)>1?M0=e0.apply(R0):M0=e0.draw(R0)):(t.debug&&h("input process error: cannot initialize filters"),R.webgl.supported=!1,t.filter.enabled=!1,q2(R0,M0))):(q2(R0,M0),e0&&(e0=null),R.filter=!!e0),!n)return{tensor:null,canvas:M0};if(!M0)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(R.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((!y2||M0.width!==y2.width||M0.height!==y2.height)&&(y2=Ae(M0.width,M0.height)),N.browser&&R.browser)t.backend==="webgl"||t.backend==="humangl"||t.backend==="webgpu"?l=N.browser.fromPixels(M0):(y2=q2(M0),l=N.browser.fromPixels(y2));else{let g=q2(M0).getContext("2d").getImageData(0,0,s,A);c=g.data.length/s/A;let T=new Uint8Array(g.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 Z2(x):N.expandDims(x,0);if(N.dispose([l,x]),t.filter.autoBrightness){let f=N.max(i),u=await f.data();t.filter.brightness=u[0]>1?1-u[0]/255:1-u[0],N.dispose(f)}return{tensor:i,canvas:t.filter.return?M0:null}}async function V1(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(!ne.inputTensor)ne.inputTensor=N.clone(t);else if(ne.inputTensor.shape[1]!==t.shape[1]||ne.inputTensor.shape[2]!==t.shape[2])N.dispose(ne.inputTensor),ne.inputTensor=N.clone(t);else{let o={};o.diff=N.sub(t,ne.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([ne.inputTensor,o.diff,o.squared,o.sum]),ne.inputTensor=N.clone(t),n=s<=(e.cacheSensitivity||0)}return n}async function Z1(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=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,S2,j2,E2=class{constructor(){w(this,"browser");w(this,"node");w(this,"worker");w(this,"platform","");w(this,"agent","");w(this,"backends",[]);w(this,"initial");w(this,"filter");w(this,"tfjs");w(this,"offscreen");w(this,"perfadd",!1);w(this,"tensorflow",{version:void 0,gpu:void 0});w(this,"wasm",{supported:void 0,backend:void 0,simd:void 0,multithread:void 0});w(this,"webgl",{supported:void 0,backend:void 0,version:void 0,renderer:void 0,shader:void 0,vendor:void 0});w(this,"webgpu",{supported:void 0,backend:void 0,adapter:void 0});w(this,"cpu",{model:void 0,flags:[]});w(this,"kernels",[]);ue(this,z2,void 0);ue(this,S2,void 0);ue(this,j2,void 0);if(this.browser=typeof navigator!="undefined"&&typeof navigator.appVersion!="undefined",this.node=typeof process!="undefined"&&typeof process.versions!="undefined"&&typeof process.versions.node!="undefined",this.tfjs={version:W0.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"&&typeof navigator.userAgent!="undefined"){let t=navigator.userAgent||"",n=t.match(/\(([^()]+)\)/g);if(n!=null&&n[0]){let o=n[0].match(/\(([^()]+)\)/g);this.platform=o!=null&&o[0]?o[0].replace(/\(|\)/g,""):"",this.agent=t.replace(n[0],""),this.platform[1]&&(this.agent=this.agent.replace(n[1],"")),this.agent=this.agent.replace(/ /g," ")}}else typeof process!="undefined"&&(this.platform=`${process.platform} ${process.arch}`,this.agent=`NodeJS ${process.version}`)}get Canvas(){return Y0(this,z2)}set Canvas(t){Re(this,z2,t),globalThis.Canvas=t}get Image(){return Y0(this,S2)}set Image(t){Re(this,S2,t),globalThis.Image=t}get ImageData(){return Y0(this,j2)}set ImageData(t){Re(this,j2,t),globalThis.ImageData=t}async updateBackend(){this.backends=Object.keys(W0.engine().registryFactory);try{this.tensorflow={version:W0.backend().binding?W0.backend().binding.TF_Version:void 0,gpu:W0.backend().binding?W0.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 W0.env().getAsync("WASM_HAS_SIMD_SUPPORT"),this.wasm.multithread=await W0.env().getAsync("WASM_HAS_MULTITHREAD_SUPPORT"));let t=Ae(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!="undefined"&&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=W0.getKernelsForBackend(W0.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})}};z2=new WeakMap,S2=new WeakMap,j2=new WeakMap;var R=new E2;var K2=class{constructor(){w(this,"config");w(this,"element");w(this,"stream");w(this,"devices",[]);w(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});w(this,"start",async t=>{var r,s;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 A=document.getElementById(t.element);if(A&&A instanceof HTMLVideoElement)this.element=A;else return this.config.debug&&h("webcam","cannot get dom element",t.element),`webcam error: cannot get dom element: ${t.element}`}else if(t.element instanceof HTMLVideoElement)this.element=t.element;else return this.config.debug&&h("webcam","unknown dom element",t.element),`webcam error: unknown dom element: ${t.element}`;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"}};if(((r=this.config)==null?void 0:r.width)>0&&(n.video.width={ideal:this.config.width}),((s=this.config)==null?void 0:s.height)>0&&(n.video.height={ideal:this.config.height}),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))return this.config.debug&&h("webcam error","no devices"),"webcam error: no devices";try{this.stream=await navigator.mediaDevices.getUserMedia(n)}catch(A){return h("webcam",A),`webcam error: ${A}`}return this.stream?(this.element.srcObject=this.stream,await new Promise(A=>{this.element?this.element.onloadeddata=()=>A(!0):A(!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}),`webcam: ${this.label}`):(this.config.debug&&h("webcam error","no stream"),"webcam error no stream")});w(this,"pause",()=>{this.element&&this.element.pause()});w(this,"play",async()=>{this.element&&await this.element.play()});w(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 f2=V(G());var e5={};ze(e5,{"affectnet-mobilenet":()=>br,age:()=>gr,"anti-spoofing":()=>_r,antispoof:()=>ar,blazeface:()=>ir,"blazeface-back":()=>Tr,"blazeface-front":()=>vr,"blazepose-detector":()=>Rr,"blazepose-full":()=>Mr,"blazepose-heavy":()=>Pr,"blazepose-lite":()=>kr,centernet:()=>lr,default:()=>ds,efficientpose:()=>wr,"efficientpose-i-lite":()=>$r,"efficientpose-ii-lite":()=>es,"efficientpose-iv":()=>ts,emotion:()=>cr,faceboxes:()=>Er,facemesh:()=>dr,"facemesh-attention":()=>Sr,"facemesh-attention-pinto":()=>zr,"facemesh-detection-full":()=>jr,"facemesh-detection-short":()=>Ir,faceres:()=>xr,"faceres-deep":()=>Nr,gear:()=>Cr,"gear-e1":()=>Lr,"gear-e2":()=>Or,gender:()=>Dr,"gender-ssrnet-imdb":()=>Wr,handdetect:()=>Fr,"handlandmark-full":()=>Br,"handlandmark-lite":()=>yr,"handlandmark-sparse":()=>Hr,handskeleton:()=>Gr,handtrack:()=>fr,"insightface-efficientnet-b0":()=>ns,"insightface-ghostnet-strides1":()=>os,"insightface-ghostnet-strides2":()=>rs,"insightface-mobilenet-emore":()=>ss,"insightface-mobilenet-swish":()=>As,iris:()=>mr,liveness:()=>pr,meet:()=>Vr,mobileface:()=>Zr,mobilefacenet:()=>Xr,models:()=>ur,"movenet-lightning":()=>hr,"movenet-multipose":()=>qr,"movenet-thunder":()=>Ur,nanodet:()=>Yr,"nanodet-e":()=>as,"nanodet-g":()=>is,"nanodet-m":()=>ls,"nanodet-t":()=>cs,posenet:()=>Kr,rvm:()=>Jr,selfie:()=>Qr});var ar=853098,ir=538928,lr=4030290,cr=820516,dr=1477958,xr=6978814,yr=2023432,fr=2964837,mr=2599092,pr=592976,ur=0,hr=4650216,br=6920630,gr=161240,Tr=538928,vr=402048,Rr=5928856,Mr=6339202,Pr=27502466,kr=2726402,wr=5651240,Er=2013002,zr=2387598,Sr=2382414,jr=1026192,Ir=201268,Nr=13957620,Lr=112438,Or=112438,Cr=1498916,Wr=161236,Dr=201808,Fr=3515612,Br=5431368,Hr=5286322,Gr=5502280,Vr=372228,Zr=2183192,Xr=5171976,qr=9448838,Ur=12477112,Yr=7574558,Kr=5032780,Jr=3739355,Qr=212886,_r=853098,$r=2269064,es=5651240,ts=25643252,ns=13013224,os=8093408,rs=8049584,ss=6938536,As=12168584,as=12319156,is=7574558,ls=1887474,cs=5294216,ds={antispoof:ar,blazeface:ir,centernet:lr,emotion:cr,facemesh:dr,faceres:xr,"handlandmark-lite":yr,handtrack:fr,iris:mr,liveness:pr,models:ur,"movenet-lightning":hr,"affectnet-mobilenet":br,age:gr,"blazeface-back":Tr,"blazeface-front":vr,"blazepose-detector":Rr,"blazepose-full":Mr,"blazepose-heavy":Pr,"blazepose-lite":kr,efficientpose:wr,faceboxes:Er,"facemesh-attention-pinto":zr,"facemesh-attention":Sr,"facemesh-detection-full":jr,"facemesh-detection-short":Ir,"faceres-deep":Nr,"gear-e1":Lr,"gear-e2":Or,gear:Cr,"gender-ssrnet-imdb":Wr,gender:Dr,handdetect:Fr,"handlandmark-full":Br,"handlandmark-sparse":Hr,handskeleton:Gr,meet:Vr,mobileface:Zr,mobilefacenet:Xr,"movenet-multipose":qr,"movenet-thunder":Ur,nanodet:Yr,posenet:Kr,rvm:Jr,selfie:Qr,"anti-spoofing":_r,"efficientpose-i-lite":$r,"efficientpose-ii-lite":es,"efficientpose-iv":ts,"insightface-efficientnet-b0":ns,"insightface-ghostnet-strides1":os,"insightface-ghostnet-strides2":rs,"insightface-mobilenet-emore":ss,"insightface-mobilenet-swish":As,"nanodet-e":as,"nanodet-g":is,"nanodet-m":ls,"nanodet-t":cs};var D0={cacheModels:!0,cacheSupported:!0,verbose:!0,debug:!1,modelBasePath:""},I0={};async function xs(e,t){return D0.debug&&h("load model fetch:",e,t),fetch(e,t)}function X1(e){D0.cacheModels=e.cacheModels,D0.verbose=e.debug,D0.modelBasePath=e.modelBasePath}async function L(e){var c,x,i,y;let t=O1(D0.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;I0[o]={name:o,sizeFromManifest:0,sizeLoadedWeights:0,sizeDesired:e5[o],inCache:!1,url:""},D0.cacheSupported=typeof indexedDB!="undefined";let s={};try{s=D0.cacheSupported&&D0.cacheModels?await f2.io.listModels():{}}catch(d){D0.cacheSupported=!1}I0[o].inCache=D0.cacheSupported&&D0.cacheModels&&Object.keys(s).includes(r),I0[o].url=I0[o].inCache?r:t;let A=typeof fetch=="undefined"?{}:{fetchFunc:(d,m)=>xs(d,m)},a=new f2.GraphModel(I0[o].url,A),l=!1;try{a.findIOHandler(),D0.debug&&h("model load handler:",a.handler)}catch(d){h("error finding model i/o handler:",t,d)}try{let d=await((c=a.handler)==null?void 0:c.load())||null;I0[o].sizeFromManifest=((x=d==null?void 0:d.weightData)==null?void 0:x.byteLength)||0,d?a.loadSync(d):a=await f2.loadGraphModel(I0[o].inCache?r:t,A),I0[o].sizeLoadedWeights=((y=(i=a.artifacts)==null?void 0:i.weightData)==null?void 0:y.byteLength)||0,D0.verbose&&h("load:",{model:o,url:a.modelUrl,bytes:I0[o].sizeLoadedWeights}),l=!0}catch(d){h("error loading model:",t,d)}if(l&&D0.cacheModels&&D0.cacheSupported&&!I0[o].inCache)try{let d=await a.save(r);D0.debug&&h("model saved:",r,d)}catch(d){h("error saving model:",t,d)}return a}var t5="3.2.2";var S=V(G());var u0=V(G());var o0={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 ms(){let e=o0.gl;e&&(o0.extensions=e.getSupportedExtensions())}function q1(e){var t;if(e.config.backend==="humangl"&&(o0.name in u0.engine().registry&&!((t=o0==null?void 0:o0.gl)!=null&&t.getParameter(o0.gl.VERSION))&&(h("humangl error: backend invalid context"),e.models.reset()),!u0.findBackend(o0.name))){try{o0.canvas=Ae(100,100)}catch(r){h("humangl error: cannot create canvas:",r);return}try{if(o0.gl=o0.canvas.getContext("webgl2",o0.webGLattr),!o0.gl){h("humangl error: cannot get webgl context");return}if(!o0.gl.getParameter(o0.gl.VERSION).includes("2.0")){h("backend override: using fallback webgl backend as webgl 2.0 is not detected"),e.config.backend="webgl";return}o0.canvas&&(o0.canvas.addEventListener("webglcontextlost",s=>{throw h("humangl error:",s.type),h("possible browser memory leak using webgl or conflict with multiple backend registrations"),e.emit("error"),new Error("backend error: webgl context lost")}),o0.canvas.addEventListener("webglcontextrestored",s=>{h("humangl error: context restored:",s)}),o0.canvas.addEventListener("webglcontextcreationerror",s=>{h("humangl error: context create:",s)}))}catch(r){h("humangl error: cannot get webgl context:",r);return}try{u0.setWebGLContext(2,o0.gl)}catch(r){h("humangl error: cannot set webgl context:",r);return}try{let r=new u0.GPGPUContext(o0.gl);u0.registerBackend(o0.name,()=>new u0.MathBackendWebGL(r),o0.priority)}catch(r){h("humangl error: cannot register webgl backend:",r);return}try{u0.getKernelsForBackend("webgl").forEach(s=>{let A={...s,backendName:o0.name};u0.registerKernel(A)})}catch(r){h("humangl error: cannot update webgl backend registration:",r);return}try{u0.env().flagRegistry.WEBGL_VERSION&&u0.env().set("WEBGL_VERSION",2)}catch(r){h("humangl error: cannot set WebGL backend flags:",r);return}ms();let n=u0.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,o0.gl)}}var Se=V(G()),C={tf255:255,tf1:1,tf2:2,tf05:.5,tf127:127.5,rgb:[.2989,.587,.114]};function U1(){C.tf255=Se.scalar(255,"float32"),C.tf1=Se.scalar(1,"float32"),C.tf2=Se.scalar(2,"float32"),C.tf05=Se.scalar(.5,"float32"),C.tf127=Se.scalar(127.5,"float32"),C.rgb=Se.tensor1d([.2989,.587,.114],"float32")}async function hs(){var e;return await R.updateBackend(),(e=R.tensorflow)!=null&&e.version?"tensorflow":R.webgpu.supported&&R.webgpu.backend?"webgpu":R.webgl.supported&&R.webgl.backend?"webgl":R.wasm.supported&&R.wasm.backend?"wasm":"cpu"}function bs(e){let t=[];if(!R.kernels.includes("mod")){let n={kernelName:"Mod",backendName:S.getBackend(),kernelFunc:o=>S.tidy(()=>S.sub(o.inputs.a,S.mul(S.div(o.inputs.a,o.inputs.b),o.inputs.b)))};S.registerKernel(n),R.kernels.push("mod"),t.push("mod")}if(!R.kernels.includes("floormod")){let n={kernelName:"FloorMod",backendName:S.getBackend(),kernelFunc:o=>S.tidy(()=>S.add(S.mul(S.floorDiv(o.inputs.a,o.inputs.b),o.inputs.b),S.mod(o.inputs.a,o.inputs.b)))};S.registerKernel(n),R.kernels.push("floormod"),t.push("floormod")}if(!R.kernels.includes("rotatewithoffset")&&e.softwareKernels){let n={kernelName:"RotateWithOffset",backendName:S.getBackend(),kernelFunc:o=>S.tidy(()=>{let r=S.getBackend();S.setBackend("cpu");let s=S.image.rotateWithOffset(o.inputs.image,o.attrs.radians,o.attrs.fillValue,o.attrs.center);return S.setBackend(r),s})};S.registerKernel(n),R.kernels.push("rotatewithoffset"),t.push("rotatewithoffset")}t.length>0&&e.debug&&h("registered kernels:",t)}var Y1={};async function I2(e,t=!1){var n,o;if(e.state="backend",((n=e.config.backend)==null?void 0:n.length)===0&&(e.config.backend=await hs()),t||R.initial||e.config.backend&&e.config.backend.length>0&&S.getBackend()!==e.config.backend){let r=v();if(e.config.backend&&e.config.backend.length>0){typeof window=="undefined"&&typeof WorkerGlobalScope!="undefined"&&e.config.debug&&e.config.debug&&h("running inside web worker"),typeof navigator!="undefined"&&((o=navigator==null?void 0:navigator.userAgent)!=null&&o.toLowerCase().includes("electron"))&&e.config.debug&&h("running inside electron");let s=Object.keys(S.engine().registryFactory);if(e.config.backend==="humangl"&&!s.includes("humangl")&&(q1(e),s=Object.keys(S.engine().registryFactory)),e.config.debug&&h("available backends:",s),R.browser&&!R.node&&e.config.backend==="tensorflow"&&s.includes("webgl")&&(e.config.debug&&h("override: backend set to tensorflow while running in browser"),e.config.backend="webgl"),R.node&&!R.browser&&(e.config.backend==="webgl"||e.config.backend==="humangl")&&s.includes("tensorflow")&&(e.config.debug&&h(`override: backend set to ${e.config.backend} while running in nodejs`),e.config.backend="tensorflow"),R.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)}}if(s.includes(e.config.backend)||(h(`error: backend ${e.config.backend} not found in registry`),e.config.backend=R.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(S.env().flagRegistry.CANVAS2D_WILL_READ_FREQUENTLY&&S.env().set("CANVAS2D_WILL_READ_FREQUENTLY",!0),e.config.debug&&h("wasm path:",e.config.wasmPath),typeof S.setWasmPaths!="undefined")S.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 S.env().getAsync("WASM_HAS_MULTITHREAD_SUPPORT"),a=await S.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(l){h("wasm detection failed")}}try{await S.setBackend(e.config.backend),await S.ready()}catch(A){return h("error: cannot set backend:",e.config.backend,A),!1}e.config.debug&&(Y1=JSON.parse(JSON.stringify(S.env().flags)))}if((S.getBackend()==="humangl"||S.getBackend()==="webgl")&&(S.env().flagRegistry.WEBGL_USE_SHAPES_UNIFORMS&&S.env().set("WEBGL_USE_SHAPES_UNIFORMS",!0),S.env().flagRegistry.WEBGL_EXP_CONV&&S.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),S.env().set("WEBGL_DELETE_TEXTURE_THRESHOLD",0))),S.getBackend(),e.config.debug){let s=S.env().flags,A={};for(let a of Object.keys(s))Y1[a]!==s[a]&&(A[a]=s[a]);e.config.debug&&Object.keys(A).length>0&&h("backend:",S.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))S.env().set(s,A)}S.enableProdMode(),U1(),e.performance.initBackend=Math.trunc(v()-r),e.config.backend=S.getBackend(),await R.updateBackend(),bs(e.config)}return!0}function J2(e,t){for(let n of e){let o={kernelName:n,backendName:t.backend,kernelFunc:r=>{var s;return t.debug&&h("kernelFunc",n,t.backend,r),(s=r==null?void 0:r.inputs)==null?void 0:s.info}};S.registerKernel(o)}R.kernels=S.getKernelsForBackend(S.getBackend()).map(n=>n.kernelName.toLowerCase())}var nt={};ze(nt,{all:()=>Js,body:()=>_2,canvas:()=>Ks,face:()=>Q2,gesture:()=>tt,hand:()=>$2,init:()=>i5,object:()=>et,options:()=>f0,person:()=>Ys});var oe=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",{willReadFrequently:!0});if(!t)h("draw error: cannot get canvas context");else return t}return null},Je=e=>Math.round(e*180/Math.PI),Y=(e,t,n)=>e.replace(t,typeof n=="number"?n.toFixed(1):n),Qe=(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 re(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 he(e,t,n,o,r){e.fillStyle=Qe(o,r),e.beginPath(),e.arc(t,n,r.pointSize,0,2*Math.PI),e.fill()}function be(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 n5(e,t,n){if(!(t.length<2)){e.beginPath(),e.moveTo(t[0][0],t[0][1]);for(let o of t)e.strokeStyle=Qe(o[2]||0,n),e.lineTo(Math.trunc(o[0]),Math.trunc(o[1]));e.stroke(),n.fillPolygons&&(e.closePath(),e.fill())}}function J1(e,t,n){if(!(t.length<2)){if(e.lineWidth=n.lineWidth,!n.useCurves||t.length<=2){n5(e,t,n);return}e.moveTo(t[0][0],t[0][1]);for(let o=0;oN2[e]),Ga=Ts.map(e=>N2[e]),Va=vs.map(e=>N2[e]);function je(e){let t=e.map(n=>n[0]);return t.push(e[e.length-1][1]),t}var Rs=[[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]],ks=[[474,475],[475,476],[476,477],[477,474]],ws=[[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]],Es=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],zs=[[469,470],[470,471],[471,472],[472,469]],Ss=[[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]],Za={lips:je(Rs),leftEye:je(Ms),leftEyebrow:je(Ps),leftIris:je(ks),rightEye:je(ws),rightEyebrow:je(Es),rightIris:je(zs),faceOval:je(Ss)};var js=[[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]],Is=[[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]],Ns=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],Ls=[[474,475],[475,476],[476,477],[477,474]],Os=[[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]],Cs=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],Ws=[[469,470],[470,471],[471,472],[472,469]],Ds=[[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 Ie(e){let t=e.map(n=>n[0]);return t.push(e[e.length-1][1]),t}var Fs={lips:Ie(js),leftEye:Ie(Is),leftEyebrow:Ie(Ns),leftIris:Ie(Ls),rightEye:Ie(Os),rightEyebrow:Ie(Cs),rightIris:Ie(Ws),faceOval:Ie(Ds)},Bs=Object.entries(Fs).map(([e,t])=>t.map(n=>[n,e])).flat(),Xa=new Map(Bs),L2=[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],e2=[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],t2=[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 q;function Hs(e,t){var o,r,s,A,a,l,c,x,i;if(!q.drawLabels||((o=q.faceLabels)==null?void 0:o.length)===0)return;let n=q.faceLabels.slice();if(n=Y(n,"[id]",e.id.toFixed(0)),e.score&&(n=Y(n,"[score]",100*e.score)),e.gender&&(n=Y(n,"[gender]",e.gender)),e.genderScore&&(n=Y(n,"[genderScore]",100*e.genderScore)),e.age&&(n=Y(n,"[age]",e.age)),e.distance&&(n=Y(n,"[distance]",100*e.distance)),e.real&&(n=Y(n,"[real]",100*e.real)),e.live&&(n=Y(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=Y(n,"[emotions]",y.join(" "))}(s=(r=e.rotation)==null?void 0:r.angle)!=null&&s.roll&&(n=Y(n,"[roll]",Je(e.rotation.angle.roll))),(a=(A=e.rotation)==null?void 0:A.angle)!=null&&a.yaw&&(n=Y(n,"[yaw]",Je(e.rotation.angle.yaw))),(c=(l=e.rotation)==null?void 0:l.angle)!=null&&c.pitch&&(n=Y(n,"[pitch]",Je(e.rotation.angle.pitch))),(i=(x=e.rotation)==null?void 0:x.gaze)!=null&&i.bearing&&(n=Y(n,"[gaze]",Je(e.rotation.gaze.bearing))),re(t,n,e.box[0],e.box[1],q)}function Gs(e,t){var n,o,r,s;if((n=e.annotations)!=null&&n.leftEyeIris&&((o=e.annotations)!=null&&o.leftEyeIris[0])){t.strokeStyle=q.useDepth?"rgba(255, 200, 255, 0.3)":q.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(),q.fillPolygons&&(t.fillStyle=q.useDepth?"rgba(255, 255, 200, 0.3)":q.color,t.fill())}if((r=e.annotations)!=null&&r.rightEyeIris&&((s=e.annotations)!=null&&s.rightEyeIris[0])){t.strokeStyle=q.useDepth?"rgba(255, 200, 255, 0.3)":q.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(),q.fillPolygons&&(t.fillStyle=q.useDepth?"rgba(255, 255, 200, 0.3)":q.color,t.fill())}}function Vs(e,t){var n;if(q.drawGaze&&((n=e.rotation)!=null&&n.angle)&&typeof Path2D!="undefined"){t.strokeStyle="pink";let o=e.box[0]+e.box[2]/2-e.box[3]*Je(e.rotation.angle.yaw)/90,r=e.box[1]+e.box[3]/2+e.box[2]*Je(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 rgb3 = tf.split(squeeze14, 3, 2); + const min2 = [tf.min(rgb3[0]), tf.min(rgb3[1]), tf.min(rgb3[2])]; + const max5 = [tf.max(rgb3[0]), tf.max(rgb3[1]), tf.max(rgb3[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(rgb3[0], min2[0]), tf.sub(rgb3[1], min2[1]), tf.sub(rgb3[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, stack5]); + } else { + final = tf.expandDims(squeeze14, 0); + } + tf.dispose([...rgb3, ...min2, ...max5, rgb3, 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") { + c = document.createElement("canvas"); + c.width = width; + c.height = height; + } else if (typeof navigator !== "undefined" && navigator.product === "ReactNative") { + if (typeof env.Canvas !== "undefined") c = new env.Canvas(width, height); + else if (typeof globalThis.Canvas !== "undefined") c = new globalThis.Canvas(width, height); + else throw new Error("canvas error: attempted to use canvas in react-native without canvas support installed"); + } else { + throw new Error("canvas error: attempted to run in browser but DOM is not defined"); + } + } + } 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 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 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 rgb3 = tf2.slice3d(input, [0, 0, 0], [-1, -1, 3]); + tensor7 = tf2.expandDims(rgb3, 0); + tf2.dispose(rgb3); + } + } 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 rgb3 = tf2.slice3d(pixels, [0, 0, 0], [-1, -1, 3]); + tf2.dispose(pixels); + pixels = rgb3; + } + 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 _canvas, _image, _imageData; +var Env = class { + constructor() { + /** Running in Browser */ + __publicField(this, "browser"); + /** Running in NodeJS */ + __publicField(this, "node"); + /** Running in WebWorker thread */ + __publicField(this, "worker"); + /** Detected platform */ + __publicField(this, "platform", ""); + /** Detected agent */ + __publicField(this, "agent", ""); + /** List of supported backends */ + __publicField(this, "backends", []); + /** Has any work been performed so far */ + __publicField(this, "initial"); + /** Are image filters supported? */ + __publicField(this, "filter"); + /** TFJS instance details */ + __publicField(this, "tfjs"); + /** Is offscreenCanvas supported? */ + __publicField(this, "offscreen"); + /** Are performance counter instant values or additive */ + __publicField(this, "perfadd", false); + /** If using tfjs-node get version of underlying tensorflow shared library and if gpu acceleration is enabled */ + __publicField(this, "tensorflow", { + version: void 0, + gpu: void 0 + }); + /** WASM detected capabilities */ + __publicField(this, "wasm", { + supported: void 0, + backend: void 0, + simd: void 0, + multithread: void 0 + }); + /** WebGL detected capabilities */ + __publicField(this, "webgl", { + supported: void 0, + backend: void 0, + version: void 0, + renderer: void 0, + shader: void 0, + vendor: void 0 + }); + /** WebGPU detected capabilities */ + __publicField(this, "webgpu", { + supported: void 0, + backend: void 0, + adapter: void 0 + }); + /** CPU info */ + __publicField(this, "cpu", { + model: void 0, + flags: [] + }); + /** List of supported kernels for current backend */ + __publicField(this, "kernels", []); + /** MonkeyPatch for Canvas/Image/ImageData */ + __privateAdd(this, _canvas); + __privateAdd(this, _image); + __privateAdd(this, _imageData); + this.browser = typeof navigator !== "undefined" && typeof navigator.appVersion !== "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" && typeof navigator.userAgent !== "undefined") { + const agent = navigator.userAgent || ""; + const raw = agent.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 = agent.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}`; + } + } + get Canvas() { + return __privateGet(this, _canvas); + } + set Canvas(val) { + __privateSet(this, _canvas, val); + globalThis.Canvas = val; + } + get Image() { + return __privateGet(this, _image); + } + // @ts-ignore monkey-patch; + set Image(val) { + __privateSet(this, _image, val); + globalThis.Image = val; + } + get ImageData() { + return __privateGet(this, _imageData); + } + // @ts-ignore monkey-patch; + set ImageData(val) { + __privateSet(this, _imageData, val); + globalThis.ImageData = val; + } + /** update backend information */ + 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 !== "undefined" && 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) { + } + } + /** update cpu information */ + 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; + } +}; +_canvas = new WeakMap(); +_image = new WeakMap(); +_imageData = new WeakMap(); +var env = new Env(); + +// src/util/webcam.ts +var WebCam = class { + constructor() { + // eslint-disable-line @typescript-eslint/no-extraneous-class + /** current webcam configuration */ + __publicField(this, "config"); + /** instance of dom element associated with webcam stream */ + __publicField(this, "element"); + /** active webcam stream */ + __publicField(this, "stream"); + /** enumerated video devices */ + __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; + }); + /** start method initializizes webcam stream and associates it with a dom video element */ + __publicField(this, "start", async (webcamConfig) => { + var _a, _b; + 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 `webcam error: cannot get dom element: ${webcamConfig.element}`; + } + } else if (webcamConfig.element instanceof HTMLVideoElement) { + this.element = webcamConfig.element; + } else { + if (this.config.debug) log("webcam", "unknown dom element", webcamConfig.element); + return `webcam error: unknown dom element: ${webcamConfig.element}`; + } + } else { + this.element = document.createElement("video"); + } + const requestedConstraints = { + audio: false, + video: { + facingMode: this.config.mode === "front" ? "user" : "environment", + // @ts-ignore // resizeMode is still not defined in tslib + resizeMode: this.config.crop ? "crop-and-scale" : "none" + } + }; + if (((_a = this.config) == null ? void 0 : _a.width) > 0) requestedConstraints.video.width = { ideal: this.config.width }; + if (((_b = this.config) == null ? void 0 : _b.height) > 0) requestedConstraints.video.height = { ideal: this.config.height }; + 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 error", "no devices"); + return "webcam error: no devices"; + } + try { + this.stream = await navigator.mediaDevices.getUserMedia(requestedConstraints); + } catch (err) { + log("webcam", err); + return `webcam error: ${err}`; + } + if (!this.stream) { + if (this.config.debug) log("webcam error", "no stream"); + return "webcam error no stream"; + } + 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 + }); + } + return `webcam: ${this.label}`; + }); + /** pause webcam video method */ + __publicField(this, "pause", () => { + if (this.element) this.element.pause(); + }); + /** play webcam video method */ + __publicField(this, "play", async () => { + if (this.element) await this.element.play(); + }); + /** stop method stops active webcam stream track and disconnects webcam */ + __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 active webcam stream track */ + get track() { + if (!this.stream) return void 0; + return this.stream.getVideoTracks()[0]; + } + /** get webcam capabilities */ + get capabilities() { + if (!this.track) return void 0; + return this.track.getCapabilities ? this.track.getCapabilities() : void 0; + } + /** get webcam constraints */ + get constraints() { + if (!this.track) return void 0; + return this.track.getConstraints ? this.track.getConstraints() : void 0; + } + /** get webcam settings */ + get settings() { + if (!this.stream) return void 0; + const track = this.stream.getVideoTracks()[0]; + return track.getSettings ? track.getSettings() : void 0; + } + /** get webcam label */ + get label() { + if (!this.track) return ""; + return this.track.label; + } + /** is webcam paused */ + get paused() { + var _a; + return ((_a = this.element) == null ? void 0 : _a.paused) || false; + } + /** webcam current width */ + get width() { + var _a; + return ((_a = this.element) == null ? void 0 : _a.videoWidth) || 0; + } + /** webcam current height */ + 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, { + "affectnet-mobilenet": () => affectnet_mobilenet, + age: () => age, + "anti-spoofing": () => anti_spoofing, + antispoof: () => antispoof, + blazeface: () => blazeface, + "blazeface-back": () => blazeface_back, + "blazeface-front": () => blazeface_front, + "blazepose-detector": () => blazepose_detector, + "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-pinto": () => facemesh_attention_pinto, + "facemesh-detection-full": () => facemesh_detection_full, + "facemesh-detection-short": () => facemesh_detection_short, + faceres: () => faceres, + "faceres-deep": () => faceres_deep, + gear: () => gear, + "gear-e1": () => gear_e1, + "gear-e2": () => gear_e2, + 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_lite = 2023432; +var handtrack = 2964837; +var iris = 2599092; +var liveness = 592976; +var models = 0; +var movenet_lightning = 4650216; +var affectnet_mobilenet = 6920630; +var age = 161240; +var blazeface_back = 538928; +var blazeface_front = 402048; +var blazepose_detector = 5928856; +var blazepose_full = 6339202; +var blazepose_heavy = 27502466; +var blazepose_lite = 2726402; +var efficientpose = 5651240; +var faceboxes = 2013002; +var facemesh_attention_pinto = 2387598; +var facemesh_attention = 2382414; +var facemesh_detection_full = 1026192; +var facemesh_detection_short = 201268; +var faceres_deep = 13957620; +var gear_e1 = 112438; +var gear_e2 = 112438; +var gear = 1498916; +var gender_ssrnet_imdb = 161236; +var gender = 201808; +var handdetect = 3515612; +var handlandmark_full = 5431368; +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 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-lite": handlandmark_lite, + handtrack, + iris, + liveness, + models, + "movenet-lightning": movenet_lightning, + "affectnet-mobilenet": affectnet_mobilenet, + age, + "blazeface-back": blazeface_back, + "blazeface-front": blazeface_front, + "blazepose-detector": blazepose_detector, + "blazepose-full": blazepose_full, + "blazepose-heavy": blazepose_heavy, + "blazepose-lite": blazepose_lite, + efficientpose, + faceboxes, + "facemesh-attention-pinto": facemesh_attention_pinto, + "facemesh-attention": facemesh_attention, + "facemesh-detection-full": facemesh_detection_full, + "facemesh-detection-short": facemesh_detection_short, + "faceres-deep": faceres_deep, + "gear-e1": gear_e1, + "gear-e2": gear_e2, + gear, + "gender-ssrnet-imdb": gender_ssrnet_imdb, + gender, + handdetect, + "handlandmark-full": handlandmark_full, + "handlandmark-sparse": handlandmark_sparse, + handskeleton, + meet, + mobileface, + mobilefacenet, + "movenet-multipose": movenet_multipose, + "movenet-thunder": movenet_thunder, + nanodet, + posenet, + rvm, + selfie, + "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.3.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: { + // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.2 + alpha: false, + antialias: false, + premultipliedAlpha: false, + preserveDrawingBuffer: false, + depth: false, + stencil: false, + failIfMajorPerformanceCaveat: false, + // default=true + desynchronized: true + // default=undefined + } +}; +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() { + var _a; + await env.updateBackend(); + if ((_a = env.tensorflow) == null ? void 0 : _a.version) 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, _b; + 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 (typeof navigator !== "undefined" && ((_b = navigator == null ? void 0 : navigator.userAgent) == null ? void 0 : _b.toLowerCase().includes("electron"))) { + if (instance.config.debug) log("running inside electron"); + } + 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 (env.browser && !env.node && instance.config.backend === "tensorflow" && available.includes("webgl")) { + if (instance.config.debug) log("override: backend set to tensorflow while running in browser"); + instance.config.backend = "webgl"; + } + if (env.node && !env.browser && (instance.config.backend === "webgl" || instance.config.backend === "humangl") && available.includes("tensorflow")) { + 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); + } + } + } + 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); + } + 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; + } + // setupFunc: () => { if (config.debug) log('kernelFunc', kernelName, config.backend); }, + // disposeFunc: () => { if (config.debug) log('kernelFunc', kernelName, config.backend); }, + }; + 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", { willReadFrequently: true }); + 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 rgb3 = Uint8ClampedArray.from([127 + 2 * z, 127 - 2 * z, 255]); + return `rgba(${rgb3[0]}, ${rgb3[1]}, ${rgb3[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)", + // 'lightblue' with light alpha channel + labelColor: "rgba(173, 216, 230, 1)", + // 'lightblue' with dark alpha channel + 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: [61, 185, 40, 39, 37, 0, 267, 269, 270, 409, 291], // 11 + // lipsLowerOuter: [146, 91, 181, 84, 17, 314, 405, 321, 375, 291], // 10 + // lipsUpperInner: [78, 191, 80, 81, 82, 13, 312, 311, 310, 415, 308], // 11 + // lipsLowerInner: [78, 95, 88, 178, 87, 14, 317, 402, 318, 324, 308], // 11 + 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], + // 7 + rightEyeLower0: [33, 7, 163, 144, 145, 153, 154, 155, 133], + // 9 + rightEyeUpper1: [247, 30, 29, 27, 28, 56, 190], + // 7 + rightEyeLower1: [130, 25, 110, 24, 23, 22, 26, 112, 243], + // 9 + rightEyeUpper2: [113, 225, 224, 223, 222, 221, 189], + // 7 + rightEyeLower2: [226, 31, 228, 229, 230, 231, 232, 233, 244], + // 9 + rightEyeLower3: [143, 111, 117, 118, 119, 120, 121, 128, 245], + // 9 + rightEyebrowUpper: [156, 70, 63, 105, 66, 107, 55, 193], + // 8 + rightEyebrowLower: [35, 124, 46, 53, 52, 65], + // 6 + rightEyeIris: [473, 474, 475, 476, 477], + // 5 + 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 = [ + // A mapping from facemesh model keypoints to iris model keypoints. + { key: "EyeUpper0", indices: [9, 10, 11, 12, 13, 14, 15] }, + // 7 x 3d + { key: "EyeUpper1", indices: [25, 26, 27, 28, 29, 30, 31] }, + // 7 x 3d + { key: "EyeUpper2", indices: [41, 42, 43, 44, 45, 46, 47] }, + // 7 x 3d + { key: "EyeLower0", indices: [0, 1, 2, 3, 4, 5, 6, 7, 8] }, + // 7 x 3d + { key: "EyeLower1", indices: [16, 17, 18, 19, 20, 21, 22, 23, 24] }, + // 9 x 3d + { key: "EyeLower2", indices: [32, 33, 34, 35, 36, 37, 38, 39, 40] }, + // 9 x 3d + { key: "EyeLower3", indices: [54, 55, 56, 57, 58, 59, 60, 61, 62] }, + // 9 x 3d + { key: "EyebrowUpper", indices: [63, 64, 65, 66, 67, 68, 69, 70] }, + // 8 x 3d + { key: "EyebrowLower", indices: [48, 49, 50, 51, 52, 53] } + // 6 x 3d +]; +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 = [ + /* cont */ + 127, + 234, + 132, + 58, + 172, + 150, + 149, + 148, + 152, + 377, + 378, + 379, + 397, + 288, + 361, + 454, + 356, + /* brows */ + 70, + 63, + 105, + 66, + 107, + 336, + 296, + 334, + 293, + 300, + /* nose */ + 168, + 6, + 195, + 4, + 98, + 97, + 2, + 326, + 327, + /* eyes */ + 33, + 160, + 158, + 133, + 153, + 144, + 362, + 385, + 387, + 263, + 373, + 380, + /* lip */ + 57, + 40, + 37, + 0, + 267, + 270, + 287, + 321, + 314, + 17, + 84, + 91, + /* mouth */ + 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, + // Lower outer. + 185, + 40, + 39, + 37, + 0, + 267, + 269, + 270, + 409, + // Upper outer(excluding corners). + 78, + 95, + 88, + 178, + 87, + 14, + 317, + 402, + 318, + 324, + 308, + // Lower inner. + 191, + 80, + 81, + 82, + 13, + 312, + 311, + 310, + 415, + // Upper inner(excluding corners). + 76, + 77, + 90, + 180, + 85, + 16, + 315, + 404, + 320, + 307, + 306, + // Lower semi - outer. + 184, + 74, + 73, + 72, + 11, + 302, + 303, + 304, + 408, + // Upper semi - outer(excluding corners). + 62, + 96, + 89, + 179, + 86, + 15, + 316, + 403, + 319, + 325, + 292, + // Lower semi - inner. + 183, + 42, + 41, + 38, + 12, + 268, + 271, + 272, + 407 + // Upper semi - inner(excluding corners). +]; +var LANDMARKS_REFINEMENT_LEFT_EYE_CONFIG = [ + 33, + 7, + 163, + 144, + 145, + 153, + 154, + 155, + 133, + // Lower contour. + 246, + 161, + 160, + 159, + 158, + 157, + 173, + // upper contour (excluding corners). + 130, + 25, + 110, + 24, + 23, + 22, + 26, + 112, + 243, + // Halo x2 lower contour. + 247, + 30, + 29, + 27, + 28, + 56, + 190, + // Halo x2 upper contour (excluding corners). + 226, + 31, + 228, + 229, + 230, + 231, + 232, + 233, + 244, + // Halo x3 lower contour. + 113, + 225, + 224, + 223, + 222, + 221, + 189, + // Halo x3 upper contour (excluding corners). + 35, + 124, + 46, + 53, + 52, + 65, + // Halo x4 upper contour (no lower because of mesh structure) or eyebrow inner contour. + 143, + 111, + 117, + 118, + 119, + 120, + 121, + 128, + 245, + // Halo x5 lower contour. + 156, + 70, + 63, + 105, + 66, + 107, + 55, + 193 + // Halo x5 upper contour (excluding corners) or eyebrow outer contour. +]; +var LANDMARKS_REFINEMENT_RIGHT_EYE_CONFIG = [ + 263, + 249, + 390, + 373, + 374, + 380, + 381, + 382, + 362, + // Lower contour. + 466, + 388, + 387, + 386, + 385, + 384, + 398, + // Upper contour (excluding corners). + 359, + 255, + 339, + 254, + 253, + 252, + 256, + 341, + 463, + // Halo x2 lower contour. + 467, + 260, + 259, + 257, + 258, + 286, + 414, + // Halo x2 upper contour (excluding corners). + 446, + 261, + 448, + 449, + 450, + 451, + 452, + 453, + 464, + // Halo x3 lower contour. + 342, + 445, + 444, + 443, + 442, + 441, + 413, + // Halo x3 upper contour (excluding corners). + 265, + 353, + 276, + 283, + 282, + 295, + // Halo x4 upper contour (no lower because of mesh structure) or/ eyebrow inner contour. + 372, + 340, + 346, + 347, + 348, + 349, + 350, + 357, + 465, + // Halo x5 lower contour. + 383, + 300, + 293, + 334, + 296, + 336, + 285, + 417 + // Halo x5 upper contour (excluding corners) or eyebrow outer contour. +]; + +// 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(); + l = replace(l, "[id]", f.id.toFixed(0)); + 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 Zs(e,t){var n;if(q.drawGaze&&((n=e.rotation)!=null&&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]];o5(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]];o5(t,[e.annotations.rightEyeIris[0][0],e.annotations.rightEyeIris[0][1]],[r[0],r[1]],4)}}function Xs(e,t){if(q.drawPolygons&&e.mesh.length>=468){t.lineWidth=1;for(let n=0;n<$e.length/3;n++){let o=[$e[n*3+0],$e[n*3+1],$e[n*3+2]].map(r=>e.mesh[r]);n5(t,o,q)}Gs(e,t)}}function qs(e,t){if(q.drawPoints)if((e==null?void 0:e.mesh.length)>=468)for(let n=0;n0&&(qs(r,o),Xs(r,o),Vs(r,o),Zs(r,o))}}function _2(e,t,n){var s,A;let o=a0(f0,n);if(!t||!e)return;let r=oe(e);if(r){r.lineJoin="round";for(let a=0;a0)){let l=o.bodyLabels.slice();l=Y(l,"[id]",t[a].id.toFixed(0)),l=Y(l,"[score]",100*t[a].score),re(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=Y(c,"[label]",l.part),c=Y(c,"[score]",100*l.score),re(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)J1(r,c,o)}}}function $2(e,t,n){var s,A;let o=a0(f0,n);if(!t||!e)return;let r=oe(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,be(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=Y(l,"[id]",a.id.toFixed(0)),l=Y(l,"[label]",a.label),l=Y(l,"[score]",100*a.score),re(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=Qe(l[2],o),he(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=Y(x,"[label]",l),re(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 et(e,t,n){var s;let o=a0(f0,n);if(!t||!e)return;let r=oe(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,be(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=Y(a,"[id]",A.id.toFixed(0)),a=Y(a,"[label]",A.label),a=Y(a,"[score]",100*A.score),re(r,a,A.box[0],A.box[1],o)}r.stroke()}}}function tt(e,t,n){var r;let o=a0(f0,n);if(!(!t||!e)&&o.drawGestures&&((r=o.gestureLabels)==null?void 0:r.length)>0){let s=oe(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=Y(i,"[where]",l[0]),i=Y(i,"[who]",x),i=Y(i,"[what]",c[1]),re(s,i,8,2+A*o.lineHeight,o),A+=1}}}}var Ne={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) { + if ((f == null ? void 0 : 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); + } + } + } else { + for (const [k, v] of Object.entries((f == null ? void 0 : f.annotations) || {})) { + if (!(v == null ? void 0 : v[0])) continue; + const pt = v[0]; + point(ctx, pt[0], pt[1], 0, localOptions); + if (localOptions.drawLabels) labels(ctx, k, pt[0], pt[1], 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, "[id]", result[i].id.toFixed(0)); + 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, "[id]", h.id.toFixed(0)); + 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, "[id]", h.id.toFixed(0)); + 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 +6428,7430 @@ 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 a5=0;function Ys(e,t,n){let o=a0(f0,n);if(!t||!e)return;let r=oe(e);if(r){r.lineJoin="round",r.font=o.font;for(let s=0;sc5,kpt:()=>l5});var l5=["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"],c5={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(G());var se,n2=224,$1,Qs=5,rt=[8,16,32,32,32];function _s(){let e=[],t=0;for(;tn.x)),y:D.tensor1d(e.map(n=>n.y))}}async function e3(e){if(R.initial&&(se=null),!se&&e.body.detector&&e.body.detector.modelPath){se=await L(e.body.detector.modelPath);let t=se!=null&&se.executor?Object.values(se.modelSignature.inputs):void 0;n2=Array.isArray(t)?parseInt(t[0].tensorShape.dim[1].size):0}else e.debug&&se&&h("cached model:",se.modelUrl);return _s(),se}var _1=[5,5];function $s(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,n2),t.x),r=D.add(D.div(r,n2),t.y),s=D.mul(D.div(s,n2),_1[0]),A=D.mul(D.div(A,n2),_1[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 eA(e,t,n,o){var c,x;let r=[],s={};s.boxes=$s(e,$1),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],m=[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:m};r.push(f)}return Object.keys(s).forEach(i=>D.dispose(s[i])),r}async function t3(e,t,n){let o={};o.res=se==null?void 0:se.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 eA(o.boxes,o.logits,t,n);return Object.keys(o).forEach(s=>D.dispose(o[s])),r}function Le(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 n3(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 st(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 Z0,x5=256,d5=Number.MAX_SAFE_INTEGER,tA={landmarks:["ld_3d","activation_segmentation","activation_heatmap","world_3d","output_poseflag"],detector:[]},at=[],Oe=[[0,0],[0,0],[0,0],[0,0]],o3=0,r3=e=>1-1/(1+Math.exp(e)),A3=e=>e3(e);async function a3(e){if(R.initial&&(Z0=null),Z0)e.debug&&h("cached model:",Z0.modelUrl);else{Z0=await L(e.body.modelPath);let t=Z0!=null&&Z0.executor?Object.values(Z0.modelSignature.inputs):void 0;x5=Array.isArray(t)?parseInt(t[0].tensorShape.dim[1].size):0}return Z0}function s3(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=X0.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];Oe=[[0,0],a,l,[0,0]],o.pad=X0.pad(o.cropped||e,Oe),o.resize=X0.image.resizeBilinear(o.pad,[t,t]),r=X0.div(o.resize,C.tf255)}else e.shape[1]!==t?(o.resize=X0.image.resizeBilinear(o.cropped||e,[t,t]),r=X0.div(o.resize,C.tf255)):r=X0.div(o.cropped||e,C.tf255);return Object.keys(o).forEach(a=>X0.dispose(o[a])),r}function nA(e,t,n){for(let o of e)o.position=[Math.trunc(o.position[0]*(t[0]+Oe[2][0]+Oe[2][1])/t[0]-Oe[2][0]),Math.trunc(o.position[1]*(t[1]+Oe[1][0]+Oe[1][1])/t[1]-Oe[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 oA(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 rA(e,t,n){if(!(Z0!=null&&Z0.executor))return null;let o={};[o.ld,o.segmentation,o.heatmap,o.world,o.poseflag]=Z0==null?void 0:Z0.execute(e,tA.landmarks);let r=(await o.poseflag.data())[0],s=await o.ld.data(),A=await o.world.data();Object.keys(o).forEach(m=>X0.dispose(o[m]));let a=[],l=5;for(let m=0;mm.position),i=Le(x,[n[0],n[1]]),y={};for(let[m,f]of Object.entries(c5)){let u=[];for(let g=0;gb.part===f[g]),p=c.find(b=>b.part===f[g+1]);T&&p&&u.push([T.position,p.position])}y[m]=u}return{id:0,score:Math.trunc(100*r)/100,box:i.box,boxRaw:i.boxRaw,keypoints:c,annotations:y}}async function y5(e,t){var s,A,a;let n=[e.shape[2]||0,e.shape[1]||0],o=(t.body.skipTime||0)>v()-o3,r=d5<(t.body.skipFrames||0);if(t.skipAllowed&&o&&r&&at!==null)d5++;else{let l=[];if((A=(s=t.body)==null?void 0:s.detector)!=null&&A.enabled){let c=s3(e,224);l=await t3(c,t,n),X0.dispose(c)}else l=[{box:[0,0,0,0],boxRaw:[0,0,1,1],score:0}];for(let c=0;cF0.dispose(o[c])),r}async function p5(e,t){if(!(q0!=null&&q0.executor))return[];let n=(t.object.skipTime||0)>v()-l3,o=m5<(t.object.skipFrames||0);return t.skipAllowed&&n&&o&&f5.length>0?(m5++,f5):(m5=0,new Promise(async r=>{let s=[e.shape[2]||0,e.shape[1]||0],A=F0.image.resizeBilinear(e,[o2,o2]),a=t.object.enabled?q0==null?void 0:q0.execute(A,["tower_0/detections"]):null;l3=v(),F0.dispose(A);let l=await sA(a,s,t);f5=l,r(l)}))}var J=V(G());var it={};ze(it,{connected:()=>h5,kpt:()=>u5});var u5=["head","neck","rightShoulder","rightElbow","rightWrist","chest","leftShoulder","leftElbow","leftWrist","bodyCenter","rightHip","rightKnee","rightAnkle","leftHip","leftKnee","leftAnkle"],h5={leftLeg:["leftHip","leftKnee","leftAnkle"],rightLeg:["rightHip","rightKnee","rightAnkle"],torso:["leftShoulder","rightShoulder","rightHip","leftHip","leftShoulder"],leftArm:["leftShoulder","leftElbow","leftWrist"],rightArm:["rightShoulder","rightElbow","rightWrist"],head:[]};var i0,x3=0,B0={id:0,keypoints:[],box:[0,0,0,0],boxRaw:[0,0,0,0],score:0,annotations:{}},b5=Number.MAX_SAFE_INTEGER;async function y3(e){return R.initial&&(i0=null),i0?e.debug&&h("cached model:",i0.modelUrl):i0=await L(e.body.modelPath),i0}async function AA(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 g5(e,t){if(!(i0!=null&&i0.executor)||!(i0!=null&&i0.inputs[0].shape))return[];let n=(t.body.skipTime||0)>v()-x3,o=b5<(t.body.skipFrames||0);return t.skipAllowed&&n&&o&&Object.keys(B0.keypoints).length>0?(b5++,[B0]):(b5=0,new Promise(async r=>{let s=J.tidy(()=>{var m,f;let i=J.image.resizeBilinear(e,[((m=i0==null?void 0:i0.inputs[0].shape)==null?void 0:m[2])||0,((f=i0==null?void 0:i0.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=i0==null?void 0:i0.execute(s)),x3=v(),J.dispose(s),A){B0.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)&&B0.keypoints.push({score:Math.round(100*u)/100,part:u5[d],positionRaw:[m/i0.inputs[0].shape[2],f/i0.inputs[0].shape[1]],position:[Math.round(e.shape[2]*m/i0.inputs[0].shape[2]),Math.round(e.shape[1]*f/i0.inputs[0].shape[1])]})}y.forEach(d=>J.dispose(d))}B0.score=B0.keypoints.reduce((i,y)=>y.score>i?y.score:i,0);let a=B0.keypoints.map(i=>i.position[0]),l=B0.keypoints.map(i=>i.position[1]);B0.box=[Math.min(...a),Math.min(...l),Math.max(...a)-Math.min(...a),Math.max(...l)-Math.min(...l)];let c=B0.keypoints.map(i=>i.positionRaw[0]),x=B0.keypoints.map(i=>i.positionRaw[1]);B0.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(h5)){let d=[];for(let m=0;mg.part===y[m]),u=B0.keypoints.find(g=>g.part===y[m+1]);f&&u&&f.score>(t.body.minConfidence||0)&&u.score>(t.body.minConfidence||0)&&d.push([f.position,u.position])}B0.annotations[i]=d}r([B0])}))}var l0=V(G());var De=V(G());var O=V(G());var Me=V(G());var p2=e=>[Math.abs(e.endPoint[0]-e.startPoint[0]),Math.abs(e.endPoint[1]-e.startPoint[1])],lt=e=>[e.startPoint[0]+(e.endPoint[0]-e.startPoint[0])/2,e.startPoint[1]+(e.endPoint[1]-e.startPoint[1])/2,1],ct=(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],dt=(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],u3=(e,t,n)=>{let o=[e.startPoint[0]*t[0],e.startPoint[1]*t[1]],r=[e.endPoint[0]*t[0],e.endPoint[1]*t[1]],s=e.landmarks.map(A=>[(A[0]+n[0])*t[0],(A[1]+n[1])*t[1]]);return{startPoint:o,endPoint:r,landmarks:s,confidence:e.confidence}},T5=(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=Me.image.cropAndResize(t,[s],[0],n),a=Me.div(A,C.tf255);return Me.dispose(A),a},xt=(e,t)=>{let n=lt(e),o=p2(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,size:o}},yt=e=>{let t=lt(e),n=p2(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,size:[Math.round(n[0]),Math.round(n[1])]}},h3=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}},v5=[[1,0,0],[0,1,0],[0,0,1]],aA=e=>e-2*Math.PI*Math.floor((e+Math.PI)/(2*Math.PI)),iA=(e,t)=>aA(Math.PI/2-Math.atan2(-(t[1]-e[1]),t[0]-e[0]));var m3=(e,t)=>[[1,0,e],[0,1,t],[0,0,1]],r2=(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=m3(t[0],t[1]),A=p3(s,r),a=m3(-t[0],-t[1]);return p3(A,a)},cA=e=>{let t=[[e[0][0],e[1][0]],[e[0][1],e[1][1]]],n=[e[0][2],e[1][2]],o=[-r2(t[0],n),-r2(t[1],n)];return[t[0].concat(o[0]),t[1].concat(o[1]),[0,0,1]]},dA=(e,t)=>[r2(e,t[0]),r2(e,t[1])];function g3(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?b3(n,[0,0]):v5,c=a?A.map(d=>[...dA(d,l),d[2]]):A,x=a?cA(o):v5,i=lt(t),y=[r2(i,x[0]),r2(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 v3(e,t,n,o){let r=t.landmarks.length>=r5.count?r5.symmetryLine:_e.symmetryLine,s=0,A=v5,a;if(e&&R.kernels.includes("rotatewithoffset"))if(s=iA(t.landmarks[r[0]],t.landmarks[r[1]]),s&&s!==0&&Math.abs(s)>.2){let c=lt(t),x=[c[0]/n.shape[2],c[1]/n.shape[1]],i=Me.image.rotateWithOffset(n,s,0,[x[0],x[1]]);A=b3(-s,c),a=T5(t,i,[o,o]),Me.dispose(i)}else a=T5(t,n,[o,o]);else a=T5(t,n,[o,o]);return[s,A,a]}var xA=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]},R3=(e,t)=>{let n=xA(e),o=p2(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,xe,ft=null,Ce=0,u2=null,P3=()=>Ce;async function k3(e){var t;return R.initial&&(xe=null),xe?e.debug&&h("cached model:",xe.modelUrl):xe=await L((t=e.face.detector)==null?void 0:t.modelPath),Ce=xe.executor&&xe.inputs[0].shape?xe.inputs[0].shape[2]:256,u2=O.scalar(Ce,"int32"),ft=O.tensor2d(g3(Ce)),xe}function yA(e){if(!ft||!u2)return O.zeros([0,0]);let t={};t.boxStarts=O.slice(e,[0,1],[-1,2]),t.centers=O.add(t.boxStarts,ft),t.boxSizes=O.slice(e,[0,3],[-1,2]),t.boxSizesNormalized=O.div(t.boxSizes,u2),t.centersNormalized=O.div(t.centers,u2),t.halfBoxSize=O.div(t.boxSizesNormalized,C.tf2),t.starts=O.sub(t.centersNormalized,t.halfBoxSize),t.ends=O.add(t.centersNormalized,t.halfBoxSize),t.startNormalized=O.mul(t.starts,u2),t.endNormalized=O.mul(t.ends,u2);let n=O.concat2d([t.startNormalized,t.endNormalized],1);return Object.keys(t).forEach(o=>O.dispose(t[o])),n}async function w3(e,t){var a,l,c,x,i,y,d;if(!e||e.isDisposedInternal||e.shape.length!==4||e.shape[1]<1||e.shape[2]<1)return[];let n={};n.resized=O.image.resizeBilinear(e,[Ce,Ce]),n.div=O.div(n.resized,C.tf127),n.normalized=O.sub(n.div,C.tf1);let o=xe==null?void 0:xe.execute(n.normalized);if(Array.isArray(o)&&o.length>2){let m=o.sort((f,u)=>f.size-u.size);n.concat384=O.concat([m[0],m[2]],2),n.concat512=O.concat([m[1],m[3]],2),n.concat=O.concat([n.concat512,n.concat384],1),n.batch=O.squeeze(n.concat,[0])}else Array.isArray(o)?n.batch=O.squeeze(o[0]):n.batch=O.squeeze(o);O.dispose(o),n.boxes=yA(n.batch),n.logits=O.slice(n.batch,[0,0],[-1,1]),n.sigmoid=O.sigmoid(n.logits),n.scores=O.squeeze(n.sigmoid),n.nms=await O.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 m=0;m(((x=t.face.detector)==null?void 0:x.minConfidence)||0)){let u={};u.bbox=O.slice(n.boxes,[r[m],0],[1,-1]),u.slice=O.slice(n.batch,[r[m],M3-1],[1,-1]),u.squeeze=O.squeeze(u.slice),u.landmarks=O.reshape(u.squeeze,[M3,-1]);let g=await u.bbox.data(),T={startPoint:[g[0],g[1]],endPoint:[g[2],g[3]],landmarks:await u.landmarks.array(),confidence:f};u.anchor=O.slice(ft,[r[m],0],[1,2]);let p=await u.anchor.data(),b=u3(T,[(e.shape[2]||0)/Ce,(e.shape[1]||0)/Ce],p),k=xt(b,((i=t.face.detector)==null?void 0:i.scale)||1.4),P=yt(k);P.size[0]>(((y=t.face.detector)==null?void 0:y.minSize)||0)&&P.size[1]>(((d=t.face.detector)==null?void 0:d.minSize)||0)&&s.push(P),Object.keys(u).forEach(I=>O.dispose(u[I]))}}return Object.keys(n).forEach(m=>O.dispose(n[m])),s}var ye=V(G());var K0,We=0,M5=ae.leftEyeLower0,P5=ae.rightEyeLower0,h2={leftBounds:[M5[0],M5[M5.length-1]],rightBounds:[P5[0],P5[P5.length-1]]},b2={upperCenter:3,lowerCenter:4,index:71,numCoordinates:76};async function I3(e){var t,n;return R.initial&&(K0=null),K0?e.debug&&h("cached model:",K0.modelUrl):K0=await L((t=e.face.iris)==null?void 0:t.modelPath),We=K0!=null&&K0.executor&&((n=K0.inputs)!=null&&n[0].shape)?K0.inputs[0].shape[2]:0,We===-1&&(We=64),K0}function mt(e,t,n,o){for(let r=0;r{let t=e[h2.leftBounds[0]][2],n=e[h2.rightBounds[0]][2];return t-n},z3=(e,t,n,o,r,s=!1,A=2.3)=>{let a=yt(xt(h3([e[n],e[o]]),A)),l=p2(a),c=ye.image.cropAndResize(t,[[a.startPoint[1]/r,a.startPoint[0]/r,a.endPoint[1]/r,a.endPoint[0]/r]],[0],[We,We]);if(s&&R.kernels.includes("flipleftright")){let x=ye.image.flipLeftRight(c);ye.dispose(c),c=x}return{box:a,boxSize:l,crop:c}},S3=(e,t,n,o=!1)=>{let r=[];for(let s=0;s{let o=e[ae[`${n}EyeUpper0`][b2.upperCenter]][2],r=e[ae[`${n}EyeLower0`][b2.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 N3(e,t,n,o){var I,B;if(!(K0!=null&&K0.executor))return e;let{box:r,boxSize:s,crop:A}=z3(e,t,h2.leftBounds[0],h2.leftBounds[1],n,!0,((I=o.face.iris)==null?void 0:I.scale)||2.3),{box:a,boxSize:l,crop:c}=z3(e,t,h2.rightBounds[0],h2.rightBounds[1],n,!0,((B=o.face.iris)==null?void 0:B.scale)||2.3),x=ye.concat([A,c]);ye.dispose(A),ye.dispose(c);let i=K0.execute(x);ye.dispose(x);let y=await i.data();ye.dispose(i);let d=y.slice(0,b2.numCoordinates*3),{rawCoords:m,iris:f}=S3(d,r,s,!0),u=y.slice(b2.numCoordinates*3),{rawCoords:g,iris:T}=S3(u,a,l,!1),p=fA(e);Math.abs(p)<30?(mt(e,m,"left",null),mt(e,g,"right",null)):p<1?mt(e,m,"left",["EyeUpper0","EyeLower0"]):mt(e,g,"right",["EyeUpper0","EyeLower0"]);let b=j3(e,f,"left"),k=j3(e,T,"right");return e.concat(b).concat(k)}async function O3(e,t){var s,A,a,l,c,x,i,y,d,m;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((m=(d=t.filter(f=>f.size===142))==null?void 0:d[1])==null?void 0:m.data())};for(let f of Object.values(n))if(!f)return e;let o=e2.reduce((f,u)=>f+=e[u][2],0)/e2.length;for(let f=0;ff+=e[u][2],0)/t2.length;for(let f=0;fv()-ge.timestamp,o=ge.skipped<(((c=t.face.detector)==null?void 0:c.skipFrames)||0);!t.skipAllowed||!n||!o||ge.boxes.length===0?(ge.boxes=await w3(e,t),ge.timestamp=v(),ge.skipped=0):ge.skipped++;let r=[],s=[],A=0,a=O2;for(let T=0;T[I[0]/(e.shape[2]||0),I[1]/(e.shape[1]||0),(I[2]||0)/a]);for(let I of Object.keys(_e))P.annotations[I]=[P.mesh[_e[I]]]}else if(!r0)t.debug&&h("face mesh detection requested, but model is not loaded");else{if((d=t.face.attention)!=null&&d.enabled&&!R.kernels.includes("atan2"))return t.face.attention.enabled=!1,De.dispose(P.tensor),r;let I=r0.execute(P.tensor),_=await I.find(Z=>Z.shape[Z.shape.length-1]===1).data();if(P.faceScore=Math.round(100*_[0])/100,P.faceScore<(((m=t.face.detector)==null?void 0:m.minConfidence)||1)){if(p.confidence=P.faceScore,t.face.mesh.keepInvalid){P.box=ct(p,e),P.boxRaw=dt(p,e),P.size=p.size,P.score=P.boxScore,P.mesh=p.landmarks,P.meshRaw=P.mesh.map(Z=>[Z[0]/(e.shape[2]||1),Z[1]/(e.shape[1]||1),(Z[2]||0)/a]);for(let Z of Object.keys(_e))P.annotations[Z]=[P.mesh[_e[Z]]]}}else{let Z=I.find(n0=>n0.shape[n0.shape.length-1]===1404),$=De.reshape(Z,[-1,3]),A0=await $.array();De.dispose($),(f=t.face.attention)!=null&&f.enabled?A0=await O3(A0,I):(u=t.face.iris)!=null&&u.enabled&&(A0=await N3(A0,P.tensor,O2,t)),P.mesh=T3(A0,p,b,k,O2),P.meshRaw=P.mesh.map(n0=>[n0[0]/(e.shape[2]||0),n0[1]/(e.shape[1]||0),(n0[2]||0)/a]);for(let n0 of Object.keys(ae))P.annotations[n0]=ae[n0].map(j0=>P.mesh[j0]);P.score=P.faceScore;let t0={...R3(P.mesh,p),confidence:p.confidence,landmarks:p.landmarks,size:p.size};P.box=ct(t0,e),P.boxRaw=dt(t0,e),P.size=t0.size,s.push(t0)}De.dispose(I)}P.score>(((g=t.face.detector)==null?void 0:g.minConfidence)||1)?r.push(P):De.dispose(P.tensor)}return ge.boxes=s,r}async function W3(e){var t,n,o,r,s,A;return R.initial&&(r0=null),(t=e.face.attention)!=null&&t.enabled&&(r0!=null&&r0.signature)&&Object.keys(((n=r0==null?void 0:r0.signature)==null?void 0:n.outputs)||{}).length<6&&(r0=null),r0?e.debug&&h("cached model:",r0.modelUrl):(o=e.face.attention)!=null&&o.enabled?r0=await L(e.face.attention.modelPath):r0=await L((r=e.face.mesh)==null?void 0:r.modelPath),O2=r0.executor&&((s=r0==null?void 0:r0.inputs)!=null&&s[0].shape)?(A=r0==null?void 0:r0.inputs)==null?void 0:A[0].shape[2]:256,r0}var D3=$e,F3=N2;var J0=V(G());var E5=[],P0,pt=[],B3=0,H3=0,w5=Number.MAX_SAFE_INTEGER,z5=!1;async function G3(e){var t,n,o;return R.initial&&(P0=null),P0?e.debug&&h("cached model:",P0.modelUrl):(P0=await L((t=e.face.emotion)==null?void 0:t.modelPath),z5=((o=(n=P0==null?void 0:P0.inputs)==null?void 0:n[0].shape)==null?void 0:o[3])===3,z5?E5=["angry","disgust","fear","happy","neutral","sad","surprise"]:E5=["angry","disgust","fear","happy","sad","surprise","neutral"]),P0}async function S5(e,t,n,o){var A,a;if(!P0)return[];let r=w5<(((A=t.face.emotion)==null?void 0:A.skipFrames)||0),s=(((a=t.face.emotion)==null?void 0:a.skipTime)||0)>v()-H3;return t.skipAllowed&&s&&r&&B3===o&&pt[n]&&pt[n].length>0?(w5++,pt[n]):(w5=0,new Promise(async l=>{var x,i,y;let c=[];if((x=t.face.emotion)!=null&&x.enabled){let d={},m=P0!=null&&P0.inputs[0].shape?P0.inputs[0].shape[2]:0;if(((i=t.face.emotion)==null?void 0:i.crop)>0){let u=(y=t.face.emotion)==null?void 0:y.crop,g=[[u,u,1-u,1-u]];d.resize=J0.image.cropAndResize(e,g,[0],[m,m])}else d.resize=J0.image.resizeBilinear(e,[m,m],!1);z5?(d.mul=J0.mul(d.resize,255),d.normalize=J0.sub(d.mul,[103.939,116.779,123.68]),d.emotion=P0==null?void 0:P0.execute(d.normalize)):(d.channels=J0.mul(d.resize,C.rgb),d.grayscale=J0.sum(d.channels,3,!0),d.grayscaleSub=J0.sub(d.grayscale,C.tf05),d.grayscaleMul=J0.mul(d.grayscaleSub,C.tf2),d.emotion=P0==null?void 0:P0.execute(d.grayscaleMul)),H3=v();let f=await d.emotion.data();for(let u=0;u(t.face.emotion.minConfidence||0)&&c.push({score:Math.min(.99,Math.trunc(100*f[u])/100),emotion:E5[u]});c.sort((u,g)=>g.score-u.score),Object.keys(d).forEach(u=>J0.dispose(d[u]))}pt[n]=c,B3=o,l(c)}))}var ie=V(G());var k0,Fe=[],Z3=0,X3=0,j5=Number.MAX_SAFE_INTEGER;async function q3(e){var t;return R.initial&&(k0=null),k0?e.debug&&h("cached model:",k0.modelUrl):k0=await L((t=e.face.description)==null?void 0:t.modelPath),k0}function pA(e,t){var s,A;let n=e.image||e.tensor||e;if(!(k0!=null&&k0.inputs[0].shape))return n;let o;if(((s=t.face.description)==null?void 0:s.crop)>0){let a=(A=t.face.description)==null?void 0:A.crop,l=[[a,a,1-a,1-a]];o=ie.image.cropAndResize(n,l,[0],[k0.inputs[0].shape[2],k0.inputs[0].shape[1]])}else o=ie.image.resizeBilinear(n,[k0.inputs[0].shape[2],k0.inputs[0].shape[1]],!1);let r=ie.mul(o,C.tf255);return ie.dispose(o),r}async function I5(e,t,n,o){var a,l,c,x;let r={age:0,gender:"unknown",genderScore:0,descriptor:[]};if(!(k0!=null&&k0.executor))return r;let s=j5<(((a=t.face.description)==null?void 0:a.skipFrames)||0),A=(((l=t.face.description)==null?void 0:l.skipTime)||0)>v()-Z3;return t.skipAllowed&&s&&A&&X3===o&&((c=Fe==null?void 0:Fe[n])==null?void 0:c.age)>0&&((x=Fe==null?void 0:Fe[n])==null?void 0:x.genderScore)>0?(j5++,Fe[n]):(j5=0,new Promise(async i=>{var y;if((y=t.face.description)!=null&&y.enabled){let d=pA(e,t),m=k0==null?void 0:k0.execute(d);Z3=v(),ie.dispose(d);let u=await m.find(B=>B.shape[1]===1).data(),g=Math.trunc(200*Math.abs(u[0]-.5))/100;g>(t.face.description.minConfidence||0)&&(r.gender=u[0]<=.5?"female":"male",r.genderScore=Math.min(.99,g));let T=ie.argMax(m.find(B=>B.shape[1]===100),1),p=(await T.data())[0];ie.dispose(T);let k=await m.find(B=>B.shape[1]===100).data();r.age=Math.round(k[p-1]>k[p+1]?10*p-100*k[p-1]:10*p+100*k[p+1])/10,(Number.isNaN(u[0])||Number.isNaN(k[0]))&&h("faceres error:",{model:k0,result:m});let P=m.find(B=>B.shape[1]===1024),I=P?await P.data():[];r.descriptor=Array.from(I),m.forEach(B=>ie.dispose(B))}Fe[n]=r,X3=o,i(r)}))}var g2=.1,N5=.5;function uA(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 Y3(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 ae.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]});g2&&g2>0&&(r=r.map(A=>({x:A.x>.5?A.x+g2:A.x-g2,y:A.y>.5?A.y+g2:A.y-g2})));for(let A=0;Av()-J3,s=L5<(((a=t.face.antispoof)==null?void 0:a.skipFrames)||0);return t.skipAllowed&&r&&s&&K3===o&&ut[n]?(L5++,ut[n]):(L5=0,new Promise(async l=>{let c=ht.image.resizeBilinear(e,[w0!=null&&w0.inputs[0].shape?w0.inputs[0].shape[2]:0,w0!=null&&w0.inputs[0].shape?w0.inputs[0].shape[1]:0],!1),x=w0==null?void 0:w0.execute(c),i=(await x.data())[0];ut[n]=Math.round(100*i)/100,K3=o,J3=v(),ht.dispose([c,x]),l(ut[n])}))}var gt=V(G());var E0,bt=[],C5=Number.MAX_SAFE_INTEGER,$3=0,en=0;async function tn(e){var t;return R.initial&&(E0=null),E0?e.debug&&h("cached model:",E0.modelUrl):E0=await L((t=e.face.liveness)==null?void 0:t.modelPath),E0}async function W5(e,t,n,o){var A,a;if(!(E0!=null&&E0.executor))return 0;let r=(((A=t.face.liveness)==null?void 0:A.skipTime)||0)>v()-en,s=C5<(((a=t.face.liveness)==null?void 0:a.skipFrames)||0);return t.skipAllowed&&r&&s&&$3===o&&bt[n]?(C5++,bt[n]):(C5=0,new Promise(async l=>{let c=gt.image.resizeBilinear(e,[E0!=null&&E0.inputs[0].shape?E0.inputs[0].shape[2]:0,E0!=null&&E0.inputs[0].shape?E0.inputs[0].shape[1]:0],!1),x=E0==null?void 0:E0.execute(c),i=(await x.data())[0];bt[n]=Math.round(100*i)/100,$3=o,en=v(),gt.dispose([c,x]),l(bt[n])}))}var Tt=V(G());var le,D5=[],bA=["white","black","asian","indian","other"],gA=[15,23,28,35.5,45.5,55.5,65],on=0,rn=0,F5=Number.MAX_SAFE_INTEGER;async function sn(e){var t;return R.initial&&(le=null),le?e.debug&&h("cached model:",le.modelUrl):le=await L((t=e.face.gear)==null?void 0:t.modelPath),le}async function B5(e,t,n,o){var A,a;if(!le)return{age:0,gender:"unknown",genderScore:0,race:[]};let r=F5<(((A=t.face.gear)==null?void 0:A.skipFrames)||0),s=(((a=t.face.gear)==null?void 0:a.skipTime)||0)>v()-rn;return t.skipAllowed&&s&&r&&on===o&&D5[n]?(F5++,D5[n]):(F5=0,new Promise(async l=>{var g,T,p,b;if(!(le!=null&&le.inputs[0].shape))return;let c={},x=[[0,.1,.9,.9]];if(((g=t.face.gear)==null?void 0:g.crop)>0){let k=(T=t.face.gear)==null?void 0:T.crop;x=[[k,k,1-k,1-k]]}c.resize=Tt.image.cropAndResize(e,x,[0],[le.inputs[0].shape[2],le.inputs[0].shape[1]]);let i={age:0,gender:"unknown",genderScore:0,race:[]};(p=t.face.gear)!=null&&p.enabled&&([c.age,c.gender,c.race]=le.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 k=0;k(((b=t.face.gear)==null?void 0:b.minConfidence)||.2)&&i.race.push({score:Math.round(100*d[k])/100,race:bA[k]});i.race.sort((k,P)=>P.score-k.score);let f=Array.from(await c.age.data()).map((k,P)=>[gA[P],k]).sort((k,P)=>P[1]-k[1]),u=f[0][0];for(let k=1;kTt.dispose(c[k])),D5[n]=i,on=o,rn=v(),l(i)}))}var s2=V(G());var H0,vt=[],an=0,ln=0,H5=Number.MAX_SAFE_INTEGER;async function cn(e){return R.initial&&(H0=null),H0?e.debug&&h("cached model:",H0.modelUrl):H0=await L(e.face.ssrnet.modelPathAge),H0}async function G5(e,t,n,o){var A,a,l,c;if(!H0)return{age:0};let r=H5<(((A=t.face.ssrnet)==null?void 0:A.skipFrames)||0),s=(((a=t.face.ssrnet)==null?void 0:a.skipTime)||0)>v()-ln;return t.skipAllowed&&r&&s&&an===o&&((l=vt[n])!=null&&l.age)&&((c=vt[n])==null?void 0:c.age)>0?(H5++,vt[n]):(H5=0,new Promise(async x=>{var d,m,f;if(!(H0!=null&&H0.inputs)||!H0.inputs[0]||!H0.inputs[0].shape)return;let i={};if(((d=t.face.ssrnet)==null?void 0:d.crop)>0){let u=(m=t.face.ssrnet)==null?void 0:m.crop,g=[[u,u,1-u,1-u]];i.resize=s2.image.cropAndResize(e,g,[0],[H0.inputs[0].shape[2],H0.inputs[0].shape[1]])}else i.resize=s2.image.resizeBilinear(e,[H0.inputs[0].shape[2],H0.inputs[0].shape[1]],!1);i.enhance=s2.mul(i.resize,C.tf255);let y={age:0};if((f=t.face.ssrnet)!=null&&f.enabled&&(i.age=H0.execute(i.enhance)),i.age){let u=await i.age.data();y.age=Math.trunc(10*u[0])/10}Object.keys(i).forEach(u=>s2.dispose(i[u])),vt[n]=y,an=o,ln=v(),x(y)}))}var v0=V(G());var N0,Rt=[],xn=0,yn=0,V5=Number.MAX_SAFE_INTEGER,Z5=[.2989,.587,.114];async function fn(e){var t;return R.initial&&(N0=null),N0?e.debug&&h("cached model:",N0.modelUrl):N0=await L((t=e.face.ssrnet)==null?void 0:t.modelPathGender),N0}async function X5(e,t,n,o){var A,a,l,c;if(!N0)return{gender:"unknown",genderScore:0};let r=V5<(((A=t.face.ssrnet)==null?void 0:A.skipFrames)||0),s=(((a=t.face.ssrnet)==null?void 0:a.skipTime)||0)>v()-yn;return t.skipAllowed&&r&&s&&xn===o&&((l=Rt[n])!=null&&l.gender)&&((c=Rt[n])==null?void 0:c.genderScore)>0?(V5++,Rt[n]):(V5=0,new Promise(async x=>{var m,f,u;if(!(N0!=null&&N0.inputs[0].shape))return;let i={};if(((m=t.face.ssrnet)==null?void 0:m.crop)>0){let g=(f=t.face.ssrnet)==null?void 0:f.crop,T=[[g,g,1-g,1-g]];i.resize=v0.image.cropAndResize(e,T,[0],[N0.inputs[0].shape[2],N0.inputs[0].shape[1]])}else i.resize=v0.image.resizeBilinear(e,[N0.inputs[0].shape[2],N0.inputs[0].shape[1]],!1);i.enhance=v0.tidy(()=>{var T,p;let g;if(((p=(T=N0==null?void 0:N0.inputs)==null?void 0:T[0].shape)==null?void 0:p[3])===1){let[b,k,P]=v0.split(i.resize,3,3),I=v0.mul(b,Z5[0]),B=v0.mul(k,Z5[1]),_=v0.mul(P,Z5[2]),Z=v0.addN([I,B,_]);g=v0.mul(v0.sub(Z,C.tf05),2)}else g=v0.mul(v0.sub(i.resize,C.tf05),2);return g});let y={gender:"unknown",genderScore:0};(u=t.face.ssrnet)!=null&&u.enabled&&(i.gender=N0.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(g=>v0.dispose(i[g])),Rt[n]=y,xn=o,yn=v(),x(y)}))}var Mt=V(G());var Q0,q5=[],pn=0,un=0,hn=Number.MAX_SAFE_INTEGER;async function bn(e){var t;return R.initial&&(Q0=null),Q0?e.debug&&h("cached model:",Q0.modelUrl):Q0=await L((t=e.face.mobilefacenet)==null?void 0:t.modelPath),Q0}async function U5(e,t,n,o){var A,a;if(!(Q0!=null&&Q0.executor))return[];let r=hn<(((A=t.face.mobilefacenet)==null?void 0:A.skipFrames)||0),s=(((a=t.face.mobilefacenet)==null?void 0:a.skipTime)||0)>v()-un;return t.skipAllowed&&s&&r&&pn===o&&q5[n]?(hn++,q5[n]):new Promise(async l=>{var x;let c=[];if((x=t.face.mobilefacenet)!=null&&x.enabled&&(Q0!=null&&Q0.inputs[0].shape)){let i={};i.crop=Mt.image.resizeBilinear(e,[Q0.inputs[0].shape[2],Q0.inputs[0].shape[1]],!1),i.data=Q0.execute(i.crop);let y=await i.data.data();c=Array.from(y),Object.keys(i).forEach(d=>Mt.dispose(i[d]))}q5[n]=c,pn=o,un=v(),l(c)})}var Pt=V(G());var _0,Y5=[],Tn=0,vn=0,Rn=Number.MAX_SAFE_INTEGER;async function Mn(e){return R.initial&&(_0=null),_0?e.debug&&h("cached model:",_0.modelUrl):_0=await L(e.face.insightface.modelPath),_0}async function K5(e,t,n,o){var A,a;if(!(_0!=null&&_0.executor))return[];let r=Rn<(((A=t.face.insightface)==null?void 0:A.skipFrames)||0),s=(((a=t.face.insightface)==null?void 0:a.skipTime)||0)>v()-vn;return t.skipAllowed&&s&&r&&Tn===o&&Y5[n]?(Rn++,Y5[n]):new Promise(async l=>{var x;let c=[];if((x=t.face.insightface)!=null&&x.enabled&&(_0!=null&&_0.inputs[0].shape)){let i={};i.crop=Pt.image.resizeBilinear(e,[_0.inputs[0].shape[2],_0.inputs[0].shape[1]],!1),i.data=_0.execute(i.crop);let y=await i.data.data();c=Array.from(y),Object.keys(i).forEach(d=>Pt.dispose(i[d]))}Y5[n]=c,Tn=o,vn=v(),l(c)})}var TA=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}},kn=(e,t)=>{let n=f=>{let u=Math.sqrt(f[0]*f[0]+f[1]*f[1]+f[2]*f[2]);return f[0]/=u,f[1]/=u,f[2]/=u,f},o=(f,u)=>{let g=f[0]-u[0],T=f[1]-u[1],p=f[2]-u[2];return[g,T,p]},r=(f,u)=>{let g=f[1]*u[2]-f[2]*u[1],T=f[2]*u[0]-f[0]*u[2],p=f[0]*u[1]-f[1]*u[0];return[g,T,p]},s=f=>{let[u,g,T,p,b,k,P,I,B]=f,_,Z,$;return p<1?p>-1?($=Math.asin(p),Z=Math.atan2(-P,u),_=Math.atan2(-k,b)):($=-Math.PI/2,Z=-Math.atan2(I,B),_=0):($=Math.PI/2,Z=Math.atan2(I,B),_=0),Number.isNaN(_)&&(_=0),Number.isNaN(Z)&&(Z=0),Number.isNaN($)&&($=0),{pitch:2*-_,yaw:2*-Z,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),m=A.length===478?TA(e):{bearing:0,strength:0};return{angle:d,matrix:y,gaze:m}};function wn(e,t){let n=e==null?void 0:e.annotations;if(!(n!=null&&n.leftEyeIris)||!(n!=null&&n.rightEyeIris))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 J5=async(e,t)=>{var m,f,u,g,T,p,b,k,P,I,B,_,Z,$,A0,t0,n0,j0,M,T0,C0,x0,K;let n=v(),o,r,s,A,a,l,c,x,i,y=[];e.state="run:face";let d=await C3(t,e.config);if(e.performance.face=R.perfadd?(e.performance.face||0)+Math.trunc(v()-n):Math.trunc(v()-n),!t.shape||t.shape.length!==4)return[];if(!d)return[];for(let E=0;E200?kn(d[E],[t.shape[2],t.shape[1]]):null;e.analyze("Start Emotion:"),e.config.async?A=(f=e.config.face.emotion)!=null&&f.enabled?S5(d[E].tensor||l0.tensor([]),e.config,E,d.length):[]:(e.state="run:emotion",n=v(),A=(u=e.config.face.emotion)!=null&&u.enabled?await S5(d[E].tensor||l0.tensor([]),e.config,E,d.length):[],e.performance.emotion=R.perfadd?(e.performance.emotion||0)+Math.trunc(v()-n):Math.trunc(v()-n)),e.analyze("End Emotion:"),e.analyze("Start AntiSpoof:"),e.config.async?c=(g=e.config.face.antispoof)!=null&&g.enabled?O5(d[E].tensor||l0.tensor([]),e.config,E,d.length):0:(e.state="run:antispoof",n=v(),c=(T=e.config.face.antispoof)!=null&&T.enabled?await O5(d[E].tensor||l0.tensor([]),e.config,E,d.length):0,e.performance.antispoof=R.perfadd?(e.performance.antispoof||0)+Math.trunc(v()-n):Math.trunc(v()-n)),e.analyze("End AntiSpoof:"),e.analyze("Start Liveness:"),e.config.async?x=(p=e.config.face.liveness)!=null&&p.enabled?W5(d[E].tensor||l0.tensor([]),e.config,E,d.length):0:(e.state="run:liveness",n=v(),x=(b=e.config.face.liveness)!=null&&b.enabled?await W5(d[E].tensor||l0.tensor([]),e.config,E,d.length):0,e.performance.liveness=R.perfadd?(e.performance.antispoof||0)+Math.trunc(v()-n):Math.trunc(v()-n)),e.analyze("End Liveness:"),e.analyze("Start GEAR:"),e.config.async?r=(k=e.config.face.gear)!=null&&k.enabled?B5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null:(e.state="run:gear",n=v(),r=(P=e.config.face.gear)!=null&&P.enabled?await B5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null,e.performance.gear=Math.trunc(v()-n)),e.analyze("End GEAR:"),e.analyze("Start SSRNet:"),e.config.async?(o=(I=e.config.face.ssrnet)!=null&&I.enabled?G5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null,s=(B=e.config.face.ssrnet)!=null&&B.enabled?X5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null):(e.state="run:ssrnet",n=v(),o=(_=e.config.face.ssrnet)!=null&&_.enabled?await G5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null,s=(Z=e.config.face.ssrnet)!=null&&Z.enabled?await X5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null,e.performance.ssrnet=Math.trunc(v()-n)),e.analyze("End SSRNet:"),e.analyze("Start MobileFaceNet:"),e.config.async?a=($=e.config.face.mobilefacenet)!=null&&$.enabled?U5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null:(e.state="run:mobilefacenet",n=v(),a=(A0=e.config.face.mobilefacenet)!=null&&A0.enabled?await U5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null,e.performance.mobilefacenet=Math.trunc(v()-n)),e.analyze("End MobileFaceNet:"),e.analyze("Start InsightFace:"),e.config.async?l=(t0=e.config.face.insightface)!=null&&t0.enabled?K5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null:(e.state="run:mobilefacenet",n=v(),l=(n0=e.config.face.insightface)!=null&&n0.enabled?await K5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null,e.performance.mobilefacenet=Math.trunc(v()-n)),e.analyze("End InsightFace:"),e.analyze("Start Description:"),e.config.async?i=I5(d[E].tensor||l0.tensor([]),e.config,E,d.length):(e.state="run:description",n=v(),i=await I5(d[E].tensor||l0.tensor([]),e.config,E,d.length),e.performance.description=R.perfadd?(e.performance.description||0)+Math.trunc(v()-n):Math.trunc(v()-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:"),(j0=e.config.face.ssrnet)!=null&&j0.enabled&&o&&s&&(i={...i,age:o.age,gender:s.gender,genderScore:s.genderScore}),(M=e.config.face.gear)!=null&&M.enabled&&r&&(i={...i,age:r.age,gender:r.gender,genderScore:r.genderScore,race:r.race}),(T0=e.config.face.mobilefacenet)!=null&&T0.enabled&&a&&(i.descriptor=a),(C0=e.config.face.insightface)!=null&&C0.enabled&&l&&(i.descriptor=l);let X=(x0=e.config.face.iris)!=null&&x0.enabled?wn(d[E],t.shape[2]):0,U0=(K=e.config.face.detector)!=null&&K.return?l0.squeeze(d[E].tensor):null;l0.dispose(d[E].tensor),d[E].tensor&&delete d[E].tensor;let y0={...d[E],id:E};i.age&&(y0.age=i.age),i.gender&&(y0.gender=i.gender),i.genderScore&&(y0.genderScore=i.genderScore),i.descriptor&&(y0.embedding=i.descriptor),i.race&&(y0.race=i.race),A&&(y0.emotion=A),c&&(y0.real=c),x&&(y0.live=x),X>0&&(y0.distance=X),H&&(y0.rotation=H),U0&&(y0.tensor=U0),y.push(y0),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 G0={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=>G0.nameMapping[e],getPoints:e=>G0.pointsMapping[e]},He={none:0,half:1,full:2,nameMapping:{0:"none",1:"half",2:"full"},getName:e=>He.nameMapping[e]},c0={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=>c0.nameMapping[e]},Be=class{constructor(t){w(this,"name");w(this,"curls");w(this,"directions");w(this,"weights");w(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:fe,index:Pe,middle:ke,ring:A2,pinky:a2}=G0,{none:me,half:RA,full:pe}=He,{verticalUp:T2,verticalDown:Ki,horizontalLeft:Q5,horizontalRight:MA,diagonalUpRight:PA,diagonalUpLeft:v2,diagonalDownRight:Ji,diagonalDownLeft:Qi}=c0,Ge=new Be("thumbs up");Ge.curl(fe,me,1);Ge.direction(fe,T2,1);Ge.direction(fe,v2,.25);Ge.direction(fe,PA,.25);for(let e of[G0.index,G0.middle,G0.ring,G0.pinky])Ge.curl(e,pe,1),Ge.direction(e,Q5,1),Ge.direction(e,MA,1);var h0=new Be("victory");h0.curl(fe,RA,.5);h0.curl(fe,me,.5);h0.direction(fe,T2,1);h0.direction(fe,v2,1);h0.curl(Pe,me,1);h0.direction(Pe,T2,.75);h0.direction(Pe,v2,1);h0.curl(ke,me,1);h0.direction(ke,T2,1);h0.direction(ke,v2,.75);h0.curl(A2,pe,1);h0.direction(A2,T2,.2);h0.direction(A2,v2,1);h0.direction(A2,Q5,.2);h0.curl(a2,pe,1);h0.direction(a2,T2,.2);h0.direction(a2,v2,1);h0.direction(a2,Q5,.2);h0.weight(Pe,2);h0.weight(ke,2);var Ve=new Be("point");Ve.curl(fe,pe,1);Ve.curl(Pe,me,.5);Ve.curl(ke,pe,.5);Ve.curl(A2,pe,.5);Ve.curl(a2,pe,.5);Ve.weight(Pe,2);Ve.weight(ke,2);var Ze=new Be("middle finger");Ze.curl(fe,me,1);Ze.curl(Pe,pe,.5);Ze.curl(ke,pe,.5);Ze.curl(A2,pe,.5);Ze.curl(a2,pe,.5);Ze.weight(Pe,2);Ze.weight(ke,2);var R2=new Be("open palm");R2.curl(fe,me,.75);R2.curl(Pe,me,.75);R2.curl(ke,me,.75);R2.curl(A2,me,.75);R2.curl(a2,me,.75);var En=[Ge,h0,Ve,Ze,R2];var kA=.7,i2={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 zn(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 jn(e,t){if(!e||!t)return[0,0];let n=zn(e[0],e[1],t[0],t[1]);if(e.length===2)return n;let o=zn(e[1],e[2],t[1],t[2]);return[n,o]}function Sn(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 wA(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),m=Math.sqrt(s*s+l*l+i*i),f=(m*m+y*y-d*d)/(2*m*y);f>1?f=1:f<-1&&(f=-1);let u=Math.acos(f);u=57.2958*u%180;let g;return u>i2.NO_CURL_START_LIMIT?g=He.none:u>i2.HALF_CURL_START_LIMIT?g=He.half:g=He.full,g}function In(e,t,n,o){let r;return o===Math.abs(e)?e>0?r=c0.horizontalLeft:r=c0.horizontalRight:o===Math.abs(t)?t>0?r=c0.horizontalLeft:r=c0.horizontalRight:n>0?r=c0.horizontalLeft:r=c0.horizontalRight,r}function Nn(e,t,n,o){let r;return o===Math.abs(e)?e<0?r=c0.verticalDown:r=c0.verticalUp:o===Math.abs(t)?t<0?r=c0.verticalDown:r=c0.verticalUp:n<0?r=c0.verticalDown:r=c0.verticalUp,r}function EA(e,t,n,o,r,s,A,a){let l,c=Nn(e,t,n,o),x=In(r,s,A,a);return c===c0.verticalUp?x===c0.horizontalLeft?l=c0.diagonalUpLeft:l=c0.diagonalUpRight:x===c0.horizontalLeft?l=c0.diagonalDownLeft:l=c0.diagonalDownRight,l}function zA(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,m=0,f=i/(x+1e-5);f>1.5?y+=i2.DISTANCE_VOTE_POWER:f>.66?d+=i2.DISTANCE_VOTE_POWER:m+=i2.DISTANCE_VOTE_POWER;let u=Math.sqrt(r*r+a*a),g=Math.sqrt(s*s+l*l),T=Math.sqrt(A*A+c*c),p=Math.max(u,g,T),b=e[0],k=e[1],P=n[0],I=n[1];p===u?(P=n[0],I=n[1]):p===T&&(b=t[0],k=t[1]);let Z=jn([b,k],[P,I]),$=Sn(Z,i2.TOTAL_ANGLE_VOTE_POWER);y+=$[0],d+=$[1],m+=$[2];for(let t0 of o){let n0=Sn(t0,i2.SINGLE_ANGLE_VOTE_POWER);y+=n0[0],d+=n0[1],m+=n0[2]}let A0;return y===Math.max(y,d,m)?A0=Nn(l,a,c,i):m===Math.max(d,m)?A0=In(s,r,A,x):A0=EA(l,a,c,i,s,r,A,x),A0}function Ln(e){let t=[],n=[],o=[],r=[];if(!e)return{curls:o,directions:r};for(let s of G0.all){let A=G0.getPoints(s),a=[],l=[];for(let c of A){let x=e[c[0]],i=e[c[1]],y=jn(x,i),d=y[0],m=y[1];a.push(d),l.push(m)}t.push(a),n.push(l)}for(let s of G0.all){let A=s===G0.thumb?1:0,a=G0.getPoints(s),l=e[a[A][0]],c=e[a[A+1][1]],x=e[a[3][1]],i=wA(l,c,x),y=zA(l,c,x,t[s].slice(A));o[s]=i,r[s]=y}return{curls:o,directions:r}}function kt(e){if(!e||e.length===0)return null;let t=Ln(e),n={};for(let o of G0.all)n[G0.getName(o)]={curl:He.getName(t.curls[o]),direction:c0.getName(t.directions[o])};return n}function On(e){let t=[];if(!e||e.length===0)return t;let n=Ln(e);for(let o of En){let r=o.matchAgainst(n.curls,n.directions);r>=kA&&t.push({name:o.name,confidence:r})}return t}var Cn=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},Dn=e=>{var n,o,r,s;if(!e)return[];let t=[];for(let A=0;A.06||u>.06)&&(d=!1),f>u?u>.04&&t.push({iris:A,gesture:"looking right"}):f>.04&&t.push({iris:A,gesture:"looking left"});let g=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||g<.01||T>.022||g>.022)&&(d=!1),(T<.01||g<.01)&&t.push({iris:A,gesture:"looking down"}),(T>.022||g>.022)&&t.push({iris:A,gesture:"looking up"}),d&&t.push({iris:A,gesture:"looking center"})}return t},Fn=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 Et(e,t=1.5){let n=C2(e),o=wt(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 zt(e){let t=C2(e),n=wt(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 jA(e){return e-2*Math.PI*Math.floor((e+Math.PI)/(2*Math.PI))}function Xn(e,t){let n=Math.PI/2-Math.atan2(-(t[1]-e[1]),t[0]-e[0]);return jA(n)}var Bn=(e,t)=>[[1,0,e],[0,1,t],[0,0,1]];function Xe(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(),m={startPoint:i,endPoint:y,palmLandmarks:d,confidence:r[l]},f=Zn(m,[(t.shape[2]||1)/this.inputSize,(t.shape[1]||0)/this.inputSize]);A.push(f),Object.keys(c).forEach(u=>W.dispose(c[u]))}return Object.keys(o).forEach(l=>W.dispose(o[l])),A}};var $0=V(G());var OA=5,Kn=1.65,Jn=[0,5,9,13,17,1,2],CA=0,WA=2,Qn=0,jt=class{constructor(t,n){w(this,"handDetector");w(this,"handPoseModel");w(this,"inputSize");w(this,"storedBoxes");w(this,"skipped");w(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=>e1([...s,1],n)),r=this.calculateLandmarksBoundingBox(o);return Et(zt(r),OA)}getBoxForHandLandmarks(t){let n=this.calculateLandmarksBoundingBox(t),o=Et(zt(n),Kn);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=$5(o,[0,0]),c=a.map(d=>[...e1(d,l),d[2]]),x=qn(r),i=[...C2(n),1],y=[Xe(i,x[0]),Xe(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)>v()-Qn,A=this.skipped<(n.hand.skipFrames||0);n.skipAllowed&&s&&A?this.skipped++:(r=await this.handDetector.predict(t,n),this.skipped=0),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 k=$0.reshape(p,[-1,3]),P=await k.array();$0.dispose(p),$0.dispose(k);let I=this.transformRawCoords(P,f,x,m),B=this.getBoxForHandLandmarks(I);this.storedBoxes[l]={...B,confidence:b};let _={landmarks:I,confidence:b,boxConfidence:c.confidence,fingerConfidence:b,box:{topLeft:B.startPoint,bottomRight:B.endPoint}};a.push(_)}else this.storedBoxes[l]=null;$0.dispose(p)}else{let x=Et(zt(c),Kn),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 _n={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]},l2,c2,t1;function FA(){let e=l2?new St(l2):void 0;e&&c2&&(t1=new jt(e,c2))}async function n1(e,t){t1||FA();let n=await t1.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=kt(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 $n(e){var t;return R.initial&&(l2=null),l2?e.debug&&h("cached model:",l2.modelUrl):l2=await L((t=e.hand.detector)==null?void 0:t.modelPath),l2}async function eo(e){var t;return R.initial&&(c2=null),c2?e.debug&&h("cached model:",c2.modelUrl):c2=await L((t=e.hand.skeleton)==null?void 0:t.modelPath),c2}var Q=V(G());var p0=[null,null],BA=["StatefulPartitionedCall/Postprocessor/Slice","StatefulPartitionedCall/Postprocessor/ExpandDims_1"],qe=[[0,0],[0,0]],HA=["hand","fist","pinch","point","face","tip","pinchtip"],no=4,oo=1.6,GA=512,VA=1.4,It=Number.MAX_SAFE_INTEGER,o1=0,we=[0,0],m0={boxes:[],hands:[]},ro={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 so(e){var t;if(R.initial&&(p0[0]=null),p0[0])e.debug&&h("cached model:",p0[0].modelUrl);else{J2(["tensorlistreserve","enter","tensorlistfromtensor","merge","loopcond","switch","exit","tensorliststack","nextiteration","tensorlistsetitem","tensorlistgetitem","reciprocal","shape","split","where"],e),p0[0]=await L((t=e.hand.detector)==null?void 0:t.modelPath);let n=p0[0].executor?Object.values(p0[0].modelSignature.inputs):void 0;qe[0][0]=Array.isArray(n)?parseInt(n[0].tensorShape.dim[1].size):0,qe[0][1]=Array.isArray(n)?parseInt(n[0].tensorShape.dim[2].size):0}return p0[0]}async function Ao(e){var t;if(R.initial&&(p0[1]=null),p0[1])e.debug&&h("cached model:",p0[1].modelUrl);else{p0[1]=await L((t=e.hand.skeleton)==null?void 0:t.modelPath);let n=p0[1].executor?Object.values(p0[1].modelSignature.inputs):void 0;qe[1][0]=Array.isArray(n)?parseInt(n[0].tensorShape.dim[1].size):0,qe[1][1]=Array.isArray(n)?parseInt(n[0].tensorShape.dim[2].size):0}return p0[1]}async function ZA(e,t){let n=[];if(!e||!p0[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,GA),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 p0[0].executeAsync(o.cast,BA),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[no]),a.splice(no,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),m=await d.data();Q.dispose(d);let f=[m[1],m[0],m[3]-m[1],m[2]-m[0]],u=st(f,VA),g=[Math.trunc(f[0]*we[0]),Math.trunc(f[1]*we[1]),Math.trunc(f[2]*we[0]),Math.trunc(f[3]*we[1])],T=x[y],p=HA[i[y]],b={id:l++,score:T,box:g,boxRaw:u,label:p};n.push(b)}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 r1(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&&p0[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],[qe[1][0],qe[1][1]],"bilinear"),r.div=Q.div(r.crop,C.tf255),[r.score,r.keypoints]=p0[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]/qe[1][1],i[1]/qe[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=>[we[0]*(i[0]+t.boxRaw[0]),we[1]*(i[1]+t.boxRaw[1]),i[2]||0]),o.landmarks=kt(o.keypoints);for(let i of Object.keys(ro))o.annotations[i]=ro[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 s1(e,t){var r,s;if(!((r=p0[0])!=null&&r.executor)||!((s=p0[1])!=null&&s.executor)||!p0[0].inputs[0].shape||!p0[1].inputs[0].shape)return[];we=[e.shape[2]||0,e.shape[1]||0],It++;let n=(t.hand.skipTime||0)>v()-o1,o=It<(t.hand.skipFrames||0);return t.skipAllowed&&n&&o?m0.hands:new Promise(async A=>{let a=3*(t.hand.skipTime||0)>v()-o1,l=It<3*(t.hand.skipFrames||0);t.skipAllowed&&m0.hands.length===t.hand.maxDetected?m0.hands=await Promise.all(m0.boxes.map(x=>r1(e,x,t))):t.skipAllowed&&a&&l&&m0.hands.length>0?m0.hands=await Promise.all(m0.boxes.map(x=>r1(e,x,t))):(m0.boxes=await ZA(e,t),o1=v(),m0.hands=await Promise.all(m0.boxes.map(x=>r1(e,x,t))),It=0);let c=[...m0.boxes];if(m0.boxes.length=0,t.cacheSensitivity>0)for(let x=0;x.05&&i.box[3]/(e.shape[1]||1)>.05&&m0.hands[x].fingerScore&&m0.hands[x].fingerScore>(t.hand.minConfidence||0)){let y=st(i.box,oo),d=st(i.boxRaw,oo);m0.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 W2={};ze(W2,{connected:()=>Lt,horizontal:()=>A1,kpt:()=>Nt,relative:()=>i1,vertical:()=>a1});var Nt=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],A1=[["leftEye","rightEye"],["leftEar","rightEar"],["leftShoulder","rightShoulder"],["leftElbow","rightElbow"],["leftWrist","rightWrist"],["leftHip","rightHip"],["leftKnee","rightKnee"],["leftAnkle","rightAnkle"]],a1=[["leftKnee","leftShoulder"],["rightKnee","rightShoulder"],["leftAnkle","leftKnee"],["rightAnkle","rightKnee"]],i1=[[["leftHip","rightHip"],["leftShoulder","rightShoulder"]],[["leftElbow","rightElbow"],["leftShoulder","rightShoulder"]]],Lt={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=Te(),l1=0;function io(e,t){var A,a,l,c,x,i,y,d,m,f,u,g,T,p,b,k,P,I,B,_,Z,$,A0,t0,n0,j0;let n=v();if(!e)return Te();let o=Date.now()-e.timestamp,r=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 M=0;M((r-1)*z.body[M].box[X]+H)/r),C0=e.body[M].boxRaw.map((H,X)=>((r-1)*z.body[M].boxRaw[X]+H)/r),x0=e.body[M].keypoints.map((H,X)=>{var U0,y0,Ee,k2,x2,E1,z1,S1,j1;return{score:H.score,part:H.part,position:[z.body[M].keypoints[X]?((r-1)*(z.body[M].keypoints[X].position[0]||0)+(H.position[0]||0))/r:H.position[0],z.body[M].keypoints[X]?((r-1)*(z.body[M].keypoints[X].position[1]||0)+(H.position[1]||0))/r:H.position[1],z.body[M].keypoints[X]?((r-1)*(z.body[M].keypoints[X].position[2]||0)+(H.position[2]||0))/r:H.position[2]],positionRaw:[z.body[M].keypoints[X]?((r-1)*(z.body[M].keypoints[X].positionRaw[0]||0)+(H.positionRaw[0]||0))/r:H.positionRaw[0],z.body[M].keypoints[X]?((r-1)*(z.body[M].keypoints[X].positionRaw[1]||0)+(H.positionRaw[1]||0))/r:H.positionRaw[1],z.body[M].keypoints[X]?((r-1)*(z.body[M].keypoints[X].positionRaw[2]||0)+(H.positionRaw[2]||0))/r:H.positionRaw[2]],distance:[z.body[M].keypoints[X]?((r-1)*(((U0=z.body[M].keypoints[X].distance)==null?void 0:U0[0])||0)+(((y0=H.distance)==null?void 0:y0[0])||0))/r:(Ee=H.distance)==null?void 0:Ee[0],z.body[M].keypoints[X]?((r-1)*(((k2=z.body[M].keypoints[X].distance)==null?void 0:k2[1])||0)+(((x2=H.distance)==null?void 0:x2[1])||0))/r:(E1=H.distance)==null?void 0:E1[1],z.body[M].keypoints[X]?((r-1)*(((z1=z.body[M].keypoints[X].distance)==null?void 0:z1[2])||0)+(((S1=H.distance)==null?void 0:S1[2])||0))/r:(j1=H.distance)==null?void 0:j1[2]]}}),K={},E={connected:{}};(A=t.body.modelPath)!=null&&A.includes("efficientpose")?E=it:(a=t.body.modelPath)!=null&&a.includes("blazepose")?E=ot:(l=t.body.modelPath)!=null&&l.includes("movenet")&&(E=W2);for(let[H,X]of Object.entries(E.connected)){let U0=[];for(let y0=0;y0x2.part===X[y0]),k2=x0.find(x2=>x2.part===X[y0+1]);Ee&&k2&&U0.push([Ee.position,k2.position])}K[H]=U0}z.body[M]={...e.body[M],box:T0,boxRaw:C0,keypoints:x0,annotations:K}}if(!z.hand||e.hand.length!==z.hand.length)z.hand=JSON.parse(JSON.stringify(e.hand));else for(let M=0;M((r-1)*z.hand[M].box[H]+E)/r),C0=e.hand[M].boxRaw.map((E,H)=>((r-1)*z.hand[M].boxRaw[H]+E)/r);z.hand[M].keypoints.length!==e.hand[M].keypoints.length&&(z.hand[M].keypoints=e.hand[M].keypoints);let x0=e.hand[M].keypoints&&e.hand[M].keypoints.length>0?e.hand[M].keypoints.map((E,H)=>E.map((X,U0)=>((r-1)*(z.hand[M].keypoints[H][U0]||1)+(X||0))/r)):[],K={};if(Object.keys(z.hand[M].annotations).length!==Object.keys(e.hand[M].annotations).length)z.hand[M].annotations=e.hand[M].annotations,K=z.hand[M].annotations;else if(e.hand[M].annotations)for(let E of Object.keys(e.hand[M].annotations))K[E]=(i=(x=(c=e.hand[M])==null?void 0:c.annotations)==null?void 0:x[E])!=null&&i[0]?e.hand[M].annotations[E].map((H,X)=>H.map((U0,y0)=>((r-1)*z.hand[M].annotations[E][X][y0]+U0)/r)):null;z.hand[M]={...e.hand[M],box:T0,boxRaw:C0,keypoints:x0,annotations:K}}if(!z.face||e.face.length!==z.face.length)z.face=JSON.parse(JSON.stringify(e.face));else for(let M=0;M((r-1)*z.face[M].box[E]+K)/r),C0=e.face[M].boxRaw.map((K,E)=>((r-1)*z.face[M].boxRaw[E]+K)/r),x0=e.face[M].annotations;if(Object.keys(z.face[M].annotations).length!==Object.keys(e.face[M].annotations).length)z.face[M].annotations=e.face[M].annotations,x0=z.face[M].annotations;else if(e.face[M].annotations)for(let K of Object.keys(e.face[M].annotations))x0[K]=(m=(d=(y=e.face[M])==null?void 0:y.annotations)==null?void 0:d[K])!=null&&m[0]?e.face[M].annotations[K].map((E,H)=>E.map((X,U0)=>((r-1)*z.face[M].annotations[K][H][U0]+X)/r)):null;if(e.face[M].rotation){let K={matrix:[0,0,0,0,0,0,0,0,0],angle:{roll:0,yaw:0,pitch:0},gaze:{bearing:0,strength:0}};K.matrix=(f=e.face[M].rotation)==null?void 0:f.matrix,K.angle={roll:((r-1)*(((g=(u=z.face[M].rotation)==null?void 0:u.angle)==null?void 0:g.roll)||0)+(((p=(T=e.face[M].rotation)==null?void 0:T.angle)==null?void 0:p.roll)||0))/r,yaw:((r-1)*(((k=(b=z.face[M].rotation)==null?void 0:b.angle)==null?void 0:k.yaw)||0)+(((I=(P=e.face[M].rotation)==null?void 0:P.angle)==null?void 0:I.yaw)||0))/r,pitch:((r-1)*(((_=(B=z.face[M].rotation)==null?void 0:B.angle)==null?void 0:_.pitch)||0)+((($=(Z=e.face[M].rotation)==null?void 0:Z.angle)==null?void 0:$.pitch)||0))/r},K.gaze={bearing:((r-1)*(((A0=z.face[M].rotation)==null?void 0:A0.gaze.bearing)||0)+(((t0=e.face[M].rotation)==null?void 0:t0.gaze.bearing)||0))/r,strength:((r-1)*(((n0=z.face[M].rotation)==null?void 0:n0.gaze.strength)||0)+(((j0=e.face[M].rotation)==null?void 0:j0.gaze.strength)||0))/r},z.face[M]={...e.face[M],rotation:K,box:T0,boxRaw:C0,annotations:x0}}else z.face[M]={...e.face[M],box:T0,boxRaw:C0,annotations:x0}}if(!z.object||e.object.length!==z.object.length)z.object=JSON.parse(JSON.stringify(e.object));else for(let M=0;M((r-1)*z.object[M].box[K]+x0)/r),C0=e.object[M].boxRaw.map((x0,K)=>((r-1)*z.object[M].boxRaw[K]+x0)/r);z.object[M]={...e.object[M],box:T0,boxRaw:C0}}if(e.persons){let M=e.persons;if(!z.persons||M.length!==z.persons.length)z.persons=JSON.parse(JSON.stringify(M));else for(let T0=0;T0((r-1)*z.persons[T0].box[x0]+C0)/r)}e.gesture&&(z.gesture=e.gesture),z.width=e.width,z.height=e.height;let s=v();return l1=R.perfadd?l1+Math.round(s-n):Math.round(s-n),e.performance&&(z.performance={...e.performance,interpolate:l1}),z}var s0=V(G());var L0;async function c1(e){return!L0||R.initial?L0=await L(e.segmentation.modelPath):e.debug&&h("cached model:",L0.modelUrl),L0}async function lo(e,t){var r;if(L0||(L0=await c1(t)),!(L0!=null&&L0.executor)||!((r=L0==null?void 0:L0.inputs)!=null&&r[0].shape))return null;let n={};n.resize=s0.image.resizeBilinear(e,[L0.inputs[0].shape?L0.inputs[0].shape[1]:0,L0.inputs[0].shape?L0.inputs[0].shape[2]:0],!1),n.norm=s0.div(n.resize,C.tf255),n.res=L0.execute(n.norm),n.squeeze=s0.squeeze(n.res,[0]),[n.bgRaw,n.fgRaw]=s0.unstack(n.squeeze,2),n.fg=s0.softmax(n.fgRaw),n.mul=s0.mul(n.fg,C.tf255),n.expand=s0.expandDims(n.mul,2),n.output=s0.image.resizeBilinear(n.expand,[e.shape[1]||0,e.shape[2]||0]);let o;switch(t.segmentation.mode||"default"){case"default":n.input=s0.squeeze(e),n.concat=s0.concat([n.input,n.output],-1),o=s0.cast(n.concat,"int32");break;case"alpha":o=s0.cast(n.output,"int32");break;default:o=s0.tensor(0)}return Object.keys(n).forEach(s=>s0.dispose(n[s])),o}var Ot={};ze(Ot,{distance:()=>d1,find:()=>UA,similarity:()=>qA});function d1(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 qA(e,t,n={order:2,multiplier:25,min:.2,max:.8}){let o=d1(e,t,n);return xo(o,n.order||2,n.min||0,n.max||1)}function UA(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;AH2,validateModel:()=>Gt});var D2=V(G());var Ue=V(G());var yo=.005,ee={keypoints:[],padding:[[0,0],[0,0],[0,0],[0,0]]};function x1(e){for(let t of A1){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 fo(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=Ue.pad(e,ee.padding),n.resize=Ue.image.resizeBilinear(n.pad,[t,t]);let o=Ue.cast(n.resize,"int32");return Object.keys(n).forEach(A=>Ue.dispose(n[A])),o}function po(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]+ee.padding[2][0]+ee.padding[2][1])/t[0]-ee.padding[2][0],o.position[1]*(t[1]+ee.padding[1][0]+ee.padding[1][1])/t[1]-ee.padding[1][0]],o.positionRaw=[o.position[0]/t[0],o.position[1]/t[1]];let n=Le(e.keypoints.map(o=>o.position),t);return e.box=n.box,e.boxRaw=n.boxRaw,e}var b0,Ct=0,y1=Number.MAX_SAFE_INTEGER,d2={boxes:[],bodies:[],last:0};async function uo(e){var t;return R.initial&&(b0=null),b0?e.debug&&h("cached model:",b0.modelUrl):(J2(["size"],e),b0=await L(e.body.modelPath)),Ct=b0!=null&&b0.executor&&((t=b0==null?void 0:b0.inputs)!=null&&t[0].shape)?b0.inputs[0].shape[2]:0,Ct<64&&(Ct=256),D2.env().flagRegistry.WEBGL_USE_SHAPES_UNIFORMS&&D2.env().set("WEBGL_USE_SHAPES_UNIFORMS",!1),b0}function KA(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:Nt[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=Le(r.map(x=>x.position),[n.shape[2],n.shape[1]]),l={};for(let[x,i]of Object.entries(Lt)){let y=[];for(let d=0;du.part===i[d]),f=r.find(u=>u.part===i[d+1]);m&&f&&m.score>(t.body.minConfidence||0)&&f.score>(t.body.minConfidence||0)&&y.push([m.position,f.position])}l[x]=y}let c={id:0,score:s,box:a.box,boxRaw:a.boxRaw,keypoints:r,annotations:l};return x1(c),A.push(c),A}function JA(e,t,n){let o=[];for(let r=0;rt.body.minConfidence){let a=[];for(let y=0;y<17;y++){let d=s[3*y+2];if(d>t.body.minConfidence){let m=[s[3*y+1],s[3*y+0]];a.push({part:Nt[y],score:Math.round(100*d)/100,positionRaw:m,position:[Math.round((n.shape[2]||0)*m[0]),Math.round((n.shape[1]||0)*m[1])]})}}let l=[s[52],s[51],s[54]-s[52],s[53]-s[51]],c=[Math.trunc(l[0]*(n.shape[2]||0)),Math.trunc(l[1]*(n.shape[1]||0)),Math.trunc(l[2]*(n.shape[2]||0)),Math.trunc(l[3]*(n.shape[1]||0))],x={};for(let[y,d]of Object.entries(Lt)){let m=[];for(let f=0;fT.part===d[f]),g=a.find(T=>T.part===d[f+1]);u&&g&&u.score>(t.body.minConfidence||0)&&g.score>(t.body.minConfidence||0)&&m.push([u.position,g.position])}x[y]=m}let i={id:r,score:A,box:c,boxRaw:l,keypoints:[...a],annotations:x};x1(i),o.push(i)}}return o.sort((r,s)=>s.score-r.score),o.length>t.body.maxDetected&&(o.length=t.body.maxDetected),o}async function f1(e,t){var r;if(!(b0!=null&&b0.executor)||!((r=b0==null?void 0:b0.inputs)!=null&&r[0].shape))return[];t.skipAllowed||(d2.boxes.length=0),y1++;let n=(t.body.skipTime||0)>v()-d2.last,o=y1<(t.body.skipFrames||0);return t.skipAllowed&&n&&o?d2.bodies:new Promise(async s=>{let A={};y1=0,A.input=mo(e,Ct),A.res=b0==null?void 0:b0.execute(A.input),d2.last=v();let a=await A.res.array();d2.bodies=A.res.shape[2]===17?KA(a,t,e):JA(a,t,e);for(let l of d2.bodies)po(l,[e.shape[2]||1,e.shape[1]||1]),fo(l.keypoints);Object.keys(A).forEach(l=>D2.dispose(A[l])),s(d2.bodies)})}var S0=V(G());var ce,Wt=[],bo=0,m1=Number.MAX_SAFE_INTEGER,Ft=0,Dt=2.5;async function go(e){if(!ce||R.initial){ce=await L(e.object.modelPath);let t=ce!=null&&ce.executor?Object.values(ce.modelSignature.inputs):void 0;Ft=Array.isArray(t)?parseInt(t[0].tensorShape.dim[2].size):416}else e.debug&&h("cached model:",ce.modelUrl);return ce}async function QA(e,t,n){var c,x;let o=0,r=[],s=Ft;for(let i of[1,2,4]){let y=i*13,d=S0.squeeze(e.find(p=>p.shape[1]===y**2&&(p.shape[2]||0)===m2.length)),m=await d.array(),f=S0.squeeze(e.find(p=>p.shape[1]===y**2&&(p.shape[2]||0)(n.object.minConfidence||0)&&b!==61){let P=(.5+Math.trunc(p%y))/y,I=(.5+Math.trunc(p/y))/y,B=T[p].map(M=>M*(y/i/s)),[_,Z]=[P-Dt/i*B[0],I-Dt/i*B[1]],[$,A0]=[P+Dt/i*B[2]-_,I+Dt/i*B[3]-Z],t0=[_,Z,$,A0];t0=t0.map(M=>Math.max(0,Math.min(M,1)));let n0=[t0[0]*t[0],t0[1]*t[1],t0[2]*t[0],t0[3]*t[1]],j0={id:o++,score:Math.round(100*k)/100,class:b+1,label:m2[b].label,box:n0.map(M=>Math.trunc(M)),boxRaw:t0};r.push(j0)}}S0.dispose([d,f,u,g])}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 S0.image.nonMaxSuppressionAsync(A,a,n.object.maxDetected||0,n.object.iouThreshold,n.object.minConfidence);l=Array.from(await i.data()),S0.dispose(i)}return r=r.filter((i,y)=>l.includes(y)).sort((i,y)=>y.score-i.score),r}async function p1(e,t){if(!(ce!=null&&ce.executor))return[];let n=(t.object.skipTime||0)>v()-bo,o=m1<(t.object.skipFrames||0);return t.skipAllowed&&n&&o&&Wt.length>0?(m1++,Wt):(m1=0,!R.kernels.includes("mod")||!R.kernels.includes("sparsetodense")?Wt:new Promise(async r=>{let s=[e.shape[2]||0,e.shape[1]||0],A=S0.image.resizeBilinear(e,[Ft,Ft],!1),a=S0.div(A,C.tf255),l=S0.transpose(a,[0,3,1,2]),c;t.object.enabled&&(c=ce.execute(l)),bo=v();let x=await QA(c,s,t);Wt=x,S0.dispose([A,a,l,...c]),r(x)}))}var V0=V(G());var B2=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],_A=B2.length,F2=B2.reduce((e,t,n)=>(e[t]=n,e),{}),$A=[["leftHip","leftShoulder"],["leftElbow","leftShoulder"],["leftElbow","leftWrist"],["leftHip","leftKnee"],["leftKnee","leftAnkle"],["rightHip","rightShoulder"],["rightElbow","rightShoulder"],["rightElbow","rightWrist"],["rightHip","rightKnee"],["rightKnee","rightAnkle"],["leftShoulder","rightShoulder"],["leftHip","rightHip"]],V7=$A.map(([e,t])=>[F2[e],F2[t]]),vo=[["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 Ro(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 Bt=class{constructor(t,n){w(this,"priorityQueue");w(this,"numberOfElements");w(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 g1(e,t){return{x:e.x+t.x,y:e.y+t.y}}var te,ta=["MobilenetV1/offset_2/BiasAdd","MobilenetV1/heatmap_2/BiasAdd","MobilenetV1/displacement_fwd_2/BiasAdd","MobilenetV1/displacement_bwd_2/BiasAdd"],Ht=1,M2=16,na=50**2;function ko(e,t,n,o,r,s,A=2){let a=g=>({y:s.get(g.y,g.x,e),x:s.get(g.y,g.x,s.shape[2]/2+e)}),l=(g,T,p)=>({y:b1(Math.round(g.y/M2),0,T-1),x:b1(Math.round(g.x/M2),0,p-1)}),[c,x]=o.shape,i=l(t.position,c,x),y=a(i),m=g1(t.position,y);for(let g=0;g[F2[y],F2[d]]),A=s.map(([,y])=>y),a=s.map(([y])=>y),l=t.shape[2],c=A.length,x=new Array(l),i=h1(e.part,M2,n);x[e.part.id]={score:e.score,part:B2[e.part.id],position:i};for(let y=c-1;y>=0;--y){let d=A[y],m=a[y];x[d]&&!x[m]&&(x[m]=ko(y,x[d],m,t,n,r))}for(let y=0;yt){a=!1;break}if(!a)break}return a}function sa(e,t){let[n,o,r]=t.shape,s=new Bt(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)<=na:!1})}function Aa(e,t){return t.reduce((o,{position:r,score:s},A)=>(wo(e,r,A)||(o+=s),o),0)/t.length}function aa(e,t,n,o,r,s){let A=[],a=sa(s,t);for(;A.lengthd.score>s);let i=Aa(A,x),y=Ro(x);i>s&&A.push({keypoints:x,box:y,score:Math.round(100*i)/100})}return A}async function T1(e,t){if(!(te!=null&&te.executor))return[];let n=V0.tidy(()=>{if(!te.inputs[0].shape)return[];let A=V0.image.resizeBilinear(e,[te.inputs[0].shape[2],te.inputs[0].shape[1]]),a=V0.sub(V0.div(V0.cast(A,"float32"),127.5),1),c=te.execute(a,ta).map(x=>V0.squeeze(x,[0]));return c[1]=V0.sigmoid(c[1]),c}),o=await Promise.all(n.map(A=>A.buffer()));for(let A of n)V0.dispose(A);let r=aa(o[0],o[1],o[2],o[3],t.body.maxDetected,t.body.minConfidence);return te.inputs[0].shape?Mo(r,[e.shape[1],e.shape[2]],[te.inputs[0].shape[2],te.inputs[0].shape[1]]):[]}async function Eo(e){return!te||R.initial?te=await L(e.body.modelPath):e.debug&&h("cached model:",te.modelUrl),te}var F=V(G());var ve,ia=["fgr","pha","r1o","r2o","r3o","r4o"],g0={},R1=0;function jo(e){F.dispose([g0.r1i,g0.r2i,g0.r3i,g0.r4i,g0.downsample_ratio]),g0.r1i=F.tensor(0),g0.r2i=F.tensor(0),g0.r3i=F.tensor(0),g0.r4i=F.tensor(0),R1=e.segmentation.ratio||.5,g0.downsample_ratio=F.tensor(R1)}async function M1(e){return!ve||R.initial?ve=await L(e.segmentation.modelPath):e.debug&&h("cached model:",ve.modelUrl),jo(e),ve}var So=e=>F.tidy(()=>{let t=F.squeeze(e,[0]),n=F.mul(t,C.tf255);return F.cast(n,"int32")});function v1(e,t){let n=e?So(e):F.fill([t.shape[1]||0,t.shape[2]||0,3],255,"int32"),o=t?So(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 la(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 Io(e,t){if(ve||(ve=await M1(t)),!(ve!=null&&ve.executor))return null;g0.src=F.div(e,255),R1!==t.segmentation.ratio&&jo(t);let[n,o,r,s,A,a]=await ve.executeAsync(g0,ia),l;switch(t.segmentation.mode||"default"){case"default":l=v1(n,o);break;case"alpha":l=v1(null,o);break;case"foreground":l=v1(n,null);break;case"state":l=la(r);break;default:l=F.tensor(0)}return F.dispose([g0.src,n,o,g0.r1i,g0.r2i,g0.r3i,g0.r4i]),[g0.r1i,g0.r2i,g0.r3i,g0.r4i]=[r,s,A,a],l}var z0=V(G());var O0;async function P1(e){return!O0||R.initial?O0=await L(e.segmentation.modelPath):e.debug&&h("cached model:",O0.modelUrl),O0}async function Lo(e,t){var r;if(O0||(O0=await P1(t)),!(O0!=null&&O0.executor)||!((r=O0==null?void 0:O0.inputs)!=null&&r[0].shape))return null;let n={};n.resize=z0.image.resizeBilinear(e,[O0.inputs[0].shape?O0.inputs[0].shape[1]:0,O0.inputs[0].shape?O0.inputs[0].shape[2]:0],!1),n.norm=z0.div(n.resize,C.tf255),n.res=O0.execute(n.norm),n.squeeze=z0.squeeze(n.res,[0]),n.alpha=z0.image.resizeBilinear(n.squeeze,[e.shape[1]||0,e.shape[2]||0]),n.mul=z0.mul(n.alpha,C.tf255);let o;switch(t.segmentation.mode||"default"){case"default":n.input=z0.squeeze(e),n.concat=z0.concat([n.input,n.mul],-1),o=z0.cast(n.concat,"int32");break;case"alpha":o=z0.cast(n.mul,"int32");break;default:o=z0.tensor(0)}return Object.keys(n).forEach(s=>z0.dispose(n[s])),o}function Gt(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&&h("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&&h("model validation failed:",n,A),A.length>0?{name:n,missing:A,ops:s,url:a}:null}var H2=class{constructor(t){w(this,"instance");w(this,"models",{});this.models={},this.instance=t}stats(){let t=0,n=0,o=0;for(let s of Object.values(I0))t+=s.sizeFromManifest,n+=s.sizeLoadedWeights,o+=s.sizeDesired;let r=o>0?n/o:0;return{numLoadedModels:Object.values(I0).length,numDefinedModels:Object.keys(this.models).length,percentageLoaded:r,totalSizeFromManifest:t,totalSizeWeights:n,totalSizeLoading:o,modelStats:Object.values(I0)}}reset(){for(let t of Object.keys(this.models))this.models[t]=null}async load(t){var o,r,s,A,a,l,c,x,i,y,d,m,f,u,g,T,p,b,k,P,I,B,_,Z,$,A0,t0;R.initial&&this.reset(),t&&(this.instance=t);let n={};n.blazeface=this.instance.config.face.enabled&&!this.models.blazeface?k3(this.instance.config):null,n.antispoof=this.instance.config.face.enabled&&((o=this.instance.config.face.antispoof)!=null&&o.enabled)&&!this.models.antispoof?Q3(this.instance.config):null,n.liveness=this.instance.config.face.enabled&&((r=this.instance.config.face.liveness)!=null&&r.enabled)&&!this.models.liveness?tn(this.instance.config):null,n.faceres=this.instance.config.face.enabled&&((s=this.instance.config.face.description)!=null&&s.enabled)&&!this.models.faceres?q3(this.instance.config):null,n.emotion=this.instance.config.face.enabled&&((A=this.instance.config.face.emotion)!=null&&A.enabled)&&!this.models.emotion?G3(this.instance.config):null,n.iris=this.instance.config.face.enabled&&((a=this.instance.config.face.iris)!=null&&a.enabled)&&!((l=this.instance.config.face.attention)!=null&&l.enabled)&&!this.models.iris?I3(this.instance.config):null,n.facemesh=this.instance.config.face.enabled&&((c=this.instance.config.face.mesh)!=null&&c.enabled)&&!this.models.facemesh?W3(this.instance.config):null,n.gear=this.instance.config.face.enabled&&((x=this.instance.config.face.gear)!=null&&x.enabled)&&!this.models.gear?sn(this.instance.config):null,n.ssrnetage=this.instance.config.face.enabled&&((i=this.instance.config.face.ssrnet)!=null&&i.enabled)&&!this.models.ssrnetage?cn(this.instance.config):null,n.ssrnetgender=this.instance.config.face.enabled&&((y=this.instance.config.face.ssrnet)!=null&&y.enabled)&&!this.models.ssrnetgender?fn(this.instance.config):null,n.mobilefacenet=this.instance.config.face.enabled&&((d=this.instance.config.face.mobilefacenet)!=null&&d.enabled)&&!this.models.mobilefacenet?bn(this.instance.config):null,n.insightface=this.instance.config.face.enabled&&((m=this.instance.config.face.insightface)!=null&&m.enabled)&&!this.models.insightface?Mn(this.instance.config):null,n.blazepose=this.instance.config.body.enabled&&!this.models.blazepose&&((f=this.instance.config.body.modelPath)!=null&&f.includes("blazepose"))?a3(this.instance.config):null,n.blazeposedetect=this.instance.config.body.enabled&&!this.models.blazeposedetect&&this.instance.config.body.detector&&this.instance.config.body.detector.modelPath?A3(this.instance.config):null,n.efficientpose=this.instance.config.body.enabled&&!this.models.efficientpose&&((u=this.instance.config.body.modelPath)!=null&&u.includes("efficientpose"))?y3(this.instance.config):null,n.movenet=this.instance.config.body.enabled&&!this.models.movenet&&((g=this.instance.config.body.modelPath)!=null&&g.includes("movenet"))?uo(this.instance.config):null,n.posenet=this.instance.config.body.enabled&&!this.models.posenet&&((T=this.instance.config.body.modelPath)!=null&&T.includes("posenet"))?Eo(this.instance.config):null,n.handtrack=this.instance.config.hand.enabled&&!this.models.handtrack&&((b=(p=this.instance.config.hand.detector)==null?void 0:p.modelPath)!=null&&b.includes("handtrack"))?so(this.instance.config):null,n.handskeleton=this.instance.config.hand.enabled&&this.instance.config.hand.landmarks&&!this.models.handskeleton&&((P=(k=this.instance.config.hand.detector)==null?void 0:k.modelPath)!=null&&P.includes("handtrack"))?Ao(this.instance.config):null,this.instance.config.hand.enabled&&!this.models.handdetect&&((B=(I=this.instance.config.hand.detector)==null?void 0:I.modelPath)!=null&&B.includes("handdetect"))&&(n.handdetect=$n(this.instance.config),n.handskeleton=eo(this.instance.config)),n.centernet=this.instance.config.object.enabled&&!this.models.centernet&&((_=this.instance.config.object.modelPath)!=null&&_.includes("centernet"))?c3(this.instance.config):null,n.nanodet=this.instance.config.object.enabled&&!this.models.nanodet&&((Z=this.instance.config.object.modelPath)!=null&&Z.includes("nanodet"))?go(this.instance.config):null,n.selfie=this.instance.config.segmentation.enabled&&!this.models.selfie&&(($=this.instance.config.segmentation.modelPath)!=null&&$.includes("selfie"))?P1(this.instance.config):null,n.meet=this.instance.config.segmentation.enabled&&!this.models.meet&&((A0=this.instance.config.segmentation.modelPath)!=null&&A0.includes("meet"))?c1(this.instance.config):null,n.rvm=this.instance.config.segmentation.enabled&&!this.models.rvm&&((t0=this.instance.config.segmentation.modelPath)!=null&&t0.includes("rvm"))?M1(this.instance.config):null;for(let[n0,j0]of Object.entries(n))j0!=null&&j0.then&&j0.then(M=>this.models[n0]=M);await Promise.all(Object.values(n))}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(I0).find(r=>r.startsWith(n.name));o&&(n.size=I0[o].sizeLoadedWeights,n.url=I0[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=Gt(this.instance,o,n);r&&t.push(r)}return t}};function Co(e,t,n,o,r){var a,l,c,x,i,y;let s=0,A=[];for(let d of e){let m={id:s++,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]m.body.box[0]&&b.box[0]+b.box[2]m.body.box[1]&&b.box[1]+b.box[3]m.body.box[0]&&b.box[1]+b.box[3]>m.body.box[1]&&b.box[1]+b.box[3]{b&&b.length===4&&(f.push(b[0],b[0]+b[2]),u.push(b[1],b[1]+b[3]))};g(m.face.box),g((x=m.body)==null?void 0:x.box),g((i=m.hands.left)==null?void 0:i.box),g((y=m.hands.right)==null?void 0:y.box);let T=Math.min(...f),p=Math.min(...u);m.box=[T,p,Math.max(...f)-T,Math.max(...u)-p],r!=null&&r[1]&&(r!=null&&r[2])&&(m.boxRaw=[m.box[0]/r[2],m.box[1]/r[1],m.box[2]/r[2],m.box[3]/r[1]]),A.push(m)}return A}var d0=V(G());var Vt=` + 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) + // gestures do not have buffering + // person(inCanvas, result.persons, localOptions); // already included above + ]); + 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", + // 0 + "leftEyeInside", + // 1 + "leftEye", + // 2 + "leftEyeOutside", + // 3 + "rightEyeInside", + // 4 + "rightEye", + // 5 + "rightEyeOutside", + // 6 + "leftEar", + // 7 + "rightEar", + // 8 + "leftMouth", + // 9 + "rightMouth", + // 10 + "leftShoulder", + // 11 + "rightShoulder", + // 12 + "leftElbow", + // 13 + "rightElbow", + // 14 + "leftWrist", + // 15 + "rightWrist", + // 16 + "leftPinky", + // 17 + "rightPinky", + // 18 + "leftIndex", + // 19 + "rightIndex", + // 20 + "leftThumb", + // 21 + "rightThumb", + // 22 + "leftHip", + // 23 + "rightHip", + // 24 + "leftKnee", + // 25 + "rightKnee", + // 26 + "leftAnkle", + // 27 + "rightAnkle", + // 28 + "leftHeel", + // 29 + "rightHeel", + // 30 + "leftFoot", + // 31 + "rightFoot", + // 32 + "bodyCenter", + // 33 + "bodyTop", + // 34 + "leftPalm", + // 35 // z-coord not ok + "leftHand", + // 36 // similar to wrist but z-coord not ok + "rightPalm", + // 37 // z-coord not ok + "rightHand" + // 38 // similar to wrist but z-coord not ok +]; +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], + // dont touch batch + height, + // height before&after + width, + // width before&after + [0, 0] + // dont touch rbg + ]; + 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], + // correct offset due to crop + kpt4.positionRaw[1] / width + cropBox[0], + // correct offset due to crop + 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 + /* 1,1 */ + ] = 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: [ + // normalized to 0..1 + // @ts-ignore model is not undefined here + x2 / model4.inputs[0].shape[2], + y2 / model4.inputs[0].shape[1] + ], + position: [ + // normalized to input image size + // @ts-ignore model is not undefined here + 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, anchor) => { + 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 landmarks = box.landmarks.map((pt) => [(pt[0] + anchor[0]) * factor[0], (pt[1] + anchor[1]) * factor[1]]); + return { startPoint, endPoint, 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, + size: size2 + }; +}; +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, + size: [Math.round(size2[0]), Math.round(size2[1])] + }; +}; +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) => [ + // scaled around zero-point + 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 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, _e, _f, _g; + 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.tf1); + 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 + }; + b.anchor = tf13.slice(anchors, [nms[i], 0], [1, 2]); + const anchor = await b.anchor.data(); + const scaledBox = scaleBoxCoordinates(rawBox, [(inputImage.shape[2] || 0) / inputSize4, (inputImage.shape[1] || 0) / inputSize4], anchor); + const enlargedBox = enlargeBox(scaledBox, ((_e = config3.face.detector) == null ? void 0 : _e.scale) || 1.4); + const squaredBox = squarifyBox(enlargedBox); + if (squaredBox.size[0] > (((_f = config3.face.detector) == null ? void 0 : _f["minSize"]) || 0) && squaredBox.size[1] > (((_g = config3.face.detector) == null ? void 0 : _g["minSize"]) || 0)) 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 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, scale2 = 2.3) => { + const box = squarifyBox(enlargeBox(calculateLandmarksBoundingBox([rawCoords[eyeInnerCornerIndex], rawCoords[eyeOuterCornerIndex]]), scale2)); + 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, config3) { + var _a, _b; + 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, ((_a = config3.face.iris) == null ? void 0 : _a.scale) || 2.3); + const { box: rightEyeBox, boxSize: rightEyeBoxSize, crop: rightEyeCrop } = getEyeBox(rawCoords, face4, eyeLandmarks.rightBounds[0], eyeLandmarks.rightBounds[1], meshSize, true, ((_b = config3.face.iris) == null ? void 0 : _b.scale) || 2.3); + 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 = { + // all attention models produce 2d results so it needs to be later augmented with correct z-coords + // mesh: results[0], // already have it in rawCoords // output_mesh_identity + // flag: results[1], // already processed in parent // conv_faceflag + lips: await ((_b = (_a = results.filter((r) => r.size === 160)) == null ? void 0 : _a[0]) == null ? void 0 : _b.data()), + // 80 x 2d = 160 // output_lips + irisL: await ((_d = (_c = results.filter((r) => r.size === 10)) == null ? void 0 : _c[0]) == null ? void 0 : _d.data()), + // 5 x 2d = 10 // output_right_iris + eyeL: await ((_f = (_e = results.filter((r) => r.size === 142)) == null ? void 0 : _e[0]) == null ? void 0 : _f.data()), + // 71 x 2d = 142 // output_right_eye + irisR: await ((_h = (_g = results.filter((r) => r.size === 10)) == null ? void 0 : _g[1]) == null ? void 0 : _h.data()), + // 5 x 2d = 10 // output_left_iris + eyeR: await ((_j = (_i = results.filter((r) => r.size === 142)) == null ? void 0 : _i[1]) == null ? void 0 : _j.data()) + // 71 x 2d = 142// output_left_eye + }; + 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; + 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 = { + // init face result + id: id++, + mesh: [], + meshRaw: [], + box: [0, 0, 0, 0], + boxRaw: [0, 0, 0, 0], + score: 0, + boxScore: 0, + faceScore: 0, + size: [0, 0], + // contoursRaw: [], + // contours: [], + 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) || !(model7 == null ? void 0 : model7["executor"])) { + face4.box = clampBox(box, input); + face4.boxRaw = getRawBox(box, input); + face4.score = face4.boxScore; + face4.size = box.size; + face4.mesh = box.landmarks; + 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.size = box.size; + face4.score = face4.boxScore; + face4.mesh = box.landmarks; + 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, config3); + } + 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, + size: box.size + }; + face4.box = clampBox(calculatedBox, input); + face4.boxRaw = getRawBox(calculatedBox, input); + face4.size = calculatedBox.size; + 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 = []; +var model8; +var last3 = []; +var lastCount = 0; +var lastTime4 = 0; +var skipped4 = Number.MAX_SAFE_INTEGER; +var rgb = false; +async function load6(config3) { + var _a, _b, _c; + if (env.initial) model8 = null; + if (!model8) { + model8 = await loadModel((_a = config3.face.emotion) == null ? void 0 : _a.modelPath); + rgb = ((_c = (_b = model8 == null ? void 0 : model8.inputs) == null ? void 0 : _b[0].shape) == null ? void 0 : _c[3]) === 3; + if (!rgb) annotations = ["angry", "disgust", "fear", "happy", "sad", "surprise", "neutral"]; + else annotations = ["angry", "disgust", "fear", "happy", "neutral", "sad", "surprise"]; + } 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, _b2, _c; + 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; + if (((_b2 = config3.face.emotion) == null ? void 0 : _b2["crop"]) > 0) { + const crop = (_c = config3.face.emotion) == null ? void 0 : _c["crop"]; + const box = [[crop, crop, 1 - crop, 1 - crop]]; + t2.resize = tf16.image.cropAndResize(image28, box, [0], [inputSize10, inputSize10]); + } else { + t2.resize = tf16.image.resizeBilinear(image28, [inputSize10, inputSize10], false); + } + if (rgb) { + t2.mul = tf16.mul(t2.resize, 255); + t2.normalize = tf16.sub(t2.mul, [103.939, 116.779, 123.68]); + t2.emotion = model8 == null ? void 0 : model8.execute(t2.normalize); + } else { + 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, config3) { + var _a, _b; + const tensor6 = input.image || input.tensor || input; + if (!(model9 == null ? void 0 : model9.inputs[0].shape)) return tensor6; + let crop; + if (((_a = config3.face.description) == null ? void 0 : _a["crop"]) > 0) { + const cropval = (_b = config3.face.description) == null ? void 0 : _b["crop"]; + const box = [[cropval, cropval, 1 - cropval, 1 - cropval]]; + crop = tf17.image.cropAndResize(tensor6, box, [0], [model9.inputs[0].shape[2], model9.inputs[0].shape[1]]); + } else { + 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, config3); + 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, _c, _d; + if (!(model12 == null ? void 0 : model12.inputs[0].shape)) return; + const t2 = {}; + let box = [[0, 0.1, 0.9, 0.9]]; + if (((_a2 = config3.face.gear) == null ? void 0 : _a2["crop"]) > 0) { + const crop = (_b2 = config3.face.gear) == null ? void 0 : _b2["crop"]; + box = [[crop, crop, 1 - crop, 1 - crop]]; + } + 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 ((_c = config3.face.gear) == null ? void 0 : _c.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] > (((_d = config3.face.gear) == null ? void 0 : _d.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, _b2, _c2; + if (!(model13 == null ? void 0 : model13.inputs) || !model13.inputs[0] || !model13.inputs[0].shape) return; + const t2 = {}; + if (((_a2 = config3.face["ssrnet"]) == null ? void 0 : _a2["crop"]) > 0) { + const crop = (_b2 = config3.face["ssrnet"]) == null ? void 0 : _b2["crop"]; + const box = [[crop, crop, 1 - crop, 1 - crop]]; + t2.resize = tf21.image.cropAndResize(image28, box, [0], [model13.inputs[0].shape[2], model13.inputs[0].shape[1]]); + } else { + 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 ((_c2 = config3.face["ssrnet"]) == null ? void 0 : _c2.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 rgb2 = [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, _b2, _c2; + if (!(model14 == null ? void 0 : model14.inputs[0].shape)) return; + const t2 = {}; + if (((_a2 = config3.face["ssrnet"]) == null ? void 0 : _a2["crop"]) > 0) { + const crop = (_b2 = config3.face["ssrnet"]) == null ? void 0 : _b2["crop"]; + const box = [[crop, crop, 1 - crop, 1 - crop]]; + t2.resize = tf22.image.cropAndResize(image28, box, [0], [model14.inputs[0].shape[2], model14.inputs[0].shape[1]]); + } else { + t2.resize = tf22.image.resizeBilinear(image28, [model14.inputs[0].shape[2], model14.inputs[0].shape[1]], false); + } + t2.enhance = tf22.tidy(() => { + var _a3, _b3; + let normalize2; + if (((_b3 = (_a3 = model14 == null ? void 0 : model14.inputs) == null ? void 0 : _a3[0].shape) == null ? void 0 : _b3[3]) === 1) { + const [red, green, blue] = tf22.split(t2.resize, 3, 3); + const redNorm = tf22.mul(red, rgb2[0]); + const greenNorm = tf22.mul(green, rgb2[1]); + const blueNorm = tf22.mul(blue, rgb2[2]); + const grayscale = tf22.addN([redNorm, greenNorm, blueNorm]); + normalize2 = tf22.mul(tf22.sub(grayscale, constants.tf05), 2); + } else { + normalize2 = tf22.mul(tf22.sub(t2.resize, constants.tf05), 2); + } + return normalize2; + }); + const obj = { gender: "unknown", genderScore: 0 }; + if ((_c2 = config3.face["ssrnet"]) == null ? void 0 : _c2.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 = [ + // x distance between extreme point and center point normalized with eye size + (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 == null ? void 0 : f.leftEyeIris) || !(f == null ? void 0 : f.rightEyeIris)) 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], + // just for convenience + nameMapping: { 0: "thumb", 1: "index", 2: "middle", 3: "ring", 4: "pinky" }, + // Describes mapping of joints based on the 21 points returned by handpose. + // [0] Palm + // [1-4] Thumb + // [5-8] Index + // [9-12] Middle + // [13-16] Ring + // [17-20] 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 = { + // curl estimation + HALF_CURL_START_LIMIT: 60, + NO_CURL_START_LIMIT: 130, + // direction estimation + 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 (rightIrisCenterX > 0.04) gestures.push({ iris: i, gesture: "looking right" }); + } else { + if (leftIrisCenterX > 0.04) 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) { + this.skipped++; + } else { + boxes = await this.handDetector.predict(image28, config3); + this.skipped = 0; + } + 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; +function initPipeline() { + const handDetector = handDetectorModel ? new HandDetector(handDetectorModel) : void 0; + if (handDetector && handPoseModel) handPipeline = new HandPipeline(handDetector, handPoseModel); +} +async function predict14(input, config3) { + if (!handPipeline) initPipeline(); + 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 loadDetect2(config3) { + var _a; + if (env.initial) handDetectorModel = null; + if (!handDetectorModel) handDetectorModel = await loadModel((_a = config3.hand.detector) == null ? void 0 : _a.modelPath); + else if (config3.debug) log("cached model:", handDetectorModel["modelUrl"]); + return handDetectorModel; +} +async function loadSkeleton(config3) { + var _a; + if (env.initial) handPoseModel = null; + if (!handPoseModel) handPoseModel = await loadModel((_a = config3.hand.skeleton) == null ? void 0 : _a.modelPath); + else if (config3.debug) log("cached model:", handPoseModel["modelUrl"]); + return 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: [0, 1, 2, 3, 4], + index: [0, 5, 6, 7, 8], + middle: [0, 9, 10, 11, 12], + ring: [0, 13, 14, 15, 16], + pinky: [0, 17, 18, 19, 20], + palm: [0], + */ + 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 loadDetect3(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 loadSkeleton2(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 = { + // initial values inherited from hand detect + 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 = [ + // used to create part labels + "nose", + "leftEye", + "rightEye", + "leftEar", + "rightEar", + "leftShoulder", + "rightShoulder", + "leftElbow", + "rightElbow", + "leftWrist", + "rightWrist", + "leftHip", + "rightHip", + "leftKnee", + "rightKnee", + "leftAnkle", + "rightAnkle" +]; +var horizontal = [ + // used to fix left vs right + ["leftEye", "rightEye"], + ["leftEar", "rightEar"], + ["leftShoulder", "rightShoulder"], + ["leftElbow", "rightElbow"], + ["leftWrist", "rightWrist"], + ["leftHip", "rightHip"], + ["leftKnee", "rightKnee"], + ["leftAnkle", "rightAnkle"] +]; +var vertical = [ + // used to remove unlikely keypoint positions + ["leftKnee", "leftShoulder"], + ["rightKnee", "rightShoulder"], + ["leftAnkle", "leftKnee"], + ["rightAnkle", "rightKnee"] +]; +var relative = [ + // used to match relative body parts + [["leftHip", "rightHip"], ["leftShoulder", "rightShoulder"]], + [["leftElbow", "rightElbow"], ["leftShoulder", "rightShoulder"]] +]; +var connected3 = { + // used to create body outline in annotations + 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, _x, _y, _z; + 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); + let annotations2 = newResult.face[i].annotations; + if (Object.keys(bufferedResult.face[i].annotations).length !== Object.keys(newResult.face[i].annotations).length) { + bufferedResult.face[i].annotations = newResult.face[i].annotations; + annotations2 = bufferedResult.face[i].annotations; + } else if (newResult.face[i].annotations) { + for (const key of Object.keys(newResult.face[i].annotations)) { + annotations2[key] = ((_i = (_h = (_g = newResult.face[i]) == null ? void 0 : _g.annotations) == null ? void 0 : _h[key]) == null ? void 0 : _i[0]) ? newResult.face[i].annotations[key].map((val, j) => val.map((coord, k) => ((bufferedFactor - 1) * bufferedResult.face[i].annotations[key][j][k] + coord) / bufferedFactor)) : null; + } + } + 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 = (_j = newResult.face[i].rotation) == null ? void 0 : _j.matrix; + rotation.angle = { + roll: ((bufferedFactor - 1) * (((_l = (_k = bufferedResult.face[i].rotation) == null ? void 0 : _k.angle) == null ? void 0 : _l.roll) || 0) + (((_n = (_m = newResult.face[i].rotation) == null ? void 0 : _m.angle) == null ? void 0 : _n.roll) || 0)) / bufferedFactor, + yaw: ((bufferedFactor - 1) * (((_p = (_o = bufferedResult.face[i].rotation) == null ? void 0 : _o.angle) == null ? void 0 : _p.yaw) || 0) + (((_r = (_q = newResult.face[i].rotation) == null ? void 0 : _q.angle) == null ? void 0 : _r.yaw) || 0)) / bufferedFactor, + pitch: ((bufferedFactor - 1) * (((_t = (_s = bufferedResult.face[i].rotation) == null ? void 0 : _s.angle) == null ? void 0 : _t.pitch) || 0) + (((_v = (_u = newResult.face[i].rotation) == null ? void 0 : _u.angle) == null ? void 0 : _v.pitch) || 0)) / bufferedFactor + }; + rotation.gaze = { + // not fully correct due projection on circle, also causes wrap-around draw on jump from negative to positive + bearing: ((bufferedFactor - 1) * (((_w = bufferedResult.face[i].rotation) == null ? void 0 : _w.gaze.bearing) || 0) + (((_x = newResult.face[i].rotation) == null ? void 0 : _x.gaze.bearing) || 0)) / bufferedFactor, + strength: ((bufferedFactor - 1) * (((_y = bufferedResult.face[i].rotation) == null ? void 0 : _y.gaze.strength) || 0) + (((_z = newResult.face[i].rotation) == null ? void 0 : _z.gaze.strength) || 0)) / bufferedFactor + }; + bufferedResult.face[i] = { ...newResult.face[i], rotation, box, boxRaw, annotations: annotations2 }; + } else { + bufferedResult.face[i] = { ...newResult.face[i], box, boxRaw, annotations: annotations2 }; + } + } + } + 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 load15(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 load15(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], + // dont touch batch + [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 + [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 + [0, 0] + // dont touch rbg + ]; + 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 load16(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; + if (tf32.env().flagRegistry.WEBGL_USE_SHAPES_UNIFORMS) tf32.env().set("WEBGL_USE_SHAPES_UNIFORMS", false); + 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: [ + // normalized to input image size + 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 boxScore = Math.round(100 * kpt4[51 + 4]) / 100; + if (boxScore > 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 boxRaw = [kpt4[51 + 1], kpt4[51 + 0], kpt4[51 + 3] - kpt4[51 + 1], kpt4[51 + 2] - kpt4[51 + 0]]; + const boxNorm = [Math.trunc(boxRaw[0] * (image28.shape[2] || 0)), Math.trunc(boxRaw[1] * (image28.shape[1] || 0)), Math.trunc(boxRaw[2] * (image28.shape[2] || 0)), Math.trunc(boxRaw[3] * (image28.shape[1] || 0))]; + 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: boxScore, box: boxNorm, 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 load17(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 = [ + // results normalized to input image pixels + boxRaw[0] * outputShape[0], + boxRaw[1] * outputShape[1], + boxRaw[2] * outputShape[0], + boxRaw[3] * outputShape[1] + ]; + const result = { + id: id++, + // strideSize, + score: Math.round(100 * score) / 100, + class: j + 1, + label: labels2[j].label, + // center: [Math.trunc(outputShape[0] * cx), Math.trunc(outputShape[1] * cy)], + // centerRaw: [cx, cy], + 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 { + // function call + constructor(maxSize2, getElementValue) { + __publicField(this, "priorityQueue"); + // don't touch + __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" + /* displacementBwd */ +]; +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 load18(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 load19(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 rgb3 = 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([rgb3, a], -1); + tf35.dispose([rgb3, 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 load19(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 load20(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 load20(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")) ? load16(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")) ? load18(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")) ? loadDetect3(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")) ? loadSkeleton2(this.instance.config) : null; + if (this.instance.config.hand.enabled && !this.models.handdetect && ((_v = (_u = this.instance.config.hand.detector) == null ? void 0 : _u.modelPath) == null ? void 0 : _v.includes("handdetect"))) { + m.handdetect = loadDetect2(this.instance.config); + m.handskeleton = loadSkeleton(this.instance.config); + } + 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")) ? load17(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")) ? load20(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")) ? load15(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")) ? load19(this.instance.config) : null; + for (const [model23, promise] of Object.entries(m)) { + if (promise == null ? void 0 : promise["then"]) promise["then"]((val) => this.models[model23] = val); + } + await Promise.all(Object.values(m)); + } + 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 +14002,8 @@ PQ4GJ+ashuK0MhWaoWcA0AaOmASMK7jRNPWYBmHyiuepO2x10qfcv6vYxCzYqoGK4HVYVTJrmb5l c6oaM5TUJ8EgGsG4kLNUHT0M64OaqMMikSRsuKbnFMRLG3zVehOaGNE445NNlnVFpDMu6uie9Vo1 8z5mOAOST2pDK91cNN+5tsrH3PrW54a06KxT7fdrlh/q1Pc+tJ6IUdZGvHPLezMcnBOWbsPap5r3 ylFtbdT1xUWNWzU0/Zbwlgfmx8zGsHWtRHmMqE59aAMyNifvHPc1f0gtPdqkY5JosJHeNci2tktY -euPnNY+oXWZEVJNrZ9aun8SIq/CzodHuriIokhDIR1ronbKZr0o6o8ipoz//2Q==`,Zt=` +euPnNY+oXWZEVJNrZ9aun8SIq/CzodHuriIokhDIR1ronbKZr0o6o8ipoz//2Q==`; +var body3 = ` /9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAsICAoIBwsKCQoNDAsNERwSEQ8PESIZGhQcKSQrKigk JyctMkA3LTA9MCcnOEw5PUNFSElIKzZPVU5GVEBHSEX/2wBDAQwNDREPESESEiFFLicuRUVFRUVF RUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUX/wAARCASwBLADASIA @@ -837,4 +14571,606 @@ AAAAAAJAAAAAAAAAAAAAABAJEAAAAAAAAAAAAAAAIEoBKAAAAAAAAAAAAAAABAlAAAAAAAIAAAAA BAkBAkBAkBAlACEgMZjdjbFW8bWrEx8YWANb6Fp+bfwab+vLDKMFK9qxH5L0bAr8OPRPKz2AY7J2 SbAjYZAI2E7AIEgIEgIEgMdkSy2NgY7MdlmyNoBXsxmFuyNgVTVjNV3KjlBRNTlXTVHKCrlIqt5T lBhEMohlFerLlBjEMohMVTEARDKCITsAk2AEgAAAkAAAAAAAAAAAAAAAAAAAAAAAASAAAAAAAAD/ -2Q==`;async function xa(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(Vt);break;case"body":case"full":n=await t(Zt);break;default:n=null}if(n){let r=await createImageBitmap(n);o=await e.detect(r,e.config),r.close()}return o}async function ya(e){return new Promise(t=>{let n;switch(e.config.warmup){case"face":n="data:image/jpeg;base64,"+Vt;break;case"full":case"body":n="data:image/jpeg;base64,"+Zt;break;default:n=""}let o;if(typeof Image!="undefined")o=new Image;else if(R.Image)o=new R.Image;else{t(void 0);return}o.onload=async()=>{let r=Ae(o.naturalWidth,o.naturalHeight);if(!r)h("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 fa(e){let t=r=>Buffer.from(r,"base64"),n;e.config.warmup==="face"?n=t(Vt):n=t(Zt);let o;if("node"in d0&&d0.getBackend()==="tensorflow"){let r=d0.node.decodeJpeg(n),s=d0.expandDims(r,0);e.tf.dispose(r),o=await e.detect(s,e.config),e.tf.dispose(s)}else e.config.debug&&h("Warmup tfjs-node not loaded");return o}async function ma(e){let t;return typeof createImageBitmap=="function"?t=await xa(e):typeof Image!="undefined"||R.Canvas!==void 0?t=await ya(e):t=await fa(e),t}async function pa(e){var a,l,c,x;if(!d0.env().flagRegistry.ENGINE_COMPILE_ONLY)return;let t=d0.getBackend(),n=d0.backend();if(t!=="webgl"&&t!=="humangl"||!(n!=null&&n.checkCompileCompletion))return;d0.env().set("ENGINE_COMPILE_ONLY",!0);let o=d0.engine().state.numTensors,r=[];for(let[i,y]of Object.entries(e.models.models)){if(!y)continue;let d=y!=null&&y.modelSignature&&((l=(a=y==null?void 0:y.inputs)==null?void 0:a[0])!=null&&l.shape)?[...y.inputs[0].shape]:[1,64,64,3],m=y!=null&&y.modelSignature&&((x=(c=y==null?void 0:y.inputs)==null?void 0:c[0])!=null&&x.dtype)?y.inputs[0].dtype:"float32";for(let u=0;ud0.dispose(g)):d0.dispose(u)}catch(u){e.config.debug&&h("compile fail model:",i)}d0.dispose(f)}let s=await n.checkCompileCompletionAsync();n.getUniformLocations(),e.config.debug&&h("compile pass:",{models:r,kernels:s.length}),d0.env().set("ENGINE_COMPILE_ONLY",!1);let A=d0.engine().state.numTensors;A-o>0&&h("tensor leak:",A-o)}async function Wo(e,t){await I2(e,!1);let n=v();return e.state="warmup",t&&(e.config=a0(e.config,t)),!e.config.warmup||e.config.warmup.length===0||e.config.warmup==="none"?Te():new Promise(async o=>{await e.models.load(),await pa(e);let r=await ma(e),s=v();e.config.debug&&h("warmup",e.config.warmup,Math.round(s-n),"ms"),e.emit("warmup"),o(r)})}var P2,G2,V2,Xt,Ye,w1=class{constructor(t){w(this,"version");w(this,"config");w(this,"result");w(this,"state");w(this,"process");w(this,"tf");w(this,"env",R);w(this,"draw",nt);w(this,"match",Ot);w(this,"models");w(this,"events");w(this,"faceTriangulation");w(this,"faceUVMap");w(this,"performance");ue(this,P2,void 0);ue(this,G2,void 0);ue(this,V2,void 0);w(this,"analyze",(...t)=>{if(!Y0(this,G2))return;let n=this.tf.engine().state.numTensors,o=Y0(this,P2);Re(this,P2,n);let r=n-o;r!==0&&h(...t,r)});ue(this,Xt,t=>{if(!Y0(this,V2))return null;if(!t)return"input is not defined";if(this.env.node&&!(t instanceof de.Tensor))return"input must be a tensor";try{this.tf.getBackend()}catch(n){return"backend not loaded"}return null});w(this,"webcam",new K2);w(this,"emit",t=>{var n;(n=this.events)!=null&&n.dispatchEvent&&this.events.dispatchEvent(new Event(t))});ue(this,Ye,{});let n=(de.version.tfjs||de.version_core).replace(/-(.*)/,"");Ke.wasmPath=`https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@${n}/dist/`,Ke.modelBasePath=R.browser?"../models/":"file://models/",this.version=t5,Object.defineProperty(this,"version",{value:t5}),this.config=JSON.parse(JSON.stringify(Ke)),Object.seal(this.config),this.config.cacheModels=typeof indexedDB!="undefined",t&&(this.config=a0(this.config,t)),X1(this.config),this.tf=de,this.state="idle",Re(this,P2,0),Re(this,G2,!1),Re(this,V2,!1),this.performance={},this.events=typeof EventTarget!="undefined"?new EventTarget:void 0,this.models=new H2(this),i5(),this.result=Te(),this.process={tensor:null,canvas:null},this.faceTriangulation=D3,this.faceUVMap=F3,Gt(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(Ke)),this.config.backend=t,$t(),R.initial=!0}validate(t){let n=Jt(Ke,t||this.config);return n.length===0&&(this.config=a0(this.config,t)),n}now(){return v()}image(t,n=!1){return U2(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 U2(t,this.config);if(!o.tensor)return null;let r=null;return(s=this.config.segmentation.modelPath)!=null&&s.includes("rvm")&&(r=await Io(o.tensor,this.config)),(A=this.config.segmentation.modelPath)!=null&&A.includes("meet")&&(r=await lo(o.tensor,this.config)),(a=this.config.segmentation.modelPath)!=null&&a.includes("selfie")&&(r=await Lo(o.tensor,this.config)),de.dispose(o.tensor),r}compare(t,n){return Z1(this.config,t,n)}async init(){await I2(this,!0),await this.tf.ready(),$t()}async load(t){this.state="load";let n=v(),o=Object.values(this.models.models).filter(A=>A).length;t&&(this.config=a0(this.config,t)),this.env.initial&&(await I2(this,!1)||h("error: backend check failed"),await de.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),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.models).filter(A=>A).length!==o&&(this.models.validate(),this.emit("load"));let s=Math.trunc(v()-n);s>(this.performance.loadModels||0)&&(this.performance.loadModels=this.env.perfadd?(this.performance.loadModels||0)+s:s)}next(t=this.result){return io(t,this.config)}async warmup(t){let n=v(),o=await Wo(this,t),r=v();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 u,g,T,p,b,k,P,I,B,_,Z,$,A0,t0,n0,j0,M,T0,C0,x0,K;this.state="config";let r;this.config=a0(this.config,n),this.state="check";let s=Y0(this,Xt).call(this,t);s&&(h(s,t),this.emit("error"),o(Te(s)));let A=v();await this.load(),r=v(),this.state="image";let a=await U2(t,this.config);if(this.process=a,this.performance.inputProcess=this.env.perfadd?(this.performance.inputProcess||0)+Math.trunc(v()-r):Math.trunc(v()-r),this.analyze("Get Image:"),!a.tensor){this.config.debug&&h("could not convert input to tensor"),this.emit("error"),o(Te("could not convert input to tensor"));return}this.emit("image"),r=v(),this.config.skipAllowed=await V1(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(v()-r):Math.trunc(v()-r),this.analyze("Check Changed:");let l=[],c=[],x=[],i=[];this.state="detect:face",this.config.async?(l=this.config.face.enabled?J5(this,a.tensor):[],this.performance.face&&delete this.performance.face):(r=v(),l=this.config.face.enabled?await J5(this,a.tensor):[],this.performance.face=this.env.perfadd?(this.performance.face||0)+Math.trunc(v()-r):Math.trunc(v()-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?((u=this.config.body.modelPath)!=null&&u.includes("posenet")?c=this.config.body.enabled?T1(a.tensor,y):[]:(g=this.config.body.modelPath)!=null&&g.includes("blazepose")?c=this.config.body.enabled?y5(a.tensor,y):[]:(T=this.config.body.modelPath)!=null&&T.includes("efficientpose")?c=this.config.body.enabled?g5(a.tensor,y):[]:(p=this.config.body.modelPath)!=null&&p.includes("movenet")&&(c=this.config.body.enabled?f1(a.tensor,y):[]),this.performance.body&&delete this.performance.body):(r=v(),(b=this.config.body.modelPath)!=null&&b.includes("posenet")?c=this.config.body.enabled?await T1(a.tensor,y):[]:(k=this.config.body.modelPath)!=null&&k.includes("blazepose")?c=this.config.body.enabled?await y5(a.tensor,y):[]:(P=this.config.body.modelPath)!=null&&P.includes("efficientpose")?c=this.config.body.enabled?await g5(a.tensor,y):[]:(I=this.config.body.modelPath)!=null&&I.includes("movenet")&&(c=this.config.body.enabled?await f1(a.tensor,y):[]),this.performance.body=this.env.perfadd?(this.performance.body||0)+Math.trunc(v()-r):Math.trunc(v()-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?((_=(B=this.config.hand.detector)==null?void 0:B.modelPath)!=null&&_.includes("handdetect")?x=this.config.hand.enabled?n1(a.tensor,d):[]:($=(Z=this.config.hand.detector)==null?void 0:Z.modelPath)!=null&&$.includes("handtrack")&&(x=this.config.hand.enabled?s1(a.tensor,d):[]),this.performance.hand&&delete this.performance.hand):(r=v(),(t0=(A0=this.config.hand.detector)==null?void 0:A0.modelPath)!=null&&t0.includes("handdetect")?x=this.config.hand.enabled?await n1(a.tensor,d):[]:(j0=(n0=this.config.hand.detector)==null?void 0:n0.modelPath)!=null&&j0.includes("handtrack")&&(x=this.config.hand.enabled?await s1(a.tensor,d):[]),this.performance.hand=this.env.perfadd?(this.performance.hand||0)+Math.trunc(v()-r):Math.trunc(v()-r)),this.analyze("End Hand:"),this.analyze("Start Object:"),this.state="detect:object",this.config.async?((M=this.config.object.modelPath)!=null&&M.includes("nanodet")?i=this.config.object.enabled?p1(a.tensor,this.config):[]:(T0=this.config.object.modelPath)!=null&&T0.includes("centernet")&&(i=this.config.object.enabled?p5(a.tensor,this.config):[]),this.performance.object&&delete this.performance.object):(r=v(),(C0=this.config.object.modelPath)!=null&&C0.includes("nanodet")?i=this.config.object.enabled?await p1(a.tensor,this.config):[]:(x0=this.config.object.modelPath)!=null&&x0.includes("centernet")&&(i=this.config.object.enabled?await p5(a.tensor,this.config):[]),this.performance.object=this.env.perfadd?(this.performance.object||0)+Math.trunc(v()-r):Math.trunc(v()-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 m=[];this.config.gesture.enabled&&(r=v(),m=[...Wn(l),...Cn(c),...Fn(x),...Dn(l)],this.config.async?this.performance.gesture&&delete this.performance.gesture:this.performance.gesture=this.env.perfadd?(this.performance.gesture||0)+Math.trunc(v()-r):Math.trunc(v()-r)),this.performance.total=this.env.perfadd?(this.performance.total||0)+Math.trunc(v()-A):Math.trunc(v()-A);let f=((K=this.process.tensor)==null?void 0:K.shape)||[0,0,0,0];this.result={face:l,body:c,hand:x,gesture:m,object:i,performance:this.performance,canvas:this.process.canvas,timestamp:Date.now(),error:null,width:f[2],height:f[1],get persons(){return Co(l,c,x,m,f)}},de.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?(Y0(this,Ye)[t.id]||(this.config.debug&&h("video start",t.id),Y0(this,Ye)[t.id]=!0),!t.paused&&Y0(this,Ye)[t.id]&&t.readyState>=2&&await this.detect(t),o>0&&await this.sleep(o),Y0(this,Ye)[t.id]&&requestAnimationFrame(()=>this.video(t,n,o))):(this.config.debug&&h("video stop",t.id),Y0(this,Ye)[t.id]=!1)}};P2=new WeakMap,G2=new WeakMap,V2=new WeakMap,Xt=new WeakMap,Ye=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 { + resolve(void 0); + 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.models)) { + if (!model23) continue; + 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 { + // definition end + /** Constructor for **Human** library that is futher used for all operations + * @param userConfig - user configuration object {@link Config} + */ + constructor(userConfig) { + /** Current version of Human library in *semver* format */ + __publicField(this, "version"); + /** Current configuration + * - Defaults: [config](https://github.com/vladmandic/human/blob/main/src/config.ts#L262) + */ + __publicField(this, "config"); + /** Last known result of detect run + * - Can be accessed anytime after initial detection + */ + __publicField(this, "result"); + /** Current state of Human library + * - Can be polled to determine operations that are currently executed + * - Progresses through: 'config', 'check', 'backend', 'load', 'run:', 'idle' + */ + __publicField(this, "state"); + /** currenty processed image tensor and canvas */ + __publicField(this, "process"); + /** Instance of TensorFlow/JS used by Human + * - Can be embedded or externally provided + * [TFJS API](https://js.tensorflow.org/api/latest/) + */ + __publicField(this, "tf"); + /** Object containing environment information used for diagnostics */ + __publicField(this, "env", env); + /** Draw helper classes that can draw detected objects on canvas using specified draw + * - canvas: draws input to canvas + * - options: are global settings for all draw operations, can be overriden for each draw method {@link DrawOptions} + * - face, body, hand, gesture, object, person: draws detected results as overlays on canvas + */ + // 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 }; + __publicField(this, "draw", draw_exports); + /** Face Matching + * - similarity: compare two face descriptors and return similarity index + * - distance: compare two face descriptors and return raw calculated differences + * - find: compare face descriptor to array of face descriptors and return best match + */ + __publicField(this, "match", match_exports); + /** Currently loaded models + * @internal + * {@link models#Models} + */ + __publicField(this, "models"); + /** Container for events dispatched by Human + * Possible events: + * - `create`: triggered when Human object is instantiated + * - `load`: triggered when models are loaded (explicitly or on-demand) + * - `image`: triggered when input image is processed + * - `result`: triggered when detection is complete + * - `warmup`: triggered when warmup is complete + * - `error`: triggered on some errors + */ + __publicField(this, "events"); + /** Reference face triangualtion array of 468 points, used for triangle references between points */ + __publicField(this, "faceTriangulation"); + /** Refernce UV map of 468 values, used for 3D mapping of the face mesh */ + __publicField(this, "faceUVMap"); + /** Performance object that contains values for all recently performed operations */ + __publicField(this, "performance"); + // perf members are dynamically defined as needed + __privateAdd(this, _numTensors); + __privateAdd(this, _analyzeMemoryLeaks); + __privateAdd(this, _checkSanity); + /** internal function to measure tensor leaks */ + __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); + }); + /** internal function for quick sanity check on inputs @hidden */ + __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; + }); + /** WebCam helper methods + * + */ + __publicField(this, "webcam", new WebCam()); + /** emit event */ + __publicField(this, "emit", (event) => { + var _a; + if ((_a = this.events) == null ? void 0 : _a.dispatchEvent) this.events.dispatchEvent(new Event(event)); + }); + /** internal structure that keeps track of processed videos @hidden */ + __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 configuration to default values */ + reset() { + const currentBackend = this.config.backend; + this.config = JSON.parse(JSON.stringify(config)); + this.config.backend = currentBackend; + reset(); + env.initial = true; + } + /** Validate current configuration schema */ + validate(userConfig) { + const msgs = validate(config, userConfig || this.config); + if (msgs.length === 0) this.config = mergeDeep(this.config, userConfig); + return msgs; + } + /** Utility wrapper for performance.now() */ + now() { + return now(); + } + /** Process input as return canvas and tensor + * + * @param input - any input {@link Input} + * @param getTensor - should image processing also return tensor or just canvas + * Returns object with `tensor` and `canvas` + */ + image(input, getTensor = false) { + return process2(input, this.config, getTensor); + } + /** Segmentation method takes any input and returns RGBA tensor + * Note: Segmentation is not triggered as part of detect process + * + * @param input - {@link Input} + * Returns tensor which contains image data in RGBA format + */ + 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 two input tensors for pixel similarity + * - use `human.image` to process any valid input and get a tensor that can be used for compare + * - when passing manually generated tensors: + * - both input tensors must be in format [1, height, width, 3] + * - if resolution of tensors does not match, second tensor will be resized to match resolution of the first tensor + * - return value is pixel similarity score normalized by input resolution and rgb channels + */ + compare(firstImageTensor, secondImageTensor) { + return compare(this.config, firstImageTensor, secondImageTensor); + } + /** Explicit backend initialization + * - Normally done implicitly during initial load phase + * - Call to explictly register and initialize TFJS backend without any other operations + * - Use when changing backend during runtime + */ + async init() { + await check(this, true); + await this.tf.ready(); + reset(); + } + /** Load method preloads all configured models on-demand + * - Not explicitly required as any required model is load implicitly on it's first run + * + * @param userConfig - {@link Config} + */ + 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; + } + /** Runs interpolation using last known result and returns smoothened result + * Interpolation is based on time since last known result so can be called independently + * + * @param result - {@link Result} optional use specific result set to run interpolation on + * @returns result - {@link Result} + */ + next(result = this.result) { + return calc2(result, this.config); + } + /** Warmup method pre-initializes all configured models for faster inference + * - can take significant time on startup + * - only used for `webgl` and `humangl` backends + * @param userConfig - {@link Config} + * @returns result - {@link Result} + */ + async warmup(userConfig) { + const t0 = now(); + const res = await warmup(this, userConfig); + const t1 = now(); + this.performance.warmup = Math.trunc(t1 - t0); + return res; + } + /** Run detect with tensorflow profiling + * - result object will contain total exeuction time information for top-20 kernels + * - actual detection object can be accessed via `human.result` + */ + 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; + } + /** Main detection method + * - Analyze configuration: {@link Config} + * - Pre-process input: {@link Input} + * - Run inference for all configured models + * - Process and return result: {@link Result} + * + * @param input - {@link Input} + * @param userConfig - {@link Config} + * @returns result - {@link Result} + */ + 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); + }); + } + /** Helper function + * @param ms - sleep time in miliseconds + */ + async sleep(ms) { + return new Promise((resolve) => { + setTimeout(resolve, ms); + }); + } + /** Continously detect video frames + * @param element - HTMLVideoElement input + * @param run - boolean run continously or stop if already running, default true + * @param delay - number delay detection between frames for number of miliseconds, default 0 + */ + 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 43b0458d..ef5f49d2 100644 --- a/dist/tfjs.esm.js +++ b/dist/tfjs.esm.js @@ -4,10 +4,10 @@ author: ' */ -var _G=Object.create;var QC=Object.defineProperty;var EG=Object.getOwnPropertyDescriptor;var $G=Object.getOwnPropertyNames;var RG=Object.getPrototypeOf,DG=Object.prototype.hasOwnProperty;var Kt=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),qe=(r,e)=>{for(var t in e)QC(r,t,{get:e[t],enumerable:!0})},AG=(r,e,t,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of $G(e))!DG.call(r,n)&&n!==t&&QC(r,n,{get:()=>e[n],enumerable:!(o=EG(e,n))||o.enumerable});return r};var zp=(r,e,t)=>(t=r!=null?_G(RG(r)):{},AG(e||!r||!r.__esModule?QC(t,"default",{value:r,enumerable:!0}):t,r));var U0=Kt((ple,W0)=>{W0.exports=kt;var ko=null;try{ko=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 kt(r,e,t){this.low=r|0,this.high=e|0,this.unsigned=!!t}kt.prototype.__isLong__;Object.defineProperty(kt.prototype,"__isLong__",{value:!0});function Wr(r){return(r&&r.__isLong__)===!0}kt.isLong=Wr;var A0={},F0={};function Fu(r,e){var t,o,n;return e?(r>>>=0,(n=0<=r&&r<256)&&(o=F0[r],o)?o:(t=Nt(r,(r|0)<0?-1:0,!0),n&&(F0[r]=t),t)):(r|=0,(n=-128<=r&&r<128)&&(o=A0[r],o)?o:(t=Nt(r,r<0?-1:0,!1),n&&(A0[r]=t),t))}kt.fromInt=Fu;function No(r,e){if(isNaN(r))return e?Au:To;if(e){if(r<0)return Au;if(r>=L0)return V0}else{if(r<=-O0)return Vr;if(r+1>=O0)return z0}return r<0?No(-r,e).neg():Nt(r%Qp|0,r/Qp|0,e)}kt.fromNumber=No;function Nt(r,e,t){return new kt(r,e,t)}kt.fromBits=Nt;var Zm=Math.pow;function cw(r,e,t){if(r.length===0)throw Error("empty string");if(r==="NaN"||r==="Infinity"||r==="+Infinity"||r==="-Infinity")return To;if(typeof e=="number"?(t=e,e=!1):e=!!e,t=t||10,t<2||360)throw Error("interior hyphen");if(o===0)return cw(r.substring(1),e,t).neg();for(var n=No(Zm(t,8)),s=To,a=0;a>>0:this.low};de.toNumber=function(){return this.unsigned?(this.high>>>0)*Qp+(this.low>>>0):this.high*Qp+(this.low>>>0)};de.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}};de.getHighBits=function(){return this.high};de.getHighBitsUnsigned=function(){return this.high>>>0};de.getLowBits=function(){return this.low};de.getLowBitsUnsigned=function(){return this.low>>>0};de.getNumBitsAbs=function(){if(this.isNegative())return this.eq(Vr)?64:this.neg().getNumBitsAbs();for(var e=this.high!=0?this.high:this.low,t=31;t>0&&!(e&1<=0};de.isOdd=function(){return(this.low&1)===1};de.isEven=function(){return(this.low&1)===0};de.equals=function(e){return Wr(e)||(e=As(e)),this.unsigned!==e.unsigned&&this.high>>>31===1&&e.high>>>31===1?!1:this.high===e.high&&this.low===e.low};de.eq=de.equals;de.notEquals=function(e){return!this.eq(e)};de.neq=de.notEquals;de.ne=de.notEquals;de.lessThan=function(e){return this.comp(e)<0};de.lt=de.lessThan;de.lessThanOrEqual=function(e){return this.comp(e)<=0};de.lte=de.lessThanOrEqual;de.le=de.lessThanOrEqual;de.greaterThan=function(e){return this.comp(e)>0};de.gt=de.greaterThan;de.greaterThanOrEqual=function(e){return this.comp(e)>=0};de.gte=de.greaterThanOrEqual;de.ge=de.greaterThanOrEqual;de.compare=function(e){if(Wr(e)||(e=As(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};de.comp=de.compare;de.negate=function(){return!this.unsigned&&this.eq(Vr)?Vr:this.not().add(Yp)};de.neg=de.negate;de.add=function(e){Wr(e)||(e=As(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,Nt(m<<16|d,c<<16|l,this.unsigned)};de.subtract=function(e){return Wr(e)||(e=As(e)),this.add(e.neg())};de.sub=de.subtract;de.multiply=function(e){if(this.isZero())return To;if(Wr(e)||(e=As(e)),ko){var t=ko.mul(this.low,this.high,e.low,e.high);return Nt(t,ko.get_high(),this.unsigned)}if(e.isZero())return To;if(this.eq(Vr))return e.isOdd()?Vr:To;if(e.eq(Vr))return this.isOdd()?Vr:To;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(M0)&&e.lt(M0))return No(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,Nt(d<<16|f,l<<16|m,this.unsigned)};de.mul=de.multiply;de.divide=function(e){if(Wr(e)||(e=As(e)),e.isZero())throw Error("division by zero");if(ko){if(!this.unsigned&&this.high===-2147483648&&e.low===-1&&e.high===-1)return this;var t=(this.unsigned?ko.div_u:ko.div_s)(this.low,this.high,e.low,e.high);return Nt(t,ko.get_high(),this.unsigned)}if(this.isZero())return this.unsigned?Au:To;var o,n,s;if(this.unsigned){if(e.unsigned||(e=e.toUnsigned()),e.gt(this))return Au;if(e.gt(this.shru(1)))return B0;s=Au}else{if(this.eq(Vr)){if(e.eq(Yp)||e.eq(pw))return Vr;if(e.eq(Vr))return Yp;var a=this.shr(1);return o=a.div(e).shl(1),o.eq(To)?e.isNegative()?Yp:pw:(n=this.sub(e.mul(o)),s=o.add(n.div(e)),s)}else if(e.eq(Vr))return this.unsigned?Au:To;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=To}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:Zm(2,i-48),u=No(o),c=u.mul(e);c.isNegative()||c.gt(n);)o-=p,u=No(o,this.unsigned),c=u.mul(e);u.isZero()&&(u=Yp),s=s.add(u),n=n.sub(c)}return s};de.div=de.divide;de.modulo=function(e){if(Wr(e)||(e=As(e)),ko){var t=(this.unsigned?ko.rem_u:ko.rem_s)(this.low,this.high,e.low,e.high);return Nt(t,ko.get_high(),this.unsigned)}return this.sub(this.div(e).mul(e))};de.mod=de.modulo;de.rem=de.modulo;de.not=function(){return Nt(~this.low,~this.high,this.unsigned)};de.and=function(e){return Wr(e)||(e=As(e)),Nt(this.low&e.low,this.high&e.high,this.unsigned)};de.or=function(e){return Wr(e)||(e=As(e)),Nt(this.low|e.low,this.high|e.high,this.unsigned)};de.xor=function(e){return Wr(e)||(e=As(e)),Nt(this.low^e.low,this.high^e.high,this.unsigned)};de.shiftLeft=function(e){return Wr(e)&&(e=e.toInt()),(e&=63)===0?this:e<32?Nt(this.low<>>32-e,this.unsigned):Nt(0,this.low<>>e|this.high<<32-e,this.high>>e,this.unsigned):Nt(this.high>>e-32,this.high>=0?0:-1,this.unsigned)};de.shr=de.shiftRight;de.shiftRightUnsigned=function(e){if(Wr(e)&&(e=e.toInt()),e&=63,e===0)return this;var t=this.high;if(e<32){var o=this.low;return Nt(o>>>e|t<<32-e,t>>>e,this.unsigned)}else return e===32?Nt(t,0,this.unsigned):Nt(t>>>e-32,0,this.unsigned)};de.shru=de.shiftRightUnsigned;de.shr_u=de.shiftRightUnsigned;de.toSigned=function(){return this.unsigned?Nt(this.low,this.high,!1):this};de.toUnsigned=function(){return this.unsigned?this:Nt(this.low,this.high,!0)};de.toBytes=function(e){return e?this.toBytesLE():this.toBytesBE()};de.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]};de.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]};kt.fromBytes=function(e,t,o){return o?kt.fromBytesLE(e,t):kt.fromBytesBE(e,t)};kt.fromBytesLE=function(e,t){return new kt(e[0]|e[1]<<8|e[2]<<16|e[3]<<24,e[4]|e[5]<<8|e[6]<<16|e[7]<<24,t)};kt.fromBytesBE=function(e,t){return new kt(e[4]<<24|e[5]<<16|e[6]<<8|e[7],e[0]<<24|e[1]<<16|e[2]<<8|e[3],t)}});var Ek=Kt(()=>{});var $k=Kt(()=>{});var o1=Kt((r1,Ww)=>{(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})(r1,typeof Ww=="object"&&Ww,typeof define=="function"&&define)});var s1=Kt((n1,Uw)=>{(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})(n1,typeof Uw=="object"&&Uw,typeof define=="function"&&define)});var i1=Kt((a1,Gw)=>{(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})(a1,typeof Gw=="object"&&Gw,typeof define=="function"&&define)});var p1=Kt((u1,Hw)=>{(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})(u1,typeof Hw=="object"&&Hw,typeof define=="function"&&define)});var l1=Kt((c1,Kw)=>{(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})(c1,typeof Kw=="object"&&Kw,typeof define=="function"&&define)});var d1=Kt((m1,qw)=>{(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})(m1,typeof qw=="object"&&qw,typeof define=="function"&&define)});var f1=Kt(()=>{});var g1=Kt((h1,Md)=>{(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,S,k){var _=[];S=S==!0?{entropy:!0}:S||{};var $=g(h(S.entropy?[C,b(e)]:C==null?x():C,3),_),R=new d(_),D=function(){for(var P=R.g(n),O=i,M=0;P=u;)P/=2,O/=2,M>>>=1;return(P+M)/O};return D.int32=function(){return R.g(4)|0},D.quick=function(){return R.g(4)/4294967296},D.double=D,g(b(R.S),e),(S.pass||k||function(P,O,M,L){return L&&(L.S&&f(L,R),P.state=function(){return f(R,{})}),M?(t[a]=P,O):P})(D,$,"global"in S?S.global:this==t,S.state)}function d(C){var S,k=C.length,_=this,$=0,R=_.i=_.j=0,D=_.S=[];for(k||(C=[k++]);${var Dq=o1(),Aq=s1(),Fq=i1(),Pq=p1(),Oq=l1(),Mq=d1(),Ku=g1();Ku.alea=Dq;Ku.xor128=Aq;Ku.xorwow=Fq;Ku.xorshift7=Pq;Ku.xor4096=Oq;Ku.tychei=Mq;x1.exports=Ku});var Vv=Kt(()=>{});var Wv=Kt(()=>{});var LB=Kt(()=>{});var BB=Kt(()=>{});var zB=Kt(()=>{});var VB=Kt((Wg,Gv)=>{var Uv=(()=>{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 oe.buffer!=He&&Tt(oe.buffer),lt}function o(){return oe.buffer!=He&&Tt(oe.buffer),it}function n(){return oe.buffer!=He&&Tt(oe.buffer),ht}function s(){return oe.buffer!=He&&Tt(oe.buffer),Lr}function a(){return oe.buffer!=He&&Tt(oe.buffer),Mt}function i(){return oe.buffer!=He&&Tt(oe.buffer),to}function p(){return oe.buffer!=He&&Tt(oe.buffer),rr}var u=typeof e!="undefined"?e:{},c,l;u.ready=new Promise(function(F,V){c=F,l=V});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,V)=>{throw V},x=typeof window=="object",b=typeof importScripts=="function",C=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string",S=u.ENVIRONMENT_IS_PTHREAD||!1,k="";function _(F){return u.locateFile?u.locateFile(F,k):k+F}var $,R,D,P;function O(F){if(F instanceof ku)return;j("exiting due to exception: "+F)}if(C){var M=Vv(),L=Wv();b?k=L.dirname(k)+"/":k=__dirname+"/",$=(V,ue)=>(V=Fp(V)?new URL(V):L.normalize(V),M.readFileSync(V,ue?void 0:"utf8")),D=V=>{var ue=$(V,!0);return ue.buffer||(ue=new Uint8Array(ue)),ue},R=(V,ue,$e)=>{V=Fp(V)?new URL(V):L.normalize(V),M.readFile(V,function(Be,Le){Be?$e(Be):ue(Le.buffer)})},process.argv.length>1&&(h=process.argv[1].replace(/\\/g,"/")),f=process.argv.slice(2),process.on("uncaughtException",function(V){if(!(V instanceof ku))throw V}),process.on("unhandledRejection",function(V){throw V}),g=(V,ue)=>{if(Lo())throw process.exitCode=V,ue;O(ue),process.exit(V)},u.inspect=function(){return"[Emscripten Module object]"};let F;try{F=LB()}catch(V){throw console.error('The "worker_threads" module is not supported in this node.js build - perhaps a newer version is needed?'),V}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 V=new XMLHttpRequest;return V.open("GET",F,!1),V.send(null),V.responseText},b&&(D=F=>{var V=new XMLHttpRequest;return V.open("GET",F,!1),V.responseType="arraybuffer",V.send(null),new Uint8Array(V.response)}),R=(F,V,ue)=>{var $e=new XMLHttpRequest;$e.open("GET",F,!0),$e.responseType="arraybuffer",$e.onload=()=>{if($e.status==200||$e.status==0&&$e.response){V($e.response);return}ue()},$e.onerror=ue,$e.send(null)}),P=F=>document.title=F);C&&typeof performance=="undefined"&&(global.performance=BB().performance);var B=console.log.bind(console),z=console.warn.bind(console);C&&(B=F=>M.writeSync(1,F+` +var _G=Object.create;var QC=Object.defineProperty;var EG=Object.getOwnPropertyDescriptor;var $G=Object.getOwnPropertyNames;var RG=Object.getPrototypeOf,DG=Object.prototype.hasOwnProperty;var Kt=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),qe=(r,e)=>{for(var t in e)QC(r,t,{get:e[t],enumerable:!0})},AG=(r,e,t,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of $G(e))!DG.call(r,n)&&n!==t&&QC(r,n,{get:()=>e[n],enumerable:!(o=EG(e,n))||o.enumerable});return r};var zp=(r,e,t)=>(t=r!=null?_G(RG(r)):{},AG(e||!r||!r.__esModule?QC(t,"default",{value:r,enumerable:!0}):t,r));var U0=Kt((ple,W0)=>{"use strict";W0.exports=kt;var ko=null;try{ko=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 kt(r,e,t){this.low=r|0,this.high=e|0,this.unsigned=!!t}kt.prototype.__isLong__;Object.defineProperty(kt.prototype,"__isLong__",{value:!0});function Wr(r){return(r&&r.__isLong__)===!0}kt.isLong=Wr;var A0={},F0={};function Fu(r,e){var t,o,n;return e?(r>>>=0,(n=0<=r&&r<256)&&(o=F0[r],o)?o:(t=Nt(r,(r|0)<0?-1:0,!0),n&&(F0[r]=t),t)):(r|=0,(n=-128<=r&&r<128)&&(o=A0[r],o)?o:(t=Nt(r,r<0?-1:0,!1),n&&(A0[r]=t),t))}kt.fromInt=Fu;function No(r,e){if(isNaN(r))return e?Au:To;if(e){if(r<0)return Au;if(r>=L0)return V0}else{if(r<=-O0)return Vr;if(r+1>=O0)return z0}return r<0?No(-r,e).neg():Nt(r%Qp|0,r/Qp|0,e)}kt.fromNumber=No;function Nt(r,e,t){return new kt(r,e,t)}kt.fromBits=Nt;var Zm=Math.pow;function cw(r,e,t){if(r.length===0)throw Error("empty string");if(r==="NaN"||r==="Infinity"||r==="+Infinity"||r==="-Infinity")return To;if(typeof e=="number"?(t=e,e=!1):e=!!e,t=t||10,t<2||360)throw Error("interior hyphen");if(o===0)return cw(r.substring(1),e,t).neg();for(var n=No(Zm(t,8)),s=To,a=0;a>>0:this.low};de.toNumber=function(){return this.unsigned?(this.high>>>0)*Qp+(this.low>>>0):this.high*Qp+(this.low>>>0)};de.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}};de.getHighBits=function(){return this.high};de.getHighBitsUnsigned=function(){return this.high>>>0};de.getLowBits=function(){return this.low};de.getLowBitsUnsigned=function(){return this.low>>>0};de.getNumBitsAbs=function(){if(this.isNegative())return this.eq(Vr)?64:this.neg().getNumBitsAbs();for(var e=this.high!=0?this.high:this.low,t=31;t>0&&!(e&1<=0};de.isOdd=function(){return(this.low&1)===1};de.isEven=function(){return(this.low&1)===0};de.equals=function(e){return Wr(e)||(e=As(e)),this.unsigned!==e.unsigned&&this.high>>>31===1&&e.high>>>31===1?!1:this.high===e.high&&this.low===e.low};de.eq=de.equals;de.notEquals=function(e){return!this.eq(e)};de.neq=de.notEquals;de.ne=de.notEquals;de.lessThan=function(e){return this.comp(e)<0};de.lt=de.lessThan;de.lessThanOrEqual=function(e){return this.comp(e)<=0};de.lte=de.lessThanOrEqual;de.le=de.lessThanOrEqual;de.greaterThan=function(e){return this.comp(e)>0};de.gt=de.greaterThan;de.greaterThanOrEqual=function(e){return this.comp(e)>=0};de.gte=de.greaterThanOrEqual;de.ge=de.greaterThanOrEqual;de.compare=function(e){if(Wr(e)||(e=As(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};de.comp=de.compare;de.negate=function(){return!this.unsigned&&this.eq(Vr)?Vr:this.not().add(Yp)};de.neg=de.negate;de.add=function(e){Wr(e)||(e=As(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,Nt(m<<16|d,c<<16|l,this.unsigned)};de.subtract=function(e){return Wr(e)||(e=As(e)),this.add(e.neg())};de.sub=de.subtract;de.multiply=function(e){if(this.isZero())return To;if(Wr(e)||(e=As(e)),ko){var t=ko.mul(this.low,this.high,e.low,e.high);return Nt(t,ko.get_high(),this.unsigned)}if(e.isZero())return To;if(this.eq(Vr))return e.isOdd()?Vr:To;if(e.eq(Vr))return this.isOdd()?Vr:To;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(M0)&&e.lt(M0))return No(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,Nt(d<<16|f,l<<16|m,this.unsigned)};de.mul=de.multiply;de.divide=function(e){if(Wr(e)||(e=As(e)),e.isZero())throw Error("division by zero");if(ko){if(!this.unsigned&&this.high===-2147483648&&e.low===-1&&e.high===-1)return this;var t=(this.unsigned?ko.div_u:ko.div_s)(this.low,this.high,e.low,e.high);return Nt(t,ko.get_high(),this.unsigned)}if(this.isZero())return this.unsigned?Au:To;var o,n,s;if(this.unsigned){if(e.unsigned||(e=e.toUnsigned()),e.gt(this))return Au;if(e.gt(this.shru(1)))return B0;s=Au}else{if(this.eq(Vr)){if(e.eq(Yp)||e.eq(pw))return Vr;if(e.eq(Vr))return Yp;var a=this.shr(1);return o=a.div(e).shl(1),o.eq(To)?e.isNegative()?Yp:pw:(n=this.sub(e.mul(o)),s=o.add(n.div(e)),s)}else if(e.eq(Vr))return this.unsigned?Au:To;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=To}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:Zm(2,i-48),u=No(o),c=u.mul(e);c.isNegative()||c.gt(n);)o-=p,u=No(o,this.unsigned),c=u.mul(e);u.isZero()&&(u=Yp),s=s.add(u),n=n.sub(c)}return s};de.div=de.divide;de.modulo=function(e){if(Wr(e)||(e=As(e)),ko){var t=(this.unsigned?ko.rem_u:ko.rem_s)(this.low,this.high,e.low,e.high);return Nt(t,ko.get_high(),this.unsigned)}return this.sub(this.div(e).mul(e))};de.mod=de.modulo;de.rem=de.modulo;de.not=function(){return Nt(~this.low,~this.high,this.unsigned)};de.and=function(e){return Wr(e)||(e=As(e)),Nt(this.low&e.low,this.high&e.high,this.unsigned)};de.or=function(e){return Wr(e)||(e=As(e)),Nt(this.low|e.low,this.high|e.high,this.unsigned)};de.xor=function(e){return Wr(e)||(e=As(e)),Nt(this.low^e.low,this.high^e.high,this.unsigned)};de.shiftLeft=function(e){return Wr(e)&&(e=e.toInt()),(e&=63)===0?this:e<32?Nt(this.low<>>32-e,this.unsigned):Nt(0,this.low<>>e|this.high<<32-e,this.high>>e,this.unsigned):Nt(this.high>>e-32,this.high>=0?0:-1,this.unsigned)};de.shr=de.shiftRight;de.shiftRightUnsigned=function(e){if(Wr(e)&&(e=e.toInt()),e&=63,e===0)return this;var t=this.high;if(e<32){var o=this.low;return Nt(o>>>e|t<<32-e,t>>>e,this.unsigned)}else return e===32?Nt(t,0,this.unsigned):Nt(t>>>e-32,0,this.unsigned)};de.shru=de.shiftRightUnsigned;de.shr_u=de.shiftRightUnsigned;de.toSigned=function(){return this.unsigned?Nt(this.low,this.high,!1):this};de.toUnsigned=function(){return this.unsigned?this:Nt(this.low,this.high,!0)};de.toBytes=function(e){return e?this.toBytesLE():this.toBytesBE()};de.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]};de.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]};kt.fromBytes=function(e,t,o){return o?kt.fromBytesLE(e,t):kt.fromBytesBE(e,t)};kt.fromBytesLE=function(e,t){return new kt(e[0]|e[1]<<8|e[2]<<16|e[3]<<24,e[4]|e[5]<<8|e[6]<<16|e[7]<<24,t)};kt.fromBytesBE=function(e,t){return new kt(e[4]<<24|e[5]<<16|e[6]<<8|e[7],e[0]<<24|e[1]<<16|e[2]<<8|e[3],t)}});var Ek=Kt(()=>{"use strict"});var $k=Kt(()=>{"use strict"});var o1=Kt((r1,Ww)=>{"use strict";(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})(r1,typeof Ww=="object"&&Ww,typeof define=="function"&&define)});var s1=Kt((n1,Uw)=>{"use strict";(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})(n1,typeof Uw=="object"&&Uw,typeof define=="function"&&define)});var i1=Kt((a1,Gw)=>{"use strict";(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})(a1,typeof Gw=="object"&&Gw,typeof define=="function"&&define)});var p1=Kt((u1,Hw)=>{"use strict";(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})(u1,typeof Hw=="object"&&Hw,typeof define=="function"&&define)});var l1=Kt((c1,Kw)=>{"use strict";(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})(c1,typeof Kw=="object"&&Kw,typeof define=="function"&&define)});var d1=Kt((m1,qw)=>{"use strict";(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})(m1,typeof qw=="object"&&qw,typeof define=="function"&&define)});var f1=Kt(()=>{"use strict"});var g1=Kt((h1,Md)=>{"use strict";(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,S,k){var _=[];S=S==!0?{entropy:!0}:S||{};var $=g(h(S.entropy?[C,b(e)]:C==null?x():C,3),_),R=new d(_),D=function(){for(var P=R.g(n),O=i,M=0;P=u;)P/=2,O/=2,M>>>=1;return(P+M)/O};return D.int32=function(){return R.g(4)|0},D.quick=function(){return R.g(4)/4294967296},D.double=D,g(b(R.S),e),(S.pass||k||function(P,O,M,L){return L&&(L.S&&f(L,R),P.state=function(){return f(R,{})}),M?(t[a]=P,O):P})(D,$,"global"in S?S.global:this==t,S.state)}function d(C){var S,k=C.length,_=this,$=0,R=_.i=_.j=0,D=_.S=[];for(k||(C=[k++]);${"use strict";var Dq=o1(),Aq=s1(),Fq=i1(),Pq=p1(),Oq=l1(),Mq=d1(),Ku=g1();Ku.alea=Dq;Ku.xor128=Aq;Ku.xorwow=Fq;Ku.xorshift7=Pq;Ku.xor4096=Oq;Ku.tychei=Mq;x1.exports=Ku});var Vv=Kt(()=>{"use strict"});var Wv=Kt(()=>{"use strict"});var LB=Kt(()=>{"use strict"});var BB=Kt(()=>{"use strict"});var zB=Kt(()=>{"use strict"});var VB=Kt((Wg,Gv)=>{"use strict";var Uv=(()=>{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 oe.buffer!=He&&Tt(oe.buffer),lt}function o(){return oe.buffer!=He&&Tt(oe.buffer),it}function n(){return oe.buffer!=He&&Tt(oe.buffer),ht}function s(){return oe.buffer!=He&&Tt(oe.buffer),Lr}function a(){return oe.buffer!=He&&Tt(oe.buffer),Mt}function i(){return oe.buffer!=He&&Tt(oe.buffer),to}function p(){return oe.buffer!=He&&Tt(oe.buffer),rr}var u=typeof e!="undefined"?e:{},c,l;u.ready=new Promise(function(F,V){c=F,l=V});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,V)=>{throw V},x=typeof window=="object",b=typeof importScripts=="function",C=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string",S=u.ENVIRONMENT_IS_PTHREAD||!1,k="";function _(F){return u.locateFile?u.locateFile(F,k):k+F}var $,R,D,P;function O(F){if(F instanceof ku)return;j("exiting due to exception: "+F)}if(C){var M=Vv(),L=Wv();b?k=L.dirname(k)+"/":k=__dirname+"/",$=(V,ue)=>(V=Fp(V)?new URL(V):L.normalize(V),M.readFileSync(V,ue?void 0:"utf8")),D=V=>{var ue=$(V,!0);return ue.buffer||(ue=new Uint8Array(ue)),ue},R=(V,ue,$e)=>{V=Fp(V)?new URL(V):L.normalize(V),M.readFile(V,function(Be,Le){Be?$e(Be):ue(Le.buffer)})},process.argv.length>1&&(h=process.argv[1].replace(/\\/g,"/")),f=process.argv.slice(2),process.on("uncaughtException",function(V){if(!(V instanceof ku))throw V}),process.on("unhandledRejection",function(V){throw V}),g=(V,ue)=>{if(Lo())throw process.exitCode=V,ue;O(ue),process.exit(V)},u.inspect=function(){return"[Emscripten Module object]"};let F;try{F=LB()}catch(V){throw console.error('The "worker_threads" module is not supported in this node.js build - perhaps a newer version is needed?'),V}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 V=new XMLHttpRequest;return V.open("GET",F,!1),V.send(null),V.responseText},b&&(D=F=>{var V=new XMLHttpRequest;return V.open("GET",F,!1),V.responseType="arraybuffer",V.send(null),new Uint8Array(V.response)}),R=(F,V,ue)=>{var $e=new XMLHttpRequest;$e.open("GET",F,!0),$e.responseType="arraybuffer",$e.onload=()=>{if($e.status==200||$e.status==0&&$e.response){V($e.response);return}ue()},$e.onerror=ue,$e.send(null)}),P=F=>document.title=F);C&&typeof performance=="undefined"&&(global.performance=BB().performance);var B=console.log.bind(console),z=console.warn.bind(console);C&&(B=F=>M.writeSync(1,F+` `),z=F=>M.writeSync(2,F+` -`));var U=u.print||B,j=u.printErr||z;Object.assign(u,d),d=null,u.arguments&&(f=u.arguments),u.thisProgram&&(h=u.thisProgram),u.quit&&(g=u.quit);var q=4,Y=Atomics.load,J=Atomics.store,re=Atomics.compareExchange,ne;u.wasmBinary&&(ne=u.wasmBinary);var ee=u.noExitRuntime||!0;typeof WebAssembly!="object"&&vu("no native wasm support detected");var oe,ie,le=!1,be;function _e(F,V){F||vu(V)}var ve=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):void 0;function Fe(F,V,ue){V>>>=0;for(var $e=V+ue,Be=V;F[Be]&&!(Be>=$e);)++Be;if(Be-V>16&&F.buffer&&ve)return ve.decode(F.buffer instanceof SharedArrayBuffer?F.slice(V,Be):F.subarray(V,Be));for(var Le="";V>10,56320|so&1023)}}return Le}function Pe(F,V){return F>>>=0,F?Fe(o(),F,V):""}function st(F,V,ue,$e){if(ue>>>=0,!($e>0))return 0;for(var Be=ue,Le=ue+$e-1,ge=0;ge=55296&&Ne<=57343){var Ft=F.charCodeAt(++ge);Ne=65536+((Ne&1023)<<10)|Ft&1023}if(Ne<=127){if(ue>=Le)break;V[ue++>>>0]=Ne}else if(Ne<=2047){if(ue+1>=Le)break;V[ue++>>>0]=192|Ne>>6,V[ue++>>>0]=128|Ne&63}else if(Ne<=65535){if(ue+2>=Le)break;V[ue++>>>0]=224|Ne>>12,V[ue++>>>0]=128|Ne>>6&63,V[ue++>>>0]=128|Ne&63}else{if(ue+3>=Le)break;V[ue++>>>0]=240|Ne>>18,V[ue++>>>0]=128|Ne>>12&63,V[ue++>>>0]=128|Ne>>6&63,V[ue++>>>0]=128|Ne&63}}return V[ue>>>0]=0,ue-Be}function ct(F,V,ue){return st(F,o(),V,ue)}var He,lt,it,ht,gt,Lr,Mt,to,rr;S&&(He=u.buffer);function Tt(F){He=F,u.HEAP8=lt=new Int8Array(F),u.HEAP16=ht=new Int16Array(F),u.HEAP32=Lr=new Int32Array(F),u.HEAPU8=it=new Uint8Array(F),u.HEAPU16=gt=new Uint16Array(F),u.HEAPU32=Mt=new Uint32Array(F),u.HEAPF32=to=new Float32Array(F),u.HEAPF64=rr=new Float64Array(F)}var or=u.INITIAL_MEMORY||16777216;if(S)oe=u.wasmMemory,He=u.buffer;else if(u.wasmMemory)oe=u.wasmMemory;else if(oe=new WebAssembly.Memory({initial:or/65536,maximum:65536,shared:!0}),!(oe.buffer instanceof SharedArrayBuffer))throw j("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&&j("(on node you may need: --experimental-wasm-threads --experimental-wasm-bulk-memory and/or recent version)"),Error("bad memory");oe&&(He=oe.buffer),or=He.byteLength,Tt(He);var nr,ro=[],oo=[],fr=[],Va=!1;function Lo(){return ee}function Ks(){if(u.preRun)for(typeof u.preRun=="function"&&(u.preRun=[u.preRun]);u.preRun.length;)ol(u.preRun.shift());al(ro)}function Xt(){Va=!0,!S&&al(oo)}function Wa(){if(!S){if(u.postRun)for(typeof u.postRun=="function"&&(u.postRun=[u.postRun]);u.postRun.length;)d0(u.postRun.shift());al(fr)}}function ol(F){ro.unshift(F)}function nl(F){oo.unshift(F)}function d0(F){fr.unshift(F)}var ki=0,Ap=null,Ua=null;function Cy(F){ki++,u.monitorRunDependencies&&u.monitorRunDependencies(ki)}function wm(F){if(ki--,u.monitorRunDependencies&&u.monitorRunDependencies(ki),ki==0&&(Ap!==null&&(clearInterval(Ap),Ap=null),Ua)){var V=Ua;Ua=null,V()}}function vu(F){u.onAbort&&u.onAbort(F),F="Aborted("+F+")",j(F),le=!0,be=1,F+=". Build with -sASSERTIONS for more info.";var V=new WebAssembly.RuntimeError(F);throw l(V),V}var wy="data:application/octet-stream;base64,";function Sm(F){return F.startsWith(wy)}function Fp(F){return F.startsWith("file://")}var hr;hr="tfjs-backend-wasm-threaded-simd.wasm",Sm(hr)||(hr=_(hr));function Im(F){try{if(F==hr&&ne)return new Uint8Array(ne);if(D)return D(F);throw"both async and sync fetching of the wasm failed"}catch(V){vu(V)}}function Sy(){if(!ne&&(x||b)){if(typeof fetch=="function"&&!Fp(hr))return fetch(hr,{credentials:"same-origin"}).then(function(F){if(!F.ok)throw"failed to load wasm binary file at '"+hr+"'";return F.arrayBuffer()}).catch(function(){return Im(hr)});if(R)return new Promise(function(F,V){R(hr,function(ue){F(new Uint8Array(ue))},V)})}return Promise.resolve().then(function(){return Im(hr)})}function Iy(){var F={env:Om,wasi_snapshot_preview1:Om};function V(ge,Ne){var Ft=ge.exports;if(u.asm=Ft,Dy(u.asm._emscripten_tls_init),nr=u.asm.__indirect_function_table,nl(u.asm.__wasm_call_ctors),ie=Ne,!S){var so=Me.unusedWorkers.length;Me.unusedWorkers.forEach(function(Ha){Me.loadWasmModuleToWorker(Ha,function(){--so||wm("wasm-instantiate")})})}}S||Cy("wasm-instantiate");function ue(ge){V(ge.instance,ge.module)}function $e(ge){return Sy().then(function(Ne){return WebAssembly.instantiate(Ne,F)}).then(function(Ne){return Ne}).then(ge,function(Ne){j("failed to asynchronously prepare wasm: "+Ne),vu(Ne)})}function Be(){return!ne&&typeof WebAssembly.instantiateStreaming=="function"&&!Sm(hr)&&!Fp(hr)&&!C&&typeof fetch=="function"?fetch(hr,{credentials:"same-origin"}).then(function(ge){var Ne=WebAssembly.instantiateStreaming(ge,F);return Ne.then(ue,function(Ft){return j("wasm streaming compile failed: "+Ft),j("falling back to ArrayBuffer instantiation"),$e(ue)})}):$e(ue)}if(u.instantiateWasm)try{var Le=u.instantiateWasm(F,V);return Le}catch(ge){j("Module.instantiateWasm callback failed with error: "+ge),l(ge)}return Be().catch(l),{}}var f0,h0,vm={};function ku(F){this.name="ExitStatus",this.message="Program terminated with exit("+F+")",this.status=F}function vy(F){var V=Me.pthreads[F];delete Me.pthreads[F],V.terminate(),jC(F),Me.runningWorkers.splice(Me.runningWorkers.indexOf(V),1),V.pthread_ptr=0}function ky(F){var V=Me.pthreads[F];V.postMessage({cmd:"cancel"})}function sl(F){var V=Me.pthreads[F];_e(V),Me.returnWorkerToPool(V)}function Ny(F){var V=Me.getNewWorker();if(!V)return 6;Me.runningWorkers.push(V),Me.pthreads[F.pthread_ptr]=V,V.pthread_ptr=F.pthread_ptr;var ue={cmd:"run",start_routine:F.startRoutine,arg:F.arg,pthread_ptr:F.pthread_ptr};return V.runPthread=()=>{C&&V.ref(),V.postMessage(ue,F.transferList),delete V.runPthread},V.loaded&&V.runPthread(),0}var km={varargs:void 0,get:function(){km.varargs+=4;var F=s()[km.varargs-4>>>2];return F},getStr:function(F){var V=Pe(F);return V}};function Nm(F){if(S)return Ni(1,1,F);be=F,Lo()||(Me.terminateAllThreads(),u.onExit&&u.onExit(F),le=!0),g(F,new ku(F))}function Ty(F,V){if(be=F,!V&&S)throw _m(F),"unwind";Nm(F)}var Tm=Ty;function _y(F){if(F instanceof ku||F=="unwind")return be;g(1,F)}var Me={unusedWorkers:[],runningWorkers:[],tlsInitFunctions:[],pthreads:{},init:function(){S?Me.initWorker():Me.initMainThread()},initMainThread:function(){for(var F=8;F--;)Me.allocateUnusedWorker()},initWorker:function(){ee=!1},setExitStatus:function(F){be=F},terminateAllThreads:function(){for(var F of Object.values(Me.pthreads))Me.returnWorkerToPool(F);for(var F of Me.unusedWorkers)F.terminate();Me.unusedWorkers=[]},returnWorkerToPool:function(F){var V=F.pthread_ptr;delete Me.pthreads[V],Me.unusedWorkers.push(F),Me.runningWorkers.splice(Me.runningWorkers.indexOf(F),1),F.pthread_ptr=0,C&&F.unref(),jC(V)},receiveObjectTransfer:function(F){},threadInitTLS:function(){Me.tlsInitFunctions.forEach(F=>F())},loadWasmModuleToWorker:function(F,V){F.onmessage=Le=>{var ge=Le.data,Ne=ge.cmd;if(F.pthread_ptr&&(Me.currentProxiedOperationCallerThread=F.pthread_ptr),ge.targetThread&&ge.targetThread!=Wm()){var Ft=Me.pthreads[ge.targetThread];Ft?Ft.postMessage(ge,ge.transferList):j('Internal error! Worker sent a message "'+Ne+'" to target pthread '+ge.targetThread+", but that thread no longer exists!"),Me.currentProxiedOperationCallerThread=void 0;return}Ne==="processProxyingQueue"?il(ge.queue):Ne==="spawnThread"?Ny(ge):Ne==="cleanupThread"?sl(ge.thread):Ne==="killThread"?vy(ge.thread):Ne==="cancelThread"?ky(ge.thread):Ne==="loaded"?(F.loaded=!0,C&&F.unref(),V&&V(F),F.runPthread&&F.runPthread()):Ne==="print"?U("Thread "+ge.threadId+": "+ge.text):Ne==="printErr"?j("Thread "+ge.threadId+": "+ge.text):Ne==="alert"?alert("Thread "+ge.threadId+": "+ge.text):ge.target==="setimmediate"?F.postMessage(ge):Ne==="callHandler"?u[ge.handler](...ge.args):Ne&&j("worker sent an unknown command "+Ne),Me.currentProxiedOperationCallerThread=void 0},F.onerror=Le=>{var ge="worker sent an error!";throw j(ge+" "+Le.filename+":"+Le.lineno+": "+Le.message),Le},C&&(F.on("message",function(Le){F.onmessage({data:Le})}),F.on("error",function(Le){F.onerror(Le)}),F.on("detachedExit",function(){}));var ue=[],$e=["onExit","onAbort","print","printErr"];for(var Be of $e)u.hasOwnProperty(Be)&&ue.push(Be);F.postMessage({cmd:"load",handlers:ue,urlOrBlob:u.mainScriptUrlOrBlob||r,wasmMemory:oe,wasmModule:ie})},allocateUnusedWorker:function(){var F,V=_("tfjs-backend-wasm-threaded-simd.worker.js");F=new Worker(V),Me.unusedWorkers.push(F)},getNewWorker:function(){return Me.unusedWorkers.length==0&&(Me.allocateUnusedWorker(),Me.loadWasmModuleToWorker(Me.unusedWorkers[0])),Me.unusedWorkers.pop()}};u.PThread=Me;function al(F){for(;F.length>0;)F.shift()(u)}function Ey(){var F=Wm(),V=s()[F+52>>>2],ue=s()[F+56>>>2],$e=V-ue;w0(V,$e),Um(V)}u.establishStackSpace=Ey;function _m(F){if(S)return Ni(2,0,F);try{Tm(F)}catch(V){_y(V)}}var Pp=[];function $y(F){var V=Pp[F];return V||(F>=Pp.length&&(Pp.length=F+1),Pp[F]=V=nr.get(F)),V}function Ry(F,V){var ue=$y(F)(V);Lo()?Me.setExitStatus(ue):C0(ue)}u.invokeEntryPoint=Ry;function Dy(F){Me.tlsInitFunctions.push(F)}function Ay(F){x0(F,!b,1,!x),Me.threadInitTLS()}function Fy(F){S?postMessage({cmd:"cleanupThread",thread:F}):sl(F)}function Em(F,V,ue,$e){return S?Ni(3,1,F,V,ue,$e):$m(F,V,ue,$e)}function $m(F,V,ue,$e){if(typeof SharedArrayBuffer=="undefined")return j("Current environment does not support SharedArrayBuffer, pthreads are not available!"),6;var Be=[],Le=0;if(S&&(Be.length===0||Le))return Em(F,V,ue,$e);if(Le)return Le;var ge={startRoutine:ue,pthread_ptr:F,arg:$e,transferList:Be};return S?(ge.cmd="spawnThread",postMessage(ge,Be),0):Ny(ge)}function Py(){return 65536}var Oy=!0;function My(){return Oy}function il(F){Atomics.store(s(),F>>2,1),Wm()&&b0(F),Atomics.compareExchange(s(),F>>2,1,0)}u.executeNotifiedProxyingQueue=il;function Ly(F,V,ue,$e){if(F==V)setTimeout(()=>il($e));else if(S)postMessage({targetThread:F,cmd:"processProxyingQueue",queue:$e});else{var Be=Me.pthreads[F];if(!Be)return;Be.postMessage({cmd:"processProxyingQueue",queue:$e})}return 1}function By(F,V,ue){return-1}function zy(){vu("")}function Nu(F){Nu.shown||(Nu.shown={}),Nu.shown[F]||(Nu.shown[F]=1,C&&(F="warning: "+F),j(F))}function Vy(){C||b||Nu("Blocking on the main thread is very dangerous, see https://emscripten.org/docs/porting/pthreads.html#blocking-on-the-main-browser-thread")}function Wy(){return Date.now()}function Rm(){return 4294901760}function Uy(){return Rm()}var ul;C?ul=()=>{var F=process.hrtime();return F[0]*1e3+F[1]/1e6}:ul=()=>performance.timeOrigin+performance.now();function Gy(F,V,ue){o().copyWithin(F>>>0,V>>>0,V+ue>>>0)}function Hy(){return C?zB().cpus().length:navigator.hardwareConcurrency}function Ky(F){var V=XC(),ue=F();return Um(V),ue}function Ni(F,V){var ue=arguments.length-2,$e=arguments;return Ky(()=>{for(var Be=ue,Le=Gm(Be*8),ge=Le>>3,Ne=0;Ne>>0]=Ft}return y0(F,Be,Le,V)})}var pl=[];function qy(F,V,ue){pl.length=V;for(var $e=ue>>3,Be=0;Be>>0];var Le=F<0,ge=Le?vm[-F-1]:rb[F];return ge.apply(null,pl)}function jy(F){try{return oe.grow(F-He.byteLength+65535>>>16),Tt(oe.buffer),1}catch(V){}}function Xy(F){var V=o().length;if(F=F>>>0,F<=V)return!1;var ue=Rm();if(F>ue)return!1;let $e=(Ft,so)=>Ft+(so-Ft%so)%so;for(var Be=1;Be<=4;Be*=2){var Le=V*(1+.2/Be);Le=Math.min(Le,F+100663296);var ge=Math.min(ue,$e(Math.max(F,Le),65536)),Ne=jy(ge);if(Ne)return!0}return!1}function Yy(){throw"unwind"}function Dm(F){return S?Ni(4,1,F):52}function Am(F,V,ue,$e,Be){return S?Ni(5,1,F,V,ue,$e,Be):70}var Qy=[null,[],[]];function Zy(F,V){var ue=Qy[F];V===0||V===10?((F===1?U:j)(Fe(ue,0)),ue.length=0):ue.push(V)}function Fm(F,V,ue,$e){if(S)return Ni(6,1,F,V,ue,$e);for(var Be=0,Le=0;Le>>2],Ne=a()[V+4>>>2];V+=8;for(var Ft=0;Ft>>0]);Be+=Ne}return a()[$e>>>2]=Be,0}function Pm(F){var V=u["_"+F];return V}function Jy(F,V){t().set(F,V>>>0)}function eb(F,V,ue,$e,Be){var Le={string:Br=>{var Bp=0;if(Br!=null&&Br!==0){var v0=(Br.length<<2)+1;Bp=Gm(v0),ct(Br,Bp,v0)}return Bp},array:Br=>{var Bp=Gm(Br.length);return Jy(Br,Bp),Bp}};function ge(Br){return V==="string"?Pe(Br):V==="boolean"?!!Br:Br}var Ne=Pm(F),Ft=[],so=0;if($e)for(var Ha=0;Ha<$e.length;Ha++){var I0=Le[ue[Ha]];I0?(so===0&&(so=XC()),Ft[Ha]=I0($e[Ha])):Ft[Ha]=$e[Ha]}var YC=Ne.apply(null,Ft);function TG(Br){return so!==0&&Um(so),ge(Br)}return YC=TG(YC),YC}function tb(F,V,ue,$e){ue=ue||[];var Be=ue.every(ge=>ge==="number"||ge==="boolean"),Le=V!=="string";return Le&&Be&&!$e?Pm(F):function(){return eb(F,V,ue,arguments,$e)}}Me.init();var rb=[null,Nm,_m,Em,Dm,Am,Fm],Om={__emscripten_init_main_thread_js:Ay,__emscripten_thread_cleanup:Fy,__pthread_create_js:$m,_emscripten_default_pthread_stack_size:Py,_emscripten_get_now_is_monotonic:My,_emscripten_notify_task_queue:Ly,_emscripten_set_offscreencanvas_size:By,abort:zy,emscripten_check_blocking_allowed:Vy,emscripten_date_now:Wy,emscripten_get_heap_max:Uy,emscripten_get_now:ul,emscripten_memcpy_big:Gy,emscripten_num_logical_cores:Hy,emscripten_receive_on_main_thread_js:qy,emscripten_resize_heap:Xy,emscripten_unwind_to_js_event_loop:Yy,exit:Tm,fd_close:Dm,fd_seek:Am,fd_write:Fm,memory:oe||u.wasmMemory},g0=Iy(),ob=u.___wasm_call_ctors=function(){return(ob=u.___wasm_call_ctors=u.asm.__wasm_call_ctors).apply(null,arguments)},nb=u._init=function(){return(nb=u._init=u.asm.init).apply(null,arguments)},sb=u._init_with_threads_count=function(){return(sb=u._init_with_threads_count=u.asm.init_with_threads_count).apply(null,arguments)},ab=u._get_threads_count=function(){return(ab=u._get_threads_count=u.asm.get_threads_count).apply(null,arguments)},ib=u._register_tensor=function(){return(ib=u._register_tensor=u.asm.register_tensor).apply(null,arguments)},ub=u._dispose_data=function(){return(ub=u._dispose_data=u.asm.dispose_data).apply(null,arguments)},pb=u._dispose=function(){return(pb=u._dispose=u.asm.dispose).apply(null,arguments)},cb=u._Abs=function(){return(cb=u._Abs=u.asm.Abs).apply(null,arguments)},lb=u._Acos=function(){return(lb=u._Acos=u.asm.Acos).apply(null,arguments)},mb=u._Acosh=function(){return(mb=u._Acosh=u.asm.Acosh).apply(null,arguments)},db=u._Add=function(){return(db=u._Add=u.asm.Add).apply(null,arguments)},fb=u._AddN=function(){return(fb=u._AddN=u.asm.AddN).apply(null,arguments)},hb=u._All=function(){return(hb=u._All=u.asm.All).apply(null,arguments)},gb=u._Any=function(){return(gb=u._Any=u.asm.Any).apply(null,arguments)},xb=u._ArgMax=function(){return(xb=u._ArgMax=u.asm.ArgMax).apply(null,arguments)},yb=u._ArgMin=function(){return(yb=u._ArgMin=u.asm.ArgMin).apply(null,arguments)},bb=u._Asin=function(){return(bb=u._Asin=u.asm.Asin).apply(null,arguments)},Cb=u._Asinh=function(){return(Cb=u._Asinh=u.asm.Asinh).apply(null,arguments)},wb=u._Atan=function(){return(wb=u._Atan=u.asm.Atan).apply(null,arguments)},Sb=u._Atan2=function(){return(Sb=u._Atan2=u.asm.Atan2).apply(null,arguments)},Ib=u._Atanh=function(){return(Ib=u._Atanh=u.asm.Atanh).apply(null,arguments)},vb=u._AvgPool=function(){return(vb=u._AvgPool=u.asm.AvgPool).apply(null,arguments)},kb=u._AvgPool3D=function(){return(kb=u._AvgPool3D=u.asm.AvgPool3D).apply(null,arguments)},Nb=u._AvgPool3DGrad=function(){return(Nb=u._AvgPool3DGrad=u.asm.AvgPool3DGrad).apply(null,arguments)},Tb=u._AvgPoolGrad=function(){return(Tb=u._AvgPoolGrad=u.asm.AvgPoolGrad).apply(null,arguments)},_b=u._BatchMatMul=function(){return(_b=u._BatchMatMul=u.asm.BatchMatMul).apply(null,arguments)},Eb=u._Bincount=function(){return(Eb=u._Bincount=u.asm.Bincount).apply(null,arguments)},$b=u._BitwiseAnd=function(){return($b=u._BitwiseAnd=u.asm.BitwiseAnd).apply(null,arguments)},Rb=u._Ceil=function(){return(Rb=u._Ceil=u.asm.Ceil).apply(null,arguments)},Db=u._ClipByValue=function(){return(Db=u._ClipByValue=u.asm.ClipByValue).apply(null,arguments)},Ab=u._Conv2D=function(){return(Ab=u._Conv2D=u.asm.Conv2D).apply(null,arguments)},Fb=u._Conv2DBackpropInput=function(){return(Fb=u._Conv2DBackpropInput=u.asm.Conv2DBackpropInput).apply(null,arguments)},Pb=u._Conv3D=function(){return(Pb=u._Conv3D=u.asm.Conv3D).apply(null,arguments)},Ob=u._Conv3DBackpropFilterV2=function(){return(Ob=u._Conv3DBackpropFilterV2=u.asm.Conv3DBackpropFilterV2).apply(null,arguments)},Mb=u._Conv3DBackpropInputV2=function(){return(Mb=u._Conv3DBackpropInputV2=u.asm.Conv3DBackpropInputV2).apply(null,arguments)},Lb=u._Cos=function(){return(Lb=u._Cos=u.asm.Cos).apply(null,arguments)},Bb=u._Cosh=function(){return(Bb=u._Cosh=u.asm.Cosh).apply(null,arguments)},zb=u._CropAndResize=function(){return(zb=u._CropAndResize=u.asm.CropAndResize).apply(null,arguments)},Vb=u._Cumprod=function(){return(Vb=u._Cumprod=u.asm.Cumprod).apply(null,arguments)},Wb=u._Cumsum=function(){return(Wb=u._Cumsum=u.asm.Cumsum).apply(null,arguments)},Ub=u._DenseBincount=function(){return(Ub=u._DenseBincount=u.asm.DenseBincount).apply(null,arguments)},Gb=u._DepthToSpace=function(){return(Gb=u._DepthToSpace=u.asm.DepthToSpace).apply(null,arguments)},Hb=u._DepthwiseConv2dNative=function(){return(Hb=u._DepthwiseConv2dNative=u.asm.DepthwiseConv2dNative).apply(null,arguments)},Kb=u._Diag=function(){return(Kb=u._Diag=u.asm.Diag).apply(null,arguments)},qb=u._Dilation2D=function(){return(qb=u._Dilation2D=u.asm.Dilation2D).apply(null,arguments)},jb=u._Dilation2DBackpropFilter=function(){return(jb=u._Dilation2DBackpropFilter=u.asm.Dilation2DBackpropFilter).apply(null,arguments)},Xb=u._Dilation2DBackpropInput=function(){return(Xb=u._Dilation2DBackpropInput=u.asm.Dilation2DBackpropInput).apply(null,arguments)},Yb=u._Elu=function(){return(Yb=u._Elu=u.asm.Elu).apply(null,arguments)},Qb=u._EluGrad=function(){return(Qb=u._EluGrad=u.asm.EluGrad).apply(null,arguments)},Zb=u._Equal=function(){return(Zb=u._Equal=u.asm.Equal).apply(null,arguments)},Jb=u._Erf=function(){return(Jb=u._Erf=u.asm.Erf).apply(null,arguments)},eC=u._Exp=function(){return(eC=u._Exp=u.asm.Exp).apply(null,arguments)},tC=u._Expm1=function(){return(tC=u._Expm1=u.asm.Expm1).apply(null,arguments)},rC=u._FlipLeftRight=function(){return(rC=u._FlipLeftRight=u.asm.FlipLeftRight).apply(null,arguments)},oC=u._Floor=function(){return(oC=u._Floor=u.asm.Floor).apply(null,arguments)},nC=u._FloorDiv=function(){return(nC=u._FloorDiv=u.asm.FloorDiv).apply(null,arguments)},sC=u._FusedBatchNorm=function(){return(sC=u._FusedBatchNorm=u.asm.FusedBatchNorm).apply(null,arguments)},aC=u._FusedConv2D=function(){return(aC=u._FusedConv2D=u.asm.FusedConv2D).apply(null,arguments)},iC=u._FusedDepthwiseConv2D=function(){return(iC=u._FusedDepthwiseConv2D=u.asm.FusedDepthwiseConv2D).apply(null,arguments)},uC=u._Gather=function(){return(uC=u._Gather=u.asm.Gather).apply(null,arguments)},pC=u._GatherNd=function(){return(pC=u._GatherNd=u.asm.GatherNd).apply(null,arguments)},cC=u._Greater=function(){return(cC=u._Greater=u.asm.Greater).apply(null,arguments)},lC=u._GreaterEqual=function(){return(lC=u._GreaterEqual=u.asm.GreaterEqual).apply(null,arguments)},mC=u._IsFinite=function(){return(mC=u._IsFinite=u.asm.IsFinite).apply(null,arguments)},dC=u._IsInf=function(){return(dC=u._IsInf=u.asm.IsInf).apply(null,arguments)},fC=u._IsNan=function(){return(fC=u._IsNan=u.asm.IsNan).apply(null,arguments)},hC=u._LRN=function(){return(hC=u._LRN=u.asm.LRN).apply(null,arguments)},gC=u._LRNGrad=function(){return(gC=u._LRNGrad=u.asm.LRNGrad).apply(null,arguments)},xC=u._LeakyRelu=function(){return(xC=u._LeakyRelu=u.asm.LeakyRelu).apply(null,arguments)},yC=u._Less=function(){return(yC=u._Less=u.asm.Less).apply(null,arguments)},bC=u._LessEqual=function(){return(bC=u._LessEqual=u.asm.LessEqual).apply(null,arguments)},CC=u._LinSpace=function(){return(CC=u._LinSpace=u.asm.LinSpace).apply(null,arguments)},wC=u._Log=function(){return(wC=u._Log=u.asm.Log).apply(null,arguments)},SC=u._Log1p=function(){return(SC=u._Log1p=u.asm.Log1p).apply(null,arguments)},IC=u._LogicalAnd=function(){return(IC=u._LogicalAnd=u.asm.LogicalAnd).apply(null,arguments)},vC=u._LogicalNot=function(){return(vC=u._LogicalNot=u.asm.LogicalNot).apply(null,arguments)},kC=u._LogicalOr=function(){return(kC=u._LogicalOr=u.asm.LogicalOr).apply(null,arguments)},NC=u._LogicalXor=function(){return(NC=u._LogicalXor=u.asm.LogicalXor).apply(null,arguments)},TC=u._Max=function(){return(TC=u._Max=u.asm.Max).apply(null,arguments)},_C=u._MaxPool=function(){return(_C=u._MaxPool=u.asm.MaxPool).apply(null,arguments)},EC=u._MaxPool3D=function(){return(EC=u._MaxPool3D=u.asm.MaxPool3D).apply(null,arguments)},$C=u._MaxPool3DGrad=function(){return($C=u._MaxPool3DGrad=u.asm.MaxPool3DGrad).apply(null,arguments)},RC=u._MaxPoolGrad=function(){return(RC=u._MaxPoolGrad=u.asm.MaxPoolGrad).apply(null,arguments)},DC=u._MaxPoolWithArgmax=function(){return(DC=u._MaxPoolWithArgmax=u.asm.MaxPoolWithArgmax).apply(null,arguments)},AC=u._Maximum=function(){return(AC=u._Maximum=u.asm.Maximum).apply(null,arguments)},FC=u._Mean=function(){return(FC=u._Mean=u.asm.Mean).apply(null,arguments)},PC=u._Min=function(){return(PC=u._Min=u.asm.Min).apply(null,arguments)},OC=u._Minimum=function(){return(OC=u._Minimum=u.asm.Minimum).apply(null,arguments)},MC=u._MirrorPad=function(){return(MC=u._MirrorPad=u.asm.MirrorPad).apply(null,arguments)},LC=u._Mod=function(){return(LC=u._Mod=u.asm.Mod).apply(null,arguments)},BC=u._Multinomial=function(){return(BC=u._Multinomial=u.asm.Multinomial).apply(null,arguments)},zC=u._Multiply=function(){return(zC=u._Multiply=u.asm.Multiply).apply(null,arguments)},VC=u._Neg=function(){return(VC=u._Neg=u.asm.Neg).apply(null,arguments)},WC=u._NonMaxSuppressionV3=function(){return(WC=u._NonMaxSuppressionV3=u.asm.NonMaxSuppressionV3).apply(null,arguments)},UC=u._NonMaxSuppressionV4=function(){return(UC=u._NonMaxSuppressionV4=u.asm.NonMaxSuppressionV4).apply(null,arguments)},Mm=u._NonMaxSuppressionV5=function(){return(Mm=u._NonMaxSuppressionV5=u.asm.NonMaxSuppressionV5).apply(null,arguments)},Lm=u._NotEqual=function(){return(Lm=u._NotEqual=u.asm.NotEqual).apply(null,arguments)},cl=u._OneHot=function(){return(cl=u._OneHot=u.asm.OneHot).apply(null,arguments)},GC=u._PadV2=function(){return(GC=u._PadV2=u.asm.PadV2).apply(null,arguments)},HC=u._Pow=function(){return(HC=u._Pow=u.asm.Pow).apply(null,arguments)},Op=u._Prelu=function(){return(Op=u._Prelu=u.asm.Prelu).apply(null,arguments)},Bm=u._Prod=function(){return(Bm=u._Prod=u.asm.Prod).apply(null,arguments)},Mp=u._RealDiv=function(){return(Mp=u._RealDiv=u.asm.RealDiv).apply(null,arguments)},Lp=u._Reciprocal=function(){return(Lp=u._Reciprocal=u.asm.Reciprocal).apply(null,arguments)},KC=u._Relu=function(){return(KC=u._Relu=u.asm.Relu).apply(null,arguments)},K=u._Relu6=function(){return(K=u._Relu6=u.asm.Relu6).apply(null,arguments)},ae=u._ResizeBilinear=function(){return(ae=u._ResizeBilinear=u.asm.ResizeBilinear).apply(null,arguments)},Ee=u._ResizeBilinearGrad=function(){return(Ee=u._ResizeBilinearGrad=u.asm.ResizeBilinearGrad).apply(null,arguments)},at=u._ResizeNearestNeighbor=function(){return(at=u._ResizeNearestNeighbor=u.asm.ResizeNearestNeighbor).apply(null,arguments)},_t=u._ResizeNearestNeighborGrad=function(){return(_t=u._ResizeNearestNeighborGrad=u.asm.ResizeNearestNeighborGrad).apply(null,arguments)},Et=u._Reverse=function(){return(Et=u._Reverse=u.asm.Reverse).apply(null,arguments)},Qe=u._RotateWithOffset=function(){return(Qe=u._RotateWithOffset=u.asm.RotateWithOffset).apply(null,arguments)},Ke=u._Round=function(){return(Ke=u._Round=u.asm.Round).apply(null,arguments)},Ut=u._Rsqrt=function(){return(Ut=u._Rsqrt=u.asm.Rsqrt).apply(null,arguments)},no=u._ScatterNd=function(){return(no=u._ScatterNd=u.asm.ScatterNd).apply(null,arguments)},Ga=u._SearchSorted=function(){return(Ga=u._SearchSorted=u.asm.SearchSorted).apply(null,arguments)},zm=u._SelectV2=function(){return(zm=u._SelectV2=u.asm.SelectV2).apply(null,arguments)},ll=u._Selu=function(){return(ll=u._Selu=u.asm.Selu).apply(null,arguments)},qC=u._Sigmoid=function(){return(qC=u._Sigmoid=u.asm.Sigmoid).apply(null,arguments)},yr=u._Sign=function(){return(yr=u._Sign=u.asm.Sign).apply(null,arguments)},Ti=u._Sin=function(){return(Ti=u._Sin=u.asm.Sin).apply(null,arguments)},Vm=u._Sinh=function(){return(Vm=u._Sinh=u.asm.Sinh).apply(null,arguments)},XU=u._Softmax=function(){return(XU=u._Softmax=u.asm.Softmax).apply(null,arguments)},YU=u._Softplus=function(){return(YU=u._Softplus=u.asm.Softplus).apply(null,arguments)},QU=u._SparseFillEmptyRows=function(){return(QU=u._SparseFillEmptyRows=u.asm.SparseFillEmptyRows).apply(null,arguments)},ZU=u._SparseReshape=function(){return(ZU=u._SparseReshape=u.asm.SparseReshape).apply(null,arguments)},JU=u._SparseSegmentReduction=function(){return(JU=u._SparseSegmentReduction=u.asm.SparseSegmentReduction).apply(null,arguments)},eG=u._SparseToDense=function(){return(eG=u._SparseToDense=u.asm.SparseToDense).apply(null,arguments)},tG=u._Sqrt=function(){return(tG=u._Sqrt=u.asm.Sqrt).apply(null,arguments)},rG=u._Square=function(){return(rG=u._Square=u.asm.Square).apply(null,arguments)},oG=u._SquaredDifference=function(){return(oG=u._SquaredDifference=u.asm.SquaredDifference).apply(null,arguments)},nG=u._Step=function(){return(nG=u._Step=u.asm.Step).apply(null,arguments)},sG=u._StridedSlice=function(){return(sG=u._StridedSlice=u.asm.StridedSlice).apply(null,arguments)},aG=u._Sub=function(){return(aG=u._Sub=u.asm.Sub).apply(null,arguments)},iG=u._Sum=function(){return(iG=u._Sum=u.asm.Sum).apply(null,arguments)},uG=u._Tan=function(){return(uG=u._Tan=u.asm.Tan).apply(null,arguments)},pG=u._Tanh=function(){return(pG=u._Tanh=u.asm.Tanh).apply(null,arguments)},cG=u._TensorScatterUpdate=function(){return(cG=u._TensorScatterUpdate=u.asm.TensorScatterUpdate).apply(null,arguments)},lG=u._Tile=function(){return(lG=u._Tile=u.asm.Tile).apply(null,arguments)},mG=u._TopK=function(){return(mG=u._TopK=u.asm.TopK).apply(null,arguments)},dG=u._Transform=function(){return(dG=u._Transform=u.asm.Transform).apply(null,arguments)},fG=u._Transpose=function(){return(fG=u._Transpose=u.asm.Transpose).apply(null,arguments)},hG=u.__FusedMatMul=function(){return(hG=u.__FusedMatMul=u.asm._FusedMatMul).apply(null,arguments)},gG=u._malloc=function(){return(gG=u._malloc=u.asm.malloc).apply(null,arguments)},xG=u._free=function(){return(xG=u._free=u.asm.free).apply(null,arguments)},yG=u.__emscripten_tls_init=function(){return(yG=u.__emscripten_tls_init=u.asm._emscripten_tls_init).apply(null,arguments)},Wm=u._pthread_self=function(){return(Wm=u._pthread_self=u.asm.pthread_self).apply(null,arguments)},bG=u.___errno_location=function(){return(bG=u.___errno_location=u.asm.__errno_location).apply(null,arguments)},x0=u.__emscripten_thread_init=function(){return(x0=u.__emscripten_thread_init=u.asm._emscripten_thread_init).apply(null,arguments)},CG=u.__emscripten_thread_crashed=function(){return(CG=u.__emscripten_thread_crashed=u.asm._emscripten_thread_crashed).apply(null,arguments)},wG=u._emscripten_main_thread_process_queued_calls=function(){return(wG=u._emscripten_main_thread_process_queued_calls=u.asm.emscripten_main_thread_process_queued_calls).apply(null,arguments)},SG=u._emscripten_main_browser_thread_id=function(){return(SG=u._emscripten_main_browser_thread_id=u.asm.emscripten_main_browser_thread_id).apply(null,arguments)},y0=u._emscripten_run_in_main_runtime_thread_js=function(){return(y0=u._emscripten_run_in_main_runtime_thread_js=u.asm.emscripten_run_in_main_runtime_thread_js).apply(null,arguments)},IG=u._emscripten_dispatch_to_thread_=function(){return(IG=u._emscripten_dispatch_to_thread_=u.asm.emscripten_dispatch_to_thread_).apply(null,arguments)},b0=u.__emscripten_proxy_execute_task_queue=function(){return(b0=u.__emscripten_proxy_execute_task_queue=u.asm._emscripten_proxy_execute_task_queue).apply(null,arguments)},jC=u.__emscripten_thread_free_data=function(){return(jC=u.__emscripten_thread_free_data=u.asm._emscripten_thread_free_data).apply(null,arguments)},C0=u.__emscripten_thread_exit=function(){return(C0=u.__emscripten_thread_exit=u.asm._emscripten_thread_exit).apply(null,arguments)},w0=u._emscripten_stack_set_limits=function(){return(w0=u._emscripten_stack_set_limits=u.asm.emscripten_stack_set_limits).apply(null,arguments)},XC=u.stackSave=function(){return(XC=u.stackSave=u.asm.stackSave).apply(null,arguments)},Um=u.stackRestore=function(){return(Um=u.stackRestore=u.asm.stackRestore).apply(null,arguments)},Gm=u.stackAlloc=function(){return(Gm=u.stackAlloc=u.asm.stackAlloc).apply(null,arguments)},vG=u.dynCall_iijjiiii=function(){return(vG=u.dynCall_iijjiiii=u.asm.dynCall_iijjiiii).apply(null,arguments)},kG=u.dynCall_jiji=function(){return(kG=u.dynCall_jiji=u.asm.dynCall_jiji).apply(null,arguments)};u.keepRuntimeAlive=Lo,u.wasmMemory=oe,u.cwrap=tb,u.ExitStatus=ku,u.PThread=Me;var Hm;Ua=function F(){Hm||S0(),Hm||(Ua=F)};function S0(F){if(F=F||f,ki>0)return;if(S){c(u),Xt(),startWorker(u);return}if(Ks(),ki>0)return;function V(){Hm||(Hm=!0,u.calledRun=!0,!le&&(Xt(),c(u),u.onRuntimeInitialized&&u.onRuntimeInitialized(),Wa()))}u.setStatus?(u.setStatus("Running..."),setTimeout(function(){setTimeout(function(){u.setStatus("")},1),V()},1)):V()}if(u.preInit)for(typeof u.preInit=="function"&&(u.preInit=[u.preInit]);u.preInit.length>0;)u.preInit.pop()();S0();var Km;m&&(Km={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 qm;if(typeof WasmBackendModule!="undefined")qm=WasmBackendModule;else if(typeof e!="undefined")qm=e;else throw new Error("Could not find wasm module in post.js");if(Km){var NG=qm._dispose;qm._dispose=function(){NG(),Km.uncaughtException.forEach(function(F){process.removeListener("uncaughtException",F)}),Km.unhandledRejection.forEach(function(F){process.removeListener("unhandledRejection",F)})}}return e.ready}})();typeof Wg=="object"&&typeof Gv=="object"?Gv.exports=Uv:typeof define=="function"&&define.amd?define([],function(){return Uv}):typeof Wg=="object"&&(Wg.WasmBackendModuleThreadedSimd=Uv)});var UB=Kt((e3t,WB)=>{WB.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")+"//# sourceURL="+f)},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.startWorker=instance=>{Module=instance;postMessage({"cmd":"loaded"})};self.onmessage=e=>{try{if(e.data.cmd==="load"){Module["wasmModule"]=e.data.wasmModule;for(const handler of e.data.handlers){Module[handler]=function(){postMessage({cmd:"callHandler",handler:handler,args:[...arguments]})}}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)}else if(e.data.cmd==="run"){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 GB=Kt((Ug,Kv)=>{var Hv=(()=>{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(K,ae){o=K,n=ae});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=(K,ae)=>{throw ae},c=typeof window=="object",l=typeof importScripts=="function",m=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string",d="";function f(K){return t.locateFile?t.locateFile(K,d):d+K}var h,g,x,b;function C(K){if(K instanceof Ap)return;$("exiting due to exception: "+K)}if(m){var S=Vv(),k=Wv();l?d=k.dirname(d)+"/":d=__dirname+"/",h=(K,ae)=>(K=Ks(K)?new URL(K):k.normalize(K),S.readFileSync(K,ae?void 0:"utf8")),x=K=>{var ae=h(K,!0);return ae.buffer||(ae=new Uint8Array(ae)),ae},g=(K,ae,Ee)=>{K=Ks(K)?new URL(K):k.normalize(K),S.readFile(K,function(at,_t){at?Ee(at):ae(_t.buffer)})},process.argv.length>1&&(p=process.argv[1].replace(/\\/g,"/")),i=process.argv.slice(2),process.on("uncaughtException",function(K){if(!(K instanceof Ap))throw K}),process.on("unhandledRejection",function(K){throw K}),u=(K,ae)=>{if(it())throw process.exitCode=K,ae;C(ae),process.exit(K)},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=K=>{var ae=new XMLHttpRequest;return ae.open("GET",K,!1),ae.send(null),ae.responseText},l&&(x=K=>{var ae=new XMLHttpRequest;return ae.open("GET",K,!1),ae.responseType="arraybuffer",ae.send(null),new Uint8Array(ae.response)}),g=(K,ae,Ee)=>{var at=new XMLHttpRequest;at.open("GET",K,!0),at.responseType="arraybuffer",at.onload=()=>{if(at.status==200||at.status==0&&at.response){ae(at.response);return}Ee()},at.onerror=Ee,at.send(null)},b=K=>document.title=K);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 R=4,D;t.wasmBinary&&(D=t.wasmBinary);var P=t.noExitRuntime||!0;typeof WebAssembly!="object"&&fr("no native wasm support detected");var O,M=!1,L;function B(K,ae){K||fr(ae)}var z=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):void 0;function U(K,ae,Ee){ae>>>=0;for(var at=ae+Ee,_t=ae;K[_t]&&!(_t>=at);)++_t;if(_t-ae>16&&K.buffer&&z)return z.decode(K.subarray(ae,_t));for(var Et="";ae<_t;){var Qe=K[ae++];if(!(Qe&128)){Et+=String.fromCharCode(Qe);continue}var Ke=K[ae++]&63;if((Qe&224)==192){Et+=String.fromCharCode((Qe&31)<<6|Ke);continue}var Ut=K[ae++]&63;if((Qe&240)==224?Qe=(Qe&15)<<12|Ke<<6|Ut:Qe=(Qe&7)<<18|Ke<<12|Ut<<6|K[ae++]&63,Qe<65536)Et+=String.fromCharCode(Qe);else{var no=Qe-65536;Et+=String.fromCharCode(55296|no>>10,56320|no&1023)}}return Et}function j(K,ae){return K>>>=0,K?U(ne,K,ae):""}function q(K,ae,Ee,at){if(Ee>>>=0,!(at>0))return 0;for(var _t=Ee,Et=Ee+at-1,Qe=0;Qe=55296&&Ke<=57343){var Ut=K.charCodeAt(++Qe);Ke=65536+((Ke&1023)<<10)|Ut&1023}if(Ke<=127){if(Ee>=Et)break;ae[Ee++>>>0]=Ke}else if(Ke<=2047){if(Ee+1>=Et)break;ae[Ee++>>>0]=192|Ke>>6,ae[Ee++>>>0]=128|Ke&63}else if(Ke<=65535){if(Ee+2>=Et)break;ae[Ee++>>>0]=224|Ke>>12,ae[Ee++>>>0]=128|Ke>>6&63,ae[Ee++>>>0]=128|Ke&63}else{if(Ee+3>=Et)break;ae[Ee++>>>0]=240|Ke>>18,ae[Ee++>>>0]=128|Ke>>12&63,ae[Ee++>>>0]=128|Ke>>6&63,ae[Ee++>>>0]=128|Ke&63}}return ae[Ee>>>0]=0,Ee-_t}function Y(K,ae,Ee){return q(K,ne,ae,Ee)}var J,re,ne,ee,oe,ie,le,be,_e;function ve(K){J=K,t.HEAP8=re=new Int8Array(K),t.HEAP16=ee=new Int16Array(K),t.HEAP32=ie=new Int32Array(K),t.HEAPU8=ne=new Uint8Array(K),t.HEAPU16=oe=new Uint16Array(K),t.HEAPU32=le=new Uint32Array(K),t.HEAPF32=be=new Float32Array(K),t.HEAPF64=_e=new Float64Array(K)}var Fe=t.INITIAL_MEMORY||16777216,Pe,st=[],ct=[],He=[],lt=!1;function it(){return P}function ht(){if(t.preRun)for(typeof t.preRun=="function"&&(t.preRun=[t.preRun]);t.preRun.length;)Mt(t.preRun.shift());Ua(st)}function gt(){lt=!0,Ua(ct)}function Lr(){if(t.postRun)for(typeof t.postRun=="function"&&(t.postRun=[t.postRun]);t.postRun.length;)rr(t.postRun.shift());Ua(He)}function Mt(K){st.unshift(K)}function to(K){ct.unshift(K)}function rr(K){He.unshift(K)}var Tt=0,or=null,nr=null;function ro(K){Tt++,t.monitorRunDependencies&&t.monitorRunDependencies(Tt)}function oo(K){if(Tt--,t.monitorRunDependencies&&t.monitorRunDependencies(Tt),Tt==0&&(or!==null&&(clearInterval(or),or=null),nr)){var ae=nr;nr=null,ae()}}function fr(K){t.onAbort&&t.onAbort(K),K="Aborted("+K+")",$(K),M=!0,L=1,K+=". Build with -sASSERTIONS for more info.";var ae=new WebAssembly.RuntimeError(K);throw n(ae),ae}var Va="data:application/octet-stream;base64,";function Lo(K){return K.startsWith(Va)}function Ks(K){return K.startsWith("file://")}var Xt;Xt="tfjs-backend-wasm.wasm",Lo(Xt)||(Xt=f(Xt));function Wa(K){try{if(K==Xt&&D)return new Uint8Array(D);if(x)return x(K);throw"both async and sync fetching of the wasm failed"}catch(ae){fr(ae)}}function ol(){if(!D&&(c||l)){if(typeof fetch=="function"&&!Ks(Xt))return fetch(Xt,{credentials:"same-origin"}).then(function(K){if(!K.ok)throw"failed to load wasm binary file at '"+Xt+"'";return K.arrayBuffer()}).catch(function(){return Wa(Xt)});if(g)return new Promise(function(K,ae){g(Xt,function(Ee){K(new Uint8Array(Ee))},ae)})}return Promise.resolve().then(function(){return Wa(Xt)})}function nl(){var K={env:sl,wasi_snapshot_preview1:sl};function ae(Qe,Ke){var Ut=Qe.exports;t.asm=Ut,O=t.asm.memory,ve(O.buffer),Pe=t.asm.__indirect_function_table,to(t.asm.__wasm_call_ctors),oo("wasm-instantiate")}ro("wasm-instantiate");function Ee(Qe){ae(Qe.instance)}function at(Qe){return ol().then(function(Ke){return WebAssembly.instantiate(Ke,K)}).then(function(Ke){return Ke}).then(Qe,function(Ke){$("failed to asynchronously prepare wasm: "+Ke),fr(Ke)})}function _t(){return!D&&typeof WebAssembly.instantiateStreaming=="function"&&!Lo(Xt)&&!Ks(Xt)&&!m&&typeof fetch=="function"?fetch(Xt,{credentials:"same-origin"}).then(function(Qe){var Ke=WebAssembly.instantiateStreaming(Qe,K);return Ke.then(Ee,function(Ut){return $("wasm streaming compile failed: "+Ut),$("falling back to ArrayBuffer instantiation"),at(Ee)})}):at(Ee)}if(t.instantiateWasm)try{var Et=t.instantiateWasm(K,ae);return Et}catch(Qe){$("Module.instantiateWasm callback failed with error: "+Qe),n(Qe)}return _t().catch(n),{}}var d0,ki;function Ap(K){this.name="ExitStatus",this.message="Program terminated with exit("+K+")",this.status=K}function Ua(K){for(;K.length>0;)K.shift()(t)}function Cy(){fr("")}function wm(){return 4294901760}function vu(){return wm()}function wy(K,ae,Ee){ne.copyWithin(K>>>0,ae>>>0,ae+Ee>>>0)}function Sm(K){try{return O.grow(K-J.byteLength+65535>>>16),ve(O.buffer),1}catch(ae){}}function Fp(K){var ae=ne.length;K=K>>>0;var Ee=wm();if(K>Ee)return!1;let at=(Ut,no)=>Ut+(no-Ut%no)%no;for(var _t=1;_t<=4;_t*=2){var Et=ae*(1+.2/_t);Et=Math.min(Et,K+100663296);var Qe=Math.min(Ee,at(Math.max(K,Et),65536)),Ke=Sm(Qe);if(Ke)return!0}return!1}var hr={varargs:void 0,get:function(){hr.varargs+=4;var K=ie[hr.varargs-4>>>2];return K},getStr:function(K){var ae=j(K);return ae}};function Im(K){return 52}function Sy(K,ae,Ee,at,_t){return 70}var Iy=[null,[],[]];function f0(K,ae){var Ee=Iy[K];ae===0||ae===10?((K===1?_:$)(U(Ee,0)),Ee.length=0):Ee.push(ae)}function h0(K,ae,Ee,at){for(var _t=0,Et=0;Et>>2],Ke=le[ae+4>>>2];ae+=8;for(var Ut=0;Ut>>0]);_t+=Ke}return le[at>>>2]=_t,0}function vm(K){var ae=t["_"+K];return ae}function ku(K,ae){re.set(K,ae>>>0)}function vy(K,ae,Ee,at,_t){var Et={string:yr=>{var Ti=0;if(yr!=null&&yr!==0){var Vm=(yr.length<<2)+1;Ti=cl(Vm),Y(yr,Ti,Vm)}return Ti},array:yr=>{var Ti=cl(yr.length);return ku(yr,Ti),Ti}};function Qe(yr){return ae==="string"?j(yr):ae==="boolean"?!!yr:yr}var Ke=vm(K),Ut=[],no=0;if(at)for(var Ga=0;GaQe==="number"||Qe==="boolean"),Et=ae!=="string";return Et&&_t&&!at?vm(K):function(){return vy(K,ae,Ee,arguments,at)}}var sl={abort:Cy,emscripten_get_heap_max:vu,emscripten_memcpy_big:wy,emscripten_resize_heap:Fp,fd_close:Im,fd_seek:Sy,fd_write:h0},Ny=nl(),km=t.___wasm_call_ctors=function(){return(km=t.___wasm_call_ctors=t.asm.__wasm_call_ctors).apply(null,arguments)},Nm=t._init=function(){return(Nm=t._init=t.asm.init).apply(null,arguments)},Ty=t._init_with_threads_count=function(){return(Ty=t._init_with_threads_count=t.asm.init_with_threads_count).apply(null,arguments)},Tm=t._get_threads_count=function(){return(Tm=t._get_threads_count=t.asm.get_threads_count).apply(null,arguments)},_y=t._register_tensor=function(){return(_y=t._register_tensor=t.asm.register_tensor).apply(null,arguments)},Me=t._dispose_data=function(){return(Me=t._dispose_data=t.asm.dispose_data).apply(null,arguments)},al=t._dispose=function(){return(al=t._dispose=t.asm.dispose).apply(null,arguments)},Ey=t._Abs=function(){return(Ey=t._Abs=t.asm.Abs).apply(null,arguments)},_m=t._Acos=function(){return(_m=t._Acos=t.asm.Acos).apply(null,arguments)},Pp=t._Acosh=function(){return(Pp=t._Acosh=t.asm.Acosh).apply(null,arguments)},$y=t._Add=function(){return($y=t._Add=t.asm.Add).apply(null,arguments)},Ry=t._AddN=function(){return(Ry=t._AddN=t.asm.AddN).apply(null,arguments)},Dy=t._All=function(){return(Dy=t._All=t.asm.All).apply(null,arguments)},Ay=t._Any=function(){return(Ay=t._Any=t.asm.Any).apply(null,arguments)},Fy=t._ArgMax=function(){return(Fy=t._ArgMax=t.asm.ArgMax).apply(null,arguments)},Em=t._ArgMin=function(){return(Em=t._ArgMin=t.asm.ArgMin).apply(null,arguments)},$m=t._Asin=function(){return($m=t._Asin=t.asm.Asin).apply(null,arguments)},Py=t._Asinh=function(){return(Py=t._Asinh=t.asm.Asinh).apply(null,arguments)},Oy=t._Atan=function(){return(Oy=t._Atan=t.asm.Atan).apply(null,arguments)},My=t._Atan2=function(){return(My=t._Atan2=t.asm.Atan2).apply(null,arguments)},il=t._Atanh=function(){return(il=t._Atanh=t.asm.Atanh).apply(null,arguments)},Ly=t._AvgPool=function(){return(Ly=t._AvgPool=t.asm.AvgPool).apply(null,arguments)},By=t._AvgPool3D=function(){return(By=t._AvgPool3D=t.asm.AvgPool3D).apply(null,arguments)},zy=t._AvgPool3DGrad=function(){return(zy=t._AvgPool3DGrad=t.asm.AvgPool3DGrad).apply(null,arguments)},Nu=t._AvgPoolGrad=function(){return(Nu=t._AvgPoolGrad=t.asm.AvgPoolGrad).apply(null,arguments)},Vy=t._BatchMatMul=function(){return(Vy=t._BatchMatMul=t.asm.BatchMatMul).apply(null,arguments)},Wy=t._Bincount=function(){return(Wy=t._Bincount=t.asm.Bincount).apply(null,arguments)},Rm=t._BitwiseAnd=function(){return(Rm=t._BitwiseAnd=t.asm.BitwiseAnd).apply(null,arguments)},Uy=t._Ceil=function(){return(Uy=t._Ceil=t.asm.Ceil).apply(null,arguments)},ul=t._ClipByValue=function(){return(ul=t._ClipByValue=t.asm.ClipByValue).apply(null,arguments)},Gy=t._Conv2D=function(){return(Gy=t._Conv2D=t.asm.Conv2D).apply(null,arguments)},Hy=t._Conv2DBackpropInput=function(){return(Hy=t._Conv2DBackpropInput=t.asm.Conv2DBackpropInput).apply(null,arguments)},Ky=t._Conv3D=function(){return(Ky=t._Conv3D=t.asm.Conv3D).apply(null,arguments)},Ni=t._Conv3DBackpropFilterV2=function(){return(Ni=t._Conv3DBackpropFilterV2=t.asm.Conv3DBackpropFilterV2).apply(null,arguments)},pl=t._Conv3DBackpropInputV2=function(){return(pl=t._Conv3DBackpropInputV2=t.asm.Conv3DBackpropInputV2).apply(null,arguments)},qy=t._Cos=function(){return(qy=t._Cos=t.asm.Cos).apply(null,arguments)},jy=t._Cosh=function(){return(jy=t._Cosh=t.asm.Cosh).apply(null,arguments)},Xy=t._CropAndResize=function(){return(Xy=t._CropAndResize=t.asm.CropAndResize).apply(null,arguments)},Yy=t._Cumprod=function(){return(Yy=t._Cumprod=t.asm.Cumprod).apply(null,arguments)},Dm=t._Cumsum=function(){return(Dm=t._Cumsum=t.asm.Cumsum).apply(null,arguments)},Am=t._DenseBincount=function(){return(Am=t._DenseBincount=t.asm.DenseBincount).apply(null,arguments)},Qy=t._DepthToSpace=function(){return(Qy=t._DepthToSpace=t.asm.DepthToSpace).apply(null,arguments)},Zy=t._DepthwiseConv2dNative=function(){return(Zy=t._DepthwiseConv2dNative=t.asm.DepthwiseConv2dNative).apply(null,arguments)},Fm=t._Diag=function(){return(Fm=t._Diag=t.asm.Diag).apply(null,arguments)},Pm=t._Dilation2D=function(){return(Pm=t._Dilation2D=t.asm.Dilation2D).apply(null,arguments)},Jy=t._Dilation2DBackpropFilter=function(){return(Jy=t._Dilation2DBackpropFilter=t.asm.Dilation2DBackpropFilter).apply(null,arguments)},eb=t._Dilation2DBackpropInput=function(){return(eb=t._Dilation2DBackpropInput=t.asm.Dilation2DBackpropInput).apply(null,arguments)},tb=t._Elu=function(){return(tb=t._Elu=t.asm.Elu).apply(null,arguments)},rb=t._EluGrad=function(){return(rb=t._EluGrad=t.asm.EluGrad).apply(null,arguments)},Om=t._Equal=function(){return(Om=t._Equal=t.asm.Equal).apply(null,arguments)},g0=t._Erf=function(){return(g0=t._Erf=t.asm.Erf).apply(null,arguments)},ob=t._Exp=function(){return(ob=t._Exp=t.asm.Exp).apply(null,arguments)},nb=t._Expm1=function(){return(nb=t._Expm1=t.asm.Expm1).apply(null,arguments)},sb=t._FlipLeftRight=function(){return(sb=t._FlipLeftRight=t.asm.FlipLeftRight).apply(null,arguments)},ab=t._Floor=function(){return(ab=t._Floor=t.asm.Floor).apply(null,arguments)},ib=t._FloorDiv=function(){return(ib=t._FloorDiv=t.asm.FloorDiv).apply(null,arguments)},ub=t._FusedBatchNorm=function(){return(ub=t._FusedBatchNorm=t.asm.FusedBatchNorm).apply(null,arguments)},pb=t._FusedConv2D=function(){return(pb=t._FusedConv2D=t.asm.FusedConv2D).apply(null,arguments)},cb=t._FusedDepthwiseConv2D=function(){return(cb=t._FusedDepthwiseConv2D=t.asm.FusedDepthwiseConv2D).apply(null,arguments)},lb=t._Gather=function(){return(lb=t._Gather=t.asm.Gather).apply(null,arguments)},mb=t._GatherNd=function(){return(mb=t._GatherNd=t.asm.GatherNd).apply(null,arguments)},db=t._Greater=function(){return(db=t._Greater=t.asm.Greater).apply(null,arguments)},fb=t._GreaterEqual=function(){return(fb=t._GreaterEqual=t.asm.GreaterEqual).apply(null,arguments)},hb=t._IsFinite=function(){return(hb=t._IsFinite=t.asm.IsFinite).apply(null,arguments)},gb=t._IsInf=function(){return(gb=t._IsInf=t.asm.IsInf).apply(null,arguments)},xb=t._IsNan=function(){return(xb=t._IsNan=t.asm.IsNan).apply(null,arguments)},yb=t._LRN=function(){return(yb=t._LRN=t.asm.LRN).apply(null,arguments)},bb=t._LRNGrad=function(){return(bb=t._LRNGrad=t.asm.LRNGrad).apply(null,arguments)},Cb=t._LeakyRelu=function(){return(Cb=t._LeakyRelu=t.asm.LeakyRelu).apply(null,arguments)},wb=t._Less=function(){return(wb=t._Less=t.asm.Less).apply(null,arguments)},Sb=t._LessEqual=function(){return(Sb=t._LessEqual=t.asm.LessEqual).apply(null,arguments)},Ib=t._LinSpace=function(){return(Ib=t._LinSpace=t.asm.LinSpace).apply(null,arguments)},vb=t._Log=function(){return(vb=t._Log=t.asm.Log).apply(null,arguments)},kb=t._Log1p=function(){return(kb=t._Log1p=t.asm.Log1p).apply(null,arguments)},Nb=t._LogicalAnd=function(){return(Nb=t._LogicalAnd=t.asm.LogicalAnd).apply(null,arguments)},Tb=t._LogicalNot=function(){return(Tb=t._LogicalNot=t.asm.LogicalNot).apply(null,arguments)},_b=t._LogicalOr=function(){return(_b=t._LogicalOr=t.asm.LogicalOr).apply(null,arguments)},Eb=t._LogicalXor=function(){return(Eb=t._LogicalXor=t.asm.LogicalXor).apply(null,arguments)},$b=t._Max=function(){return($b=t._Max=t.asm.Max).apply(null,arguments)},Rb=t._MaxPool=function(){return(Rb=t._MaxPool=t.asm.MaxPool).apply(null,arguments)},Db=t._MaxPool3D=function(){return(Db=t._MaxPool3D=t.asm.MaxPool3D).apply(null,arguments)},Ab=t._MaxPool3DGrad=function(){return(Ab=t._MaxPool3DGrad=t.asm.MaxPool3DGrad).apply(null,arguments)},Fb=t._MaxPoolGrad=function(){return(Fb=t._MaxPoolGrad=t.asm.MaxPoolGrad).apply(null,arguments)},Pb=t._MaxPoolWithArgmax=function(){return(Pb=t._MaxPoolWithArgmax=t.asm.MaxPoolWithArgmax).apply(null,arguments)},Ob=t._Maximum=function(){return(Ob=t._Maximum=t.asm.Maximum).apply(null,arguments)},Mb=t._Mean=function(){return(Mb=t._Mean=t.asm.Mean).apply(null,arguments)},Lb=t._Min=function(){return(Lb=t._Min=t.asm.Min).apply(null,arguments)},Bb=t._Minimum=function(){return(Bb=t._Minimum=t.asm.Minimum).apply(null,arguments)},zb=t._MirrorPad=function(){return(zb=t._MirrorPad=t.asm.MirrorPad).apply(null,arguments)},Vb=t._Mod=function(){return(Vb=t._Mod=t.asm.Mod).apply(null,arguments)},Wb=t._Multinomial=function(){return(Wb=t._Multinomial=t.asm.Multinomial).apply(null,arguments)},Ub=t._Multiply=function(){return(Ub=t._Multiply=t.asm.Multiply).apply(null,arguments)},Gb=t._Neg=function(){return(Gb=t._Neg=t.asm.Neg).apply(null,arguments)},Hb=t._NonMaxSuppressionV3=function(){return(Hb=t._NonMaxSuppressionV3=t.asm.NonMaxSuppressionV3).apply(null,arguments)},Kb=t._NonMaxSuppressionV4=function(){return(Kb=t._NonMaxSuppressionV4=t.asm.NonMaxSuppressionV4).apply(null,arguments)},qb=t._NonMaxSuppressionV5=function(){return(qb=t._NonMaxSuppressionV5=t.asm.NonMaxSuppressionV5).apply(null,arguments)},jb=t._NotEqual=function(){return(jb=t._NotEqual=t.asm.NotEqual).apply(null,arguments)},Xb=t._OneHot=function(){return(Xb=t._OneHot=t.asm.OneHot).apply(null,arguments)},Yb=t._PadV2=function(){return(Yb=t._PadV2=t.asm.PadV2).apply(null,arguments)},Qb=t._Pow=function(){return(Qb=t._Pow=t.asm.Pow).apply(null,arguments)},Zb=t._Prelu=function(){return(Zb=t._Prelu=t.asm.Prelu).apply(null,arguments)},Jb=t._Prod=function(){return(Jb=t._Prod=t.asm.Prod).apply(null,arguments)},eC=t._RealDiv=function(){return(eC=t._RealDiv=t.asm.RealDiv).apply(null,arguments)},tC=t._Reciprocal=function(){return(tC=t._Reciprocal=t.asm.Reciprocal).apply(null,arguments)},rC=t._Relu=function(){return(rC=t._Relu=t.asm.Relu).apply(null,arguments)},oC=t._Relu6=function(){return(oC=t._Relu6=t.asm.Relu6).apply(null,arguments)},nC=t._ResizeBilinear=function(){return(nC=t._ResizeBilinear=t.asm.ResizeBilinear).apply(null,arguments)},sC=t._ResizeBilinearGrad=function(){return(sC=t._ResizeBilinearGrad=t.asm.ResizeBilinearGrad).apply(null,arguments)},aC=t._ResizeNearestNeighbor=function(){return(aC=t._ResizeNearestNeighbor=t.asm.ResizeNearestNeighbor).apply(null,arguments)},iC=t._ResizeNearestNeighborGrad=function(){return(iC=t._ResizeNearestNeighborGrad=t.asm.ResizeNearestNeighborGrad).apply(null,arguments)},uC=t._Reverse=function(){return(uC=t._Reverse=t.asm.Reverse).apply(null,arguments)},pC=t._RotateWithOffset=function(){return(pC=t._RotateWithOffset=t.asm.RotateWithOffset).apply(null,arguments)},cC=t._Round=function(){return(cC=t._Round=t.asm.Round).apply(null,arguments)},lC=t._Rsqrt=function(){return(lC=t._Rsqrt=t.asm.Rsqrt).apply(null,arguments)},mC=t._ScatterNd=function(){return(mC=t._ScatterNd=t.asm.ScatterNd).apply(null,arguments)},dC=t._SearchSorted=function(){return(dC=t._SearchSorted=t.asm.SearchSorted).apply(null,arguments)},fC=t._SelectV2=function(){return(fC=t._SelectV2=t.asm.SelectV2).apply(null,arguments)},hC=t._Selu=function(){return(hC=t._Selu=t.asm.Selu).apply(null,arguments)},gC=t._Sigmoid=function(){return(gC=t._Sigmoid=t.asm.Sigmoid).apply(null,arguments)},xC=t._Sign=function(){return(xC=t._Sign=t.asm.Sign).apply(null,arguments)},yC=t._Sin=function(){return(yC=t._Sin=t.asm.Sin).apply(null,arguments)},bC=t._Sinh=function(){return(bC=t._Sinh=t.asm.Sinh).apply(null,arguments)},CC=t._Softmax=function(){return(CC=t._Softmax=t.asm.Softmax).apply(null,arguments)},wC=t._Softplus=function(){return(wC=t._Softplus=t.asm.Softplus).apply(null,arguments)},SC=t._SparseFillEmptyRows=function(){return(SC=t._SparseFillEmptyRows=t.asm.SparseFillEmptyRows).apply(null,arguments)},IC=t._SparseReshape=function(){return(IC=t._SparseReshape=t.asm.SparseReshape).apply(null,arguments)},vC=t._SparseSegmentReduction=function(){return(vC=t._SparseSegmentReduction=t.asm.SparseSegmentReduction).apply(null,arguments)},kC=t._SparseToDense=function(){return(kC=t._SparseToDense=t.asm.SparseToDense).apply(null,arguments)},NC=t._Sqrt=function(){return(NC=t._Sqrt=t.asm.Sqrt).apply(null,arguments)},TC=t._Square=function(){return(TC=t._Square=t.asm.Square).apply(null,arguments)},_C=t._SquaredDifference=function(){return(_C=t._SquaredDifference=t.asm.SquaredDifference).apply(null,arguments)},EC=t._Step=function(){return(EC=t._Step=t.asm.Step).apply(null,arguments)},$C=t._StridedSlice=function(){return($C=t._StridedSlice=t.asm.StridedSlice).apply(null,arguments)},RC=t._Sub=function(){return(RC=t._Sub=t.asm.Sub).apply(null,arguments)},DC=t._Sum=function(){return(DC=t._Sum=t.asm.Sum).apply(null,arguments)},AC=t._Tan=function(){return(AC=t._Tan=t.asm.Tan).apply(null,arguments)},FC=t._Tanh=function(){return(FC=t._Tanh=t.asm.Tanh).apply(null,arguments)},PC=t._TensorScatterUpdate=function(){return(PC=t._TensorScatterUpdate=t.asm.TensorScatterUpdate).apply(null,arguments)},OC=t._Tile=function(){return(OC=t._Tile=t.asm.Tile).apply(null,arguments)},MC=t._TopK=function(){return(MC=t._TopK=t.asm.TopK).apply(null,arguments)},LC=t._Transform=function(){return(LC=t._Transform=t.asm.Transform).apply(null,arguments)},BC=t._Transpose=function(){return(BC=t._Transpose=t.asm.Transpose).apply(null,arguments)},zC=t.__FusedMatMul=function(){return(zC=t.__FusedMatMul=t.asm._FusedMatMul).apply(null,arguments)},VC=t._malloc=function(){return(VC=t._malloc=t.asm.malloc).apply(null,arguments)},WC=t._free=function(){return(WC=t._free=t.asm.free).apply(null,arguments)},UC=t.___errno_location=function(){return(UC=t.___errno_location=t.asm.__errno_location).apply(null,arguments)},Mm=t.stackSave=function(){return(Mm=t.stackSave=t.asm.stackSave).apply(null,arguments)},Lm=t.stackRestore=function(){return(Lm=t.stackRestore=t.asm.stackRestore).apply(null,arguments)},cl=t.stackAlloc=function(){return(cl=t.stackAlloc=t.asm.stackAlloc).apply(null,arguments)},GC=t.dynCall_iijjiiii=function(){return(GC=t.dynCall_iijjiiii=t.asm.dynCall_iijjiiii).apply(null,arguments)},HC=t.dynCall_jiji=function(){return(HC=t.dynCall_jiji=t.asm.dynCall_jiji).apply(null,arguments)};t.cwrap=ky;var Op;nr=function K(){Op||Bm(),Op||(nr=K)};function Bm(K){if(K=K||i,Tt>0||(ht(),Tt>0))return;function ae(){Op||(Op=!0,t.calledRun=!0,!M&&(gt(),o(t),t.onRuntimeInitialized&&t.onRuntimeInitialized(),Lr()))}t.setStatus?(t.setStatus("Running..."),setTimeout(function(){setTimeout(function(){t.setStatus("")},1),ae()},1)):ae()}if(t.preInit)for(typeof t.preInit=="function"&&(t.preInit=[t.preInit]);t.preInit.length>0;)t.preInit.pop()();Bm();var Mp;s&&(Mp={uncaughtException:process.listeners("uncaughtException").filter(function(K){return!s.uncaughtException.indexOf(K)>-1}),unhandledRejection:process.listeners("unhandledRejection").filter(function(K){return!s.unhandledRejection.indexOf(K)>-1})});var Lp;if(typeof e!="undefined")Lp=e;else if(typeof WasmBackendModuleThreadedSimd!="undefined")Lp=WasmBackendModuleThreadedSimd;else throw new Error("Could not find wasm module in post.js");if(Mp){var KC=Lp._dispose;Lp._dispose=function(){KC(),Mp.uncaughtException.forEach(function(K){process.removeListener("uncaughtException",K)}),Mp.unhandledRejection.forEach(function(K){process.removeListener("unhandledRejection",K)})}}return e.ready}})();typeof Ug=="object"&&typeof Kv=="object"?Kv.exports=Hv:typeof define=="function"&&define.amd?define([],function(){return Hv}):typeof Ug=="object"&&(Ug.WasmBackendModule=Hv)});var Bo=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}},ao=class{refCount(e){return zr("refCount")}incRef(e){return zr("incRef")}timerAvailable(){return!0}time(e){return zr("time")}read(e){return zr("read")}readSync(e){return zr("readSync")}readToGPU(e,t){return zr("readToGPU")}numDataIds(){return zr("numDataIds")}disposeData(e,t){return zr("disposeData")}write(e,t,o){return zr("write")}move(e,t,o,n,s){return zr("move")}createTensorFromGPUData(e,t,o){return zr("createTensorFromGPUData")}memory(){return zr("memory")}floatPrecision(){return zr("floatPrecision")}epsilon(){return this.floatPrecision()===32?1e-7:1e-4}dispose(){return zr("dispose")}};function zr(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 k0(r){let e=r.length,t=0;for(;e>0;)t=Math.random()*e|0,e--,jm(r,e,t)}function FG(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--,jm(r,t,o),jm(e,t,o)}function Vp(r,e,t){return Math.max(r,Math.min(e,t))}function PG(r){return r%2===0?r:r+1}function jm(r,e,t){let o=r[e];r[e]=r[t],r[t]=o}function OG(r){let e=0;for(let t=0;tt+` Shapes ${r} and ${e} must match`)}function io(r){E(r!=null,()=>"The input to the tensor constructor must be a non-null value.")}function ze(r){if(r.length===0)return 1;let e=r[0];for(let t=1;t0,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 GG(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 _i(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=>Ka(o)),()=>`All values in axis param must be integers but got axis ${r}`),r.map(o=>o<0?t+o:o)}function JC(r,e){let t=[],o=[],n=e!=null&&Array.isArray(e)&&e.length===0,s=e==null||n?null:_i(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 ew(r,e){return Xm(r,e)}function Xm(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 tw(r,e){for(let t=0;te+=t.length),e}function zo(r){return typeof r=="string"||r instanceof String}function N0(r){return typeof r=="boolean"}function T0(r){return typeof r=="number"}function Ei(r){return Array.isArray(r)?Ei(r[0]):r instanceof Float32Array?"float32":r instanceof Int32Array||r instanceof Uint8Array||r instanceof Uint8ClampedArray?"int32":T0(r)?"float32":zo(r)?"string":N0(r)?"bool":"float32"}function qs(r){return!!(r&&r.constructor&&r.call&&r.apply)}function Up(r,e){for(let t=e;t=0;--o)t[o]=t[o+1]*r[o+1];return t}function _0(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 _0(0,r,e,t)}function KG(r,e){if(Array.isArray(r))return r;if(e==="float32")return r instanceof Float32Array?r:new Float32Array(r);if(e==="int32")return r instanceof Int32Array?r:new Int32Array(r);if(e==="bool"||e==="string")return Uint8Array.from(new Int32Array(r));throw new Error(`Unknown dtype ${e}`)}function ml(r,e){let t=Gp(r,e);for(let o=0;oo*n,1);if(e==null||e==="float32")return Tu(r,new Float32Array(t));if(e==="int32")return Tu(r,new Int32Array(t));if(e==="bool")return Tu(r,new Uint8Array(t));throw new Error(`Unknown data type ${e}`)}function Ct(r){r.forEach(e=>{E(Number.isInteger(e)&&e>=0,()=>`Tensor must have a shape comprised of positive integers but got shape [${r}].`)})}function jG(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]=JG(n,s)})}};function QG(r){let e={};return r.replace(/[?&]([^=?&]+)(?:=([^&]*))?/g,(t,...o)=>(ZG(e,o[0],o[1]),o.join("="))),e}function ZG(r,e,t){r[decodeURIComponent(e)]=decodeURIComponent(t||"")}function JG(r,e){let t=e.toLowerCase();return t==="true"||t==="false"?t==="true":`${+t}`===t?+t:e}function A(){return nw}var nw=null;function $0(r){nw=r}var sw;function aw(){if(sw==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");sw=r}return sw}function e4(){let r=aw();return r._tfGlobals==null&&(r._tfGlobals=new Map),r._tfGlobals}function fl(r,e){let t=e4();if(t.has(r))return t.get(r);{let o=e();return t.set(r,o),t.get(r)}}var Xs="Abs",Vo="Acos",Wo="Acosh",uo="Add",Uo="AddN",Go="All",Ho="Any",Ys="ArgMax",Qs="ArgMin",Ko="Asin",qo="Asinh",jo="Atan",Xo="Atanh",Yo="Atan2",Qo="AvgPool",$i="AvgPoolGrad",Zs="AvgPool3D",Ri="AvgPool3DGrad",Zo="BatchMatMul",Js="BatchToSpaceND",Jo="Bincount",qa="BitwiseAnd",qce="BroadcastTo",ea="BroadcastArgs",yo="Cast",en="Ceil",bo="ClipByValue",Di="Complex",Ai="ComplexAbs",ta="Concat",tn="Conv2D",Fi="Conv2DBackpropFilter",rn="Conv2DBackpropInput",on="Conv3D",ja="Conv3DBackpropFilterV2",nn="Conv3DBackpropInputV2",sn="Cos",an="Cosh",un="Cumprod",pn="Cumsum",cn="CropAndResize",ra="DenseBincount",ln="DepthToSpace",mn="DepthwiseConv2dNative",Pi="DepthwiseConv2dNativeBackpropFilter",Oi="DepthwiseConv2dNativeBackpropInput",oa="Diag",dn="Dilation2D",Mi="Dilation2DBackpropInput",Li="Dilation2DBackpropFilter",$u="Draw",fn="RealDiv",Bi="Einsum",hn="Elu",Xa="EluGrad",gn="Erf",xn="Equal",yn="Exp",na="ExpandDims",bn="Expm1",zi="FFT",sa="Fill",Cn="FlipLeftRight",wn="Floor",Sn="FloorDiv",In="FusedBatchNorm",aa="GatherV2",vn="GatherNd",kn="Greater",Nn="GreaterEqual",Co="Identity",Vi="IFFT",Wi="Imag",Tn="IsFinite",_n="IsInf",En="IsNan",$n="LeakyRelu",Rn="Less",Dn="LessEqual",An="LinSpace",Fn="Log",Pn="Log1p",On="LogicalAnd",Mn="LogicalNot",Ln="LogicalOr",R0="LogicalXor",jce="LogSoftmax",Xce="LowerBound",Bn="LRN",Ya="LRNGrad",Yce="MatrixBandPart",zn="Max",Vn="Maximum",Wn="MaxPool",Ui="MaxPoolGrad",ia="MaxPool3D",Gi="MaxPool3DGrad",ua="MaxPoolWithArgmax",Un="Mean",Gn="Min",Hn="Minimum",Kn="MirrorPad",qn="Mod",jn="Multinomial",Xn="Multiply",pa="Neg",Yn="NotEqual",Qn="NonMaxSuppressionV3",Qa="NonMaxSuppressionV4",Zn="NonMaxSuppressionV5",ca="OnesLike",Jn="OneHot",la="Pack",es="PadV2",Qce="Pool",ts="Pow",rs="Prelu",os="Prod",Hp="RaggedGather",Kp="RaggedRange",qp="RaggedTensorToTensor",ma="Range",Hi="Real",ns="Reciprocal",ss="Relu",da="Reshape",as="ResizeNearestNeighbor",Za="ResizeNearestNeighborGrad",is="ResizeBilinear",Ja="ResizeBilinearGrad",us="Relu6",ps="Reverse",cs="Round",ls="Rsqrt",ms="ScatterNd",ds="TensorScatterUpdate",fs="SearchSorted",fa="Select",hs="Selu",ha="Slice",gs="Sin",xs="Sinh",ys="Sign",bs="Sigmoid",Cs="Softplus",ws="Sqrt",Ss="Sum",ga="SpaceToBatchND",xa="SplitV",Is="Softmax",Ki="SparseFillEmptyRows",ei="SparseReshape",ya="SparseSegmentMean",ba="SparseSegmentSum",vs="SparseToDense",ks="SquaredDifference",qi="Square",Ru="StaticRegexReplace",Ns="StridedSlice",Ca="StringNGrams",ji="StringSplit",Xi="StringToHashBucketFast",Ts="Sub",_s="Tan",Es="Tanh",po="Tile",$s="TopK",Rs="Transform",co="Transpose",Yi="Unique",wa="Unpack",Qi="UnsortedSegmentSum",Zce="UpperBound",Sa="ZerosLike",wo="Step",Du="FromPixels",Ds="RotateWithOffset",So="_FusedMatMul",Io="FusedConv2D",vo="FusedDepthwiseConv2D";function Ia(...r){A().getBool("IS_TEST")||A().getBool("PROD")||console.warn(...r)}function t4(...r){A().getBool("IS_TEST")||A().getBool("PROD")||console.log(...r)}var jp=fl("kernelRegistry",()=>new Map),hl=fl("gradRegistry",()=>new Map);function Xp(r,e){let t=uw(r,e);return jp.get(t)}function iw(r){return hl.get(r)}function Ym(r){let e=jp.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 ti(r){let{kernelName:e,backendName:t}=r,o=uw(e,t);jp.has(o)&&Ia(`The kernel '${e}' for backend '${t}' is already registered`),jp.set(o,r)}function ole(r){let{kernelName:e}=r;hl.has(e)&&A().getBool("DEBUG")&&Ia(`Overriding the gradient for '${e}'`),hl.set(e,r)}function nle(r,e){let t=uw(r,e);if(!jp.has(t))throw new Error(`The kernel '${r}' for backend '${e}' is not registered`);jp.delete(t)}function sle(r){if(!hl.has(r))throw new Error(`The gradient '${r}' for backend is not registered`);hl.delete(r)}function ale(r,e){Ym(r).forEach(o=>{let n=Object.assign({},o,{backendName:e});ti(n)})}function uw(r,e){return`${e}_${r}`}var y={};qe(y,{arraysEqual:()=>br,arraysEqualWithNull:()=>ZC,assert:()=>E,assertNonNegativeIntegerDimensions:()=>Ct,assertNonNull:()=>io,assertShapesMatch:()=>xt,bytesFromStringArray:()=>ow,bytesPerElement:()=>Wp,checkConversionForErrors:()=>tw,clamp:()=>Vp,computeStrides:()=>js,convertBackendValuesAndArrayBuffer:()=>KG,createScalarValue:()=>u4,createShuffledIndices:()=>WG,decodeString:()=>Jp,distSquared:()=>LG,encodeString:()=>Ji,fetch:()=>c4,fingerPrint64:()=>i4,flatten:()=>Fs,getArrayFromDType:()=>Xm,getTypedArrayFromDType:()=>ew,hasEncodingLoss:()=>HG,hexToLong:()=>gl,indexToLoc:()=>XG,inferDtype:()=>Ei,inferFromImplicitShape:()=>GG,isBoolean:()=>N0,isFunction:()=>qs,isInt:()=>Ka,isNumber:()=>T0,isPromise:()=>Eu,isScalarShape:()=>BG,isString:()=>zo,isTypedArray:()=>Pt,isValidDtype:()=>rw,locToIndex:()=>jG,makeOnesTypedArray:()=>ml,makeZerosNestedTypedArray:()=>qG,makeZerosTypedArray:()=>Gp,nearestDivisor:()=>Up,nearestLargerEven:()=>PG,now:()=>Mu,parseAxisParam:()=>_i,randUniform:()=>MG,repeatedTry:()=>UG,rightPad:()=>_u,shuffle:()=>k0,shuffleCombo:()=>FG,sizeFromShape:()=>ze,sizeToSquarishShape:()=>VG,squeezeShape:()=>JC,sum:()=>OG,swap:()=>jm,tanh:()=>zG,toNestedArray:()=>Tu,toTypedArray:()=>Zp});function Qm(r){return r instanceof Float32Array||r instanceof Int32Array||r instanceof Uint8Array||r instanceof Uint8ClampedArray}var mw=zp(U0());var Ou=mw.default||mw;function gl(r){return Ou.fromString(r,!0,16)}var H0=gl("c3a5c85c97cb3127"),Pu=gl("b492b66fbe98f273"),Cr=gl("9ae16a3b2f90404f");function lw(r){return r.xor(r.shru(47))}function K0(r,e,t){let o=r.slice(e,e+t);return Ou.fromBytes(Array.from(o),!0,!0)}function wt(r,e){return K0(r,e,8)}function G0(r,e){return K0(r,e,4)}function Yt(r,e){return e===0?r:r.shru(e).or(r.shl(64-e))}function Zi(r,e,t=gl("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 o4(r,e,t,o,n,s){n=n.add(r),s=Yt(s.add(n).add(o),21);let a=n;return n=n.add(e),n=n.add(t),s=s.add(Yt(n,44)),[n.add(o),s.add(a)]}function Jm(r,e,t,o){return o4(wt(r,e),wt(r,e+8),wt(r,e+16),wt(r,e+24),t,o)}function n4(r,e=r.length){if(e>=8){let t=Cr.add(e*2),o=wt(r,0).add(Cr),n=wt(r,e-8),s=Yt(n,37).mul(t).add(o),a=Yt(o,25).add(n).mul(t);return Zi(s,a,t)}if(e>=4){let t=Cr.add(e*2),o=G0(r,0);return Zi(o.shl(3).add(e),G0(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 lw(Cr.mul(s).xor(H0.mul(a))).mul(Cr)}return Cr}function s4(r,e=r.length){let t=Cr.add(e*2),o=wt(r,0).mul(Pu),n=wt(r,8),s=wt(r,e-8).mul(t),a=wt(r,e-16).mul(Cr);return Zi(Yt(o.add(n),43).add(Yt(s,30)).add(a),o.add(Yt(n.add(Cr),18)).add(s),t)}function a4(r,e=r.length){let t=Cr.add(e*2),o=wt(r,0).mul(Cr),n=wt(r,8),s=wt(r,e-8).mul(t),a=wt(r,e-16).mul(Cr),i=Yt(o.add(n),43).add(Yt(s,30)).add(a),p=Zi(i,o.add(Yt(n.add(Cr),18)).add(s),t),u=wt(r,16).mul(t),c=wt(r,24),l=i.add(wt(r,e-32)).mul(t),m=p.add(wt(r,e-24)).mul(t);return Zi(Yt(u.add(c),43).add(Yt(l,30)).add(m),u.add(Yt(c.add(o),18)).add(l),t)}function i4(r,e=r.length){let t=Ou.fromNumber(81,!0);if(e<=32)return e<=16?n4(r,e):s4(r,e);if(e<=64)return a4(r,e);let o=t,n=t.mul(Pu).add(113),s=lw(n.mul(Cr).add(113)).mul(Cr),a=[Ou.UZERO,Ou.UZERO],i=[Ou.UZERO,Ou.UZERO];o=o.mul(Cr).add(wt(r,0));let p=0,u=(e-1>>6)*64,c=u+(e-1&63)-63;do o=Yt(o.add(n).add(a[0]).add(wt(r,p+8)),37).mul(Pu),n=Yt(n.add(a[1]).add(wt(r,p+48)),42).mul(Pu),o=o.xor(i[1]),n=n.add(a[0]).add(wt(r,p+40)),s=Yt(s.add(i[0]),33).mul(Pu),a=Jm(r,p,a[1].mul(Pu),o.add(i[0])),i=Jm(r,p+32,s.add(i[1]),n.add(wt(r,p+16))),[s,o]=[o,s],p+=64;while(p!==u);let l=Pu.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=Yt(o.add(n).add(a[0]).add(wt(r,p+8)),37).mul(l),n=Yt(n.add(a[1]).add(wt(r,p+48)),42).mul(l),o=o.xor(i[1].mul(9)),n=n.add(a[0].mul(9).add(wt(r,p+40))),s=Yt(s.add(i[0]),33).mul(l),a=Jm(r,p,a[1].mul(l),o.add(i[0])),i=Jm(r,p+32,s.add(i[1]),n.add(wt(r,p+16))),[s,o]=[o,s],Zi(Zi(a[0],i[0],l).add(lw(n).mul(H0)).add(s),Zi(a[1],i[1],l).add(o),l)}function u4(r,e){return e==="string"?Ji(r):Zp([r],e)}function p4(r,e){return r instanceof Float32Array&&e==="float32"||r instanceof Int32Array&&e==="int32"||r instanceof Uint8Array&&e==="bool"}function Zp(r,e){if(e==="string")throw new Error("Cannot convert a string[] to a TypedArray");if(Array.isArray(r)&&(r=Fs(r)),A().getBool("DEBUG")&&tw(r,e),p4(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=Mu();if(this.backendTimer.timerAvailable())a=this.backendTimer.time(s);else{s();for(let u of n)u.dataSync();a=Promise.resolve({kernelMs:Mu()-i})}if(A().getBool("CHECK_COMPUTATION_FOR_ERRORS"))for(let u=0;u{l4(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 l4(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 q0(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(!br(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 X0=20,xl=3,fw=7;function Y0(r,e,t,o){let n=js(e),s=m4(r,e,t,n),a=e.length,i=td(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||B,j=u.printErr||z;Object.assign(u,d),d=null,u.arguments&&(f=u.arguments),u.thisProgram&&(h=u.thisProgram),u.quit&&(g=u.quit);var q=4,Y=Atomics.load,J=Atomics.store,re=Atomics.compareExchange,ne;u.wasmBinary&&(ne=u.wasmBinary);var ee=u.noExitRuntime||!0;typeof WebAssembly!="object"&&vu("no native wasm support detected");var oe,ie,le=!1,be;function _e(F,V){F||vu(V)}var ve=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):void 0;function Fe(F,V,ue){V>>>=0;for(var $e=V+ue,Be=V;F[Be]&&!(Be>=$e);)++Be;if(Be-V>16&&F.buffer&&ve)return ve.decode(F.buffer instanceof SharedArrayBuffer?F.slice(V,Be):F.subarray(V,Be));for(var Le="";V>10,56320|so&1023)}}return Le}function Pe(F,V){return F>>>=0,F?Fe(o(),F,V):""}function st(F,V,ue,$e){if(ue>>>=0,!($e>0))return 0;for(var Be=ue,Le=ue+$e-1,ge=0;ge=55296&&Ne<=57343){var Ft=F.charCodeAt(++ge);Ne=65536+((Ne&1023)<<10)|Ft&1023}if(Ne<=127){if(ue>=Le)break;V[ue++>>>0]=Ne}else if(Ne<=2047){if(ue+1>=Le)break;V[ue++>>>0]=192|Ne>>6,V[ue++>>>0]=128|Ne&63}else if(Ne<=65535){if(ue+2>=Le)break;V[ue++>>>0]=224|Ne>>12,V[ue++>>>0]=128|Ne>>6&63,V[ue++>>>0]=128|Ne&63}else{if(ue+3>=Le)break;V[ue++>>>0]=240|Ne>>18,V[ue++>>>0]=128|Ne>>12&63,V[ue++>>>0]=128|Ne>>6&63,V[ue++>>>0]=128|Ne&63}}return V[ue>>>0]=0,ue-Be}function ct(F,V,ue){return st(F,o(),V,ue)}var He,lt,it,ht,gt,Lr,Mt,to,rr;S&&(He=u.buffer);function Tt(F){He=F,u.HEAP8=lt=new Int8Array(F),u.HEAP16=ht=new Int16Array(F),u.HEAP32=Lr=new Int32Array(F),u.HEAPU8=it=new Uint8Array(F),u.HEAPU16=gt=new Uint16Array(F),u.HEAPU32=Mt=new Uint32Array(F),u.HEAPF32=to=new Float32Array(F),u.HEAPF64=rr=new Float64Array(F)}var or=u.INITIAL_MEMORY||16777216;if(S)oe=u.wasmMemory,He=u.buffer;else if(u.wasmMemory)oe=u.wasmMemory;else if(oe=new WebAssembly.Memory({initial:or/65536,maximum:65536,shared:!0}),!(oe.buffer instanceof SharedArrayBuffer))throw j("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&&j("(on node you may need: --experimental-wasm-threads --experimental-wasm-bulk-memory and/or recent version)"),Error("bad memory");oe&&(He=oe.buffer),or=He.byteLength,Tt(He);var nr,ro=[],oo=[],fr=[],Va=!1;function Lo(){return ee}function Ks(){if(u.preRun)for(typeof u.preRun=="function"&&(u.preRun=[u.preRun]);u.preRun.length;)ol(u.preRun.shift());al(ro)}function Xt(){Va=!0,!S&&al(oo)}function Wa(){if(!S){if(u.postRun)for(typeof u.postRun=="function"&&(u.postRun=[u.postRun]);u.postRun.length;)d0(u.postRun.shift());al(fr)}}function ol(F){ro.unshift(F)}function nl(F){oo.unshift(F)}function d0(F){fr.unshift(F)}var ki=0,Ap=null,Ua=null;function Cy(F){ki++,u.monitorRunDependencies&&u.monitorRunDependencies(ki)}function wm(F){if(ki--,u.monitorRunDependencies&&u.monitorRunDependencies(ki),ki==0&&(Ap!==null&&(clearInterval(Ap),Ap=null),Ua)){var V=Ua;Ua=null,V()}}function vu(F){u.onAbort&&u.onAbort(F),F="Aborted("+F+")",j(F),le=!0,be=1,F+=". Build with -sASSERTIONS for more info.";var V=new WebAssembly.RuntimeError(F);throw l(V),V}var wy="data:application/octet-stream;base64,";function Sm(F){return F.startsWith(wy)}function Fp(F){return F.startsWith("file://")}var hr;hr="tfjs-backend-wasm-threaded-simd.wasm",Sm(hr)||(hr=_(hr));function Im(F){try{if(F==hr&&ne)return new Uint8Array(ne);if(D)return D(F);throw"both async and sync fetching of the wasm failed"}catch(V){vu(V)}}function Sy(){if(!ne&&(x||b)){if(typeof fetch=="function"&&!Fp(hr))return fetch(hr,{credentials:"same-origin"}).then(function(F){if(!F.ok)throw"failed to load wasm binary file at '"+hr+"'";return F.arrayBuffer()}).catch(function(){return Im(hr)});if(R)return new Promise(function(F,V){R(hr,function(ue){F(new Uint8Array(ue))},V)})}return Promise.resolve().then(function(){return Im(hr)})}function Iy(){var F={env:Om,wasi_snapshot_preview1:Om};function V(ge,Ne){var Ft=ge.exports;if(u.asm=Ft,Dy(u.asm._emscripten_tls_init),nr=u.asm.__indirect_function_table,nl(u.asm.__wasm_call_ctors),ie=Ne,!S){var so=Me.unusedWorkers.length;Me.unusedWorkers.forEach(function(Ha){Me.loadWasmModuleToWorker(Ha,function(){--so||wm("wasm-instantiate")})})}}S||Cy("wasm-instantiate");function ue(ge){V(ge.instance,ge.module)}function $e(ge){return Sy().then(function(Ne){return WebAssembly.instantiate(Ne,F)}).then(function(Ne){return Ne}).then(ge,function(Ne){j("failed to asynchronously prepare wasm: "+Ne),vu(Ne)})}function Be(){return!ne&&typeof WebAssembly.instantiateStreaming=="function"&&!Sm(hr)&&!Fp(hr)&&!C&&typeof fetch=="function"?fetch(hr,{credentials:"same-origin"}).then(function(ge){var Ne=WebAssembly.instantiateStreaming(ge,F);return Ne.then(ue,function(Ft){return j("wasm streaming compile failed: "+Ft),j("falling back to ArrayBuffer instantiation"),$e(ue)})}):$e(ue)}if(u.instantiateWasm)try{var Le=u.instantiateWasm(F,V);return Le}catch(ge){j("Module.instantiateWasm callback failed with error: "+ge),l(ge)}return Be().catch(l),{}}var f0,h0,vm={};function ku(F){this.name="ExitStatus",this.message="Program terminated with exit("+F+")",this.status=F}function vy(F){var V=Me.pthreads[F];delete Me.pthreads[F],V.terminate(),jC(F),Me.runningWorkers.splice(Me.runningWorkers.indexOf(V),1),V.pthread_ptr=0}function ky(F){var V=Me.pthreads[F];V.postMessage({cmd:"cancel"})}function sl(F){var V=Me.pthreads[F];_e(V),Me.returnWorkerToPool(V)}function Ny(F){var V=Me.getNewWorker();if(!V)return 6;Me.runningWorkers.push(V),Me.pthreads[F.pthread_ptr]=V,V.pthread_ptr=F.pthread_ptr;var ue={cmd:"run",start_routine:F.startRoutine,arg:F.arg,pthread_ptr:F.pthread_ptr};return V.runPthread=()=>{C&&V.ref(),V.postMessage(ue,F.transferList),delete V.runPthread},V.loaded&&V.runPthread(),0}var km={varargs:void 0,get:function(){km.varargs+=4;var F=s()[km.varargs-4>>>2];return F},getStr:function(F){var V=Pe(F);return V}};function Nm(F){if(S)return Ni(1,1,F);be=F,Lo()||(Me.terminateAllThreads(),u.onExit&&u.onExit(F),le=!0),g(F,new ku(F))}function Ty(F,V){if(be=F,!V&&S)throw _m(F),"unwind";Nm(F)}var Tm=Ty;function _y(F){if(F instanceof ku||F=="unwind")return be;g(1,F)}var Me={unusedWorkers:[],runningWorkers:[],tlsInitFunctions:[],pthreads:{},init:function(){S?Me.initWorker():Me.initMainThread()},initMainThread:function(){for(var F=8;F--;)Me.allocateUnusedWorker()},initWorker:function(){ee=!1},setExitStatus:function(F){be=F},terminateAllThreads:function(){for(var F of Object.values(Me.pthreads))Me.returnWorkerToPool(F);for(var F of Me.unusedWorkers)F.terminate();Me.unusedWorkers=[]},returnWorkerToPool:function(F){var V=F.pthread_ptr;delete Me.pthreads[V],Me.unusedWorkers.push(F),Me.runningWorkers.splice(Me.runningWorkers.indexOf(F),1),F.pthread_ptr=0,C&&F.unref(),jC(V)},receiveObjectTransfer:function(F){},threadInitTLS:function(){Me.tlsInitFunctions.forEach(F=>F())},loadWasmModuleToWorker:function(F,V){F.onmessage=Le=>{var ge=Le.data,Ne=ge.cmd;if(F.pthread_ptr&&(Me.currentProxiedOperationCallerThread=F.pthread_ptr),ge.targetThread&&ge.targetThread!=Wm()){var Ft=Me.pthreads[ge.targetThread];Ft?Ft.postMessage(ge,ge.transferList):j('Internal error! Worker sent a message "'+Ne+'" to target pthread '+ge.targetThread+", but that thread no longer exists!"),Me.currentProxiedOperationCallerThread=void 0;return}Ne==="processProxyingQueue"?il(ge.queue):Ne==="spawnThread"?Ny(ge):Ne==="cleanupThread"?sl(ge.thread):Ne==="killThread"?vy(ge.thread):Ne==="cancelThread"?ky(ge.thread):Ne==="loaded"?(F.loaded=!0,C&&F.unref(),V&&V(F),F.runPthread&&F.runPthread()):Ne==="print"?U("Thread "+ge.threadId+": "+ge.text):Ne==="printErr"?j("Thread "+ge.threadId+": "+ge.text):Ne==="alert"?alert("Thread "+ge.threadId+": "+ge.text):ge.target==="setimmediate"?F.postMessage(ge):Ne==="callHandler"?u[ge.handler](...ge.args):Ne&&j("worker sent an unknown command "+Ne),Me.currentProxiedOperationCallerThread=void 0},F.onerror=Le=>{var ge="worker sent an error!";throw j(ge+" "+Le.filename+":"+Le.lineno+": "+Le.message),Le},C&&(F.on("message",function(Le){F.onmessage({data:Le})}),F.on("error",function(Le){F.onerror(Le)}),F.on("detachedExit",function(){}));var ue=[],$e=["onExit","onAbort","print","printErr"];for(var Be of $e)u.hasOwnProperty(Be)&&ue.push(Be);F.postMessage({cmd:"load",handlers:ue,urlOrBlob:u.mainScriptUrlOrBlob||r,wasmMemory:oe,wasmModule:ie})},allocateUnusedWorker:function(){var F,V=_("tfjs-backend-wasm-threaded-simd.worker.js");F=new Worker(V),Me.unusedWorkers.push(F)},getNewWorker:function(){return Me.unusedWorkers.length==0&&(Me.allocateUnusedWorker(),Me.loadWasmModuleToWorker(Me.unusedWorkers[0])),Me.unusedWorkers.pop()}};u.PThread=Me;function al(F){for(;F.length>0;)F.shift()(u)}function Ey(){var F=Wm(),V=s()[F+52>>>2],ue=s()[F+56>>>2],$e=V-ue;w0(V,$e),Um(V)}u.establishStackSpace=Ey;function _m(F){if(S)return Ni(2,0,F);try{Tm(F)}catch(V){_y(V)}}var Pp=[];function $y(F){var V=Pp[F];return V||(F>=Pp.length&&(Pp.length=F+1),Pp[F]=V=nr.get(F)),V}function Ry(F,V){var ue=$y(F)(V);Lo()?Me.setExitStatus(ue):C0(ue)}u.invokeEntryPoint=Ry;function Dy(F){Me.tlsInitFunctions.push(F)}function Ay(F){x0(F,!b,1,!x),Me.threadInitTLS()}function Fy(F){S?postMessage({cmd:"cleanupThread",thread:F}):sl(F)}function Em(F,V,ue,$e){return S?Ni(3,1,F,V,ue,$e):$m(F,V,ue,$e)}function $m(F,V,ue,$e){if(typeof SharedArrayBuffer=="undefined")return j("Current environment does not support SharedArrayBuffer, pthreads are not available!"),6;var Be=[],Le=0;if(S&&(Be.length===0||Le))return Em(F,V,ue,$e);if(Le)return Le;var ge={startRoutine:ue,pthread_ptr:F,arg:$e,transferList:Be};return S?(ge.cmd="spawnThread",postMessage(ge,Be),0):Ny(ge)}function Py(){return 65536}var Oy=!0;function My(){return Oy}function il(F){Atomics.store(s(),F>>2,1),Wm()&&b0(F),Atomics.compareExchange(s(),F>>2,1,0)}u.executeNotifiedProxyingQueue=il;function Ly(F,V,ue,$e){if(F==V)setTimeout(()=>il($e));else if(S)postMessage({targetThread:F,cmd:"processProxyingQueue",queue:$e});else{var Be=Me.pthreads[F];if(!Be)return;Be.postMessage({cmd:"processProxyingQueue",queue:$e})}return 1}function By(F,V,ue){return-1}function zy(){vu("")}function Nu(F){Nu.shown||(Nu.shown={}),Nu.shown[F]||(Nu.shown[F]=1,C&&(F="warning: "+F),j(F))}function Vy(){C||b||Nu("Blocking on the main thread is very dangerous, see https://emscripten.org/docs/porting/pthreads.html#blocking-on-the-main-browser-thread")}function Wy(){return Date.now()}function Rm(){return 4294901760}function Uy(){return Rm()}var ul;C?ul=()=>{var F=process.hrtime();return F[0]*1e3+F[1]/1e6}:ul=()=>performance.timeOrigin+performance.now();function Gy(F,V,ue){o().copyWithin(F>>>0,V>>>0,V+ue>>>0)}function Hy(){return C?zB().cpus().length:navigator.hardwareConcurrency}function Ky(F){var V=XC(),ue=F();return Um(V),ue}function Ni(F,V){var ue=arguments.length-2,$e=arguments;return Ky(()=>{for(var Be=ue,Le=Gm(Be*8),ge=Le>>3,Ne=0;Ne>>0]=Ft}return y0(F,Be,Le,V)})}var pl=[];function qy(F,V,ue){pl.length=V;for(var $e=ue>>3,Be=0;Be>>0];var Le=F<0,ge=Le?vm[-F-1]:rb[F];return ge.apply(null,pl)}function jy(F){try{return oe.grow(F-He.byteLength+65535>>>16),Tt(oe.buffer),1}catch(V){}}function Xy(F){var V=o().length;if(F=F>>>0,F<=V)return!1;var ue=Rm();if(F>ue)return!1;let $e=(Ft,so)=>Ft+(so-Ft%so)%so;for(var Be=1;Be<=4;Be*=2){var Le=V*(1+.2/Be);Le=Math.min(Le,F+100663296);var ge=Math.min(ue,$e(Math.max(F,Le),65536)),Ne=jy(ge);if(Ne)return!0}return!1}function Yy(){throw"unwind"}function Dm(F){return S?Ni(4,1,F):52}function Am(F,V,ue,$e,Be){return S?Ni(5,1,F,V,ue,$e,Be):70}var Qy=[null,[],[]];function Zy(F,V){var ue=Qy[F];V===0||V===10?((F===1?U:j)(Fe(ue,0)),ue.length=0):ue.push(V)}function Fm(F,V,ue,$e){if(S)return Ni(6,1,F,V,ue,$e);for(var Be=0,Le=0;Le>>2],Ne=a()[V+4>>>2];V+=8;for(var Ft=0;Ft>>0]);Be+=Ne}return a()[$e>>>2]=Be,0}function Pm(F){var V=u["_"+F];return V}function Jy(F,V){t().set(F,V>>>0)}function eb(F,V,ue,$e,Be){var Le={string:Br=>{var Bp=0;if(Br!=null&&Br!==0){var v0=(Br.length<<2)+1;Bp=Gm(v0),ct(Br,Bp,v0)}return Bp},array:Br=>{var Bp=Gm(Br.length);return Jy(Br,Bp),Bp}};function ge(Br){return V==="string"?Pe(Br):V==="boolean"?!!Br:Br}var Ne=Pm(F),Ft=[],so=0;if($e)for(var Ha=0;Ha<$e.length;Ha++){var I0=Le[ue[Ha]];I0?(so===0&&(so=XC()),Ft[Ha]=I0($e[Ha])):Ft[Ha]=$e[Ha]}var YC=Ne.apply(null,Ft);function TG(Br){return so!==0&&Um(so),ge(Br)}return YC=TG(YC),YC}function tb(F,V,ue,$e){ue=ue||[];var Be=ue.every(ge=>ge==="number"||ge==="boolean"),Le=V!=="string";return Le&&Be&&!$e?Pm(F):function(){return eb(F,V,ue,arguments,$e)}}Me.init();var rb=[null,Nm,_m,Em,Dm,Am,Fm],Om={__emscripten_init_main_thread_js:Ay,__emscripten_thread_cleanup:Fy,__pthread_create_js:$m,_emscripten_default_pthread_stack_size:Py,_emscripten_get_now_is_monotonic:My,_emscripten_notify_task_queue:Ly,_emscripten_set_offscreencanvas_size:By,abort:zy,emscripten_check_blocking_allowed:Vy,emscripten_date_now:Wy,emscripten_get_heap_max:Uy,emscripten_get_now:ul,emscripten_memcpy_big:Gy,emscripten_num_logical_cores:Hy,emscripten_receive_on_main_thread_js:qy,emscripten_resize_heap:Xy,emscripten_unwind_to_js_event_loop:Yy,exit:Tm,fd_close:Dm,fd_seek:Am,fd_write:Fm,memory:oe||u.wasmMemory},g0=Iy(),ob=u.___wasm_call_ctors=function(){return(ob=u.___wasm_call_ctors=u.asm.__wasm_call_ctors).apply(null,arguments)},nb=u._init=function(){return(nb=u._init=u.asm.init).apply(null,arguments)},sb=u._init_with_threads_count=function(){return(sb=u._init_with_threads_count=u.asm.init_with_threads_count).apply(null,arguments)},ab=u._get_threads_count=function(){return(ab=u._get_threads_count=u.asm.get_threads_count).apply(null,arguments)},ib=u._register_tensor=function(){return(ib=u._register_tensor=u.asm.register_tensor).apply(null,arguments)},ub=u._dispose_data=function(){return(ub=u._dispose_data=u.asm.dispose_data).apply(null,arguments)},pb=u._dispose=function(){return(pb=u._dispose=u.asm.dispose).apply(null,arguments)},cb=u._Abs=function(){return(cb=u._Abs=u.asm.Abs).apply(null,arguments)},lb=u._Acos=function(){return(lb=u._Acos=u.asm.Acos).apply(null,arguments)},mb=u._Acosh=function(){return(mb=u._Acosh=u.asm.Acosh).apply(null,arguments)},db=u._Add=function(){return(db=u._Add=u.asm.Add).apply(null,arguments)},fb=u._AddN=function(){return(fb=u._AddN=u.asm.AddN).apply(null,arguments)},hb=u._All=function(){return(hb=u._All=u.asm.All).apply(null,arguments)},gb=u._Any=function(){return(gb=u._Any=u.asm.Any).apply(null,arguments)},xb=u._ArgMax=function(){return(xb=u._ArgMax=u.asm.ArgMax).apply(null,arguments)},yb=u._ArgMin=function(){return(yb=u._ArgMin=u.asm.ArgMin).apply(null,arguments)},bb=u._Asin=function(){return(bb=u._Asin=u.asm.Asin).apply(null,arguments)},Cb=u._Asinh=function(){return(Cb=u._Asinh=u.asm.Asinh).apply(null,arguments)},wb=u._Atan=function(){return(wb=u._Atan=u.asm.Atan).apply(null,arguments)},Sb=u._Atan2=function(){return(Sb=u._Atan2=u.asm.Atan2).apply(null,arguments)},Ib=u._Atanh=function(){return(Ib=u._Atanh=u.asm.Atanh).apply(null,arguments)},vb=u._AvgPool=function(){return(vb=u._AvgPool=u.asm.AvgPool).apply(null,arguments)},kb=u._AvgPool3D=function(){return(kb=u._AvgPool3D=u.asm.AvgPool3D).apply(null,arguments)},Nb=u._AvgPool3DGrad=function(){return(Nb=u._AvgPool3DGrad=u.asm.AvgPool3DGrad).apply(null,arguments)},Tb=u._AvgPoolGrad=function(){return(Tb=u._AvgPoolGrad=u.asm.AvgPoolGrad).apply(null,arguments)},_b=u._BatchMatMul=function(){return(_b=u._BatchMatMul=u.asm.BatchMatMul).apply(null,arguments)},Eb=u._Bincount=function(){return(Eb=u._Bincount=u.asm.Bincount).apply(null,arguments)},$b=u._BitwiseAnd=function(){return($b=u._BitwiseAnd=u.asm.BitwiseAnd).apply(null,arguments)},Rb=u._Ceil=function(){return(Rb=u._Ceil=u.asm.Ceil).apply(null,arguments)},Db=u._ClipByValue=function(){return(Db=u._ClipByValue=u.asm.ClipByValue).apply(null,arguments)},Ab=u._Conv2D=function(){return(Ab=u._Conv2D=u.asm.Conv2D).apply(null,arguments)},Fb=u._Conv2DBackpropInput=function(){return(Fb=u._Conv2DBackpropInput=u.asm.Conv2DBackpropInput).apply(null,arguments)},Pb=u._Conv3D=function(){return(Pb=u._Conv3D=u.asm.Conv3D).apply(null,arguments)},Ob=u._Conv3DBackpropFilterV2=function(){return(Ob=u._Conv3DBackpropFilterV2=u.asm.Conv3DBackpropFilterV2).apply(null,arguments)},Mb=u._Conv3DBackpropInputV2=function(){return(Mb=u._Conv3DBackpropInputV2=u.asm.Conv3DBackpropInputV2).apply(null,arguments)},Lb=u._Cos=function(){return(Lb=u._Cos=u.asm.Cos).apply(null,arguments)},Bb=u._Cosh=function(){return(Bb=u._Cosh=u.asm.Cosh).apply(null,arguments)},zb=u._CropAndResize=function(){return(zb=u._CropAndResize=u.asm.CropAndResize).apply(null,arguments)},Vb=u._Cumprod=function(){return(Vb=u._Cumprod=u.asm.Cumprod).apply(null,arguments)},Wb=u._Cumsum=function(){return(Wb=u._Cumsum=u.asm.Cumsum).apply(null,arguments)},Ub=u._DenseBincount=function(){return(Ub=u._DenseBincount=u.asm.DenseBincount).apply(null,arguments)},Gb=u._DepthToSpace=function(){return(Gb=u._DepthToSpace=u.asm.DepthToSpace).apply(null,arguments)},Hb=u._DepthwiseConv2dNative=function(){return(Hb=u._DepthwiseConv2dNative=u.asm.DepthwiseConv2dNative).apply(null,arguments)},Kb=u._Diag=function(){return(Kb=u._Diag=u.asm.Diag).apply(null,arguments)},qb=u._Dilation2D=function(){return(qb=u._Dilation2D=u.asm.Dilation2D).apply(null,arguments)},jb=u._Dilation2DBackpropFilter=function(){return(jb=u._Dilation2DBackpropFilter=u.asm.Dilation2DBackpropFilter).apply(null,arguments)},Xb=u._Dilation2DBackpropInput=function(){return(Xb=u._Dilation2DBackpropInput=u.asm.Dilation2DBackpropInput).apply(null,arguments)},Yb=u._Elu=function(){return(Yb=u._Elu=u.asm.Elu).apply(null,arguments)},Qb=u._EluGrad=function(){return(Qb=u._EluGrad=u.asm.EluGrad).apply(null,arguments)},Zb=u._Equal=function(){return(Zb=u._Equal=u.asm.Equal).apply(null,arguments)},Jb=u._Erf=function(){return(Jb=u._Erf=u.asm.Erf).apply(null,arguments)},eC=u._Exp=function(){return(eC=u._Exp=u.asm.Exp).apply(null,arguments)},tC=u._Expm1=function(){return(tC=u._Expm1=u.asm.Expm1).apply(null,arguments)},rC=u._FlipLeftRight=function(){return(rC=u._FlipLeftRight=u.asm.FlipLeftRight).apply(null,arguments)},oC=u._Floor=function(){return(oC=u._Floor=u.asm.Floor).apply(null,arguments)},nC=u._FloorDiv=function(){return(nC=u._FloorDiv=u.asm.FloorDiv).apply(null,arguments)},sC=u._FusedBatchNorm=function(){return(sC=u._FusedBatchNorm=u.asm.FusedBatchNorm).apply(null,arguments)},aC=u._FusedConv2D=function(){return(aC=u._FusedConv2D=u.asm.FusedConv2D).apply(null,arguments)},iC=u._FusedDepthwiseConv2D=function(){return(iC=u._FusedDepthwiseConv2D=u.asm.FusedDepthwiseConv2D).apply(null,arguments)},uC=u._Gather=function(){return(uC=u._Gather=u.asm.Gather).apply(null,arguments)},pC=u._GatherNd=function(){return(pC=u._GatherNd=u.asm.GatherNd).apply(null,arguments)},cC=u._Greater=function(){return(cC=u._Greater=u.asm.Greater).apply(null,arguments)},lC=u._GreaterEqual=function(){return(lC=u._GreaterEqual=u.asm.GreaterEqual).apply(null,arguments)},mC=u._IsFinite=function(){return(mC=u._IsFinite=u.asm.IsFinite).apply(null,arguments)},dC=u._IsInf=function(){return(dC=u._IsInf=u.asm.IsInf).apply(null,arguments)},fC=u._IsNan=function(){return(fC=u._IsNan=u.asm.IsNan).apply(null,arguments)},hC=u._LRN=function(){return(hC=u._LRN=u.asm.LRN).apply(null,arguments)},gC=u._LRNGrad=function(){return(gC=u._LRNGrad=u.asm.LRNGrad).apply(null,arguments)},xC=u._LeakyRelu=function(){return(xC=u._LeakyRelu=u.asm.LeakyRelu).apply(null,arguments)},yC=u._Less=function(){return(yC=u._Less=u.asm.Less).apply(null,arguments)},bC=u._LessEqual=function(){return(bC=u._LessEqual=u.asm.LessEqual).apply(null,arguments)},CC=u._LinSpace=function(){return(CC=u._LinSpace=u.asm.LinSpace).apply(null,arguments)},wC=u._Log=function(){return(wC=u._Log=u.asm.Log).apply(null,arguments)},SC=u._Log1p=function(){return(SC=u._Log1p=u.asm.Log1p).apply(null,arguments)},IC=u._LogicalAnd=function(){return(IC=u._LogicalAnd=u.asm.LogicalAnd).apply(null,arguments)},vC=u._LogicalNot=function(){return(vC=u._LogicalNot=u.asm.LogicalNot).apply(null,arguments)},kC=u._LogicalOr=function(){return(kC=u._LogicalOr=u.asm.LogicalOr).apply(null,arguments)},NC=u._LogicalXor=function(){return(NC=u._LogicalXor=u.asm.LogicalXor).apply(null,arguments)},TC=u._Max=function(){return(TC=u._Max=u.asm.Max).apply(null,arguments)},_C=u._MaxPool=function(){return(_C=u._MaxPool=u.asm.MaxPool).apply(null,arguments)},EC=u._MaxPool3D=function(){return(EC=u._MaxPool3D=u.asm.MaxPool3D).apply(null,arguments)},$C=u._MaxPool3DGrad=function(){return($C=u._MaxPool3DGrad=u.asm.MaxPool3DGrad).apply(null,arguments)},RC=u._MaxPoolGrad=function(){return(RC=u._MaxPoolGrad=u.asm.MaxPoolGrad).apply(null,arguments)},DC=u._MaxPoolWithArgmax=function(){return(DC=u._MaxPoolWithArgmax=u.asm.MaxPoolWithArgmax).apply(null,arguments)},AC=u._Maximum=function(){return(AC=u._Maximum=u.asm.Maximum).apply(null,arguments)},FC=u._Mean=function(){return(FC=u._Mean=u.asm.Mean).apply(null,arguments)},PC=u._Min=function(){return(PC=u._Min=u.asm.Min).apply(null,arguments)},OC=u._Minimum=function(){return(OC=u._Minimum=u.asm.Minimum).apply(null,arguments)},MC=u._MirrorPad=function(){return(MC=u._MirrorPad=u.asm.MirrorPad).apply(null,arguments)},LC=u._Mod=function(){return(LC=u._Mod=u.asm.Mod).apply(null,arguments)},BC=u._Multinomial=function(){return(BC=u._Multinomial=u.asm.Multinomial).apply(null,arguments)},zC=u._Multiply=function(){return(zC=u._Multiply=u.asm.Multiply).apply(null,arguments)},VC=u._Neg=function(){return(VC=u._Neg=u.asm.Neg).apply(null,arguments)},WC=u._NonMaxSuppressionV3=function(){return(WC=u._NonMaxSuppressionV3=u.asm.NonMaxSuppressionV3).apply(null,arguments)},UC=u._NonMaxSuppressionV4=function(){return(UC=u._NonMaxSuppressionV4=u.asm.NonMaxSuppressionV4).apply(null,arguments)},Mm=u._NonMaxSuppressionV5=function(){return(Mm=u._NonMaxSuppressionV5=u.asm.NonMaxSuppressionV5).apply(null,arguments)},Lm=u._NotEqual=function(){return(Lm=u._NotEqual=u.asm.NotEqual).apply(null,arguments)},cl=u._OneHot=function(){return(cl=u._OneHot=u.asm.OneHot).apply(null,arguments)},GC=u._PadV2=function(){return(GC=u._PadV2=u.asm.PadV2).apply(null,arguments)},HC=u._Pow=function(){return(HC=u._Pow=u.asm.Pow).apply(null,arguments)},Op=u._Prelu=function(){return(Op=u._Prelu=u.asm.Prelu).apply(null,arguments)},Bm=u._Prod=function(){return(Bm=u._Prod=u.asm.Prod).apply(null,arguments)},Mp=u._RealDiv=function(){return(Mp=u._RealDiv=u.asm.RealDiv).apply(null,arguments)},Lp=u._Reciprocal=function(){return(Lp=u._Reciprocal=u.asm.Reciprocal).apply(null,arguments)},KC=u._Relu=function(){return(KC=u._Relu=u.asm.Relu).apply(null,arguments)},K=u._Relu6=function(){return(K=u._Relu6=u.asm.Relu6).apply(null,arguments)},ae=u._ResizeBilinear=function(){return(ae=u._ResizeBilinear=u.asm.ResizeBilinear).apply(null,arguments)},Ee=u._ResizeBilinearGrad=function(){return(Ee=u._ResizeBilinearGrad=u.asm.ResizeBilinearGrad).apply(null,arguments)},at=u._ResizeNearestNeighbor=function(){return(at=u._ResizeNearestNeighbor=u.asm.ResizeNearestNeighbor).apply(null,arguments)},_t=u._ResizeNearestNeighborGrad=function(){return(_t=u._ResizeNearestNeighborGrad=u.asm.ResizeNearestNeighborGrad).apply(null,arguments)},Et=u._Reverse=function(){return(Et=u._Reverse=u.asm.Reverse).apply(null,arguments)},Qe=u._RotateWithOffset=function(){return(Qe=u._RotateWithOffset=u.asm.RotateWithOffset).apply(null,arguments)},Ke=u._Round=function(){return(Ke=u._Round=u.asm.Round).apply(null,arguments)},Ut=u._Rsqrt=function(){return(Ut=u._Rsqrt=u.asm.Rsqrt).apply(null,arguments)},no=u._ScatterNd=function(){return(no=u._ScatterNd=u.asm.ScatterNd).apply(null,arguments)},Ga=u._SearchSorted=function(){return(Ga=u._SearchSorted=u.asm.SearchSorted).apply(null,arguments)},zm=u._SelectV2=function(){return(zm=u._SelectV2=u.asm.SelectV2).apply(null,arguments)},ll=u._Selu=function(){return(ll=u._Selu=u.asm.Selu).apply(null,arguments)},qC=u._Sigmoid=function(){return(qC=u._Sigmoid=u.asm.Sigmoid).apply(null,arguments)},yr=u._Sign=function(){return(yr=u._Sign=u.asm.Sign).apply(null,arguments)},Ti=u._Sin=function(){return(Ti=u._Sin=u.asm.Sin).apply(null,arguments)},Vm=u._Sinh=function(){return(Vm=u._Sinh=u.asm.Sinh).apply(null,arguments)},XU=u._Softmax=function(){return(XU=u._Softmax=u.asm.Softmax).apply(null,arguments)},YU=u._Softplus=function(){return(YU=u._Softplus=u.asm.Softplus).apply(null,arguments)},QU=u._SparseFillEmptyRows=function(){return(QU=u._SparseFillEmptyRows=u.asm.SparseFillEmptyRows).apply(null,arguments)},ZU=u._SparseReshape=function(){return(ZU=u._SparseReshape=u.asm.SparseReshape).apply(null,arguments)},JU=u._SparseSegmentReduction=function(){return(JU=u._SparseSegmentReduction=u.asm.SparseSegmentReduction).apply(null,arguments)},eG=u._SparseToDense=function(){return(eG=u._SparseToDense=u.asm.SparseToDense).apply(null,arguments)},tG=u._Sqrt=function(){return(tG=u._Sqrt=u.asm.Sqrt).apply(null,arguments)},rG=u._Square=function(){return(rG=u._Square=u.asm.Square).apply(null,arguments)},oG=u._SquaredDifference=function(){return(oG=u._SquaredDifference=u.asm.SquaredDifference).apply(null,arguments)},nG=u._Step=function(){return(nG=u._Step=u.asm.Step).apply(null,arguments)},sG=u._StridedSlice=function(){return(sG=u._StridedSlice=u.asm.StridedSlice).apply(null,arguments)},aG=u._Sub=function(){return(aG=u._Sub=u.asm.Sub).apply(null,arguments)},iG=u._Sum=function(){return(iG=u._Sum=u.asm.Sum).apply(null,arguments)},uG=u._Tan=function(){return(uG=u._Tan=u.asm.Tan).apply(null,arguments)},pG=u._Tanh=function(){return(pG=u._Tanh=u.asm.Tanh).apply(null,arguments)},cG=u._TensorScatterUpdate=function(){return(cG=u._TensorScatterUpdate=u.asm.TensorScatterUpdate).apply(null,arguments)},lG=u._Tile=function(){return(lG=u._Tile=u.asm.Tile).apply(null,arguments)},mG=u._TopK=function(){return(mG=u._TopK=u.asm.TopK).apply(null,arguments)},dG=u._Transform=function(){return(dG=u._Transform=u.asm.Transform).apply(null,arguments)},fG=u._Transpose=function(){return(fG=u._Transpose=u.asm.Transpose).apply(null,arguments)},hG=u.__FusedMatMul=function(){return(hG=u.__FusedMatMul=u.asm._FusedMatMul).apply(null,arguments)},gG=u._malloc=function(){return(gG=u._malloc=u.asm.malloc).apply(null,arguments)},xG=u._free=function(){return(xG=u._free=u.asm.free).apply(null,arguments)},yG=u.__emscripten_tls_init=function(){return(yG=u.__emscripten_tls_init=u.asm._emscripten_tls_init).apply(null,arguments)},Wm=u._pthread_self=function(){return(Wm=u._pthread_self=u.asm.pthread_self).apply(null,arguments)},bG=u.___errno_location=function(){return(bG=u.___errno_location=u.asm.__errno_location).apply(null,arguments)},x0=u.__emscripten_thread_init=function(){return(x0=u.__emscripten_thread_init=u.asm._emscripten_thread_init).apply(null,arguments)},CG=u.__emscripten_thread_crashed=function(){return(CG=u.__emscripten_thread_crashed=u.asm._emscripten_thread_crashed).apply(null,arguments)},wG=u._emscripten_main_thread_process_queued_calls=function(){return(wG=u._emscripten_main_thread_process_queued_calls=u.asm.emscripten_main_thread_process_queued_calls).apply(null,arguments)},SG=u._emscripten_main_browser_thread_id=function(){return(SG=u._emscripten_main_browser_thread_id=u.asm.emscripten_main_browser_thread_id).apply(null,arguments)},y0=u._emscripten_run_in_main_runtime_thread_js=function(){return(y0=u._emscripten_run_in_main_runtime_thread_js=u.asm.emscripten_run_in_main_runtime_thread_js).apply(null,arguments)},IG=u._emscripten_dispatch_to_thread_=function(){return(IG=u._emscripten_dispatch_to_thread_=u.asm.emscripten_dispatch_to_thread_).apply(null,arguments)},b0=u.__emscripten_proxy_execute_task_queue=function(){return(b0=u.__emscripten_proxy_execute_task_queue=u.asm._emscripten_proxy_execute_task_queue).apply(null,arguments)},jC=u.__emscripten_thread_free_data=function(){return(jC=u.__emscripten_thread_free_data=u.asm._emscripten_thread_free_data).apply(null,arguments)},C0=u.__emscripten_thread_exit=function(){return(C0=u.__emscripten_thread_exit=u.asm._emscripten_thread_exit).apply(null,arguments)},w0=u._emscripten_stack_set_limits=function(){return(w0=u._emscripten_stack_set_limits=u.asm.emscripten_stack_set_limits).apply(null,arguments)},XC=u.stackSave=function(){return(XC=u.stackSave=u.asm.stackSave).apply(null,arguments)},Um=u.stackRestore=function(){return(Um=u.stackRestore=u.asm.stackRestore).apply(null,arguments)},Gm=u.stackAlloc=function(){return(Gm=u.stackAlloc=u.asm.stackAlloc).apply(null,arguments)},vG=u.dynCall_iijjiiii=function(){return(vG=u.dynCall_iijjiiii=u.asm.dynCall_iijjiiii).apply(null,arguments)},kG=u.dynCall_jiji=function(){return(kG=u.dynCall_jiji=u.asm.dynCall_jiji).apply(null,arguments)};u.keepRuntimeAlive=Lo,u.wasmMemory=oe,u.cwrap=tb,u.ExitStatus=ku,u.PThread=Me;var Hm;Ua=function F(){Hm||S0(),Hm||(Ua=F)};function S0(F){if(F=F||f,ki>0)return;if(S){c(u),Xt(),startWorker(u);return}if(Ks(),ki>0)return;function V(){Hm||(Hm=!0,u.calledRun=!0,!le&&(Xt(),c(u),u.onRuntimeInitialized&&u.onRuntimeInitialized(),Wa()))}u.setStatus?(u.setStatus("Running..."),setTimeout(function(){setTimeout(function(){u.setStatus("")},1),V()},1)):V()}if(u.preInit)for(typeof u.preInit=="function"&&(u.preInit=[u.preInit]);u.preInit.length>0;)u.preInit.pop()();S0();var Km;m&&(Km={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 qm;if(typeof WasmBackendModule!="undefined")qm=WasmBackendModule;else if(typeof e!="undefined")qm=e;else throw new Error("Could not find wasm module in post.js");if(Km){var NG=qm._dispose;qm._dispose=function(){NG(),Km.uncaughtException.forEach(function(F){process.removeListener("uncaughtException",F)}),Km.unhandledRejection.forEach(function(F){process.removeListener("unhandledRejection",F)})}}return e.ready}})();typeof Wg=="object"&&typeof Gv=="object"?Gv.exports=Uv:typeof define=="function"&&define.amd?define([],function(){return Uv}):typeof Wg=="object"&&(Wg.WasmBackendModuleThreadedSimd=Uv)});var UB=Kt((e3t,WB)=>{"use strict";WB.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")+"//# sourceURL="+f)},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.startWorker=instance=>{Module=instance;postMessage({"cmd":"loaded"})};self.onmessage=e=>{try{if(e.data.cmd==="load"){Module["wasmModule"]=e.data.wasmModule;for(const handler of e.data.handlers){Module[handler]=function(){postMessage({cmd:"callHandler",handler:handler,args:[...arguments]})}}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)}else if(e.data.cmd==="run"){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 GB=Kt((Ug,Kv)=>{"use strict";var Hv=(()=>{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(K,ae){o=K,n=ae});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=(K,ae)=>{throw ae},c=typeof window=="object",l=typeof importScripts=="function",m=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string",d="";function f(K){return t.locateFile?t.locateFile(K,d):d+K}var h,g,x,b;function C(K){if(K instanceof Ap)return;$("exiting due to exception: "+K)}if(m){var S=Vv(),k=Wv();l?d=k.dirname(d)+"/":d=__dirname+"/",h=(K,ae)=>(K=Ks(K)?new URL(K):k.normalize(K),S.readFileSync(K,ae?void 0:"utf8")),x=K=>{var ae=h(K,!0);return ae.buffer||(ae=new Uint8Array(ae)),ae},g=(K,ae,Ee)=>{K=Ks(K)?new URL(K):k.normalize(K),S.readFile(K,function(at,_t){at?Ee(at):ae(_t.buffer)})},process.argv.length>1&&(p=process.argv[1].replace(/\\/g,"/")),i=process.argv.slice(2),process.on("uncaughtException",function(K){if(!(K instanceof Ap))throw K}),process.on("unhandledRejection",function(K){throw K}),u=(K,ae)=>{if(it())throw process.exitCode=K,ae;C(ae),process.exit(K)},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=K=>{var ae=new XMLHttpRequest;return ae.open("GET",K,!1),ae.send(null),ae.responseText},l&&(x=K=>{var ae=new XMLHttpRequest;return ae.open("GET",K,!1),ae.responseType="arraybuffer",ae.send(null),new Uint8Array(ae.response)}),g=(K,ae,Ee)=>{var at=new XMLHttpRequest;at.open("GET",K,!0),at.responseType="arraybuffer",at.onload=()=>{if(at.status==200||at.status==0&&at.response){ae(at.response);return}Ee()},at.onerror=Ee,at.send(null)},b=K=>document.title=K);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 R=4,D;t.wasmBinary&&(D=t.wasmBinary);var P=t.noExitRuntime||!0;typeof WebAssembly!="object"&&fr("no native wasm support detected");var O,M=!1,L;function B(K,ae){K||fr(ae)}var z=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):void 0;function U(K,ae,Ee){ae>>>=0;for(var at=ae+Ee,_t=ae;K[_t]&&!(_t>=at);)++_t;if(_t-ae>16&&K.buffer&&z)return z.decode(K.subarray(ae,_t));for(var Et="";ae<_t;){var Qe=K[ae++];if(!(Qe&128)){Et+=String.fromCharCode(Qe);continue}var Ke=K[ae++]&63;if((Qe&224)==192){Et+=String.fromCharCode((Qe&31)<<6|Ke);continue}var Ut=K[ae++]&63;if((Qe&240)==224?Qe=(Qe&15)<<12|Ke<<6|Ut:Qe=(Qe&7)<<18|Ke<<12|Ut<<6|K[ae++]&63,Qe<65536)Et+=String.fromCharCode(Qe);else{var no=Qe-65536;Et+=String.fromCharCode(55296|no>>10,56320|no&1023)}}return Et}function j(K,ae){return K>>>=0,K?U(ne,K,ae):""}function q(K,ae,Ee,at){if(Ee>>>=0,!(at>0))return 0;for(var _t=Ee,Et=Ee+at-1,Qe=0;Qe=55296&&Ke<=57343){var Ut=K.charCodeAt(++Qe);Ke=65536+((Ke&1023)<<10)|Ut&1023}if(Ke<=127){if(Ee>=Et)break;ae[Ee++>>>0]=Ke}else if(Ke<=2047){if(Ee+1>=Et)break;ae[Ee++>>>0]=192|Ke>>6,ae[Ee++>>>0]=128|Ke&63}else if(Ke<=65535){if(Ee+2>=Et)break;ae[Ee++>>>0]=224|Ke>>12,ae[Ee++>>>0]=128|Ke>>6&63,ae[Ee++>>>0]=128|Ke&63}else{if(Ee+3>=Et)break;ae[Ee++>>>0]=240|Ke>>18,ae[Ee++>>>0]=128|Ke>>12&63,ae[Ee++>>>0]=128|Ke>>6&63,ae[Ee++>>>0]=128|Ke&63}}return ae[Ee>>>0]=0,Ee-_t}function Y(K,ae,Ee){return q(K,ne,ae,Ee)}var J,re,ne,ee,oe,ie,le,be,_e;function ve(K){J=K,t.HEAP8=re=new Int8Array(K),t.HEAP16=ee=new Int16Array(K),t.HEAP32=ie=new Int32Array(K),t.HEAPU8=ne=new Uint8Array(K),t.HEAPU16=oe=new Uint16Array(K),t.HEAPU32=le=new Uint32Array(K),t.HEAPF32=be=new Float32Array(K),t.HEAPF64=_e=new Float64Array(K)}var Fe=t.INITIAL_MEMORY||16777216,Pe,st=[],ct=[],He=[],lt=!1;function it(){return P}function ht(){if(t.preRun)for(typeof t.preRun=="function"&&(t.preRun=[t.preRun]);t.preRun.length;)Mt(t.preRun.shift());Ua(st)}function gt(){lt=!0,Ua(ct)}function Lr(){if(t.postRun)for(typeof t.postRun=="function"&&(t.postRun=[t.postRun]);t.postRun.length;)rr(t.postRun.shift());Ua(He)}function Mt(K){st.unshift(K)}function to(K){ct.unshift(K)}function rr(K){He.unshift(K)}var Tt=0,or=null,nr=null;function ro(K){Tt++,t.monitorRunDependencies&&t.monitorRunDependencies(Tt)}function oo(K){if(Tt--,t.monitorRunDependencies&&t.monitorRunDependencies(Tt),Tt==0&&(or!==null&&(clearInterval(or),or=null),nr)){var ae=nr;nr=null,ae()}}function fr(K){t.onAbort&&t.onAbort(K),K="Aborted("+K+")",$(K),M=!0,L=1,K+=". Build with -sASSERTIONS for more info.";var ae=new WebAssembly.RuntimeError(K);throw n(ae),ae}var Va="data:application/octet-stream;base64,";function Lo(K){return K.startsWith(Va)}function Ks(K){return K.startsWith("file://")}var Xt;Xt="tfjs-backend-wasm.wasm",Lo(Xt)||(Xt=f(Xt));function Wa(K){try{if(K==Xt&&D)return new Uint8Array(D);if(x)return x(K);throw"both async and sync fetching of the wasm failed"}catch(ae){fr(ae)}}function ol(){if(!D&&(c||l)){if(typeof fetch=="function"&&!Ks(Xt))return fetch(Xt,{credentials:"same-origin"}).then(function(K){if(!K.ok)throw"failed to load wasm binary file at '"+Xt+"'";return K.arrayBuffer()}).catch(function(){return Wa(Xt)});if(g)return new Promise(function(K,ae){g(Xt,function(Ee){K(new Uint8Array(Ee))},ae)})}return Promise.resolve().then(function(){return Wa(Xt)})}function nl(){var K={env:sl,wasi_snapshot_preview1:sl};function ae(Qe,Ke){var Ut=Qe.exports;t.asm=Ut,O=t.asm.memory,ve(O.buffer),Pe=t.asm.__indirect_function_table,to(t.asm.__wasm_call_ctors),oo("wasm-instantiate")}ro("wasm-instantiate");function Ee(Qe){ae(Qe.instance)}function at(Qe){return ol().then(function(Ke){return WebAssembly.instantiate(Ke,K)}).then(function(Ke){return Ke}).then(Qe,function(Ke){$("failed to asynchronously prepare wasm: "+Ke),fr(Ke)})}function _t(){return!D&&typeof WebAssembly.instantiateStreaming=="function"&&!Lo(Xt)&&!Ks(Xt)&&!m&&typeof fetch=="function"?fetch(Xt,{credentials:"same-origin"}).then(function(Qe){var Ke=WebAssembly.instantiateStreaming(Qe,K);return Ke.then(Ee,function(Ut){return $("wasm streaming compile failed: "+Ut),$("falling back to ArrayBuffer instantiation"),at(Ee)})}):at(Ee)}if(t.instantiateWasm)try{var Et=t.instantiateWasm(K,ae);return Et}catch(Qe){$("Module.instantiateWasm callback failed with error: "+Qe),n(Qe)}return _t().catch(n),{}}var d0,ki;function Ap(K){this.name="ExitStatus",this.message="Program terminated with exit("+K+")",this.status=K}function Ua(K){for(;K.length>0;)K.shift()(t)}function Cy(){fr("")}function wm(){return 4294901760}function vu(){return wm()}function wy(K,ae,Ee){ne.copyWithin(K>>>0,ae>>>0,ae+Ee>>>0)}function Sm(K){try{return O.grow(K-J.byteLength+65535>>>16),ve(O.buffer),1}catch(ae){}}function Fp(K){var ae=ne.length;K=K>>>0;var Ee=wm();if(K>Ee)return!1;let at=(Ut,no)=>Ut+(no-Ut%no)%no;for(var _t=1;_t<=4;_t*=2){var Et=ae*(1+.2/_t);Et=Math.min(Et,K+100663296);var Qe=Math.min(Ee,at(Math.max(K,Et),65536)),Ke=Sm(Qe);if(Ke)return!0}return!1}var hr={varargs:void 0,get:function(){hr.varargs+=4;var K=ie[hr.varargs-4>>>2];return K},getStr:function(K){var ae=j(K);return ae}};function Im(K){return 52}function Sy(K,ae,Ee,at,_t){return 70}var Iy=[null,[],[]];function f0(K,ae){var Ee=Iy[K];ae===0||ae===10?((K===1?_:$)(U(Ee,0)),Ee.length=0):Ee.push(ae)}function h0(K,ae,Ee,at){for(var _t=0,Et=0;Et>>2],Ke=le[ae+4>>>2];ae+=8;for(var Ut=0;Ut>>0]);_t+=Ke}return le[at>>>2]=_t,0}function vm(K){var ae=t["_"+K];return ae}function ku(K,ae){re.set(K,ae>>>0)}function vy(K,ae,Ee,at,_t){var Et={string:yr=>{var Ti=0;if(yr!=null&&yr!==0){var Vm=(yr.length<<2)+1;Ti=cl(Vm),Y(yr,Ti,Vm)}return Ti},array:yr=>{var Ti=cl(yr.length);return ku(yr,Ti),Ti}};function Qe(yr){return ae==="string"?j(yr):ae==="boolean"?!!yr:yr}var Ke=vm(K),Ut=[],no=0;if(at)for(var Ga=0;GaQe==="number"||Qe==="boolean"),Et=ae!=="string";return Et&&_t&&!at?vm(K):function(){return vy(K,ae,Ee,arguments,at)}}var sl={abort:Cy,emscripten_get_heap_max:vu,emscripten_memcpy_big:wy,emscripten_resize_heap:Fp,fd_close:Im,fd_seek:Sy,fd_write:h0},Ny=nl(),km=t.___wasm_call_ctors=function(){return(km=t.___wasm_call_ctors=t.asm.__wasm_call_ctors).apply(null,arguments)},Nm=t._init=function(){return(Nm=t._init=t.asm.init).apply(null,arguments)},Ty=t._init_with_threads_count=function(){return(Ty=t._init_with_threads_count=t.asm.init_with_threads_count).apply(null,arguments)},Tm=t._get_threads_count=function(){return(Tm=t._get_threads_count=t.asm.get_threads_count).apply(null,arguments)},_y=t._register_tensor=function(){return(_y=t._register_tensor=t.asm.register_tensor).apply(null,arguments)},Me=t._dispose_data=function(){return(Me=t._dispose_data=t.asm.dispose_data).apply(null,arguments)},al=t._dispose=function(){return(al=t._dispose=t.asm.dispose).apply(null,arguments)},Ey=t._Abs=function(){return(Ey=t._Abs=t.asm.Abs).apply(null,arguments)},_m=t._Acos=function(){return(_m=t._Acos=t.asm.Acos).apply(null,arguments)},Pp=t._Acosh=function(){return(Pp=t._Acosh=t.asm.Acosh).apply(null,arguments)},$y=t._Add=function(){return($y=t._Add=t.asm.Add).apply(null,arguments)},Ry=t._AddN=function(){return(Ry=t._AddN=t.asm.AddN).apply(null,arguments)},Dy=t._All=function(){return(Dy=t._All=t.asm.All).apply(null,arguments)},Ay=t._Any=function(){return(Ay=t._Any=t.asm.Any).apply(null,arguments)},Fy=t._ArgMax=function(){return(Fy=t._ArgMax=t.asm.ArgMax).apply(null,arguments)},Em=t._ArgMin=function(){return(Em=t._ArgMin=t.asm.ArgMin).apply(null,arguments)},$m=t._Asin=function(){return($m=t._Asin=t.asm.Asin).apply(null,arguments)},Py=t._Asinh=function(){return(Py=t._Asinh=t.asm.Asinh).apply(null,arguments)},Oy=t._Atan=function(){return(Oy=t._Atan=t.asm.Atan).apply(null,arguments)},My=t._Atan2=function(){return(My=t._Atan2=t.asm.Atan2).apply(null,arguments)},il=t._Atanh=function(){return(il=t._Atanh=t.asm.Atanh).apply(null,arguments)},Ly=t._AvgPool=function(){return(Ly=t._AvgPool=t.asm.AvgPool).apply(null,arguments)},By=t._AvgPool3D=function(){return(By=t._AvgPool3D=t.asm.AvgPool3D).apply(null,arguments)},zy=t._AvgPool3DGrad=function(){return(zy=t._AvgPool3DGrad=t.asm.AvgPool3DGrad).apply(null,arguments)},Nu=t._AvgPoolGrad=function(){return(Nu=t._AvgPoolGrad=t.asm.AvgPoolGrad).apply(null,arguments)},Vy=t._BatchMatMul=function(){return(Vy=t._BatchMatMul=t.asm.BatchMatMul).apply(null,arguments)},Wy=t._Bincount=function(){return(Wy=t._Bincount=t.asm.Bincount).apply(null,arguments)},Rm=t._BitwiseAnd=function(){return(Rm=t._BitwiseAnd=t.asm.BitwiseAnd).apply(null,arguments)},Uy=t._Ceil=function(){return(Uy=t._Ceil=t.asm.Ceil).apply(null,arguments)},ul=t._ClipByValue=function(){return(ul=t._ClipByValue=t.asm.ClipByValue).apply(null,arguments)},Gy=t._Conv2D=function(){return(Gy=t._Conv2D=t.asm.Conv2D).apply(null,arguments)},Hy=t._Conv2DBackpropInput=function(){return(Hy=t._Conv2DBackpropInput=t.asm.Conv2DBackpropInput).apply(null,arguments)},Ky=t._Conv3D=function(){return(Ky=t._Conv3D=t.asm.Conv3D).apply(null,arguments)},Ni=t._Conv3DBackpropFilterV2=function(){return(Ni=t._Conv3DBackpropFilterV2=t.asm.Conv3DBackpropFilterV2).apply(null,arguments)},pl=t._Conv3DBackpropInputV2=function(){return(pl=t._Conv3DBackpropInputV2=t.asm.Conv3DBackpropInputV2).apply(null,arguments)},qy=t._Cos=function(){return(qy=t._Cos=t.asm.Cos).apply(null,arguments)},jy=t._Cosh=function(){return(jy=t._Cosh=t.asm.Cosh).apply(null,arguments)},Xy=t._CropAndResize=function(){return(Xy=t._CropAndResize=t.asm.CropAndResize).apply(null,arguments)},Yy=t._Cumprod=function(){return(Yy=t._Cumprod=t.asm.Cumprod).apply(null,arguments)},Dm=t._Cumsum=function(){return(Dm=t._Cumsum=t.asm.Cumsum).apply(null,arguments)},Am=t._DenseBincount=function(){return(Am=t._DenseBincount=t.asm.DenseBincount).apply(null,arguments)},Qy=t._DepthToSpace=function(){return(Qy=t._DepthToSpace=t.asm.DepthToSpace).apply(null,arguments)},Zy=t._DepthwiseConv2dNative=function(){return(Zy=t._DepthwiseConv2dNative=t.asm.DepthwiseConv2dNative).apply(null,arguments)},Fm=t._Diag=function(){return(Fm=t._Diag=t.asm.Diag).apply(null,arguments)},Pm=t._Dilation2D=function(){return(Pm=t._Dilation2D=t.asm.Dilation2D).apply(null,arguments)},Jy=t._Dilation2DBackpropFilter=function(){return(Jy=t._Dilation2DBackpropFilter=t.asm.Dilation2DBackpropFilter).apply(null,arguments)},eb=t._Dilation2DBackpropInput=function(){return(eb=t._Dilation2DBackpropInput=t.asm.Dilation2DBackpropInput).apply(null,arguments)},tb=t._Elu=function(){return(tb=t._Elu=t.asm.Elu).apply(null,arguments)},rb=t._EluGrad=function(){return(rb=t._EluGrad=t.asm.EluGrad).apply(null,arguments)},Om=t._Equal=function(){return(Om=t._Equal=t.asm.Equal).apply(null,arguments)},g0=t._Erf=function(){return(g0=t._Erf=t.asm.Erf).apply(null,arguments)},ob=t._Exp=function(){return(ob=t._Exp=t.asm.Exp).apply(null,arguments)},nb=t._Expm1=function(){return(nb=t._Expm1=t.asm.Expm1).apply(null,arguments)},sb=t._FlipLeftRight=function(){return(sb=t._FlipLeftRight=t.asm.FlipLeftRight).apply(null,arguments)},ab=t._Floor=function(){return(ab=t._Floor=t.asm.Floor).apply(null,arguments)},ib=t._FloorDiv=function(){return(ib=t._FloorDiv=t.asm.FloorDiv).apply(null,arguments)},ub=t._FusedBatchNorm=function(){return(ub=t._FusedBatchNorm=t.asm.FusedBatchNorm).apply(null,arguments)},pb=t._FusedConv2D=function(){return(pb=t._FusedConv2D=t.asm.FusedConv2D).apply(null,arguments)},cb=t._FusedDepthwiseConv2D=function(){return(cb=t._FusedDepthwiseConv2D=t.asm.FusedDepthwiseConv2D).apply(null,arguments)},lb=t._Gather=function(){return(lb=t._Gather=t.asm.Gather).apply(null,arguments)},mb=t._GatherNd=function(){return(mb=t._GatherNd=t.asm.GatherNd).apply(null,arguments)},db=t._Greater=function(){return(db=t._Greater=t.asm.Greater).apply(null,arguments)},fb=t._GreaterEqual=function(){return(fb=t._GreaterEqual=t.asm.GreaterEqual).apply(null,arguments)},hb=t._IsFinite=function(){return(hb=t._IsFinite=t.asm.IsFinite).apply(null,arguments)},gb=t._IsInf=function(){return(gb=t._IsInf=t.asm.IsInf).apply(null,arguments)},xb=t._IsNan=function(){return(xb=t._IsNan=t.asm.IsNan).apply(null,arguments)},yb=t._LRN=function(){return(yb=t._LRN=t.asm.LRN).apply(null,arguments)},bb=t._LRNGrad=function(){return(bb=t._LRNGrad=t.asm.LRNGrad).apply(null,arguments)},Cb=t._LeakyRelu=function(){return(Cb=t._LeakyRelu=t.asm.LeakyRelu).apply(null,arguments)},wb=t._Less=function(){return(wb=t._Less=t.asm.Less).apply(null,arguments)},Sb=t._LessEqual=function(){return(Sb=t._LessEqual=t.asm.LessEqual).apply(null,arguments)},Ib=t._LinSpace=function(){return(Ib=t._LinSpace=t.asm.LinSpace).apply(null,arguments)},vb=t._Log=function(){return(vb=t._Log=t.asm.Log).apply(null,arguments)},kb=t._Log1p=function(){return(kb=t._Log1p=t.asm.Log1p).apply(null,arguments)},Nb=t._LogicalAnd=function(){return(Nb=t._LogicalAnd=t.asm.LogicalAnd).apply(null,arguments)},Tb=t._LogicalNot=function(){return(Tb=t._LogicalNot=t.asm.LogicalNot).apply(null,arguments)},_b=t._LogicalOr=function(){return(_b=t._LogicalOr=t.asm.LogicalOr).apply(null,arguments)},Eb=t._LogicalXor=function(){return(Eb=t._LogicalXor=t.asm.LogicalXor).apply(null,arguments)},$b=t._Max=function(){return($b=t._Max=t.asm.Max).apply(null,arguments)},Rb=t._MaxPool=function(){return(Rb=t._MaxPool=t.asm.MaxPool).apply(null,arguments)},Db=t._MaxPool3D=function(){return(Db=t._MaxPool3D=t.asm.MaxPool3D).apply(null,arguments)},Ab=t._MaxPool3DGrad=function(){return(Ab=t._MaxPool3DGrad=t.asm.MaxPool3DGrad).apply(null,arguments)},Fb=t._MaxPoolGrad=function(){return(Fb=t._MaxPoolGrad=t.asm.MaxPoolGrad).apply(null,arguments)},Pb=t._MaxPoolWithArgmax=function(){return(Pb=t._MaxPoolWithArgmax=t.asm.MaxPoolWithArgmax).apply(null,arguments)},Ob=t._Maximum=function(){return(Ob=t._Maximum=t.asm.Maximum).apply(null,arguments)},Mb=t._Mean=function(){return(Mb=t._Mean=t.asm.Mean).apply(null,arguments)},Lb=t._Min=function(){return(Lb=t._Min=t.asm.Min).apply(null,arguments)},Bb=t._Minimum=function(){return(Bb=t._Minimum=t.asm.Minimum).apply(null,arguments)},zb=t._MirrorPad=function(){return(zb=t._MirrorPad=t.asm.MirrorPad).apply(null,arguments)},Vb=t._Mod=function(){return(Vb=t._Mod=t.asm.Mod).apply(null,arguments)},Wb=t._Multinomial=function(){return(Wb=t._Multinomial=t.asm.Multinomial).apply(null,arguments)},Ub=t._Multiply=function(){return(Ub=t._Multiply=t.asm.Multiply).apply(null,arguments)},Gb=t._Neg=function(){return(Gb=t._Neg=t.asm.Neg).apply(null,arguments)},Hb=t._NonMaxSuppressionV3=function(){return(Hb=t._NonMaxSuppressionV3=t.asm.NonMaxSuppressionV3).apply(null,arguments)},Kb=t._NonMaxSuppressionV4=function(){return(Kb=t._NonMaxSuppressionV4=t.asm.NonMaxSuppressionV4).apply(null,arguments)},qb=t._NonMaxSuppressionV5=function(){return(qb=t._NonMaxSuppressionV5=t.asm.NonMaxSuppressionV5).apply(null,arguments)},jb=t._NotEqual=function(){return(jb=t._NotEqual=t.asm.NotEqual).apply(null,arguments)},Xb=t._OneHot=function(){return(Xb=t._OneHot=t.asm.OneHot).apply(null,arguments)},Yb=t._PadV2=function(){return(Yb=t._PadV2=t.asm.PadV2).apply(null,arguments)},Qb=t._Pow=function(){return(Qb=t._Pow=t.asm.Pow).apply(null,arguments)},Zb=t._Prelu=function(){return(Zb=t._Prelu=t.asm.Prelu).apply(null,arguments)},Jb=t._Prod=function(){return(Jb=t._Prod=t.asm.Prod).apply(null,arguments)},eC=t._RealDiv=function(){return(eC=t._RealDiv=t.asm.RealDiv).apply(null,arguments)},tC=t._Reciprocal=function(){return(tC=t._Reciprocal=t.asm.Reciprocal).apply(null,arguments)},rC=t._Relu=function(){return(rC=t._Relu=t.asm.Relu).apply(null,arguments)},oC=t._Relu6=function(){return(oC=t._Relu6=t.asm.Relu6).apply(null,arguments)},nC=t._ResizeBilinear=function(){return(nC=t._ResizeBilinear=t.asm.ResizeBilinear).apply(null,arguments)},sC=t._ResizeBilinearGrad=function(){return(sC=t._ResizeBilinearGrad=t.asm.ResizeBilinearGrad).apply(null,arguments)},aC=t._ResizeNearestNeighbor=function(){return(aC=t._ResizeNearestNeighbor=t.asm.ResizeNearestNeighbor).apply(null,arguments)},iC=t._ResizeNearestNeighborGrad=function(){return(iC=t._ResizeNearestNeighborGrad=t.asm.ResizeNearestNeighborGrad).apply(null,arguments)},uC=t._Reverse=function(){return(uC=t._Reverse=t.asm.Reverse).apply(null,arguments)},pC=t._RotateWithOffset=function(){return(pC=t._RotateWithOffset=t.asm.RotateWithOffset).apply(null,arguments)},cC=t._Round=function(){return(cC=t._Round=t.asm.Round).apply(null,arguments)},lC=t._Rsqrt=function(){return(lC=t._Rsqrt=t.asm.Rsqrt).apply(null,arguments)},mC=t._ScatterNd=function(){return(mC=t._ScatterNd=t.asm.ScatterNd).apply(null,arguments)},dC=t._SearchSorted=function(){return(dC=t._SearchSorted=t.asm.SearchSorted).apply(null,arguments)},fC=t._SelectV2=function(){return(fC=t._SelectV2=t.asm.SelectV2).apply(null,arguments)},hC=t._Selu=function(){return(hC=t._Selu=t.asm.Selu).apply(null,arguments)},gC=t._Sigmoid=function(){return(gC=t._Sigmoid=t.asm.Sigmoid).apply(null,arguments)},xC=t._Sign=function(){return(xC=t._Sign=t.asm.Sign).apply(null,arguments)},yC=t._Sin=function(){return(yC=t._Sin=t.asm.Sin).apply(null,arguments)},bC=t._Sinh=function(){return(bC=t._Sinh=t.asm.Sinh).apply(null,arguments)},CC=t._Softmax=function(){return(CC=t._Softmax=t.asm.Softmax).apply(null,arguments)},wC=t._Softplus=function(){return(wC=t._Softplus=t.asm.Softplus).apply(null,arguments)},SC=t._SparseFillEmptyRows=function(){return(SC=t._SparseFillEmptyRows=t.asm.SparseFillEmptyRows).apply(null,arguments)},IC=t._SparseReshape=function(){return(IC=t._SparseReshape=t.asm.SparseReshape).apply(null,arguments)},vC=t._SparseSegmentReduction=function(){return(vC=t._SparseSegmentReduction=t.asm.SparseSegmentReduction).apply(null,arguments)},kC=t._SparseToDense=function(){return(kC=t._SparseToDense=t.asm.SparseToDense).apply(null,arguments)},NC=t._Sqrt=function(){return(NC=t._Sqrt=t.asm.Sqrt).apply(null,arguments)},TC=t._Square=function(){return(TC=t._Square=t.asm.Square).apply(null,arguments)},_C=t._SquaredDifference=function(){return(_C=t._SquaredDifference=t.asm.SquaredDifference).apply(null,arguments)},EC=t._Step=function(){return(EC=t._Step=t.asm.Step).apply(null,arguments)},$C=t._StridedSlice=function(){return($C=t._StridedSlice=t.asm.StridedSlice).apply(null,arguments)},RC=t._Sub=function(){return(RC=t._Sub=t.asm.Sub).apply(null,arguments)},DC=t._Sum=function(){return(DC=t._Sum=t.asm.Sum).apply(null,arguments)},AC=t._Tan=function(){return(AC=t._Tan=t.asm.Tan).apply(null,arguments)},FC=t._Tanh=function(){return(FC=t._Tanh=t.asm.Tanh).apply(null,arguments)},PC=t._TensorScatterUpdate=function(){return(PC=t._TensorScatterUpdate=t.asm.TensorScatterUpdate).apply(null,arguments)},OC=t._Tile=function(){return(OC=t._Tile=t.asm.Tile).apply(null,arguments)},MC=t._TopK=function(){return(MC=t._TopK=t.asm.TopK).apply(null,arguments)},LC=t._Transform=function(){return(LC=t._Transform=t.asm.Transform).apply(null,arguments)},BC=t._Transpose=function(){return(BC=t._Transpose=t.asm.Transpose).apply(null,arguments)},zC=t.__FusedMatMul=function(){return(zC=t.__FusedMatMul=t.asm._FusedMatMul).apply(null,arguments)},VC=t._malloc=function(){return(VC=t._malloc=t.asm.malloc).apply(null,arguments)},WC=t._free=function(){return(WC=t._free=t.asm.free).apply(null,arguments)},UC=t.___errno_location=function(){return(UC=t.___errno_location=t.asm.__errno_location).apply(null,arguments)},Mm=t.stackSave=function(){return(Mm=t.stackSave=t.asm.stackSave).apply(null,arguments)},Lm=t.stackRestore=function(){return(Lm=t.stackRestore=t.asm.stackRestore).apply(null,arguments)},cl=t.stackAlloc=function(){return(cl=t.stackAlloc=t.asm.stackAlloc).apply(null,arguments)},GC=t.dynCall_iijjiiii=function(){return(GC=t.dynCall_iijjiiii=t.asm.dynCall_iijjiiii).apply(null,arguments)},HC=t.dynCall_jiji=function(){return(HC=t.dynCall_jiji=t.asm.dynCall_jiji).apply(null,arguments)};t.cwrap=ky;var Op;nr=function K(){Op||Bm(),Op||(nr=K)};function Bm(K){if(K=K||i,Tt>0||(ht(),Tt>0))return;function ae(){Op||(Op=!0,t.calledRun=!0,!M&&(gt(),o(t),t.onRuntimeInitialized&&t.onRuntimeInitialized(),Lr()))}t.setStatus?(t.setStatus("Running..."),setTimeout(function(){setTimeout(function(){t.setStatus("")},1),ae()},1)):ae()}if(t.preInit)for(typeof t.preInit=="function"&&(t.preInit=[t.preInit]);t.preInit.length>0;)t.preInit.pop()();Bm();var Mp;s&&(Mp={uncaughtException:process.listeners("uncaughtException").filter(function(K){return!s.uncaughtException.indexOf(K)>-1}),unhandledRejection:process.listeners("unhandledRejection").filter(function(K){return!s.unhandledRejection.indexOf(K)>-1})});var Lp;if(typeof e!="undefined")Lp=e;else if(typeof WasmBackendModuleThreadedSimd!="undefined")Lp=WasmBackendModuleThreadedSimd;else throw new Error("Could not find wasm module in post.js");if(Mp){var KC=Lp._dispose;Lp._dispose=function(){KC(),Mp.uncaughtException.forEach(function(K){process.removeListener("uncaughtException",K)}),Mp.unhandledRejection.forEach(function(K){process.removeListener("unhandledRejection",K)})}}return e.ready}})();typeof Ug=="object"&&typeof Kv=="object"?Kv.exports=Hv:typeof define=="function"&&define.amd?define([],function(){return Hv}):typeof Ug=="object"&&(Ug.WasmBackendModule=Hv)});var Bo=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}},ao=class{refCount(e){return zr("refCount")}incRef(e){return zr("incRef")}timerAvailable(){return!0}time(e){return zr("time")}read(e){return zr("read")}readSync(e){return zr("readSync")}readToGPU(e,t){return zr("readToGPU")}numDataIds(){return zr("numDataIds")}disposeData(e,t){return zr("disposeData")}write(e,t,o){return zr("write")}move(e,t,o,n,s){return zr("move")}createTensorFromGPUData(e,t,o){return zr("createTensorFromGPUData")}memory(){return zr("memory")}floatPrecision(){return zr("floatPrecision")}epsilon(){return this.floatPrecision()===32?1e-7:1e-4}dispose(){return zr("dispose")}};function zr(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 k0(r){let e=r.length,t=0;for(;e>0;)t=Math.random()*e|0,e--,jm(r,e,t)}function FG(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--,jm(r,t,o),jm(e,t,o)}function Vp(r,e,t){return Math.max(r,Math.min(e,t))}function PG(r){return r%2===0?r:r+1}function jm(r,e,t){let o=r[e];r[e]=r[t],r[t]=o}function OG(r){let e=0;for(let t=0;tt+` Shapes ${r} and ${e} must match`)}function io(r){E(r!=null,()=>"The input to the tensor constructor must be a non-null value.")}function ze(r){if(r.length===0)return 1;let e=r[0];for(let t=1;t0,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 GG(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 _i(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=>Ka(o)),()=>`All values in axis param must be integers but got axis ${r}`),r.map(o=>o<0?t+o:o)}function JC(r,e){let t=[],o=[],n=e!=null&&Array.isArray(e)&&e.length===0,s=e==null||n?null:_i(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 ew(r,e){return Xm(r,e)}function Xm(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 tw(r,e){for(let t=0;te+=t.length),e}function zo(r){return typeof r=="string"||r instanceof String}function N0(r){return typeof r=="boolean"}function T0(r){return typeof r=="number"}function Ei(r){return Array.isArray(r)?Ei(r[0]):r instanceof Float32Array?"float32":r instanceof Int32Array||r instanceof Uint8Array||r instanceof Uint8ClampedArray?"int32":T0(r)?"float32":zo(r)?"string":N0(r)?"bool":"float32"}function qs(r){return!!(r&&r.constructor&&r.call&&r.apply)}function Up(r,e){for(let t=e;t=0;--o)t[o]=t[o+1]*r[o+1];return t}function _0(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 _0(0,r,e,t)}function KG(r,e){if(Array.isArray(r))return r;if(e==="float32")return r instanceof Float32Array?r:new Float32Array(r);if(e==="int32")return r instanceof Int32Array?r:new Int32Array(r);if(e==="bool"||e==="string")return Uint8Array.from(new Int32Array(r));throw new Error(`Unknown dtype ${e}`)}function ml(r,e){let t=Gp(r,e);for(let o=0;oo*n,1);if(e==null||e==="float32")return Tu(r,new Float32Array(t));if(e==="int32")return Tu(r,new Int32Array(t));if(e==="bool")return Tu(r,new Uint8Array(t));throw new Error(`Unknown data type ${e}`)}function Ct(r){r.forEach(e=>{E(Number.isInteger(e)&&e>=0,()=>`Tensor must have a shape comprised of positive integers but got shape [${r}].`)})}function jG(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]=JG(n,s)})}};function QG(r){let e={};return r.replace(/[?&]([^=?&]+)(?:=([^&]*))?/g,(t,...o)=>(ZG(e,o[0],o[1]),o.join("="))),e}function ZG(r,e,t){r[decodeURIComponent(e)]=decodeURIComponent(t||"")}function JG(r,e){let t=e.toLowerCase();return t==="true"||t==="false"?t==="true":`${+t}`===t?+t:e}function A(){return nw}var nw=null;function $0(r){nw=r}var sw;function aw(){if(sw==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");sw=r}return sw}function e4(){let r=aw();return r._tfGlobals==null&&(r._tfGlobals=new Map),r._tfGlobals}function fl(r,e){let t=e4();if(t.has(r))return t.get(r);{let o=e();return t.set(r,o),t.get(r)}}var Xs="Abs",Vo="Acos",Wo="Acosh",uo="Add",Uo="AddN",Go="All",Ho="Any",Ys="ArgMax",Qs="ArgMin",Ko="Asin",qo="Asinh",jo="Atan",Xo="Atanh",Yo="Atan2",Qo="AvgPool",$i="AvgPoolGrad",Zs="AvgPool3D",Ri="AvgPool3DGrad",Zo="BatchMatMul",Js="BatchToSpaceND",Jo="Bincount",qa="BitwiseAnd",qce="BroadcastTo",ea="BroadcastArgs",yo="Cast",en="Ceil",bo="ClipByValue",Di="Complex",Ai="ComplexAbs",ta="Concat",tn="Conv2D",Fi="Conv2DBackpropFilter",rn="Conv2DBackpropInput",on="Conv3D",ja="Conv3DBackpropFilterV2",nn="Conv3DBackpropInputV2",sn="Cos",an="Cosh",un="Cumprod",pn="Cumsum",cn="CropAndResize",ra="DenseBincount",ln="DepthToSpace",mn="DepthwiseConv2dNative",Pi="DepthwiseConv2dNativeBackpropFilter",Oi="DepthwiseConv2dNativeBackpropInput",oa="Diag",dn="Dilation2D",Mi="Dilation2DBackpropInput",Li="Dilation2DBackpropFilter",$u="Draw",fn="RealDiv",Bi="Einsum",hn="Elu",Xa="EluGrad",gn="Erf",xn="Equal",yn="Exp",na="ExpandDims",bn="Expm1",zi="FFT",sa="Fill",Cn="FlipLeftRight",wn="Floor",Sn="FloorDiv",In="FusedBatchNorm",aa="GatherV2",vn="GatherNd",kn="Greater",Nn="GreaterEqual",Co="Identity",Vi="IFFT",Wi="Imag",Tn="IsFinite",_n="IsInf",En="IsNan",$n="LeakyRelu",Rn="Less",Dn="LessEqual",An="LinSpace",Fn="Log",Pn="Log1p",On="LogicalAnd",Mn="LogicalNot",Ln="LogicalOr",R0="LogicalXor",jce="LogSoftmax",Xce="LowerBound",Bn="LRN",Ya="LRNGrad",Yce="MatrixBandPart",zn="Max",Vn="Maximum",Wn="MaxPool",Ui="MaxPoolGrad",ia="MaxPool3D",Gi="MaxPool3DGrad",ua="MaxPoolWithArgmax",Un="Mean",Gn="Min",Hn="Minimum",Kn="MirrorPad",qn="Mod",jn="Multinomial",Xn="Multiply",pa="Neg",Yn="NotEqual",Qn="NonMaxSuppressionV3",Qa="NonMaxSuppressionV4",Zn="NonMaxSuppressionV5",ca="OnesLike",Jn="OneHot",la="Pack",es="PadV2",Qce="Pool",ts="Pow",rs="Prelu",os="Prod",Hp="RaggedGather",Kp="RaggedRange",qp="RaggedTensorToTensor",ma="Range",Hi="Real",ns="Reciprocal",ss="Relu",da="Reshape",as="ResizeNearestNeighbor",Za="ResizeNearestNeighborGrad",is="ResizeBilinear",Ja="ResizeBilinearGrad",us="Relu6",ps="Reverse",cs="Round",ls="Rsqrt",ms="ScatterNd",ds="TensorScatterUpdate",fs="SearchSorted",fa="Select",hs="Selu",ha="Slice",gs="Sin",xs="Sinh",ys="Sign",bs="Sigmoid",Cs="Softplus",ws="Sqrt",Ss="Sum",ga="SpaceToBatchND",xa="SplitV",Is="Softmax",Ki="SparseFillEmptyRows",ei="SparseReshape",ya="SparseSegmentMean",ba="SparseSegmentSum",vs="SparseToDense",ks="SquaredDifference",qi="Square",Ru="StaticRegexReplace",Ns="StridedSlice",Ca="StringNGrams",ji="StringSplit",Xi="StringToHashBucketFast",Ts="Sub",_s="Tan",Es="Tanh",po="Tile",$s="TopK",Rs="Transform",co="Transpose",Yi="Unique",wa="Unpack",Qi="UnsortedSegmentSum",Zce="UpperBound",Sa="ZerosLike",wo="Step",Du="FromPixels",Ds="RotateWithOffset",So="_FusedMatMul",Io="FusedConv2D",vo="FusedDepthwiseConv2D";function Ia(...r){A().getBool("IS_TEST")||A().getBool("PROD")||console.warn(...r)}function t4(...r){A().getBool("IS_TEST")||A().getBool("PROD")||console.log(...r)}var jp=fl("kernelRegistry",()=>new Map),hl=fl("gradRegistry",()=>new Map);function Xp(r,e){let t=uw(r,e);return jp.get(t)}function iw(r){return hl.get(r)}function Ym(r){let e=jp.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 ti(r){let{kernelName:e,backendName:t}=r,o=uw(e,t);jp.has(o)&&Ia(`The kernel '${e}' for backend '${t}' is already registered`),jp.set(o,r)}function ole(r){let{kernelName:e}=r;hl.has(e)&&A().getBool("DEBUG")&&Ia(`Overriding the gradient for '${e}'`),hl.set(e,r)}function nle(r,e){let t=uw(r,e);if(!jp.has(t))throw new Error(`The kernel '${r}' for backend '${e}' is not registered`);jp.delete(t)}function sle(r){if(!hl.has(r))throw new Error(`The gradient '${r}' for backend is not registered`);hl.delete(r)}function ale(r,e){Ym(r).forEach(o=>{let n=Object.assign({},o,{backendName:e});ti(n)})}function uw(r,e){return`${e}_${r}`}var y={};qe(y,{arraysEqual:()=>br,arraysEqualWithNull:()=>ZC,assert:()=>E,assertNonNegativeIntegerDimensions:()=>Ct,assertNonNull:()=>io,assertShapesMatch:()=>xt,bytesFromStringArray:()=>ow,bytesPerElement:()=>Wp,checkConversionForErrors:()=>tw,clamp:()=>Vp,computeStrides:()=>js,convertBackendValuesAndArrayBuffer:()=>KG,createScalarValue:()=>u4,createShuffledIndices:()=>WG,decodeString:()=>Jp,distSquared:()=>LG,encodeString:()=>Ji,fetch:()=>c4,fingerPrint64:()=>i4,flatten:()=>Fs,getArrayFromDType:()=>Xm,getTypedArrayFromDType:()=>ew,hasEncodingLoss:()=>HG,hexToLong:()=>gl,indexToLoc:()=>XG,inferDtype:()=>Ei,inferFromImplicitShape:()=>GG,isBoolean:()=>N0,isFunction:()=>qs,isInt:()=>Ka,isNumber:()=>T0,isPromise:()=>Eu,isScalarShape:()=>BG,isString:()=>zo,isTypedArray:()=>Pt,isValidDtype:()=>rw,locToIndex:()=>jG,makeOnesTypedArray:()=>ml,makeZerosNestedTypedArray:()=>qG,makeZerosTypedArray:()=>Gp,nearestDivisor:()=>Up,nearestLargerEven:()=>PG,now:()=>Mu,parseAxisParam:()=>_i,randUniform:()=>MG,repeatedTry:()=>UG,rightPad:()=>_u,shuffle:()=>k0,shuffleCombo:()=>FG,sizeFromShape:()=>ze,sizeToSquarishShape:()=>VG,squeezeShape:()=>JC,sum:()=>OG,swap:()=>jm,tanh:()=>zG,toNestedArray:()=>Tu,toTypedArray:()=>Zp});function Qm(r){return r instanceof Float32Array||r instanceof Int32Array||r instanceof Uint8Array||r instanceof Uint8ClampedArray}var mw=zp(U0());var Ou=mw.default||mw;function gl(r){return Ou.fromString(r,!0,16)}var H0=gl("c3a5c85c97cb3127"),Pu=gl("b492b66fbe98f273"),Cr=gl("9ae16a3b2f90404f");function lw(r){return r.xor(r.shru(47))}function K0(r,e,t){let o=r.slice(e,e+t);return Ou.fromBytes(Array.from(o),!0,!0)}function wt(r,e){return K0(r,e,8)}function G0(r,e){return K0(r,e,4)}function Yt(r,e){return e===0?r:r.shru(e).or(r.shl(64-e))}function Zi(r,e,t=gl("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 o4(r,e,t,o,n,s){n=n.add(r),s=Yt(s.add(n).add(o),21);let a=n;return n=n.add(e),n=n.add(t),s=s.add(Yt(n,44)),[n.add(o),s.add(a)]}function Jm(r,e,t,o){return o4(wt(r,e),wt(r,e+8),wt(r,e+16),wt(r,e+24),t,o)}function n4(r,e=r.length){if(e>=8){let t=Cr.add(e*2),o=wt(r,0).add(Cr),n=wt(r,e-8),s=Yt(n,37).mul(t).add(o),a=Yt(o,25).add(n).mul(t);return Zi(s,a,t)}if(e>=4){let t=Cr.add(e*2),o=G0(r,0);return Zi(o.shl(3).add(e),G0(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 lw(Cr.mul(s).xor(H0.mul(a))).mul(Cr)}return Cr}function s4(r,e=r.length){let t=Cr.add(e*2),o=wt(r,0).mul(Pu),n=wt(r,8),s=wt(r,e-8).mul(t),a=wt(r,e-16).mul(Cr);return Zi(Yt(o.add(n),43).add(Yt(s,30)).add(a),o.add(Yt(n.add(Cr),18)).add(s),t)}function a4(r,e=r.length){let t=Cr.add(e*2),o=wt(r,0).mul(Cr),n=wt(r,8),s=wt(r,e-8).mul(t),a=wt(r,e-16).mul(Cr),i=Yt(o.add(n),43).add(Yt(s,30)).add(a),p=Zi(i,o.add(Yt(n.add(Cr),18)).add(s),t),u=wt(r,16).mul(t),c=wt(r,24),l=i.add(wt(r,e-32)).mul(t),m=p.add(wt(r,e-24)).mul(t);return Zi(Yt(u.add(c),43).add(Yt(l,30)).add(m),u.add(Yt(c.add(o),18)).add(l),t)}function i4(r,e=r.length){let t=Ou.fromNumber(81,!0);if(e<=32)return e<=16?n4(r,e):s4(r,e);if(e<=64)return a4(r,e);let o=t,n=t.mul(Pu).add(113),s=lw(n.mul(Cr).add(113)).mul(Cr),a=[Ou.UZERO,Ou.UZERO],i=[Ou.UZERO,Ou.UZERO];o=o.mul(Cr).add(wt(r,0));let p=0,u=(e-1>>6)*64,c=u+(e-1&63)-63;do o=Yt(o.add(n).add(a[0]).add(wt(r,p+8)),37).mul(Pu),n=Yt(n.add(a[1]).add(wt(r,p+48)),42).mul(Pu),o=o.xor(i[1]),n=n.add(a[0]).add(wt(r,p+40)),s=Yt(s.add(i[0]),33).mul(Pu),a=Jm(r,p,a[1].mul(Pu),o.add(i[0])),i=Jm(r,p+32,s.add(i[1]),n.add(wt(r,p+16))),[s,o]=[o,s],p+=64;while(p!==u);let l=Pu.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=Yt(o.add(n).add(a[0]).add(wt(r,p+8)),37).mul(l),n=Yt(n.add(a[1]).add(wt(r,p+48)),42).mul(l),o=o.xor(i[1].mul(9)),n=n.add(a[0].mul(9).add(wt(r,p+40))),s=Yt(s.add(i[0]),33).mul(l),a=Jm(r,p,a[1].mul(l),o.add(i[0])),i=Jm(r,p+32,s.add(i[1]),n.add(wt(r,p+16))),[s,o]=[o,s],Zi(Zi(a[0],i[0],l).add(lw(n).mul(H0)).add(s),Zi(a[1],i[1],l).add(o),l)}function u4(r,e){return e==="string"?Ji(r):Zp([r],e)}function p4(r,e){return r instanceof Float32Array&&e==="float32"||r instanceof Int32Array&&e==="int32"||r instanceof Uint8Array&&e==="bool"}function Zp(r,e){if(e==="string")throw new Error("Cannot convert a string[] to a TypedArray");if(Array.isArray(r)&&(r=Fs(r)),A().getBool("DEBUG")&&tw(r,e),p4(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=Mu();if(this.backendTimer.timerAvailable())a=this.backendTimer.time(s);else{s();for(let u of n)u.dataSync();a=Promise.resolve({kernelMs:Mu()-i})}if(A().getBool("CHECK_COMPUTATION_FOR_ERRORS"))for(let u=0;u{l4(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 l4(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 q0(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(!br(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 X0=20,xl=3,fw=7;function Y0(r,e,t,o){let n=js(e),s=m4(r,e,t,n),a=e.length,i=td(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 m4(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"?bl(r):r;if(i>1)for(let u=0;uX0){let g=xl*a,x=Array.from(r.slice(0,g)),b=Array.from(r.slice((i-xl)*a,i*a));return t==="complex64"&&(x=bl(x),b=bl(b)),["["+x.map((C,S)=>yl(C,n[S],t)).join(", ")+", ..., "+b.map((C,S)=>yl(C,n[i-xl+S],t)).join(", ")+"]"]}return["["+(t==="complex64"?bl(r):Array.from(r)).map((g,x)=>yl(g,n[x],t)).join(", ")+"]"]}let u=e.slice(1),c=o.slice(1),l=o[0]*a,m=[];if(i>X0){for(let h=0;h0?m[0]+d:"");for(let h=1;hRl,SerializationMap:()=>rf,getRegisteredName:()=>aX,registerClass:()=>rS});var sX=new Map,tS=new Map,Rl=class{getClassName(){return this.constructor.className}static fromConfig(e,t){return new e(t)}},rf=class r{constructor(){this.classNameMap={}}static getMap(){return r.instance==null&&(r.instance=new r),r.instance}static register(e){r.getMap().classNameMap[e.className]=[e,e.fromConfig]}};function rS(r,e,t){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."),typeof e=="undefined"&&(e="Custom"),typeof t=="undefined"&&(t=r.className);let o=t,n=e+">"+o;return rf.register(r),sX.set(n,r),tS.set(r,n),r}function aX(r){return tS.has(r)?tS.get(r):r.className}var kr=class extends Rl{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 Ot(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 Vw(e,t)}dispose(){this.iterations_!=null&&Ot(this.iterations_)}async saveIterations(){return this.iterations_==null&&(this.iterations_=0),{name:"iter",tensor:ke(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(kr,Symbol.hasInstance,{value:r=>r.minimize!=null&&r.computeGradients!=null&&r.applyGradients!=null});var Ju=class extends kr{static get className(){return"Adadelta"}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:De(()=>Gt(s).variable(a))}),this.accumulatedUpdates[n]==null&&(this.accumulatedUpdates[n]={originalName:`${o}/accum_var`,variable:De(()=>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;De(()=>{let c=Ce(se(p,this.rho),se(Zt(i),1-this.rho)),l=se(je(Rr(Ce(u,this.epsilon)),Rr(Ce(p,this.epsilon))),i),m=Ce(se(u,this.rho),se(Zt(l),1-this.rho));p.assign(c),u.assign(m);let d=Ce(se(l,-this.learningRate),s);s.assign(d)})}),this.incrementIterations()}dispose(){this.accumulatedUpdates!=null&&(Ot(this.accumulatedGrads.map(e=>e.variable)),Ot(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)}};var ep=class extends kr{static get className(){return"Adagrad"}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:De(()=>$a(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;De(()=>{let p=Ce(i,Zt(a));i.assign(p);let u=Ce(se(je(a,Rr(Ce(p,T.backend.epsilon()))),-this.learningRate),s);s.assign(u)})}),this.incrementIterations()}dispose(){this.accumulatedGrads!=null&&Ot(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)}};var tp=class extends kr{static get className(){return"Adam"}constructor(e,t,o,n=null){super(),this.learningRate=e,this.beta1=t,this.beta2=o,this.epsilon=n,this.accumulatedFirstMoment=[],this.accumulatedSecondMoment=[],De(()=>{this.accBeta1=ke(t).variable(),this.accBeta2=ke(o).variable()}),n==null&&(this.epsilon=T.backend.epsilon())}applyGradients(e){let t=Array.isArray(e)?e.map(o=>o.name):Object.keys(e);De(()=>{let o=Te(1,this.accBeta1),n=Te(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:De(()=>Gt(i).variable(p))}),this.accumulatedSecondMoment[a]==null&&(this.accumulatedSecondMoment[a]={originalName:`${s}/v`,variable:De(()=>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=Ce(se(c,this.beta1),se(u,1-this.beta1)),d=Ce(se(l,this.beta2),se(Zt(u),1-this.beta2)),f=je(m,o),h=je(d,n);c.assign(m),l.assign(d);let g=Ce(se(je(f,Ce(Rr(h),this.epsilon)),-this.learningRate),i);i.assign(g)}),this.accBeta1.assign(se(this.accBeta1,this.beta1)),this.accBeta2.assign(se(this.accBeta2,this.beta2))}),this.incrementIterations()}dispose(){this.accBeta1.dispose(),this.accBeta2.dispose(),this.accumulatedFirstMoment!=null&&Ot(this.accumulatedFirstMoment.map(e=>e.variable)),this.accumulatedSecondMoment!=null&&Ot(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),De(()=>{this.accBeta1.assign(ui(this.beta1,this.iterations_+1)),this.accBeta2.assign(ui(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)}};var rp=class extends kr{static get className(){return"Adamax"}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=[],De(()=>{this.iteration=ke(0).variable(),this.accBeta1=ke(t).variable()}),n==null&&(this.epsilon=T.backend.epsilon())}applyGradients(e){let t=Array.isArray(e)?e.map(o=>o.name):Object.keys(e);De(()=>{let o=Te(1,this.accBeta1),n=je(-this.learningRate,Ce(se(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: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=Ce(se(c,this.beta1),se(u,1-this.beta1)),d=se(l,this.beta2),f=Qt(u),h=Ad(d,f);c.assign(m),l.assign(h);let g=Ce(se(je(n,o),je(m,Ce(h,this.epsilon))),i);i.assign(g)}),this.iteration.assign(Ce(this.iteration,1)),this.accBeta1.assign(se(this.accBeta1,this.beta1))}),this.incrementIterations()}dispose(){this.accBeta1.dispose(),this.iteration.dispose(),this.accumulatedFirstMoment!=null&&Ot(this.accumulatedFirstMoment.map(e=>e.variable)),this.accumulatedWeightedInfNorm!=null&&Ot(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)}};var mi=class extends kr{static get className(){return"SGD"}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];De(()=>{let i=Ce(se(this.c,s),a);a.assign(i)})}),this.incrementIterations()}setLearningRate(e){this.learningRate=e,this.c!=null&&this.c.dispose(),this.c=$r(ke(-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)}};var op=class extends mi{static get className(){return"Momentum"}constructor(e,t,o=!1){super(e),this.learningRate=e,this.momentum=t,this.useNesterov=o,this.accumulations=[],this.m=ke(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:De(()=>Gt(s).variable(!1))});let a=this.accumulations[n].variable,i=Array.isArray(e)?e[n].tensor:e[o];i!=null&&De(()=>{let p,u=Ce(se(this.m,a),i);this.useNesterov?p=Ce(se(this.c,Ce(i,se(u,this.m))),s):p=Ce(se(this.c,u),s),a.assign(u),s.assign(p)})}),this.incrementIterations()}dispose(){this.m.dispose(),this.accumulations!=null&&Ot(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)}};var np=class extends kr{static get className(){return"RMSProp"}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:De(()=>Gt(s).variable(a))}),this.accumulatedMoments[n]==null&&(this.accumulatedMoments[n]={originalName:`${o}/momentum`,variable:De(()=>Gt(s).variable(a))}),this.accumulatedMeanGrads[n]==null&&this.centered&&(this.accumulatedMeanGrads[n]={originalName:`${o}/mg`,variable:De(()=>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;De(()=>{let c=Ce(se(p,this.decay),se(Zt(i),1-this.decay));if(this.centered){let l=this.accumulatedMeanGrads[n].variable,m=Ce(se(l,this.decay),se(i,1-this.decay)),d=je(se(i,this.learningRate),Rr(Te(c,Ce(Zt(m),this.epsilon)))),f=Ce(se(u,this.momentum),d);p.assign(c),l.assign(m),u.assign(f);let h=Te(s,f);s.assign(h)}else{let l=Ce(se(p,this.decay),se(Zt(i),1-this.decay)),m=Ce(se(u,this.momentum),je(se(i,this.learningRate),Rr(Ce(l,this.epsilon))));p.assign(l),u.assign(m);let d=Te(s,m);s.assign(d)}})}),this.incrementIterations()}dispose(){this.accumulatedMeanSquares!=null&&Ot(this.accumulatedMeanSquares.map(e=>e.variable)),this.accumulatedMeanGrads!=null&&this.centered&&Ot(this.accumulatedMeanGrads.map(e=>e.variable)),this.accumulatedMoments!=null&&Ot(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)}};var iX=[Ju,ep,tp,rp,op,np,mi];function XN(){for(let r of iX)rS(r)}var di={};qe(di,{CompositeArrayBuffer:()=>ir,browserFiles:()=>QN,browserHTTPRequest:()=>tT,concatenateArrayBuffers:()=>dk,copyModel:()=>Tk,decodeWeights:()=>sd,decodeWeightsStream:()=>ad,encodeWeights:()=>pk,fromMemory:()=>rT,fromMemorySync:()=>uS,getLoadHandlers:()=>xk,getModelArtifactsForJSON:()=>tc,getModelArtifactsForJSONSync:()=>$w,getModelArtifactsInfoForJSON:()=>va,getSaveHandlers:()=>gk,getWeightSpecs:()=>Sl,http:()=>nf,isHTTPScheme:()=>of,listModels:()=>kk,loadWeights:()=>JN,moveModel:()=>_k,registerLoadRouter:()=>hk,registerSaveRouter:()=>fk,removeModel:()=>Nk,weightsLoaderFactory:()=>aS,withSaveHandler:()=>oT,withSaveHandlerSync:()=>nT});var uX="model",pX=".json",cX=".weights.bin";function YN(r){return new Promise(e=>setTimeout(e)).then(r)}var dc=class r{constructor(e){if(!A().getBool("IS_BROWSER"))throw new Error("browserDownloads() cannot proceed because the current environment is not a browser.");e.startsWith(r.URL_SCHEME)&&(e=e.slice(r.URL_SCHEME.length)),(e==null||e.length===0)&&(e=uX),this.modelJsonFileName=e+pX,this.weightDataFileName=e+cX}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=ir.join(e.weightData),o=window.URL.createObjectURL(new Blob([t],{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 n=[{paths:["./"+this.weightDataFileName],weights:e.weightSpecs}],s=id(e,n),a=window.URL.createObjectURL(new Blob([JSON.stringify(s)],{type:"application/json"})),i=this.modelJsonAnchor==null?document.createElement("a"):this.modelJsonAnchor;if(i.download=this.modelJsonFileName,i.href=a,await YN(()=>i.dispatchEvent(new MouseEvent("click"))),e.weightData!=null){let p=this.weightDataAnchor==null?document.createElement("a"):this.weightDataAnchor;p.download=this.weightDataFileName,p.href=o,await YN(()=>p.dispatchEvent(new MouseEvent("click")))}return{modelArtifactsInfo:va(e)}}}};dc.URL_SCHEME="downloads://";var oS=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=tc(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,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=>Ew(s.name)),n={};for(let s of e)s.paths.forEach(a=>{let i=Ew(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}},lX=r=>A().getBool("IS_BROWSER")&&!Array.isArray(r)&&r.startsWith(dc.URL_SCHEME)?mX(r.slice(dc.URL_SCHEME.length)):null;qt.registerSaveRouter(lX);function mX(r="model"){return new dc(r)}function QN(r){return new oS(r)}function nS(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 sS(r,e){e==null&&(e={});let t=e.fetchFunc==null?A().platform.fetch:e.fetchFunc,o=r.map(l=>t(l,e.requestInit,{isBinary:!0})),i=(e.onProgress==null?await Promise.all(o):await nS(o,e.onProgress,0,.5)).map(l=>l.arrayBuffer());return e.onProgress==null?await Promise.all(i):await nS(i,e.onProgress,.5,1)}function ZN(r,e){var t;let o=e.fetchFunc==null?A().platform.fetch:e.fetchFunc,n=0,s;return(t=e.onProgress)===null||t===void 0||t.call(e,0),new ReadableStream({pull:async a=>{for(var i;nsS(a,{requestInit:o}))(r,e,t)}function aS(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=si[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((S,k)=>{S===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=new ir(c.slice(m,m+f));s[d].forEach(x=>{let b=h.slice(x.groupOffset,x.groupOffset+x.sizeBytes),C=sd(b,[x.manifestEntry]);for(let S in C)l[S]=C[S]}),m+=f}),l}}var dX="application/octet-stream",fX="application/json",Dl=class{constructor(e,t){if(this.DEFAULT_METHOD="POST",t==null&&(t={}),this.weightPathPrefix=t.weightPathPrefix,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=A().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||{},this.loadOptions=t}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=id(e,o);if(t.body.append("model.json",new Blob([JSON.stringify(n)],{type:fX}),"model.json"),e.weightData!=null){let a=ir.join(e.weightData);t.body.append("model.weights.bin",new Blob([a],{type:dX}),"model.weights.bin")}let s=await this.fetch(this.path,t);if(s.ok)return{modelArtifactsInfo:va(e),responses:[s]};throw new Error(`BrowserHTTPRequest.save() failed due to HTTP response status ${s.status}.`)}async loadModelJSON(){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 t}async load(){if(this.loadOptions.streamWeights)return this.loadStream();let e=await this.loadModelJSON();return tc(e,t=>this.loadWeights(t))}async loadStream(){let e=await this.loadModelJSON(),t=await this.getWeightUrls(e.weightsManifest),o=Sl(e.weightsManifest),n=()=>ZN(t,this.loadOptions);return Object.assign(Object.assign({},e),{weightSpecs:o,getWeightStream:n})}async getWeightUrls(e){let t=Array.isArray(this.path)?this.path[1]:this.path,[o,n]=hX(t),s=this.weightPathPrefix||o,a=[],i=[];for(let p of e)for(let u of p.paths)this.weightUrlConverter!=null?i.push(this.weightUrlConverter(u)):a.push(s+u+n);return this.weightUrlConverter&&a.push(...await Promise.all(i)),a}async loadWeights(e){let t=await this.getWeightUrls(e),o=Sl(e),n=await sS(t,this.loadOptions);return[o,n]}};Dl.URL_SCHEME_REGEX=/^https?:\/\//;function hX(r){let e=r.lastIndexOf("/"),t=r.lastIndexOf("?"),o=r.substring(0,e),n=t>e?r.substring(t):"";return[o+"/",n]}function of(r){return r.match(Dl.URL_SCHEME_REGEX)!=null}var eT=(r,e)=>{if(typeof fetch=="undefined"&&(e==null||e.fetchFunc==null))return null;{let t=!0;if(Array.isArray(r)?t=r.every(o=>of(o)):t=of(r),t)return nf(r,e)}return null};qt.registerSaveRouter(eT);qt.registerLoadRouter(eT);function nf(r,e){return new Dl(r,e)}function tT(r,e){return nf(r,e)}var Al=class{constructor(e){this.modelArtifacts=e}load(){return this.modelArtifacts}},sf=class{constructor(e){this.saveHandler=e}save(e){return this.saveHandler(e)}},iS=class{constructor(e){e.load&&(this.load=()=>Promise.resolve(e.load())),e.save&&(this.save=t=>Promise.resolve(e.save(t)))}};function rT(r,e,t,o){let n=arguments;return new iS(uS(...n))}function uS(r,e,t,o){return arguments.length===1?r.modelTopology!=null||r.weightSpecs!=null?new Al(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 Al({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 Al({modelTopology:r,weightSpecs:e,weightData:t,trainingConfig:o}))}function oT(r){return new sf(r)}function nT(r){return new sf(r)}var aT={};qe(aT,{confusionMatrix:()=>sT});function gX(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=El(Ue(o,"int32"),t),a=El(Ue(n,"int32"),t),i=mc(s),p=Ze(i,a);return Ue(p,"int32")}var sT=N({confusionMatrix_:gX});var cT={};qe(cT,{draw:()=>vX,fromPixels:()=>kX,fromPixelsAsync:()=>wX,toPixels:()=>IX});var sp,iT=!1;function uT(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(Xp(Du,T.backendName)!=null){let f={pixels:r},h={numChannels:e};return T.runKernel(Du,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(sp==null)if(typeof document=="undefined")if(typeof OffscreenCanvas!="undefined"&&typeof OffscreenCanvasRenderingContext2D!="undefined")sp=new OffscreenCanvas(1,1).getContext("2d");else throw new Error("Cannot parse input in current context. Reason: OffscreenCanvas Context2D rendering is not supported.");else sp=document.createElement("canvas").getContext("2d",{willReadFrequently:!0});sp.canvas.width=u,sp.canvas.height=c,sp.drawImage(r,0,0,u,c),l=sp.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||e===2)throw new Error(`toPixels only supports depth of size 1, 3 or 4 but got ${e}`);if(r.dtype!=="float32"&&r.dtype!=="int32")throw new Error(`Unsupported type for toPixels: ${r.dtype}. Please use float32 or int32 tensors.`)}function SX(r){let e=(r==null?void 0:r.alpha)||1;if(e>1||e<0)throw new Error(`Alpha value ${e} is suppoed to be in range [0 - 1].`)}async function IX(r,e){let t=v(r,"img","toPixels");if(!(r instanceof mt)){let u=t;t=Ue(u,"int32"),u.dispose()}pT(t);let[o,n]=t.shape.slice(0,2),s=t.rank===2?1:t.shape[2],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){iT||Xp($u,T.backendName)!=null&&(console.warn("tf.browser.toPixels is not efficient to draw tensor on canvas. Please try tf.browser.draw instead."),iT=!0),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}function vX(r,e,t){let o=v(r,"img","draw");if(!(r instanceof mt)){let a=o;o=Ue(a,"int32"),a.dispose()}pT(o),SX(t==null?void 0:t.imageOptions);let n={image:o},s={canvas:e,options:t};T.runKernel($u,n,s)}var kX=N({fromPixels_:uT});var af={};qe(af,{prepareAndValidate:()=>lT});function lT(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 pt={};qe(pt,{assertParamsValid:()=>TX,computeFlatOffset:()=>DX,computeOutShape:()=>EX,getNormalizedAxes:()=>$X,isSliceContinous:()=>RX,maskToAxes:()=>_X,parseSliceParams:()=>AX,sliceInfo:()=>FX,startForAxis:()=>bT,startIndicesWithElidedDims:()=>gT,stopForAxis:()=>CT,stopIndicesWithElidedDims:()=>xT,stridesForAxis:()=>yT,stridesWithElidedDims:()=>dT});var pS=-2,NX=-1;function TX(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 _X(r){let e=[],t=0;for(;r>0;)r&1&&e.push(t),r/=2,t++;return e}function EX(r,e,t){let o=[];for(let n=0;n0){let d=e[0],f=t+1;c=gT(a,d,f,o,r),l=xT(i,d,f,n,r),m=dT(s,d,f,r)}else for(let d=0;d-1)s[i]=0;else{let p=fT(e,t,i),u=o[p];r&1<-1)s[i]=Number.MAX_SAFE_INTEGER;else{let p=fT(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=Vp(0,a,p-1),a}function CT(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=Vp(0,a,p):a=Vp(-1,a,p-1),a}function RX(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 DX(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 FX(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)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(S&&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]=mT(m.begin[C],0,m.strides[C],k,_,$),m.end[C]=mT(m.end[C],1,m.strides[C],k,_,$);let O=m.strides[C]===1&&m.begin[C]===0&&m.end[C]===k;d=d&&O,f=f&&(C===0&&m.strides[C]===1||O)}else d=d&&m.strides[C]===1&&R,f=f&&(C===0&&m.strides[C]===1||R);let D,P=!1;if(m.beginValid&&m.endValid?(D=m.end[C]-m.begin[C],P=!0):S?(D=1,P=!0):R&&k>=0&&(m.strides[C]<0?D=-k:D=k,P=!0),P){let O;D===0||D<0!=m.strides[C]<0?O=0:O=Math.trunc(D/m.strides[C])+(D%m.strides[C]!==0?1:0),g.push(O)}else g.push(-1)}for(let C=0;C=0?x.push(g[S]):S===pS&&x.push(1)}return{finalShapeSparse:x.filter((C,S)=>m.finalShapeGatherIndices[S]!==pS),finalShape:x,isIdentity:d,sliceDim0:f,isSimpleSlice:h,begin:m.begin,end:m.end,strides:m.strides}}function PX(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 OX="4.17.0";var Fl=class{static sgd(e){return new mi(e)}static momentum(e,t,o=!1){return new op(e,t,o)}static rmsprop(e,t=.9,o=0,n=null,s=!1){return new np(e,t,o,n,s)}static adam(e=.001,t=.9,o=.999,n=null){return new tp(e,t,o,n)}static adadelta(e=.001,t=.95,o=null){return new Ju(e,t,o)}static adamax(e=.002,t=.9,o=.999,n=null,s=0){return new rp(e,t,o,n,s)}static adagrad(e,t=.1){return new ep(e,t)}};var OGe=Fl;var MX=typeof requestAnimationFrame!="undefined"?requestAnimationFrame:typeof setImmediate!="undefined"?setImmediate:r=>r();function cS(){return new Promise(r=>MX(()=>r()))}var w={};qe(w,{ERF_A1:()=>e5,ERF_A2:()=>t5,ERF_A3:()=>r5,ERF_A4:()=>o5,ERF_A5:()=>n5,ERF_P:()=>JX,PARALLELIZE_THRESHOLD:()=>uf,RowPartitionType:()=>Fa,SELU_SCALE:()=>ZX,SELU_SCALEALPHA:()=>QX,applyActivation:()=>Qu,assertAndGetBroadcastShape:()=>rt,assertAxesAreInnerMostDims:()=>pK,assertParamsConsistent:()=>LX,assignToTypedArray:()=>c5,axesAreInnerMostDims:()=>zw,calculateShapes:()=>q1,checkEinsumDimSizes:()=>g5,checkPadOnDimRoundingMode:()=>Lt,combineLocations:()=>I2,combineRaggedTensorToTensorShapes:()=>zX,complexWithEvenIndex:()=>i5,complexWithOddIndex:()=>u5,computeConv2DInfo:()=>zu,computeConv3DInfo:()=>Uk,computeDefaultPad:()=>Bw,computeDilation2DInfo:()=>iH,computeOptimalWindowSize:()=>GX,computeOutAndReduceShapes:()=>uK,computeOutShape:()=>BX,computePool2DInfo:()=>Lw,computePool3DInfo:()=>uH,convertConv2DDataFormat:()=>Gk,decodeEinsumEquation:()=>f5,eitherStridesOrDilationsAreOne:()=>gr,expandShapeToKeepDim:()=>ii,exponent:()=>m5,exponents:()=>l5,fromStringArrayToUint8:()=>M5,fromUint8ToStringArray:()=>O5,getAxesPermutation:()=>cK,getBroadcastDims:()=>y2,getComplexWithIndex:()=>p5,getEinsumComputePath:()=>x5,getEinsumPermutation:()=>h5,getFusedBiasGradient:()=>Yu,getFusedDyActivation:()=>Xu,getImageCenter:()=>HX,getInnerMostAxes:()=>mK,getPermuted:()=>qX,getRaggedRank:()=>WX,getReductionAxes:()=>xd,getReshaped:()=>KX,getReshapedPermuted:()=>jX,getRowPartitionTypesHelper:()=>VX,getSliceBeginCoords:()=>XX,getSliceSize:()=>YX,getSparseFillEmptyRowsIndicesDenseShapeMismatch:()=>w5,getSparseFillEmptyRowsNegativeIndexErrorMessage:()=>S5,getSparseFillEmptyRowsOutOfRangeIndexErrorMessage:()=>I5,getSparseReshapeEmptyTensorZeroOutputDimErrorMessage:()=>N5,getSparseReshapeInputOutputMismatchErrorMessage:()=>_5,getSparseReshapeInputOutputMultipleErrorMessage:()=>T5,getSparseReshapeMultipleNegativeOneOutputDimErrorMessage:()=>v5,getSparseReshapeNegativeOutputDimErrorMessage:()=>k5,getSparseSegmentReductionIndicesOutOfRangeErrorMessage:()=>D5,getSparseSegmentReductionNegativeSegmentIdsErrorMessage:()=>E5,getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage:()=>$5,getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage:()=>R5,getUndoAxesPermutation:()=>lK,isIdentityPermutation:()=>y5,log:()=>t4,mergeRealAndImagArrays:()=>s5,prepareAndValidate:()=>lT,prepareSplitSize:()=>C5,segment_util:()=>mS,shouldFuse:()=>Zu,slice_util:()=>pt,splitRealAndImagArrays:()=>a5,stridesOrDilationsArePositive:()=>Ta,tupleValuesAreOne:()=>Bu,upcastType:()=>dt,validateDefaultValueShape:()=>UX,validateInput:()=>lc,validateUpdateShape:()=>Qw,warn:()=>Ia});function LX(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 BX(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 VX(r){let e={FIRST_DIM_SIZE:Fa.FIRST_DIM_SIZE,VALUE_ROWIDS:Fa.VALUE_ROWIDS,ROW_LENGTHS:Fa.ROW_LENGTHS,ROW_SPLITS:Fa.ROW_SPLITS,ROW_LIMITS:Fa.ROW_LIMITS,ROW_STARTS:Fa.ROW_STARTS},t=[];for(let o of r)if(o in e)t.push(e[o]);else break;return t}function WX(r){return r.length===0?0:r[0]===Fa.FIRST_DIM_SIZE?r.length-1:r.length}function UX(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 uf=30;function GX(r){return r<=uf?r:Up(r,Math.floor(Math.sqrt(r)))}function HX(r,e,t){let o=t*(typeof r=="number"?r:r[0]),n=e*(typeof r=="number"?r:r[1]);return[o,n]}function KX(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 jX(r,e,t,o=!0){let n=[];o?n.push(r[0]/t):n.push(r[0]*t);for(let s=1;s/g,wT=",",ST="...";function f5(r,e){r=r.replace(/\s/g,"");let t=(r.length-r.replace(d5,"").length)/lS.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 ("${lS}").`);let[o,n]=r.split(lS);E(o.indexOf(ST)===-1,()=>`The ellipsis notation ("${ST}") is not supported yet.`);let s=o.split(wT),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 g5(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 x5(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 b5(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 w5(r){return`Received SparseTensor with denseShape[0] = 0 but +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=new ir(c.slice(m,m+f));s[d].forEach(x=>{let b=h.slice(x.groupOffset,x.groupOffset+x.sizeBytes),C=sd(b,[x.manifestEntry]);for(let S in C)l[S]=C[S]}),m+=f}),l}}var dX="application/octet-stream",fX="application/json",Dl=class{constructor(e,t){if(this.DEFAULT_METHOD="POST",t==null&&(t={}),this.weightPathPrefix=t.weightPathPrefix,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=A().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||{},this.loadOptions=t}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=id(e,o);if(t.body.append("model.json",new Blob([JSON.stringify(n)],{type:fX}),"model.json"),e.weightData!=null){let a=ir.join(e.weightData);t.body.append("model.weights.bin",new Blob([a],{type:dX}),"model.weights.bin")}let s=await this.fetch(this.path,t);if(s.ok)return{modelArtifactsInfo:va(e),responses:[s]};throw new Error(`BrowserHTTPRequest.save() failed due to HTTP response status ${s.status}.`)}async loadModelJSON(){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 t}async load(){if(this.loadOptions.streamWeights)return this.loadStream();let e=await this.loadModelJSON();return tc(e,t=>this.loadWeights(t))}async loadStream(){let e=await this.loadModelJSON(),t=await this.getWeightUrls(e.weightsManifest),o=Sl(e.weightsManifest),n=()=>ZN(t,this.loadOptions);return Object.assign(Object.assign({},e),{weightSpecs:o,getWeightStream:n})}async getWeightUrls(e){let t=Array.isArray(this.path)?this.path[1]:this.path,[o,n]=hX(t),s=this.weightPathPrefix||o,a=[],i=[];for(let p of e)for(let u of p.paths)this.weightUrlConverter!=null?i.push(this.weightUrlConverter(u)):a.push(s+u+n);return this.weightUrlConverter&&a.push(...await Promise.all(i)),a}async loadWeights(e){let t=await this.getWeightUrls(e),o=Sl(e),n=await sS(t,this.loadOptions);return[o,n]}};Dl.URL_SCHEME_REGEX=/^https?:\/\//;function hX(r){let e=r.lastIndexOf("/"),t=r.lastIndexOf("?"),o=r.substring(0,e),n=t>e?r.substring(t):"";return[o+"/",n]}function of(r){return r.match(Dl.URL_SCHEME_REGEX)!=null}var eT=(r,e)=>{if(typeof fetch=="undefined"&&(e==null||e.fetchFunc==null))return null;{let t=!0;if(Array.isArray(r)?t=r.every(o=>of(o)):t=of(r),t)return nf(r,e)}return null};qt.registerSaveRouter(eT);qt.registerLoadRouter(eT);function nf(r,e){return new Dl(r,e)}function tT(r,e){return nf(r,e)}var Al=class{constructor(e){this.modelArtifacts=e}load(){return this.modelArtifacts}},sf=class{constructor(e){this.saveHandler=e}save(e){return this.saveHandler(e)}},iS=class{constructor(e){e.load&&(this.load=()=>Promise.resolve(e.load())),e.save&&(this.save=t=>Promise.resolve(e.save(t)))}};function rT(r,e,t,o){let n=arguments;return new iS(uS(...n))}function uS(r,e,t,o){return arguments.length===1?r.modelTopology!=null||r.weightSpecs!=null?new Al(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 Al({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 Al({modelTopology:r,weightSpecs:e,weightData:t,trainingConfig:o}))}function oT(r){return new sf(r)}function nT(r){return new sf(r)}var aT={};qe(aT,{confusionMatrix:()=>sT});function gX(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=El(Ue(o,"int32"),t),a=El(Ue(n,"int32"),t),i=mc(s),p=Ze(i,a);return Ue(p,"int32")}var sT=N({confusionMatrix_:gX});var cT={};qe(cT,{draw:()=>vX,fromPixels:()=>kX,fromPixelsAsync:()=>wX,toPixels:()=>IX});var sp,iT=!1;function uT(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(Xp(Du,T.backendName)!=null){let f={pixels:r},h={numChannels:e};return T.runKernel(Du,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(sp==null)if(typeof document=="undefined")if(typeof OffscreenCanvas!="undefined"&&typeof OffscreenCanvasRenderingContext2D!="undefined")sp=new OffscreenCanvas(1,1).getContext("2d");else throw new Error("Cannot parse input in current context. Reason: OffscreenCanvas Context2D rendering is not supported.");else sp=document.createElement("canvas").getContext("2d",{willReadFrequently:!0});sp.canvas.width=u,sp.canvas.height=c,sp.drawImage(r,0,0,u,c),l=sp.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||e===2)throw new Error(`toPixels only supports depth of size 1, 3 or 4 but got ${e}`);if(r.dtype!=="float32"&&r.dtype!=="int32")throw new Error(`Unsupported type for toPixels: ${r.dtype}. Please use float32 or int32 tensors.`)}function SX(r){let e=(r==null?void 0:r.alpha)||1;if(e>1||e<0)throw new Error(`Alpha value ${e} is suppoed to be in range [0 - 1].`)}async function IX(r,e){let t=v(r,"img","toPixels");if(!(r instanceof mt)){let u=t;t=Ue(u,"int32"),u.dispose()}pT(t);let[o,n]=t.shape.slice(0,2),s=t.rank===2?1:t.shape[2],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){iT||Xp($u,T.backendName)!=null&&(console.warn("tf.browser.toPixels is not efficient to draw tensor on canvas. Please try tf.browser.draw instead."),iT=!0),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}function vX(r,e,t){let o=v(r,"img","draw");if(!(r instanceof mt)){let a=o;o=Ue(a,"int32"),a.dispose()}pT(o),SX(t==null?void 0:t.imageOptions);let n={image:o},s={canvas:e,options:t};T.runKernel($u,n,s)}var kX=N({fromPixels_:uT});var af={};qe(af,{prepareAndValidate:()=>lT});function lT(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 pt={};qe(pt,{assertParamsValid:()=>TX,computeFlatOffset:()=>DX,computeOutShape:()=>EX,getNormalizedAxes:()=>$X,isSliceContinous:()=>RX,maskToAxes:()=>_X,parseSliceParams:()=>AX,sliceInfo:()=>FX,startForAxis:()=>bT,startIndicesWithElidedDims:()=>gT,stopForAxis:()=>CT,stopIndicesWithElidedDims:()=>xT,stridesForAxis:()=>yT,stridesWithElidedDims:()=>dT});var pS=-2,NX=-1;function TX(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 _X(r){let e=[],t=0;for(;r>0;)r&1&&e.push(t),r/=2,t++;return e}function EX(r,e,t){let o=[];for(let n=0;n0){let d=e[0],f=t+1;c=gT(a,d,f,o,r),l=xT(i,d,f,n,r),m=dT(s,d,f,r)}else for(let d=0;d-1)s[i]=0;else{let p=fT(e,t,i),u=o[p];r&1<-1)s[i]=Number.MAX_SAFE_INTEGER;else{let p=fT(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=Vp(0,a,p-1),a}function CT(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=Vp(0,a,p):a=Vp(-1,a,p-1),a}function RX(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 DX(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 FX(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)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(S&&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]=mT(m.begin[C],0,m.strides[C],k,_,$),m.end[C]=mT(m.end[C],1,m.strides[C],k,_,$);let O=m.strides[C]===1&&m.begin[C]===0&&m.end[C]===k;d=d&&O,f=f&&(C===0&&m.strides[C]===1||O)}else d=d&&m.strides[C]===1&&R,f=f&&(C===0&&m.strides[C]===1||R);let D,P=!1;if(m.beginValid&&m.endValid?(D=m.end[C]-m.begin[C],P=!0):S?(D=1,P=!0):R&&k>=0&&(m.strides[C]<0?D=-k:D=k,P=!0),P){let O;D===0||D<0!=m.strides[C]<0?O=0:O=Math.trunc(D/m.strides[C])+(D%m.strides[C]!==0?1:0),g.push(O)}else g.push(-1)}for(let C=0;C=0?x.push(g[S]):S===pS&&x.push(1)}return{finalShapeSparse:x.filter((C,S)=>m.finalShapeGatherIndices[S]!==pS),finalShape:x,isIdentity:d,sliceDim0:f,isSimpleSlice:h,begin:m.begin,end:m.end,strides:m.strides}}function PX(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 OX="4.21.0";var Fl=class{static sgd(e){return new mi(e)}static momentum(e,t,o=!1){return new op(e,t,o)}static rmsprop(e,t=.9,o=0,n=null,s=!1){return new np(e,t,o,n,s)}static adam(e=.001,t=.9,o=.999,n=null){return new tp(e,t,o,n)}static adadelta(e=.001,t=.95,o=null){return new Ju(e,t,o)}static adamax(e=.002,t=.9,o=.999,n=null,s=0){return new rp(e,t,o,n,s)}static adagrad(e,t=.1){return new ep(e,t)}};var OGe=Fl;var MX=typeof requestAnimationFrame!="undefined"?requestAnimationFrame:typeof setImmediate!="undefined"?setImmediate:r=>r();function cS(){return new Promise(r=>MX(()=>r()))}var w={};qe(w,{ERF_A1:()=>e5,ERF_A2:()=>t5,ERF_A3:()=>r5,ERF_A4:()=>o5,ERF_A5:()=>n5,ERF_P:()=>JX,PARALLELIZE_THRESHOLD:()=>uf,RowPartitionType:()=>Fa,SELU_SCALE:()=>ZX,SELU_SCALEALPHA:()=>QX,applyActivation:()=>Qu,assertAndGetBroadcastShape:()=>rt,assertAxesAreInnerMostDims:()=>pK,assertParamsConsistent:()=>LX,assignToTypedArray:()=>c5,axesAreInnerMostDims:()=>zw,calculateShapes:()=>q1,checkEinsumDimSizes:()=>g5,checkPadOnDimRoundingMode:()=>Lt,combineLocations:()=>I2,combineRaggedTensorToTensorShapes:()=>zX,complexWithEvenIndex:()=>i5,complexWithOddIndex:()=>u5,computeConv2DInfo:()=>zu,computeConv3DInfo:()=>Uk,computeDefaultPad:()=>Bw,computeDilation2DInfo:()=>iH,computeOptimalWindowSize:()=>GX,computeOutAndReduceShapes:()=>uK,computeOutShape:()=>BX,computePool2DInfo:()=>Lw,computePool3DInfo:()=>uH,convertConv2DDataFormat:()=>Gk,decodeEinsumEquation:()=>f5,eitherStridesOrDilationsAreOne:()=>gr,expandShapeToKeepDim:()=>ii,exponent:()=>m5,exponents:()=>l5,fromStringArrayToUint8:()=>M5,fromUint8ToStringArray:()=>O5,getAxesPermutation:()=>cK,getBroadcastDims:()=>y2,getComplexWithIndex:()=>p5,getEinsumComputePath:()=>x5,getEinsumPermutation:()=>h5,getFusedBiasGradient:()=>Yu,getFusedDyActivation:()=>Xu,getImageCenter:()=>HX,getInnerMostAxes:()=>mK,getPermuted:()=>qX,getRaggedRank:()=>WX,getReductionAxes:()=>xd,getReshaped:()=>KX,getReshapedPermuted:()=>jX,getRowPartitionTypesHelper:()=>VX,getSliceBeginCoords:()=>XX,getSliceSize:()=>YX,getSparseFillEmptyRowsIndicesDenseShapeMismatch:()=>w5,getSparseFillEmptyRowsNegativeIndexErrorMessage:()=>S5,getSparseFillEmptyRowsOutOfRangeIndexErrorMessage:()=>I5,getSparseReshapeEmptyTensorZeroOutputDimErrorMessage:()=>N5,getSparseReshapeInputOutputMismatchErrorMessage:()=>_5,getSparseReshapeInputOutputMultipleErrorMessage:()=>T5,getSparseReshapeMultipleNegativeOneOutputDimErrorMessage:()=>v5,getSparseReshapeNegativeOutputDimErrorMessage:()=>k5,getSparseSegmentReductionIndicesOutOfRangeErrorMessage:()=>D5,getSparseSegmentReductionNegativeSegmentIdsErrorMessage:()=>E5,getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage:()=>$5,getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage:()=>R5,getUndoAxesPermutation:()=>lK,isIdentityPermutation:()=>y5,log:()=>t4,mergeRealAndImagArrays:()=>s5,prepareAndValidate:()=>lT,prepareSplitSize:()=>C5,segment_util:()=>mS,shouldFuse:()=>Zu,slice_util:()=>pt,splitRealAndImagArrays:()=>a5,stridesOrDilationsArePositive:()=>Ta,tupleValuesAreOne:()=>Bu,upcastType:()=>dt,validateDefaultValueShape:()=>UX,validateInput:()=>lc,validateUpdateShape:()=>Qw,warn:()=>Ia});function LX(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 BX(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 VX(r){let e={FIRST_DIM_SIZE:Fa.FIRST_DIM_SIZE,VALUE_ROWIDS:Fa.VALUE_ROWIDS,ROW_LENGTHS:Fa.ROW_LENGTHS,ROW_SPLITS:Fa.ROW_SPLITS,ROW_LIMITS:Fa.ROW_LIMITS,ROW_STARTS:Fa.ROW_STARTS},t=[];for(let o of r)if(o in e)t.push(e[o]);else break;return t}function WX(r){return r.length===0?0:r[0]===Fa.FIRST_DIM_SIZE?r.length-1:r.length}function UX(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 uf=30;function GX(r){return r<=uf?r:Up(r,Math.floor(Math.sqrt(r)))}function HX(r,e,t){let o=t*(typeof r=="number"?r:r[0]),n=e*(typeof r=="number"?r:r[1]);return[o,n]}function KX(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 jX(r,e,t,o=!0){let n=[];o?n.push(r[0]/t):n.push(r[0]*t);for(let s=1;s/g,wT=",",ST="...";function f5(r,e){r=r.replace(/\s/g,"");let t=(r.length-r.replace(d5,"").length)/lS.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 ("${lS}").`);let[o,n]=r.split(lS);E(o.indexOf(ST)===-1,()=>`The ellipsis notation ("${ST}") is not supported yet.`);let s=o.split(wT),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 g5(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 x5(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 b5(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 w5(r){return`Received SparseTensor with denseShape[0] = 0 but indices.shape[0] = ${r}`}function S5(r,e){return`indices(${r}, 0) is invalid: ${e} < 0`}function I5(r,e,t){return`indices(${r}, 0) is invalid: ${e} >= ${t}`}function v5(r,e){return`only one output dimension may be -1, not both ${r} and ${e}`}function k5(r,e){return`size ${r} must be non-negative, not ${e}`}function N5(){return"reshape cannot infer the missing input size for an empty tensor unless all specified input sizes are non-zero"}function T5(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 _5(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 E5(){return"segment ids must be >= 0"}function $5(){return"segment ids are not increasing"}function R5(r,e){return`Segment id ${r} out of range [0, ${e}), possibly because segmentIds input is not sorted.`}function D5(r,e,t){return`Bad: indices[${r}] == ${e} out of range [0, ${t})`}var mS={};qe(mS,{collectGatherOpShapeInfo:()=>P5,computeOutShape:()=>F5,segOpComputeOptimalWindowSize:()=>A5});function A5(r,e){let t=!1,o;for(r<=uf?(o=r,t=!0):o=Up(r,Math.floor(Math.sqrt(r)));!t;)o>e||o===r?t=!0:o=Up(r,o+1);return o}function F5(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(tJp(e))}catch(e){throw new Error(`Failed to decode encoded string bytes into utf-8, error: ${e}`)}}function M5(r){return r.map(e=>Ji(e))}var Vt={};qe(Vt,{nonMaxSuppressionV3Impl:()=>Jd,nonMaxSuppressionV4Impl:()=>ef,nonMaxSuppressionV5Impl:()=>tf,whereImpl:()=>Xd});XN();var L5=A();L5.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 Dr;(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"})(Dr||(Dr={}));var IT;(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={}))})(IT||(IT={}));var fS={};function z5(r,e){let t={tfOpName:r,category:"custom",inputs:[],attrs:[],customExecutor:e};fS[r]=t}function pf(r){return fS[r]}function V5(r){delete fS[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,u=i<0?e.inputNames.length+i:i;if(s.type==="tensor")return Bt(e.inputNames[u],t,o,n);if(s.type==="tensors"){let m=e.inputs.slice(i,p);return e.inputNames.slice(i,p).filter((f,h)=>{var g;return((g=m[h])===null||g===void 0?void 0:g.op)!=="NoOp"}).map(f=>Bt(f,t,o,n))}let c=Bt(e.inputNames[u],t,o,n),l=c.dataSync();return s.type==="number"?l[0]:y.toNestedArray(c.shape,l)}let a=e.attrParams[r];return a&&a.value}function Bt(r,e,t,o){let[n,s]=Nr(r,t);if(o!=null){let i=o.getHashTableHandleByName(n);if(i!=null)return i}let a=t.currentContextIds.find(i=>!!e[cf(n,i)]);return a!==void 0?e[cf(n,a)][s]:void 0}function hS(r,e,t){return e[cf(r,t.currentContextId)]}function Ls(r,e){let[t,o,n]=Nr(r,e);return[cf(t,e&&e.currentContextId),o,n]}function cf(r,e){return e?`${r}-${e}`:r}function Nr(r,e){if(r==="")return["",0,void 0];let t=e!=null&&e.parseNodeNameCache!=null;if(t){let s=e.parseNodeNameCache.get(r);if(s!=null)return s}let o=r.split(":"),n;if(o.length===1)n=[r,0,void 0];else{let s=o[0],a=o.length===3?o[1]:void 0,i=Number(o[o.length-1]);n=[s,i,a]}return t&&e.parseNodeNameCache.set(r,n),n}function Pl(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 Bs(r){return r.kept?r:Ur(r)}var gS={};qe(gS,{json:()=>W5});var W5=[{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 xS={};qe(xS,{json:()=>U5});var U5=[{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:"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}]},{tfOpName:"IsFinite",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"IsInf",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]}];var yS={};qe(yS,{json:()=>G5});var G5=[{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 bS={};qe(bS,{json:()=>H5});var H5=[{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 CS={};qe(CS,{json:()=>K5});var K5=[{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:"RandomUniformInt",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"minval",name:"minval",type:"number"},{tfName:"maxval",name:"maxval",type:"number"},{tfName:"seed",name:"seed",type:"number",defaultValue:0},{tfName:"seed2",name:"seed2",type:"number",defaultValue:0,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 wS={};qe(wS,{json:()=>q5});var q5=[{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 SS={};qe(SS,{json:()=>j5});var j5=[{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 IS={};qe(IS,{json:()=>X5});var X5=[{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 vS={};qe(vS,{json:()=>Y5});var Y5=[{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 kS={};qe(kS,{json:()=>Q5});var Q5=[{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 NS={};qe(NS,{json:()=>Z5});var Z5=[{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}]},{tfOpName:"BitwiseAnd",category:"logical",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"y",type:"tensor"}]}];var TS={};qe(TS,{json:()=>J5});var J5=[{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"}]},{tfOpName:"MatrixBandPart",category:"matrices",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"numLower",type:"tensor"},{start:1,name:"numUpper",type:"tensor"}]}];var _S={};qe(_S,{json:()=>e8});var e8=[{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"}]}];var ES={};qe(ES,{json:()=>t8});var t8=[{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"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{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 $S={};qe($S,{json:()=>r8});var r8=[{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}]},{tfOpName:"TensorScatterUpdate",category:"slice_join",inputs:[{start:0,name:"tensor",type:"tensor"},{start:1,name:"indices",type:"tensor"},{start:2,name:"values",type:"tensor"}]}];var RS={};qe(RS,{json:()=>o8});var o8=[{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 DS={};qe(DS,{json:()=>n8});var n8=[{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 AS={};qe(AS,{json:()=>s8});var s8=[{tfOpName:"StaticRegexReplace",category:"string",inputs:[{start:0,name:"input",type:"tensor"}],attrs:[{tfName:"pattern",name:"pattern",type:"string"},{tfName:"rewrite",name:"rewrite",type:"string"},{tfName:"replace_global",name:"replaceGlobal",type:"bool"}]},{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 FS={};qe(FS,{json:()=>a8});var a8=[{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:"EnsureShape",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 Ol=class{static get Instance(){return this._instance||(this._instance=new this)}constructor(){let e=[gS,xS,yS,bS,CS,wS,SS,IS,vS,kS,NS,TS,_S,ES,$S,RS,DS,AS,FS],t=[].concat(...e.map(o=>o.json));this.opMappers=t.reduce((o,n)=>(o[n.tfOpName]=n,o),{})}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,,S]=Ls(x),k=i[C];if(k.outputs!=null){let _=k.outputs.indexOf(S);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]=Ls(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]=Ls(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=pf(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=lf(e.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=lf(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"string[]":i=yf(e.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=yf(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"number":i=df(e.attr,s.tfName,s.defaultValue||0),i===void 0&&s.tfDeprecatedName&&(i=df(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"number[]":i=xf(e.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=xf(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"bool":i=mf(e.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=mf(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"bool[]":i=Cf(e.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=Cf(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"shape":i=gf(e.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=gf(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"shape[]":i=bf(e.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=bf(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"dtype":i=ff(e.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=ff(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"dtype[]":i=hf(e.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=hf(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"func":i=vT(e.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=vT(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]=Ls(l.name),d={name:m,op:"Placeholder",inputs:[],inputNames:[],category:"graph",inputParams:{},attrParams:{dtype:{value:PS(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]=Ls(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]=Ls(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 i8(r){let e=A().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 kT(r,e){let t=Array.isArray(r)?String.fromCharCode.apply(null,r):i8(r);return e?t:t.toLowerCase()}function lf(r,e,t,o=!1){let n=r[e];return n!=null?kT(n.s,o):t}function mf(r,e,t){let o=r[e];return o?o.b:t}function df(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 PS(r){switch(typeof r=="string"&&(r=Dr[r]),r){case Dr.DT_FLOAT:case Dr.DT_HALF:return"float32";case Dr.DT_INT32:case Dr.DT_INT64:case Dr.DT_INT8:case Dr.DT_UINT8:return"int32";case Dr.DT_BOOL:return"bool";case Dr.DT_DOUBLE:return"float32";case Dr.DT_STRING:return"string";case Dr.DT_COMPLEX64:case Dr.DT_COMPLEX128:return"complex64";default:return null}}function vT(r,e,t){let o=r[e];return o&&o.func?o.func.name:t}function ff(r,e,t){let o=r[e];return o&&o.type?PS(o.type):t}function hf(r,e,t){let o=r[e];return o&&o.list&&o.list.type?o.list.type.map(n=>PS(n)):t}function NT(r){if(!r.unknownRank)return r.dim!=null?r.dim.map(e=>typeof e.size=="number"?e.size:parseInt(e.size,10)):[]}function gf(r,e,t){let o=r[e];return o&&o.shape?NT(o.shape):t}function xf(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 yf(r,e,t,o=!1){let n=r[e];return n&&n.list&&n.list.s?n.list.s.map(s=>kT(s,o)):t}function bf(r,e,t){let o=r[e];return o&&o.list&&o.list.shape?o.list.shape.map(n=>NT(n)):t}function Cf(r,e,t){let o=r[e];return o&&o.list&&o.list.b?o.list.b:t}var wf=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 Bt(e,this.tensorMap,this.context)}getAttr(e,t){let o=this.node.rawAttrs[e];if(o.tensor!=null)return Bt(e,this.tensorMap,this.context);if(o.i!=null||o.f!=null)return df(this.node.rawAttrs,e,t);if(o.s!=null)return lf(this.node.rawAttrs,e,t);if(o.b!=null)return mf(this.node.rawAttrs,e,t);if(o.shape!=null)return gf(this.node.rawAttrs,e,t);if(o.type!=null)return ff(this.node.rawAttrs,e,t);if(o.list!=null){if(o.list.i!=null||o.list.f!=null)return xf(this.node.rawAttrs,e,t);if(o.list.s!=null)return yf(this.node.rawAttrs,e,t);if(o.list.shape!=null)return bf(this.node.rawAttrs,e,t);if(o.list.b!=null)return Cf(this.node.rawAttrs,e,t);if(o.list.type!=null)return hf(this.node.rawAttrs,e,t)}return t}};var Je={};qe(Je,{OP_SCOPE_SUFFIX:()=>Nw,abs:()=>Qt,acos:()=>Rk,acosh:()=>Dk,add:()=>Ce,addN:()=>Ak,all:()=>Fk,any:()=>Pk,argMax:()=>Ok,argMin:()=>Mk,asin:()=>Lk,asinh:()=>Bk,atan:()=>zk,atan2:()=>Vk,atanh:()=>Wk,avgPool:()=>dd,avgPool3d:()=>Hk,basicLSTMCell:()=>Kk,batchNorm:()=>nu,batchNorm2d:()=>jk,batchNorm3d:()=>Xk,batchNorm4d:()=>Yk,batchToSpaceND:()=>fd,bincount:()=>hd,bitwiseAnd:()=>Qk,booleanMaskAsync:()=>L6,broadcastArgs:()=>Zk,broadcastTo:()=>su,buffer:()=>me,cast:()=>Ue,ceil:()=>Jk,clipByValue:()=>e2,clone:()=>Ur,complex:()=>Er,concat:()=>yt,concat1d:()=>t2,concat2d:()=>r2,concat3d:()=>o2,concat4d:()=>n2,conv1d:()=>s2,conv2d:()=>au,conv2dTranspose:()=>a2,conv3d:()=>i2,conv3dTranspose:()=>p2,cos:()=>c2,cosh:()=>l2,cosineWindow:()=>$l,cumprod:()=>m2,cumsum:()=>d2,denseBincount:()=>f2,depthToSpace:()=>h2,depthwiseConv2d:()=>sc,diag:()=>g2,dilation2d:()=>x2,div:()=>je,divNoNan:()=>b2,dot:()=>C2,dropout:()=>Y6,einsum:()=>iu,elu:()=>bd,enclosingPowerOfTwo:()=>Zw,ensureShape:()=>w2,equal:()=>yd,erf:()=>S2,euclideanNorm:()=>k2,exp:()=>_o,expandDims:()=>Ms,expm1:()=>N2,eye:()=>Cd,fft:()=>uc,fill:()=>$a,floor:()=>wd,floorDiv:()=>md,fused:()=>Jw,gather:()=>Sd,gatherND:()=>j6,greater:()=>Wu,greaterEqual:()=>Id,ifft:()=>ju,imag:()=>pu,image:()=>eX,inTopKAsync:()=>Z6,irfft:()=>Hd,isFinite:()=>T2,isInf:()=>_2,isNaN:()=>E2,leakyRelu:()=>vd,less:()=>Tl,lessEqual:()=>ac,linalg:()=>tX,linspace:()=>$2,localResponseNormalization:()=>R2,log:()=>pi,log1p:()=>kd,logSigmoid:()=>D2,logSoftmax:()=>A2,logSumExp:()=>_d,logicalAnd:()=>Uu,logicalNot:()=>Ed,logicalOr:()=>$d,logicalXor:()=>F2,losses:()=>rX,lowerBound:()=>P2,matMul:()=>Ze,max:()=>Ra,maxPool:()=>Dd,maxPool3d:()=>O2,maxPoolWithArgmax:()=>M2,maximum:()=>Ad,mean:()=>Gu,meshgrid:()=>L2,min:()=>Nl,minimum:()=>Hu,mirrorPad:()=>B2,mod:()=>z2,moments:()=>V2,movingAverage:()=>V6,mul:()=>se,multiRNNCell:()=>W2,multinomial:()=>U2,neg:()=>pr,norm:()=>Vu,notEqual:()=>Fd,oneHot:()=>El,ones:()=>Da,onesLike:()=>G2,op:()=>N,outerProduct:()=>H2,pad:()=>Aa,pad1d:()=>K2,pad2d:()=>q2,pad3d:()=>j2,pad4d:()=>X2,pool:()=>Y2,pow:()=>ui,prelu:()=>Od,print:()=>ld,prod:()=>Q2,raggedGather:()=>Z2,raggedRange:()=>J2,raggedTensorToTensor:()=>e1,rand:()=>t1,randomGamma:()=>S1,randomNormal:()=>Wd,randomStandardNormal:()=>I1,randomUniform:()=>ic,randomUniformInt:()=>v1,range:()=>cu,real:()=>ci,reciprocal:()=>k1,relu:()=>lu,relu6:()=>Ud,reshape:()=>W,reverse:()=>mo,reverse1d:()=>N1,reverse2d:()=>T1,reverse3d:()=>_1,reverse4d:()=>E1,rfft:()=>pc,round:()=>Gd,rsqrt:()=>$1,scalar:()=>ke,scatterND:()=>U6,searchSorted:()=>_l,selu:()=>R1,separableConv2d:()=>D1,setdiff1dAsync:()=>A1,sigmoid:()=>Ea,sign:()=>F1,signal:()=>Jj,sin:()=>P1,sinh:()=>O1,slice:()=>Xe,slice1d:()=>M1,slice2d:()=>L1,slice3d:()=>B1,slice4d:()=>z1,softmax:()=>V1,softplus:()=>Td,spaceToBatchND:()=>Pd,sparse:()=>oX,sparseToDense:()=>K6,spectral:()=>Zj,split:()=>li,sqrt:()=>Rr,square:()=>Zt,squaredDifference:()=>Kd,squeeze:()=>cc,stack:()=>vr,step:()=>qd,stridedSlice:()=>W1,string:()=>nX,sub:()=>Te,sum:()=>ot,tan:()=>U1,tanh:()=>kl,tensor:()=>ar,tensor1d:()=>Jt,tensor2d:()=>mu,tensor3d:()=>jd,tensor4d:()=>G1,tensor5d:()=>H1,tensor6d:()=>K1,tensorScatterUpdate:()=>j1,tile:()=>uu,topk:()=>X1,transpose:()=>mc,truncatedNormal:()=>Y1,unique:()=>Q1,unsortedSegmentSum:()=>Z1,unstack:()=>fo,upperBound:()=>J1,variable:()=>eN,where:()=>lo,whereAsync:()=>Yd,zeros:()=>Gr,zerosLike:()=>Gt});var TT=(r,e,t,o=Je)=>{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 _T=(r,e,t,o=Je)=>{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(Bt(r.inputNames[0],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(Bt(r.inputNames[0],e,t))];case"IsInf":return[o.isInf(Bt(r.inputNames[0],e,t))];case"IsFinite":return[o.isFinite(Bt(r.inputNames[0],e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};function Hr(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 ET(r){return!(typeof r=="number"||r.some(e=>e<0))}function fc(r,e,t){let o=Sf(r,t),n=!ET(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=Sf(s.shape,o)}),!ET(o))throw new Error(`Non-fully-defined elementShape: ${o}`);return o}function Sf(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 If=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=ke(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}, @@ -37,20 +37,20 @@ Manifest JSON has weights with names: ${i.join(", ")}.`)}let p=n.reduce((d,f,h)= 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=[];De(()=>{t=W(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}`);Hr(t,s.shape,"TensorList shape mismatch: "),$r(s)}),this.idTensor=ke(0),this.maxNumElements=n,$r(this.idTensor)}copy(){return new r([...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.`);Hr(e,this.elementShape,"TensorList shape mismatch: ");let n=fc(this.elementShape,this.tensors,e);return De(()=>{let s=this.tensors.map(a=>W(a,n));return vr(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=fc(this.elementShape,this.tensors,e),n=this.tensors.pop();return n.kept=!1,Hr(n.shape,e,"TensorList shape mismatch: "),W(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(Hr(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 r([],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.`);Hr(this.tensors[e].shape,t,"TensorList shape mismatch: ");let n=fc(this.elementShape,this.tensors,t);return W(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.`);Hr(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}`);Hr(this.elementShape,o,"TensorList shape mismatch: "),e=e.slice(0,this.size());let n=fc(this.elementShape,this.tensors,o);return e.length===0?ar([],[0].concat(n)):De(()=>{let s=e.map(a=>W(this.tensors[a],n));return vr(s,0)})}concat(e,t){if(e&&e!==this.elementDtype)throw new Error(`TensorList dtype is ${this.elementDtype} but concat requested dtype ${e}`);Hr(this.elementShape,t,"TensorList shape mismatch: ");let o=fc(this.elementShape,this.tensors,t);return this.size()===0?ar([],[0].concat(o)):De(()=>{let n=this.tensors.map(s=>W(s,o));return yt(n,0)})}};function $T(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);Hr(n,e,"TensorList shape mismatch: ");let s=fo(r);return new hc(s,e,o)}function RT(r,e,t,o){return new hc([],r,e,o)}function DT(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 hc([],t,r.dtype,o),a=fo(r,0);return e.forEach((i,p)=>{s.setItem(i,a[p])}),s}function AT(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=Sf(s,t),i=o===0?0:r.size/o,p=De(()=>{let c=[];r=W(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[Bs(o)]}case"Switch":{let o=I("pred",r,e,t),n=I("data",r,e,t);return n.kept||(n=Bs(n)),(await o.data())[0]?[void 0,n]:[n,void 0]}case"Merge":{let o=r.inputNames.find(n=>Bt(n,e,t)!==void 0);if(o){let n=Bt(o,e,t);return[Bs(n)]}return}case"Enter":{let o=I("frameName",r,e,t),n=I("tensor",r,e,t);return t.enterFrame(o),[Bs(n)]}case"Exit":{let o=I("tensor",r,e,t);return t.exitFrame(),[Bs(o)]}case"NextIteration":{let o=I("tensor",r,e,t);return t.nextIteration(),[Bs(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 If(u,n,o,s,p,a,i);return t.addTensorArray(c),[c.idTensor,ke(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[ke(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=DT(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=RT(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=$T(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=AT(o,s,n);return t.addTensorList(a),[a.idTensor]}case"TensorListLength":{let o=I("tensorListId",r,e,t),n=t.getTensorList(o.id);return[ke(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 PT(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=Pl(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 OT=(r,e,t,o=Je)=>{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=Pl(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}=PT(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}=PT(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=Pl(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=Pl(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 MT=(r,e,t,o=Je)=>{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"RandomUniformInt":return[o.randomUniformInt(I("shape",r,e,t),I("minval",r,e,t),I("maxval",r,e,t),I("seed",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 OS(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 LT=async(r,e,t,o,n=Je)=>{switch(r.op){case"NonMaxSuppressionV5":{let{boxes:s,scores:a,maxOutputSize:i,iouThreshold:p,scoreThreshold:u,softNmsSigma:c}=OS(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}=OS(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}=OS(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 BT=(r,e,t,o=Je)=>{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 zT=(r,e,t,o=Je)=>{switch(r.op){case"Const":return e[r.name];case"PlaceholderWithDefault":let n=I("default",r,e,t);return[Bt(r.name,e,t)||n];case"Placeholder":return[Bt(r.name,e,t)];case"Identity":case"StopGradient":case"FakeQuantWithMinMaxVars":{let c=I("x",r,e,t);return[Bs(c)]}case"IdentityN":return I("x",r,e,t).map(c=>Bs(c));case"Snapshot":let s=I("x",r,e,t);return[Bs(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 ke(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(),De(()=>{let n=fo(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 vf(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 WT=(r,e,t,o=Je)=>{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 UT=(r,e,t,o=Je)=>{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))];case"BitwiseAnd":return[o.bitwiseAnd(I("a",r,e,t),I("b",r,e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var GT=(r,e,t,o=Je)=>{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})];case"MatrixBandPart":return[o.linalg.bandPart(I("a",r,e,t),I("numLower",r,e,t),I("numUpper",r,e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var HT=(r,e,t,o=Je)=>{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))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var KT=(r,e,t,o=Je)=>{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 qT=(r,e,t,o=Je)=>{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 jT=(r,e,t,o=Je)=>{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))]}case"TensorScatterUpdate":{let n=I("indices",r,e,t),s=I("values",r,e,t),a=I("tensor",r,e,t);return[o.tensorScatterUpdate(a,n,s)]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};var XT=(r,e,t,o=Je)=>{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 YT=(r,e,t,o=Je)=>{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 QT=(r,e,t,o=Je)=>{switch(r.op){case"StaticRegexReplace":return[o.string.staticRegexReplace(I("input",r,e,t),I("pattern",r,e,t),I("rewrite",r,e,t),I("replaceGlobal",r,e,t))];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 ZT=(r,e,t,o=Je)=>{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"EnsureShape":return[o.ensureShape(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 MS(r,e,t,o,n=De){let s=((a,i,p)=>{switch(a.category){case"arithmetic":return n(()=>TT(a,i,p));case"basic_math":return n(()=>_T(a,i,p));case"control":return FT(a,i,p);case"convolution":return n(()=>OT(a,i,p));case"creation":return n(()=>MT(a,i,p));case"dynamic":return LT(a,i,p);case"evaluation":return n(()=>BT(a,i,p));case"image":return n(()=>WT(a,i,p));case"graph":return n(()=>zT(a,i,p));case"logical":return n(()=>UT(a,i,p));case"matrices":return n(()=>GT(a,i,p));case"normalization":return n(()=>HT(a,i,p));case"ragged":return n(()=>KT(a,i,p));case"reduction":return n(()=>qT(a,i,p));case"slice_join":return n(()=>jT(a,i,p));case"sparse":return n(()=>XT(a,i,p));case"spectral":return n(()=>YT(a,i,p));case"string":return n(()=>QT(a,i,p));case"transformation":return n(()=>ZT(a,i,p));case"hash_table":return VT(a,i,p,o);case"custom":let u=pf(a.op);if(u&&u.customExecutor)return u.customExecutor(new wf(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 Ml=class{constructor(e={},t={},o={},n={},s){this.weightMap=e,this.tensorArrayMap=t,this.tensorListMap=o,this.functionMap=n,this.parseNodeNameCache=s,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 LS(r,e,t,o){let n=new Set,s=[],a=null,i=null,p=new Set,u=new Set(Object.keys(r).map(m=>Nr(m)[0]));o=o||[];let c=new Set(o.map(m=>Nr(m.name)[0])),l=[...e];for(;l.length>0;){let m=l.pop();if((fu(m)||A8(m)||F8(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.has(m.name)&&!c.has(m.name)){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 JT(r,e){let{usedNodes:t,inputs:o}=e,n=Object.keys(o).map(g=>Nr(g)[0]).map(g=>r.nodes[g]),s=r.initNodes||[],a=g=>t.has(typeof g=="string"?g:g.name);function i(g){return[...new Map(g.map(x=>[x.name,x])).values()]}let p=i([...n,...r.weights,...s]).filter(a),u=i([...p,...Object.values(r.nodes)]).filter(a),c=new Map(u.map(g=>[g.name,g])),l={};for(let g of u){l[g.name]=l[g.name]||0;for(let x of g.children)a(x)||(l[x.name]=Number.POSITIVE_INFINITY),l[x.name]=(l[x.name]||0)+1}let m=Object.entries(l).filter(([,g])=>g===0).map(([g])=>g),d=[...m];for(;m.length>0;){let g=m.pop(),x=c.get(g);for(let b of x.children.filter(a))--l[b.name]===0&&(d.push(b.name),m.push(b.name))}let f=d.map(g=>c.get(g)),h=_8(f,p);return E8(h,p),h}function _8(r,e){let t=new Map(r.map(a=>[a.name,a])),o=e.map(a=>a.name),n=new Set(o);for(;o.length>0;){let a=o.pop(),i=t.get(a);for(let p of i.children)!t.has(p.name)||n.has(p.name)||(n.add(p.name),o.push(p.name))}return r.filter(a=>n.has(a.name))}var gc=class extends Error{constructor(e){super(`NodesExecutionOrderError: ${e}`)}};function E8(r,e){let t=new Map(r.map((i,p)=>[i.name,p])),o=new Set(e.map(i=>i.name)),n=i=>o.has(typeof i=="string"?i:i.name),s=new Set(r.map(i=>i.name)),a=i=>s.has(typeof i=="string"?i:i.name);for(let i of r){for(let p of i.children.filter(a)){if(!t.has(p.name))throw new gc(`Child ${p.name} of node ${i.name} is unreachable.`);if(t.get(i.name)>t.get(p.name))throw new gc(`Node ${i.name} is scheduled to run after its child ${p.name}.`)}if(!n(i))for(let p of i.inputs){if(!t.has(p.name))throw new gc(`Input ${p.name} of node ${i.name} is unreachable.`);if(t.get(p.name)>t.get(i.name))throw new gc(`Node ${i.name} is scheduled to run before its input ${p.name}.`)}}}function e_(r){let e=new Map(r.map((i,p)=>[i.name,p])),t=Number.MAX_SAFE_INTEGER,o=r.map((i,p)=>fu(i)?t:p),n=i=>{let p=o[e.get(i.name)];return p==null?-1:p},s=r.map((i,p)=>i.children.map(n).reduce((u,c)=>Math.max(u,c),o[p])),a=new Map;for(let i=0;ie[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),{})}constructor(e,t){this.graph=e,this.parent=t,this.compiledMap=new Map,this.parseNodeNameCache=new Map,this._weightMap={},this.SEPARATOR=",",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 r(e.functions[o],this)})}getCompilationKey(e,t){let o=e.map(s=>s.name).sort(),n=t.map(s=>s.name).sort();return o.join(this.SEPARATOR)+"--"+n.join(this.SEPARATOR)}compile(e,t){let o=LS(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 u=t.map(l=>l.name),c=Object.keys(e);throw new Error(`Cannot compute the outputs [${u}] from the provided inputs [${c}]. Missing the following inputs: [${n}]`)}let i=JT(this.graph,o),p=e_(i);return{orderedNodes:i,nodeLiveUntilMap:p}}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(m=>this.graph.nodes[Nr(m)[0]]),s=t.map(m=>Nr(m)[0]),a=new Set(s),i=s.map(m=>this.graph.nodes[m]);i.length===0&&(i=this._outputs);let p=this.getCompilationKey(n,i),u=this.compiledMap.get(p);u==null&&(u=this.compile(e,i),this.compiledMap.set(p,u));try{this.keepIntermediateTensors=A().getBool("KEEP_INTERMEDIATE_TENSORS")}catch(m){this.keepIntermediateTensors=!1,console.warn(m.message)}let c={},l={};return De(()=>{let m=new Ml(this.weightMap,c,l,this.functionExecutorMap,this.parseNodeNameCache),d=Object.assign({},this.weightMap);this.keepIntermediateTensors&&(this.clonedTensorsMap=this.cloneTensorMap(this.weightMap)),Object.keys(e).forEach(x=>{let[b,C]=Nr(x,m),S=[];S[C]=e[x],d[b]=S,this.keepIntermediateTensors&&(this.clonedTensorsMap[b]=this.cloneTensorList(S))});let f=this.getFrozenTensorIds(d),{orderedNodes:h,nodeLiveUntilMap:g}=u;for(let x of h){if(d[x.name])continue;let b=MS(x,d,m,this._resourceManager);if(y.isPromise(b))throw new Error(`The execution of the op '${x.op}' returned a promise. Please use model.executeAsync() instead.`);d[x.name]=b,this.keepIntermediateTensors&&(this.clonedTensorsMap[x.name]=this.cloneTensorList(b)),this.checkTensorForDisposalWithNodeLiveUntilInfo(x,d,m,f,a,g.get(x.name))}return this.parent==null&&m.dispose(f),t.map(x=>Bt(x,d,m))})}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){if(!(fu(t)||a.has(e))){for(let p of o[e])p!=null&&(i[p.id]=(i[p.id]||0)+t.children.length);for(let p of t.inputs){if(fu(p))continue;let u=hS(p.name,o,n);if(u!=null)for(let c of u){if(!c||c.kept||s.has(c.id))continue;let l=i[c.id];l===1?(c.dispose(),delete i[c.id]):l!=null&&i[c.id]--}}}}checkTensorForDisposalWithNodeLiveUntilInfo(e,t,o,n,s,a){function i(p){return fu(p)||s.has(p.name)}if(!(fu(e)||a==null))for(let p of a){if(i(p))continue;let u=hS(p.name,t,o);for(let c of u)!c||c.kept||n.has(c.id)||c.dispose()}}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=A().getBool("KEEP_INTERMEDIATE_TENSORS")}catch(m){this.keepIntermediateTensors=!1,console.warn(m.message)}let a=new Ml(this.weightMap,n,s,this.functionExecutorMap,this.parseNodeNameCache);this.keepIntermediateTensors&&(this.clonedTensorsMap=this.cloneTensorMap(this.weightMap));let i=await this.executeWithControlFlow(e,a,t,o),p=t.map(m=>Bt(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(S=>this.graph.nodes[Nr(S)[0]]),i=o.map(S=>Nr(S)[0]),p=new Set(i),u=i.map(S=>this.graph.nodes[S]);u.length===0&&(u=this._outputs);let{usedNodes:c,missingInputs:l,dynamicNode:m,syncInputs:d}=LS(e,u,this.weightMap,this._initNodes),f=[...a,...this.graph.weights,...this._initNodes||[]].map(S=>({node:S,contexts:t.currentContext})),h=Object.assign({},this.weightMap);Object.keys(e).forEach(S=>{let[k,_]=Nr(S),$=[];$[_]=e[S],h[k]=$});let g={},x=this.getFrozenTensorIds(h),b={};for(;f.length>0;){let S=this.processStack(a,f,t,h,b,x,p,g,c);await Promise.all(S)}m==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 C=u.filter(S=>!fu(S)&&!Bt(S.name,h,t)).map(S=>S.name);if(C.length>0){let S="";throw m!=null&&(S=`Alternatively, to avoid the dynamic ops, use model.execute() and specify the inputs [${d}]`),new Error(`Cannot compute the outputs [${C}] from the provided inputs [${s}]. Consider providing the following inputs: [${l}]. ${S}`)}return h}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]=Ls(l.node.name,o)),n[l.node.name]==null){let d=MS(l.node,n,o,this._resourceManager);m||([m]=Ls(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]=Ls(i.name,o);s[p]||!a.has(i.name)||(i.op==="Merge"?i.inputNames.some(u=>!!Bt(u,n,o))&&(s[p]=!0,t.push({contexts:o.currentContext,node:i})):i.inputNames.every(u=>!!Bt(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]=Nr(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]=Nr(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]=Nr(t);if(!this.graph.nodes[o])throw new Error(`The output '${t}' is not found in the graph`)})}};var kf=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 P8="?tfjs-format=file",O8="model.json",Bl=class{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}constructor(e,t={},o=di){this.modelUrl=e,this.loadOptions=t,this.version="n/a",this.io=o,t==null&&(this.loadOptions={}),this.resourceManager=new kf}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=>t.getWeightStream==null?this.loadSync(t):this.loadStreaming(t)):this.loadSync(e)}loadSync(e){let t=this.io.decodeWeights(e.weightData,e.weightSpecs);return this.loadWithWeightMap(e,t)}async loadStreaming(e){if(e.getWeightStream==null)throw new Error("Model artifacts missing streamWeights function");let t=await ad(e.getWeightStream(),e.weightSpecs);return this.loadWithWeightMap(e,t)}loadWithWeightMap(e,t){this.artifacts=e;let o=this.artifacts.modelTopology,n=this.artifacts.signature;if(this.artifacts.userDefinedMetadata!=null){let s=this.artifacts.userDefinedMetadata;s.signature!=null&&(n=s.signature),s.structuredOutputKeys!=null&&(this.structuredOutputKeys=s.structuredOutputKeys)}if(this.signature=n,this.version=`${o.versions.producer}.${o.versions.minConsumer}`,this.executor=new Ll(Ol.Instance.transformGraph(o,this.signature)),this.executor.weightMap=this.convertTensorMapToTensorsMap(t),this.executor.resourceManager=this.resourceManager,e.modelInitializer!=null&&e.modelInitializer.node!=null){let s=Ol.Instance.transformGraph(e.modelInitializer);this.initializer=new Ll(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 mt?[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 mt)&&!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&&Ot(this.resourceIdToCapturedInput)),this.resourceManager.dispose()}};async function M8(r,e={},t=di){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=B8(r));let o=new Bl(r,e,t);return await o.load(),o}function L8(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=di.getWeightSpecs(o.weightsManifest),a=di.getModelArtifactsForJSONSync(o,s,n);e=di.fromMemorySync(a)}else if("load"in r)e=r;else if("modelTopology"in r&&"weightSpecs"in r&&"weightData"in r)e=di.fromMemorySync(r);else throw new Error("Unknown model format");let t=new Bl(e);return t.load(),t}function B8(r){return r.endsWith("/")||(r=r+"/"),`${r}${O8}${P8}`}var z8="4.17.0";function Q(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 V8=Vt.whereImpl,xc=class r extends ao{nextDataId(){return r.nextDataId++}constructor(){super(),this.blockSize=48,this.firstUse=!0,this.data=new Bo(this,ur())}write(e,t,o){this.firstUse&&(this.firstUse=!1,A().get("IS_NODE")&&w.warn(` + ${o}, and tensor's shape is: ${r.shape}`);let s=r.shape.slice(1),a=Sf(s,t),i=o===0?0:r.size/o,p=De(()=>{let c=[];r=W(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[Bs(o)]}case"Switch":{let o=I("pred",r,e,t),n=I("data",r,e,t);return n.kept||(n=Bs(n)),(await o.data())[0]?[void 0,n]:[n,void 0]}case"Merge":{let o=r.inputNames.find(n=>Bt(n,e,t)!==void 0);if(o){let n=Bt(o,e,t);return[Bs(n)]}return}case"Enter":{let o=I("frameName",r,e,t),n=I("tensor",r,e,t);return t.enterFrame(o),[Bs(n)]}case"Exit":{let o=I("tensor",r,e,t);return t.exitFrame(),[Bs(o)]}case"NextIteration":{let o=I("tensor",r,e,t);return t.nextIteration(),[Bs(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 If(u,n,o,s,p,a,i);return t.addTensorArray(c),[c.idTensor,ke(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[ke(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=DT(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=RT(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=$T(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=AT(o,s,n);return t.addTensorList(a),[a.idTensor]}case"TensorListLength":{let o=I("tensorListId",r,e,t),n=t.getTensorList(o.id);return[ke(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 PT(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=Pl(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 OT=(r,e,t,o=Je)=>{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=Pl(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}=PT(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}=PT(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=Pl(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=Pl(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 MT=(r,e,t,o=Je)=>{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"RandomUniformInt":return[o.randomUniformInt(I("shape",r,e,t),I("minval",r,e,t),I("maxval",r,e,t),I("seed",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 OS(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 LT=async(r,e,t,o,n=Je)=>{switch(r.op){case"NonMaxSuppressionV5":{let{boxes:s,scores:a,maxOutputSize:i,iouThreshold:p,scoreThreshold:u,softNmsSigma:c}=OS(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}=OS(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}=OS(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 BT=(r,e,t,o=Je)=>{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 zT=(r,e,t,o=Je)=>{switch(r.op){case"Const":return e[r.name];case"PlaceholderWithDefault":let n=I("default",r,e,t);return[Bt(r.name,e,t)||n];case"Placeholder":return[Bt(r.name,e,t)];case"Identity":case"StopGradient":case"FakeQuantWithMinMaxVars":{let c=I("x",r,e,t);return[Bs(c)]}case"IdentityN":return I("x",r,e,t).map(c=>Bs(c));case"Snapshot":let s=I("x",r,e,t);return[Bs(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 ke(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(),De(()=>{let n=fo(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 vf(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 WT=(r,e,t,o=Je)=>{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 UT=(r,e,t,o=Je)=>{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))];case"BitwiseAnd":return[o.bitwiseAnd(I("a",r,e,t),I("b",r,e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var GT=(r,e,t,o=Je)=>{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})];case"MatrixBandPart":return[o.linalg.bandPart(I("a",r,e,t),I("numLower",r,e,t),I("numUpper",r,e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var HT=(r,e,t,o=Je)=>{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))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var KT=(r,e,t,o=Je)=>{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 qT=(r,e,t,o=Je)=>{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 jT=(r,e,t,o=Je)=>{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))]}case"TensorScatterUpdate":{let n=I("indices",r,e,t),s=I("values",r,e,t),a=I("tensor",r,e,t);return[o.tensorScatterUpdate(a,n,s)]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};var XT=(r,e,t,o=Je)=>{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 YT=(r,e,t,o=Je)=>{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 QT=(r,e,t,o=Je)=>{switch(r.op){case"StaticRegexReplace":return[o.string.staticRegexReplace(I("input",r,e,t),I("pattern",r,e,t),I("rewrite",r,e,t),I("replaceGlobal",r,e,t))];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 ZT=(r,e,t,o=Je)=>{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"EnsureShape":return[o.ensureShape(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 MS(r,e,t,o,n=De){let s=((a,i,p)=>{switch(a.category){case"arithmetic":return n(()=>TT(a,i,p));case"basic_math":return n(()=>_T(a,i,p));case"control":return FT(a,i,p);case"convolution":return n(()=>OT(a,i,p));case"creation":return n(()=>MT(a,i,p));case"dynamic":return LT(a,i,p);case"evaluation":return n(()=>BT(a,i,p));case"image":return n(()=>WT(a,i,p));case"graph":return n(()=>zT(a,i,p));case"logical":return n(()=>UT(a,i,p));case"matrices":return n(()=>GT(a,i,p));case"normalization":return n(()=>HT(a,i,p));case"ragged":return n(()=>KT(a,i,p));case"reduction":return n(()=>qT(a,i,p));case"slice_join":return n(()=>jT(a,i,p));case"sparse":return n(()=>XT(a,i,p));case"spectral":return n(()=>YT(a,i,p));case"string":return n(()=>QT(a,i,p));case"transformation":return n(()=>ZT(a,i,p));case"hash_table":return VT(a,i,p,o);case"custom":let u=pf(a.op);if(u&&u.customExecutor)return u.customExecutor(new wf(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 Ml=class{constructor(e={},t={},o={},n={},s){this.weightMap=e,this.tensorArrayMap=t,this.tensorListMap=o,this.functionMap=n,this.parseNodeNameCache=s,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 LS(r,e,t,o){let n=new Set,s=[],a=null,i=null,p=new Set,u=new Set(Object.keys(r).map(m=>Nr(m)[0]));o=o||[];let c=new Set(o.map(m=>Nr(m.name)[0])),l=[...e];for(;l.length>0;){let m=l.pop();if((fu(m)||A8(m)||F8(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.has(m.name)&&!c.has(m.name)){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 JT(r,e){let{usedNodes:t,inputs:o}=e,n=Object.keys(o).map(g=>Nr(g)[0]).map(g=>r.nodes[g]),s=r.initNodes||[],a=g=>t.has(typeof g=="string"?g:g.name);function i(g){return[...new Map(g.map(x=>[x.name,x])).values()]}let p=i([...n,...r.weights,...s]).filter(a),u=i([...p,...Object.values(r.nodes)]).filter(a),c=new Map(u.map(g=>[g.name,g])),l={};for(let g of u){l[g.name]=l[g.name]||0;for(let x of g.children)a(x)||(l[x.name]=Number.POSITIVE_INFINITY),l[x.name]=(l[x.name]||0)+1}let m=Object.entries(l).filter(([,g])=>g===0).map(([g])=>g),d=[...m];for(;m.length>0;){let g=m.pop(),x=c.get(g);for(let b of x.children.filter(a))--l[b.name]===0&&(d.push(b.name),m.push(b.name))}let f=d.map(g=>c.get(g)),h=_8(f,p);return E8(h,p),h}function _8(r,e){let t=new Map(r.map(a=>[a.name,a])),o=e.map(a=>a.name),n=new Set(o);for(;o.length>0;){let a=o.pop(),i=t.get(a);for(let p of i.children)!t.has(p.name)||n.has(p.name)||(n.add(p.name),o.push(p.name))}return r.filter(a=>n.has(a.name))}var gc=class extends Error{constructor(e){super(`NodesExecutionOrderError: ${e}`)}};function E8(r,e){let t=new Map(r.map((i,p)=>[i.name,p])),o=new Set(e.map(i=>i.name)),n=i=>o.has(typeof i=="string"?i:i.name),s=new Set(r.map(i=>i.name)),a=i=>s.has(typeof i=="string"?i:i.name);for(let i of r){for(let p of i.children.filter(a)){if(!t.has(p.name))throw new gc(`Child ${p.name} of node ${i.name} is unreachable.`);if(t.get(i.name)>t.get(p.name))throw new gc(`Node ${i.name} is scheduled to run after its child ${p.name}.`)}if(!n(i))for(let p of i.inputs){if(!t.has(p.name))throw new gc(`Input ${p.name} of node ${i.name} is unreachable.`);if(t.get(p.name)>t.get(i.name))throw new gc(`Node ${i.name} is scheduled to run before its input ${p.name}.`)}}}function e_(r){let e=new Map(r.map((i,p)=>[i.name,p])),t=Number.MAX_SAFE_INTEGER,o=r.map((i,p)=>fu(i)?t:p),n=i=>{let p=o[e.get(i.name)];return p==null?-1:p},s=r.map((i,p)=>i.children.map(n).reduce((u,c)=>Math.max(u,c),o[p])),a=new Map;for(let i=0;ie[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),{})}constructor(e,t){this.graph=e,this.parent=t,this.compiledMap=new Map,this.parseNodeNameCache=new Map,this._weightMap={},this.SEPARATOR=",",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 r(e.functions[o],this)})}getCompilationKey(e,t){let o=e.map(s=>s.name).sort(),n=t.map(s=>s.name).sort();return o.join(this.SEPARATOR)+"--"+n.join(this.SEPARATOR)}compile(e,t){let o=LS(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 u=t.map(l=>l.name),c=Object.keys(e);throw new Error(`Cannot compute the outputs [${u}] from the provided inputs [${c}]. Missing the following inputs: [${n}]`)}let i=JT(this.graph,o),p=e_(i);return{orderedNodes:i,nodeLiveUntilMap:p}}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(m=>this.graph.nodes[Nr(m)[0]]),s=t.map(m=>Nr(m)[0]),a=new Set(s),i=s.map(m=>this.graph.nodes[m]);i.length===0&&(i=this._outputs);let p=this.getCompilationKey(n,i),u=this.compiledMap.get(p);u==null&&(u=this.compile(e,i),this.compiledMap.set(p,u));try{this.keepIntermediateTensors=A().getBool("KEEP_INTERMEDIATE_TENSORS")}catch(m){this.keepIntermediateTensors=!1,console.warn(m.message)}let c={},l={};return De(()=>{let m=new Ml(this.weightMap,c,l,this.functionExecutorMap,this.parseNodeNameCache),d=Object.assign({},this.weightMap);this.keepIntermediateTensors&&(this.clonedTensorsMap=this.cloneTensorMap(this.weightMap)),Object.keys(e).forEach(x=>{let[b,C]=Nr(x,m),S=[];S[C]=e[x],d[b]=S,this.keepIntermediateTensors&&(this.clonedTensorsMap[b]=this.cloneTensorList(S))});let f=this.getFrozenTensorIds(d),{orderedNodes:h,nodeLiveUntilMap:g}=u;for(let x of h){if(d[x.name])continue;let b=MS(x,d,m,this._resourceManager);if(y.isPromise(b))throw new Error(`The execution of the op '${x.op}' returned a promise. Please use model.executeAsync() instead.`);d[x.name]=b,this.keepIntermediateTensors&&(this.clonedTensorsMap[x.name]=this.cloneTensorList(b)),this.checkTensorForDisposalWithNodeLiveUntilInfo(x,d,m,f,a,g.get(x.name))}return this.parent==null&&m.dispose(f),t.map(x=>Bt(x,d,m))})}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){if(!(fu(t)||a.has(e))){for(let p of o[e])p!=null&&(i[p.id]=(i[p.id]||0)+t.children.length);for(let p of t.inputs){if(fu(p))continue;let u=hS(p.name,o,n);if(u!=null)for(let c of u){if(!c||c.kept||s.has(c.id))continue;let l=i[c.id];l===1?(c.dispose(),delete i[c.id]):l!=null&&i[c.id]--}}}}checkTensorForDisposalWithNodeLiveUntilInfo(e,t,o,n,s,a){function i(p){return fu(p)||s.has(p.name)}if(!(fu(e)||a==null))for(let p of a){if(i(p))continue;let u=hS(p.name,t,o);for(let c of u)!c||c.kept||n.has(c.id)||c.dispose()}}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=A().getBool("KEEP_INTERMEDIATE_TENSORS")}catch(m){this.keepIntermediateTensors=!1,console.warn(m.message)}let a=new Ml(this.weightMap,n,s,this.functionExecutorMap,this.parseNodeNameCache);this.keepIntermediateTensors&&(this.clonedTensorsMap=this.cloneTensorMap(this.weightMap));let i=await this.executeWithControlFlow(e,a,t,o),p=t.map(m=>Bt(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(S=>this.graph.nodes[Nr(S)[0]]),i=o.map(S=>Nr(S)[0]),p=new Set(i),u=i.map(S=>this.graph.nodes[S]);u.length===0&&(u=this._outputs);let{usedNodes:c,missingInputs:l,dynamicNode:m,syncInputs:d}=LS(e,u,this.weightMap,this._initNodes),f=[...a,...this.graph.weights,...this._initNodes||[]].map(S=>({node:S,contexts:t.currentContext})),h=Object.assign({},this.weightMap);Object.keys(e).forEach(S=>{let[k,_]=Nr(S),$=[];$[_]=e[S],h[k]=$});let g={},x=this.getFrozenTensorIds(h),b={};for(;f.length>0;){let S=this.processStack(a,f,t,h,b,x,p,g,c);await Promise.all(S)}m==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 C=u.filter(S=>!fu(S)&&!Bt(S.name,h,t)).map(S=>S.name);if(C.length>0){let S="";throw m!=null&&(S=`Alternatively, to avoid the dynamic ops, use model.execute() and specify the inputs [${d}]`),new Error(`Cannot compute the outputs [${C}] from the provided inputs [${s}]. Consider providing the following inputs: [${l}]. ${S}`)}return h}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]=Ls(l.node.name,o)),n[l.node.name]==null){let d=MS(l.node,n,o,this._resourceManager);m||([m]=Ls(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]=Ls(i.name,o);s[p]||!a.has(i.name)||(i.op==="Merge"?i.inputNames.some(u=>!!Bt(u,n,o))&&(s[p]=!0,t.push({contexts:o.currentContext,node:i})):i.inputNames.every(u=>!!Bt(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]=Nr(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]=Nr(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]=Nr(t);if(!this.graph.nodes[o])throw new Error(`The output '${t}' is not found in the graph`)})}};var kf=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 P8="?tfjs-format=file",O8="model.json",Bl=class{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}constructor(e,t={},o=di){this.modelUrl=e,this.loadOptions=t,this.version="n/a",this.io=o,t==null&&(this.loadOptions={}),this.resourceManager=new kf}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=>t.getWeightStream==null?this.loadSync(t):this.loadStreaming(t)):this.loadSync(e)}loadSync(e){let t=this.io.decodeWeights(e.weightData,e.weightSpecs);return this.loadWithWeightMap(e,t)}async loadStreaming(e){if(e.getWeightStream==null)throw new Error("Model artifacts missing streamWeights function");let t=await ad(e.getWeightStream(),e.weightSpecs);return this.loadWithWeightMap(e,t)}loadWithWeightMap(e,t){this.artifacts=e;let o=this.artifacts.modelTopology,n=this.artifacts.signature;if(this.artifacts.userDefinedMetadata!=null){let s=this.artifacts.userDefinedMetadata;s.signature!=null&&(n=s.signature),s.structuredOutputKeys!=null&&(this.structuredOutputKeys=s.structuredOutputKeys)}if(this.signature=n,this.version=`${o.versions.producer}.${o.versions.minConsumer}`,this.executor=new Ll(Ol.Instance.transformGraph(o,this.signature)),this.executor.weightMap=this.convertTensorMapToTensorsMap(t),this.executor.resourceManager=this.resourceManager,e.modelInitializer!=null&&e.modelInitializer.node!=null){let s=Ol.Instance.transformGraph(e.modelInitializer);this.initializer=new Ll(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 mt?[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 mt)&&!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&&Ot(this.resourceIdToCapturedInput)),this.resourceManager.dispose()}};async function M8(r,e={},t=di){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=B8(r));let o=new Bl(r,e,t);return await o.load(),o}function L8(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=di.getWeightSpecs(o.weightsManifest),a=di.getModelArtifactsForJSONSync(o,s,n);e=di.fromMemorySync(a)}else if("load"in r)e=r;else if("modelTopology"in r&&"weightSpecs"in r&&"weightData"in r)e=di.fromMemorySync(r);else throw new Error("Unknown model format");let t=new Bl(e);return t.load(),t}function B8(r){return r.endsWith("/")||(r=r+"/"),`${r}${O8}${P8}`}var z8="4.21.0";function Q(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 V8=Vt.whereImpl,xc=class r extends ao{nextDataId(){return r.nextDataId++}constructor(){super(),this.blockSize=48,this.firstUse=!0,this.data=new Bo(this,ur())}write(e,t,o){this.firstUse&&(this.firstUse=!1,A().get("IS_NODE")&&w.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&&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 w.mergeRealAndImagArrays(n,s)}return y.convertBackendValuesAndArrayBuffer(this.data.get(e).values,t)}bufferSync(e){let t=this.readSync(e.dataId);if(e.dtype==="string")try{let o=t.map(n=>y.decodeString(n));return me(e.shape,e.dtype,o)}catch(o){throw new Error("Failed to decode encoded string bytes into utf-8")}return me(e.shape,e.dtype,t)}makeOutput(e,t,o){return ur().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){Q([e],"where");let t=this.readSync(e.dataId);return V8(e.shape,t)}dispose(){}floatPrecision(){return 32}epsilon(){return super.epsilon()}};xc.nextDataId=0;var Ic={};qe(Ic,{addImpl:()=>VS,bincountImpl:()=>Cc,bincountReduceImpl:()=>Nf,bitwiseAndImpl:()=>WS,castImpl:()=>zS,ceilImpl:()=>US,concatImpl:()=>ap,equalImpl:()=>GS,expImpl:()=>KS,expm1Impl:()=>jS,floorDivImpl:()=>YS,floorImpl:()=>XS,gatherNdImpl:()=>Tf,gatherV2Impl:()=>_f,greaterEqualImpl:()=>ZS,greaterImpl:()=>QS,lessEqualImpl:()=>eI,lessImpl:()=>JS,linSpaceImpl:()=>Ef,logImpl:()=>tI,maxImpl:()=>$f,maximumImpl:()=>rI,minimumImpl:()=>oI,multiplyImpl:()=>zl,negImpl:()=>nI,notEqualImpl:()=>sI,prodImpl:()=>aI,raggedGatherImpl:()=>Rf,raggedRangeImpl:()=>Df,raggedTensorToTensorImpl:()=>Af,rangeImpl:()=>up,rsqrtImpl:()=>uI,scatterImpl:()=>zs,sigmoidImpl:()=>R_,simpleAbsImpl:()=>BS,sliceImpl:()=>pp,sparseFillEmptyRowsImpl:()=>Ff,sparseReshapeImpl:()=>Pf,sparseSegmentReductionImpl:()=>Sc,sqrtImpl:()=>F_,squaredDifferenceImpl:()=>cI,staticRegexReplaceImpl:()=>lI,stridedSliceImpl:()=>Of,stringNGramsImpl:()=>cp,stringSplitImpl:()=>lp,stringToHashBucketFastImpl:()=>mp,subImpl:()=>dI,tileImpl:()=>Mf,topKImpl:()=>Lf,transposeImpl:()=>wc,uniqueImpl:()=>dp});function BS(r){let e=new Float32Array(r.length);for(let t=0;t{let{x:e}=r.inputs,t=r.backend;Q(e,"abs");let o=new Float32Array(y.sizeFromShape(e.shape)),n=t.data.get(e.dataId).values;return o=BS(n),t.makeOutput(o,e.shape,e.dtype)},t_={kernelName:Xs,backendName:"cpu",kernelFunc:W8};function Ve(r){return(e,t,o,n,s)=>{let a=w.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=w.getBroadcastDims(e,a),g=w.getBroadcastDims(t,a);if(h.length+g.length===0)for(let x=0;xC[$]=0);let S=y.locToIndex(C,l,d),k=b.slice(-m);g.forEach($=>k[$]=0);let _=y.locToIndex(k,m,f);c[x]=r(o[S],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 r_={kernelName:Di,backendName:"cpu",kernelFunc:Ht};function yc(r,e,t="float32"){if(t==="complex64"){let n=yc(r,e,"float32"),s=yc(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 lr(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 o_={kernelName:Co,backendName:"cpu",kernelFunc:lr};function $o(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 n_={kernelName:Hi,backendName:"cpu",kernelFunc:$o};function zS(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]=Ve((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 Ro(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{dtype:s}=o;if(s==="complex64"){if(n.dtype==="complex64")return lr({inputs:{x:n},backend:t});let c=yc(t,n.shape,n.dtype),l=Ro({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=$o({inputs:{input:n},backend:t}),l=Ro({inputs:{x:c},backend:t,attrs:{dtype:s}});return t.disposeIntermediateTensorInfo(c),l}if(!y.hasEncodingLoss(n.dtype,s)){let c=lr({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]=zS(a,n.shape,n.dtype,s);return t.makeTensorInfo(i,p,u)}var s_={kernelName:yo,backendName:"cpu",kernelFunc:Ro};function Ye(r,e,t,o){return t==null?({inputs:n,backend:s})=>{let{a,b:i}=n,p=s;Q([a,i],r);let u=p.data.get(a.dataId).values,c=p.data.get(i.dataId).values,l=a.dtype==="string"?w.fromUint8ToStringArray(u):u,m=a.dtype==="string"?w.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=Ro({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=Ro({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,S=p.data.get(b.dataId).values,[k,_,$]=t(a.shape,i.shape,d,f,C,S),R=p.makeTensorInfo($,"float32",k),D=p.makeTensorInfo($,"float32",_),P=Ht({inputs:{real:R,imag:D},backend:p});return p.disposeIntermediateTensorInfo(u),p.disposeIntermediateTensorInfo(h),p.disposeIntermediateTensorInfo(R),p.disposeIntermediateTensorInfo(D),P}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 bc(r){return(e,t,o,n,s,a)=>{let i=w.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=w.getBroadcastDims(e,i),f=w.getBroadcastDims(t,i),h=w.mergeRealAndImagArrays(o,n),g=w.mergeRealAndImagArrays(s,a),x=e.length,b=y.computeStrides(e),C=t.length,S=y.computeStrides(t);if(d.length+f.length===0)for(let k=0;k$[M]=0);let R=y.locToIndex($,x,b),D=_.slice(-C);f.forEach(M=>D[M]=0);let P=y.locToIndex(D,C,S),O=r(h[R*2],h[R*2+1],g[P*2],g[P*2+1]);l[k]=O.real,m[k]=O.imag}return[l,m,i]}}var VS=Ve((r,e)=>r+e),U8=bc((r,e,t,o)=>({real:r+t,imag:e+o})),Pa=Ye(uo,VS,U8),a_={kernelName:uo,backendName:"cpu",kernelFunc:Pa};function Cc(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 Nf(r,e,t,o=!1){let n=r.shape[0],s=r.shape[1],a=me([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}var WS=Ve((r,e)=>r&e),G8=Ye(qa,WS),i_={kernelName:qa,backendName:"cpu",kernelFunc:G8};function jt(r){return(e,t,o)=>{let n=y.getArrayFromDType(t,e.length);for(let s=0;s{let{x:a}=o;Q(a,r);let i=s,p=i.data.get(a.dataId).values,u;if(a.dtype==="string"){if(!Array.isArray(p))throw new Error("String tensor's value was not an instance of Array");u=w.fromUint8ToStringArray(p)}else u=p;let c=t||a.dtype,l=e(u,c,n);return i.makeTensorInfo(a.shape,c,l)}}var US=jt(r=>Math.ceil(r)),H8=Ar(en,US),u_={kernelName:en,backendName:"cpu",kernelFunc:H8};function ap(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"?w.fromUint8ToStringArray(a.vals):a.vals,p=0;for(let u=0;ur===e?1:0),HS=Ye(xn,GS,null,"bool"),p_={kernelName:xn,backendName:"cpu",kernelFunc:HS};var KS=jt(r=>Math.exp(r)),qS=Ar(yn,KS,"float32"),c_={kernelName:yn,backendName:"cpu",kernelFunc:qS};var jS=jt(r=>Math.expm1(r)),K8=Ar(bn,jS),l_={kernelName:bn,backendName:"cpu",kernelFunc:K8};var XS=jt(r=>Math.floor(r)),q8=Ar(wn,XS),m_={kernelName:wn,backendName:"cpu",kernelFunc:q8};var YS=Ve((r,e)=>Math.floor(r/e)),j8=Ye(Sn,YS,null,"int32"),d_={kernelName:Sn,backendName:"cpu",kernelFunc:j8};function Tf(r,e,t,o,n,s,a,i,p){let u=me([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),X8=Ye(kn,QS,null,"bool"),f_={kernelName:kn,backendName:"cpu",kernelFunc:X8};var ZS=Ve((r,e)=>r>=e?1:0),Y8=Ye(Nn,ZS,null,"bool"),h_={kernelName:Nn,backendName:"cpu",kernelFunc:Y8};var JS=Ve((r,e)=>rr<=e?1:0),Z8=Ye(Dn,eI,null,"bool"),x_={kernelName:Dn,backendName:"cpu",kernelFunc:Z8};function Ef(r,e,t){let o=(e-r)/(t-1),n=y.makeZerosTypedArray(t,"float32");n[0]=r;for(let s=1;sMath.log(r)),J8=Ar(Fn,tI),y_={kernelName:Fn,backendName:"cpu",kernelFunc:J8};function $f(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 rI=Ve((r,e)=>Math.max(r,e)),eY=Ye(Vn,rI),b_={kernelName:Vn,backendName:"cpu",kernelFunc:eY};var oI=Ve((r,e)=>Math.min(r,e)),tY=Ye(Hn,oI),C_={kernelName:Hn,backendName:"cpu",kernelFunc:tY};var zl=Ve((r,e)=>r*e),rY=bc((r,e,t,o)=>({real:r*t-e*o,imag:r*o+e*t})),ip=Ye(Xn,zl,rY),w_={kernelName:Xn,backendName:"cpu",kernelFunc:ip};function nI(r,e,t){let o=y.createScalarValue(-1,t);return zl([],e,o,r,t)}function oY(r){let{inputs:e,backend:t}=r,{x:o}=e;Q(o,"neg");let n=t.data.get(o.dataId).values,[s,a]=nI(n,o.shape,o.dtype);return t.makeTensorInfo(a,o.dtype,s)}var S_={kernelName:pa,backendName:"cpu",kernelFunc:oY};var sI=Ve((r,e)=>r!==e?1:0),nY=Ye(Yn,sI,null,"bool"),I_={kernelName:Yn,backendName:"cpu",kernelFunc:nY};function wc(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 k_={kernelName:os,backendName:"cpu",kernelFunc:sY};function aY(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 iY(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 uY(r,e,t,o){let n=[],s=0,a=e.length-1+t.length,i=new Array(a).fill(null).map(()=>[0]);iY(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 N_(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)S=0;else if(S=Math.ceil(Math.abs((b-x)/C)),S>T_)throw new Error(`Requires ((limit - start) / delta) <= ${T_}`);m[g+1]=m[g]+S}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 Do.VALUE_ROWIDS:return this.calculateOutputIndexValueRowID(s,t,o,n);case Do.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: ${Do[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 Do.FIRST_DIM_SIZE:return e[0];case Do.VALUE_ROWIDS:throw new Error("Cannot handle VALUE_ROWIDS in first dimension.");case Do.ROW_SPLITS:return this.rowPartitionValuesShapes[0][0]-1;default:throw new Error(`Cannot handle type ${Do[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=E_(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;De(()=>{let h=W(c,f);c=su(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);__(g,c,p),++d}h<0?(l=f+1,m=d):(l=f,m=d,d=m+1)}}};function __(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 Af(r,e,t,o,n,s,a,i,p,u){return new iI(r,e,t,o,n,s,a,i,p,u).compute()}function up(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)),mY=Ar(ls,uI),$_={kernelName:ls,backendName:"cpu",kernelFunc:mY};function zs(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 me(t,e.dtype);let d=p instanceof tt?p:me(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))),pI=Ie(bs,r=>1/(1+Math.exp(-r))),D_={kernelName:bs,backendName:"cpu",kernelFunc:pI};function pp(r,e,t,o,n){let s=pt.isSliceContinous(o,e,t),a=y.sizeFromShape(t),i=y.computeStrides(o);if(s){let l=pt.computeFlatOffset(e,i);return n==="string"?r.slice(l,l+a):r.subarray(l,l+a)}let p=n==="string"?w.fromUint8ToStringArray(r):r,u=me(o,n,p),c=me(t,n);for(let l=0;lf+e[h]);c.set(u.get(...d),...m)}return n==="string"?w.fromStringArrayToUint8(c.values):c.values}function Ao(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{begin:s,size:a}=o;Q(n,"slice");let[i,p]=pt.parseSliceParams(n,s,a);pt.assertParamsValid(n,i,p);let u=t.data.get(n.dataId).values,c=pp(u,i,p,n.shape,n.dtype);return t.makeTensorInfo(p,n.dtype,c)}var A_={kernelName:ha,backendName:"cpu",kernelFunc:Ao};function Ff(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(w.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(w.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(w.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());let m=e.slice();m[0]=l;let d=m.reduce((C,S)=>C*S,1),f=y.getArrayFromDType(t,d);if(i===0)return l>0&&f.fill(a),[f,m];if(l<=0)throw new Error(w.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());let h=0,g=1,x=0,b=n[h];for(;;){let C=0;if(g=C)throw new Error(w.getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage())}if(b<0||b>=l)throw new Error(w.getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage(b,l));b>x&&f.fill(a,x*u,b*u);for(let S=h;S=p[0])throw new Error(w.getSparseSegmentReductionIndicesOutOfRangeErrorMessage(S,o[S],p[0]));for(let _=0;_i)break}return xMath.sqrt(r)),dY=Ie(ws,r=>Math.sqrt(r)),P_={kernelName:ws,backendName:"cpu",kernelFunc:dY};var cI=Ve((r,e)=>{let t=r-e;return t*t}),fY=Ye(ks,cI),O_={kernelName:ks,backendName:"cpu",kernelFunc:fY};var lI=jt((r,e)=>{let{pattern:t,replaceGlobal:o,rewrite:n}=e;return r.replace(new RegExp(t,o?"g":""),n)}),hY=Ar(Ru,lI),M_={kernelName:Ru,backendName:"cpu",kernelFunc:hY};function Of(r,e,t,o){let n=me(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;this.createNGrams(e,u,i,c,1,m)}}return[i,a]}};function cp(r,e,t,o,n,s,a,i){return new mI(t,o,n,s,a,i).compute(r,e)}function gY(r,e,t,o){if(!r.length)return;if(e.length===0){for(let s=0;sr-e),xY=bc((r,e,t,o)=>({real:r-t,imag:e-o})),Vl=Ye(Ts,dI,xY),L_={kernelName:Ts,backendName:"cpu",kernelFunc:Vl};function Mf(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 B_(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));B_(r,e,m,d)}let n=r[e],s=t,a=o;for(y.swap(r,t,e),Wl(r[o],n)>0&&y.swap(r,t,o);s0;)a=a-1}Wl(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 Lf(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 xc,1);var fI=Ie(hn,r=>r>=0?r:Math.exp(r)-1),z_={kernelName:hn,backendName:"cpu",kernelFunc:fI};function hI(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{alpha:s}=o;Q([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 gI(r){let{inputs:e,backend:t}=r,{x:o,alpha:n}=e;Q([o,n],"prelu");let s=t.data.get(o.dataId).values,a=t.data.get(n.dataId).values,[i,p]=bY(o.shape,n.shape,s,a,"float32");return t.makeTensorInfo(p,"float32",i)}var W_={kernelName:rs,backendName:"cpu",kernelFunc:gI};var xI=Ie(ss,r=>Math.max(0,r)),U_={kernelName:ss,backendName:"cpu",kernelFunc:xI};var yI=Ie(us,r=>Math.min(Math.max(0,r),6)),G_={kernelName:us,backendName:"cpu",kernelFunc:yI};function fp(r,e,t,o,n){if(t==="linear")return lr({inputs:{x:e},backend:r});if(t==="relu")return xI({inputs:{x:e},backend:r});if(t==="elu")return fI({inputs:{x:e},backend:r});if(t==="relu6")return yI({inputs:{x:e},backend:r});if(t==="prelu")return gI({inputs:{x:e,alpha:o},backend:r});if(t==="leakyrelu")return hI({inputs:{x:e},backend:r,attrs:{alpha:n}});if(t==="sigmoid")return pI({inputs:{x:e},backend:r});throw new Error(`Activation ${t} has not been implemented for the CPU backend.`)}function We(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 H_={kernelName:da,backendName:"cpu",kernelFunc:We};function bI(r){let{inputs:e,backend:t,attrs:o}=r,{a:n,b:s}=e,{transposeA:a,transposeB:i}=o;Q([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=Sr.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 S=a?[g,c,m]:[g,m,c],k=i?[x,d,l]:[x,l,d],_=We({inputs:{x:n},backend:t,attrs:{shape:S}}),$=We({inputs:{x:s},backend:t,attrs:{shape:k}}),R=a?_.shape[1]:_.shape[2],D=a?_.shape[2]:_.shape[1],P=i?$.shape[1]:$.shape[2],O=Math.max(g,x),M=t.data.get(_.dataId).values,L=t.data.get($.dataId).values,B=y.computeStrides(_.shape),z=y.computeStrides($.shape),[U,j,q]=a?[B[0],1,B[1]]:[B[0],B[1],1],[Y,J,re]=i?[1,z[1],z[0]]:[z[1],1,z[0]],ne=D*P,ee=me([O,D,P],_.dtype),oe=ee.values,ie=t.blockSize;for(let le=0;leMath.acos(r)),j_={kernelName:Vo,backendName:"cpu",kernelFunc:wY};var SY=Ie(Wo,r=>Math.acosh(r)),X_={kernelName:Wo,backendName:"cpu",kernelFunc:SY};function IY(r){let{inputs:e,backend:t}=r,o=e;Q(e,"addN");let n=o.map(i=>t.data.get(i.dataId).values),s=me(o[0].shape,o[0].dtype),a=s.values;for(let i=0;ib&&(b=k,C=S)}d[g]=C}return u.forEach(g=>t.disposeIntermediateTensorInfo(g)),t.makeTensorInfo(c,"int32",d)}var J_={kernelName:Ys,backendName:"cpu",kernelFunc:NY};function TY(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s}=o;Q(n,"argMin");let a=y.parseAxisParam(s,n.shape),i=w.getAxesPermutation(a,n.shape.length),p=n,u=[];i!=null&&(p=St({inputs:{x:n},backend:t,attrs:{perm:i}}),u.push(p),a=w.getInnerMostAxes(a.length,p.shape.length)),a=[a[0]],w.assertAxesAreInnerMostDims("argMin",a,p.shape.length);let[c,l]=w.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 eE={kernelName:Qs,backendName:"cpu",kernelFunc:TY};var _Y=Ie(Ko,r=>Math.asin(r)),tE={kernelName:Ko,backendName:"cpu",kernelFunc:_Y};var EY=Ie(qo,r=>Math.asinh(r)),rE={kernelName:qo,backendName:"cpu",kernelFunc:EY};var $Y=Ie(jo,r=>Math.atan(r)),oE={kernelName:jo,backendName:"cpu",kernelFunc:$Y};var RY=Ve((r,e)=>Math.atan2(r,e)),DY=Ye(Yo,RY),nE={kernelName:Yo,backendName:"cpu",kernelFunc:DY};var AY=Ie(Xo,r=>Math.atanh(r)),sE={kernelName:Xo,backendName:"cpu",kernelFunc:AY};function vc(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=me(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 S=0;Sj?j=ie:s==="avg"&&(q+=ie,Y++)}if(isNaN(j))break}let J=M+L*C+$;g[J]=s==="avg"?q/Y:j}}}return h}function Bf(r,e,t,o,n=!1,s=!1){let a=me(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=me(e,t,r);for(let g=0;gP&&(P=U,n?O=s?((g*o.inHeight+M)*o.inWidth+B)*o.inChannels+x:(M*o.inWidth+B)*o.inChannels+x:O=L*m+z)}}a.set(O,g,b,_,x)}}return a}function zf(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=me(n.outShape,t),S=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],R=n.outShape[4];for(let D=0;D_e?_e=gt:s==="avg"&&(ve+=gt,Fe++),isNaN(_e))break}if(isNaN(_e))break}if(isNaN(_e))break}let Pe=be+M;S[Pe]=s==="avg"?ve/Math.max(Fe,1):_e}}}}return C}function aE(r,e){let t=me(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=re,B=U*c*l+q*c+J)}}}t.set(B,h,x,k,D,g)}}}return t}function FY(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e;Q(n,"avgPool");let{filterSize:s,strides:a,pad:i,dimRoundingMode:p}=o,u=1;y.assert(w.eitherStridesOrDilationsAreOne(a,u),()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${u}'`);let c=w.computePool2DInfo(n.shape,s,a,u,i,p),l;if(c.filterWidth===1&&c.filterHeight===1&&y.arraysEqual(c.inShape,c.outShape))l=lr({inputs:{x:n},backend:t});else{let m=t.data.get(n.dataId).values,d=y.computeStrides(n.shape),f=vc(m,n.shape,n.dtype,d,c,"avg");l=t.makeTensorInfo(c.outShape,n.dtype,f.values)}return l}var iE={kernelName:Qo,backendName:"cpu",kernelFunc:FY};function PY(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{filterSize:s,strides:a,pad:i,dimRoundingMode:p,dataFormat:u}=o;Q(n,"avgPool3d");let c=w.computePool3DInfo(n.shape,s,a,1,i,p,u),l=t.data.get(n.dataId).values,m=zf(l,n.shape,n.dtype,y.computeStrides(n.shape),c,"avg");return t.makeTensorInfo(m.shape,"float32",m.values)}var uE={kernelName:Zs,backendName:"cpu",kernelFunc:PY};function OY(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s}=e,{filterSize:a,strides:i,pad:p,dimRoundingMode:u}=o;Q([n,s],"avgPool3DGrad");let c=w.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,S=c.effectiveFilterDepth,k=c.effectiveFilterHeight,_=c.effectiveFilterWidth,$=S-1-c.padInfo.front,R=_-1-c.padInfo.left,D=k-1-c.padInfo.top,P=me(s.shape,"float32"),O=1/(f*h*g),M=t.bufferSync(n);for(let L=0;L=c.outDepth||Math.floor(ee)!==ee))for(let oe=0;oe=c.outHeight||Math.floor(ie)!==ie))for(let le=0;le<_;le+=C){let be=(J+le)/d;if(be<0||be>=c.outWidth||Math.floor(be)!==be)continue;let _e=M.get(L,ee,ie,be,B);re+=_e}}}P.set(re*O,L,z,U,j,B)}return t.makeTensorInfo(P.shape,P.dtype,P.values)}var pE={kernelName:Ri,backendName:"cpu",kernelFunc:OY};function MY(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s}=e,a=s;Q([n,s],"avgPoolGrad");let{filterSize:i,strides:p,pad:u}=o,c=w.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,S=x-1-c.padInfo.top,k=me(a.shape,"float32"),_=1/(d*f),$=t.data.get(n.dataId).values,R=me(n.shape,"float32",$);for(let D=0;D=c.outHeight||Math.floor(j)!==j))for(let q=0;q=c.outWidth||Math.floor(Y)!==Y)continue;let J=R.get(D,j,Y,P);z+=J}}k.set(z*_,D,O,M,P)}return t.makeTensorInfo(k.shape,k.dtype,k.values)}var cE={kernelName:$i,backendName:"cpu",kernelFunc:MY};function LY(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."),Q([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,S=0,k=0,_=0,$=0;for(let R=0;R=g&&(S=0),k>=C&&(k=0),_>=x&&(_=0),$>=b&&($=0);return t.makeTensorInfo(n.shape,n.dtype,h)}var lE={kernelName:In,backendName:"cpu",kernelFunc:LY};function BY(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{blockShape:s,crops:a}=o;Q([n],"batchToSpaceND");let i=s.reduce((x,b)=>x*b),p=w.getReshaped(n.shape,s,i),u=w.getPermuted(p.length,s.length),c=w.getReshapedPermuted(n.shape,s,i),l=w.getSliceBeginCoords(a,s.length),m=w.getSliceSize(c,a,s.length),d=We({inputs:{x:n},backend:t,attrs:{shape:p}}),f=St({inputs:{x:d},backend:t,attrs:{perm:u}}),h=We({inputs:{x:f},backend:t,attrs:{shape:c}}),g=Ao({inputs:{x:h},backend:t,attrs:{begin:l,size:m}});return t.disposeIntermediateTensorInfo(d),t.disposeIntermediateTensorInfo(f),t.disposeIntermediateTensorInfo(h),g}var mE={kernelName:Js,backendName:"cpu",kernelFunc:BY};function zY(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=Cc(i,p,s.dtype,s.shape,a);return t.makeTensorInfo([a],s.dtype,u)}var dE={kernelName:Jo,backendName:"cpu",kernelFunc:zY};function VY(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=w.assertAndGetBroadcastShape(Array.from(s),Array.from(a));return t.makeTensorInfo([i.length],"int32",Int32Array.from(i))}var fE={kernelName:ea,backendName:"cpu",kernelFunc:VY};var WY=Ie(bo,(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);w.assertParamsConsistent(a,s);let i=w.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 lr({inputs:{x:p[0]},backend:t});if(p[0].dtype==="complex64"){let h=p.map(S=>$o({inputs:{input:S},backend:t})),g=p.map(S=>Oa({inputs:{input:S},backend:t})),x=hu({inputs:h,backend:t,attrs:{axis:s}}),b=hu({inputs:g,backend:t,attrs:{axis:s}}),C=Ht({inputs:{real:x,imag:b},backend:t});return h.forEach(S=>t.disposeIntermediateTensorInfo(S)),g.forEach(S=>t.disposeIntermediateTensorInfo(S)),t.disposeIntermediateTensorInfo(x),t.disposeIntermediateTensorInfo(b),C}let u=p.map(h=>{let x=[-1,y.sizeFromShape(h.shape.slice(s))];return We({inputs:{x:h},backend:t,attrs:{shape:x}})}),c=u.map(h=>({vals:t.data.get(h.dataId).values,shape:h.shape}));i=w.computeOutShape(u.map(h=>h.shape),1);let l=u[0].shape[0]===1,m=ap(c,i,e[0].dtype,l),d=w.computeOutShape(p.map(h=>h.shape),s),f=t.makeTensorInfo(d,e[0].dtype,m);return u.forEach(h=>t.disposeIntermediateTensorInfo(h)),f}var yE={kernelName:ta,backendName:"cpu",kernelFunc:hu};function CI(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;Q([n,s],"conv2d");let l=w.convertConv2DDataFormat(p),m=w.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",S=new tt(m.outShape,n.dtype),k=y.computeStrides(n.shape),_=y.computeStrides(s.shape),$=k[0],R=C?k[1]:k[2],D=C?k[2]:1,P=C?1:k[1],O=S.strides[0],M=C?S.strides[1]:S.strides[2],L=C?S.strides[2]:1,B=C?1:S.strides[1],z=t.data.get(n.dataId).values,U=t.data.get(s.dataId).values,j=S.values;for(let q=0;q=m.inHeight)continue;let le=oe*_[0],be=Y+ie*R;for(let _e=0;_e=m.inWidth)continue;let ct=le+Pe*_[1],He=be+st*D,lt=ct;for(let it=0;it=u.inDepth)continue;let q=U*D[0],Y=O+j*R[1];for(let J=0;J=u.inHeight)continue;let ie=q+ee*D[1],le=Y+oe*R[2];for(let be=0;be=u.inWidth)continue;let st=ie+Fe*D[2],ct=le+Pe*u.inChannels,He=st;for(let lt=0;ltMath.cos(r)),kE={kernelName:sn,backendName:"cpu",kernelFunc:XY};var YY=Ie(an,r=>Math.cosh(r)),NE={kernelName:an,backendName:"cpu",kernelFunc:YY};function QY(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=me([f,h,g,d],"float32"),b=t.data.get(s.dataId).values,C=t.data.get(a.dataId).values,S=t.data.get(n.dataId).values,k=y.computeStrides(n.shape),_=y.computeStrides(x.shape);for(let $=0;$=c)continue;let B=h>1?(O-D)*(l-1)/(h-1):0,z=g>1?(M-P)*(m-1)/(g-1):0;for(let U=0;U1?D*(l-1)+U*B:.5*(D+O)*(l-1);if(j<0||j>l-1){for(let q=0;q1?P*(m-1)+re*z:.5*(P+M)*(m-1);if(ne<0||ne>m-1){for(let le=0;le1?P*(m-1)+q*z:.5*(P+M)*(m-1);if(Y<0||Y>m-1){for(let ne=0;nex+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=w.computeConv2DInfo(n.shape,s.shape,a,m,i,u,!0),{filterHeight:f,filterWidth:h,dilationHeight:g,dilationWidth:x,padInfo:b}=d,C=b.left,S=b.top,k=d.outChannels/d.inChannels,_=new tt(d.outShape,n.dtype),$=t.data.get(n.dataId).values,R=t.data.get(s.dataId).values,D=_.values;for(let P=0;P=d.inHeight)continue;let q=U*l[0],Y=O+j*c[1];for(let J=0;J=d.inWidth)continue;let ie=q+ee*l[1],le=Y+oe*d.inChannels,be=re,_e=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:S,strideWidth:k,filterHeight:_,filterWidth:$,dilationHeight:R,dilationWidth:D,outShape:P}=w.computeDilation2DInfo(o.shape,n.shape,s,a,"NHWC",i),O=y.sizeFromShape(P),M=P.length,L=y.getArrayFromDType(o.dtype,O);for(let z=0;z=0&&oe=0&&lere&&(re=ve)}}}let ne=y.locToIndex([z,U,q,J],M,y.computeStrides(P));L[ne]=re}}}return{dataId:p.write(y.toTypedArray(L,o.dtype),P,o.dtype),shape:P,dtype:o.dtype}}};var ME={kernelName:Li,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:S,filterHeight:k,filterWidth:_,dilationHeight:$,dilationWidth:R,outShape:D}=w.computeDilation2DInfo(o.shape,n.shape,a,i,"NHWC",p);y.assert(s.rank===D.length,()=>`Error in ${Li}, dy must have the same rank as output ${D.length}, but got ${s.rank}`);let P=y.toNestedArray(D,u.data.get(s.dataId).values),O=y.makeZerosNestedTypedArray(n.shape,n.dtype);for(let L=0;L=0&&ee=0&&ieY&&(Y=le,J=ne,re=oe)}}}O[J][re][q]+=P[L][B][U][q]}}}return{dataId:u.write(y.toTypedArray(O,o.dtype),n.shape,n.dtype),shape:n.shape,dtype:n.dtype}}};var LE={kernelName:Mi,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:S,filterHeight:k,filterWidth:_,dilationHeight:$,dilationWidth:R,outShape:D}=w.computeDilation2DInfo(o.shape,n.shape,a,i,"NHWC",p);y.assert(s.rank===D.length,()=>`Error in ${Mi}, dy must have the same rank as output ${D.length}, but got ${s.rank}`);let P=y.toNestedArray(D,u.data.get(s.dataId).values),O=y.makeZerosNestedTypedArray(o.shape,o.dtype);for(let L=0;L=0&&ee=0&&ieY&&(Y=le,J=ee,re=ie)}}}O[L][J][re][q]+=P[L][B][U][q]}}}return{dataId:u.write(y.toTypedArray(O,o.dtype),o.shape,o.dtype),shape:o.shape,dtype:o.dtype}}};function s7(r){let{inputs:e,backend:t,attrs:o}=r,{image:n}=e,{canvas:s,options:a}=o,{contextOptions:i,imageOptions:p}=a||{},u=(p==null?void 0:p.alpha)||1,c=(i==null?void 0:i.contextType)||"2d";if(c!=="2d")throw new Error(`Context type ${i.contextType} is not supported by the CPU backend.`);let l=s.getContext(c,(i==null?void 0:i.contextAttributes)||{});if(l==null)throw new Error(`Could not get the context with ${c} type.`);let[m,d]=n.shape.slice(0,2),f=n.shape.length===2?1:n.shape[2],h=t.data.get(n.dataId).values,g=n.dtype==="float32"?255:1,x=new Uint8ClampedArray(d*m*4);for(let C=0;C1)throw new Error(`Tensor values for a float32 Tensor must be in the range [0 - 1] but encountered ${$}.`)}else if(n.dtype==="int32"&&($<0||$>255))throw new Error(`Tensor values for a int32 Tensor must be in the range [0 - 255] but encountered ${$}.`);f===1?(S[0]=$*g,S[1]=$*g,S[2]=$*g):S[_]=$*g}let k=C*4;x[k+0]=Math.round(S[0]),x[k+1]=Math.round(S[1]),x[k+2]=Math.round(S[2]),x[k+3]=Math.round(S[3])}s.width=d,s.height=m;let b=new ImageData(x,d,m);return l.putImageData(b,0,0),n}var BE={kernelName:$u,backendName:"cpu",kernelFunc:s7};function fi(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o;Q(n,"sum");let i;n.dtype==="bool"?i=Ro({inputs:{x:n},backend:t,attrs:{dtype:"int32"}}):i=lr({inputs:{x:n},backend:t});let p=i.shape.length,u=y.parseAxisParam(s,i.shape),c=w.getAxesPermutation(u,p),l=u,m=i;c!=null&&(m=St({inputs:{x:i},backend:t,attrs:{perm:c}}),l=w.getInnerMostAxes(l.length,p)),w.assertAxesAreInnerMostDims("sum",l,m.shape.length);let[d,f]=w.computeOutAndReduceShapes(m.shape,l),h=w.upcastType(m.dtype,"int32"),g=yc(t,d,h),x=y.sizeFromShape(f),b=t.data.get(g.dataId).values,C=t.data.get(m.dataId).values;for(let S=0;S=0&&(m=fi({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 VE={kernelName:Bi,backendName:"cpu",kernelFunc:a7};function i7(r){let{inputs:e,backend:t}=r,{dy:o,y:n}=e;Q([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=0?s[p]=i[p]:s[p]=i[p]*(u+1)}return t.makeTensorInfo(n.shape,"float32",s)}var WE={kernelName:Xa,backendName:"cpu",kernelFunc:i7};var u7=w.ERF_P,p7=w.ERF_A1,c7=w.ERF_A2,l7=w.ERF_A3,m7=w.ERF_A4,d7=w.ERF_A5,f7=Ie(gn,r=>{let e=Math.sign(r),t=Math.abs(r),o=1/(1+u7*t);return e*(1-((((d7*o+m7)*o+l7)*o+c7)*o+p7)*o*Math.exp(-t*t))}),UE={kernelName:gn,backendName:"cpu",kernelFunc:f7};function kc(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),We({inputs:{x:n},backend:t,attrs:{shape:i}})}var GE={kernelName:na,backendName:"cpu",kernelFunc:kc};var h7=Ve((r,e)=>r/e),Ul=Ye(fn,h7),Gl={kernelName:fn,backendName:"cpu",kernelFunc:Ul};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&&C=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=w.segment_util.collectGatherOpShapeInfo(n,s,p,l),f=We({inputs:{x:n},backend:t,attrs:{shape:[d.batchSize,d.outerSize,d.dimSize,d.sliceSize]}}),h=We({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=_f(b,x,g);return t.disposeIntermediateTensorInfo(f),t.disposeIntermediateTensorInfo(h),t.makeTensorInfo(d.outputShape,C.dtype,C.values)}var QE={kernelName:aa,backendName:"cpu",kernelFunc:v7};function k7(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=We({inputs:{x:o},backend:t,attrs:{shape:[a,s]}}),p=Vf(i,!0,t),u=We({inputs:{x:p},backend:t,attrs:{shape:o.shape}});return t.disposeIntermediateTensorInfo(i),t.disposeIntermediateTensorInfo(p),u}var ZE={kernelName:Vi,backendName:"cpu",kernelFunc:k7};var N7=Ie(Tn,r=>Number.isFinite(r)?1:0,"bool"),JE={kernelName:Tn,backendName:"cpu",kernelFunc:N7};var T7=Ie(_n,r=>Math.abs(r)===1/0?1:0,"bool"),e$={kernelName:_n,backendName:"cpu",kernelFunc:T7};var _7=Ie(En,r=>Number.isNaN(r)?1:0,"bool"),t$={kernelName:En,backendName:"cpu",kernelFunc:_7};function E7(r){let{backend:e,attrs:t}=r,{start:o,stop:n,num:s}=t,a=Ef(o,n,s);return e.makeTensorInfo([a.length],"float32",a)}var r$={kernelName:An,backendName:"cpu",kernelFunc:E7};var $7=Ie(Pn,r=>Math.log1p(r)),o$={kernelName:Pn,backendName:"cpu",kernelFunc:$7};var R7=Ve((r,e)=>r&&e),D7=Ye(On,R7,null,"bool"),n$={kernelName:On,backendName:"cpu",kernelFunc:D7};var A7=Ie(Mn,r=>r?0:1,"bool"),s$={kernelName:Mn,backendName:"cpu",kernelFunc:A7};var F7=Ve((r,e)=>r||e),P7=Ye(Ln,F7,null,"bool"),a$={kernelName:Ln,backendName:"cpu",kernelFunc:P7};function O7(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{depthRadius:s,bias:a,alpha:i,beta:p}=o;Q(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 S=l[x];C+=S*S}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=w.computePool2DInfo(n.shape,s,a,u,i,p),l;if(c.filterWidth===1&&c.filterHeight===1&&y.arraysEqual(c.inShape,c.outShape))l=lr({inputs:{x:n},backend:t});else{let m=t.data.get(n.dataId).values,d=y.computeStrides(n.shape),f=vc(m,n.shape,n.dtype,d,c,"max");l=t.makeTensorInfo(c.outShape,n.dtype,f.values)}return l}var c$={kernelName:Wn,backendName:"cpu",kernelFunc:L7};function B7(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{filterSize:s,strides:a,pad:i,dimRoundingMode:p,dataFormat:u}=o;Q(n,"maxPool3d");let c=w.computePool3DInfo(n.shape,s,a,1,i,p,u),l=t.data.get(n.dataId).values,m=zf(l,n.shape,n.dtype,y.computeStrides(n.shape),c,"max");return t.makeTensorInfo(m.shape,"float32",m.values)}var l$={kernelName:ia,backendName:"cpu",kernelFunc:B7};function z7(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s}=e,{filterSize:a,strides:i,pad:p,dimRoundingMode:u}=o;Q([n,s],"maxPool3DGrad");let c=w.computePool3DInfo(s.shape,a,i,1,p,u),l=t.bufferSync(s),m=aE(l,c),d=c.strideDepth,f=c.strideHeight,h=c.strideWidth,g=c.dilationDepth,x=c.dilationHeight,b=c.dilationWidth,C=c.effectiveFilterDepth,S=c.effectiveFilterHeight,k=c.effectiveFilterWidth,_=C-1-c.padInfo.front,$=k-1-c.padInfo.left,R=S-1-c.padInfo.top,D=me(s.shape,"float32"),P=t.bufferSync(n);for(let O=0;O=c.outDepth||Math.floor(re)!==re))for(let ne=0;ne=c.outHeight||Math.floor(ee)!==ee))for(let oe=0;oe=c.outWidth||Math.floor(ie)!==ie)continue;let le=C*S*k-1-m.get(O,re,ee,ie,M),be=J*S*k+ne*k+oe,_e=le===be?1:0;if(_e===0)continue;let ve=P.get(O,re,ee,ie,M);Y+=ve*_e}}}D.set(Y,O,L,B,z,M)}return t.makeTensorInfo(D.shape,D.dtype,D.values)}var m$={kernelName:Gi,backendName:"cpu",kernelFunc:z7};function V7(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s,output:a}=e,i=s;Q([s,a],"maxPoolGrad");let{filterSize:p,strides:u,pad:c,dimRoundingMode:l}=o,m=w.computePool2DInfo(i.shape,p,u,1,c,l),d=t.data.get(i.dataId).values,f=me(m.outShape,i.dtype,Bf(d,i.shape,i.dtype,m).values),h=m.strideHeight,g=m.strideWidth,x=m.dilationHeight,b=m.dilationWidth,C=m.effectiveFilterHeight,S=m.effectiveFilterWidth,k=S-1-m.padInfo.left,_=C-1-m.padInfo.top,$=me(i.shape,"float32"),R=t.data.get(n.dataId).values,D=me(n.shape,"float32",R);for(let P=0;P=m.outHeight||Math.floor(q)!==q))for(let Y=0;Y=m.outWidth||Math.floor(J)!==J)continue;let re=C*S-1-f.get(P,q,J,O),ne=j*S+Y,ee=re===ne?1:0;if(ee===0)continue;let oe=D.get(P,q,J,O);U+=oe*ee}}$.set(U,P,M,L,O)}return t.makeTensorInfo($.shape,$.dtype,$.values)}var d$={kernelName:Ui,backendName:"cpu",kernelFunc:V7};function f$(r,e,t,o,n){let s=y.computeStrides(e),a=vc(r,e,t,s,n,"max"),i=Bf(r,e,t,n,!0,o);return[a.values,i.values]}var h$={kernelName:ua,backendName:"cpu",kernelFunc:({inputs:r,attrs:e,backend:t})=>{let{x:o}=r,{filterSize:n,strides:s,pad:a,includeBatchInIndex:i}=e,p=t;Q(o,"MaxPoolWithArgmax");let u=p.data.get(o.dataId).values,c=w.computePool2DInfo(o.shape,n,s,[1,1],a),[l,m]=f$(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 W7(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o,i=y.parseAxisParam(s,n.shape),u=w.computeOutAndReduceShapes(n.shape,i)[1],c=y.sizeFromShape(u),l=[],m=t.makeTensorInfo([],"float32",new Float32Array([c]));l.push(m);let d=Ro({inputs:{x:n},backend:t,attrs:{dtype:"float32"}});l.push(d);let f=Ul({inputs:{a:d,b:m},backend:t});l.push(f);let h=fi({inputs:{x:f},backend:t,attrs:{axis:s,keepDims:a}});return l.forEach(g=>t.disposeIntermediateTensorInfo(g)),h}var g$={kernelName:Un,backendName:"cpu",kernelFunc:W7};function U7(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o;Q(n,"min");let i=y.parseAxisParam(s,n.shape),p=i,u=w.getAxesPermutation(p,n.shape.length),c=n;u!=null&&(c=St({inputs:{x:n},backend:t,attrs:{perm:u}}),p=w.getInnerMostAxes(p.length,n.shape.length)),w.assertAxesAreInnerMostDims("min",p,c.shape.length);let[l,m]=w.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[S]+C[1]),p=s.map(C=>C[0]),u=s.map((C,S)=>C[0]+n.shape[S]),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[_]&&(S[_]=(u[_]-1)*2-S[_]+c);S=S.map((_,$)=>_-p[$]);let k=y.locToIndex(S,m,d);x[C]=l[k]}return{dataId:t.write(x,i,n.dtype),shape:i,dtype:n.dtype}}var y$={kernelName:Kn,backendName:"cpu",kernelFunc:G7};var H7=Ve((r,e)=>{let t=r%e;return r<0&&e<0||r>=0&&e>=0?t:(t+e)%e}),K7=Ye(qn,H7),b$={kernelName:qn,backendName:"cpu",kernelFunc:K7};var w$=zp(jw());function vI(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=II({inputs:{x:n},backend:t,attrs:{reductionIndices:p,keepDims:!1}}),c=w.expandShapeToKeepDim(u.shape,p),l=We({inputs:{x:u},backend:t,attrs:{shape:c}}),m=Vl({inputs:{a:n,b:l},backend:t}),d=qS({inputs:{x:m},backend:t}),f=fi({inputs:{x:d},backend:t,attrs:{axis:p,keepDims:!1}}),h=We({inputs:{x:f},backend:t,attrs:{shape:c}}),g=Ul({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 C$={kernelName:Is,backendName:"cpu",kernelFunc:vI};function q7(r){let{inputs:e,backend:t,attrs:o}=r,{logits:n}=e,{numSamples:s,seed:a,normalized:i}=o;Q(n,"multinomial");let p=i?n:vI({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=kc({inputs:{input:c},backend:t,attrs:{dim:n}});return i.push(l),l}),u=hu({inputs:p,backend:t,attrs:{axis:n}});return i.forEach(c=>t.disposeIntermediateTensorInfo(c)),u}var $$={kernelName:la,backendName:"cpu",kernelFunc:kI};function tQ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{paddings:s,constantValue:a}=o;Q(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(S,f,h);g[k]=u[b]}return{dataId:t.write(g,i,n.dtype),shape:i,dtype:n.dtype}}var Wf={kernelName:es,backendName:"cpu",kernelFunc:tQ};var rQ=Ve((r,e)=>Math.pow(r,e)),oQ=Ye(ts,rQ),R$={kernelName:ts,backendName:"cpu",kernelFunc:oQ};function nQ(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]=Rf(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 D$={kernelName:Hp,backendName:"cpu",kernelFunc:nQ};function sQ(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]=Df(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 A$={kernelName:Kp,backendName:"cpu",kernelFunc:sQ};function aQ(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]=Af(u,n.shape,c,s.shape,s.dtype,l,a.shape,m,d,p);return t.makeTensorInfo(f,s.dtype,h)}var F$={kernelName:qp,backendName:"cpu",kernelFunc:aQ};function iQ(r){let{backend:e,attrs:t}=r,{start:o,stop:n,dtype:s,step:a}=t,i=up(o,n,a,s);return e.makeTensorInfo([i.length],s,i)}var P$={kernelName:ma,backendName:"cpu",kernelFunc:iQ};var uQ=Ie(ns,r=>1/r),O$={kernelName:ns,backendName:"cpu",kernelFunc:uQ};function pQ(r){let{inputs:e,backend:t,attrs:o}=r,{images:n}=e,{alignCorners:s,halfPixelCenters:a,size:i}=o;Q(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,S=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,S=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],S=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],S=x[1]/b[1],k=1/C,_=1/S,$=Math.ceil(k)*2+2,R=Math.ceil(_)*2+2;for(let D=0;D=d)continue;let ee=P+ne*p[1],oe=ne*C,ie=Math.min(c-1,a?Math.round(oe):Math.floor(oe));if(O===ie)for(let le=0;le=f)continue;let _e=ee+be*p[2],ve=be*S,Fe=Math.min(l-1,a?Math.round(ve):Math.floor(ve));z===Fe&&(J+=g[_e+Y])}}h[U+Y]=J}}}}return t.makeTensorInfo(n.shape,n.dtype,h)}var z$={kernelName:Za,backendName:"cpu",kernelFunc:mQ};function dQ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{dims:s}=o;Q(n,"reverse");let a=n.shape.length,i=y.parseAxisParam(s,n.shape);if(a===0)return lr({inputs:{x:n},backend:t});let p=new tt(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 V$={kernelName:ps,backendName:"cpu",kernelFunc:dQ};var W$={kernelName:Ds,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]=w.getImageCenter(a,c,l),h=255,g=Math.sin(n),x=Math.cos(n),b=i.data.get(o.dataId).values;for(let S=0;S=0&&B=0&&z{let e=Math.floor(r);return r-e<.5?Math.floor(r):r-e>.5?Math.ceil(r):e%2===0?e:e+1}),U$={kernelName:cs,backendName:"cpu",kernelFunc:fQ};function hQ(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}=w.calculateShapes(s,n,a),m=!0,d=t.bufferSync(n),f=t.bufferSync(s),h=zs(d,f,a,l,u,p,i,c,0,m);return t.makeTensorInfo(a,h.dtype,h.values)}var G$={kernelName:ms,backendName:"cpu",kernelFunc:hQ};function gQ(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?wQ*r:CQ*(Math.exp(r)-1)),j$={kernelName:hs,backendName:"cpu",kernelFunc:SQ};var IQ=Ie(ys,r=>r<0?-1:r>0?1:0),X$={kernelName:ys,backendName:"cpu",kernelFunc:IQ};var vQ=Ie(gs,r=>Math.sin(r)),Y$={kernelName:gs,backendName:"cpu",kernelFunc:vQ};var kQ=Ie(xs,r=>Math.sinh(r)),Q$={kernelName:xs,backendName:"cpu",kernelFunc:kQ};var NQ=11920928955078125e-23,Z$=Math.log(NQ)+2,TQ=Ie(Cs,r=>{let e=r>-Z$,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 w.mergeRealAndImagArrays(n,s)}return y.convertBackendValuesAndArrayBuffer(this.data.get(e).values,t)}bufferSync(e){let t=this.readSync(e.dataId);if(e.dtype==="string")try{let o=t.map(n=>y.decodeString(n));return me(e.shape,e.dtype,o)}catch(o){throw new Error("Failed to decode encoded string bytes into utf-8")}return me(e.shape,e.dtype,t)}makeOutput(e,t,o){return ur().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){Q([e],"where");let t=this.readSync(e.dataId);return V8(e.shape,t)}dispose(){}floatPrecision(){return 32}epsilon(){return super.epsilon()}};xc.nextDataId=0;var Ic={};qe(Ic,{addImpl:()=>VS,bincountImpl:()=>Cc,bincountReduceImpl:()=>Nf,bitwiseAndImpl:()=>WS,castImpl:()=>zS,ceilImpl:()=>US,concatImpl:()=>ap,equalImpl:()=>GS,expImpl:()=>KS,expm1Impl:()=>jS,floorDivImpl:()=>YS,floorImpl:()=>XS,gatherNdImpl:()=>Tf,gatherV2Impl:()=>_f,greaterEqualImpl:()=>ZS,greaterImpl:()=>QS,lessEqualImpl:()=>eI,lessImpl:()=>JS,linSpaceImpl:()=>Ef,logImpl:()=>tI,maxImpl:()=>$f,maximumImpl:()=>rI,minimumImpl:()=>oI,multiplyImpl:()=>zl,negImpl:()=>nI,notEqualImpl:()=>sI,prodImpl:()=>aI,raggedGatherImpl:()=>Rf,raggedRangeImpl:()=>Df,raggedTensorToTensorImpl:()=>Af,rangeImpl:()=>up,rsqrtImpl:()=>uI,scatterImpl:()=>zs,sigmoidImpl:()=>R_,simpleAbsImpl:()=>BS,sliceImpl:()=>pp,sparseFillEmptyRowsImpl:()=>Ff,sparseReshapeImpl:()=>Pf,sparseSegmentReductionImpl:()=>Sc,sqrtImpl:()=>F_,squaredDifferenceImpl:()=>cI,staticRegexReplaceImpl:()=>lI,stridedSliceImpl:()=>Of,stringNGramsImpl:()=>cp,stringSplitImpl:()=>lp,stringToHashBucketFastImpl:()=>mp,subImpl:()=>dI,tileImpl:()=>Mf,topKImpl:()=>Lf,transposeImpl:()=>wc,uniqueImpl:()=>dp});function BS(r){let e=new Float32Array(r.length);for(let t=0;t{let{x:e}=r.inputs,t=r.backend;Q(e,"abs");let o=new Float32Array(y.sizeFromShape(e.shape)),n=t.data.get(e.dataId).values;return o=BS(n),t.makeOutput(o,e.shape,e.dtype)},t_={kernelName:Xs,backendName:"cpu",kernelFunc:W8};function Ve(r){return(e,t,o,n,s)=>{let a=w.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=w.getBroadcastDims(e,a),g=w.getBroadcastDims(t,a);if(h.length+g.length===0)for(let x=0;xC[$]=0);let S=y.locToIndex(C,l,d),k=b.slice(-m);g.forEach($=>k[$]=0);let _=y.locToIndex(k,m,f);c[x]=r(o[S],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 r_={kernelName:Di,backendName:"cpu",kernelFunc:Ht};function yc(r,e,t="float32"){if(t==="complex64"){let n=yc(r,e,"float32"),s=yc(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 lr(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 o_={kernelName:Co,backendName:"cpu",kernelFunc:lr};function $o(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 n_={kernelName:Hi,backendName:"cpu",kernelFunc:$o};function zS(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]=Ve((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 Ro(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{dtype:s}=o;if(s==="complex64"){if(n.dtype==="complex64")return lr({inputs:{x:n},backend:t});let c=yc(t,n.shape,n.dtype),l=Ro({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=$o({inputs:{input:n},backend:t}),l=Ro({inputs:{x:c},backend:t,attrs:{dtype:s}});return t.disposeIntermediateTensorInfo(c),l}if(!y.hasEncodingLoss(n.dtype,s)){let c=lr({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]=zS(a,n.shape,n.dtype,s);return t.makeTensorInfo(i,p,u)}var s_={kernelName:yo,backendName:"cpu",kernelFunc:Ro};function Ye(r,e,t,o){return t==null?({inputs:n,backend:s})=>{let{a,b:i}=n,p=s;Q([a,i],r);let u=p.data.get(a.dataId).values,c=p.data.get(i.dataId).values,l=a.dtype==="string"?w.fromUint8ToStringArray(u):u,m=a.dtype==="string"?w.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=Ro({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=Ro({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,S=p.data.get(b.dataId).values,[k,_,$]=t(a.shape,i.shape,d,f,C,S),R=p.makeTensorInfo($,"float32",k),D=p.makeTensorInfo($,"float32",_),P=Ht({inputs:{real:R,imag:D},backend:p});return p.disposeIntermediateTensorInfo(u),p.disposeIntermediateTensorInfo(h),p.disposeIntermediateTensorInfo(R),p.disposeIntermediateTensorInfo(D),P}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 bc(r){return(e,t,o,n,s,a)=>{let i=w.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=w.getBroadcastDims(e,i),f=w.getBroadcastDims(t,i),h=w.mergeRealAndImagArrays(o,n),g=w.mergeRealAndImagArrays(s,a),x=e.length,b=y.computeStrides(e),C=t.length,S=y.computeStrides(t);if(d.length+f.length===0)for(let k=0;k$[M]=0);let R=y.locToIndex($,x,b),D=_.slice(-C);f.forEach(M=>D[M]=0);let P=y.locToIndex(D,C,S),O=r(h[R*2],h[R*2+1],g[P*2],g[P*2+1]);l[k]=O.real,m[k]=O.imag}return[l,m,i]}}var VS=Ve((r,e)=>r+e),U8=bc((r,e,t,o)=>({real:r+t,imag:e+o})),Pa=Ye(uo,VS,U8),a_={kernelName:uo,backendName:"cpu",kernelFunc:Pa};function Cc(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 Nf(r,e,t,o=!1){let n=r.shape[0],s=r.shape[1],a=me([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}var WS=Ve((r,e)=>r&e),G8=Ye(qa,WS),i_={kernelName:qa,backendName:"cpu",kernelFunc:G8};function jt(r){return(e,t,o)=>{let n=y.getArrayFromDType(t,e.length);for(let s=0;s{let{x:a}=o;Q(a,r);let i=s,p=i.data.get(a.dataId).values,u;if(a.dtype==="string"){if(!Array.isArray(p))throw new Error("String tensor's value was not an instance of Array");u=w.fromUint8ToStringArray(p)}else u=p;let c=t||a.dtype,l=e(u,c,n);return i.makeTensorInfo(a.shape,c,l)}}var US=jt(r=>Math.ceil(r)),H8=Ar(en,US),u_={kernelName:en,backendName:"cpu",kernelFunc:H8};function ap(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"?w.fromUint8ToStringArray(a.vals):a.vals,p=0;for(let u=0;ur===e?1:0),HS=Ye(xn,GS,null,"bool"),p_={kernelName:xn,backendName:"cpu",kernelFunc:HS};var KS=jt(r=>Math.exp(r)),qS=Ar(yn,KS,"float32"),c_={kernelName:yn,backendName:"cpu",kernelFunc:qS};var jS=jt(r=>Math.expm1(r)),K8=Ar(bn,jS),l_={kernelName:bn,backendName:"cpu",kernelFunc:K8};var XS=jt(r=>Math.floor(r)),q8=Ar(wn,XS),m_={kernelName:wn,backendName:"cpu",kernelFunc:q8};var YS=Ve((r,e)=>Math.floor(r/e)),j8=Ye(Sn,YS,null,"int32"),d_={kernelName:Sn,backendName:"cpu",kernelFunc:j8};function Tf(r,e,t,o,n,s,a,i,p){let u=me([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),X8=Ye(kn,QS,null,"bool"),f_={kernelName:kn,backendName:"cpu",kernelFunc:X8};var ZS=Ve((r,e)=>r>=e?1:0),Y8=Ye(Nn,ZS,null,"bool"),h_={kernelName:Nn,backendName:"cpu",kernelFunc:Y8};var JS=Ve((r,e)=>rr<=e?1:0),Z8=Ye(Dn,eI,null,"bool"),x_={kernelName:Dn,backendName:"cpu",kernelFunc:Z8};function Ef(r,e,t){let o=(e-r)/(t-1),n=y.makeZerosTypedArray(t,"float32");n[0]=r;for(let s=1;sMath.log(r)),J8=Ar(Fn,tI),y_={kernelName:Fn,backendName:"cpu",kernelFunc:J8};function $f(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 rI=Ve((r,e)=>Math.max(r,e)),eY=Ye(Vn,rI),b_={kernelName:Vn,backendName:"cpu",kernelFunc:eY};var oI=Ve((r,e)=>Math.min(r,e)),tY=Ye(Hn,oI),C_={kernelName:Hn,backendName:"cpu",kernelFunc:tY};var zl=Ve((r,e)=>r*e),rY=bc((r,e,t,o)=>({real:r*t-e*o,imag:r*o+e*t})),ip=Ye(Xn,zl,rY),w_={kernelName:Xn,backendName:"cpu",kernelFunc:ip};function nI(r,e,t){let o=y.createScalarValue(-1,t);return zl([],e,o,r,t)}function oY(r){let{inputs:e,backend:t}=r,{x:o}=e;Q(o,"neg");let n=t.data.get(o.dataId).values,[s,a]=nI(n,o.shape,o.dtype);return t.makeTensorInfo(a,o.dtype,s)}var S_={kernelName:pa,backendName:"cpu",kernelFunc:oY};var sI=Ve((r,e)=>r!==e?1:0),nY=Ye(Yn,sI,null,"bool"),I_={kernelName:Yn,backendName:"cpu",kernelFunc:nY};function wc(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 k_={kernelName:os,backendName:"cpu",kernelFunc:sY};function aY(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 iY(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 uY(r,e,t,o){let n=[],s=0,a=e.length-1+t.length,i=new Array(a).fill(null).map(()=>[0]);iY(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 N_(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)S=0;else if(S=Math.ceil(Math.abs((b-x)/C)),S>T_)throw new Error(`Requires ((limit - start) / delta) <= ${T_}`);m[g+1]=m[g]+S}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 Do.VALUE_ROWIDS:return this.calculateOutputIndexValueRowID(s,t,o,n);case Do.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: ${Do[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 Do.FIRST_DIM_SIZE:return e[0];case Do.VALUE_ROWIDS:throw new Error("Cannot handle VALUE_ROWIDS in first dimension.");case Do.ROW_SPLITS:return this.rowPartitionValuesShapes[0][0]-1;default:throw new Error(`Cannot handle type ${Do[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=E_(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;De(()=>{let h=W(c,f);c=su(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);__(g,c,p),++d}h<0?(l=f+1,m=d):(l=f,m=d,d=m+1)}}};function __(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 Af(r,e,t,o,n,s,a,i,p,u){return new iI(r,e,t,o,n,s,a,i,p,u).compute()}function up(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)),mY=Ar(ls,uI),$_={kernelName:ls,backendName:"cpu",kernelFunc:mY};function zs(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 me(t,e.dtype);let d=p instanceof tt?p:me(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))),pI=Ie(bs,r=>1/(1+Math.exp(-r))),D_={kernelName:bs,backendName:"cpu",kernelFunc:pI};function pp(r,e,t,o,n){let s=pt.isSliceContinous(o,e,t),a=y.sizeFromShape(t),i=y.computeStrides(o);if(s){let l=pt.computeFlatOffset(e,i);return n==="string"?r.slice(l,l+a):r.subarray(l,l+a)}let p=n==="string"?w.fromUint8ToStringArray(r):r,u=me(o,n,p),c=me(t,n);for(let l=0;lf+e[h]);c.set(u.get(...d),...m)}return n==="string"?w.fromStringArrayToUint8(c.values):c.values}function Ao(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{begin:s,size:a}=o;Q(n,"slice");let[i,p]=pt.parseSliceParams(n,s,a);pt.assertParamsValid(n,i,p);let u=t.data.get(n.dataId).values,c=pp(u,i,p,n.shape,n.dtype);return t.makeTensorInfo(p,n.dtype,c)}var A_={kernelName:ha,backendName:"cpu",kernelFunc:Ao};function Ff(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(w.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(w.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(w.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());let m=e.slice();m[0]=l;let d=m.reduce((C,S)=>C*S,1),f=y.getArrayFromDType(t,d);if(i===0)return l>0&&f.fill(a),[f,m];if(l<=0)throw new Error(w.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());let h=0,g=1,x=0,b=n[h];for(;;){let C=0;if(g=C)throw new Error(w.getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage())}if(b<0||b>=l)throw new Error(w.getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage(b,l));b>x&&f.fill(a,x*u,b*u);for(let S=h;S=p[0])throw new Error(w.getSparseSegmentReductionIndicesOutOfRangeErrorMessage(S,o[S],p[0]));for(let _=0;_i)break}return xMath.sqrt(r)),dY=Ie(ws,r=>Math.sqrt(r)),P_={kernelName:ws,backendName:"cpu",kernelFunc:dY};var cI=Ve((r,e)=>{let t=r-e;return t*t}),fY=Ye(ks,cI),O_={kernelName:ks,backendName:"cpu",kernelFunc:fY};var lI=jt((r,e)=>{let{pattern:t,replaceGlobal:o,rewrite:n}=e;return r.replace(new RegExp(t,o?"g":""),n)}),hY=Ar(Ru,lI),M_={kernelName:Ru,backendName:"cpu",kernelFunc:hY};function Of(r,e,t,o){let n=me(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;this.createNGrams(e,u,i,c,1,m)}}return[i,a]}};function cp(r,e,t,o,n,s,a,i){return new mI(t,o,n,s,a,i).compute(r,e)}function gY(r,e,t,o){if(!r.length)return;if(e.length===0){for(let s=0;sr-e),xY=bc((r,e,t,o)=>({real:r-t,imag:e-o})),Vl=Ye(Ts,dI,xY),L_={kernelName:Ts,backendName:"cpu",kernelFunc:Vl};function Mf(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 B_(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));B_(r,e,m,d)}let n=r[e],s=t,a=o;for(y.swap(r,t,e),Wl(r[o],n)>0&&y.swap(r,t,o);s0;)a=a-1}Wl(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 Lf(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 xc,1);var fI=Ie(hn,r=>r>=0?r:Math.exp(r)-1),z_={kernelName:hn,backendName:"cpu",kernelFunc:fI};function hI(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{alpha:s}=o;Q([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 gI(r){let{inputs:e,backend:t}=r,{x:o,alpha:n}=e;Q([o,n],"prelu");let s=t.data.get(o.dataId).values,a=t.data.get(n.dataId).values,[i,p]=bY(o.shape,n.shape,s,a,"float32");return t.makeTensorInfo(p,"float32",i)}var W_={kernelName:rs,backendName:"cpu",kernelFunc:gI};var xI=Ie(ss,r=>Math.max(0,r)),U_={kernelName:ss,backendName:"cpu",kernelFunc:xI};var yI=Ie(us,r=>Math.min(Math.max(0,r),6)),G_={kernelName:us,backendName:"cpu",kernelFunc:yI};function fp(r,e,t,o,n){if(t==="linear")return lr({inputs:{x:e},backend:r});if(t==="relu")return xI({inputs:{x:e},backend:r});if(t==="elu")return fI({inputs:{x:e},backend:r});if(t==="relu6")return yI({inputs:{x:e},backend:r});if(t==="prelu")return gI({inputs:{x:e,alpha:o},backend:r});if(t==="leakyrelu")return hI({inputs:{x:e},backend:r,attrs:{alpha:n}});if(t==="sigmoid")return pI({inputs:{x:e},backend:r});throw new Error(`Activation ${t} has not been implemented for the CPU backend.`)}function We(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 H_={kernelName:da,backendName:"cpu",kernelFunc:We};function bI(r){let{inputs:e,backend:t,attrs:o}=r,{a:n,b:s}=e,{transposeA:a,transposeB:i}=o;Q([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=Sr.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 S=a?[g,c,m]:[g,m,c],k=i?[x,d,l]:[x,l,d],_=We({inputs:{x:n},backend:t,attrs:{shape:S}}),$=We({inputs:{x:s},backend:t,attrs:{shape:k}}),R=a?_.shape[1]:_.shape[2],D=a?_.shape[2]:_.shape[1],P=i?$.shape[1]:$.shape[2],O=Math.max(g,x),M=t.data.get(_.dataId).values,L=t.data.get($.dataId).values,B=y.computeStrides(_.shape),z=y.computeStrides($.shape),[U,j,q]=a?[B[0],1,B[1]]:[B[0],B[1],1],[Y,J,re]=i?[1,z[1],z[0]]:[z[1],1,z[0]],ne=D*P,ee=me([O,D,P],_.dtype),oe=ee.values,ie=t.blockSize;for(let le=0;leMath.acos(r)),j_={kernelName:Vo,backendName:"cpu",kernelFunc:wY};var SY=Ie(Wo,r=>Math.acosh(r)),X_={kernelName:Wo,backendName:"cpu",kernelFunc:SY};function IY(r){let{inputs:e,backend:t}=r,o=e;Q(e,"addN");let n=o.map(i=>t.data.get(i.dataId).values),s=me(o[0].shape,o[0].dtype),a=s.values;for(let i=0;ib&&(b=k,C=S)}d[g]=C}return u.forEach(g=>t.disposeIntermediateTensorInfo(g)),t.makeTensorInfo(c,"int32",d)}var J_={kernelName:Ys,backendName:"cpu",kernelFunc:NY};function TY(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s}=o;Q(n,"argMin");let a=y.parseAxisParam(s,n.shape),i=w.getAxesPermutation(a,n.shape.length),p=n,u=[];i!=null&&(p=St({inputs:{x:n},backend:t,attrs:{perm:i}}),u.push(p),a=w.getInnerMostAxes(a.length,p.shape.length)),a=[a[0]],w.assertAxesAreInnerMostDims("argMin",a,p.shape.length);let[c,l]=w.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 eE={kernelName:Qs,backendName:"cpu",kernelFunc:TY};var _Y=Ie(Ko,r=>Math.asin(r)),tE={kernelName:Ko,backendName:"cpu",kernelFunc:_Y};var EY=Ie(qo,r=>Math.asinh(r)),rE={kernelName:qo,backendName:"cpu",kernelFunc:EY};var $Y=Ie(jo,r=>Math.atan(r)),oE={kernelName:jo,backendName:"cpu",kernelFunc:$Y};var RY=Ve((r,e)=>Math.atan2(r,e)),DY=Ye(Yo,RY),nE={kernelName:Yo,backendName:"cpu",kernelFunc:DY};var AY=Ie(Xo,r=>Math.atanh(r)),sE={kernelName:Xo,backendName:"cpu",kernelFunc:AY};function vc(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=me(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 S=0;Sj?j=ie:s==="avg"&&(q+=ie,Y++)}if(isNaN(j))break}let J=M+L*C+$;g[J]=s==="avg"?q/Y:j}}}return h}function Bf(r,e,t,o,n=!1,s=!1){let a=me(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=me(e,t,r);for(let g=0;gP&&(P=U,n?O=s?((g*o.inHeight+M)*o.inWidth+B)*o.inChannels+x:(M*o.inWidth+B)*o.inChannels+x:O=L*m+z)}}a.set(O,g,b,_,x)}}return a}function zf(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=me(n.outShape,t),S=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],R=n.outShape[4];for(let D=0;D_e?_e=gt:s==="avg"&&(ve+=gt,Fe++),isNaN(_e))break}if(isNaN(_e))break}if(isNaN(_e))break}let Pe=be+M;S[Pe]=s==="avg"?ve/Math.max(Fe,1):_e}}}}return C}function aE(r,e){let t=me(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=re,B=U*c*l+q*c+J)}}}t.set(B,h,x,k,D,g)}}}return t}function FY(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e;Q(n,"avgPool");let{filterSize:s,strides:a,pad:i,dimRoundingMode:p}=o,u=1;y.assert(w.eitherStridesOrDilationsAreOne(a,u),()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${u}'`);let c=w.computePool2DInfo(n.shape,s,a,u,i,p),l;if(c.filterWidth===1&&c.filterHeight===1&&y.arraysEqual(c.inShape,c.outShape))l=lr({inputs:{x:n},backend:t});else{let m=t.data.get(n.dataId).values,d=y.computeStrides(n.shape),f=vc(m,n.shape,n.dtype,d,c,"avg");l=t.makeTensorInfo(c.outShape,n.dtype,f.values)}return l}var iE={kernelName:Qo,backendName:"cpu",kernelFunc:FY};function PY(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{filterSize:s,strides:a,pad:i,dimRoundingMode:p,dataFormat:u}=o;Q(n,"avgPool3d");let c=w.computePool3DInfo(n.shape,s,a,1,i,p,u),l=t.data.get(n.dataId).values,m=zf(l,n.shape,n.dtype,y.computeStrides(n.shape),c,"avg");return t.makeTensorInfo(m.shape,"float32",m.values)}var uE={kernelName:Zs,backendName:"cpu",kernelFunc:PY};function OY(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s}=e,{filterSize:a,strides:i,pad:p,dimRoundingMode:u}=o;Q([n,s],"avgPool3DGrad");let c=w.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,S=c.effectiveFilterDepth,k=c.effectiveFilterHeight,_=c.effectiveFilterWidth,$=S-1-c.padInfo.front,R=_-1-c.padInfo.left,D=k-1-c.padInfo.top,P=me(s.shape,"float32"),O=1/(f*h*g),M=t.bufferSync(n);for(let L=0;L=c.outDepth||Math.floor(ee)!==ee))for(let oe=0;oe=c.outHeight||Math.floor(ie)!==ie))for(let le=0;le<_;le+=C){let be=(J+le)/d;if(be<0||be>=c.outWidth||Math.floor(be)!==be)continue;let _e=M.get(L,ee,ie,be,B);re+=_e}}}P.set(re*O,L,z,U,j,B)}return t.makeTensorInfo(P.shape,P.dtype,P.values)}var pE={kernelName:Ri,backendName:"cpu",kernelFunc:OY};function MY(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s}=e,a=s;Q([n,s],"avgPoolGrad");let{filterSize:i,strides:p,pad:u}=o,c=w.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,S=x-1-c.padInfo.top,k=me(a.shape,"float32"),_=1/(d*f),$=t.data.get(n.dataId).values,R=me(n.shape,"float32",$);for(let D=0;D=c.outHeight||Math.floor(j)!==j))for(let q=0;q=c.outWidth||Math.floor(Y)!==Y)continue;let J=R.get(D,j,Y,P);z+=J}}k.set(z*_,D,O,M,P)}return t.makeTensorInfo(k.shape,k.dtype,k.values)}var cE={kernelName:$i,backendName:"cpu",kernelFunc:MY};function LY(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."),Q([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,S=0,k=0,_=0,$=0;for(let R=0;R=g&&(S=0),k>=C&&(k=0),_>=x&&(_=0),$>=b&&($=0);return t.makeTensorInfo(n.shape,n.dtype,h)}var lE={kernelName:In,backendName:"cpu",kernelFunc:LY};function BY(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{blockShape:s,crops:a}=o;Q([n],"batchToSpaceND");let i=s.reduce((x,b)=>x*b),p=w.getReshaped(n.shape,s,i),u=w.getPermuted(p.length,s.length),c=w.getReshapedPermuted(n.shape,s,i),l=w.getSliceBeginCoords(a,s.length),m=w.getSliceSize(c,a,s.length),d=We({inputs:{x:n},backend:t,attrs:{shape:p}}),f=St({inputs:{x:d},backend:t,attrs:{perm:u}}),h=We({inputs:{x:f},backend:t,attrs:{shape:c}}),g=Ao({inputs:{x:h},backend:t,attrs:{begin:l,size:m}});return t.disposeIntermediateTensorInfo(d),t.disposeIntermediateTensorInfo(f),t.disposeIntermediateTensorInfo(h),g}var mE={kernelName:Js,backendName:"cpu",kernelFunc:BY};function zY(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=Cc(i,p,s.dtype,s.shape,a);return t.makeTensorInfo([a],s.dtype,u)}var dE={kernelName:Jo,backendName:"cpu",kernelFunc:zY};function VY(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=w.assertAndGetBroadcastShape(Array.from(s),Array.from(a));return t.makeTensorInfo([i.length],"int32",Int32Array.from(i))}var fE={kernelName:ea,backendName:"cpu",kernelFunc:VY};var WY=Ie(bo,(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);w.assertParamsConsistent(a,s);let i=w.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 lr({inputs:{x:p[0]},backend:t});if(p[0].dtype==="complex64"){let h=p.map(S=>$o({inputs:{input:S},backend:t})),g=p.map(S=>Oa({inputs:{input:S},backend:t})),x=hu({inputs:h,backend:t,attrs:{axis:s}}),b=hu({inputs:g,backend:t,attrs:{axis:s}}),C=Ht({inputs:{real:x,imag:b},backend:t});return h.forEach(S=>t.disposeIntermediateTensorInfo(S)),g.forEach(S=>t.disposeIntermediateTensorInfo(S)),t.disposeIntermediateTensorInfo(x),t.disposeIntermediateTensorInfo(b),C}let u=p.map(h=>{let x=[-1,y.sizeFromShape(h.shape.slice(s))];return We({inputs:{x:h},backend:t,attrs:{shape:x}})}),c=u.map(h=>({vals:t.data.get(h.dataId).values,shape:h.shape}));i=w.computeOutShape(u.map(h=>h.shape),1);let l=u[0].shape[0]===1,m=ap(c,i,e[0].dtype,l),d=w.computeOutShape(p.map(h=>h.shape),s),f=t.makeTensorInfo(d,e[0].dtype,m);return u.forEach(h=>t.disposeIntermediateTensorInfo(h)),f}var yE={kernelName:ta,backendName:"cpu",kernelFunc:hu};function CI(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;Q([n,s],"conv2d");let l=w.convertConv2DDataFormat(p),m=w.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",S=new tt(m.outShape,n.dtype),k=y.computeStrides(n.shape),_=y.computeStrides(s.shape),$=k[0],R=C?k[1]:k[2],D=C?k[2]:1,P=C?1:k[1],O=S.strides[0],M=C?S.strides[1]:S.strides[2],L=C?S.strides[2]:1,B=C?1:S.strides[1],z=t.data.get(n.dataId).values,U=t.data.get(s.dataId).values,j=S.values;for(let q=0;q=m.inHeight)continue;let le=oe*_[0],be=Y+ie*R;for(let _e=0;_e=m.inWidth)continue;let ct=le+Pe*_[1],He=be+st*D,lt=ct;for(let it=0;it=u.inDepth)continue;let q=U*D[0],Y=O+j*R[1];for(let J=0;J=u.inHeight)continue;let ie=q+ee*D[1],le=Y+oe*R[2];for(let be=0;be=u.inWidth)continue;let st=ie+Fe*D[2],ct=le+Pe*u.inChannels,He=st;for(let lt=0;ltMath.cos(r)),kE={kernelName:sn,backendName:"cpu",kernelFunc:XY};var YY=Ie(an,r=>Math.cosh(r)),NE={kernelName:an,backendName:"cpu",kernelFunc:YY};function QY(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=me([f,h,g,d],"float32"),b=t.data.get(s.dataId).values,C=t.data.get(a.dataId).values,S=t.data.get(n.dataId).values,k=y.computeStrides(n.shape),_=y.computeStrides(x.shape);for(let $=0;$=c)continue;let B=h>1?(O-D)*(l-1)/(h-1):0,z=g>1?(M-P)*(m-1)/(g-1):0;for(let U=0;U1?D*(l-1)+U*B:.5*(D+O)*(l-1);if(j<0||j>l-1){for(let q=0;q1?P*(m-1)+re*z:.5*(P+M)*(m-1);if(ne<0||ne>m-1){for(let le=0;le1?P*(m-1)+q*z:.5*(P+M)*(m-1);if(Y<0||Y>m-1){for(let ne=0;nex+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=w.computeConv2DInfo(n.shape,s.shape,a,m,i,u,!0),{filterHeight:f,filterWidth:h,dilationHeight:g,dilationWidth:x,padInfo:b}=d,C=b.left,S=b.top,k=d.outChannels/d.inChannels,_=new tt(d.outShape,n.dtype),$=t.data.get(n.dataId).values,R=t.data.get(s.dataId).values,D=_.values;for(let P=0;P=d.inHeight)continue;let q=U*l[0],Y=O+j*c[1];for(let J=0;J=d.inWidth)continue;let ie=q+ee*l[1],le=Y+oe*d.inChannels,be=re,_e=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:S,strideWidth:k,filterHeight:_,filterWidth:$,dilationHeight:R,dilationWidth:D,outShape:P}=w.computeDilation2DInfo(o.shape,n.shape,s,a,"NHWC",i),O=y.sizeFromShape(P),M=P.length,L=y.getArrayFromDType(o.dtype,O);for(let z=0;z=0&&oe=0&&lere&&(re=ve)}}}let ne=y.locToIndex([z,U,q,J],M,y.computeStrides(P));L[ne]=re}}}return{dataId:p.write(y.toTypedArray(L,o.dtype),P,o.dtype),shape:P,dtype:o.dtype}}};var ME={kernelName:Li,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:S,filterHeight:k,filterWidth:_,dilationHeight:$,dilationWidth:R,outShape:D}=w.computeDilation2DInfo(o.shape,n.shape,a,i,"NHWC",p);y.assert(s.rank===D.length,()=>`Error in ${Li}, dy must have the same rank as output ${D.length}, but got ${s.rank}`);let P=y.toNestedArray(D,u.data.get(s.dataId).values),O=y.makeZerosNestedTypedArray(n.shape,n.dtype);for(let L=0;L=0&&ee=0&&ieY&&(Y=le,J=ne,re=oe)}}}O[J][re][q]+=P[L][B][U][q]}}}return{dataId:u.write(y.toTypedArray(O,o.dtype),n.shape,n.dtype),shape:n.shape,dtype:n.dtype}}};var LE={kernelName:Mi,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:S,filterHeight:k,filterWidth:_,dilationHeight:$,dilationWidth:R,outShape:D}=w.computeDilation2DInfo(o.shape,n.shape,a,i,"NHWC",p);y.assert(s.rank===D.length,()=>`Error in ${Mi}, dy must have the same rank as output ${D.length}, but got ${s.rank}`);let P=y.toNestedArray(D,u.data.get(s.dataId).values),O=y.makeZerosNestedTypedArray(o.shape,o.dtype);for(let L=0;L=0&&ee=0&&ieY&&(Y=le,J=ee,re=ie)}}}O[L][J][re][q]+=P[L][B][U][q]}}}return{dataId:u.write(y.toTypedArray(O,o.dtype),o.shape,o.dtype),shape:o.shape,dtype:o.dtype}}};function sQ(r){let{inputs:e,backend:t,attrs:o}=r,{image:n}=e,{canvas:s,options:a}=o,{contextOptions:i,imageOptions:p}=a||{},u=(p==null?void 0:p.alpha)||1,c=(i==null?void 0:i.contextType)||"2d";if(c!=="2d")throw new Error(`Context type ${i.contextType} is not supported by the CPU backend.`);let l=s.getContext(c,(i==null?void 0:i.contextAttributes)||{});if(l==null)throw new Error(`Could not get the context with ${c} type.`);let[m,d]=n.shape.slice(0,2),f=n.shape.length===2?1:n.shape[2],h=t.data.get(n.dataId).values,g=n.dtype==="float32"?255:1,x=new Uint8ClampedArray(d*m*4);for(let C=0;C1)throw new Error(`Tensor values for a float32 Tensor must be in the range [0 - 1] but encountered ${$}.`)}else if(n.dtype==="int32"&&($<0||$>255))throw new Error(`Tensor values for a int32 Tensor must be in the range [0 - 255] but encountered ${$}.`);f===1?(S[0]=$*g,S[1]=$*g,S[2]=$*g):S[_]=$*g}let k=C*4;x[k+0]=Math.round(S[0]),x[k+1]=Math.round(S[1]),x[k+2]=Math.round(S[2]),x[k+3]=Math.round(S[3])}s.width=d,s.height=m;let b=new ImageData(x,d,m);return l.putImageData(b,0,0),n}var BE={kernelName:$u,backendName:"cpu",kernelFunc:sQ};function fi(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o;Q(n,"sum");let i;n.dtype==="bool"?i=Ro({inputs:{x:n},backend:t,attrs:{dtype:"int32"}}):i=lr({inputs:{x:n},backend:t});let p=i.shape.length,u=y.parseAxisParam(s,i.shape),c=w.getAxesPermutation(u,p),l=u,m=i;c!=null&&(m=St({inputs:{x:i},backend:t,attrs:{perm:c}}),l=w.getInnerMostAxes(l.length,p)),w.assertAxesAreInnerMostDims("sum",l,m.shape.length);let[d,f]=w.computeOutAndReduceShapes(m.shape,l),h=w.upcastType(m.dtype,"int32"),g=yc(t,d,h),x=y.sizeFromShape(f),b=t.data.get(g.dataId).values,C=t.data.get(m.dataId).values;for(let S=0;S=0&&(m=fi({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 VE={kernelName:Bi,backendName:"cpu",kernelFunc:aQ};function iQ(r){let{inputs:e,backend:t}=r,{dy:o,y:n}=e;Q([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=0?s[p]=i[p]:s[p]=i[p]*(u+1)}return t.makeTensorInfo(n.shape,"float32",s)}var WE={kernelName:Xa,backendName:"cpu",kernelFunc:iQ};var uQ=w.ERF_P,pQ=w.ERF_A1,cQ=w.ERF_A2,lQ=w.ERF_A3,mQ=w.ERF_A4,dQ=w.ERF_A5,fQ=Ie(gn,r=>{let e=Math.sign(r),t=Math.abs(r),o=1/(1+uQ*t);return e*(1-((((dQ*o+mQ)*o+lQ)*o+cQ)*o+pQ)*o*Math.exp(-t*t))}),UE={kernelName:gn,backendName:"cpu",kernelFunc:fQ};function kc(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),We({inputs:{x:n},backend:t,attrs:{shape:i}})}var GE={kernelName:na,backendName:"cpu",kernelFunc:kc};var hQ=Ve((r,e)=>r/e),Ul=Ye(fn,hQ),Gl={kernelName:fn,backendName:"cpu",kernelFunc:Ul};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&&C=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=w.segment_util.collectGatherOpShapeInfo(n,s,p,l),f=We({inputs:{x:n},backend:t,attrs:{shape:[d.batchSize,d.outerSize,d.dimSize,d.sliceSize]}}),h=We({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=_f(b,x,g);return t.disposeIntermediateTensorInfo(f),t.disposeIntermediateTensorInfo(h),t.makeTensorInfo(d.outputShape,C.dtype,C.values)}var QE={kernelName:aa,backendName:"cpu",kernelFunc:vQ};function kQ(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=We({inputs:{x:o},backend:t,attrs:{shape:[a,s]}}),p=Vf(i,!0,t),u=We({inputs:{x:p},backend:t,attrs:{shape:o.shape}});return t.disposeIntermediateTensorInfo(i),t.disposeIntermediateTensorInfo(p),u}var ZE={kernelName:Vi,backendName:"cpu",kernelFunc:kQ};var NQ=Ie(Tn,r=>Number.isFinite(r)?1:0,"bool"),JE={kernelName:Tn,backendName:"cpu",kernelFunc:NQ};var TQ=Ie(_n,r=>Math.abs(r)===1/0?1:0,"bool"),e$={kernelName:_n,backendName:"cpu",kernelFunc:TQ};var _Q=Ie(En,r=>Number.isNaN(r)?1:0,"bool"),t$={kernelName:En,backendName:"cpu",kernelFunc:_Q};function EQ(r){let{backend:e,attrs:t}=r,{start:o,stop:n,num:s}=t,a=Ef(o,n,s);return e.makeTensorInfo([a.length],"float32",a)}var r$={kernelName:An,backendName:"cpu",kernelFunc:EQ};var $Q=Ie(Pn,r=>Math.log1p(r)),o$={kernelName:Pn,backendName:"cpu",kernelFunc:$Q};var RQ=Ve((r,e)=>r&&e),DQ=Ye(On,RQ,null,"bool"),n$={kernelName:On,backendName:"cpu",kernelFunc:DQ};var AQ=Ie(Mn,r=>r?0:1,"bool"),s$={kernelName:Mn,backendName:"cpu",kernelFunc:AQ};var FQ=Ve((r,e)=>r||e),PQ=Ye(Ln,FQ,null,"bool"),a$={kernelName:Ln,backendName:"cpu",kernelFunc:PQ};function OQ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{depthRadius:s,bias:a,alpha:i,beta:p}=o;Q(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 S=l[x];C+=S*S}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=w.computePool2DInfo(n.shape,s,a,u,i,p),l;if(c.filterWidth===1&&c.filterHeight===1&&y.arraysEqual(c.inShape,c.outShape))l=lr({inputs:{x:n},backend:t});else{let m=t.data.get(n.dataId).values,d=y.computeStrides(n.shape),f=vc(m,n.shape,n.dtype,d,c,"max");l=t.makeTensorInfo(c.outShape,n.dtype,f.values)}return l}var c$={kernelName:Wn,backendName:"cpu",kernelFunc:LQ};function BQ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{filterSize:s,strides:a,pad:i,dimRoundingMode:p,dataFormat:u}=o;Q(n,"maxPool3d");let c=w.computePool3DInfo(n.shape,s,a,1,i,p,u),l=t.data.get(n.dataId).values,m=zf(l,n.shape,n.dtype,y.computeStrides(n.shape),c,"max");return t.makeTensorInfo(m.shape,"float32",m.values)}var l$={kernelName:ia,backendName:"cpu",kernelFunc:BQ};function zQ(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s}=e,{filterSize:a,strides:i,pad:p,dimRoundingMode:u}=o;Q([n,s],"maxPool3DGrad");let c=w.computePool3DInfo(s.shape,a,i,1,p,u),l=t.bufferSync(s),m=aE(l,c),d=c.strideDepth,f=c.strideHeight,h=c.strideWidth,g=c.dilationDepth,x=c.dilationHeight,b=c.dilationWidth,C=c.effectiveFilterDepth,S=c.effectiveFilterHeight,k=c.effectiveFilterWidth,_=C-1-c.padInfo.front,$=k-1-c.padInfo.left,R=S-1-c.padInfo.top,D=me(s.shape,"float32"),P=t.bufferSync(n);for(let O=0;O=c.outDepth||Math.floor(re)!==re))for(let ne=0;ne=c.outHeight||Math.floor(ee)!==ee))for(let oe=0;oe=c.outWidth||Math.floor(ie)!==ie)continue;let le=C*S*k-1-m.get(O,re,ee,ie,M),be=J*S*k+ne*k+oe,_e=le===be?1:0;if(_e===0)continue;let ve=P.get(O,re,ee,ie,M);Y+=ve*_e}}}D.set(Y,O,L,B,z,M)}return t.makeTensorInfo(D.shape,D.dtype,D.values)}var m$={kernelName:Gi,backendName:"cpu",kernelFunc:zQ};function VQ(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s,output:a}=e,i=s;Q([s,a],"maxPoolGrad");let{filterSize:p,strides:u,pad:c,dimRoundingMode:l}=o,m=w.computePool2DInfo(i.shape,p,u,1,c,l),d=t.data.get(i.dataId).values,f=me(m.outShape,i.dtype,Bf(d,i.shape,i.dtype,m).values),h=m.strideHeight,g=m.strideWidth,x=m.dilationHeight,b=m.dilationWidth,C=m.effectiveFilterHeight,S=m.effectiveFilterWidth,k=S-1-m.padInfo.left,_=C-1-m.padInfo.top,$=me(i.shape,"float32"),R=t.data.get(n.dataId).values,D=me(n.shape,"float32",R);for(let P=0;P=m.outHeight||Math.floor(q)!==q))for(let Y=0;Y=m.outWidth||Math.floor(J)!==J)continue;let re=C*S-1-f.get(P,q,J,O),ne=j*S+Y,ee=re===ne?1:0;if(ee===0)continue;let oe=D.get(P,q,J,O);U+=oe*ee}}$.set(U,P,M,L,O)}return t.makeTensorInfo($.shape,$.dtype,$.values)}var d$={kernelName:Ui,backendName:"cpu",kernelFunc:VQ};function f$(r,e,t,o,n){let s=y.computeStrides(e),a=vc(r,e,t,s,n,"max"),i=Bf(r,e,t,n,!0,o);return[a.values,i.values]}var h$={kernelName:ua,backendName:"cpu",kernelFunc:({inputs:r,attrs:e,backend:t})=>{let{x:o}=r,{filterSize:n,strides:s,pad:a,includeBatchInIndex:i}=e,p=t;Q(o,"MaxPoolWithArgmax");let u=p.data.get(o.dataId).values,c=w.computePool2DInfo(o.shape,n,s,[1,1],a),[l,m]=f$(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 WQ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o,i=y.parseAxisParam(s,n.shape),u=w.computeOutAndReduceShapes(n.shape,i)[1],c=y.sizeFromShape(u),l=[],m=t.makeTensorInfo([],"float32",new Float32Array([c]));l.push(m);let d=Ro({inputs:{x:n},backend:t,attrs:{dtype:"float32"}});l.push(d);let f=Ul({inputs:{a:d,b:m},backend:t});l.push(f);let h=fi({inputs:{x:f},backend:t,attrs:{axis:s,keepDims:a}});return l.forEach(g=>t.disposeIntermediateTensorInfo(g)),h}var g$={kernelName:Un,backendName:"cpu",kernelFunc:WQ};function UQ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o;Q(n,"min");let i=y.parseAxisParam(s,n.shape),p=i,u=w.getAxesPermutation(p,n.shape.length),c=n;u!=null&&(c=St({inputs:{x:n},backend:t,attrs:{perm:u}}),p=w.getInnerMostAxes(p.length,n.shape.length)),w.assertAxesAreInnerMostDims("min",p,c.shape.length);let[l,m]=w.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[S]+C[1]),p=s.map(C=>C[0]),u=s.map((C,S)=>C[0]+n.shape[S]),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[_]&&(S[_]=(u[_]-1)*2-S[_]+c);S=S.map((_,$)=>_-p[$]);let k=y.locToIndex(S,m,d);x[C]=l[k]}return{dataId:t.write(x,i,n.dtype),shape:i,dtype:n.dtype}}var y$={kernelName:Kn,backendName:"cpu",kernelFunc:GQ};var HQ=Ve((r,e)=>{let t=r%e;return r<0&&e<0||r>=0&&e>=0?t:(t+e)%e}),KQ=Ye(qn,HQ),b$={kernelName:qn,backendName:"cpu",kernelFunc:KQ};var w$=zp(jw());function vI(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=II({inputs:{x:n},backend:t,attrs:{reductionIndices:p,keepDims:!1}}),c=w.expandShapeToKeepDim(u.shape,p),l=We({inputs:{x:u},backend:t,attrs:{shape:c}}),m=Vl({inputs:{a:n,b:l},backend:t}),d=qS({inputs:{x:m},backend:t}),f=fi({inputs:{x:d},backend:t,attrs:{axis:p,keepDims:!1}}),h=We({inputs:{x:f},backend:t,attrs:{shape:c}}),g=Ul({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 C$={kernelName:Is,backendName:"cpu",kernelFunc:vI};function qQ(r){let{inputs:e,backend:t,attrs:o}=r,{logits:n}=e,{numSamples:s,seed:a,normalized:i}=o;Q(n,"multinomial");let p=i?n:vI({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=kc({inputs:{input:c},backend:t,attrs:{dim:n}});return i.push(l),l}),u=hu({inputs:p,backend:t,attrs:{axis:n}});return i.forEach(c=>t.disposeIntermediateTensorInfo(c)),u}var $$={kernelName:la,backendName:"cpu",kernelFunc:kI};function t7(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{paddings:s,constantValue:a}=o;Q(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(S,f,h);g[k]=u[b]}return{dataId:t.write(g,i,n.dtype),shape:i,dtype:n.dtype}}var Wf={kernelName:es,backendName:"cpu",kernelFunc:t7};var r7=Ve((r,e)=>Math.pow(r,e)),o7=Ye(ts,r7),R$={kernelName:ts,backendName:"cpu",kernelFunc:o7};function n7(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]=Rf(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 D$={kernelName:Hp,backendName:"cpu",kernelFunc:n7};function s7(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]=Df(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 A$={kernelName:Kp,backendName:"cpu",kernelFunc:s7};function a7(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]=Af(u,n.shape,c,s.shape,s.dtype,l,a.shape,m,d,p);return t.makeTensorInfo(f,s.dtype,h)}var F$={kernelName:qp,backendName:"cpu",kernelFunc:a7};function i7(r){let{backend:e,attrs:t}=r,{start:o,stop:n,dtype:s,step:a}=t,i=up(o,n,a,s);return e.makeTensorInfo([i.length],s,i)}var P$={kernelName:ma,backendName:"cpu",kernelFunc:i7};var u7=Ie(ns,r=>1/r),O$={kernelName:ns,backendName:"cpu",kernelFunc:u7};function p7(r){let{inputs:e,backend:t,attrs:o}=r,{images:n}=e,{alignCorners:s,halfPixelCenters:a,size:i}=o;Q(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,S=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,S=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],S=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],S=x[1]/b[1],k=1/C,_=1/S,$=Math.ceil(k)*2+2,R=Math.ceil(_)*2+2;for(let D=0;D=d)continue;let ee=P+ne*p[1],oe=ne*C,ie=Math.min(c-1,a?Math.round(oe):Math.floor(oe));if(O===ie)for(let le=0;le=f)continue;let _e=ee+be*p[2],ve=be*S,Fe=Math.min(l-1,a?Math.round(ve):Math.floor(ve));z===Fe&&(J+=g[_e+Y])}}h[U+Y]=J}}}}return t.makeTensorInfo(n.shape,n.dtype,h)}var z$={kernelName:Za,backendName:"cpu",kernelFunc:m7};function d7(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{dims:s}=o;Q(n,"reverse");let a=n.shape.length,i=y.parseAxisParam(s,n.shape);if(a===0)return lr({inputs:{x:n},backend:t});let p=new tt(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 V$={kernelName:ps,backendName:"cpu",kernelFunc:d7};var W$={kernelName:Ds,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]=w.getImageCenter(a,c,l),h=255,g=Math.sin(n),x=Math.cos(n),b=i.data.get(o.dataId).values;for(let S=0;S=0&&B=0&&z{let e=Math.floor(r);return r-e<.5?Math.floor(r):r-e>.5?Math.ceil(r):e%2===0?e:e+1}),U$={kernelName:cs,backendName:"cpu",kernelFunc:f7};function h7(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}=w.calculateShapes(s,n,a),m=!0,d=t.bufferSync(n),f=t.bufferSync(s),h=zs(d,f,a,l,u,p,i,c,0,m);return t.makeTensorInfo(a,h.dtype,h.values)}var G$={kernelName:ms,backendName:"cpu",kernelFunc:h7};function g7(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?w7*r:C7*(Math.exp(r)-1)),j$={kernelName:hs,backendName:"cpu",kernelFunc:S7};var I7=Ie(ys,r=>r<0?-1:r>0?1:0),X$={kernelName:ys,backendName:"cpu",kernelFunc:I7};var v7=Ie(gs,r=>Math.sin(r)),Y$={kernelName:gs,backendName:"cpu",kernelFunc:v7};var k7=Ie(xs,r=>Math.sinh(r)),Q$={kernelName:xs,backendName:"cpu",kernelFunc:k7};var N7=11920928955078125e-23,Z$=Math.log(N7)+2,T7=Ie(Cs,r=>{let e=r>-Z$,t=rNumber(g)))),t.makeTensorInfo([h.length],o.dtype,new Int32Array(h))]}var tR={kernelName:Ki,backendName:"cpu",kernelFunc:EQ};function $Q(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]=Ff(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 tR={kernelName:Ki,backendName:"cpu",kernelFunc:E7};function $7(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]=Pf(i,o.shape,o.dtype,a,p);return[t.makeTensorInfo(c,o.dtype,u),t.makeTensorInfo([l.length],s.dtype,new Int32Array(l))]}var rR={kernelName:ei,backendName:"cpu",kernelFunc:$Q};function RQ(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]=Pf(i,o.shape,o.dtype,a,p);return[t.makeTensorInfo(c,o.dtype,u),t.makeTensorInfo([l.length],s.dtype,new Int32Array(l))]}var rR={kernelName:ei,backendName:"cpu",kernelFunc:$7};function R7(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]=Sc(a,o.shape,o.dtype,i,p,!0);return t.makeTensorInfo(c,o.dtype,u)}var oR={kernelName:ya,backendName:"cpu",kernelFunc:RQ};function DQ(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]=Sc(a,o.shape,o.dtype,i,p,!0);return t.makeTensorInfo(c,o.dtype,u)}var oR={kernelName:ya,backendName:"cpu",kernelFunc:R7};function D7(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]=Sc(a,o.shape,o.dtype,i,p);return t.makeTensorInfo(c,o.dtype,u)}var nR={kernelName:ba,backendName:"cpu",kernelFunc:DQ};function AQ(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}=w.calculateShapes(s,n,i),d=!1,f=t.bufferSync(n),h;switch(s.dtype){case"bool":{let g=t.bufferSync(s),x=!!t.data.get(a.dataId).values[0];h=zs(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=zs(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=zs(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=zs(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 sR={kernelName:vs,backendName:"cpu",kernelFunc:AQ};function FQ(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=w.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=Ao({inputs:{x:n},backend:t,attrs:{begin:u,size:m}});return u[i]+=l,d})}var aR={kernelName:xa,backendName:"cpu",kernelFunc:FQ};var iR={kernelName:qi,backendName:"cpu",kernelFunc:({inputs:r,backend:e})=>{let{x:t}=r,o=e;Q(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}),uR={kernelName:wo,backendName:"cpu",kernelFunc:PQ};function OQ(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;Q(n,"stridedSlice");let{finalShapeSparse:d,finalShape:f,isIdentity:h,sliceDim0:g,isSimpleSlice:x,begin:b,end:C,strides:S}=pt.sliceInfo(n.shape,s,a,i,p,u,c,l,m),k;if(h)k=We({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 _=pt.computeOutShape(b,C,S),$=Ao({inputs:{x:n},backend:t,attrs:{begin:b,size:_}});k=We({inputs:{x:$},backend:t,attrs:{shape:f}}),t.disposeIntermediateTensorInfo($)}else{let _=t.bufferSync(n),$=Of(d,_,S,b);k=t.makeTensorInfo(f,$.dtype,$.values)}return k}var pR={kernelName:Ns,backendName:"cpu",kernelFunc:OQ};function MQ(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]=cp(m,d,n,s,a,i,p,u);return[t.makeTensorInfo([f.length],"string",f),t.makeTensorInfo(l.shape,"int32",h)]}var cR={kernelName:Ca,backendName:"cpu",kernelFunc:MQ};function LQ(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]=lp(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 lR={kernelName:ji,backendName:"cpu",kernelFunc:LQ};function BQ(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=mp(a,n);return t.makeTensorInfo(s.shape,"int32",i)}var mR={kernelName:Xi,backendName:"cpu",kernelFunc:BQ};var zQ=Ie(_s,r=>Math.tan(r)),dR={kernelName:_s,backendName:"cpu",kernelFunc:zQ};var VQ=Ie(Es,r=>Math.tanh(r)),fR={kernelName:Es,backendName:"cpu",kernelFunc:VQ};function WQ(r){let{inputs:e,backend:t}=r,{tensor:o,indices:n,updates:s}=e,{sliceRank:a,numUpdates:i,sliceSize:p,strides:u,outputSize:c}=w.calculateShapes(s,n,o.shape),l=!1,m=t.bufferSync(n),d=t.bufferSync(s),f=t.bufferSync(o),h=zs(m,d,o.shape,c,p,i,a,u,f,l);return t.makeTensorInfo(o.shape,h.dtype,h.values)}var hR={kernelName:ds,backendName:"cpu",kernelFunc:WQ};function UQ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{reps:s}=o;Q(n,"tile");let a=Mf(t.bufferSync(n),s);return t.makeTensorInfo(a.shape,a.dtype,a.values)}var gR={kernelName:po,backendName:"cpu",kernelFunc:UQ};function GQ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{k:s,sorted:a}=o;Q(n,"topk");let i=t.data.get(n.dataId).values,[p,u]=Lf(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 xR={kernelName:$s,backendName:"cpu",kernelFunc:GQ};function HQ(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],S=x[2],k=y.computeStrides(g),_=k[0],$=k[1],R=k[2],D=y.getTypedArrayFromDType(n.dtype,y.sizeFromShape(g));D.fill(p);let P=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 y.clamp(0,t,e-1)}function qQ(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 jQ(r,e){return r}function XQ(r,e){return y.clamp(0,r,e-1)}function ql(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 SR={kernelName:Qi,backendName:"cpu",kernelFunc:eZ};var tZ=[q_,t_,j_,X_,a_,Y_,Q_,Z_,J_,eE,tE,rE,oE,nE,sE,iE,uE,pE,cE,K_,lE,mE,dE,i_,fE,s_,u_,hE,r_,gE,yE,bE,CE,wE,SE,IE,vE,kE,NE,TE,_E,EE,$E,RE,DE,AE,FE,PE,OE,ME,LE,BE,VE,z_,WE,p_,UE,c_,GE,l_,HE,KE,qE,m_,d_,jE,XE,YE,QE,f_,h_,o_,ZE,xE,JE,e$,t$,V_,g_,x_,r$,y_,o$,n$,s$,a$,i$,u$,p$,b_,c$,l$,m$,d$,h$,g$,x$,C_,y$,b$,S$,w_,S_,I$,v$,k$,I_,N$,E$,$$,Wf,R$,W_,k_,D$,A$,F$,P$,n_,Gl,O$,U_,G_,H_,M$,L$,B$,z$,V$,W$,U$,$_,G$,K$,q$,j$,D_,X$,Y$,Q$,A_,C$,J$,eR,tR,rR,oR,nR,sR,aR,P_,iR,O_,M_,uR,pR,cR,lR,mR,L_,zE,dR,fR,hR,gR,xR,bR,v_,CR,wR,SR,T$];for(let r of tZ)ti(r);var Ec={};qe(Ec,{assertNotComplex:()=>Vs,bindCanvasToFramebuffer:()=>cZ,bindColorTextureToFramebuffer:()=>Ql,bindTextureToProgramUniformSampler:()=>VI,bindTextureUnit:()=>NR,bindVertexBufferToProgramAttribute:()=>jf,callAndCheck:()=>ce,canBeRepresented:()=>EI,createFragmentShader:()=>RI,createFramebuffer:()=>LI,createProgram:()=>DI,createStaticIndexBuffer:()=>PI,createStaticVertexBuffer:()=>FI,createTexture:()=>OI,createVertexShader:()=>$I,getBatchDim:()=>gi,getExtensionOrThrow:()=>Nc,getFramebufferErrorMessage:()=>TR,getMaxTexturesInShader:()=>GI,getNumChannels:()=>uZ,getProgramUniformLocation:()=>zI,getProgramUniformLocationOrThrow:()=>BI,getRowsCols:()=>xi,getShapeAs3D:()=>_c,getTextureShapeFromLogicalShape:()=>WI,getWebGLDisjointQueryTimerVersion:()=>HI,getWebGLErrorMessage:()=>kR,getWebGLMaxTextureSize:()=>UI,hasExtension:()=>qr,isCapableOfRenderingToFloatTexture:()=>KI,isDownloadFloatTextureEnabled:()=>qI,isReshapeFree:()=>xu,isWebGLFenceEnabled:()=>jI,isWebGLVersionEnabled:()=>Yf,linkProgram:()=>AI,logShaderSourceAndInfoLog:()=>qf,resetMaxTextureSize:()=>lZ,resetMaxTexturesInShader:()=>mZ,unbindColorTextureFromFramebuffer:()=>Xf,unbindTextureUnit:()=>pZ,validateFramebuffer:()=>Tc,validateProgram:()=>Yl,validateTextureSize:()=>MI});var hp={},Uf={alpha:!1,antialias:!1,premultipliedAlpha:!1,preserveDrawingBuffer:!1,depth:!1,stencil:!1,failIfMajorPerformanceCaveat:!0};function NI(r,e){hp[r]=e}function Kr(r,e){if(!(r in hp)||e!=null){let o=oZ(r,e);if(o!==null)hp[r]=o;else return console.log("Could not get context for WebGL version",r),null}let t=hp[r];return t==null||t.isContextLost()?(delete hp[r],Kr(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),hp[r])}function rZ(r){if(!A().getBool("IS_SAFARI")&&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 oZ(r,e){if(r!==1&&r!==2)throw new Error("Cannot get WebGL rendering context, WebGL is disabled.");let t=e==null?rZ(r):e;return t.addEventListener("webglcontextlost",o=>{o.preventDefault(),delete hp[r]},!1),A().getBool("SOFTWARE_WEBGL_ENABLED")&&(Uf.failIfMajorPerformanceCaveat=!1),r===1?t.getContext("webgl",Uf)||t.getContext("experimental-webgl",Uf):t.getContext("webgl2",Uf)}var gu;(function(r){r[r.DENSE=0]="DENSE",r[r.SHARED_BATCH=1]="SHARED_BATCH"})(gu||(gu={}));var mr;(function(r){r[r.RENDER=0]="RENDER",r[r.UPLOAD=1]="UPLOAD",r[r.PIXELS=2]="PIXELS",r[r.DOWNLOAD=3]="DOWNLOAD"})(mr||(mr={}));var er;(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"})(er||(er={}));function gp(r,e){return[e,r]}function IR(r,e){return r*e}function jl(r){let e=y.sizeFromShape(r),t=Math.ceil(e/4);return y.sizeToSquarishShape(t)}function Ma(r,e){return[Math.max(1,Math.ceil(e/2)),Math.max(1,Math.ceil(r/2))]}function vR(r,e){let[t,o]=Ma(r,e);return t*o*4}function Xl(r,e){let t=r,o,n,s,a,i,p,u,c,l,m;return A().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 A().getBool("DEBUG")&&nZ(r),t}function nZ(r){let e=r.getError();if(e!==r.NO_ERROR)throw new Error("WebGL Error: "+kR(r,e))}var sZ=596e-10,aZ=65504;function EI(r){return!!(A().getBool("WEBGL_RENDER_FLOAT32_ENABLED")||r===0||sZr.getExtension(e),'Extension "'+e+'" not supported on this browser.')}function $I(r,e){let t=hi(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 RI(r,e){let t=hi(r,()=>r.createShader(r.FRAGMENT_SHADER),"Unable to create fragment WebGLShader.");if(ce(r,()=>r.shaderSource(t,e)),ce(r,()=>r.compileShader(t)),A().get("ENGINE_COMPILE_ONLY"))return t;if(r.getShaderParameter(t,r.COMPILE_STATUS)===!1)throw qf(e,r.getShaderInfoLog(t)),new Error("Failed to compile fragment shader.");return t}var iZ=/ERROR: [0-9]+:([0-9]+):/g;function qf(r,e){let t=iZ.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.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]=Sc(a,o.shape,o.dtype,i,p);return t.makeTensorInfo(c,o.dtype,u)}var nR={kernelName:ba,backendName:"cpu",kernelFunc:D7};function A7(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}=w.calculateShapes(s,n,i),d=!1,f=t.bufferSync(n),h;switch(s.dtype){case"bool":{let g=t.bufferSync(s),x=!!t.data.get(a.dataId).values[0];h=zs(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=zs(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=zs(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=zs(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 sR={kernelName:vs,backendName:"cpu",kernelFunc:A7};function F7(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=w.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=Ao({inputs:{x:n},backend:t,attrs:{begin:u,size:m}});return u[i]+=l,d})}var aR={kernelName:xa,backendName:"cpu",kernelFunc:F7};var iR={kernelName:qi,backendName:"cpu",kernelFunc:({inputs:r,backend:e})=>{let{x:t}=r,o=e;Q(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}),uR={kernelName:wo,backendName:"cpu",kernelFunc:P7};function O7(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;Q(n,"stridedSlice");let{finalShapeSparse:d,finalShape:f,isIdentity:h,sliceDim0:g,isSimpleSlice:x,begin:b,end:C,strides:S}=pt.sliceInfo(n.shape,s,a,i,p,u,c,l,m),k;if(h)k=We({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 _=pt.computeOutShape(b,C,S),$=Ao({inputs:{x:n},backend:t,attrs:{begin:b,size:_}});k=We({inputs:{x:$},backend:t,attrs:{shape:f}}),t.disposeIntermediateTensorInfo($)}else{let _=t.bufferSync(n),$=Of(d,_,S,b);k=t.makeTensorInfo(f,$.dtype,$.values)}return k}var pR={kernelName:Ns,backendName:"cpu",kernelFunc:O7};function M7(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]=cp(m,d,n,s,a,i,p,u);return[t.makeTensorInfo([f.length],"string",f),t.makeTensorInfo(l.shape,"int32",h)]}var cR={kernelName:Ca,backendName:"cpu",kernelFunc:M7};function L7(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]=lp(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 lR={kernelName:ji,backendName:"cpu",kernelFunc:L7};function B7(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=mp(a,n);return t.makeTensorInfo(s.shape,"int32",i)}var mR={kernelName:Xi,backendName:"cpu",kernelFunc:B7};var z7=Ie(_s,r=>Math.tan(r)),dR={kernelName:_s,backendName:"cpu",kernelFunc:z7};var V7=Ie(Es,r=>Math.tanh(r)),fR={kernelName:Es,backendName:"cpu",kernelFunc:V7};function W7(r){let{inputs:e,backend:t}=r,{tensor:o,indices:n,updates:s}=e,{sliceRank:a,numUpdates:i,sliceSize:p,strides:u,outputSize:c}=w.calculateShapes(s,n,o.shape),l=!1,m=t.bufferSync(n),d=t.bufferSync(s),f=t.bufferSync(o),h=zs(m,d,o.shape,c,p,i,a,u,f,l);return t.makeTensorInfo(o.shape,h.dtype,h.values)}var hR={kernelName:ds,backendName:"cpu",kernelFunc:W7};function U7(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{reps:s}=o;Q(n,"tile");let a=Mf(t.bufferSync(n),s);return t.makeTensorInfo(a.shape,a.dtype,a.values)}var gR={kernelName:po,backendName:"cpu",kernelFunc:U7};function G7(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{k:s,sorted:a}=o;Q(n,"topk");let i=t.data.get(n.dataId).values,[p,u]=Lf(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 xR={kernelName:$s,backendName:"cpu",kernelFunc:G7};function H7(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],S=x[2],k=y.computeStrides(g),_=k[0],$=k[1],R=k[2],D=y.getTypedArrayFromDType(n.dtype,y.sizeFromShape(g));D.fill(p);let P=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 y.clamp(0,t,e-1)}function q7(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 j7(r,e){return r}function X7(r,e){return y.clamp(0,r,e-1)}function ql(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 SR={kernelName:Qi,backendName:"cpu",kernelFunc:eZ};var tZ=[q_,t_,j_,X_,a_,Y_,Q_,Z_,J_,eE,tE,rE,oE,nE,sE,iE,uE,pE,cE,K_,lE,mE,dE,i_,fE,s_,u_,hE,r_,gE,yE,bE,CE,wE,SE,IE,vE,kE,NE,TE,_E,EE,$E,RE,DE,AE,FE,PE,OE,ME,LE,BE,VE,z_,WE,p_,UE,c_,GE,l_,HE,KE,qE,m_,d_,jE,XE,YE,QE,f_,h_,o_,ZE,xE,JE,e$,t$,V_,g_,x_,r$,y_,o$,n$,s$,a$,i$,u$,p$,b_,c$,l$,m$,d$,h$,g$,x$,C_,y$,b$,S$,w_,S_,I$,v$,k$,I_,N$,E$,$$,Wf,R$,W_,k_,D$,A$,F$,P$,n_,Gl,O$,U_,G_,H_,M$,L$,B$,z$,V$,W$,U$,$_,G$,K$,q$,j$,D_,X$,Y$,Q$,A_,C$,J$,eR,tR,rR,oR,nR,sR,aR,P_,iR,O_,M_,uR,pR,cR,lR,mR,L_,zE,dR,fR,hR,gR,xR,bR,v_,CR,wR,SR,T$];for(let r of tZ)ti(r);var Ec={};qe(Ec,{assertNotComplex:()=>Vs,bindCanvasToFramebuffer:()=>cZ,bindColorTextureToFramebuffer:()=>Ql,bindTextureToProgramUniformSampler:()=>VI,bindTextureUnit:()=>NR,bindVertexBufferToProgramAttribute:()=>jf,callAndCheck:()=>ce,canBeRepresented:()=>EI,createFragmentShader:()=>RI,createFramebuffer:()=>LI,createProgram:()=>DI,createStaticIndexBuffer:()=>PI,createStaticVertexBuffer:()=>FI,createTexture:()=>OI,createVertexShader:()=>$I,getBatchDim:()=>gi,getExtensionOrThrow:()=>Nc,getFramebufferErrorMessage:()=>TR,getMaxTexturesInShader:()=>GI,getNumChannels:()=>uZ,getProgramUniformLocation:()=>zI,getProgramUniformLocationOrThrow:()=>BI,getRowsCols:()=>xi,getShapeAs3D:()=>_c,getTextureShapeFromLogicalShape:()=>WI,getWebGLDisjointQueryTimerVersion:()=>HI,getWebGLErrorMessage:()=>kR,getWebGLMaxTextureSize:()=>UI,hasExtension:()=>qr,isCapableOfRenderingToFloatTexture:()=>KI,isDownloadFloatTextureEnabled:()=>qI,isReshapeFree:()=>xu,isWebGLFenceEnabled:()=>jI,isWebGLVersionEnabled:()=>Yf,linkProgram:()=>AI,logShaderSourceAndInfoLog:()=>qf,resetMaxTextureSize:()=>lZ,resetMaxTexturesInShader:()=>mZ,unbindColorTextureFromFramebuffer:()=>Xf,unbindTextureUnit:()=>pZ,validateFramebuffer:()=>Tc,validateProgram:()=>Yl,validateTextureSize:()=>MI});var hp={},Uf={alpha:!1,antialias:!1,premultipliedAlpha:!1,preserveDrawingBuffer:!1,depth:!1,stencil:!1,failIfMajorPerformanceCaveat:!0};function NI(r,e){hp[r]=e}function Kr(r,e){if(!(r in hp)||e!=null){let o=oZ(r,e);if(o!==null)hp[r]=o;else return console.log("Could not get context for WebGL version",r),null}let t=hp[r];return t==null||t.isContextLost()?(delete hp[r],Kr(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),hp[r])}function rZ(r){if(!A().getBool("IS_SAFARI")&&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 oZ(r,e){if(r!==1&&r!==2)throw new Error("Cannot get WebGL rendering context, WebGL is disabled.");let t=e==null?rZ(r):e;return t.addEventListener("webglcontextlost",o=>{o.preventDefault(),delete hp[r]},!1),A().getBool("SOFTWARE_WEBGL_ENABLED")&&(Uf.failIfMajorPerformanceCaveat=!1),r===1?t.getContext("webgl",Uf)||t.getContext("experimental-webgl",Uf):t.getContext("webgl2",Uf)}var gu;(function(r){r[r.DENSE=0]="DENSE",r[r.SHARED_BATCH=1]="SHARED_BATCH"})(gu||(gu={}));var mr;(function(r){r[r.RENDER=0]="RENDER",r[r.UPLOAD=1]="UPLOAD",r[r.PIXELS=2]="PIXELS",r[r.DOWNLOAD=3]="DOWNLOAD"})(mr||(mr={}));var er;(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"})(er||(er={}));function gp(r,e){return[e,r]}function IR(r,e){return r*e}function jl(r){let e=y.sizeFromShape(r),t=Math.ceil(e/4);return y.sizeToSquarishShape(t)}function Ma(r,e){return[Math.max(1,Math.ceil(e/2)),Math.max(1,Math.ceil(r/2))]}function vR(r,e){let[t,o]=Ma(r,e);return t*o*4}function Xl(r,e){let t=r,o,n,s,a,i,p,u,c,l,m;return A().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 A().getBool("DEBUG")&&nZ(r),t}function nZ(r){let e=r.getError();if(e!==r.NO_ERROR)throw new Error("WebGL Error: "+kR(r,e))}var sZ=596e-10,aZ=65504;function EI(r){return!!(A().getBool("WEBGL_RENDER_FLOAT32_ENABLED")||r===0||sZr.getExtension(e),'Extension "'+e+'" not supported on this browser.')}function $I(r,e){let t=hi(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 RI(r,e){let t=hi(r,()=>r.createShader(r.FRAGMENT_SHADER),"Unable to create fragment WebGLShader.");if(ce(r,()=>r.shaderSource(t,e)),ce(r,()=>r.compileShader(t)),A().get("ENGINE_COMPILE_ONLY"))return t;if(r.getShaderParameter(t,r.COMPILE_STATUS)===!1)throw qf(e,r.getShaderInfoLog(t)),new Error("Failed to compile fragment shader.");return t}var iZ=/ERROR: [0-9]+:([0-9]+):/g;function qf(r,e){let t=iZ.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;lf.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 Fr(n,La):f=new tr(n,La);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(A().getBool("DEBUG")&&!A().getBool("WEBGL_DOWNLOAD_FLOAT_ENABLED")&&A().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"&&A().get("WEBGL_BUFFER_SUPPORTED")){c=this.decode(e);let f=this.texData.get(c.dataId);u=this.gpgpu.createBufferFromTexture(f.texture.texture,...jl(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=w.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)&&ur().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 Fr(s,La):d=new tr(s,La);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=ur().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 me(e.shape,e.dtype,o)}catch(o){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,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(A().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 A().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0?this.gpgpu.beginQuery():{startMs:y.now(),endMs:null}}endTimer(e){return A().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0?(this.gpgpu.endQuery(),e):(e.endMs=y.now(),e)}async getQueryTime(e){if(A().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=p9){return A().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 ur().makeTensorFromTensorInfo(this.makeTensorInfo(e,t,o),this)}unpackTensor(e){let t=new fh(e.shape);return this.runWebGLProgram(t,[e],e.dtype)}packTensor(e){let t=new mh(e.shape);return this.runWebGLProgram(t,[e],e.dtype,null,!0)}packedReshape(e,t){let o=[gi(e.shape),...xi(e.shape)],n={dtype:e.dtype,shape:o,dataId:e.dataId},s=[gi(t),...xi(t)],a=new Mc(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=_c(s),p;n?p=new eh(i):p=new Jf(i);let u=!0,c=[t!=null?t:jl(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===gu.DENSE){let x=a!=null?a:jl(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)<=A().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&&!xu(b.shape,x.shape)){let C=x,S=x.shape;x.shape=b.shape,x=this.packedReshape(x,S),u.push(x),b=this.texData.get(x.dataId),C.shape=S}return{shape:x.shape,texData:b,isUniform:!1}});this.uploadToGPU(i.dataId);let l={shape:i.shape,texData:p,isUniform:!1},m=MR(e,c,l),d=this.getAndSaveBinary(m,()=>PR(this.gpgpu,e,c,l)),f=this.activeTimers!=null,h;f&&(h=this.startTimer()),A().get("ENGINE_COMPILE_ONLY")||OR(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=A().getNumber("WEBGL_FLUSH_THRESHOLD");if(g>0){let x=y.now();x-this.lastGlFlushTime>g&&(this.gpgpu.gl.flush(),this.lastGlFlushTime=x)}if(!A().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||(A().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=De(()=>{if(!A().get("WEBGL_RENDER_FLOAT32_ENABLED")){let e=A().getBool("DEBUG");A().set("DEBUG",!1);let t=this.abs(ke(1e-8)).dataSync()[0];if(A().set("DEBUG",e),t>0)return 32}return 16})),this.floatPrecisionValue}epsilon(){return this.floatPrecision()===32?a9:i9}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=WI(o,p),t.texShape=l),s!=null){let m=_c(o),d,f=l[1],h=l[0],g=s instanceof Uint8Array||s instanceof Uint8ClampedArray;(p||!g)&&([f,h]=Ma(l[0],l[1])),p?d=new oh(m,g):d=new Zl(m,g);let x=g?[h,f]:l,b=this.makeTensorInfo(x,n),C=this.texData.get(b.dataId);g?C.usage=mr.PIXELS:C.usage=mr.UPLOAD,C.texShape=x,this.gpgpu.uploadDenseMatrixToTexture(this.getTexture(b.dataId),f,h,s);let S=[[h,f]],_=this.runWebGLProgram(d,[b],n,S,!0),$=this.texData.get(_.dataId);t.texShape=$.texShape,t.isPacked=$.isPacked,t.usage=$.usage,A().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=m9(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 cS(),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?(qf(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.values(this.binaryCache)){this.gpgpu.buildVao(e.webGLProgram);let{variablesLocations:t,customUniformLocations:o,infLoc:n,nanLoc:s,outShapeLocation:a,outShapeStridesLocation:i,outTexShapeLocation:p}=XI(this.gpgpu,e.program,e.webGLProgram);e.variablesLocations=t,e.customUniformLocations=o,e.infLoc=n,e.nanLoc=s,e.outShapeLocation=a,e.outShapeStridesLocation=i,e.outTexShapeLocation=p}}createTensorFromGPUData(e,t,o){e.channels=e.channels||"RGBA";let{texture:n,height:s,width:a,channels:i}=e,p=ur().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 ur().makeTensorFromDataId(u,t,o,p)}};Lc.nextDataId=0;function m9(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 Lc,2);var $at={forceHalfFloat:GD};var Bc=` + `}};var s9=Vt.whereImpl,a9=1e-7,i9=1e-4,hh={};function u9(r){return r in hh||(hh[r]={}),hh[r]}var p9=A().getNumber("CPU_HANDOFF_SIZE_THRESHOLD"),c9=600;function l9(){return A().global.screen==null?1024:A().global.screen.height*A().global.screen.width*window.devicePixelRatio*c9/1024/1024}var Lc=class r extends ao{nextDataId(){return r.nextDataId++}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,!A().getBool("HAS_WEBGL"))throw new Error("WebGL is not supported on this device");let t;if(e!=null){if(e instanceof bp)t=e;else{let o=Kr(A().getNumber("WEBGL_VERSION"),e);t=new bp(o)}this.binaryCache={},this.gpgpuCreatedLocally=!1}else{let o=Kr(A().getNumber("WEBGL_VERSION"));t=new bp(o),this.binaryCache=u9(A().getNumber("WEBGL_VERSION")),this.gpgpuCreatedLocally=!0}this.gpgpu=t,this.canvas=this.gpgpu.gl.canvas,this.textureManager=new dh(this.gpgpu),this.numMBBeforeWarning=l9(),this.texData=new Bo(this,ur())}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=_c(t),c=new Zl(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((A().getBool("WEBGL_CHECK_NUMERICAL_PROBLEMS")||A().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:mr.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(A().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:mr.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 Fr(i,La):m=new tr(i,La);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=w.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 Fr(n,La):f=new tr(n,La);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(A().getBool("DEBUG")&&!A().getBool("WEBGL_DOWNLOAD_FLOAT_ENABLED")&&A().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"&&A().get("WEBGL_BUFFER_SUPPORTED")){c=this.decode(e);let f=this.texData.get(c.dataId);u=this.gpgpu.createBufferFromTexture(f.texture.texture,...jl(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=w.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)&&ur().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 Fr(s,La):d=new tr(s,La);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=ur().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 me(e.shape,e.dtype,o)}catch(o){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,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(A().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 A().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0?this.gpgpu.beginQuery():{startMs:y.now(),endMs:null}}endTimer(e){return A().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0?(this.gpgpu.endQuery(),e):(e.endMs=y.now(),e)}async getQueryTime(e){if(A().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=p9){return A().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 ur().makeTensorFromTensorInfo(this.makeTensorInfo(e,t,o),this)}unpackTensor(e){let t=new fh(e.shape);return this.runWebGLProgram(t,[e],e.dtype)}packTensor(e){let t=new mh(e.shape);return this.runWebGLProgram(t,[e],e.dtype,null,!0)}packedReshape(e,t){let o=[gi(e.shape),...xi(e.shape)],n={dtype:e.dtype,shape:o,dataId:e.dataId},s=[gi(t),...xi(t)],a=new Mc(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=_c(s),p;n?p=new eh(i):p=new Jf(i);let u=!0,c=[t!=null?t:jl(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===gu.DENSE){let x=a!=null?a:jl(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)<=A().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&&!xu(b.shape,x.shape)){let C=x,S=x.shape;x.shape=b.shape,x=this.packedReshape(x,S),u.push(x),b=this.texData.get(x.dataId),C.shape=S}return{shape:x.shape,texData:b,isUniform:!1}});this.uploadToGPU(i.dataId);let l={shape:i.shape,texData:p,isUniform:!1},m=MR(e,c,l),d=this.getAndSaveBinary(m,()=>PR(this.gpgpu,e,c,l)),f=this.activeTimers!=null,h;f&&(h=this.startTimer()),A().get("ENGINE_COMPILE_ONLY")||OR(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=A().getNumber("WEBGL_FLUSH_THRESHOLD");if(g>0){let x=y.now();x-this.lastGlFlushTime>g&&(this.gpgpu.gl.flush(),this.lastGlFlushTime=x)}if(!A().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||(A().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=De(()=>{if(!A().get("WEBGL_RENDER_FLOAT32_ENABLED")){let e=A().getBool("DEBUG");A().set("DEBUG",!1);let t=this.abs(ke(1e-8)).dataSync()[0];if(A().set("DEBUG",e),t>0)return 32}return 16})),this.floatPrecisionValue}epsilon(){return this.floatPrecision()===32?a9:i9}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=WI(o,p),t.texShape=l),s!=null){let m=_c(o),d,f=l[1],h=l[0],g=s instanceof Uint8Array||s instanceof Uint8ClampedArray;(p||!g)&&([f,h]=Ma(l[0],l[1])),p?d=new oh(m,g):d=new Zl(m,g);let x=g?[h,f]:l,b=this.makeTensorInfo(x,n),C=this.texData.get(b.dataId);g?C.usage=mr.PIXELS:C.usage=mr.UPLOAD,C.texShape=x,this.gpgpu.uploadDenseMatrixToTexture(this.getTexture(b.dataId),f,h,s);let S=[[h,f]],_=this.runWebGLProgram(d,[b],n,S,!0),$=this.texData.get(_.dataId);t.texShape=$.texShape,t.isPacked=$.isPacked,t.usage=$.usage,A().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=m9(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 cS(),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?(qf(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.values(this.binaryCache)){this.gpgpu.buildVao(e.webGLProgram);let{variablesLocations:t,customUniformLocations:o,infLoc:n,nanLoc:s,outShapeLocation:a,outShapeStridesLocation:i,outTexShapeLocation:p}=XI(this.gpgpu,e.program,e.webGLProgram);e.variablesLocations=t,e.customUniformLocations=o,e.infLoc=n,e.nanLoc=s,e.outShapeLocation=a,e.outShapeStridesLocation=i,e.outTexShapeLocation=p}}createTensorFromGPUData(e,t,o){e.channels=e.channels||"RGBA";let{texture:n,height:s,width:a,channels:i}=e,p=ur().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 ur().makeTensorFromDataId(u,t,o,p)}};Lc.nextDataId=0;function m9(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 Lc,2);var $at={forceHalfFloat:GD};var Bc=` if (isnan(a)) return a; if (isnan(b)) return b; `;var Pr=class{constructor(e,t,o){this.variableNames=["A","B"],this.outputShape=w.assertAndGetBroadcastShape(t,o),this.enableShapeUniforms=ut(this.outputShape.length),this.userCode=` @@ -4994,7 +4994,7 @@ return a / b;`,Yee=` } `}};function Ire(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=w.getAxesPermutation([u],i),l=n;c!=null&&(l=bt({inputs:{x:n},backend:t,attrs:{perm:c}}),p.push(l),u=w.getInnerMostAxes(1,i)[0]);let m=w.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=oi(n.dtype),g=(S,k,_,$,R)=>{let D=S.shape[0],P=S.shape[1],O=w.segment_util.segOpComputeOptimalWindowSize(P,R),M={windowSize:O,inSize:P,batchSize:D,numSegments:R},L=new Og(M,k),B=t.compileAndRun(L,[S,_],$);if(p.push(B),B.shape[1]===R)return B;let z=Av({backend:t,attrs:{start:0,stop:R,step:1,dtype:"float32"}}),U=Fv({inputs:{x:z},backend:t,attrs:{reps:[P/O]}});return p.push(z),p.push(U),g(B,k,U,$,R)},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 S=w.getUndoAxesPermutation(c);C=bt({inputs:{x:C},backend:t,attrs:{perm:S}})}return p.forEach(S=>t.disposeIntermediateTensorInfo(S)),C}var CP={kernelName:Qi,backendName:"webgl",kernelFunc:Ire};var vre=[rA,nA,sA,aA,uA,pA,cA,lA,fA,hA,gA,xA,yA,bA,CA,wA,SA,IA,vA,kA,NA,_A,EA,$A,RA,PA,MA,LA,KD,zA,WA,UA,GA,HA,KA,qA,jA,XA,YA,QA,eF,tF,rF,oF,nF,sF,aF,iF,uF,pF,cF,lF,mF,dF,fF,hF,xF,yF,bF,CF,SF,IF,vF,kF,NF,TF,_F,EF,$F,HD,RF,VA,DF,AF,FF,qD,PF,OF,MF,LF,BF,zF,VF,WF,UF,GF,KF,qF,jF,XF,YF,QF,JF,t3,r3,o3,n3,s3,c3,YD,l3,m3,d3,f3,DA,h3,y3,b3,C3,w3,jD,S3,I3,v3,k3,N3,AA,a3,T3,_3,E3,ZD,$3,R3,D3,A3,F3,P3,O3,M3,L3,B3,z3,V3,W3,U3,G3,H3,TA,p3,K3,q3,j3,X3,Y3,Q3,Z3,J3,tP,rP,nP,sP,aP,iP,uP,pP,cP,u3,eA,lP,mP,dP,fP,gP,xP,tA,yP,bP,CP,g3];for(let r of vre)ti(r);var we;(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"})(we||(we={}));var wu;(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"})(wu||(wu={}));var wP;function kre(r){wP=r.wasm.cwrap(So,null,["number","array","number","number","array","number","number","number","number","number","number","number","number"])}function Nre(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 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}.`);f=R.id}let h=i==null?0:t.dataIdMap.get(i.dataId).id,g=wu[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=Sr.assertAndGetBroadcastShape(n.shape.slice(0,-2),s.shape.slice(0,-2)),S=t.makeOutput([...C,x,b],n.dtype),k=t.dataIdMap.get(S.dataId).id,_=new Uint8Array(new Int32Array(n.shape).buffer),$=new Uint8Array(new Int32Array(s.shape).buffer);return wP(m,_,n.shape.length,d,$,s.shape.length,p,u,g,f,h,l||0,k),S}var SP={kernelName:So,backendName:"wasm",setupFunc:kre,kernelFunc:Nre};function he(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,we[i.dtype],c),u}return{kernelName:r,backendName:"wasm",setupFunc:o,kernelFunc:n}}var IP=he(Xs);var vP=he(Vo);var kP=he(Wo);function Ge(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=w.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,we[u.dtype],b),h}return{kernelName:r,backendName:"wasm",setupFunc:n,kernelFunc:s}}var Tre=!0,NP=Ge(uo,Tre);var TP;function _re(r){TP=r.wasm.cwrap(Uo,null,["array","number","number","number"])}function Ere(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 TP(s,n.length,we[o.dtype],a),o}var _P={kernelName:Uo,backendName:"wasm",setupFunc:_re,kernelFunc:Ere};function Np(r){let{inputs:{x:e},backend:t}=r;if(e.dtype==="string")return ar(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 EP={kernelName:Co,backendName:"wasm",kernelFunc:Np};var $P;function $re(r){$P=r.wasm.cwrap(co,null,["number","array","number","number","number","array","number"])}function ho(r){let{inputs:e,backend:t,attrs:o}=r,[n,s]=Dre(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 RP={kernelName:co,backendName:"wasm",kernelFunc:ho,setupFunc:$re};function Tr(r,e,t){let o=r.shape,n=r.shape.length,s=y.parseAxisParam(e,o),a=s,i=w.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 QP={kernelName:da,backendName:"wasm",kernelFunc:zt};var ZP;function Hre(r){ZP=r.wasm.cwrap(Zo,null,["number","array","number","number","array","number","number","number","number"])}function Kre(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=Sr.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 S=a?[g,c,m]:[g,m,c],k=i?[x,d,l]:[x,l,d],_=zt({inputs:{x:n},backend:t,attrs:{shape:S}}),$=zt({inputs:{x:s},backend:t,attrs:{shape:k}}),R=t.dataIdMap.get(_.dataId).id,D=t.dataIdMap.get($.dataId).id,P=a?_.shape[2]:_.shape[1],O=i?$.shape[1]:$.shape[2],M=Math.max(g,x),L=t.makeOutput([M,P,O],_.dtype),B=t.dataIdMap.get(L.dataId).id,z=new Uint8Array(new Int32Array(_.shape).buffer),U=new Uint8Array(new Int32Array($.shape).buffer);return ZP(R,z,_.shape.length,D,U,$.shape.length,a,i,B),t.disposeData(_.dataId),t.disposeData($.dataId),L.shape=C,L}var JP={kernelName:Zo,backendName:"wasm",setupFunc:Hre,kernelFunc:Kre};function Po(r){let{inputs:{x:e},attrs:{begin:t,size:o},backend:n}=r,[s,a]=pt.parseSliceParams(e,t,o),i=pt.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=pt.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=pp(p,s,a,e.shape,e.dtype);return l.stringBytes=f,u}let m=n.typedArrayFromHeap(u),d=e.shape.length;if(d===2)qre(p,c[0],m,s,a);else if(d===3)jre(p,c[0],c[1],m,s,a);else if(d===4)Xre(p,c[0],c[1],c[2],m,s,a);else{let f=pp(p,s,a,e.shape,e.dtype);m.set(f)}return u}function qre(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=w.getReshaped(n.shape,s,i),u=w.getPermuted(p.length,s.length),c=w.getReshapedPermuted(n.shape,s,i),l=w.getSliceBeginCoords(a,s.length),m=w.getSliceSize(c,a,s.length),d=zt({inputs:{x:n},backend:t,attrs:{shape:p}}),f=ho({inputs:{x:d},backend:t,attrs:{perm:u}}),h=zt({inputs:{x:f},backend:t,attrs:{shape:c}}),g=Po({inputs:{x:h},backend:t,attrs:{begin:l,size:m}});return t.disposeData(d.dataId),t.disposeData(f.dataId),t.disposeData(h.dataId),g}var tO={kernelName:Js,backendName:"wasm",kernelFunc:Yre};var rO;function Qre(r){rO=r.wasm.cwrap(Jo,null,["number","number","boolean","number","number","number"])}function Zre(r){let{backend:e,inputs:t,attrs:o}=r,{x:n,weights:s}=t,{size:a}=o,i=s.shape.reduce((l,m)=>l*m,1)!==0,p=n.shape.length===1?[a]:[n.shape[0],a],u=e.makeOutput(p,s.dtype);function c(l){return e.dataIdMap.get(l.dataId).id}return rO(c(n),a,i,c(s),we[s.dtype],c(u)),u}var oO={kernelName:Jo,backendName:"wasm",setupFunc:Qre,kernelFunc:Zre};var Jre=!0,nO=Ge(qa,Jre);function eoe(r){let{inputs:e,backend:t}=r,{s0:o,s1:n}=e,s=t.typedArrayFromHeap(o),a=t.typedArrayFromHeap(n),i=w.assertAndGetBroadcastShape(Array.from(s),Array.from(a));return t.makeOutput([i.length],"int32",void 0,new Int32Array(i))}var sO={kernelName:ea,backendName:"wasm",kernelFunc:eoe};function Mr(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 aO={kernelName:yo,backendName:"wasm",kernelFunc:Mr};var iO=he(en);var uO;function toe(r){uO=r.wasm.cwrap(bo,null,["number","number","number","number"])}function roe(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 uO(i,s,a,u),p}var pO={kernelName:bo,backendName:"wasm",setupFunc:toe,kernelFunc:roe};function Pv(r){let{inputs:e,backend:t}=r,o=y.parseAxisParam(r.attrs.axis,e[0].shape)[0],n=e.map(d=>d.shape);w.assertParamsConsistent(n,o);let s=w.computeOutShape(e.map(d=>d.shape),o),a=e.filter(d=>y.sizeFromShape(d.shape)>0);if(a.length===1)return Np({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 zt({inputs:{x:C},backend:t,attrs:{shape:k}})}),f=d.map(C=>({vals:t.readSync(C.dataId),shape:C.shape}));s=w.computeOutShape(d.map(C=>C.shape),1);let h=d[0].shape[0]===1,g=ap(f,s,e[0].dtype,h),x=w.computeOutShape(a.map(C=>C.shape),o);i.shape=x;let b=t.dataIdMap.get(i.dataId);return b.stringBytes=w.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=w.getAxesPermutation([s],p),c=n;u!==null&&(c=ho({inputs:{x:n},attrs:{perm:u},backend:t}));let l=w.getInnerMostAxes(1,p)[0];w.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;kO(f,a?1:0,i?1:0,d,h,we[n.dtype]);let g=m;if(u!==null){let x=w.getUndoAxesPermutation(u);g=ho({inputs:{x:m},attrs:{perm:x},backend:t}),t.disposeData(c.dataId),t.disposeData(m.dataId)}return g}var NO={kernelName:un,backendName:"wasm",setupFunc:hoe,kernelFunc:goe};var TO;function xoe(r){TO=r.wasm.cwrap(pn,null,["number","number","number","number","number","number"])}function yoe(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=w.getAxesPermutation([s],p),c=n;u!==null&&(c=ho({inputs:{x:n},attrs:{perm:u},backend:t}));let l=w.getInnerMostAxes(1,p)[0];w.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;TO(f,a?1:0,i?1:0,d,h,we[n.dtype]);let g=m;if(u!==null){let x=w.getUndoAxesPermutation(u);g=ho({inputs:{x:m},attrs:{perm:x},backend:t}),t.disposeData(c.dataId),t.disposeData(m.dataId)}return g}var _O={kernelName:pn,backendName:"wasm",setupFunc:xoe,kernelFunc:yoe};var EO;function boe(r){EO=r.wasm.cwrap("DenseBincount",null,["number","array","number","number","boolean","number","number","boolean","number"])}function Coe(r){let{backend:e,inputs:t,attrs:o}=r,{x:n,weights:s}=t,{size:a,binaryOutput:i}=o,p=s.shape.reduce((m,d)=>m*d,1)!==0,u=n.shape.length===1?[a]:[n.shape[0],a],c=e.makeOutput(u,s.dtype);function l(m){return e.dataIdMap.get(m.dataId).id}return EO(l(n),new Uint8Array(new Int32Array(n.shape).buffer),n.shape.length,a,p,l(s),we[s.dtype],i,l(c)),c}var $O={kernelName:ra,backendName:"wasm",setupFunc:boe,kernelFunc:Coe};var RO;function woe(r){RO=r.wasm.cwrap(ln,null,["number","number","number","array","number","array","array","number","number"])}function Soe(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),S=new Uint8Array(new Int32Array(y.computeStrides(f)).buffer),k=e.dataIdMap.get(h.dataId).id;return RO(x,s,a==="NHWC"?1:0,b,n.shape.length-1,C,S,f.length,k),h}var DO={kernelName:ln,backendName:"wasm",setupFunc:woe,kernelFunc:Soe};var AO;function Ioe(r){AO=r.wasm.cwrap(mn,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function voe(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=w.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,S=d.dilationHeight,k=d.dilationWidth,_=d.strideHeight,$=d.strideWidth,R=d.inChannels,D=d.outChannels,P=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 O=o.makeOutput(d.outShape,"float32"),M=o.dataIdMap.get(O.dataId).id;return AO(a,n.shape[0],n.shape[1],n.shape[2],i,f,h,g,x,b,C,P,S,k,_,$,R,D,M),O}var FO={kernelName:mn,backendName:"wasm",setupFunc:Ioe,kernelFunc:voe};var PO;function koe(r){PO=r.wasm.cwrap("Diag",null,["number","number","number","number"])}function Noe(r){let{inputs:e,backend:t}=r,{x:o}=e,n=y.sizeFromShape(o.shape),s=t.makeOutput([...o.shape,...o.shape],o.dtype);return PO(t.dataIdMap.get(o.dataId).id,we[o.dtype],n,t.dataIdMap.get(s.dataId).id),s}var OO={kernelName:oa,backendName:"wasm",setupFunc:koe,kernelFunc:Noe};var MO;function Toe(r){MO=r.wasm.cwrap(dn,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function _oe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s}=e,{strides:a,pad:i,dilations:p}=o;if(n.dtype!==s.dtype)throw new Error(`Dilation2D error: x must have the same dtype as filter. Got ${n.dtype} and ${s.dtype}`);let u=w.computeDilation2DInfo(n.shape,s.shape,a,i,"NHWC",p),c=t.makeOutput(u.outShape,n.dtype);return MO(t.dataIdMap.get(n.dataId).id,t.dataIdMap.get(s.dataId).id,t.dataIdMap.get(c.dataId).id,we[n.dtype],u.batchSize,u.inChannels,u.inHeight,u.inWidth,u.outHeight,u.outWidth,u.strideHeight,u.strideWidth,u.dilationHeight,u.dilationWidth,u.filterHeight,u.filterWidth,u.padInfo.top,u.padInfo.left),c}var LO={kernelName:dn,backendName:"wasm",setupFunc:Toe,kernelFunc:_oe};var BO;function Eoe(r){BO=r.wasm.cwrap(Li,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function $oe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s,dy:a}=e,{strides:i,pad:p,dilations:u}=o;if(n.dtype!==s.dtype||n.dtype!==a.dtype)throw new Error(`Dilation2DBackpropFilter error: x must have the same dtype as filter and dy. Got ${n.dtype}, ${s.dtype}, and ${a.dtype}`);let c=w.computeDilation2DInfo(n.shape,s.shape,i,p,"NHWC",u),l=t.makeOutput(s.shape,s.dtype);return BO(t.dataIdMap.get(n.dataId).id,t.dataIdMap.get(s.dataId).id,t.dataIdMap.get(a.dataId).id,t.dataIdMap.get(l.dataId).id,we[n.dtype],c.batchSize,c.inChannels,c.inHeight,c.inWidth,c.outHeight,c.outWidth,c.strideHeight,c.strideWidth,c.dilationHeight,c.dilationWidth,c.filterHeight,c.filterWidth,c.padInfo.top,c.padInfo.left),l}var zO={kernelName:Li,backendName:"wasm",setupFunc:Eoe,kernelFunc:$oe};var VO;function Roe(r){VO=r.wasm.cwrap(Mi,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function Doe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s,dy:a}=e,{strides:i,pad:p,dilations:u}=o;if(n.dtype!==s.dtype||n.dtype!==a.dtype)throw new Error(`Dilation2DBackpropInput error: x must have the same dtype as filter and dy. Got ${n.dtype}, ${s.dtype}, and ${a.dtype}`);let c=w.computeDilation2DInfo(n.shape,s.shape,i,p,"NHWC",u),l=t.makeOutput(n.shape,n.dtype);return VO(t.dataIdMap.get(n.dataId).id,t.dataIdMap.get(s.dataId).id,t.dataIdMap.get(a.dataId).id,t.dataIdMap.get(l.dataId).id,we[n.dtype],c.batchSize,c.inChannels,c.inHeight,c.inWidth,c.outHeight,c.outWidth,c.strideHeight,c.strideWidth,c.dilationHeight,c.dilationWidth,c.filterHeight,c.filterWidth,c.padInfo.top,c.padInfo.left),l}var WO={kernelName:Mi,backendName:"wasm",setupFunc:Roe,kernelFunc:Doe};var UO=he(hn);var GO;function Aoe(r){GO=r.wasm.cwrap(Xa,null,["number","number","number"])}function Foe(r){let{inputs:e,backend:t}=r,{dy:o,y:n}=e,s=t.makeOutput(n.shape,"float32"),a=i=>t.dataIdMap.get(i.dataId).id;return GO(a(n),a(o),a(s)),s}var HO={kernelName:Xa,backendName:"wasm",setupFunc:Aoe,kernelFunc:Foe};var Poe=!1,KO=Ge(xn,Poe,"bool");var qO=he(gn);var jO=he(yn,"float32");function Lg(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),zt({inputs:{x:n},backend:o,attrs:{shape:i}})}var XO={kernelName:na,backendName:"wasm",kernelFunc:Lg};var YO=he(bn,"float32");function Mv(r){let{attrs:{shape:e,value:t},backend:o}=r,{attrs:{dtype:n}}=r;n=n||y.inferDtype(t);let s=o.makeOutput(e,n);return o.typedArrayFromHeap(s).fill(t),s}var QO={kernelName:sa,backendName:"wasm",kernelFunc:Mv};var ZO;function Ooe(r){ZO=r.wasm.cwrap(Cn,null,["number","number","number","number","number","number"])}function Moe(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 ZO(s,i,p,u,c,a),n}var JO={kernelName:Cn,backendName:"wasm",kernelFunc:Moe,setupFunc:Ooe};var eM=he(wn);var Loe=!1,tM=Ge(Sn,Loe);var rM;function Boe(r){rM=r.wasm.cwrap(In,null,["number","number","number","number","number","number","number"])}function zoe(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 rM(c,l,m,d,f,n,g),h}var oM={kernelName:In,backendName:"wasm",setupFunc:Boe,kernelFunc:zoe};var nM;function Voe(r){nM=r.wasm.cwrap(Io,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 Woe(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=w.computeConv2DInfo(n.shape,s.shape,p,c,u,m),g=wu[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,S=0;if(a!=null){let ee=o.dataIdMap.get(a.dataId);if(ee.shape.length!==1)throw new Error(`FusedConv2D only supports rank-1 bias but got rank ${ee.shape.length}.`);if(ee.shape[0]!==C)throw new Error(`FusedConv2D bias shape (${ee.shape}) does not match the number of output channels (${C})`);S=ee.id}let k=h.filterHeight,_=h.filterWidth,$=h.padInfo.top,R=h.padInfo.right,D=h.padInfo.bottom,P=h.padInfo.left,O=h.dilationHeight,M=h.dilationWidth,L=h.strideHeight,B=h.strideWidth,z=h.inChannels,U=h.padInfo.type==="SAME"?1:0,j=h.batchSize,q=h.inHeight,Y=h.inWidth;if(l!=="NHWC")throw new Error(`wasm backend FusedConv2D does not support dataFormat:'${l}'. Please use 'NHWC'.`);let J=o.makeOutput(h.outShape,"float32"),re=o.dataIdMap.get(J.dataId).id,ne=i==null?0:o.dataIdMap.get(i.dataId).id;return nM(x,j,q,Y,b,k,_,S,$,R,D,P,U,O,M,L,B,z,C,g,ne,f||0,re),J}var sM={kernelName:Io,backendName:"wasm",setupFunc:Voe,kernelFunc:Woe};var aM;function Uoe(r){aM=r.wasm.cwrap(vo,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 Goe(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=w.computeConv2DInfo(n.shape,s.shape,p,c,u,m,!0),g=wu[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,S=0;if(a!=null){let ee=o.dataIdMap.get(a.dataId);if(ee.shape.length!==1)throw new Error(`FusedDepthwiseConv2D only supports rank-1 bias but got rank ${ee.shape.length}.`);if(ee.shape[0]!==C)throw new Error(`FusedDepthwiseConv2D bias shape (${ee.shape}) does not match the number of output channels (${C})`);S=ee.id}let k=h.filterHeight,_=h.filterWidth,$=h.padInfo.top,R=h.padInfo.right,D=h.padInfo.bottom,P=h.padInfo.left,O=h.dilationHeight,M=h.dilationWidth,L=h.strideHeight,B=h.strideWidth,z=h.inChannels,U=h.padInfo.type==="SAME"?1:0,j=h.batchSize,q=h.inHeight,Y=h.inWidth;if(l!=="NHWC")throw new Error(`wasm backend FusedDepthwiseConv2D does not support dataFormat:'${l}'. Please use 'NHWC'.`);let J=o.makeOutput(h.outShape,"float32"),re=o.dataIdMap.get(J.dataId).id,ne=i==null?0:o.dataIdMap.get(i.dataId).id;return aM(x,j,q,Y,b,k,_,S,$,R,D,P,U,O,M,L,B,z,C,g,ne,f||0,re),J}var iM={kernelName:vo,backendName:"wasm",setupFunc:Uoe,kernelFunc:Goe};var uM;function Hoe(r){uM=r.wasm.cwrap(vn,null,["number","number","number","number","number","number","array","number"])}function Koe(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],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 uM(d,we[o.dtype],h,a,l,i,g,x),u}var pM={kernelName:vn,backendName:"wasm",setupFunc:Hoe,kernelFunc:Koe};var cM;function qoe(r){cM=r.wasm.cwrap("Gather",null,["number","number","array","number","number","number","array","number"])}function joe(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 D=0;D=0,()=>`GatherV2: the index value ${P} is not in [0, ${c-1}]`)}let l=w.segment_util.collectGatherOpShapeInfo(n,s,p,i),m=zt({inputs:{x:n},attrs:{shape:[l.batchSize,l.outerSize,l.dimSize,l.sliceSize]},backend:e}),d=y.sizeFromShape(s.shape),f=zt({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),R=new Uint8Array(new Int32Array(y.computeStrides(h)).buffer);return cM(C,we[n.dtype],$,x,k,l.batchSize,R,_),e.disposeData(m.dataId),e.disposeData(f.dataId),g.shape=l.outputShape,g}var lM={kernelName:aa,backendName:"wasm",setupFunc:qoe,kernelFunc:joe};var Xoe=!1,mM=Ge(kn,Xoe,"bool");var Yoe=!1,dM=Ge(Nn,Yoe,"bool");var fM=he(Tn,"bool");var hM=he(_n,"bool");var gM=he(En,"bool");var xM;function Qoe(r){xM=r.wasm.cwrap($n,null,["number","number","number","number"])}function Zoe(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;xM(n,we[e.dtype],t,a)}return s}var yM={kernelName:$n,backendName:"wasm",setupFunc:Qoe,kernelFunc:Zoe};var Joe=!1,bM=Ge(Rn,Joe,"bool");var ene=!1,CM=Ge(Dn,ene,"bool");var wM;function tne(r){wM=r.wasm.cwrap(An,null,["number","number","number","number"])}function rne(r){let{attrs:e,backend:t}=r,{start:o,stop:n,num:s}=e,a=Math.floor(s),i=t.makeOutput([a],"float32");return wM(t.dataIdMap.get(i.dataId).id,o,n,a),i}var SM={kernelName:An,backendName:"wasm",setupFunc:tne,kernelFunc:rne};var IM=he(Fn);var vM=he(Pn);var one=!1,kM=Ge(On,one,"bool");var NM=he(Mn);var nne=!1,TM=Ge(Ln,nne,"bool");var sne=!1,_M=Ge(R0,sne,"bool");var EM;function ane(r){EM=r.wasm.cwrap(Bn,null,["number","number","number","number","number","number","number"])}function ine(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{depthRadius:s,bias:a,alpha:i,beta:p}=o;if(n.dtype!=="float32")throw new Error("LRN error: x must have dtype float32");let u=t.makeOutput(n.shape,n.dtype);return EM(t.dataIdMap.get(n.dataId).id,t.dataIdMap.get(u.dataId).id,n.shape[3],s,a,i,p),u}var $M={kernelName:Bn,backendName:"wasm",setupFunc:ane,kernelFunc:ine};var RM;function une(r){RM=r.wasm.cwrap(Ya,null,["number","number","number","number","number","number","number","number","number"])}function pne(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;if(n.dtype!=="float32"||s.dtype!=="float32"||a.dtype!=="float32")throw new Error("LRNGrad error: x, y, and dy must have dtype float32");let l=t.makeOutput(n.shape,n.dtype);return RM(t.dataIdMap.get(n.dataId).id,t.dataIdMap.get(s.dataId).id,t.dataIdMap.get(a.dataId).id,t.dataIdMap.get(l.dataId).id,a.shape[3],i,p,u,c),l}var DM={kernelName:Ya,backendName:"wasm",setupFunc:une,kernelFunc:pne};var AM;function cne(r){AM=r.wasm.cwrap(zn,null,["number","number","number","number"])}function lne(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}=Tr(a,n,e);if(d){let C=e.dataIdMap.get(c.dataId).id;u=c,p=C}let f=u.shape.length;w.assertAxesAreInnerMostDims("max",l,f);let[h,g]=w.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;AM(p,we[a.dtype],x,C)}if(d&&e.disposeData(c.dataId),s){let C=w.expandShapeToKeepDim(b.shape,m);b.shape=C}return b}var FM={kernelName:zn,backendName:"wasm",setupFunc:cne,kernelFunc:lne};var mne=!1,PM=Ge(Vn,mne);var OM;function dne(r){OM=r.wasm.cwrap(Wn,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function fne(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=w.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,S=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"),R=o.dataIdMap.get($.dataId).id;return OM(s,n.shape[0],n.shape[1],n.shape[2],l,m,d,f,h,g,x,b,C,S,k,_,R),$}var MM={kernelName:Wn,backendName:"wasm",setupFunc:dne,kernelFunc:fne};var LM;function hne(r){LM=r.wasm.cwrap("MaxPool3D",null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function gne(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{filterSize:s,strides:a,pad:i,dimRoundingMode:p,dataFormat:u}=o,c=w.computePool3DInfo(n.shape,s,a,1,i,p,u),l=t.makeOutput(c.outShape,n.dtype);return LM(t.dataIdMap.get(n.dataId).id,t.dataIdMap.get(l.dataId).id,c.batchSize,c.inChannels,c.inDepth,c.inHeight,c.inWidth,c.outDepth,c.outHeight,c.outWidth,c.strideDepth,c.strideHeight,c.strideWidth,c.dilationDepth,c.dilationHeight,c.dilationWidth,c.effectiveFilterDepth,c.effectiveFilterHeight,c.effectiveFilterWidth,c.padInfo.front,c.padInfo.top,c.padInfo.left),l}var BM={kernelName:ia,backendName:"wasm",setupFunc:hne,kernelFunc:gne};var zM;function xne(r){zM=r.wasm.cwrap("MaxPool3DGrad",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 yne(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s}=e,{filterSize:a,strides:i,pad:p,dimRoundingMode:u}=o,c=w.computePool3DInfo(s.shape,a,i,1,p,u),l=t.makeOutput(s.shape,s.dtype);return zM(t.dataIdMap.get(s.dataId).id,t.dataIdMap.get(n.dataId).id,t.dataIdMap.get(l.dataId).id,c.batchSize,c.inChannels,c.inDepth,c.inHeight,c.inWidth,c.outDepth,c.outHeight,c.outWidth,c.strideDepth,c.strideHeight,c.strideWidth,c.dilationDepth,c.dilationHeight,c.dilationWidth,c.effectiveFilterDepth,c.effectiveFilterHeight,c.effectiveFilterWidth,c.padInfo.front,c.padInfo.top,c.padInfo.left),l}var VM={kernelName:Gi,backendName:"wasm",setupFunc:xne,kernelFunc:yne};var WM;function bne(r){WM=r.wasm.cwrap("MaxPoolGrad",null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function Cne(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s}=e,{filterSize:a,strides:i,pad:p,dimRoundingMode:u}=o,c=w.computePool2DInfo(s.shape,a,i,1,p,u),l=t.makeOutput(s.shape,s.dtype);return WM(t.dataIdMap.get(s.dataId).id,t.dataIdMap.get(n.dataId).id,t.dataIdMap.get(l.dataId).id,c.batchSize,c.inChannels,c.inHeight,c.inWidth,c.outHeight,c.outWidth,c.strideHeight,c.strideWidth,c.dilationHeight,c.dilationWidth,c.effectiveFilterHeight,c.effectiveFilterWidth,c.padInfo.top,c.padInfo.left),l}var UM={kernelName:Ui,backendName:"wasm",setupFunc:bne,kernelFunc:Cne};var GM;function wne(r){GM=r.wasm.cwrap("MaxPoolWithArgmax",null,["number","number","number","number","boolean","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function Sne(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{filterSize:s,strides:a,pad:i,includeBatchInIndex:p}=o;y.assert(n.shape.length===4,()=>`Error in maxPool: input must be rank 4 but got rank ${n.shape.length}.`);let u=[1,1];y.assert(w.eitherStridesOrDilationsAreOne(a,u),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${u}'`);let c=w.computePool2DInfo(n.shape,s,a,[1,1],i),l=t.makeOutput(c.outShape,n.dtype),m=t.makeOutput(c.outShape,"int32");return GM(t.dataIdMap.get(n.dataId).id,t.dataIdMap.get(l.dataId).id,t.dataIdMap.get(m.dataId).id,we[n.dtype],p,c.batchSize,c.inChannels,c.inHeight,c.inWidth,c.outHeight,c.outWidth,c.strideHeight,c.strideWidth,c.dilationHeight,c.dilationWidth,c.effectiveFilterHeight,c.effectiveFilterWidth,c.padInfo.top,c.padInfo.left),[l,m]}var HM={kernelName:ua,backendName:"wasm",setupFunc:wne,kernelFunc:Sne};var KM;function Ine(r){KM=r.wasm.cwrap(Un,null,["number, number, number"])}function vne(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}=Tr(a,n,e),f=l;if(d){let S=e.dataIdMap.get(c.dataId).id;S!==i&&(u=c,p=S,f=w.getInnerMostAxes(f.length,u.shape.length))}w.assertAxesAreInnerMostDims("mean",f,u.shape.length);let[h,g]=w.computeOutAndReduceShapes(u.shape,f),x=y.sizeFromShape(g),b=u;u.dtype!=="float32"&&(b=Mr({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 S=e.dataIdMap.get(C.dataId).id;KM(p,x,S)}if(d&&e.disposeData(c.dataId),s){let S=w.expandShapeToKeepDim(C.shape,m);C.shape=S}return u.dtype!=="float32"&&e.disposeData(b.dataId),C}var qM={kernelName:Un,backendName:"wasm",setupFunc:Ine,kernelFunc:vne};var jM;function kne(r){jM=r.wasm.cwrap(Gn,null,["number","number","number","number"])}function Nne(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}=Tr(a,n,e);if(d){let C=e.dataIdMap.get(c.dataId).id;C!==i&&(u=c,p=C)}let f=u.shape.length;w.assertAxesAreInnerMostDims("min",l,f);let[h,g]=w.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;jM(p,we[a.dtype],x,C)}if(d&&e.disposeData(c.dataId),s){let C=w.expandShapeToKeepDim(b.shape,m);b.shape=C}return b}var XM={kernelName:Gn,backendName:"wasm",setupFunc:kne,kernelFunc:Nne};var Tne=!1,YM=Ge(Hn,Tne);var Lv;(function(r){r[r.reflect=0]="reflect",r[r.symmetric=1]="symmetric"})(Lv||(Lv={}));var QM;function _ne(r){QM=r.wasm.cwrap(Kn,null,["number","array","number","number","array","array","number","number"])}function Ene(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 QM(a,u,e.shape.length,we[e.dtype],m,d,Lv[n],p),i}var ZM={kernelName:Kn,backendName:"wasm",kernelFunc:Ene,setupFunc:_ne};var JM;function $ne(r){JM=r.wasm.cwrap(Is,null,["number","number","number","number"])}function Bv(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||JM(n,a,i,p),s}var eL={kernelName:Is,backendName:"wasm",setupFunc:$ne,kernelFunc:Bv};var tL;function Rne(r){tL=r.wasm.cwrap(jn,null,["number","number","number","number","number","number"])}function Dne(r){let{inputs:e,backend:t,attrs:o}=r,{logits:n}=e,{numSamples:s,seed:a,normalized:i}=o;if(n.dtype!=="float32")throw new Error(`Tensor logits must have dtype float32, got ${n.dtype}`);let p=i?n:Bv({inputs:{logits:n},backend:t,attrs:{dim:n.shape.length-1}}),[u,c]=p.shape,l=t.makeOutput([u,s],"int32");return tL(t.dataIdMap.get(p.dataId).id,u,c,s,a,t.dataIdMap.get(l.dataId).id),i||t.disposeData(p.dataId),l}var rL={kernelName:jn,backendName:"wasm",setupFunc:Rne,kernelFunc:Dne};var oL=Ge(qn,!0);var Ane=!0,nL=Ge(Xn,Ane);var sL=he(pa);function qc(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 aL;function Fne(r){aL=r.wasm.cwrap(Qn,"number",["number","number","number","number","number"])}function Pne(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=aL(u,c,s,n,a),{pSelectedIndices:m,selectedSize:d,pSelectedScores:f,pValidOutputs:h}=qc(e,l);return e.wasm._free(f),e.wasm._free(h),e.makeOutput([d],"int32",m)}var iL={kernelName:Qn,backendName:"wasm",setupFunc:Fne,kernelFunc:Pne};var uL;function One(r){uL=r.wasm.cwrap(Qa,"number",["number","number","number","number","number","bool"])}function Mne(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=uL(c,l,s,n,a,i),{pSelectedIndices:d,selectedSize:f,pSelectedScores:h,pValidOutputs:g}=qc(e,m);e.wasm._free(h);let x=e.makeOutput([f],"int32",d),b=e.makeOutput([],"int32",g);return[x,b]}var pL={kernelName:Qa,backendName:"wasm",setupFunc:One,kernelFunc:Mne};var cL;function Lne(r){cL=r.wasm.cwrap(Zn,"number",["number","number","number","number","number","number"])}function Bne(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=cL(c,l,s,n,a,i),{pSelectedIndices:d,selectedSize:f,pSelectedScores:h,pValidOutputs:g}=qc(e,m);e.wasm._free(g);let x=e.makeOutput([f],"int32",d),b=e.makeOutput([f],"float32",h);return[x,b]}var lL={kernelName:Zn,backendName:"wasm",setupFunc:Lne,kernelFunc:Bne};var zne=!1,mL=Ge(Yn,zne,"bool");var dL;function Vne(r){dL=r.wasm.cwrap(Jn,null,["number","number","number","number","number"])}function Wne(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 dL(m,a,i,p,c),u}var fL={kernelName:Jn,backendName:"wasm",setupFunc:Vne,kernelFunc:Wne};function Une(r){let{inputs:{x:e},backend:t}=r,o=t.makeOutput(e.shape,e.dtype);return t.typedArrayFromHeap(o).fill(1),o}var hL={kernelName:ca,backendName:"wasm",kernelFunc:Une};function Gne(r){let{inputs:e,backend:t,attrs:o}=r,{axis:n}=o;if(e.length===1)return Lg({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=Lg({inputs:{input:c},backend:t,attrs:{dim:n}});return i.push(l),l}),u=Pv({inputs:p,backend:t,attrs:{axis:n}});return i.forEach(c=>t.disposeData(c.dataId)),u}var gL={kernelName:la,backendName:"wasm",kernelFunc:Gne};var xL;function Hne(r){xL=r.wasm.cwrap(es,null,["number","array","number","number","array","array","number","number"])}function Kne(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 Mv({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 xL(a,c,e.shape.length,we[e.dtype],d,f,n,u),i}var Bg={kernelName:es,backendName:"wasm",kernelFunc:Kne,setupFunc:Hne};var qne=!1,yL=Ge(ts,qne);var bL;function jne(r){bL=r.wasm.cwrap(rs,null,["number","number","number"])}function Xne(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=Mr({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 bL(i,a,l),p.dtype!=="float32"&&t.disposeData(u.dataId),c}var CL={kernelName:rs,backendName:"wasm",setupFunc:jne,kernelFunc:Xne};var wL;function Yne(r){wL=r.wasm.cwrap(os,null,["number","number","number","number"])}function Qne(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}=Tr(a,n,e),f=l;if(d){let C=e.dataIdMap.get(c.dataId).id;C!==i&&(u=c,p=C,f=w.getInnerMostAxes(f.length,u.shape.length))}w.assertAxesAreInnerMostDims("prod",f,u.shape.length);let[h,g]=w.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;wL(p,x,we[b.dtype],C)}if(d&&e.disposeData(c.dataId),s){let C=w.expandShapeToKeepDim(b.shape,m);b.shape=C}return b}var SL={kernelName:os,backendName:"wasm",setupFunc:Yne,kernelFunc:Qne};var Zne=r=>{let{backend:e,attrs:t}=r,{start:o,stop:n,step:s,dtype:a}=t,i=up(o,n,s,a),p=e.makeOutput([i.length],a);return e.typedArrayFromHeap(p).set(i),p},IL={kernelName:ma,backendName:"wasm",kernelFunc:Zne};var Jne=!0,vL=Ge(fn,Jne);var kL=he(ns);var NL=he(ss);var TL=he(us);var _L;function ese(r){_L=r.wasm.cwrap(is,null,["number","number","number","number","number","number","number","number","number","number"])}function tse(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=Mr({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 _L(x,c,l,m,d,p,u,s?1:0,a?1:0,C),g!=null&&e.disposeData(g.dataId),b}var EL={kernelName:is,backendName:"wasm",setupFunc:ese,kernelFunc:tse};var $L;function rse(r){$L=r.wasm.cwrap(Ja,null,["number","number","number","array","array","boolean"])}function ose(r){let{inputs:e,backend:t,attrs:o}=r,{images:n,dy:s}=e,{alignCorners:a}=o,i=t.makeOutput(n.shape,"float32"),p=t.dataIdMap.get(n.dataId),u;return p.dtype!=="float32"&&(u=Mr({backend:t,inputs:{x:n},attrs:{dtype:"float32"}}),p=t.dataIdMap.get(u.dataId)),$L(t.dataIdMap.get(n.dataId).id,t.dataIdMap.get(s.dataId).id,t.dataIdMap.get(i.dataId).id,new Uint8Array(new Int32Array(n.shape).buffer),new Uint8Array(new Int32Array(s.shape).buffer),a),u!=null&&t.disposeData(u.dataId),i}var RL={kernelName:Ja,backendName:"wasm",setupFunc:rse,kernelFunc:ose};var DL;function nse(r){DL=r.wasm.cwrap(as,null,["number","number","number","number","number","number","number","number","number","number"])}function sse(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=Mr({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 DL(b,c,l,m,d,p,u,s?1:0,a?1:0,C),x!=null&&e.disposeData(x.dataId),h}var AL={kernelName:as,backendName:"wasm",setupFunc:nse,kernelFunc:sse};var FL;function ase(r){FL=r.wasm.cwrap(Za,null,["number","number","number","array","array","boolean"])}function ise(r){let{inputs:e,backend:t,attrs:o}=r,{images:n,dy:s}=e,{alignCorners:a}=o,i=t.makeOutput(n.shape,"float32"),p=t.dataIdMap.get(n.dataId),u;return p.dtype!=="float32"&&(u=Mr({backend:t,inputs:{x:n},attrs:{dtype:"float32"}}),p=t.dataIdMap.get(u.dataId)),FL(t.dataIdMap.get(n.dataId).id,t.dataIdMap.get(s.dataId).id,t.dataIdMap.get(i.dataId).id,new Uint8Array(new Int32Array(n.shape).buffer),new Uint8Array(new Int32Array(s.shape).buffer),a),u!=null&&t.disposeData(u.dataId),i}var PL={kernelName:Za,backendName:"wasm",setupFunc:ase,kernelFunc:ise};var OL;function use(r){OL=r.wasm.cwrap(ps,null,["number","array","number","array","number","number"])}function pse(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 Np({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);OL(p,c,a.length,l,n.shape.length,u);let m=zt({inputs:{x:i},attrs:{shape:n.shape},backend:t});return t.disposeData(i.dataId),m}var ML={kernelName:ps,backendName:"wasm",kernelFunc:pse,setupFunc:use};var LL;function cse(r){LL=r.wasm.cwrap(Ds,null,["number","number","number","number","number","number","number","number","array","number","number"])}function lse(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]=w.getImageCenter(i,m,d),x=a===0,b=255,C=typeof a=="number"?[a,a,a,x?0:b]:[...a,b],S=new Uint8Array(new Int32Array(C).buffer);return LL(u,l,m,d,f,s,h,g,S,C.length,c),p}var BL={kernelName:Ds,backendName:"wasm",kernelFunc:lse,setupFunc:cse};var zL=he(cs);var VL=he(ls);var WL;function mse(r){WL=r.wasm.cwrap(ms,null,["number","number","number","number","number","number","array","number","number"])}function dse(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}=du.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 WL(f,g,we[s.dtype],p,u,c,x,m,b),i}var UL={kernelName:ms,backendName:"wasm",setupFunc:mse,kernelFunc:dse};var GL;function fse(r){GL=r.wasm.cwrap(fs,null,["number","number","number","number","number","number","bool","number"])}function hse(r){let{inputs:e,backend:t,attrs:o}=r,{sortedSequence:n,values:s}=e,{side:a}=o;if(n.dtype!==s.dtype)throw new Error(`SearchSorted error: sorted_sequence must have the same dtype as values. Got ${n.dtype} and ${s.dtype}`);let i=t.makeOutput(s.shape,"int32");function p(u){return t.dataIdMap.get(u.dataId).id}return GL(p(n),p(s),n.shape[0],n.shape[1],s.shape[1],we[n.dtype],a==="left",p(i)),i}var HL={kernelName:fs,backendName:"wasm",setupFunc:fse,kernelFunc:hse};var KL;function gse(r){KL=r.wasm.cwrap("SelectV2",null,["number","number","number","number","number"])}function xse(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 KL(a,i,p,d,c),u}var qL={kernelName:fa,backendName:"wasm",kernelFunc:xse,setupFunc:gse};var jL=he(hs);var XL;function yse(r){XL=r.wasm.cwrap(bs,null,["number","number"])}function bse(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||XL(o,s),n}var YL={kernelName:"Sigmoid",backendName:"wasm",setupFunc:yse,kernelFunc:bse};var QL=he(ys);var ZL=he(gs);var JL=he(xs);var eB=he(Cs);function Cse(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(w.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;aB(m,we[n.dtype],n.shape[0],d,f,g,b,e,0);let C=t.readSync(x.dataId),S;switch(C[0]){case 0:{S=w.getSparseSegmentReductionNegativeSegmentIdsErrorMessage();break}case 1:{S=w.getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage();break}case 2:S=w.getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage(C[1],C[2]);break;case 3:S=w.getSparseSegmentReductionIndicesOutOfRangeErrorMessage(C[1],C[2],C[3]);break;default:S=""}if(t.disposeData(x.dataId),S)throw t.disposeData(h.dataId),new Error(S);return h}function kse(r){return Vg(r,!0)}var iB={kernelName:ya,backendName:"wasm",setupFunc:zg,kernelFunc:kse};function Nse(r){return Vg(r,!1)}var uB={kernelName:ba,backendName:"wasm",setupFunc:zg,kernelFunc:Nse};var pB;function Tse(r){pB=r.wasm.cwrap(vs,null,["number","number","number","number","number","number","number","number","array","number","number"])}function _se(r){let{backend:e,inputs:t,attrs:o}=r,{sparseIndices:n,sparseValues:s,defaultValue:a}=t,{outputShape:i}=o,p=e.makeOutput(i,a.dtype);if(y.sizeFromShape(i)===0)return p;let{sliceRank:u,numUpdates:c,sliceSize:l,strides:m,outputSize:d}=w.calculateShapes(s,n,i),f=e.dataIdMap.get(n.dataId).id,h=e.dataIdMap.get(s.dataId).id,g=e.dataIdMap.get(a.dataId).id,x=new Uint8Array(new Int32Array(m).buffer),b=e.dataIdMap.get(p.dataId).id;return pB(f,h,s.shape.length,g,we[a.dtype],u,c,l,x,d,b),p}var cB={kernelName:vs,backendName:"wasm",setupFunc:Tse,kernelFunc:_se};function Ese(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=w.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=Po({inputs:{x:n},attrs:{begin:u,size:m},backend:o});return u[i]+=l,d})}var lB={kernelName:xa,backendName:"wasm",kernelFunc:Ese};var mB=he(ws);var dB=he(qi);var $se=!0,fB=Ge(ks,$se);var hB;function Rse(r){hB=r.wasm.cwrap(wo,null,["number","number","number","number"])}function Dse(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 hB(a,n,we[s.dtype],p),i}var gB={kernelName:wo,backendName:"wasm",setupFunc:Rse,kernelFunc:Dse};var xB;function Ase(r){xB=r.wasm.cwrap(Ns,null,["number","array","number","array","array","array","array","array","number","number"])}function Fse(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:S}=pt.sliceInfo(n.shape,s,a,i,p,u,c,l,m),k;if(h)k=zt({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 _=pt.computeOutShape(b,C,S),$=Po({inputs:{x:n},backend:e,attrs:{begin:b,size:_}});k=zt({inputs:{x:$},backend:e,attrs:{shape:f}}),e.disposeData($.dataId)}else{let _=e.makeOutput(d,"float32"),$=e.dataIdMap.get(n.dataId).id,R=new Uint8Array(new Int32Array(y.computeStrides(n.shape)).buffer),D=new Uint8Array(new Int32Array(b).buffer),P=new Uint8Array(new Int32Array(C).buffer),O=new Uint8Array(new Int32Array(S).buffer),M=new Uint8Array(new Int32Array(d).buffer),L=new Uint8Array(new Int32Array(y.computeStrides(d)).buffer),B=e.dataIdMap.get(_.dataId).id;xB($,R,n.shape.length,D,P,O,M,L,d.length,B),k=zt({inputs:{x:_},backend:e,attrs:{shape:f}}),e.disposeData(_.dataId)}return k}var yB={kernelName:Ns,backendName:"wasm",setupFunc:Ase,kernelFunc:Fse};function Pse(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]=cp(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 bB={kernelName:Ca,backendName:"wasm",kernelFunc:Pse};function Ose(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]=lp(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 CB={kernelName:ji,backendName:"wasm",kernelFunc:Ose};function Mse(r){let{backend:e,inputs:t,attrs:o}=r,{input:n}=t,{numBuckets:s}=o,a=e.readSync(n.dataId),i=mp(a,s),p=e.makeOutput(n.shape,"int32");return e.typedArrayFromHeap(p).set(i),p}var wB={kernelName:Xi,backendName:"wasm",kernelFunc:Mse};var Lse=!0,SB=Ge(Ts,Lse);var IB;function Bse(r){IB=r.wasm.cwrap(Ss,null,["number","number","number","number"])}function zse(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}=Tr(a,n,e),f=l;if(d){let C=e.dataIdMap.get(c.dataId).id;C!==i&&(u=c,p=C,f=w.getInnerMostAxes(f.length,u.shape.length))}w.assertAxesAreInnerMostDims("sum",f,u.shape.length);let[h,g]=w.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;IB(p,x,we[b.dtype],C)}if(d&&e.disposeData(c.dataId),s){let C=w.expandShapeToKeepDim(b.shape,m);b.shape=C}return b}var vB={kernelName:Ss,backendName:"wasm",setupFunc:Bse,kernelFunc:zse};var kB=he(_s);var NB=he(Es);var TB;function Vse(r){TB=r.wasm.cwrap(ds,null,["number","number","number","number","number","number","array","number","number","number"])}function Wse(r){let{backend:e,inputs:t,attrs:o}=r,{tensor:n,indices:s,updates:a}=t,{}=o,i=e.makeOutput(n.shape,n.dtype);if(y.sizeFromShape(n.shape)===0)return i;let{sliceRank:p,numUpdates:u,sliceSize:c,strides:l,outputSize:m}=du.calculateShapes(a,s,n.shape),f=e.dataIdMap.get(s.dataId).id,g=e.dataIdMap.get(a.dataId).id,b=e.dataIdMap.get(n.dataId).id,C=new Uint8Array(new Int32Array(l).buffer),S=e.dataIdMap.get(i.dataId).id;return TB(f,g,we[a.dtype],p,u,c,C,m,S,b),i}var _B={kernelName:ds,backendName:"wasm",setupFunc:Vse,kernelFunc:Wse};var EB;function Use(r){EB=r.wasm.cwrap(po,null,["number","array","number","array","number","number"])}function Gse(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 RB(a,i,o.shape.length,we[o.dtype],n,s,c,m),[u,l]},DB={kernelName:$s,backendName:"wasm",setupFunc:Hse,kernelFunc:Kse};var AB;function qse(r){AB=r.wasm.cwrap(Rs,null,["number","number","bool","number","number","number","number","number","number","array","number","array","number","number","number","number","number"])}function jse(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),S=e.dataIdMap.get(C.dataId).id,_=e.dataIdMap.get(n.dataId).id,R=e.dataIdMap.get(s.dataId).id,D=a==="nearest"?1:2,P;switch(i){case"constant":P=1;break;case"reflect":P=2;break;case"wrap":P=3;break;case"nearest":P=4;break;default:P=1;break}return AB(_,R,s.shape[0]>1,c,f,h,d,m,l,x,n.shape.length-1,b,g.length-1,D,P,p,S),C}var FB={kernelName:Rs,backendName:"wasm",setupFunc:qse,kernelFunc:jse};function Xse(r){let{inputs:e,attrs:t,backend:o}=r,{axis:n}=t,{x:s}=e,{outputValues:a,outputShape:i,indices:p}=dp(o.readSync(s.dataId),n,s.shape,s.dtype);return[o.makeOutput(i,s.dtype,void 0,a),o.makeOutput([p.length],"int32",void 0,p)]}var PB={kernelName:Yi,backendName:"wasm",kernelFunc:Xse};function Yse(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 OB={kernelName:wa,backendName:"wasm",kernelFunc:Yse};function Qse(r){let{inputs:{x:e},backend:t}=r,o=t.makeOutput(e.shape,e.dtype);return t.typedArrayFromHeap(o).fill(0),o}var MB={kernelName:Sa,backendName:"wasm",kernelFunc:Qse};var Zse=[SP,IP,vP,kP,NP,_P,AP,PP,OP,MP,LP,BP,zP,VP,WP,GP,YP,KP,jP,JP,tO,oO,nO,sO,aO,iO,pO,cO,mO,fO,gO,yO,CO,wO,SO,vO,NO,_O,$O,DO,FO,OO,LO,zO,WO,UO,HO,KO,qO,jO,XO,YO,QO,JO,eM,tM,oM,sM,iM,pM,lM,mM,dM,EP,fM,hM,gM,yM,bM,CM,SM,vM,IM,kM,NM,TM,_M,$M,DM,FM,PM,MM,BM,VM,UM,HM,qM,XM,YM,ZM,rL,oL,nL,sL,iL,pL,lL,mL,fL,hL,gL,Bg,yL,CL,SL,IL,vL,kL,NL,TL,QP,EL,RL,AL,PL,ML,BL,zL,VL,UL,HL,qL,jL,YL,QL,ZL,JL,eO,eL,eB,tB,oB,sB,iB,uB,cB,lB,mB,dB,fB,gB,yB,bB,CB,wB,SB,vB,kB,NB,_B,$B,DB,FB,RP,PB,OB,MB];for(let r of Zse)ti(r);var zv=A();zv.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}});zv.registerFlag("WASM_HAS_MULTITHREAD_SUPPORT",async()=>{if(zv.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 jv=zp(VB()),qB=zp(UB()),Xv=zp(GB());var HB=jv.default||jv,Jse=Xv.default||Xv,pm=class extends ao{constructor(e){super(),this.wasm=e,this.dataIdNextNumber=1,this.wasm.tfjs.initWithThreadsCount(XB),qv=this.wasm.tfjs.getThreadsCount(),this.dataIdMap=new Bo(this,ur())}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)>>>0;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 tae(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,n){let s;if(o==null)s=this.write(n!=null?n:null,e,t);else{let a=this.dataIdNextNumber++;s={id:a},this.dataIdMap.set(s,{id:a,memoryOffset:o,shape:e,dtype:t,refCount:1});let i=y.sizeFromShape(e);this.wasm.tfjs.registerTensor(a,i,o)}return{dataId:s,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 eae(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 KB(r,e,t){if(Gg!=null)return Gg;let o="tfjs-backend-wasm.wasm";return r&&e?o="tfjs-backend-wasm-threaded-simd.wasm":r&&(o="tfjs-backend-wasm-simd.wasm"),im!=null&&im[o]!=null?im[o]:t+o}async function jB(){let[r,e]=await Promise.all([A().getAsync("WASM_HAS_SIMD_SUPPORT"),A().getAsync("WASM_HAS_MULTITHREAD_SUPPORT")]);return new Promise((t,o)=>{let n={};n.locateFile=(i,p)=>{if(i.endsWith(".worker.js")){let u=qB.wasmWorkerContents.replace(/\n/g,"\\n"),c=new Blob([u],{type:"application/javascript"});return URL.createObjectURL(c)}return i.endsWith(".wasm")?KB(r,e,am!=null?am:p):p+i},Yv&&(n.instantiateWasm=eae(KB(r,e,am!=null?am:"")));let s=!1;n.onAbort=()=>{if(s||um)return;um=!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&&Gg==null?(n.mainScriptUrlOrBlob=new Blob(["var WasmBackendModuleThreadedSimd = "+HB.toString()],{type:"text/javascript"}),a=HB(n)):a=Jse(n),a.then(i=>{s=!0,um=!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 tae(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 rae=["tfjs-backend-wasm.wasm","tfjs-backend-wasm-simd.wasm","tfjs-backend-wasm-threaded-simd.wasm"],Gg=null,am=null,im={},um=!1,Yv=!1;function oae(r,e=!1){if(Tw("setWasmPath has been deprecated in favor of setWasmPaths and will be removed in a future release."),um)throw new Error("The WASM backend was already initialized. Make sure you call `setWasmPath()` before you call `tf.setBackend()` or `tf.ready()`");Gg=r,Yv=e}function nae(r,e=!1){if(um)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")am=r;else{im=r;let t=rae.filter(o=>im[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.`)}Yv=e}var XB=-1,qv=-1;function sae(r){XB=r}function aae(){if(qv===-1)throw new Error("WASM backend not initialized.");return qv}var iae="4.17.0";var uae=2;tu("wasm",async()=>{let{wasm:r}=await jB();return new pm(r)},uae);var go=A();go.registerFlag("WEBGPU_DEFERRED_SUBMIT_BATCH_SIZE",()=>15);go.registerFlag("WEBGPU_CPU_FORWARD",()=>!0);go.registerFlag("WEBGPU_MATMUL_PROGRAM_TYPE",()=>-1);go.registerFlag("WEBGPU_USE_NAIVE_CONV2D_TRANSPOSE",()=>!0);go.registerFlag("WEBGPU_USE_LOW_POWER_GPU",()=>!1);go.registerFlag("WEBGPU_CPU_HANDOFF_SIZE_THRESHOLD",()=>1e3);go.registerFlag("WEBGPU_USE_PROFILE_TOOL",()=>!1);go.registerFlag("WEBGPU_IMPORT_EXTERNAL_TEXTURE",()=>!0);go.registerFlag("WEBGPU_USE_NAIVE_CONV2D_DEBUG",()=>!1);go.registerFlag("WEBGPU_THRESHOLD_TO_INCREASE_WORKGROUPS_FOR_MATMUL",()=>-1);go.registerFlag("WEBGPU_CONV_SEPARATE_IM2COL_SHADER",()=>!1);go.registerFlag("WEBGPU_PRINT_SHADER",()=>"");go.registerFlag("WEBGPU_ENGINE_COMPILE_ONLY",()=>!1);var Hg=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 Kg=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}acquireBuffer(e,t,o=!1,n=!0){let s,a=YB(e,t);return n?(this.freeBuffers.has(a)||this.freeBuffers.set(a,[]),this.freeBuffers.get(a).length>0?(s=this.freeBuffers.get(a).pop(),this.numFreeBuffers--):(s=this.device.createBuffer({size:e,usage:t,mappedAtCreation:o}),this.numBytesAllocated+=e)):(s=this.device.createBuffer({size:e,usage:t,mappedAtCreation:o}),this.numBytesAllocated+=e),this.usedBuffers.has(a)||this.usedBuffers.set(a,[]),this.usedBuffers.get(a).push(s),this.numUsedBuffers++,this.numBytesUsed+=e,s}releaseBuffer(e,t=!0){if(this.freeBuffers.size===0)return;let o=e.size,n=e.usage,s=YB(o,n),a=this.usedBuffers.get(s),i=a.indexOf(e);if(i<0)throw new Error("Cannot find the buffer in buffer manager");a[i]=a[a.length-1],a.pop(),this.numUsedBuffers--,this.numBytesUsed-=o,t?(this.freeBuffers.get(s).push(e),this.numFreeBuffers++):(e.destroy(),this.numBytesAllocated-=o)}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 YB(r,e){return`${r}_${e}`}var qg=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=ZB(o),a=e*t*s,i=QB(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){if(this.freeTextures.size===0)return;let t=e.width,o=e.height,n=e.format,s=e.usage,a=QB(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=ZB(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 QB(r,e,t,o){return`${r}_${e}_${t}_${o}`}function ZB(r){if(r==="rgba8unorm")return 16;throw new Error(`${r} is not supported!`)}function JB(r,e){if(Math.max(...r)>5)throw new Error("Cannot symbolically compute strides for rank > 6 tensor.");let t=r.length,o="xyzwuv",n=r.map(a=>`${e}.${o[a]}`),s=new Array(t-1);s[t-2]=n[t-1];for(let a=t-3;a>=0;--a)s[a]=`(${s[a+1]} * ${n[a+1]})`;return s}var Qr=(r,e,t)=>t==="int32"?`atomicAdd(${r}, bitcast(${e}));`:` + ${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;nB(a,i,p,u,m,f,g);let x=e.readSync(h.dataId),b;switch(x[0]){case 0:{b=w.getSparseReshapeMultipleNegativeOneOutputDimErrorMessage(x[1],x[2]);break}case 1:{b=w.getSparseReshapeNegativeOutputDimErrorMessage(x[1],x[2]);break}case 2:b=w.getSparseReshapeEmptyTensorZeroOutputDimErrorMessage();break;case 3:{let C=Array.from(e.readSync(n.dataId)),S=Array.from(e.readSync(d.dataId));b=w.getSparseReshapeInputOutputMultipleErrorMessage(C,S);break}case 4:{let C=Array.from(e.readSync(n.dataId)),S=Array.from(e.readSync(d.dataId));b=w.getSparseReshapeInputOutputMismatchErrorMessage(C,S);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 sB={kernelName:ei,backendName:"wasm",setupFunc:Ise,kernelFunc:vse};var aB;function zg(r){aB=r.wasm.cwrap("SparseSegmentReduction",null,["number","number","number","number","number","number","number","number","number"])}function Vg(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(w.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;aB(m,we[n.dtype],n.shape[0],d,f,g,b,e,0);let C=t.readSync(x.dataId),S;switch(C[0]){case 0:{S=w.getSparseSegmentReductionNegativeSegmentIdsErrorMessage();break}case 1:{S=w.getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage();break}case 2:S=w.getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage(C[1],C[2]);break;case 3:S=w.getSparseSegmentReductionIndicesOutOfRangeErrorMessage(C[1],C[2],C[3]);break;default:S=""}if(t.disposeData(x.dataId),S)throw t.disposeData(h.dataId),new Error(S);return h}function kse(r){return Vg(r,!0)}var iB={kernelName:ya,backendName:"wasm",setupFunc:zg,kernelFunc:kse};function Nse(r){return Vg(r,!1)}var uB={kernelName:ba,backendName:"wasm",setupFunc:zg,kernelFunc:Nse};var pB;function Tse(r){pB=r.wasm.cwrap(vs,null,["number","number","number","number","number","number","number","number","array","number","number"])}function _se(r){let{backend:e,inputs:t,attrs:o}=r,{sparseIndices:n,sparseValues:s,defaultValue:a}=t,{outputShape:i}=o,p=e.makeOutput(i,a.dtype);if(y.sizeFromShape(i)===0)return p;let{sliceRank:u,numUpdates:c,sliceSize:l,strides:m,outputSize:d}=w.calculateShapes(s,n,i),f=e.dataIdMap.get(n.dataId).id,h=e.dataIdMap.get(s.dataId).id,g=e.dataIdMap.get(a.dataId).id,x=new Uint8Array(new Int32Array(m).buffer),b=e.dataIdMap.get(p.dataId).id;return pB(f,h,s.shape.length,g,we[a.dtype],u,c,l,x,d,b),p}var cB={kernelName:vs,backendName:"wasm",setupFunc:Tse,kernelFunc:_se};function Ese(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=w.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=Po({inputs:{x:n},attrs:{begin:u,size:m},backend:o});return u[i]+=l,d})}var lB={kernelName:xa,backendName:"wasm",kernelFunc:Ese};var mB=he(ws);var dB=he(qi);var $se=!0,fB=Ge(ks,$se);var hB;function Rse(r){hB=r.wasm.cwrap(wo,null,["number","number","number","number"])}function Dse(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 hB(a,n,we[s.dtype],p),i}var gB={kernelName:wo,backendName:"wasm",setupFunc:Rse,kernelFunc:Dse};var xB;function Ase(r){xB=r.wasm.cwrap(Ns,null,["number","array","number","array","array","array","array","array","number","number"])}function Fse(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:S}=pt.sliceInfo(n.shape,s,a,i,p,u,c,l,m),k;if(h)k=zt({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 _=pt.computeOutShape(b,C,S),$=Po({inputs:{x:n},backend:e,attrs:{begin:b,size:_}});k=zt({inputs:{x:$},backend:e,attrs:{shape:f}}),e.disposeData($.dataId)}else{let _=e.makeOutput(d,"float32"),$=e.dataIdMap.get(n.dataId).id,R=new Uint8Array(new Int32Array(y.computeStrides(n.shape)).buffer),D=new Uint8Array(new Int32Array(b).buffer),P=new Uint8Array(new Int32Array(C).buffer),O=new Uint8Array(new Int32Array(S).buffer),M=new Uint8Array(new Int32Array(d).buffer),L=new Uint8Array(new Int32Array(y.computeStrides(d)).buffer),B=e.dataIdMap.get(_.dataId).id;xB($,R,n.shape.length,D,P,O,M,L,d.length,B),k=zt({inputs:{x:_},backend:e,attrs:{shape:f}}),e.disposeData(_.dataId)}return k}var yB={kernelName:Ns,backendName:"wasm",setupFunc:Ase,kernelFunc:Fse};function Pse(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]=cp(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 bB={kernelName:Ca,backendName:"wasm",kernelFunc:Pse};function Ose(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]=lp(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 CB={kernelName:ji,backendName:"wasm",kernelFunc:Ose};function Mse(r){let{backend:e,inputs:t,attrs:o}=r,{input:n}=t,{numBuckets:s}=o,a=e.readSync(n.dataId),i=mp(a,s),p=e.makeOutput(n.shape,"int32");return e.typedArrayFromHeap(p).set(i),p}var wB={kernelName:Xi,backendName:"wasm",kernelFunc:Mse};var Lse=!0,SB=Ge(Ts,Lse);var IB;function Bse(r){IB=r.wasm.cwrap(Ss,null,["number","number","number","number"])}function zse(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}=Tr(a,n,e),f=l;if(d){let C=e.dataIdMap.get(c.dataId).id;C!==i&&(u=c,p=C,f=w.getInnerMostAxes(f.length,u.shape.length))}w.assertAxesAreInnerMostDims("sum",f,u.shape.length);let[h,g]=w.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;IB(p,x,we[b.dtype],C)}if(d&&e.disposeData(c.dataId),s){let C=w.expandShapeToKeepDim(b.shape,m);b.shape=C}return b}var vB={kernelName:Ss,backendName:"wasm",setupFunc:Bse,kernelFunc:zse};var kB=he(_s);var NB=he(Es);var TB;function Vse(r){TB=r.wasm.cwrap(ds,null,["number","number","number","number","number","number","array","number","number","number"])}function Wse(r){let{backend:e,inputs:t,attrs:o}=r,{tensor:n,indices:s,updates:a}=t,{}=o,i=e.makeOutput(n.shape,n.dtype);if(y.sizeFromShape(n.shape)===0)return i;let{sliceRank:p,numUpdates:u,sliceSize:c,strides:l,outputSize:m}=du.calculateShapes(a,s,n.shape),f=e.dataIdMap.get(s.dataId).id,g=e.dataIdMap.get(a.dataId).id,b=e.dataIdMap.get(n.dataId).id,C=new Uint8Array(new Int32Array(l).buffer),S=e.dataIdMap.get(i.dataId).id;return TB(f,g,we[a.dtype],p,u,c,C,m,S,b),i}var _B={kernelName:ds,backendName:"wasm",setupFunc:Vse,kernelFunc:Wse};var EB;function Use(r){EB=r.wasm.cwrap(po,null,["number","array","number","array","number","number"])}function Gse(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 RB(a,i,o.shape.length,we[o.dtype],n,s,c,m),[u,l]},DB={kernelName:$s,backendName:"wasm",setupFunc:Hse,kernelFunc:Kse};var AB;function qse(r){AB=r.wasm.cwrap(Rs,null,["number","number","bool","number","number","number","number","number","number","array","number","array","number","number","number","number","number"])}function jse(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),S=e.dataIdMap.get(C.dataId).id,_=e.dataIdMap.get(n.dataId).id,R=e.dataIdMap.get(s.dataId).id,D=a==="nearest"?1:2,P;switch(i){case"constant":P=1;break;case"reflect":P=2;break;case"wrap":P=3;break;case"nearest":P=4;break;default:P=1;break}return AB(_,R,s.shape[0]>1,c,f,h,d,m,l,x,n.shape.length-1,b,g.length-1,D,P,p,S),C}var FB={kernelName:Rs,backendName:"wasm",setupFunc:qse,kernelFunc:jse};function Xse(r){let{inputs:e,attrs:t,backend:o}=r,{axis:n}=t,{x:s}=e,{outputValues:a,outputShape:i,indices:p}=dp(o.readSync(s.dataId),n,s.shape,s.dtype);return[o.makeOutput(i,s.dtype,void 0,a),o.makeOutput([p.length],"int32",void 0,p)]}var PB={kernelName:Yi,backendName:"wasm",kernelFunc:Xse};function Yse(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 OB={kernelName:wa,backendName:"wasm",kernelFunc:Yse};function Qse(r){let{inputs:{x:e},backend:t}=r,o=t.makeOutput(e.shape,e.dtype);return t.typedArrayFromHeap(o).fill(0),o}var MB={kernelName:Sa,backendName:"wasm",kernelFunc:Qse};var Zse=[SP,IP,vP,kP,NP,_P,AP,PP,OP,MP,LP,BP,zP,VP,WP,GP,YP,KP,jP,JP,tO,oO,nO,sO,aO,iO,pO,cO,mO,fO,gO,yO,CO,wO,SO,vO,NO,_O,$O,DO,FO,OO,LO,zO,WO,UO,HO,KO,qO,jO,XO,YO,QO,JO,eM,tM,oM,sM,iM,pM,lM,mM,dM,EP,fM,hM,gM,yM,bM,CM,SM,vM,IM,kM,NM,TM,_M,$M,DM,FM,PM,MM,BM,VM,UM,HM,qM,XM,YM,ZM,rL,oL,nL,sL,iL,pL,lL,mL,fL,hL,gL,Bg,yL,CL,SL,IL,vL,kL,NL,TL,QP,EL,RL,AL,PL,ML,BL,zL,VL,UL,HL,qL,jL,YL,QL,ZL,JL,eO,eL,eB,tB,oB,sB,iB,uB,cB,lB,mB,dB,fB,gB,yB,bB,CB,wB,SB,vB,kB,NB,_B,$B,DB,FB,RP,PB,OB,MB];for(let r of Zse)ti(r);var zv=A();zv.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}});zv.registerFlag("WASM_HAS_MULTITHREAD_SUPPORT",async()=>{if(zv.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 jv=zp(VB()),qB=zp(UB()),Xv=zp(GB());var HB=jv.default||jv,Jse=Xv.default||Xv,pm=class extends ao{constructor(e){super(),this.wasm=e,this.dataIdNextNumber=1,this.wasm.tfjs.initWithThreadsCount(XB),qv=this.wasm.tfjs.getThreadsCount(),this.dataIdMap=new Bo(this,ur())}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)>>>0;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 tae(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,n){let s;if(o==null)s=this.write(n!=null?n:null,e,t);else{let a=this.dataIdNextNumber++;s={id:a},this.dataIdMap.set(s,{id:a,memoryOffset:o,shape:e,dtype:t,refCount:1});let i=y.sizeFromShape(e);this.wasm.tfjs.registerTensor(a,i,o)}return{dataId:s,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 eae(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 KB(r,e,t){if(Gg!=null)return Gg;let o="tfjs-backend-wasm.wasm";return r&&e?o="tfjs-backend-wasm-threaded-simd.wasm":r&&(o="tfjs-backend-wasm-simd.wasm"),im!=null&&im[o]!=null?im[o]:t+o}async function jB(){let[r,e]=await Promise.all([A().getAsync("WASM_HAS_SIMD_SUPPORT"),A().getAsync("WASM_HAS_MULTITHREAD_SUPPORT")]);return new Promise((t,o)=>{let n={};n.locateFile=(i,p)=>{if(i.endsWith(".worker.js")){let u=qB.wasmWorkerContents.replace(/\n/g,"\\n"),c=new Blob([u],{type:"application/javascript"});return URL.createObjectURL(c)}return i.endsWith(".wasm")?KB(r,e,am!=null?am:p):p+i},Yv&&(n.instantiateWasm=eae(KB(r,e,am!=null?am:"")));let s=!1;n.onAbort=()=>{if(s||um)return;um=!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&&Gg==null?(n.mainScriptUrlOrBlob=new Blob(["var WasmBackendModuleThreadedSimd = "+HB.toString()],{type:"text/javascript"}),a=HB(n)):a=Jse(n),a.then(i=>{s=!0,um=!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 tae(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 rae=["tfjs-backend-wasm.wasm","tfjs-backend-wasm-simd.wasm","tfjs-backend-wasm-threaded-simd.wasm"],Gg=null,am=null,im={},um=!1,Yv=!1;function oae(r,e=!1){if(Tw("setWasmPath has been deprecated in favor of setWasmPaths and will be removed in a future release."),um)throw new Error("The WASM backend was already initialized. Make sure you call `setWasmPath()` before you call `tf.setBackend()` or `tf.ready()`");Gg=r,Yv=e}function nae(r,e=!1){if(um)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")am=r;else{im=r;let t=rae.filter(o=>im[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.`)}Yv=e}var XB=-1,qv=-1;function sae(r){XB=r}function aae(){if(qv===-1)throw new Error("WASM backend not initialized.");return qv}var iae="4.21.0";var uae=2;tu("wasm",async()=>{let{wasm:r}=await jB();return new pm(r)},uae);var go=A();go.registerFlag("WEBGPU_DEFERRED_SUBMIT_BATCH_SIZE",()=>15);go.registerFlag("WEBGPU_CPU_FORWARD",()=>!0);go.registerFlag("WEBGPU_MATMUL_PROGRAM_TYPE",()=>-1);go.registerFlag("WEBGPU_USE_NAIVE_CONV2D_TRANSPOSE",()=>!0);go.registerFlag("WEBGPU_USE_LOW_POWER_GPU",()=>!1);go.registerFlag("WEBGPU_CPU_HANDOFF_SIZE_THRESHOLD",()=>1e3);go.registerFlag("WEBGPU_USE_PROFILE_TOOL",()=>!1);go.registerFlag("WEBGPU_IMPORT_EXTERNAL_TEXTURE",()=>!0);go.registerFlag("WEBGPU_USE_NAIVE_CONV2D_DEBUG",()=>!1);go.registerFlag("WEBGPU_THRESHOLD_TO_INCREASE_WORKGROUPS_FOR_MATMUL",()=>-1);go.registerFlag("WEBGPU_CONV_SEPARATE_IM2COL_SHADER",()=>!1);go.registerFlag("WEBGPU_PRINT_SHADER",()=>"");go.registerFlag("WEBGPU_ENGINE_COMPILE_ONLY",()=>!1);var Hg=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 Kg=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}acquireBuffer(e,t,o=!1,n=!0){let s,a=YB(e,t);return n?(this.freeBuffers.has(a)||this.freeBuffers.set(a,[]),this.freeBuffers.get(a).length>0?(s=this.freeBuffers.get(a).pop(),this.numFreeBuffers--):(s=this.device.createBuffer({size:e,usage:t,mappedAtCreation:o}),this.numBytesAllocated+=e)):(s=this.device.createBuffer({size:e,usage:t,mappedAtCreation:o}),this.numBytesAllocated+=e),this.usedBuffers.has(a)||this.usedBuffers.set(a,[]),this.usedBuffers.get(a).push(s),this.numUsedBuffers++,this.numBytesUsed+=e,s}releaseBuffer(e,t=!0){if(this.freeBuffers.size===0)return;let o=e.size,n=e.usage,s=YB(o,n),a=this.usedBuffers.get(s),i=a.indexOf(e);if(i<0)throw new Error("Cannot find the buffer in buffer manager");a[i]=a[a.length-1],a.pop(),this.numUsedBuffers--,this.numBytesUsed-=o,t?(this.freeBuffers.get(s).push(e),this.numFreeBuffers++):(e.destroy(),this.numBytesAllocated-=o)}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 YB(r,e){return`${r}_${e}`}var qg=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=ZB(o),a=e*t*s,i=QB(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){if(this.freeTextures.size===0)return;let t=e.width,o=e.height,n=e.format,s=e.usage,a=QB(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=ZB(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 QB(r,e,t,o){return`${r}_${e}_${t}_${o}`}function ZB(r){if(r==="rgba8unorm")return 16;throw new Error(`${r} is not supported!`)}function JB(r,e){if(Math.max(...r)>5)throw new Error("Cannot symbolically compute strides for rank > 6 tensor.");let t=r.length,o="xyzwuv",n=r.map(a=>`${e}.${o[a]}`),s=new Array(t-1);s[t-2]=n[t-1];for(let a=t-3;a>=0;--a)s[a]=`(${s[a+1]} * ${n[a+1]})`;return s}var Qr=(r,e,t)=>t==="int32"?`atomicAdd(${r}, bitcast(${e}));`:` { var oldValue = 0; loop { @@ -8523,4 +8523,4 @@ return a / b;`,Yee=` } } } - `}};function Fce(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=w.getAxesPermutation([u],i),l=n;c!=null&&(l=xr({inputs:{x:n},backend:t,attrs:{perm:c}}),p.push(l),u=w.getInnerMostAxes(1,i)[0]);let m=w.segment_util.computeOutShape(l.shape,u,a),d=y.sizeFromShape([l.shape[u]]),f=pe({inputs:{x:l},backend:t,attrs:{shape:[-1,d]}});p.push(f);let h=n.dtype,g=[f.shape[0],a],x=vt({backend:t,attrs:{shape:g,value:0,dtype:h}}),b=new by(f.shape,g,h),C=[{type:"int32",data:[a]},{type:"int32",data:[y.sizeFromShape(f.shape)]}],S=t.runWebGPUProgram(b,[f,s],h,C,x),k=pe({inputs:{x:S},backend:t,attrs:{shape:m}});p.push(S);let _=k;if(c!=null){p.push(k);let $=w.getUndoAxesPermutation(c);_=xr({inputs:{x:_},backend:t,attrs:{perm:$}})}return p.forEach($=>t.disposeData($.dataId)),_}var qU={kernelName:Qi,backendName:"webgpu",kernelFunc:Fce};var Pce=[pz,Kz,qz,jz,Xz,Yz,Zz,Jz,eV,tV,rV,oV,nV,sV,aV,pV,cV,lV,mV,dV,hV,gV,xV,wV,SV,IV,lz,kV,TV,_V,EV,$V,RV,DV,AV,FV,PV,OV,BV,zV,VV,WV,GV,HV,UV,KV,qV,jV,XV,YV,JV,eW,tW,rW,oW,nW,sW,aW,iW,iz,uW,lW,pW,cW,mW,dW,fW,hW,gW,xW,yW,cz,bW,NV,CW,wW,SW,IW,vW,kW,NW,_W,TW,EW,$W,RW,AW,FW,iV,PW,OW,BW,MW,LW,zW,uV,VW,WW,UW,GW,KW,QV,qW,jW,XW,yV,YW,JW,eU,tU,rU,oU,nU,sU,bV,aU,iU,uU,pU,uz,cU,lU,mU,dU,fU,hU,gU,xU,yU,bU,CU,wU,SU,IU,vU,kU,fV,OU,MU,LU,HW,NU,TU,_U,EU,RU,DU,AU,FU,PU,BU,ZV,zU,VU,WU,$U,GU,HU,Qz,KU,qU,QW];for(let r of Pce)ti(r);var jU="4.17.0",Oce="4.17.0",Mce="4.17.0",Lce="4.17.0",Bce="4.17.0",zce="4.17.0",Vce={tfjs:jU,"tfjs-core":jU,"tfjs-converter":Oce,"tfjs-backend-cpu":Mce,"tfjs-backend-webgl":Lce,"tfjs-backend-wasm":Bce,"tfjs-backend-webgpu":zce};var E7t=void 0;export{Xs as Abs,Vo as Acos,Wo as Acosh,Ju as AdadeltaOptimizer,ep as AdagradOptimizer,tp as AdamOptimizer,rp as AdamaxOptimizer,uo as Add,Uo as AddN,Go as All,Ho as Any,Ys as ArgMax,Qs as ArgMin,Ko as Asin,qo as Asinh,jo as Atan,Yo as Atan2,Xo as Atanh,Qo as AvgPool,Zs as AvgPool3D,Ri as AvgPool3DGrad,$i as AvgPoolGrad,pm as BackendWasm,Zo as BatchMatMul,Js as BatchToSpaceND,Jo as Bincount,qa as BitwiseAnd,ea as BroadcastArgs,qce as BroadcastTo,yo as Cast,en as Ceil,bo as ClipByValue,Di as Complex,Ai as ComplexAbs,ta as Concat,tn as Conv2D,Fi as Conv2DBackpropFilter,rn as Conv2DBackpropInput,on as Conv3D,ja as Conv3DBackpropFilterV2,nn as Conv3DBackpropInputV2,sn as Cos,an as Cosh,cn as CropAndResize,un as Cumprod,pn as Cumsum,Bo as DataStorage,ra as DenseBincount,ln as DepthToSpace,mn as DepthwiseConv2dNative,Pi as DepthwiseConv2dNativeBackpropFilter,Oi as DepthwiseConv2dNativeBackpropInput,oa as Diag,dn as Dilation2D,Li as Dilation2DBackpropFilter,Mi as Dilation2DBackpropInput,$u as Draw,nw as ENV,Bi as Einsum,hn as Elu,Xa as EluGrad,dl as Environment,xn as Equal,gn as Erf,yn as Exp,na as ExpandDims,bn as Expm1,zi as FFT,sa as Fill,Cn as FlipLeftRight,wn as Floor,Sn as FloorDiv,Du as FromPixels,In as FusedBatchNorm,Io as FusedConv2D,vo as FusedDepthwiseConv2D,bp as GPGPUContext,vn as GatherNd,aa as GatherV2,Bl as GraphModel,kn as Greater,Nn as GreaterEqual,Vi as IFFT,Co as Identity,Wi as Imag,Tn as IsFinite,_n as IsInf,En as IsNan,ao as KernelBackend,Bn as LRN,Ya as LRNGrad,$n as LeakyRelu,Rn as Less,Dn as LessEqual,An as LinSpace,Fn as Log,Pn as Log1p,jce as LogSoftmax,On as LogicalAnd,Mn as LogicalNot,Ln as LogicalOr,R0 as LogicalXor,Xce as LowerBound,xc as MathBackendCPU,Lc as MathBackendWebGL,Yce as MatrixBandPart,zn as Max,Wn as MaxPool,ia as MaxPool3D,Gi as MaxPool3DGrad,Ui as MaxPoolGrad,ua as MaxPoolWithArgmax,Vn as Maximum,Un as Mean,Gn as Min,Hn as Minimum,Kn as MirrorPad,qn as Mod,op as MomentumOptimizer,jn as Multinomial,Xn as Multiply,pa as Neg,Qn as NonMaxSuppressionV3,Qa as NonMaxSuppressionV4,Zn as NonMaxSuppressionV5,Yn as NotEqual,Nw as OP_SCOPE_SUFFIX,Jn as OneHot,ca as OnesLike,kr as Optimizer,Fl as OptimizerConstructors,la as Pack,es as PadV2,Qce as Pool,ts as Pow,rs as Prelu,os as Prod,np as RMSPropOptimizer,Hp as RaggedGather,Kp as RaggedRange,qp as RaggedTensorToTensor,ma as Range,gw as Rank,Hi as Real,fn as RealDiv,ns as Reciprocal,$t as Reduction,ss as Relu,us as Relu6,da as Reshape,is as ResizeBilinear,Ja as ResizeBilinearGrad,as as ResizeNearestNeighbor,Za as ResizeNearestNeighborGrad,ps as Reverse,Ds as RotateWithOffset,cs as Round,ls as Rsqrt,mi as SGDOptimizer,ms as ScatterNd,fs as SearchSorted,fa as Select,hs as Selu,bs as Sigmoid,ys as Sign,gs as Sin,xs as Sinh,ha as Slice,Is as Softmax,Cs as Softplus,ga as SpaceToBatchND,Ki as SparseFillEmptyRows,ei as SparseReshape,ya as SparseSegmentMean,ba as SparseSegmentSum,vs as SparseToDense,xa as SplitV,ws as Sqrt,qi as Square,ks as SquaredDifference,Ru as StaticRegexReplace,wo as Step,Ns as StridedSlice,Ca as StringNGrams,ji as StringSplit,Xi as StringToHashBucketFast,Ts as Sub,Ss as Sum,_s as Tan,Es as Tanh,mt as Tensor,tt as TensorBuffer,ds as TensorScatterUpdate,po as Tile,$s as TopK,Rs as Transform,co as Transpose,Yi as Unique,wa as Unpack,Qi as UnsortedSegmentSum,Zce as UpperBound,ri as Variable,jc as WebGPUBackend,Sa as ZerosLike,So as _FusedMatMul,Qt as abs,Rk as acos,Dk as acosh,Ce as add,Ak as addN,Fk as all,Pk as any,Ok as argMax,Mk as argMin,Lk as asin,Bk as asinh,zk as atan,Vk as atan2,Wk as atanh,dd as avgPool,Hk as avgPool3d,ak as backend,w as backend_util,Kk as basicLSTMCell,nu as batchNorm,jk as batchNorm2d,Xk as batchNorm3d,Yk as batchNorm4d,fd as batchToSpaceND,hd as bincount,Qk as bitwiseAnd,L6 as booleanMaskAsync,Zk as broadcastArgs,su as broadcastTo,Sr as broadcast_util,cT as browser,me as buffer,Ue as cast,Jk as ceil,e2 as clipByValue,Ur as clone,Er as complex,yt as concat,t2 as concat1d,r2 as concat2d,o2 as concat3d,n2 as concat4d,s2 as conv1d,au as conv2d,a2 as conv2dTranspose,i2 as conv3d,p2 as conv3dTranspose,ale as copyRegisteredKernels,c2 as cos,l2 as cosh,$l as cosineWindow,m2 as cumprod,d2 as cumsum,Ir as customGrad,f2 as denseBincount,Tw as deprecationWarn,h2 as depthToSpace,sc as depthwiseConv2d,V5 as deregisterOp,eu as device_util,g2 as diag,x2 as dilation2d,xme as disableDeprecationWarnings,Ot as dispose,yme as disposeVariables,je as div,b2 as divNoNan,C2 as dot,Y6 as dropout,iu as einsum,bd as elu,gme as enableDebugMode,hme as enableProdMode,Zw as enclosingPowerOfTwo,ur as engine,w2 as ensureShape,A as env,yd as equal,S2 as erf,k2 as euclideanNorm,_o as exp,Ms as expandDims,N2 as expm1,Cd as eye,uc as fft,$a as fill,kme as findBackend,Nme as findBackendFactory,wd as floor,md as floorDiv,GD as forceHalfFloat,Jw as fused,Sd as gather,j6 as gatherND,af as gather_util,sk as getBackend,iw as getGradient,Xp as getKernel,Ym as getKernelsForBackend,aae as getThreadsCount,mv as gpgpu_util,VK as grad,WK as grads,Wu as greater,Id as greaterEqual,ju as ifft,pu as imag,eX as image,Z6 as inTopKAsync,di as io,Hd as irfft,T2 as isFinite,_2 as isInf,E2 as isNaN,$r as keep,Vt as kernel_impls,vd as leakyRelu,Tl as less,ac as lessEqual,tX as linalg,$2 as linspace,M8 as loadGraphModel,L8 as loadGraphModelSync,R2 as localResponseNormalization,pi as log,kd as log1p,D2 as logSigmoid,A2 as logSoftmax,_d as logSumExp,Uu as logicalAnd,Ed as logicalNot,$d as logicalOr,F2 as logicalXor,rX as losses,P2 as lowerBound,Ze as matMul,aT as math,Ra as max,Dd as maxPool,O2 as maxPool3d,M2 as maxPoolWithArgmax,Ad as maximum,Gu as mean,bme as memory,L2 as meshgrid,Nl as min,Hu as minimum,B2 as mirrorPad,z2 as mod,V2 as moments,V6 as movingAverage,se as mul,W2 as multiRNNCell,U2 as multinomial,pr as neg,cS as nextFrame,E7t as node,Vu as norm,Fd as notEqual,El as oneHot,Da as ones,G2 as onesLike,N as op,H2 as outerProduct,Aa as pad,K2 as pad1d,q2 as pad2d,j2 as pad3d,X2 as pad4d,Y2 as pool,ui as pow,Od as prelu,ld as print,Q2 as prod,Cme as profile,Z2 as raggedGather,J2 as raggedRange,e1 as raggedTensorToTensor,t1 as rand,S1 as randomGamma,Wd as randomNormal,I1 as randomStandardNormal,ic as randomUniform,v1 as randomUniformInt,cu as range,Ime as ready,ci as real,k1 as reciprocal,tu as registerBackend,ole as registerGradient,ti as registerKernel,z5 as registerOp,lu as relu,Ud as relu6,vme as removeBackend,W as reshape,mo as reverse,N1 as reverse1d,T1 as reverse2d,_1 as reverse3d,E1 as reverse4d,pc as rfft,Gd as round,$1 as rsqrt,ke as scalar,U6 as scatterND,du as scatter_util,_l as searchSorted,R1 as selu,D1 as separableConv2d,jN as serialization,Sme as setBackend,Tme as setPlatform,sae as setThreadsCount,oae as setWasmPath,nae as setWasmPaths,NI as setWebGLContext,A1 as setdiff1dAsync,Ic as shared,Ea as sigmoid,F1 as sign,Jj as signal,P1 as sin,O1 as sinh,Xe as slice,M1 as slice1d,L1 as slice2d,B1 as slice3d,z1 as slice4d,pt as slice_util,V1 as softmax,Td as softplus,Pd as spaceToBatchND,oX as sparse,K6 as sparseToDense,Zj as spectral,li as split,Rr as sqrt,Zt as square,Kd as squaredDifference,cc as squeeze,vr as stack,qd as step,W1 as stridedSlice,nX as string,Te as sub,ot as sum,oi as sumOutType,U1 as tan,kl as tanh,ar as tensor,Jt as tensor1d,mu as tensor2d,jd as tensor3d,G1 as tensor4d,H1 as tensor5d,K1 as tensor6d,j1 as tensorScatterUpdate,rk as tensor_util,w1 as test_util,De as tidy,uu as tile,wme as time,X1 as topk,OGe as train,mc as transpose,Y1 as truncatedNormal,Q1 as unique,sle as unregisterGradient,nle as unregisterKernel,Z1 as unsortedSegmentSum,fo as unstack,dt as upcastType,J1 as upperBound,y as util,UK as valueAndGrad,GK as valueAndGrads,eN as variable,Vw as variableGrads,Vce as version,z8 as version_converter,OX as version_core,yY as version_cpu,iae as version_wasm,d9 as version_webgl,$at as webgl,Ec as webgl_util,Zv as webgpu_util,lo as where,Yd as whereAsync,Gr as zeros,Gt as zerosLike}; + `}};function Fce(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=w.getAxesPermutation([u],i),l=n;c!=null&&(l=xr({inputs:{x:n},backend:t,attrs:{perm:c}}),p.push(l),u=w.getInnerMostAxes(1,i)[0]);let m=w.segment_util.computeOutShape(l.shape,u,a),d=y.sizeFromShape([l.shape[u]]),f=pe({inputs:{x:l},backend:t,attrs:{shape:[-1,d]}});p.push(f);let h=n.dtype,g=[f.shape[0],a],x=vt({backend:t,attrs:{shape:g,value:0,dtype:h}}),b=new by(f.shape,g,h),C=[{type:"int32",data:[a]},{type:"int32",data:[y.sizeFromShape(f.shape)]}],S=t.runWebGPUProgram(b,[f,s],h,C,x),k=pe({inputs:{x:S},backend:t,attrs:{shape:m}});p.push(S);let _=k;if(c!=null){p.push(k);let $=w.getUndoAxesPermutation(c);_=xr({inputs:{x:_},backend:t,attrs:{perm:$}})}return p.forEach($=>t.disposeData($.dataId)),_}var qU={kernelName:Qi,backendName:"webgpu",kernelFunc:Fce};var Pce=[pz,Kz,qz,jz,Xz,Yz,Zz,Jz,eV,tV,rV,oV,nV,sV,aV,pV,cV,lV,mV,dV,hV,gV,xV,wV,SV,IV,lz,kV,TV,_V,EV,$V,RV,DV,AV,FV,PV,OV,BV,zV,VV,WV,GV,HV,UV,KV,qV,jV,XV,YV,JV,eW,tW,rW,oW,nW,sW,aW,iW,iz,uW,lW,pW,cW,mW,dW,fW,hW,gW,xW,yW,cz,bW,NV,CW,wW,SW,IW,vW,kW,NW,_W,TW,EW,$W,RW,AW,FW,iV,PW,OW,BW,MW,LW,zW,uV,VW,WW,UW,GW,KW,QV,qW,jW,XW,yV,YW,JW,eU,tU,rU,oU,nU,sU,bV,aU,iU,uU,pU,uz,cU,lU,mU,dU,fU,hU,gU,xU,yU,bU,CU,wU,SU,IU,vU,kU,fV,OU,MU,LU,HW,NU,TU,_U,EU,RU,DU,AU,FU,PU,BU,ZV,zU,VU,WU,$U,GU,HU,Qz,KU,qU,QW];for(let r of Pce)ti(r);var jU="4.21.0",Oce="4.21.0",Mce="4.21.0",Lce="4.21.0",Bce="4.21.0",zce="4.21.0",Vce={tfjs:jU,"tfjs-core":jU,"tfjs-converter":Oce,"tfjs-backend-cpu":Mce,"tfjs-backend-webgl":Lce,"tfjs-backend-wasm":Bce,"tfjs-backend-webgpu":zce};var EQt=void 0;export{Xs as Abs,Vo as Acos,Wo as Acosh,Ju as AdadeltaOptimizer,ep as AdagradOptimizer,tp as AdamOptimizer,rp as AdamaxOptimizer,uo as Add,Uo as AddN,Go as All,Ho as Any,Ys as ArgMax,Qs as ArgMin,Ko as Asin,qo as Asinh,jo as Atan,Yo as Atan2,Xo as Atanh,Qo as AvgPool,Zs as AvgPool3D,Ri as AvgPool3DGrad,$i as AvgPoolGrad,pm as BackendWasm,Zo as BatchMatMul,Js as BatchToSpaceND,Jo as Bincount,qa as BitwiseAnd,ea as BroadcastArgs,qce as BroadcastTo,yo as Cast,en as Ceil,bo as ClipByValue,Di as Complex,Ai as ComplexAbs,ta as Concat,tn as Conv2D,Fi as Conv2DBackpropFilter,rn as Conv2DBackpropInput,on as Conv3D,ja as Conv3DBackpropFilterV2,nn as Conv3DBackpropInputV2,sn as Cos,an as Cosh,cn as CropAndResize,un as Cumprod,pn as Cumsum,Bo as DataStorage,ra as DenseBincount,ln as DepthToSpace,mn as DepthwiseConv2dNative,Pi as DepthwiseConv2dNativeBackpropFilter,Oi as DepthwiseConv2dNativeBackpropInput,oa as Diag,dn as Dilation2D,Li as Dilation2DBackpropFilter,Mi as Dilation2DBackpropInput,$u as Draw,nw as ENV,Bi as Einsum,hn as Elu,Xa as EluGrad,dl as Environment,xn as Equal,gn as Erf,yn as Exp,na as ExpandDims,bn as Expm1,zi as FFT,sa as Fill,Cn as FlipLeftRight,wn as Floor,Sn as FloorDiv,Du as FromPixels,In as FusedBatchNorm,Io as FusedConv2D,vo as FusedDepthwiseConv2D,bp as GPGPUContext,vn as GatherNd,aa as GatherV2,Bl as GraphModel,kn as Greater,Nn as GreaterEqual,Vi as IFFT,Co as Identity,Wi as Imag,Tn as IsFinite,_n as IsInf,En as IsNan,ao as KernelBackend,Bn as LRN,Ya as LRNGrad,$n as LeakyRelu,Rn as Less,Dn as LessEqual,An as LinSpace,Fn as Log,Pn as Log1p,jce as LogSoftmax,On as LogicalAnd,Mn as LogicalNot,Ln as LogicalOr,R0 as LogicalXor,Xce as LowerBound,xc as MathBackendCPU,Lc as MathBackendWebGL,Yce as MatrixBandPart,zn as Max,Wn as MaxPool,ia as MaxPool3D,Gi as MaxPool3DGrad,Ui as MaxPoolGrad,ua as MaxPoolWithArgmax,Vn as Maximum,Un as Mean,Gn as Min,Hn as Minimum,Kn as MirrorPad,qn as Mod,op as MomentumOptimizer,jn as Multinomial,Xn as Multiply,pa as Neg,Qn as NonMaxSuppressionV3,Qa as NonMaxSuppressionV4,Zn as NonMaxSuppressionV5,Yn as NotEqual,Nw as OP_SCOPE_SUFFIX,Jn as OneHot,ca as OnesLike,kr as Optimizer,Fl as OptimizerConstructors,la as Pack,es as PadV2,Qce as Pool,ts as Pow,rs as Prelu,os as Prod,np as RMSPropOptimizer,Hp as RaggedGather,Kp as RaggedRange,qp as RaggedTensorToTensor,ma as Range,gw as Rank,Hi as Real,fn as RealDiv,ns as Reciprocal,$t as Reduction,ss as Relu,us as Relu6,da as Reshape,is as ResizeBilinear,Ja as ResizeBilinearGrad,as as ResizeNearestNeighbor,Za as ResizeNearestNeighborGrad,ps as Reverse,Ds as RotateWithOffset,cs as Round,ls as Rsqrt,mi as SGDOptimizer,ms as ScatterNd,fs as SearchSorted,fa as Select,hs as Selu,bs as Sigmoid,ys as Sign,gs as Sin,xs as Sinh,ha as Slice,Is as Softmax,Cs as Softplus,ga as SpaceToBatchND,Ki as SparseFillEmptyRows,ei as SparseReshape,ya as SparseSegmentMean,ba as SparseSegmentSum,vs as SparseToDense,xa as SplitV,ws as Sqrt,qi as Square,ks as SquaredDifference,Ru as StaticRegexReplace,wo as Step,Ns as StridedSlice,Ca as StringNGrams,ji as StringSplit,Xi as StringToHashBucketFast,Ts as Sub,Ss as Sum,_s as Tan,Es as Tanh,mt as Tensor,tt as TensorBuffer,ds as TensorScatterUpdate,po as Tile,$s as TopK,Rs as Transform,co as Transpose,Yi as Unique,wa as Unpack,Qi as UnsortedSegmentSum,Zce as UpperBound,ri as Variable,jc as WebGPUBackend,Sa as ZerosLike,So as _FusedMatMul,Qt as abs,Rk as acos,Dk as acosh,Ce as add,Ak as addN,Fk as all,Pk as any,Ok as argMax,Mk as argMin,Lk as asin,Bk as asinh,zk as atan,Vk as atan2,Wk as atanh,dd as avgPool,Hk as avgPool3d,ak as backend,w as backend_util,Kk as basicLSTMCell,nu as batchNorm,jk as batchNorm2d,Xk as batchNorm3d,Yk as batchNorm4d,fd as batchToSpaceND,hd as bincount,Qk as bitwiseAnd,L6 as booleanMaskAsync,Zk as broadcastArgs,su as broadcastTo,Sr as broadcast_util,cT as browser,me as buffer,Ue as cast,Jk as ceil,e2 as clipByValue,Ur as clone,Er as complex,yt as concat,t2 as concat1d,r2 as concat2d,o2 as concat3d,n2 as concat4d,s2 as conv1d,au as conv2d,a2 as conv2dTranspose,i2 as conv3d,p2 as conv3dTranspose,ale as copyRegisteredKernels,c2 as cos,l2 as cosh,$l as cosineWindow,m2 as cumprod,d2 as cumsum,Ir as customGrad,f2 as denseBincount,Tw as deprecationWarn,h2 as depthToSpace,sc as depthwiseConv2d,V5 as deregisterOp,eu as device_util,g2 as diag,x2 as dilation2d,xme as disableDeprecationWarnings,Ot as dispose,yme as disposeVariables,je as div,b2 as divNoNan,C2 as dot,Y6 as dropout,iu as einsum,bd as elu,gme as enableDebugMode,hme as enableProdMode,Zw as enclosingPowerOfTwo,ur as engine,w2 as ensureShape,A as env,yd as equal,S2 as erf,k2 as euclideanNorm,_o as exp,Ms as expandDims,N2 as expm1,Cd as eye,uc as fft,$a as fill,kme as findBackend,Nme as findBackendFactory,wd as floor,md as floorDiv,GD as forceHalfFloat,Jw as fused,Sd as gather,j6 as gatherND,af as gather_util,sk as getBackend,iw as getGradient,Xp as getKernel,Ym as getKernelsForBackend,aae as getThreadsCount,mv as gpgpu_util,VK as grad,WK as grads,Wu as greater,Id as greaterEqual,ju as ifft,pu as imag,eX as image,Z6 as inTopKAsync,di as io,Hd as irfft,T2 as isFinite,_2 as isInf,E2 as isNaN,$r as keep,Vt as kernel_impls,vd as leakyRelu,Tl as less,ac as lessEqual,tX as linalg,$2 as linspace,M8 as loadGraphModel,L8 as loadGraphModelSync,R2 as localResponseNormalization,pi as log,kd as log1p,D2 as logSigmoid,A2 as logSoftmax,_d as logSumExp,Uu as logicalAnd,Ed as logicalNot,$d as logicalOr,F2 as logicalXor,rX as losses,P2 as lowerBound,Ze as matMul,aT as math,Ra as max,Dd as maxPool,O2 as maxPool3d,M2 as maxPoolWithArgmax,Ad as maximum,Gu as mean,bme as memory,L2 as meshgrid,Nl as min,Hu as minimum,B2 as mirrorPad,z2 as mod,V2 as moments,V6 as movingAverage,se as mul,W2 as multiRNNCell,U2 as multinomial,pr as neg,cS as nextFrame,EQt as node,Vu as norm,Fd as notEqual,El as oneHot,Da as ones,G2 as onesLike,N as op,H2 as outerProduct,Aa as pad,K2 as pad1d,q2 as pad2d,j2 as pad3d,X2 as pad4d,Y2 as pool,ui as pow,Od as prelu,ld as print,Q2 as prod,Cme as profile,Z2 as raggedGather,J2 as raggedRange,e1 as raggedTensorToTensor,t1 as rand,S1 as randomGamma,Wd as randomNormal,I1 as randomStandardNormal,ic as randomUniform,v1 as randomUniformInt,cu as range,Ime as ready,ci as real,k1 as reciprocal,tu as registerBackend,ole as registerGradient,ti as registerKernel,z5 as registerOp,lu as relu,Ud as relu6,vme as removeBackend,W as reshape,mo as reverse,N1 as reverse1d,T1 as reverse2d,_1 as reverse3d,E1 as reverse4d,pc as rfft,Gd as round,$1 as rsqrt,ke as scalar,U6 as scatterND,du as scatter_util,_l as searchSorted,R1 as selu,D1 as separableConv2d,jN as serialization,Sme as setBackend,Tme as setPlatform,sae as setThreadsCount,oae as setWasmPath,nae as setWasmPaths,NI as setWebGLContext,A1 as setdiff1dAsync,Ic as shared,Ea as sigmoid,F1 as sign,Jj as signal,P1 as sin,O1 as sinh,Xe as slice,M1 as slice1d,L1 as slice2d,B1 as slice3d,z1 as slice4d,pt as slice_util,V1 as softmax,Td as softplus,Pd as spaceToBatchND,oX as sparse,K6 as sparseToDense,Zj as spectral,li as split,Rr as sqrt,Zt as square,Kd as squaredDifference,cc as squeeze,vr as stack,qd as step,W1 as stridedSlice,nX as string,Te as sub,ot as sum,oi as sumOutType,U1 as tan,kl as tanh,ar as tensor,Jt as tensor1d,mu as tensor2d,jd as tensor3d,G1 as tensor4d,H1 as tensor5d,K1 as tensor6d,j1 as tensorScatterUpdate,rk as tensor_util,w1 as test_util,De as tidy,uu as tile,wme as time,X1 as topk,OGe as train,mc as transpose,Y1 as truncatedNormal,Q1 as unique,sle as unregisterGradient,nle as unregisterKernel,Z1 as unsortedSegmentSum,fo as unstack,dt as upcastType,J1 as upperBound,y as util,UK as valueAndGrad,GK as valueAndGrads,eN as variable,Vw as variableGrads,Vce as version,z8 as version_converter,OX as version_core,yY as version_cpu,iae as version_wasm,d9 as version_webgl,$at as webgl,Ec as webgl_util,Zv as webgpu_util,lo as where,Yd as whereAsync,Gr as zeros,Gt as zerosLike}; diff --git a/dist/tfjs.version.js b/dist/tfjs.version.js index bb067537..a52ca722 100644 --- a/dist/tfjs.version.js +++ b/dist/tfjs.version.js @@ -4,4 +4,37 @@ author: ' */ -var e="4.17.0";var s="4.17.0";var t="4.17.0";var n="4.17.0";var r="4.17.0";var i="4.17.0";var h={tfjs:e,"tfjs-core":e,"tfjs-converter":s,"tfjs-backend-cpu":t,"tfjs-backend-webgl":n,"tfjs-backend-wasm":r,"tfjs-backend-webgpu":i};export{h as version}; + +// node_modules/.pnpm/@tensorflow+tfjs-core@4.21.0/node_modules/@tensorflow/tfjs-core/package.json +var version = "4.21.0"; + +// node_modules/.pnpm/@tensorflow+tfjs-converter@4.21.0_@tensorflow+tfjs-core@4.21.0/node_modules/@tensorflow/tfjs-converter/package.json +var version2 = "4.21.0"; + +// node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@4.21.0_@tensorflow+tfjs-core@4.21.0/node_modules/@tensorflow/tfjs-backend-cpu/package.json +var version3 = "4.21.0"; + +// node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@4.21.0_@tensorflow+tfjs-core@4.21.0/node_modules/@tensorflow/tfjs-backend-webgl/package.json +var version4 = "4.21.0"; + +// node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@4.21.0_@tensorflow+tfjs-core@4.21.0/node_modules/@tensorflow/tfjs-backend-wasm/package.json +var version5 = "4.21.0"; + +// node_modules/.pnpm/@tensorflow+tfjs-backend-webgpu@4.21.0_@tensorflow+tfjs-core@4.21.0/node_modules/@tensorflow/tfjs-backend-webgpu/package.json +var version6 = "4.21.0"; + +// tfjs/tf-version.ts +var version7 = { + tfjs: version, + "tfjs-core": version, + // 'tfjs-data': tfjsDataVersion, + // 'tfjs-layers': tfjsLayersVersion, + "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/package.json b/package.json index 2ca23aa6..7e8d5e8c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@vladmandic/human", - "version": "3.2.2", + "version": "3.3.0", "description": "Human: AI-powered 3D Face Detection & Rotation Tracking, Face Description & Recognition, Body Pose Tracking, 3D Hand & Finger Tracking, Iris Analysis, Age & Gender & Emotion Prediction, Gesture Recognition", "sideEffects": false, "main": "dist/human.node.js", @@ -8,13 +8,7 @@ "browser": "dist/human.esm.js", "types": "types/human.d.ts", "exports": { - "node": { - "require": "./dist/human.node.js", - "import": "./dist/human.node.js", - "module": "./dist/human.node.js" - }, - "require": "./dist/human.node.js", - "import": "./dist/human.esm.js", + "node": "./dist/human.node.js", "script": "./dist/human.js", "module": "./dist/human.esm.js", "types": "./types/human.d.ts", @@ -29,7 +23,9 @@ "dist/human.node-wasm": "./dist/human.node-wasm.js", "dist/human.node-wasm.js": "./dist/human.node-wasm.js", "dist/human.node-gpu": "./dist/human.node-gpu.js", - "dist/human.node-gpu.js": "./dist/human.node-gpu.js" + "dist/human.node-gpu.js": "./dist/human.node-gpu.js", + "require": "./dist/human.node.js", + "import": "./dist/human.esm.js" }, "author": "Vladimir Mandic ", "bugs": { @@ -78,40 +74,40 @@ "tensorflow" ], "devDependencies": { - "@html-eslint/eslint-plugin": "^0.24.1", - "@html-eslint/parser": "^0.24.1", - "@microsoft/api-extractor": "^7.43.1", - "@tensorflow/tfjs-backend-cpu": "^4.17.0", - "@tensorflow/tfjs-backend-wasm": "^4.17.0", - "@tensorflow/tfjs-backend-webgl": "^4.17.0", - "@tensorflow/tfjs-backend-webgpu": "4.17.0", - "@tensorflow/tfjs-converter": "^4.17.0", - "@tensorflow/tfjs-core": "^4.17.0", - "@tensorflow/tfjs-data": "^4.17.0", - "@tensorflow/tfjs-layers": "^4.17.0", - "@tensorflow/tfjs-node": "^4.17.0", - "@tensorflow/tfjs-node-gpu": "^4.17.0", - "@types/emscripten": "^1.39.10", - "@types/node": "^20.12.7", + "@html-eslint/eslint-plugin": "^0.26.0", + "@html-eslint/parser": "^0.26.0", + "@microsoft/api-extractor": "^7.47.7", + "@tensorflow/tfjs-backend-cpu": "^4.21.0", + "@tensorflow/tfjs-backend-wasm": "^4.21.0", + "@tensorflow/tfjs-backend-webgl": "^4.21.0", + "@tensorflow/tfjs-backend-webgpu": "4.21.0", + "@tensorflow/tfjs-converter": "^4.21.0", + "@tensorflow/tfjs-core": "^4.21.0", + "@tensorflow/tfjs-data": "^4.21.0", + "@tensorflow/tfjs-layers": "^4.21.0", + "@tensorflow/tfjs-node": "^4.21.0", + "@tensorflow/tfjs-node-gpu": "^4.21.0", + "@types/emscripten": "^1.39.13", + "@types/node": "^22.5.4", "@types/offscreencanvas": "^2019.7.3", - "@typescript-eslint/eslint-plugin": "^7.7.0", - "@typescript-eslint/parser": "^7.7.0", - "@vladmandic/build": "^0.9.3", - "@vladmandic/pilogger": "^0.4.9", + "@typescript-eslint/eslint-plugin": "^8.5.0", + "@typescript-eslint/parser": "^8.5.0", + "@vladmandic/build": "^0.10.1", + "@vladmandic/pilogger": "^0.5.1", "@vladmandic/tfjs": "github:vladmandic/tfjs", "canvas": "^2.11.2", - "esbuild": "^0.20.2", - "eslint": "9.0.0", + "esbuild": "^0.23.1", + "eslint": "8.57.0", "eslint-config-airbnb-base": "^15.0.0", - "eslint-plugin-html": "^8.1.0", - "eslint-plugin-import": "^2.29.1", - "eslint-plugin-json": "^3.1.0", - "eslint-plugin-markdown": "^4.0.1", + "eslint-plugin-html": "^8.1.1", + "eslint-plugin-import": "^2.30.0", + "eslint-plugin-json": "^4.0.1", + "eslint-plugin-markdown": "^5.1.0", "eslint-plugin-node": "^11.1.0", - "eslint-plugin-promise": "^6.1.1", - "rimraf": "^5.0.5", - "tslib": "^2.6.2", - "typedoc": "0.25.13", - "typescript": "~5.4.5" + "eslint-plugin-promise": "^7.1.0", + "rimraf": "^6.0.1", + "tslib": "^2.7.0", + "typedoc": "0.26.7", + "typescript": "5.5.4" } } diff --git a/src/config.ts b/src/config.ts index c91f767c..167e6097 100644 --- a/src/config.ts +++ b/src/config.ts @@ -1,7 +1,7 @@ /* eslint-disable no-multi-spaces */ /** Possible TensorFlow backends */ -export type BackendEnum = '' | 'cpu' | 'wasm' | 'webgl' | 'humangl' | 'tensorflow' | 'webgpu'; +export type BackendEnum = '' | 'cpu' | 'wasm' | 'webgl' | 'humangl' | 'tensorflow' | 'webgpu' | 'none'; /** Possible values for `human.warmup` */ export type WarmupEnum = '' | 'none' | 'face' | 'full' | 'body'; diff --git a/src/models.ts b/src/models.ts index 1e155459..d871a173 100644 --- a/src/models.ts +++ b/src/models.ts @@ -178,7 +178,7 @@ export class Models { return models; } - loaded() { + loaded(): string[] { const list = this.list(); const loaded = list.filter((model) => model.loaded).map((model) => model.name); return loaded; diff --git a/src/sample.ts b/src/sample.ts index 850aca8a..3916412e 100644 --- a/src/sample.ts +++ b/src/sample.ts @@ -3,7 +3,7 @@ */ // data:image/jpeg;base64, -export const face = ` +export const face: string = ` /9j/4AAQSkZJRgABAQEAYABgAAD/4QBoRXhpZgAATU0AKgAAAAgABAEaAAUAAAABAAAAPgEbAAUA AAABAAAARgEoAAMAAAABAAIAAAExAAIAAAARAAAATgAAAAAAAABgAAAAAQAAAGAAAAABcGFpbnQu bmV0IDQuMi4xMwAA/9sAQwAGBAUGBQQGBgUGBwcGCAoQCgoJCQoUDg8MEBcUGBgXFBYWGh0lHxob diff --git a/test/build.log b/test/build.log index 3805029f..b094f197 100644 --- a/test/build.log +++ b/test/build.log @@ -1,51 +1,130 @@ -2024-04-17 11:37:01 DATA:  Build {"name":"@vladmandic/human","version":"3.2.2"} -2024-04-17 11:37:01 INFO:  Application: {"name":"@vladmandic/human","version":"3.2.2"} -2024-04-17 11:37:01 INFO:  Environment: {"profile":"production","config":".build.json","package":"package.json","tsconfig":true,"eslintrc":true,"git":true} -2024-04-17 11:37:01 INFO:  Toolchain: {"build":"0.9.2","esbuild":"0.19.12","typescript":"5.3.3","typedoc":"0.25.13","eslint":"8.55.0"} -2024-04-17 11:37:01 INFO:  Build: {"profile":"production","steps":["clean","compile","typings","typedoc","lint","changelog"]} -2024-04-17 11:37:01 STATE: Clean: {"locations":["dist/*","types/*","typedoc/*"]} -2024-04-17 11:37:01 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":358} -2024-04-17 11:37:01 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":566,"outputBytes":957} -2024-04-17 11:37:01 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":80,"inputBytes":676298,"outputBytes":320933} -2024-04-17 11:37:01 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":574,"outputBytes":965} -2024-04-17 11:37:01 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":80,"inputBytes":676306,"outputBytes":320937} -2024-04-17 11:37:01 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":662,"outputBytes":2003} -2024-04-17 11:37:01 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":80,"inputBytes":677344,"outputBytes":321048} -2024-04-17 11:37:01 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1403,"outputBytes":690} -2024-04-17 11:37:01 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":80,"inputBytes":676031,"outputBytes":319514} -2024-04-17 11:37:01 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":10,"inputBytes":1403,"outputBytes":1267270} -2024-04-17 11:37:02 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":80,"inputBytes":1942611,"outputBytes":1582522} -2024-04-17 11:37:02 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":80,"inputBytes":1942611,"outputBytes":2081294} -2024-04-17 11:37:03 STATE: Typings: {"input":"src/human.ts","output":"types/lib","files":14} -2024-04-17 11:37:05 STATE: TypeDoc: {"input":"src/human.ts","output":"typedoc","objects":81,"generated":true} -2024-04-17 11:37:05 STATE: Compile: {"name":"demo/typescript","format":"esm","platform":"browser","input":"demo/typescript/index.ts","output":"demo/typescript/index.js","files":1,"inputBytes":6318,"outputBytes":2970} -2024-04-17 11:37:05 STATE: Compile: {"name":"demo/faceid","format":"esm","platform":"browser","input":"demo/faceid/index.ts","output":"demo/faceid/index.js","files":2,"inputBytes":17499,"outputBytes":9399} -2024-04-17 11:37:05 STATE: Compile: {"name":"demo/tracker","format":"esm","platform":"browser","input":"demo/tracker/index.ts","output":"demo/tracker/index.js","files":2,"inputBytes":54375,"outputBytes":22791} -2024-04-17 11:37:12 STATE: Lint: {"locations":["**/*.json","src/**/*.ts","test/**/*.js","demo/**/*.js","**/*.md"],"files":171,"errors":0,"warnings":0} -2024-04-17 11:37:12 STATE: ChangeLog: {"repository":"https://github.com/vladmandic/human","branch":"main","output":"CHANGELOG.md"} -2024-04-17 11:37:12 STATE: Copy: {"input":"node_modules/@vladmandic/tfjs/types/tfjs-core.d.ts","output":"types/tfjs-core.d.ts"} -2024-04-17 11:37:12 INFO:  Done... -2024-04-17 11:37:12 STATE: Copy: {"input":"node_modules/@vladmandic/tfjs/types/tfjs.d.ts","output":"types/tfjs.esm.d.ts"} -2024-04-17 11:37:12 STATE: Copy: {"input":"src/types/tsconfig.json","output":"types/tsconfig.json"} -2024-04-17 11:37:12 STATE: Copy: {"input":"src/types/eslint.json","output":"types/.eslintrc.json"} -2024-04-17 11:37:12 STATE: Copy: {"input":"src/types/tfjs.esm.d.ts","output":"dist/tfjs.esm.d.ts"} -2024-04-17 11:37:12 STATE: Filter: {"input":"types/tfjs-core.d.ts"} -2024-04-17 11:37:13 ERROR: API-Extractor: {} -2024-04-17 11:37:13 STATE: Filter: {"input":"types/human.d.ts"} -2024-04-17 11:37:13 STATE: Write: {"output":"dist/human.esm-nobundle.d.ts"} -2024-04-17 11:37:13 STATE: Write: {"output":"dist/human.esm.d.ts"} -2024-04-17 11:37:13 STATE: Write: {"output":"dist/human.d.ts"} -2024-04-17 11:37:13 STATE: Write: {"output":"dist/human.node-gpu.d.ts"} -2024-04-17 11:37:13 STATE: Write: {"output":"dist/human.node.d.ts"} -2024-04-17 11:37:13 STATE: Write: {"output":"dist/human.node-wasm.d.ts"} -2024-04-17 11:37:13 INFO:  Analyze models: {"folders":8,"result":"models/models.json"} -2024-04-17 11:37:13 STATE: Models {"folder":"./models","models":12} -2024-04-17 11:37:13 STATE: Models {"folder":"../human-models/models","models":44} -2024-04-17 11:37:13 STATE: Models {"folder":"../blazepose/model/","models":4} -2024-04-17 11:37:13 STATE: Models {"folder":"../anti-spoofing/model","models":1} -2024-04-17 11:37:13 STATE: Models {"folder":"../efficientpose/models","models":3} -2024-04-17 11:37:13 STATE: Models {"folder":"../insightface/models","models":5} -2024-04-17 11:37:13 STATE: Models {"folder":"../movenet/models","models":3} -2024-04-17 11:37:13 STATE: Models {"folder":"../nanodet/models","models":4} -2024-04-17 11:37:13 STATE: Models: {"count":58,"totalSize":380063249} -2024-04-17 11:37:13 INFO:  Human Build complete... {"logFile":"test/build.log"} +2024-09-10 15:40:56 DATA:  Build {"name":"@vladmandic/human","version":"3.3.0"} +2024-09-10 15:40:56 INFO:  Application: {"name":"@vladmandic/human","version":"3.3.0"} +2024-09-10 15:40:56 INFO:  Environment: {"profile":"production","config":".build.json","package":"package.json","tsconfig":true,"eslintrc":true,"git":true} +2024-09-10 15:40:56 INFO:  Toolchain: {"build":"0.10.1","esbuild":"0.23.1","typescript":"5.5.4","typedoc":"0.26.7","eslint":"8.57.0"} +2024-09-10 15:40:56 INFO:  Build: {"profile":"production","steps":["clean","compile","typings","typedoc","lint","changelog"]} +2024-09-10 15:40:56 STATE: Clean: {"locations":["dist/*","types/*","typedoc/*"]} +2024-09-10 15:40:56 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":358} +2024-09-10 15:40:56 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":566,"outputBytes":957} +2024-09-10 15:40:56 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":80,"inputBytes":676219,"outputBytes":320882} +2024-09-10 15:40:56 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":574,"outputBytes":965} +2024-09-10 15:40:56 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":80,"inputBytes":676227,"outputBytes":320886} +2024-09-10 15:40:56 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":662,"outputBytes":2003} +2024-09-10 15:40:56 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":80,"inputBytes":677265,"outputBytes":320997} +2024-09-10 15:40:56 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1403,"outputBytes":690} +2024-09-10 15:40:56 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":80,"inputBytes":675952,"outputBytes":319463} +2024-09-10 15:40:57 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":10,"inputBytes":1403,"outputBytes":1267270} +2024-09-10 15:40:57 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":80,"inputBytes":1942532,"outputBytes":1582473} +2024-09-10 15:40:57 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":80,"inputBytes":1942532,"outputBytes":2065672} +2024-09-10 15:40:58 STATE: Typings: {"input":"src/human.ts","output":"types/lib","files":78} +2024-09-10 15:41:00 STATE: TypeDoc: {"input":"src/human.ts","output":"typedoc","objects":81,"generated":true} +2024-09-10 15:41:00 STATE: Compile: {"name":"demo/typescript","format":"esm","platform":"browser","input":"demo/typescript/index.ts","output":"demo/typescript/index.js","files":1,"inputBytes":6318,"outputBytes":2970} +2024-09-10 15:41:00 STATE: Compile: {"name":"demo/faceid","format":"esm","platform":"browser","input":"demo/faceid/index.ts","output":"demo/faceid/index.js","files":2,"inputBytes":17499,"outputBytes":9399} +2024-09-10 15:41:00 STATE: Compile: {"name":"demo/tracker","format":"esm","platform":"browser","input":"demo/tracker/index.ts","output":"demo/tracker/index.js","files":2,"inputBytes":54375,"outputBytes":22791} +2024-09-10 15:41:06 STATE: Lint: {"locations":["**/*.json","src/**/*.ts","test/**/*.js","demo/**/*.js","**/*.md"],"files":173,"errors":0,"warnings":0} +2024-09-10 15:41:06 STATE: ChangeLog: {"repository":"https://github.com/vladmandic/human","branch":"main","output":"CHANGELOG.md"} +2024-09-10 15:41:06 STATE: Copy: {"input":"node_modules/@vladmandic/tfjs/types/tfjs-core.d.ts","output":"types/tfjs-core.d.ts"} +2024-09-10 15:41:06 INFO:  Done... +2024-09-10 15:41:06 STATE: Copy: {"input":"node_modules/@vladmandic/tfjs/types/tfjs.d.ts","output":"types/tfjs.esm.d.ts"} +2024-09-10 15:41:06 STATE: Copy: {"input":"src/types/tsconfig.json","output":"types/tsconfig.json"} +2024-09-10 15:41:06 STATE: Copy: {"input":"src/types/eslint.json","output":"types/.eslintrc.json"} +2024-09-10 15:41:06 STATE: Copy: {"input":"src/types/tfjs.esm.d.ts","output":"dist/tfjs.esm.d.ts"} +2024-09-10 15:41:06 STATE: Filter: {"input":"types/tfjs-core.d.ts"} +2024-09-10 15:41:07 ERROR: API-Extractor: {} +2024-09-10 15:41:07 STATE: Filter: {"input":"types/human.d.ts"} +2024-09-10 15:41:07 STATE: Write: {"output":"dist/human.esm-nobundle.d.ts"} +2024-09-10 15:41:07 STATE: Write: {"output":"dist/human.esm.d.ts"} +2024-09-10 15:41:07 STATE: Write: {"output":"dist/human.d.ts"} +2024-09-10 15:41:07 STATE: Write: {"output":"dist/human.node-gpu.d.ts"} +2024-09-10 15:41:07 STATE: Write: {"output":"dist/human.node.d.ts"} +2024-09-10 15:41:07 STATE: Write: {"output":"dist/human.node-wasm.d.ts"} +2024-09-10 15:41:07 INFO:  Analyze models: {"folders":8,"result":"models/models.json"} +2024-09-10 15:41:07 STATE: Models {"folder":"./models","models":12} +2024-09-10 15:41:07 STATE: Models {"folder":"../human-models/models","models":44} +2024-09-10 15:41:07 STATE: Models {"folder":"../blazepose/model/","models":4} +2024-09-10 15:41:07 STATE: Models {"folder":"../anti-spoofing/model","models":1} +2024-09-10 15:41:07 STATE: Models {"folder":"../efficientpose/models","models":3} +2024-09-10 15:41:07 STATE: Models {"folder":"../insightface/models","models":5} +2024-09-10 15:41:07 STATE: Models {"folder":"../movenet/models","models":3} +2024-09-10 15:41:07 STATE: Models {"folder":"../nanodet/models","models":4} +2024-09-10 15:41:08 STATE: Models: {"count":58,"totalSize":380063249} +2024-09-10 15:41:08 INFO:  Human Build complete... {"logFile":"test/build.log"} +2024-09-10 15:42:29 INFO:  @vladmandic/human version 3.3.0 +2024-09-10 15:42:29 INFO:  User: vlado Platform: linux Arch: x64 Node: v21.7.3 +2024-09-10 15:42:29 INFO:  Application: {"name":"@vladmandic/human","version":"3.3.0"} +2024-09-10 15:42:29 INFO:  Environment: {"profile":"development","config":".build.json","package":"package.json","tsconfig":true,"eslintrc":true,"git":true} +2024-09-10 15:42:29 INFO:  Toolchain: {"build":"0.10.1","esbuild":"0.23.1","typescript":"5.5.4","typedoc":"0.26.7","eslint":"8.57.0"} +2024-09-10 15:42:29 INFO:  Build: {"profile":"development","steps":["serve","watch","compile"]} +2024-09-10 15:42:29 STATE: WebServer: {"ssl":false,"port":8000,"root":"."} +2024-09-10 15:42:29 STATE: WebServer: {"ssl":true,"port":8001,"root":".","sslKey":"node_modules/@vladmandic/build/cert/https.key","sslCrt":"node_modules/@vladmandic/build/cert/https.crt"} +2024-09-10 15:42:29 STATE: Watch: {"locations":["src/**/*","tfjs/**/*","demo/**/*.ts"]} +2024-09-10 15:42: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":1435} +2024-09-10 15:42:29 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1643,"outputBytes":1896} +2024-09-10 15:42:29 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":80,"inputBytes":677158,"outputBytes":521236} +2024-09-10 15:42: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":1651,"outputBytes":1924} +2024-09-10 15:42:29 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":80,"inputBytes":677186,"outputBytes":521256} +2024-09-10 15:42: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":1739,"outputBytes":2193} +2024-09-10 15:42:29 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":80,"inputBytes":677455,"outputBytes":521447} +2024-09-10 15:42: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":2480,"outputBytes":1044} +2024-09-10 15:42: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":676306,"outputBytes":523784} +2024-09-10 15:42: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":2480,"outputBytes":1267522} +2024-09-10 15:42:29 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":80,"inputBytes":1942784,"outputBytes":1582725} +2024-09-10 15:42:29 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":80,"inputBytes":1942784,"outputBytes":2065992} +2024-09-10 15:42:29 STATE: Compile: {"name":"demo/typescript","format":"esm","platform":"browser","input":"demo/typescript/index.ts","output":"demo/typescript/index.js","files":1,"inputBytes":6318,"outputBytes":4521} +2024-09-10 15:42:29 STATE: Compile: {"name":"demo/faceid","format":"esm","platform":"browser","input":"demo/faceid/index.ts","output":"demo/faceid/index.js","files":2,"inputBytes":17499,"outputBytes":15108} +2024-09-10 15:42:29 STATE: Compile: {"name":"demo/tracker","format":"esm","platform":"browser","input":"demo/tracker/index.ts","output":"demo/tracker/index.js","files":2,"inputBytes":54375,"outputBytes":51040} +2024-09-10 15:42:29 INFO:  Listening... ["http://localhost:8000","https://localhost:8001"] +2024-09-10 15:42:32 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/html","size":7551,"url":"/","remote":"::1"} +2024-09-10 15:42:32 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/css","size":107884,"url":"/icons.css","remote":"::1"} +2024-09-10 15:42:32 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":45003,"url":"/index.js","remote":"::1"} +2024-09-10 15:42:32 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"font/woff2","size":181500,"url":"/assets/lato-light.woff2","remote":"::1"} +2024-09-10 15:42:32 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":2065992,"url":"/dist/human.esm.js","remote":"::1"} +2024-09-10 15:42:32 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":14308,"url":"/helpers/menu.js","remote":"::1"} +2024-09-10 15:42:32 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":10535,"url":"/helpers/gl-bench.js","remote":"::1"} +2024-09-10 15:42:32 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":3397,"url":"/helpers/webrtc.js","remote":"::1"} +2024-09-10 15:42:32 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":5689,"url":"/helpers/jsonview.js","remote":"::1"} +2024-09-10 15:42:32 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/manifest+json","size":304,"url":"/manifest.webmanifest","remote":"::1"} +2024-09-10 15:42:33 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"image/png","size":142790,"url":"/assets/icon.png","remote":"::1"} +2024-09-10 15:42:34 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":4033,"url":"/index-pwa.js","remote":"::1"} +2024-09-10 15:42:38 DATA:  HTTP: {"method":"GET","ver":"1.1","status":301,"url":"/demo/typescript","redirect":"/demo/typescript/index.html","remote":"::1"} +2024-09-10 15:42:39 DATA:  HTTP: {"method":"GET","ver":"1.1","status":301,"url":"/demo/typescript","redirect":"/demo/typescript/index.html","remote":"::1"} +2024-09-10 15:42:39 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":4033,"url":"/index-pwa.js","remote":"::1"} +2024-09-10 15:42:40 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":4033,"url":"/index-pwa.js","remote":"::1"} +2024-09-10 15:42:44 DATA:  HTTP: {"method":"GET","ver":"1.1","status":301,"url":"/demo/typescript","redirect":"/demo/typescript/index.html","remote":"::1"} +2024-09-10 15:42:45 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":4033,"url":"/index-pwa.js","remote":"::1"} +2024-09-10 15:42:59 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/html","size":1954,"url":"/typescript","remote":"::1"} +2024-09-10 15:42:59 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":45003,"url":"/index.js","remote":"::1"} +2024-09-10 15:42:59 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":2065992,"url":"/dist/human.esm.js","remote":"::1"} +2024-09-10 15:42:59 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":14308,"url":"/helpers/menu.js","remote":"::1"} +2024-09-10 15:42:59 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":10535,"url":"/helpers/gl-bench.js","remote":"::1"} +2024-09-10 15:42:59 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":3397,"url":"/helpers/webrtc.js","remote":"::1"} +2024-09-10 15:42:59 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":5689,"url":"/helpers/jsonview.js","remote":"::1"} +2024-09-10 15:42:59 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"font/woff2","size":181500,"url":"/assets/lato-light.woff2","remote":"::1"} +2024-09-10 15:42:59 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/manifest+json","size":304,"url":"/manifest.webmanifest","remote":"::1"} +2024-09-10 15:42:59 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"image/png","size":142790,"url":"/assets/icon.png","remote":"::1"} +2024-09-10 15:43:01 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":4033,"url":"/index-pwa.js","remote":"::1"} +2024-09-10 15:43:04 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/html","size":1954,"url":"/typescript","remote":"::1"} +2024-09-10 15:43:04 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/manifest+json","size":304,"url":"/manifest.webmanifest","remote":"::1"} +2024-09-10 15:43:04 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/octet-stream","size":3665210,"url":"/dist/human.esm.js.map","remote":"::1"} +2024-09-10 15:43:08 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/html","size":1954,"url":"/typescript","remote":"::1"} +2024-09-10 15:43:08 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":45003,"url":"/index.js","remote":"::1"} +2024-09-10 15:43:08 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":2065992,"url":"/dist/human.esm.js","remote":"::1"} +2024-09-10 15:43:08 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":14308,"url":"/helpers/menu.js","remote":"::1"} +2024-09-10 15:43:08 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":10535,"url":"/helpers/gl-bench.js","remote":"::1"} +2024-09-10 15:43:08 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"font/woff2","size":181500,"url":"/assets/lato-light.woff2","remote":"::1"} +2024-09-10 15:43:08 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":3397,"url":"/helpers/webrtc.js","remote":"::1"} +2024-09-10 15:43:08 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":5689,"url":"/helpers/jsonview.js","remote":"::1"} +2024-09-10 15:43:08 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/octet-stream","size":3665210,"url":"/dist/human.esm.js.map","remote":"::1"} +2024-09-10 15:43:08 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"image/x-icon","size":261950,"url":"/favicon.ico","remote":"::1"} +2024-09-10 15:43:08 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/manifest+json","size":304,"url":"/manifest.webmanifest","remote":"::1"} +2024-09-10 15:43:08 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"image/png","size":142790,"url":"/assets/icon.png","remote":"::1"} +2024-09-10 15:43:10 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":4033,"url":"/index-pwa.js","remote":"::1"} +2024-09-10 15:43:14 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/html","size":1954,"url":"/typescript/index.html","remote":"::1"} +2024-09-10 15:43:14 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":4521,"url":"/typescript/index.js","remote":"::1"} +2024-09-10 15:43:14 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"font/woff2","size":181500,"url":"/assets/lato-light.woff2","remote":"::1"} +2024-09-10 15:43:14 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":2065992,"url":"/dist/human.esm.js","remote":"::1"} +2024-09-10 15:43:14 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/octet-stream","size":9752,"url":"/typescript/index.js.map","remote":"::1"} +2024-09-10 15:43:14 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/octet-stream","size":3665210,"url":"/dist/human.esm.js.map","remote":"::1"} +2024-09-10 15:43:14 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"application/manifest+json","size":304,"url":"/manifest.webmanifest","remote":"::1"} +2024-09-10 15:43:14 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"image/png","size":142790,"url":"/assets/icon.png","remote":"::1"} +2024-09-10 15:43:18 DATA:  HTTP: {"method":"GET","ver":"1.1","status":200,"mime":"text/javascript","size":4033,"url":"/index-pwa.js","remote":"::1"} diff --git a/test/test-node-main.js b/test/test-node-main.js index 79cbf1a4..004d3fe6 100644 --- a/test/test-node-main.js +++ b/test/test-node-main.js @@ -107,7 +107,7 @@ async function testWarmup(human, title) { try { warmup = await human.warmup(config); } catch (err) { - log('error', 'error warmup'); + log('error', 'error warmup', err); } if (warmup) { log('state', 'passed: warmup:', config.warmup, title); diff --git a/tsconfig.json b/tsconfig.json index 83eeb591..3162f382 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -51,9 +51,9 @@ "tabSize": 2 }, "exclude": ["node_modules/", "types/", "dist/**/*.js"], - "include": ["src", "tfjs/*.ts", "types/human.d.ts", "test/**/*.ts", "demo/**/*.ts", "demo/facedetect/loader.js"], + "include": ["src", "tfjs/*.ts", "types/human.d.ts", "test/**/*.ts"], "typedocOptions": { "excludeExternals": true, - "externalPattern": ["**/node_modules/**", "tfjs/"] + "externalPattern": ["**/node_modules/**", "tfjs/", "demo/"] } } diff --git a/typedoc/assets/highlight.css b/typedoc/assets/highlight.css index 70096219..930ef55d 100644 --- a/typedoc/assets/highlight.css +++ b/typedoc/assets/highlight.css @@ -15,8 +15,6 @@ --dark-hl-6: #DCDCAA; --light-hl-7: #098658; --dark-hl-7: #B5CEA8; - --light-hl-8: #000000; - --dark-hl-8: #C8C8C8; --light-code-background: #FFFFFF; --dark-code-background: #1E1E1E; } @@ -30,7 +28,6 @@ --hl-5: var(--light-hl-5); --hl-6: var(--light-hl-6); --hl-7: var(--light-hl-7); - --hl-8: var(--light-hl-8); --code-background: var(--light-code-background); } } @@ -43,7 +40,6 @@ --hl-5: var(--dark-hl-5); --hl-6: var(--dark-hl-6); --hl-7: var(--dark-hl-7); - --hl-8: var(--dark-hl-8); --code-background: var(--dark-code-background); } } @@ -56,7 +52,6 @@ --hl-5: var(--light-hl-5); --hl-6: var(--light-hl-6); --hl-7: var(--light-hl-7); - --hl-8: var(--light-hl-8); --code-background: var(--light-code-background); } @@ -69,7 +64,6 @@ --hl-5: var(--dark-hl-5); --hl-6: var(--dark-hl-6); --hl-7: var(--dark-hl-7); - --hl-8: var(--dark-hl-8); --code-background: var(--dark-code-background); } @@ -81,5 +75,4 @@ .hl-5 { color: var(--hl-5); } .hl-6 { color: var(--hl-6); } .hl-7 { color: var(--hl-7); } -.hl-8 { color: var(--hl-8); } pre, code { background: var(--code-background); } diff --git a/typedoc/assets/icons.js b/typedoc/assets/icons.js index b79c9e89..e88e8ca7 100644 --- a/typedoc/assets/icons.js +++ b/typedoc/assets/icons.js @@ -1,15 +1,18 @@ -(function(svg) { - svg.innerHTML = ``; - svg.style.display = 'none'; - if (location.protocol === 'file:') { - if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', updateUseElements); - else updateUseElements() - function updateUseElements() { - document.querySelectorAll('use').forEach(el => { - if (el.getAttribute('href').includes('#icon-')) { - el.setAttribute('href', el.getAttribute('href').replace(/.*#/, '#')); - } - }); - } +(function() { + addIcons(); + function addIcons() { + if (document.readyState === "loading") return document.addEventListener("DOMContentLoaded", addIcons); + const svg = document.body.appendChild(document.createElementNS("http://www.w3.org/2000/svg", "svg")); + svg.innerHTML = `""`; + svg.style.display = "none"; + if (location.protocol === "file:") updateUseElements(); } -})(document.body.appendChild(document.createElementNS('http://www.w3.org/2000/svg', 'svg'))) \ No newline at end of file + + function updateUseElements() { + document.querySelectorAll("use").forEach(el => { + if (el.getAttribute("href").includes("#icon-")) { + el.setAttribute("href", el.getAttribute("href").replace(/.*#/, "#")); + } + }); + } +})() \ No newline at end of file diff --git a/typedoc/assets/icons.svg b/typedoc/assets/icons.svg index 7dead611..e371b8b5 100644 --- a/typedoc/assets/icons.svg +++ b/typedoc/assets/icons.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/typedoc/assets/main.js b/typedoc/assets/main.js index d6f13886..21a5d74d 100644 --- a/typedoc/assets/main.js +++ b/typedoc/assets/main.js @@ -1,8 +1,9 @@ "use strict"; -"use strict";(()=>{var Ce=Object.create;var ne=Object.defineProperty;var Pe=Object.getOwnPropertyDescriptor;var Oe=Object.getOwnPropertyNames;var _e=Object.getPrototypeOf,Re=Object.prototype.hasOwnProperty;var Me=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var Fe=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Oe(e))!Re.call(t,i)&&i!==n&&ne(t,i,{get:()=>e[i],enumerable:!(r=Pe(e,i))||r.enumerable});return t};var De=(t,e,n)=>(n=t!=null?Ce(_e(t)):{},Fe(e||!t||!t.__esModule?ne(n,"default",{value:t,enumerable:!0}):n,t));var ae=Me((se,oe)=>{(function(){var t=function(e){var n=new t.Builder;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),n.searchPipeline.add(t.stemmer),e.call(n,n),n.build()};t.version="2.3.9";t.utils={},t.utils.warn=function(e){return function(n){e.console&&console.warn&&console.warn(n)}}(this),t.utils.asString=function(e){return e==null?"":e.toString()},t.utils.clone=function(e){if(e==null)return e;for(var n=Object.create(null),r=Object.keys(e),i=0;i0){var d=t.utils.clone(n)||{};d.position=[a,u],d.index=s.length,s.push(new t.Token(r.slice(a,o),d))}a=o+1}}return s},t.tokenizer.separator=/[\s\-]+/;t.Pipeline=function(){this._stack=[]},t.Pipeline.registeredFunctions=Object.create(null),t.Pipeline.registerFunction=function(e,n){n in this.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[e.label]=e},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn(`Function is not registered with pipeline. This may cause problems when serialising the index. -`,e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(r){var i=t.Pipeline.registeredFunctions[r];if(i)n.add(i);else throw new Error("Cannot load unregistered function: "+r)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(n){t.Pipeline.warnIfFunctionNotRegistered(n),this._stack.push(n)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(e);if(r==-1)throw new Error("Cannot find existingFn");r=r+1,this._stack.splice(r,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(e);if(r==-1)throw new Error("Cannot find existingFn");this._stack.splice(r,0,n)},t.Pipeline.prototype.remove=function(e){var n=this._stack.indexOf(e);n!=-1&&this._stack.splice(n,1)},t.Pipeline.prototype.run=function(e){for(var n=this._stack.length,r=0;r1&&(oe&&(r=s),o!=e);)i=r-n,s=n+Math.floor(i/2),o=this.elements[s*2];if(o==e||o>e)return s*2;if(ol?d+=2:a==l&&(n+=r[u+1]*i[d+1],u+=2,d+=2);return n},t.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},t.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),n=1,r=0;n0){var o=s.str.charAt(0),a;o in s.node.edges?a=s.node.edges[o]:(a=new t.TokenSet,s.node.edges[o]=a),s.str.length==1&&(a.final=!0),i.push({node:a,editsRemaining:s.editsRemaining,str:s.str.slice(1)})}if(s.editsRemaining!=0){if("*"in s.node.edges)var l=s.node.edges["*"];else{var l=new t.TokenSet;s.node.edges["*"]=l}if(s.str.length==0&&(l.final=!0),i.push({node:l,editsRemaining:s.editsRemaining-1,str:s.str}),s.str.length>1&&i.push({node:s.node,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)}),s.str.length==1&&(s.node.final=!0),s.str.length>=1){if("*"in s.node.edges)var u=s.node.edges["*"];else{var u=new t.TokenSet;s.node.edges["*"]=u}s.str.length==1&&(u.final=!0),i.push({node:u,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)})}if(s.str.length>1){var d=s.str.charAt(0),y=s.str.charAt(1),p;y in s.node.edges?p=s.node.edges[y]:(p=new t.TokenSet,s.node.edges[y]=p),s.str.length==1&&(p.final=!0),i.push({node:p,editsRemaining:s.editsRemaining-1,str:d+s.str.slice(2)})}}}return r},t.TokenSet.fromString=function(e){for(var n=new t.TokenSet,r=n,i=0,s=e.length;i=e;n--){var r=this.uncheckedNodes[n],i=r.child.toString();i in this.minimizedNodes?r.parent.edges[r.char]=this.minimizedNodes[i]:(r.child._str=i,this.minimizedNodes[i]=r.child),this.uncheckedNodes.pop()}};t.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},t.Index.prototype.search=function(e){return this.query(function(n){var r=new t.QueryParser(e,n);r.parse()})},t.Index.prototype.query=function(e){for(var n=new t.Query(this.fields),r=Object.create(null),i=Object.create(null),s=Object.create(null),o=Object.create(null),a=Object.create(null),l=0;l1?this._b=1:this._b=e},t.Builder.prototype.k1=function(e){this._k1=e},t.Builder.prototype.add=function(e,n){var r=e[this._ref],i=Object.keys(this._fields);this._documents[r]=n||{},this.documentCount+=1;for(var s=0;s=this.length)return t.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},t.QueryLexer.prototype.width=function(){return this.pos-this.start},t.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},t.QueryLexer.prototype.backup=function(){this.pos-=1},t.QueryLexer.prototype.acceptDigitRun=function(){var e,n;do e=this.next(),n=e.charCodeAt(0);while(n>47&&n<58);e!=t.QueryLexer.EOS&&this.backup()},t.QueryLexer.prototype.more=function(){return this.pos1&&(e.backup(),e.emit(t.QueryLexer.TERM)),e.ignore(),e.more())return t.QueryLexer.lexText},t.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.EDIT_DISTANCE),t.QueryLexer.lexText},t.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.BOOST),t.QueryLexer.lexText},t.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(t.QueryLexer.TERM)},t.QueryLexer.termSeparator=t.tokenizer.separator,t.QueryLexer.lexText=function(e){for(;;){var n=e.next();if(n==t.QueryLexer.EOS)return t.QueryLexer.lexEOS;if(n.charCodeAt(0)==92){e.escapeCharacter();continue}if(n==":")return t.QueryLexer.lexField;if(n=="~")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexEditDistance;if(n=="^")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexBoost;if(n=="+"&&e.width()===1||n=="-"&&e.width()===1)return e.emit(t.QueryLexer.PRESENCE),t.QueryLexer.lexText;if(n.match(t.QueryLexer.termSeparator))return t.QueryLexer.lexTerm}},t.QueryParser=function(e,n){this.lexer=new t.QueryLexer(e),this.query=n,this.currentClause={},this.lexemeIdx=0},t.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=t.QueryParser.parseClause;e;)e=e(this);return this.query},t.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},t.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},t.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},t.QueryParser.parseClause=function(e){var n=e.peekLexeme();if(n!=null)switch(n.type){case t.QueryLexer.PRESENCE:return t.QueryParser.parsePresence;case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var r="expected either a field or a term, found "+n.type;throw n.str.length>=1&&(r+=" with value '"+n.str+"'"),new t.QueryParseError(r,n.start,n.end)}},t.QueryParser.parsePresence=function(e){var n=e.consumeLexeme();if(n!=null){switch(n.str){case"-":e.currentClause.presence=t.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=t.Query.presence.REQUIRED;break;default:var r="unrecognised presence operator'"+n.str+"'";throw new t.QueryParseError(r,n.start,n.end)}var i=e.peekLexeme();if(i==null){var r="expecting term or field, found nothing";throw new t.QueryParseError(r,n.start,n.end)}switch(i.type){case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var r="expecting term or field, found '"+i.type+"'";throw new t.QueryParseError(r,i.start,i.end)}}},t.QueryParser.parseField=function(e){var n=e.consumeLexeme();if(n!=null){if(e.query.allFields.indexOf(n.str)==-1){var r=e.query.allFields.map(function(o){return"'"+o+"'"}).join(", "),i="unrecognised field '"+n.str+"', possible fields: "+r;throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.fields=[n.str];var s=e.peekLexeme();if(s==null){var i="expecting term, found nothing";throw new t.QueryParseError(i,n.start,n.end)}switch(s.type){case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var i="expecting term, found '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseTerm=function(e){var n=e.consumeLexeme();if(n!=null){e.currentClause.term=n.str.toLowerCase(),n.str.indexOf("*")!=-1&&(e.currentClause.usePipeline=!1);var r=e.peekLexeme();if(r==null){e.nextClause();return}switch(r.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+r.type+"'";throw new t.QueryParseError(i,r.start,r.end)}}},t.QueryParser.parseEditDistance=function(e){var n=e.consumeLexeme();if(n!=null){var r=parseInt(n.str,10);if(isNaN(r)){var i="edit distance must be numeric";throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.editDistance=r;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseBoost=function(e){var n=e.consumeLexeme();if(n!=null){var r=parseInt(n.str,10);if(isNaN(r)){var i="boost must be numeric";throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.boost=r;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},function(e,n){typeof define=="function"&&define.amd?define(n):typeof se=="object"?oe.exports=n():e.lunr=n()}(this,function(){return t})})()});var re=[];function G(t,e){re.push({selector:e,constructor:t})}var U=class{constructor(){this.alwaysVisibleMember=null;this.createComponents(document.body),this.ensureFocusedElementVisible(),this.listenForCodeCopies(),window.addEventListener("hashchange",()=>this.ensureFocusedElementVisible()),document.body.style.display||(this.ensureFocusedElementVisible(),this.updateIndexVisibility(),this.scrollToHash())}createComponents(e){re.forEach(n=>{e.querySelectorAll(n.selector).forEach(r=>{r.dataset.hasInstance||(new n.constructor({el:r,app:this}),r.dataset.hasInstance=String(!0))})})}filterChanged(){this.ensureFocusedElementVisible()}showPage(){document.body.style.display&&(console.log("Show page"),document.body.style.removeProperty("display"),this.ensureFocusedElementVisible(),this.updateIndexVisibility(),this.scrollToHash())}scrollToHash(){if(location.hash){console.log("Scorlling");let e=document.getElementById(location.hash.substring(1));if(!e)return;e.scrollIntoView({behavior:"instant",block:"start"})}}ensureActivePageVisible(){let e=document.querySelector(".tsd-navigation .current"),n=e?.parentElement;for(;n&&!n.classList.contains(".tsd-navigation");)n instanceof HTMLDetailsElement&&(n.open=!0),n=n.parentElement;if(e&&!e.checkVisibility()){let r=e.getBoundingClientRect().top-document.documentElement.clientHeight/4;document.querySelector(".site-menu").scrollTop=r}}updateIndexVisibility(){let e=document.querySelector(".tsd-index-content"),n=e?.open;e&&(e.open=!0),document.querySelectorAll(".tsd-index-section").forEach(r=>{r.style.display="block";let i=Array.from(r.querySelectorAll(".tsd-index-link")).every(s=>s.offsetParent==null);r.style.display=i?"none":"block"}),e&&(e.open=n)}ensureFocusedElementVisible(){if(this.alwaysVisibleMember&&(this.alwaysVisibleMember.classList.remove("always-visible"),this.alwaysVisibleMember.firstElementChild.remove(),this.alwaysVisibleMember=null),!location.hash)return;let e=document.getElementById(location.hash.substring(1));if(!e)return;let n=e.parentElement;for(;n&&n.tagName!=="SECTION";)n=n.parentElement;if(n&&n.offsetParent==null){this.alwaysVisibleMember=n,n.classList.add("always-visible");let r=document.createElement("p");r.classList.add("warning"),r.textContent="This member is normally hidden due to your filter settings.",n.prepend(r)}}listenForCodeCopies(){document.querySelectorAll("pre > button").forEach(e=>{let n;e.addEventListener("click",()=>{e.previousElementSibling instanceof HTMLElement&&navigator.clipboard.writeText(e.previousElementSibling.innerText.trim()),e.textContent="Copied!",e.classList.add("visible"),clearTimeout(n),n=setTimeout(()=>{e.classList.remove("visible"),n=setTimeout(()=>{e.textContent="Copy"},100)},1e3)})})}};var ie=(t,e=100)=>{let n;return()=>{clearTimeout(n),n=setTimeout(()=>t(),e)}};var de=De(ae());async function le(t,e){if(!window.searchData)return;let n=await fetch(window.searchData),r=new Blob([await n.arrayBuffer()]).stream().pipeThrough(new DecompressionStream("gzip")),i=await new Response(r).json();t.data=i,t.index=de.Index.load(i.index),e.classList.remove("loading"),e.classList.add("ready")}function he(){let t=document.getElementById("tsd-search");if(!t)return;let e={base:t.dataset.base+"/"},n=document.getElementById("tsd-search-script");t.classList.add("loading"),n&&(n.addEventListener("error",()=>{t.classList.remove("loading"),t.classList.add("failure")}),n.addEventListener("load",()=>{le(e,t)}),le(e,t));let r=document.querySelector("#tsd-search input"),i=document.querySelector("#tsd-search .results");if(!r||!i)throw new Error("The input field or the result list wrapper was not found");let s=!1;i.addEventListener("mousedown",()=>s=!0),i.addEventListener("mouseup",()=>{s=!1,t.classList.remove("has-focus")}),r.addEventListener("focus",()=>t.classList.add("has-focus")),r.addEventListener("blur",()=>{s||(s=!1,t.classList.remove("has-focus"))}),Ae(t,i,r,e)}function Ae(t,e,n,r){n.addEventListener("input",ie(()=>{Ve(t,e,n,r)},200));let i=!1;n.addEventListener("keydown",s=>{i=!0,s.key=="Enter"?Ne(e,n):s.key=="Escape"?n.blur():s.key=="ArrowUp"?ue(e,-1):s.key==="ArrowDown"?ue(e,1):i=!1}),n.addEventListener("keypress",s=>{i&&s.preventDefault()}),document.body.addEventListener("keydown",s=>{s.altKey||s.ctrlKey||s.metaKey||!n.matches(":focus")&&s.key==="/"&&(n.focus(),s.preventDefault())})}function Ve(t,e,n,r){if(!r.index||!r.data)return;e.textContent="";let i=n.value.trim(),s;if(i){let o=i.split(" ").map(a=>a.length?`*${a}*`:"").join(" ");s=r.index.search(o)}else s=[];for(let o=0;oa.score-o.score);for(let o=0,a=Math.min(10,s.length);o`,d=ce(l.name,i);globalThis.DEBUG_SEARCH_WEIGHTS&&(d+=` (score: ${s[o].score.toFixed(2)})`),l.parent&&(d=` - ${ce(l.parent,i)}.${d}`);let y=document.createElement("li");y.classList.value=l.classes??"";let p=document.createElement("a");p.href=r.base+l.url,p.innerHTML=u+d,y.append(p),e.appendChild(y)}}function ue(t,e){let n=t.querySelector(".current");if(!n)n=t.querySelector(e==1?"li:first-child":"li:last-child"),n&&n.classList.add("current");else{let r=n;if(e===1)do r=r.nextElementSibling??void 0;while(r instanceof HTMLElement&&r.offsetParent==null);else do r=r.previousElementSibling??void 0;while(r instanceof HTMLElement&&r.offsetParent==null);r&&(n.classList.remove("current"),r.classList.add("current"))}}function Ne(t,e){let n=t.querySelector(".current");if(n||(n=t.querySelector("li:first-child")),n){let r=n.querySelector("a");r&&(window.location.href=r.href),e.blur()}}function ce(t,e){if(e==="")return t;let n=t.toLocaleLowerCase(),r=e.toLocaleLowerCase(),i=[],s=0,o=n.indexOf(r);for(;o!=-1;)i.push(K(t.substring(s,o)),`${K(t.substring(o,o+r.length))}`),s=o+r.length,o=n.indexOf(r,s);return i.push(K(t.substring(s))),i.join("")}var He={"&":"&","<":"<",">":">","'":"'",'"':"""};function K(t){return t.replace(/[&<>"'"]/g,e=>He[e])}var I=class{constructor(e){this.el=e.el,this.app=e.app}};var F="mousedown",fe="mousemove",H="mouseup",J={x:0,y:0},pe=!1,ee=!1,Be=!1,D=!1,me=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);document.documentElement.classList.add(me?"is-mobile":"not-mobile");me&&"ontouchstart"in document.documentElement&&(Be=!0,F="touchstart",fe="touchmove",H="touchend");document.addEventListener(F,t=>{ee=!0,D=!1;let e=F=="touchstart"?t.targetTouches[0]:t;J.y=e.pageY||0,J.x=e.pageX||0});document.addEventListener(fe,t=>{if(ee&&!D){let e=F=="touchstart"?t.targetTouches[0]:t,n=J.x-(e.pageX||0),r=J.y-(e.pageY||0);D=Math.sqrt(n*n+r*r)>10}});document.addEventListener(H,()=>{ee=!1});document.addEventListener("click",t=>{pe&&(t.preventDefault(),t.stopImmediatePropagation(),pe=!1)});var X=class extends I{constructor(e){super(e),this.className=this.el.dataset.toggle||"",this.el.addEventListener(H,n=>this.onPointerUp(n)),this.el.addEventListener("click",n=>n.preventDefault()),document.addEventListener(F,n=>this.onDocumentPointerDown(n)),document.addEventListener(H,n=>this.onDocumentPointerUp(n))}setActive(e){if(this.active==e)return;this.active=e,document.documentElement.classList.toggle("has-"+this.className,e),this.el.classList.toggle("active",e);let n=(this.active?"to-has-":"from-has-")+this.className;document.documentElement.classList.add(n),setTimeout(()=>document.documentElement.classList.remove(n),500)}onPointerUp(e){D||(this.setActive(!0),e.preventDefault())}onDocumentPointerDown(e){if(this.active){if(e.target.closest(".col-sidebar, .tsd-filter-group"))return;this.setActive(!1)}}onDocumentPointerUp(e){if(!D&&this.active&&e.target.closest(".col-sidebar")){let n=e.target.closest("a");if(n){let r=window.location.href;r.indexOf("#")!=-1&&(r=r.substring(0,r.indexOf("#"))),n.href.substring(0,r.length)==r&&setTimeout(()=>this.setActive(!1),250)}}}};var te;try{te=localStorage}catch{te={getItem(){return null},setItem(){}}}var Q=te;var ye=document.head.appendChild(document.createElement("style"));ye.dataset.for="filters";var Y=class extends I{constructor(e){super(e),this.key=`filter-${this.el.name}`,this.value=this.el.checked,this.el.addEventListener("change",()=>{this.setLocalStorage(this.el.checked)}),this.setLocalStorage(this.fromLocalStorage()),ye.innerHTML+=`html:not(.${this.key}) .tsd-is-${this.el.name} { display: none; } -`,this.app.updateIndexVisibility()}fromLocalStorage(){let e=Q.getItem(this.key);return e?e==="true":this.el.checked}setLocalStorage(e){Q.setItem(this.key,e.toString()),this.value=e,this.handleValueChange()}handleValueChange(){this.el.checked=this.value,document.documentElement.classList.toggle(this.key,this.value),this.app.filterChanged(),this.app.updateIndexVisibility()}};var Z=class extends I{constructor(e){super(e),this.summary=this.el.querySelector(".tsd-accordion-summary"),this.icon=this.summary.querySelector("svg"),this.key=`tsd-accordion-${this.summary.dataset.key??this.summary.textContent.trim().replace(/\s+/g,"-").toLowerCase()}`;let n=Q.getItem(this.key);this.el.open=n?n==="true":this.el.open,this.el.addEventListener("toggle",()=>this.update());let r=this.summary.querySelector("a");r&&r.addEventListener("click",()=>{location.assign(r.href)}),this.update()}update(){this.icon.style.transform=`rotate(${this.el.open?0:-90}deg)`,Q.setItem(this.key,this.el.open.toString())}};function ge(t){let e=Q.getItem("tsd-theme")||"os";t.value=e,ve(e),t.addEventListener("change",()=>{Q.setItem("tsd-theme",t.value),ve(t.value)})}function ve(t){document.documentElement.dataset.theme=t}var Le;function be(){let t=document.getElementById("tsd-nav-script");t&&(t.addEventListener("load",xe),xe())}async function xe(){let t=document.getElementById("tsd-nav-container");if(!t||!window.navigationData)return;let n=await(await fetch(window.navigationData)).arrayBuffer(),r=new Blob([n]).stream().pipeThrough(new DecompressionStream("gzip")),i=await new Response(r).json();Le=t.dataset.base+"/",t.innerHTML="";for(let s of i)we(s,t,[]);window.app.createComponents(t),window.app.showPage(),window.app.ensureActivePageVisible()}function we(t,e,n){let r=e.appendChild(document.createElement("li"));if(t.children){let i=[...n,t.text],s=r.appendChild(document.createElement("details"));s.className=t.class?`${t.class} tsd-index-accordion`:"tsd-index-accordion",s.dataset.key=i.join("$");let o=s.appendChild(document.createElement("summary"));o.className="tsd-accordion-summary",o.innerHTML='',Ee(t,o);let a=s.appendChild(document.createElement("div"));a.className="tsd-accordion-details";let l=a.appendChild(document.createElement("ul"));l.className="tsd-nested-navigation";for(let u of t.children)we(u,l,i)}else Ee(t,r,t.class)}function Ee(t,e,n){if(t.path){let r=e.appendChild(document.createElement("a"));r.href=Le+t.path,n&&(r.className=n),location.pathname===r.pathname&&r.classList.add("current"),t.kind&&(r.innerHTML=``),r.appendChild(document.createElement("span")).textContent=t.text}else e.appendChild(document.createElement("span")).textContent=t.text}G(X,"a[data-toggle]");G(Z,".tsd-index-accordion");G(Y,".tsd-filter-item input[type=checkbox]");var Se=document.getElementById("tsd-theme");Se&&ge(Se);var je=new U;Object.defineProperty(window,"app",{value:je});he();be();})(); +window.translations={"copy":"Copy","copied":"Copied!","normally_hidden":"This member is normally hidden due to your filter settings."}; +"use strict";(()=>{var Pe=Object.create;var ie=Object.defineProperty;var Oe=Object.getOwnPropertyDescriptor;var _e=Object.getOwnPropertyNames;var Re=Object.getPrototypeOf,Me=Object.prototype.hasOwnProperty;var Fe=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var De=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of _e(e))!Me.call(t,i)&&i!==n&&ie(t,i,{get:()=>e[i],enumerable:!(r=Oe(e,i))||r.enumerable});return t};var Ae=(t,e,n)=>(n=t!=null?Pe(Re(t)):{},De(e||!t||!t.__esModule?ie(n,"default",{value:t,enumerable:!0}):n,t));var ue=Fe((ae,le)=>{(function(){var t=function(e){var n=new t.Builder;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),n.searchPipeline.add(t.stemmer),e.call(n,n),n.build()};t.version="2.3.9";t.utils={},t.utils.warn=function(e){return function(n){e.console&&console.warn&&console.warn(n)}}(this),t.utils.asString=function(e){return e==null?"":e.toString()},t.utils.clone=function(e){if(e==null)return e;for(var n=Object.create(null),r=Object.keys(e),i=0;i0){var d=t.utils.clone(n)||{};d.position=[a,u],d.index=s.length,s.push(new t.Token(r.slice(a,o),d))}a=o+1}}return s},t.tokenizer.separator=/[\s\-]+/;t.Pipeline=function(){this._stack=[]},t.Pipeline.registeredFunctions=Object.create(null),t.Pipeline.registerFunction=function(e,n){n in this.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[e.label]=e},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn(`Function is not registered with pipeline. This may cause problems when serialising the index. +`,e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(r){var i=t.Pipeline.registeredFunctions[r];if(i)n.add(i);else throw new Error("Cannot load unregistered function: "+r)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(n){t.Pipeline.warnIfFunctionNotRegistered(n),this._stack.push(n)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(e);if(r==-1)throw new Error("Cannot find existingFn");r=r+1,this._stack.splice(r,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(e);if(r==-1)throw new Error("Cannot find existingFn");this._stack.splice(r,0,n)},t.Pipeline.prototype.remove=function(e){var n=this._stack.indexOf(e);n!=-1&&this._stack.splice(n,1)},t.Pipeline.prototype.run=function(e){for(var n=this._stack.length,r=0;r1&&(oe&&(r=s),o!=e);)i=r-n,s=n+Math.floor(i/2),o=this.elements[s*2];if(o==e||o>e)return s*2;if(ol?d+=2:a==l&&(n+=r[u+1]*i[d+1],u+=2,d+=2);return n},t.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},t.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),n=1,r=0;n0){var o=s.str.charAt(0),a;o in s.node.edges?a=s.node.edges[o]:(a=new t.TokenSet,s.node.edges[o]=a),s.str.length==1&&(a.final=!0),i.push({node:a,editsRemaining:s.editsRemaining,str:s.str.slice(1)})}if(s.editsRemaining!=0){if("*"in s.node.edges)var l=s.node.edges["*"];else{var l=new t.TokenSet;s.node.edges["*"]=l}if(s.str.length==0&&(l.final=!0),i.push({node:l,editsRemaining:s.editsRemaining-1,str:s.str}),s.str.length>1&&i.push({node:s.node,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)}),s.str.length==1&&(s.node.final=!0),s.str.length>=1){if("*"in s.node.edges)var u=s.node.edges["*"];else{var u=new t.TokenSet;s.node.edges["*"]=u}s.str.length==1&&(u.final=!0),i.push({node:u,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)})}if(s.str.length>1){var d=s.str.charAt(0),m=s.str.charAt(1),p;m in s.node.edges?p=s.node.edges[m]:(p=new t.TokenSet,s.node.edges[m]=p),s.str.length==1&&(p.final=!0),i.push({node:p,editsRemaining:s.editsRemaining-1,str:d+s.str.slice(2)})}}}return r},t.TokenSet.fromString=function(e){for(var n=new t.TokenSet,r=n,i=0,s=e.length;i=e;n--){var r=this.uncheckedNodes[n],i=r.child.toString();i in this.minimizedNodes?r.parent.edges[r.char]=this.minimizedNodes[i]:(r.child._str=i,this.minimizedNodes[i]=r.child),this.uncheckedNodes.pop()}};t.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},t.Index.prototype.search=function(e){return this.query(function(n){var r=new t.QueryParser(e,n);r.parse()})},t.Index.prototype.query=function(e){for(var n=new t.Query(this.fields),r=Object.create(null),i=Object.create(null),s=Object.create(null),o=Object.create(null),a=Object.create(null),l=0;l1?this._b=1:this._b=e},t.Builder.prototype.k1=function(e){this._k1=e},t.Builder.prototype.add=function(e,n){var r=e[this._ref],i=Object.keys(this._fields);this._documents[r]=n||{},this.documentCount+=1;for(var s=0;s=this.length)return t.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},t.QueryLexer.prototype.width=function(){return this.pos-this.start},t.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},t.QueryLexer.prototype.backup=function(){this.pos-=1},t.QueryLexer.prototype.acceptDigitRun=function(){var e,n;do e=this.next(),n=e.charCodeAt(0);while(n>47&&n<58);e!=t.QueryLexer.EOS&&this.backup()},t.QueryLexer.prototype.more=function(){return this.pos1&&(e.backup(),e.emit(t.QueryLexer.TERM)),e.ignore(),e.more())return t.QueryLexer.lexText},t.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.EDIT_DISTANCE),t.QueryLexer.lexText},t.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.BOOST),t.QueryLexer.lexText},t.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(t.QueryLexer.TERM)},t.QueryLexer.termSeparator=t.tokenizer.separator,t.QueryLexer.lexText=function(e){for(;;){var n=e.next();if(n==t.QueryLexer.EOS)return t.QueryLexer.lexEOS;if(n.charCodeAt(0)==92){e.escapeCharacter();continue}if(n==":")return t.QueryLexer.lexField;if(n=="~")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexEditDistance;if(n=="^")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexBoost;if(n=="+"&&e.width()===1||n=="-"&&e.width()===1)return e.emit(t.QueryLexer.PRESENCE),t.QueryLexer.lexText;if(n.match(t.QueryLexer.termSeparator))return t.QueryLexer.lexTerm}},t.QueryParser=function(e,n){this.lexer=new t.QueryLexer(e),this.query=n,this.currentClause={},this.lexemeIdx=0},t.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=t.QueryParser.parseClause;e;)e=e(this);return this.query},t.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},t.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},t.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},t.QueryParser.parseClause=function(e){var n=e.peekLexeme();if(n!=null)switch(n.type){case t.QueryLexer.PRESENCE:return t.QueryParser.parsePresence;case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var r="expected either a field or a term, found "+n.type;throw n.str.length>=1&&(r+=" with value '"+n.str+"'"),new t.QueryParseError(r,n.start,n.end)}},t.QueryParser.parsePresence=function(e){var n=e.consumeLexeme();if(n!=null){switch(n.str){case"-":e.currentClause.presence=t.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=t.Query.presence.REQUIRED;break;default:var r="unrecognised presence operator'"+n.str+"'";throw new t.QueryParseError(r,n.start,n.end)}var i=e.peekLexeme();if(i==null){var r="expecting term or field, found nothing";throw new t.QueryParseError(r,n.start,n.end)}switch(i.type){case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var r="expecting term or field, found '"+i.type+"'";throw new t.QueryParseError(r,i.start,i.end)}}},t.QueryParser.parseField=function(e){var n=e.consumeLexeme();if(n!=null){if(e.query.allFields.indexOf(n.str)==-1){var r=e.query.allFields.map(function(o){return"'"+o+"'"}).join(", "),i="unrecognised field '"+n.str+"', possible fields: "+r;throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.fields=[n.str];var s=e.peekLexeme();if(s==null){var i="expecting term, found nothing";throw new t.QueryParseError(i,n.start,n.end)}switch(s.type){case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var i="expecting term, found '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseTerm=function(e){var n=e.consumeLexeme();if(n!=null){e.currentClause.term=n.str.toLowerCase(),n.str.indexOf("*")!=-1&&(e.currentClause.usePipeline=!1);var r=e.peekLexeme();if(r==null){e.nextClause();return}switch(r.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+r.type+"'";throw new t.QueryParseError(i,r.start,r.end)}}},t.QueryParser.parseEditDistance=function(e){var n=e.consumeLexeme();if(n!=null){var r=parseInt(n.str,10);if(isNaN(r)){var i="edit distance must be numeric";throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.editDistance=r;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseBoost=function(e){var n=e.consumeLexeme();if(n!=null){var r=parseInt(n.str,10);if(isNaN(r)){var i="boost must be numeric";throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.boost=r;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},function(e,n){typeof define=="function"&&define.amd?define(n):typeof ae=="object"?le.exports=n():e.lunr=n()}(this,function(){return t})})()});var se=[];function G(t,e){se.push({selector:e,constructor:t})}var U=class{constructor(){this.alwaysVisibleMember=null;this.createComponents(document.body),this.ensureFocusedElementVisible(),this.listenForCodeCopies(),window.addEventListener("hashchange",()=>this.ensureFocusedElementVisible()),document.body.style.display||(this.ensureFocusedElementVisible(),this.updateIndexVisibility(),this.scrollToHash())}createComponents(e){se.forEach(n=>{e.querySelectorAll(n.selector).forEach(r=>{r.dataset.hasInstance||(new n.constructor({el:r,app:this}),r.dataset.hasInstance=String(!0))})})}filterChanged(){this.ensureFocusedElementVisible()}showPage(){document.body.style.display&&(document.body.style.removeProperty("display"),this.ensureFocusedElementVisible(),this.updateIndexVisibility(),this.scrollToHash())}scrollToHash(){if(location.hash){let e=document.getElementById(location.hash.substring(1));if(!e)return;e.scrollIntoView({behavior:"instant",block:"start"})}}ensureActivePageVisible(){let e=document.querySelector(".tsd-navigation .current"),n=e?.parentElement;for(;n&&!n.classList.contains(".tsd-navigation");)n instanceof HTMLDetailsElement&&(n.open=!0),n=n.parentElement;if(e&&!Ve(e)){let r=e.getBoundingClientRect().top-document.documentElement.clientHeight/4;document.querySelector(".site-menu").scrollTop=r,document.querySelector(".col-sidebar").scrollTop=r}}updateIndexVisibility(){let e=document.querySelector(".tsd-index-content"),n=e?.open;e&&(e.open=!0),document.querySelectorAll(".tsd-index-section").forEach(r=>{r.style.display="block";let i=Array.from(r.querySelectorAll(".tsd-index-link")).every(s=>s.offsetParent==null);r.style.display=i?"none":"block"}),e&&(e.open=n)}ensureFocusedElementVisible(){if(this.alwaysVisibleMember&&(this.alwaysVisibleMember.classList.remove("always-visible"),this.alwaysVisibleMember.firstElementChild.remove(),this.alwaysVisibleMember=null),!location.hash)return;let e=document.getElementById(location.hash.substring(1));if(!e)return;let n=e.parentElement;for(;n&&n.tagName!=="SECTION";)n=n.parentElement;if(!n)return;let r=n.offsetParent==null,i=n;for(;i!==document.body;)i instanceof HTMLDetailsElement&&(i.open=!0),i=i.parentElement;if(n.offsetParent==null){this.alwaysVisibleMember=n,n.classList.add("always-visible");let s=document.createElement("p");s.classList.add("warning"),s.textContent=window.translations.normally_hidden,n.prepend(s)}r&&e.scrollIntoView()}listenForCodeCopies(){document.querySelectorAll("pre > button").forEach(e=>{let n;e.addEventListener("click",()=>{e.previousElementSibling instanceof HTMLElement&&navigator.clipboard.writeText(e.previousElementSibling.innerText.trim()),e.textContent=window.translations.copied,e.classList.add("visible"),clearTimeout(n),n=setTimeout(()=>{e.classList.remove("visible"),n=setTimeout(()=>{e.textContent=window.translations.copy},100)},1e3)})})}};function Ve(t){let e=t.getBoundingClientRect(),n=Math.max(document.documentElement.clientHeight,window.innerHeight);return!(e.bottom<0||e.top-n>=0)}var oe=(t,e=100)=>{let n;return()=>{clearTimeout(n),n=setTimeout(()=>t(),e)}};var pe=Ae(ue());async function ce(t,e){if(!window.searchData)return;let n=await fetch(window.searchData),r=new Blob([await n.arrayBuffer()]).stream().pipeThrough(new DecompressionStream("gzip")),i=await new Response(r).json();t.data=i,t.index=pe.Index.load(i.index),e.classList.remove("loading"),e.classList.add("ready")}function fe(){let t=document.getElementById("tsd-search");if(!t)return;let e={base:t.dataset.base+"/"},n=document.getElementById("tsd-search-script");t.classList.add("loading"),n&&(n.addEventListener("error",()=>{t.classList.remove("loading"),t.classList.add("failure")}),n.addEventListener("load",()=>{ce(e,t)}),ce(e,t));let r=document.querySelector("#tsd-search input"),i=document.querySelector("#tsd-search .results");if(!r||!i)throw new Error("The input field or the result list wrapper was not found");i.addEventListener("mouseup",()=>{te(t)}),r.addEventListener("focus",()=>t.classList.add("has-focus")),He(t,i,r,e)}function He(t,e,n,r){n.addEventListener("input",oe(()=>{Ne(t,e,n,r)},200)),n.addEventListener("keydown",i=>{i.key=="Enter"?Be(e,t):i.key=="ArrowUp"?(de(e,n,-1),i.preventDefault()):i.key==="ArrowDown"&&(de(e,n,1),i.preventDefault())}),document.body.addEventListener("keypress",i=>{i.altKey||i.ctrlKey||i.metaKey||!n.matches(":focus")&&i.key==="/"&&(i.preventDefault(),n.focus())}),document.body.addEventListener("keyup",i=>{t.classList.contains("has-focus")&&(i.key==="Escape"||!e.matches(":focus-within")&&!n.matches(":focus"))&&(n.blur(),te(t))})}function te(t){t.classList.remove("has-focus")}function Ne(t,e,n,r){if(!r.index||!r.data)return;e.textContent="";let i=n.value.trim(),s;if(i){let o=i.split(" ").map(a=>a.length?`*${a}*`:"").join(" ");s=r.index.search(o)}else s=[];for(let o=0;oa.score-o.score);for(let o=0,a=Math.min(10,s.length);o`,d=he(l.name,i);globalThis.DEBUG_SEARCH_WEIGHTS&&(d+=` (score: ${s[o].score.toFixed(2)})`),l.parent&&(d=` + ${he(l.parent,i)}.${d}`);let m=document.createElement("li");m.classList.value=l.classes??"";let p=document.createElement("a");p.href=r.base+l.url,p.innerHTML=u+d,m.append(p),p.addEventListener("focus",()=>{e.querySelector(".current")?.classList.remove("current"),m.classList.add("current")}),e.appendChild(m)}}function de(t,e,n){let r=t.querySelector(".current");if(!r)r=t.querySelector(n==1?"li:first-child":"li:last-child"),r&&r.classList.add("current");else{let i=r;if(n===1)do i=i.nextElementSibling??void 0;while(i instanceof HTMLElement&&i.offsetParent==null);else do i=i.previousElementSibling??void 0;while(i instanceof HTMLElement&&i.offsetParent==null);i?(r.classList.remove("current"),i.classList.add("current")):n===-1&&(r.classList.remove("current"),e.focus())}}function Be(t,e){let n=t.querySelector(".current");if(n||(n=t.querySelector("li:first-child")),n){let r=n.querySelector("a");r&&(window.location.href=r.href),te(e)}}function he(t,e){if(e==="")return t;let n=t.toLocaleLowerCase(),r=e.toLocaleLowerCase(),i=[],s=0,o=n.indexOf(r);for(;o!=-1;)i.push(ee(t.substring(s,o)),`${ee(t.substring(o,o+r.length))}`),s=o+r.length,o=n.indexOf(r,s);return i.push(ee(t.substring(s))),i.join("")}var je={"&":"&","<":"<",">":">","'":"'",'"':"""};function ee(t){return t.replace(/[&<>"'"]/g,e=>je[e])}var I=class{constructor(e){this.el=e.el,this.app=e.app}};var F="mousedown",ye="mousemove",N="mouseup",J={x:0,y:0},me=!1,ne=!1,qe=!1,D=!1,ve=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);document.documentElement.classList.add(ve?"is-mobile":"not-mobile");ve&&"ontouchstart"in document.documentElement&&(qe=!0,F="touchstart",ye="touchmove",N="touchend");document.addEventListener(F,t=>{ne=!0,D=!1;let e=F=="touchstart"?t.targetTouches[0]:t;J.y=e.pageY||0,J.x=e.pageX||0});document.addEventListener(ye,t=>{if(ne&&!D){let e=F=="touchstart"?t.targetTouches[0]:t,n=J.x-(e.pageX||0),r=J.y-(e.pageY||0);D=Math.sqrt(n*n+r*r)>10}});document.addEventListener(N,()=>{ne=!1});document.addEventListener("click",t=>{me&&(t.preventDefault(),t.stopImmediatePropagation(),me=!1)});var X=class extends I{constructor(e){super(e),this.className=this.el.dataset.toggle||"",this.el.addEventListener(N,n=>this.onPointerUp(n)),this.el.addEventListener("click",n=>n.preventDefault()),document.addEventListener(F,n=>this.onDocumentPointerDown(n)),document.addEventListener(N,n=>this.onDocumentPointerUp(n))}setActive(e){if(this.active==e)return;this.active=e,document.documentElement.classList.toggle("has-"+this.className,e),this.el.classList.toggle("active",e);let n=(this.active?"to-has-":"from-has-")+this.className;document.documentElement.classList.add(n),setTimeout(()=>document.documentElement.classList.remove(n),500)}onPointerUp(e){D||(this.setActive(!0),e.preventDefault())}onDocumentPointerDown(e){if(this.active){if(e.target.closest(".col-sidebar, .tsd-filter-group"))return;this.setActive(!1)}}onDocumentPointerUp(e){if(!D&&this.active&&e.target.closest(".col-sidebar")){let n=e.target.closest("a");if(n){let r=window.location.href;r.indexOf("#")!=-1&&(r=r.substring(0,r.indexOf("#"))),n.href.substring(0,r.length)==r&&setTimeout(()=>this.setActive(!1),250)}}}};var re;try{re=localStorage}catch{re={getItem(){return null},setItem(){}}}var Q=re;var ge=document.head.appendChild(document.createElement("style"));ge.dataset.for="filters";var Y=class extends I{constructor(e){super(e),this.key=`filter-${this.el.name}`,this.value=this.el.checked,this.el.addEventListener("change",()=>{this.setLocalStorage(this.el.checked)}),this.setLocalStorage(this.fromLocalStorage()),ge.innerHTML+=`html:not(.${this.key}) .tsd-is-${this.el.name} { display: none; } +`,this.app.updateIndexVisibility()}fromLocalStorage(){let e=Q.getItem(this.key);return e?e==="true":this.el.checked}setLocalStorage(e){Q.setItem(this.key,e.toString()),this.value=e,this.handleValueChange()}handleValueChange(){this.el.checked=this.value,document.documentElement.classList.toggle(this.key,this.value),this.app.filterChanged(),this.app.updateIndexVisibility()}};var Z=class extends I{constructor(e){super(e),this.summary=this.el.querySelector(".tsd-accordion-summary"),this.icon=this.summary.querySelector("svg"),this.key=`tsd-accordion-${this.summary.dataset.key??this.summary.textContent.trim().replace(/\s+/g,"-").toLowerCase()}`;let n=Q.getItem(this.key);this.el.open=n?n==="true":this.el.open,this.el.addEventListener("toggle",()=>this.update());let r=this.summary.querySelector("a");r&&r.addEventListener("click",()=>{location.assign(r.href)}),this.update()}update(){this.icon.style.transform=`rotate(${this.el.open?0:-90}deg)`,Q.setItem(this.key,this.el.open.toString())}};function Ee(t){let e=Q.getItem("tsd-theme")||"os";t.value=e,xe(e),t.addEventListener("change",()=>{Q.setItem("tsd-theme",t.value),xe(t.value)})}function xe(t){document.documentElement.dataset.theme=t}var K;function we(){let t=document.getElementById("tsd-nav-script");t&&(t.addEventListener("load",Le),Le())}async function Le(){let t=document.getElementById("tsd-nav-container");if(!t||!window.navigationData)return;let n=await(await fetch(window.navigationData)).arrayBuffer(),r=new Blob([n]).stream().pipeThrough(new DecompressionStream("gzip")),i=await new Response(r).json();K=t.dataset.base,K.endsWith("/")||(K+="/"),t.innerHTML="";for(let s of i)Se(s,t,[]);window.app.createComponents(t),window.app.showPage(),window.app.ensureActivePageVisible()}function Se(t,e,n){let r=e.appendChild(document.createElement("li"));if(t.children){let i=[...n,t.text],s=r.appendChild(document.createElement("details"));s.className=t.class?`${t.class} tsd-accordion`:"tsd-accordion";let o=s.appendChild(document.createElement("summary"));o.className="tsd-accordion-summary",o.dataset.key=i.join("$"),o.innerHTML='',be(t,o);let a=s.appendChild(document.createElement("div"));a.className="tsd-accordion-details";let l=a.appendChild(document.createElement("ul"));l.className="tsd-nested-navigation";for(let u of t.children)Se(u,l,i)}else be(t,r,t.class)}function be(t,e,n){if(t.path){let r=e.appendChild(document.createElement("a"));r.href=K+t.path,n&&(r.className=n),location.pathname===r.pathname&&!r.href.includes("#")&&r.classList.add("current"),t.kind&&(r.innerHTML=``),r.appendChild(document.createElement("span")).textContent=t.text}else e.appendChild(document.createElement("span")).textContent=t.text}G(X,"a[data-toggle]");G(Z,".tsd-accordion");G(Y,".tsd-filter-item input[type=checkbox]");var Te=document.getElementById("tsd-theme");Te&&Ee(Te);var $e=new U;Object.defineProperty(window,"app",{value:$e});fe();we();})(); /*! Bundled license information: lunr/lunr.js: diff --git a/typedoc/assets/navigation.js b/typedoc/assets/navigation.js index e51618d8..82021c32 100644 --- a/typedoc/assets/navigation.js +++ b/typedoc/assets/navigation.js @@ -1 +1 @@ -window.navigationData = "data:application/octet-stream;base64,H4sIAAAAAAAAA5WZT3PbNhDFvwt7dZtIVtLGN/9RFU+s2mNnmkOmB5hcSajIBQcEFaudfvcOCUkACXCXuu577ydwAZIg9P3fxMCbSa6SDFaizk1ykZTCbJKrRGIGb79sTJH/5LStxCy5mk0+zS7fz/67OKW/AlZKu3ChsjqH6p2ttxSX9nKZFj/CVFPtZS6SdCPzTAMmV99PcVUaqbByhJ3QUryeGAe9y7qcegMQee7SqxrTNmDTIs+7yY/+0F9Vth+MNiKRTQXuRDWYtjKRX4kUBtONSGTXUJlaD8cPOkHYCMwG441IZCVKM5htRCKrXv+GdDhtZSJfgq4UDuatHOT/8giFMOkmXK9tedSCvYMq1bI0/r1i9uWJ4fQubvr+06+TD/7CXTb+x/7691m+g6NlsjIC44vK0o4OalXK+LqwgEYlwpUsZC60NNGbyiKch54llUFeRaaprY+ap2UPkeaiqhxiGSFNpr95Y/gCGiF/LCv/gWpANzfnCXMy9abnw0d/ohvvixGGRDkXxdqJXGbCQOuO9tnSOj6y188Ctw4EWBfVu6bWDfmdmeMu7Oscd1Q3F1qUm96gj1GnUYTPdSEwDLdlKtd/sR2Dtv7zhMp+g9dbUYRZW6eSNyrb3ypcyXV0zp1MTXbj+gL7Ukk0g5ijgQM9Q9XbHXQwVqYgxOXwl3KnxY/gWecRPJ3C/C5SuEYjX0qlVsSAIj4WawxgMwAO2/VxWIY2DnJ8qfCjC5w82kBqlGa5vo2Dzgs1YqwdF4dcgODG6Cwc7F7LioE5Cwd7kDtAqDhg18ZBl1BtGKCzcDDi1ncyCZG5AbL9noECLQBBy5QgdRw0qt3lkijPQaE+C8wIjpM5CNFoJ7NbhXtcqSjjpFKIx3YTTVyOb+BBxCX5Bgr01G7LCZBvoEAEgg+/wLoANIJ5MIU2Cmo3AgTON1Cga9zf9j4p7ZfASeA+AK5xf1+INUQAbX1E/k+ZgYrk2zqXvxHpFjCbY130EZ7EUlS2v0ZUdgICUEc9j3WTi3/gSVVBgwZs59Hnq5VMJaDhf6FjHfMri/73vqMuYp/6ccqDwKwQehvDHLVzOGQ/A9M55FOD/gBDwX3fOfyl2gGDPljOoTZXyVAPFp76FlLeuNRhN9VPHspsegdogoePrbLZNwMaRR5/gHVVjmX3cdH17kljKEPr3ddYjsQ1BAc9tjoue1vrPJ5vlHGMO6khjc1tT+ZoC8AsvBpb5bNt4/tv4CPCEzlSsxEamGFPGkP5ui+jiKbO5dtXot3ABCvW11gOlnXQj7bIJrWsBvrgSRzFDjPWCadwjKfu+YKNP0XOFILkc+cU2wafg8PrMOdvsmIbhr7O8exZzuSuzznWx+WnA/npyPzlQP5yZH42kJ+NzD/IbTAbTuEY34Qu6jI2G05hD6Ht30zxv3MOGvFXDvgHiy4JuOsf03VjRRk/c26F8PDzf7TeFt4zGwAA" \ No newline at end of file +window.navigationData = "data:application/octet-stream;base64,H4sIAAAAAAAAA5WZT3PbNhDFvwt7dZtIVtLGN/9RFU+s2mNnmkOmB5hcSajIBQcEFaudfvcOCUkACXCXuu577ydgAVEg9P3fxMCbSa6SDFaizk1ykZTCbJKrRGIGb79sTJH/5LStxCy5mk0+zS7fz/67cGktfrhoobI6h+pdU20JLnmRpBuZZxowufp+iqvSSIWVI+yEluL1xDjoXdbl1BuAyHOXXtWYtgGbFnneTX70h/6qsv1gtBGJbCpwJ6rBtJWJ/EqkMJhuRCK7hsrUejh+0AnCRmA2GG9EIitRmsFsIxJZ9fo3pMNpKxP5EnSlcDBv5SD/l0cohEk34X5ty6M27B1UqZalUdpRzL48MZzexU3ff/p18sHfuMvG/9jf/z7Ld3C0TFZGYHxTWdrRQe1KGd8XFtCoRLiShcyFlib6pbII56FXSWWQV5Flauuj1mnZQ6S5qCqHWEZIk+lv3hi+gEbIH8vKfzAa0M2X84Q5mXrL8+Gjv9CN98UIQ6Kci2LtRC4zYaB1R/tsaR0f2euvgJW/mY+9tvVer73cs8CtSwHWRfWuqXUTfkfnuAvXY447ahUWWpSb3mSPUadRhM91ITAMt2Uq1+/LMWjrP0+o7Dd4vRVFmLV1Knmjsv2twpVcR/eKk6lN0ri+wL5UEs0g5mjgQM9Q9U4HHYyVKQgxHX4qd1r8CJ6RHsHTKczvIoVrNPKlVGpFDCjiY7HGADYD4LBdH4dlaOMgxx8jfnSBk0cbSI3SLNe3cdB5oUaMtePikAsQ3BidhYPda1kxMGfhYA9yBwgVB+zaOOgSqg0DdBYORnz1nUxCZG6AbL9noEALQNAyJUgdB41qT8ckynNQqM8CM4LjZA5CNNrJ7BHjHlcqyjipFOKxPXwT0/ENPIiYkm+gQE/tcZ4A+QYKRCD48AusC0AjmAdTaKOg9iBA4HwDBbrG/W3vVdS+QZwE7sXhGvf3hVhDBNDWR+T/lBmoSL6tc/kbkW4BsznWRR/hSSxFZftrRGUXIAB11PNYN7n4B55UFTRowHYefb5ayVQCGv4TOtYxn7Lo3xM46iJ2RRCnPAjMCqG3McxRO4dD9jMwnUM+NegPMBTc953DX6odMOiD5RxqM0uGerDw1LeQ8salDqepfvJQZtM7QBM8fGyVzb4Z0Cjy+AOsq3Ise46L7ndPGkMZ2u++xnIkriG4ILLVcdnbWufxfKOMY9xJDWlsbXsyR1sAZuFsbJXPto3v/wIfEZ7IkZqD0MAKe9IYytd9GUU0dS7f/iTaA0ywY32N5WBZB/1oi2xSy2qgD57EUewwY51wCsd46t4v2PhT5E4hSD53br9t8Dm49A5z/iErdmDo6xzP3uVM7vqcY31cfjqQn47MXw7kL0fmZwP52cj8g9wGq+EUjvFN6KIuY6vhFPby2v7NFP8b6KARfwGBf7HokoC7/jVdN1aU8bvqVggvTf8H2iG1KjMbAAA=" \ No newline at end of file diff --git a/typedoc/assets/search.js b/typedoc/assets/search.js index e6c4ad98..95fce0b8 100644 --- a/typedoc/assets/search.js +++ b/typedoc/assets/search.js @@ -1 +1 @@ -window.searchData = "data:application/octet-stream;base64,H4sIAAAAAAAAA72da5PjtrGw/8vs181GuFEaf4vtXFwndlKxT/JWuVKnOBI0w7MUKZPUzK5T+e9vARClRrMbpKDN+eIdi41uEI3rgwb4r4eufesfvvr5Xw8fq2b38JWQm/cPTXmwD189/Ol0KJuH9w+nrn746mFbl31v+9/6Xz+8DIf64f3448NXDw//fj/qMEJedGzbph+603Zou4Smd7EY0Pr+4Vh2thku2bmaESupL3ZebddXbSq3764iGfq3bbOvnmdeIUhkaO9sf6qHlPaLRIb2figHm1I+CmToPnbt1vZ9SvtVZJn+whhVXAz8z/8Mn4/J3J/1f7hIJsx8GDPDvM5gmz5dU2NrHy4JFhgdc8hVsbJ5LZeU5Gj7kuB+28M+Zdc/zagctnlNqQ2PM/TuuvItpfj8PEPzoRy2LynVo0BOabzaZkj69yKRoX1fbu1PXVU2z6e6HGa6Qko40+Z///378jhnaxTK6WBst2+7Q9ls051AJLbMjlzp62BXNmX9+dekjatIhv7O9nauh7fLO/hI92tZV7uZPh7IZFho2mSDC48z9FaH8jmZ7VEgQ3dvnw+2GWYbA5LLsLRtD04wPTsYRXJKqamSVef8PKN1vdmnbXlI6b5IZOS7bstdSvf5eYZme0iXyPl5Tk23n5Kaz88zNL+V3eGU7CovEhnaj127r+q5idJZJEP/zg52myyZi0ROW62tTRbNKJDTO1Y72ya7xrPAMt1aPGq1ApMRuy/h5L1qdvbTWCLjI3KdxE07Du3uVNv+t/7X5EqrANmo+iEaJPenZuu6tFHPKEAoBG8bckJa6KtDVZddNXxmbVxFsq3s3Q+cfvfwRs2pxQSr/p3/a2ZBAdL4TDNdrK8Pt5n8MKZZZHhmaj9bMegsgGRfIhcLKg+djyhhZk7k6nEtzBVKfGv7bVcdIZNwKcaMXB/fVtewme/d878c/TuShqDAbaaYtdDYc7gfl3YcR9v1YIJ09YpXEp6mM+ezQOpGS1qkOzzN1V3WNae4rOtcrdFUC6l1z27Sq651oUXV4LXsqvLp4qt2SSXgc+3WWFyu3bNcvU/tjmqvXq97lqv3pSQ7+VBty7k+ntfbPv0vnKQgzeFpru5n2w+nji3m8+ObtIMJQLuzdT+dAfifl7bkcYn3vUtFdbNBWyQ20+2EbIEuzlwH0/+yXWPrvxx7MPUZbOfq28XWReZGO9HY4f9ZauPdWTpl6JqEM+lsLbYYhO8zeKj6vmqelxu9JrjPcHuD/94F4ZsNwlrja92PQzmkzF6F7qo3p8Of23Jnd9/HrWvW3rtpyuQ7g3fis/Kt3VdNXl5w0jszc7Td1gGPZxte8obMEEnvzMzQDmX9Y/Wr/UPXHr4vm2pv++GGHHHpv1S2/mGr55dbKus7IumXyowr9HQvwWbmmvTOzBwyGvC7KFFGBsCuJGpA43oeJr+111i6YTm1sWjjMkqWLNYlr/XuInmbtZi3RP5LGOsX+4y1RZNvwlaagC+yRRJHwlSSPC6zVPWLXuosd+c72cVvtbBPZq2xewmEvdk9Bbbmg/b8E73lGn7+jfgikQaRskVt9pwrjulM3RGbqHgvpDXvyqH8bk77RSjHQv9SEvvpsYFRJkt/ReyiIfVVYhdtpnzIaABUPElsl9bflc3Hn+ZNALEcKx/tcdp5xBbOIlke2LZHO1uJrlJ5b9CV/fdl/3H2Na5yWe8ydNXOTocq9C4XqYU2ZCGFjr2+wOM36Idd6tNpv7dzndJFKN/Cj5+b7SIrZ8EcS2XXlZ9njIwy2foXvAiUy7HjutAFvewd2n9q//jX/15gYpTLtbOgsIBYVu36PMy2wFEm6y2q/tj2s736RSqvjVf9t0HD7NgNBXPeZ3jp2rfv9gvNTaVzbB67qpkbUkaZHP3bum3mPDTKZJVZ++PQwaUtU1hXsRwrI3WfsQLEsvqwp7nWEiSydG/bWeVBJFf7NPxtqp6PgJvRv5trDUEiSzfYD2J01zwTmNHdzI55Tf6I9/x9+Wl2uDsL5VqopiFQUwsVH/80Y6H/cVvW5dwcB4jlWVkwM78I5VkQ387q9yJ52uW8dpmvXc1rV/na9bx2na/dzGs3+drna39/R92vmtk+8yyTpX8gDmEg9UEkV7tcoF7eoX+2dM4yWfpfn//atrM9/0Uqa/7rgi9+an88llv7w1w9nQhnW/yh7aaRmYSxs1yWna4td9uyH36aBsghS5Fk1gyyJIApmkCWCVY6o91Wc5XgLJI3+62OX3/+e1mf5ufAUDLLVttsy9mSGoUyLbyKuYnYRSjXgtz91JXNkpXdVDrf5iJT2Rbmpt75M+8FE+875t3b0+HYtbOFc5HKtNGf5jqsi1AWJ7DHYexa52BBLJpt7a3q7TdLKtZUOo+EhOM48+agYJ6l1x/aH2ZnFkAs08q8gVzd7VwnGSRydNv6NKM7SGTp/uVUzg1Vo0yW/m56lg9p7/jzfDO6T9u62tmyWTA3wbJZ9j5NDwUgK5/4UwGzustm9211mOvUI8FMSwcxb8TL5Ojf7+daQpDI0l2Xw2DnuomrVJ6NdnbPdpTJ1v/tbFcExHKsPJfDy+wuz0Uoy0Jny8F2v1/QgSDRO6wtM5Rpo5qvulV+3a26Beq7O/T3f3Ah4XNzESCWZ+W7Zq5HH2Xy9P9Q/jCrP8jk6K9t+fHz3+ZHVCiXZ6fvlzQNKJdrZ4GJXO3ttqz/Zvtj2/TWjZxlXf1KH2FFNlMJ83Ly/GP1fGhnY10iwVxL7X44zFLwSDDX0unw+9lZBZTLtDNvIV+3WJB/cUfeq21Z/65Z4Per4B2WfpidyEeCd1j6y9xoBuXusPP/ZqczkWCOpUM5fH+a6+ouQnkWPi0gq1epTBvz+vN1V4dZIHGVyrJhZ1fQZ5Es7bPbFofsXYtD1SwpnYtUno2ua7u/EhG52MpVLsvOLNk6ZFOtw3wjy25hjZ0bJYJElu75BXqTvy5v2mHJVAuI5VhpG/un2bHhIpRpof9z9XFuBg/EcqwcZ1vAMbvuH+e76GN+/3wkrn3ByvmbX2Z0d/NrglEmT/9st3AH7e7stnJXa822gUgwz9JsMd1RSi5psUB9ka3fx5L/bm7JBOXusLPMSr6N6lf7dVVXjZ2NdZkI51v8wZad7Ycf3HGyp9mpJZcmz767NHG+VEepLBvzkOYORtO1p9mFzCiTpb//pZvN/lkmR38/3/r7/Nbf22PZuUjHRXtcU+ksm4ugQn8XUeir57mp81kkT/u88jt0z+0D3xFL1NfV7NbpKJOlfxHG6e9iOC71sT7NHgm5imVZcTvHP7Vf+wCbuZifiXCexZq40wwbqhP3ms3on++o7umnfjlRN+Bh/afUHXhLLOy+rdwJFktdB0kZi+Uz7Vo7f6TtIpVlYyi3cweQRpk8/cTtalh94n61Oe3u9NXuxyWdSyyaZe30NGfES+Tpnls050evzIdx5kdxLgiyvCPGcqDuFUTaU/cKzmhvv55fw16E8iz8oW5nQ+quUnk2vps9fzPK5Ok/znUQZ5GF2hfdsj018MH95zdi7m68kPDDJQUwHF/b7gIl54byqd0Pl3TLzM9cTlc1u2qbk41rwtx8xE5eGDA53BkqeWqqX2YjWS9C/7kKFUx8CP9cSvU3c3EwH6J0d1UtLgfnCnZjVr5INWOzdE5+d55QVejbbrC7H8MlyD/ODoBkgrxKuGTWc5XKsfH2YmcnpaNMjv5fbdcuAchQbqGda7U5PxotjHfDnZ39krgeA19IGZKAI07hMsrx5wxdktYlc3QpWpfK0aVpXTpHV+RfqM09SOqD15z8sSuPL/HNfGNduT5Kalt62QlSt+i6E5A7UBzxAWp/mcvfme+sYKNION9q1RxPww8tdQcEthmJ5ltsT8Nik7HsnW+58A2/xNstfbP7bL2hu9M4W28zF6Utqp12KMlLHSY18yp4g7VFsxvO1Ifxj/mJM1AxST3TNH+snpsyuqI02Tih+H+8ICKDH+L/XTLxg8WS0jVXRL4fPHV29xdfvf/Lfp6vnamU/zcFR9j+wD65Fid/ZnNSnDdZ4KOfiI1u/EbJm9foho5tkDeeUHaSd57M2+rL13kPnYVybRw7u6uI7ypgM1e5Oy39rl9Sekg416b9ZLcnIkAam7vK3Wlp2dsh4Vybz3b4zt18ebC7qhxsmBTO9ydsstx8nG/GyclLMumd+Vlq/DZLVzN/g5d22eZ06H/rfkrPyK898N9WXOJ3/hGdJ2+U1id4ffzAltAneX18z57Qp3h9Kkef5vXpHH2G12dy9BW8Pj6aBemDN1d/25Vv+GsO4OZb8DhdBePPStZgBZfQ9m6UpLMN88aYKuvjS7nI1CiZbaoun2z9zeJXi8SzjfYv5a59W241ls82u28B90/ZOwvmF2rV2D/5hdKyQoXidxn9R7UbXhbbHKWzTR7bqhl+hJeIpkxC6WyTPgDob/DLESmTUDrbpPsSxF9d3hf1Je8i8buM/tk1tuVGL+J3Gf2dOx0aHWKaswtT3GX6j+G7HMvfGCS4y/DX7acbrI7Sd1ao+vPzwuHpHUpwXyGXC5srEM7vcau6vulNUYJsw6fefuuueVhkFAjfY/CbU/e6sBpB6fzCLbf2hi4iEs826j4ldIPRSPwuo38tu+FGw1GSbOPuI0c3GI7E72g4zbPtbvFunCDbcPjw0g2GUYJsw+ePMt1gGae4xTTePvq6vUZChn2jr9tPN21A+SEf6fC/JbWAz47BL3BfPzlmm9fzzuSSnavfE1/x/n3z+kX2qkY9izapXEa4xty1bz1xWcFF/1XgZt1Nu5uyjIvi89Obtb613cdUhi/Pb9Z8rMthTx3/uugGEjdrL58tEeh0UT0+vt2D5fajbXZTZHV14VXiZu3uAoaKOKtzUX4VuFn3vqqpezIuqi/Pb9Y87P83UR7np0u0Ltp7iBTP7yE4cZ8FLv6G2SmmzXw4iyf2gEaDM1E27X7fbztL3FlzsQxFbm9ebuwg7jG+tq6LwO0O9+x1XxPH7q7FBmX+A86/qJ/flfMeuWYnuyJMTX54nQkdiE3PVInn4/QMTdJ6SPAFLL+VfaIfPj/98k50ise34dmuE/dZ4Ija6Xj0sV4LDX2ACdImZ4rt3NUvtXsVv8tqXx2Wv2qQvcve4VQP1fDSWWLblDEbJ7nL+pt9ek4MiOPj/0DldJrHV+J3Cvxr+EzcUT0jU9f6OdOnwWT5VTS2fZb/ApZn+1NkeRxZ00P5EsudbXa2S85aY9MgwX2WHay/we5F/N6SbnapRcukoM/i91l1MqkB6/L8P9M0j6fxjfhdt/FVjqc7GycwBlrnfE29pLureULrY/v8ArbLXXlMrgiw7WuCOy1vU/Vm+x+qNNtrtlIvsOUry4EMiyUMfBglk2ZmCmlfl8+JZRWwNkreY+2j/x5ywt5VYIlrUFTbN2XzWiaUX55n6P7uUD4n3D4+ztX8LRWsGWv/NhWmiSxERwuO7quUX891AVgs0843xGe+kI1vEl/4wvpjAviHcmv/iL48HzggeHITU/y63X2mNYInN2n8U9nsaI3gyU0av+uqntYIntyk8feHNtp/DNrOv96k6Q8eimNn+B8z9HxzAl+ah7rcgwx931ad3RJvip7e7N/oyztX57qfb9L1Rz8jRJrCjzfp+Ru8Az5ocT/dVmJ+86rZHcruI9G4xkc3ty5GJ3x0s87fNU07lIRj44c36f2L32UhPHt9sHiT4B/26ZtyijrCz19kqwCoWrRbcM4RG3jV7Kvp9WvISBDJ0W9re6BAOTRwlcmx0A+dTZf4u4tIjv6dfSVPK0IDV5mFFtBEYOioE4DQwiiRp39bHsunqq6GauZFkGCmNV8ryyioh6+9ZTKaZ85Wb4ehaoh5bOT/q1CeFR+ZlzQxSuTpP5Yn6gOZ0MBFJM/CWxS8Rhl4Swaszel/iSPyKAMv6Si8qYUorr05HWxHfY896kmAVI6VfiiJy2HirqRM3A2T1u5dOO/kXO018UHiSHmd+BrxXLm003tT4mJp+VtTprpBNHF4+E08DIHIBPh8eTwxHnZSCheOP+cssqPE02lZ/t+NovnGDnAnPmnrkNqVX2Jq2wHPJ02dJfNNvXHxtVNbS/qqtLEXNoJ4am1Rx5U2B+55S5pK3PTGmIFtyZ8R+a7Zt5Sxy8Plrcj/M6vq3VmMzvY1T2xIwjfl9mWJnatkpil3IeS3tq86S7oDmYul7zD5h649fF821d72ZI0j7KIkdxj/c1vu7O4f6ARy2jpOk2keLul5g0FquYkJ0Xi1cKJ5Bhr+x5tWgb9rPiOKGFRdfr9VW8wNL8r8z7fq+nu1s+1Ul//5NqLkrId1LX5R+Og2pvRpsF1T1mTxxQ9vy6s75Y8z6X67jRoErvn7BlzpckYG1yc3afxH2R1OR0Lh9cFN+s5XyHhwQWjFj9O6wXDwR9vYrtryc6tI4IbJVePCJ8kudKrx3VWabuNxLlM7I38t6fkBYRTK32G2/1gd/9CVBzrynLAbJbjT8E8VPfoyZs/itxmF1cWxvm/tYB1N4uvMVGp5xekwupvX+w6koV+NyDZXicpPQZCuu1wO4mR3Z6JqvMAuurpzSTZQwi+QEe50WSILySNmy41X7emnF3cLeVvf5AuU7t5s9NuyvqkExgT3V8X+4211sOfp33KznR1O3W3Nb0xxr+nEoMHZpkaOod/9pup/UzUvtqtCi8wp/tRwwvqAHFO+TIbSAw1bG+nR5stliRuCUhmajEPZ2cGD0/e2f0kPTFeJ5YPSR2uP3zWvZU2v0Qm17+IkfMsAGc5rFdhwTouYz8Rsa8DZyGsJ8xmZbwU4J5ktYFlWUrWfysjNNZ/MBq71bqc/XeuvEstrfXLkQwoXjHogk3k1HZvMqenzmZit6TgbeTV9PiPzNX3ig7yaviwrqZpOZeTmmk5mA9f0y1n3dHVHYl9k3crpzaqH+D1yKyOZobwauTBL89WSzFNm3bwhU6kKymbp5lrKZ2i6Tu63XXWcr6wTweXVdeFKkdJ/02IRv0nuBJ7MSN4cfmGWFkzj6dLJnMkvzNaSyTyZr+z5/A0ZS0/p2WxlzOr5TOHWdA4/TLekSOgLt6Kp7htaUJz7vNZDZCCn5SzKymyroUojq8Usys58ayHyk9lSFmco1UqY7NzcQrjMTKZFzVD9eGzb/cy0KBb7ctMiQm/etAi9R/a0iMpQ5rRoWZYWTIuoPOVOi5ZnKjkt4rJ0+7SIzRCuqn+uXm1j+5n1aiz1xSoqoTarnqKXyK2mVHbyaumyDM1XUipHmXV0eZZSVZTL0M01lM0OrqB/tOXM3tZV4gvPMZDiGyYYINN5LQObzmkV85mYbRGTEshqDfMZmW8JOCeZrWBZVlItgMrIzbWfzAau+elaf2uN352Z/QJ974AsX8dnqpbt2VoV1aggl2umTF3PiG2Vszczzhusuoqto9G2Z5DLNbO7rsWWOQyK5xq16KRZwuBVNNtzzeAu0W73izwHhHMN1ucRZ4k9IJtr7hl+aDth6jn1je0FPkuPI/eOIXeOH/ePHfeOG19gzLhvvLh7rEiOE+4MHT9OXJ/eMDNKh9wglYtCbUAmc6djE7OLpmLzhhPNB5u8tfkseOtU85m88c3NZz4D6eaDc5DRfJZlgWs+VAZuaj6kedh83EFgvvlcn36ZgDmkbz5QDmQvt+Fgm8sazrzhuXAwbHdRGNiC9033TpO3XdA7zRutz0efyVaCTULhXIOpuTq2NztXJ80l70lZYG3u2hSQ7pLBnF5wxv6H+ahhIidzNzZ9tLUdljVhIPt/UPqjtfn7DUHKSxa/RPlPcnD1QOL+ISI3Mz5IjMs4S7eOyws6mVtK5Pr+4gtmIT0yT71y88i8LAvcyExl4KaRmTQPR+ZwqoUfm+HzL4j9JmoXDphRdjOHzKntRYPmEtMzwybx1gsGziWGE+14avTWlrzozVNtmXjvm2fZSzKRbs3TXGS056XZ4Fo0nYmb2jSTBdiq4cEovm1PpW6Yf7tUNyh9Nyag6ziR4URFu8Vu8pz3crOJBsZZvrWZ3VYGbGNLFcRtTW55htINj8tRRvO7LUtcI0xl6KammMxOtM/gb3hP7DSA519m2xcrnD1tGGWRM/jLqayrX/mjalOrcYp80+wdCFOb6TsQlhjj70CYWpu5A2GJucTho4m5uWNHC8zt64q8uWJq7CyZb6o8De3XnSsgdktgYnSSJt/8042mn76M2W3bDF1JX2kwNQqk8032L2V3XP6iUPyO4q1P9N7LtGCD5B3v5z7efUO/E8nf0RGc6A2HaS9wSkQqLDDU2OdyqF4XWgPSdxSpPVbk5z6J0jyL5ht7rZoBXvqQNHcVzjf4sd2V25euZXaMJjYj+Xyzg92+NBX70dap3ThBvuFjW5ddy5zUm1gF0neYrD7ZGl48ljZ5lb7JZHxvg7/XlZ9HRQJfZCI11bjg3gaYS/pN+Fe4Ne/4HnNa1bu5L2DMzL7K/sAtOKKp11Uu28z501N/sMN2mT2UIMcwe0lZDMVT15PNTISiz84zBsrk5+bnis7dsDJfXmepHBN+Bfl12dslNQEL5xjcukut/E1H5LQmmkRFojnG/KHlclhobyKd/X4/2qavhuq1Gj4veslYPsdsfL09Yyt9s/3MzKLdD29lZ/8L3WzPmJqK5zXhsq7bLTMexe0YSGa938fq+Lu6bt/oIQMjhatolrfij8dx7kp/Qi5t4hldpM7YuIplvUdJbwVEb1Em2P/MWqTdzbafs0yOevd91Tn1Z5kc9eFzpnMGLlJZlRawqtlaG8suNAe+Krqz+/JUg4vUrp8WHR8lZzg4Rvdvtj/V9Hr68nT5lIm/zwJoSt04CbLElfa2pRsUtjIK5hp6aj/9uNQWkM015xQvtgeF73i/ha92n5G/lW8L7QTJ7IqRuFkqqhdz10mlzaTiwqGZ2bjweTMLS+4qmmusvHzEgA1DhQZj8WyjDLTAxlK4YtbIc/zNi4Sdi+R9phY34Vg81+hMxDs0uCTiPW2sYyYa2FKXmmwseacnu9tVDXtyJH6rq3CuwV3VD2XiGBW0B2Szi9GW5CW1k2K0iY8iz5upOeiJzNRJ3Dn/NjMXLEZvtORixbS58PnXJcYukjeYSn1S5q9tb3+w+HJYQiI9/0pY+L59nbFwlsi28Pv9vtpWthnSZqBYtq2v6/JX64okYegic7OV63d3UnYIqTssXYpl1lokuXg+7nT8l/18bCv6MwLw+fI5+RF+XyKl7d0x9Z2JKHMsKncAhe4LCHNX6ftNMnMl3mpqxrTEcGrQmFqdHTaWmGSXPlN76cUPYwzXRX5teH1679oQaUqtDUGWcgpo+dpw3hCzdsJmUmunRUYStfqGtdO8qY/nysAeo4HWoHCuwZkVBza5ZMVBGsVnZfgqfX16b5VGmlJVGmTp1iqNraSr9LyhFO7AtmZxx7y5vf8o4mKLsfgd77jw9e4zwjRbwk6q2c6bSjZbbG2+2c4bjD9KljCW/jbZvKGZ/gGbW9I/LHm7mWNS8RsuOSaV7JBCvDHfJcHn93ZKE12pbinK2K0d09RSumtaYsynXGZsFM03xlbyqbF0NV9ijOmSpqZSndJCQ0y3RNpKdUyMuen3Zv2uFqrf42dnwbPFC6S/2q5vG77BwOf3NpiJrlSDiTJ24zbd1FBys26JKW7LbmoquXG3xJTbmiNb5tTWKHqTsaUnDRlzc8c842Q+g1yvYPfL6lxk+MM52VLrM6cKOy56eiYXXTKS+uZsnPerF/odSN9Tpcl+kqrRfD+50BDTT5K2Uv0kYw72aHxfdmsvxnUvizuWvC5lcWcy343MqU9GAcztzbBxGERNzTTChxpAGzOhBmkTR9u5gDyOO0E7sWiOsW38bTXGzkUqx8RQHWw/lAcyvC6C+UAws+B6Zi2BCq1PrSFmNq66jt6aiDaszkI5BtijOtBA+pDOTDNkj+dEDTF9MGc6hsO9vSOIxtufmq1ftP3W/051dv98/1A1O/vp4at/Pbzarne8+KsH+UF9eHx4/7CvbL3rH776Oeh//7BtD/67uv88P/u7vy/BSQSR364e3v+8el+ID6v15p//fP/zmMI/8D94MfHw/mfxXhcftNCRmIjE5MP7n+V7s/qwepSRmIzE1MP7n9V7Iz8UKxOJqUhMP7z/Wb835sNj8RiJ6UjMPLz/2VCvYCKx4uH9zwUlVkRi64f3P6/fq/WH1WNsdB2JbR7e/7yh3nQTiT0+vP/5kRJ7jIvXlbYg/SCQI7wnBFV4IvaFcGUuJFV+InaHcMUuFCkZe0S4khekT0TsFOEKX5BuEbFfhCt/QXpGxK4RzgViTVqPvSOcF8SG1Bk7SDhHiEdSZ+wj6RwhV5SkjH0knSOkoKxL1F58gyF9JGMfSecISfpIxj6SzhFSk9ZjH0nnCGlInbGPpHOELEjJ2EfSOUKuqfopYx9J5whJ+kjGPpLOEfKRlIx9pJwjFOkjFftIOUco0kcq9pFyjlCSlETdmu/XFCkZ+0g5RyjSRyr2kXKOUGQ7UrGPVMG2YhX7SDlHqILqllTsI+UcocgWp2IfKecIRXpTxT7SK66H1bGLtHcR6XYdu0hL9oV07CKt2BfSaPDxow/ZJevYRdr5QZNVSccu0gXbJevYRdr5QZOVTscu0htuiNGxh7Rzgybrh449ZFZsv2BiFxnnB03WYxO7yDg/aEPl08QuMs4PmnSmiV1kvIvIvsagKYJ30YaUjF1knB/0IykZu8g4P5gVKRm7yDhHGLKCmNhHxjnCkG43sY8K5whDerOIfVQ4RxhyzC5iHxXOEYbsa4rYR4VzhKFnU7GPCucIQza4IvZR4edxZA9SoJmcc4QhO4Yi9lHhHFGQjbiIfVQ4RxSkj4rYR4VzREH6qIh9tHaOKMjxYB37aC3YUlrHPlpLttatYx+tFTdnX8cuWmteZeyitfNDQTb3deyidcFOq9Zovs1PGNaxi9beRWT1XMcuWnsXkdVzHbtow0/qNrGLNoKd8cce2kiu3DexgzbODcX6vdYfHjcqlow9tHFuKMimsYk9tPEeIpvGJvbQxrlhTb957KGNXxKRTWODFkXODWuyaWxiD22cG9Zk09jEHnr00wWyzj3GHnp0fliT9eMxdtGjc8SarB+PsY8enSPWZMN8jH306ByxJn30GPvo0TliTfroMfbRo3PEhuy+HmMfPTpHbEgfPcY+evQrV9JHj2jt6hyxIX30iJevzhMb0knhGZT1DYleGa7QEnblvLEh1x3hGZR1/tisab1oGbtyHtnQ68MVWsiunE82pLvCMyjrvPLIrOPRYnbl/PJIuiw8g7J+kkc6LTyDsp45kG4Lz4CshwuPtN8m4MH55pH2G0YPHjA80mt6DB88YqDnpQLjBw8ZHmkfYwDhMcMj7WOMIDxoeKR9jCFEoBAr2smYQwQQsaK9jFFEYBEr2s2IRggZkBHtZwQkhMcOYkU7WmJu5AewFe1phCWEhw9iRbsakQnh+YNY0f5DcEJ4BCFWtAMRnxCeQogV7UGEKIQHEYLBbYhSCM8ihKA9iECF8DhCCNqDiFUITySEoD2IcIVQgfvRHkTEQnguIRj6pjD88x5kABziFsLTCSFoDyJ0ITygEAyGQ/RCBHwhaA8igCE8phCS9iBiGMKTCkHzOIEwhvCwQkjag4hkCA8shKQ9iGiG8MxC0GBOIKAhdIC3tAcR0xCeXAhJe1Bjgus9KGkPIrIhPL8QNKQTCG6IM92gPYj4hvAUQyjagwhxCE8yBE3rBMIcwsMMQQM7gUiH8DxD0MxOINghPNIQNLYTiHcITzUETe4EQh7CBAJPexBRD+HZhlC0Bw3G8N6DNJgTiH0IExAi7UGEP4SHHIImZAIREOE5h6AhmUAQRHjUIWj6JRAHEZ52CE17EKEQ4YGHoIGVQDREeOYhNO1BBESExx5CM9sYyINF2EahPYiwiPDwQ2jagwXeS/Ee1LQHERwRHoEIQ3sQ8RHhKYigKZZAiER4ECJokCUQJRGehQhDexCBEuFxiDC0BxErEZ6ICJpoCYRLROAlNNQSCJkID0aEoT2IqIlYh70w2oMInIhATmi6JdZ4Q8x7kAZcAuET4SGJoBmXQARFeE4iaMwlEEQRHpUImnQJxFGExyWCpkgCsRQRYAoNfQTiKcJTE0FzH4GQivDgRBS0BxFVEZ6dCJrACARWxCZsaNIeRGxFbMKeJu1BhFeEhyiCRjECERbhOYqgaYxAkEV4lCJoICMQZxGepgiayQiEWoQHKoLGMgLRFuGZiqDJjEDARXisIta0BxFzEZ6sCJrPCIRdhIcrgkY0ApEX4fmKoCmNQPBFPIaNadqDiL8IT1kEzWoEQjDSYxZB4xqJGIz0nEXQwEYiCCM9aBE0sZGIwkhPWsSG9KBEGEZ61CJoZiMRh5GetQga2kgEYqSHLYKmNhKRGOlpi6CxjUQoRnrcImhuIxGLkasQXUB6UCIYI0MQCE1uJKIxMsSB0OhGIhwjQygIzW4k4jEyRIPQ8EYiICNDQAhNZCQiMjLEhNBIRiIkI0NYCM1kJGIy0mMXSTMZiZiM9NhF0kxGIiYjPXaRNJOROELkHCJCexAHiYQoEZrJyEmciA8UoZmMxKEiIVaEZjISR4uEcBGayUgcMBIiRmgmI3HMSAgaoZmMxGEjIW6EZjISR46E0BGayUgcPBKiR2gmIxGTkR67SJrJSMRkpApxPrQHEZORHrtImslIxGSkxy6SZjISMRnpsYukmYxETEZ67CJpJiMRk5Eeu0iayUjEZKTHLpJmMhIxGemxi2RipBCTkR67SJrJSMRkJB9eIhGRkR66SCaoChEZqUOoFrmPLhGRkR66SBrfSERkpIcuksY3EhEZ6aEL83rIex65sK+HvKfXqddD3tPBe3SNQzxG6uA9usYhHiND6AkT64V4jPTIRdIMSSIeIz1yIfdvJaIx0oRYO7pyIhojPXCRNG6SiMZID1wkjZskojHSAxdJ4yaJaIz0wEXSuEkiGiM9cJE0bpKIxshAY6j9bIlYjPS4RdJkSiIWI4vgPbpeIBYjPW6RNJmSiMVIj1skTaYkYjGyCOGStLMRi5Eet0iaTEnEYqTHLZImUxKxGFmwcccSkRjpYYukIZZEJEZ62MLoRd7zqEXSvEsiDiM9aqH1IgojPWjhQkKR69bBdXTNRBBGroPr6OqGIIxcB9fR1Q1BGLkOrqOrG4IwMkSw0BhNIggjPWeRNEaTCMJIz1kkjdEkgjAyhLLQGE0iCCNDNAsd0IsYjPSYhY6BkAjBSE9ZJI3nJEIw0lMWSeM5iRCM3IRgZbpmIAQjPWWRNJ6TCMHITfAfE4mMg5aD/+iagRCM9JRF0nhOIgQjPWWRNJ6TCMFIT1kkjeckQjDSUxZJ4zmJEIz0lEXSeE4iBCM9ZZE0npMIwUhPWSSN5yRCMPIxRJzTHkQIRnrKImk8JxGCkZ6ySBrPSYRgpKcsksZzEiEY5SmLpPGcQghGecoiaTynEIJRq9CF0qHlCMEoT1kkjecUQjDKUxZJ4zmFEIzylEXSeE4hBKM8ZZE0nlMIwahViAKk48cRglGeskgazymEYJSnLJLGcwohGOUpi6TxnEIIRnnKImk8pxCCUZ6ySBrPKYRglKcsksZzCiEY5SmLpPGcQghGecoiaTynEIJRnrJIGs8phGBUQDCbDTVRVAjBqIBgaDynEIJRISyGPPKkEIFRISqGlkUARkn2UJtC+EUF/EITQoXwiwr4hSaECuEXFfALTQgVwi8q4BeaECqEX1TALzQhVAi/qIBfaEKoEH5RAb/QhFAh/KLOh3foMyT4+E7ALzQhVPgEj2KnoAof4VHswUQ1OcMTvEdXTXyMJ5zjobmjwid5wlEemjsqfJjH0xXm5ZDvAnihXw55LpznoWmmwid6wpEemmYqhF0Uj10Uwi4qnOtZabKRIuyiwtGeFXlwRCHsosLpHhp8KoRdlA6+o3s3hF2UDr6jKyYCL0rzvkPYRXmywpYF8p7epMoCeS9gF1oU+c6EU3N0lUfQRZlwcI6u8gi6KE9WFA1qFcIuypMVRYNahbCL8mSFLmMEXZQxiTJG0EV5rsKVMYIuynMVRdNihaCL8lxF0bRYIeiiDLtsVwi6KM9VFA2WFYIuqgjeIxd+CkEXVQTv0S0EQRfluQp5Dk0h5KICciGPwSlEXJSHKorm1QoRF+WhiqJ5tULERXmsomherRBzUR6rKJpXK8RclAcriubVClEX5cGKomMIFaIuyqMVRccQKsRd1DocXDVkvUfgRXm2omgIrRB4UZ6tKJr/KgRelGcriua/CoEX5dmKovmvQuBFebaimOO+CLwoz1aUErQw8qBnK4o59IvAi/JsRTHnfhF4UR6uKOboLyIvytMVxZz+RehFBfRCt2xEXlQIfiGnvoi7KI9W6MsaEHVRHqwoxWQBOW8TnEfXIURd1CY4j65DiLqoTXAeXYcQdVEerCiaFStEXZQHK4pmxQpRF+XBiqJZsULURXmwojRdzoi6qMdwepyuQ4i6KA9WFH3yViHqojxYUfThW4Woi/JgRdH4VSHqojxYUTR+VYi6KA9WFI1fFaIu2oMVReNXjaiL9mBF0fhVI+qiPVhRNH7ViLroleIrv0bURXuwoujjuxpRF70KVwDQN6Eg6qI9WFE0U9WIuujVmq8bGlEXvdrwdUMj6qI9WKHPNmoEXbQIDiSHHo2gi/ZchSk4xFy0CP4jK6hGzEV7rKJoCqwRc9Ei+I+5mwD5z2MVRVNgjZiL9liF8TVCLjqcRGJkkfc8VFE0XdaIuGhPVRRNlzVCLtpjFUXTZY2Yi/ZgRdF0WSPqomW41oGuy4i6aA9WFE2XNaIu2oMVRdNljaiLlsF/dM1A1EV7sKJouqwRddEerCiaLmtEXbQMd3GI96r4YASSRQ70XEWtJSmL/BfuTFkrt9hYy3g2oBFz0eHalLWmhZH/ws0pNFvWiLvocHnKuqBGQI24iw7cxe1JEX0R4i46cJf1huyMEHfRHq4omi1rRF50uEhlQx6d14i96MBeNuQEVCP2os/XqdAtEF+o4gGL2tCdIr5UJdAXuhrha1UCfKGrEb5Y5XyzCl2NJner6EQ1wterBPZC03CNb1jxgEXRNFzjS1YCfWHKArkvwBemLJD39GOqLJD3An1hygLRFx3oC83vNaIvOtAXpsYh+qIDfaHLAsEXbTRfFoi+6EBfmLJA9EUH+sKVBfJeoC/09oRG9EWbRO+J4Is2id4T0RddpHpPRF90keo9EX3Rgb7Q8c4a0RddqEQfh/iLLjRfFoi/6MBf6LJA+EUH/MKVBfJewC9cWSDvBfxC7xdphF90wC9cWSD/BfxClwWiLzrQF7osEHzRAb4wZYHgiw7whSkLBF90gC/0XpRG8EUH+MK8HnJfYC/M6+Hrqdap10PeC+iFez3kvYBe6N0zjdCL3iS8h8iL3iS8h8CL3qS8h8CL3qS8h8iL3gTv0QM7Yi96k5q5IPqiA31hygK5L8AXpizw/WKbVFkg7wX2wpUF8l5gL/R2pkbsRQf28kivdhB70YG9PJJXmGnEXnRgL/R2pkbsRQf2Qh940Ii96MBe6O1MjdiLDuyFxrUasRcd2Au9S6kRe9Eer2h6l1Ij9qI9XtH0LqVG7MWs+PZnEHoxK779GURezCrR/gwiL2aVaH8GkRezCtf60VesIfJiAnmhlxkGkRcTyAvdWA0iL2bFzzwNAi9mxc88DeIuZpWYeRoEXoxIzDwNAi/GwxVN7wYbRF5MIC/0Ys4g8mJEYu5iEHkxgbzQSy6DyIsRKf8h8mI8XdErsoMxCL0YseZ7I4PYi/F4hdzMM4i8GMFPPQ0CL8azFU2fCTIIvBjJBksYhF2M5Fd9BlEXI/lVg0HQxUh+1WAQczEysWowiLkYmVg1GMRcjMcqmo4RMIi5mDNzoasmgi4mQBemaiLqYs7Uha6aiLoYxa/ZDYIuRiW8h5iLUYk1u0HMxajEmt0g5mI8VtF0cIVBzMWo0PLIYdIg5mICc6EJqUHMxSh+1WcQcjEq0fQQcTE6seoziLgYnVj1GYRcjMcqmo7FMIi5GJ1ofQi5mHCfLR23YRByMTqxaWQQcjE6sWlkEHIxAbnQrMog5mI8V9F0+IhB0MWE+23p8BGDb7j1XEXTkRsGX3IbbrmlIzcMvuc2XHRLh2MYfNVtuOuWPudn8G234bpbOhzDTC68DZcS020K33kbLr2l4yYMvvbWhKuJ6YqEb771aEXTcRMGX37r2Yqm4yYMAi/GsxVNx00YBF6MZyuajpswCLwYz1Y0fXjPIPBiPFvRdNyEQeDFJMCLQeDFFOy+u0HcxRSJmCWDuIspgvvoWoS4iymC++hahLiLCdyF3psziLuYdXAfXeUQeDEBvJBxHgaBF+PZiqYPBRoEXsw63D1IV08EXoxnK5oOCjEIvBgPVzQdFGIQeTGBvNBRWQahF+PpiqYjSAxCL8bTFU1HkBiEXsw63BBO12WEXkw4bkTH9RrEXoznK8yt2oi9mE3ipnCEXswmcVc4Ii9mk7gtHIEXs0ncF464iwlnjehaj7iL2QTf0Y0PgRezCb6jGx8CL2bDb7gbxF2MRytaPb7Xmw+rDXo9xF3MY7jinW58iLsYj1Y0HSBjEHcx4aQRfWLAIO5iPFrRWtJ5Ru4LN+wyWUbuC9iFRkUGYRfjyYqmj3QahF1MwC6ajDs1CLuYgF3ow5cGYZciYBe6QywQdylWwYH0Ze0IvBSrRMxggcBLcQ55IfeXCgReigBe6GihAoGXIoAXsl0XiLsUHq1oOrKoQNylWAUH0nfHI/BSnMELSTEKRF4KD1fI8+UF4i6FRyuajlgqEHcpAnehI5YKxF0KEfpO+nJ6xF2KcPEufWC0QNyl8GhF0wc7C8RdCo9WNPMlAcRdisBdmI8JIO5SeLSi6ZCeAnGXwsMVzXxSAJGXwtMVzXxVAKGX4hzzQnobkZfC4xWmty0Qeyk8X9HMFwsQfCkkf4F8geBLIXUqF8h/4ZwR3TMXiL4UsuB75gLRlyLQl4LuMhB9KWSiAy0QfSk8YNHMdxkQfSk8YGFKDsGXQqX8h+hLoSQ/WhYIvxQqzF7oBojwSxFueWF8gvBLEfAL4xOEX4qAXxifIPxSBPxCB6oWCL8UKuVAxF8K9cjz1wIBmMIzFk3HkRUIwBSesTDeRvylCPyF8TbiL4UODqT7OQRgihDzwpQcAjCFTrVABGAKnWqBCMAU4ctCdJxcgQBMEQAMHSdXIABTaH4KWiD+UgT+Qk7yC4RfioBf6M4W0Zci0Bc6Vq9A9KXwgIVk4gViL0VgL3RYX4HYSxHYCx3WVyD2UgT2Qh8aLxB7KUzikG2B2EsR2AtTLRB7KQJ7Idse/vJQkfAd/vZQkfAd/vpQ4C7kAq3A3x8K2IVcUBb4C0SerNCLuQJ/gyhctkt/rmjyFaKCO/FU4M8QBehCH/Yv8JeIAnShD/sX+GNEnqto+rB/gaBLEYJdGNch6FIE6ML4DlGXIlAXOtSzOFMX/+nSV9sNdvdd+ITpzz9fvmD+r4f/OX/XdD1+HPVfD+uHr/717/cPehX+ldc/zPmPYj3+8Xj+Yy3CH+4M8PmP4vzHmNydwgx/GD3+cU7uNuTCH/Kc3HUFX/3r3/++fkvV/Z97v/Kph/l+VNeMuw9tMIm2bZxKg1RilUj1EiUzMJngku3K42A7mNCdVrykdGcUuZS7yFwBzUku0XPkSLeavaRya1g2VTPAdBKWiTupzqSr68gaeC999qb7fgiX+PhSRkYLkN5disKka8r686/Ra4oNKJsNm65ph9J/2zcuIg2L6Fz33Nw2/KF4fUPVH9t2H/n28RGWAevb5nPk2zX0reYTjV+2BgYLAQwmXv5zdUCVw50uAEnZytF8fq12to2TQldLts10z4fyU/Sm0FPCJNJVTZTuEaZj62PXlVHBblbXZI/JVP3nZhulBMXKu7EXURt1H44B2WRLtJcoGey3+NLsFUoGOy7J9kC9RslgxyXZZtYblAx2QJJt1X3sOPepGZCMrdt91bzE6WBNkWxN6fttWZddnHQFvcA7Dw977iNBICHblnBdcXso1y5kzfpvKFHRwErNd7JD2cgonYDvJ9n3G0pUpAK+nmRfbxhs47rJuF8rYL/Gev80tE+d+xR7Y/u4mxWgaRjNNo3X52Pb1nG2YaOSXMqncvvRNlGVVbCmu5sqzlOPzTjjOM9B3AZdUqltToe4+1vD7o+r1OfUfTyywjyxznsqh+1L03aHuCRgg1dcg/dph7Y/lltUIALOPNz3jRgF9amLfQecb9jJ2FO7izpfDVOpc1Fv1DinGyd3Bfse7e7zddCOyl/B6clmmYKnuvzVHts+niAZoKlgh95Yk93vq21lm2GqzUBtXKfltG3bZl89R4nh4OHiIPnEz7YfTl08mEuQWhVsK2l3nz/az8e2iid8Dv6CnLPtod19rssnW8d1egNts1PhkLjZHcruY+xNOB/esLUSJGd8qeA7pKrpqOfiycai4pBQFTdGQlWH9tVOtAioZUm5uHeaaFlBLaniOZbdQLkHlm/yZTrbn+rYegGts7OFp/ZTbHIDTZ5XiOZxbPzSjLPr8+qvGJeTBbseemo/deVbPHWHLeZxVCWLUfmoc1xsOuTCKu+3bYcWTyuofuyvFFsGzMCnYOfJuq9ry9227IehjXtsOFlLmG7f+niV6a5KAwMNm/K038cJ18B1j2wv5JPhidAaTGge2d7v82CjEtrAV1xxrWRbbl/sod2hyu0iR8Dci2v0PnVvm74aqtdqiMcp2P+4wBBOBV57wbcNleMytSjGms5OLbblsXyq6mqo4tJQsNa56y+45P0QVxQ4PVdsOdgKTa7g9Fxx7t7WJarVBRzpNGuuro5Pn1/L+hRPtKMFu2JLvG6bKB2s0u5jrkyytm7jpgAXuvKRrWHt4VjGXYAEswN2mrdtm22JnAFn9orPKJ4DwI76XJM2ZpykssXUNv3QlVUzoIokYEXi39qlPm2HuMzgUiFkYH3O0eY8j5YjsFMjp3MX17BGhg7VWA1ns8Yk8veKVtkSVgPFjRcuIVpnwzmS+5JkKuHQlU2PpxjuE5ZAAzeaIMDoPk95TaXZJo0Ao4C1z32ekkl2PMV0Ec6N2QFv27XHKBmcumq+bZ0Ox65FpQr7b80NNNvToY9XUe5zmSAh14fsyiHChHCy+ci9nktURdksQJfD1lOXbEKCoBdWnPNcyqF9jn0BJ14sfN3Zsq7bbTnEkw8Fye2afU/7dIp7EDgJ1is9dh689X2JpnzQMts3n9OhsRgMJi6Wjkt6HMb1aVwf4FikWR+55G9Vb6kGDscVzee933bVcco4QGrNzl/G1HF/CUftRNYHu43LGq6cuKYTksX2FCT0epycGpZ27exrtUUzDQUn6Ru2ilW1X/XiooZDnOb6i1016UM3sNWvxsGEXcSfNVTNYLuD3VXlYAfb9G0Xr3FgtZfsGnJX9UPZbBEGB6Uwbneds+Ui3c6LCl7la1QucD4qNF+or03bIB6o4LimWU+28VwDViHBgrUdWjvFUO381qwXu/KNxILuPvRr4a3YCtyVb0/tp7j6uRvPQVq2zXTl23MZ7/e4K81B0lS2z6gEWYZD5IodeLryjVhNr2GTZZcrLnF7nOw2SbhdI9nZvUvtGQ0yDWd0/FDkE9efn7HtNazpK7Z/m+wGA6tsp25re0CbiCpqWZvzGlyz5W3rU1yx4ayJXTjbw5Pd7aomZmkaVJCCrVv2UMXbnhvYibCJ2snIAadA7l7P8KaPI3ZgG4Y9HNFaFDaKYs2ma8qn2sawG7pJj9uXWovxj7FrG1GsNqNMcZ4l6PVq/OPc7enN+MvoPrNajX+MVEeObHfc7jdq3MHX46OCdUFzOtgOTX4UdJ9it99sE3e90e5NMKzEZZHCVqBfTmW8JoZ0WbALE5+u+nUCpzXcnjHsXMB2+9gonEUb1vFdh+YdsC8r2GmePW3ramcdw0Z7CrCRCpbt21eLOqNoL2KsQOz0w36y21PsZAm5pvtITzLlZFouIVyV7ATZfjrGrwvnmIZ1zqdj2ex21SF+ZThhcl9uZxMfRJwOzpUMN1zZT4PtmrKmNvnh4oxleXs0oY6CP86dkhmX74U5N2QXMMbru0Q5ELAC4hh37U1Cyzh5ILRs4F4aS3+dFioLUchJ6kXApJ/KBJz6F6kCHifjhBLYd2t2Nu+UnMcQKiMwfqTgarXT8WxLKhOPMKiDXegGBcQuEpxhJM1XXdVT+Yf7xGzf6RRQGxXQOrvTERJT+0hwZrbmukKfvHKbNT31Ao9wGE0qOdj+hSoBuDBj16BOAbHbAnsYwy7JXGJiuwKScDZ8yqUduqpsnk/1ZOyKdhtSWT+9Hsq4Y4XDCNfD7ffx0gUumgXf9Ku6puezcP26SiQf8NYInF7IMe6QXTUGDdSOLYz7YMnXvkJhCTDbbAWrmmcUNiijhSo3UoeE21NXx4nhK/N9tU+8qzq7nc5xYbbZXZKggWrbcIrMbrSH5NO6DePNCnZ3Y1+Xz/HACaulKsb56ZqtoLUfqeJKCqeVLE/d11XUHjScjRqWA+zrFnF3uKcpDFs9XDqMHmD8peBH9RbFehagjCSLvZ7L4cWirMIpIBvG4capuNXAHpbFos8u7iZuAJCPqPV5+VGw6+CggegnYagDu4B/to3tqi01zMNpDxvBQ4yuGnYX43pqc4mD4Wr1WRPR/8Aewcylp9ok7BTYXvucnooNgCXJAisKwWi4Wi3YKfGzHWbBH9zbY8drBOYVjLVR7D7Oc1ceX/yec2QSLpkk2yM8d7YccIuJRknWYSHldGEKJ/SCnaW+lPF4AxfTY7S92YzREkk11JgHN8vZmBaXmJxfQl7IRkq61FR1hdiOje9xiam6CiN62ChClxhtdG9gRU0VFuZmCiJyxY45L9aFjcT4A45ajxdwdqEqI1das8Uf77druN9u2IXry+kQE2nQ0XGuQptsoKqNkX56dZlgnf8oRmJUqHENOmKqggXY1WTyCFfyLF+aRL3DPWA5hoSmk+MdSAWLU7H78j5t+/S/dos25gu4QmDjtqvGB63EO3NwrcxGcgXpaFEDk/Gp8A6RjOMfxr0atqevGsRTDewoz7WArUlNNVRxhydh1LFiiWzVHE9xA4IDk2Zj1X26pt2hl4bzc8lOa3ziOCFczki2d6/a0/DS2f6lrdGyAM4rxp0oM7I1w/ZZVTdpGpBT8fWzq+J6CZdFmg39csnIrh32zmzPVPXnDb3o3eFERLAbBFW/d5Uk3jSGkyrBRltVfdXEvBXSR1GwNbrHm3QQOwqWkHy09lg1r2VdIR9DRMTut320x8ihcJdtw1WDj7Yr+0PZR0wEIik2BOij7Rpbt8eoNpgotjKZEi254KSSnV2MQchosIWzQjnO8NkAqo/trty+dO0hHu1gF2/YvPsJRjzswsnJJVZ1bIkFi/K9JiLqDHae7JGJkWTFBQGP9hhxCWhl38WWHz93eAMNulCwWwO13aOZEmhRBYvIaxTnKmAkvWDbv0s2ndjC3XvBTgvrqrHT2ZKEkw7JnvJyid+q3fASp4V9PbvRVFdx6BrE8ezOg2OM8boTliuLq0Y0GVcHODSwQU91W0a9DWQ+Y2Mal82S3Vt0WuLeGY6m7ArLJZvs0cCJrGSRlYt+qjvbH9umt26DitxXEzBCTSSy/xynguMDOwmv22eBeCYcH9jdqbp9rtwBNHTOBvZjgq8hIXGDAjrgSkUkytsnRvQIcjLBAs1z2k84MWzBbEBO3T731fOhjUc2AQ+QiISrn/t2P6BToQLOawVLJ13i0wHv6Bk42WG5JB4YFQwj1GzHenBnqeK9PGBtjNHlapVPTUSBQKTI7hAcyuFwirtJ2O+IDdcCcOHC/lGwO0KH8lPY2sJhBXBSOB7XMGNclBHjH+xpskP5qTqgyM8iOrDNl8CnyWFA2BeJDVfNDhbN2uCYJjasv2wcgavgYT39OG6hsmOMSz85owJ5CTvCHOxQ4mWmhEklO7VFJ6UFxJOCjdc5VGH3cWdxOBzcVdHjERo9HmjQxeWow2VBN6LMsT0YdqV2qJpJXYAkULBbXoeq6atfUU7hspZvhJWLmTjGQ6OAUVyCnVMfqr5HoUXRET+2CaIQaTiBF+w2tSON8XIfgoJLk2Mj3iekUsH9PMXuCPh0T2Vvj2U8PdKQuBt2yPXpq2YfXxEABwTNbub6tNiugt7R4wadHgGEHo/Z6BFn6vEsgi7GCjteQqLXIz8bSbvejGvr1bghdEFrY7iQGdGQkWOXp8Zf+MFicjrJROV3noGd9bDDXFBTPTclXmNLuOMi2cVnUDCU8eIKjrFjxBc7TT+rcOdCTp3dtafheBo+2s8IeEC+w07bva5X2/U4eBTG4ki+dqJBEAY8CXZNezjVQ+U4S4mOhMPVKbui8xKw7OD24xgSx8LvxsZTULgIF+zGfGOfywGvGeBBIsNukzT2E7q+Ba5quESot5Ew8kGx0GwSQAajSgW7zG3aYbrsg3MLwQKnpo1GVBiiwsLT5nTY2X3V2B3RKOE6jC3S0yEshIj00Y4Akz5w38iXEYM/9yXjIFqwBDooojZi4OYfuw0ZklObKRCtsrEeITm1nQLDDtkjTSH5ZGMkOmHCzmPb/b7fdjbejpfwJhjFRgK0jX1Byyo4rxHsNnfb2L6uPsaMEU40BDv7wwANbo6y+SQWBxH64dL5Dplg17Dls9OTkBr15bBZsbURT6Mgsxbs7NadS49eMRqL2KDRY3nqUVwwdD4bOuDTxd0+LFTF9jRH221tM5TPloAg8Bw8m2Pb7dG9XQqyG8WesHUpHflAs/HoeO4IItlO52i7HgUjw4lUItd921CNPJoycNONkBxt78MBk52oHKtPtsYH3+CmkWGr8LEuhz0aiiSMBlXsnUHHOr4kSsFZmmbDSSZ3ZkgYq6nY64IC5kZrF1lEQzSfti47RFo03Ggx7P7UZOUMgytFwqI7Io8qUTTiJV40JMUr4Gi8ZS/FOsajvIB8RvBNvbO7Kh5nJRxoJQuEzimnceWwj5EsMDxOaDs87Cn5WtShWgQrkWAP5Ry7dougMBxe+FSou4brBzb06di1+6qOe94oMpdJ163izV9ojEU1nYgTwSUFC6s6GSeCmJnFSZ2KE8HVB4uEOh0nik4IcR1qZ+JEsEaxhKMr4g4CbiazgKJDIf8qctR6vMSQ3VLtyibeLwSFMu6ASXaG5lJPTouBdsu/q6P78WwWzo5ZltPZeAWhYVsv2IOAnd1WrgWh5QfcjJXsGa1pQ4e1jS9ZW5+KOB2scOyZtM5HLaLIRxhorNgIis728dVB0TUUZ7LB9mguJKFEF+LBzkkmitenjM+sCHikQrIdW2fd0OguQmlQnKiAx0sku18WFLjEth8atzv4hLY14LpWrtgqOZ3+gFnBuR2xm8mdHU5dHC8NxwM93ntr2ElYZx0iiYsfnuWQ7H22k/APOA2SLHnr8EaqhuS4YKPEOupCNggBtBo58HiwuOBLvT2hrTN4rl2yiMWn69AKW8IXkOycoet/6VCBwY6ADavqHY8jjvvB8Ep2u7wvXxHKizZn2WTbEg3EcBqn1QWEspnetkcbTyAhQGNZ9DRsGi4tzeMYuHe5o3nkpIW6hPKxebLP7v8nRQmDQy+HStmRGWqh8Ah0C3uNBVQyveUR7i+w93P2eHyAQWuSDVN1tL1zp3iJayxgIJZkz0r09lhFG0YaXoxj2PM0vR2GqkEHJeBCUbGMsn8pcVA+PO2qWF7hErZvRIwMbHnsunwyMEHPsPO9/qXsjtPr2ODykm82xA43vB5EssTMgfs4GRxD2SD7vjogbAD5HHs5Tl8dqrrs0I1mEKxfugheRdwIIa+QLJvB9/XKVYRluf4er4Nhj305Ys7COZd6Z/uqQ3QHzso13+KqX+2+aw+Hsqn2No7oUSYKkWUrYvXrGQ29+TgkFNcLOQJfQT7a2g5oEFlFR3XZTvljdXSXBb3F76/hgQTDRoy41PuuPKBbYCCq0WNAth5P7uvxIndtLlvBo0wx7qxdbjwYo4v0eMpYb8adtfGmF3MJB79EBF/mCyxHdlkfqgPa/oUTtHHU0fqyJThmczxqo8fzX3r8ZIEe7zTT40pJX6LWx2B1s7rMZsY53HjBpLmEQ7BB1X1tbXzPFkRUbE2tq3hZJ+F5FckyFCK0RsLzGpKvWe1+ONanGAnDIETJbrW4pG9lZ4lYUA1vUjBsEJW/CWpow53HcQQbbBeSPfjeH2sUeA57T8nuZeGJoISTBsle+Nf/csL3BMLlq2TJY0i421Xu8kwceCHhIk/y041fTtYimAjHYMluBfVDuf0Yp4N9Nhu00Q8I3ysdnWBNpIvRLuzjEmliygVqEMvy+iFuZFJEhzzY5jLgO/Dg3JrFY/3Q2TKeKcYDLu+ArtrZ3bR1i2jiy7ZRnzwqHbjs4idtp6fYGmzWLMxDl/VJOG+S7OUG/el4bDscQwY7EjUe9VHjjTSKXWqiC/MlPM0r2d4T33sv4QpNsjswg92+NNVkiqrhqsSwUQrhaGIEdsHMJrzoGIAizWVdzFXNoC6+91JCtifZq1pCUomSwgbBLlJDUoWSwsrJu8on1SgprGls9EJIuq/jDQAFJ5SKXcCFxHjHVqro5BHXIIf4SEh0uyyb5H/Rff6wL2Tb7vDStW/Vnjz7AvelWSw4ICAv4Rk0yRdPdbD9UB7is+mQ0RbsZubQPqE9JAmBomQp7dDu6za+EVfCpalkI9iGyR5bFO3BHtQd2mM8skWn/NiAraF1fWoc3wdpoWCp49AOZZ1aUEQnWfhsn7W4NQXKB4zkZkOrLgqI5Uh04JUtgQ7NCRTEPIrddyBvx5XReT92wXlqql9OKCHs2NmorJNr6oPdnaENHqGi4w7sbvWpmc6Donvf2BOop+OuHCz1nRHYLBQbUhTS4+t6YcNQbFtE13nEX604r1hYtnDq7fbUvaJQERi6odiByEVSuAtXY84K35dlu/70G5oCRt3AeT3FHlMYFUziWuE8jT1/H6VGyxJ4QIxlr6/u2nJ0HhaOheNERrLn+F7LrnKIL+pf4L42X3a22aELX+FkXbHgioqzBHk+z7jU5Y9xDsbW+um3v6LJHJvKh9HEEynoNdZtb2V3OMXT8qiiPpyvcOHmrSH9lOVCRMQu0N7KPk62ipbrXBm5ZJPYadgdGbZh+6TnWJa9RYdNNOyYDDuMvNmnbbwgifrT8UuL7BZ8SE/cdAIPEGp2g/TNPj3HYedwNazYAy4uHb67HFJodoZLDHYS8mvJBki9vVi0cI9CZdmd1cnBQQVDn9XjiMYud2JePmfCDt1vbfcRX0sVXQbNNa1fbddOQhQlbCSSxvD/fP9wrI4uUt8+fPXzP//97/8PHjFyre//AQA="; \ No newline at end of file +window.searchData = "data:application/octet-stream;base64,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"; \ No newline at end of file diff --git a/typedoc/assets/style.css b/typedoc/assets/style.css index 778b9492..9d619a64 100644 --- a/typedoc/assets/style.css +++ b/typedoc/assets/style.css @@ -10,6 +10,7 @@ --light-color-text: #222; --light-color-text-aside: #6e6e6e; --light-color-link: #1f70c2; + --light-color-focus-outline: #3584e4; --light-color-ts-keyword: #056bd6; --light-color-ts-project: #b111c9; @@ -35,6 +36,7 @@ --light-color-ts-set-signature: var(--light-color-ts-accessor); --light-color-ts-type-alias: #d51270; /* reference not included as links will be colored with the kind that it points to */ + --light-color-document: #000000; --light-external-icon: url("data:image/svg+xml;utf8,"); --light-color-scheme: light; @@ -50,6 +52,7 @@ --dark-color-text: #f5f5f5; --dark-color-text-aside: #dddddd; --dark-color-link: #00aff4; + --dark-color-focus-outline: #4c97f2; --dark-color-ts-keyword: #3399ff; --dark-color-ts-project: #e358ff; @@ -75,6 +78,7 @@ --dark-color-ts-set-signature: var(--dark-color-ts-accessor); --dark-color-ts-type-alias: #ff6492; /* reference not included as links will be colored with the kind that it points to */ + --dark-color-document: #ffffff; --dark-external-icon: url("data:image/svg+xml;utf8,"); --dark-color-scheme: dark; @@ -92,6 +96,7 @@ --color-text: var(--light-color-text); --color-text-aside: var(--light-color-text-aside); --color-link: var(--light-color-link); + --color-focus-outline: var(--light-color-focus-outline); --color-ts-keyword: var(--light-color-ts-keyword); --color-ts-module: var(--light-color-ts-module); @@ -116,6 +121,7 @@ --color-ts-get-signature: var(--light-color-ts-get-signature); --color-ts-set-signature: var(--light-color-ts-set-signature); --color-ts-type-alias: var(--light-color-ts-type-alias); + --color-document: var(--light-color-document); --external-icon: var(--light-external-icon); --color-scheme: var(--light-color-scheme); @@ -134,6 +140,7 @@ --color-text: var(--dark-color-text); --color-text-aside: var(--dark-color-text-aside); --color-link: var(--dark-color-link); + --color-focus-outline: var(--dark-color-focus-outline); --color-ts-keyword: var(--dark-color-ts-keyword); --color-ts-module: var(--dark-color-ts-module); @@ -158,6 +165,7 @@ --color-ts-get-signature: var(--dark-color-ts-get-signature); --color-ts-set-signature: var(--dark-color-ts-set-signature); --color-ts-type-alias: var(--dark-color-ts-type-alias); + --color-document: var(--dark-color-document); --external-icon: var(--dark-external-icon); --color-scheme: var(--dark-color-scheme); @@ -183,6 +191,7 @@ body { --color-text: var(--light-color-text); --color-text-aside: var(--light-color-text-aside); --color-link: var(--light-color-link); + --color-focus-outline: var(--light-color-focus-outline); --color-ts-keyword: var(--light-color-ts-keyword); --color-ts-module: var(--light-color-ts-module); @@ -207,6 +216,7 @@ body { --color-ts-get-signature: var(--light-color-ts-get-signature); --color-ts-set-signature: var(--light-color-ts-set-signature); --color-ts-type-alias: var(--light-color-ts-type-alias); + --color-document: var(--light-color-document); --external-icon: var(--light-external-icon); --color-scheme: var(--light-color-scheme); @@ -223,6 +233,7 @@ body { --color-text: var(--dark-color-text); --color-text-aside: var(--dark-color-text-aside); --color-link: var(--dark-color-link); + --color-focus-outline: var(--dark-color-focus-outline); --color-ts-keyword: var(--dark-color-ts-keyword); --color-ts-module: var(--dark-color-ts-module); @@ -247,11 +258,17 @@ body { --color-ts-get-signature: var(--dark-color-ts-get-signature); --color-ts-set-signature: var(--dark-color-ts-set-signature); --color-ts-type-alias: var(--dark-color-ts-type-alias); + --color-document: var(--dark-color-document); --external-icon: var(--dark-external-icon); --color-scheme: var(--dark-color-scheme); } +*:focus-visible, +.tsd-accordion-summary:focus-visible svg { + outline: 2px solid var(--color-focus-outline); +} + .always-visible, .always-visible .tsd-signatures { display: inherit !important; @@ -266,16 +283,6 @@ h6 { line-height: 1.2; } -h1 > a:not(.link), -h2 > a:not(.link), -h3 > a:not(.link), -h4 > a:not(.link), -h5 > a:not(.link), -h6 > a:not(.link) { - text-decoration: none; - color: var(--color-text); -} - h1 { font-size: 1.875rem; margin: 0.67rem 0; @@ -306,10 +313,6 @@ h6 { margin: 2.33rem 0; } -.uppercase { - text-transform: uppercase; -} - dl, menu, ol, @@ -333,7 +336,7 @@ footer { padding-bottom: 1rem; max-height: 3.5rem; } -.tsd-generator { +footer > p { margin: 0 1em; } @@ -421,6 +424,9 @@ a.external[target="_blank"] { background-repeat: no-repeat; padding-right: 13px; } +a.tsd-anchor-link { + color: var(--color-text); +} code, pre { @@ -580,13 +586,13 @@ dl.tsd-comment-tag-group p { } .tsd-filter-input { display: flex; - width: fit-content; width: -moz-fit-content; + width: fit-content; align-items: center; - user-select: none; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; + user-select: none; cursor: pointer; } .tsd-filter-input input[type="checkbox"] { @@ -609,11 +615,8 @@ dl.tsd-comment-tag-group p { Don't remove unless you know what you're doing. */ opacity: 0.99; } -.tsd-filter-input input[type="checkbox"]:focus + svg { - transform: scale(0.95); -} -.tsd-filter-input input[type="checkbox"]:focus:not(:focus-visible) + svg { - transform: scale(1); +.tsd-filter-input input[type="checkbox"]:focus-visible + svg { + outline: 2px solid var(--color-focus-outline); } .tsd-checkbox-background { fill: var(--color-accent); @@ -630,13 +633,18 @@ input[type="checkbox"]:checked ~ svg .tsd-checkbox-checkmark { stroke: var(--color-accent); } -.tsd-theme-toggle { - padding-top: 0.75rem; +.settings-label { + font-weight: bold; + text-transform: uppercase; + display: inline-block; } -.tsd-theme-toggle > h4 { - display: inline; - vertical-align: middle; - margin-right: 0.75rem; + +.tsd-filter-visibility .settings-label { + margin: 0.75rem 0 0.5rem 0; +} + +.tsd-theme-toggle .settings-label { + margin: 0.75rem 0.75rem 0 0; } .tsd-hierarchy { @@ -769,6 +777,9 @@ input[type="checkbox"]:checked ~ svg .tsd-checkbox-checkmark { padding: 0; max-width: 100%; } +.tsd-navigation .tsd-nav-link { + display: none; +} .tsd-nested-navigation { margin-left: 3rem; } @@ -782,6 +793,15 @@ input[type="checkbox"]:checked ~ svg .tsd-checkbox-checkmark { margin-left: -1.5rem; } +.tsd-page-navigation-section { + margin-left: 10px; +} +.tsd-page-navigation-section > summary { + padding: 0.25rem; +} +.tsd-page-navigation-section > div { + margin-left: 20px; +} .tsd-page-navigation ul { padding-left: 1.75rem; } @@ -812,10 +832,10 @@ a.tsd-index-link { } .tsd-accordion-summary, .tsd-accordion-summary a { - user-select: none; -moz-user-select: none; -webkit-user-select: none; -ms-user-select: none; + user-select: none; cursor: pointer; } @@ -828,8 +848,9 @@ a.tsd-index-link { padding-top: 0; padding-bottom: 0; } -.tsd-index-accordion .tsd-accordion-summary > svg { +.tsd-accordion .tsd-accordion-summary > svg { margin-left: 0.25rem; + vertical-align: text-top; } .tsd-index-content > :not(:first-child) { margin-top: 0.75rem; @@ -877,7 +898,7 @@ a.tsd-index-link { } .tsd-panel-group { - margin: 4rem 0; + margin: 2rem 0; } .tsd-panel-group.tsd-index-group { margin: 2rem 0; @@ -885,6 +906,9 @@ a.tsd-index-link { .tsd-panel-group.tsd-index-group details { margin: 2rem 0; } +.tsd-panel-group > .tsd-accordion-summary { + margin-bottom: 1rem; +} #tsd-search { transition: background-color 0.2s; @@ -1034,6 +1058,12 @@ a.tsd-index-link { border-width: 1px 0; transition: background-color 0.1s; } +.tsd-signatures .tsd-index-signature:not(:last-child) { + margin-bottom: 1em; +} +.tsd-signatures .tsd-index-signature .tsd-signature { + border-width: 1px; +} .tsd-description .tsd-signatures .tsd-signature { border-width: 1px; } @@ -1347,6 +1377,12 @@ img { .has-menu .tsd-navigation { max-height: 100%; } + #tsd-toolbar-links { + display: none; + } + .tsd-navigation .tsd-nav-link { + display: flex; + } } /* one sidebar */ diff --git a/typedoc/classes/Env.html b/typedoc/classes/Env.html index 83f6309c..f0ac9d6c 100644 --- a/typedoc/classes/Env.html +++ b/typedoc/classes/Env.html @@ -1,5 +1,5 @@ -Env | @vladmandic/human - v3.2.2

Env class that holds detected capabilities

-

Constructors

constructor +Env | @vladmandic/human - v3.3.0

Env class that holds detected capabilities

+

Constructors

Properties

agent backends browser @@ -22,11 +22,11 @@ ImageData

Methods

Constructors

Properties

agent: string = ''

Detected agent

+

Constructors

Properties

agent: string = ''

Detected agent

backends: string[] = []

List of supported backends

browser: boolean

Running in Browser

cpu: {
    flags: string[];
    model: undefined | string;
} = ...

CPU info

-

Type declaration

  • flags: string[]
  • model: undefined | string
filter: undefined | boolean

Are image filters supported?

+
filter: undefined | boolean

Are image filters supported?

initial: boolean

Has any work been performed so far

kernels: string[] = []

List of supported kernels for current backend

node: boolean

Running in NodeJS

@@ -34,11 +34,11 @@
perfadd: boolean = false

Are performance counter instant values or additive

platform: string = ''

Detected platform

tensorflow: {
    gpu: undefined | boolean;
    version: undefined | string;
} = ...

If using tfjs-node get version of underlying tensorflow shared library and if gpu acceleration is enabled

-

Type declaration

  • gpu: undefined | boolean
  • version: undefined | string
tfjs: {
    version: undefined | string;
}

TFJS instance details

-

Type declaration

  • version: undefined | string
wasm: {
    backend: undefined | boolean;
    multithread: undefined | boolean;
    simd: undefined | boolean;
    supported: undefined | boolean;
} = ...

WASM detected capabilities

-

Type declaration

  • backend: undefined | boolean
  • multithread: undefined | boolean
  • simd: undefined | boolean
  • supported: undefined | boolean
webgl: {
    backend: undefined | boolean;
    renderer: undefined | string;
    shader: undefined | string;
    supported: undefined | boolean;
    vendor: undefined | string;
    version: undefined | string;
} = ...

WebGL detected capabilities

-

Type declaration

  • backend: undefined | boolean
  • renderer: undefined | string
  • shader: undefined | string
  • supported: undefined | boolean
  • vendor: undefined | string
  • version: undefined | string
webgpu: {
    adapter: undefined | GPUAdapterInfo;
    backend: undefined | boolean;
    supported: undefined | boolean;
} = ...

WebGPU detected capabilities

-

Type declaration

  • adapter: undefined | GPUAdapterInfo
  • backend: undefined | boolean
  • supported: undefined | boolean
worker: boolean

Running in WebWorker thread

-

Accessors

Methods

tfjs: {
    version: undefined | string;
}

TFJS instance details

+
wasm: {
    backend: undefined | boolean;
    multithread: undefined | boolean;
    simd: undefined | boolean;
    supported: undefined | boolean;
} = ...

WASM detected capabilities

+
webgl: {
    backend: undefined | boolean;
    renderer: undefined | string;
    shader: undefined | string;
    supported: undefined | boolean;
    vendor: undefined | string;
    version: undefined | string;
} = ...

WebGL detected capabilities

+
webgpu: {
    adapter: undefined | GPUAdapterInfo;
    backend: undefined | boolean;
    supported: undefined | boolean;
} = ...

WebGPU detected capabilities

+
worker: boolean

Running in WebWorker thread

+

Accessors

Methods

  • update backend information

    Returns Promise<void>

\ No newline at end of file +

Returns void

diff --git a/typedoc/classes/GraphModel.html b/typedoc/classes/GraphModel.html index 6f0148b5..b48ed08f 100644 --- a/typedoc/classes/GraphModel.html +++ b/typedoc/classes/GraphModel.html @@ -1,9 +1,9 @@ -GraphModel | @vladmandic/human - v3.2.2

Class GraphModel<ModelURL>

A tf.GraphModel is a directed, acyclic graph built from a +GraphModel | @vladmandic/human - v3.3.0

Class GraphModel<ModelURL>

A tf.GraphModel is a directed, acyclic graph built from a SavedModel GraphDef and allows inference execution.

A tf.GraphModel can only be created by loading from a model converted from -a TensorFlow SavedModel using +a TensorFlow SavedModel using the command line converter tool and loaded via tf.loadGraphModel.

-

Doc

Type Parameters

  • ModelURL extends Url = string | io.IOHandler

Implements

  • InferenceModel

Constructors

Type Parameters

  • ModelURL extends Url = string | io.IOHandler

Implements

  • InferenceModel

Constructors

Accessors

inputNodes inputs metadata @@ -23,14 +23,16 @@ the command line converter tool and loaded via tf.loadGraphModel.predict predictAsync save -

Constructors

  • Type Parameters

    • ModelURL extends Url = string | IOHandler

    Parameters

    • modelUrl: ModelURL

      url for the model, or an io.IOHandler.

      -
    • Optional loadOptions: LoadOptions
    • Optional tfio: __module

    Returns GraphModel<ModelURL>

Accessors

  • get inputNodes(): string[]
  • Returns string[]

  • get inputs(): TensorInfo[]
  • Returns TensorInfo[]

  • get metadata(): {}
  • Returns {}

    • get modelSignature(): {}
    • Returns {}

      • get modelStructuredOutputKeys(): {}
      • Returns {}

        • get modelVersion(): string
        • Returns string

        • get outputNodes(): string[]
        • Returns string[]

        • get outputs(): TensorInfo[]
        • Returns TensorInfo[]

        • get weights(): NamedTensorsMap
        • Returns NamedTensorsMap

        Methods

        • Releases the memory used by the weight tensors and resourceManager.

          -

          Returns void

          Doc

        • Dispose intermediate tensors for model debugging mode (flag +

        Constructors

        • Type Parameters

          • ModelURL extends Url = string | IOHandler

          Parameters

          • modelUrl: ModelURL

            url for the model, or an io.IOHandler.

            +
          • OptionalloadOptions: LoadOptions
          • Optionaltfio: __module

          Returns GraphModel<ModelURL>

        Accessors

        • get inputNodes(): string[]
        • Returns string[]

        • get inputs(): TensorInfo[]
        • Return the array of input tensor info.

          +

          Returns TensorInfo[]

        • get metadata(): {}
        • Returns {}

          • get modelSignature(): {}
          • Returns {}

            • get modelStructuredOutputKeys(): {}
            • Returns {}

              • get modelVersion(): string
              • Returns string

              • get outputNodes(): string[]
              • Returns string[]

              • get outputs(): TensorInfo[]
              • Return the array of output tensor info.

                +

                Returns TensorInfo[]

              • get weights(): NamedTensorsMap
              • Returns NamedTensorsMap

              Methods

              • Releases the memory used by the weight tensors and resourceManager.

                +

                Returns void

              • Dispose intermediate tensors for model debugging mode (flag KEEP_INTERMEDIATE_TENSORS is true).

                -

                Returns void

                Doc

              • Executes inference for the model for given input tensors.

                +

                Returns void

              • Executes inference for the model for given input tensors.

                Parameters

                • inputs: Tensor<Rank> | Tensor<Rank>[] | NamedTensorMap

                  tensor, tensor array or tensor map of the inputs for the model, keyed by the input node names.

                  -
                • Optional outputs: string | string[]

                  output node name from the TensorFlow model, if no +

                • Optionaloutputs: string | string[]

                  output node name from the TensorFlow model, if no outputs are specified, the default outputs of the model would be used. You can inspect intermediate nodes of the model by adding them to the outputs array.

                  @@ -38,37 +40,37 @@ outputs array.

                  are provided and there is only one default output, otherwise return a tensor array. The order of the tensor array is the same as the outputs if provided, otherwise the order of outputNodes attribute of the model.

                  -

                  Doc

              • Executes inference for the model for given input tensors in async +

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

                Parameters

                • inputs: Tensor<Rank> | Tensor<Rank>[] | NamedTensorMap

                  tensor, tensor array or tensor map of the inputs for the model, keyed by the input node names.

                  -
                • Optional outputs: string | string[]

                  output node name from the TensorFlow model, if no outputs +

                • Optionaloutputs: string | string[]

                  output node name from the TensorFlow model, if no outputs are specified, the default outputs of the model would be used. You can inspect intermediate nodes of the model by adding them to the outputs array.

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

                A Promise of single tensor if provided with a single output or no outputs are provided and there is only one default output, otherwise return a tensor map.

                -

                Doc

              • Get intermediate tensors for model debugging mode (flag +

              • Get intermediate tensors for model debugging mode (flag KEEP_INTERMEDIATE_TENSORS is true).

                -

                Returns NamedTensorsMap

                Doc

              • Loads the model and weight files, construct the in memory weight map and +

                Returns NamedTensorsMap

              • Loads the model and weight files, construct the in memory weight map and compile the inference graph.

                -

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

              • Synchronously construct the in memory weight map and +

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

              • Synchronously construct the in memory weight map and compile the inference graph.

                -

                Parameters

                • artifacts: ModelArtifacts

                Returns boolean

                Doc

              • Execute the inference for the input tensors.

                -

                Parameters

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

                  Prediction configuration for specifying the batch size. +

                  Parameters

                  • artifacts: ModelArtifacts

                  Returns boolean

              • Execute the inference for the input tensors.

                +

                Parameters

                • inputs: Tensor<Rank> | Tensor<Rank>[] | NamedTensorMap
                • Optionalconfig: ModelPredictConfig

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

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

                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[].

                -

                See

                GraphModel.inputNodes

                +

                GraphModel.inputNodes

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

                +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 @@ -76,21 +78,21 @@ 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].

                -

                Doc

              • Execute the inference for the input tensors in async fashion, use this +

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

                -

                Parameters

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

                  Prediction configuration for specifying the batch size. +

                  Parameters

                  • inputs: Tensor<Rank> | Tensor<Rank>[] | NamedTensorMap
                  • Optionalconfig: 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>

                  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[].

                  -

                  See

                  GraphModel.inputNodes

                  +

                  GraphModel.inputNodes

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

                  +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 @@ -98,28 +100,29 @@ 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].

                  -

                  Doc

              • Save the configuration and/or weights of the GraphModel.

                +
              • Save the configuration and/or weights of the GraphModel.

                An IOHandler is an object that has a save method of the proper signature defined. The save method manages the storing or transmission of serialized data ("artifacts") that represent the -model's topology and weights onto or via a specific medium, such as +model's topology and weights onto or via a specific medium, such as file downloads, local storage, IndexedDB in the web browser and HTTP requests to a server. TensorFlow.js provides IOHandler implementations for a number of frequently used saving mediums, such as tf.io.browserDownloads and tf.io.browserLocalStorage. See tf.io for more details.

                This method also allows you to refer to certain types of IOHandlers -as URL-like string shortcuts, such as 'localstorage://' and -'indexeddb://'.

                -

                Example 1: Save model's topology and weights to browser local +as URL-like string shortcuts, such as 'localstorage://' and +'indexeddb://'.

                +

                Example 1: Save model's topology and weights to browser local storage; then load it back.

                -
                const modelUrl =
                'https://storage.googleapis.com/tfjs-models/savedmodel/mobilenet_v2_1.0_224/model.json';
                const model = await tf.loadGraphModel(modelUrl);
                const zeros = tf.zeros([1, 224, 224, 3]);
                model.predict(zeros).print();

                const saveResults = await model.save('localstorage://my-model-1');

                const loadedModel = await tf.loadGraphModel('localstorage://my-model-1');
                console.log('Prediction from loaded model:');
                model.predict(zeros).print(); -
                +
                const modelUrl =
                'https://storage.googleapis.com/tfjs-models/savedmodel/mobilenet_v2_1.0_224/model.json';
                const model = await tf.loadGraphModel(modelUrl);
                const zeros = tf.zeros([1, 224, 224, 3]);
                model.predict(zeros).print();

                const saveResults = await model.save('localstorage://my-model-1');

                const loadedModel = await tf.loadGraphModel('localstorage://my-model-1');
                console.log('Prediction from loaded model:');
                model.predict(zeros).print(); +
                +

                Parameters

                • handlerOrURL: string | IOHandler

                  An instance of IOHandler or a URL-like, scheme-based string shortcut for IOHandler.

                  -
                • Optional config: SaveConfig

                  Options for saving the model.

                  +
                • Optionalconfig: SaveConfig

                  Options for saving the model.

                Returns Promise<SaveResult>

                A Promise of SaveResult, which summarizes the result of -the saving, such as byte sizes of the saved artifacts for the model's - topology and weight values.

                -

                Doc

              \ No newline at end of file +the saving, such as byte sizes of the saved artifacts for the model's +topology and weight values.

              +
              diff --git a/typedoc/classes/Human.html b/typedoc/classes/Human.html index 988c2aa2..a5daade8 100644 --- a/typedoc/classes/Human.html +++ b/typedoc/classes/Human.html @@ -1,13 +1,13 @@ -Human | @vladmandic/human - v3.2.2

              Human* library main class

              +Human | @vladmandic/human - v3.3.0

              Human* library main class

              All methods and properties are available only as members of Human class

              • Configuration object definition: Config
              • Results object definition: Result
              • Possible inputs: Input
              -

              Param: userConfig

              Config

              -

              Returns

              instance of Human

              -

              Constructors

              Config

              +

              instance of Human

              +

              Constructors

              Properties

              config draw env @@ -38,11 +38,11 @@ validate video warmup -

              Constructors

              • Constructor for Human library that is futher used for all operations

                -

                Parameters

                • Optional userConfig: Partial<Config>

                  user configuration object Config

                  -

                Returns Human

              Properties

              config: Config

              Current configuration

              +

              Constructors

              • Constructor for Human library that is futher used for all operations

                +

                Parameters

                • OptionaluserConfig: Partial<Config>

                  user configuration object Config

                  +

                Returns Human

              Properties

              config: Config

              Current configuration

              draw: draw = draw

              Draw helper classes that can draw detected objects on canvas using specified draw

                @@ -71,24 +71,24 @@ Possible events:

              performance: Record<string, number>

              Performance object that contains values for all recently performed operations

              process: {
                  canvas: null | AnyCanvas;
                  tensor: null | Tensor<Rank>;
              }

              currenty processed image tensor and canvas

              -

              Type declaration

              result: Result

              Last known result of detect run

              +
              result: Result

              Last known result of detect run

              • Can be accessed anytime after initial detection
              state: string

              Current state of Human library

              • Can be polled to determine operations that are currently executed
              • -
              • Progresses through: 'config', 'check', 'backend', 'load', 'run:', 'idle'
              • +
              • Progresses through: 'config', 'check', 'backend', 'load', 'run:', 'idle'
              tf: any

              Instance of TensorFlow/JS used by Human

              version: string

              Current version of Human library in semver format

              webcam: WebCam = ...

              WebCam helper methods

              -

              Methods

              • internal function to measure tensor leaks

                -

                Parameters

                • Rest ...msg: string[]

                Returns void

              • Compare two input tensors for pixel similarity

                +

              Methods

              • internal function to measure tensor leaks

                +

                Parameters

                • Rest...msg: string[]

                Returns void

              • Compare two input tensors for pixel similarity

                • use human.image to process any valid input and get a tensor that can be used for compare
                • when passing manually generated tensors:
                • @@ -104,7 +104,7 @@ Possible events:

                • Process and return result: Result

                Parameters

                Returns Promise<Result>

                result - Result

              • emit event

                Parameters

                • event: string

                Returns void

              • Process input as return canvas and tensor

                @@ -119,9 +119,9 @@ Returns object with tensor and canvas

              Returns Promise<void>

              • Load method preloads all configured models on-demand

                  -
                • Not explicitly required as any required model is load implicitly on it's first run
                • +
                • Not explicitly required as any required model is load implicitly on it's first run
                -

                Parameters

              • Runs interpolation using last known result and returns smoothened result Interpolation is based on time since last known result so can be called independently

                Parameters

                • result: Result = ...

                  Result optional use specific result set to run interpolation on

                  @@ -132,15 +132,15 @@ Interpolation is based on time since last known result so can be called independ
                • result object will contain total exeuction time information for top-20 kernels
                • actual detection object can be accessed via human.result
                -

                Parameters

                Returns Promise<{
                    kernel: string;
                    perc: number;
                    time: number;
                }[]>

              • Reset configuration to default values

                +

                Parameters

                Returns Promise<{
                    kernel: string;
                    perc: number;
                    time: number;
                }[]>

              • Reset configuration to default values

                Returns void

              • Segmentation method takes any input and returns RGBA tensor Note: Segmentation is not triggered as part of detect process

                Parameters

                • input: Input

                  Input Returns tensor which contains image data in RGBA format

                  -
                • Optional userConfig: Partial<Config>

                Returns Promise<null | Tensor<Rank>>

              • Helper function

                +
              • OptionaluserConfig: Partial<Config>

              Returns Promise<null | Tensor<Rank>>

              • Helper function

                Parameters

                • ms: number

                  sleep time in miliseconds

                Returns Promise<void>

              • Validate current configuration schema

                -

                Parameters

                • Optional userConfig: Partial<Config>

                Returns {
                    expected?: string;
                    reason: string;
                    where: string;
                }[]

              • Continously detect video frames

                +

                Parameters

                • OptionaluserConfig: Partial<Config>

                Returns {
                    expected?: string;
                    reason: string;
                    where: string;
                }[]

              • Continously detect video frames

                Parameters

                • element: HTMLVideoElement

                  HTMLVideoElement input

                • run: boolean = true

                  boolean run continously or stop if already running, default true

                • delay: number = 0

                  number delay detection between frames for number of miliseconds, default 0

                  @@ -149,6 +149,6 @@ Returns tensor which contains image data in RGBA format

                • can take significant time on startup
                • only used for webgl and humangl backends
                -

                Parameters

              \ No newline at end of file +
              diff --git a/typedoc/classes/Tensor-1.html b/typedoc/classes/Tensor-1.html index a796f4f2..7b445a1b 100644 --- a/typedoc/classes/Tensor-1.html +++ b/typedoc/classes/Tensor-1.html @@ -1,4 +1,4 @@ -Tensor | @vladmandic/human - v3.2.2

              A tf.Tensor object represents an immutable, multidimensional array of +Tensor | @vladmandic/human - v3.3.0

              A tf.Tensor object represents an immutable, multidimensional array of numbers that has a shape and a data type.

              For performance reasons, functions that create tensors do not necessarily perform a copy of the data passed to them (e.g. if the data is passed as a @@ -6,7 +6,7 @@ perform a copy of the data passed to them (e.g. if the data is passed as a a feature and is not supported. To avoid this behavior, use the tensor before changing the input data or create a copy with copy = tf.add(yourTensor, 0).

              See tf.tensor for details on how to create a tf.Tensor.

              -

              Doc

              Type Parameters

              Implements

              • TensorInfo

              Constructors

              Type Parameters

              Implements

              • TensorInfo

              Constructors

              Properties

              dataId dtype id @@ -34,10 +34,10 @@ changing the input data or create a copy with copy = tf.add(yourTensor, 0) as3D as4D as5D -asScalar -asType asin asinh +asScalar +asType atan atan2 atanh @@ -95,17 +95,17 @@ changing the input data or create a copy with copy = tf.add(yourTensor, 0) localResponseNormalization log log1p -logSigmoid -logSoftmax -logSumExp logicalAnd logicalNot logicalOr logicalXor +logSigmoid +logSoftmax +logSumExp matMul max -maxPool maximum +maxPool mean min minimum @@ -161,8 +161,8 @@ changing the input data or create a copy with copy = tf.add(yourTensor, 0) toBool toFloat toInt -toString topk +toString transpose unique unsortedSegmentSum @@ -170,49 +170,56 @@ changing the input data or create a copy with copy = tf.add(yourTensor, 0) variable where zerosLike -

              Constructors

              • Type Parameters

                Parameters

                • shape: ShapeMap[R]
                • dtype: keyof DataTypeMap
                • dataId: object
                • id: number

                Returns Tensor<R>

              Properties

              dataId: object

              Id of the bucket holding the data for this tensor. Multiple arrays can +

              Constructors

              • Type Parameters

                Parameters

                • shape: ShapeMap[R]
                • dtype: keyof DataTypeMap
                • dataId: object
                • id: number

                Returns Tensor<R>

              Properties

              dataId: object

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

              -
              dtype: keyof DataTypeMap

              The data type for the array.

              -
              id: number

              Unique id of this tensor.

              -
              kept: boolean

              Whether this tensor has been globally kept.

              -
              kerasMask?: Tensor<Rank>

              The keras mask that some keras layers attach to the tensor

              -
              rankType: R

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

              -
              scopeId: number

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

              -
              shape: ShapeMap[R]

              The shape of the tensor.

              -
              size: number

              Number of elements in the tensor.

              -
              strides: number[]

              Number of elements to skip in each dimension when indexing. See -https://docs.scipy.org/doc/numpy/reference/generated/\ +

              dtype: keyof DataTypeMap

              The data type for the array.

              +
              id: number

              Unique id of this tensor.

              +
              kept: boolean

              Whether this tensor has been globally kept.

              +
              kerasMask?: Tensor<Rank>

              The keras mask that some keras layers attach to the tensor

              +
              rankType: R

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

              +
              scopeId: number

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

              +
              shape: ShapeMap[R]

              The shape of the tensor.

              +
              size: number

              Number of elements in the tensor.

              +
              strides: number[]

              Number of elements to skip in each dimension when indexing. See +https://docs.scipy.org/doc/numpy/reference/generated/\ numpy.ndarray.strides.html

              -

              Accessors

              • get isDisposed(): boolean
              • Returns boolean

              • get rank(): number
              • Returns number

              Methods

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                • this: T
                • Optional axis: number | number[]
                • Optional keepDims: boolean

                Returns T

              • Type Parameters

                Parameters

                • this: T
                • Optional axis: number | number[]
                • Optional keepDims: boolean

                Returns T

              • Type Parameters

                Parameters

                • Optional axis: number

                Returns T

              • Type Parameters

                Parameters

                • Optional axis: number

                Returns T

              • Returns the tensor data as a nested array. The transfer of data is done +

              Accessors

              • get isDisposed(): boolean
              • Returns boolean

              • get rank(): number
              • Returns number

              Methods

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                • this: T
                • Optionalaxis: number | number[]
                • OptionalkeepDims: boolean

                Returns T

              • Type Parameters

                Parameters

                • this: T
                • Optionalaxis: number | number[]
                • OptionalkeepDims: boolean

                Returns T

              • Type Parameters

                Parameters

                • Optionalaxis: number

                Returns T

              • Type Parameters

                Parameters

                • Optionalaxis: number

                Returns T

              • Returns the tensor data as a nested array. The transfer of data is done asynchronously.

                -

                Returns Promise<ArrayMap[R]>

                Doc

              • Returns the tensor data as a nested array. The transfer of data is done +

                Returns Promise<ArrayMap[R]>

              • Returns the tensor data as a nested array. The transfer of data is done synchronously.

                -

                Returns ArrayMap[R]

                Doc

              • Type Parameters

                Returns Tensor1D

              • Type Parameters

                Parameters

                • rows: number
                • columns: number

                Returns Tensor2D

              • Type Parameters

                Parameters

                • rows: number
                • columns: number
                • depth: number

                Returns Tensor3D

              • Type Parameters

                Parameters

                • rows: number
                • columns: number
                • depth: number
                • depth2: number

                Returns Tensor4D

              • Type Parameters

                Parameters

                • rows: number
                • columns: number
                • depth: number
                • depth2: number
                • depth3: number

                Returns Tensor5D

              • Type Parameters

                Returns Scalar

              • Type Parameters

                Parameters

                • this: T
                • dtype: keyof DataTypeMap

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • filterSize: number | [number, number]
                • strides: number | [number, number]
                • pad: number | "valid" | "same" | ExplicitPadding
                • Optional dimRoundingMode: "floor" | "round" | "ceil"

                Returns T

              • Type Parameters

                Parameters

                • blockShape: number[]
                • crops: number[][]

                Returns Tensor<R>

              • Type Parameters

                Parameters

                • shape: ShapeMap[R]

                Returns Tensor<R>

              • Returns a promise of tf.TensorBuffer that holds the underlying data.

                -

                Type Parameters

                • D extends keyof DataTypeMap = "float32"

                Returns Promise<TensorBuffer<R, D>>

                Doc

              • Returns a tf.TensorBuffer that holds the underlying data.

                -

                Type Parameters

                • D extends keyof DataTypeMap = "float32"

                Returns TensorBuffer<R, D>

                Doc

              • Returns the underlying bytes of the tensor's data.

                -

                Returns Promise<Uint8Array | Uint8Array[]>

              • Type Parameters

                Parameters

                • dtype: keyof DataTypeMap

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • min: number
                • max: number

                Returns Tensor<Rank>

              • Returns a copy of the tensor. See tf.clone for details.

                -

                Type Parameters

                Parameters

                • this: T

                Returns T

                Doc

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                • filter: Tensor3D | TensorLike3D
                • stride: number
                • pad: number | "valid" | "same" | ExplicitPadding
                • Optional dataFormat: "NWC" | "NCW"
                • Optional dilation: number
                • Optional dimRoundingMode: "floor" | "round" | "ceil"

                Returns T

              • Type Parameters

                Parameters

                • filter: Tensor4D | TensorLike4D
                • strides: number | [number, number]
                • pad: number | "valid" | "same"
                • Optional dataFormat: "NHWC" | "NCHW"
                • Optional dilations: number | [number, number]
                • Optional dimRoundingMode: "floor" | "round" | "ceil"

                Returns T

              • Type Parameters

                Parameters

                • filter: Tensor4D | TensorLike4D
                • outputShape: [number, number, number] | [number, number, number, number]
                • strides: number | [number, number]
                • pad: number | "valid" | "same"
                • Optional dimRoundingMode: "floor" | "round" | "ceil"

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • Optional axis: number
                • Optional exclusive: boolean
                • Optional reverse: boolean

                Returns Tensor<R>

              • Type Parameters

                Parameters

                • Optional axis: number
                • Optional exclusive: boolean
                • Optional reverse: boolean

                Returns Tensor<R>

              • Asynchronously downloads the values from the tf.Tensor. Returns a +

                Returns ArrayMap[R]

              • Type Parameters

                Returns Tensor1D

              • Type Parameters

                Parameters

                • rows: number
                • columns: number

                Returns Tensor2D

              • Type Parameters

                Parameters

                • rows: number
                • columns: number
                • depth: number

                Returns Tensor3D

              • Type Parameters

                Parameters

                • rows: number
                • columns: number
                • depth: number
                • depth2: number

                Returns Tensor4D

              • Type Parameters

                Parameters

                • rows: number
                • columns: number
                • depth: number
                • depth2: number
                • depth3: number

                Returns Tensor5D

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Returns Scalar

              • Type Parameters

                Parameters

                • this: T
                • dtype: keyof DataTypeMap

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • filterSize: number | [number, number]
                • strides: number | [number, number]
                • pad:
                      | number
                      | "valid"
                      | "same"
                      | ExplicitPadding
                • OptionaldimRoundingMode: "floor" | "round" | "ceil"

                Returns T

              • Type Parameters

                Parameters

                • blockShape: number[]
                • crops: number[][]

                Returns Tensor<R>

              • Type Parameters

                Parameters

                • shape: ShapeMap[R]

                Returns Tensor<R>

              • Returns a promise of tf.TensorBuffer that holds the underlying data.

                +

                Type Parameters

                • D extends keyof DataTypeMap = "float32"

                Returns Promise<TensorBuffer<R, D>>

              • Returns a tf.TensorBuffer that holds the underlying data.

                +

                Type Parameters

                • D extends keyof DataTypeMap = "float32"

                Returns TensorBuffer<R, D>

              • Returns the underlying bytes of the tensor's data.

                +

                Returns Promise<Uint8Array | Uint8Array[]>

              • Type Parameters

                Parameters

                • dtype: keyof DataTypeMap

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • min: number
                • max: number

                Returns Tensor<Rank>

              • Returns a copy of the tensor. See tf.clone for details.

                +

                Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                • filter: Tensor3D | TensorLike3D
                • stride: number
                • pad:
                      | number
                      | "valid"
                      | "same"
                      | ExplicitPadding
                • OptionaldataFormat: "NWC" | "NCW"
                • Optionaldilation: number
                • OptionaldimRoundingMode: "floor" | "round" | "ceil"

                Returns T

              • Type Parameters

                Parameters

                • filter: Tensor4D | TensorLike4D
                • strides: number | [number, number]
                • pad: number | "valid" | "same"
                • OptionaldataFormat: "NHWC" | "NCHW"
                • Optionaldilations: number | [number, number]
                • OptionaldimRoundingMode: "floor" | "round" | "ceil"

                Returns T

              • Type Parameters

                Parameters

                • filter: Tensor4D | TensorLike4D
                • outputShape: [number, number, number] | [number, number, number, number]
                • strides: number | [number, number]
                • pad: number | "valid" | "same"
                • OptionaldimRoundingMode: "floor" | "round" | "ceil"

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • Optionalaxis: number
                • Optionalexclusive: boolean
                • Optionalreverse: boolean

                Returns Tensor<R>

              • Type Parameters

                Parameters

                • Optionalaxis: number
                • Optionalexclusive: boolean
                • Optionalreverse: boolean

                Returns Tensor<R>

              • Asynchronously downloads the values from the tf.Tensor. Returns a promise of TypedArray that resolves when the computation has finished.

                -

                Type Parameters

                • D extends keyof DataTypeMap = NumericDataType

                Returns Promise<DataTypeMap[D]>

                Doc

              • Synchronously downloads the values from the tf.Tensor. This blocks the +

                Type Parameters

                • D extends keyof DataTypeMap = NumericDataType

                Returns Promise<DataTypeMap[D]>

              • Synchronously downloads the values from the tf.Tensor. This blocks the UI thread until the values are ready, which can cause performance issues.

                -

                Type Parameters

                • D extends keyof DataTypeMap = NumericDataType

                Returns DataTypeMap[D]

                Doc

              • Copy the tensor's data to a new GPU resource. Comparing to the dataSync() +

                Type Parameters

                • D extends keyof DataTypeMap = NumericDataType

                Returns DataTypeMap[D]

              • Copy the tensor's data to a new GPU resource. Comparing to the dataSync() and data(), this method prevents data from being downloaded to CPU.

                For WebGL backend, the data will be stored on a densely packed texture. This means that the texture will use the RGBA channels to store value.

                For WebGPU backend, the data will be stored on a buffer. There is no parameter, so can not use a user-defined size to create the buffer.

                -

                Parameters

                • Optional options: DataToGPUWebGLOption

                Returns GPUData

                For WebGL backend, a GPUData contains the new texture and - its information. - { - tensorRef: The tensor that is associated with this texture, - texture: WebGLTexture, - texShape: [number, number] // [height, width] - }

                -
                For WebGPU backend, a GPUData contains the new buffer.
                {
                tensorRef: The tensor that is associated with this buffer,
                buffer: GPUBuffer,
                }

                Remember to dispose the GPUData after it is used by
                `res.tensorRef.dispose()`. -
                -

                Doc

              • Type Parameters

                Parameters

                • blockSize: number
                • dataFormat: "NHWC" | "NCHW"

                Returns T

              • Type Parameters

                Parameters

                • filter: Tensor4D | TensorLike4D
                • strides: number | [number, number]
                • pad: number | "valid" | "same"
                • Optional dataFormat: "NHWC" | "NCHW"
                • Optional dilations: number | [number, number]
                • Optional dimRoundingMode: "floor" | "round" | "ceil"

                Returns T

              • Type Parameters

                Parameters

                • filter: Tensor3D | TensorLike3D
                • strides: number | [number, number]
                • pad: "valid" | "same"
                • Optional dilations: number | [number, number]
                • Optional dataFormat: "NHWC"

                Returns T

              • Disposes tf.Tensor from memory.

                -

                Returns void

                Doc

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Returns T

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • this: T
                • Optional axis: number | number[]
                • Optional keepDims: boolean

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • Optional axis: number

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                Returns Tensor<Rank>

              • Type Parameters

                Returns Tensor1D

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                Returns Tensor<Rank>

              • Type Parameters

                Parameters

                Returns Tensor<Rank>

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • alpha: number

                Returns T

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                • Optional depthRadius: number
                • Optional bias: number
                • Optional alpha: number
                • Optional beta: number

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • this: T
                • Optional axis: number

                Returns T

              • Type Parameters

                Parameters

                • this: T
                • Optional axis: number | number[]
                • Optional keepDims: boolean

                Returns T

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Returns T

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                Returns Tensor<Rank>

              • Type Parameters

                Parameters

                • Optional axis: number | number[]
                • Optional keepDims: boolean

                Returns T

              • Type Parameters

                Parameters

                • filterSize: number | [number, number]
                • strides: number | [number, number]
                • pad: number | "valid" | "same" | ExplicitPadding
                • Optional dimRoundingMode: "floor" | "round" | "ceil"

                Returns T

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                • Optional axis: number | number[]
                • Optional keepDims: boolean

                Returns T

              • Type Parameters

                Parameters

                • Optional axis: number | number[]
                • Optional keepDims: boolean

                Returns T

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                • paddings: [number, number][]
                • mode: "reflect" | "symmetric"

                Returns T

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • Optional ord: number | "euclidean" | "fro"
                • Optional axis: number | number[]
                • Optional keepDims: boolean

                Returns Tensor<Rank>

              • Type Parameters

                Parameters

                Returns T

              • Parameters

                • depth: number
                • onValue: number
                • offValue: number

                Returns Tensor<Rank>

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • paddings: [number, number][]
                • Optional constantValue: number

                Returns T

              • Type Parameters

                Parameters

                • windowShape: number | [number, number]
                • poolingType: "avg" | "max"
                • padding: number | "valid" | "same" | ExplicitPadding
                • Optional diationRate: number | [number, number]
                • Optional strides: number | [number, number]
                • Optional dimRoundingMode: "floor" | "round" | "ceil"

                Returns T

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                Returns T

              • Prints the tf.Tensor. See tf.print for details.

                -

                Parameters

                • Optional verbose: boolean

                  Whether to print verbose information about the tensor, - including dtype and size.

                  -

                Returns void

                Doc

              • Type Parameters

                Parameters

                • this: T
                • Optional axis: number | number[]
                • Optional keepDims: boolean

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Returns T

              • Type Parameters

                Returns T

              • Type Parameters

                Parameters

                • shape: number[]

                Returns T

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                • newShape2D: [number, number]
                • Optional alignCorners: boolean
                • Optional halfPixelCenters: boolean

                Returns T

              • Type Parameters

                Parameters

                • newShape2D: [number, number]
                • Optional alignCorners: boolean
                • Optional halfFloatCenters: boolean

                Returns T

              • Type Parameters

                Parameters

                • this: T
                • Optional axis: number | number[]

                Returns T

              • Type Parameters

                Parameters

                Returns Tensor<Rank>

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Returns T

              • Type Parameters

                Parameters

                • depthwiseFilter: Tensor4D | TensorLike4D
                • pointwiseFilter: TensorLike | Tensor4D
                • strides: number | [number, number]
                • pad: "valid" | "same"
                • Optional dilation: number | [number, number]
                • Optional dataFormat: "NHWC" | "NCHW"

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • this: T
                • begin: number | number[]
                • Optional size: number | number[]

                Returns T

              • Type Parameters

                Parameters

                • this: T
                • Optional dim: number

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • blockShape: number[]
                • paddings: number[][]

                Returns Tensor<R>

              • Type Parameters

                Parameters

                • numOrSizeSplits: number | number[]
                • Optional axis: number

                Returns T[]

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                • Optional axis: number[]

                Returns T

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                • this: T
                • Optional alpha: number

                Returns T

              • Type Parameters

                Parameters

                • this: Tensor<Rank>
                • begin: number[]
                • end: number[]
                • strides: number[]
                • Optional beginMask: number
                • Optional endMask: number
                • Optional ellipsisMask: number
                • Optional newAxisMask: number
                • Optional shrinkAxisMask: number

                Returns Tensor<Rank>

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                • Optional axis: number | number[]
                • Optional keepDims: boolean

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Returns void

              • Type Parameters

                Parameters

                • b: number[]

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Returns a human-readable description of the tensor. Useful for logging.

                -

                Parameters

                • Optional verbose: boolean

                Returns string

                Doc

              • Type Parameters

                Parameters

                • this: T
                • Optional k: number
                • Optional sorted: boolean

                Returns {
                    indices: T;
                    values: T;
                }

                • indices: T
                • values: T
              • Type Parameters

                Parameters

                • Optional perm: number[]

                Returns T

              • Type Parameters

                Parameters

                • this: T
                • Optional axis: number

                Returns {
                    indices: T;
                    values: T;
                }

                • indices: T
                • values: T
              • Type Parameters

                Parameters

                • this: T
                • segmentIds: Tensor1D | TensorLike1D
                • numSegments: number

                Returns T

              • Type Parameters

                Parameters

                • Optional axis: number

                Returns T[]

              • Parameters

                • Optional trainable: boolean
                • Optional name: string
                • Optional dtype: keyof DataTypeMap

                Returns Variable<R>

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              \ No newline at end of file +

              Parameters

              • Optionaloptions: DataToGPUWebGLOption

              Returns GPUData

              For WebGL backend, a GPUData contains the new texture and +its information. +{ +tensorRef: The tensor that is associated with this texture, +texture: WebGLTexture, +texShape: [number, number] // [height, width] +}

              +
              For WebGPU backend, a GPUData contains the new buffer.
              +{
              +   tensorRef: The tensor that is associated with this buffer,
              +   buffer: GPUBuffer,
              +}
              +
              +Remember to dispose the GPUData after it is used by
              +`res.tensorRef.dispose()`.
              +
              +
              • Type Parameters

                Parameters

                • blockSize: number
                • dataFormat: "NHWC" | "NCHW"

                Returns T

              • Type Parameters

                Parameters

                • filter: Tensor4D | TensorLike4D
                • strides: number | [number, number]
                • pad: number | "valid" | "same"
                • OptionaldataFormat: "NHWC" | "NCHW"
                • Optionaldilations: number | [number, number]
                • OptionaldimRoundingMode: "floor" | "round" | "ceil"

                Returns T

              • Type Parameters

                Parameters

                • filter: Tensor3D | TensorLike3D
                • strides: number | [number, number]
                • pad: "valid" | "same"
                • Optionaldilations: number | [number, number]
                • OptionaldataFormat: "NHWC"

                Returns T

              • Disposes tf.Tensor from memory.

                +

                Returns void

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Returns T

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • this: T
                • Optionalaxis: number | number[]
                • OptionalkeepDims: boolean

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • Optionalaxis: number

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                Returns Tensor<Rank>

              • Type Parameters

                Returns Tensor1D

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                Returns Tensor<Rank>

              • Type Parameters

                Parameters

                Returns Tensor<Rank>

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • alpha: number

                Returns T

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                • OptionaldepthRadius: number
                • Optionalbias: number
                • Optionalalpha: number
                • Optionalbeta: number

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Returns T

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • this: T
                • Optionalaxis: number

                Returns T

              • Type Parameters

                Parameters

                • this: T
                • Optionalaxis: number | number[]
                • OptionalkeepDims: boolean

                Returns T

              • Type Parameters

                Parameters

                Returns Tensor<Rank>

              • Type Parameters

                Parameters

                • Optionalaxis: number | number[]
                • OptionalkeepDims: boolean

                Returns T

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                • filterSize: number | [number, number]
                • strides: number | [number, number]
                • pad:
                      | number
                      | "valid"
                      | "same"
                      | ExplicitPadding
                • OptionaldimRoundingMode: "floor" | "round" | "ceil"

                Returns T

              • Type Parameters

                Parameters

                • Optionalaxis: number | number[]
                • OptionalkeepDims: boolean

                Returns T

              • Type Parameters

                Parameters

                • Optionalaxis: number | number[]
                • OptionalkeepDims: boolean

                Returns T

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                • paddings: [number, number][]
                • mode: "reflect" | "symmetric"

                Returns T

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • Optionalord: number | "euclidean" | "fro"
                • Optionalaxis: number | number[]
                • OptionalkeepDims: boolean

                Returns Tensor<Rank>

              • Type Parameters

                Parameters

                Returns T

              • Parameters

                • depth: number
                • onValue: number
                • offValue: number

                Returns Tensor<Rank>

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • paddings: [number, number][]
                • OptionalconstantValue: number

                Returns T

              • Type Parameters

                Parameters

                • windowShape: number | [number, number]
                • poolingType: "avg" | "max"
                • padding:
                      | number
                      | "valid"
                      | "same"
                      | ExplicitPadding
                • OptionaldiationRate: number | [number, number]
                • Optionalstrides: number | [number, number]
                • OptionaldimRoundingMode: "floor" | "round" | "ceil"

                Returns T

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                Returns T

              • Prints the tf.Tensor. See tf.print for details.

                +

                Parameters

                • Optionalverbose: boolean

                  Whether to print verbose information about the tensor, +including dtype and size.

                  +

                Returns void

              • Type Parameters

                Parameters

                • this: T
                • Optionalaxis: number | number[]
                • OptionalkeepDims: boolean

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Returns T

              • Type Parameters

                Returns T

              • Type Parameters

                Parameters

                • shape: number[]

                Returns T

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                • newShape2D: [number, number]
                • OptionalalignCorners: boolean
                • OptionalhalfPixelCenters: boolean

                Returns T

              • Type Parameters

                Parameters

                • newShape2D: [number, number]
                • OptionalalignCorners: boolean
                • OptionalhalfFloatCenters: boolean

                Returns T

              • Type Parameters

                Parameters

                • this: T
                • Optionalaxis: number | number[]

                Returns T

              • Type Parameters

                Parameters

                Returns Tensor<Rank>

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Returns T

              • Type Parameters

                Parameters

                • depthwiseFilter: Tensor4D | TensorLike4D
                • pointwiseFilter: TensorLike | Tensor4D
                • strides: number | [number, number]
                • pad: "valid" | "same"
                • Optionaldilation: number | [number, number]
                • OptionaldataFormat: "NHWC" | "NCHW"

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • this: T
                • begin: number | number[]
                • Optionalsize: number | number[]

                Returns T

              • Type Parameters

                Parameters

                • this: T
                • Optionaldim: number

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • blockShape: number[]
                • paddings: number[][]

                Returns Tensor<R>

              • Type Parameters

                Parameters

                • numOrSizeSplits: number | number[]
                • Optionalaxis: number

                Returns T[]

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                • Optionalaxis: number[]

                Returns T

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                • this: T
                • Optionalalpha: number

                Returns T

              • Type Parameters

                Parameters

                • this: Tensor<Rank>
                • begin: number[]
                • end: number[]
                • strides: number[]
                • OptionalbeginMask: number
                • OptionalendMask: number
                • OptionalellipsisMask: number
                • OptionalnewAxisMask: number
                • OptionalshrinkAxisMask: number

                Returns Tensor<Rank>

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                • Optionalaxis: number | number[]
                • OptionalkeepDims: boolean

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Returns void

              • Type Parameters

                Parameters

                • b: number[]

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • this: T
                • Optionalk: number
                • Optionalsorted: boolean

                Returns {
                    indices: T;
                    values: T;
                }

                • indices: T
                • values: T
              • Returns a human-readable description of the tensor. Useful for logging.

                +

                Parameters

                • Optionalverbose: boolean

                Returns string

              • Type Parameters

                Parameters

                • Optionalperm: number[]

                Returns T

              • Type Parameters

                Parameters

                • this: T
                • Optionalaxis: number

                Returns {
                    indices: T;
                    values: T;
                }

                • indices: T
                • values: T
              • Type Parameters

                Parameters

                • this: T
                • segmentIds: Tensor1D | TensorLike1D
                • numSegments: number

                Returns T

              • Type Parameters

                Parameters

                • Optionalaxis: number

                Returns T[]

              • Parameters

                • Optionaltrainable: boolean
                • Optionalname: string
                • Optionaldtype: keyof DataTypeMap

                Returns Variable<R>

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              diff --git a/typedoc/classes/WebCam.html b/typedoc/classes/WebCam.html index 4ab76314..b6df56b3 100644 --- a/typedoc/classes/WebCam.html +++ b/typedoc/classes/WebCam.html @@ -1,4 +1,4 @@ -WebCam | @vladmandic/human - v3.2.2

              Constructors

              constructor +WebCam | @vladmandic/human - v3.3.0

              Constructors

              Properties

              config devices element @@ -16,11 +16,11 @@ play start stop -

              Constructors

              Properties

              config: WebCamConfig

              current webcam configuration

              +

              Constructors

              Properties

              config: WebCamConfig

              current webcam configuration

              devices: MediaDeviceInfo[] = []

              enumerated video devices

              element: undefined | HTMLVideoElement

              instance of dom element associated with webcam stream

              stream: undefined | MediaStream

              active webcam stream

              -

              Accessors

              • get capabilities(): undefined | MediaTrackCapabilities
              • get webcam capabilities

                +

              Accessors

              • get capabilities(): undefined | MediaTrackCapabilities
              • get webcam capabilities

                Returns undefined | MediaTrackCapabilities

              • get constraints(): undefined | MediaTrackConstraints
              • get webcam constraints

                Returns undefined | MediaTrackConstraints

              • get settings(): undefined | MediaTrackSettings
              • get webcam settings

                Returns undefined | MediaTrackSettings

              • get track(): undefined | MediaStreamTrack
              • get active webcam stream track

                Returns undefined | MediaStreamTrack

              Methods

              • Returns Promise<MediaDeviceInfo[]>

              Methods

              • Returns Promise<MediaDeviceInfo[]>

              • start method initializizes webcam stream and associates it with a dom video element

                -

                Parameters

                Returns Promise<string>

              • stop method stops active webcam stream track and disconnects webcam

                -

                Returns void

              \ No newline at end of file +

              Parameters

              Returns Promise<string>

              • stop method stops active webcam stream track and disconnects webcam

                +

                Returns void

              diff --git a/typedoc/classes/models.Models.html b/typedoc/classes/models.Models.html index 4c2d56cd..39a19560 100644 --- a/typedoc/classes/models.Models.html +++ b/typedoc/classes/models.Models.html @@ -1,4 +1,4 @@ -Models | @vladmandic/human - v3.2.2

              Models class used by Human

              +Models | @vladmandic/human - v3.3.0

              Models class used by Human

              • models: record of all GraphModels
              • list: returns list of configured models with their stats
              • @@ -7,7 +7,7 @@
              • validate: checks loaded models for valid kernel ops vs current backend
              • stats: live detailed model stats that can be checked during model load phase
              -

              Constructors

              Constructors

              Properties

              Methods

              list load @@ -15,4 +15,4 @@ reset stats validate -

              Constructors

              Properties

              models: Record<string, null | GraphModel<string | IOHandler>> = {}

              Methods

              • Returns {
                    loaded: boolean;
                    name: string;
                    size: number;
                    url: any;
                }[]

              • Parameters

                Returns Promise<void>

              • Returns {
                    missing: string[];
                    name: string;
                }[]

              \ No newline at end of file +

              Constructors

              Properties

              models: Record<string, null | GraphModel<string | IOHandler>> = {}

              Methods

              • Returns {
                    loaded: boolean;
                    name: string;
                    size: number;
                    url: any;
                }[]

              • Parameters

                Returns Promise<void>

              • Returns {
                    missing: string[];
                    name: string;
                }[]

              diff --git a/typedoc/enums/Rank.html b/typedoc/enums/Rank.html index 305386bd..1620599f 100644 --- a/typedoc/enums/Rank.html +++ b/typedoc/enums/Rank.html @@ -1,8 +1,8 @@ -Rank | @vladmandic/human - v3.2.2

              Enumeration Rank

              Enumeration Members

              R0 +Rank | @vladmandic/human - v3.3.0

              Enumeration Rank

              Enumeration Members

              Enumeration Members

              R0: "R0"
              R1: "R1"
              R2: "R2"
              R3: "R3"
              R4: "R4"
              R5: "R5"
              R6: "R6"
              \ No newline at end of file +

              Enumeration Members

              R0: "R0"
              R1: "R1"
              R2: "R2"
              R3: "R3"
              R4: "R4"
              R5: "R5"
              R6: "R6"
              diff --git a/typedoc/functions/draw.all.html b/typedoc/functions/draw.all.html index bd7fdd0e..82b15cee 100644 --- a/typedoc/functions/draw.all.html +++ b/typedoc/functions/draw.all.html @@ -1,2 +1,2 @@ -all | @vladmandic/human - v3.2.2
              • meta-function that performs draw for: canvas, face, body, hand

                -

                Parameters

                Returns Promise<null | [void, void, void, void, void]>

              \ No newline at end of file +all | @vladmandic/human - v3.3.0
              • meta-function that performs draw for: canvas, face, body, hand

                +

                Parameters

                Returns Promise<null | [void, void, void, void, void]>

              diff --git a/typedoc/functions/draw.body.html b/typedoc/functions/draw.body.html index 1d4ec797..1ef3078a 100644 --- a/typedoc/functions/draw.body.html +++ b/typedoc/functions/draw.body.html @@ -1,2 +1,2 @@ -body | @vladmandic/human - v3.2.2
              \ No newline at end of file +body | @vladmandic/human - v3.3.0
              diff --git a/typedoc/functions/draw.canvas.html b/typedoc/functions/draw.canvas.html index 4b0a55e1..2e0d9d06 100644 --- a/typedoc/functions/draw.canvas.html +++ b/typedoc/functions/draw.canvas.html @@ -1,2 +1,2 @@ -canvas | @vladmandic/human - v3.2.2
              \ No newline at end of file +canvas | @vladmandic/human - v3.3.0
              diff --git a/typedoc/functions/draw.face.html b/typedoc/functions/draw.face.html index 51b143d9..fdf6fd9d 100644 --- a/typedoc/functions/draw.face.html +++ b/typedoc/functions/draw.face.html @@ -1,2 +1,2 @@ -face | @vladmandic/human - v3.2.2
              \ No newline at end of file +face | @vladmandic/human - v3.3.0
              diff --git a/typedoc/functions/draw.gesture.html b/typedoc/functions/draw.gesture.html index c5779d5f..bdd67a36 100644 --- a/typedoc/functions/draw.gesture.html +++ b/typedoc/functions/draw.gesture.html @@ -1,2 +1,2 @@ -gesture | @vladmandic/human - v3.2.2
              \ No newline at end of file +gesture | @vladmandic/human - v3.3.0
              diff --git a/typedoc/functions/draw.hand.html b/typedoc/functions/draw.hand.html index 47edf0d7..3723e829 100644 --- a/typedoc/functions/draw.hand.html +++ b/typedoc/functions/draw.hand.html @@ -1,2 +1,2 @@ -hand | @vladmandic/human - v3.2.2
              \ No newline at end of file +hand | @vladmandic/human - v3.3.0
              diff --git a/typedoc/functions/draw.init.html b/typedoc/functions/draw.init.html index 9adf05e8..738b7090 100644 --- a/typedoc/functions/draw.init.html +++ b/typedoc/functions/draw.init.html @@ -1,2 +1,2 @@ -init | @vladmandic/human - v3.2.2
              • sets default label templates for face/body/hand/object/gestures

                -

                Returns void

              \ No newline at end of file +init | @vladmandic/human - v3.3.0
              • sets default label templates for face/body/hand/object/gestures

                +

                Returns void

              diff --git a/typedoc/functions/draw.object.html b/typedoc/functions/draw.object.html index 8c4f94f1..16e913c5 100644 --- a/typedoc/functions/draw.object.html +++ b/typedoc/functions/draw.object.html @@ -1,2 +1,2 @@ -object | @vladmandic/human - v3.2.2
              \ No newline at end of file +object | @vladmandic/human - v3.3.0
              diff --git a/typedoc/functions/draw.person.html b/typedoc/functions/draw.person.html index 527719a8..f26eac94 100644 --- a/typedoc/functions/draw.person.html +++ b/typedoc/functions/draw.person.html @@ -1,2 +1,2 @@ -person | @vladmandic/human - v3.2.2
              • draw combined person results instead of individual detection result objects

                -

                Parameters

                Returns void

              \ No newline at end of file +person | @vladmandic/human - v3.3.0
              • draw combined person results instead of individual detection result objects

                +

                Parameters

                Returns void

              diff --git a/typedoc/functions/empty.html b/typedoc/functions/empty.html index 5640bfc5..9162dede 100644 --- a/typedoc/functions/empty.html +++ b/typedoc/functions/empty.html @@ -1 +1 @@ -empty | @vladmandic/human - v3.2.2
              \ No newline at end of file +empty | @vladmandic/human - v3.3.0
              diff --git a/typedoc/functions/match.distance.html b/typedoc/functions/match.distance.html index 83616961..2ac1afb9 100644 --- a/typedoc/functions/match.distance.html +++ b/typedoc/functions/match.distance.html @@ -1,4 +1,4 @@ -distance | @vladmandic/human - v3.2.2
              • Calculates distance between two descriptors

                +distance | @vladmandic/human - v3.3.0
                • Calculates distance between two descriptors

                  Parameters

                  • descriptor1: Descriptor
                  • descriptor2: Descriptor
                  • options: MatchOptions = ...

                    calculation options

                    • order - algorithm to use @@ -6,4 +6,4 @@ Euclidean distance if order is 2 (default), Minkowski distance algo
                    • multiplier - by how much to enhance difference analysis in range of 1..100 default is 20 which normalizes results to similarity above 0.5 can be considered a match
                    -

                  Returns number

                \ No newline at end of file +

              Returns number

              diff --git a/typedoc/functions/match.find.html b/typedoc/functions/match.find.html index 6164725b..4a299777 100644 --- a/typedoc/functions/match.find.html +++ b/typedoc/functions/match.find.html @@ -1,4 +1,4 @@ -find | @vladmandic/human - v3.2.2
              • Matches given descriptor to a closest entry in array of descriptors

                +find | @vladmandic/human - v3.3.0
                • Matches given descriptor to a closest entry in array of descriptors

                  Parameters

                  • descriptor: Descriptor

                    face descriptor

                  • descriptors: Descriptor[]

                    array of face descriptors to commpare given descriptor to

                  • options: MatchOptions = ...

                    see similarity method for options description @@ -8,4 +8,4 @@ Returns

                  • distance calculated distance of given descriptor to the best match
                  • similarity calculated normalized similarity of given descriptor to the best match
                  -

                Returns {
                    distance: number;
                    index: number;
                    similarity: number;
                }

                • distance: number
                • index: number
                • similarity: number
              \ No newline at end of file +

              Returns {
                  distance: number;
                  index: number;
                  similarity: number;
              }

              • distance: number
              • index: number
              • similarity: number
              diff --git a/typedoc/functions/match.similarity.html b/typedoc/functions/match.similarity.html index d8ef2604..cd22529a 100644 --- a/typedoc/functions/match.similarity.html +++ b/typedoc/functions/match.similarity.html @@ -1,4 +1,4 @@ -similarity | @vladmandic/human - v3.2.2
              • Calculates normalized similarity between two face descriptors based on their distance

                +similarity | @vladmandic/human - v3.3.0
                • Calculates normalized similarity between two face descriptors based on their distance

                  Parameters

                  • descriptor1: Descriptor
                  • descriptor2: Descriptor
                  • options: MatchOptions = ...

                    calculation options

                    • order - algorithm to use @@ -10,4 +10,4 @@ default is 20 which normalizes results to similarity above 0.5 can be considered default is 0.2...0.8 Returns similarity between two face descriptors normalized to 0..1 range where 0 is no similarity and 1 is perfect similarity
                    -

                  Returns number

                \ No newline at end of file +

              Returns number

              diff --git a/typedoc/functions/models.validateModel.html b/typedoc/functions/models.validateModel.html index 2d7a9e32..bf8d6657 100644 --- a/typedoc/functions/models.validateModel.html +++ b/typedoc/functions/models.validateModel.html @@ -1 +1 @@ -validateModel | @vladmandic/human - v3.2.2
              \ No newline at end of file +validateModel | @vladmandic/human - v3.3.0
              diff --git a/typedoc/hierarchy.html b/typedoc/hierarchy.html index 24a1065b..945b9410 100644 --- a/typedoc/hierarchy.html +++ b/typedoc/hierarchy.html @@ -1 +1 @@ -@vladmandic/human - v3.2.2
              \ No newline at end of file +@vladmandic/human - v3.3.0
              diff --git a/typedoc/index.html b/typedoc/index.html index 2b6a594f..5d73e0e9 100644 --- a/typedoc/index.html +++ b/typedoc/index.html @@ -1,8 +1,8 @@ -@vladmandic/human - v3.2.2

              @vladmandic/human - v3.2.2

              References

              Namespaces

              Tensor -draw +@vladmandic/human - v3.3.0

              @vladmandic/human - v3.3.0

              References

              Namespaces

              Enumerations

              Classes

              Env GraphModel @@ -79,4 +79,5 @@

              Variables

              Functions

              References

              Renames and re-exports Human
              \ No newline at end of file +

              References

              Renames and re-exports Human

              Class Human as default export

              +
              diff --git a/typedoc/interfaces/BodyConfig.html b/typedoc/interfaces/BodyConfig.html index e55d8d87..f452bc1a 100644 --- a/typedoc/interfaces/BodyConfig.html +++ b/typedoc/interfaces/BodyConfig.html @@ -1,11 +1,11 @@ -BodyConfig | @vladmandic/human - v3.2.2

              Interface BodyConfig

              Configures all body detection specific options

              -
              interface BodyConfig {
                  enabled: boolean;
                  maxDetected: number;
                  minConfidence: number;
                  modelPath: string;
                  skipFrames: number;
                  skipTime: number;
              }

              Hierarchy (view full)

              Properties

              enabled +BodyConfig | @vladmandic/human - v3.3.0

              Interface BodyConfig

              Configures all body detection specific options

              +
              interface BodyConfig {
                  enabled: boolean;
                  maxDetected: number;
                  minConfidence: number;
                  modelPath: string;
                  skipFrames: number;
                  skipTime: number;
              }

              Hierarchy (view full)

              Properties

              enabled: boolean

              is module enabled?

              +

              Properties

              enabled: boolean

              is module enabled?

              maxDetected: number

              maximum number of detected bodies

              minConfidence: number

              minimum confidence for a detected body before results are discarded

              modelPath: string

              path to model json file (relative to modelBasePath

              @@ -13,4 +13,4 @@ for two-phase models such as face and hand caching applies to bounding boxes detection only

              skipTime: number

              how many max milliseconds to go without re-running model if cached results are acceptable for two-phase models such as face and hand caching applies to bounding boxes detection only

              -
              \ No newline at end of file +
              diff --git a/typedoc/interfaces/BodyKeypoint.html b/typedoc/interfaces/BodyKeypoint.html index 54d334cc..c03fc198 100644 --- a/typedoc/interfaces/BodyKeypoint.html +++ b/typedoc/interfaces/BodyKeypoint.html @@ -1,12 +1,12 @@ -BodyKeypoint | @vladmandic/human - v3.2.2

              Interface BodyKeypoint

              Body Result keypoints

              -
              interface BodyKeypoint {
                  distance?: Point;
                  part: BodyLandmark;
                  position: Point;
                  positionRaw: Point;
                  score: number;
              }

              Properties

              distance? +BodyKeypoint | @vladmandic/human - v3.3.0

              Interface BodyKeypoint

              Body Result keypoints

              +
              interface BodyKeypoint {
                  distance?: Point;
                  part: BodyLandmark;
                  position: Point;
                  positionRaw: Point;
                  score: number;
              }

              Properties

              distance?: Point

              body part position relative to body center in meters

              +

              Properties

              distance?: Point

              body part position relative to body center in meters

              body part name

              position: Point

              body part position

              positionRaw: Point

              body part position normalized to 0..1

              score: number

              body part detection score

              -
              \ No newline at end of file +
              diff --git a/typedoc/interfaces/BodyResult.html b/typedoc/interfaces/BodyResult.html index c57e54f4..68e80462 100644 --- a/typedoc/interfaces/BodyResult.html +++ b/typedoc/interfaces/BodyResult.html @@ -1,14 +1,14 @@ -BodyResult | @vladmandic/human - v3.2.2

              Interface BodyResult

              Body results

              -
              interface BodyResult {
                  annotations: Record<BodyAnnotation, Point[][]>;
                  box: Box;
                  boxRaw: Box;
                  id: number;
                  keypoints: BodyKeypoint[];
                  score: number;
              }

              Properties

              annotations +BodyResult | @vladmandic/human - v3.3.0

              Interface BodyResult

              Body results

              +
              interface BodyResult {
                  annotations: Record<BodyAnnotation, Point[][]>;
                  box: Box;
                  boxRaw: Box;
                  id: number;
                  keypoints: BodyKeypoint[];
                  score: number;
              }

              Properties

              annotations: Record<BodyAnnotation, Point[][]>

              detected body keypoints combined into annotated parts

              +

              Properties

              annotations: Record<BodyAnnotation, Point[][]>

              detected body keypoints combined into annotated parts

              box: Box

              detected body box

              boxRaw: Box

              detected body box normalized to 0..1

              id: number

              body id

              keypoints: BodyKeypoint[]

              detected body keypoints

              score: number

              body detection score

              -
              \ No newline at end of file +
              diff --git a/typedoc/interfaces/Config.html b/typedoc/interfaces/Config.html index e965ce17..bc5e43c0 100644 --- a/typedoc/interfaces/Config.html +++ b/typedoc/interfaces/Config.html @@ -1,7 +1,7 @@ -Config | @vladmandic/human - v3.2.2

              Interface Config

              Configuration interface definition for Human library +Config | @vladmandic/human - v3.3.0

              Interface Config

              Configuration interface definition for Human library Contains all configurable parameters -Defaults: config

              -
              interface Config {
                  async: boolean;
                  backend: BackendEnum;
                  body: Partial<BodyConfig>;
                  cacheModels: boolean;
                  cacheSensitivity: number;
                  deallocate: boolean;
                  debug: boolean;
                  face: Partial<FaceConfig>;
                  filter: Partial<FilterConfig>;
                  flags: Record<string, unknown>;
                  gesture: Partial<GestureConfig>;
                  hand: Partial<HandConfig>;
                  modelBasePath: string;
                  object: Partial<ObjectConfig>;
                  segmentation: Partial<SegmentationConfig>;
                  skipAllowed: boolean;
                  softwareKernels: boolean;
                  validateModels: boolean;
                  warmup: WarmupEnum;
                  wasmPath: string;
                  wasmPlatformFetch: boolean;
              }

              Properties

              async +Defaults: config

              +
              interface Config {
                  async: boolean;
                  backend: BackendEnum;
                  body: Partial<BodyConfig>;
                  cacheModels: boolean;
                  cacheSensitivity: number;
                  deallocate: boolean;
                  debug: boolean;
                  face: Partial<FaceConfig>;
                  filter: Partial<FilterConfig>;
                  flags: Record<string, unknown>;
                  gesture: Partial<GestureConfig>;
                  hand: Partial<HandConfig>;
                  modelBasePath: string;
                  object: Partial<ObjectConfig>;
                  segmentation: Partial<SegmentationConfig>;
                  skipAllowed: boolean;
                  softwareKernels: boolean;
                  validateModels: boolean;
                  warmup: WarmupEnum;
                  wasmPath: string;
                  wasmPlatformFetch: boolean;
              }

              Properties

              Properties

              async: boolean

              Perform model loading and inference concurrently or sequentially

              +

              Properties

              async: boolean

              Perform model loading and inference concurrently or sequentially

              default: true

              backend: BackendEnum

              Backend used for TFJS operations valid build-in backends are:

              @@ -71,4 +71,4 @@ any errors will be printed on console but will be treated as non-fatal

              default: auto-detects to link to CDN jsdelivr when running in browser

              wasmPlatformFetch: boolean

              Force WASM loader to use platform fetch

              default: false

              -
              \ No newline at end of file +
              diff --git a/typedoc/interfaces/DrawOptions.html b/typedoc/interfaces/DrawOptions.html index c7919461..1df1db4c 100644 --- a/typedoc/interfaces/DrawOptions.html +++ b/typedoc/interfaces/DrawOptions.html @@ -1,8 +1,8 @@ -DrawOptions | @vladmandic/human - v3.2.2

              Interface DrawOptions

              Draw Options

              +DrawOptions | @vladmandic/human - v3.3.0

              Interface DrawOptions

              Draw Options

              • Accessed via human.draw.options or provided per each draw method as the drawOptions optional parameter
              -
              interface DrawOptions {
                  alpha: number;
                  bodyLabels: string;
                  bodyPartLabels: string;
                  color: string;
                  drawAttention: boolean;
                  drawBoxes: boolean;
                  drawGaze: boolean;
                  drawGestures: boolean;
                  drawLabels: boolean;
                  drawPoints: boolean;
                  drawPolygons: boolean;
                  faceLabels: string;
                  fillPolygons: boolean;
                  fingerLabels: string;
                  font: string;
                  gestureLabels: string;
                  handLabels: string;
                  labelColor: string;
                  lineHeight: number;
                  lineWidth: number;
                  objectLabels: string;
                  pointSize: number;
                  roundRect: number;
                  shadowColor: string;
                  useCurves: boolean;
                  useDepth: boolean;
              }

              Properties

              interface DrawOptions {
                  alpha: number;
                  bodyLabels: string;
                  bodyPartLabels: string;
                  color: string;
                  drawAttention: boolean;
                  drawBoxes: boolean;
                  drawGaze: boolean;
                  drawGestures: boolean;
                  drawLabels: boolean;
                  drawPoints: boolean;
                  drawPolygons: boolean;
                  faceLabels: string;
                  fillPolygons: boolean;
                  fingerLabels: string;
                  font: string;
                  gestureLabels: string;
                  handLabels: string;
                  labelColor: string;
                  lineHeight: number;
                  lineWidth: number;
                  objectLabels: string;
                  pointSize: number;
                  roundRect: number;
                  shadowColor: string;
                  useCurves: boolean;
                  useDepth: boolean;
              }

              Properties

              alpha: number

              alpha value used for lines

              +

              Properties

              alpha: number

              alpha value used for lines

              bodyLabels: string

              string template for body labels

              bodyPartLabels: string

              string template for body part labels

              color: string

              draw line color

              @@ -54,4 +54,4 @@
              shadowColor: string

              label shadow color

              useCurves: boolean

              should lines be curved?

              useDepth: boolean

              use z-coordinate when available

              -
              \ No newline at end of file +
              diff --git a/typedoc/interfaces/FaceAntiSpoofConfig.html b/typedoc/interfaces/FaceAntiSpoofConfig.html index c47fad52..14232c7c 100644 --- a/typedoc/interfaces/FaceAntiSpoofConfig.html +++ b/typedoc/interfaces/FaceAntiSpoofConfig.html @@ -1,12 +1,12 @@ -FaceAntiSpoofConfig | @vladmandic/human - v3.2.2

              Interface FaceAntiSpoofConfig

              Anti-spoofing part of face configuration

              -
              interface FaceAntiSpoofConfig {
                  enabled: boolean;
                  modelPath: string;
                  skipFrames: number;
                  skipTime: number;
              }

              Hierarchy (view full)

              Properties

              enabled +FaceAntiSpoofConfig | @vladmandic/human - v3.3.0

              Interface FaceAntiSpoofConfig

              Anti-spoofing part of face configuration

              +
              interface FaceAntiSpoofConfig {
                  enabled: boolean;
                  modelPath: string;
                  skipFrames: number;
                  skipTime: number;
              }

              Hierarchy (view full)

              Properties

              enabled: boolean

              is module enabled?

              +

              Properties

              enabled: boolean

              is module enabled?

              modelPath: string

              path to model json file (relative to modelBasePath

              skipFrames: number

              how many max frames to go without re-running model if cached results are acceptable for two-phase models such as face and hand caching applies to bounding boxes detection only

              skipTime: number

              how many max milliseconds to go without re-running model if cached results are acceptable for two-phase models such as face and hand caching applies to bounding boxes detection only

              -
              \ No newline at end of file +
              diff --git a/typedoc/interfaces/FaceAttentionConfig.html b/typedoc/interfaces/FaceAttentionConfig.html index 12f7f604..148b4d52 100644 --- a/typedoc/interfaces/FaceAttentionConfig.html +++ b/typedoc/interfaces/FaceAttentionConfig.html @@ -1,12 +1,12 @@ -FaceAttentionConfig | @vladmandic/human - v3.2.2

              Interface FaceAttentionConfig

              Attention part of face configuration

              -
              interface FaceAttentionConfig {
                  enabled: boolean;
                  modelPath: string;
                  skipFrames: number;
                  skipTime: number;
              }

              Hierarchy (view full)

              Properties

              enabled +FaceAttentionConfig | @vladmandic/human - v3.3.0

              Interface FaceAttentionConfig

              Attention part of face configuration

              +
              interface FaceAttentionConfig {
                  enabled: boolean;
                  modelPath: string;
                  skipFrames: number;
                  skipTime: number;
              }

              Hierarchy (view full)

              Properties

              enabled: boolean

              is module enabled?

              +

              Properties

              enabled: boolean

              is module enabled?

              modelPath: string

              path to model json file (relative to modelBasePath

              skipFrames: number

              how many max frames to go without re-running model if cached results are acceptable for two-phase models such as face and hand caching applies to bounding boxes detection only

              skipTime: number

              how many max milliseconds to go without re-running model if cached results are acceptable for two-phase models such as face and hand caching applies to bounding boxes detection only

              -
              \ No newline at end of file +
              diff --git a/typedoc/interfaces/FaceConfig.html b/typedoc/interfaces/FaceConfig.html index a545c87d..48124850 100644 --- a/typedoc/interfaces/FaceConfig.html +++ b/typedoc/interfaces/FaceConfig.html @@ -1,5 +1,5 @@ -FaceConfig | @vladmandic/human - v3.2.2

              Interface FaceConfig

              Configures all face-specific options: face detection, mesh analysis, age, gender, emotion detection and face description

              -
              interface FaceConfig {
                  antispoof: Partial<FaceAntiSpoofConfig>;
                  attention: Partial<FaceAttentionConfig>;
                  description: Partial<FaceDescriptionConfig>;
                  detector: Partial<FaceDetectorConfig>;
                  emotion: Partial<FaceEmotionConfig>;
                  enabled: boolean;
                  gear: Partial<FaceGearConfig>;
                  iris: Partial<FaceIrisConfig>;
                  liveness: Partial<FaceLivenessConfig>;
                  mesh: Partial<FaceMeshConfig>;
                  modelPath: string;
                  skipFrames: number;
                  skipTime: number;
              }

              Hierarchy (view full)

              Properties

              antispoof +FaceConfig | @vladmandic/human - v3.3.0

              Interface FaceConfig

              Configures all face-specific options: face detection, mesh analysis, age, gender, emotion detection and face description

              +
              interface FaceConfig {
                  antispoof: Partial<FaceAntiSpoofConfig>;
                  attention: Partial<FaceAttentionConfig>;
                  description: Partial<FaceDescriptionConfig>;
                  detector: Partial<FaceDetectorConfig>;
                  emotion: Partial<FaceEmotionConfig>;
                  enabled: boolean;
                  gear: Partial<FaceGearConfig>;
                  iris: Partial<FaceIrisConfig>;
                  liveness: Partial<FaceLivenessConfig>;
                  mesh: Partial<FaceMeshConfig>;
                  modelPath: string;
                  skipFrames: number;
                  skipTime: number;
              }

              Hierarchy (view full)

              Properties

              antispoof: Partial<FaceAntiSpoofConfig>
              attention: Partial<FaceAttentionConfig>
              description: Partial<FaceDescriptionConfig>
              detector: Partial<FaceDetectorConfig>
              emotion: Partial<FaceEmotionConfig>
              enabled: boolean

              is module enabled?

              +

              Properties

              antispoof: Partial<FaceAntiSpoofConfig>
              attention: Partial<FaceAttentionConfig>
              description: Partial<FaceDescriptionConfig>
              detector: Partial<FaceDetectorConfig>
              emotion: Partial<FaceEmotionConfig>
              enabled: boolean

              is module enabled?

              gear: Partial<FaceGearConfig>
              iris: Partial<FaceIrisConfig>
              liveness: Partial<FaceLivenessConfig>
              mesh: Partial<FaceMeshConfig>
              modelPath: string

              path to model json file (relative to modelBasePath

              skipFrames: number

              how many max frames to go without re-running model if cached results are acceptable for two-phase models such as face and hand caching applies to bounding boxes detection only

              skipTime: number

              how many max milliseconds to go without re-running model if cached results are acceptable for two-phase models such as face and hand caching applies to bounding boxes detection only

              -
              \ No newline at end of file +
              diff --git a/typedoc/interfaces/FaceDescriptionConfig.html b/typedoc/interfaces/FaceDescriptionConfig.html index 194a17f2..09d72225 100644 --- a/typedoc/interfaces/FaceDescriptionConfig.html +++ b/typedoc/interfaces/FaceDescriptionConfig.html @@ -1,17 +1,17 @@ -FaceDescriptionConfig | @vladmandic/human - v3.2.2

              Interface FaceDescriptionConfig

              Description or face embedding part of face configuration

              +FaceDescriptionConfig | @vladmandic/human - v3.3.0

              Interface FaceDescriptionConfig

              Description or face embedding part of face configuration

              • also used by age and gender detection
              -
              interface FaceDescriptionConfig {
                  enabled: boolean;
                  minConfidence: number;
                  modelPath: string;
                  skipFrames: number;
                  skipTime: number;
              }

              Hierarchy (view full)

              Properties

              interface FaceDescriptionConfig {
                  enabled: boolean;
                  minConfidence: number;
                  modelPath: string;
                  skipFrames: number;
                  skipTime: number;
              }

              Hierarchy (view full)

              Properties

              enabled: boolean

              is module enabled?

              +

              Properties

              enabled: boolean

              is module enabled?

              minConfidence: number

              minimum confidence for a detected face before results are discarded

              modelPath: string

              path to model json file (relative to modelBasePath

              skipFrames: number

              how many max frames to go without re-running model if cached results are acceptable for two-phase models such as face and hand caching applies to bounding boxes detection only

              skipTime: number

              how many max milliseconds to go without re-running model if cached results are acceptable for two-phase models such as face and hand caching applies to bounding boxes detection only

              -
              \ No newline at end of file +
              diff --git a/typedoc/interfaces/FaceDetectorConfig.html b/typedoc/interfaces/FaceDetectorConfig.html index 1f41c996..f8e7a545 100644 --- a/typedoc/interfaces/FaceDetectorConfig.html +++ b/typedoc/interfaces/FaceDetectorConfig.html @@ -1,5 +1,5 @@ -FaceDetectorConfig | @vladmandic/human - v3.2.2

              Interface FaceDetectorConfig

              Detector part of face configuration

              -
              interface FaceDetectorConfig {
                  enabled: boolean;
                  iouThreshold: number;
                  mask: boolean;
                  maxDetected: number;
                  minConfidence: number;
                  minSize: number;
                  modelPath: string;
                  return: boolean;
                  rotation: boolean;
                  scale: number;
                  skipFrames: number;
                  skipTime: number;
              }

              Hierarchy (view full)

              Properties

              enabled +FaceDetectorConfig | @vladmandic/human - v3.3.0

              Interface FaceDetectorConfig

              Detector part of face configuration

              +
              interface FaceDetectorConfig {
                  enabled: boolean;
                  iouThreshold: number;
                  mask: boolean;
                  maxDetected: number;
                  minConfidence: number;
                  minSize: number;
                  modelPath: string;
                  return: boolean;
                  rotation: boolean;
                  scale: number;
                  skipFrames: number;
                  skipTime: number;
              }

              Hierarchy (view full)

              Properties

              enabled: boolean

              is module enabled?

              +

              Properties

              enabled: boolean

              is module enabled?

              iouThreshold: number

              minimum overlap between two detected faces before one is discarded

              mask: boolean

              should child models perform on masked image of a face

              maxDetected: number

              maximum number of detected faces

              @@ -27,4 +27,4 @@ used to correctly analyze faces under high angles

              for two-phase models such as face and hand caching applies to bounding boxes detection only

              skipTime: number

              how many max milliseconds to go without re-running model if cached results are acceptable for two-phase models such as face and hand caching applies to bounding boxes detection only

              -
              \ No newline at end of file +
              diff --git a/typedoc/interfaces/FaceEmotionConfig.html b/typedoc/interfaces/FaceEmotionConfig.html index cdfe2deb..9ab6a888 100644 --- a/typedoc/interfaces/FaceEmotionConfig.html +++ b/typedoc/interfaces/FaceEmotionConfig.html @@ -1,14 +1,14 @@ -FaceEmotionConfig | @vladmandic/human - v3.2.2

              Interface FaceEmotionConfig

              Emotion part of face configuration

              -
              interface FaceEmotionConfig {
                  enabled: boolean;
                  minConfidence: number;
                  modelPath: string;
                  skipFrames: number;
                  skipTime: number;
              }

              Hierarchy (view full)

              Properties

              enabled +FaceEmotionConfig | @vladmandic/human - v3.3.0

              Interface FaceEmotionConfig

              Emotion part of face configuration

              +
              interface FaceEmotionConfig {
                  enabled: boolean;
                  minConfidence: number;
                  modelPath: string;
                  skipFrames: number;
                  skipTime: number;
              }

              Hierarchy (view full)

              Properties

              enabled: boolean

              is module enabled?

              +

              Properties

              enabled: boolean

              is module enabled?

              minConfidence: number

              minimum confidence for a detected face before results are discarded

              modelPath: string

              path to model json file (relative to modelBasePath

              skipFrames: number

              how many max frames to go without re-running model if cached results are acceptable for two-phase models such as face and hand caching applies to bounding boxes detection only

              skipTime: number

              how many max milliseconds to go without re-running model if cached results are acceptable for two-phase models such as face and hand caching applies to bounding boxes detection only

              -
              \ No newline at end of file +
              diff --git a/typedoc/interfaces/FaceGearConfig.html b/typedoc/interfaces/FaceGearConfig.html index 3eec129f..0af57b31 100644 --- a/typedoc/interfaces/FaceGearConfig.html +++ b/typedoc/interfaces/FaceGearConfig.html @@ -1,14 +1,14 @@ -FaceGearConfig | @vladmandic/human - v3.2.2

              Interface FaceGearConfig

              Gear part of face configuration

              -
              interface FaceGearConfig {
                  enabled: boolean;
                  minConfidence: number;
                  modelPath: string;
                  skipFrames: number;
                  skipTime: number;
              }

              Hierarchy (view full)

              Properties

              enabled +FaceGearConfig | @vladmandic/human - v3.3.0

              Interface FaceGearConfig

              Gear part of face configuration

              +
              interface FaceGearConfig {
                  enabled: boolean;
                  minConfidence: number;
                  modelPath: string;
                  skipFrames: number;
                  skipTime: number;
              }

              Hierarchy (view full)

              Properties

              enabled: boolean

              is module enabled?

              +

              Properties

              enabled: boolean

              is module enabled?

              minConfidence: number

              minimum confidence for a detected race before results are discarded

              modelPath: string

              path to model json file (relative to modelBasePath

              skipFrames: number

              how many max frames to go without re-running model if cached results are acceptable for two-phase models such as face and hand caching applies to bounding boxes detection only

              skipTime: number

              how many max milliseconds to go without re-running model if cached results are acceptable for two-phase models such as face and hand caching applies to bounding boxes detection only

              -
              \ No newline at end of file +
              diff --git a/typedoc/interfaces/FaceIrisConfig.html b/typedoc/interfaces/FaceIrisConfig.html index 35d1ad9c..7d4ec899 100644 --- a/typedoc/interfaces/FaceIrisConfig.html +++ b/typedoc/interfaces/FaceIrisConfig.html @@ -1,14 +1,14 @@ -FaceIrisConfig | @vladmandic/human - v3.2.2

              Interface FaceIrisConfig

              Iris part of face configuration

              -
              interface FaceIrisConfig {
                  enabled: boolean;
                  modelPath: string;
                  scale: number;
                  skipFrames: number;
                  skipTime: number;
              }

              Hierarchy (view full)

              Properties

              enabled +FaceIrisConfig | @vladmandic/human - v3.3.0

              Interface FaceIrisConfig

              Iris part of face configuration

              +
              interface FaceIrisConfig {
                  enabled: boolean;
                  modelPath: string;
                  scale: number;
                  skipFrames: number;
                  skipTime: number;
              }

              Hierarchy (view full)

              Properties

              enabled: boolean

              is module enabled?

              +

              Properties

              enabled: boolean

              is module enabled?

              modelPath: string

              path to model json file (relative to modelBasePath

              scale: number

              how much should iris box be enlarged over the min/max iris coordinates

              skipFrames: number

              how many max frames to go without re-running model if cached results are acceptable for two-phase models such as face and hand caching applies to bounding boxes detection only

              skipTime: number

              how many max milliseconds to go without re-running model if cached results are acceptable for two-phase models such as face and hand caching applies to bounding boxes detection only

              -
              \ No newline at end of file +
              diff --git a/typedoc/interfaces/FaceLivenessConfig.html b/typedoc/interfaces/FaceLivenessConfig.html index d12ad5f0..2e22c6ec 100644 --- a/typedoc/interfaces/FaceLivenessConfig.html +++ b/typedoc/interfaces/FaceLivenessConfig.html @@ -1,12 +1,12 @@ -FaceLivenessConfig | @vladmandic/human - v3.2.2

              Interface FaceLivenessConfig

              Liveness part of face configuration

              -
              interface FaceLivenessConfig {
                  enabled: boolean;
                  modelPath: string;
                  skipFrames: number;
                  skipTime: number;
              }

              Hierarchy (view full)

              Properties

              enabled +FaceLivenessConfig | @vladmandic/human - v3.3.0

              Interface FaceLivenessConfig

              Liveness part of face configuration

              +
              interface FaceLivenessConfig {
                  enabled: boolean;
                  modelPath: string;
                  skipFrames: number;
                  skipTime: number;
              }

              Hierarchy (view full)

              Properties

              enabled: boolean

              is module enabled?

              +

              Properties

              enabled: boolean

              is module enabled?

              modelPath: string

              path to model json file (relative to modelBasePath

              skipFrames: number

              how many max frames to go without re-running model if cached results are acceptable for two-phase models such as face and hand caching applies to bounding boxes detection only

              skipTime: number

              how many max milliseconds to go without re-running model if cached results are acceptable for two-phase models such as face and hand caching applies to bounding boxes detection only

              -
              \ No newline at end of file +
              diff --git a/typedoc/interfaces/FaceMeshConfig.html b/typedoc/interfaces/FaceMeshConfig.html index 1f437f16..966392dc 100644 --- a/typedoc/interfaces/FaceMeshConfig.html +++ b/typedoc/interfaces/FaceMeshConfig.html @@ -1,14 +1,14 @@ -FaceMeshConfig | @vladmandic/human - v3.2.2

              Interface FaceMeshConfig

              Mesh part of face configuration

              -
              interface FaceMeshConfig {
                  enabled: boolean;
                  keepInvalid: boolean;
                  modelPath: string;
                  skipFrames: number;
                  skipTime: number;
              }

              Hierarchy (view full)

              Properties

              enabled +FaceMeshConfig | @vladmandic/human - v3.3.0

              Interface FaceMeshConfig

              Mesh part of face configuration

              +
              interface FaceMeshConfig {
                  enabled: boolean;
                  keepInvalid: boolean;
                  modelPath: string;
                  skipFrames: number;
                  skipTime: number;
              }

              Hierarchy (view full)

              Properties

              enabled: boolean

              is module enabled?

              +

              Properties

              enabled: boolean

              is module enabled?

              keepInvalid: boolean

              Keep detected faces that cannot be verified using facemesh

              modelPath: string

              path to model json file (relative to modelBasePath

              skipFrames: number

              how many max frames to go without re-running model if cached results are acceptable for two-phase models such as face and hand caching applies to bounding boxes detection only

              skipTime: number

              how many max milliseconds to go without re-running model if cached results are acceptable for two-phase models such as face and hand caching applies to bounding boxes detection only

              -
              \ No newline at end of file +
              diff --git a/typedoc/interfaces/FaceResult.html b/typedoc/interfaces/FaceResult.html index 818fc80b..f742cd24 100644 --- a/typedoc/interfaces/FaceResult.html +++ b/typedoc/interfaces/FaceResult.html @@ -1,9 +1,9 @@ -FaceResult | @vladmandic/human - v3.2.2

              Interface FaceResult

              Face results

              +FaceResult | @vladmandic/human - v3.3.0

              Interface FaceResult

              Face results

              • Combined results of face detector, face mesh, age, gender, emotion, embedding, iris models
              • Some values may be null if specific model is not enabled
              -
              interface FaceResult {
                  age?: number;
                  annotations: Record<FaceLandmark, Point[]>;
                  box: Box;
                  boxRaw: Box;
                  boxScore: number;
                  distance?: number;
                  embedding?: number[];
                  emotion?: {
                      emotion: Emotion;
                      score: number;
                  }[];
                  faceScore: number;
                  gender?: Gender;
                  genderScore?: number;
                  id: number;
                  live?: number;
                  mesh: Point[];
                  meshRaw: Point[];
                  race?: {
                      race: Race;
                      score: number;
                  }[];
                  real?: number;
                  rotation?: null | {
                      angle: {
                          pitch: number;
                          roll: number;
                          yaw: number;
                      };
                      gaze: {
                          bearing: number;
                          strength: number;
                      };
                      matrix: [number, number, number, number, number, number, number, number, number];
                  };
                  score: number;
                  size: [number, number];
                  tensor?: Tensor<Rank>;
              }

              Properties

              interface FaceResult {
                  age?: number;
                  annotations: Record<FaceLandmark, Point[]>;
                  box: Box;
                  boxRaw: Box;
                  boxScore: number;
                  distance?: number;
                  embedding?: number[];
                  emotion?: {
                      emotion: Emotion;
                      score: number;
                  }[];
                  faceScore: number;
                  gender?: Gender;
                  genderScore?: number;
                  id: number;
                  live?: number;
                  mesh: Point[];
                  meshRaw: Point[];
                  race?: {
                      race: Race;
                      score: number;
                  }[];
                  real?: number;
                  rotation?: null | {
                      angle: {
                          pitch: number;
                          roll: number;
                          yaw: number;
                      };
                      gaze: {
                          bearing: number;
                          strength: number;
                      };
                      matrix: [number, number, number, number, number, number, number, number, number];
                  };
                  score: number;
                  size: [number, number];
                  tensor?: Tensor<Rank>;
              }

              Properties

              age? annotations box boxRaw @@ -24,25 +24,25 @@ score size tensor? -

              Properties

              age?: number

              detected age

              +

              Properties

              age?: number

              detected age

              annotations: Record<FaceLandmark, Point[]>

              mesh keypoints combined into annotated results

              box: Box

              detected face box

              boxRaw: Box

              detected face box normalized to 0..1

              boxScore: number

              detection score

              -
              distance?: number

              face distance from camera

              -
              embedding?: number[]

              face descriptor

              -
              emotion?: {
                  emotion: Emotion;
                  score: number;
              }[]

              detected emotions

              -

              Type declaration

              faceScore: number

              mesh score

              -
              gender?: Gender

              detected gender

              -
              genderScore?: number

              gender detection score

              +
              distance?: number

              face distance from camera

              +
              embedding?: number[]

              face descriptor

              +
              emotion?: {
                  emotion: Emotion;
                  score: number;
              }[]

              detected emotions

              +
              faceScore: number

              mesh score

              +
              gender?: Gender

              detected gender

              +
              genderScore?: number

              gender detection score

              id: number

              face id

              -
              live?: number

              face liveness result confidence

              +
              live?: number

              face liveness result confidence

              mesh: Point[]

              detected face mesh

              meshRaw: Point[]

              detected face mesh normalized to 0..1

              -
              race?: {
                  race: Race;
                  score: number;
              }[]

              detected race

              -

              Type declaration

              • race: Race
              • score: number
              real?: number

              face anti-spoofing result confidence

              -
              rotation?: null | {
                  angle: {
                      pitch: number;
                      roll: number;
                      yaw: number;
                  };
                  gaze: {
                      bearing: number;
                      strength: number;
                  };
                  matrix: [number, number, number, number, number, number, number, number, number];
              }

              face rotation details

              -

              Type declaration

              • angle: {
                    pitch: number;
                    roll: number;
                    yaw: number;
                }
                • pitch: number
                • roll: number
                • yaw: number
              • gaze: {
                    bearing: number;
                    strength: number;
                }
                • bearing: number
                • strength: number
              • matrix: [number, number, number, number, number, number, number, number, number]
              score: number

              overall face score

              +
              race?: {
                  race: Race;
                  score: number;
              }[]

              detected race

              +
              real?: number

              face anti-spoofing result confidence

              +
              rotation?: null | {
                  angle: {
                      pitch: number;
                      roll: number;
                      yaw: number;
                  };
                  gaze: {
                      bearing: number;
                      strength: number;
                  };
                  matrix: [number, number, number, number, number, number, number, number, number];
              }

              face rotation details

              +
              score: number

              overall face score

              size: [number, number]

              detected face box size

              -
              tensor?: Tensor<Rank>

              detected face as tensor that can be used in further pipelines

              -
              \ No newline at end of file +
              tensor?: Tensor<Rank>

              detected face as tensor that can be used in further pipelines

              +
              diff --git a/typedoc/interfaces/FilterConfig.html b/typedoc/interfaces/FilterConfig.html index aee9925e..ffee093a 100644 --- a/typedoc/interfaces/FilterConfig.html +++ b/typedoc/interfaces/FilterConfig.html @@ -1,9 +1,9 @@ -FilterConfig | @vladmandic/human - v3.2.2

              Interface FilterConfig

              Run input through image filters before inference

              +FilterConfig | @vladmandic/human - v3.3.0

              Interface FilterConfig

              Run input through image filters before inference

              • available only in Browser environments
              • image filters run with near-zero latency as they are executed on the GPU using WebGL
              -
              interface FilterConfig {
                  autoBrightness: boolean;
                  blur: number;
                  brightness: number;
                  contrast: number;
                  enabled: boolean;
                  equalization: boolean;
                  flip: boolean;
                  height: number;
                  hue: number;
                  kodachrome: boolean;
                  negative: boolean;
                  pixelate: number;
                  polaroid: boolean;
                  return: boolean;
                  saturation: number;
                  sepia: boolean;
                  sharpness: number;
                  technicolor: boolean;
                  vintage: boolean;
                  width: number;
              }

              Properties

              interface FilterConfig {
                  autoBrightness: boolean;
                  blur: number;
                  brightness: number;
                  contrast: number;
                  enabled: boolean;
                  equalization: boolean;
                  flip: boolean;
                  height: number;
                  hue: number;
                  kodachrome: boolean;
                  negative: boolean;
                  pixelate: number;
                  polaroid: boolean;
                  return: boolean;
                  saturation: number;
                  sepia: boolean;
                  sharpness: number;
                  technicolor: boolean;
                  vintage: boolean;
                  width: number;
              }

              Properties

              autoBrightness: boolean

              apply auto-brighness

              +

              Properties

              autoBrightness: boolean

              apply auto-brighness

              blur: number

              range: 0 (no blur) to N (blur radius in pixels)

              brightness: number

              range: -1 (darken) to 1 (lighten)

              contrast: number

              range: -1 (reduce contrast) to 1 (increase contrast)

              @@ -56,4 +56,4 @@
            • if just one is set, second one is scaled automatically
            • if both are set, values are used as-is
            • -
              \ No newline at end of file +
              diff --git a/typedoc/interfaces/GenericConfig.html b/typedoc/interfaces/GenericConfig.html index 53015112..aaebc0eb 100644 --- a/typedoc/interfaces/GenericConfig.html +++ b/typedoc/interfaces/GenericConfig.html @@ -1,12 +1,12 @@ -GenericConfig | @vladmandic/human - v3.2.2

              Interface GenericConfig

              Generic config type inherited by all module types

              -
              interface GenericConfig {
                  enabled: boolean;
                  modelPath: string;
                  skipFrames: number;
                  skipTime: number;
              }

              Hierarchy (view full)

              Properties

              enabled +GenericConfig | @vladmandic/human - v3.3.0

              Interface GenericConfig

              Generic config type inherited by all module types

              +
              interface GenericConfig {
                  enabled: boolean;
                  modelPath: string;
                  skipFrames: number;
                  skipTime: number;
              }

              Hierarchy (view full)

              Properties

              enabled: boolean

              is module enabled?

              +

              Properties

              enabled: boolean

              is module enabled?

              modelPath: string

              path to model json file (relative to modelBasePath

              skipFrames: number

              how many max frames to go without re-running model if cached results are acceptable for two-phase models such as face and hand caching applies to bounding boxes detection only

              skipTime: number

              how many max milliseconds to go without re-running model if cached results are acceptable for two-phase models such as face and hand caching applies to bounding boxes detection only

              -
              \ No newline at end of file +
              diff --git a/typedoc/interfaces/GestureConfig.html b/typedoc/interfaces/GestureConfig.html index 3e3dccc2..b10f303d 100644 --- a/typedoc/interfaces/GestureConfig.html +++ b/typedoc/interfaces/GestureConfig.html @@ -1,4 +1,4 @@ -GestureConfig | @vladmandic/human - v3.2.2

              Interface GestureConfig

              Controlls gesture detection

              -
              interface GestureConfig {
                  enabled: boolean;
              }

              Properties

              Properties

              enabled: boolean

              is gesture detection enabled?

              -
              \ No newline at end of file +GestureConfig | @vladmandic/human - v3.3.0

              Interface GestureConfig

              Controlls gesture detection

              +
              interface GestureConfig {
                  enabled: boolean;
              }

              Properties

              Properties

              enabled: boolean

              is gesture detection enabled?

              +
              diff --git a/typedoc/interfaces/HandConfig.html b/typedoc/interfaces/HandConfig.html index 18ade98c..b312c112 100644 --- a/typedoc/interfaces/HandConfig.html +++ b/typedoc/interfaces/HandConfig.html @@ -1,5 +1,5 @@ -HandConfig | @vladmandic/human - v3.2.2

              Interface HandConfig

              Configures all hand detection specific options

              -
              interface HandConfig {
                  detector: {
                      modelPath?: string;
                  };
                  enabled: boolean;
                  iouThreshold: number;
                  landmarks: boolean;
                  maxDetected: number;
                  minConfidence: number;
                  modelPath: string;
                  rotation: boolean;
                  skeleton: {
                      modelPath?: string;
                  };
                  skipFrames: number;
                  skipTime: number;
              }

              Hierarchy (view full)

              Properties

              detector +HandConfig | @vladmandic/human - v3.3.0

              Interface HandConfig

              Configures all hand detection specific options

              +
              interface HandConfig {
                  detector: {
                      modelPath?: string;
                  };
                  enabled: boolean;
                  iouThreshold: number;
                  landmarks: boolean;
                  maxDetected: number;
                  minConfidence: number;
                  modelPath: string;
                  rotation: boolean;
                  skeleton: {
                      modelPath?: string;
                  };
                  skipFrames: number;
                  skipTime: number;
              }

              Hierarchy (view full)

              Properties

              detector: {
                  modelPath?: string;
              }

              Type declaration

              • Optional modelPath?: string

                path to hand detector model json

                +

              Properties

              detector: {
                  modelPath?: string;
              }

              Type declaration

              • OptionalmodelPath?: string

                path to hand detector model json

              enabled: boolean

              is module enabled?

              iouThreshold: number

              minimum overlap between two detected hands before one is discarded

              landmarks: boolean

              should hand landmarks be detected or just return detected hand box

              @@ -18,9 +18,9 @@
              minConfidence: number

              minimum confidence for a detected hand before results are discarded

              modelPath: string

              path to model json file (relative to modelBasePath

              rotation: boolean

              should hand rotation correction be performed after hand detection?

              -
              skeleton: {
                  modelPath?: string;
              }

              Type declaration

              • Optional modelPath?: string

                path to hand skeleton model json

                +
              skeleton: {
                  modelPath?: string;
              }

              Type declaration

              • OptionalmodelPath?: string

                path to hand skeleton model json

              skipFrames: number

              how many max frames to go without re-running model if cached results are acceptable for two-phase models such as face and hand caching applies to bounding boxes detection only

              skipTime: number

              how many max milliseconds to go without re-running model if cached results are acceptable for two-phase models such as face and hand caching applies to bounding boxes detection only

              -
              \ No newline at end of file +
              diff --git a/typedoc/interfaces/HandResult.html b/typedoc/interfaces/HandResult.html index 9f4451be..d0ea0ebd 100644 --- a/typedoc/interfaces/HandResult.html +++ b/typedoc/interfaces/HandResult.html @@ -1,5 +1,5 @@ -HandResult | @vladmandic/human - v3.2.2

              Interface HandResult

              Hand results

              -
              interface HandResult {
                  annotations: Record<Finger, Point[]>;
                  box: Box;
                  boxRaw: Box;
                  boxScore: number;
                  fingerScore: number;
                  id: number;
                  keypoints: Point[];
                  label: HandType;
                  landmarks: Record<Finger, {
                      curl: FingerCurl;
                      direction: FingerDirection;
                  }>;
                  score: number;
              }

              Properties

              annotations +HandResult | @vladmandic/human - v3.3.0

              Interface HandResult

              Hand results

              +
              interface HandResult {
                  annotations: Record<Finger, Point[]>;
                  box: Box;
                  boxRaw: Box;
                  boxScore: number;
                  fingerScore: number;
                  id: number;
                  keypoints: Point[];
                  label: HandType;
                  landmarks: Record<Finger, {
                      curl: FingerCurl;
                      direction: FingerDirection;
                  }>;
                  score: number;
              }

              Properties

              Properties

              annotations: Record<Finger, Point[]>

              detected hand keypoints combined into annotated parts

              +

              Properties

              annotations: Record<Finger, Point[]>

              detected hand keypoints combined into annotated parts

              box: Box

              detected hand box

              boxRaw: Box

              detected hand box normalized to 0..1

              boxScore: number

              hand detection score

              @@ -18,5 +18,5 @@
              keypoints: Point[]

              detected hand keypoints

              label: HandType

              detected hand class

              landmarks: Record<Finger, {
                  curl: FingerCurl;
                  direction: FingerDirection;
              }>

              detected hand parts annotated with part gestures

              -

              Type declaration

              score: number

              hand overal score

              -
              \ No newline at end of file +
              score: number

              hand overal score

              +
              diff --git a/typedoc/interfaces/ModelInfo.html b/typedoc/interfaces/ModelInfo.html index a65179e7..dfbccc6f 100644 --- a/typedoc/interfaces/ModelInfo.html +++ b/typedoc/interfaces/ModelInfo.html @@ -1,7 +1,7 @@ -ModelInfo | @vladmandic/human - v3.2.2

              Interface ModelInfo

              interface ModelInfo {
                  inCache: boolean;
                  name: string;
                  sizeDesired: number;
                  sizeFromManifest: number;
                  sizeLoadedWeights: number;
                  url: string;
              }

              Properties

              inCache +ModelInfo | @vladmandic/human - v3.3.0

              Interface ModelInfo

              interface ModelInfo {
                  inCache: boolean;
                  name: string;
                  sizeDesired: number;
                  sizeFromManifest: number;
                  sizeLoadedWeights: number;
                  url: string;
              }

              Properties

              inCache: boolean
              name: string
              sizeDesired: number
              sizeFromManifest: number
              sizeLoadedWeights: number
              url: string
              \ No newline at end of file +

              Properties

              inCache: boolean
              name: string
              sizeDesired: number
              sizeFromManifest: number
              sizeLoadedWeights: number
              url: string
              diff --git a/typedoc/interfaces/ObjectConfig.html b/typedoc/interfaces/ObjectConfig.html index eaf47ea0..b04157be 100644 --- a/typedoc/interfaces/ObjectConfig.html +++ b/typedoc/interfaces/ObjectConfig.html @@ -1,12 +1,12 @@ -ObjectConfig | @vladmandic/human - v3.2.2

              Interface ObjectConfig

              Configures all object detection specific options

              -
              interface ObjectConfig {
                  enabled: boolean;
                  iouThreshold: number;
                  maxDetected: number;
                  minConfidence: number;
                  modelPath: string;
                  skipFrames: number;
                  skipTime: number;
              }

              Hierarchy (view full)

              Properties

              enabled +ObjectConfig | @vladmandic/human - v3.3.0

              Interface ObjectConfig

              Configures all object detection specific options

              +
              interface ObjectConfig {
                  enabled: boolean;
                  iouThreshold: number;
                  maxDetected: number;
                  minConfidence: number;
                  modelPath: string;
                  skipFrames: number;
                  skipTime: number;
              }

              Hierarchy (view full)

              Properties

              enabled: boolean

              is module enabled?

              +

              Properties

              enabled: boolean

              is module enabled?

              iouThreshold: number

              minimum overlap between two detected objects before one is discarded

              maxDetected: number

              maximum number of detected objects

              minConfidence: number

              minimum confidence for a detected objects before results are discarded

              @@ -15,4 +15,4 @@ for two-phase models such as face and hand caching applies to bounding boxes detection only

              skipTime: number

              how many max milliseconds to go without re-running model if cached results are acceptable for two-phase models such as face and hand caching applies to bounding boxes detection only

              -
              \ No newline at end of file +
              diff --git a/typedoc/interfaces/ObjectResult.html b/typedoc/interfaces/ObjectResult.html index 009e474c..1c906871 100644 --- a/typedoc/interfaces/ObjectResult.html +++ b/typedoc/interfaces/ObjectResult.html @@ -1,14 +1,14 @@ -ObjectResult | @vladmandic/human - v3.2.2

              Interface ObjectResult

              Object results

              -
              interface ObjectResult {
                  box: Box;
                  boxRaw: Box;
                  class: number;
                  id: number;
                  label: ObjectType;
                  score: number;
              }

              Properties

              box +ObjectResult | @vladmandic/human - v3.3.0

              Interface ObjectResult

              Object results

              +
              interface ObjectResult {
                  box: Box;
                  boxRaw: Box;
                  class: number;
                  id: number;
                  label: ObjectType;
                  score: number;
              }

              Properties

              box: Box

              detected object box

              +

              Properties

              box: Box

              detected object box

              boxRaw: Box

              detected object box normalized to 0..1

              class: number

              detected object class id

              id: number

              object id

              label: ObjectType

              detected object class name

              score: number

              object detection score

              -
              \ No newline at end of file +
              diff --git a/typedoc/interfaces/PersonResult.html b/typedoc/interfaces/PersonResult.html index 9e42b394..0180660b 100644 --- a/typedoc/interfaces/PersonResult.html +++ b/typedoc/interfaces/PersonResult.html @@ -1,19 +1,19 @@ -PersonResult | @vladmandic/human - v3.2.2

              Interface PersonResult

              Person getter

              +PersonResult | @vladmandic/human - v3.3.0

              Interface PersonResult

              Person getter

              • Triggers combining all individual results into a virtual person object
              -
              interface PersonResult {
                  body: null | BodyResult;
                  box: Box;
                  boxRaw?: Box;
                  face: FaceResult;
                  gestures: GestureResult[];
                  hands: {
                      left: null | HandResult;
                      right: null | HandResult;
                  };
                  id: number;
              }

              Properties

              interface PersonResult {
                  body: null | BodyResult;
                  box: Box;
                  boxRaw?: Box;
                  face: FaceResult;
                  gestures: GestureResult[];
                  hands: {
                      left: null | HandResult;
                      right: null | HandResult;
                  };
                  id: number;
              }

              Properties

              body: null | BodyResult

              body result that belongs to this person

              +

              Properties

              body: null | BodyResult

              body result that belongs to this person

              box: Box

              box that defines the person

              -
              boxRaw?: Box

              box that defines the person normalized to 0..1

              +
              boxRaw?: Box

              box that defines the person normalized to 0..1

              face result that belongs to this person

              gestures: GestureResult[]

              detected gestures specific to this person

              hands: {
                  left: null | HandResult;
                  right: null | HandResult;
              }

              left and right hand results that belong to this person

              -

              Type declaration

              id: number

              person id

              -
              \ No newline at end of file +
              id: number

              person id

              +
              diff --git a/typedoc/interfaces/Result.html b/typedoc/interfaces/Result.html index 633cc66b..3ab81c39 100644 --- a/typedoc/interfaces/Result.html +++ b/typedoc/interfaces/Result.html @@ -1,6 +1,6 @@ -Result | @vladmandic/human - v3.2.2

              Interface Result

              Result interface definition for Human library

              +Result | @vladmandic/human - v3.3.0

              Interface Result

              Result interface definition for Human library

              Contains all possible detection results

              -
              interface Result {
                  body: BodyResult[];
                  canvas?: null | AnyCanvas;
                  error: null | string;
                  face: FaceResult[];
                  gesture: GestureResult[];
                  hand: HandResult[];
                  height: number;
                  object: ObjectResult[];
                  performance: Record<string, number>;
                  persons: PersonResult[];
                  timestamp: number;
                  width: number;
              }

              Properties

              interface Result {
                  body: BodyResult[];
                  canvas?: null | AnyCanvas;
                  error: null | string;
                  face: FaceResult[];
                  gesture: GestureResult[];
                  hand: HandResult[];
                  height: number;
                  object: ObjectResult[];
                  performance: Record<string, number>;
                  persons: PersonResult[];
                  timestamp: number;
                  width: number;
              }

              Properties

              Properties

              body: BodyResult[]

              BodyResult: detection & analysis results

              -
              canvas?: null | AnyCanvas

              optional processed canvas that can be used to draw input on screen

              +

              Properties

              body: BodyResult[]

              BodyResult: detection & analysis results

              +
              canvas?: null | AnyCanvas

              optional processed canvas that can be used to draw input on screen

              error: null | string

              Last known error message

              face: FaceResult[]

              FaceResult: detection & analysis results

              gesture: GestureResult[]

              GestureResult: detection & analysis results

              @@ -22,6 +22,6 @@
              object: ObjectResult[]

              ObjectResult: detection & analysis results

              performance: Record<string, number>

              global performance object with timing values for each operation

              persons: PersonResult[]

              getter property that returns unified persons object

              -
              timestamp: number

              timestamp of detection representing the milliseconds elapsed since the UNIX epoch

              +
              timestamp: number

              timestamp of detection representing the milliseconds elapsed since the UNIX epoch

              width: number

              Resolution width

              -
              \ No newline at end of file +
              diff --git a/typedoc/interfaces/SegmentationConfig.html b/typedoc/interfaces/SegmentationConfig.html index ffb08ca0..60468ca1 100644 --- a/typedoc/interfaces/SegmentationConfig.html +++ b/typedoc/interfaces/SegmentationConfig.html @@ -1,15 +1,15 @@ -SegmentationConfig | @vladmandic/human - v3.2.2

              Interface SegmentationConfig

              Configures all body segmentation module +SegmentationConfig | @vladmandic/human - v3.3.0

              Interface SegmentationConfig

              Configures all body segmentation module removes background from input containing person if segmentation is enabled it will run as preprocessing task before any other model alternatively leave it disabled and use it on-demand using human.segmentation method which can remove background or replace it with user-provided background

              -
              interface SegmentationConfig {
                  enabled: boolean;
                  mode: SegmentationEnum;
                  modelPath: string;
                  ratio: number;
                  skipFrames: number;
                  skipTime: number;
              }

              Hierarchy (view full)

              Properties

              interface SegmentationConfig {
                  enabled: boolean;
                  mode: SegmentationEnum;
                  modelPath: string;
                  ratio: number;
                  skipFrames: number;
                  skipTime: number;
              }

              Hierarchy (view full)

              Properties

              enabled: boolean

              is module enabled?

              +

              Properties

              enabled: boolean

              is module enabled?

              possible rvm segmentation mode

              modelPath: string

              path to model json file (relative to modelBasePath

              ratio: number

              downsample ratio, adjust to reflect approximately how much of input is taken by body

              @@ -17,4 +17,4 @@ remove background or replace it with user-provided background

              for two-phase models such as face and hand caching applies to bounding boxes detection only

              skipTime: number

              how many max milliseconds to go without re-running model if cached results are acceptable for two-phase models such as face and hand caching applies to bounding boxes detection only

              -
              \ No newline at end of file +
              diff --git a/typedoc/interfaces/WebCamConfig.html b/typedoc/interfaces/WebCamConfig.html index 5d14e62b..b1023421 100644 --- a/typedoc/interfaces/WebCamConfig.html +++ b/typedoc/interfaces/WebCamConfig.html @@ -1,12 +1,12 @@ -WebCamConfig | @vladmandic/human - v3.2.2

              Interface WebCamConfig

              WebCam configuration

              -
              interface WebCamConfig {
                  crop: boolean;
                  debug: boolean;
                  element: undefined | string | HTMLVideoElement;
                  height: number;
                  id?: string;
                  mode: "front" | "back";
                  width: number;
              }

              Properties

              crop +WebCamConfig | @vladmandic/human - v3.3.0

              Interface WebCamConfig

              WebCam configuration

              +
              interface WebCamConfig {
                  crop: boolean;
                  debug: boolean;
                  element: undefined | string | HTMLVideoElement;
                  height: number;
                  id?: string;
                  mode: "front" | "back";
                  width: number;
              }

              Properties

              crop: boolean

              camera crop mode

              +

              Properties

              crop: boolean

              camera crop mode

              debug: boolean

              print messages on console

              element: undefined | string | HTMLVideoElement

              element can be:

                @@ -15,7 +15,7 @@
              • undefined in which case a new HTMLVideoElement will be created
              height: number

              desired webcam height

              -
              id?: string

              deviceId of the video device to use

              +
              id?: string

              deviceId of the video device to use

              mode: "front" | "back"

              use front or back camera

              width: number

              desired webcam width

              -
              \ No newline at end of file +
              diff --git a/typedoc/interfaces/models.KernelOps.html b/typedoc/interfaces/models.KernelOps.html index d26074fc..1a48df39 100644 --- a/typedoc/interfaces/models.KernelOps.html +++ b/typedoc/interfaces/models.KernelOps.html @@ -1,5 +1,5 @@ -KernelOps | @vladmandic/human - v3.2.2
              interface KernelOps {
                  missing: string[];
                  name: string;
                  ops: string[];
                  url: string;
              }

              Properties

              missing +KernelOps | @vladmandic/human - v3.3.0
              interface KernelOps {
                  missing: string[];
                  name: string;
                  ops: string[];
                  url: string;
              }

              Properties

              Properties

              missing: string[]
              name: string
              ops: string[]
              url: string
              \ No newline at end of file +

              Properties

              missing: string[]
              name: string
              ops: string[]
              url: string
              diff --git a/typedoc/interfaces/models.ModelStats.html b/typedoc/interfaces/models.ModelStats.html index c570a302..251e38bd 100644 --- a/typedoc/interfaces/models.ModelStats.html +++ b/typedoc/interfaces/models.ModelStats.html @@ -1,9 +1,9 @@ -ModelStats | @vladmandic/human - v3.2.2

              structure that holds global stats for currently loaded models

              -
              interface ModelStats {
                  modelStats: ModelInfo[];
                  numDefinedModels: number;
                  numLoadedModels: number;
                  percentageLoaded: number;
                  totalSizeFromManifest: number;
                  totalSizeLoading: number;
                  totalSizeWeights: number;
              }

              Properties

              modelStats +ModelStats | @vladmandic/human - v3.3.0

              structure that holds global stats for currently loaded models

              +
              interface ModelStats {
                  modelStats: ModelInfo[];
                  numDefinedModels: number;
                  numLoadedModels: number;
                  percentageLoaded: number;
                  totalSizeFromManifest: number;
                  totalSizeLoading: number;
                  totalSizeWeights: number;
              }

              Properties

              modelStats: ModelInfo[]
              numDefinedModels: number
              numLoadedModels: number
              percentageLoaded: number
              totalSizeFromManifest: number
              totalSizeLoading: number
              totalSizeWeights: number
              \ No newline at end of file +

              Properties

              modelStats: ModelInfo[]
              numDefinedModels: number
              numLoadedModels: number
              percentageLoaded: number
              totalSizeFromManifest: number
              totalSizeLoading: number
              totalSizeWeights: number
              diff --git a/typedoc/modules/Tensor.html b/typedoc/modules/Tensor.html index 6192528a..6393d7a1 100644 --- a/typedoc/modules/Tensor.html +++ b/typedoc/modules/Tensor.html @@ -1,2 +1,2 @@ -Tensor | @vladmandic/human - v3.2.2

              Namespace Tensor

              Explict reexport of main @tensorflow/tfjs types

              -
              \ No newline at end of file +Tensor | @vladmandic/human - v3.3.0

              Namespace Tensor

              Explict reexport of main @tensorflow/tfjs types

              +
              diff --git a/typedoc/modules/draw.html b/typedoc/modules/draw.html index ff5979e4..0890360d 100644 --- a/typedoc/modules/draw.html +++ b/typedoc/modules/draw.html @@ -1,4 +1,4 @@ -draw | @vladmandic/human - v3.2.2

              Namespace draw

              Class Human as default export

              +draw | @vladmandic/human - v3.3.0

              Namespace draw

              Class Human as default export

              Index

              Variables

              Functions

              all body @@ -9,4 +9,4 @@ init object person -
              \ No newline at end of file +
              diff --git a/typedoc/modules/match.html b/typedoc/modules/match.html index 160ecc4b..8b69af2c 100644 --- a/typedoc/modules/match.html +++ b/typedoc/modules/match.html @@ -1,7 +1,7 @@ -match | @vladmandic/human - v3.2.2

              Namespace match

              Class Human as default export

              +match | @vladmandic/human - v3.3.0

              Namespace match

              Class Human as default export

              Index

              Type Aliases

              Functions

              \ No newline at end of file +
              diff --git a/typedoc/modules/models.html b/typedoc/modules/models.html index 538f6089..afcaf91e 100644 --- a/typedoc/modules/models.html +++ b/typedoc/modules/models.html @@ -1,6 +1,6 @@ -models | @vladmandic/human - v3.2.2

              Namespace models

              Class Human as default export

              +models | @vladmandic/human - v3.3.0

              Namespace models

              Class Human as default export

              Index

              Classes

              Interfaces

              Functions

              \ No newline at end of file +
              diff --git a/typedoc/types/AnyCanvas.html b/typedoc/types/AnyCanvas.html index 71ff8308..58f06269 100644 --- a/typedoc/types/AnyCanvas.html +++ b/typedoc/types/AnyCanvas.html @@ -1,2 +1,2 @@ -AnyCanvas | @vladmandic/human - v3.2.2

              Type alias AnyCanvas

              AnyCanvas: HTMLCanvasElement | OffscreenCanvas

              Defines all possible canvas types

              -
              \ No newline at end of file +AnyCanvas | @vladmandic/human - v3.3.0

              Type Alias AnyCanvas

              AnyCanvas: HTMLCanvasElement | OffscreenCanvas

              Defines all possible canvas types

              +
              diff --git a/typedoc/types/AnyImage.html b/typedoc/types/AnyImage.html index b07ff97b..789f389c 100644 --- a/typedoc/types/AnyImage.html +++ b/typedoc/types/AnyImage.html @@ -1,2 +1,2 @@ -AnyImage | @vladmandic/human - v3.2.2

              Type alias AnyImage

              AnyImage: HTMLImageElement | typeof Image

              Defines all possible image types

              -
              \ No newline at end of file +AnyImage | @vladmandic/human - v3.3.0

              Type Alias AnyImage

              AnyImage: HTMLImageElement | typeof Image

              Defines all possible image types

              +
              diff --git a/typedoc/types/AnyVideo.html b/typedoc/types/AnyVideo.html index 0077a14d..5934c377 100644 --- a/typedoc/types/AnyVideo.html +++ b/typedoc/types/AnyVideo.html @@ -1,2 +1,2 @@ -AnyVideo | @vladmandic/human - v3.2.2

              Type alias AnyVideo

              AnyVideo: HTMLMediaElement | HTMLVideoElement

              Defines all possible video types

              -
              \ No newline at end of file +AnyVideo | @vladmandic/human - v3.3.0

              Type Alias AnyVideo

              AnyVideo: HTMLMediaElement | HTMLVideoElement

              Defines all possible video types

              +
              diff --git a/typedoc/types/BackendEnum.html b/typedoc/types/BackendEnum.html index 219fdf0f..52d70099 100644 --- a/typedoc/types/BackendEnum.html +++ b/typedoc/types/BackendEnum.html @@ -1,2 +1,2 @@ -BackendEnum | @vladmandic/human - v3.2.2

              Type alias BackendEnum

              BackendEnum: "" | "cpu" | "wasm" | "webgl" | "humangl" | "tensorflow" | "webgpu"

              Possible TensorFlow backends

              -
              \ No newline at end of file +BackendEnum | @vladmandic/human - v3.3.0

              Type Alias BackendEnum

              BackendEnum:
                  | ""
                  | "cpu"
                  | "wasm"
                  | "webgl"
                  | "humangl"
                  | "tensorflow"
                  | "webgpu"
                  | "none"

              Possible TensorFlow backends

              +
              diff --git a/typedoc/types/BodyAnnotation.html b/typedoc/types/BodyAnnotation.html index bb9a7fd0..9ca787b8 100644 --- a/typedoc/types/BodyAnnotation.html +++ b/typedoc/types/BodyAnnotation.html @@ -1 +1 @@ -BodyAnnotation | @vladmandic/human - v3.2.2
              \ No newline at end of file +BodyAnnotation | @vladmandic/human - v3.3.0
              diff --git a/typedoc/types/BodyAnnotationBlazePose.html b/typedoc/types/BodyAnnotationBlazePose.html index 05683d94..abb656c8 100644 --- a/typedoc/types/BodyAnnotationBlazePose.html +++ b/typedoc/types/BodyAnnotationBlazePose.html @@ -1 +1 @@ -BodyAnnotationBlazePose | @vladmandic/human - v3.2.2

              Type alias BodyAnnotationBlazePose

              BodyAnnotationBlazePose: "leftLeg" | "rightLeg" | "torso" | "leftArm" | "rightArm" | "leftEye" | "rightEye" | "mouth"
              \ No newline at end of file +BodyAnnotationBlazePose | @vladmandic/human - v3.3.0

              Type Alias BodyAnnotationBlazePose

              BodyAnnotationBlazePose:
                  | "leftLeg"
                  | "rightLeg"
                  | "torso"
                  | "leftArm"
                  | "rightArm"
                  | "leftEye"
                  | "rightEye"
                  | "mouth"
              diff --git a/typedoc/types/BodyAnnotationEfficientPose.html b/typedoc/types/BodyAnnotationEfficientPose.html index e566b03a..7ee0b89e 100644 --- a/typedoc/types/BodyAnnotationEfficientPose.html +++ b/typedoc/types/BodyAnnotationEfficientPose.html @@ -1 +1 @@ -BodyAnnotationEfficientPose | @vladmandic/human - v3.2.2

              Type alias BodyAnnotationEfficientPose

              BodyAnnotationEfficientPose: "leftLeg" | "rightLeg" | "torso" | "leftArm" | "rightArm" | "head"
              \ No newline at end of file +BodyAnnotationEfficientPose | @vladmandic/human - v3.3.0

              Type Alias BodyAnnotationEfficientPose

              BodyAnnotationEfficientPose:
                  | "leftLeg"
                  | "rightLeg"
                  | "torso"
                  | "leftArm"
                  | "rightArm"
                  | "head"
              diff --git a/typedoc/types/BodyGesture.html b/typedoc/types/BodyGesture.html index f435d5a6..a2f05ec4 100644 --- a/typedoc/types/BodyGesture.html +++ b/typedoc/types/BodyGesture.html @@ -1,2 +1,2 @@ -BodyGesture | @vladmandic/human - v3.2.2

              Type alias BodyGesture

              BodyGesture: `leaning ${"left" | "right"}` | `raise ${"left" | "right"} hand` | "i give up"

              body gesture type

              -
              \ No newline at end of file +BodyGesture | @vladmandic/human - v3.3.0

              Type Alias BodyGesture

              BodyGesture: `leaning ${"left" | "right"}` | `raise ${"left" | "right"} hand` | "i give up"

              body gesture type

              +
              diff --git a/typedoc/types/BodyLandmark.html b/typedoc/types/BodyLandmark.html index 259cc759..c3665ffe 100644 --- a/typedoc/types/BodyLandmark.html +++ b/typedoc/types/BodyLandmark.html @@ -1 +1 @@ -BodyLandmark | @vladmandic/human - v3.2.2
              \ No newline at end of file +BodyLandmark | @vladmandic/human - v3.3.0

              Type Alias BodyLandmark

              BodyLandmark:
                  | BodyLandmarkPoseNet
                  | BodyLandmarkMoveNet
                  | BodyLandmarkEfficientNet
                  | BodyLandmarkBlazePose
              diff --git a/typedoc/types/BodyLandmarkBlazePose.html b/typedoc/types/BodyLandmarkBlazePose.html index 785f2788..9c44a7c6 100644 --- a/typedoc/types/BodyLandmarkBlazePose.html +++ b/typedoc/types/BodyLandmarkBlazePose.html @@ -1 +1 @@ -BodyLandmarkBlazePose | @vladmandic/human - v3.2.2

              Type alias BodyLandmarkBlazePose

              BodyLandmarkBlazePose: "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"
              \ No newline at end of file +BodyLandmarkBlazePose | @vladmandic/human - v3.3.0

              Type Alias BodyLandmarkBlazePose

              BodyLandmarkBlazePose:
                  | "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"
              diff --git a/typedoc/types/BodyLandmarkEfficientNet.html b/typedoc/types/BodyLandmarkEfficientNet.html index e57fa267..0268b882 100644 --- a/typedoc/types/BodyLandmarkEfficientNet.html +++ b/typedoc/types/BodyLandmarkEfficientNet.html @@ -1 +1 @@ -BodyLandmarkEfficientNet | @vladmandic/human - v3.2.2

              Type alias BodyLandmarkEfficientNet

              BodyLandmarkEfficientNet: "head" | "neck" | "rightShoulder" | "rightElbow" | "rightWrist" | "chest" | "leftShoulder" | "leftElbow" | "leftWrist" | "bodyCenter" | "rightHip" | "rightKnee" | "rightAnkle" | "leftHip" | "leftKnee" | "leftAnkle"
              \ No newline at end of file +BodyLandmarkEfficientNet | @vladmandic/human - v3.3.0

              Type Alias BodyLandmarkEfficientNet

              BodyLandmarkEfficientNet:
                  | "head"
                  | "neck"
                  | "rightShoulder"
                  | "rightElbow"
                  | "rightWrist"
                  | "chest"
                  | "leftShoulder"
                  | "leftElbow"
                  | "leftWrist"
                  | "bodyCenter"
                  | "rightHip"
                  | "rightKnee"
                  | "rightAnkle"
                  | "leftHip"
                  | "leftKnee"
                  | "leftAnkle"
              diff --git a/typedoc/types/BodyLandmarkMoveNet.html b/typedoc/types/BodyLandmarkMoveNet.html index 3d2a9297..e025bbc8 100644 --- a/typedoc/types/BodyLandmarkMoveNet.html +++ b/typedoc/types/BodyLandmarkMoveNet.html @@ -1 +1 @@ -BodyLandmarkMoveNet | @vladmandic/human - v3.2.2

              Type alias BodyLandmarkMoveNet

              BodyLandmarkMoveNet: "nose" | "leftEye" | "rightEye" | "leftEar" | "rightEar" | "leftShoulder" | "rightShoulder" | "leftElbow" | "rightElbow" | "leftWrist" | "rightWrist" | "leftHip" | "rightHip" | "leftKnee" | "rightKnee" | "leftAnkle" | "rightAnkle"
              \ No newline at end of file +BodyLandmarkMoveNet | @vladmandic/human - v3.3.0

              Type Alias BodyLandmarkMoveNet

              BodyLandmarkMoveNet:
                  | "nose"
                  | "leftEye"
                  | "rightEye"
                  | "leftEar"
                  | "rightEar"
                  | "leftShoulder"
                  | "rightShoulder"
                  | "leftElbow"
                  | "rightElbow"
                  | "leftWrist"
                  | "rightWrist"
                  | "leftHip"
                  | "rightHip"
                  | "leftKnee"
                  | "rightKnee"
                  | "leftAnkle"
                  | "rightAnkle"
              diff --git a/typedoc/types/BodyLandmarkPoseNet.html b/typedoc/types/BodyLandmarkPoseNet.html index eb23580f..d40e19f1 100644 --- a/typedoc/types/BodyLandmarkPoseNet.html +++ b/typedoc/types/BodyLandmarkPoseNet.html @@ -1 +1 @@ -BodyLandmarkPoseNet | @vladmandic/human - v3.2.2

              Type alias BodyLandmarkPoseNet

              BodyLandmarkPoseNet: "nose" | "leftEye" | "rightEye" | "leftEar" | "rightEar" | "leftShoulder" | "rightShoulder" | "leftElbow" | "rightElbow" | "leftWrist" | "rightWrist" | "leftHip" | "rightHip" | "leftKnee" | "rightKnee" | "leftAnkle" | "rightAnkle"
              \ No newline at end of file +BodyLandmarkPoseNet | @vladmandic/human - v3.3.0

              Type Alias BodyLandmarkPoseNet

              BodyLandmarkPoseNet:
                  | "nose"
                  | "leftEye"
                  | "rightEye"
                  | "leftEar"
                  | "rightEar"
                  | "leftShoulder"
                  | "rightShoulder"
                  | "leftElbow"
                  | "rightElbow"
                  | "leftWrist"
                  | "rightWrist"
                  | "leftHip"
                  | "rightHip"
                  | "leftKnee"
                  | "rightKnee"
                  | "leftAnkle"
                  | "rightAnkle"
              diff --git a/typedoc/types/Box.html b/typedoc/types/Box.html index 292ea215..f0f8fd4a 100644 --- a/typedoc/types/Box.html +++ b/typedoc/types/Box.html @@ -1,2 +1,2 @@ -Box | @vladmandic/human - v3.2.2

              Type alias Box

              Box: [number, number, number, number]

              generic box as [x, y, width, height]

              -
              \ No newline at end of file +Box | @vladmandic/human - v3.3.0

              Type Alias Box

              Box: [number, number, number, number]

              generic box as [x, y, width, height]

              +
              diff --git a/typedoc/types/Emotion.html b/typedoc/types/Emotion.html index c4fd2eae..3df48247 100644 --- a/typedoc/types/Emotion.html +++ b/typedoc/types/Emotion.html @@ -1 +1 @@ -Emotion | @vladmandic/human - v3.2.2

              Type alias Emotion

              Emotion: "angry" | "disgust" | "fear" | "happy" | "sad" | "surprise" | "neutral"
              \ No newline at end of file +Emotion | @vladmandic/human - v3.3.0

              Type Alias Emotion

              Emotion:
                  | "angry"
                  | "disgust"
                  | "fear"
                  | "happy"
                  | "sad"
                  | "surprise"
                  | "neutral"
              diff --git a/typedoc/types/Events.html b/typedoc/types/Events.html index cf41564a..9b0f65a6 100644 --- a/typedoc/types/Events.html +++ b/typedoc/types/Events.html @@ -1,4 +1,4 @@ -Events | @vladmandic/human - v3.2.2

              Type alias Events

              Events: "create" | "load" | "image" | "result" | "warmup" | "error"

              Events dispatched by human.events

              +Events | @vladmandic/human - v3.3.0

              Type Alias Events

              Events:
                  | "create"
                  | "load"
                  | "image"
                  | "result"
                  | "warmup"
                  | "error"

              Events dispatched by human.events

              • create: triggered when Human object is instantiated
              • load: triggered when models are loaded (explicitly or on-demand)
              • @@ -6,4 +6,4 @@
              • result: triggered when detection is complete
              • warmup: triggered when warmup is complete
              -
              \ No newline at end of file +
              diff --git a/typedoc/types/ExternalCanvas.html b/typedoc/types/ExternalCanvas.html index 71c1f0f7..cf08d144 100644 --- a/typedoc/types/ExternalCanvas.html +++ b/typedoc/types/ExternalCanvas.html @@ -1,2 +1,2 @@ -ExternalCanvas | @vladmandic/human - v3.2.2

              Type alias ExternalCanvas

              ExternalCanvas: typeof Canvas

              Defines possible externally defined canvas

              -
              \ No newline at end of file +ExternalCanvas | @vladmandic/human - v3.3.0

              Type Alias ExternalCanvas

              ExternalCanvas: typeof Canvas

              Defines possible externally defined canvas

              +
              diff --git a/typedoc/types/FaceGesture.html b/typedoc/types/FaceGesture.html index 8aaafc82..06621686 100644 --- a/typedoc/types/FaceGesture.html +++ b/typedoc/types/FaceGesture.html @@ -1,2 +1,2 @@ -FaceGesture | @vladmandic/human - v3.2.2

              Type alias FaceGesture

              FaceGesture: `facing ${"left" | "center" | "right"}` | `blink ${"left" | "right"} eye` | `mouth ${number}% open` | `head ${"up" | "down"}`

              face gesture type

              -
              \ No newline at end of file +FaceGesture | @vladmandic/human - v3.3.0

              Type Alias FaceGesture

              FaceGesture:
                  | `facing ${"left" | "center" | "right"}`
                  | `blink ${"left" | "right"} eye`
                  | `mouth ${number}% open`
                  | `head ${"up" | "down"}`

              face gesture type

              +
              diff --git a/typedoc/types/FaceLandmark.html b/typedoc/types/FaceLandmark.html index 5dd7c9cf..fa760c23 100644 --- a/typedoc/types/FaceLandmark.html +++ b/typedoc/types/FaceLandmark.html @@ -1 +1 @@ -FaceLandmark | @vladmandic/human - v3.2.2

              Type alias FaceLandmark

              FaceLandmark: "leftEye" | "rightEye" | "nose" | "mouth" | "leftEar" | "rightEar" | "symmetryLine" | "silhouette" | "lipsUpperOuter" | "lipsLowerOuter" | "lipsUpperInner" | "lipsLowerInner" | "rightEyeUpper0" | "rightEyeLower0" | "rightEyeUpper1" | "rightEyeLower1" | "rightEyeUpper2" | "rightEyeLower2" | "rightEyeLower3" | "rightEyebrowUpper" | "rightEyebrowLower" | "rightEyeIris" | "leftEyeUpper0" | "leftEyeLower0" | "leftEyeUpper1" | "leftEyeLower1" | "leftEyeUpper2" | "leftEyeLower2" | "leftEyeLower3" | "leftEyebrowUpper" | "leftEyebrowLower" | "leftEyeIris" | "midwayBetweenEyes" | "noseTip" | "noseBottom" | "noseRightCorner" | "noseLeftCorner" | "rightCheek" | "leftCheek"
              \ No newline at end of file +FaceLandmark | @vladmandic/human - v3.3.0

              Type Alias FaceLandmark

              FaceLandmark:
                  | "leftEye"
                  | "rightEye"
                  | "nose"
                  | "mouth"
                  | "leftEar"
                  | "rightEar"
                  | "symmetryLine"
                  | "silhouette"
                  | "lipsUpperOuter"
                  | "lipsLowerOuter"
                  | "lipsUpperInner"
                  | "lipsLowerInner"
                  | "rightEyeUpper0"
                  | "rightEyeLower0"
                  | "rightEyeUpper1"
                  | "rightEyeLower1"
                  | "rightEyeUpper2"
                  | "rightEyeLower2"
                  | "rightEyeLower3"
                  | "rightEyebrowUpper"
                  | "rightEyebrowLower"
                  | "rightEyeIris"
                  | "leftEyeUpper0"
                  | "leftEyeLower0"
                  | "leftEyeUpper1"
                  | "leftEyeLower1"
                  | "leftEyeUpper2"
                  | "leftEyeLower2"
                  | "leftEyeLower3"
                  | "leftEyebrowUpper"
                  | "leftEyebrowLower"
                  | "leftEyeIris"
                  | "midwayBetweenEyes"
                  | "noseTip"
                  | "noseBottom"
                  | "noseRightCorner"
                  | "noseLeftCorner"
                  | "rightCheek"
                  | "leftCheek"
              diff --git a/typedoc/types/Finger.html b/typedoc/types/Finger.html index 5edabe3e..84e45688 100644 --- a/typedoc/types/Finger.html +++ b/typedoc/types/Finger.html @@ -1 +1 @@ -Finger | @vladmandic/human - v3.2.2

              Type alias Finger

              Finger: "index" | "middle" | "pinky" | "ring" | "thumb" | "palm"
              \ No newline at end of file +Finger | @vladmandic/human - v3.3.0

              Type Alias Finger

              Finger:
                  | "index"
                  | "middle"
                  | "pinky"
                  | "ring"
                  | "thumb"
                  | "palm"
              diff --git a/typedoc/types/FingerCurl.html b/typedoc/types/FingerCurl.html index b00d084a..3180f907 100644 --- a/typedoc/types/FingerCurl.html +++ b/typedoc/types/FingerCurl.html @@ -1 +1 @@ -FingerCurl | @vladmandic/human - v3.2.2

              Type alias FingerCurl

              FingerCurl: "none" | "half" | "full"
              \ No newline at end of file +FingerCurl | @vladmandic/human - v3.3.0

              Type Alias FingerCurl

              FingerCurl: "none" | "half" | "full"
              diff --git a/typedoc/types/FingerDirection.html b/typedoc/types/FingerDirection.html index a707e999..f734f9d1 100644 --- a/typedoc/types/FingerDirection.html +++ b/typedoc/types/FingerDirection.html @@ -1 +1 @@ -FingerDirection | @vladmandic/human - v3.2.2

              Type alias FingerDirection

              FingerDirection: "verticalUp" | "verticalDown" | "horizontalLeft" | "horizontalRight" | "diagonalUpRight" | "diagonalUpLeft" | "diagonalDownRight" | "diagonalDownLeft"
              \ No newline at end of file +FingerDirection | @vladmandic/human - v3.3.0

              Type Alias FingerDirection

              FingerDirection:
                  | "verticalUp"
                  | "verticalDown"
                  | "horizontalLeft"
                  | "horizontalRight"
                  | "diagonalUpRight"
                  | "diagonalUpLeft"
                  | "diagonalDownRight"
                  | "diagonalDownLeft"
              diff --git a/typedoc/types/Gender.html b/typedoc/types/Gender.html index 709c00e1..66f739da 100644 --- a/typedoc/types/Gender.html +++ b/typedoc/types/Gender.html @@ -1 +1 @@ -Gender | @vladmandic/human - v3.2.2

              Type alias Gender

              Gender: "male" | "female" | "unknown"
              \ No newline at end of file +Gender | @vladmandic/human - v3.3.0

              Type Alias Gender

              Gender: "male" | "female" | "unknown"
              diff --git a/typedoc/types/GestureResult.html b/typedoc/types/GestureResult.html index 1f507726..fe12c255 100644 --- a/typedoc/types/GestureResult.html +++ b/typedoc/types/GestureResult.html @@ -1,7 +1,7 @@ -GestureResult | @vladmandic/human - v3.2.2

              Type alias GestureResult

              GestureResult: {
                  face: number;
                  gesture: FaceGesture;
              } | {
                  gesture: IrisGesture;
                  iris: number;
              } | {
                  body: number;
                  gesture: BodyGesture;
              } | {
                  gesture: HandGesture;
                  hand: number;
              }

              Gesture combined results +GestureResult | @vladmandic/human - v3.3.0

              Type Alias GestureResult

              GestureResult:
                  | {
                      face: number;
                      gesture: FaceGesture;
                  }
                  | {
                      gesture: IrisGesture;
                      iris: number;
                  }
                  | {
                      body: number;
                      gesture: BodyGesture;
                  }
                  | {
                      gesture: HandGesture;
                      hand: number;
                  }

              Gesture combined results Each result has:

              • part: part name and number where gesture was detected: face, iris, body, hand
              • gesture: gesture detected
              -

              Type declaration

              Type declaration

              Type declaration

              Type declaration

              \ No newline at end of file +
              diff --git a/typedoc/types/HandGesture.html b/typedoc/types/HandGesture.html index a8ce44ee..be1e6da3 100644 --- a/typedoc/types/HandGesture.html +++ b/typedoc/types/HandGesture.html @@ -1,2 +1,2 @@ -HandGesture | @vladmandic/human - v3.2.2

              Type alias HandGesture

              HandGesture: `${"thumb" | "index" | "middle" | "ring" | "pinky"} forward` | `${"thumb" | "index" | "middle" | "ring" | "pinky"} up` | "victory" | "thumbs up"

              hand gesture type

              -
              \ No newline at end of file +HandGesture | @vladmandic/human - v3.3.0

              Type Alias HandGesture

              HandGesture:
                  | `${
                      | "thumb"
                      | "index"
                      | "middle"
                      | "ring"
                      | "pinky"} forward`
                  | `${
                      | "thumb"
                      | "index"
                      | "middle"
                      | "ring"
                      | "pinky"} up`
                  | "victory"
                  | "thumbs up"

              hand gesture type

              +
              diff --git a/typedoc/types/HandType.html b/typedoc/types/HandType.html index 855dc83e..a90add21 100644 --- a/typedoc/types/HandType.html +++ b/typedoc/types/HandType.html @@ -1 +1 @@ -HandType | @vladmandic/human - v3.2.2

              Type alias HandType

              HandType: "hand" | "fist" | "pinch" | "point" | "face" | "tip" | "pinchtip"
              \ No newline at end of file +HandType | @vladmandic/human - v3.3.0

              Type Alias HandType

              HandType:
                  | "hand"
                  | "fist"
                  | "pinch"
                  | "point"
                  | "face"
                  | "tip"
                  | "pinchtip"
              diff --git a/typedoc/types/ImageObjects.html b/typedoc/types/ImageObjects.html index 490158fd..c621bf3a 100644 --- a/typedoc/types/ImageObjects.html +++ b/typedoc/types/ImageObjects.html @@ -1,2 +1,2 @@ -ImageObjects | @vladmandic/human - v3.2.2

              Type alias ImageObjects

              ImageObjects: ImageData | ImageBitmap

              Defines all possible image objects

              -
              \ No newline at end of file +ImageObjects | @vladmandic/human - v3.3.0

              Type Alias ImageObjects

              ImageObjects: ImageData | ImageBitmap

              Defines all possible image objects

              +
              diff --git a/typedoc/types/Input.html b/typedoc/types/Input.html index 44b69fd1..5b93775e 100644 --- a/typedoc/types/Input.html +++ b/typedoc/types/Input.html @@ -1,2 +1,2 @@ -Input | @vladmandic/human - v3.2.2

              Type alias Input

              Defines all possible input types for Human detection

              -
              \ No newline at end of file +Input | @vladmandic/human - v3.3.0

              Type Alias Input

              Input:
                  | Tensor
                  | AnyCanvas
                  | AnyImage
                  | AnyVideo
                  | ImageObjects
                  | ExternalCanvas

              Defines all possible input types for Human detection

              +
              diff --git a/typedoc/types/IrisGesture.html b/typedoc/types/IrisGesture.html index d472b7e3..821a5b63 100644 --- a/typedoc/types/IrisGesture.html +++ b/typedoc/types/IrisGesture.html @@ -1,2 +1,2 @@ -IrisGesture | @vladmandic/human - v3.2.2

              Type alias IrisGesture

              IrisGesture: "facing center" | `looking ${"left" | "right" | "up" | "down"}` | "looking center"

              iris gesture type

              -
              \ No newline at end of file +IrisGesture | @vladmandic/human - v3.3.0

              Type Alias IrisGesture

              IrisGesture: "facing center" | `looking ${
                  | "left"
                  | "right"
                  | "up"
                  | "down"}` | "looking center"

              iris gesture type

              +
              diff --git a/typedoc/types/ObjectType.html b/typedoc/types/ObjectType.html index ef94d13d..0b038a6c 100644 --- a/typedoc/types/ObjectType.html +++ b/typedoc/types/ObjectType.html @@ -1 +1 @@ -ObjectType | @vladmandic/human - v3.2.2

              Type alias ObjectType

              ObjectType: "person" | "bicycle" | "car" | "motorcycle" | "airplane" | "bus" | "train" | "truck" | "boat" | "traffic light" | "fire hydrant" | "stop sign" | "parking meter" | "bench" | "bird" | "cat" | "dog" | "horse" | "sheep" | "cow" | "elephant" | "bear" | "zebra" | "giraffe" | "backpack" | "umbrella" | "handbag" | "tie" | "suitcase" | "frisbee" | "skis" | "snowboard" | "sports ball" | "kite" | "baseball bat" | "baseball glove" | "skateboard" | "surfboard" | "tennis racket" | "bottle" | "wine glass" | "cup" | "fork" | "knife" | "spoon" | "bowl" | "banana" | "apple" | "sandwich" | "orange" | "broccoli" | "carrot" | "hot dog" | "pizza" | "donut" | "cake" | "chair" | "couch" | "potted plant" | "bed" | "dining table" | "toilet" | "tv" | "laptop" | "mouse" | "remote" | "keyboard" | "cell phone" | "microwave" | "oven" | "toaster" | "sink" | "refrigerator" | "book" | "clock" | "vase" | "scissors" | "teddy bear" | "hair drier" | "toothbrush"
              \ No newline at end of file +ObjectType | @vladmandic/human - v3.3.0

              Type Alias ObjectType

              ObjectType:
                  | "person"
                  | "bicycle"
                  | "car"
                  | "motorcycle"
                  | "airplane"
                  | "bus"
                  | "train"
                  | "truck"
                  | "boat"
                  | "traffic light"
                  | "fire hydrant"
                  | "stop sign"
                  | "parking meter"
                  | "bench"
                  | "bird"
                  | "cat"
                  | "dog"
                  | "horse"
                  | "sheep"
                  | "cow"
                  | "elephant"
                  | "bear"
                  | "zebra"
                  | "giraffe"
                  | "backpack"
                  | "umbrella"
                  | "handbag"
                  | "tie"
                  | "suitcase"
                  | "frisbee"
                  | "skis"
                  | "snowboard"
                  | "sports ball"
                  | "kite"
                  | "baseball bat"
                  | "baseball glove"
                  | "skateboard"
                  | "surfboard"
                  | "tennis racket"
                  | "bottle"
                  | "wine glass"
                  | "cup"
                  | "fork"
                  | "knife"
                  | "spoon"
                  | "bowl"
                  | "banana"
                  | "apple"
                  | "sandwich"
                  | "orange"
                  | "broccoli"
                  | "carrot"
                  | "hot dog"
                  | "pizza"
                  | "donut"
                  | "cake"
                  | "chair"
                  | "couch"
                  | "potted plant"
                  | "bed"
                  | "dining table"
                  | "toilet"
                  | "tv"
                  | "laptop"
                  | "mouse"
                  | "remote"
                  | "keyboard"
                  | "cell phone"
                  | "microwave"
                  | "oven"
                  | "toaster"
                  | "sink"
                  | "refrigerator"
                  | "book"
                  | "clock"
                  | "vase"
                  | "scissors"
                  | "teddy bear"
                  | "hair drier"
                  | "toothbrush"
              diff --git a/typedoc/types/Point.html b/typedoc/types/Point.html index 13fc7b8d..97270f72 100644 --- a/typedoc/types/Point.html +++ b/typedoc/types/Point.html @@ -1,2 +1,2 @@ -Point | @vladmandic/human - v3.2.2

              Type alias Point

              Point: [number, number, number?]

              generic point as [x, y, z?]

              -
              \ No newline at end of file +Point | @vladmandic/human - v3.3.0

              Type Alias Point

              Point: [number, number, number?]

              generic point as [x, y, z?]

              +
              diff --git a/typedoc/types/Race.html b/typedoc/types/Race.html index b7d430a7..dfb428ca 100644 --- a/typedoc/types/Race.html +++ b/typedoc/types/Race.html @@ -1 +1 @@ -Race | @vladmandic/human - v3.2.2

              Type alias Race

              Race: "white" | "black" | "asian" | "indian" | "other"
              \ No newline at end of file +Race | @vladmandic/human - v3.3.0

              Type Alias Race

              Race:
                  | "white"
                  | "black"
                  | "asian"
                  | "indian"
                  | "other"
              diff --git a/typedoc/types/SegmentationEnum.html b/typedoc/types/SegmentationEnum.html index 2410fae5..1ba26eb7 100644 --- a/typedoc/types/SegmentationEnum.html +++ b/typedoc/types/SegmentationEnum.html @@ -1,2 +1,2 @@ -SegmentationEnum | @vladmandic/human - v3.2.2

              Type alias SegmentationEnum

              SegmentationEnum: "default" | "alpha" | "foreground" | "state"

              Possible segmentation model behavior

              -
              \ No newline at end of file +SegmentationEnum | @vladmandic/human - v3.3.0

              Type Alias SegmentationEnum

              SegmentationEnum:
                  | "default"
                  | "alpha"
                  | "foreground"
                  | "state"

              Possible segmentation model behavior

              +
              diff --git a/typedoc/types/Tensor1D.html b/typedoc/types/Tensor1D.html index 07809f05..0f663723 100644 --- a/typedoc/types/Tensor1D.html +++ b/typedoc/types/Tensor1D.html @@ -1,2 +1,2 @@ -Tensor1D | @vladmandic/human - v3.2.2

              Type alias Tensor1D

              Tensor1D: Tensor<R1>

              Doclink

              Tensor

              -
              \ No newline at end of file +Tensor1D | @vladmandic/human - v3.3.0

              Type Alias Tensor1D

              Tensor1D: Tensor<R1>

              Tensor

              +
              diff --git a/typedoc/types/Tensor2D.html b/typedoc/types/Tensor2D.html index beb1e277..2b5ad416 100644 --- a/typedoc/types/Tensor2D.html +++ b/typedoc/types/Tensor2D.html @@ -1,2 +1,2 @@ -Tensor2D | @vladmandic/human - v3.2.2

              Type alias Tensor2D

              Tensor2D: Tensor<R2>

              Doclink

              Tensor

              -
              \ No newline at end of file +Tensor2D | @vladmandic/human - v3.3.0

              Type Alias Tensor2D

              Tensor2D: Tensor<R2>

              Tensor

              +
              diff --git a/typedoc/types/Tensor3D.html b/typedoc/types/Tensor3D.html index fec7f617..159e7d7c 100644 --- a/typedoc/types/Tensor3D.html +++ b/typedoc/types/Tensor3D.html @@ -1,2 +1,2 @@ -Tensor3D | @vladmandic/human - v3.2.2

              Type alias Tensor3D

              Tensor3D: Tensor<R3>

              Doclink

              Tensor

              -
              \ No newline at end of file +Tensor3D | @vladmandic/human - v3.3.0

              Type Alias Tensor3D

              Tensor3D: Tensor<R3>

              Tensor

              +
              diff --git a/typedoc/types/Tensor4D.html b/typedoc/types/Tensor4D.html index 6ddda0cf..89032467 100644 --- a/typedoc/types/Tensor4D.html +++ b/typedoc/types/Tensor4D.html @@ -1,2 +1,2 @@ -Tensor4D | @vladmandic/human - v3.2.2

              Type alias Tensor4D

              Tensor4D: Tensor<R4>

              Doclink

              Tensor

              -
              \ No newline at end of file +Tensor4D | @vladmandic/human - v3.3.0

              Type Alias Tensor4D

              Tensor4D: Tensor<R4>

              Tensor

              +
              diff --git a/typedoc/types/TensorLike.html b/typedoc/types/TensorLike.html index e1338a0a..93e423af 100644 --- a/typedoc/types/TensorLike.html +++ b/typedoc/types/TensorLike.html @@ -1,2 +1,2 @@ -TensorLike | @vladmandic/human - v3.2.2

              Type alias TensorLike

              TensorLike: TypedArray | number | boolean | string | RecursiveArray<number | number[] | TypedArray> | RecursiveArray<boolean> | RecursiveArray<string> | Uint8Array[]

              Docalias

              TypedArray|Array

              -
              \ No newline at end of file +TensorLike | @vladmandic/human - v3.3.0

              Type Alias TensorLike

              TensorLike:
                  | TypedArray
                  | number
                  | boolean
                  | string
                  | RecursiveArray<number | number[] | TypedArray>
                  | RecursiveArray<boolean>
                  | RecursiveArray<string>
                  | Uint8Array[]

              TypedArray|Array

              +
              diff --git a/typedoc/types/WarmupEnum.html b/typedoc/types/WarmupEnum.html index 4ff07117..236b79af 100644 --- a/typedoc/types/WarmupEnum.html +++ b/typedoc/types/WarmupEnum.html @@ -1,2 +1,2 @@ -WarmupEnum | @vladmandic/human - v3.2.2

              Type alias WarmupEnum

              WarmupEnum: "" | "none" | "face" | "full" | "body"

              Possible values for human.warmup

              -
              \ No newline at end of file +WarmupEnum | @vladmandic/human - v3.3.0

              Type Alias WarmupEnum

              WarmupEnum:
                  | ""
                  | "none"
                  | "face"
                  | "full"
                  | "body"

              Possible values for human.warmup

              +
              diff --git a/typedoc/types/match.Descriptor.html b/typedoc/types/match.Descriptor.html index 40b3da58..992cbd38 100644 --- a/typedoc/types/match.Descriptor.html +++ b/typedoc/types/match.Descriptor.html @@ -1,2 +1,2 @@ -Descriptor | @vladmandic/human - v3.2.2
              Descriptor: number[]

              Face descriptor type as number array

              -
              \ No newline at end of file +Descriptor | @vladmandic/human - v3.3.0
              Descriptor: number[]

              Face descriptor type as number array

              +
              diff --git a/typedoc/types/match.MatchOptions.html b/typedoc/types/match.MatchOptions.html index fc0d0972..91a9802a 100644 --- a/typedoc/types/match.MatchOptions.html +++ b/typedoc/types/match.MatchOptions.html @@ -1 +1 @@ -MatchOptions | @vladmandic/human - v3.2.2

              Type alias MatchOptions

              MatchOptions: {
                  max?: number;
                  min?: number;
                  multiplier?: number;
                  order?: number;
                  threshold?: number;
              } | undefined

              Type declaration

              • Optional max?: number
              • Optional min?: number
              • Optional multiplier?: number
              • Optional order?: number
              • Optional threshold?: number
              \ No newline at end of file +MatchOptions | @vladmandic/human - v3.3.0

              Type Alias MatchOptions

              MatchOptions: {
                  max?: number;
                  min?: number;
                  multiplier?: number;
                  order?: number;
                  threshold?: number;
              } | undefined
              diff --git a/typedoc/variables/defaults.html b/typedoc/variables/defaults.html index 8c685f47..900f41e9 100644 --- a/typedoc/variables/defaults.html +++ b/typedoc/variables/defaults.html @@ -1,4 +1,4 @@ -defaults | @vladmandic/human - v3.2.2

              Variable defaultsConst

              defaults: Config = ...
              diff --git a/typedoc/variables/draw.options.html b/typedoc/variables/draw.options.html index 5de21fc4..a93ec097 100644 --- a/typedoc/variables/draw.options.html +++ b/typedoc/variables/draw.options.html @@ -1,2 +1,2 @@ -options | @vladmandic/human - v3.2.2

              Variable optionsConst

              options: DrawOptions = ...

              currently set draw options DrawOptions

              -
              \ No newline at end of file +options | @vladmandic/human - v3.3.0

              Variable optionsConst

              options: DrawOptions = ...

              currently set draw options DrawOptions

              +
              diff --git a/typedoc/variables/env-1.html b/typedoc/variables/env-1.html index 85c22744..419f85d2 100644 --- a/typedoc/variables/env-1.html +++ b/typedoc/variables/env-1.html @@ -1 +1 @@ -env | @vladmandic/human - v3.2.2

              Variable envConst

              env: Env = ...
              \ No newline at end of file +env | @vladmandic/human - v3.3.0

              Variable envConst

              env: Env = ...
              diff --git a/types/human.d.ts b/types/human.d.ts index 0dbf43c6..d5e6002e 100644 --- a/types/human.d.ts +++ b/types/human.d.ts @@ -1,4 +1,11 @@ -/// +import { GraphModel } from '@tensorflow/tfjs-converter'; +import { Rank } from '@tensorflow/tfjs-core'; +import { Tensor } from '@tensorflow/tfjs-core'; +import { Tensor1D } from '@tensorflow/tfjs-core'; +import { Tensor2D } from '@tensorflow/tfjs-core'; +import { Tensor3D } from '@tensorflow/tfjs-core'; +import { Tensor4D } from '@tensorflow/tfjs-core'; +import { TensorLike } from '@tensorflow/tfjs-core'; /** meta-function that performs draw for: canvas, face, body, hand */ declare function all(inCanvas: AnyCanvas, result: Result, drawOptions?: Partial): Promise<[void, void, void, void, void] | null>; @@ -12,19 +19,8 @@ export declare type AnyImage = HTMLImageElement | typeof Image; /** Defines all possible video types */ export declare type AnyVideo = HTMLMediaElement | HTMLVideoElement; -/** @docalias number[] */ -declare interface ArrayMap { - R0: number; - R1: number[]; - R2: number[][]; - R3: number[][][]; - R4: number[][][][]; - R5: number[][][][][]; - R6: number[][][][][][]; -} - /** Possible TensorFlow backends */ -export declare type BackendEnum = '' | 'cpu' | 'wasm' | 'webgl' | 'humangl' | 'tensorflow' | 'webgpu'; +export declare type BackendEnum = '' | 'cpu' | 'wasm' | 'webgl' | 'humangl' | 'tensorflow' | 'webgpu' | 'none'; /** draw detected bodies */ declare function body(inCanvas: AnyCanvas, result: BodyResult[], drawOptions?: Partial): void; @@ -89,100 +85,9 @@ export declare interface BodyResult { /** generic box as [x, y, width, height] */ export declare type Box = [number, number, number, number]; -/** - * Creates an IOHandler that loads model artifacts from user-selected files. - * - * This method can be used for loading from files such as user-selected files - * in the browser. - * When used in conjunction with `tf.loadLayersModel`, an instance of - * `tf.LayersModel` (Keras-style) can be constructed from the loaded artifacts. - * - * ```js - * // Note: This code snippet won't run properly without the actual file input - * // elements in the HTML DOM. - * - * // Suppose there are two HTML file input (``) - * // elements. - * const uploadJSONInput = document.getElementById('upload-json'); - * const uploadWeightsInput = document.getElementById('upload-weights'); - * const model = await tf.loadLayersModel(tf.io.browserFiles( - * [uploadJSONInput.files[0], uploadWeightsInput.files[0]])); - * ``` - * - * @param files `File`s to load from. Currently, this function supports only - * loading from files that contain Keras-style models (i.e., `tf.Model`s), for - * which an `Array` of `File`s is expected (in that order): - * - A JSON file containing the model topology and weight manifest. - * - Optionally, one or more binary files containing the binary weights. - * These files must have names that match the paths in the `weightsManifest` - * contained by the aforementioned JSON file, or errors will be thrown - * during loading. These weights files have the same format as the ones - * generated by `tensorflowjs_converter` that comes with the `tensorflowjs` - * Python PIP package. If no weights files are provided, only the model - * topology will be loaded from the JSON file above. - * @returns An instance of `Files` `IOHandler`. - * - * @doc { - * heading: 'Models', - * subheading: 'Loading', - * namespace: 'io', - * ignoreCI: true - * } - */ -declare function browserFiles(files: File[]): IOHandler; - -/** - * Deprecated. Use `tf.io.http`. - * @param path - * @param loadOptions - */ -declare function browserHTTPRequest(path: string, loadOptions?: LoadOptions): IOHandler; - /** draw processed canvas */ declare function canvas(input: AnyCanvas | HTMLImageElement | HTMLVideoElement, output: AnyCanvas): void; -/** - * Wraps a list of ArrayBuffers into a `slice()`-able object without allocating - * a large ArrayBuffer. - * - * Allocating large ArrayBuffers (~2GB) can be unstable on Chrome. TFJS loads - * its weights as a list of (usually) 4MB ArrayBuffers and then slices the - * weight tensors out of them. For small models, it's safe to concatenate all - * the weight buffers into a single ArrayBuffer and then slice the weight - * tensors out of it, but for large models, a different approach is needed. - */ -declare class CompositeArrayBuffer { - private shards; - private previousShardIndex; - private bufferUniformSize?; - readonly byteLength: number; - /** - * Concatenate a number of ArrayBuffers into one. - * - * @param buffers An array of ArrayBuffers to concatenate, or a single - * ArrayBuffer. - * @returns Result of concatenating `buffers` in order. - */ - static join(buffers?: ArrayBuffer[] | ArrayBuffer): ArrayBuffer; - constructor(buffers?: ArrayBuffer | ArrayBuffer[] | TypedArray | TypedArray[]); - slice(start?: number, end?: number): ArrayBuffer; - /** - * Get the index of the shard that contains the byte at `byteIndex`. - */ - private findShardForByte; -} - -/** - * Concatenate a number of ArrayBuffers into one. - * - * @param buffers An array of ArrayBuffers to concatenate, or a single - * ArrayBuffer. - * @returns Result of concatenating `buffers` in order. - * - * @deprecated Use tf.io.CompositeArrayBuffer.join() instead. - */ -declare function concatenateArrayBuffers(buffers: ArrayBuffer[] | ArrayBuffer): ArrayBuffer; - /** * Configuration interface definition for **Human** library * Contains all configurable parameters @@ -271,100 +176,6 @@ export declare interface Config { segmentation: Partial; } -/** - * Copy a model from one URL to another. - * - * This function supports: - * - * 1. Copying within a storage medium, e.g., - * `tf.io.copyModel('localstorage://model-1', 'localstorage://model-2')` - * 2. Copying between two storage mediums, e.g., - * `tf.io.copyModel('localstorage://model-1', 'indexeddb://model-1')` - * - * ```js - * // First create and save a model. - * const model = tf.sequential(); - * model.add(tf.layers.dense( - * {units: 1, inputShape: [10], activation: 'sigmoid'})); - * await model.save('localstorage://demo/management/model1'); - * - * // Then list existing models. - * console.log(JSON.stringify(await tf.io.listModels())); - * - * // Copy the model, from Local Storage to IndexedDB. - * await tf.io.copyModel( - * 'localstorage://demo/management/model1', - * 'indexeddb://demo/management/model1'); - * - * // List models again. - * console.log(JSON.stringify(await tf.io.listModels())); - * - * // Remove both models. - * await tf.io.removeModel('localstorage://demo/management/model1'); - * await tf.io.removeModel('indexeddb://demo/management/model1'); - * ``` - * - * @param sourceURL Source URL of copying. - * @param destURL Destination URL of copying. - * @returns ModelArtifactsInfo of the copied model (if and only if copying - * is successful). - * @throws Error if copying fails, e.g., if no model exists at `sourceURL`, or - * if `oldPath` and `newPath` are identical. - * - * @doc { - * heading: 'Models', - * subheading: 'Management', - * namespace: 'io', - * ignoreCI: true - * } - */ -declare function copyModel(sourceURL: string, destURL: string): Promise; - -/** - * We wrap data id since we use weak map to avoid memory leaks. - * Since we have our own memory management, we have a reference counter - * mapping a tensor to its data, so there is always a pointer (even if that - * data is otherwise garbage collectable). - * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/ - * Global_Objects/WeakMap - */ -declare type DataId = object; - -declare type DataToGPUOptions = DataToGPUWebGLOption; - -declare interface DataToGPUWebGLOption { - customTexShape?: [number, number]; -} - -/** @docalias 'float32'|'int32'|'bool'|'complex64'|'string' */ -declare type DataType = keyof DataTypeMap; - -declare interface DataTypeMap { - float32: Float32Array; - int32: Int32Array; - bool: Uint8Array; - complex64: Float32Array; - string: string[]; -} - -/** - * Decode flat ArrayBuffer as weights. - * - * This function does not handle sharding. - * - * This function is the reverse of `encodeWeights`. - * - * @param weightData A flat ArrayBuffer or an array of ArrayBuffers carrying the - * binary values of the tensors concatenated in the order specified in - * `specs`. - * @param specs Specifications of the names, dtypes and shapes of the tensors - * whose value are encoded by `buffer`. - * @return A map from tensor name to tensor value, with the names corresponding - * to names in `specs`. - * @throws Error, if any of the tensors has unsupported dtype. - */ -declare function decodeWeights(weightData: WeightData, specs: WeightsManifestEntry[]): NamedTensorMap; - /** - [See all default Config values...](https://github.com/vladmandic/human/blob/main/src/config.ts#L262) */ export declare const defaults: Config; @@ -458,28 +269,6 @@ export declare type Emotion = 'angry' | 'disgust' | 'fear' | 'happy' | 'sad' | ' export declare const empty: (error?: string | null) => Result; -/** - * Encode a map from names to weight values as an ArrayBuffer, along with an - * `Array` of `WeightsManifestEntry` as specification of the encoded weights. - * - * This function does not perform sharding. - * - * This function is the reverse of `decodeWeights`. - * - * @param tensors A map ("dict") from names to tensors. - * @param group Group to which the weights belong (optional). - * @returns A `Promise` of - * - A flat `ArrayBuffer` with all the binary values of the `Tensor`s - * concatenated. - * - An `Array` of `WeightManifestEntry`s, carrying information including - * tensor names, `dtype`s and shapes. - * @throws Error: on unsupported tensor `dtype`. - */ -declare function encodeWeights(tensors: NamedTensorMap | NamedTensor[], group?: WeightGroup): Promise<{ - data: ArrayBuffer; - specs: WeightsManifestEntry[]; -}>; - /** Env class that holds detected capabilities */ export declare class Env { #private; @@ -614,6 +403,8 @@ export declare interface FaceDetectorConfig extends GenericConfig { minSize: number; /** minimum overlap between two detected faces before one is discarded */ iouThreshold: number; + /** how much should face box be enlarged over the min/max facial coordinates */ + scale: number; /** should child models perform on masked image of a face */ mask: boolean; /** should face detection return processed and cropped face tensor that can with an external model for addtional processing? @@ -638,6 +429,8 @@ export declare type FaceGesture = `facing ${'left' | 'center' | 'right'}` | `bli /** Iris part of face configuration */ export declare interface FaceIrisConfig extends GenericConfig { + /** how much should iris box be enlarged over the min/max iris coordinates */ + scale: number; } export declare type FaceLandmark = 'leftEye' | 'rightEye' | 'nose' | 'mouth' | 'leftEar' | 'rightEar' | 'symmetryLine' | 'silhouette' | 'lipsUpperOuter' | 'lipsLowerOuter' | 'lipsUpperInner' | 'lipsLowerInner' | 'rightEyeUpper0' | 'rightEyeLower0' | 'rightEyeUpper1' | 'rightEyeLower1' | 'rightEyeUpper2' | 'rightEyeLower2' | 'rightEyeLower3' | 'rightEyebrowUpper' | 'rightEyebrowLower' | 'rightEyeIris' | 'leftEyeUpper0' | 'leftEyeLower0' | 'leftEyeUpper1' | 'leftEyeLower1' | 'leftEyeUpper2' | 'leftEyeLower2' | 'leftEyeLower3' | 'leftEyebrowUpper' | 'leftEyebrowLower' | 'leftEyeIris' | 'midwayBetweenEyes' | 'noseTip' | 'noseBottom' | 'noseRightCorner' | 'noseLeftCorner' | 'rightCheek' | 'leftCheek'; @@ -798,52 +591,6 @@ export declare type FingerCurl = 'none' | 'half' | 'full'; export declare type FingerDirection = 'verticalUp' | 'verticalDown' | 'horizontalLeft' | 'horizontalRight' | 'diagonalUpRight' | 'diagonalUpLeft' | 'diagonalDownRight' | 'diagonalDownLeft'; -/** - * Creates an IOHandler that loads model artifacts from memory. - * - * When used in conjunction with `tf.loadLayersModel`, an instance of - * `tf.LayersModel` (Keras-style) can be constructed from the loaded artifacts. - * - * ```js - * const model = await tf.loadLayersModel(tf.io.fromMemory( - * modelTopology, weightSpecs, weightData)); - * ``` - * - * @param modelArtifacts a object containing model topology (i.e., parsed from - * the JSON format). - * @param weightSpecs An array of `WeightsManifestEntry` objects describing the - * names, shapes, types, and quantization of the weight data. Optional. - * @param weightData A single `ArrayBuffer` containing the weight data, - * concatenated in the order described by the weightSpecs. Optional. - * @param trainingConfig Model training configuration. Optional. - * - * @returns A passthrough `IOHandler` that simply loads the provided data. - */ -declare function fromMemory(modelArtifacts: {} | ModelArtifacts, weightSpecs?: WeightsManifestEntry[], weightData?: WeightData, trainingConfig?: TrainingConfig): IOHandler; - -/** - * Creates an IOHandler that loads model artifacts from memory. - * - * When used in conjunction with `tf.loadLayersModel`, an instance of - * `tf.LayersModel` (Keras-style) can be constructed from the loaded artifacts. - * - * ```js - * const model = await tf.loadLayersModel(tf.io.fromMemory( - * modelTopology, weightSpecs, weightData)); - * ``` - * - * @param modelArtifacts a object containing model topology (i.e., parsed from - * the JSON format). - * @param weightSpecs An array of `WeightsManifestEntry` objects describing the - * names, shapes, types, and quantization of the weight data. Optional. - * @param weightData A single `ArrayBuffer` containing the weight data, - * concatenated in the order described by the weightSpecs. Optional. - * @param trainingConfig Model training configuration. Optional. - * - * @returns A passthrough `IOHandlerSync` that simply loads the provided data. - */ -declare function fromMemorySync(modelArtifacts: {} | ModelArtifacts, weightSpecs?: WeightsManifestEntry[], weightData?: WeightData, trainingConfig?: TrainingConfig): IOHandlerSync; - export declare type Gender = 'male' | 'female' | 'unknown'; /** Generic config type inherited by all module types */ @@ -888,304 +635,7 @@ export declare type GestureResult = { gesture: HandGesture; }; -declare const getLoadHandlers: (url: string | string[], loadOptions?: LoadOptions) => IOHandler[]; - -/** - * Create `ModelArtifacts` from a JSON file. - * - * @param modelJSON Object containing the parsed JSON of `model.json` - * @param loadWeights Function that takes the JSON file's weights manifest, - * reads weights from the listed path(s), and returns a Promise of the - * weight manifest entries along with the weights data. - * @returns A Promise of the `ModelArtifacts`, as described by the JSON file. - */ -declare function getModelArtifactsForJSON(modelJSON: ModelJSON, loadWeights: (weightsManifest: WeightsManifestConfig) => Promise<[ -WeightsManifestEntry[], -WeightData -]>): Promise; - -/** - * Create `ModelArtifacts` from a JSON file and weights. - * - * @param modelJSON Object containing the parsed JSON of `model.json` - * @param weightSpecs The list of WeightsManifestEntry for the model. Must be - * passed if the modelJSON has a weightsManifest. - * @param weightData An ArrayBuffer or array of ArrayBuffers of weight data for - * the model corresponding to the weights in weightSpecs. Must be passed if - * the modelJSON has a weightsManifest. - * @returns A Promise of the `ModelArtifacts`, as described by the JSON file. - */ -declare function getModelArtifactsForJSONSync(modelJSON: ModelJSON, weightSpecs?: WeightsManifestEntry[], weightData?: WeightData): ModelArtifacts; - -/** - * Populate ModelArtifactsInfo fields for a model with JSON topology. - * @param modelArtifacts - * @returns A ModelArtifactsInfo object. - */ -declare function getModelArtifactsInfoForJSON(modelArtifacts: ModelArtifacts): ModelArtifactsInfo; - -declare const getSaveHandlers: (url: string | string[]) => IOHandler[]; - -/** - * Concatenate the weights stored in a WeightsManifestConfig into a list of - * WeightsManifestEntry - * - * @param weightsManifest The WeightsManifestConfig to extract weights from. - * @returns A list of WeightsManifestEntry of the weights in the weightsManifest - */ -declare function getWeightSpecs(weightsManifest: WeightsManifestConfig): WeightsManifestEntry[]; - -declare interface GPUData { - tensorRef: Tensor; - texture?: WebGLTexture; - buffer?: GPUBuffer; - texShape?: [number, number]; -} - -/** - * A `tf.GraphModel` is a directed, acyclic graph built from a - * SavedModel GraphDef and allows inference execution. - * - * A `tf.GraphModel` can only be created by loading from a model converted from - * a [TensorFlow SavedModel](https://www.tensorflow.org/guide/saved_model) using - * the command line converter tool and loaded via `tf.loadGraphModel`. - * - * @doc {heading: 'Models', subheading: 'Classes'} - */ -export declare class GraphModel implements InferenceModel { - private modelUrl; - private loadOptions; - private executor; - private version; - private handler; - private artifacts; - private initializer; - private resourceIdToCapturedInput; - private resourceManager; - private signature; - private initializerSignature; - private structuredOutputKeys; - private readonly io; - get modelVersion(): string; - get inputNodes(): string[]; - get outputNodes(): string[]; - get inputs(): TensorInfo_2[]; - get outputs(): TensorInfo_2[]; - get weights(): NamedTensorsMap; - get metadata(): {}; - get modelSignature(): {}; - get modelStructuredOutputKeys(): {}; - /** - * @param modelUrl url for the model, or an `io.IOHandler`. - * @param weightManifestUrl url for the weight file generated by - * scripts/convert.py script. - * @param requestOption options for Request, which allows to send credentials - * and custom headers. - * @param onProgress Optional, progress callback function, fired periodically - * before the load is completed. - */ - constructor(modelUrl: ModelURL, loadOptions?: io.LoadOptions, tfio?: typeof io); - private findIOHandler; - /** - * Loads the model and weight files, construct the in memory weight map and - * compile the inference graph. - */ - load(): UrlIOHandler extends io.IOHandlerSync ? boolean : Promise; - /** - * Synchronously construct the in memory weight map and - * compile the inference graph. - * - * @doc {heading: 'Models', subheading: 'Classes', ignoreCI: true} - */ - loadSync(artifacts: io.ModelArtifacts): boolean; - /** - * Save the configuration and/or weights of the GraphModel. - * - * An `IOHandler` is an object that has a `save` method of the proper - * signature defined. The `save` method manages the storing or - * transmission of serialized data ("artifacts") that represent the - * model's topology and weights onto or via a specific medium, such as - * file downloads, local storage, IndexedDB in the web browser and HTTP - * requests to a server. TensorFlow.js provides `IOHandler` - * implementations for a number of frequently used saving mediums, such as - * `tf.io.browserDownloads` and `tf.io.browserLocalStorage`. See `tf.io` - * for more details. - * - * This method also allows you to refer to certain types of `IOHandler`s - * as URL-like string shortcuts, such as 'localstorage://' and - * 'indexeddb://'. - * - * Example 1: Save `model`'s topology and weights to browser [local - * storage](https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage); - * then load it back. - * - * ```js - * const modelUrl = - * 'https://storage.googleapis.com/tfjs-models/savedmodel/mobilenet_v2_1.0_224/model.json'; - * const model = await tf.loadGraphModel(modelUrl); - * const zeros = tf.zeros([1, 224, 224, 3]); - * model.predict(zeros).print(); - * - * const saveResults = await model.save('localstorage://my-model-1'); - * - * const loadedModel = await tf.loadGraphModel('localstorage://my-model-1'); - * console.log('Prediction from loaded model:'); - * model.predict(zeros).print(); - * ``` - * - * @param handlerOrURL An instance of `IOHandler` or a URL-like, - * scheme-based string shortcut for `IOHandler`. - * @param config Options for saving the model. - * @returns A `Promise` of `SaveResult`, which summarizes the result of - * the saving, such as byte sizes of the saved artifacts for the model's - * topology and weight values. - * - * @doc {heading: 'Models', subheading: 'Classes', ignoreCI: true} - */ - save(handlerOrURL: io.IOHandler | string, config?: io.SaveConfig): Promise; - private addStructuredOutputNames; - /** - * Execute the inference for the input tensors. - * - * @param input The input tensors, when there is single input for the model, - * inputs param should be a `tf.Tensor`. For models with mutliple inputs, - * inputs params should be in either `tf.Tensor`[] if the input order is - * fixed, or otherwise NamedTensorMap format. - * - * For model with multiple inputs, we recommend you use NamedTensorMap as the - * input type, if you use `tf.Tensor`[], the order of the array needs to - * follow the - * order of inputNodes array. @see {@link GraphModel.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]. - * - * @param config Prediction configuration for specifying the batch size. - * Currently the batch size option is ignored for graph model. - * - * @returns 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 {heading: 'Models', subheading: 'Classes'} - */ - predict(inputs: Tensor | Tensor[] | NamedTensorMap, config?: ModelPredictConfig): Tensor | Tensor[] | NamedTensorMap; - /** - * Execute the inference for the input tensors in async fashion, use this - * method when your model contains control flow ops. - * - * @param input The input tensors, when there is single input for the model, - * inputs param should be a `tf.Tensor`. For models with mutliple inputs, - * inputs params should be in either `tf.Tensor`[] if the input order is - * fixed, or otherwise NamedTensorMap format. - * - * For model with multiple inputs, we recommend you use NamedTensorMap as the - * input type, if you use `tf.Tensor`[], the order of the array needs to - * follow the - * order of inputNodes array. @see {@link GraphModel.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]. - * - * @param config Prediction configuration for specifying the batch size. - * Currently the batch size option is ignored for graph model. - * - * @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 {heading: 'Models', subheading: 'Classes'} - */ - predictAsync(inputs: Tensor | Tensor[] | NamedTensorMap, config?: ModelPredictConfig): Promise; - private normalizeInputs; - private normalizeOutputs; - private executeInitializerGraph; - private executeInitializerGraphAsync; - private setResourceIdToCapturedInput; - /** - * Executes inference for the model for given input tensors. - * @param inputs tensor, tensor array or tensor map of the inputs for the - * model, keyed by the input node names. - * @param outputs output node name from the TensorFlow model, if no - * outputs are specified, the default outputs of the model would be used. - * You can inspect intermediate nodes of the model by adding them to the - * outputs array. - * - * @returns A single tensor if provided with a single output or no outputs - * are provided and there is only one default output, otherwise return a - * tensor array. The order of the tensor array is the same as the outputs - * if provided, otherwise the order of outputNodes attribute of the model. - * - * @doc {heading: 'Models', subheading: 'Classes'} - */ - execute(inputs: Tensor | Tensor[] | NamedTensorMap, outputs?: string | string[]): Tensor | Tensor[]; - /** - * Executes inference for the model for given input tensors in async - * fashion, use this method when your model contains control flow ops. - * @param inputs tensor, tensor array or tensor map of the inputs for the - * model, keyed by the input node names. - * @param outputs output node name from the TensorFlow model, if no outputs - * are specified, the default outputs of the model would be used. You can - * inspect intermediate nodes of the model by adding them to the outputs - * array. - * - * @returns A Promise of single tensor if provided with a single output or - * no outputs are provided and there is only one default output, otherwise - * return a tensor map. - * - * @doc {heading: 'Models', subheading: 'Classes'} - */ - executeAsync(inputs: Tensor | Tensor[] | NamedTensorMap, outputs?: string | string[]): Promise; - /** - * Get intermediate tensors for model debugging mode (flag - * KEEP_INTERMEDIATE_TENSORS is true). - * - * @doc {heading: 'Models', subheading: 'Classes'} - */ - getIntermediateTensors(): NamedTensorsMap; - /** - * Dispose intermediate tensors for model debugging mode (flag - * KEEP_INTERMEDIATE_TENSORS is true). - * - * @doc {heading: 'Models', subheading: 'Classes'} - */ - disposeIntermediateTensors(): void; - private convertTensorMapToTensorsMap; - /** - * Releases the memory used by the weight tensors and resourceManager. - * - * @doc {heading: 'Models', subheading: 'Classes'} - */ - dispose(): void; -} +export { GraphModel } /** draw detected hands */ declare function hand(inCanvas: AnyCanvas, result: HandResult[], drawOptions?: Partial): void; @@ -1244,78 +694,6 @@ export declare interface HandResult { export declare type HandType = 'hand' | 'fist' | 'pinch' | 'point' | 'face' | 'tip' | 'pinchtip'; -/** - * Creates an IOHandler subtype that sends model artifacts to HTTP server. - * - * An HTTP request of the `multipart/form-data` mime type will be sent to the - * `path` URL. The form data includes artifacts that represent the topology - * and/or weights of the model. In the case of Keras-style `tf.Model`, two - * blobs (files) exist in form-data: - * - A JSON file consisting of `modelTopology` and `weightsManifest`. - * - A binary weights file consisting of the concatenated weight values. - * These files are in the same format as the one generated by - * [tfjs_converter](https://js.tensorflow.org/tutorials/import-keras.html). - * - * The following code snippet exemplifies the client-side code that uses this - * function: - * - * ```js - * const model = tf.sequential(); - * model.add( - * tf.layers.dense({units: 1, inputShape: [100], activation: 'sigmoid'})); - * - * const saveResult = await model.save(tf.io.http( - * 'http://model-server:5000/upload', {requestInit: {method: 'PUT'}})); - * console.log(saveResult); - * ``` - * - * If the default `POST` method is to be used, without any custom parameters - * such as headers, you can simply pass an HTTP or HTTPS URL to `model.save`: - * - * ```js - * const saveResult = await model.save('http://model-server:5000/upload'); - * ``` - * - * The following GitHub Gist - * https://gist.github.com/dsmilkov/1b6046fd6132d7408d5257b0976f7864 - * implements a server based on [flask](https://github.com/pallets/flask) that - * can receive the request. Upon receiving the model artifacts via the requst, - * this particular server reconstitutes instances of [Keras - * Models](https://keras.io/models/model/) in memory. - * - * - * @param path A URL path to the model. - * Can be an absolute HTTP path (e.g., - * 'http://localhost:8000/model-upload)') or a relative path (e.g., - * './model-upload'). - * @param requestInit Request configurations to be used when sending - * HTTP request to server using `fetch`. It can contain fields such as - * `method`, `credentials`, `headers`, `mode`, etc. See - * https://developer.mozilla.org/en-US/docs/Web/API/Request/Request - * for more information. `requestInit` must not have a body, because the - * body will be set by TensorFlow.js. File blobs representing the model - * topology (filename: 'model.json') and the weights of the model (filename: - * 'model.weights.bin') will be appended to the body. If `requestInit` has a - * `body`, an Error will be thrown. - * @param loadOptions Optional configuration for the loading. It includes the - * following fields: - * - weightPathPrefix Optional, this specifies the path prefix for weight - * files, by default this is calculated from the path param. - * - fetchFunc Optional, custom `fetch` function. E.g., in Node.js, - * the `fetch` from node-fetch can be used here. - * - onProgress Optional, progress callback function, fired periodically - * before the load is completed. - * @returns An instance of `IOHandler`. - * - * @doc { - * heading: 'Models', - * subheading: 'Loading', - * namespace: 'io', - * ignoreCI: true - * } - */ -declare function http(path: string, loadOptions?: LoadOptions): IOHandler; - /** **Human** library main class * * All methods and properties are available only as members of Human class @@ -1499,142 +877,15 @@ export default Human; /** Defines all possible image objects */ export declare type ImageObjects = ImageData | ImageBitmap; -/** - * Common interface for a machine learning model that can do inference. - */ -declare interface InferenceModel { - /** - * Return the array of input tensor info. - */ - readonly inputs: ModelTensorInfo[]; - /** - * Return the array of output tensor info. - */ - readonly outputs: ModelTensorInfo[]; - /** - * Execute the inference for the input tensors. - * - * @param input The input tensors, when there is single input for the model, - * inputs param should be a Tensor. For models with multiple inputs, inputs - * params should be in either Tensor[] if the input order is fixed, or - * otherwise NamedTensorMap format. - * 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]. - * - * @param config Prediction configuration for specifying the batch size. - * - * @returns Inference result tensors. The output would be single Tensor if - * model has single output node, otherwise Tensor[] or NamedTensorMap[] will - * be returned for model with multiple outputs. - */ - predict(inputs: Tensor | Tensor[] | NamedTensorMap, config: ModelPredictConfig): Tensor | Tensor[] | NamedTensorMap; - /** - * Single Execute the inference for the input tensors and return activation - * values for specified output node names without batching. - * - * @param input The input tensors, when there is single input for the model, - * inputs param should be a Tensor. For models with multiple inputs, inputs - * params should be in either Tensor[] if the input order is fixed, or - * otherwise NamedTensorMap format. - * - * @param outputs string|string[]. List of output node names to retrieve - * activation from. - * - * @returns Activation values for the output nodes result tensors. The return - * type matches specified parameter outputs type. The output would be single - * Tensor if single output is specified, otherwise Tensor[] for multiple - * outputs. - */ - execute(inputs: Tensor | Tensor[] | NamedTensorMap, outputs: string | string[]): Tensor | Tensor[]; -} - /** sets default label templates for face/body/hand/object/gestures */ declare function init(): void; /** Defines all possible input types for **Human** detection */ export declare type Input = Tensor | AnyCanvas | AnyImage | AnyVideo | ImageObjects | ExternalCanvas; -declare namespace io { - export { - copyModel, - listModels, - moveModel, - removeModel, - browserFiles, - browserHTTPRequest, - CompositeArrayBuffer, - concatenateArrayBuffers, - decodeWeights, - encodeWeights, - fromMemory, - fromMemorySync, - getLoadHandlers, - getModelArtifactsForJSON, - getModelArtifactsForJSONSync, - getModelArtifactsInfoForJSON, - getSaveHandlers, - getWeightSpecs, - http, - IOHandler, - IOHandlerSync, - isHTTPScheme, - LoadHandler, - LoadOptions, - loadWeights, - ModelArtifacts, - ModelArtifactsInfo, - ModelJSON, - ModelStoreManager, - OnProgressCallback, - registerLoadRouter, - registerSaveRouter, - RequestDetails, - SaveConfig, - SaveHandler, - SaveResult, - TrainingConfig, - WeightData, - WeightGroup, - weightsLoaderFactory, - WeightsManifestConfig, - WeightsManifestEntry, - withSaveHandler, - withSaveHandlerSync - } -} - -/** - * Interface for a model import/export handler. - * - * The `save` and `load` handlers are both optional, in order to allow handlers - * that support only saving or loading. - */ -declare interface IOHandler { - save?: SaveHandler; - load?: LoadHandler; -} - -/** - * Interface for a synchronous model import/export handler. - * - * The `save` and `load` handlers are both optional, in order to allow handlers - * that support only saving or loading. - */ -declare type IOHandlerSync = { - save?: SaveHandlerSync; - load?: LoadHandlerSync; -}; - -declare type IORouter = (url: string | string[], loadOptions?: LoadOptions) => IOHandler; - /** iris gesture type */ export declare type IrisGesture = 'facing center' | `looking ${'left' | 'right' | 'up' | 'down'}` | 'looking center'; -declare function isHTTPScheme(url: string): boolean; - declare interface KernelOps { name: string; url: string; @@ -1642,131 +893,6 @@ declare interface KernelOps { ops: string[]; } -/** - * List all models stored in registered storage mediums. - * - * For a web browser environment, the registered mediums are Local Storage and - * IndexedDB. - * - * ```js - * // First create and save a model. - * const model = tf.sequential(); - * model.add(tf.layers.dense( - * {units: 1, inputShape: [10], activation: 'sigmoid'})); - * await model.save('localstorage://demo/management/model1'); - * - * // Then list existing models. - * console.log(JSON.stringify(await tf.io.listModels())); - * - * // Delete the model. - * await tf.io.removeModel('localstorage://demo/management/model1'); - * - * // List models again. - * console.log(JSON.stringify(await tf.io.listModels())); - * ``` - * - * @returns A `Promise` of a dictionary mapping URLs of existing models to - * their model artifacts info. URLs include medium-specific schemes, e.g., - * 'indexeddb://my/model/1'. Model artifacts info include type of the - * model's topology, byte sizes of the topology, weights, etc. - * - * @doc { - * heading: 'Models', - * subheading: 'Management', - * namespace: 'io', - * ignoreCI: true - * } - */ -declare function listModels(): Promise<{ - [url: string]: ModelArtifactsInfo; -}>; - -/** - * Type definition for handlers of loading operations. - */ -declare type LoadHandler = () => Promise; - -/** - * Type definition for handlers of synchronous loading operations. - */ -declare type LoadHandlerSync = () => ModelArtifacts; - -/** @innamespace io */ -declare interface LoadOptions { - /** - * RequestInit (options) for HTTP requests. - * - * For detailed information on the supported fields, see - * [https://developer.mozilla.org/en-US/docs/Web/API/Request/Request]( - * https://developer.mozilla.org/en-US/docs/Web/API/Request/Request) - */ - requestInit?: RequestInit; - /** - * Progress callback. - */ - onProgress?: OnProgressCallback; - /** - * A function used to override the `window.fetch` function. - */ - fetchFunc?: Function; - /** - * Strict loading model: whether extraneous weights or missing - * weights should trigger an `Error`. - * - * If `true`, require that the provided weights exactly match those - * required by the layers. `false` means that both extra weights - * and missing weights will be silently ignored. - * - * Default: `true`. - */ - strict?: boolean; - /** - * Path prefix for weight files, by default this is calculated from the - * path of the model JSON file. - * - * For instance, if the path to the model JSON file is - * `http://localhost/foo/model.json`, then the default path prefix will be - * `http://localhost/foo/`. If a weight file has the path value - * `group1-shard1of2` in the weight manifest, then the weight file will be - * loaded from `http://localhost/foo/group1-shard1of2` by default. However, - * if you provide a `weightPathPrefix` value of - * `http://localhost/foo/alt-weights`, then the weight file will be loaded - * from the path `http://localhost/foo/alt-weights/group1-shard1of2` instead. - */ - weightPathPrefix?: string; - /** - * Whether the module or model is to be loaded from TF Hub. - * - * Setting this to `true` allows passing a TF-Hub module URL, omitting the - * standard model file name and the query parameters. - * - * Default: `false`. - */ - fromTFHub?: boolean; - /** - * An async function to convert weight file name to URL. The weight file - * names are stored in model.json's weightsManifest.paths field. By default we - * consider weight files are colocated with the model.json file. For example: - * model.json URL: https://www.google.com/models/1/model.json - * group1-shard1of1.bin url: - * https://www.google.com/models/1/group1-shard1of1.bin - * - * With this func you can convert the weight file name to any URL. - */ - weightUrlConverter?: (weightFileName: string) => Promise; -} - -/** - * Reads a weights manifest JSON configuration, fetches the weights and - * returns them as `Tensor`s. - * - * @param manifest The weights manifest JSON. - * @param filePathPrefix The path prefix for filenames given in the manifest. - * Defaults to the empty string. - * @param weightNames The names of the weights to be fetched. - */ -declare function loadWeights(manifest: WeightsManifestConfig, filePathPrefix?: string, weightNames?: string[], requestInit?: RequestInit): Promise; - declare namespace match { export { distance, @@ -1786,120 +912,6 @@ declare type MatchOptions = { max?: number; } | undefined; -/** - * The serialized artifacts of a model, including topology and weights. - * - * The `modelTopology`, `trainingConfig`, `weightSpecs` and `weightData` fields - * of this interface are optional, in order to support topology- or weights-only - * saving and loading. - * - * Note this interface is used internally in IOHandlers. For the file format - * written to disk as `model.json`, see `ModelJSON`. - */ -declare interface ModelArtifacts { - /** - * Model topology. - * - * For Keras-style `tf.Model`s, this is a JSON object. - * For TensorFlow-style models (e.g., `SavedModel`), this is the JSON - * encoding of the `GraphDef` protocol buffer. - */ - modelTopology?: {} | ArrayBuffer; - /** - * Serialized configuration for the model's training. - */ - trainingConfig?: TrainingConfig; - /** - * Weight specifications. - * - * This corresponds to the weightsData below. - */ - weightSpecs?: WeightsManifestEntry[]; - /** - * Binary buffer(s) for all weight values in the order specified by - * `weightSpecs`. This may be a single ArrayBuffer of all the weights - * concatenated together or an Array of ArrayBuffers containing the weights - * (weights may be sharded across multiple ArrayBuffers). - */ - weightData?: WeightData; - /** - * Hard-coded format name for models saved from TensorFlow.js or converted - * by TensorFlow.js Converter. - */ - format?: string; - /** - * What library is responsible for originally generating this artifact. - * - * Used for debugging purposes. E.g., 'TensorFlow.js v1.0.0'. - */ - generatedBy?: string; - /** - * What library or tool is responsible for converting the original model - * to this format, applicable only if the model is output by a converter. - * - * Used for debugging purposes. E.g., 'TensorFlow.js Converter v1.0.0'. - * - * A value of `null` means the model artifacts are generated without any - * conversion process (e.g., saved directly from a TensorFlow.js - * `tf.LayersModel` instance.) - */ - convertedBy?: string | null; - /** - * Inputs and outputs signature for saved model. - */ - signature?: {}; - /** - * User-defined metadata about the model. - */ - userDefinedMetadata?: { - [key: string]: {}; - }; - /** - * Initializer for the model. - */ - modelInitializer?: {}; - /** - * Inputs and outputs signature for model initializer. - */ - initializerSignature?: {}; -} - -declare interface ModelArtifactsInfo { - /** - * Timestamp for when the model is saved. - */ - dateSaved: Date; - /** - * TODO (cais,yassogba) consider removing GraphDef as GraphDefs now - * come in a JSON format and none of our IOHandlers support a non json - * format. We could conder replacing this with 'Binary' if we want to - * allow future handlers to save to non json formats (though they will - * probably want more information than 'Binary'). - * Type of the model topology - * - * Type of the model topology - * - * Possible values: - * - JSON: JSON config (human-readable, e.g., Keras JSON). - * - GraphDef: TensorFlow - * [GraphDef](https://www.tensorflow.org/extend/tool_developers/#graphdef) - * protocol buffer (binary). - */ - modelTopologyType: 'JSON' | 'GraphDef'; - /** - * Size of model topology (Keras JSON or GraphDef), in bytes. - */ - modelTopologyBytes?: number; - /** - * Size of weight specification or manifest, in bytes. - */ - weightSpecsBytes?: number; - /** - * Size of weight value data, in bytes. - */ - weightDataBytes?: number; -} - export declare interface ModelInfo { name: string; inCache: boolean; @@ -1909,85 +921,6 @@ export declare interface ModelInfo { url: string; } -/** - * The on-disk format of the `model.json` file. - * - * TF.js 1.0 always populates the optional fields when writing model.json. - * Prior versions did not provide those fields. - */ -declare interface ModelJSON { - /** - * Model topology. - * - * For Keras-style `tf.Model`s, this is a JSON object. - * For TensorFlow-style models (e.g., `SavedModel`), this is the JSON - * encoding of the `GraphDef` protocol buffer. - */ - modelTopology: {}; - /** Model training configuration. */ - trainingConfig?: TrainingConfig; - /** - * Weights manifest. - * - * The weights manifest consists of an ordered list of weight-manifest - * groups. Each weight-manifest group consists of a number of weight values - * stored in a number of paths. See the documentation of - * `WeightsManifestConfig` for more details. - */ - weightsManifest: WeightsManifestConfig; - /** - * Hard-coded format name for models saved from TensorFlow.js or converted - * by TensorFlow.js Converter. - */ - format?: string; - /** - * What library is responsible for originally generating this artifact. - * - * Used for debugging purposes. E.g., 'TensorFlow.js v1.0.0'. - */ - generatedBy?: string; - /** - * What library or tool is responsible for converting the original model - * to this format, applicable only if the model is output by a converter. - * - * Used for debugging purposes. E.g., 'TensorFlow.js Converter v1.0.0'. - * - * A value of `null` means the model artifacts are generated without any - * conversion process (e.g., saved directly from a TensorFlow.js - * `tf.LayersModel` instance.) - */ - convertedBy?: string | null; - /** - * Inputs and outputs signature for saved model. - */ - signature?: {}; - /** - * User-defined metadata about the model. - */ - userDefinedMetadata?: { - [key: string]: {}; - }; - /** - * Initializer for the model. - */ - modelInitializer?: {}; - /** - * Inputs and outputs signature for model initializer. - */ - initializerSignature?: {}; -} - -declare interface ModelPredictConfig { - /** - * Optional. Batch size (Integer). If unspecified, it will default to 32. - */ - batchSize?: number; - /** - * Optional. Verbosity mode. Defaults to false. - */ - verbose?: boolean; -} - /** Models class used by Human * - models: record of all GraphModels * - list: returns list of configured models with their stats @@ -2037,112 +970,6 @@ declare interface ModelStats { modelStats: ModelInfo[]; } -/** - * An interface for the manager of a model store. - * - * A model store is defined as a storage medium on which multiple models can - * be stored. Each stored model has a unique `path` as its identifier. - * A `ModelStoreManager` for the store allows actions including - * - * - Listing the models stored in the store. - * - Deleting a model from the store. - */ -declare interface ModelStoreManager { - /** - * List all models in the model store. - * - * @returns A dictionary mapping paths of existing models to their - * model artifacts info. Model artifacts info include type of the model's - * topology, byte sizes of the topology, weights, etc. - */ - listModels(): Promise<{ - [path: string]: ModelArtifactsInfo; - }>; - /** - * Remove a model specified by `path`. - * - * @param path - * @returns ModelArtifactsInfo of the deleted model (if and only if deletion - * is successful). - * @throws Error if deletion fails, e.g., if no model exists at `path`. - */ - removeModel(path: string): Promise; -} - -/** - * Interface for model input/output tensor info. - */ -declare interface ModelTensorInfo { - name: string; - shape?: number[]; - dtype: DataType; - tfDtype?: string; -} - -/** - * Move a model from one URL to another. - * - * This function supports: - * - * 1. Moving within a storage medium, e.g., - * `tf.io.moveModel('localstorage://model-1', 'localstorage://model-2')` - * 2. Moving between two storage mediums, e.g., - * `tf.io.moveModel('localstorage://model-1', 'indexeddb://model-1')` - * - * ```js - * // First create and save a model. - * const model = tf.sequential(); - * model.add(tf.layers.dense( - * {units: 1, inputShape: [10], activation: 'sigmoid'})); - * await model.save('localstorage://demo/management/model1'); - * - * // Then list existing models. - * console.log(JSON.stringify(await tf.io.listModels())); - * - * // Move the model, from Local Storage to IndexedDB. - * await tf.io.moveModel( - * 'localstorage://demo/management/model1', - * 'indexeddb://demo/management/model1'); - * - * // List models again. - * console.log(JSON.stringify(await tf.io.listModels())); - * - * // Remove the moved model. - * await tf.io.removeModel('indexeddb://demo/management/model1'); - * ``` - * - * @param sourceURL Source URL of moving. - * @param destURL Destination URL of moving. - * @returns ModelArtifactsInfo of the copied model (if and only if copying - * is successful). - * @throws Error if moving fails, e.g., if no model exists at `sourceURL`, or - * if `oldPath` and `newPath` are identical. - * - * @doc { - * heading: 'Models', - * subheading: 'Management', - * namespace: 'io', - * ignoreCI: true - * } - */ -declare function moveModel(sourceURL: string, destURL: string): Promise; - -declare interface NamedTensor { - name: string; - tensor: Tensor; -} - -/** @docalias {[name: string]: Tensor} */ -declare type NamedTensorMap = { - [name: string]: Tensor; -}; - -declare type NamedTensorsMap = { - [key: string]: Tensor[]; -}; - -declare type NumericDataType = 'float32' | 'int32' | 'bool' | 'complex64'; - /** draw detected objects */ declare function object(inCanvas: AnyCanvas, result: ObjectResult[], drawOptions?: Partial): void; @@ -2174,15 +1001,6 @@ export declare interface ObjectResult { export declare type ObjectType = 'person' | 'bicycle' | 'car' | 'motorcycle' | 'airplane' | 'bus' | 'train' | 'truck' | 'boat' | 'traffic light' | 'fire hydrant' | 'stop sign' | 'parking meter' | 'bench' | 'bird' | 'cat' | 'dog' | 'horse' | 'sheep' | 'cow' | 'elephant' | 'bear' | 'zebra' | 'giraffe' | 'backpack' | 'umbrella' | 'handbag' | 'tie' | 'suitcase' | 'frisbee' | 'skis' | 'snowboard' | 'sports ball' | 'kite' | 'baseball bat' | 'baseball glove' | 'skateboard' | 'surfboard' | 'tennis racket' | 'bottle' | 'wine glass' | 'cup' | 'fork' | 'knife' | 'spoon' | 'bowl' | 'banana' | 'apple' | 'sandwich' | 'orange' | 'broccoli' | 'carrot' | 'hot dog' | 'pizza' | 'donut' | 'cake' | 'chair' | 'couch' | 'potted plant' | 'bed' | 'dining table' | 'toilet' | 'tv' | 'laptop' | 'mouse' | 'remote' | 'keyboard' | 'cell phone' | 'microwave' | 'oven' | 'toaster' | 'sink' | 'refrigerator' | 'book' | 'clock' | 'vase' | 'scissors' | 'teddy bear' | 'hair drier' | 'toothbrush'; -/** - * Callback for the progress of a long-running action such as an HTTP - * request for a large binary object. - * - * `fraction` should be a number in the [0, 1] interval, indicating how - * much of the action has completed. - */ -declare type OnProgressCallback = (fraction: number) => void; - /** currently set draw options {@link DrawOptions} */ declare const options: DrawOptions; @@ -2217,68 +1035,7 @@ export declare type Point = [number, number, number?]; export declare type Race = 'white' | 'black' | 'asian' | 'indian' | 'other'; -export declare enum Rank { - R0 = "R0", - R1 = "R1", - R2 = "R2", - R3 = "R3", - R4 = "R4", - R5 = "R5", - R6 = "R6" -} - -declare interface RecursiveArray { - [index: number]: T | RecursiveArray; -} - -declare const registerLoadRouter: (loudRouter: IORouter) => void; - -declare const registerSaveRouter: (loudRouter: IORouter) => void; - -/** - * Remove a model specified by URL from a registered storage medium. - * - * ```js - * // First create and save a model. - * const model = tf.sequential(); - * model.add(tf.layers.dense( - * {units: 1, inputShape: [10], activation: 'sigmoid'})); - * await model.save('localstorage://demo/management/model1'); - * - * // Then list existing models. - * console.log(JSON.stringify(await tf.io.listModels())); - * - * // Delete the model. - * await tf.io.removeModel('localstorage://demo/management/model1'); - * - * // List models again. - * console.log(JSON.stringify(await tf.io.listModels())); - * ``` - * - * @param url A URL to a stored model, with a scheme prefix, e.g., - * 'localstorage://my-model-1', 'indexeddb://my/model/2'. - * @returns ModelArtifactsInfo of the deleted model (if and only if deletion - * is successful). - * @throws Error if deletion fails, e.g., if no model exists at `path`. - * - * @doc { - * heading: 'Models', - * subheading: 'Management', - * namespace: 'io', - * ignoreCI: true - * } - */ -declare function removeModel(url: string): Promise; - -/** - * Additional options for Platform.fetch - */ -declare interface RequestDetails { - /** - * Is this request for a binary file (as opposed to a json file) - */ - isBinary?: boolean; -} +export { Rank } /** * Result interface definition for **Human** library @@ -2312,53 +1069,6 @@ export declare interface Result { height: number; } -/** - * Options for saving a model. - * @innamespace io - */ -declare interface SaveConfig { - /** - * Whether to save only the trainable weights of the model, ignoring the - * non-trainable ones. - */ - trainableOnly?: boolean; - /** - * Whether the optimizer will be saved (if exists). - * - * Default: `false`. - */ - includeOptimizer?: boolean; -} - -/** - * Type definition for handlers of saving operations. - */ -declare type SaveHandler = (modelArtifact: ModelArtifacts) => Promise; - -/** - * Type definition for handlers of synchronous saving operations. - */ -declare type SaveHandlerSync = (modelArtifact: ModelArtifacts) => SaveResult; - -/** - * Result of a saving operation. - */ -declare interface SaveResult { - /** - * Information about the model artifacts saved. - */ - modelArtifactsInfo: ModelArtifactsInfo; - /** - * HTTP responses from the server that handled the model-saving request (if - * any). This is applicable only to server-based saving routes. - */ - responses?: Response[]; - /** - * Error messages and related data (if any). - */ - errors?: Array<{} | string>; -} - /** Configures all body segmentation module * removes background from input containing person * if segmentation is enabled it will run as preprocessing task before any other model @@ -2375,35 +1085,6 @@ export declare interface SegmentationConfig extends GenericConfig { /** Possible segmentation model behavior */ export declare type SegmentationEnum = 'default' | 'alpha' | 'foreground' | 'state'; -/** - * @license - * Copyright 2017 Google LLC. All Rights Reserved. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============================================================================= - */ -/// -/// -/** @docalias number[] */ -declare interface ShapeMap { - R0: number[]; - R1: [number]; - R2: [number, number]; - R3: [number, number, number]; - R4: [number, number, number, number]; - R5: [number, number, number, number, number]; - R6: [number, number, number, number, number, number]; -} - /** Calculates normalized similarity between two face descriptors based on their `distance` * @param options - calculation options * - order - algorithm to use @@ -2417,287 +1098,20 @@ declare interface ShapeMap { */ declare function similarity(descriptor1: Descriptor, descriptor2: Descriptor, options?: MatchOptions): number; -declare interface SingleValueMap { - bool: boolean; - int32: number; - float32: number; - complex64: number; - string: string; -} +export { Tensor } -export declare namespace Tensor { } +export { Tensor1D } -/** - * A `tf.Tensor` object represents an immutable, multidimensional array of - * numbers that has a shape and a data type. - * - * For performance reasons, functions that create tensors do not necessarily - * perform a copy of the data passed to them (e.g. if the data is passed as a - * `Float32Array`), and changes to the data will change the tensor. This is not - * a feature and is not supported. To avoid this behavior, use the tensor before - * changing the input data or create a copy with `copy = tf.add(yourTensor, 0)`. - * - * See `tf.tensor` for details on how to create a `tf.Tensor`. - * - * @doc {heading: 'Tensors', subheading: 'Classes'} - */ -export declare class Tensor implements TensorInfo { - /** Unique id of this tensor. */ - readonly id: number; - /** - * Id of the bucket holding the data for this tensor. Multiple arrays can - * point to the same bucket (e.g. when calling array.reshape()). - */ - dataId: DataId; - /** The shape of the tensor. */ - readonly shape: ShapeMap[R]; - /** Number of elements in the tensor. */ - readonly size: number; - /** The data type for the array. */ - readonly dtype: DataType; - /** The rank type for the array (see `Rank` enum). */ - readonly rankType: R; - /** Whether this tensor has been globally kept. */ - kept: boolean; - /** The id of the scope this tensor is being tracked in. */ - scopeId: number; - /** The keras mask that some keras layers attach to the tensor */ - kerasMask?: Tensor; - /** - * Number of elements to skip in each dimension when indexing. See - * https://docs.scipy.org/doc/numpy/reference/generated/\ - * numpy.ndarray.strides.html - */ - readonly strides: number[]; - constructor(shape: ShapeMap[R], dtype: DataType, dataId: DataId, id: number); - get rank(): number; - /** - * Returns a promise of `tf.TensorBuffer` that holds the underlying data. - * - * @doc {heading: 'Tensors', subheading: 'Classes'} - */ - buffer(): Promise>; - /** - * Returns a `tf.TensorBuffer` that holds the underlying data. - * @doc {heading: 'Tensors', subheading: 'Classes'} - */ - bufferSync(): TensorBuffer; - /** - * Returns the tensor data as a nested array. The transfer of data is done - * asynchronously. - * - * @doc {heading: 'Tensors', subheading: 'Classes'} - */ - array(): Promise; - /** - * Returns the tensor data as a nested array. The transfer of data is done - * synchronously. - * - * @doc {heading: 'Tensors', subheading: 'Classes'} - */ - arraySync(): ArrayMap[R]; - /** - * Asynchronously downloads the values from the `tf.Tensor`. Returns a - * promise of `TypedArray` that resolves when the computation has finished. - * - * @doc {heading: 'Tensors', subheading: 'Classes'} - */ - data(): Promise; - /** - * Copy the tensor's data to a new GPU resource. Comparing to the `dataSync()` - * and `data()`, this method prevents data from being downloaded to CPU. - * - * For WebGL backend, the data will be stored on a densely packed texture. - * This means that the texture will use the RGBA channels to store value. - * - * For WebGPU backend, the data will be stored on a buffer. There is no - * parameter, so can not use a user-defined size to create the buffer. - * - * @param options: - * For WebGL, - * - customTexShape: Optional. If set, will use the user defined - * texture shape to create the texture. - * - * @returns For WebGL backend, a GPUData contains the new texture and - * its information. - * { - * tensorRef: The tensor that is associated with this texture, - * texture: WebGLTexture, - * texShape: [number, number] // [height, width] - * } - * - * For WebGPU backend, a GPUData contains the new buffer. - * { - * tensorRef: The tensor that is associated with this buffer, - * buffer: GPUBuffer, - * } - * - * Remember to dispose the GPUData after it is used by - * `res.tensorRef.dispose()`. - * - * @doc {heading: 'Tensors', subheading: 'Classes'} - */ - dataToGPU(options?: DataToGPUOptions): GPUData; - /** - * Synchronously downloads the values from the `tf.Tensor`. This blocks the - * UI thread until the values are ready, which can cause performance issues. - * - * @doc {heading: 'Tensors', subheading: 'Classes'} - */ - dataSync(): DataTypeMap[D]; - /** Returns the underlying bytes of the tensor's data. */ - bytes(): Promise; - /** - * Disposes `tf.Tensor` from memory. - * - * @doc {heading: 'Tensors', subheading: 'Classes'} - */ - dispose(): void; - protected isDisposedInternal: boolean; - get isDisposed(): boolean; - throwIfDisposed(): void; - /** - * Prints the `tf.Tensor`. See `tf.print` for details. - * - * @param verbose Whether to print verbose information about the tensor, - * including dtype and size. - * - * @doc {heading: 'Tensors', subheading: 'Classes'} - */ - print(verbose?: boolean): void; - /** - * Returns a copy of the tensor. See `tf.clone` for details. - * @doc {heading: 'Tensors', subheading: 'Classes'} - */ - clone(this: T): T; - /** - * Returns a human-readable description of the tensor. Useful for logging. - * - * @doc {heading: 'Tensors', subheading: 'Classes'} - */ - toString(verbose?: boolean): string; - variable(trainable?: boolean, name?: string, dtype?: DataType): Variable; -} +export { Tensor2D } -/** @doclink Tensor */ -export declare type Tensor1D = Tensor; +export { Tensor3D } -/** @doclink Tensor */ -export declare type Tensor2D = Tensor; +export { Tensor4D } -/** @doclink Tensor */ -export declare type Tensor3D = Tensor; - -/** @doclink Tensor */ -export declare type Tensor4D = Tensor; - -/** - * A mutable object, similar to `tf.Tensor`, that allows users to set values - * at locations before converting to an immutable `tf.Tensor`. - * - * See `tf.buffer` for creating a tensor buffer. - * - * @doc {heading: 'Tensors', subheading: 'Classes'} - */ -declare class TensorBuffer { - dtype: D; - size: number; - shape: ShapeMap[R]; - strides: number[]; - values: DataTypeMap[D]; - constructor(shape: ShapeMap[R], dtype: D, values?: DataTypeMap[D]); - /** - * Sets a value in the buffer at a given location. - * - * @param value The value to set. - * @param locs The location indices. - * - * @doc {heading: 'Tensors', subheading: 'Creation'} - */ - set(value: SingleValueMap[D], ...locs: number[]): void; - /** - * Returns the value in the buffer at the provided location. - * - * @param locs The location indices. - * - * @doc {heading: 'Tensors', subheading: 'Creation'} - */ - get(...locs: number[]): SingleValueMap[D]; - locToIndex(locs: number[]): number; - indexToLoc(index: number): number[]; - get rank(): number; - /** - * Creates an immutable `tf.Tensor` object from the buffer. - * - * @doc {heading: 'Tensors', subheading: 'Creation'} - */ - toTensor(): Tensor; -} - -/** Holds metadata for a given tensor. */ -declare interface TensorInfo { - dataId: DataId; - shape: number[]; - dtype: DataType; -} - -declare interface TensorInfo_2 { - name: string; - shape?: number[]; - dtype: DataType; -} - -/** @docalias TypedArray|Array */ -export declare type TensorLike = TypedArray | number | boolean | string | RecursiveArray | RecursiveArray | RecursiveArray | Uint8Array[]; - -/** Model training configuration. */ -declare interface TrainingConfig { - /** Optimizer used for the model training. */ - optimizer_config: {}; - /** Loss function(s) for the model's output(s). */ - loss: string | string[] | { - [key: string]: string; - }; - /** Metric function(s) for the model's output(s). */ - metrics?: string[] | { - [key: string]: string; - }; - weighted_metrics?: string[]; - sample_weight_mode?: string; - loss_weights?: number[] | { - [key: string]: number; - }; -} - -declare type TypedArray = Float32Array | Int32Array | Uint8Array; - -declare type Url = string | io.IOHandler | io.IOHandlerSync; - -declare type UrlIOHandler = T extends string ? io.IOHandler : T; +export { TensorLike } declare function validateModel(instance: Human | null, model: GraphModel | null, name: string): KernelOps | null; -/** - * A mutable `tf.Tensor`, useful for persisting state, e.g. for training. - * - * @doc {heading: 'Tensors', subheading: 'Classes'} - */ -declare class Variable extends Tensor { - trainable: boolean; - name: string; - constructor(initialValue: Tensor, trainable: boolean, name: string, tensorId: number); - /** - * Assign a new `tf.Tensor` to this variable. The new `tf.Tensor` must have - * the same shape and dtype as the old `tf.Tensor`. - * - * @param newValue New tensor to be assigned to this variable. - * - * @doc {heading: 'Tensors', subheading: 'Classes'} - */ - assign(newValue: Tensor): void; - dispose(): void; -} - /** Possible values for `human.warmup` */ export declare type WarmupEnum = '' | 'none' | 'face' | 'full' | 'body'; @@ -2761,140 +1175,4 @@ export declare interface WebCamConfig { id?: string; } -declare type WeightData = ArrayBuffer | ArrayBuffer[]; - -/** - * Group to which the weight belongs. - * - * - 'optimizer': Weight from a stateful optimizer. - */ -declare type WeightGroup = 'model' | 'optimizer'; - -/** - * Creates a function, which reads a weights manifest JSON configuration, - * fetches the weight files using the specified function and returns them as - * `Tensor`s. - * - * ```js - * // example for creating a nodejs weight loader, which reads the weight files - * // from disk using fs.readFileSync - * - * import * as fs from 'fs' - * - * const fetchWeightsFromDisk = (filePaths: string[]) => - * filePaths.map(filePath => fs.readFileSync(filePath).buffer) - * - * const loadWeights = tf.io.weightsLoaderFactory(fetchWeightsFromDisk) - * - * const manifest = JSON.parse( - * fs.readFileSync('./my_model-weights_manifest').toString() - * ) - * const weightMap = await loadWeights(manifest, './') - * ``` - * @param fetchWeightsFunction The function used for fetching the weight files. - * @returns Weight loading function. - */ -declare function weightsLoaderFactory(fetchWeightsFunction: (fetchUrls: string[]) => Promise): (manifest: WeightsManifestConfig, filePathPrefix?: string, weightNames?: string[]) => Promise; - -/** - * A weight manifest. - * - * The weight manifest consists of an ordered list of weight-manifest groups. - * Each weight-manifest group ("group" for short hereafter) consists of a - * number of weight values stored in a number of paths. - * See the documentation of `WeightManifestGroupConfig` below for more details. - */ -declare type WeightsManifestConfig = WeightsManifestGroupConfig[]; - -/** - * An entry in the weight manifest. - * - * The entry contains specification of a weight. - */ -declare interface WeightsManifestEntry { - /** - * Name of the weight, e.g., 'Dense_1/bias' - */ - name: string; - /** - * Shape of the weight. - */ - shape: number[]; - /** - * Data type of the weight. - */ - dtype: 'float32' | 'int32' | 'bool' | 'string' | 'complex64'; - /** - * Type of the weight. - * - * Optional. - * - * The value 'optimizer' indicates the weight belongs to an optimizer - * (i.e., used only during model training and not during inference). - */ - group?: WeightGroup; - /** - * Information for dequantization of the weight. - */ - quantization?: { - scale?: number; - min?: number; - dtype: 'uint16' | 'uint8' | 'float16'; - }; -} - -/** - * A weight-manifest group. - * - * Consists of an ordered list of weight values encoded in binary format, - * stored in an ordered list of paths. - */ -declare interface WeightsManifestGroupConfig { - /** - * An ordered list of paths. - * - * Paths are intentionally abstract in order to be general. For example, they - * can be relative URL paths or relative paths on the file system. - */ - paths: string[]; - /** - * Specifications of the weights stored in the paths. - */ - weights: WeightsManifestEntry[]; -} - -/** - * Creates an IOHandler that passes saved model artifacts to a callback. - * - * ```js - * function handleSave(artifacts) { - * // ... do something with the artifacts ... - * return {modelArtifactsInfo: {...}, ...}; - * } - * - * const saveResult = model.save(tf.io.withSaveHandler(handleSave)); - * ``` - * - * @param saveHandler A function that accepts a `ModelArtifacts` and returns a - * promise that resolves to a `SaveResult`. - */ -declare function withSaveHandler(saveHandler: (artifacts: ModelArtifacts) => Promise): IOHandler; - -/** - * Creates an IOHandlerSync that passes saved model artifacts to a callback. - * - * ```js - * function handleSave(artifacts) { - * // ... do something with the artifacts ... - * return {modelArtifactsInfo: {...}, ...}; - * } - * - * const saveResult = model.save(tf.io.withSaveHandler(handleSave)); - * ``` - * - * @param saveHandler A function that accepts a `ModelArtifacts` and returns a - * `SaveResult`. - */ -declare function withSaveHandlerSync(saveHandler: (artifacts: ModelArtifacts) => SaveResult): IOHandlerSync; - export { }